summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--growup.yaml237
-rw-r--r--kamek_pal.x3
-rw-r--r--spritetex.yaml54
-rw-r--r--src/growup.s744
-rw-r--r--src/levelspecial.cpp36
-rw-r--r--src/spritetex.S15
6 files changed, 851 insertions, 238 deletions
diff --git a/growup.yaml b/growup.yaml
index de51ca4..2d1d4a1 100644
--- a/growup.yaml
+++ b/growup.yaml
@@ -21,32 +21,92 @@ hooks:
target_func: 'ModifyCollision'
+# Update Object Positions Based on Speed Values
-# Stand On Top Special Collisions Inits
+# - name: Global_Speed_Updates
+# type: branch_insn
+# branch_type: b
+# src_addr_pal: 0x8006CD00
+# target_func: 'ModifySpeedUpdates'
- - name: Global_StandonTopA
+ - name: Global_Speed_UpdatesA
type: branch_insn
branch_type: b
- src_addr_pal: 0x800DB27C
- target_func: 'ModifyStandOnTopInitA'
+ src_addr_pal: 0x80065620
+ target_func: 'ModifySpeedUpdatesA'
- - name: Global_StandonTopB
+ - name: Global_Speed_UpdatesB
type: branch_insn
branch_type: b
- src_addr_pal: 0x800DB294
- target_func: 'ModifyStandOnTopInitB'
+ src_addr_pal: 0x80095730
+ target_func: 'ModifySpeedUpdatesB'
+
+
+# Loading Patches
+
+# - name: Global_SizeLoader_X
+# type: branch_insn
+# branch_type: bl
+# src_addr_pal: 0x800684B8
+# target_func: 'ModifyLoadSizeX'
+#
+# - name: Global_SizeLoader_Y
+# type: branch_insn
+# branch_type: bl
+# src_addr_pal: 0x800684C0
+# target_func: 'ModifyLoadSizeY'
+
+
+# - name: Global_SizeLoader
+# type: branch_insn
+# branch_type: bl
+# src_addr_pal: 0x80068930
+# target_func: 'ModifyLoadSize'
+#
+# - name: Global_SizeLoaderNull
+# type: patch
+# data: "600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000600000006000000060000000"
+# addr_pal: 0x80068934
+
+# - name: GlobalSizeA
+# type: patch
+# data: '38600001'
+# addr_pal: 0x80064540
+#
+# - name: GlobalSizeB
+# type: patch
+# data: '4E800020'
+# addr_pal: 0x80064544
- - 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'
+
+
+
+# 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'
@@ -90,15 +150,21 @@ hooks:
- name: FixingPipeSpawnerGoomba
type: branch_insn
branch_type: bl
- src_addr_pal: 0x80ABB6AC
- target_func: 'InheritSettings_A'
+ src_addr_pal: 0x80ABB6A8
+ target_func: 'InheritSettings_C'
+
+ - name: FixingPipeSpawnerGoombaB
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80ABB6D0
+ target_func: 'InheritSettings_D'
- name: FixingPipeSpawnerBobomb
type: branch_insn
branch_type: bl
- src_addr_pal: 0x80ABB748
- target_func: 'InheritSettings_A'
+ src_addr_pal: 0x80ABB758
+ target_func: 'InheritSettings_B'
# - name: FixingBlockHit
@@ -113,74 +179,75 @@ hooks:
# branch_type: bl
# src_addr_pal: 0x80088938
# target_func: 'InheritSettings_C'
-#
-#
-# - name: FixingMegaGoomba
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A5AAA8
-# target_func: 'InheritSettings_D'
-#
-# - name: FixingMegaGoombaB
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A5AAC4
-# target_func: 'InheritSettings_E'
-#
-# - name: FixingMegaGoombaC
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A5AB44
-# target_func: 'InheritSettings_D'
-#
-# - name: FixingMegaGoombaD
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x880A5AB80
-# target_func: 'InheritSettings_E'
-#
-# - name: FixingMegaGoombaE
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A5AB9C
-# target_func: 'InheritSettings_E'
-#
-# - name: FixingMegaGoombaF
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A5ABB8
-# target_func: 'InheritSettings_E'
-#
-#
-# - name: FixingLargeGoomba
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A6A208
-# target_func: 'InheritSettings_D'
-#
-# - name: FixingLargeGoombaB
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A6A22C
-# target_func: 'InheritSettings_E'
-#
-# - name: FixingLargeGoombaC
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A6A2A8
-# target_func: 'InheritSettings_D'
-#
-# - name: FixingLargeGoombaD
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A6A2CC
-# target_func: 'InheritSettings_E'
-#
+
+ - name: FixingMegaGoombaAA
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A5AAA8
+ target_func: 'InheritSettings'
+
+ - name: FixingMegaGoombaAB
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A5AAC4
+ target_func: 'InheritSettings'
+
+
+ - name: FixingMegaGoombaBA
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A5AB44
+ target_func: 'InheritSettings'
+
+ - name: FixingMegaGoombaBB
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A5AB80
+ target_func: 'InheritSettings'
+
+ - name: FixingMegaGoombaBC
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A5AB9C
+ target_func: 'InheritSettings'
+
+ - name: FixingMegaGoombaBD
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A5ABB8
+ target_func: 'InheritSettings'
+
+
+ - name: FixingLargeGoombaAA
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A6A208
+ target_func: 'InheritSettings'
+
+ - name: FixingLargeGoombaAB
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A6A22C
+ target_func: 'InheritSettings'
+
+
+ - name: FixingLargeGoombaBA
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A6A2A8
+ target_func: 'InheritSettings'
+
+ - name: FixingLargeGoombaBB
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A6A2CC
+ target_func: 'InheritSettings'
+
- name: Piranha_Collisions
type: patch
- data: "41800000"
+ data: "41C00000"
addr_pal: 0x802EE81C
diff --git a/kamek_pal.x b/kamek_pal.x
index e543336..f3da9bf 100644
--- a/kamek_pal.x
+++ b/kamek_pal.x
@@ -13,6 +13,9 @@ SECTIONS {
MarioJumpMax = 0x8042BB28;
MiniMarioJumpArc = 0x802F5964;
MarioSize = 0x8042BB54;
+ AlwaysDrawFlag = 0x80064540;
+ AlwaysDrawBranch = 0x80064544;
+
_savefpr_14 = 0x802DCF98;
_savefpr_15 = 0x802DCF9C;
diff --git a/spritetex.yaml b/spritetex.yaml
index 0d4658c..56a4da4 100644
--- a/spritetex.yaml
+++ b/spritetex.yaml
@@ -28,6 +28,13 @@ hooks:
target_func: 'TEX_Goomba'
+ - name: TEX_BigGoomba
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80033350
+ target_func: 'TEX_BigGoomba'
+
+
- name: TEX_Barrel
type: branch_insn
branch_type: bl
@@ -49,11 +56,11 @@ hooks:
# target_func: 'TEX_BigBlock'
-# - name: TEX_Thwomp
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x809F63F4
-# target_func: 'TEX_Thwomp'
+ - name: TEX_Thwomp
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x809F63F4
+ target_func: 'TEX_Thwomp'
- name: TEX_GiantBuzzy
@@ -252,11 +259,11 @@ hooks:
target_func: 'TEX_Midway'
-# - name: TEX_Goal
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A0A0E8
-# target_func: 'TEX_Goal'
+ - name: TEX_Goal
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A0A0E8
+ target_func: 'TEX_Goal'
# - name: TEX_StretchMush
@@ -287,17 +294,24 @@ hooks:
# target_func: 'TEX_Platforms'
-# - name: TEX_PokeyA
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80AA1DB0
-# target_func: 'TEX_PokeyA'
+ - name: TEX_PokeyA
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80AA1DB0
+ target_func: 'TEX_PokeyA'
-# - name: TEX_PokeyB
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80A9F834
-# target_func: 'TEX_PokeyB'
+ - name: TEX_PokeyB
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A9F834
+ target_func: 'TEX_PokeyB'
+
+
+ - name: TEX_PokeyC
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A9D028
+ target_func: 'TEX_PokeyC'
diff --git a/src/growup.s b/src/growup.s
index f0c513c..f1cff50 100644
--- a/src/growup.s
+++ b/src/growup.s
@@ -6,7 +6,8 @@
.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;
+.set f3,3; .set f4,4; .set f5,5; .set f6,6; .set f8,8
+.set f31,31; .set f30,30
#endif
@@ -20,58 +21,114 @@
LoadFromSettingsS:
- # 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 Nyb7 in Reggie)
- andi. r10, r10, 0xF
+ # we can trash r12 for now, it's not supposed to be guaranteed anyway
+ lwz r12, 4(r3) # get the sprite settings
+ srwi r12, r12, 20 # get the highest nybble as r10 (maps to Nyb7 in Reggie)
+ andi. r12, r12, 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
+ slwi r12, r12, 2 # size *= 4 (size of float)
+ lfsx f8, r11, r12 # get it from the array
blr
LoadFromSettingsSF:
- # 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, 28 # get the highest nybble as r10 (maps to Nyb5 in Reggie)
- andi. r10, r10, 0xF
+ # we can trash r12 for now, it's not supposed to be guaranteed anyway
+ lwz r12, 4(r3) # get the sprite settings
+ srwi r12, r12, 28 # get the highest nybble as r12 (maps to Nyb5 in Reggie)
+ andi. r12, r12, 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
+ slwi r12, r12, 2 # size *= 4 (size of float)
+ lfsx f8, r11, r12 # get it from the array
blr
LoadFromSettingsC:
- # 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 Nyb7 in Reggie)
- andi. r10, r10, 0xF
+ # we can trash r12 for now, it's not supposed to be guaranteed anyway
+ lwz r12, 4(r4) # get the sprite settings
+ srwi r12, r12, 20 # get the highest nybble as r12 (maps to Nyb7 in Reggie)
+ andi. r12, r12, 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
+ slwi r12, r12, 2 # size *= 4 (size of float)
+ lfsx f8, r11, r12 # get it from the array
blr
LoadFromSettingsCF:
- # 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, 28 # get the highest nybble as r10 (maps to Nyb5 in Reggie)
- andi. r10, r10, 0xF
+ # we can trash r12 for now, it's not supposed to be guaranteed anyway
+ lwz r12, 4(r4) # get the sprite settings
+ srwi r12, r12, 28 # get the highest nybble as r12 (maps to Nyb5 in Reggie)
+ andi. r12, r12, 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
+ slwi r12, r12, 2 # size *= 4 (size of float)
+ lfsx f8, r11, r12 # get it from the array
+ blr
+
+
+LoadFromSettingsH:
+ # we can trash r12 for now, it's not supposed to be guaranteed anyway
+ lwz r12, 4(r30) # get the sprite settings
+ srwi r12, r12, 20 # get the highest nybble as r12 (maps to Nyb7 in Reggie)
+ andi. r12, r12, 0xF
+
+ # first off, get the value from the lookup table
+ lis r11, RiderLookupTable@h
+ ori r11, r11, RiderLookupTable@l
+ slwi r12, r12, 2 # size *= 4 (size of float)
+ lfsx f8, r11, r12 # get it from the array
+ blr
+
+
+LoadFromSettingsHF:
+ # we can trash r12 for now, it's not supposed to be guaranteed anyway
+ lwz r12, 4(r30) # get the sprite settings
+ srwi r12, r12, 28 # get the highest nybble as r12 (maps to Nyb5 in Reggie)
+ andi. r12, r12, 0xF
+
+ # first off, get the value from the lookup table
+ lis r11, RiderLookupTable@h
+ ori r11, r11, RiderLookupTable@l
+ slwi r12, r12, 2 # size *= 4 (size of float)
+ lfsx f8, r11, r12 # get it from the array
+ blr
+
+
+LoadFromSettingsL:
+ # we can trash r12 for now, it's not supposed to be guaranteed anyway
+ lwz r12, 8(r30) # get the sprite settings
+ srwi r12, r12, 20 # get the highest nybble as r12 (maps to Nyb7 in Reggie)
+ andi. r12, r12, 0xF
+
+ # first off, get the value from the lookup table
+ lis r11, LookupTable@h
+ ori r11, r11, LookupTable@l
+ slwi r12, r12, 2 # size *= 4 (size of float)
+ lfsx f8, r11, r12 # get it from the array
+ blr
+
+
+LoadFromSettingsLF:
+ # we can trash r12 for now, it's not supposed to be guaranteed anyway
+ lwz r12, 8(r30) # get the sprite settings
+ srwi r12, r12, 28 # get the highest nybble as r12 (maps to Nyb5 in Reggie)
+ andi. r12, r12, 0xF
+
+ # first off, get the value from the lookup table
+ lis r11, LookupTable@h
+ ori r11, r11, LookupTable@l
+ slwi r12, r12, 2 # size *= 4 (size of float)
+ lfsx f8, r11, r12 # get it from the array
blr
@@ -79,14 +136,11 @@ LoadFromSettingsCF:
ModelNoChanges:
lwz r4, 0x47C(r3)
lfs f0, 0xDC(r4)
- stfs f0, 0xDC(r3)
- stfs f0, 0x464(r4)
+ stfs f0, 0x464(r3)
lfs f0, 0xE0(r4)
- stfs f0, 0xE0(r3)
- stfs f0, 0x468(r4)
+ stfs f0, 0x468(r3)
lfs f0, 0xE4(r4)
- stfs f0, 0xE4(r3)
- stfs f0, 0x46C(r4)
+ stfs f0, 0x46C(r3)
blr
@@ -123,48 +177,254 @@ ModifyGlobalSizes:
lfs f0, 0xDC(r4)
fmuls f0, f0, f8
stfs f0, 0xDC(r3)
- stfs f0, 0x464(r4)
+ stfs f0, 0x464(r3)
lfs f0, 0xE0(r4)
fmuls f0, f0, f8
stfs f0, 0xE0(r3)
- stfs f0, 0x468(r4)
+ stfs f0, 0x468(r3)
lfs f0, 0xE4(r4)
fmuls f0, f0, f8
stfs f0, 0xE4(r3)
- stfs f0, 0x46C(r4)
+ stfs f0, 0x46C(r3)
+
+ blr
+
+
+# Another one to try at 80095750
+SpeedUpdatesNoChangesB:
+ lfs f3, 0xC(r1)
+ lfs f1, 0x440(r30)
+ lfs f2, 0x10(r1)
+ fadds f6, f3, f1
+ lfs f0, 0x444(r30)
+ lfs f4, 0x14(r1)
+ fadds f5, f2, f0
+ lfs f3, 0x448(r30)
+ lfs f1, 0xAC(r30) #Actor.x_pos
+ fadds f3, f4, f3
+ lfs f0, 0xB0(r30) #Actor.y_pos
+ fadds f2, f1, f6
+ fadds f1, f0, f5
+ lfs f0, 0xB4(r30) #Actor.z_pos
+ stfs f2, 0xAC(r30) #Actor.x_pos
+ fadds f0, f0, f3
+ stfs f1, 0xB0(r30) #Actor.y_pos
+ stfs f0, 0xB4(r30) #Actor.z_pos
+ psq_l f31, 0x38(r1), 1, 0
+ lfd f31, 0x30(r1)
+ psq_l f30, 0x28(r1), 1, 0
+ lfd f30, 0x20(r1)
+ lwz r31, 0x1C(r1)
+ lwz r30, 0x18(r1)
+ lwz r0, 0x44(r1)
+ stfs f6, 0xC(r1)
+ stfs f5, 0x10(r1)
+ stfs f3, 0x14(r1)
+ mtlr r0
+ addi r1, r1, 0x40
+ blr
+
+
+.global ModifySpeedUpdatesB
+ModifySpeedUpdatesB:
+
+ # Go back if Type is a Player, Yoshi, or World Map Shit
+ lhz r10, 8(r30)
+ cmpwi r10, 0x12
+ blt SpeedUpdatesNoChangesB
+
+ # Go back if SizerOn is 0 (off)
+ lis r10, SizerOn@h
+ ori r10, r10, SizerOn@l
+ lbz r10, 0(r10)
+ cmpwi r10, 0
+ beq SpeedUpdatesNoChangesB
+
+ # Else, use Global
+ lis r11, GlobalSpriteSpeed@h
+ ori r11, r11, GlobalSpriteSpeed@l
+ lfs f8, 0(r11)
+
+ mflr r9
+
+ # Load from Nyb5 Settings if SizerOn is 1
+ cmpwi r10, 1
+ beql LoadFromSettingsHF
+
+ # Load from Nyb7 Settings if SizerOn is 2
+ cmpwi r10, 2
+ beql LoadFromSettingsH
+
+ mtlr r9
+
+
+ lfs f3, 0xC(r1)
+ lfs f1, 0x440(r30)
+ lfs f2, 0x10(r1)
+ fadds f6, f3, f1
+ lfs f0, 0x444(r30)
+ lfs f4, 0x14(r1)
+ fadds f5, f2, f0
+ lfs f3, 0x448(r30)
+ lfs f1, 0xAC(r30) #Actor.x_pos
+ fadds f3, f4, f3
+ lfs f0, 0xB0(r30) #Actor.y_pos
+ fmuls f6, f8, f6
+ fadds f2, f1, f6
+ fmuls f5, f8, f5
+ fadds f1, f0, f5
+ lfs f0, 0xB4(r30) #Actor.z_pos
+ stfs f2, 0xAC(r30) #Actor.x_pos
+ fmuls f3, f8, f3
+ fadds f0, f0, f3
+ stfs f1, 0xB0(r30) #Actor.y_pos
+ stfs f0, 0xB4(r30) #Actor.z_pos
+ psq_l f31, 0x38(r1), 1, 0
+ lfd f31, 0x30(r1)
+ psq_l f30, 0x28(r1), 1, 0
+ lfd f30, 0x20(r1)
+ lwz r31, 0x1C(r1)
+ lwz r30, 0x18(r1)
+ lwz r0, 0x44(r1)
+ stfs f6, 0xC(r1)
+ stfs f5, 0x10(r1)
+ stfs f3, 0x14(r1)
+ mtlr r0
+ addi r1, r1, 0x40
+ blr
+
+
+
+# dStageActor_positionRelated: 80065620
+SpeedUpdatesNoChangesA:
+ lfs f3, 0xB0(r4)
+ lfs f2, 0xD4(r4)
+ lfs f1, 0xAC(r4)
+ lfs f0, 0xD0(r4)
+ fadds f2, f3, f2
+ fadds f0, f1, f0
+ stfs f2, 4(r3)
+ stfs f0, 0(r3)
+ blr
+
+
+.global ModifySpeedUpdatesA
+ModifySpeedUpdatesA:
+
+ # Go back if Type is a Player, Yoshi, or World Map Shit
+ lhz r10, 8(r4)
+ cmpwi r10, 0x12
+ blt SpeedUpdatesNoChangesA
- # Modify the initial actor speeds
-# lfs f0, 0xD0(r3)
-# fmuls f0, f0, f5
-# stfs f0, 0xD0(r3)
+ # Go back if SizerOn is 0 (off)
+ lis r10, SizerOn@h
+ ori r10, r10, SizerOn@l
+ lbz r10, 0(r10)
+ cmpwi r10, 0
+ beq SpeedUpdatesNoChangesA
+
+ # Else, use Global
+ lis r11, GlobalSpriteSize@h
+ ori r11, r11, GlobalSpriteSize@l
+ lfs f8, 0(r11)
+
+ mflr r9
+
+ # Load from Nyb5 Settings if SizerOn is 1
+ cmpwi r10, 1
+ beql LoadFromSettingsCF
+
+ # Load from Nyb7 Settings if SizerOn is 2
+ cmpwi r10, 2
+ beql LoadFromSettingsC
+
+ mtlr r9
+
+ lfs f3, 0xB0(r4)
+ lfs f2, 0xD4(r4)
+ lfs f1, 0xAC(r4)
+ lfs f0, 0xD0(r4)
+ fmuls f2, f8, f2
+ fadds f2, f3, f2
+ fmuls f0, f8, f0
+ fadds f0, f1, f0
+ stfs f2, 4(r3)
+ stfs f0, 0(r3)
+ blr
+
+
+#SpeedUpdatesNoChanges:
+# # Xpos
+# lfs f1, 0xAC(r3)
+# lfs f0, 0(r4)
+# fadds f0, f1, f0
+# stfs f0, 0xAC(r3)
+# # Ypos
+# lfs f1, 0xB0(r3)
+# lfs f0, 4(r4)
+# fadds f0, f1, f0
+# stfs f0, 0xB0(r3)
+# # Zpos
+# lfs f1, 0xB4(r3)
+# lfs f0, 8(r4)
+# fadds f0, f1, f0
+# stfs f0, 0xB4(r3)
+# blr
+#
#
-# lfs f0, 0xE8(r3)
-# fmuls f0, f0, f5
-# stfs f0, 0xE8(r3)
+#.global ModifySpeedUpdates
+#ModifySpeedUpdates:
#
-# lfs f0, 0xC4(r3)
-# fmuls f0, f0, f5
-# stfs f0, 0xC4(r3)
+# # Go back if Type is a Player, Yoshi, or World Map Shit
+# lhz r10, 8(r3)
+# cmpwi r10, 0x12
+# blt SpeedUpdatesNoChanges
#
-# lfs f0, 0x110(r3)
-# fmuls f0, f0, f5
-# stfs f0, 0x110(r3)
+# # Go back if SizerOn is 0 (off)
+# lis r10, SizerOn@h
+# ori r10, r10, SizerOn@l
+# lbz r10, 0(r10)
+# cmpwi r10, 0
+# beq SpeedUpdatesNoChanges
#
-# lfs f0, 0xF4(r3)
-# fmuls f0, f0, f5
-# stfs f0, 0xF4(r3)
-#
-# lfs f0, 0x11C(r3)
-# fmuls f0, f0, f5
-# stfs f0, 0x11C(r3)
+# # Else, use Global
+# lis r11, GlobalSpriteSize@h
+# ori r11, r11, GlobalSpriteSize@l
+# lfs f8, 0(r11)
#
-# lfs f0, 0x108(r3)
-# fmuls f0, f0, f5
-# stfs f0, 0x108(r3)
-
- blr
+# mflr r9
+#
+# # Load from Nyb5 Settings if SizerOn is 1
+# cmpwi r10, 1
+# beql LoadFromSettingsSF
+#
+# # Load from Nyb7 Settings if SizerOn is 2
+# cmpwi r10, 2
+# beql LoadFromSettingsS
+#
+# mtlr r9
+#
+# # Xpos
+# lfs f1, 0xAC(r3)
+# lfs f0, 0(r4)
+# fmuls f0, f8, f0
+# fadds f0, f1, f0
+# stfs f0, 0xAC(r3)
+# # Ypos
+# lfs f1, 0xB0(r3)
+# lfs f0, 4(r4)
+# fmuls f0, f8, f0
+# fadds f0, f1, f0
+# stfs f0, 0xB0(r3)
+# # Zpos
+# lfs f1, 0xB4(r3)
+# lfs f0, 8(r4)
+# fmuls f0, f8, f0
+# fadds f0, f1, f0
+# stfs f0, 0xB4(r3)
+# blr
@@ -396,21 +656,43 @@ ModifyStandOnTopInitD:
blr # Off we go!
+RiderInitANoChanges:
+ lfs f0, 0(r4)
+ stfs f0, 0x4C(r3)
+ lfs f0, 4(r4)
+ stfs f0, 0x50(r3)
+ lfs f0, 0(r5)
+ stfs f0, 0x54(r3)
+ lfs f0, 4(r5)
+ stfs f0, 0x58(r3)
+ blr
.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
+ # Go back if SizerOn is 0 (off)
+ lis r10, SizerOn@h
+ ori r10, r10, SizerOn@l
+ lbz r10, 0(r10)
+ cmpwi r10, 0
+ beq RiderInitANoChanges
- # 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
+ # Else, use Global
+ lis r11, GlobalSpriteSize@h
+ ori r11, r11, GlobalSpriteSize@l
+ lfs f8, 0(r11)
+
+ mflr r9
+
+ # Load from Nyb5 Settings if SizerOn is 1
+ cmpwi r10, 1
+ beql LoadFromSettingsSF
+
+ # Load from Nyb7 Settings if SizerOn is 2
+ cmpwi r10, 2
+ beql LoadFromSettingsS
+
+ mtlr r9
lfs f0, 0(r4)
fmuls f0, f0, f8
@@ -431,20 +713,44 @@ ModifyRiderInitA:
blr # Off we go!
+RiderInitBNoChanges:
+ lfs f0, 0(r5)
+ stfs f0, 0x4C(r3)
+ lfs f0, 4(r5)
+ stfs f0, 0x50(r3)
+ lfs f0, 0(r4)
+ stfs f0, 0x54(r3)
+ lfs f0, 4(r4)
+ stfs f0, 0x58(r3)
+ blr
+
+
.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
+ # Go back if SizerOn is 0 (off)
+ lis r10, SizerOn@h
+ ori r10, r10, SizerOn@l
+ lbz r10, 0(r10)
+ cmpwi r10, 0
+ beq RiderInitBNoChanges
- # 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
+ # Else, use Global
+ lis r11, GlobalSpriteSize@h
+ ori r11, r11, GlobalSpriteSize@l
+ lfs f8, 0(r11)
+
+ mflr r9
+
+ # Load from Nyb5 Settings if SizerOn is 1
+ cmpwi r10, 1
+ beql LoadFromSettingsSF
+
+ # Load from Nyb7 Settings if SizerOn is 2
+ cmpwi r10, 2
+ beql LoadFromSettingsS
+
+ mtlr r9
lfs f0, 0(r5)
fmuls f0, f0, f8
@@ -466,20 +772,39 @@ ModifyRiderInitB:
+RiderInitCNoChanges:
+ stfs f1, 0x4C(r3)
+ stfs f2, 0x50(r3)
+ stfs f3, 0x54(r3)
+ stfs f4, 0x58(r3)
+ blr
+
.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
+ # Go back if SizerOn is 0 (off)
+ lis r10, SizerOn@h
+ ori r10, r10, SizerOn@l
+ lbz r10, 0(r10)
+ cmpwi r10, 0
+ beq RiderInitCNoChanges
- # 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
+ # Else, use Global
+ lis r11, GlobalSpriteSize@h
+ ori r11, r11, GlobalSpriteSize@l
+ lfs f8, 0(r11)
+
+ mflr r9
+
+ # Load from Nyb5 Settings if SizerOn is 1
+ cmpwi r10, 1
+ beql LoadFromSettingsSF
+
+ # Load from Nyb7 Settings if SizerOn is 2
+ cmpwi r10, 2
+ beql LoadFromSettingsS
+
+ mtlr r9
fmuls f1, f1, f8
fmuls f2, f2, f8
@@ -494,20 +819,41 @@ ModifyRiderInitC:
blr # Off we go!
+
+RiderInitDNoChanges:
+ stfs f3, 0x4C(r3)
+ stfs f4, 0x50(r3)
+ stfs f1, 0x54(r3)
+ stfs f2, 0x58(r3)
+ blr
+
+
.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
+ # Go back if SizerOn is 0 (off)
+ lis r10, SizerOn@h
+ ori r10, r10, SizerOn@l
+ lbz r10, 0(r10)
+ cmpwi r10, 0
+ beq RiderInitDNoChanges
- # 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
+ # Else, use Global
+ lis r11, GlobalSpriteSize@h
+ ori r11, r11, GlobalSpriteSize@l
+ lfs f8, 0(r11)
+
+ mflr r9
+
+ # Load from Nyb5 Settings if SizerOn is 1
+ cmpwi r10, 1
+ beql LoadFromSettingsSF
+
+ # Load from Nyb7 Settings if SizerOn is 2
+ cmpwi r10, 2
+ beql LoadFromSettingsS
+
+ mtlr r9
fmuls f1, f1, f8
fmuls f2, f2, f8
@@ -523,67 +869,199 @@ ModifyRiderInitD:
-.global InheritSettings_A
-InheritSettings_A:
+.global InheritSettings
+InheritSettings:
- li r0, 0
+ lwz r4, 4(r3)
+ andis. r4, r4, 0xFFF0
blr
-
.global InheritSettings_B
InheritSettings_B:
- li r4, 0
- blr
-
- or r4, r31, r0
- lwz r10, 4(r28)
- or r4, r10, r4
-
+ lwz r5, 4(r3)
blr
.global InheritSettings_C
InheritSettings_C:
- li r4, 0
- blr
-
- or r4, r8, r18
- lwz r10, 4(r27)
- or r4, r10, r4
-
+ lwz r4, 4(r3)
+ andis. r4, r4, 0xFFF0
blr
-
.global InheritSettings_D
InheritSettings_D:
- li r4, 0
+ ori r4, r4, 0x2
blr
- lwz r4, 4(r3)
- li r10, 0
- stw r10, 8(r4)
- mr r11, r4
-
+
+
+.global AlwaysVisible
+AlwaysVisible:
+
+ li r3, 1
blr
-.global InheritSettings_E
-InheritSettings_E:
- li r4, 0
+
+
+ModifyLoadSizeNoChanges:
+ lhz r0, 0(r30)
+ cmpwi r17, 0
+ lhz r3, 2(r30)
+ li r28, 0
+ mulli r4, r0, 0x28
+ lwz r0, 0x24(r1)
+ lhz r7, 4(r30)
+ add r31, r0, r4
+ lwz r0, 0xC(r31)
+ lwz r6, 0x14(r31)
+ li r6, 12800
+ add r3, r3, r0
+ lwz r8, 0x10(r31)
+ subf r0, r6, r3
+ lhz r4, 0x20(r31)
+ li r4, 12800
+ add r3, r3, r6
+ lhz r5, 0x22(r31)
+ li r5, 12800
+ subf r6, r4, r0
+ lwz r9, 0x18(r31)
+ subf r7, r8, r7
+ add r5, r5, r3
+ srawi r26, r6, 4
+ lhz r4, 0x1C(r31)
+ subf r0, r9, r7
+ srawi r25, r5, 4
+ subf r4, r4, r0
+ lhz r3, 0x1E(r31)
+ add r0, r7, r9
+ mr r27, r25
+ srawi r23, r4, 4
+ add r0, r3, r0
+ srawi r22, r0, 4
blr
- mr r4, r11
+.global ModifyLoadSize
+ModifyLoadSize:
+
+ mflr r9
+
+ # Go back if SizerOn is 0 (off)
+ lis r10, SizerOn@ha
+ lbz r10, SizerOn@l(r10)
+ cmpwi r10, 0
+ b ModifyLoadSizeNoChanges
+
+ # Else, use Global
+ lis r11, GlobalSpriteSize@h
+ ori r11, r11, GlobalSpriteSize@l
+ lfs f8, 0(r11)
+
+ # Load from Nyb5 Settings if SizerOn is 1
+ cmpwi r10, 1
+ beql LoadFromSettingsLF
+
+ # Load from Nyb7 Settings if SizerOn is 2
+ cmpwi r10, 2
+ beql LoadFromSettingsL
+
+ lhz r0, 0(r30)
+ cmpwi r17, 0
+ lhz r3, 2(r30)
+ li r28, 0
+ mulli r4, r0, 0x28
+ lwz r0, 0x24(r1)
+ lhz r7, 4(r30)
+ add r31, r0, r4
+
+ lwz r12, 0xC(r31)
+ bl ConverterFunc
+ mr r0, r12
+ li r0, 12800
+
+ lwz r12, 0x14(r31)
+ bl ConverterFunc
+ mr r6, r12
+ li r6, 12800
+
+ add r3, r3, r0
+
+ lwz r12, 0x10(r31)
+ bl ConverterFunc
+ mr r8, r12
+ li r8, 12800
+
+ subf r0, r6, r3
+
+ lhz r12, 0x20(r31)
+ bl ConverterFunc
+ mr r4, r12
+ li r4, 12800
+
+ add r3, r3, r6
+
+ lhz r12, 0x22(r31)
+ bl ConverterFunc
+ mr r5, r12
+ li r5, 12800
+
+ subf r6, r4, r0
+
+ lwz r12, 0x18(r31)
+ bl ConverterFunc
+ mr r9, r12
+ li r9, 12800
+ subf r7, r8, r7
+ add r5, r5, r3
+ srawi r26, r6, 4
+
+ lhz r12, 0x1C(r31)
+ bl ConverterFunc
+ mr r4, r12
+ li r4, 12800
+
+ subf r0, r9, r7
+ srawi r25, r5, 4
+ subf r4, r4, r0
+
+ lhz r12, 0x1E(r31)
+ bl ConverterFunc
+ mr r3, r12
+ li r3, 12800
+
+ add r0, r7, r9
+ mr r27, r25
+ srawi r23, r4, 4
+ add r0, r3, r0
+ srawi r22, r0, 4
+
+ mtlr r9
blr
+ConverterFunc:
+ # Converts an int to a float
+ lis r10, ConvertFloat@h
+ ori r10, r10, ConvertFloat@l
+ xoris r12,r12,0x8000
+ stw r12, 4(r10)
+ lfd f0, 0(r10)
+ lfd f1, 8(r10)
+ fsub f0, f0, f1
+ fmuls f0, f0, f8
+ # Converts a float to an int
+ fctiw f0, f1
+ stfd f0, 0(r12)
+ lwz r12, 4(r12)
+ blr
@@ -642,6 +1120,10 @@ LakituBomb:
GlobalSpriteSize:
.float 1.0
+.global GlobalSpriteSpeed
+GlobalSpriteSpeed:
+ .float 1.0
+
.global GlobalRiderSize
GlobalRiderSize:
.float 1.0
@@ -650,6 +1132,7 @@ GlobalRiderSize:
SizerOn:
.byte 0
+.align 4
LookupTable:
.float 1, 1, 1, 1, 0.25, 0.5, 0.75, 1.25, 1.5, 2, 2.5, 3, 4, 5, 8, 10
@@ -660,7 +1143,10 @@ RiderLookupTable:
PiranhaPosF:
.float 4.0
-
+ConvertFloat:
+ .word 0x43300000,0x0,0x43300000,0x80000000
+
+
Stupid: .string "Fucking Sprite was enlarged by %f times\n"
.align 4
diff --git a/src/levelspecial.cpp b/src/levelspecial.cpp
index d92c5ce..5fd900d 100644
--- a/src/levelspecial.cpp
+++ b/src/levelspecial.cpp
@@ -28,6 +28,8 @@ extern EventTable_t *EventTable;
extern u16 TimeStopFlag;
extern u32 TimerBranch;
+extern u32 AlwaysDrawFlag;
+extern u32 AlwaysDrawBranch;
extern float MarioDescentRate;
extern float MarioJumpMax;
@@ -36,6 +38,7 @@ extern float MiniMarioJumpArc;
extern float MarioSize;
extern float GlobalSpriteSize;
+extern float GlobalSpriteSpeed;
extern float GlobalRiderSize;
extern char SizerOn;
@@ -65,8 +68,11 @@ bool ResetAfterLevel(void) {
MiniMarioJumpArc = 2.5;
MarioSize = 1.0;
GlobalSpriteSize = 1.0;
+ GlobalSpriteSpeed = 1.0;
GlobalRiderSize = 1.0;
SizerOn = 0;
+ AlwaysDrawFlag = 0x9421FFF0;
+ AlwaysDrawBranch = 0x7C0802A6;
return true;
}
@@ -148,14 +154,29 @@ void LevelSpecial_Update(LevelSpecial *self) {
case 5: // Global Enemy Size
- SizerOn = 1;
+ SizerOn = 3;
GlobalSpriteSize = GlobalSizeFloatModifications[self->effect];
GlobalRiderSize = GlobalRiderFloatModifications[self->effect];
+ GlobalSpriteSpeed = GlobalRiderFloatModifications[self->effect];
-
+ AlwaysDrawFlag = 0x38600001;
+ AlwaysDrawBranch = 0x4E800020;
+ break;
+
case 6: // Individual Enemy Size
- SizerOn = 1;
+ AlwaysDrawFlag = 0x38600001;
+ AlwaysDrawBranch = 0x4E800020;
+
+ if (self->effect == 0)
+ {
+ SizerOn = 1; // Nyb 5
+ }
+ else
+ {
+ SizerOn = 2; // Nyb 7
+ }
+ break;
default:
@@ -194,9 +215,18 @@ void LevelSpecial_Update(LevelSpecial *self) {
GlobalSpriteSize = 1.0;
GlobalRiderSize = 1.0;
+ GlobalSpriteSpeed = 1.0;
+
+ AlwaysDrawFlag = 0x9421FFF0;
+ AlwaysDrawBranch = 0x7C0802A6;
+ break;
case 6: // Individual Enemy Size
SizerOn = 0;
+
+ AlwaysDrawFlag = 0x9421FFF0;
+ AlwaysDrawBranch = 0x7C0802A6;
+ break;
default:
break;
diff --git a/src/spritetex.S b/src/spritetex.S
index bd13428..0336a5c 100644
--- a/src/spritetex.S
+++ b/src/spritetex.S
@@ -80,6 +80,14 @@ TEX_Goomba:
srwi r5, r5, 24
andi. r5, r5, 0xF
b GetTexFilenameForR5
+
+
+.global TEX_BigGoomba
+TEX_BigGoomba:
+ lwz r5, 4(r30)
+ srwi r5, r5, 24
+ andi. r5, r5, 0xF
+ b GetTexFilenameForR5
.global TEX_Barrel
@@ -395,8 +403,13 @@ TEX_PokeyB:
srwi r5, r5, 24
andi. r5, r5, 0xF
b GetTexFilenameForR5
+
-
+.global TEX_PokeyC
+TEX_PokeyC:
+ lwz r5, 4(r30)
+ or r5, r5, r31
+ blr