Attempt to decompile padUnpack

This commit is contained in:
Ryan Dwyer committed 2020-01-26 10:58:54 +10:00
1 parent 7284b7c157
commit 99d918e33f
11 files changed
+171 -25

No files matched your search

+6 -6
View File
@@ -48250,7 +48250,7 @@ f32 chrGetDistanceToPad(struct chrdata *chr, s32 pad_id)
pad_id = chrResolvePadId(chr, pad_id);
if (pad_id >= 0) {
padUnpack(pad_id, 2, &pad);
padUnpack(pad_id, PADFIELD_POS, &pad);
xdiff = pad.pos.x - prop->pos.x;
ydiff = pad.pos.y - prop->pos.y;
zdiff = pad.pos.z - prop->pos.z;
@@ -48324,7 +48324,7 @@ glabel chrGetSameFloorDistanceToPad
// f32 ret;
//
// pad_id = chrResolvePadId(chr, pad_id);
// padUnpack(pad_id, 2, &pad);
// padUnpack(pad_id, PADFIELD_POS, &pad);
// xdiff = pad.pos.x - prop->pos.x;
// ydiff = pad.pos.y - prop->pos.y;
// zdiff = pad.pos.z - prop->pos.z;
@@ -48370,7 +48370,7 @@ f32 chrGetLateralDistanceToPad(struct chrdata *chr, s32 pad_id)
pad_id = chrResolvePadId(chr, pad_id);
if (pad_id >= 0) {
padUnpack(pad_id, 2, &pad);
padUnpack(pad_id, PADFIELD_POS, &pad);
xdiff = pad.pos.x - prop->pos.x;
zdiff = pad.pos.z - prop->pos.z;
distance = sqrtf(xdiff * xdiff + zdiff * zdiff);
@@ -48407,7 +48407,7 @@ s32 chrGetPadRoom(struct chrdata *chr, s32 pad_id)
s32 resolved_pad_id = chrResolvePadId(chr, pad_id - 10000);
if (resolved_pad_id >= 0) {
padUnpack(resolved_pad_id, 0x40, &pad);
padUnpack(resolved_pad_id, PADFIELD_ROOM, &pad);
ret = pad.room;
}
} else {
@@ -48949,7 +48949,7 @@ f32 chrGetDistanceFromTargetToPad(struct chrdata *chr, s32 pad_id)
pad_id = chrResolvePadId(chr, pad_id);
if (pad_id >= 0) {
padUnpack(pad_id, 2, &pad);
padUnpack(pad_id, PADFIELD_POS, &pad);
xdiff = pad.pos.x - prop->pos.x;
ydiff = pad.pos.y - prop->pos.y;
zdiff = pad.pos.z - prop->pos.z;
@@ -50535,7 +50535,7 @@ bool chrSpawnAtPad(struct chrdata *basechr, s32 body, s32 head, s32 pad_id, u8 *
struct pad pad;
s16 room[2];
f32 fvalue;
padUnpack(resolved_pad_id, 0x46, &pad);
padUnpack(resolved_pad_id, PADFIELD_POS | PADFIELD_LOOK | PADFIELD_ROOM, &pad);
fvalue = func0f096750(pad.look.x, pad.look.z);
room[0] = pad.room;
room[1] = -1;
+1 -1
View File
@@ -12462,7 +12462,7 @@ glabel aiIfObjectDistanceToPadLessThan
// pad_id = chrResolvePadId(g_Vars.chrdata, pad_id);
//
// if (pad_id >= 0) {
// padUnpack(pad_id, 2, &pad);
// padUnpack(pad_id, PADFIELD_POS, &pad);
// xdiff = obj->prop->pos.x - pad.pos.x;
// ydiff = obj->prop->pos.y - pad.pos.y;
// zdiff = obj->prop->pos.z - pad.pos.z;
+4 -4
View File
@@ -356,8 +356,8 @@ glabel func0f012aa0
/* f012aac: 26b5d030 */ addiu $s5,$s5,%lo(g_StageSetup)
/* f012ab0: 8ea2001c */ lw $v0,0x1c($s5)
/* f012ab4: 3c04800a */ lui $a0,%hi(var800a2350)
/* f012ab8: 3c07800a */ lui $a3,%hi(var800a2354)
/* f012abc: 24e72354 */ addiu $a3,$a3,%lo(var800a2354)
/* f012ab8: 3c07800a */ lui $a3,%hi(g_PadOffsets)
/* f012abc: 24e72354 */ addiu $a3,$a3,%lo(g_PadOffsets)
/* f012ac0: 24842350 */ addiu $a0,$a0,%lo(var800a2350)
/* f012ac4: 244e0014 */ addiu $t6,$v0,0x14
/* f012ac8: afbf004c */ sw $ra,0x4c($sp)
@@ -385,8 +385,8 @@ glabel func0f012aa0
/* f012b20: 27b60090 */ addiu $s6,$sp,0x90
/* f012b24: 27b300c8 */ addiu $s3,$sp,0xc8
.L0f012b28:
/* f012b28: 3c07800a */ lui $a3,%hi(var800a2354)
/* f012b2c: 24e72354 */ addiu $a3,$a3,%lo(var800a2354)
/* f012b28: 3c07800a */ lui $a3,%hi(g_PadOffsets)
/* f012b2c: 24e72354 */ addiu $a3,$a3,%lo(g_PadOffsets)
/* f012b30: 8cef0000 */ lw $t7,0x0($a3)
/* f012b34: 8eb9001c */ lw $t9,0x1c($s5)
/* f012b38: 02402025 */ or $a0,$s2,$zero
+1 -1
View File
@@ -13536,7 +13536,7 @@ void liftActivate(struct prop *prop, u8 liftnum)
struct prop *liftFindByPad(s16 padnum)
{
struct pad pad;
padUnpack(padnum, 0x100, &pad);
padUnpack(padnum, PADFIELD_LIFT, &pad);
if (pad.liftnum <= 0 || pad.liftnum > MAX_LIFTS) {
return NULL;
+118
View File
@@ -714,6 +714,124 @@ glabel padUnpack
/* f115efc: 00000000 */ sll $zero,$zero,0x0
);
// Mismatch because the ROM moves `fields` from a1 to a3 then uses a1 for other
// purposes, while the below just keeps a1 where it is.
//void padUnpack(s32 padnum, u32 fields, struct pad *pad)
//{
// u32 *ibuffer = (u32 *)&g_StageSetup.padfiledata[g_PadOffsets[padnum]];
// f32 *fbuffer = (f32 *)ibuffer;
//
// // flags, room and liftnum
// // ffffffff ffffffff ffrrrrrr rrrrllll
//
// if (fields & PADFIELD_ROOM) {
// pad->room = (s32)(*ibuffer << 18) >> 22;
// }
//
// if (fields & PADFIELD_LIFT) {
// pad->liftnum = *ibuffer & 0x0000000f;
// }
//
// fbuffer++;
//
// if ((*ibuffer >> 14) & PADFLAG_INTPOS) {
// if (fields & PADFIELD_POS) {
// s16 *sbuffer = (s16 *)fbuffer;
// pad->pos.x = sbuffer[0];
// pad->pos.y = sbuffer[1];
// pad->pos.z = sbuffer[2];
// }
// fbuffer += 2;
// } else {
// if (fields & PADFIELD_POS) {
// pad->pos.x = fbuffer[0];
// pad->pos.y = fbuffer[1];
// pad->pos.z = fbuffer[2];
// }
// fbuffer += 3;
// }
//
// if ((*ibuffer >> 14) & (PADFLAG_UPALIGNTOX | PADFLAG_UPALIGNTOY | PADFLAG_UPALIGNTOZ)) {
// if (fields & (PADFIELD_UP | PADFIELD_NORMAL)) {
// if ((*ibuffer >> 14) & PADFLAG_UPALIGNTOX) {
// pad->up.x = ((*ibuffer >> 14) & PADFLAG_UPALIGNINVERT) ? -1 : 1;
// pad->up.y = 0;
// pad->up.z = 0;
// } else if ((*ibuffer >> 14) & PADFLAG_UPALIGNTOY) {
// pad->up.x = 0;
// pad->up.y = ((*ibuffer >> 14) & PADFLAG_UPALIGNINVERT) ? -1 : 1;
// pad->up.z = 0;
// } else {
// pad->up.x = 0;
// pad->up.y = 0;
// pad->up.z = ((*ibuffer >> 14) & PADFLAG_UPALIGNINVERT) ? -1 : 1;
// }
// }
// } else {
// if (fields & (PADFIELD_UP | PADFIELD_NORMAL)) {
// pad->up.x = fbuffer[0];
// pad->up.y = fbuffer[1];
// pad->up.z = fbuffer[2];
// }
// fbuffer += 3;
// }
//
// if ((*ibuffer >> 14) & (PADFLAG_LOOKALIGNTOX | PADFLAG_LOOKALIGNTOY | PADFLAG_LOOKALIGNTOZ)) {
// if (fields & (PADFIELD_LOOK | PADFIELD_NORMAL)) {
// if ((*ibuffer >> 14) & PADFLAG_LOOKALIGNTOX) {
// pad->look.x = ((*ibuffer >> 14) & PADFLAG_LOOKALIGNINVERT) ? -1 : 1;
// pad->look.y = 0;
// pad->look.z = 0;
// } else if ((*ibuffer >> 14) & PADFLAG_LOOKALIGNTOY) {
// pad->look.x = 0;
// pad->look.y = ((*ibuffer >> 14) & PADFLAG_LOOKALIGNINVERT) ? -1 : 1;
// pad->look.z = 0;
// } else {
// pad->look.x = 0;
// pad->look.y = 0;
// pad->look.z = ((*ibuffer >> 14) & PADFLAG_LOOKALIGNINVERT) ? -1 : 1;
// }
// }
// } else {
// if (fields & (PADFIELD_LOOK | PADFIELD_NORMAL)) {
// pad->look.x = fbuffer[0];
// pad->look.y = fbuffer[1];
// pad->look.z = fbuffer[2];
// }
// fbuffer = fbuffer + 3;
// }
//
// if (fields & PADFIELD_NORMAL) {
// pad->normal.x = pad->up.y * pad->look.z - pad->look.y * pad->up.z;
// pad->normal.y = pad->up.z * pad->look.x - pad->look.z * pad->up.x;
// pad->normal.z = pad->up.x * pad->look.y - pad->look.x * pad->up.y;
// }
//
// if ((*ibuffer >> 14) & PADFLAG_HASBBOXDATA) {
// if (fields & PADFIELD_BBOX) {
// pad->bbox.xmin = fbuffer[0];
// pad->bbox.xmax = fbuffer[1];
// pad->bbox.ymin = fbuffer[2];
// pad->bbox.ymax = fbuffer[3];
// pad->bbox.zmin = fbuffer[4];
// pad->bbox.zmax = fbuffer[5];
// }
// } else {
// if (fields & PADFIELD_BBOX) {
// pad->bbox.xmin = -100;
// pad->bbox.ymin = -100;
// pad->bbox.zmin = -100;
// pad->bbox.xmax = 100;
// pad->bbox.ymax = 100;
// pad->bbox.zmax = 100;
// }
// }
//
// if (fields & PADFIELD_FLAGS) {
// pad->flags = (*ibuffer >> 14);
// }
//}
GLOBAL_ASM(
glabel func0f115f00
/* f115f00: 3c0e800a */ lui $t6,0x800a
+1 -1
View File
@@ -10926,7 +10926,7 @@ void scenarioKohReset(void)
g_ScenarioData.koh.hillindex = 0;
}
padUnpack(pad_id, 0x42, &pad);
padUnpack(pad_id, PADFIELD_POS | PADFIELD_ROOM, &pad);
g_ScenarioData.koh.hillroom = pad.room;
g_ScenarioData.koh.unk10 = -1;
g_ScenarioData.koh.hillpos.x = pad.pos.x;
+1 -1
View File
@@ -20289,7 +20289,7 @@ u32 var800a2344 = 0;
u32 var800a2348 = 0;
u32 var800a234c = 0;
u32 var800a2350 = 0;
u32 var800a2354 = 0;
u16 *g_PadOffsets = NULL;
u32 var800a2358 = 0;
u32 var800a235c = 0;
u32 var800a2360 = 0;
+25
View File
@@ -833,6 +833,31 @@
#define PADEFFECT_SMOKE 0x04
#define PADEFFECT_SMOKE_TEMPORARY 0x05
#define PADFIELD_POS 0x0002
#define PADFIELD_LOOK 0x0004
#define PADFIELD_UP 0x0008
#define PADFIELD_NORMAL 0x0010
#define PADFIELD_BBOX 0x0020
#define PADFIELD_ROOM 0x0040
#define PADFIELD_FLAGS 0x0080
#define PADFIELD_LIFT 0x0100
#define PADFLAG_INTPOS 0x0001
#define PADFLAG_UPALIGNTOX 0x0002
#define PADFLAG_UPALIGNTOY 0x0004
#define PADFLAG_UPALIGNTOZ 0x0008
#define PADFLAG_UPALIGNINVERT 0x0010
#define PADFLAG_LOOKALIGNTOX 0x0020
#define PADFLAG_LOOKALIGNTOY 0x0040
#define PADFLAG_LOOKALIGNTOZ 0x0080
#define PADFLAG_LOOKALIGNINVERT 0x0100
#define PADFLAG_HASBBOXDATA 0x0200
#define PADFLAG_AIWAITLIFT 0x0400
#define PADFLAG_AIONLIFT 0x0800
#define PADFLAG_AIWALKDIRECT 0x1000
#define PADFLAG_AIDROP 0x2000
#define PADFLAG_AIDUCK 0x4000
#define PATHTYPE_BACKANDFORTH 0
#define PATHTYPE_CIRCULAR 1
#define PATHTYPE_FLYING 2
+1 -1
View File
@@ -147,6 +147,6 @@ u32 func0f11e78c(void);
u32 func0f11e7f0(void);
u32 func0f11e844(void);
u32 func0f11ea34(void);
void padUnpack(s32 pad_id, u32 flags, struct pad *dst);
void padUnpack(s32 padnum, u32 fields, struct pad *pad);
#endif
+1 -1
View File
@@ -701,7 +701,7 @@ extern u8 g_AltTitle;
extern u32 var800a2330;
extern u32 var800a2344;
extern u32 var800a2350;
extern u32 var800a2354;
extern u16 *g_PadOffsets;
extern u32 var800a2360;
extern u32 var800a2364;
extern u32 var800a2368;
+12 -9
View File
@@ -11,6 +11,15 @@ struct coord {
f32 z;
};
struct bbox {
f32 xmin;
f32 xmax;
f32 ymin;
f32 ymax;
f32 zmin;
f32 zmax;
};
struct weaponobj;
struct prop;
@@ -65,15 +74,9 @@ struct pad {
/*0x0c*/ struct coord look;
/*0x18*/ struct coord up;
/*0x24*/ struct coord normal;
/*0x30*/ f32 xmin;
/*0x34*/ f32 xmax;
/*0x38*/ f32 ymin;
/*0x3c*/ f32 ymax;
/*0x40*/ f32 zmin;
/*0x44*/ f32 zmax;
/*0x24*/ struct bbox bbox;
/*0x48*/ s32 room;
/*0x4c*/ s16 unk4c;
/*0x4e*/ s16 unk4e;
/*0x4c*/ u32 flags;
/*0x50*/ u8 liftnum; // 1-10, 0 indicates no lift
/*0x52*/ s16 unk52;
};
@@ -2726,7 +2729,7 @@ struct stagesetup {
/*0x10*/ u8 *props;
/*0x14*/ struct path *paths;
/*0x18*/ struct ailist *ailists;
/*0x1c*/ void *unk1c;
/*0x1c*/ s8 *padfiledata;
};
struct inventory_menupos {