Attempt to decompile frExecuteWeaponScript

This commit is contained in:
Ryan Dwyer 2020-08-08 16:17:46 +10:00
parent 9703a51c5d
commit 74630d5af4
4 changed files with 237 additions and 80 deletions

View File

@ -46,10 +46,14 @@
#include "lib/lib_4a360.h"
#include "types.h"
#define FRSCRIPTINDEX_WEAPONS 0x00
#define FRSCRIPTINDEX_TARGETS 0x22
#define FRSCRIPTINDEX_MAINS 0x71
extern u8 *_frdataSegmentRomStart;
extern u8 *_frdataSegmentRomEnd;
u16 *g_FrOffsets = NULL;
u16 *g_FrScriptOffsets = NULL;
u8 g_FrIsValidWeapon = false;
u8 var80088808 = 0;
u8 g_FrNumSounds = 0;
@ -244,7 +248,7 @@ u32 frGetWeaponIndexByWeapon(u32 weaponnum)
return 0;
}
u32 func0f19cdf0(u32 weaponnum)
u32 frGetWeaponScriptIndex(u32 weaponnum)
{
switch (weaponnum) {
case WEAPON_FALCON2: return 1;
@ -413,12 +417,12 @@ void func0f19d4ec(void)
{
s32 i;
g_FrOffsets = NULL;
g_FrScriptOffsets = NULL;
var80088808 = 0;
g_FrIsValidWeapon = false;
g_FrRomData = NULL;
g_FiringRangeData.unk466 = 0;
g_FiringRangeData.mainscriptindex = 0;
g_FiringRangeData.scriptoffset = 0;
g_FiringRangeData.scriptenabled = false;
g_FiringRangeData.scriptsleep = 0;
@ -478,7 +482,7 @@ void frInitDefaults(void)
g_FiringRangeData.sdgrenadelimit = 255;
g_FiringRangeData.goalaccuracy = 0;
g_FiringRangeData.goaltargets = 255;
g_FiringRangeData.unk00c = 1;
g_FiringRangeData.speed = 1;
for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) {
g_FiringRangeData.targets[i].unk08.x = pad.pos.x;
@ -512,7 +516,7 @@ void frInitDefaults(void)
g_FiringRangeData.timetaken = -240;
g_FiringRangeData.score = 0;
g_FiringRangeData.unk454 = 0;
g_FiringRangeData.curtarget = 0;
g_FiringRangeData.targetsdestroyed = 0;
g_FiringRangeData.unk464 = 0;
g_FiringRangeData.unk470 = 0;
@ -524,14 +528,14 @@ void frInitDefaults(void)
g_FiringRangeData.numhitsring2 = 0;
g_FiringRangeData.numhitsring1 = 0;
g_FiringRangeData.numhitsbullseye = 0;
g_FiringRangeData.unk466 = 0;
g_FiringRangeData.mainscriptindex = 0;
g_FiringRangeData.scriptoffset = 0;
g_FiringRangeData.scriptenabled = false;
g_FiringRangeData.scriptsleep = 0;
g_FiringRangeData.proxyendtimer = 0;
g_FiringRangeData.unk465_04 = false;
g_FiringRangeData.ammohasgrace = true;
g_FiringRangeData.unk476 = -1;
g_FiringRangeData.ammoextra = -1;
}
struct frdata *getFiringRangeData(void)
@ -551,18 +555,18 @@ u32 frResolveFrPad(u32 arg0)
return g_FiringRangeData.unk470 + arg0;
}
bool frIsDifficulty(u32 difficulties)
bool frIsDifficulty(u32 flags)
{
if (g_FiringRangeData.difficulty == FRDIFFICULTY_BRONZE) {
if ((difficulties & FRDIFFBIT_BRONZE) == 0) {
if ((flags & FRTARGETFLAG_BRONZE) == 0) {
return false;
}
} else if (g_FiringRangeData.difficulty == FRDIFFICULTY_SILVER) {
if ((difficulties & FRDIFFBIT_SILVER) == 0) {
if ((flags & FRTARGETFLAG_SILVER) == 0) {
return false;
}
} else if (g_FiringRangeData.difficulty == FRDIFFICULTY_GOLD) {
if ((difficulties & FRDIFFBIT_GOLD) == 0) {
if ((flags & FRTARGETFLAG_GOLD) == 0) {
return false;
}
}
@ -571,32 +575,32 @@ bool frIsDifficulty(u32 difficulties)
}
GLOBAL_ASM(
glabel func0f19d90c
glabel frExecuteWeaponScript
.late_rodata
glabel var7f1b93bc
.word func0f19d90c+0xc4 # f19d9d0
.word frExecuteWeaponScript+0xc4 # f19d9d0
glabel var7f1b93c0
.word func0f19d90c+0x1f4 # f19db00
.word frExecuteWeaponScript+0x1f4 # f19db00
glabel var7f1b93c4
.word func0f19d90c+0x24c # f19db58
.word frExecuteWeaponScript+0x24c # f19db58
glabel var7f1b93c8
.word func0f19d90c+0x278 # f19db84
.word frExecuteWeaponScript+0x278 # f19db84
glabel var7f1b93cc
.word func0f19d90c+0x2ac # f19dbb8
.word frExecuteWeaponScript+0x2ac # f19dbb8
glabel var7f1b93d0
.word func0f19d90c+0x360 # f19dc6c
.word frExecuteWeaponScript+0x360 # f19dc6c
glabel var7f1b93d4
.word func0f19d90c+0x3b8 # f19dcc4
.word frExecuteWeaponScript+0x3b8 # f19dcc4
glabel var7f1b93d8
.word func0f19d90c+0x3dc # f19dce8
.word frExecuteWeaponScript+0x3dc # f19dce8
glabel var7f1b93dc
.word func0f19d90c+0x400 # f19dd0c
.word frExecuteWeaponScript+0x400 # f19dd0c
glabel var7f1b93e0
.word func0f19d90c+0x310 # f19dc1c
.word frExecuteWeaponScript+0x310 # f19dc1c
glabel var7f1b93e4
.word func0f19d90c+0xac # f19d9b8
.word frExecuteWeaponScript+0xac # f19d9b8
glabel var7f1b93e8
.word func0f19d90c+0x218 # f19db24
.word frExecuteWeaponScript+0x218 # f19db24
glabel var7f1b93ec
.word 0x3dcccccd
.text
@ -615,8 +619,8 @@ glabel var7f1b93ec
/* f19d93c: 00009025 */ or $s2,$zero,$zero
/* f19d940: 28810022 */ slti $at,$a0,0x22
/* f19d944: 1020012b */ beqz $at,.L0f19ddf4
/* f19d948: 3c0e8009 */ lui $t6,%hi(g_FrOffsets)
/* f19d94c: 8dce8800 */ lw $t6,%lo(g_FrOffsets)($t6)
/* f19d948: 3c0e8009 */ lui $t6,%hi(g_FrScriptOffsets)
/* f19d94c: 8dce8800 */ lw $t6,%lo(g_FrScriptOffsets)($t6)
/* f19d950: 00047840 */ sll $t7,$a0,0x1
/* f19d954: 3c088009 */ lui $t0,%hi(g_FrRomData)
/* f19d958: 01cfc021 */ addu $t8,$t6,$t7
@ -870,9 +874,9 @@ glabel var7f1b93ec
/* f19dd08: 92220000 */ lbu $v0,0x0($s1)
/* f19dd0c: 922d0001 */ lbu $t5,0x1($s1)
/* f19dd10: a21e0468 */ sb $s8,0x468($s0)
/* f19dd14: 3c0e8009 */ lui $t6,%hi(g_FrOffsets)
/* f19dd14: 3c0e8009 */ lui $t6,%hi(g_FrScriptOffsets)
/* f19dd18: a20d0466 */ sb $t5,0x466($s0)
/* f19dd1c: 8dce8800 */ lw $t6,%lo(g_FrOffsets)($t6)
/* f19dd1c: 8dce8800 */ lw $t6,%lo(g_FrScriptOffsets)($t6)
/* f19dd20: 31a300ff */ andi $v1,$t5,0xff
/* f19dd24: 24630071 */ addiu $v1,$v1,0x71
/* f19dd28: 0003c040 */ sll $t8,$v1,0x1
@ -950,6 +954,147 @@ glabel var7f1b93ec
/* f19de20: 27bd0068 */ addiu $sp,$sp,0x68
);
// Mismatch around d7c
//void frExecuteWeaponScript(s32 scriptindex)
//{
// s32 offset = 0;
//
// if (scriptindex >= FRSCRIPTINDEX_WEAPONS && scriptindex < FRSCRIPTINDEX_TARGETS) {
// u8 *script = &g_FrRomData[g_FrScriptOffsets[scriptindex]];
// s32 mult = 1;
// s32 end;
// s32 capacity;
// s32 index;
// u8 *subscript;
//
// while (script[offset] != FRCMD_END) {
// switch (script[offset]) {
// case FRCMD_0A: // f19d9b8
// g_FiringRangeData.unk470 = script[offset + 1];
// offset += 2;
// break;
// case FRCMD_SETUPTARGET: // f19d9d0
// if (!frIsDifficulty(script[offset + 4])) {
// offset += 5;
// break;
// }
// if (g_FiringRangeData.curtarget < ARRAYCOUNT(g_FiringRangeData.targets)) {
// g_FiringRangeData.targets[g_FiringRangeData.curtarget].frpadindex = frResolveFrPad(script[offset + 1]);
// g_FiringRangeData.targets[g_FiringRangeData.curtarget].scriptindex = script[offset + 2];
// g_FiringRangeData.targets[g_FiringRangeData.curtarget].maxdamage = script[offset + 3];
// g_FiringRangeData.targets[g_FiringRangeData.curtarget].unk00_01 = true;
// g_FiringRangeData.targets[g_FiringRangeData.curtarget].flags = script[offset + 4];
//
// if (g_FiringRangeData.targets[g_FiringRangeData.curtarget].flags & FRTARGETFLAG_08) {
// g_FiringRangeData.targets[g_FiringRangeData.curtarget].unk00_06 = true;
// }
//
// if (g_FiringRangeData.targets[g_FiringRangeData.curtarget].flags & FRTARGETFLAG_20) {
// g_FiringRangeData.targets[g_FiringRangeData.curtarget].maxdamage = 1;
// }
//
// g_FiringRangeData.curtarget++;
// }
// offset += 5;
// break;
// case FRCMD_SETNUMTARGETS: // f19db00
// g_FiringRangeData.numtargets = script[offset + 1 + g_FiringRangeData.difficulty];
// offset += 4;
// break;
// case FRCMD_SETSCOREMULTIPLIER: // f19db24
// if (script[offset + 1 + g_FiringRangeData.difficulty] > 0) {
// mult = script[offset + 1 + g_FiringRangeData.difficulty];
// } else {
// mult = 1;
// }
// offset += 4;
// break;
// case FRCMD_SETGOALSCORE: // f19db58
// g_FiringRangeData.goalscore = script[offset + 1 + g_FiringRangeData.difficulty] * mult;
// offset += 4;
// break;
// case FRCMD_SETTIMELIMIT: // f19db84
// g_FiringRangeData.timelimit = script[offset + 1 + g_FiringRangeData.difficulty];
// if (g_FiringRangeData.timelimit == 255) {
// g_FiringRangeData.timelimit = 120;
// }
// offset += 4;
// break;
// case FRCMD_SETAMMOLIMIT: // f19dbb8
// capacity = ammotypeGetMaxCapacity(weaponGetAmmoType(frGetWeaponBySlot(g_FiringRangeData.slot), 0));
// g_FiringRangeData.ammolimit = script[offset + 1 + g_FiringRangeData.difficulty];
//
// if (g_FiringRangeData.ammolimit != 255) {
// if (g_FiringRangeData.ammolimit > capacity) {
// g_FiringRangeData.ammoextra = g_FiringRangeData.ammolimit - capacity;
// } else {
// g_FiringRangeData.ammoextra = 0;
// }
// }
//
// offset += 4;
// break;
// case FRCMD_SETGRENADELIMIT: // f19dc1c
// capacity = ammotypeGetMaxCapacity(AMMOTYPE_DEVASTATOR);
// g_FiringRangeData.sdgrenadelimit = script[offset + 1 + g_FiringRangeData.difficulty];
//
// if (g_FiringRangeData.sdgrenadelimit != 255) {
// if (g_FiringRangeData.sdgrenadelimit > capacity) {
// g_FiringRangeData.sdgrenadeextra = g_FiringRangeData.sdgrenadelimit - capacity;
// } else {
// g_FiringRangeData.sdgrenadeextra = 0;
// }
// }
//
// offset += 4;
// break;
// case FRCMD_SETEXTRASPEED: // f19dc6c
// g_FiringRangeData.speed = script[offset + 1 + g_FiringRangeData.difficulty] * 0.1f + 1.0f;
// offset += 4;
// break;
// case FRCMD_SETGOALACCURACY: // f19dcc4
// g_FiringRangeData.goalaccuracy = script[offset + 1 + g_FiringRangeData.difficulty];
// offset += 4;
// break;
// case FRCMD_SETGOALTARGETS: // f19dce8
// g_FiringRangeData.goaltargets = script[offset + 1 + g_FiringRangeData.difficulty];
// offset += 4;
// break;
// case FRCMD_SETMAINSCRIPT: // f19dd0c
// g_FiringRangeData.mainscriptindex = script[offset + 1];
// g_FiringRangeData.scriptenabled = true;
// index = FRSCRIPTINDEX_MAINS + g_FiringRangeData.mainscriptindex;
// subscript = &g_FrRomData[g_FrScriptOffsets[index]];
// offset += 2;
//
// // d48
// if (g_FiringRangeData.difficulty == FRDIFFICULTY_BRONZE) {
// end = FRCMD_ENDIFBRONZE;
// } else /*d58*/ if (g_FiringRangeData.difficulty == FRDIFFICULTY_SILVER) {
// end = FRCMD_ENDIFSILVER;
// } else /*d6c*/ if (g_FiringRangeData.difficulty == FRDIFFICULTY_GOLD) {
// end = FRCMD_ENDIFGOLD;
// }
//
// // d7c
// g_FiringRangeData.scriptoffset = 0;
//
// while (subscript[g_FiringRangeData.scriptoffset++] != end);
//
// if (subscript[g_FiringRangeData.scriptoffset] >= FRCMD_ENDIFBRONZE) {
// g_FiringRangeData.scriptoffset++;
// }
//
// if (subscript[g_FiringRangeData.scriptoffset] >= FRCMD_ENDIFBRONZE) {
// g_FiringRangeData.scriptoffset++;
// }
//
// break;
// }
// }
// }
//}
void func0f19de24(void)
{
s32 i;
@ -1000,15 +1145,15 @@ void frExecuteMainScript(void)
}
if (g_FiringRangeData.scriptsleep == 0) {
s32 index = g_FiringRangeData.unk466 + 0x71;
u8 *script = &g_FrRomData[g_FrOffsets[index]];
s32 index = FRSCRIPTINDEX_MAINS + g_FiringRangeData.mainscriptindex;
u8 *script = &g_FrRomData[g_FrScriptOffsets[index]];
u32 offset = g_FiringRangeData.scriptoffset;
switch (script[offset]) {
case FRCMD_13:
case FRCMD_FB:
case FRCMD_FC:
case FRCMD_FD:
case FRCMD_END:
case FRCMD_ENDIFBRONZE:
case FRCMD_ENDIFSILVER:
case FRCMD_ENDIFGOLD:
g_FiringRangeData.scriptenabled = false;
break;
case FRCMD_HUDMSG:
@ -1069,7 +1214,7 @@ glabel var7f1b941c
/* f19e0a0: 27bdff30 */ addiu $sp,$sp,-208
/* f19e0a4: afbf0044 */ sw $ra,0x44($sp)
/* f19e0a8: afa400d0 */ sw $a0,0xd0($sp)
/* f19e0ac: 3c0a8009 */ lui $t2,%hi(g_FrOffsets)
/* f19e0ac: 3c0a8009 */ lui $t2,%hi(g_FrScriptOffsets)
/* f19e0b0: 3c0e8009 */ lui $t6,%hi(g_FrRomData)
/* f19e0b4: 00007812 */ mflo $t7
/* f19e0b8: 01f81821 */ addu $v1,$t7,$t8
@ -1078,7 +1223,7 @@ glabel var7f1b941c
/* f19e0c4: 532000c2 */ beqzl $t9,.L0f19e3d0
/* f19e0c8: 24020001 */ addiu $v0,$zero,0x1
/* f19e0cc: 90620012 */ lbu $v0,0x12($v1)
/* f19e0d0: 8d4a8800 */ lw $t2,%lo(g_FrOffsets)($t2)
/* f19e0d0: 8d4a8800 */ lw $t2,%lo(g_FrScriptOffsets)($t2)
/* f19e0d4: 8dce8810 */ lw $t6,%lo(g_FrRomData)($t6)
/* f19e0d8: 24420022 */ addiu $v0,$v0,0x22
/* f19e0dc: 00025840 */ sll $t3,$v0,0x1
@ -1289,18 +1434,18 @@ glabel var7f1b941c
//bool frExecuteTargetScript(s32 targetnum)
//{
// if (g_FiringRangeData.targets[targetnum].unk00_01) {
// s32 index = g_FiringRangeData.targets[targetnum].unk02 + 0x22;
// u8 *script = &g_FrRomData[g_FrOffsets[index]];
// s32 index = FRSCRIPTINDEX_TARGETS + g_FiringRangeData.targets[targetnum].scriptindex;
// u8 *script = &g_FrRomData[g_FrScriptOffsets[index]];
// u32 offset = g_FiringRangeData.targets[targetnum].scriptoffset;
// struct pad pad;
// s32 frpadnum;
//
// switch (script[offset]) {
// case FRCMD_13:
// case FRCMD_END:
// g_FiringRangeData.targets[targetnum].unk00_04 = true;
// g_FiringRangeData.targets[targetnum].unk14 = 255 * 60;
// return true;
// case FRCMD_0C:
// case FRCMD_GOTOPAD:
// frpadnum = frResolveFrPad(script[offset + 1]);
//
// if (frpadnum == g_FiringRangeData.targets[targetnum].frpadnum) {
@ -1327,7 +1472,7 @@ glabel var7f1b941c
// -1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1);
// }
//
// g_FiringRangeData.targets[targetnum].unk1c = (script[offset + 2] / 60.0f) * g_FiringRangeData.unk00c;
// g_FiringRangeData.targets[targetnum].unk1c = (script[offset + 2] / 60.0f) * g_FiringRangeData.speed;
// g_FiringRangeData.targets[targetnum].unk33 = 1;
// }
//
@ -1547,8 +1692,8 @@ glabel func0f19e7a8
/* f19e854: afa70020 */ sw $a3,0x20($sp)
/* f19e858: 0c0048f2 */ jal malloc
/* f19e85c: afa9002c */ sw $t1,0x2c($sp)
/* f19e860: 3c048009 */ lui $a0,%hi(g_FrOffsets)
/* f19e864: 24848800 */ addiu $a0,$a0,%lo(g_FrOffsets)
/* f19e860: 3c048009 */ lui $a0,%hi(g_FrScriptOffsets)
/* f19e864: 24848800 */ addiu $a0,$a0,%lo(g_FrScriptOffsets)
/* f19e868: ac820000 */ sw $v0,0x0($a0)
/* f19e86c: 8fa60028 */ lw $a2,0x28($sp)
/* f19e870: 240800fe */ addiu $t0,$zero,0xfe
@ -1618,14 +1763,14 @@ glabel func0f19e7a8
// }
//
// // 83c
// g_FrOffsets = malloc(ALIGN16(count * 2), 4);
// g_FrScriptOffsets = malloc(ALIGN16(count * 2), 4);
//
// // 860
// if (g_FrOffsets) {
// if (g_FrScriptOffsets) {
// if (len > 0x12) {
// for (j = 0x12; j != len; j++) {
// if (g_FrRomData[j] == 0xfe) {
// g_FrOffsets[index++] = j + 1;
// g_FrScriptOffsets[index++] = j + 1;
// }
// }
// }
@ -1642,13 +1787,13 @@ glabel func0f19e7a8
u32 frInitAmmo(s32 weaponnum)
{
u32 weaponindex;
u32 scriptindex;
u32 ammotype = weaponGetAmmoType(weaponnum, 0);
u32 capacity = ammotypeGetMaxCapacity(ammotype);
frInitDefaults();
weaponindex = func0f19cdf0(weaponnum);
func0f19d90c(weaponindex);
scriptindex = frGetWeaponScriptIndex(weaponnum);
frExecuteWeaponScript(scriptindex);
if (g_FiringRangeData.ammolimit == 255) {
currentPlayerSetAmmoQuantity(ammotype, capacity);
@ -1664,7 +1809,7 @@ u32 frInitAmmo(s32 weaponnum)
}
}
return weaponindex;
return scriptindex;
}
void frBeginSession(s32 weapon)
@ -3589,7 +3734,7 @@ void frCalculateHit(struct defaultobj *obj, struct coord *hitpos, f32 maulerchar
f32 dist = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff);
if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_20) {
g_FiringRangeData.targets[i].damage = g_FiringRangeData.targets[i].unk01;
g_FiringRangeData.targets[i].damage = g_FiringRangeData.targets[i].maxdamage;
} else if (frGetWeaponBySlot(g_FiringRangeData.slot) == WEAPON_MAULER) {
g_FiringRangeData.targets[i].damage += (f32)((s32)(maulercharge * 0.1f) + 1);
} else if ((g_FiringRangeData.targets[i].flags & FRTARGETFLAG_80) == 0

View File

@ -581,21 +581,29 @@
#define FLOORTYPE_DIRT 7
#define FLOORTYPE_SNOW 8
#define FRCMD_0C 0x0c
#define FRCMD_RESTART 0x0d
#define FRCMD_0E 0x0e
#define FRCMD_ROTATE 0x0f
#define FRCMD_HUDMSG 0x10
#define FRCMD_WAITUNTILSHOOT 0x11
#define FRCMD_WAITSECONDS 0x12
#define FRCMD_13 0x13
#define FRCMD_FB 0xfb
#define FRCMD_FC 0xfc
#define FRCMD_FD 0xfd
#define FRDIFFBIT_BRONZE 1
#define FRDIFFBIT_SILVER 2
#define FRDIFFBIT_GOLD 4
#define FRCMD_SETUPTARGET 0x00
#define FRCMD_SETNUMTARGETS 0x01
#define FRCMD_SETGOALSCORE 0x02
#define FRCMD_SETTIMELIMIT 0x03
#define FRCMD_SETAMMOLIMIT 0x04
#define FRCMD_SETEXTRASPEED 0x05
#define FRCMD_SETGOALACCURACY 0x06
#define FRCMD_SETGOALTARGETS 0x07
#define FRCMD_SETMAINSCRIPT 0x08
#define FRCMD_SETGRENADELIMIT 0x09
#define FRCMD_0A 0x0a
#define FRCMD_SETSCOREMULTIPLIER 0x0b
#define FRCMD_GOTOPAD 0x0c
#define FRCMD_RESTART 0x0d
#define FRCMD_0E 0x0e
#define FRCMD_ROTATE 0x0f
#define FRCMD_HUDMSG 0x10
#define FRCMD_WAITUNTILSHOOT 0x11
#define FRCMD_WAITSECONDS 0x12
#define FRCMD_END 0x13
#define FRCMD_ENDIFBRONZE 0xfb
#define FRCMD_ENDIFSILVER 0xfc
#define FRCMD_ENDIFGOLD 0xfd
#define FRDIFFICULTY_BRONZE 0
#define FRDIFFICULTY_SILVER 1
@ -607,10 +615,14 @@
#define FRFAILREASON_SCOREUNATTAINABLE 3
#define FRFAILREASON_INACCURATE 4
#define FRTARGETFLAG_10 0x10
#define FRTARGETFLAG_20 0x20
#define FRTARGETFLAG_40 0x40
#define FRTARGETFLAG_80 0x80
#define FRTARGETFLAG_BRONZE 0x01
#define FRTARGETFLAG_SILVER 0x02
#define FRTARGETFLAG_GOLD 0x04
#define FRTARGETFLAG_08 0x08
#define FRTARGETFLAG_10 0x10
#define FRTARGETFLAG_20 0x20
#define FRTARGETFLAG_40 0x40
#define FRTARGETFLAG_80 0x80
#define FRZONE_RING3 1
#define FRZONE_RING2 2

View File

@ -16,7 +16,7 @@ s32 stageIsComplete(s32 stageindex);
bool func0f19cbcc(s32 weapon);
bool frWeaponIsAvailable(s32 weapon);
u32 frGetWeaponIndexByWeapon(u32 weaponnum);
u32 func0f19cdf0(u32 weaponnum);
u32 frGetWeaponScriptIndex(u32 weaponnum);
s32 frIsClassicWeaponUnlocked(u32 weapon);
s32 frGetSlot(void);
void frSetSlot(s32 slot);
@ -32,7 +32,7 @@ void frInitDefaults(void);
struct frdata *getFiringRangeData(void);
u32 frResolveFrPad(u32 arg0);
bool frIsDifficulty(u32 difficulties);
void func0f19d90c(u32 weaponindex);
void frExecuteWeaponScript(s32 scriptindex);
void func0f19de24(void);
bool frTargetIsAtScriptStart(s32 targetnum);
char *frGetInstructionalText(u32 index);

View File

@ -5298,8 +5298,8 @@ struct frtarget {
/*0x00*/ u8 unk00_05 : 1;
/*0x00*/ u8 unk00_06 : 1;
/*0x00*/ u8 frpadindex : 2;
/*0x01*/ u8 unk01;
/*0x02*/ u8 unk02;
/*0x01*/ u8 maxdamage;
/*0x02*/ u8 scriptindex;
/*0x04*/ struct prop *prop;
/*0x08*/ struct coord unk08;
/*0x14*/ s32 unk14; // scriptsleep?
@ -5327,12 +5327,12 @@ struct frdata {
/*0x006*/ u8 ammolimit;
/*0x007*/ u8 sdgrenadelimit;
/*0x008*/ u8 goalaccuracy;
/*0x00c*/ f32 unk00c;
/*0x00c*/ f32 speed;
/*0x010*/ struct frtarget targets[18];
/*0x448*/ u8 difficulty;
/*0x44c*/ s32 timetaken;
/*0x450*/ u32 score;
/*0x454*/ u8 unk454;
/*0x454*/ u8 curtarget;
/*0x455*/ u8 targetsdestroyed;
/*0x456*/ u16 slot;
/*0x458*/ u16 numshots;
@ -5348,7 +5348,7 @@ struct frdata {
/*0x465*/ u8 unk465_04 : 1;
/*0x465*/ u8 ammohasgrace : 1;
/*0x465*/ u8 unk465_06 : 2;
/*0x466*/ u8 unk466;
/*0x466*/ u8 mainscriptindex;
/*0x467*/ u8 scriptoffset;
/*0x468*/ u8 scriptenabled;
/*0x46c*/ s32 scriptsleep;
@ -5356,8 +5356,8 @@ struct frdata {
/*0x471*/ u8 feedbackzone;
/*0x472*/ s8 feedbackttl;
/*0x474*/ s16 proxyendtimer;
/*0x476*/ s16 unk476;
/*0x478*/ u32 unk478;
/*0x476*/ s16 ammoextra;
/*0x478*/ u16 sdgrenadeextra;
/*0x47c*/ u32 unk47c;
};