Improve mismatch of propPickupByPlayer

This commit is contained in:
Ryan Dwyer
2021-06-04 12:26:58 +10:00
parent 8b8fa7b0b4
commit 551bd82717
2 changed files with 47 additions and 44 deletions
+46 -43
View File
@@ -62449,21 +62449,23 @@ glabel var7f1aae70
);
#endif
//u32 propPickupByPlayer(struct prop *prop, bool showhudmsg)
// Mismatch: Goal stores obj in a2 and sp9c, and copies it from a2 for the more
// specific obj types. The below uses sp9c everywhere.
//s32 propPickupByPlayer(struct prop *prop, bool showhudmsg)
//{
// struct defaultobj *obj = prop->obj; // sp156
// u32 sp148[2];
// bool v0;
// struct defaultobj *obj = prop->obj; // 9c
// s32 sp94[2];
// s32 result;
//
// sp148[0] = 0;
// sp94[0] = TICKOP_NONE;
//
// if (g_Vars.currentplayer->isdead || g_Vars.lvupdate240 == 0) {
// return 0;
// return TICKOP_NONE;
// }
//
// // 88c
// switch (obj->type) {
// case 0x04: // f0888b4 - key
// case OBJTYPE_KEY: // f0888b4 - key
// if (g_Vars.in_cutscene == false) {
// sndStart(var80095200, SFX_PICKUP_KEYCARD, NULL, -1, -1, -1, -1, -1);
// }
@@ -62478,17 +62480,17 @@ glabel var7f1aae70
// func0f0ddfa4(text, HUDMSGTYPE_DEFAULT, 9);
// }
//
// v0 = 4;
// result = TICKOP_GIVETOPLAYER;
// break;
// case 0x07: // f088934 - ammocrate
// case OBJTYPE_AMMOCRATE: // f088934 - ammocrate
// {
// struct ammocrateobj *crate = (struct ammocrateobj *)obj;
// struct ammocrateobj *crate = (struct ammocrateobj *)obj; // 8c
// func0f088028(crate->ammotype, ammocrateGetPickupAmmoQty(crate), g_Vars.in_cutscene == false, showhudmsg);
// sp148[1] = 1;
// v0 = 1;
// sp94[1] = TICKOP_FREE;
// result = TICKOP_FREE;
// }
// break;
// case 0x14: // f088974 - multiammocrate
// case OBJTYPE_MULTIAMMOCRATE: // f088974 - multiammocrate
// {
// struct multiammocrateobj *crate = (struct multiammocrateobj *)obj;
// s32 i;
@@ -62507,36 +62509,36 @@ glabel var7f1aae70
// sndStart(var80095200, SFX_PICKUP_AMMO, NULL, -1, -1, -1, -1, -1);
// }
//
// sp148[1] = 1;
// v0 = 1;
// sp94[1] = TICKOP_FREE;
// result = TICKOP_FREE;
// }
// break;
// case 0x08: // f088a34 - weapon
// case OBJTYPE_WEAPON: // f088a34 - weapon
// {
// bool sp112 = false;
// u32 count = 0;
// struct weaponobj *weapon = (struct weaponobj *)obj;
// s32 count = 0;
// bool sp112 = false;
// s32 ammotype;
//
// if (g_Vars.normmplayerisrunning) {
// if (weapon->weaponnum == WEAPON_BRIEFCASE2) {
// u32 iVar2 = chrGiveBriefcase(g_Vars.currentplayer->prop->chr, prop);
// result = chrGiveBriefcase(g_Vars.currentplayer->prop->chr, prop);
//
// if (iVar2) {
// if (result) {
// func0f087d10(weapon->weaponnum);
// }
//
// return iVar2;
// return result;
// }
//
// if (weapon->weaponnum == WEAPON_DATAUPLINK) {
// u32 iVar2 = chrGiveUplink(g_Vars.currentplayer->prop->chr, prop);
// result = chrGiveUplink(g_Vars.currentplayer->prop->chr, prop);
//
// if (iVar2) {
// if (result) {
// func0f087d10(weapon->weaponnum);
// }
//
// return iVar2;
// return result;
// }
// }
//
@@ -62549,7 +62551,7 @@ glabel var7f1aae70
// if (obj->hidden & OBJHFLAG_HASTEXTOVERRIDE) {
// if (weapon->weaponnum <= WEAPON_PSYCHOSISGUN) {
// count = invGiveWeaponsByProp(prop);
// sp148[0] = 1;
// sp94[0] = TICKOP_FREE;
// }
//
// if (showhudmsg) {
@@ -62564,14 +62566,14 @@ glabel var7f1aae70
// sp112 = true;
// }
//
// sp148[1] = 4;
// sp94[1] = TICKOP_GIVETOPLAYER;
// } else {
// // b88
// if (weapon->weaponnum == WEAPON_BOLT) {
// count = 1; // sp104
// sp148[0] = 1;
// sp94[0] = TICKOP_FREE;
// func0f088028(AMMOTYPE_CROSSBOW, 1, g_Vars.in_cutscene == false, true);
// sp148[1] = 1;
// sp94[1] = TICKOP_FREE;
// showhudmsg = false;
// sp112 = true;
// } else {
@@ -62582,7 +62584,7 @@ glabel var7f1aae70
// sp112 = true;
// }
//
// sp148[0] = 1;
// sp94[0] = TICKOP_FREE;
//
// if (showhudmsg) {
// char *text = invGetActivatedTextByWeaponNum(weapon->weaponnum);
@@ -62597,7 +62599,7 @@ glabel var7f1aae70
// }
// }
//
// sp148[1] = 1;
// sp94[1] = TICKOP_FREE;
// }
// }
//
@@ -62631,7 +62633,7 @@ glabel var7f1aae70
// if (weapon->weaponnum == WEAPON_SUPERDRAGON) {
// s32 pickupqty = weaponGetPickupAmmoQty(weapon);
//
// if (currentPlayerGetAmmoCountWithCheck(AMMOTYPE_DEVASTATOR) < currentPlayerGetAmmoCountWithCheck(AMMOTYPE_DEVASTATOR)) {
// if (currentPlayerGetAmmoCountWithCheck(AMMOTYPE_DEVASTATOR) < ammotypeGetMaxCapacity(AMMOTYPE_DEVASTATOR)) {
// s32 heldqty = currentPlayerGetAmmoCountWithCheck(AMMOTYPE_DEVASTATOR);
//
// currentPlayerSetAmmoQuantity(AMMOTYPE_DEVASTATOR, heldqty + 5);
@@ -62646,10 +62648,10 @@ glabel var7f1aae70
// currentPlayerInitEyespy();
// }
//
// v0 = sp148[1];
// result = sp94[1];
// }
// break;
// case 0x15: // f088dd0 - shield
// case OBJTYPE_SHIELD: // f088dd0 - shield
// {
// struct shieldobj *shield = (struct shieldobj *)obj;
// currentPlayerSetShieldFrac(shield->amount);
@@ -62675,8 +62677,8 @@ glabel var7f1aae70
// func0f0ddfa4(text, HUDMSGTYPE_DEFAULT, 1);
// }
//
// sp148[1] = 1;
// v0 = true;
// sp94[1] = TICKOP_FREE;
// result = TICKOP_FREE;
// }
// break;
// case 0x03: // f088f20
@@ -62734,26 +62736,27 @@ glabel var7f1aae70
// func0f0ddfa4(text, HUDMSGTYPE_DEFAULT, 9);
// }
//
// sp148[1] = 4;
// v0 = 4;
// sp94[1] = TICKOP_GIVETOPLAYER;
// result = TICKOP_GIVETOPLAYER;
// break;
// }
//
// // fa4
// if (v0 == 1 && (obj->hidden & OBJHFLAG_TAGGED) == 0) {
// if (result == TICKOP_FREE && (obj->hidden & OBJHFLAG_TAGGED) == 0) {
// objRemove2(obj, false, obj->hidden2 & OBJH2FLAG_CANREGEN);
// return 1;
// return TICKOP_FREE;
// }
//
// // fe0
// if (v0) {
// if (sp148[0] == 0) {
// if (result) {
// if (sp94[0] == TICKOP_NONE) {
// invGiveProp(prop);
// }
//
// return 4;
// return TICKOP_GIVETOPLAYER;
// }
//
// return 0;
// return TICKOP_NONE;
//}
s32 objTestForPickup(struct prop *prop)
+1 -1
View File
@@ -259,7 +259,7 @@ s32 ammocrateGetPickupAmmoQty(struct ammocrateobj *crate);
s32 weaponGetPickupAmmoQty(struct weaponobj *weapon);
void weaponGetPickupText(char *buffer, s32 weaponnum, bool dual);
void currentPlayerQueuePickupWeaponHudmsg(u32 weaponnum, bool dual);
u32 propPickupByPlayer(struct prop *prop, bool showhudmsg);
s32 propPickupByPlayer(struct prop *prop, bool showhudmsg);
s32 objTestForPickup(struct prop *prop);
bool func0f0899dc(struct prop *prop, struct coord *arg1, f32 *arg2, f32 *arg3);
void func0f089a94(bool arg0, struct model *model);