Decompile firingrange ROM segment

This commit is contained in:
Ryan Dwyer 2020-08-08 19:15:39 +10:00
parent 74630d5af4
commit 86307c5053
17 changed files with 2010 additions and 60 deletions

File diff suppressed because one or more lines are too long

View File

@ -2014,6 +2014,7 @@ f0068491f441172310f2b6868c03739d build/jap-final/files/bgdata/bg_wax_padsZ
ea5a2ff4e5e0a68822f62feff2c40af4 build/jap-final/files/bgdata/bg_wax_tilesZ
d41d8cd98f00b204e9800998ecf8427e build/jap-final/files/ob/ob_mid.seg
39ef58f5babf5d619bec8b2629c26bc8 build/jap-final/ucode/boot.bin
333e8b4f6fe9dc9b59cf3e61b4e0c224 build/jap-final/ucode/firingrange.bin
bd6e5fc360d5e0c35ea3605e2514f205 build/jap-final/ucode/game.bin
22d5e92bffcc67b222cf3697e96106f6 build/jap-final/ucode/gamedata.bin
843285fdc0e80a77576eeb73940d2fd3 build/jap-final/ucode/inflate.bin

View File

@ -2012,6 +2012,7 @@ f0068491f441172310f2b6868c03739d build/ntsc-1.0/files/bgdata/bg_wax_padsZ
ea5a2ff4e5e0a68822f62feff2c40af4 build/ntsc-1.0/files/bgdata/bg_wax_tilesZ
d41d8cd98f00b204e9800998ecf8427e build/ntsc-1.0/files/ob/ob_mid.seg
402561223a33f48461e302e1cca12129 build/ntsc-1.0/ucode/boot.bin
cb373c94109322d081a57b142fdd9999 build/ntsc-1.0/ucode/firingrange.bin
5181a0d11cf8f24370a3f2d3b29e522e build/ntsc-1.0/ucode/game.bin
b21679a1b2dabd721bc4afee11bf5266 build/ntsc-1.0/ucode/gamedata.bin
843285fdc0e80a77576eeb73940d2fd3 build/ntsc-1.0/ucode/inflate.bin

View File

@ -2011,6 +2011,7 @@ c6f0dd6193685637763d426dfce837fb build/ntsc-beta/files/bgdata/bg_wax_padsZ
ea5a2ff4e5e0a68822f62feff2c40af4 build/ntsc-beta/files/bgdata/bg_wax_tilesZ
d41d8cd98f00b204e9800998ecf8427e build/ntsc-beta/files/ob/ob_mid.seg
74cb41628ed5784a8ad48c6398b0ce83 build/ntsc-beta/ucode/boot.bin
a12b5437510403bb09b3cceb45dd2a10 build/ntsc-beta/ucode/firingrange.bin
daae19f7ce11d3f3e1f98d543ad856f5 build/ntsc-beta/ucode/game.bin
cab47b8c30b1be608c1c5c1db08342de build/ntsc-beta/ucode/gamedata.bin
d13f25c1c59fb96346ac23301ccd9d7d build/ntsc-beta/ucode/inflate.bin

View File

@ -2012,6 +2012,7 @@ f0068491f441172310f2b6868c03739d build/ntsc-final/files/bgdata/bg_wax_padsZ
ea5a2ff4e5e0a68822f62feff2c40af4 build/ntsc-final/files/bgdata/bg_wax_tilesZ
d41d8cd98f00b204e9800998ecf8427e build/ntsc-final/files/ob/ob_mid.seg
2a1aa1eff3cdfe5dc3e91a2e773a55b9 build/ntsc-final/ucode/boot.bin
cb373c94109322d081a57b142fdd9999 build/ntsc-final/ucode/firingrange.bin
ed0462324d1287de21611707172d316a build/ntsc-final/ucode/game.bin
11c9c4c2737f66e7312949909b894dcc build/ntsc-final/ucode/gamedata.bin
843285fdc0e80a77576eeb73940d2fd3 build/ntsc-final/ucode/inflate.bin

