diff options
| author | Colin Noga <Tempus@Spectrum-Song.local> | 2011-07-13 13:15:37 -0500 | 
|---|---|---|
| committer | Colin Noga <Tempus@Spectrum-Song.local> | 2011-07-13 13:15:37 -0500 | 
| commit | be3c17673ad861f3bfdbb62b9816d9ddfafb017f (patch) | |
| tree | 86018c48646fc9e6730ccf71a239d0281016002e | |
| parent | f81c13f58c9c02cadd7ab1443ce0a5a41b99b213 (diff) | |
| download | kamek-be3c17673ad861f3bfdbb62b9816d9ddfafb017f.tar.gz kamek-be3c17673ad861f3bfdbb62b9816d9ddfafb017f.zip | |
Adding sprite spawner upgrade, and hammer bros throwing stuff
| -rw-r--r-- | growup.yaml | 59 | ||||
| -rw-r--r-- | spritetex.yaml | 29 | ||||
| -rwxr-xr-x[-rw-r--r--] | src/growup.s | 5 | ||||
| -rwxr-xr-x[-rw-r--r--] | src/spritespawner.cpp | 47 | ||||
| -rwxr-xr-x[-rw-r--r--] | src/spritetex.S | 1034 | 
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
 +
 +
 | 
