summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Noga <Tempus@Spectrum-Song.local>2011-07-13 13:15:37 -0500
committerColin Noga <Tempus@Spectrum-Song.local>2011-07-13 13:15:37 -0500
commitbe3c17673ad861f3bfdbb62b9816d9ddfafb017f (patch)
tree86018c48646fc9e6730ccf71a239d0281016002e
parentf81c13f58c9c02cadd7ab1443ce0a5a41b99b213 (diff)
downloadkamek-be3c17673ad861f3bfdbb62b9816d9ddfafb017f.tar.gz
kamek-be3c17673ad861f3bfdbb62b9816d9ddfafb017f.zip
Adding sprite spawner upgrade, and hammer bros throwing stuff
-rw-r--r--growup.yaml59
-rw-r--r--spritetex.yaml29
-rwxr-xr-x[-rw-r--r--]src/growup.s5
-rwxr-xr-x[-rw-r--r--]src/spritespawner.cpp47
-rwxr-xr-x[-rw-r--r--]src/spritetex.S1034
5 files changed, 688 insertions, 486 deletions
diff --git a/growup.yaml b/growup.yaml
index 8e1dbf8..f6f37f7 100644
--- a/growup.yaml
+++ b/growup.yaml
@@ -250,31 +250,35 @@ hooks:
data: "41C00000"
addr_pal: 0x802EE81C
- - name: LakituNoMove
- type: patch
- data: "80A37DE0"
- addr_pal: 0x80AF3930
-
- - name: LakituNoMove
- type: patch
- data: "80A37DE0"
- addr_pal: 0x80AF38A8
-
- - name: LakituNoMove
- type: patch
- data: "80A37DE0"
- addr_pal: 0x80AF38CC
-
- - name: LakituNoMove
- type: patch
- data: "80A37DE0"
- addr_pal: 0x80AF38F0
-
-
-
-
-
+#
+# - name: Projectile_Lakitu
+# type: branch_insn
+# branch_type: bl
+# src_addr_pal: 0x80AB7A28
+# target_func: 'LakituBomb'
+#
+#
+# - name: Projectile_LakituTwo
+# type: patch
+# data: "6000000060000000"
+# addr_pal: 0x80A37BF4
+#
+# - name: Projectile_LakituThree
+# type: patch
+# data: "60000000"
+# addr_pal: 0x80A37CDC
+#
+# - name: Projectile_LakituFour
+# type: patch
+# data: "60000000"
+# addr_pal: 0x80A37D00
+#
+# - name: Projectile_LakituFive
+# type: patch
+# data: "60000000"
+# addr_pal: 0x80A37B0C
+#
@@ -298,13 +302,6 @@ hooks:
# target_func: 'PiranhaFireType'
-# - name: Projectile_Lakitu
-# type: branch_insn
-# branch_type: bl
-# src_addr_pal: 0x80AB7A28
-# target_func: 'LakituBomb'
-# li r3, 0x85 to switch to bobomb
-
# - name: PipeGenerator
# type: branch_insn
# branch_type: bl
diff --git a/spritetex.yaml b/spritetex.yaml
index c33e217..9eda5c0 100644
--- a/spritetex.yaml
+++ b/spritetex.yaml
@@ -478,11 +478,40 @@ hooks:
target_func: 'TEX_SpikeBall'
+ - name: TEX_Huckit
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A3F004
+ target_func: 'TEX_Huckit'
+
+
+ - name: TEX_HuckitBalls
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A40B70
+ target_func: 'TEX_HuckitBalls'
+
+ - name: HammerTime
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A5BCB0
+ target_func: 'HammerTime'
+ - name: HammerLaunch
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A5BA68
+ target_func: 'HammerLaunch'
+
+ - name: HammerSpin
+ type: branch_insn
+ branch_type: bl
+ src_addr_pal: 0x80A5BA90
+ target_func: 'HammerSpin'
diff --git a/src/growup.s b/src/growup.s
index f1cff50..724ee4c 100644..100755
--- a/src/growup.s
+++ b/src/growup.s
@@ -1102,12 +1102,11 @@ PipeGeneratorSpawn:
li r4, 0
blr
+
.global LakituBomb
LakituBomb:
- li r3, 0x85
- li r4, 0x3000
- slwi r4, r4, 16
+ li r3, 0x33
blr
diff --git a/src/spritespawner.cpp b/src/spritespawner.cpp
index d9ee51a..7468bbb 100644..100755
--- a/src/spritespawner.cpp
+++ b/src/spritespawner.cpp
@@ -14,7 +14,8 @@ struct SpriteSpawner {
// Any variables you add to the class go here; starting at offset 0x3D0
u64 eventFlag; // 0x3D0
u16 type; // 0x3D4
- u8 lastEvState; // 0x3D6
+ u32 inheritSet; // 0x3D6
+ u8 lastEvState; // 0x3DA
};
struct EventTable_t {
@@ -43,42 +44,34 @@ void SpriteSpawner_Update(SpriteSpawner *self);
bool SpriteSpawner_Create(SpriteSpawner *self) {
OSReport("I exist, dammit!");
- char eventNum = (self->settings >> 24) & 0xFF;
+ char eventNum = (self->settings >> 28) & 0xF;
+ OSReport("Event to activate: %d", eventNum);
+
self->eventFlag = (u64)1 << (eventNum - 1);
+ self->type = (self->settings >> 16) & 0xFFF;
- self->type = (self->settings) & 0xFFFF;
-
- self->lastEvState = 0xFF;
-
+ short tempSet = self->settings & 0xFFFF;
+ self->inheritSet = (tempSet & 3) | ((tempSet & 0xC) << 2) | ((tempSet & 0x30) << 4) | ((tempSet & 0xC0) << 6) | ((tempSet & 0x300) << 8) | ((tempSet & 0xC00) << 10) | ((tempSet & 0x3000) << 12) | ((tempSet & 0xC000) << 14);
+
SpriteSpawner_Update(self);
return true;
}
bool SpriteSpawner_Execute(SpriteSpawner *self) {
+ OSReport("Events: %08x%08x", EventTable->events >> 32, EventTable->events & 0xFFFFFFFF);
SpriteSpawner_Update(self);
return true;
}
void SpriteSpawner_Update(SpriteSpawner *self) {
-
- u8 newEvState = 0;
- if (EventTable->events & self->eventFlag)
- newEvState = 1;
-
- if (newEvState == self->lastEvState)
- return;
-
- u8 offState;
- if (newEvState == ACTIVATE)
- {
- offState = (newEvState == 1) ? 1 : 0;
-
+
+ if (EventTable->events & self->eventFlag)
+ {
// Put an action for when the event turns on here
- int spriteset = 0;
VEC pos;
pos.x = self->x;
pos.y = self->y;
@@ -86,16 +79,8 @@ void SpriteSpawner_Update(SpriteSpawner *self) {
OSReport("Spawning Sprite: %d at %f,%f,%f\n", self->type, pos.x, pos.y, pos.z);
- CreateActor(self->type, spriteset, pos, 0, 0);
- }
-
- else
- {
- offState = (newEvState == 1) ? 0 : 1;
-
- // Put an action for when the event turns off here
-
+ CreateActor(self->type, self->inheritSet, pos, 0, 0);
+
+ EventTable->events = EventTable->events & ~self->eventFlag;
}
-
- self->lastEvState = newEvState;
}
diff --git a/src/spritetex.S b/src/spritetex.S
index 55c00af..c636943 100644..100755
--- a/src/spritetex.S
+++ b/src/spritetex.S
@@ -1,5 +1,5 @@
.extern sprintf
-.extern GenerateRandomNumber
+.extern GenerateRandomNumber
#ifndef __MWERKS__
.set r0,0; .set r1,1; .set r2,2; .set r3,3; .set r4,4
@@ -27,10 +27,10 @@ GetTexFilenameForR5:
stw r0, 0x24(sp)
stw r3, 0x1C(sp)
stw r4, 0x18(sp)
- stw r6, 0x14(sp)
- stw r7, 0x10(sp)
- stw r8, 0xC(sp)
- stw r9, 0x8(sp)
+ stw r6, 0x14(sp)
+ stw r7, 0x10(sp)
+ stw r8, 0xC(sp)
+ stw r9, 0x8(sp)
lis r3, TexFilenameBuffer@h
ori r3, r3, TexFilenameBuffer@l
@@ -47,109 +47,109 @@ GetTexFilenameForR5:
lwz r0, 0x24(sp)
lwz r3, 0x1C(sp)
lwz r4, 0x18(sp)
- lwz r6, 0x14(sp)
- lwz r7, 0x10(sp)
- lwz r8, 0xC(sp)
- lwz r9, 0x8(sp)
+ lwz r6, 0x14(sp)
+ lwz r7, 0x10(sp)
+ lwz r8, 0xC(sp)
+ lwz r9, 0x8(sp)
mtlr r0
addi sp, sp, 0x20
blr
-.global TEX_YoshiEggSetColour
-TEX_YoshiEggSetColour:
-
+.global TEX_YoshiEggSetColour
+TEX_YoshiEggSetColour:
+
stwu sp, -0x30(sp)
mflr r0
stw r0, 0x24(sp)
mr r9, r3
stw r4, 0x18(sp)
- stw r5, 0x14(sp)
- stw r6, 0x10(sp)
- stw r7, 0x0C(sp)
-
- li r3, 10
- bl GenerateRandomNumber
- stw r3, 0x5F8(r9)
-
+ stw r5, 0x14(sp)
+ stw r6, 0x10(sp)
+ stw r7, 0x0C(sp)
+
+ li r3, 10
+ bl GenerateRandomNumber
+ stw r3, 0x5F8(r9)
+
lwz r0, 0x24(sp)
mr r3, r9
- lwz r4, 0x18(sp)
- lwz r5, 0x14(sp)
- lwz r6, 0x10(sp)
- lwz r7, 0x0C(sp)
+ lwz r4, 0x18(sp)
+ lwz r5, 0x14(sp)
+ lwz r6, 0x10(sp)
+ lwz r7, 0x0C(sp)
mtlr r0
addi sp, sp, 0x30
- blr
-
-
-.global TEX_YoshiEggSetBrres
-TEX_YoshiEggSetBrres:
-
- lwz r5, 0x5F8(r27)
- clrlwi r5, r5, 28
-
- cmpwi r5, 4
- blt YoshiEggOne
-
- cmpwi r5, 8
- blt YoshiEggTwo
-
- li r5, 2
- b GetTexFilenameForR5
-
-
-YoshiEggOne:
- li r5, 0
- b GetTexFilenameForR5
-
-YoshiEggTwo:
- li r5, 1
- b GetTexFilenameForR5
-
-
-
-.global TEX_YoshiEggSetFrame
-TEX_YoshiEggSetFrame:
-
- lwz r5, 0x5F8(r27)
- clrlwi r5, r5, 30
- blr
-
-
-.global TEX_YoshiEggEffect
-TEX_YoshiEggEffect:
-
- lwz r0, 0x5F8(r3)
- clrlwi r0, r0, 30
- blr
-
-
-.global TEX_YoshiSetColour
-TEX_YoshiSetColour:
-
- lwz r4, 0x5F8(r31)
- oris r4, r4, 1
- blr
-
-
-.global TEX_YoshiHack
-TEX_YoshiHack:
-
+ blr
+
+
+.global TEX_YoshiEggSetBrres
+TEX_YoshiEggSetBrres:
+
+ lwz r5, 0x5F8(r27)
+ clrlwi r5, r5, 28
+
+ cmpwi r5, 4
+ blt YoshiEggOne
+
+ cmpwi r5, 8
+ blt YoshiEggTwo
+
+ li r5, 2
+ b GetTexFilenameForR5
+
+
+YoshiEggOne:
+ li r5, 0
+ b GetTexFilenameForR5
+
+YoshiEggTwo:
+ li r5, 1
+ b GetTexFilenameForR5
+
+
+
+.global TEX_YoshiEggSetFrame
+TEX_YoshiEggSetFrame:
+
+ lwz r5, 0x5F8(r27)
+ clrlwi r5, r5, 30
+ blr
+
+
+.global TEX_YoshiEggEffect
+TEX_YoshiEggEffect:
+
+ lwz r0, 0x5F8(r3)
+ clrlwi r0, r0, 30
+ blr
+
+
+.global TEX_YoshiSetColour
+TEX_YoshiSetColour:
+
+ lwz r4, 0x5F8(r31)
+ oris r4, r4, 1
+ blr
+
+
+.global TEX_YoshiHack
+TEX_YoshiHack:
+
stwu sp, -0x30(sp)
mflr r0
stw r0, 0x24(sp)
stw r3, 0x1C(sp)
stw r4, 0x18(sp)
- stw r5, 0x14(sp)
- stw r6, 0x10(sp)
- stw r7, 0x0C(sp)
- stw r8, 0x08(sp)
- stw r9, 0x04(sp)
-
- lwz r5, 0x24C(r31)
- clrlwi r5, r5, 28
-
+ stw r5, 0x14(sp)
+ stw r6, 0x10(sp)
+ stw r7, 0x0C(sp)
+ stw r8, 0x08(sp)
+ stw r9, 0x04(sp)
+
+ lwz r5, 0x24C(r31)
+ clrlwi r5, r5, 28
+
lis r3, TexFilenameBuffer@h
ori r3, r3, TexFilenameBuffer@l
@@ -161,20 +161,20 @@ TEX_YoshiHack:
lis r5, TexFilenameBuffer@h
ori r5, r5, TexFilenameBuffer@l
-
+
lis r4, YoshiArc@h
ori r4, r4, YoshiArc@l
-
+
lwz r0, 0x24(sp)
lwz r3, 0x1C(sp)
- lwz r6, 0x10(sp)
- lwz r7, 0x0C(sp)
- lwz r8, 0x08(sp)
- lwz r9, 0x04(sp)
+ lwz r6, 0x10(sp)
+ lwz r7, 0x0C(sp)
+ lwz r8, 0x08(sp)
+ lwz r9, 0x04(sp)
mtlr r0
addi sp, sp, 0x30
blr
-
+
@@ -200,8 +200,8 @@ TEX_Goomba:
srwi r5, r5, 24
andi. r5, r5, 0xF
b GetTexFilenameForR5
-
-
+
+
.global TEX_BigGoomba
TEX_BigGoomba:
lwz r5, 4(r30)
@@ -279,8 +279,8 @@ TEX_Spiny:
srwi r5, r5, 24
andi. r5, r5, 0xF
b GetTexFilenameForR5
-
-
+
+
.global TEX_SpinyShell
TEX_SpinyShell:
lwz r5, 4(r3)
@@ -309,7 +309,7 @@ TEX_Coaster:
TEX_Koopa:
lwz r5, 4(r29)
srwi r5, r5, 24
- andi. r5, r5, 0xF
+ andi. r5, r5, 0xF
b GetTexFilenameForR5
@@ -319,8 +319,8 @@ TEX_Gabon:
srwi r5, r5, 24
andi. r5, r5, 0xF
b GetTexFilenameForR5
-
-
+
+
.global TEX_Gabon_Spike
TEX_Gabon_Spike:
andis. r4, r4, 0xFFF0
@@ -353,18 +353,18 @@ TEX_Switch:
.global TEX_WiggleShroom
TEX_WiggleShroom:
lwz r5, -0x520(r3)
- # This sprite is pretty complex
- # The register with THIS is r29
- # before the loading function,
- # it passes it into r3, and then mr's
- # it into r30. r3 is then overwritten.
- # Then, it puts r31 into r5, r30 partly
- # into r3 and partly into r4. Why?
- # So, the possibilities for THIS are
- # r30, r3, and r4, no? In the next function,
- # r30 is stored over before our getFile, as
- # are r29/r28.
-
+ # This sprite is pretty complex
+ # The register with THIS is r29
+ # before the loading function,
+ # it passes it into r3, and then mr's
+ # it into r30. r3 is then overwritten.
+ # Then, it puts r31 into r5, r30 partly
+ # into r3 and partly into r4. Why?
+ # So, the possibilities for THIS are
+ # r30, r3, and r4, no? In the next function,
+ # r30 is stored over before our getFile, as
+ # are r29/r28.
+
srwi r5, r5, 24
andi. r5, r5, 0xF
b GetTexFilenameForR5
@@ -416,7 +416,7 @@ TEX_Bomb:
srwi r5, r5, 24
andi. r5, r5, 0xF
b GetTexFilenameForR5
-
+
.global TEX_ParaBomb
TEX_ParaBomb:
@@ -476,7 +476,7 @@ TEX_Boo:
TEX_Midway:
lwz r5, 4(r29)
srwi r5, r5, 24
- andi. r5, r5, 0xFF
+ andi. r5, r5, 0xFF
b GetTexFilenameForR5
@@ -492,10 +492,10 @@ TEX_Goal:
TEX_StretchMush:
lwz r5, 4(r30)
srwi r5, r5, 24
- andi. r5, r5, 0xF
+ andi. r5, r5, 0xF
b GetTexFilenameForR5
-
-
+
+
.global TEX_BlockSlide
TEX_BlockSlide:
lwz r5, 4(r28)
@@ -513,91 +513,91 @@ TEX_Spinner:
.global TEX_Platforms
-TEX_Platforms:
-
- li r5, 1
+TEX_Platforms:
+
+ li r5, 1
b GetTexFilenameForR5
-# cmpwi r0, 9
-# blt ReplacePlatforms
-#
-# lwzx r5, r5, r0
-# blr
-
-
-ReplacePlatforms:
-
+# cmpwi r0, 9
+# blt ReplacePlatforms
+#
+# lwzx r5, r5, r0
+# blr
+
+
+ReplacePlatforms:
+
lwz r5, 4(r29)
srwi r5, r5, 4
andi. r5, r5, 0xF
b GetTexFilenameForR5
-
+
.global TEX_Platform_ShifterH
-TEX_Platform_ShifterH:
-
- stw r5, 0x504(r30)
- lwz r5, 4(r30)
- stw r5, 0x3D8(r30)
- blr
-
+TEX_Platform_ShifterH:
+
+ stw r5, 0x504(r30)
+ lwz r5, 4(r30)
+ stw r5, 0x3D8(r30)
+ blr
+
.global TEX_Platform_ShifterF
-TEX_Platform_ShifterF:
-
- stw r4, 0x504(r30)
- lwz r4, 4(r30)
- stw r4, 0x3D8(r30)
- blr
-
+TEX_Platform_ShifterF:
+
+ stw r4, 0x504(r30)
+ lwz r4, 4(r30)
+ stw r4, 0x3D8(r30)
+ blr
+
.global TEX_Platform_ShifterL
-TEX_Platform_ShifterL:
-
- stw r5, 0x504(r28)
- lwz r5, 4(r28)
- stw r5, 0x3D8(r28)
- blr
-
+TEX_Platform_ShifterL:
+
+ stw r5, 0x504(r28)
+ lwz r5, 4(r28)
+ stw r5, 0x3D8(r28)
+ blr
+
.global TEX_Platform_ShifterR
-TEX_Platform_ShifterR:
-
- stw r4, 0x504(r31)
- lwz r4, 4(r31)
- stw r4, 0x3D8(r31)
- blr
-
+TEX_Platform_ShifterR:
+
+ stw r4, 0x504(r31)
+ lwz r4, 4(r31)
+ stw r4, 0x3D8(r31)
+ blr
+
.global TEX_Platform_ShifterS
-TEX_Platform_ShifterS:
-
- stw r30, 0x4C4(r27)
- lwz r30, 4(r27)
- stw r30, 0x398(r27)
- blr
-
+TEX_Platform_ShifterS:
+
+ stw r30, 0x4C4(r27)
+ lwz r30, 4(r27)
+ stw r30, 0x398(r27)
+ blr
+
.global TEX_Platform_ShifterK
-TEX_Platform_ShifterK:
-
- stw r4, 0x5A4(r27)
- lwz r4, 4(r27)
- stw r4, 0x478(r27)
- blr
-
+TEX_Platform_ShifterK:
+
+ stw r4, 0x5A4(r27)
+ lwz r4, 4(r27)
+ stw r4, 0x478(r27)
+ blr
+
.global TEX_Platform_ShifterW
-TEX_Platform_ShifterW:
-
- stw r0, 0x504(r29)
- lwz r0, 4(r29)
- stw r0, 0x3D8(r29)
- blr
-
+TEX_Platform_ShifterW:
+
+ stw r0, 0x504(r29)
+ lwz r0, 4(r29)
+ stw r0, 0x3D8(r29)
+ blr
+
.global TEX_Platform_ShifterSL
-TEX_Platform_ShifterSL:
-
- stw r4, 0x504(r29)
- lwz r4, 4(r29)
- stw r4, 0x3D8(r29)
- blr
-
-
-
+TEX_Platform_ShifterSL:
+
+ stw r4, 0x504(r29)
+ lwz r4, 4(r29)
+ stw r4, 0x3D8(r29)
+ blr
+
+
+
.global TEX_PokeyA
TEX_PokeyA:
@@ -611,199 +611,199 @@ TEX_PokeyA:
TEX_PokeyB:
lwz r5, 4(r29)
srwi r5, r5, 24
- andi. r5, r5, 0xF
-
+ andi. r5, r5, 0xF
+
b GetTexFilenameForR5
-
-
-.global TEX_PokeySnowman
-TEX_PokeySnowman:
-
+
+
+.global TEX_PokeySnowman
+TEX_PokeySnowman:
+
lwz r10, 4(r30)
srwi r10, r10, 24
- andi. r10, r10, 0xF
-
- cmpwi r10, 0x2
- bne SnowmanPokey
-
- lwz r10, 4(r30)
- # r10 is the current height
- andi. r10, r10, 0xF
-
- # Find it
- lis r11, SnowmanTable@h
- ori r11, r11, SnowmanTable@l
- slwi r10, r10, 2 # size *= 4 (size of float)
- lfsx f0, r11, r10 # get it from the array
-
- blr
-
-
-SnowmanPokey:
-
- lfs f0, 0x54(r31)
+ andi. r10, r10, 0xF
+
+ cmpwi r10, 0x2
+ bne SnowmanPokey
+
+ lwz r10, 4(r30)
+ # r10 is the current height
+ andi. r10, r10, 0xF
+
+ # Find it
+ lis r11, SnowmanTable@h
+ ori r11, r11, SnowmanTable@l
+ slwi r10, r10, 2 # size *= 4 (size of float)
+ lfsx f0, r11, r10 # get it from the array
+
blr
-
-
-
-
-.global TEX_PokeySnowmanPosF
-TEX_PokeySnowmanPosF:
-
- lwz r10, 4(r31)
- andi. r10, r10, 0xF
-
- lis r11, SnowmanTable@h
- ori r11, r11, SnowmanTable@l
- slwi r10, r10, 2 # size *= 4 (size of float)
- lfsx f2, r11, r10 # get it from the array
-
- fmuls f0, f0, f2
- stfs f0, 0xB0(r30)
- blr
-
-.global TEX_PokeySnowmanPosE
-TEX_PokeySnowmanPosE:
-
- lwz r10, 4(r31)
- andi. r10, r10, 0xF
-
- lis r11, SnowmanTable@h
- ori r11, r11, SnowmanTable@l
- slwi r10, r10, 2 # size *= 4 (size of float)
- lfsx f2, r11, r10 # get it from the array
-
- fmuls f31, f31, f2
- stfs f31, 0xB0(r29)
- blr
-
-.global TEX_PokeySnowmanPosD
-TEX_PokeySnowmanPosD:
-
- lwz r10, 4(r31)
- andi. r10, r10, 0xF
-
- lis r11, SnowmanTable@h
- ori r11, r11, SnowmanTable@l
- slwi r10, r10, 2 # size *= 4 (size of float)
- lfsx f2, r11, r10 # get it from the array
-
- fmuls f1, f1, f2
- stfs f1, 0xB0(r30)
- blr
-
-
-.global TEX_PokeySnowmanPosC
-TEX_PokeySnowmanPosC:
-
- lwz r10, 4(r31)
- andi. r10, r10, 0xF
-
- lis r11, SnowmanTable@h
- ori r11, r11, SnowmanTable@l
- slwi r10, r10, 2 # size *= 4 (size of float)
- lfsx f2, r11, r10 # get it from the array
-
- fmuls f0, f0, f2
- stfs f0, 0xB0(r31)
- blr
-
-
-.global TEX_PokeySnowmanPosB
-TEX_PokeySnowmanPosB:
-
- lwz r10, 4(r31)
- andi. r10, r10, 0xF
-
- lis r11, SnowmanTable@h
- ori r11, r11, SnowmanTable@l
- slwi r10, r10, 2 # size *= 4 (size of float)
- lfsx f0, r11, r10 # get it from the array
-
- fmuls f1, f1, f0
- stfs f1, 0x18(r1)
- blr
-
-
-
-.global TEX_PokeySnowmanPosA
-TEX_PokeySnowmanPosA:
-
- lwz r10, 4(r31)
- andi. r10, r10, 0xF
-
- lis r11, SnowmanTable@h
- ori r11, r11, SnowmanTable@l
- slwi r10, r10, 2 # size *= 4 (size of float)
- lfsx f0, r11, r10 # get it from the array
-
- fmuls f3, f3, f0
- stfs f3, 0x168(r31)
- blr
-
-
-.global TEX_PokeySnowmanPos
-TEX_PokeySnowmanPos:
-
- mr r3, r30
-
- lwz r10, 4(r30)
- andi. r10, r10, 0xF
-
- lis r11, SnowmanTable@h
- ori r11, r11, SnowmanTable@l
- slwi r10, r10, 2 # size *= 4 (size of float)
- lfsx f0, r11, r10 # get it from the array
-
- lis r5, AddAmount@h
- ori r5, r5, AddAmount@l
- slwi r6, r6, 2 # size *= 4 (size of float)
- lfsx f3, r5, r6 # get it from the array
-
- lfs f2, 0xB0(r30)
- fmuls f3, f3, f0
- fmuls f3, f3, f0
- fmuls f3, f3, f0
- fsubs f2, f2, f3
- stfs f2, 0xB0(r30)
-
- blr
-
-SnowmanPokeyPos:
-
- fsubs f0, f0, f31
- fsubs f0, f0, f31
- fsubs f1, f1, f31
- fsubs f1, f1, f31
-
-
- lfs f2, 8(r1)
- fadds f2, f2, f31
- stfs f2, 8(r1)
+
+
+SnowmanPokey:
+
+ lfs f0, 0x54(r31)
blr
-
+
+
+
+
+.global TEX_PokeySnowmanPosF
+TEX_PokeySnowmanPosF:
+
+ lwz r10, 4(r31)
+ andi. r10, r10, 0xF
+
+ lis r11, SnowmanTable@h
+ ori r11, r11, SnowmanTable@l
+ slwi r10, r10, 2 # size *= 4 (size of float)
+ lfsx f2, r11, r10 # get it from the array
+
+ fmuls f0, f0, f2
+ stfs f0, 0xB0(r30)
+ blr
+
+.global TEX_PokeySnowmanPosE
+TEX_PokeySnowmanPosE:
+
+ lwz r10, 4(r31)
+ andi. r10, r10, 0xF
+
+ lis r11, SnowmanTable@h
+ ori r11, r11, SnowmanTable@l
+ slwi r10, r10, 2 # size *= 4 (size of float)
+ lfsx f2, r11, r10 # get it from the array
+
+ fmuls f31, f31, f2
+ stfs f31, 0xB0(r29)
+ blr
+
+.global TEX_PokeySnowmanPosD
+TEX_PokeySnowmanPosD:
+
+ lwz r10, 4(r31)
+ andi. r10, r10, 0xF
+
+ lis r11, SnowmanTable@h
+ ori r11, r11, SnowmanTable@l
+ slwi r10, r10, 2 # size *= 4 (size of float)
+ lfsx f2, r11, r10 # get it from the array
+
+ fmuls f1, f1, f2
+ stfs f1, 0xB0(r30)
+ blr
+
+
+.global TEX_PokeySnowmanPosC
+TEX_PokeySnowmanPosC:
+
+ lwz r10, 4(r31)
+ andi. r10, r10, 0xF
+
+ lis r11, SnowmanTable@h
+ ori r11, r11, SnowmanTable@l
+ slwi r10, r10, 2 # size *= 4 (size of float)
+ lfsx f2, r11, r10 # get it from the array
+
+ fmuls f0, f0, f2
+ stfs f0, 0xB0(r31)
+ blr
+
+
+.global TEX_PokeySnowmanPosB
+TEX_PokeySnowmanPosB:
+
+ lwz r10, 4(r31)
+ andi. r10, r10, 0xF
+
+ lis r11, SnowmanTable@h
+ ori r11, r11, SnowmanTable@l
+ slwi r10, r10, 2 # size *= 4 (size of float)
+ lfsx f0, r11, r10 # get it from the array
+
+ fmuls f1, f1, f0
+ stfs f1, 0x18(r1)
+ blr
+
+
+
+.global TEX_PokeySnowmanPosA
+TEX_PokeySnowmanPosA:
+
+ lwz r10, 4(r31)
+ andi. r10, r10, 0xF
+
+ lis r11, SnowmanTable@h
+ ori r11, r11, SnowmanTable@l
+ slwi r10, r10, 2 # size *= 4 (size of float)
+ lfsx f0, r11, r10 # get it from the array
+
+ fmuls f3, f3, f0
+ stfs f3, 0x168(r31)
+ blr
+
+
+.global TEX_PokeySnowmanPos
+TEX_PokeySnowmanPos:
+
+ mr r3, r30
+
+ lwz r10, 4(r30)
+ andi. r10, r10, 0xF
+
+ lis r11, SnowmanTable@h
+ ori r11, r11, SnowmanTable@l
+ slwi r10, r10, 2 # size *= 4 (size of float)
+ lfsx f0, r11, r10 # get it from the array
+
+ lis r5, AddAmount@h
+ ori r5, r5, AddAmount@l
+ slwi r6, r6, 2 # size *= 4 (size of float)
+ lfsx f3, r5, r6 # get it from the array
+
+ lfs f2, 0xB0(r30)
+ fmuls f3, f3, f0
+ fmuls f3, f3, f0
+ fmuls f3, f3, f0
+ fsubs f2, f2, f3
+ stfs f2, 0xB0(r30)
+
+ blr
+
+SnowmanPokeyPos:
+
+ fsubs f0, f0, f31
+ fsubs f0, f0, f31
+ fsubs f1, f1, f31
+ fsubs f1, f1, f31
+
+
+ lfs f2, 8(r1)
+ fadds f2, f2, f31
+ stfs f2, 8(r1)
+ blr
+
.global TEX_PokeyC
TEX_PokeyC:
-
- lwz r5, 4(r30)
- andis. r5, r5, 0xFFF0
+
+ lwz r5, 4(r30)
+ andis. r5, r5, 0xFFF0
or r5, r5, r31
or r5, r5, r0
-
- lwz r0, 0x524(r30)
- slwi r0, r0, 8
- or r5, r5, r0
-
+
+ lwz r0, 0x524(r30)
+ slwi r0, r0, 8
+ or r5, r5, r0
+
blr
-
-
+
+
.global TEX_PokeyNoSand
TEX_PokeyNoSand:
- cmpwi r3, 0x20
+ cmpwi r3, 0x20
blr
-
-
+
+
.global TEX_CloudBounce
TEX_CloudBounce:
@@ -811,74 +811,266 @@ TEX_CloudBounce:
srwi r5, r5, 24
andi. r5, r5, 0xF
b GetTexFilenameForR5
-
-
+
+
.global TEX_SpikeBall
TEX_SpikeBall:
lwz r5, 4(r30)
srwi r5, r5, 24
andi. r5, r5, 0xF
b GetTexFilenameForR5
+
+
+.global TEX_Huckit
+TEX_Huckit:
+ lwz r5, 4(r29)
+ srwi r5, r5, 24
+ andi. r5, r5, 0xF
+ b GetTexFilenameForR5
+
+
+.global TEX_HuckitBalls
+TEX_HuckitBalls:
+ lwz r5, 4(r30)
+ srwi r5, r5, 24
+ andi. r5, r5, 0xF
+ b GetTexFilenameForR5
+
+
+
+
+
+.global HammerTime
+HammerTime:
+ lwz r8, 4(r31)
+ srwi r8, r8, 8
+ andi. r8, r8, 0xF
+ cmpwi r8, 1
+ beq ThrowBobomb
+ cmpwi r8, 2
+ beq ThrowGoomba
+
+ cmpwi r8, 3
+ beq ThrowSpiny
+
+ cmpwi r8, 4
+ beq ThrowCoin
+
+ cmpwi r8, 5
+ beq ThrowLemmyBall
+ blr
-.data
-TexFilenameBuffer:
- .long 0,0,0,0
-
-TexFormatString:
- .string "g3d/t%02d.brres"
-ConvertFloat:
- .word 0x43300000,0x0,0x43300000,0x80000000
+ThrowBobomb:
+ li r3, 133
+ lis r4, 0x3000
+ ori r4, r4, 0x0041
+ blr
-.align 4
+ThrowGoomba:
+ li r3, 0x33
+ li r4, 1
+ blr
+
+ThrowSpiny:
+ li r3, 0x39
+ li r4, 1
+ blr
-SnowmanTable:
- .float 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5
+ThrowCoin:
+ li r3, 10
+ mflr r8
+ mr r9, r5
+ bl GenerateRandomNumber
+ mr r5, r9
-AddAmount:
- .float 32.0
+ mtlr r8
+ cmpwi r3, 1
+ beq ThrowItem
-.align 4
-
-YoshiArc:
- .string "Y_TexGreen"
-.align 4
-
-Y_TexGreen:
- .string "Y_TexGreen"
-.align 4
-Y_TexRed:
- .string "Y_TexRed"
-.align 4
-Y_TexYellow:
- .string "Y_TexYellow"
-.align 4
-Y_TexBlue:
- .string "Y_TexBlue"
-.align 4
-Y_TexPurple:
- .string "Y_TexPurple"
-.align 4
-Y_TexOrange:
- .string "Y_TexOrange"
-.align 4
-Y_TexSkyBlue:
- .string "Y_TexSkyBlue"
-.align 4
-Y_TexBlack:
- .string "Y_TexBlack"
-.align 4
-Y_TexWhite:
- .string "Y_TexWhite"
-.align 4
+ li r3, 0x193
+ li r4, 0
+ li r6, 0
+ li r7, 0
+ blr
+
+ThrowItem:
+ li r3, 6
+ mflr r8
+ mr r9, r5
+ bl GenerateRandomNumber
+ mtlr r8
+ mr r5, r9
-YoshiStrings:
- .long Y_TexGreen, Y_TexRed, Y_TexYellow, Y_TexBlue, Y_TexPurple, Y_TexOrange, Y_TexSkyBlue, Y_TexBlack, Y_TexWhite
+ li r4, 0
-.align 4
+ mr r4, r3
+ li r3, 0x3C
+ li r6, 0
+ li r7, 0
+ blr
+
+
+ThrowLemmyBall:
+ li r3, 0x232
+ li r4, 0
+ blr
+
+
+.global HammerLaunch
+HammerLaunch:
+ mr r3, r30
+ # r31 is the new actor currently
+ # r30 is self, all others are volatile
+
+ lwz r5, 4(r30)
+ lwz r8, 0x348(r30)
+
+ srwi r5, r5, 8
+ andi. r5, r5, 0xF
+
+ cmpwi r5, 0
+ beqlr
+
+ lis r7, LaunchAngle@h
+ ori r7, r7, LaunchAngle@l
+
+# lfs f0, 0(r7)
+# stfs f0, 0xDC(r31)
+# stfs f0, 0xE0(r31)
+# stfs f0, 0xE4(r31)
+
+ # Nybble 11 is for y right now
+ li r6, 0
+ slwi r6, r6, 2 # size *= 4 (size of float)
+ lfsx f0, r7, r6 # get it from the array
+
+ stfs f0, 0xEC(r31)
+
+ cmpwi r5, 5
+ beq LemmyLaunch
+
+ li r6, 1
+ slwi r6, r6, 2 # size *= 4 (size of float)
+
+ cmpwi r8, 0
+ bne FacingLeft
+
+ # Nybble 12 is for x right now
+ lfsx f0, r7, r6 # get it from the array
+
+ stfs f0, 0xE8(r31)
+
+ blr
+
+
+FacingLeft:
+
+ lis r7, LaunchAngleLeft@h
+ ori r7, r7, LaunchAngleLeft@l
+
+ # Nybble 12 is for x right now
+ lfsx f0, r7, r6 # get it from the array
+
+ stfs f0, 0xE8(r31)
+ li r7, 270
+ sth r7, 0x102(r31)
+
+ blr
+
+
+LemmyLaunch:
+
+ li r6, 2
+ slwi r6, r6, 2 # size *= 4 (size of float)
+
+ cmpwi r8, 0
+ bne FacingLeft
+
+ # Nybble 12 is for x right now
+ lfsx f0, r7, r6 # get it from the array
+
+ stfs f0, 0xE8(r31)
+ blr
+
+
+.global HammerSpin
+HammerSpin:
+# sth r3, 0x100(r31)
+ blr
+
+
+
+
+.data
+TexFilenameBuffer:
+ .long 0,0,0,0
+
+TexFormatString:
+ .string "g3d/t%02d.brres"
+
+ConvertFloat:
+ .word 0x43300000,0x0,0x43300000,0x80000000
+
+.align 4
+
+SnowmanTable:
+ .float 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 5.5, 6.0, 6.5
+
+AddAmount:
+ .float 32.0
+
+LaunchAngle:
+ .float 4.0, 2.5, 1.5
+
+LaunchAngleLeft:
+ .float -4.0, -2.5, -1.5
+
+
+
+.align 4
+
+YoshiArc:
+ .string "Y_TexGreen"
+.align 4
+
+Y_TexGreen:
+ .string "Y_TexGreen"
+.align 4
+Y_TexRed:
+ .string "Y_TexRed"
+.align 4
+Y_TexYellow:
+ .string "Y_TexYellow"
+.align 4
+Y_TexBlue:
+ .string "Y_TexBlue"
+.align 4
+Y_TexPurple:
+ .string "Y_TexPurple"
+.align 4
+Y_TexOrange:
+ .string "Y_TexOrange"
+.align 4
+Y_TexSkyBlue:
+ .string "Y_TexSkyBlue"
+.align 4
+Y_TexBlack:
+ .string "Y_TexBlack"
+.align 4
+Y_TexWhite:
+ .string "Y_TexWhite"
+.align 4
+
+YoshiStrings:
+ .long Y_TexGreen, Y_TexRed, Y_TexYellow, Y_TexBlue, Y_TexPurple, Y_TexOrange, Y_TexSkyBlue, Y_TexBlack, Y_TexWhite
+
+.align 4
+
+