View File

@ -2012,6 +2012,7 @@ f0068491f441172310f2b6868c03739d build/pal-beta/files/bgdata/bg_wax_padsZ
ea5a2ff4e5e0a68822f62feff2c40af4 build/pal-beta/files/bgdata/bg_wax_tilesZ
d41d8cd98f00b204e9800998ecf8427e build/pal-beta/files/ob/ob_mid.seg
541e374b58a36056f73ad02a2bbb5f75 build/pal-beta/ucode/boot.bin
333e8b4f6fe9dc9b59cf3e61b4e0c224 build/pal-beta/ucode/firingrange.bin
ad5835b91b7e252ef8f4a421a44eb12b build/pal-beta/ucode/game.bin
bca5001a5dd0ef9aab24ba085f27eb40 build/pal-beta/ucode/gamedata.bin
843285fdc0e80a77576eeb73940d2fd3 build/pal-beta/ucode/inflate.bin

View File

@ -2012,6 +2012,7 @@ f0068491f441172310f2b6868c03739d build/pal-final/files/bgdata/bg_wax_padsZ
ea5a2ff4e5e0a68822f62feff2c40af4 build/pal-final/files/bgdata/bg_wax_tilesZ
d41d8cd98f00b204e9800998ecf8427e build/pal-final/files/ob/ob_mid.seg
7c4233976802db99f90c6c0fede1080b build/pal-final/ucode/boot.bin
333e8b4f6fe9dc9b59cf3e61b4e0c224 build/pal-final/ucode/firingrange.bin
4e506821044251aecc10ec332389c576 build/pal-final/ucode/game.bin
1c49c171e829a5407f0ae5fd28a123cd build/pal-final/ucode/gamedata.bin
843285fdc0e80a77576eeb73940d2fd3 build/pal-final/ucode/inflate.bin

View File

@ -78,8 +78,8 @@ SECTIONS
_checksum7f15c9ac = 0x2c7b42f8;
#endif
_frdataSegmentRomStart = 0x007e9d20;
_frdataSegmentRomEnd = 0x007eb270;
_firingrangeSegmentRomStart = 0x007e9d20;
_firingrangeSegmentRomEnd = 0x007eb270;
_antipiracyUncloakWriteAddress = 0x7002a324;
@ -126,6 +126,11 @@ SECTIONS
}
__rompos += SIZEOF(.mpconfigs);
.firingrange : AT(__rompos) {
build/ROMID/firingrange/firingrange.o (.data);
}
__rompos += SIZEOF(.firingrange);
MPSTRINGS(E)
MPSTRINGS(J)
MPSTRINGS(P)

File diff suppressed because it is too large Load Diff

View File

