mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-05-29 16:44:33 -04:00
Decompile currentPlayerGiveProp
This commit is contained in:
@@ -554,9 +554,20 @@ u8 props[] = {
|
||||
stdobject(0x00e6, MODEL_A51_CRATE2, 0x0267, 0x000201e1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000)
|
||||
stdobject(0x0100, MODEL_A51_CRATE2, 0x0268, 0x000201e8, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000)
|
||||
stdobject(0x0033, MODEL_QUADPOD, 0x013d, 0x000005e1, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000)
|
||||
|
||||
/**
|
||||
* @bug: This should be using MODEL_CHRNIGHTSIGHT.
|
||||
*
|
||||
* When picking up night vision the game checks if the perfect darkness
|
||||
* cheat is enabled and skips adding the night vision to your inventory as
|
||||
* it would already be there. But because this uses IR specs instead, the
|
||||
* check doesn't match and a duplicate night vision is added to the
|
||||
* inventory.
|
||||
*/
|
||||
tag(0x05, 1)
|
||||
stdobject(0x0100, MODEL_MISC_IRSPECS, 0x013d, 0x014605e1, 0x00004001, 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000)
|
||||
rename_object(-1, 0x2d, 0x1e2d, 0x1e2e, 0x1e2f, 0x1e30, 0x1e31, 0x0000, 0x0000) // "Obtain Night Vision."
|
||||
|
||||
tag(0x06, 1)
|
||||
stdobject(0x0100, MODEL_CHRSHIELD, 0x0243, 0x01460501, 0x00004001, 0x00400000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000003e8, 0x00000000, 0x00000000, 0x0fff0000)
|
||||
rename_object(-1, 0x4f, 0x1e32, 0x1e33, 0x1e34, 0x1e35, 0x1e36, 0x0000, 0x0000) // "Obtain shield tech item."
|
||||
|
||||
@@ -40352,7 +40352,7 @@ glabel func0f088840
|
||||
/* f088fe4: 8fb80094 */ lw $t8,0x94($sp)
|
||||
/* f088fe8: 17000003 */ bnez $t8,.L0f088ff8
|
||||
/* f088fec: 00000000 */ sll $zero,$zero,0x0
|
||||
/* f088ff0: 0fc447f3 */ jal func0f111fcc
|
||||
/* f088ff0: 0fc447f3 */ jal currentPlayerGiveProp
|
||||
/* f088ff4: 8fa400a0 */ lw $a0,0xa0($sp)
|
||||
.L0f088ff8:
|
||||
/* f088ff8: 10000002 */ beqz $zero,.L0f089004
|
||||
|
||||
+30
-45
@@ -257,7 +257,7 @@ glabel func0f1118cc
|
||||
);
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0f111928
|
||||
glabel currentPlayerCreateInvitem
|
||||
/* f111928: 3c03800a */ lui $v1,0x800a
|
||||
/* f11192c: 8c63a244 */ lw $v1,-0x5dbc($v1)
|
||||
/* f111930: 00001025 */ or $v0,$zero,$zero
|
||||
@@ -555,10 +555,10 @@ bool currentPlayerGiveWeapon(s32 weaponnum)
|
||||
return false;
|
||||
}
|
||||
|
||||
item = func0f111928();
|
||||
item = currentPlayerCreateInvitem();
|
||||
|
||||
if (item) {
|
||||
item->type = 1;
|
||||
item->type = INVITEMTYPE_1;
|
||||
item->type1.weapon1 = weaponnum;
|
||||
item->type1.weapon2 = -1;
|
||||
func0f11179c(item);
|
||||
@@ -574,10 +574,10 @@ bool currentPlayerGiveWeaponWithArgument(s32 weapon1, s32 weapon2)
|
||||
{
|
||||
if (func0f111ab0(weapon1, weapon2) == 0) {
|
||||
if (weaponHasFlag(weapon1, WEAPONFLAG_00001000)) {
|
||||
struct invitem *item = func0f111928();
|
||||
struct invitem *item = currentPlayerCreateInvitem();
|
||||
|
||||
if (item) {
|
||||
item->type = 3;
|
||||
item->type = INVITEMTYPE_3;
|
||||
item->type3.weapon1 = weapon1;
|
||||
item->type3.weapon2 = weapon2;
|
||||
func0f11179c(item);
|
||||
@@ -680,46 +680,31 @@ glabel func0f111ea4
|
||||
/* f111fc8: 27bd0030 */ addiu $sp,$sp,0x30
|
||||
);
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0f111fcc
|
||||
/* f111fcc: 27bdffe8 */ addiu $sp,$sp,-24
|
||||
/* f111fd0: afbf0014 */ sw $ra,0x14($sp)
|
||||
/* f111fd4: afa40018 */ sw $a0,0x18($sp)
|
||||
/* f111fd8: 0fc41b99 */ jal cheatIsActive
|
||||
/* f111fdc: 24040015 */ addiu $a0,$zero,0x15
|
||||
/* f111fe0: 1040000e */ beqz $v0,.L0f11201c
|
||||
/* f111fe4: 8fa30018 */ lw $v1,0x18($sp)
|
||||
/* f111fe8: 906e0000 */ lbu $t6,0x0($v1)
|
||||
/* f111fec: 24010001 */ addiu $at,$zero,0x1
|
||||
/* f111ff0: 15c1000a */ bne $t6,$at,.L0f11201c
|
||||
/* f111ff4: 00000000 */ sll $zero,$zero,0x0
|
||||
/* f111ff8: 8c620004 */ lw $v0,0x4($v1)
|
||||
/* f111ffc: 10400007 */ beqz $v0,.L0f11201c
|
||||
/* f112000: 00000000 */ sll $zero,$zero,0x0
|
||||
/* f112004: 844f0004 */ lh $t7,0x4($v0)
|
||||
/* f112008: 240100f3 */ addiu $at,$zero,0xf3
|
||||
/* f11200c: 15e10003 */ bne $t7,$at,.L0f11201c
|
||||
/* f112010: 00000000 */ sll $zero,$zero,0x0
|
||||
/* f112014: 1000000b */ beqz $zero,.L0f112044
|
||||
/* f112018: 24020001 */ addiu $v0,$zero,0x1
|
||||
.L0f11201c:
|
||||
/* f11201c: 0fc4464a */ jal func0f111928
|
||||
/* f112020: 00000000 */ sll $zero,$zero,0x0
|
||||
/* f112024: 8fa30018 */ lw $v1,0x18($sp)
|
||||
/* f112028: 10400005 */ beqz $v0,.L0f112040
|
||||
/* f11202c: 00402025 */ or $a0,$v0,$zero
|
||||
/* f112030: 24180002 */ addiu $t8,$zero,0x2
|
||||
/* f112034: ac580000 */ sw $t8,0x0($v0)
|
||||
/* f112038: 0fc445e7 */ jal func0f11179c
|
||||
/* f11203c: ac430004 */ sw $v1,0x4($v0)
|
||||
.L0f112040:
|
||||
/* f112040: 24020001 */ addiu $v0,$zero,0x1
|
||||
.L0f112044:
|
||||
/* f112044: 8fbf0014 */ lw $ra,0x14($sp)
|
||||
/* f112048: 27bd0018 */ addiu $sp,$sp,0x18
|
||||
/* f11204c: 03e00008 */ jr $ra
|
||||
/* f112050: 00000000 */ sll $zero,$zero,0x0
|
||||
);
|
||||
bool currentPlayerGiveProp(struct prop *prop)
|
||||
{
|
||||
struct invitem *item;
|
||||
|
||||
// Don't add duplicate night vision to inventory
|
||||
// (night vision is already there when using perfect darkness)
|
||||
// Note that this check doesn't work on Investigation because it uses the
|
||||
// IR specs model. See bug note in Investigation's setup file (setupear.c).
|
||||
if (cheatIsActive(CHEAT_PERFECTDARKNESS)
|
||||
&& prop->type == PROPTYPE_OBJ
|
||||
&& prop->obj
|
||||
&& prop->obj->obj == MODEL_CHRNIGHTSIGHT) {
|
||||
return true;
|
||||
}
|
||||
|
||||
item = currentPlayerCreateInvitem();
|
||||
|
||||
if (item) {
|
||||
item->type = INVITEMTYPE_PROP;
|
||||
item->type_prop.prop = prop;
|
||||
func0f11179c(item);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel func0f112054
|
||||
|
||||
@@ -517,6 +517,10 @@
|
||||
#define INVENTORYFUNCTYPE_SPECIAL 0x0004
|
||||
#define INVENTORYFUNCTYPE_VISUAL 0x0005
|
||||
|
||||
#define INVITEMTYPE_1 1
|
||||
#define INVITEMTYPE_PROP 2
|
||||
#define INVITEMTYPE_3 3
|
||||
|
||||
// These actions are assigned to chr->myaction
|
||||
#define MA_NONE 0
|
||||
#define MA_NORMAL 1
|
||||
|
||||
@@ -7,7 +7,7 @@ void func0f111600(void);
|
||||
u32 func0f11165c(void);
|
||||
void func0f11179c(struct invitem *item);
|
||||
u32 func0f1118cc(void);
|
||||
struct invitem *func0f111928(void);
|
||||
struct invitem *currentPlayerCreateInvitem(void);
|
||||
void currentPlayerSetAllGuns(bool enable);
|
||||
u32 func0f1119d0(void);
|
||||
bool func0f111a28(s32 weaponnum);
|
||||
@@ -22,7 +22,7 @@ bool func0f111cf8(s32 weapon1, s32 weapon2);
|
||||
bool currentPlayerGiveWeapon(s32 weaponnum);
|
||||
bool currentPlayerGiveWeaponWithArgument(s32 weapon1, s32 weapon2);
|
||||
void func0f111ea4(u32 arg0);
|
||||
u32 func0f111fcc(void);
|
||||
bool currentPlayerGiveProp(struct prop *prop);
|
||||
u32 func0f112054(void);
|
||||
u32 func0f1120f0(void);
|
||||
u32 func0f1122ec(void);
|
||||
|
||||
@@ -5072,6 +5072,10 @@ struct invitem_type1 {
|
||||
s16 weapon2;
|
||||
};
|
||||
|
||||
struct invitem_typeprop {
|
||||
struct prop *prop;
|
||||
};
|
||||
|
||||
struct invitem_type3 {
|
||||
s32 weapon1;
|
||||
s32 weapon2;
|
||||
@@ -5082,6 +5086,7 @@ struct invitem {
|
||||
|
||||
union {
|
||||
struct invitem_type1 type1;
|
||||
struct invitem_typeprop type_prop;
|
||||
struct invitem_type3 type3;
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user