Decompile objLand

This commit is contained in:
Ryan Dwyer 2022-04-12 21:18:06 +10:00
parent 2e469c1ddb
commit 72d0d415d3
16 changed files with 280 additions and 559 deletions

View File

@ -2218,8 +2218,8 @@ glabel var7f1a87a8
//
// prop->flags |= PROPFLAG_ONTHISSCREENTHISTICK | PROPFLAG_ONANYSCREENTHISTICK;
//
// if (obj->hidden & OBJHFLAG_HANGINGMONITOR) {
// mtx00015be4(sp104, &obj->monitormount->matrix, &sp80);
// if (obj->hidden & OBJHFLAG_EMBEDDED) {
// mtx00015be4(sp104, &obj->embedment->matrix, &sp80);
// thing.matrix = &sp80;
// } else if (CHRRACE(chr) == RACE_SKEDAR) {
// // The skedar hand position is rotated weirdly, so compensate for it
@ -3135,7 +3135,7 @@ void chrDropConcealedItems(struct chrdata *chr)
if (prop != chr->weapons_held[2]
&& prop != chr->weapons_held[1]
&& prop != chr->weapons_held[0]
&& (prop->obj->hidden & OBJHFLAG_HANGINGMONITOR) == 0
&& (prop->obj->hidden & OBJHFLAG_EMBEDDED) == 0
&& (prop->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
objSetDropped(prop, DROPTYPE_DEFAULT);
}

View File

@ -27,7 +27,7 @@ u32 g_ObjectiveStatuses[MAX_OBJECTIVES];
struct tag *g_TagsLinkedList;
struct briefingobj *g_BriefingObjs;
struct criteria_roomentered *g_RoomEnteredCriterias;
struct criteria_multiroomentered *g_MultiroomEnteredCriterias;
struct criteria_throwinroom *g_ThrowInRoomCriterias;
struct criteria_holograph *g_HolographCriterias;
s32 g_NumTags;
struct tag **g_TagPtrs;
@ -302,7 +302,7 @@ s32 objectiveCheck(s32 index)
reqstatus = OBJECTIVE_INCOMPLETE;
}
break;
case OBJECTIVETYPE_ATTACHOBJ:
case OBJECTIVETYPE_THROWINROOM:
if (cmd[3] == 0) {
reqstatus = OBJECTIVE_INCOMPLETE;
}
@ -452,20 +452,20 @@ void objectiveCheckRoomEntered(s32 currentroom)
}
}
void objectiveCheckMultiroomEntered(s32 arg0, s16 *requiredrooms)
void objectiveCheckThrowInRoom(s32 arg0, s16 *inrooms)
{
struct criteria_multiroomentered *criteria = g_MultiroomEnteredCriterias;
struct criteria_throwinroom *criteria = g_ThrowInRoomCriterias;
while (criteria) {
if (criteria->status == OBJECTIVE_INCOMPLETE && criteria->unk04 == arg0) {
s32 room = chrGetPadRoom(NULL, criteria->pad);
if (room >= 0) {
s16 objectiverooms[2];
objectiverooms[0] = room;
objectiverooms[1] = -1;
s16 requirerooms[2];
requirerooms[0] = room;
requirerooms[1] = -1;
if (arrayIntersects(objectiverooms, requiredrooms)) {
if (arrayIntersects(requirerooms, inrooms)) {
criteria->status = OBJECTIVE_COMPLETE;
}
}

View File

@ -27,7 +27,7 @@ void objectivesReset(void)
g_TagsLinkedList = NULL;
g_BriefingObjs = NULL;
g_RoomEnteredCriterias = NULL;
g_MultiroomEnteredCriterias = NULL;
g_ThrowInRoomCriterias = NULL;
g_HolographCriterias = NULL;
}
@ -58,10 +58,10 @@ void objectiveAddRoomEnteredCriteria(struct criteria_roomentered *criteria)
g_RoomEnteredCriterias = criteria;
}
void objectiveAddMultiroomEnteredCriteria(struct criteria_multiroomentered *criteria)
void objectiveAddThrowInRoomCriteria(struct criteria_throwinroom *criteria)
{
criteria->next = g_MultiroomEnteredCriterias;
g_MultiroomEnteredCriterias = criteria;
criteria->next = g_ThrowInRoomCriterias;
g_ThrowInRoomCriterias = criteria;
}
void objectiveAddHolographCriteria(struct criteria_holograph *criteria)

View File

@ -1611,7 +1611,7 @@ u8 g_PausableObjs[] = {
1, // OBJECTIVETYPE_HOLOGRAPH
0, // OBJECTIVETYPE_1F
0, // OBJECTIVETYPE_ENTERROOM
0, // OBJECTIVETYPE_ATTACHOBJ
0, // OBJECTIVETYPE_THROWINROOM
0, // OBJTYPE_22
0, // OBJTYPE_BRIEFING
1, // OBJTYPE_GASBOTTLE

File diff suppressed because it is too large Load Diff

View File

@ -3,8 +3,8 @@
#include "data.h"
#include "types.h"
u32 var8009ce70;
u32 var8009ce74;
struct model *g_EmbedModel;
struct modelnode *g_EmbedNode;
u32 var8009ce78[4];
u32 var8009ce88[4];
struct tvscreen var8009ce98;

View File

@ -62,7 +62,7 @@ void objsStop(void)
case OBJECTIVETYPE_HOLOGRAPH:
case OBJECTIVETYPE_1F:
case OBJECTIVETYPE_ENTERROOM:
case OBJECTIVETYPE_ATTACHOBJ:
case OBJECTIVETYPE_THROWINROOM:
case OBJTYPE_22:
case OBJTYPE_BRIEFING:
case OBJTYPE_RENAMEOBJ:

View File

@ -184,7 +184,7 @@ void propsReset(void)
g_MaxAmmoCrates = 20;
g_MaxDebrisSlots = 15;
g_MaxProjectiles = IS4MB() ? 20 : 100;
g_MaxMonitorThings = IS4MB() ? 40 : 80;
g_MaxEmbedments = IS4MB() ? 40 : 80;
if (g_Vars.stagenum >= STAGE_TITLE) {
g_MaxWeaponSlots = 0;
@ -192,7 +192,7 @@ void propsReset(void)
g_MaxAmmoCrates = 0;
g_MaxDebrisSlots = 0;
g_MaxProjectiles = 0;
g_MaxMonitorThings = 0;
g_MaxEmbedments = 0;
}
setupReset0f00cc8c();
@ -272,13 +272,13 @@ void propsReset(void)
}
}
if (g_MaxMonitorThings == 0) {
g_MonitorMounts = NULL;
if (g_MaxEmbedments == 0) {
g_Embedments = NULL;
} else {
g_MonitorMounts = mempAlloc(ALIGN16(g_MaxMonitorThings * sizeof(struct monitormount)), MEMPOOL_STAGE);
g_Embedments = mempAlloc(ALIGN16(g_MaxEmbedments * sizeof(struct embedment)), MEMPOOL_STAGE);
for (i = 0; i < g_MaxMonitorThings; i++) {
g_MonitorMounts[i].flags = MONITORMOUNTFLAG_FREE;
for (i = 0; i < g_MaxEmbedments; i++) {
g_Embedments[i].flags = EMBEDMENTFLAG_FREE;
}
}
@ -288,7 +288,7 @@ void propsReset(void)
g_LinkedScenery = NULL;
g_BlockedPaths = NULL;
var80069930 = NULL;
g_EmbedProp = NULL;
var80069934 = -1;
g_CameraWaitMultiplier = 1;
var8006994c = 1;
@ -1710,10 +1710,10 @@ void setupCreateSingleMonitor(struct singlemonitorobj *monitor, s32 cmdindex)
}
prop = objInitWithAutoModel(&monitor->base);
monitor->base.monitormount = monitormountAllocate();
monitor->base.embedment = embedmentAllocate();
if (prop && monitor->base.monitormount) {
monitor->base.hidden |= OBJHFLAG_HANGINGMONITOR;
if (prop && monitor->base.embedment) {
monitor->base.hidden |= OBJHFLAG_EMBEDDED;
modelSetScale(monitor->base.model, monitor->base.model->scale * scale);
monitor->base.model->attachedtomodel = owner->model;
@ -1737,7 +1737,7 @@ void setupCreateSingleMonitor(struct singlemonitorobj *monitor, s32 cmdindex)
spa4.z = -spa4.z;
mtx4LoadTranslation(&spa4, &sp24);
mtx00015be4(&sp64, &sp24, &monitor->base.monitormount->matrix);
mtx00015be4(&sp64, &sp24, &monitor->base.embedment->matrix);
}
} else {
setupCreateObject(&monitor->base, cmdindex);
@ -4254,8 +4254,8 @@ void setupCreateProps(s32 stagenum)
case OBJECTIVETYPE_ENTERROOM:
objectiveAddRoomEnteredCriteria((struct criteria_roomentered *)obj);
break;
case OBJECTIVETYPE_ATTACHOBJ:
objectiveAddMultiroomEnteredCriteria((struct criteria_multiroomentered *)obj);
case OBJECTIVETYPE_THROWINROOM:
objectiveAddThrowInRoomCriteria((struct criteria_throwinroom *)obj);
break;
case OBJECTIVETYPE_HOLOGRAPH:
objectiveAddHolographCriteria((struct criteria_holograph *)obj);

View File

@ -59,7 +59,7 @@ u32 setupGetCmdLength(u32 *cmd)
case OBJECTIVETYPE_HOLOGRAPH: return 4;
case OBJECTIVETYPE_1F: return 1;
case OBJECTIVETYPE_ENTERROOM: return 4;
case OBJECTIVETYPE_ATTACHOBJ: return 5;
case OBJECTIVETYPE_THROWINROOM: return 5;
case OBJTYPE_22: return 1;
case OBJTYPE_BRIEFING: return 4;
case OBJTYPE_PADLOCKEDDOOR: return 4;
@ -262,7 +262,7 @@ struct defaultobj *setupGetObjByCmdIndex(u32 cmdindex)
case OBJECTIVETYPE_HOLOGRAPH:
case OBJECTIVETYPE_1F:
case OBJECTIVETYPE_ENTERROOM:
case OBJECTIVETYPE_ATTACHOBJ:
case OBJECTIVETYPE_THROWINROOM:
case OBJTYPE_22:
case OBJTYPE_BRIEFING:
case OBJTYPE_RENAMEOBJ:

View File

@ -104,15 +104,15 @@ extern s32 g_MaxHatSlots;
extern s32 g_MaxAmmoCrates;
extern s32 g_MaxDebrisSlots;
extern s32 g_MaxProjectiles;
extern s32 g_MaxMonitorThings;
extern s32 g_MaxEmbedments;
extern struct weaponobj *g_WeaponSlots;
extern struct hatobj *g_HatSlots;
extern struct ammocrateobj *g_AmmoCrates;
extern struct defaultobj *g_DebrisSlots;
extern struct projectile *g_Projectiles;
extern struct monitormount *g_MonitorMounts;
extern u32 var8009ce70;
extern u32 var8009ce74;
extern struct embedment *g_Embedments;
extern struct model *g_EmbedModel;
extern struct modelnode *g_EmbedNode;
extern u32 var8009ce78[4];
extern u32 var8009ce88[4];
extern struct tvscreen var8009ce98;
@ -125,7 +125,7 @@ extern u32 g_ObjectiveStatuses[MAX_OBJECTIVES];
extern struct tag *g_TagsLinkedList;
extern struct briefingobj *g_BriefingObjs;
extern struct criteria_roomentered *g_RoomEnteredCriterias;
extern struct criteria_multiroomentered *g_MultiroomEnteredCriterias;
extern struct criteria_throwinroom *g_ThrowInRoomCriterias;
extern struct criteria_holograph *g_HolographCriterias;
extern struct sndstate *g_CasingAudioHandles[2];
extern s32 var8009d0d8;

View File

@ -800,6 +800,9 @@
#define DROPTYPE_5 5
#define DROPTYPE_OWNERREAP 6
// Might be the same flags as PROJECTILEFLAG
#define EMBEDMENTFLAG_FREE 0x00000001
#define EXPLOSIONTYPE_NONE 0
#define EXPLOSIONTYPE_BULLETHOLE 1
#define EXPLOSIONTYPE_EYESPY 2
@ -2469,9 +2472,6 @@
#define MODFILE_MPSETUP 2
#define MODFILE_BOSS 4
// Might be the same flags as PROJECTILEFLAG
#define MONITORMOUNTFLAG_FREE 0x00000001
#define MOVEMODE_WALK 0
#define MOVEMODE_BIKE 3
#define MOVEMODE_GRAB 4
@ -3050,7 +3050,7 @@
#define OBJHFLAG_ISRETICK 0x00000008
#define OBJHFLAG_TAGGED 0x00000010
#define OBJHFLAG_00000020 0x00000020 // thrown knife
#define OBJHFLAG_HANGINGMONITOR 0x00000040
#define OBJHFLAG_EMBEDDED 0x00000040 // obj is embedded in a chr or other obj (eg. knife)
#define OBJHFLAG_AIRBORNE 0x00000080
#define OBJHFLAG_00000100 0x00000100
#define OBJHFLAG_00000200 0x00000200
@ -3115,7 +3115,7 @@
#define OBJECTIVETYPE_HOLOGRAPH 0x1e
#define OBJECTIVETYPE_1F 0x1f
#define OBJECTIVETYPE_ENTERROOM 0x20
#define OBJECTIVETYPE_ATTACHOBJ 0x21
#define OBJECTIVETYPE_THROWINROOM 0x21
#define OBJTYPE_22 0x22
#define OBJTYPE_BRIEFING 0x23
#define OBJTYPE_GASBOTTLE 0x24

View File

@ -217,7 +217,7 @@ extern struct padlockeddoorobj *g_PadlockedDoors;
extern struct safeitemobj *g_SafeItems;
extern struct linksceneryobj *g_LinkedScenery;
extern struct blockedpathobj *g_BlockedPaths;
extern struct prop *var80069930;
extern struct prop *g_EmbedProp;
extern s32 var80069934;
extern f32 g_CameraWaitMultiplier;
extern f32 var8006994c;

View File

@ -11,7 +11,7 @@ void tagInsert(struct tag *tag);
void briefingInsert(struct briefingobj *obj);
void objectiveInsert(struct objective *objective);
void objectiveAddRoomEnteredCriteria(struct criteria_roomentered *criteria);
void objectiveAddMultiroomEnteredCriteria(struct criteria_multiroomentered *criteria);
void objectiveAddThrowInRoomCriteria(struct criteria_throwinroom *criteria);
void objectiveAddHolographCriteria(struct criteria_holograph *criteria);
u32 xorBaffbeff(u32 value);
@ -27,7 +27,7 @@ void objectivesDisableChecking(void);
void objectivesShowHudmsg(char *buffer, s32 hudmsgtype);
void objectivesCheckAll(void);
void objectiveCheckRoomEntered(s32 currentroom);
void objectiveCheckMultiroomEntered(s32 arg0, s16 *requiredrooms);
void objectiveCheckThrowInRoom(s32 arg0, s16 *requiredrooms);
void objectiveCheckHolograph(f32 sqdist);
struct prop *chopperGetTargetProp(struct chopperobj *heli);
struct defaultobj *objFindByTagId(s32 tag_id);

View File

@ -6,7 +6,7 @@
extern u32 var800698f0;
extern u32 var800698f4;
extern struct prop *var80069930;
extern struct prop *g_EmbedProp;
extern s32 var80069934;
extern f32 g_CameraWaitMultiplier;
extern f32 var8006994c;
@ -71,8 +71,8 @@ void projectileReset(struct projectile *projectile);
struct projectile *projectileAllocate(void);
void func0f0685e4(struct prop *prop);
void objSetProjectileFlag4(struct prop *prop);
void monitormountFree(struct monitormount *mount);
struct monitormount *monitormountAllocate(void);
void embedmentFree(struct embedment *embedment);
struct embedment *embedmentAllocate(void);
s32 objGetShotsTaken(struct defaultobj *obj);
s32 objGetDestroyedLevel(struct defaultobj *obj);
struct modelnode *func0f0687e4(struct model *model);
@ -121,11 +121,11 @@ void applyRotation(f32 *angle, f32 maxrot, f32 *speed, f32 accel, f32 decel, f32
u32 func0f06dbd8(void);
void knifePlayWooshSound(struct defaultobj *obj);
void func0f06e9cc(struct coord *arg0, Mtxf *arg1);
void func0f06eb4c(struct defaultobj *obj, struct coord *arg1, struct coord *arg2);
void func0f06ec20(struct weaponobj *weapon, struct coord *arg1);
void func0f06ed64(struct defaultobj *obj, struct coord *arg1, struct coord *arg2);
bool func0f06ef44(struct prop *prop, struct prop *parent, struct model *model, struct modelnode *node);
u32 func0f06f0a0(void);
void objLand2(struct defaultobj *obj, struct coord *arg1, struct coord *arg2);
void boltLand(struct weaponobj *weapon, struct coord *arg1);
void knifeLand(struct defaultobj *obj, struct coord *arg1, struct coord *arg2);
bool objEmbed(struct prop *prop, struct prop *parent, struct model *model, struct modelnode *node);
void objLand(struct prop *prop, struct coord *arg1, struct coord *arg2, bool *embedded);
bool propExplode(struct prop *prop, s32 explosiontype);
void ammocrateTick(struct prop *ammocrate);
void weaponTick(struct prop *weapon);

View File

@ -121,8 +121,8 @@
#define require_room_entered(room) \
0x20, room,
#define require_object_thrown_on_target(throw_object, target_object) \
0x21, throw_object, target_object, 0,
#define require_object_thrown_in_room(object, pad) \
0x21, object, pad, 0,
#define briefing(value, text) \
0x23, value, text, 0,

View File

@ -1513,7 +1513,7 @@ struct projectile {
/*0x108*/ struct prop *unk108;
};
struct monitormount {
struct embedment {
/*0x000*/ u32 flags;
/*0x004*/ Mtxf matrix;
/*0x044*/ struct projectile *projectile;
@ -1601,7 +1601,7 @@ struct defaultobj {
};
union {
/*0x48*/ struct projectile *projectile;
/*0x48*/ struct monitormount *monitormount;
/*0x48*/ struct embedment *embedment;
};
/*0x4c*/ s16 damage;
/*0x4e*/ s16 maxdamage;
@ -4626,12 +4626,12 @@ struct criteria_roomentered {
struct criteria_roomentered *next;
};
struct criteria_multiroomentered {
struct criteria_throwinroom {
u32 unk00;
u32 unk04;
u32 pad;
u32 status;
struct criteria_multiroomentered *next;
struct criteria_throwinroom *next;
};
struct criteria_holograph {