summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/poweruphax.S1474
1 files changed, 746 insertions, 728 deletions
diff --git a/src/poweruphax.S b/src/poweruphax.S
index 9a334f6..e028eb9 100644
--- a/src/poweruphax.S
+++ b/src/poweruphax.S
@@ -1,728 +1,746 @@
-.text
-.align 4
-.set sp, 1
-
-.extern returnFromGPSFASixth
-.extern daEnItem_c__GetWhetherPlayerCanGetPowerupOrNot
-.extern dAcPy_c__ChangePowerupWithAnimation
-.extern PlayPlayerSound
-.extern CreateActor
-.extern PlayerProjectileShooting
-.extern Actor_SearchByName
-.extern SomeTable_802F5440
-.extern SomeTable_802F5580
-.extern SomeTable_802F56C0
-.extern BlahTable
-.extern continuePlumberSetPowerupTexture
-.extern doneSettingThePowerupTexture
-.extern doneSettingThePowerupTexture2
-
-#ifndef __MWERKS__
-.set r0,0; .set r1,1; .set r2,2; .set r3,3; .set r4,4
-.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
-.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
-.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
-.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
-.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
-.set r30,30; .set r31,31; .set f0,0; .set f2,2; .set f3,3
-.set f1,1; .set f30,30; .set f31,31
-#endif
-
-.global GetInfoFromDumbTable
-GetInfoFromDumbTable:
- lis r3, SomeTable@h
- ori r3, r3, SomeTable@l
-
- slwi r4, r4, 2
- slwi r0, r5, 6
-
- lwzx r3, r3, r4
- add r3, r3, r0
- blr
-
-
-
-
-.global FukidashiFix
-FukidashiFix:
- lis r7, ZeroFloat@h
- ori r7, r7, ZeroFloat@l
-
- lis r8, FukidashiTable2@h
- ori r8, r8, FukidashiTable2@l
-
- mulli r6, r4, 0x20
- slwi r0, r5, 2
- add r0, r0, r6
-
- lfs f0, 0(r7)
- lfsx f1, r8, r0
-
- stfs f0, 0x1DC(r3)
- stfs f1, 0x1E0(r3)
- stfs f0, 0x1E4(r3)
-
- blr
-
-
-
-
-.global PlayerGetHeight
-PlayerGetHeight:
- lwz r0, 0x14D4(r3)
-
- lwz r4, 0x1090(r3)
- slwi r4, r4, 3
-
- cmpwi r0, 0
- beq useNormal
- cmpwi r0, 1
- bne useDucking
-
-useNormal:
- lis r3, PlayerHeightsNormal@h
- ori r3, r3, PlayerHeightsNormal@l
- b gotOffset
-
-useDucking:
- lis r3, PlayerHeightsDucking@h
- ori r3, r3, PlayerHeightsDucking@l
-
-gotOffset:
- lfsx f1, r3, r4
- blr
-
-
-
-.global WtfEver
-WtfEver:
- lis r3, WtfEverTable@h
- ori r3, r3, WtfEverTable@l
- lfsx f0, r3, r0
- blr
-
-
-
-.global YetAnother
-YetAnother:
- lis r3, YetAnotherTable@h
- ori r3, r3, YetAnotherTable@l
- lfsx f0, r3, r0
- blr
-
-
-
-
-.global GetWeirdScaleTable
-GetWeirdScaleTable:
- lis r5, WeirdScaleTable@h
- ori r5, r5, WeirdScaleTable@l
- lfsx f1, r5, r0
- blr
-
-
-
-
-
-.global GetAsdfTable
-GetAsdfTable:
- extsb r0, r4
- cmpwi r0, -1
- bne dontGetThisOne
-
- lwz r0, 0x1090(r3)
- extsb r4, r0
-
-dontGetThisOne:
- extsb r0, r4
-
- lis r3, AsdfTable@h
- ori r3, r3, AsdfTable@l
- lbzx r3, r3, r0
-
- blr
-
-
-
-
-
-.global GetBlahTableOffset
-GetBlahTableOffset:
- lis r5, BlahTableOffsets@h
- ori r5, r5, BlahTableOffsets@l
- lwzx r30, r5, r4
- blr
-
-
-.global DealWithBlahTable
-DealWithBlahTable:
- lis r5, BlahTableOffsets@h
- ori r5, r5, BlahTableOffsets@l
-
- # points to BlahTable
- lis r4, BlahTable@h
- ori r4, r4, BlahTable@l
-
- # get blahtableoffset entry based on powerup
- lwz r0, 0x1090(r3)
- slwi r0, r0, 2
- lwzx r0, r5, r0
-
- # now get the entry from the blahtable
- slwi r0, r0, 2
- lwzx r4, r4, r0
-
- # do shit here
-
- lfs f3, 0(r4)
- stfs f3, 0x14E4(r3)
- stfs f3, 0x164(r3)
-
- lfs f1, 0x2A70(r3)
- lfs f0, 0x2A74(r3)
-
- lfs f2, 4(r4)
- fadds f1, f2, f1
- fadds f0, f0, f1
- stfs f0, 0x14E8(r3)
- stfs f0, 0x168(r3)
-
- lfs f0, 0x8(r4)
- lfs f1, 0xC(r4)
- stfs f0, 0x16C(r3)
- stfs f1, 0x170(r3)
-
- # hope I did this right
- blr
-
-
-
-
-
-.global GetPowerupScaleFloatAddr_r6_trash_r0_valshl2_r4_dest
-GetPowerupScaleFloatAddr_r6_trash_r0_valshl2_r4_dest:
- lis r6, PowerupScaleFloats@h
- ori r6, r6, PowerupScaleFloats@l
- add r4, r6, r0
- blr
-
-.global GetPowerupScaleFloatAddr_r6_trash_r0_valshl2_r3_dest
-GetPowerupScaleFloatAddr_r6_trash_r0_valshl2_r3_dest:
- lis r6, PowerupScaleFloats@h
- ori r6, r6, PowerupScaleFloats@l
- add r3, r6, r0
- blr
-
-.global GetPowerupScaleFloatAddr_r8_trash_r0_valshl2_r7_dest
-GetPowerupScaleFloatAddr_r8_trash_r0_valshl2_r7_dest:
- lis r8, PowerupScaleFloats@h
- ori r8, r8, PowerupScaleFloats@l
- add r7, r8, r0
- blr
-
-.global GetPowerupScaleFloatAddr_fixForSixth
-GetPowerupScaleFloatAddr_fixForSixth:
- lis r5, PowerupScaleFloats@h
- ori r5, r5, PowerupScaleFloats@l
- add r4, r5, r4
- b returnFromGPSFASixth
-
-
-
-.global PlumberSetPowerupFix
-PlumberSetPowerupFix:
- lbz r0, 0x152(r31) # get powerup id
-
- cmpwi r0, 2
- beq doFireTex
-
- cmpwi r0, 6
- beq doIceTex
-
- cmpwi r0, 7
- beq doHammerTex
-
- li r4, 0
- b gotTexID
-
-doFireTex:
- li r4, 1
- b gotTexID
-
-doIceTex:
- li r4, 2
- b gotTexID
-
-doHammerTex:
- li r4, 3
-
-gotTexID:
- lwz r12, 0(r31)
- mr r3, r31
- lwz r12, 0x34(r12)
- mtctr r12
- bctrl
-
- b doneSettingThePowerupTexture
-
-
-
-.global PlumberSetPowerupFix2
-PlumberSetPowerupFix2:
- cmpwi r31, 2
- beq doFireTex2
-
- cmpwi r31, 6
- beq doIceTex2
-
- cmpwi r31, 7
- beq doHammerTex2
-
- li r4, 0
- b gotTexID2
-
-doFireTex2:
- li r4, 1
- b gotTexID2
-
-doIceTex2:
- li r4, 2
- b gotTexID2
-
-doHammerTex2:
- li r4, 3
-
-gotTexID2:
- lwz r3, 0x2A64(r30)
- lwz r12, 0(r3)
- lwz r12, 0x34(r12)
- mtctr r12
- bctrl
-
- b doneSettingThePowerupTexture2
-
-
-
-
-.global PlumberSetPowerupTextureDebug
-.extern OSReport
-.extern continuePlumberSetPowerupTextureDebug
-PlumberSetPowerupTextureDebug:
- stwu sp, -0x30(sp)
- mflr r0
- stw r0, 0x34(sp)
- stw r3, 0x20(sp)
- stw r4, 0x24(sp)
-
- mr r6, r0
- mr r5, r4
- mr r4, r3
- lis r3, PowerupTexDebugStr@h
- ori r3, r3, PowerupTexDebugStr@l
- crclr 4*cr1+eq
- bl OSReport
-
- lwz r3, 0x20(sp)
- lwz r4, 0x24(sp)
- lwz r0, 0x34(sp)
- mtlr r0
- addi sp, sp, 0x30
-
- stwu sp, -0x30(sp)
-
- b continuePlumberSetPowerupTextureDebug
-
-
-
-
-
-.global PlumberSetPowerupTextureFix
-PlumberSetPowerupTextureFix:
- stb r4, 0x153(r3)
-
- lis r5, PowerupTextures@h
- ori r5, r5, PowerupTextures@l
-
- slwi r4, r4, 2
- lfsx f31, r5, r4
-
- b continuePlumberSetPowerupTexture
-
-
-
-.global SetHammerToEnItemDCA
-SetHammerToEnItemDCA:
- bl daEnItem_c__GetWhetherPlayerCanGetPowerupOrNot
- cmpwi r3, 1
- bne DontSetHammer
-
- li r0, 5
- sth r0, 0xDCA(r31)
-
-DontSetHammer:
- lwz r0, 0x14(sp)
- lwz r31, 0xC(sp)
- mtlr r0
- addi sp, sp, 0x10
- blr
-
-
-.global SetHammerToEnItemDCASpecial
-SetHammerToEnItemDCASpecial:
- cmplwi r4, 0x19
- b _not19
- li r0, 0xD
- sth r0, 0xDCA(r3)
-_not19:
- cmplwi r4, 6
- bnelr
- li r0, 5
- sth r0, 0xDCA(r3)
- blr
-
-
-#.global EnItem_BindAnimation_Fix
-#EnItem_BindAnimation_Fix:
-# lhz r0, 0xDCA(r3)
-# cmpwi r0, 5
-# beqlr
-# stwu sp, -0x20(sp)
-# b EnItem_BindAnimation_Continued
-
-
-.global WeirdAnimLoadHack
-WeirdAnimLoadHack:
- cmplwi r4, 5 #hammersuit
- beqlr
- cmplwi r4, 6 #1up
- beqlr
- # neither of those succeeded
- crclr 4*cr0+eq
- blr
-
-
-
-.global TryToGiveMarioHammerSuit
-TryToGiveMarioHammerSuit:
- stwu sp, -0x10(sp)
- mflr r0
- stw r0, 0x14(sp)
-
- # check the obtained item number
- cmplwi r3, 5
- bne IsntGettingHammerSuit
-
- # check the current player powerup
- cmplwi r4, 7
- bne DontHaveHammerSuit
-
- li r28, 0
- li r29, 2
- b ReturnFromTTGMHS
-
-DontHaveHammerSuit:
- mr r3, r30
- li r4, 7
- bl dAcPy_c__ChangePowerupWithAnimation
-
- cmpwi r3, 0
- beq ReturnFromTTGMHS
-
- li r29, 1
-
-IsntGettingHammerSuit:
-ReturnFromTTGMHS:
- # end of function
- lwz r0, 0x14(sp)
- mtlr r0
- addi sp, sp, 0x10
-
- # leftover instruction from what we replaced to add the bl
- cmpwi r29, 0
- blr
-
-
-
-.global ThrowHammer
-ThrowHammer:
- # continues on from PlayerProjectileShooting
-
- # get powerup
- lwz r3, 0x1090(r30)
- cmplwi r3, 7
- bne ReturnFromThrowHammer
-
- mr r3, r30
- li r4, 498
- li r5, 0
- bl PlayPlayerSound
-
- li r3, 0x73 # Hammer
- li r4, 0 # Settings
- addi r5, sp, 0x2C # Position
- li r6, 0 # Rotation
- lbz r7, 0x38F(r30) # Layer
- bl CreateActor
-
- # Store player ID
- lwz r4, 0(r30)
- stw r4, 0x450(r3)
-
- # store player number, but add 0x100 to differentiate it from 0
- lbz r4, 0x38D(r30)
- addi r4, r4, 0x100
- stw r4, 0x458(r3)
-
- # Fix scale
- lis r4, OneFloat@h
- ori r4, r4, OneFloat@l
- lfs f0, 0(r4)
- stfs f0, 0xDC(r3)
- stfs f0, 0xE0(r3)
- stfs f0, 0xE4(r3)
-
- mr r4, r30
- lwz r12, 0x60(r3)
- lwz r12, 0x8C(r12)
- mtctr r12
- bctrl
-
-ReturnFromThrowHammer:
- lwz r0, 0xC4(sp)
- psq_l f31, 0xB8(sp), 1, 0
- lfd f31, 0xB0(sp)
- psq_l f30, 0xA8(sp), 1, 0
- lfd f30, 0xA0(sp)
- lwz r31, 0x9C(sp)
- lwz r30, 0x98(sp)
- mtlr r0
- addi sp, sp, 0xC0
- blr
-
-
-
-.global MoreProjectileStuff_Fix
-MoreProjectileStuff_Fix:
- lwz r3, 0x1090(r31)
- cmplwi r3, 7
- bne ReturnFromMPSFix
-
- mr r3, r31
- li r4, 1
- bl PlayerProjectileShooting
-
-ReturnFromMPSFix:
- lwz r0, 0x14(sp)
- lwz r31, 0xC(sp)
- mtlr r0
- addi sp, sp, 0x10
- blr
-
-
-
-.global ProjectileShootCheck_Fix
-ProjectileShootCheck_Fix:
- lwz r3, 0x1090(r31)
- cmplwi r3, 7
- bne Return0fromPSCFix
-
- lbz r3, 0x38D(r31)
- li r4, 0
- extsb r3, r3
- bl CheckHammerLimit
-
- cmpwi r3, 0
- beq Return0fromPSCFix
-
- b Return1fromPSCFix
-
-Return0fromPSCFix:
- li r3, 0
- b ReturnFromPSCFix
-
-Return1fromPSCFix:
- li r3, 1
-
-ReturnFromPSCFix:
- lwz r0, 0x14(sp)
- lwz r31, 0xC(sp)
- mtlr r0
- addi sp, sp, 0x10
- blr
-
-
-.global CheckHammerLimit
-CheckHammerLimit:
- stwu sp, -0x10(sp)
- mflr r0
- stw r0, 0x14(sp)
- stw r31, 0xC(sp)
- stw r30, 0x8(sp)
-
- # r30 = player number
- mr r30, r3
- addi r30, r30, 0x100
-
- # r31 = hammer count so far
- li r31, 0
-
- # search for every Hammer
-
- li r3, 0
- b startOrContinueLoop
-loop:
-
- lwz r4, 0x458(r3)
- cmpw r4, r30
- bne startOrContinueLoop
-
- addi r31, r31, 1
-
-startOrContinueLoop:
- mr r4, r3
- li r3, 0x73
- bl Actor_SearchByName
-
- cmpwi r3, 0
- bne loop
-
- # now if the current count is >= 2, return 0
- # otherwise return 1
- cmpwi r31, 2
- bge tooManyHammers
-
- li r3, 1
- b gotHammerStatus
-
-tooManyHammers:
- li r3, 0
-
-gotHammerStatus:
- lwz r0, 0x14(sp)
- lwz r31, 0xC(sp)
- lwz r30, 0x8(sp)
- mtlr r0
- addi sp, sp, 0x10
- blr
-
-
-
-.global FixPowerupSound
-FixPowerupSound:
- # WARNING! This is a bad, bad, bad hack.
- # I was too lazy to add anything to the linker script, so...
-
- # We branch at 80141334, so our LR is 80141338
- # We need to jump to 80141384
- mflr r3
- addi r3, r3, 0x4C
- mtlr r3
-
- lwz r0, 0x1090(r29)
- lis r3, PowerupSounds@h
- ori r3, r3, PowerupSounds@l
- slwi r4, r0, 2
- lwzx r4, r3, r4
- mr r3, r29
- li r5, 0
-
- blr
-
-
-
-
-
-.data
-
-PowerupSounds:
- .long 273, 274, 274, 275, 276, 277, 274, 274
-
-SomeTable:
- .long SomeTable_802F5580
- .long SomeTable_802F56C0
- .long SomeTable_802F56C0
- .long SomeTable_802F5440
- .long SomeTable_802F56C0
- .long SomeTable_802F56C0
- .long SomeTable_802F56C0
- .long SomeTable_802F56C0
-
-ZeroFloat:
- .float 0.0
-
-OneFloat:
- .float 1.0
-
-FukidashiTable2:
- .float 20.0, 32.0, 32.0, 12.0, 38.0, 33.0, 32.0, 32.0
- .float 20.0, 34.0, 34.0, 12.0, 39.0, 35.0, 34.0, 34.0
- .float 20.0, 29.0, 29.0, 11.0, 34.0, 29.0, 29.0, 29.0
- .float 20.0, 29.0, 29.0, 11.0, 34.0, 29.0, 29.0, 29.0
-
-PlayerHeightsNormal:
- .float 16.0, 27.0, 27.0, 12.0, 27.0, 27.0, 27.0, 27.0
-
-PlayerHeightsDucking:
- .float 13.0, 21.0, 21.0, 9.0, 21.0, 21.0, 21.0, 21.0
-
-WtfEverTable:
- .float 4.5, 10.0, 10.0, 1.0, 10.0, 9.0, 10.0, 10.0
-
-YetAnotherTable:
- .float 0.0, -4.0, -4.0, 4.0, -6.0, -2.0, -4.0, -4.0
-
-WeirdScaleTable:
- .float 16.0, 31.0, 31.0, 6.0, 34.0, 31.0, 31.0, 31.0
-
-AsdfTable:
- .byte 1, 2, 2, 0, 2, 2, 2, 2
-
-BlahTableOffsets:
- .long 1, 2, 2, 0, 3, 2, 2, 2
-
-PowerupScaleFloats:
- .long 0xDEADBEEF, 0xDEADBEEF # padding
- .float 1.0
- .float 1.0
- .float 1.0
- .float 0.6
- .float 1.0
- .float 1.0
- .float 1.0
- .float 1.0
-
-PowerupTextures:
- .float 0.0
- .float 1.0
- .float 2.0
- .float 3.0
-
-.global BrosArcFileName
-BrosArcFileName:
- .string "bros"
-
-.global I_hammerArcFilename
-I_hammerArcFilename:
- .string "I_hammer"
-
-.global I_hammerResFile
-I_hammerResFile:
-# .string "g3d/I_hammer.brres"
- .string "g3d/I_fireflower.brres"
-
-.global I_hammerModelName
-I_hammerModelName:
-# .string "I_hammer"
- .string "I_fireflower"
-
-
-PowerupTexDebugStr:
- .string "Plumber::SetPowerupTexture() called on class %p with texnum %d lr=%p\n"
-
-#.global BrosModelFilename
-#BrosModelFilename:
-# .string "g3d/bros.brres"
-
-#.global HammerModelName
-#HammerModelName:
-# .string "bros_hammer"
+.text
+.align 4
+.set sp, 1
+
+.extern returnFromGPSFASixth
+.extern daEnItem_c__GetWhetherPlayerCanGetPowerupOrNot
+.extern dAcPy_c__ChangePowerupWithAnimation
+.extern PlayPlayerSound
+.extern CreateActor
+.extern PlayerProjectileShooting
+.extern Actor_SearchByName
+.extern SomeTable_802F5440
+.extern SomeTable_802F5580
+.extern SomeTable_802F56C0
+.extern BlahTable
+.extern continuePlumberSetPowerupTexture
+.extern doneSettingThePowerupTexture
+.extern doneSettingThePowerupTexture2
+.extern returnFromPowerupSoundChange
+
+#ifndef __MWERKS__
+.set r0,0; .set r1,1; .set r2,2; .set r3,3; .set r4,4
+.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
+.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
+.set r30,30; .set r31,31; .set f0,0; .set f2,2; .set f3,3
+.set f1,1; .set f30,30; .set f31,31
+#endif
+
+.global GetInfoFromDumbTable
+GetInfoFromDumbTable:
+ lis r3, SomeTable@h
+ ori r3, r3, SomeTable@l
+
+ slwi r4, r4, 2
+ slwi r0, r5, 6
+
+ lwzx r3, r3, r4
+ add r3, r3, r0
+ blr
+
+
+
+
+.global FukidashiFix
+FukidashiFix:
+ lis r7, ZeroFloat@h
+ ori r7, r7, ZeroFloat@l
+
+ lis r8, FukidashiTable2@h
+ ori r8, r8, FukidashiTable2@l
+
+ mulli r6, r4, 0x20
+ slwi r0, r5, 2
+ add r0, r0, r6
+
+ lfs f0, 0(r7)
+ lfsx f1, r8, r0
+
+ stfs f0, 0x1DC(r3)
+ stfs f1, 0x1E0(r3)
+ stfs f0, 0x1E4(r3)
+
+ blr
+
+
+
+
+.global PlayerGetHeight
+PlayerGetHeight:
+ lwz r0, 0x14D4(r3)
+
+ lwz r4, 0x1090(r3)
+ slwi r4, r4, 3
+
+ cmpwi r0, 0
+ beq useNormal
+ cmpwi r0, 1
+ bne useDucking
+
+useNormal:
+ lis r3, PlayerHeightsNormal@h
+ ori r3, r3, PlayerHeightsNormal@l
+ b gotOffset
+
+useDucking:
+ lis r3, PlayerHeightsDucking@h
+ ori r3, r3, PlayerHeightsDucking@l
+
+gotOffset:
+ lfsx f1, r3, r4
+ blr
+
+
+
+.global WtfEver
+WtfEver:
+ lis r3, WtfEverTable@h
+ ori r3, r3, WtfEverTable@l
+ lfsx f0, r3, r0
+ blr
+
+
+
+.global YetAnother
+YetAnother:
+ lis r3, YetAnotherTable@h
+ ori r3, r3, YetAnotherTable@l
+ lfsx f0, r3, r0
+ blr
+
+
+
+
+.global GetWeirdScaleTable
+GetWeirdScaleTable:
+ lis r5, WeirdScaleTable@h
+ ori r5, r5, WeirdScaleTable@l
+ lfsx f1, r5, r0
+ blr
+
+
+
+
+
+.global GetAsdfTable
+GetAsdfTable:
+ extsb r0, r4
+ cmpwi r0, -1
+ bne dontGetThisOne
+
+ lwz r0, 0x1090(r3)
+ extsb r4, r0
+
+dontGetThisOne:
+ extsb r0, r4
+
+ lis r3, AsdfTable@h
+ ori r3, r3, AsdfTable@l
+ lbzx r3, r3, r0
+
+ blr
+
+
+
+
+
+.global GetBlahTableOffset
+GetBlahTableOffset:
+ lis r5, BlahTableOffsets@h
+ ori r5, r5, BlahTableOffsets@l
+ lwzx r30, r5, r4
+ blr
+
+
+.global DealWithBlahTable
+DealWithBlahTable:
+ lis r5, BlahTableOffsets@h
+ ori r5, r5, BlahTableOffsets@l
+
+ # points to BlahTable
+ lis r4, BlahTable@h
+ ori r4, r4, BlahTable@l
+
+ # get blahtableoffset entry based on powerup
+ lwz r0, 0x1090(r3)
+ slwi r0, r0, 2
+ lwzx r0, r5, r0
+
+ # now get the entry from the blahtable
+ slwi r0, r0, 2
+ lwzx r4, r4, r0
+
+ # do shit here
+
+ lfs f3, 0(r4)
+ stfs f3, 0x14E4(r3)
+ stfs f3, 0x164(r3)
+
+ lfs f1, 0x2A70(r3)
+ lfs f0, 0x2A74(r3)
+
+ lfs f2, 4(r4)
+ fadds f1, f2, f1
+ fadds f0, f0, f1
+ stfs f0, 0x14E8(r3)
+ stfs f0, 0x168(r3)
+
+ lfs f0, 0x8(r4)
+ lfs f1, 0xC(r4)
+ stfs f0, 0x16C(r3)
+ stfs f1, 0x170(r3)
+
+ # hope I did this right
+ blr
+
+
+
+
+
+.global GetPowerupScaleFloatAddr_r6_trash_r0_valshl2_r4_dest
+GetPowerupScaleFloatAddr_r6_trash_r0_valshl2_r4_dest:
+ lis r6, PowerupScaleFloats@h
+ ori r6, r6, PowerupScaleFloats@l
+ add r4, r6, r0
+ blr
+
+.global GetPowerupScaleFloatAddr_r6_trash_r0_valshl2_r3_dest
+GetPowerupScaleFloatAddr_r6_trash_r0_valshl2_r3_dest:
+ lis r6, PowerupScaleFloats@h
+ ori r6, r6, PowerupScaleFloats@l
+ add r3, r6, r0
+ blr
+
+.global GetPowerupScaleFloatAddr_r8_trash_r0_valshl2_r7_dest
+GetPowerupScaleFloatAddr_r8_trash_r0_valshl2_r7_dest:
+ lis r8, PowerupScaleFloats@h
+ ori r8, r8, PowerupScaleFloats@l
+ add r7, r8, r0
+ blr
+
+.global GetPowerupScaleFloatAddr_fixForSixth
+GetPowerupScaleFloatAddr_fixForSixth:
+ lis r5, PowerupScaleFloats@h
+ ori r5, r5, PowerupScaleFloats@l
+ add r4, r5, r4
+ b returnFromGPSFASixth
+
+
+
+.global PlumberSetPowerupFix
+PlumberSetPowerupFix:
+ lbz r0, 0x152(r31) # get powerup id
+
+ cmpwi r0, 2
+ beq doFireTex
+
+ cmpwi r0, 6
+ beq doIceTex
+
+ cmpwi r0, 7
+ beq doHammerTex
+
+ li r4, 0
+ b gotTexID
+
+doFireTex:
+ li r4, 1
+ b gotTexID
+
+doIceTex:
+ li r4, 2
+ b gotTexID
+
+doHammerTex:
+ li r4, 3
+
+gotTexID:
+ lwz r12, 0(r31)
+ mr r3, r31
+ lwz r12, 0x34(r12)
+ mtctr r12
+ bctrl
+
+ b doneSettingThePowerupTexture
+
+
+
+.global PlumberSetPowerupFix2
+PlumberSetPowerupFix2:
+ cmpwi r31, 2
+ beq doFireTex2
+
+ cmpwi r31, 6
+ beq doIceTex2
+
+ cmpwi r31, 7
+ beq doHammerTex2
+
+ li r4, 0
+ b gotTexID2
+
+doFireTex2:
+ li r4, 1
+ b gotTexID2
+
+doIceTex2:
+ li r4, 2
+ b gotTexID2
+
+doHammerTex2:
+ li r4, 3
+
+gotTexID2:
+ lwz r3, 0x2A64(r30)
+ lwz r12, 0(r3)
+ lwz r12, 0x34(r12)
+ mtctr r12
+ bctrl
+
+ b doneSettingThePowerupTexture2
+
+
+
+
+.global PlumberSetPowerupTextureDebug
+.extern OSReport
+.extern continuePlumberSetPowerupTextureDebug
+PlumberSetPowerupTextureDebug:
+ stwu sp, -0x30(sp)
+ mflr r0
+ stw r0, 0x34(sp)
+ stw r3, 0x20(sp)
+ stw r4, 0x24(sp)
+
+ mr r6, r0
+ mr r5, r4
+ mr r4, r3
+ lis r3, PowerupTexDebugStr@h
+ ori r3, r3, PowerupTexDebugStr@l
+ crclr 4*cr1+eq
+ bl OSReport
+
+ lwz r3, 0x20(sp)
+ lwz r4, 0x24(sp)
+ lwz r0, 0x34(sp)
+ mtlr r0
+ addi sp, sp, 0x30
+
+ stwu sp, -0x30(sp)
+
+ b continuePlumberSetPowerupTextureDebug
+
+
+
+
+
+.global PlumberSetPowerupTextureFix
+PlumberSetPowerupTextureFix:
+ stb r4, 0x153(r3)
+
+ lis r5, PowerupTextures@h
+ ori r5, r5, PowerupTextures@l
+
+ slwi r4, r4, 2
+ lfsx f31, r5, r4
+
+ b continuePlumberSetPowerupTexture
+
+
+
+.global SetHammerToEnItemDCA
+SetHammerToEnItemDCA:
+ bl daEnItem_c__GetWhetherPlayerCanGetPowerupOrNot
+ cmpwi r3, 1
+ bne DontSetHammer
+
+ li r0, 5
+ sth r0, 0xDCA(r31)
+
+DontSetHammer:
+ lwz r0, 0x14(sp)
+ lwz r31, 0xC(sp)
+ mtlr r0
+ addi sp, sp, 0x10
+ blr
+
+.global SetHammerToEnItemDCASpecial
+SetHammerToEnItemDCASpecial:
+ cmplwi r4, 0x19
+ b _not19
+ li r0, 0xD
+ sth r0, 0xDCA(r3)
+_not19:
+ cmplwi r4, 6
+ bnelr
+ li r0, 5
+ sth r0, 0xDCA(r3)
+ blr
+
+
+#.global EnItem_BindAnimation_Fix
+#EnItem_BindAnimation_Fix:
+# lhz r0, 0xDCA(r3)
+# cmpwi r0, 5
+# beqlr
+# stwu sp, -0x20(sp)
+# b EnItem_BindAnimation_Continued
+
+
+.global FixPowerupSound
+FixPowerupSound:
+ #lis r3, DBString@h
+ #ori r3, r3, DBString@l
+ #lwz r4, 0x1090(r29)
+ #crclr 4*cr1+eq
+ #bl OSReport
+
+ lwz r5, 0x14DC(r29) # Original powerup
+ lwz r0, 0x1090(r29) # New powerup
+ # if NEW is 1 (big) and OLD is not 0 or 3, then play 273 (powerdown)
+ cmpwi r0, 1
+ bne dontConsiderPowerdown
+
+ cmpwi r5, 0
+ beq dontConsiderPowerdown
+ cmpwi r5, 3
+ beq dontConsiderPowerdown
+ # If the player is here, he was downgraded from a higher powerup to Big Mario
+ # So play the powerdown sound
+ mr r3, r29
+ li r4, 273
+ li r5, 0
+ b returnFromPowerupSoundChange
+
+dontConsiderPowerdown:
+ lis r3, PowerupSounds@h
+ ori r3, r3, PowerupSounds@l
+ slwi r4, r0, 2
+ lwzx r4, r3, r4
+ mr r3, r29
+ li r5, 0
+
+ b returnFromPowerupSoundChange
+
+
+.global WeirdAnimLoadHack
+WeirdAnimLoadHack:
+ cmplwi r4, 5 #hammersuit
+ beqlr
+ cmplwi r4, 6 #1up
+ beqlr
+ # neither of those succeeded
+ crclr 4*cr0+eq
+ blr
+
+
+
+.global TryToGiveMarioHammerSuit
+TryToGiveMarioHammerSuit:
+ stwu sp, -0x10(sp)
+ mflr r0
+ stw r0, 0x14(sp)
+
+ # check the obtained item number
+ cmplwi r3, 5
+ bne IsntGettingHammerSuit
+
+ # check the current player powerup
+ cmplwi r4, 7
+ bne DontHaveHammerSuit
+
+ li r28, 0
+ li r29, 2
+ b ReturnFromTTGMHS
+
+DontHaveHammerSuit:
+ mr r3, r30
+ li r4, 7
+ bl dAcPy_c__ChangePowerupWithAnimation
+
+ cmpwi r3, 0
+ beq ReturnFromTTGMHS
+
+ li r29, 1
+
+IsntGettingHammerSuit:
+ReturnFromTTGMHS:
+ # end of function
+ lwz r0, 0x14(sp)
+ mtlr r0
+ addi sp, sp, 0x10
+
+ # leftover instruction from what we replaced to add the bl
+ cmpwi r29, 0
+ blr
+
+
+
+.global ThrowHammer
+ThrowHammer:
+ # continues on from PlayerProjectileShooting
+
+ # get powerup
+ lwz r3, 0x1090(r30)
+ cmplwi r3, 7
+ bne ReturnFromThrowHammer
+
+ mr r3, r30
+ li r4, 498
+ li r5, 0
+ bl PlayPlayerSound
+
+ li r3, 0x73 # Hammer
+ li r4, 0 # Settings
+ addi r5, sp, 0x2C # Position
+ li r6, 0 # Rotation
+ lbz r7, 0x38F(r30) # Layer
+ bl CreateActor
+
+ # Store player ID
+ lwz r4, 0(r30)
+ stw r4, 0x450(r3)
+
+ # store player number, but add 0x100 to differentiate it from 0
+ lbz r4, 0x38D(r30)
+ addi r4, r4, 0x100
+ stw r4, 0x458(r3)
+
+ # Fix scale
+ lis r4, OneFloat@h
+ ori r4, r4, OneFloat@l
+ lfs f0, 0(r4)
+ stfs f0, 0xDC(r3)
+ stfs f0, 0xE0(r3)
+ stfs f0, 0xE4(r3)
+
+ mr r4, r30
+ lwz r12, 0x60(r3)
+ lwz r12, 0x8C(r12)
+ mtctr r12
+ bctrl
+
+ReturnFromThrowHammer:
+ lwz r0, 0xC4(sp)
+ psq_l f31, 0xB8(sp), 1, 0
+ lfd f31, 0xB0(sp)
+ psq_l f30, 0xA8(sp), 1, 0
+ lfd f30, 0xA0(sp)
+ lwz r31, 0x9C(sp)
+ lwz r30, 0x98(sp)
+ mtlr r0
+ addi sp, sp, 0xC0
+ blr
+
+
+
+.global MoreProjectileStuff_Fix
+MoreProjectileStuff_Fix:
+ lwz r3, 0x1090(r31)
+ cmplwi r3, 7
+ bne ReturnFromMPSFix
+
+ mr r3, r31
+ li r4, 1
+ bl PlayerProjectileShooting
+
+ReturnFromMPSFix:
+ lwz r0, 0x14(sp)
+ lwz r31, 0xC(sp)
+ mtlr r0
+ addi sp, sp, 0x10
+ blr
+
+
+
+.global ProjectileShootCheck_Fix
+ProjectileShootCheck_Fix:
+ lwz r3, 0x1090(r31)
+ cmplwi r3, 7
+ bne Return0fromPSCFix
+
+ lbz r3, 0x38D(r31)
+ li r4, 0
+ extsb r3, r3
+ bl CheckHammerLimit
+
+ cmpwi r3, 0
+ beq Return0fromPSCFix
+
+ b Return1fromPSCFix
+
+Return0fromPSCFix:
+ li r3, 0
+ b ReturnFromPSCFix
+
+Return1fromPSCFix:
+ li r3, 1
+
+ReturnFromPSCFix:
+ lwz r0, 0x14(sp)
+ lwz r31, 0xC(sp)
+ mtlr r0
+ addi sp, sp, 0x10
+ blr
+
+
+.global CheckHammerLimit
+CheckHammerLimit:
+ stwu sp, -0x10(sp)
+ mflr r0
+ stw r0, 0x14(sp)
+ stw r31, 0xC(sp)
+ stw r30, 0x8(sp)
+
+ # r30 = player number
+ mr r30, r3
+ addi r30, r30, 0x100
+
+ # r31 = hammer count so far
+ li r31, 0
+
+ # search for every Hammer
+
+ li r3, 0
+ b startOrContinueLoop
+loop:
+
+ lwz r4, 0x458(r3)
+ cmpw r4, r30
+ bne startOrContinueLoop
+
+ addi r31, r31, 1
+
+startOrContinueLoop:
+ mr r4, r3
+ li r3, 0x73
+ bl Actor_SearchByName
+
+ cmpwi r3, 0
+ bne loop
+
+ # now if the current count is >= 2, return 0
+ # otherwise return 1
+ cmpwi r31, 2
+ bge tooManyHammers
+
+ li r3, 1
+ b gotHammerStatus
+
+tooManyHammers:
+ li r3, 0
+
+gotHammerStatus:
+ lwz r0, 0x14(sp)
+ lwz r31, 0xC(sp)
+ lwz r30, 0x8(sp)
+ mtlr r0
+ addi sp, sp, 0x10
+ blr
+
+
+
+
+
+
+.data
+
+PowerupSounds:
+ .long 273, 274, 274, 275, 276, 277, 274, 274
+
+
+SomeTable:
+ .long SomeTable_802F5580
+ .long SomeTable_802F56C0
+ .long SomeTable_802F56C0
+ .long SomeTable_802F5440
+ .long SomeTable_802F56C0
+ .long SomeTable_802F56C0
+ .long SomeTable_802F56C0
+ .long SomeTable_802F56C0
+
+ZeroFloat:
+ .float 0.0
+
+OneFloat:
+ .float 1.0
+
+FukidashiTable2:
+ .float 20.0, 32.0, 32.0, 12.0, 38.0, 33.0, 32.0, 32.0
+ .float 20.0, 34.0, 34.0, 12.0, 39.0, 35.0, 34.0, 34.0
+ .float 20.0, 29.0, 29.0, 11.0, 34.0, 29.0, 29.0, 29.0
+ .float 20.0, 29.0, 29.0, 11.0, 34.0, 29.0, 29.0, 29.0
+
+PlayerHeightsNormal:
+ .float 16.0, 27.0, 27.0, 12.0, 27.0, 27.0, 27.0, 27.0
+
+PlayerHeightsDucking:
+ .float 13.0, 21.0, 21.0, 9.0, 21.0, 21.0, 21.0, 21.0
+
+WtfEverTable:
+ .float 4.5, 10.0, 10.0, 1.0, 10.0, 9.0, 10.0, 10.0
+
+YetAnotherTable:
+ .float 0.0, -4.0, -4.0, 4.0, -6.0, -2.0, -4.0, -4.0
+
+WeirdScaleTable:
+ .float 16.0, 31.0, 31.0, 6.0, 34.0, 31.0, 31.0, 31.0
+
+AsdfTable:
+ .byte 1, 2, 2, 0, 2, 2, 2, 2
+
+BlahTableOffsets:
+ .long 1, 2, 2, 0, 3, 2, 2, 2
+
+PowerupScaleFloats:
+ .long 0xDEADBEEF, 0xDEADBEEF # padding
+ .float 1.0
+ .float 1.0
+ .float 1.0
+ .float 0.6
+ .float 1.0
+ .float 1.0
+ .float 1.0
+ .float 1.0
+
+PowerupTextures:
+ .float 0.0
+ .float 1.0
+ .float 2.0
+ .float 3.0
+
+.global BrosArcFileName
+BrosArcFileName:
+ .string "bros"
+
+.global I_hammerArcFilename
+I_hammerArcFilename:
+ .string "I_hammer"
+
+.global I_hammerResFile
+I_hammerResFile:
+# .string "g3d/I_hammer.brres"
+ .string "g3d/I_fireflower.brres"
+
+.global I_hammerModelName
+I_hammerModelName:
+# .string "I_hammer"
+ .string "I_fireflower"
+
+
+PowerupTexDebugStr:
+ .string "Plumber::SetPowerupTexture() called on class %p with texnum %d lr=%p\n"
+
+DBString:
+ .string "PW:%d\n"
+
+#.global BrosModelFilename
+#BrosModelFilename:
+# .string "g3d/bros.brres"
+
+#.global HammerModelName
+#HammerModelName:
+# .string "bros_hammer"