Attempt to decompile func0f190be4

This commit is contained in:
Ryan Dwyer
2021-02-26 18:39:25 +10:00
parent d4cd16b838
commit 215367dd20
3 changed files with 197 additions and 8 deletions
+190 -1
View File
@@ -703,7 +703,7 @@ glabel var7f1b8ea8
/* f190c50: 1000014b */ b .L0f191180
/* f190c54: 00001025 */ or $v0,$zero,$zero
.L0f190c58:
/* f190c58: 0fc21465 */ jal func0f085194
/* f190c58: 0fc21465 */ jal objIsCollectableByDefault
/* f190c5c: 8fa40084 */ lw $a0,0x84($sp)
/* f190c60: 5040000d */ beqzl $v0,.L0f190c98
/* f190c64: 8fa20084 */ lw $v0,0x84($sp)
@@ -1069,6 +1069,195 @@ glabel var7f1b8ea8
/* f191190: 00000000 */ nop
);
// Mismatch: Uses too many callee-save registers
//bool func0f190be4(struct prop *prop, struct chrdata *chr)
//{
// struct defaultobj *obj = prop->obj; // 84
//
// struct weaponobj *weaponobj; // 80
// s32 itemtype; // 7c
// struct weapon *weapon;
// bool singleonly;
// s32 cap;
// s32 qty;
//
// struct ammocrateobj *crate;
//
// s32 weaponnum; // 68
// bool ignore1; // 64
// struct multiammocrateobj *crate2;
//
// struct shieldobj *shield; // 58
// bool ignore2;
//
// struct prop *chrprop;
//
// f32 xdist; // 4c
// f32 ydist; // 48
// f32 zdist; // 44
// f32 sqrange;
// bool sp3c;
// s32 i;
// f32 latdist;
// u32 stack;
//
// if (!chr || !chr->aibot || !g_Vars.lvmpbotlevel || chrIsDead(chr)) {
// return false;
// }
//
// dprint();
//
// if (prop->timetoregen != 0) {
// return false;
// }
//
// if (objIsCollectableByDefault(obj) && obj->type != OBJTYPE_HAT) {
// if (obj->flags & OBJFLAG_UNCOLLECTABLE) {
// return false;
// }
// } else {
// if ((obj->flags & OBJFLAG_COLLECTABLE) == 0) {
// return false;
// }
// }
//
// dprint();
//
// if ((obj->hidden & OBJHFLAG_00000004) || (obj->flags & OBJFLAG_00080000)) {
// return false;
// }
//
// dprint();
//
// if ((obj->hidden & OBJHFLAG_AIRBORNE)
// && obj->projectile
// && obj->projectile->unk0b4 > 0
// && obj->projectile->unk090 == 0) {
// return false;
// }
//
// dprint();
//
// if (!func0f066640(obj)) {
// return false;
// }
//
// dprint();
//
// // d64
// if (obj->type == OBJTYPE_WEAPON) {
// weaponobj = prop->weapon; // 80
// itemtype = aibotGetInvItemType(chr, weaponobj->weaponnum); // 7c
// weapon = weaponFindById(weaponobj->weaponnum);
// singleonly = weapon && (weapon->flags & WEAPONFLAG_DUALWIELD) == 0;
//
// if (weaponobj->weaponnum != WEAPON_BRIEFCASE2) {
// // If aibot is dual wielding, or single wielding and weapon doesn't support dual,
// // ignore the pickup if at max ammo already
// if (itemtype == INVITEMTYPE_DUAL || (itemtype == INVITEMTYPE_WEAP && singleonly)) {
// qty = aibotGetAmmoQuantityByWeapon(chr->aibot, weaponobj->weaponnum, weaponobj->gunfunc, false);
// cap = ammotypeGetMaxCapacity(weaponGetAmmoTypeByFunction(weaponobj->weaponnum, weaponobj->gunfunc));
//
// if (qty >= cap) {
// return false;
// }
// }
//
// // Ignore rockets that are in flight
// if ((weaponobj->weaponnum == WEAPON_ROCKET || weaponobj->weaponnum == WEAPON_HOMINGROCKET)
// && (obj->hidden & OBJHFLAG_AIRBORNE)) {
// return false;
// }
// }
// } else /*e58*/ if (obj->type == OBJTYPE_AMMOCRATE) {
// crate = (struct ammocrateobj *)prop->obj;
//
// // Ignore ammo crate if at max ammo already
// if (aibotGetAmmoQuantityByType(chr->aibot, crate->ammotype, false) >= ammotypeGetMaxCapacity(crate->ammotype)) {
// return false;
// }
// } else /*e9c*/ if (obj->type == OBJTYPE_MULTIAMMOCRATE) {
// crate2 = (struct multiammocrateobj *)prop->obj;
// ignore1 = true;
//
// if (func0f0687b8(obj)) {
// dprint();
// return false;
// }
//
// for (i = 0; i < 0x13; i++) {
// weaponnum = ammotypeGetWeapon(i + 1);
//
// if (crate2->quantities[i].unk02 > 0) {
// if (aibotGetAmmoQuantityByType(chr->aibot, i + 1, false) < ammotypeGetMaxCapacity(i + 1)) {
// ignore1 = false;
//
// if (weaponnum && !aibotGetInvItemType(chr, weaponnum)) {
// dprint();
// aibotGiveProp(chr, prop);
// }
//
// break;
// }
// }
// }
//
// if (ignore1) {
// return false;
// }
// } else /*f9c*/ if (obj->type == OBJTYPE_SHIELD) {
// shield = (struct shieldobj *)prop->obj; // 58
// ignore2 = false;
//
// if (shield->amount <= chrGetShield(chr) * 0.125f) {
// ignore2 = true;
// } else if (g_MpSetup.scenario == MPSCENARIO_HOLDTHEBRIEFCASE && chr->aibot->unk09c_00) {
// ignore2 = true;
// }
//
// if (ignore2) {
// return false;
// }
// }
//
// // 024
// chrprop = chr->prop;
//
// xdist = prop->pos.x - chrprop->pos.x;
// ydist = prop->pos.y - chrprop->pos.y;
// zdist = prop->pos.z - chrprop->pos.z;
//
// latdist = xdist * xdist + zdist * zdist;
//
// dprint();
//
// if (chr->aibot->cheap) {
// sqrange = 250 * 250;
// } else {
// sqrange = 100 * 100;
// }
//
// sp3c = latdist <= sqrange && ydist >= -200 && ydist <= 200;
//
// // 108
// if (sp3c) {
// dprint();
//
// if ((obj->flags2 & OBJFLAG2_00001000) == 0
// && !func0002dcd0(&chrprop->pos, chrprop->rooms, &prop->pos, prop->rooms, 0x22)) {
// sp3c = false;
// }
// }
//
// // 15c
// if (sp3c) {
// dprint();
// return propobjHandlePickupByAibot(prop, chr);
// }
//
// return false;
//}
s32 mpObjIsSafe(struct defaultobj *obj)
{
if (!obj) {
+5 -5
View File
@@ -35230,7 +35230,7 @@ bool func0f085158(struct defaultobj *obj)
return false;
}
bool func0f085194(struct defaultobj *obj)
bool objIsCollectableByDefault(struct defaultobj *obj)
{
switch (obj->type) {
case OBJTYPE_KEY:
@@ -35257,7 +35257,7 @@ glabel func0f0851ec
/* f085204: 10000016 */ b .L0f085260
/* f085208: 00001025 */ or $v0,$zero,$zero
.L0f08520c:
/* f08520c: 0fc21465 */ jal func0f085194
/* f08520c: 0fc21465 */ jal objIsCollectableByDefault
/* f085210: afa40018 */ sw $a0,0x18($sp)
/* f085214: 1040000b */ beqz $v0,.L0f085244
/* f085218: 8fa40018 */ lw $a0,0x18($sp)
@@ -35354,7 +35354,7 @@ glabel var7f1aab30
/* f085338: 02002025 */ or $a0,$s0,$zero
/* f08533c: 55a0000c */ bnezl $t5,.L0f085370
/* f085340: 8e030008 */ lw $v1,0x8($s0)
/* f085344: 0fc21465 */ jal func0f085194
/* f085344: 0fc21465 */ jal objIsCollectableByDefault
/* f085348: e7ac00c4 */ swc1 $f12,0xc4($sp)
/* f08534c: 1440018f */ bnez $v0,.L0f08598c
/* f085350: c7ac00c4 */ lwc1 $f12,0xc4($sp)
@@ -36832,7 +36832,7 @@ glabel func0f085eac
/* f086860: 1000002a */ b .L0f08690c
/* f086864: 8fbf0034 */ lw $ra,0x34($sp)
.L0f086868:
/* f086868: 0fc21465 */ jal func0f085194
/* f086868: 0fc21465 */ jal objIsCollectableByDefault
/* f08686c: afa00054 */ sw $zero,0x54($sp)
/* f086870: 10400008 */ beqz $v0,.L0f086894
/* f086874: 8fa30054 */ lw $v1,0x54($sp)
@@ -39268,7 +39268,7 @@ glabel var7f1aae84
/* f08903c: 10000262 */ b .L0f0899c8
/* f089040: 00001025 */ or $v0,$zero,$zero
.L0f089044:
/* f089044: 0fc21465 */ jal func0f085194
/* f089044: 0fc21465 */ jal objIsCollectableByDefault
/* f089048: afa50084 */ sw $a1,0x84($sp)
/* f08904c: 1040000b */ beqz $v0,.L0f08907c
/* f089050: 8fa40084 */ lw $a0,0x84($sp)
+2 -2
View File
@@ -29,7 +29,7 @@ void countdownTimerSetVisible(u32 flag, bool show);
void countdownTimerTick(void);
bool func0f066310(struct prop *doorprop, bool arg1);
bool doorIsPadlockFree(struct doorobj *door);
u32 func0f066640(void);
bool func0f066640(struct defaultobj *obj);
u32 func0f0666cc(void);
u32 func0f0667ac(void);
u32 func0f0667b4(void);
@@ -231,7 +231,7 @@ u32 func0f084cf0(void);
u32 func0f084e58(void);
u32 func0f084f64(void);
u32 func0f085050(void);
bool func0f085194(struct defaultobj *obj);
bool objIsCollectableByDefault(struct defaultobj *obj);
u32 func0f0851ec(void);
void func0f085270(struct defaultobj *obj, f32 damage, struct coord *pos, s32 weaponnum, s32 playernum);
void func0f0852ac(struct defaultobj *obj, f32 damage, struct coord *pos, s32 arg3, s32 arg4);