#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 f1,1; .set f2,2 .set f3,3; .set f4,4; .set f5,5; .set f8,8; #endif .text .extern OSReport .align 4 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) 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 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, f8 stfs f0, 0xDC(r3) stfs f0, 0x464(r4) lfs f0, 0xE0(r4) fmuls f0, f0, f8 stfs f0, 0xE0(r3) stfs f0, 0x468(r4) lfs f0, 0xE4(r4) fmuls f0, f0, f8 stfs f0, 0xE4(r3) stfs f0, 0x46C(r4) # Modify the initial actor speeds # lfs f0, 0xD0(r3) # fmuls f0, f0, f5 # stfs f0, 0xD0(r3) # # lfs f0, 0xE8(r3) # fmuls f0, f0, f5 # stfs f0, 0xE8(r3) # # lfs f0, 0xC4(r3) # fmuls f0, f0, f5 # stfs f0, 0xC4(r3) # # lfs f0, 0x110(r3) # fmuls f0, f0, f5 # stfs f0, 0x110(r3) # # lfs f0, 0xF4(r3) # fmuls f0, f0, f5 # stfs f0, 0xF4(r3) # # lfs f0, 0x11C(r3) # fmuls f0, f0, f5 # stfs f0, 0x11C(r3) # # lfs f0, 0x108(r3) # fmuls f0, f0, f5 # stfs f0, 0x108(r3) 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: # 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) li r0, 0 # x_dist_to_center lfs f0, 0(r5) #Load it # fmuls f0, f0, f8 #Multiply it by the setting stfs f0, 0x1C(r3) #Store it # y_dist_to_center Time to do all the other ones lfs f0, 4(r5) fmuls f0, f0, f8 stfs f0, 0x20(r3) # x_dist_to_edge lfs f0, 8(r5) fmuls f0, f0, f8 stfs f0, 0x24(r3) # y_dist_to_edge lfs f0, 0xC(r5) fmuls f0, f0, f8 stfs f0, 0x28(r3) # Rest of the function 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 # Off we go! .global ModifyStandOnTopInitA ModifyStandOnTopInitA: # we can trash r10 for now, it's not supposed to be guaranteed anyway 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 # 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 fmuls f1, f1, f8 fmuls f2, f2, f8 fmuls f3, f3, f8 fmuls f4, f4, f8 fmuls f5, f5, f8 #This is the old function. stfs f1, 0x4C(r3) stfs f2, 0x50(r3) stfs f3, 0x54(r3) stfs f4, 0x58(r3) stfs f5, 0x5C(r3) blr # Off we go! .global ModifyStandOnTopInitB ModifyStandOnTopInitB: # we can trash r10 for now, it's not supposed to be guaranteed anyway 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 # 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 fmuls f1, f1, f8 fmuls f2, f2, f8 fmuls f3, f3, f8 fmuls f4, f4, f8 fmuls f5, f5, f8 #This is the old function. I optimized it a tad. A big tad. lfs f0, 0(r7) fmuls f1, f1, f0 fmuls f4, f4, f0 fmuls f5, f5, f0 lfs f0, 4(r7) fmuls f2, f2, f0 fmuls f3, f3, f0 stfs f1, 0x4C(r3) stfs f2, 0x50(r3) stfs f3, 0x54(r3) stfs f4, 0x58(r3) stfs f5, 0x5C(r3) blr # Off we go! .global ModifyStandOnTopInitC ModifyStandOnTopInitC: fmr f5, f3 fmr f4, f2 fmr f3, f1 lfs f1, 0(r5) lfs f2, 4(r5) b ModifyStandOnTopInitA .global ModifyStandOnTopInitD ModifyStandOnTopInitD: # we can trash r10 for now, it's not supposed to be guaranteed anyway 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 # 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 fmr f5, f3 fmr f4, f2 fmr f3, f1 lfs f1, 0(r5) lfs f2, 4(r5) fmuls f1, f1, f8 fmuls f2, f2, f8 fmuls f3, f3, f8 fmuls f4, f4, f8 fmuls f5, f5, f8 lfs f0, 0(r8) fmuls f1, f1, f0 fmuls f4, f4, f0 fmuls f5, f5, f0 lfs f0, 4(r8) fmuls f2, f2, f0 fmuls f3, f3, f0 stfs f1, 0x4C(r3) stfs f2, 0x50(r3) stfs f3, 0x54(r3) stfs f4, 0x58(r3) stfs f5, 0x5C(r3) blr # Off we go! .global ModifyRiderInitA ModifyRiderInitA: # we can trash r10 for now, it's not supposed to be guaranteed anyway 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 # first off, get the value from the lookup table lis r11, RiderLookupTable@h ori r11, r11, RiderLookupTable@l slwi r10, r10, 2 # size *= 4 (size of float) lfsx f8, r11, r10 # get it from the array lfs f0, 0(r4) fmuls f0, f0, f8 stfs f0, 0x4C(r3) lfs f0, 4(r4) fmuls f0, f0, f8 stfs f0, 0x50(r3) lfs f0, 0(r5) fmuls f0, f0, f8 stfs f0, 0x54(r3) lfs f0, 4(r5) fmuls f0, f0, f8 stfs f0, 0x58(r3) blr # Off we go! .global ModifyRiderInitB ModifyRiderInitB: # we can trash r10 for now, it's not supposed to be guaranteed anyway 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 # first off, get the value from the lookup table lis r11, RiderLookupTable@h ori r11, r11, RiderLookupTable@l slwi r10, r10, 2 # size *= 4 (size of float) lfsx f8, r11, r10 # get it from the array lfs f0, 0(r5) fmuls f0, f0, f8 stfs f0, 0x4C(r3) lfs f0, 4(r5) fmuls f0, f0, f8 stfs f0, 0x50(r3) lfs f0, 0(r4) fmuls f0, f0, f8 stfs f0, 0x54(r3) lfs f0, 4(r4) fmuls f0, f0, f8 stfs f0, 0x58(r3) blr # Off we go! .global ModifyRiderInitC ModifyRiderInitC: # we can trash r10 for now, it's not supposed to be guaranteed anyway 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 # first off, get the value from the lookup table lis r11, RiderLookupTable@h ori r11, r11, RiderLookupTable@l slwi r10, r10, 2 # size *= 4 (size of float) lfsx f8, r11, r10 # get it from the array fmuls f1, f1, f8 fmuls f2, f2, f8 fmuls f3, f3, f8 fmuls f4, f4, f8 stfs f1, 0x4C(r3) stfs f2, 0x50(r3) stfs f3, 0x54(r3) stfs f4, 0x58(r3) blr # Off we go! .global ModifyRiderInitD ModifyRiderInitD: # we can trash r10 for now, it's not supposed to be guaranteed anyway 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 # first off, get the value from the lookup table lis r11, RiderLookupTable@h ori r11, r11, RiderLookupTable@l slwi r10, r10, 2 # size *= 4 (size of float) lfsx f8, r11, r10 # get it from the array fmuls f1, f1, f8 fmuls f2, f2, f8 fmuls f3, f3, f8 fmuls f4, f4, f8 stfs f3, 0x4C(r3) stfs f4, 0x50(r3) stfs f1, 0x54(r3) stfs f2, 0x58(r3) blr # Off we go! .global InheritSettings_A InheritSettings_A: li r0, 0 blr .global InheritSettings_B InheritSettings_B: li r4, 0 blr or r4, r31, r0 lwz r10, 4(r28) or r4, r10, r4 blr .global InheritSettings_C InheritSettings_C: li r4, 0 blr or r4, r8, r18 lwz r10, 4(r27) or r4, r10, r4 blr .global InheritSettings_D InheritSettings_D: li r4, 0 blr lwz r4, 4(r3) li r10, 0 stw r10, 8(r4) mr r11, r4 blr .global InheritSettings_E InheritSettings_E: li r4, 0 blr mr r4, r11 blr .global PiranhaFireType PiranhaFireType: li r3, 0x76 blr .global PiranhaFirePos PiranhaFirePos: lis r11, PiranhaPosF@h ori r11, r11, PiranhaPosF@l lfs f8, 0(r11) fadds f1, f1, f8 fadds f2, f2, f8 fadds f0, f0, f8 stfs f0, 0x8(r1) stfs f1, 0xC(r1) stfs f2, 0x10(r1) blr .global PipeGeneratorSpawn PipeGeneratorSpawn: li r3, 0x87 li r4, 0 blr .global LakituBomb LakituBomb: li r3, 0x85 li r4, 0x3000 slwi r4, r4, 16 blr .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 RiderLookupTable: .float 1, 1, 1, 1, 0.6, 0.7, 0.85, 1, 1, 1.1, 1.25, 1.5, 2, 2.5, 4, 5 PiranhaPosF: .float 4.0 Stupid: .string "Fucking Sprite was enlarged by %f times\n" .align 4