Decompile chrSpawnAtPad and rename other spawn functions

This commit is contained in:
Ryan Dwyer 2019-12-22 09:53:23 +10:00
parent 8501f226e4
commit b9484635f7
6 changed files with 42 additions and 61 deletions

View File

@ -49419,7 +49419,7 @@ s32 func0f0495d0(struct chrdata *chr, s32 pad_id)
if (resolved_pad_id >= 0) {
padUnpack(resolved_pad_id, 0x40, &pad);
ret = pad.padnum;
ret = pad.room;
}
} else {
ret = pad_id;
@ -51475,7 +51475,7 @@ glabel func0f04af84
);
GLOBAL_ASM(
glabel func0f04b2f4
glabel chrSpawnAtCoord
/* f04b2f4: 27bdff88 */ addiu $sp,$sp,-120
/* f04b2f8: afbf0024 */ sw $ra,0x24($sp)
/* f04b2fc: afa40078 */ sw $a0,0x78($sp)
@ -51652,42 +51652,21 @@ glabel func0f04b2f4
/* f04b574: 00000000 */ sll $zero,$zero,0x0
);
GLOBAL_ASM(
glabel chrSpawn
/* f04b578: 27bdff78 */ addiu $sp,$sp,-136
/* f04b57c: afbf0024 */ sw $ra,0x24($sp)
/* f04b580: afa5008c */ sw $a1,0x8c($sp)
/* f04b584: afa60090 */ sw $a2,0x90($sp)
/* f04b588: 0fc1258b */ jal padResolve
/* f04b58c: 00e02825 */ or $a1,$a3,$zero
/* f04b590: 00402025 */ or $a0,$v0,$zero
/* f04b594: 24050046 */ addiu $a1,$zero,0x46
/* f04b598: 0fc456ac */ jal padUnpack
/* f04b59c: 27a60030 */ addiu $a2,$sp,0x30
/* f04b5a0: c7ac003c */ lwc1 $f12,0x3c($sp)
/* f04b5a4: 0fc259d4 */ jal func0f096750
/* f04b5a8: c7ae0044 */ lwc1 $f14,0x44($sp)
/* f04b5ac: 8fae0078 */ lw $t6,0x78($sp)
/* f04b5b0: 8fb80098 */ lw $t8,0x98($sp)
/* f04b5b4: 8fb9009c */ lw $t9,0x9c($sp)
/* f04b5b8: 240fffff */ addiu $t7,$zero,-1
/* f04b5bc: a7af002e */ sh $t7,0x2e($sp)
/* f04b5c0: 8fa4008c */ lw $a0,0x8c($sp)
/* f04b5c4: 8fa50090 */ lw $a1,0x90($sp)
/* f04b5c8: 27a60030 */ addiu $a2,$sp,0x30
/* f04b5cc: 27a7002c */ addiu $a3,$sp,0x2c
/* f04b5d0: e7a00010 */ swc1 $f0,0x10($sp)
/* f04b5d4: a7ae002c */ sh $t6,0x2c($sp)
/* f04b5d8: afb80014 */ sw $t8,0x14($sp)
/* f04b5dc: 0fc12cbd */ jal func0f04b2f4
/* f04b5e0: afb90018 */ sw $t9,0x18($sp)
/* f04b5e4: 8fbf0024 */ lw $ra,0x24($sp)
/* f04b5e8: 27bd0088 */ addiu $sp,$sp,0x88
/* f04b5ec: 03e00008 */ jr $ra
/* f04b5f0: 00000000 */ sll $zero,$zero,0x0
);
bool chrSpawnAtPad(struct chrdata *basechr, s32 body, s32 head, s32 pad_id, u8 *ailist, u32 flags)
{
s32 resolved_pad_id = padResolve(basechr, pad_id);
struct pad pad;
s16 room[2];
float fvalue;
padUnpack(resolved_pad_id, 0x46, &pad);
fvalue = func0f096750(pad.look.x, pad.look.z);
room[0] = pad.room;
room[1] = -1;
s32 func0f04b5f4(struct chrdata *basechr, s32 arg1, s32 arg2, u32 chrnum, s32 arg4, s32 arg5)
return chrSpawnAtCoord(body, head, &pad.coord, &room[0], fvalue, ailist, flags);
}
bool chrSpawnAtChr(struct chrdata *basechr, s32 body, s32 head, u32 chrnum, u8 *ailist, u32 flags)
{
struct chrdata *chr = chrFindById(basechr, chrnum);
float fvalue;
@ -51696,7 +51675,7 @@ s32 func0f04b5f4(struct chrdata *basechr, s32 arg1, s32 arg2, u32 chrnum, s32 ar
fvalue = func0f03e45c(chr);
}
return func0f04b2f4(arg1, arg2, &chr->pos->coord, &chr->pos->room, fvalue, arg4, arg5);
return chrSpawnAtCoord(body, head, &chr->pos->coord, &chr->pos->room, fvalue, ailist, flags);
}
GLOBAL_ASM(

View File

@ -5766,7 +5766,7 @@ glabel aiSpawnChr
/* f0556ec: afa20010 */ sw $v0,0x10($sp)
/* f0556f0: 97a70032 */ lhu $a3,0x32($sp)
/* f0556f4: afa30034 */ sw $v1,0x34($sp)
/* f0556f8: 0fc12d5e */ jal chrSpawn
/* f0556f8: 0fc12d5e */ jal chrSpawnAtPad
/* f0556fc: afa80014 */ sw $t0,0x14($sp)
/* f055700: 10400007 */ beqz $v0,.L0f055720
/* f055704: 8fa30034 */ lw $v1,0x34($sp)
@ -5796,7 +5796,7 @@ glabel aiSpawnChr
// s32 ailistid = cmd[7] | (cmd[6] << 8);
// u8 *ailist = ailistFindById(ailistid & 0xffff);
//
// if (chrSpawn(g_Vars.chrdata, cmd[2], (s8)cmd[3], pad, ailist, flags)) {
// if (chrSpawnAtPad(g_Vars.chrdata, cmd[2], (s8)cmd[3], pad, ailist, flags)) {
// g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[12]);
// } else {
// g_Vars.aioffset += 13;
@ -5843,7 +5843,7 @@ glabel ai00c7
/* f0557b8: 80660003 */ lb $a2,0x3($v1)
/* f0557bc: 90670004 */ lbu $a3,0x4($v1)
/* f0557c0: afa20010 */ sw $v0,0x10($sp)
/* f0557c4: 0fc12d7d */ jal func0f04b5f4
/* f0557c4: 0fc12d7d */ jal chrSpawnAtChr
/* f0557c8: afab0014 */ sw $t3,0x14($sp)
/* f0557cc: 10400007 */ beqz $v0,.L0f0557ec
/* f0557d0: 8fa3002c */ lw $v1,0x2c($sp)
@ -5873,7 +5873,7 @@ glabel ai00c7
// u32 ailistid = cmd[6] | (cmd[5] << 8);
// u8 *ailist = ailistFindById(ailistid);
//
// if (func0f04b5f4(g_Vars.chrdata, cmd[2], (s8)cmd[3], cmd[4], ailist, flags)) {
// if (chrSpawnAtChr(g_Vars.chrdata, cmd[2], (s8)cmd[3], cmd[4], ailist, flags)) {
// g_Vars.aioffset = chraiGoToLabel(g_Vars.ailist, g_Vars.aioffset, cmd[11]);
// } else {
// g_Vars.aioffset += 12;
@ -6115,7 +6115,7 @@ glabel aiDuplicateChr
/* f055bd8: 84470000 */ lh $a3,0x0($v0)
/* f055bdc: afb00010 */ sw $s0,0x10($sp)
/* f055be0: 8c84a3e4 */ lw $a0,-0x5c1c($a0)
/* f055be4: 0fc12d7d */ jal func0f04b5f4
/* f055be4: 0fc12d7d */ jal chrSpawnAtChr
/* f055be8: afad0014 */ sw $t5,0x14($sp)
/* f055bec: 5040006d */ beqzl $v0,.L0f055da4
/* f055bf0: 8fb90054 */ lw $t9,0x54($sp)

View File

@ -14084,7 +14084,7 @@ glabel func0f0bd904
/* f0bed00: 24660008 */ addiu $a2,$v1,0x8
/* f0bed04: 24670028 */ addiu $a3,$v1,0x28
/* f0bed08: 46143482 */ mul.s $f18,$f6,$f20
/* f0bed0c: 0fc12cbd */ jal func0f04b2f4
/* f0bed0c: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bed10: e7b20010 */ swc1 $f18,0x10($sp)
/* f0bed14: 1000002a */ beqz $zero,.L0f0bedc0
/* f0bed18: 00408825 */ or $s1,$v0,$zero
@ -14107,7 +14107,7 @@ glabel func0f0bd904
/* f0bed58: 24050008 */ addiu $a1,$zero,0x8
/* f0bed5c: 24660008 */ addiu $a2,$v1,0x8
/* f0bed60: 24670028 */ addiu $a3,$v1,0x28
/* f0bed64: 0fc12cbd */ jal func0f04b2f4
/* f0bed64: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bed68: e7aa0010 */ swc1 $f10,0x10($sp)
/* f0bed6c: 10000014 */ beqz $zero,.L0f0bedc0
/* f0bed70: 00408825 */ or $s1,$v0,$zero
@ -14128,7 +14128,7 @@ glabel func0f0bd904
/* f0beda8: 24660008 */ addiu $a2,$v1,0x8
/* f0bedac: 24670028 */ addiu $a3,$v1,0x28
/* f0bedb0: 46149202 */ mul.s $f8,$f18,$f20
/* f0bedb4: 0fc12cbd */ jal func0f04b2f4
/* f0bedb4: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bedb8: e7a80010 */ swc1 $f8,0x10($sp)
/* f0bedbc: 00408825 */ or $s1,$v0,$zero
.L0f0bedc0:
@ -14211,7 +14211,7 @@ glabel func0f0bd904
/* f0beee4: 24050008 */ addiu $a1,$zero,0x8
/* f0beee8: 24660008 */ addiu $a2,$v1,0x8
/* f0beeec: 24670028 */ addiu $a3,$v1,0x28
/* f0beef0: 0fc12cbd */ jal func0f04b2f4
/* f0beef0: 0fc12cbd */ jal chrSpawnAtCoord
/* f0beef4: e7a40010 */ swc1 $f4,0x10($sp)
/* f0beef8: 10000011 */ beqz $zero,.L0f0bef40
/* f0beefc: 00408825 */ or $s1,$v0,$zero
@ -14229,7 +14229,7 @@ glabel func0f0bd904
/* f0bef28: 2405001b */ addiu $a1,$zero,0x1b
/* f0bef2c: 24660008 */ addiu $a2,$v1,0x8
/* f0bef30: 24670028 */ addiu $a3,$v1,0x28
/* f0bef34: 0fc12cbd */ jal func0f04b2f4
/* f0bef34: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bef38: e7b20010 */ swc1 $f18,0x10($sp)
/* f0bef3c: 00408825 */ or $s1,$v0,$zero
.L0f0bef40:
@ -14307,7 +14307,7 @@ glabel func0f0bd904
/* f0bf050: 24050008 */ addiu $a1,$zero,0x8
/* f0bf054: 24660008 */ addiu $a2,$v1,0x8
/* f0bf058: 24670028 */ addiu $a3,$v1,0x28
/* f0bf05c: 0fc12cbd */ jal func0f04b2f4
/* f0bf05c: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bf060: e7aa0010 */ swc1 $f10,0x10($sp)
/* f0bf064: 10000011 */ beqz $zero,.L0f0bf0ac
/* f0bf068: 00408825 */ or $s1,$v0,$zero
@ -14325,7 +14325,7 @@ glabel func0f0bd904
/* f0bf094: 24050012 */ addiu $a1,$zero,0x12
/* f0bf098: 24660008 */ addiu $a2,$v1,0x8
/* f0bf09c: 24670028 */ addiu $a3,$v1,0x28
/* f0bf0a0: 0fc12cbd */ jal func0f04b2f4
/* f0bf0a0: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bf0a4: e7a60010 */ swc1 $f6,0x10($sp)
/* f0bf0a8: 00408825 */ or $s1,$v0,$zero
.L0f0bf0ac:
@ -14409,7 +14409,7 @@ glabel func0f0bd904
/* f0bf1d4: 24050008 */ addiu $a1,$zero,0x8
/* f0bf1d8: 24660008 */ addiu $a2,$v1,0x8
/* f0bf1dc: 24670028 */ addiu $a3,$v1,0x28
/* f0bf1e0: 0fc12cbd */ jal func0f04b2f4
/* f0bf1e0: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bf1e4: e7a80010 */ swc1 $f8,0x10($sp)
/* f0bf1e8: 10000011 */ beqz $zero,.L0f0bf230
/* f0bf1ec: 00408825 */ or $s1,$v0,$zero
@ -14427,7 +14427,7 @@ glabel func0f0bd904
/* f0bf218: 02802825 */ or $a1,$s4,$zero
/* f0bf21c: 24660008 */ addiu $a2,$v1,0x8
/* f0bf220: 24670028 */ addiu $a3,$v1,0x28
/* f0bf224: 0fc12cbd */ jal func0f04b2f4
/* f0bf224: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bf228: e7a40010 */ swc1 $f4,0x10($sp)
/* f0bf22c: 00408825 */ or $s1,$v0,$zero
.L0f0bf230:
@ -14515,7 +14515,7 @@ glabel func0f0bd904
/* f0bf368: 24050008 */ addiu $a1,$zero,0x8
/* f0bf36c: 24660008 */ addiu $a2,$v1,0x8
/* f0bf370: 24670028 */ addiu $a3,$v1,0x28
/* f0bf374: 0fc12cbd */ jal func0f04b2f4
/* f0bf374: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bf378: e7b20010 */ swc1 $f18,0x10($sp)
/* f0bf37c: 10000011 */ beqz $zero,.L0f0bf3c4
/* f0bf380: 00408825 */ or $s1,$v0,$zero
@ -14533,7 +14533,7 @@ glabel func0f0bd904
/* f0bf3ac: 24050029 */ addiu $a1,$zero,0x29
/* f0bf3b0: 24660008 */ addiu $a2,$v1,0x8
/* f0bf3b4: 24670028 */ addiu $a3,$v1,0x28
/* f0bf3b8: 0fc12cbd */ jal func0f04b2f4
/* f0bf3b8: 0fc12cbd */ jal chrSpawnAtCoord
/* f0bf3bc: e7aa0010 */ swc1 $f10,0x10($sp)
/* f0bf3c0: 00408825 */ or $s1,$v0,$zero
.L0f0bf3c4:

View File

@ -384,9 +384,9 @@ u32 func0f04acc8(struct chrdata *chr, s32 arg1, s32 pad_id);
u32 func0f04ad08(struct chrdata *chr);
u32 func0f04aeb0(void);
u32 func0f04af84(void);
s32 func0f04b2f4(s32 arg0, s32 arg1, struct coord *coord, s16 *room, float arg4, s32 arg5, s32 arg6);
u32 chrSpawn(struct chrdata *chr, s32 body, s32 head, u16 pad, u8 *ailist, u32 flags);
s32 func0f04b5f4(struct chrdata *chr, s32 arg1, s32 arg2, u32 chrnum, s32 arg4, s32 arg5);
bool chrSpawnAtCoord(s32 body, s32 head, struct coord *coord, s16 *room, float arg4, u8 *ailist, u32 flags);
bool chrSpawnAtPad(struct chrdata *chr, s32 body, s32 head, s32 pad, u8 *ailist, u32 flags);
bool chrSpawnAtChr(struct chrdata *basechr, s32 body, s32 head, u32 chrnum, u8 *ailist, u32 flags);
u32 func0f04b658(struct chrdata *chr);
u32 func0f04b748(void);
u32 func0f04b950(struct chrdata *chr, u32 cover, u32 arg2);

View File

@ -3,7 +3,7 @@
#include <ultra64.h>
#include "types.h"
u32 func0f096750(void);
float func0f096750(float x, float z);
u32 func0f096890(void);
u32 func0f096910(void);
u32 func0f096964(void);

View File

@ -73,9 +73,11 @@ struct pad {
/*0x3c*/ float ymax;
/*0x40*/ float zmin;
/*0x44*/ float zmax;
/*0x48*/ s32 padnum;
/*0x4c*/ u32 unk4c;
/*0x50*/ u32 unk50;
/*0x48*/ s32 room;
/*0x4c*/ s16 unk4c;
/*0x4e*/ s16 unk4e;
/*0x50*/ s16 unk50;
/*0x52*/ s16 unk52;
};
struct chr020 {