@ -837,7 +837,7 @@ char *frMenuTextTargetsDestroyedValue(struct menuitem *item)
char *frMenuTextAccuracyValue(struct menuitem *item)
{
struct frdata *frdata = getFiringRangeData();
f32 totalhits = (frdata->numhitstype4 + frdata->numhitstype1 + frdata->numhitstype2 + frdata->numhitstype3) * 100.0f;
f32 totalhits = (frdata->numhitsring3 + frdata->numhitsbullseye + frdata->numhitsring1 + frdata->numhitsring2) * 100.0f;
f32 accuracy = 0;
if (frdata->numshots) {

View File

@ -48,10 +48,10 @@
#define FRSCRIPTINDEX_WEAPONS 0x00
#define FRSCRIPTINDEX_TARGETS 0x22
#define FRSCRIPTINDEX_MAINS 0x71
#define FRSCRIPTINDEX_HELP 0x71
extern u8 *_frdataSegmentRomStart;
extern u8 *_frdataSegmentRomEnd;
extern u8 *_firingrangeSegmentRomStart;
extern u8 *_firingrangeSegmentRomEnd;
u16 *g_FrScriptOffsets = NULL;
u8 g_FrIsValidWeapon = false;
@ -422,10 +422,10 @@ void func0f19d4ec(void)
g_FrIsValidWeapon = false;
g_FrRomData = NULL;
g_FiringRangeData.mainscriptindex = 0;
g_FiringRangeData.scriptoffset = 0;
g_FiringRangeData.scriptenabled = false;
g_FiringRangeData.scriptsleep = 0;
g_FiringRangeData.helpscriptindex = 0;
g_FiringRangeData.helpscriptoffset = 0;
g_FiringRangeData.helpscriptenabled = false;
g_FiringRangeData.helpscriptsleep = 0;
g_FiringRangeData.unk464 = 0;
g_FiringRangeData.numtargets = 0;
@ -442,7 +442,7 @@ void *frLoadRomData(u32 len)
g_FrRomData = malloc(ALIGN16(len), 4);
if (g_FrRomData) {
return func0000d488(g_FrRomData, &_frdataSegmentRomStart, len);
return func0000d488(g_FrRomData, &_firingrangeSegmentRomStart, len);
}
return NULL;
@ -528,10 +528,10 @@ void frInitDefaults(void)
g_FiringRangeData.numhitsring2 = 0;
g_FiringRangeData.numhitsring1 = 0;
g_FiringRangeData.numhitsbullseye = 0;
g_FiringRangeData.mainscriptindex = 0;
g_FiringRangeData.scriptoffset = 0;
g_FiringRangeData.scriptenabled = false;
g_FiringRangeData.scriptsleep = 0;
g_FiringRangeData.helpscriptindex = 0;
g_FiringRangeData.helpscriptoffset = 0;
g_FiringRangeData.helpscriptenabled = false;
g_FiringRangeData.helpscriptsleep = 0;
g_FiringRangeData.proxyendtimer = 0;
g_FiringRangeData.unk465_04 = false;
g_FiringRangeData.ammohasgrace = true;
@ -962,7 +962,7 @@ glabel var7f1b93ec
// if (scriptindex >= FRSCRIPTINDEX_WEAPONS && scriptindex < FRSCRIPTINDEX_TARGETS) {
// u8 *script = &g_FrRomData[g_FrScriptOffsets[scriptindex]];
// s32 mult = 1;
// s32 end;
// s32 start;
// s32 capacity;
// s32 index;
// u8 *subscript;
@ -973,7 +973,7 @@ glabel var7f1b93ec
// g_FiringRangeData.unk470 = script[offset + 1];
// offset += 2;
// break;
// case FRCMD_SETUPTARGET: // f19d9d0
// case FRCMD_ADDTARGET: // f19d9d0
// if (!frIsDifficulty(script[offset + 4])) {
// offset += 5;
// break;
@ -1060,33 +1060,33 @@ glabel var7f1b93ec
// 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;
// case FRCMD_SETHELPSCRIPT: // f19dd0c
// g_FiringRangeData.helpscriptindex = script[offset + 1];
// g_FiringRangeData.helpscriptenabled = true;
// index = FRSCRIPTINDEX_HELP + g_FiringRangeData.helpscriptindex;
// subscript = &g_FrRomData[g_FrScriptOffsets[index]];
// offset += 2;
//
// // d48
// if (g_FiringRangeData.difficulty == FRDIFFICULTY_BRONZE) {
// end = FRCMD_ENDIFBRONZE;
// start = FRCMD_IFBRONZE;
// } else /*d58*/ if (g_FiringRangeData.difficulty == FRDIFFICULTY_SILVER) {
// end = FRCMD_ENDIFSILVER;
// start = FRCMD_IFSILVER;
// } else /*d6c*/ if (g_FiringRangeData.difficulty == FRDIFFICULTY_GOLD) {
// end = FRCMD_ENDIFGOLD;
// start = FRCMD_IFGOLD;
// }
//
// // d7c
// g_FiringRangeData.scriptoffset = 0;
// g_FiringRangeData.helpscriptoffset = 0;
//
// while (subscript[g_FiringRangeData.scriptoffset++] != end);
// while (subscript[g_FiringRangeData.helpscriptoffset++] != start);
//
// if (subscript[g_FiringRangeData.scriptoffset] >= FRCMD_ENDIFBRONZE) {
// g_FiringRangeData.scriptoffset++;
// if (subscript[g_FiringRangeData.helpscriptoffset] >= FRCMD_IFBRONZE) {
// g_FiringRangeData.helpscriptoffset++;
// }
//
// if (subscript[g_FiringRangeData.scriptoffset] >= FRCMD_ENDIFBRONZE) {
// g_FiringRangeData.scriptoffset++;
// if (subscript[g_FiringRangeData.helpscriptoffset] >= FRCMD_IFBRONZE) {
// g_FiringRangeData.helpscriptoffset++;
// }
//
// break;
@ -1138,43 +1138,43 @@ char *frGetInstructionalText(u32 index)
return langGet(textid);
}
void frExecuteMainScript(void)
void frExecuteHelpScript(void)
{
if (!g_FiringRangeData.scriptenabled || g_Vars.lvupdate240 == 0) {
if (!g_FiringRangeData.helpscriptenabled || g_Vars.lvupdate240 == 0) {
return;
}
if (g_FiringRangeData.scriptsleep == 0) {
s32 index = FRSCRIPTINDEX_MAINS + g_FiringRangeData.mainscriptindex;
if (g_FiringRangeData.helpscriptsleep == 0) {
s32 index = FRSCRIPTINDEX_HELP + g_FiringRangeData.helpscriptindex;
u8 *script = &g_FrRomData[g_FrScriptOffsets[index]];
u32 offset = g_FiringRangeData.scriptoffset;
u32 offset = g_FiringRangeData.helpscriptoffset;
switch (script[offset]) {
case FRCMD_END:
case FRCMD_ENDIFBRONZE:
case FRCMD_ENDIFSILVER:
case FRCMD_ENDIFGOLD:
g_FiringRangeData.scriptenabled = false;
case FRCMD_IFBRONZE:
case FRCMD_IFSILVER:
case FRCMD_IFGOLD:
g_FiringRangeData.helpscriptenabled = false;
break;
case FRCMD_HUDMSG:
hudmsgCreateViaPreset(frGetInstructionalText(script[offset + 1]), HUDMSGTYPE_TRAINING);
g_FiringRangeData.scriptoffset += 2;
g_FiringRangeData.helpscriptoffset += 2;
break;
case FRCMD_WAITSECONDS:
g_FiringRangeData.scriptsleep = script[offset + 1] * 60;
g_FiringRangeData.scriptoffset += 2;
g_FiringRangeData.helpscriptsleep = script[offset + 1] * 60;
g_FiringRangeData.helpscriptoffset += 2;
break;
case FRCMD_WAITUNTILSHOOT:
if (g_FiringRangeData.numshots) {
g_FiringRangeData.scriptoffset++;
g_FiringRangeData.helpscriptoffset++;
}
break;
}
} else {
g_FiringRangeData.scriptsleep -= g_Vars.lvupdate240_60;
g_FiringRangeData.helpscriptsleep -= g_Vars.lvupdate240_60;
if (g_FiringRangeData.scriptsleep <= 0) {
g_FiringRangeData.scriptsleep = 0;
if (g_FiringRangeData.helpscriptsleep <= 0) {
g_FiringRangeData.helpscriptsleep = 0;
}
}
}
@ -1742,12 +1742,12 @@ glabel func0f19e7a8
//{
// // 7bc
// if (var80088808 == false) {
// u32 len = (u32)&_frdataSegmentRomEnd - (u32)&_frdataSegmentRomStart;
// u32 len = (u32)&_firingrangeSegmentRomEnd - (u32)&_firingrangeSegmentRomStart;
// u32 index = 0;
// s32 i;
// s32 count = 1;
// s32 j;
// u32 len2 = (u32)&_frdataSegmentRomEnd - (u32)&_frdataSegmentRomStart;
// u32 len2 = (u32)&_firingrangeSegmentRomEnd - (u32)&_firingrangeSegmentRomStart;
//
// var80088808 = true;
//
@ -2660,7 +2660,7 @@ glabel var7f1b94e4
.L0f19fd20:
/* f19fd20: 8ecc0284 */ lw $t4,0x284($s6)
/* f19fd24: 240b0001 */ addiu $t3,$zero,0x1
/* f19fd28: 0fc677d6 */ jal frExecuteMainScript
/* f19fd28: 0fc677d6 */ jal frExecuteHelpScript
/* f19fd2c: ad8b1c08 */ sw $t3,0x1c08($t4)
/* f19fd30: 92ad045a */ lbu $t5,0x45a($s5)
/* f19fd34: 51a0004b */ beqzl $t5,.L0f19fe64

View File

@ -581,7 +581,7 @@
#define FLOORTYPE_DIRT 7
#define FLOORTYPE_SNOW 8
#define FRCMD_SETUPTARGET 0x00
#define FRCMD_ADDTARGET 0x00
#define FRCMD_SETNUMTARGETS 0x01
#define FRCMD_SETGOALSCORE 0x02
#define FRCMD_SETTIMELIMIT 0x03
@ -589,7 +589,7 @@
#define FRCMD_SETEXTRASPEED 0x05
#define FRCMD_SETGOALACCURACY 0x06
#define FRCMD_SETGOALTARGETS 0x07
#define FRCMD_SETMAINSCRIPT 0x08
#define FRCMD_SETHELPSCRIPT 0x08
#define FRCMD_SETGRENADELIMIT 0x09
#define FRCMD_0A 0x0a
#define FRCMD_SETSCOREMULTIPLIER 0x0b
@ -601,9 +601,9 @@
#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 FRCMD_IFBRONZE 0xfb
#define FRCMD_IFSILVER 0xfc
#define FRCMD_IFGOLD 0xfd
#define FRDIFFICULTY_BRONZE 0
#define FRDIFFICULTY_SILVER 1

View File

@ -0,0 +1,72 @@
#define add_target(frpadnum, script, target01, flags) \
0x00, frpadnum, script, target01, flags
#define set_num_targets(bronze, silver, gold) \
0x01, bronze, silver, gold
#define set_goal_score(bronze, silver, gold) \
0x02, bronze, silver, gold
#define set_time_limit(bronze, silver, gold) \
0x03, bronze, silver, gold
#define set_ammo_limit(bronze, silver, gold) \
0x04, bronze, silver, gold
#define set_extra_speed(bronze, silver, gold) \
0x05, bronze * 10, silver * 10, gold * 10
#define set_goal_accuracy(bronze, silver, gold) \
0x06, bronze, silver, gold
#define set_goal_targets(bronze, silver, gold) \
0x07, bronze, silver, gold
#define set_help_script(script) \
0x08, script
#define set_grenade_limit(bronze, silver, gold) \
0x09, bronze, silver, gold
#define cmd_0a(value) \
0x0a, value
#define set_score_multiplier(bronze, silver, gold) \
0x0b, bronze, silver, gold
#define go_to_pad(frpadnum, unk2, seconds) \
0x0c, frpadnum, unk2, seconds
#define restart() \
0x0d
#define cmd_0e(seconds) \
0x0e, seconds
#define rotate(angle, speed) \
0x0f, angle, speed
#define hudmsg(frtextindex) \
0x10, frtextindex
#define wait_until_shoot() \
0x11
#define wait_seconds(seconds) \
0x12, seconds
#define end() \
0x13
#define if_bronze() \
0xfb
#define if_silver() \
0xfc
#define if_gold() \
0xfd
#define start() \
0xfe

View File

@ -36,7 +36,7 @@ void frExecuteWeaponScript(s32 scriptindex);
void func0f19de24(void);
bool frTargetIsAtScriptStart(s32 targetnum);
char *frGetInstructionalText(u32 index);
void frExecuteMainScript(void);
void frExecuteHelpScript(void);
bool frExecuteTargetScript(s32 targetnum);
void frHideAllTargets(void);
void frInitTargets(void);

View File

@ -5348,10 +5348,10 @@ struct frdata {
/*0x465*/ u8 unk465_04 : 1;
/*0x465*/ u8 ammohasgrace : 1;
/*0x465*/ u8 unk465_06 : 2;
/*0x466*/ u8 mainscriptindex;
/*0x467*/ u8 scriptoffset;
/*0x468*/ u8 scriptenabled;
/*0x46c*/ s32 scriptsleep;
/*0x466*/ u8 helpscriptindex;
/*0x467*/ u8 helpscriptoffset;
/*0x468*/ u8 helpscriptenabled;
/*0x46c*/ s32 helpscriptsleep;
/*0x470*/ u8 unk470;
/*0x471*/ u8 feedbackzone;
/*0x472*/ s8 feedbackttl;

View File

@ -36,6 +36,7 @@ def main():
write_binary(fd, 0x7df820, get_mpstrings('F'))
write_binary(fd, 0x7e2f20, get_mpstrings('S'))
write_binary(fd, 0x7e6620, get_mpstrings('I'))
write_binary(fd, 0x7e9d20, get_firingrange())
write_binary(fd, 0x7f2388, get_fonts())
write_binary(fd, 0x80a250, get_sfxctl())
write_binary(fd, 0x839dd0, get_sfxtbl())
@ -95,6 +96,9 @@ def get_mpconfigs():
def get_mpstrings(lang):
return getfilecontents(bdir() + '/ucode/mpstrings%s.bin' % lang)
def get_firingrange():
return getfilecontents(bdir() + '/ucode/firingrange.bin')
def get_fonts():
return getfrombaserom(0x7f2388, 0x17ec8)

View File

@ -24,6 +24,7 @@ class Extractor:
self.extract_ucodes()
self.extract_mpconfigs()
self.extract_mpstrings()
self.extract_firingrange()
#
# Audio
@ -151,6 +152,14 @@ class Extractor:
addr = self.val('mpconfigs') + 0x68 * 44 + 0x3700 * index
self.write('ucode/mpstrings%s.bin' % lang, self.rom[addr:addr+0x3700])
#
# Firing Range
#
def extract_firingrange(self):
addr = self.val('firingrange')
self.write('ucode/firingrange.bin', self.rom[addr:addr+0x1550])
#
# Fonts
#
@ -249,6 +258,7 @@ class Extractor:
'files': 0x28080,
'gamedata': 0x39850,
'mpconfigs': 0x7d0a40,
'firingrange': 0x7e9d20,
'sfxctl': 0x80a250,
'textures': 0x01d65f40,
},
@ -257,6 +267,7 @@ class Extractor:
'files': 0x28080,
'gamedata': 0x39850,
'mpconfigs': 0x7d0a40,
'firingrange': 0x7e9d20,
'sfxctl': 0x80a250,
'textures': 0x01d65f40,
},
@ -265,6 +276,7 @@ class Extractor:
'files': 0x29160,
'gamedata': 0x30850,
'mpconfigs': 0x785130,
'firingrange': 0x79e410,
'sfxctl': 0x7be940,
'textures': 0x01d12fe0,
},
@ -273,6 +285,7 @@ class Extractor:
'files': 0x28910,
'gamedata': 0x39850,
'mpconfigs': 0x7bc240,
'firingrange': 0x7d5520,
'sfxctl': 0x7f87e0,
'textures': 0x01d5ca20,
},
@ -281,6 +294,7 @@ class Extractor:
'files': 0x29b90,
'gamedata': 0x39850,
'mpconfigs': 0x7bc240,
'firingrange': 0x7d5520,
'sfxctl': 0x7f87e0,
'textures': 0x01d5bb50,
},
@ -289,6 +303,7 @@ class Extractor:
'files': 0x28800,
'gamedata': 0x39850,
'mpconfigs': 0x7c00d0,
'firingrange': 0x7d93b0,
'sfxctl': 0x7fc670,
'textures': 0x01d61f90,
},