From 67ecb74a9c0432af36bccdca69a1c461035a3f6d Mon Sep 17 00:00:00 2001 From: Colin Noga Date: Tue, 17 May 2011 13:03:04 -0500 Subject: temporary fixes and in-progress changes to the size hack --- growup.yaml | 106 ++++++++++++++++----------------- spritetex.yaml | 2 +- src/growup.s | 165 +++++++++++++++++++++++++++++++++++++++------------ src/levelspecial.cpp | 39 ++++++++++-- src/spritetex.S | 2 +- 5 files changed, 216 insertions(+), 98 deletions(-) diff --git a/growup.yaml b/growup.yaml index d6480db..de51ca4 100644 --- a/growup.yaml +++ b/growup.yaml @@ -24,29 +24,29 @@ hooks: # Stand On Top Special Collisions Inits -# - name: Global_StandonTopA -# type: branch_insn -# branch_type: b -# src_addr_pal: 0x800DB27C -# target_func: 'ModifyStandOnTopInitA' -# -# - name: Global_StandonTopB -# type: branch_insn -# branch_type: b -# src_addr_pal: 0x800DB294 -# target_func: 'ModifyStandOnTopInitB' -# -# - name: Global_StandonTopC -# type: branch_insn -# branch_type: b -# src_addr_pal: 0x800DB30C -# target_func: 'ModifyStandOnTopInitC' -# -# - name: Global_StandonTopD -# type: branch_insn -# branch_type: b -# src_addr_pal: 0x800DB32C -# target_func: 'ModifyStandOnTopInitD' + - name: Global_StandonTopA + type: branch_insn + branch_type: b + src_addr_pal: 0x800DB27C + target_func: 'ModifyStandOnTopInitA' + + - name: Global_StandonTopB + type: branch_insn + branch_type: b + src_addr_pal: 0x800DB294 + target_func: 'ModifyStandOnTopInitB' + + - name: Global_StandonTopC + type: branch_insn + branch_type: b + src_addr_pal: 0x800DB30C + target_func: 'ModifyStandOnTopInitC' + + - name: Global_StandonTopD + type: branch_insn + branch_type: b + src_addr_pal: 0x800DB32C + target_func: 'ModifyStandOnTopInitD' @@ -85,22 +85,22 @@ hooks: ## Below are enemy specific hacks to fix issues that arise when resizing -# -# -# - name: FixingPipeSpawnerGoomba -# type: branch_insn -# branch_type: bl -# src_addr_pal: 0x80ABB6D0 -# target_func: 'InheritSettings_A' -# -# -# - name: FixingPipeSpawnerBobomb -# type: branch_insn -# branch_type: bl -# src_addr_pal: 0x80ABB760 -# target_func: 'InheritSettings_A' -# -# + + + - name: FixingPipeSpawnerGoomba + type: branch_insn + branch_type: bl + src_addr_pal: 0x80ABB6AC + target_func: 'InheritSettings_A' + + + - name: FixingPipeSpawnerBobomb + type: branch_insn + branch_type: bl + src_addr_pal: 0x80ABB748 + target_func: 'InheritSettings_A' + + # - name: FixingBlockHit # type: branch_insn # branch_type: bl @@ -176,20 +176,20 @@ hooks: # src_addr_pal: 0x80A6A2CC # target_func: 'InheritSettings_E' # -# -# -# - name: Piranha_Collisions -# type: patch -# data: "41800000" -# addr_pal: 0x802EE81C -# -# -# -# -# -# -# -# + + + - name: Piranha_Collisions + type: patch + data: "41800000" + addr_pal: 0x802EE81C + + + + + + + + # - name: Projectile_Pirahna # type: branch_insn # branch_type: bl diff --git a/spritetex.yaml b/spritetex.yaml index 6f2a177..0d4658c 100644 --- a/spritetex.yaml +++ b/spritetex.yaml @@ -136,7 +136,7 @@ hooks: - name: TEX_GabonRock type: branch_insn branch_type: bl - src_addr_pal: 0x807F8CC8 + src_addr_pal: 0x807F8CD4 target_func: 'TEX_GabonRock' diff --git a/src/growup.s b/src/growup.s index 903b766..91576f9 100644 --- a/src/growup.s +++ b/src/growup.s @@ -18,13 +18,8 @@ .align 4 -.global ModifyGlobalSizes -ModifyGlobalSizes: - -# lhz r10, 8(r3) -# cmpwi r10, 60 -# beq dontDoAnything +LoadFromSettings: # we can trash r10 for now, it's not supposed to be guaranteed anyway lwz r10, 4(r3) # get the sprite settings srwi r10, r10, 20 # get the highest nybble as r10 (maps to Nyb5 in Reggie) @@ -34,23 +29,65 @@ ModifyGlobalSizes: lis r11, LookupTable@h ori r11, r11, LookupTable@l slwi r10, r10, 2 # size *= 4 (size of float) - lfsx f5, r11, r10 # get it from the array + lfsx f8, r11, r10 # get it from the array + blr + + +ModelNoChanges: + lwz r4, 0x47C(r3) + lfs f0, 0xDC(r4) + stfs f0, 0xDC(r3) + stfs f0, 0x464(r4) + lfs f0, 0xE0(r4) + stfs f0, 0xE0(r3) + stfs f0, 0x468(r4) + lfs f0, 0xE4(r4) + stfs f0, 0xE4(r3) + stfs f0, 0x46C(r4) + blr + + +.global ModifyGlobalSizes +ModifyGlobalSizes: + + # Go back if SizerOn is 0 (off) + lis r10, SizerOn@h + ori r10, r10, SizerOn@l + lbz r10, 0(r10) + cmpwi r10, 0 + beq ModelNoChanges + + # Load 1 + lis r10, One@h + ori r10, r10, One@l + lfs f7, 0(r10) + + # Load Global + lis r11, GlobalSpriteSize@h + ori r11, r11, GlobalSpriteSize@l + lfs f8, 0(r11) + + # If Global == 1.0, + fcmpu cr0, f7, f8 + mflr r9 + beql cr0, LoadFromSettings + mtlr r9 # Modify the actor lwz r4, 0x47C(r3) lfs f0, 0xDC(r4) - fmuls f0, f0, f5 + fmuls f0, f0, f8 stfs f0, 0xDC(r3) stfs f0, 0x464(r4) lfs f0, 0xE0(r4) - fmuls f0, f0, f5 + fmuls f0, f0, f8 stfs f0, 0xE0(r3) stfs f0, 0x468(r4) lfs f0, 0xE4(r4) - fmuls f0, f0, f5 + fmuls f0, f0, f8 stfs f0, 0xE4(r3) stfs f0, 0x46C(r4) @@ -87,25 +124,58 @@ ModifyGlobalSizes: - -#dontDoAnything: -# blr - +CollisionNoChanges: + stw r4, 4(r3) + li r0, 0 + lfs f0, 0(r5) + stfs f0, 0x1C(r3) + lfs f0, 4(r5) + stfs f0, 0x20(r3) + lfs f0, 8(r5) + stfs f0, 0x24(r3) + lfs f0, 0xC(r5) + stfs f0, 0x28(r3) + lbz r4, 0x10(r5) + stb r4, 0x2C(r3) + lbz r4, 0x11(r5) + stb r4, 0x2D(r3) + lwz r4, 0x14(r5) + stw r4, 0x30(r3) + lwz r4, 0x18(r5) + stw r4, 0x34(r3) + lhz r4, 0x1C(r5) + sth r4, 0x38(r3) + lwz r4, 0x20(r5) + stw r4, 0x3C(r3) + stb r0, 0xA1(r3) + blr .global ModifyCollision ModifyCollision: - # we can trash r10 for now, it's not supposed to be guaranteed anyway - lwz r10, 4(r4) # get the sprite settings - srwi r10, r10, 20 # get the highest nybble as r10 (maps to Nyb5 in Reggie) - andi. r10, r10, 0xF - - # first off, get the value from the lookup table - lis r11, LookupTable@h - ori r11, r11, LookupTable@l - slwi r10, r10, 2 # size *= 4 (size of float) - lfsx f8, r11, r10 # get it from the array + # Go back if SizerOn is 0 (off) + lis r10, SizerOn@h + ori r10, r10, SizerOn@l + lbz r10, 0(r10) + cmpwi r10, 0 + beq CollisionNoChanges + + # Load 1 + lis r10, One@h + ori r10, r10, One@l + lfs f7, 0(r10) + + # Load Global + lis r11, GlobalSpriteSize@h + ori r11, r11, GlobalSpriteSize@l + lfs f8, 0(r11) + + # If Global == 1.0, + fcmpu cr0, f7, f8 + mflr r9 + beql cr0, LoadFromSettings + mtlr r9 #This is the old ActivePhysics_InitWithStruct function. stw r4, 4(r3) @@ -153,7 +223,8 @@ ModifyCollision: ModifyStandOnTopInitA: # we can trash r10 for now, it's not supposed to be guaranteed anyway - lwz r10, 4(r4) # get the sprite settings + lwz r10, 4(r3) + lwz r10, 4(r10) # get the sprite settings srwi r10, r10, 20 # get the highest nybble as r10 (maps to Nyb5 in Reggie) andi. r10, r10, 0xF @@ -183,7 +254,8 @@ ModifyStandOnTopInitA: ModifyStandOnTopInitB: # we can trash r10 for now, it's not supposed to be guaranteed anyway - lwz r10, 4(r4) # get the sprite settings + lwz r10, 4(r3) + lwz r10, 4(r10) # get the sprite settings srwi r10, r10, 20 # get the highest nybble as r10 (maps to Nyb5 in Reggie) andi. r10, r10, 0xF @@ -238,7 +310,8 @@ ModifyStandOnTopInitD: # we can trash r10 for now, it's not supposed to be guaranteed anyway - lwz r10, 4(r4) # get the sprite settings + lwz r10, 4(r3) + lwz r10, 4(r10) # get the sprite settings srwi r10, r10, 20 # get the highest nybble as r10 (maps to Nyb5 in Reggie) andi. r10, r10, 0xF @@ -283,7 +356,8 @@ ModifyStandOnTopInitD: ModifyRiderInitA: # we can trash r10 for now, it's not supposed to be guaranteed anyway - lwz r10, 4(r4) # get the sprite settings + lwz r10, 4(r3) + lwz r10, 4(r10) # get the sprite settings srwi r10, r10, 20 # get the highest nybble as r10 (maps to Nyb5 in Reggie) andi. r10, r10, 0xF @@ -316,7 +390,8 @@ ModifyRiderInitA: ModifyRiderInitB: # we can trash r10 for now, it's not supposed to be guaranteed anyway - lwz r10, 4(r4) # get the sprite settings + lwz r10, 4(r3) + lwz r10, 4(r10) # get the sprite settings srwi r10, r10, 20 # get the highest nybble as r10 (maps to Nyb5 in Reggie) andi. r10, r10, 0xF @@ -350,7 +425,8 @@ ModifyRiderInitB: ModifyRiderInitC: # we can trash r10 for now, it's not supposed to be guaranteed anyway - lwz r10, 4(r4) # get the sprite settings + lwz r10, 4(r3) + lwz r10, 4(r10) # get the sprite settings srwi r10, r10, 20 # get the highest nybble as r10 (maps to Nyb5 in Reggie) andi. r10, r10, 0xF @@ -377,7 +453,8 @@ ModifyRiderInitC: ModifyRiderInitD: # we can trash r10 for now, it's not supposed to be guaranteed anyway - lwz r10, 4(r4) # get the sprite settings + lwz r10, 4(r3) + lwz r10, 4(r10) # get the sprite settings srwi r10, r10, 20 # get the highest nybble as r10 (maps to Nyb5 in Reggie) andi. r10, r10, 0xF @@ -404,15 +481,9 @@ ModifyRiderInitD: .global InheritSettings_A InheritSettings_A: - li r4, 0 + li r0, 0 blr - lwz r4, 4(r0) - - li r10, 0 - stw r10, 8(r4) - - blr .global InheritSettings_B @@ -500,6 +571,7 @@ PiranhaFirePos: + .global PipeGeneratorSpawn PipeGeneratorSpawn: @@ -520,6 +592,23 @@ LakituBomb: .data + +One: + .float 1.0 + +.global GlobalSpriteSize +GlobalSpriteSize: + .float 1.0 + +.global GlobalRiderSize +GlobalRiderSize: + .float 1.0 + +.global SizerOn +SizerOn: + .byte 0 + + LookupTable: .float 1, 1, 1, 1, 0.25, 0.5, 0.75, 1.25, 1.5, 2, 2.5, 3, 4, 5, 8, 10 diff --git a/src/levelspecial.cpp b/src/levelspecial.cpp index 245dc87..d92c5ce 100644 --- a/src/levelspecial.cpp +++ b/src/levelspecial.cpp @@ -35,6 +35,15 @@ extern float MarioJumpArc; extern float MiniMarioJumpArc; extern float MarioSize; +extern float GlobalSpriteSize; +extern float GlobalRiderSize; +extern char SizerOn; + + +float GlobalSizeFloatModifications [] = {1, 0.25, 0.5, 0.75, 1.25, 1.5, 1.75, 2, 2.5, 3, 4, 5, 6, 7, 8, 10 }; +float GlobalRiderFloatModifications [] = {1, 0.6, 0.7, 0.9, 1, 1, 1, 1.1, 1.25, 1.5, 2, 2.5, 3, 3.5, 4, 5}; + + extern "C" void GetSpecificPlayerActor(int number); void LevelSpecial_Update(LevelSpecial *self); @@ -55,6 +64,9 @@ bool ResetAfterLevel(void) { MarioJumpArc = 2.5; MiniMarioJumpArc = 2.5; MarioSize = 1.0; + GlobalSpriteSize = 1.0; + GlobalRiderSize = 1.0; + SizerOn = 0; return true; } @@ -133,6 +145,18 @@ void LevelSpecial_Update(LevelSpecial *self) { else //Half-Pint MarioSize = 0.25; break; + + + case 5: // Global Enemy Size + SizerOn = 1; + + GlobalSpriteSize = GlobalSizeFloatModifications[self->effect]; + GlobalRiderSize = GlobalRiderFloatModifications[self->effect]; + + + case 6: // Individual Enemy Size + SizerOn = 1; + default: break; @@ -165,6 +189,15 @@ void LevelSpecial_Update(LevelSpecial *self) { MarioSize = 1.0; break; + case 5: // Global Enemy Size + SizerOn = 0; + + GlobalSpriteSize = 1.0; + GlobalRiderSize = 1.0; + + case 6: // Individual Enemy Size + SizerOn = 0; + default: break; } @@ -178,8 +211,4 @@ void LevelSpecial_Update(LevelSpecial *self) { self->lastEvState = newEvState; -} - - - - +} diff --git a/src/spritetex.S b/src/spritetex.S index 0f89cd5..bd13428 100644 --- a/src/spritetex.S +++ b/src/spritetex.S @@ -171,7 +171,7 @@ TEX_SpringBlock: .global TEX_Coaster TEX_Coaster: - lwz r5, 4(r31) + lwz r5, 4(r3) srwi r5, r5, 24 andi. r5, r5, 0xF b GetTexFilenameForR5 -- cgit v1.2.3