Decompile objDrop

This commit is contained in:
Ryan Dwyer 2021-12-01 17:39:28 +10:00
parent 12225a8ad6
commit 59aa77e75a
16 changed files with 313 additions and 2054 deletions

View File

@ -57,8 +57,8 @@ void bbikeInit(void)
if (hoverbike->base.hidden & OBJHFLAG_AIRBORNE) {
struct projectile *projectile = hoverbike->base.projectile;
hoverbike->speed[0] = projectile->unk004.x;
hoverbike->speed[1] = projectile->unk004.z;
hoverbike->speed[0] = projectile->speed.x;
hoverbike->speed[1] = projectile->speed.z;
hoverbike->w = projectile->unk0dc;
}

View File

@ -81,8 +81,8 @@ void bgrabInit(void)
if (obj->hidden & OBJHFLAG_AIRBORNE) {
struct projectile *projectile = obj->projectile;
g_Vars.currentplayer->bondshotspeed[0] += projectile->unk004.x * 0.2f;
g_Vars.currentplayer->bondshotspeed[2] += projectile->unk004.z * 0.2f;
g_Vars.currentplayer->bondshotspeed[0] += projectile->speed.x * 0.2f;
g_Vars.currentplayer->bondshotspeed[2] += projectile->speed.z * 0.2f;
objEndFlight(obj);
}

View File

@ -10752,9 +10752,9 @@ void bgun0f09ebcc(struct defaultobj *obj, struct coord *coord, s16 *rooms, Mtxf
objSetProjectileFlag4(objprop);
mtx4Copy(matrix2, (Mtxf *)&obj->projectile->unk020);
obj->projectile->unk004.x = arg4[0];
obj->projectile->unk004.y = arg4[1];
obj->projectile->unk004.z = arg4[2];
obj->projectile->speed.x = arg4[0];
obj->projectile->speed.y = arg4[1];
obj->projectile->speed.z = arg4[2];
obj->projectile->obj = obj;
obj->projectile->unk0d8 = g_Vars.lvframenum;
}
@ -16650,14 +16650,14 @@ void bgunLoseGun(struct prop *attackerprop)
if (prop2 && prop2->obj) {
struct defaultobj *obj = prop2->obj;
objSetDropped(prop2, DROPREASON_1);
objSetDropped(prop2, DROPTYPE_DEFAULT);
if (obj->hidden & OBJHFLAG_AIRBORNE) {
obj->projectile->unk0b4 = PALDOWN(240);
obj->projectile->unk108 = attackerprop;
}
propDrop(prop2, true);
objDrop(prop2, true);
}
}

View File

