forked from Ports/perfect_dark
Attempt to decompile padUnpack
This commit is contained in:
1 parent
7284b7c157
commit
99d918e33f
11 files changed
+171
-25
No files matched your search
+6
-6
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user