diff --git a/Makefile b/Makefile index 5a80c9d9b..effd0db56 100644 --- a/Makefile +++ b/Makefile @@ -67,7 +67,7 @@ CFLAGS := -DVERSION=$(VERSION) \ -I src/include \ -mips2 -C_FILES := $(shell find src/boot src/lib src/game src/inflate src/gvars src/mpconfigs src/mpstrings/$(ROMID) -name '*.c') +C_FILES := $(shell find src/boot src/lib src/game src/inflate src/gvars src/mpconfigs src/mpstrings/$(ROMID) src/firingrange -name '*.c') O_FILES := $(patsubst src/%.c, $(B_DIR)/%.o, $(C_FILES)) ASSET_AUDIO_FILES := Arecep01M Arecep02M Arecep03M Arecep04M Arecep05M Arecep06M Arlguard1M Arltech01M Arltech02M Arltech03M Arltech04M Arltech05M Arltech06M Ascie2aM Ascie2bM Ascie2cM Ascie2dM Ascie2eM Ascie2fM Ascie2gM Ascie3aM Ascie3bM Ascie3cM Ascie3dM Ascie3eM Ascie3gM Ascien10aM Ascien2_aM Ascien3_aM Ascien4_aM Ascien5_aM Ascien6_aM Ascien7_aM Ascien9_aM AvilgrimM Awepgd01M Awepgd02M Awepgd03M Awepsc01M Awepsc02M Awepsc03M Aa51elv01M Aa51elv02M Aa51elv03M Aa51grd01M Aa51grd02M Aa51grd03M Aa51grd04M Aa51grd05M Aa51grd06M Aa51grd07M Aa51grd08M Aa51grd09M Aa51grd10M Aa51jo1M Aa51jo2M Aa51jo3M Aa51jo4M Aa51jo5M Aa51jo6M Aa51jon01M Aa51jon02M Aa51jon03M Aa51jon04M Aa51jon05M Aa51jon06M Aa51jon07M Aa51jon08M Aa51jon09M Aa51jon10M Aa51jon11M Aa51jon12M Aa51jon14M Aa51jon15M Aa51sci1M Aaf1jo01M Aaf1jo02M Aaf1jo03M Aaf1pr01M Aaf1pr02M Aaf1pr03M Aaf1pr04M Aaf1pr05M Aaf1pr06M Aaf1pr07M Aaf1pr08M Aaf1pr09M Aaf1pr10M Aaf1tr01M Aaf1tr02M Aaf1tr03M Aairbgd01M Aairbgd02M Aairbgd03M Aairbgd04M Aairbgd05M Aairbgd06M Aairbgd07M Aairbgd08M Aairbgd09M Aairbgd10M Aairbgd11M Aairbgd12M Aairbgd13M Aairbgd14M Aairbgd15M Aairbgd16M Aairstw01M Aairstw02M Aairstw03M Aassael01M Aassael02M Aassael03M Aassael04M Aassael05M Aassael06M Absewrk01M Absewrk02M Absewrk03M Absewrk04M Absewrk05M Acetael01M Achdroid1M Achdroid2M Acsec01M Acsec02M Acsec03M Acstan1M Acstan2M Adevr01M Adevr02M Adevr03M Adevr04M Adevr05M Adevr06M Adevr07M Adevr08M Adevr09M Adevr10M Adevr11M Adevr12M Aexec01M Aexec02M Aexec04M Aexec05M Aexec06M Aexec07M Aexec08M Aexec09M Aexec10M Aexec11M Aexec12M Aexec13M Aexec14M Ahelic01M Ahelic02M Ahelic03M Ahologd01M AholohopkM Ainvcar01M Ainvcar02M Ainvcar03M Ainvcar04M Ainvcar05M Ainvcar06M Ainvcar07M Ainvcar08M Ainvcar09M Ainvcar10M Ainvcar11M Ainvcar12M AinvfarrM AinvfemaM AinvfostM AinvgrimM AinvhopkM AinvmaleM Ajoexec01M Ajoexec02M Ajosci01M Ajosci02M Ajosci03M Alabacc1M Alabacc2M Alabacc3M Alabacc4M Alabacc5M Alabacc6M Alabtech1M Alabtech2M Alabtech3M Alabtech5M Alabtech6M Alabtech7M Alabtech8M Alabtech9M Aoffwrk01M Aoffwrk02M Aoffwrk03M Aoffwrk04M Am1_l1_aM Am1_l1_bM Am1_l1_cM Am1_l1_dM Am1_l2_aM Am1_l2_bM Am1_l2_cM Am1_l2_dM Am1_l3_aM Am1_l3_bM Am1_l3_cM Am1_l3_dM Am2_l1_aM Am2_l1_bM Am2_l1_cM Am2_l1_dM Am3_l1_aM Am3_l1_bM Am3_l1_cM Am3_l1_dM Am3_l2_aM Am3_l2_bM Am3_l2_cM Am3_l2_dM Am4_l1_aM Am4_l1_bM Am4_l1_cM Am4_l1_dM Am4_l2_aM Am4_l2_bM Am4_l2_cM Am4_l2_dM Am4_l3_aM Am4_l3_bM Am4_l3_cM Am4_l3_dM Am5_l1_aM Am5_l1_bM Am5_l1_cM Am5_l1_dM Am5_l2_aM Am5_l2_bM Am5_l2_cM Am5_l2_dM Am5_l3_aM Am5_l3_bM Am5_l3_cM Am5_l3_dM Am6_l1_aM Am6_l1_bM Am6_l1_cM Am6_l1_dM Am6_l2_aM Am6_l2_bM Am6_l2_cM Am6_l2_dM Am7_l1_aM Am7_l1_bM Am7_l1_cM Am7_l1_dM Am8_l1_aM Am8_l1_bM Am8_l1_cM Am8_l1_dM Am9_l1_aM Am9_l1_bM Am9_l1_cM Am9_l1_dM Ap1_01_joM Ap1_02_caM Ap1_03_joM Ap1_04_caM Ap1_05_joM Ap1_06_caM Ap1_07_joM Ap1_08_caM Ap2_01_joM Ap2_02_joM Ap2_03_drM Ap2_04_joM Ap2_05_joM Ap2_06_drM Ap2_07_drM Ap3_01_gdM Ap3_02_joM Ap3_03_joM Ap4_01_dvM Ap4_02_joM Ap4_03_dvM Ap4_04_joM Ap4_05_dvM Ap4_06_joM Ap4_07_blM Ap4_08_dvM Ap4_09_dvM Ap5_01_joM Ap5_02_joM Ap5_03_joM Ap6_01_joM Ap6_02_caM Ap6_03_joM Ap6_04_caM Ap6_05_joM Ap6_06_caM Ap7_01_caM Ap7_02_joM Ap7_03_caM Ap7_04_joM Ap8_01_dvM Ap8_02_blM Ap8_03_dvM Ap8_04_blM Ap8_06_blM Ap8_07_trM Ap8_08_dvM Ap8_09_trM Ap8_10_blM Ap9_01_joM Ap9_02_caM Ap9_03_joM Ap10_01_caM Ap10_02_caM Ap10_03_caM Ap10_04_caM Ap10_05_joM Ap10_06_caM Ap10_07_joM Ap10_08_caM Ap10_09_joM Ap11_01_jnM Ap11_02_joM Ap11_03_jnM Ap11_04_joM Ap11_05_jnM Ap11_06_joM Ap11_07_jnM Ap11_08_joM Ap12_01_jnM Ap12_02_joM Ap12_03_jnM Ap12_04_joM Ap12_05_jnM Ap12_06_joM Ap12_07_jnM Ap12_08_joM Ap12_09_jnM Ap12_10_joM Ap13_01_joM Ap13_02_suM Ap13_03_joM Ap13_04_suM Ap13_06_suM Ap14_03_suM Ap14_04_joM Ap14_05_suM Ap14_07_joM Ap15_01_elM Ap15_02_elM Ap15_03_joM Ap15_04_jnM Ap15_05_elM Ap15_06_joM Ap15_07_elM Ap15_08_joM Ap15_09_elM Ap15_10_joM Ap15_11_elM Ap16_01_joM Ap16_02_caM Ap16_04_caM Ap16_05_joM Ap16_06_caM Ap17_01_trM Ap17_02_prM Ap17_03_trM Ap17_04_prM Ap17_05_trM Ap17_06_trM Ap18_01_joM Ap18_02_elM Ap18_03_elM Ap18_04_joM Ap18_05_elM Ap19_01_caM Ap19_02_caM Ap19_03_joM Ap19_04_caM Ap19_05_joM Ap19_06_joM Ap20_01_joM Ap20_02_prM Ap20_03_joM Ap20_04_prM Ap20_05_joM Ap20_06_blM Ap20_07_trM Ap20_08_trM Ap21_01_elM Ap21_02_joM Ap21_03_elM Ap21_04_joM Ap22_01_elM Ap22_02_joM Ap22_03_elM Ap22_04_joM Ap23_01_joM Ap23_02_drM Ap23_03_joM Ap23_04_drM Ap23_05_joM Ap23_06_drM Ap23_07_joM Ap23_08_drM Ap24_01_caM Ap24_02_joM Ap24_03_caM Ap24_04_joM Ap24_05_caM Ap24_06_caM Ap24_07_joM Ap24_08_joM Ap25_01_joM Ap25_02_joM Ap26_01_joM Ap26_02_dvM Ap26_03_joM Ap26_04_dvM Ap26_05_dvM Ap26_06_joM Ap26_07_dvM Ap26_08_dvM Ap27_01_joM Ap27_02_elM Ap27_03_elM Ap27_04_joM Ap27_05_joM Ap27_06_elM Ap28_01_elM Ap28_02_joM Ap28_03_elM Ap28_04_joM Ap28_05_elM Ap28_06_joM Ap29_01_elM Ap29_02_joM Ap29_03_elM Ap29_04_joM Ap29_05_joM Ap29_06_elM Ap29_07_joM Ap29_08_elM Ap29_09_joM Ap29_10_elM Apelelv01M Apelgrd01M Ap29_11_joM Am3l2carrM Aelvcet01M Aelvcet02M Ajorep01M Ajorep02M Ajorep03M Ajorep04M Ajorpld01M Ajorpld02M Ajorpld03M Ajorpld04M Atrjo01M Atrgrim01M Atrgrim02M Atrcarr06M Atrcarr07M Atrcarr08M Atrcarr01M Atrcarr02M Atrcarr03M Atrcarr04M Atrcarr05M Atrcarr12M Abnblde01M Abncass01M Apelelv02M Avault2M Ap29_12_elM Ap14_09_joM Ap19_07_joM Ap19_08_joM Acicarr06M Acicarr11M Acifarr08M Acifarr12M Acifema01M Acifema04M Acifema07M Acifema08M Acifema09M Acifema14M Acifost08M Acifost12M Acigrim05M Acigrim06M Acigrim07M Acigrim08M Acigrim09M Acigrim10M Acihopk09M Acihopk11M Acimale02M Acimale03M Acimale07M Acimale09M Acimale11M Acimale13M Aciroge08M Aciroge12M Atrfost01M Atrfost02M Atrfost03M Atrcarr09M Atrcarr10M Atrcarr11M Acifarr01M Acifarr02M Acifarr03M Acigrim01M Acigrim03M Acigrim04M Acihopk01M Acihopk04M Acihopk06M Aciroge01M Aciroge02M Atrroge01M Acicarr07M Acicarr08M Ajoinst01M Ajoinst02M Ajoinst03M Ajoinst04M Ap25_03_joM Ap29_13_joM Ap29_14_joM Acicarr09M Acicarr10M Ap29_15_joM Ap16_03_joM Acarrbye02M Asaucerexp1M @@ -116,6 +116,7 @@ ASSET_O_FILES := $(patsubst %, %.o, $(ASSET_FILES)) UCODE_BIN_FILES := \ $(B_DIR)/ucode/boot.bin \ $(B_DIR)/ucode/filenames.bin \ + $(B_DIR)/ucode/firingrange.bin \ $(B_DIR)/ucode/game.bin \ $(B_DIR)/ucode/gamedata.bin \ $(B_DIR)/ucode/gvars.bin \ @@ -358,6 +359,15 @@ $(B_DIR)/ucode/filenames.elf: $(B_DIR)/filenames.o $(B_DIR)/ucode/filenames.bin: $(B_DIR)/ucode/filenames.elf $(TOOLCHAIN)-objcopy $< $@ -O binary +$(B_DIR)/ucode/firingrange.elf: $(B_DIR)/firingrange/firingrange.o + @mkdir -p $(B_DIR)/ucode + cp $< build/zero.tmp.o + $(TOOLCHAIN)-ld -T ld/zero.ld -o $@ + rm -f build/zero.tmp.o + +$(B_DIR)/ucode/firingrange.bin: $(B_DIR)/ucode/firingrange.elf + $(TOOLCHAIN)-objcopy $< $@ -O binary + $(B_DIR)/pd.elf: $(O_FILES) $(ASSET_O_FILES) ld/pd.ld cpp -DROMID=$(ROMID) -DVERSION=$(VERSION) -P ld/pd.ld -o $(B_DIR)/pd.ld $(TOOLCHAIN)-ld --no-check-sections -T $(B_DIR)/pd.ld --print-map -o $@ > $(B_DIR)/pd.map diff --git a/checksums.jap-final.md5 b/checksums.jap-final.md5 index c01b069e1..3c6e41339 100644 --- a/checksums.jap-final.md5 +++ b/checksums.jap-final.md5 @@ -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 diff --git a/checksums.ntsc-1.0.md5 b/checksums.ntsc-1.0.md5 index d544408ae..e1164ce89 100644 --- a/checksums.ntsc-1.0.md5 +++ b/checksums.ntsc-1.0.md5 @@ -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 diff --git a/checksums.ntsc-beta.md5 b/checksums.ntsc-beta.md5 index ac995c703..92be85699 100644 --- a/checksums.ntsc-beta.md5 +++ b/checksums.ntsc-beta.md5 @@ -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 diff --git a/checksums.ntsc-final.md5 b/checksums.ntsc-final.md5 index a60263ba1..5f2909abf 100644 --- a/checksums.ntsc-final.md5 +++ b/checksums.ntsc-final.md5 @@ -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 diff --git a/checksums.pal-beta.md5 b/checksums.pal-beta.md5 index 16c1c408f..bbf8d51d4 100644 --- a/checksums.pal-beta.md5 +++ b/checksums.pal-beta.md5 @@ -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 diff --git a/checksums.pal-final.md5 b/checksums.pal-final.md5 index b7c0f2c36..4b81c6339 100644 --- a/checksums.pal-final.md5 +++ b/checksums.pal-final.md5 @@ -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 diff --git a/ld/pd.ld b/ld/pd.ld index 60121673f..8c86d9a3b 100644 --- a/ld/pd.ld +++ b/ld/pd.ld @@ -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) diff --git a/src/firingrange/firingrange.c b/src/firingrange/firingrange.c new file mode 100644 index 000000000..121860112 --- /dev/null +++ b/src/firingrange/firingrange.c @@ -0,0 +1,1838 @@ +#include +#include "constants.h" +#include "firingrange/frcommands.h" + +u16 texts[] = { + /*0*/ L_MISC(281), // "FIRING\n Press Z Button to fire gun.\n" + /*1*/ L_MISC(282), // "AUTO RELOAD\n Release Z Button when out of ammo.\n" + /*2*/ L_MISC(283), // "MANUAL RELOAD\n Press B Button to reload early if magazine not full.\n" + /*3*/ L_MISC(284), // "Aiming: Hold down R Button to enter Aim mode.\n" + /*4*/ L_MISC(285), // "Use Control Stick to move aiming sight.\n" + /*5*/ L_MISC(286), // "AUTO FIRE\n Hold Z Button to repeatedly fire automatically.\n" + /*6*/ L_MISC(287), // "ALTER AIM\n Press Up C Button or Down C Button to move sight up/down.\n" + /*7*/ L_MISC(288), // "ZOOM\n Hold R Button to enter Zoom mode.\n" + /*8*/ L_MISC(289), // "FAST FIRE\n Press Z Button quickly to fire faster.\n" +}; + +u8 weapon_dummy[] = { + start(), + end(), +}; + +u8 weapon_falcon2[] = { + start(), + set_num_targets(3, 1, 3), + set_goal_score(120, 80, 170), + set_time_limit(255, 15, 10), + set_ammo_limit(255, 255, 24), + set_extra_speed(0, 0.2, 0.4), + set_help_script(0), + cmd_0a(0x00), + add_target(0x00, 0x12, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x13, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x02, 0x14, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x0f, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x10, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x02, 0x11, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0c, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0d, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0e, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3b, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3c, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3d, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x23, 0x08, FRTARGETFLAG_GOLD), + add_target(0x00, 0x24, 0x08, FRTARGETFLAG_GOLD), + add_target(0x00, 0x25, 0x08, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_falcon2_scope[] = { + start(), + set_num_targets(1, 1, 3), + set_goal_score(120, 120, 80), + set_time_limit(255, 255, 10), + set_ammo_limit(255, 255, 8), + set_extra_speed(0, 2, 0.4), + set_help_script(2), + cmd_0a(0x00), + set_goal_accuracy(0, 80, 0), + add_target(0x01, 0x0c, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0d, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0e, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0c, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0d, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0e, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0c, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0d, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0e, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x26, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x27, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x28, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1d, 0x08, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_falcon2_silencer[] = { + start(), + set_num_targets(1, 9, 3), + set_goal_score(120, 30, 80), + set_time_limit(255, 255, 30), + set_ammo_limit(255, 255, 255), + set_extra_speed(0, 0.8, 0.4), + set_help_script(1), + cmd_0a(0x00), + set_goal_targets(255, 9, 3), + add_target(0x01, 0x2f, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x30, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x31, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2e, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2d, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2c, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2b, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2a, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x29, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x32, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x33, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x34, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x35, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x36, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x37, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x38, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x39, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3a, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_magsec4[] = { + start(), + set_num_targets(1, 7, 4), + set_goal_score(135, 135, 80), + set_time_limit(255, 255, 12), + set_ammo_limit(255, 18, 255), + set_extra_speed(0, 1, 3), + cmd_0a(0x00), + set_goal_targets(255, 255, 4), + add_target(0x01, 0x2b, 0x09, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2a, 0x09, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x29, 0x09, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x42, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), + add_target(0x00, 0x32, 0x03, FRTARGETFLAG_SILVER), + add_target(0x00, 0x33, 0x03, FRTARGETFLAG_SILVER), + add_target(0x00, 0x34, 0x03, FRTARGETFLAG_SILVER), + add_target(0x00, 0x35, 0x03, FRTARGETFLAG_SILVER), + add_target(0x00, 0x36, 0x03, FRTARGETFLAG_SILVER), + add_target(0x00, 0x37, 0x03, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3e, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x41, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x40, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x3f, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + end(), +}; + +u8 weapon_mauler[] = { + start(), + set_num_targets(1, 8, 6), + set_goal_score(200, 0, 0), + set_time_limit(255, 255, 15), + set_ammo_limit(255, 50, 35), + set_extra_speed(0, 1, 3), + cmd_0a(0x00), + set_goal_targets(255, 8, 6), + add_target(0x01, 0x45, 0x14, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x46, 0x14, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x47, 0x14, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x46, 0x14, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x45, 0x14, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x47, 0x14, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x47, 0x14, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x45, 0x14, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x46, 0x14, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x15, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x16, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x17, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x18, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x19, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1a, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1b, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1c, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x35, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x36, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x37, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x38, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x39, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x3a, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + end(), +}; + +u8 weapon_phoenix[] = { + start(), + set_num_targets(2, 3, 6), + set_goal_score(90, 0, 0), + set_time_limit(255, 255, 20), + set_ammo_limit(255, 18, 3), + set_extra_speed(2, 0.5, 2.5), + cmd_0a(0x09), + set_goal_targets(255, 8, 6), + add_target(0x00, 0x3e, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x40, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x41, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3f, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3e, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x40, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x41, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3f, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x22, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x21, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x20, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1f, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1d, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1e, 0x01, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_dy357magnum[] = { + start(), + set_num_targets(1, 9, 9), + set_goal_score(90, 80, 50), + set_time_limit(255, 255, 12), + set_ammo_limit(255, 3, 5), + set_extra_speed(0, 1, 3), + cmd_0a(0x00), + add_target(0x00, 0x38, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x39, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3a, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x39, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x38, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3a, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3a, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x39, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x38, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0c, 0x01, FRTARGETFLAG_SILVER), + add_target(0x01, 0x0d, 0x01, FRTARGETFLAG_SILVER), + add_target(0x02, 0x0e, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0x01, FRTARGETFLAG_SILVER), + add_target(0x01, 0x10, 0x01, FRTARGETFLAG_SILVER), + add_target(0x02, 0x11, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x12, 0x01, FRTARGETFLAG_SILVER), + add_target(0x01, 0x13, 0x01, FRTARGETFLAG_SILVER), + add_target(0x02, 0x14, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x32, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x2a, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x2b, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x2c, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x36, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x2e, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x38, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x30, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x3a, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + end(), +}; + +u8 weapon_dy357lx[] = { + start(), + set_num_targets(1, 3, 1), + set_goal_score(90, 200, 100), + set_time_limit(255, 30, 50), + set_ammo_limit(255, 255, 12), + set_extra_speed(0, 1, 0.5), + cmd_0a(0x00), + add_target(0x00, 0x15, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x16, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x17, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x18, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x19, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x1a, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x1b, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x1c, 0x06, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x22, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x21, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x20, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1f, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1d, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1e, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x22, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_cmp150[] = { + start(), + set_num_targets(3, 4, 3), + set_score_multiplier(1, 0, 2), + set_goal_score(240, 0, 175), + set_time_limit(255, 255, 20), + set_ammo_limit(255, 80, 255), + set_extra_speed(0, 12, 3), + cmd_0a(0x09), + set_goal_targets(255, 4, 6), + add_target(0x00, 0x3a, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x39, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x38, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x37, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x36, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x35, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x34, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x33, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x32, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3e, 0x0c, FRTARGETFLAG_SILVER), + add_target(0x00, 0x40, 0x0c, FRTARGETFLAG_SILVER), + add_target(0x00, 0x41, 0x0c, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3f, 0x0c, FRTARGETFLAG_SILVER), + add_target(0x00, 0x26, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x27, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x28, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x26, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x27, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x28, 0x0c, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_cyclone[] = { + start(), + set_num_targets(3, 2, 3), + set_score_multiplier(3, 0, 2), + set_goal_score(250, 0, 200), + set_time_limit(255, 20, 18), + set_ammo_limit(255, 255, 255), + set_extra_speed(0, 1, 1), + cmd_0a(0x09), + set_goal_targets(255, 5, 1), + add_target(0x01, 0x12, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x13, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x14, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x11, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x10, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0f, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x45, 0x19, FRTARGETFLAG_SILVER), + add_target(0x01, 0x46, 0x19, FRTARGETFLAG_SILVER), + add_target(0x01, 0x47, 0x19, FRTARGETFLAG_SILVER), + add_target(0x01, 0x45, 0x19, FRTARGETFLAG_SILVER), + add_target(0x01, 0x46, 0x19, FRTARGETFLAG_SILVER), + add_target(0x00, 0x10, 0xfa, FRTARGETFLAG_GOLD), + add_target(0x00, 0x42, 0x19, FRTARGETFLAG_GOLD), + add_target(0x00, 0x43, 0x19, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_callistontg[] = { + start(), + set_num_targets(6, 4, 9), + set_score_multiplier(2, 0, 1), + set_goal_score(240, 0, 250), + set_time_limit(255, 30, 20), + set_ammo_limit(255, 255, 255), + set_extra_speed(0, 1, 3), + cmd_0a(0x09), + set_goal_targets(255, 1, 2), + add_target(0x01, 0x0f, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x10, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x11, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x12, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x13, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x14, 0x20, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x4c, 0xff, FRTARGETFLAG_SILVER), + add_target(0x01, 0x4d, 0xff, FRTARGETFLAG_SILVER), + add_target(0x01, 0x4e, 0xff, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1f, 0x28, FRTARGETFLAG_SILVER), + add_target(0x00, 0x32, 0x14, FRTARGETFLAG_GOLD), + add_target(0x00, 0x2a, 0x14, FRTARGETFLAG_GOLD), + add_target(0x00, 0x2b, 0x14, FRTARGETFLAG_GOLD), + add_target(0x00, 0x2c, 0x14, FRTARGETFLAG_GOLD), + add_target(0x00, 0x36, 0x14, FRTARGETFLAG_GOLD), + add_target(0x00, 0x2e, 0x14, FRTARGETFLAG_GOLD), + add_target(0x00, 0x38, 0x14, FRTARGETFLAG_GOLD), + add_target(0x00, 0x30, 0x14, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3a, 0x14, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_rcp120[] = { + start(), + set_num_targets(1, 3, 9), + set_score_multiplier(4, 2, 1), + set_goal_score(250, 150, 0), + set_time_limit(255, 20, 20), + set_ammo_limit(255, 255, 180), + set_extra_speed(0, 1, 3), + set_help_script(0), + cmd_0a(0x09), + set_goal_targets(255, 255, 9), + add_target(0x01, 0x07, 0xff, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x14, 0x14, FRTARGETFLAG_SILVER | FRTARGETFLAG_08 | FRTARGETFLAG_10), + add_target(0x00, 0x13, 0x14, FRTARGETFLAG_SILVER | FRTARGETFLAG_08 | FRTARGETFLAG_10), + add_target(0x00, 0x12, 0x14, FRTARGETFLAG_SILVER | FRTARGETFLAG_08 | FRTARGETFLAG_10), + add_target(0x00, 0x14, 0x04, FRTARGETFLAG_GOLD | FRTARGETFLAG_08 | FRTARGETFLAG_10), + add_target(0x00, 0x13, 0x04, FRTARGETFLAG_GOLD | FRTARGETFLAG_08 | FRTARGETFLAG_10), + add_target(0x00, 0x12, 0x04, FRTARGETFLAG_GOLD | FRTARGETFLAG_08 | FRTARGETFLAG_10), + add_target(0x00, 0x11, 0x0a, FRTARGETFLAG_GOLD), + add_target(0x00, 0x10, 0x0a, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0f, 0x0a, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0e, 0x0a, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0d, 0x0a, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0c, 0x0a, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_laptopgun[] = { + start(), + set_num_targets(3, 3, 3), + set_score_multiplier(5, 0, 3), + set_goal_score(150, 90, 250), + set_time_limit(30, 20, 15), + set_ammo_limit(255, 255, 250), + set_extra_speed(0, 1, 5), + cmd_0a(0x09), + set_goal_targets(255, 3, 2), + add_target(0x01, 0x0f, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x10, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x02, 0x11, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x12, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x13, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x02, 0x14, 0x32, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x12, 0x1e, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), + add_target(0x00, 0x13, 0x1e, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), + add_target(0x00, 0x14, 0x1e, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), + add_target(0x00, 0x49, 0x32, FRTARGETFLAG_GOLD), + add_target(0x00, 0x4a, 0x32, FRTARGETFLAG_GOLD), + add_target(0x00, 0x4b, 0x32, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_dragon[] = { + start(), + set_num_targets(3, 1, 5), + set_score_multiplier(3, 0, 2), + set_goal_score(150, 0, 250), + set_time_limit(255, 10, 15), + set_ammo_limit(255, 1, 255), + set_extra_speed(0, 1, 0.6), + cmd_0a(0x09), + set_goal_targets(255, 1, 255), + set_goal_accuracy(0, 0, 90), + add_target(0x00, 0x31, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x30, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x2f, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x2e, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x2d, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x2c, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x2b, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x2a, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x29, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x45, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x42, 0xff, FRTARGETFLAG_GOLD), + add_target(0x00, 0x43, 0xff, FRTARGETFLAG_GOLD), + add_target(0x00, 0x2c, 0x1e, FRTARGETFLAG_GOLD), + add_target(0x00, 0x36, 0x1e, FRTARGETFLAG_GOLD), + add_target(0x00, 0x2e, 0x1e, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_k7avenger[] = { + start(), + set_num_targets(1, 5, 3), + set_score_multiplier(3, 0, 0), + set_goal_score(125, 0, 0), + set_time_limit(255, 255, 15), + set_ammo_limit(255, 4, 30), + set_extra_speed(0, 1, 3), + cmd_0a(0x09), + set_goal_targets(255, 4, 3), + add_target(0x01, 0x0c, 0x19, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0d, 0x19, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0e, 0x19, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x0c, 0xff, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0d, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_20), + add_target(0x00, 0x0e, 0xff, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_20), + add_target(0x00, 0x10, 0xff, FRTARGETFLAG_SILVER), + add_target(0x00, 0x11, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_20), + add_target(0x00, 0x12, 0xff, FRTARGETFLAG_SILVER), + add_target(0x00, 0x13, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_20), + add_target(0x00, 0x14, 0xff, FRTARGETFLAG_SILVER), + add_target(0x00, 0x2b, 0x0a, FRTARGETFLAG_GOLD), + add_target(0x00, 0x33, 0x0a, FRTARGETFLAG_GOLD), + add_target(0x00, 0x29, 0x0a, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_ar34[] = { + start(), + set_num_targets(3, 3, 1), + set_score_multiplier(3, 0, 5), + set_goal_score(150, 0, 100), + set_time_limit(255, 255, 20), + set_ammo_limit(255, 120, 255), + set_extra_speed(0, 1, 0.5), + cmd_0a(0x09), + set_goal_targets(255, 9, 255), + set_goal_accuracy(0, 0, 100), + add_target(0x01, 0x45, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x46, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x47, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x26, 0x0a, FRTARGETFLAG_SILVER), + add_target(0x00, 0x27, 0x0a, FRTARGETFLAG_SILVER), + add_target(0x00, 0x28, 0x0a, FRTARGETFLAG_SILVER), + add_target(0x00, 0x26, 0x0a, FRTARGETFLAG_SILVER), + add_target(0x00, 0x27, 0x0a, FRTARGETFLAG_SILVER), + add_target(0x00, 0x28, 0x0a, FRTARGETFLAG_SILVER), + add_target(0x00, 0x26, 0x0a, FRTARGETFLAG_SILVER), + add_target(0x00, 0x27, 0x0a, FRTARGETFLAG_SILVER), + add_target(0x00, 0x28, 0x0a, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1d, 0xff, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_superdragon[] = { + start(), + set_num_targets(1, 9, 5), + set_score_multiplier(3, 0, 1), + set_goal_score(150, 0, 0), + set_time_limit(255, 255, 30), + set_ammo_limit(255, 9, 60), + set_grenade_limit(255, 9, 4), + set_extra_speed(0, 1, 3), + cmd_0a(0x09), + set_goal_targets(255, 9, 5), + add_target(0x00, 0x22, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x21, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x20, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x1f, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x1d, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x1e, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x22, 0x1e, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x29, 0x14, FRTARGETFLAG_SILVER), + add_target(0x00, 0x2a, 0x14, FRTARGETFLAG_SILVER), + add_target(0x00, 0x2b, 0x14, FRTARGETFLAG_SILVER), + add_target(0x00, 0x2c, 0x14, FRTARGETFLAG_SILVER), + add_target(0x00, 0x2d, 0x14, FRTARGETFLAG_SILVER), + add_target(0x00, 0x2e, 0x14, FRTARGETFLAG_SILVER), + add_target(0x00, 0x2f, 0x14, FRTARGETFLAG_SILVER), + add_target(0x00, 0x30, 0x14, FRTARGETFLAG_SILVER), + add_target(0x00, 0x31, 0x14, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3e, 0x1e, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3f, 0x1e, FRTARGETFLAG_GOLD), + add_target(0x00, 0x41, 0x1e, FRTARGETFLAG_GOLD), + add_target(0x00, 0x40, 0x1e, FRTARGETFLAG_GOLD), + add_target(0x00, 0x10, 0x0a, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_shotgun[] = { + start(), + set_num_targets(1, 3, 1), + set_goal_score(240, 0, 170), + set_time_limit(255, 30, 20), + set_ammo_limit(255, 255, 30), + set_extra_speed(0, 0.5, 0.8), + cmd_0a(0x00), + set_goal_targets(255, 9, 255), + set_score_multiplier(0, 0, 5), + add_target(0x00, 0x14, 0x09, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x12, 0x09, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x11, 0x09, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x0f, 0x09, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x13, 0x09, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x10, 0x09, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3b, 0x04, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3c, 0x04, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3d, 0x04, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3b, 0x04, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3c, 0x04, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3d, 0x04, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3b, 0x04, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3c, 0x04, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3d, 0x04, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3b, 0xfa, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_sniperrifle[] = { + start(), + set_num_targets(3, 3, 3), + set_goal_score(120, 120, 150), + set_time_limit(255, 255, 12), + set_ammo_limit(255, 255, 15), + set_extra_speed(0, 1, 6), + cmd_0a(0x12), + set_goal_accuracy(0, 90, 0), + add_target(0x01, 0x0c, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0d, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0e, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x29, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x2a, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x2b, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x2c, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x2f, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x2e, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x2d, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x30, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x31, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x45, 0x05, FRTARGETFLAG_GOLD), + add_target(0x01, 0x46, 0x05, FRTARGETFLAG_GOLD), + add_target(0x01, 0x47, 0x05, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_farsightxr20[] = { + start(), + set_num_targets(3, 9, 6), + set_goal_score(0, 0, 40), + set_time_limit(255, 15, 20), + set_ammo_limit(255, 255, 3), + set_extra_speed(0, 1, 3), + cmd_0a(0x12), + set_goal_targets(3, 6, 6), + add_target(0x01, 0x0c, 0x03, FRTARGETFLAG_BRONZE | FRTARGETFLAG_40), + add_target(0x01, 0x10, 0x03, FRTARGETFLAG_BRONZE | FRTARGETFLAG_40), + add_target(0x01, 0x14, 0x03, FRTARGETFLAG_BRONZE | FRTARGETFLAG_40), + add_target(0x01, 0x29, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), + add_target(0x01, 0x2a, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), + add_target(0x01, 0x2b, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), + add_target(0x01, 0x2c, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), + add_target(0x01, 0x2d, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), + add_target(0x01, 0x2e, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), + add_target(0x01, 0x12, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), + add_target(0x01, 0x13, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), + add_target(0x01, 0x14, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), + add_target(0x01, 0x0c, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_40), + add_target(0x01, 0x12, 0x01, FRTARGETFLAG_GOLD), + add_target(0x01, 0x0e, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_40), + add_target(0x01, 0x14, 0x01, FRTARGETFLAG_GOLD), + add_target(0x01, 0x10, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1f, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_40), + end(), +}; + +u8 weapon_crossbow[] = { + start(), + set_num_targets(3, 3, 1), + set_score_multiplier(0, 0, 1), + set_goal_score(72, 90, 150), + set_time_limit(255, 255, 30), + set_ammo_limit(255, 20, 255), + set_extra_speed(0, 1, 3), + cmd_0a(0x00), + add_target(0x01, 0x12, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x13, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x14, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0c, 0xfa, FRTARGETFLAG_SILVER), + add_target(0x01, 0x0d, 0xfa, FRTARGETFLAG_SILVER), + add_target(0x01, 0x0e, 0xfa, FRTARGETFLAG_SILVER), + add_target(0x00, 0x48, 0xff, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_tranquilizer[] = { + start(), + set_num_targets(8, 3, 1), + set_goal_score(120, 250, 0), + set_time_limit(255, 20, 15), + set_ammo_limit(255, 255, 18), + set_extra_speed(0, 1, 3), + cmd_0a(0x00), + set_goal_targets(255, 255, 18), + add_target(0x00, 0x15, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x16, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x17, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x18, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x19, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x1a, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x1b, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x1c, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x38, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3a, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x39, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x35, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x36, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x37, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x38, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x39, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3a, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x13, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x11, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0d, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0e, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x10, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0c, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0f, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x14, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x12, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x14, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x12, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x10, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0f, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0d, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0c, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x0e, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x11, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x13, 0x01, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_reaper[] = { + start(), + set_num_targets(3, 3, 3), + set_score_multiplier(5, 0, 3), + set_goal_score(200, 0, 250), + set_time_limit(255, 30, 30), + set_ammo_limit(255, 255, 255), + set_extra_speed(0, 1, 3), + cmd_0a(0x00), + set_goal_targets(255, 18, 1), + add_target(0x01, 0x2f, 0x64, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x30, 0x64, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x31, 0x64, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x13, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x11, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0d, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0e, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x10, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0c, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x14, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x12, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x14, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x12, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x10, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0d, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0c, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0e, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x11, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x13, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x49, 0x64, FRTARGETFLAG_GOLD), + add_target(0x00, 0x4a, 0x64, FRTARGETFLAG_GOLD), + add_target(0x00, 0x4b, 0x64, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_devastator[] = { + start(), + set_num_targets(3, 6, 1), + set_goal_score(0, 0, 0), + set_time_limit(255, 50, 30), + set_ammo_limit(255, 10, 6), + set_extra_speed(0, 10, 3), + cmd_0a(0x12), + set_goal_targets(6, 6, 6), + add_target(0x00, 0x12, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x10, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x13, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x11, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x14, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x0f, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x0c, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0d, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0e, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x45, 0x05, FRTARGETFLAG_SILVER), + add_target(0x01, 0x46, 0x05, FRTARGETFLAG_SILVER), + add_target(0x01, 0x47, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x2c, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x2f, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x2d, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x31, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x2e, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x30, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + end(), +}; + +u8 weapon_rocketlauncher[] = { + start(), + set_num_targets(9, 8, 4), + set_goal_score(0, 0, 40), + set_time_limit(255, 255, 30), + set_ammo_limit(255, 18, 4), + set_extra_speed(0, 4, 9), + cmd_0a(0x12), + set_goal_targets(9, 8, 4), + add_target(0x00, 0x0c, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x0d, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x0e, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x0f, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x10, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x11, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x12, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x13, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x14, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x15, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x16, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x17, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x18, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x19, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1a, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1b, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1c, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3e, 0x03, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3f, 0x03, FRTARGETFLAG_GOLD), + add_target(0x00, 0x41, 0x03, FRTARGETFLAG_GOLD), + add_target(0x00, 0x40, 0x03, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_slayer[] = { + start(), + set_num_targets(1, 4, 3), + set_goal_score(0, 40, 60), + set_time_limit(255, 255, 40), + set_ammo_limit(255, 6, 8), + set_extra_speed(0, 5, 3), + cmd_0a(0x12), + set_goal_targets(6, 4, 6), + add_target(0x01, 0x31, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2d, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x29, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2b, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2d, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x2f, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x15, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x17, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1a, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x1c, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_combatknife[] = { + start(), + set_num_targets(1, 3, 8), + set_goal_score(72, 90, 80), + set_time_limit(255, 255, 30), + set_ammo_limit(255, 18, 255), + set_extra_speed(0, 1, 3), + cmd_0a(0x00), + set_goal_targets(255, 255, 8), + add_target(0x01, 0x12, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x13, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x14, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x38, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3a, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x39, 0x06, FRTARGETFLAG_SILVER), + add_target(0x00, 0x15, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x16, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x17, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x18, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x19, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1a, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1b, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1c, 0x01, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_laser[] = { + start(), + set_num_targets(3, 1, 3), + set_goal_score(250, 180, 250), + set_time_limit(255, 20, 20), + set_ammo_limit(255, 255, 255), + set_extra_speed(0, 0.1, 0.7), + cmd_0a(0x00), + set_goal_targets(255, 255, 255), + set_goal_accuracy(0, 80, 100), + add_target(0x01, 0x12, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x10, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0e, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3b, 0xff, FRTARGETFLAG_SILVER), + add_target(0x01, 0x45, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x01, 0x46, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x01, 0x47, 0x0c, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_grenade[] = { + start(), + set_num_targets(1, 3, 1), + set_goal_score(0, 0, 0), + set_time_limit(255, 30, 30), + set_ammo_limit(255, 255, 6), + set_extra_speed(0, 1, 3), + cmd_0a(0x09), + set_goal_targets(3, 18, 4), + add_target(0x01, 0x12, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x10, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x14, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x13, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x11, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x10, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x14, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x10, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x14, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x12, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x14, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x12, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x10, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x14, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x10, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x14, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x11, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x13, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3e, 0x03, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3f, 0x03, FRTARGETFLAG_GOLD), + add_target(0x00, 0x41, 0x03, FRTARGETFLAG_GOLD), + add_target(0x00, 0x40, 0x03, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_1e[] = { + start(), + set_num_targets(3, 9, 4), + set_goal_score(72, 90, 80), + set_time_limit(255, 255, 12), + set_ammo_limit(255, 18, 255), + set_extra_speed(0, 1, 3), + cmd_0a(0x09), + add_target(0x01, 0x12, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x10, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x0e, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x13, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x11, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0d, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0e, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x10, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0c, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x14, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x12, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x14, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x12, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x10, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0d, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0c, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0e, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x11, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x13, 0x01, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3e, 0x03, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3f, 0x03, FRTARGETFLAG_GOLD), + add_target(0x00, 0x41, 0x03, FRTARGETFLAG_GOLD), + add_target(0x00, 0x40, 0x03, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_timedmine[] = { + start(), + set_num_targets(3, 6, 6), + set_goal_score(0, 0, 60), + set_time_limit(255, 255, 12), + set_ammo_limit(255, 6, 1), + set_extra_speed(0, 10, 3), + cmd_0a(0x09), + set_goal_targets(3, 6, 6), + add_target(0x01, 0x2f, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x30, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x31, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x0c, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0d, 0x08, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0e, 0x08, FRTARGETFLAG_SILVER), + add_target(0x01, 0x45, 0x05, FRTARGETFLAG_SILVER), + add_target(0x01, 0x46, 0x05, FRTARGETFLAG_SILVER), + add_target(0x01, 0x47, 0x05, FRTARGETFLAG_SILVER), + add_target(0x00, 0x0f, 0x08, FRTARGETFLAG_GOLD), + add_target(0x00, 0x10, 0x08, FRTARGETFLAG_GOLD), + add_target(0x00, 0x11, 0x08, FRTARGETFLAG_GOLD), + add_target(0x01, 0x45, 0x05, FRTARGETFLAG_GOLD), + add_target(0x01, 0x46, 0x05, FRTARGETFLAG_GOLD), + add_target(0x01, 0x47, 0x05, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_proximitymine[] = { + start(), + set_num_targets(3, 3, 5), + set_goal_score(0, 0, 0), + set_time_limit(255, 255, 30), + set_ammo_limit(255, 6, 4), + set_extra_speed(0, 1, 3), + set_goal_targets(3, 3, 5), + cmd_0a(0x09), + add_target(0x01, 0x12, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x13, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x14, 0x08, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x45, 0x05, FRTARGETFLAG_SILVER), + add_target(0x01, 0x46, 0x05, FRTARGETFLAG_SILVER), + add_target(0x01, 0x47, 0x05, FRTARGETFLAG_SILVER), + add_target(0x01, 0x45, 0x05, FRTARGETFLAG_GOLD), + add_target(0x01, 0x46, 0x05, FRTARGETFLAG_GOLD), + add_target(0x01, 0x47, 0x05, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_GOLD), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_GOLD), + end(), +}; + +u8 weapon_remotemine[] = { + start(), + set_num_targets(3, 4, 7), + set_goal_score(0, 0, 0), + set_time_limit(255, 255, 12), + set_ammo_limit(255, 4, 2), + set_extra_speed(0, 5, 3), + cmd_0a(0x00), + set_goal_targets(3, 4, 7), + add_target(0x01, 0x14, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x13, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x01, 0x12, 0xfa, FRTARGETFLAG_BRONZE), + add_target(0x00, 0x3e, 0x03, FRTARGETFLAG_SILVER), + add_target(0x00, 0x3f, 0x03, FRTARGETFLAG_SILVER), + add_target(0x00, 0x41, 0x03, FRTARGETFLAG_SILVER), + add_target(0x00, 0x40, 0x03, FRTARGETFLAG_SILVER), + add_target(0x01, 0x10, 0xfa, FRTARGETFLAG_GOLD), + add_target(0x00, 0x22, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x21, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x20, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1f, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1d, 0x01, FRTARGETFLAG_GOLD), + add_target(0x00, 0x1e, 0x01, FRTARGETFLAG_GOLD), + end(), +}; + +u8 target00[] = { + start(), + go_to_pad(0x04, 0xff, 255), + end(), +}; + +u8 target01[] = { + start(), + go_to_pad(0x05, 0xff, 255), + end(), +}; + +u8 target02[] = { + start(), + go_to_pad(0x06, 0xff, 255), + end(), +}; + +u8 target03[] = { + start(), + go_to_pad(0x07, 0xff, 255), + end(), +}; + +u8 target04[] = { + start(), + go_to_pad(0x08, 0xff, 255), + end(), +}; + +u8 target05[] = { + start(), + go_to_pad(0x09, 0xff, 255), + end(), +}; + +u8 target06[] = { + start(), + go_to_pad(0x0a, 0xff, 255), + end(), +}; + +u8 target07[] = { + start(), + go_to_pad(0x0b, 0xff, 255), + end(), +}; + +u8 target08[] = { + start(), + go_to_pad(0x0c, 0xff, 255), + end(), +}; + +u8 target09[] = { + start(), + go_to_pad(0x0b, 0xff, 0), + cmd_0e(2), + rotate(2, 4), + cmd_0e(2), + rotate(0, 4), + cmd_0e(2), + rotate(1, 8), + cmd_0e(2), + rotate(3, 8), + cmd_0e(255), + end(), +}; + +u8 target0a[] = { + start(), + go_to_pad(0x02, 0x1e, 255), + go_to_pad(0x00, 0x1e, 255), + restart(), + end(), +}; + +u8 target0b[] = { + start(), + go_to_pad(0x01, 0x1e, 255), + go_to_pad(0x03, 0x1e, 255), + restart(), + end(), +}; + +u8 target0c[] = { + start(), + go_to_pad(0x04, 0xff, 255), + restart(), + end(), +}; + +u8 target0d[] = { + start(), + go_to_pad(0x05, 0xff, 255), + restart(), + end(), +}; + +u8 target0e[] = { + start(), + go_to_pad(0x06, 0xff, 255), + restart(), + end(), +}; + +u8 target0f[] = { + start(), + go_to_pad(0x07, 0xff, 255), + restart(), + end(), +}; + +u8 target10[] = { + start(), + go_to_pad(0x08, 0xff, 255), + restart(), + end(), +}; + +u8 target11[] = { + start(), + go_to_pad(0x09, 0xff, 255), + restart(), + end(), +}; + +u8 target12[] = { + start(), + go_to_pad(0x0a, 0xff, 255), + restart(), + end(), +}; + +u8 target13[] = { + start(), + go_to_pad(0x0b, 0xff, 255), + restart(), + end(), +}; + +u8 target14[] = { + start(), + go_to_pad(0x0c, 0xff, 255), + restart(), + end(), +}; + +u8 target15[] = { + start(), + go_to_pad(0x04, 0xff, 0), + go_to_pad(0x07, 0xc8, 0), + go_to_pad(0x0a, 0xc8, 2), + go_to_pad(0x0b, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 2), + go_to_pad(0x09, 0xc8, 0), + go_to_pad(0x06, 0xc8, 2), + go_to_pad(0x05, 0xc8, 0), + go_to_pad(0x04, 0xc8, 2), + restart(), + end(), +}; + +u8 target16[] = { + start(), + go_to_pad(0x05, 0xff, 0), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x07, 0xc8, 2), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x0b, 0xc8, 2), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x09, 0xc8, 2), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x05, 0xc8, 2), + restart(), + end(), +}; + +u8 target17[] = { + start(), + go_to_pad(0x06, 0xff, 0), + go_to_pad(0x05, 0xc8, 0), + go_to_pad(0x04, 0xc8, 2), + go_to_pad(0x07, 0xc8, 0), + go_to_pad(0x0a, 0xc8, 2), + go_to_pad(0x0b, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 2), + go_to_pad(0x09, 0xc8, 0), + go_to_pad(0x06, 0xc8, 2), + restart(), + end(), +}; + +u8 target18[] = { + start(), + go_to_pad(0x07, 0xff, 0), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x0b, 0xc8, 2), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x09, 0xc8, 2), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x05, 0xc8, 2), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x07, 0xc8, 2), + restart(), + end(), +}; + +u8 target19[] = { + start(), + go_to_pad(0x09, 0xff, 0), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x05, 0xc8, 2), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x07, 0xc8, 2), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x0b, 0xc8, 2), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x09, 0xc8, 2), + restart(), + end(), +}; + +u8 target1a[] = { + start(), + go_to_pad(0x0a, 0xff, 0), + go_to_pad(0x0b, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 2), + go_to_pad(0x09, 0xc8, 0), + go_to_pad(0x06, 0xc8, 2), + go_to_pad(0x05, 0xc8, 0), + go_to_pad(0x04, 0xc8, 2), + go_to_pad(0x07, 0xc8, 0), + go_to_pad(0x0a, 0xc8, 2), + restart(), + end(), +}; + +u8 target1b[] = { + start(), + go_to_pad(0x0b, 0xff, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x09, 0xc8, 2), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x05, 0xc8, 2), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x07, 0xc8, 2), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x0b, 0xc8, 2), + restart(), + end(), +}; + +u8 target1c[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + go_to_pad(0x09, 0xc8, 0), + go_to_pad(0x06, 0xc8, 2), + go_to_pad(0x05, 0xc8, 0), + go_to_pad(0x04, 0xc8, 2), + go_to_pad(0x07, 0xc8, 0), + go_to_pad(0x0a, 0xc8, 2), + go_to_pad(0x0b, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 2), + restart(), + end(), +}; + +u8 target1d[] = { + start(), + go_to_pad(0x04, 0xff, 0), + go_to_pad(0x06, 0xc8, 2), + go_to_pad(0x04, 0xc8, 2), + restart(), + end(), +}; + +u8 target1e[] = { + start(), + go_to_pad(0x06, 0xff, 0), + go_to_pad(0x04, 0xc8, 2), + go_to_pad(0x06, 0xc8, 2), + restart(), + end(), +}; + +u8 target1f[] = { + start(), + go_to_pad(0x07, 0xff, 0), + go_to_pad(0x09, 0xc8, 2), + go_to_pad(0x07, 0xc8, 2), + restart(), + end(), +}; + +u8 target20[] = { + start(), + go_to_pad(0x09, 0xff, 0), + go_to_pad(0x07, 0xc8, 2), + go_to_pad(0x09, 0xc8, 2), + restart(), + end(), +}; + +u8 target21[] = { + start(), + go_to_pad(0x0a, 0xff, 0), + go_to_pad(0x0c, 0xc8, 2), + go_to_pad(0x0a, 0xc8, 2), + restart(), + end(), +}; + +u8 target22[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + go_to_pad(0x0a, 0xc8, 2), + go_to_pad(0x0c, 0xc8, 2), + restart(), + end(), +}; + +u8 target23[] = { + start(), + go_to_pad(0x06, 0xff, 0), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x07, 0xc8, 0), + go_to_pad(0x08, 0xc8, 0), + go_to_pad(0x0b, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x06, 0xc8, 0), + restart(), + end(), +}; + +u8 target24[] = { + start(), + go_to_pad(0x07, 0xff, 0), + go_to_pad(0x08, 0xc8, 0), + go_to_pad(0x0b, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x07, 0xc8, 0), + restart(), + end(), +}; + +u8 target25[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x07, 0xc8, 0), + go_to_pad(0x08, 0xc8, 0), + go_to_pad(0x0b, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + restart(), + end(), +}; + +u8 target26[] = { + start(), + go_to_pad(0x04, 0xff, 0), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x04, 0x1e, 0), + restart(), + end(), +}; + +u8 target27[] = { + start(), + go_to_pad(0x0a, 0xff, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x04, 0x1e, 0), + go_to_pad(0x0a, 0xc8, 0), + restart(), + end(), +}; + +u8 target28[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x04, 0x1e, 0), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + restart(), + end(), +}; + +u8 target29[] = { + start(), + go_to_pad(0x04, 0xff, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target2a[] = { + start(), + go_to_pad(0x05, 0xff, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target2b[] = { + start(), + go_to_pad(0x06, 0xff, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target2c[] = { + start(), + go_to_pad(0x07, 0xff, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target2d[] = { + start(), + go_to_pad(0x08, 0xff, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target2e[] = { + start(), + go_to_pad(0x09, 0xff, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target2f[] = { + start(), + go_to_pad(0x0a, 0xff, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target30[] = { + start(), + go_to_pad(0x0b, 0xff, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target31[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target32[] = { + start(), + go_to_pad(0x04, 0xff, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target33[] = { + start(), + go_to_pad(0x05, 0xff, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target34[] = { + start(), + go_to_pad(0x06, 0xff, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target35[] = { + start(), + go_to_pad(0x07, 0xff, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target36[] = { + start(), + go_to_pad(0x08, 0xff, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target37[] = { + start(), + go_to_pad(0x09, 0xff, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target38[] = { + start(), + go_to_pad(0x0a, 0xff, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target39[] = { + start(), + go_to_pad(0x0b, 0xff, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target3a[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target3b[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + go_to_pad(0x0a, 0xc8, 0), + rotate(1, 1), + cmd_0e(2), + rotate(1, 1), + go_to_pad(0x0c, 0xc8, 0), + rotate(1, 1), + cmd_0e(2), + rotate(1, 1), + restart(), + end(), +}; + +u8 target3c[] = { + start(), + go_to_pad(0x09, 0xff, 0), + go_to_pad(0x07, 0xc8, 0), + rotate(1, 1), + cmd_0e(2), + rotate(1, 1), + go_to_pad(0x09, 0xc8, 0), + rotate(1, 1), + cmd_0e(2), + rotate(1, 1), + restart(), + end(), +}; + +u8 target3d[] = { + start(), + go_to_pad(0x06, 0xff, 0), + go_to_pad(0x04, 0xc8, 0), + rotate(1, 1), + cmd_0e(2), + rotate(1, 1), + go_to_pad(0x06, 0xc8, 0), + rotate(1, 1), + cmd_0e(2), + rotate(1, 1), + restart(), + end(), +}; + +u8 target3e[] = { + start(), + go_to_pad(0x04, 0xff, 0), + rotate(1, 1), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x04, 0xc8, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target3f[] = { + start(), + go_to_pad(0x06, 0xff, 0), + rotate(1, 1), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x06, 0xc8, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target40[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + rotate(1, 1), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target41[] = { + start(), + go_to_pad(0x0a, 0xff, 0), + rotate(1, 1), + go_to_pad(0x04, 0xc8, 0), + go_to_pad(0x06, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x0a, 0xc8, 0), + rotate(1, 1), + cmd_0e(1), + restart(), + end(), +}; + +u8 target42[] = { + start(), + go_to_pad(0x0a, 0xff, 0), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x0a, 0xc8, 0), + restart(), + end(), +}; + +u8 target43[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + go_to_pad(0x0c, 0x64, 0), + go_to_pad(0x0a, 0x64, 0), + go_to_pad(0x0a, 0x64, 0), + go_to_pad(0x0c, 0x64, 0), + restart(), + end(), +}; + +u8 target44[] = { + start(), + go_to_pad(0x04, 0xff, 0), + rotate(1, 0), + go_to_pad(0x04, 0x64, 0), + go_to_pad(0x06, 0x64, 0), + go_to_pad(0x06, 0x64, 0), + go_to_pad(0x04, 0x64, 0), + rotate(1, 0), + restart(), + end(), +}; + +u8 target45[] = { + start(), + go_to_pad(0x04, 0xff, 0), + go_to_pad(0x0a, 0xc8, 0), + go_to_pad(0x04, 0xc8, 0), + restart(), + end(), +}; + +u8 target46[] = { + start(), + go_to_pad(0x0b, 0xff, 0), + go_to_pad(0x05, 0xc8, 0), + go_to_pad(0x0b, 0xc8, 0), + restart(), + end(), +}; + +u8 target47[] = { + start(), + go_to_pad(0x06, 0xff, 0), + go_to_pad(0x0c, 0xc8, 0), + go_to_pad(0x06, 0xc8, 0), + restart(), + end(), +}; + +u8 target48[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + rotate(1, 1), + go_to_pad(0x0a, 0xc8, 0), + rotate(1, 1), + cmd_0e(2), + rotate(1, 1), + go_to_pad(0x0c, 0xc8, 0), + rotate(1, 1), + cmd_0e(2), + restart(), + end(), +}; + +u8 target49[] = { + start(), + go_to_pad(0x04, 0xff, 0), + go_to_pad(0x0a, 0x64, 0), + go_to_pad(0x0c, 0x1e, 0), + go_to_pad(0x06, 0x64, 0), + go_to_pad(0x04, 0x64, 0), + restart(), + end(), +}; + +u8 target4a[] = { + start(), + go_to_pad(0x0a, 0xff, 0), + go_to_pad(0x0c, 0x1e, 0), + go_to_pad(0x06, 0x64, 0), + go_to_pad(0x04, 0x64, 0), + go_to_pad(0x0a, 0x64, 0), + restart(), + end(), +}; + +u8 target4b[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + go_to_pad(0x06, 0x64, 0), + go_to_pad(0x04, 0x64, 0), + go_to_pad(0x0a, 0x64, 0), + go_to_pad(0x0c, 0x1e, 0), + restart(), + end(), +}; + +u8 target4c[] = { + start(), + go_to_pad(0x0a, 0xff, 0), + rotate(1, 0), + cmd_0e(255), + rotate(1, 0), + restart(), + end(), +}; + +u8 target4d[] = { + start(), + go_to_pad(0x0b, 0xff, 0), + rotate(1, 0), + cmd_0e(255), + rotate(1, 0), + restart(), + end(), +}; + +u8 target4e[] = { + start(), + go_to_pad(0x0c, 0xff, 0), + rotate(1, 0), + cmd_0e(255), + rotate(1, 0), + restart(), + end(), +}; + +u8 help00[] = { + start(), + if_bronze(), + hudmsg(0), + wait_until_shoot(), + hudmsg(1), + if_silver(), + hudmsg(5), + if_gold(), + hudmsg(8), + end(), +}; + +u8 help01[] = { + start(), + if_bronze(), + hudmsg(6), + if_silver(), + hudmsg(2), + wait_until_shoot(), + if_gold(), + end(), +}; + +u8 help02[] = { + start(), + if_bronze(), + hudmsg(7), + if_silver(), + hudmsg(3), + hudmsg(4), + if_gold(), + end(), +}; + diff --git a/src/game/game_1a3340.c b/src/game/game_1a3340.c index df4603a41..0260e2265 100644 --- a/src/game/game_1a3340.c +++ b/src/game/game_1a3340.c @@ -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) { diff --git a/src/game/training.c b/src/game/training.c index d69c7fed6..1014e6623 100644 --- a/src/game/training.c +++ b/src/game/training.c @@ -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 diff --git a/src/include/constants.h b/src/include/constants.h index aa58c8028..bd9e8482b 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -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 diff --git a/src/include/firingrange/frcommands.h b/src/include/firingrange/frcommands.h new file mode 100644 index 000000000..04d6d1699 --- /dev/null +++ b/src/include/firingrange/frcommands.h @@ -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 + diff --git a/src/include/game/training.h b/src/include/game/training.h index baf70cddb..b662047e1 100644 --- a/src/include/game/training.h +++ b/src/include/game/training.h @@ -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); diff --git a/src/include/types.h b/src/include/types.h index d1aa83bde..da30f7d13 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -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; diff --git a/tools/buildrom b/tools/buildrom index 4c8e37ebc..b99d980fd 100755 --- a/tools/buildrom +++ b/tools/buildrom @@ -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) diff --git a/tools/extract b/tools/extract index 302a13718..7cf4d7477 100755 --- a/tools/extract +++ b/tools/extract @@ -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, },