@ -7216,7 +7216,7 @@ glabel var7f1a99ecpf
/* f023538: 304a0001 */ andi $t2,$v0,0x1
/* f02353c: 11400003 */ beqz $t2,.PF0f02354c
/* f023540: 8fa40250 */ lw $a0,0x250($sp)
/* f023544: 0fc1c248 */ jal propDropRecursive
/* f023544: 0fc1c248 */ jal objDropRecursively
/* f023548: 24050001 */ li $a1,0x1
.PF0f02354c:
/* f02354c: 8fa40250 */ lw $a0,0x250($sp)
@ -7818,7 +7818,7 @@ glabel var7f1a99ecpf
/* f023ddc: 2841000b */ slti $at,$v0,0xb
/* f023de0: 14200009 */ bnez $at,.PF0f023e08
/* f023de4: ac620000 */ sw $v0,0x0($v1)
/* f023de8: 0fc091e3 */ jal chrDropWeapons
/* f023de8: 0fc091e3 */ jal chrDropItemsForOwnerReap
/* f023dec: afa00204 */ sw $zero,0x204($sp)
/* f023df0: 8e180014 */ lw $t8,0x14($s0)
/* f023df4: 8fa70204 */ lw $a3,0x204($sp)
@ -8375,7 +8375,7 @@ glabel var7f1a99ecpf
/* f024604: 31f80001 */ andi $t8,$t7,0x1
/* f024608: 13000007 */ beqz $t8,.PF0f024628
/* f02460c: 00000000 */ nop
/* f024610: 0fc1c248 */ jal propDropRecursive
/* f024610: 0fc1c248 */ jal objDropRecursively
/* f024614: 00002825 */ move $a1,$zero
/* f024618: 8e080014 */ lw $t0,0x14($s0)
/* f02461c: 2401fffe */ li $at,-2
@ -8654,7 +8654,7 @@ glabel var7f1a87d8
/* f023414: 304c0001 */ andi $t4,$v0,0x1
/* f023418: 11800003 */ beqz $t4,.L0f023428
/* f02341c: 8fa40250 */ lw $a0,0x250($sp)
/* f023420: 0fc1c1a6 */ jal propDropRecursive
/* f023420: 0fc1c1a6 */ jal objDropRecursively
/* f023424: 24050001 */ addiu $a1,$zero,0x1
.L0f023428:
/* f023428: 8fa40250 */ lw $a0,0x250($sp)
@ -9256,7 +9256,7 @@ glabel var7f1a87d8
/* f023cb8: 2841000b */ slti $at,$v0,0xb
/* f023cbc: 14200009 */ bnez $at,.L0f023ce4
/* f023cc0: ac620000 */ sw $v0,0x0($v1)
/* f023cc4: 0fc0919a */ jal chrDropWeapons
/* f023cc4: 0fc0919a */ jal chrDropItemsForOwnerReap
/* f023cc8: afa00204 */ sw $zero,0x204($sp)
/* f023ccc: 8e080014 */ lw $t0,0x14($s0)
/* f023cd0: 8fa70204 */ lw $a3,0x204($sp)
@ -9813,7 +9813,7 @@ glabel var7f1a87d8
/* f0244e0: 33280001 */ andi $t0,$t9,0x1
/* f0244e4: 11000007 */ beqz $t0,.L0f024504
/* f0244e8: 00000000 */ nop
/* f0244ec: 0fc1c1a6 */ jal propDropRecursive
/* f0244ec: 0fc1c1a6 */ jal objDropRecursively
/* f0244f0: 00002825 */ or $a1,$zero,$zero
/* f0244f4: 8e0e0014 */ lw $t6,0x14($s0)
/* f0244f8: 2401fffe */ addiu $at,$zero,-2
@ -10082,7 +10082,7 @@ glabel var7f1a87d8
/* f022edc: 30490001 */ andi $t1,$v0,0x1
/* f022ee0: 11200003 */ beqz $t1,.NB0f022ef0
/* f022ee4: 8fa40250 */ lw $a0,0x250($sp)
/* f022ee8: 0fc1bd25 */ jal propDropRecursive
/* f022ee8: 0fc1bd25 */ jal objDropRecursively
/* f022eec: 24050001 */ addiu $a1,$zero,0x1
.NB0f022ef0:
/* f022ef0: 8fa40250 */ lw $a0,0x250($sp)
@ -11193,7 +11193,7 @@ glabel var7f1a87d8
/* f023efc: 31880001 */ andi $t0,$t4,0x1
/* f023f00: 11000007 */ beqz $t0,.NB0f023f20
/* f023f04: 00000000 */ sll $zero,$zero,0x0
/* f023f08: 0fc1bd25 */ jal propDropRecursive
/* f023f08: 0fc1bd25 */ jal objDropRecursively
/* f023f0c: 00002825 */ or $a1,$zero,$zero
/* f023f10: 8e0f0014 */ lw $t7,0x14($s0)
/* f023f14: 2401fffe */ addiu $at,$zero,-2
@ -11222,7 +11222,7 @@ void chrDropConcealedItems(struct chrdata *chr)
&& prop != chr->weapons_held[0]
&& (prop->obj->hidden & OBJHFLAG_00000040) == 0
&& (prop->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
objSetDropped(prop, DROPREASON_1);
objSetDropped(prop, DROPTYPE_DEFAULT);
}
prop = prop->next;
@ -11253,7 +11253,7 @@ void chrSetHudpieceVisible(struct chrdata *chr, bool visible)
}
}
void chrDropWeapons(struct chrdata *chr)
void chrDropItemsForOwnerReap(struct chrdata *chr)
{
struct prop *prop = chr->prop->child;
@ -11263,7 +11263,7 @@ void chrDropWeapons(struct chrdata *chr)
struct defaultobj *obj = prop->obj;
if ((obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
objSetDropped(prop, DROPREASON_6);
objSetDropped(prop, DROPTYPE_OWNERREAP);
}
}

View File

@ -2017,11 +2017,11 @@ void chrSurrenderChooseAnimation(struct chrdata *chr)
modelSetAnimLooping(chr->model, 40, 16);
if (gun1) {
objSetDropped(gun1, DROPREASON_2);
objSetDropped(gun1, DROPTYPE_SURRENDER);
}
if (gun0) {
objSetDropped(gun0, DROPREASON_2);
objSetDropped(gun0, DROPTYPE_SURRENDER);
}
chr->hidden |= CHRHFLAG_00000001;
@ -3436,12 +3436,12 @@ void chrBeginDeath(struct chrdata *chr, struct coord *dir, f32 relangle, s32 hit
// Drop items
if (race == RACE_HUMAN || race == RACE_SKEDAR) {
if (chr->weapons_held[0] && (chr->weapons_held[0]->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
objSetDropped(chr->weapons_held[0], DROPREASON_1);
objSetDropped(chr->weapons_held[0], DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
}
if (chr->weapons_held[1] && (chr->weapons_held[1]->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
objSetDropped(chr->weapons_held[1], DROPREASON_1);
objSetDropped(chr->weapons_held[1], DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
}
@ -4623,7 +4623,7 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse
} else if (type != HATTYPE_METAL) {
// Normal hat
damage = 0;
objSetDropped(chr->weapons_held[2], DROPREASON_4);
objSetDropped(chr->weapons_held[2], DROPTYPE_HAT);
chr->hidden |= CHRHFLAG_00000001;
} else {
// Metal helmets don't fall off and make a metallic chink noise when shot
@ -4906,7 +4906,7 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse
if (weapon) {
chr->gunprop = weapon;
objSetDropped(weapon, DROPREASON_1);
objSetDropped(weapon, DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
}
@ -4914,7 +4914,7 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse
if (weapon) {
chr->gunprop = weapon;
objSetDropped(weapon, DROPREASON_1);
objSetDropped(weapon, DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
}
}
@ -5052,14 +5052,14 @@ void chrDamage(struct chrdata *chr, f32 damage, struct coord *vector, struct gse
weapon = chr->weapons_held[HAND_RIGHT];
if (weapon && (weapon->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
objSetDropped(weapon, DROPREASON_1);
objSetDropped(weapon, DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
}
weapon = chr->weapons_held[HAND_LEFT];
if (weapon && (weapon->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
objSetDropped(weapon, DROPREASON_1);
objSetDropped(weapon, DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
}
}
@ -8163,7 +8163,7 @@ bool chrDropItem(struct chrdata *chr, u32 modelnum, u32 weaponnum)
modelSetScale(weapon->base.model, weapon->base.model->scale);
propReparent(weapon->base.prop, chr->prop);
weapon->timer240 = PALDOWN(720);
objSetDropped(weapon->base.prop, DROPREASON_1);
objSetDropped(weapon->base.prop, DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
return true;
@ -9252,7 +9252,7 @@ void chrTickDead(struct chrdata *chr)
// screen and there's lots of other chrs around)
if (chr->act_dead.fadenow) {
chr->act_dead.fadetimer60 = 0;
chrDropWeapons(chr);
chrDropItemsForOwnerReap(chr);
}
if (chr->prop->flags & PROPFLAG_80) {
@ -9270,7 +9270,7 @@ void chrTickDead(struct chrdata *chr)
chr->fadealpha = 0;
chrDropWeapons(chr);
chrDropItemsForOwnerReap(chr);
}
}
@ -9741,14 +9741,14 @@ glabel chrTickDruggedComingUp
// weapon = chr->weapons_held[HAND_RIGHT];
//
// if (weapon && (weapon->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
// objSetDropped(weapon, DROPREASON_1);
// objSetDropped(weapon, DROPTYPE_DEFAULT);
// chr->hidden |= CHRHFLAG_00000001;
// }
//
// weapon = chr->weapons_held[HAND_LEFT];
//
// if (weapon && (weapon->obj->flags & OBJFLAG_AIUNDROPPABLE) == 0) {
// objSetDropped(weapon, DROPREASON_1);
// objSetDropped(weapon, DROPTYPE_DEFAULT);
// chr->hidden |= CHRHFLAG_00000001;
// }
//
@ -9850,7 +9850,7 @@ void chrTickDruggedKo(struct chrdata *chr)
if (reap) {
chr->fadealpha = 0;
chr->hidden |= CHRHFLAG_REAPED;
chrDropWeapons(chr);
chrDropItemsForOwnerReap(chr);
}
}
@ -18104,7 +18104,7 @@ void chrTickThrowGrenade(struct chrdata *chr)
(frame >= 57 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_NOPIN) ||
(frame >= 58 && weaponprop && modelGetAnimNum(model) == ANIM_THROWGRENADE_CROUCHING)) {
weapon = weaponprop->weapon;
objSetDropped(weaponprop, DROPREASON_3);
objSetDropped(weaponprop, DROPTYPE_THROWGRENADE);
chr->hidden |= CHRHFLAG_00000001;
weapon->timer240 = PALDOWN(240);
}

View File

@ -2285,7 +2285,7 @@ bool ai0067(void)
if (obj && obj->prop && obj->prop->parent && obj->prop->parent->type == PROPTYPE_CHR) {
struct chrdata *chr = obj->prop->parent->chr;
objSetDropped(obj->prop, DROPREASON_2);
objSetDropped(obj->prop, DROPTYPE_SURRENDER);
chr->hidden |= CHRHFLAG_00000001;
}
@ -2330,12 +2330,12 @@ bool aiChrDropWeapon(void)
setCurrentPlayerNum(prevplayernum);
} else if (chr && chr->prop) {
if (chr->weapons_held[0]) {
objSetDropped(chr->weapons_held[0], DROPREASON_1);
objSetDropped(chr->weapons_held[0], DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
}
if (chr->weapons_held[1]) {
objSetDropped(chr->weapons_held[1], DROPREASON_1);
objSetDropped(chr->weapons_held[1], DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
}
}

View File

@ -22,11 +22,11 @@ void func0f096360(Mtxf *mtx)
mtx4LoadRotation(&coord, mtx);
}
void func0f0964b4(f32 *arg0, Mtxf *mtx)
void func0f0964b4(struct coord *coord, Mtxf *mtx)
{
arg0[0] = random() * (1.0f / U32_MAX) * 1.6666666269302f * 4.0f - 3.3333332538605f;
arg0[1] = random() * (1.0f / U32_MAX) * 1.6666666269302f * 4.0f;
arg0[2] = random() * (1.0f / U32_MAX) * 1.6666666269302f * 4.0f - 3.3333332538605f;
coord->x = random() * (1.0f / U32_MAX) * 1.6666666269302f * 4.0f - 3.3333332538605f;
coord->y = random() * (1.0f / U32_MAX) * 1.6666666269302f * 4.0f;
coord->z = random() * (1.0f / U32_MAX) * 1.6666666269302f * 4.0f - 3.3333332538605f;
func0f096360(mtx);
}

View File

@ -4231,7 +4231,7 @@ void aibotLoseGun(struct chrdata *chr, struct prop *attackerprop)
if (prop && prop->obj) {
obj = prop->obj;
objSetDropped(prop, DROPREASON_1);
objSetDropped(prop, DROPTYPE_DEFAULT);
chr->hidden |= CHRHFLAG_00000001;
if (obj->hidden & OBJHFLAG_AIRBORNE) {

View File

@ -1041,8 +1041,8 @@ void func0f19978c(struct chrdata *chr, s32 weaponnum, u8 arg2)
struct prop *prop = weaponCreateForChr(chr, modelnum, item->type_weap.weapon1, OBJFLAG_WEAPON_AICANNOTUSE, NULL, NULL);
if (prop) {
objSetDropped(prop, DROPREASON_1);
propDrop(prop, true);
objSetDropped(prop, DROPTYPE_DEFAULT);
objDrop(prop, true);
if (item->type_weap.weapon1 == WEAPON_BRIEFCASE2) {
func0f187288(chr, prop);

View File

@ -1191,7 +1191,7 @@ void handInflictCloseRangeDamage(s32 handnum, struct gset *gset, bool arg2)
skipthething = true;
bgun0f0a8404(&playerprop->pos, playerprop->rooms, -1);
objTakeGunfire(obj, damage, &prop->pos, gset->weaponnum, g_Vars.currentplayernum);
propDropRecursive(prop, false);
objDropRecursively(prop, false);
}
} else if (arg2) {
chr->chrflags |= CHRCFLAG_10000000;

File diff suppressed because it is too large Load Diff

View File

@ -720,12 +720,12 @@
#define DRCAROLLIMAGE_RANDOM25 7
#define DRCAROLLIMAGE_RANDOM 8
#define DROPREASON_1 1
#define DROPREASON_2 2
#define DROPREASON_3 3
#define DROPREASON_4 4
#define DROPREASON_5 5
#define DROPREASON_6 6
#define DROPTYPE_DEFAULT 1
#define DROPTYPE_SURRENDER 2
#define DROPTYPE_THROWGRENADE 3
#define DROPTYPE_HAT 4
#define DROPTYPE_5 5
#define DROPTYPE_OWNERREAP 6
#define EXPLOSIONTYPE_0 0
#define EXPLOSIONTYPE_1 1

View File

@ -29,7 +29,7 @@ bool chrTickBeams(struct prop *prop);
s32 func0f023098(struct prop *prop);
void chrDropConcealedItems(struct chrdata *chr);
void chrSetHudpieceVisible(struct chrdata *chr, bool visible);
void chrDropWeapons(struct chrdata *chr);
void chrDropItemsForOwnerReap(struct chrdata *chr);
void func0f0246e4(u8 *arg0);
bool func0f024738(struct chrdata *chr);
bool func0f024b18(struct model *model, struct modelnode *node);

View File

@ -5,7 +5,7 @@
#include "types.h"
void func0f096360(Mtxf *mtx);
void func0f0964b4(f32 *arg0, Mtxf *mtx);
void func0f0964b4(struct coord *arg0, Mtxf *mtx);
void func0f0965e4(f32 *arg0, f32 *arg1, f32 arg2);
void func0f096698(Mtxf *arg0, Mtxf *arg1, s32 count);

View File

@ -80,7 +80,7 @@ struct modelnode *modelFileDataFindBboxNode(struct modelfiledata *filedata);
struct modelrodata_bbox *modelFileDataFindBboxRodata(struct modelfiledata *filedata);
struct modelnode *modelFindBboxNode(struct model *model);
struct modelrodata_bbox *modelFindBboxRodata(struct model *model);
u32 func0f068ad4(void);
struct modelnode *func0f068ad4(struct defaultobj *obj);
struct modelrodata_bbox *objFindBboxRodata(struct defaultobj *obj);
u32 func0f068b14(void);
u32 func0f068c04(void);
@ -107,7 +107,7 @@ void objEndFlight(struct defaultobj *obj);
void func0f06ac90(struct prop *prop);
void objFree(struct defaultobj *obj, bool freeprop, bool canregen);
void objFreePermanently(struct defaultobj *obj, bool freeprop);
u32 func0f06b36c(void);
f32 func0f06b36c(struct defaultobj *obj);
bool func0f06b39c(struct coord *arg0, struct coord *arg1, struct coord *arg2, f32 arg3);
u32 func0f06b488(void);
u32 func0f06b610(void);
@ -131,7 +131,7 @@ bool propExplode(struct prop *prop, s32 explosiontype);
void ammocrateTick(struct prop *ammocrate);
void weaponTick(struct prop *weapon);
void func0f07063c(struct prop *prop, bool arg1);
void propDropRecursive(struct prop *prop, bool arg1);
void objDropRecursively(struct prop *prop, bool arg1);
void func0f0706f8(struct prop *prop, bool arg1);
void func0f07079c(struct prop *prop, bool arg1);
s32 glassCalculateOpacity(struct coord *pos, f32 xludist, f32 opadist, f32 arg3);
@ -214,12 +214,12 @@ Gfx *objRender(struct prop *prop, Gfx *gdl, bool withalpha);
bool modelIsNodeNotTvscreen(struct modelfiledata *filedata, struct modelnode *node);
void func0f081ccc(struct chopperobj *chopper, s32 arg1);
u32 func0f0826cc(void);
void objSetDropped(struct prop *prop, u32 reason);
void objSetDropped(struct prop *prop, u32 droptype);
void func0f082a1c(struct defaultobj *obj, struct coord *coord, f32 rotate, bool arg3, bool arg4);
void piracyRestore(void);
void func0f082e84(struct defaultobj *obj, struct coord *arg1, struct coord *arg2, struct coord *arg3, bool arg4);
void objDetach(struct prop *prop);
void propDrop(struct prop *prop, bool arg1);
bool objDrop(struct prop *prop, bool lazy);
u32 func0f083db0(void);
u32 func0f0840ac(void);
void func0f0841dc(struct defaultobj *obj, struct coord *pos, s32 playernum);

View File

@ -1475,7 +1475,7 @@ struct chrdata {
// So I guess it denotes a generic moving object?
struct projectile {
/*0x000*/ u32 flags;
/*0x004*/ struct coord unk004; // distance moved in last tick
/*0x004*/ struct coord speed; // distance moved in last tick
/*0x010*/ f32 unk010;
/*0x014*/ f32 unk014;
/*0x018*/ f32 unk018;
@ -1516,7 +1516,7 @@ struct projectile {
/*0x0a4*/ s32 unk0a4;
/*0x0a8*/ u32 unk0a8;
/*0x0ac*/ u32 unk0ac;
/*0x0b0*/ s16 dropreason;
/*0x0b0*/ s16 droptype;
/*0x0b2*/ s16 unk0b2;
/*0x0b4*/ s32 unk0b4;
/*0x0b8*/ f32 unk0b8;