diff options
-rw-r--r-- | growup.yaml | 106 | ||||
-rw-r--r-- | spritetex.yaml | 2 | ||||
-rw-r--r-- | src/growup.s | 165 | ||||
-rw-r--r-- | src/levelspecial.cpp | 39 | ||||
-rw-r--r-- | 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
|