diff --git a/src/game/chr/chraicommands.c b/src/game/chr/chraicommands.c index 8f1f2d314..94031b6bc 100644 --- a/src/game/chr/chraicommands.c +++ b/src/game/chr/chraicommands.c @@ -4563,8 +4563,8 @@ bool aiDuplicateChr(void) if (srcweapon1 && srcweapon0 && cloneweapon1 && cloneweapon0 - && srcweapon0 == srcweapon1->dual && srcweapon1 == srcweapon0->dual) { - func0f08adac(cloneweapon1, cloneweapon0); + && srcweapon0 == srcweapon1->dualweapon && srcweapon1 == srcweapon0->dualweapon) { + propweaponSetDual(cloneweapon1, cloneweapon0); } if (chr->weapons_held[2]) { diff --git a/src/game/game_00c490.c b/src/game/game_00c490.c index f087f0595..1238c277f 100644 --- a/src/game/game_00c490.c +++ b/src/game/game_00c490.c @@ -4886,7 +4886,7 @@ glabel var7f1a8224 /* f010504: 904e0003 */ lbu $t6,0x3($v0) /* f010508: 16ce00d1 */ bne $s6,$t6,.L0f010850 /* f01050c: 00000000 */ sll $zero,$zero,0x0 -/* f010510: 0fc22b6b */ jal func0f08adac +/* f010510: 0fc22b6b */ jal propweaponSetDual /* f010514: 02002025 */ or $a0,$s0,$zero /* f010518: 100000cd */ beqz $zero,.L0f010850 /* f01051c: 00000000 */ sll $zero,$zero,0x0 diff --git a/src/game/propobj.c b/src/game/propobj.c index b08755303..06e07e612 100644 --- a/src/game/propobj.c +++ b/src/game/propobj.c @@ -41819,16 +41819,13 @@ glabel func0f08acb0 /* f08ada8: 27bd0058 */ addiu $sp,$sp,0x58 ); -GLOBAL_ASM( -glabel func0f08adac -/* f08adac: 90ae005c */ lbu $t6,0x5c($a1) -/* f08adb0: 908f005c */ lbu $t7,0x5c($a0) -/* f08adb4: ac850064 */ sw $a1,0x64($a0) -/* f08adb8: a08e0061 */ sb $t6,0x61($a0) -/* f08adbc: aca40064 */ sw $a0,0x64($a1) -/* f08adc0: 03e00008 */ jr $ra -/* f08adc4: a0af0061 */ sb $t7,0x61($a1) -); +void propweaponSetDual(struct weaponobj *weapon1, struct weaponobj *weapon2) +{ + weapon1->dualweaponnum = weapon2->weapon_id; + weapon1->dualweapon = weapon2; + weapon2->dualweaponnum = weapon1->weapon_id; + weapon2->dualweapon = weapon1; +} GLOBAL_ASM( glabel func0f08adc8 @@ -41992,7 +41989,7 @@ glabel func0f08ae54 /* f08affc: 50400006 */ beqzl $v0,.L0f08b018 /* f08b000: 8cc40014 */ lw $a0,0x14($a2) /* f08b004: 8c450004 */ lw $a1,0x4($v0) -/* f08b008: 0fc22b6b */ jal func0f08adac +/* f08b008: 0fc22b6b */ jal propweaponSetDual /* f08b00c: afa60040 */ sw $a2,0x40($sp) /* f08b010: 8fa60040 */ lw $a2,0x40($sp) .L0f08b014: @@ -42048,7 +42045,7 @@ glabel func0f08ae54 /* f08b0c8: 5040ffd3 */ beqzl $v0,.L0f08b018 /* f08b0cc: 8cc40014 */ lw $a0,0x14($a2) /* f08b0d0: 8c450004 */ lw $a1,0x4($v0) -/* f08b0d4: 0fc22b6b */ jal func0f08adac +/* f08b0d4: 0fc22b6b */ jal propweaponSetDual /* f08b0d8: afa60040 */ sw $a2,0x40($sp) /* f08b0dc: 1000ffcd */ beqz $zero,.L0f08b014 /* f08b0e0: 8fa60040 */ lw $a2,0x40($sp) diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index 566622173..e47e78907 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -265,7 +265,7 @@ u32 func0f08ab64(void); u32 func0f08ab9c(void); u32 func0f08abd4(void); u32 func0f08acb0(void); -void func0f08adac(struct weaponobj *weapon1, struct weaponobj *weapon2); +void propweaponSetDual(struct weaponobj *weapon1, struct weaponobj *weapon2); u32 func0f08adc8(void); u32 func0f08ae0c(void); u32 func0f08ae54(struct defaultobj *obj, struct chrdata *chr); diff --git a/src/include/types.h b/src/include/types.h index 7be8cfb0e..0c2b1af41 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -919,9 +919,10 @@ struct weaponobj { // objtype 0x08 /*0x5d*/ s8 unk5d; /*0x5e*/ s8 unk5e; /*0x5f*/ u8 dragonthrown; - /*0x60*/ s16 unk60; + /*0x60*/ s8 unk60; + /*0x61*/ s8 dualweaponnum; /*0x62*/ s16 team; - /*0x64*/ struct weaponobj *dual; // other weapon when dual wielding + /*0x64*/ struct weaponobj *dualweapon; // other weapon when dual wielding }; struct singlemonitorobj { // objtype 0x0a