From 414a8feb8ea75d433fcdd4111b33276061ce43e9 Mon Sep 17 00:00:00 2001 From: KholdFuzion Date: Fri, 25 Apr 2025 10:11:31 -0400 Subject: [PATCH] Everybody loves a good yearly or so update --- .clang-format | 11 +- .github/workflows/EU.yml | 18 +- .github/workflows/JPN.yml | 20 +- .github/workflows/main.yml | 15 +- .gitignore | 7 +- CppProperties.json | 436 +- Dockerfile | 20 + Makefile | 696 +- allbuild.sh | 26 + assets/font_dl.c | 34 +- assets/font_dl.h | 6 +- assets/images.def | 118 +- assets/obseg/Makefile.setup | 3 +- assets/obseg/brief/UbriefarchZ.c | 16 +- assets/obseg/brief/UbriefarkZ.c | 18 +- assets/obseg/brief/UbriefaztZ.c | 12 +- assets/obseg/brief/UbriefcaveZ.c | 18 +- assets/obseg/brief/UbriefcontrolZ.c | 14 +- assets/obseg/brief/UbriefcradZ.c | 12 +- assets/obseg/brief/UbriefcrypZ.c | 12 +- assets/obseg/brief/UbriefdamZ.c | 16 +- assets/obseg/brief/UbriefdepoZ.c | 18 +- assets/obseg/brief/UbriefdestZ.c | 16 +- assets/obseg/brief/UbriefjunZ.c | 16 +- assets/obseg/brief/UbriefpeteZ.c | 14 +- assets/obseg/brief/UbriefrunZ.c | 16 +- assets/obseg/brief/UbriefsevbZ.c | 18 +- assets/obseg/brief/UbriefsevbunkerZ.c | 18 +- assets/obseg/brief/UbriefsevxZ.c | 16 +- assets/obseg/brief/UbriefsevxbZ.c | 16 +- assets/obseg/brief/UbriefsiloZ.c | 18 +- assets/obseg/brief/UbriefstatueZ.c | 18 +- assets/obseg/brief/UbrieftraZ.c | 18 +- assets/obseg/gun/fist/gunFileRecord.inc.c | 2 +- assets/obseg/gun/gunModelFileRecord.inc.c | 172 +- assets/obseg/gun/knife/gunFileRecord.inc.c | 2 +- .../prop/alarm1/ExplosionDetailsRecord.inc.c | 10 +- assets/obseg/prop/alarm1/Model.c | 51 +- .../obseg/prop/alarm1/ModelFileHeader.inc.c | 10 +- assets/obseg/prop/alarm1/propFileRecord.inc.c | 7 +- assets/obseg/prop/cctv/Model.c | 157 +- assets/obseg/prop/cctv/propFileRecord.inc.c | 6 +- assets/obseg/setup/UsetuparchZ.c | 12 +- assets/obseg/stan/Tbg_sev_all_p_stanZ.c | 5 +- assets/obseg/text/LgunE.h | 448 +- assets/obseg/text/LmiscE.h | 141 +- assets/obseg/text/LmpmenuE.h | 72 +- assets/obseg/text/LmpweaponsE.h | 28 +- assets/obseg/text/LoptionE.h | 128 +- assets/obseg/text/LpropobjE.h | 130 +- assets/obseg/text/LtitleE.c | 8 +- assets/obseg/text/LtitleE.h | 580 +- build/test.c | 4751 --------- checksums.txt | 715 -- diff.py | 1507 --- ge007.ld | 20 +- include/CPPLib.h | 260 +- include/Makefile.targets | 206 + include/assert.h | 4 +- include/gbi_extension.h | 6 + include/macros.inc | 12 + include/make/Gui.make | 82 + include/make/VT100Codes.make | 83 + include/make/cmd.make | 86 + ld/game.bss.ld.inc | 2 +- ld/game.data.ld.inc | 2 +- ld/game.rodata.ld.inc | 2 +- ld/game.text.ld.inc | 2 +- readme-build.md | 6 +- readme.md | 34 +- rsp/graphics/gmain.s | 1545 +++ asmdiff.sh => scripts/asmdiff.sh | 0 clean_baserom.sh => scripts/clean_baserom.sh | 1 + .../extract_asp_gsp_rsp.sh | 14 +- .../extract_baserom.u.sh | 6 +- extract_cdata.sh => scripts/extract_cdata.sh | 0 .../extract_diff.e.sh | 2 +- .../extract_diff.j.sh | 2 +- filediff.e.csv => scripts/filediff.e.csv | 14 +- filediff.j.csv => scripts/filediff.j.csv | 16 +- filelist.e.csv => scripts/filelist.e.csv | 0 filelist.j.csv => scripts/filelist.j.csv | 0 filelist.u.csv => scripts/filelist.u.csv | 0 .../ge007.e-test_basis.csv | 10 +- .../ge007.j-test_basis.csv | 10 +- .../ge007.u-test_basis.csv | 497 +- .../make/build_hashtable.sh | 60 +- scripts/make/build_tools.sh | 15 + scripts/make/checksum.sh | 9 + scripts/make/clean_nuke.sh | 30 + scripts/make/create_directories.sh | 65 + scripts/make/default/checksum.sh | 19 + scripts/make/local_template/checksum.sh | 65 + scripts/make/rebuild_allver_hashtables.sh | 11 + rename_sym.sh => scripts/rename_sym.sh | 0 .../show_build_offsets.sh | 0 scripts/test_files.sh | 110 + .../test_files_readme.md | 224 +- scripts/wsl_32bit_enable.sh | 22 + src/aicommands.def | 910 +- src/aicommands2.h | 8676 ++++++++--------- src/aspboot.s | 4 +- src/audi.c | 13 +- src/bondaicommands.h | 191 +- src/bondconstants.h | 523 +- src/bondgame.h | 6 + src/bondtypes.h | 432 +- src/boss.c | 68 +- src/boss.h | 2 +- src/crash.c | 8 +- src/crash.h | 2 +- src/deb.c | 2 +- src/debugmenu.c | 35 +- src/decompressbuffer.c | 7 - src/fr.c | 253 +- src/game/alloc_window_pieces.c | 8 +- src/game/bg.c | 1797 ++-- src/game/bg.h | 26 +- src/game/bg2.c | 259 +- src/game/blood_animation.c | 4 +- src/game/bondhead.c | 184 +- src/game/bondhead.h | 6 +- src/game/bondinv.c | 36 +- src/game/bondview.c | 4268 +++----- src/game/bondview.h | 515 +- src/game/bondview_r.c | 61 +- src/game/bondview_r.h | 2 + src/game/bondwalk2.c | 96 +- src/game/bondwalk2.h | 2 +- src/game/cheat_buttons.c | 234 +- src/game/cheat_buttons.h | 3 + src/game/chr.c | 1333 ++- src/game/chr.h | 16 +- src/game/chr_b.c | 5 +- src/game/chrai.c | 203 +- src/game/chrai.h | 15 +- src/game/chraidata.c | 299 +- src/game/chrlv.c | 708 +- src/game/chrlv.h | 2 +- src/game/chrobjhandler.c | 6169 ++++++------ src/game/chrobjhandler.h | 20 +- src/game/chrprop.c | 2242 ++--- src/game/cleanexplosions.c | 26 +- src/game/cleanup_guard_data.c | 102 +- src/game/cleanup_objectives.c | 120 +- src/game/cleanup_objects.c | 195 +- src/game/deb_loadallmodels.c | 5 + src/game/debugmenu_08FE00.c | 38 +- src/game/debugmenu_handler.c | 246 +- src/game/dyn.c | 4 +- src/game/ejectedcartridges.c | 2 +- src/game/explosions.c | 6868 ++++--------- src/game/explosions.h | 214 +- src/game/file.c | 16 +- src/game/file.h | 21 +- src/game/file2.c | 507 +- src/game/file2.h | 10 +- src/game/fog.c | 611 +- src/game/front.c | 2203 +++-- src/game/front.h | 32 +- src/game/gun.c | 329 +- src/game/gun.h | 5 +- src/game/image.c | 243 +- src/game/image.h | 2 + src/game/image_bank.c | 2 +- src/game/image_bank.h | 3 + src/game/indy_commands.c | 589 +- src/game/indy_commands.h | 4 +- src/game/initBondDATA.c | 862 +- src/game/initBondDATA.h | 2 +- src/game/initBondDATAdefaults.c | 33 +- src/game/initBondDATAdefaults.h | 3 + src/game/initactorpropstuff.c | 25 +- src/game/initanitable.c | 135 +- src/game/initexplosioncasing.c | 36 +- src/game/initgamedata.c | 24 +- src/game/initguards.c | 6 +- src/game/initimages.c | 96 +- src/game/initintromatrices.c | 14 +- src/game/inititemslots.c | 2 +- src/game/inititemslots.h | 1 + src/game/initmenus.c | 8 +- src/game/initmttex.c | 4 +- src/game/initobjects.c | 16 +- src/game/initobjects.h | 3 + src/game/initpathtablelinks.c | 325 +- src/game/initpathtablesomething.c | 95 +- src/game/initpathtablesomething.h | 2 +- src/game/initunk_0009E0.c | 8 +- src/game/initunk_005450.c | 35 +- src/game/initunk_005520.c | 197 +- src/game/lightfixture.c | 12 +- src/game/loadobjectmodel.c | 40 +- src/game/loadobjectmodel.h | 3 +- src/game/lvl.c | 286 +- src/game/lvl_text.c | 38 +- src/game/lvl_text.h | 3 +- src/game/math_sincos.s | 4 +- src/game/matrixmath_misc.c | 10 +- src/game/model.c | 1090 ++- src/game/mp_music.c | 2222 +---- src/game/mp_watch.c | 69 +- src/game/mp_weapon.c | 28 +- src/game/mp_weapon.h | 18 +- src/game/music_0D2720.c | 141 +- src/game/music_0D2720.h | 1 + src/game/ob.c | 40 +- src/game/ob.h | 4 + src/game/objecthandler.c | 257 +- src/game/objecthandler.h | 90 +- src/game/objecthandler_2.c | 156 +- src/game/objective.c | 360 +- src/game/objective.h | 6 + src/game/objective_status.c | 252 +- src/game/objective_status.h | 12 +- src/game/objective_status2.c | 2 +- src/game/othermodemicrocode.c | 1527 +-- src/game/othermodemicrocode.h | 7 +- src/game/padhalllv.h | 3 +- src/game/player.c | 6 +- src/game/player_2.c | 198 +- src/game/prop.c | 3760 ++++--- src/game/radar.c | 1026 +- src/game/ramromreplay.c | 22 +- src/game/room_model_buffer.c | 8 - src/game/room_model_buffer.h | 7 - src/game/rsp.c | 2 +- src/game/spectrum.c | 6 + src/game/speedgraphrenderer.c | 261 + src/game/speedgraphrenderer.h | 13 + src/game/stan.c | 1564 +-- src/game/stan.h | 10 +- src/game/textrelated.c | 92 +- src/game/textrelated.h | 5 + src/game/title.c | 745 +- src/game/title.h | 22 +- src/game/unk_01B240.c | 4 +- src/game/unk_01BAE0.c | 514 +- src/game/unk_01BAE0.h | 11 + src/game/unk_091080.c | 650 +- src/game/unk_091080.h | 2 +- src/game/unk_092890.c | 284 +- src/game/unk_09B7A0.c | 9 +- src/game/unk_0A1DA0.c | 182 +- src/game/unk_0A1DA0.h | 6 +- src/game/unk_0B3200.c | 206 +- src/game/unk_0B3200.h | 6 +- src/game/unk_0BC530.c | 552 +- src/game/unk_0BC530.h | 9 +- src/game/unk_0C0A70.c | 65 +- src/game/unk_0C0A70.h | 16 +- src/game/unk_0CC4C0.c | 481 +- src/game/unk_0CC4C0.h | 11 +- src/game/unk_0D1AC0.c | 650 -- src/game/viewport.c | 2 +- src/game/watch.c | 338 +- src/game/watch.h | 10 +- src/gspboot.s | 4 +- src/init.c | 3 +- src/joy.c | 33 +- src/libultra/gu/sqrtf.s | 2 +- src/libultra/libc/bcmp.s | 2 +- src/libultra/libc/bcopy.s | 2 +- src/libultra/libc/bzero.s | 2 +- src/libultra/os/getcount.s | 1 + src/libultra/os/invaldcache.s | 1 + src/libultra/os/invalicache.s | 1 + src/libultra/os/writebackdcacheall.s | 1 + src/libultrare/audio/env.s | 13 +- src/mema.c | 184 +- src/mema.h | 2 +- src/memp.c | 182 +- src/memp.h | 17 +- src/music.c | 2 +- src/ramrom.c | 16 +- src/rmon.c | 10 +- src/rspboot.s | 3 + src/sched.c | 30 +- src/sched.h | 1 + src/snd.c | 214 +- src/speed_graph.c | 620 +- src/speed_graph.h | 15 +- src/tlb_hardwire.s | 1 + src/tlb_manage.c | 237 +- src/tlb_manage.h | 4 +- src/tlb_resolve.s | 13 +- test_files.sh | 85 - tools/aiParse.c | 6841 +++++++++---- tools/asm-processor/LICENSE | 24 + tools/asm-processor/README.md | 139 + tools/asm-processor/add-test.sh | 7 + .../asm_processor.py | 345 +- tools/asm-processor/build.py | 145 + tools/asm-processor/compile-test.sh | 41 + tools/asm-processor/dist-workspace.toml | 13 + .../include-stdin.c | 0 tools/asm-processor/mypy.ini | 3 + tools/asm-processor/prelude.inc | 55 + tools/asm-processor/run-tests.sh | 23 + tools/asm-processor/rust/Cargo.lock | 236 + tools/asm-processor/rust/Cargo.toml | 24 + tools/asm-processor/rust/src/main.rs | 518 + tools/asm-processor/rust/src/postprocess.rs | 1312 +++ tools/asm-processor/rust/src/preprocess.rs | 961 ++ tools/asm-processor/tests/ascii.c | 19 + tools/asm-processor/tests/ascii.objdump | 29 + tools/asm-processor/tests/comments.c | 6 + tools/asm-processor/tests/comments.objdump | 21 + tools/asm-processor/tests/custom-prelude.c | 17 + .../tests/custom-prelude.objdump | 21 + tools/asm-processor/tests/custom-prelude.s | 14 + tools/asm-processor/tests/euc_jp_wavedash.c | 3 + .../tests/euc_jp_wavedash.objdump | 26 + tools/asm-processor/tests/force.c | 17 + tools/asm-processor/tests/force.objdump | 47 + .../tests/include_file.asmproc.d | 12 + tools/asm-processor/tests/include_file.c | 8 + .../asm-processor/tests/include_file.objdump | 27 + tools/asm-processor/tests/include_file_1.s | 7 + tools/asm-processor/tests/include_file_2.s | 7 + tools/asm-processor/tests/include_file_3.s | 7 + tools/asm-processor/tests/include_file_4.s | 1 + tools/asm-processor/tests/kpic-o1.c | 93 + tools/asm-processor/tests/kpic-o1.objdump | 46 + tools/asm-processor/tests/kpic-o2.c | 92 + tools/asm-processor/tests/kpic-o2.objdump | 46 + tools/asm-processor/tests/label-sameline.c | 7 + .../tests/label-sameline.objdump | 25 + tools/asm-processor/tests/large.c | 164 + tools/asm-processor/tests/large.objdump | 58 + tools/asm-processor/tests/late_rodata_align.c | 80 + .../tests/late_rodata_align.objdump | 51 + .../asm-processor/tests/late_rodata_doubles.c | 83 + .../tests/late_rodata_doubles.objdump | 55 + .../tests/late_rodata_doubles_mips1.c | 86 + .../tests/late_rodata_doubles_mips1.objdump | 52 + tools/asm-processor/tests/late_rodata_jtbl.c | 153 + .../tests/late_rodata_jtbl.objdump | 110 + .../tests/late_rodata_jtbl_mips1.c | 155 + .../tests/late_rodata_jtbl_mips1.objdump | 110 + .../tests/late_rodata_misaligned_doubles.c | 77 + .../late_rodata_misaligned_doubles.objdump | 56 + .../tests/line-continuation-separate-file.s | 4 + .../tests/line-continuation.asmproc.d | 3 + tools/asm-processor/tests/line-continuation.c | 22 + .../tests/line-continuation.objdump | 30 + tools/asm-processor/tests/o0.c | 28 + tools/asm-processor/tests/o0.objdump | 44 + tools/asm-processor/tests/o2.c | 26 + tools/asm-processor/tests/o2.objdump | 40 + tools/asm-processor/tests/pascal.objdump | 137 + tools/asm-processor/tests/pascal.p | 95 + tools/asm-processor/tests/static-global.c | 35 + .../asm-processor/tests/static-global.objdump | 60 + tools/asm-processor/tests/static.c | 32 + tools/asm-processor/tests/static.objdump | 58 + tools/asm-processor/tests/test1.c | 71 + tools/asm-processor/tests/test1.objdump | 54 + tools/asm-processor/tests/test2.c | 69 + tools/asm-processor/tests/test2.objdump | 76 + tools/asm-processor/tests/test3.c | 70 + tools/asm-processor/tests/test3.objdump | 64 + tools/asmpreproc/asm-processor.py | 1150 --- tools/asmpreproc/compile.sh | 21 - tools/asmpreproc/macros.inc | 7 - tools/asmpreproc/prelude.s | 5 - tools/cmdbuilder.c | 141 +- tools/data_compress.sh | 2 +- tools/diff.py | 4102 ++++++++ diff_settings.py => tools/diff_settings.py | 2 +- tools/ge-stats-deprecated.py | 38 +- tools/ge-stats.py | 30 +- tools/mktex/Makefile | 12 +- 373 files changed, 46731 insertions(+), 50709 deletions(-) create mode 100644 Dockerfile create mode 100644 allbuild.sh delete mode 100644 build/test.c delete mode 100644 checksums.txt delete mode 100755 diff.py create mode 100644 include/Makefile.targets create mode 100644 include/make/Gui.make create mode 100644 include/make/VT100Codes.make create mode 100644 include/make/cmd.make create mode 100644 rsp/graphics/gmain.s rename asmdiff.sh => scripts/asmdiff.sh (100%) mode change 100755 => 100644 rename clean_baserom.sh => scripts/clean_baserom.sh (86%) mode change 100755 => 100644 rename extract_asp_gsp_rsp.sh => scripts/extract_asp_gsp_rsp.sh (99%) mode change 100755 => 100644 rename extract_baserom.u.sh => scripts/extract_baserom.u.sh (95%) mode change 100755 => 100644 rename extract_cdata.sh => scripts/extract_cdata.sh (100%) mode change 100755 => 100644 rename extract_diff.e.sh => scripts/extract_diff.e.sh (97%) mode change 100755 => 100644 rename extract_diff.j.sh => scripts/extract_diff.j.sh (97%) mode change 100755 => 100644 rename filediff.e.csv => scripts/filediff.e.csv (94%) rename filediff.j.csv => scripts/filediff.j.csv (72%) rename filelist.e.csv => scripts/filelist.e.csv (100%) rename filelist.j.csv => scripts/filelist.j.csv (100%) rename filelist.u.csv => scripts/filelist.u.csv (100%) rename ge007.e-test_basis.csv => scripts/ge007.e-test_basis.csv (99%) rename ge007.j-test_basis.csv => scripts/ge007.j-test_basis.csv (99%) rename ge007.u-test_basis.csv => scripts/ge007.u-test_basis.csv (94%) rename make_test_files_basis.sh => scripts/make/build_hashtable.sh (94%) mode change 100755 => 100644 create mode 100644 scripts/make/build_tools.sh create mode 100644 scripts/make/checksum.sh create mode 100644 scripts/make/clean_nuke.sh create mode 100644 scripts/make/create_directories.sh create mode 100644 scripts/make/default/checksum.sh create mode 100644 scripts/make/local_template/checksum.sh create mode 100644 scripts/make/rebuild_allver_hashtables.sh rename rename_sym.sh => scripts/rename_sym.sh (100%) mode change 100755 => 100644 rename show_build_offsets.sh => scripts/show_build_offsets.sh (100%) mode change 100755 => 100644 create mode 100644 scripts/test_files.sh rename test_files_readme.md => scripts/test_files_readme.md (91%) create mode 100644 scripts/wsl_32bit_enable.sh delete mode 100644 src/decompressbuffer.c delete mode 100644 src/game/room_model_buffer.c delete mode 100644 src/game/room_model_buffer.h create mode 100644 src/game/speedgraphrenderer.c create mode 100644 src/game/speedgraphrenderer.h create mode 100644 src/game/unk_01BAE0.h delete mode 100644 src/game/unk_0D1AC0.c delete mode 100755 test_files.sh create mode 100644 tools/asm-processor/LICENSE create mode 100644 tools/asm-processor/README.md create mode 100644 tools/asm-processor/add-test.sh rename tools/{asmpreproc => asm-processor}/asm_processor.py (85%) mode change 100755 => 100644 create mode 100644 tools/asm-processor/build.py create mode 100644 tools/asm-processor/compile-test.sh create mode 100644 tools/asm-processor/dist-workspace.toml rename tools/{asmpreproc => asm-processor}/include-stdin.c (100%) create mode 100644 tools/asm-processor/mypy.ini create mode 100644 tools/asm-processor/prelude.inc create mode 100644 tools/asm-processor/run-tests.sh create mode 100644 tools/asm-processor/rust/Cargo.lock create mode 100644 tools/asm-processor/rust/Cargo.toml create mode 100644 tools/asm-processor/rust/src/main.rs create mode 100644 tools/asm-processor/rust/src/postprocess.rs create mode 100644 tools/asm-processor/rust/src/preprocess.rs create mode 100644 tools/asm-processor/tests/ascii.c create mode 100644 tools/asm-processor/tests/ascii.objdump create mode 100644 tools/asm-processor/tests/comments.c create mode 100644 tools/asm-processor/tests/comments.objdump create mode 100644 tools/asm-processor/tests/custom-prelude.c create mode 100644 tools/asm-processor/tests/custom-prelude.objdump create mode 100644 tools/asm-processor/tests/custom-prelude.s create mode 100644 tools/asm-processor/tests/euc_jp_wavedash.c create mode 100644 tools/asm-processor/tests/euc_jp_wavedash.objdump create mode 100644 tools/asm-processor/tests/force.c create mode 100644 tools/asm-processor/tests/force.objdump create mode 100644 tools/asm-processor/tests/include_file.asmproc.d create mode 100644 tools/asm-processor/tests/include_file.c create mode 100644 tools/asm-processor/tests/include_file.objdump create mode 100644 tools/asm-processor/tests/include_file_1.s create mode 100644 tools/asm-processor/tests/include_file_2.s create mode 100644 tools/asm-processor/tests/include_file_3.s create mode 100644 tools/asm-processor/tests/include_file_4.s create mode 100644 tools/asm-processor/tests/kpic-o1.c create mode 100644 tools/asm-processor/tests/kpic-o1.objdump create mode 100644 tools/asm-processor/tests/kpic-o2.c create mode 100644 tools/asm-processor/tests/kpic-o2.objdump create mode 100644 tools/asm-processor/tests/label-sameline.c create mode 100644 tools/asm-processor/tests/label-sameline.objdump create mode 100644 tools/asm-processor/tests/large.c create mode 100644 tools/asm-processor/tests/large.objdump create mode 100644 tools/asm-processor/tests/late_rodata_align.c create mode 100644 tools/asm-processor/tests/late_rodata_align.objdump create mode 100644 tools/asm-processor/tests/late_rodata_doubles.c create mode 100644 tools/asm-processor/tests/late_rodata_doubles.objdump create mode 100644 tools/asm-processor/tests/late_rodata_doubles_mips1.c create mode 100644 tools/asm-processor/tests/late_rodata_doubles_mips1.objdump create mode 100644 tools/asm-processor/tests/late_rodata_jtbl.c create mode 100644 tools/asm-processor/tests/late_rodata_jtbl.objdump create mode 100644 tools/asm-processor/tests/late_rodata_jtbl_mips1.c create mode 100644 tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump create mode 100644 tools/asm-processor/tests/late_rodata_misaligned_doubles.c create mode 100644 tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump create mode 100644 tools/asm-processor/tests/line-continuation-separate-file.s create mode 100644 tools/asm-processor/tests/line-continuation.asmproc.d create mode 100644 tools/asm-processor/tests/line-continuation.c create mode 100644 tools/asm-processor/tests/line-continuation.objdump create mode 100644 tools/asm-processor/tests/o0.c create mode 100644 tools/asm-processor/tests/o0.objdump create mode 100644 tools/asm-processor/tests/o2.c create mode 100644 tools/asm-processor/tests/o2.objdump create mode 100644 tools/asm-processor/tests/pascal.objdump create mode 100644 tools/asm-processor/tests/pascal.p create mode 100644 tools/asm-processor/tests/static-global.c create mode 100644 tools/asm-processor/tests/static-global.objdump create mode 100644 tools/asm-processor/tests/static.c create mode 100644 tools/asm-processor/tests/static.objdump create mode 100644 tools/asm-processor/tests/test1.c create mode 100644 tools/asm-processor/tests/test1.objdump create mode 100644 tools/asm-processor/tests/test2.c create mode 100644 tools/asm-processor/tests/test2.objdump create mode 100644 tools/asm-processor/tests/test3.c create mode 100644 tools/asm-processor/tests/test3.objdump delete mode 100755 tools/asmpreproc/asm-processor.py delete mode 100644 tools/asmpreproc/compile.sh delete mode 100644 tools/asmpreproc/macros.inc delete mode 100644 tools/asmpreproc/prelude.s create mode 100644 tools/diff.py rename diff_settings.py => tools/diff_settings.py (77%) mode change 100755 => 100644 diff --git a/.clang-format b/.clang-format index c208389..f9266c6 100644 --- a/.clang-format +++ b/.clang-format @@ -54,7 +54,7 @@ AllowShortLambdasOnASingleLine: All # allman should be used, but if no brace supplied dont break AllowShortLoopsOnASingleLine: true -# deprecated +# deprecated AlwaysBreakAfterDefinitionReturnType: None # no extra breaks after return @@ -66,7 +66,7 @@ AlwaysBreakBeforeMultilineStrings: true # N/A to C AlwaysBreakTemplateDeclarations: No -# +# # AttributeMacros: # if args broken, place each on new line @@ -75,7 +75,7 @@ BinPackParameters: false BitFieldColonSpacing: Both -BraceWrapping: +BraceWrapping: AfterCaseLabel: true AfterClass: true AfterControlStatement: Always @@ -124,7 +124,6 @@ Cpp11BracedListStyle: true # use specified line ending and pointer allignment DeriveLineEnding: false -DerivePointerAlignment: false DisableFormat: false @@ -142,7 +141,7 @@ ForEachMacros: ['FOREACH', 'BOOST_FOREACH'] # dont resort includes IncludeBlocks: Preserve -IncludeCategories: +IncludeCategories: - Regex: ^"(llvm|llvm-c|clang|clang-c)/ Priority: 2 - Regex: ^(<|"(gtest|gmock|isl|json)/) @@ -156,7 +155,7 @@ IndentCaseBlocks: false IndentCaseLabels: true IndentExternBlock: AfterExternBlock IndentGotoLabels: false -IndentPPDirectives: AfterHash +IndentPPDirectives: BeforeHash IndentWrappedFunctionNames: true # remove empty lines diff --git a/.github/workflows/EU.yml b/.github/workflows/EU.yml index 5135844..1c19672 100644 --- a/.github/workflows/EU.yml +++ b/.github/workflows/EU.yml @@ -21,6 +21,13 @@ jobs: runs-on: ubuntu-20.04 steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Bypass Cloudflare for GitHub Action + uses: xiaotianxt/bypass-cloudflare-for-github-action@v1.1.1 + with: + cf_zone_id: ${{ secrets.CF_ZONE_ID }} + cf_api_token: ${{ secrets.CF_API_TOKEN }} - uses: actions/checkout@v2 - name: Install Depedencies @@ -48,13 +55,13 @@ jobs: run: wget -O baserom.e.z64 $FILE_EU - name: Extract US Assets - run: ./extract_baserom.u.sh + run: ./scripts/extract_baserom.u.sh - name: Extract EU Assets - run: ./extract_diff.e.sh + run: ./scripts/extract_diff.e.sh - name: Make EU - run: make -j IDO_RECOMP=YES VERSION=EU VERBOSE=1 + run: make all -j IDO_RECOMP=YES VERSION=EU VERBOSE=1 - name: Make report run: make -C tools/report @@ -64,7 +71,7 @@ jobs: - name: Upload output files - uses: dmnemec/copy_file_to_another_repo_action@v1.0.4 + uses: AXDOOMER/copy_file_to_another_repo_action@e54ae5087212906dac7ef96dee19e31190913257 env: API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} @@ -75,7 +82,6 @@ jobs: destination_repo: 'kholdfuzion/goldeneyestatus' user_email: $API_TOKEN_EMAIL user_name: $API_TOKEN_USER - source_file: | - tools/report/EU.htm + source_file: tools/report/EU.htm #need way of telling report that EU passed/failed diff --git a/.github/workflows/JPN.yml b/.github/workflows/JPN.yml index f1764e6..70f034b 100644 --- a/.github/workflows/JPN.yml +++ b/.github/workflows/JPN.yml @@ -21,6 +21,13 @@ jobs: runs-on: ubuntu-20.04 steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Bypass Cloudflare for GitHub Action + uses: xiaotianxt/bypass-cloudflare-for-github-action@v1.1.1 + with: + cf_zone_id: ${{ secrets.CF_ZONE_ID }} + cf_api_token: ${{ secrets.CF_API_TOKEN }} - uses: actions/checkout@v2 - name: Install Depedencies @@ -48,13 +55,13 @@ jobs: run: wget -O baserom.j.z64 $FILE_JP - name: Extract US Assets - run: ./extract_baserom.u.sh + run: ./scripts/extract_baserom.u.sh - name: Extract JP Assets - run: ./extract_diff.j.sh + run: ./scripts/extract_diff.j.sh - name: Make JP - run: make -j IDO_RECOMP=YES VERSION=JP VERBOSE=1 + run: make all -j IDO_RECOMP=YES VERSION=JP VERBOSE=1 - name: Make report run: make -C tools/report @@ -64,7 +71,7 @@ jobs: - name: Upload output files - uses: dmnemec/copy_file_to_another_repo_action@v1.0.4 + uses: AXDOOMER/copy_file_to_another_repo_action@e54ae5087212906dac7ef96dee19e31190913257 env: API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} @@ -75,7 +82,6 @@ jobs: destination_repo: 'kholdfuzion/goldeneyestatus' user_email: $API_TOKEN_EMAIL user_name: $API_TOKEN_USER - source_file: | - tools/report/JPN.htm - + source_file: tools/report/JPN.htm + #need way of telling report that JP passed/failed diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 41ff72d..0f712f6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -33,10 +33,15 @@ jobs: echo "::set-output name=all::$(git diff --name-only --diff-filter=ACMRT ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | xargs)" buildus: - runs-on: ubuntu-20.04 - steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Bypass Cloudflare for GitHub Action + uses: xiaotianxt/bypass-cloudflare-for-github-action@v1.1.1 + with: + cf_zone_id: ${{ secrets.CF_ZONE_ID }} + cf_api_token: ${{ secrets.CF_API_TOKEN }} - uses: actions/checkout@v2 # with: # fetch-depth: 2 @@ -69,10 +74,10 @@ jobs: - name: Extract US Assets #if: steps.cache-assets.outputs.cache-hit != 'true' - run: ./extract_baserom.u.sh + run: ./scripts/extract_baserom.u.sh - name: Make US - run: make -j IDO_RECOMP=YES VERSION=US VERBOSE=1 + run: make all -j IDO_RECOMP=YES VERSION=US VERBOSE=1 - name: Make report run: make -C tools/report @@ -105,7 +110,7 @@ jobs: # path: tools/report/index.html - name: Upload output files - uses: dmnemec/copy_file_to_another_repo_action@v1.0.4 + uses: AXDOOMER/copy_file_to_another_repo_action@e54ae5087212906dac7ef96dee19e31190913257 env: API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }} diff --git a/.gitignore b/.gitignore index 9d8537f..0768e66 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,7 @@ branchdiff_report.txt 021990.bin 0219D0.bin -# Assets +# Assets assets/animationtable_data.bin assets/animationtable_entries.bin assets/font/*.bin @@ -61,7 +61,7 @@ assets/obseg/text/[eju]/*.bin assets/obseg/text/[eju]/*.c assets/ramrom/*.bin assets/ramrom/[eju]/*.bin -# bin is required, but lets prevent accidental deletion +# bin is required, but lets prevent accidental deletion bin/* build/* build-*/* @@ -107,3 +107,6 @@ assets/obseg/em/data/pssst.seg assets/obseg/em/data/sabre.seg assets/obseg/em/data/spec_rom.seg assets/obseg/em/data/under.seg + +scripts/local/ +scripts/make/local/ diff --git a/CppProperties.json b/CppProperties.json index c4379a8..09ffa04 100644 --- a/CppProperties.json +++ b/CppProperties.json @@ -1,203 +1,237 @@ { - "configurations": [ - { - "name": "MIPS2-DEBUG", - "configurationType": "Debug", - "generator": "Unix Makefiles", - "compilerPath": "", - "cStandard": "c89", - "includePath": [ /*INCLUDE := -I . -I include -I include/ultra64 -I include/PR -I src -I src/game -I src/inflate*/ - "${workspaceRoot}", - "${workspaceRoot}\\include", - "${workspaceRoot}\\src", - "${workspaceRoot}\\src\\game", - "${workspaceRoot}\\src\\inflate" - ], - "defines": [ - "DEBUG", - "TRI4_Ext", - "VERSION_US", - "TARGET_N64", /* IDO 5.3 Defs below */ - "_MIPS_FPSET=16", - "_MIPS_ISA=2", - "_ABIO32=1", - "_MIPS_SIM=_ABIO32", - "_MIPS_SZINT=32", - "_MIPS_SZLONG=32", - "_MIPS_SZPTR=32", - "__EXTENSIONS__", - "LANGUAGE_C", - "_LANGUAGE_C", - "__INLINE_INTRINSICS", - "sgi", - "__sgi", - "unix", - "mips", - "host_mips", - "__unix", - "__host_mips", - "_SVR4_SOURCE", - "_MODERN_C", - "_SGI_SOURCE", - "__DSO__", - "SYSTYPE_SVR4", - "_SYSTYPE_SVR4", - "_LONGLONG", - "__mips=2", - "_MIPSEB", - "MIPSEB", - "__STDC__=1" - ], - "undefines": [ "__cplusplus" ] - }, - { - "name": "MIPS2-FINAL US", - "configurationType": "Release", - "generator": "Unix Makefiles", - "cStandard": "c89", - "includePath": [ - "${workspaceRoot}", - "${workspaceRoot}\\include", - "${workspaceRoot}\\src", - "${workspaceRoot}\\src\\game", - "${workspaceRoot}\\src\\inflate" - ], - "defines": [ - "TRI4_Ext", - "VERSION_US", - "TARGET_N64", /* IDO 5.3 Defs below */ - - "_MIPS_FPSET=16", - "_MIPS_ISA=2", - "_ABIO32=1", - "_MIPS_SIM=_ABIO32", - "_MIPS_SZINT=32", - "_MIPS_SZLONG=32", - "_MIPS_SZPTR=32", - "__EXTENSIONS__", - "LANGUAGE_C", - "_LANGUAGE_C", - "__INLINE_INTRINSICS", - "sgi", - "__sgi", - "unix", - "mips", - "host_mips", - "__unix", - "__host_mips", - "_SVR4_SOURCE", - "_MODERN_C", - "_SGI_SOURCE", - "__DSO__", - "SYSTYPE_SVR4", - "_SYSTYPE_SVR4", - "_LONGLONG", - "__mips=2", - "_MIPSEB", - "MIPSEB", - "__STDC__=1" - ], - "undefines": [ "__cplusplus" ] - }, - { - "name": "LibUltra-Debug", - "configurationType": "Release", - "generator": "Unix Makefiles", - "cStandard": "c89", - "includePath": [/*include -I include/PR -I src/libultra*/ - "${workspaceRoot}", - "${workspaceRoot}\\include", - "${workspaceRoot}\\include\\PR", - "${workspaceRoot}\\src\\libultrare", - "${workspaceRoot}\\src\\libultra" - ], - "defines": [ - "_DEBUG", - "TRI4_Ext", - "VERSION_US", - "TARGET_N64", /* IDO 5.3 Defs below */ - - "_MIPS_FPSET=16", - "_MIPS_ISA=2", - "_ABIO32=1", - "_MIPS_SIM=_ABIO32", - "_MIPS_SZINT=32", - "_MIPS_SZLONG=32", - "_MIPS_SZPTR=32", - "__EXTENSIONS__", - "LANGUAGE_C", - "_LANGUAGE_C", - "__INLINE_INTRINSICS", - "sgi", - "__sgi", - "unix", - "mips", - "host_mips", - "__unix", - "__host_mips", - "_SVR4_SOURCE", - "_MODERN_C", - "_SGI_SOURCE", - "__DSO__", - "SYSTYPE_SVR4", - "_SYSTYPE_SVR4", - "_LONGLONG", - "__mips=2", - "_MIPSEB", - "MIPSEB", - "__STDC__=1" - ], - "undefines": [ "__cplusplus" ] - }, - { - "name": "LibUltra-FINAL", - "configurationType": "Release", - "generator": "Unix Makefiles", - "cStandard": "c89", - "includePath": [ - "${workspaceRoot}", - "${workspaceRoot}\\include", - "${workspaceRoot}\\include\\PR", - "${workspaceRoot}\\src\\libultrare", - "${workspaceRoot}\\src\\libultra" - ], - "defines": [ - "_FINALROM", - "TRI4_Ext", - "VERSION_US", - "TARGET_N64",/* IDO 5.3 Defs below */ - - "_MIPS_FPSET=16", - "_MIPS_ISA=2", - "_ABIO32=1", - "_MIPS_SIM=_ABIO32", - "_MIPS_SZINT=32", - "_MIPS_SZLONG=32", - "_MIPS_SZPTR=32", - "__EXTENSIONS__", - "LANGUAGE_C", - "_LANGUAGE_C", - "__INLINE_INTRINSICS", - "sgi", - "__sgi", - "unix", - "mips", - "host_mips", - "__unix", - "__host_mips", - "_SVR4_SOURCE", - "_MODERN_C", - "_SGI_SOURCE", - "__DSO__", - "SYSTYPE_SVR4", - "_SYSTYPE_SVR4", - "_LONGLONG", - "__mips=2", - "_MIPSEB", - "MIPSEB", - "__STDC__=1" - ], - "undefines": [ "__cplusplus" ] - } - ] + "configurations": [ + { + "name": "MIPS2-DEBUG", + "configurationType": "Debug", + "generator": "Unix Makefiles", + "compilerPath": "", + "compilerSwitches": "-Wab,-r4300_mul -non_shared -Olimit 2000 -G 0 -Xcpluscomm -mips2 -32", + "cStandard": "c89", + "includePath": [ + "\\\\wsl.localhost\\Ubuntu\\usr\\include" + /*INCLUDE := -I . -I include -I include/ultra64 -I include/PR -I src -I src/game -I src/inflate*/, + "${workspaceRoot}", + "${workspaceRoot}\\include", + "${workspaceRoot}\\src", + "${workspaceRoot}\\src\\game", + "${workspaceRoot}\\src\\inflate" + ], + "intelliSenseMode": "linux-gcc-x86", + "defines": [ + "DEBUG", + "TRI4_Ext", + "VERSION_US", + "TARGET_N64", + "OUTCODE=u", + "LANG_US", + "REFRESH_NTSC", + "LEFTOVERDEBUG", + "LEFTOVERSPECTRUM", + "BUGFIX_R0", + "BYTEMATCH" + /* IDO 5.3 Defs below */, + "_MIPS_FPSET=16", + "_MIPS_ISA=2", + "_ABIO32=1", + "_MIPS_SIM=_ABIO32", + "_MIPS_SZINT=32", + "_MIPS_SZLONG=32", + "_MIPS_SZPTR=32", + "__EXTENSIONS__", + "LANGUAGE_C", + "_LANGUAGE_C", + "__INLINE_INTRINSICS", + "sgi", + "__sgi", + "unix", + "mips", + "host_mips", + "__unix", + "__host_mips", + "_SVR4_SOURCE", + "_MODERN_C", + "_SGI_SOURCE", + "__DSO__", + "SYSTYPE_SVR4", + "_SYSTYPE_SVR4", + "_LONGLONG", + "__mips=2", + "_MIPSEB", + "MIPSEB", + "__STDC__=1" + ], + "undefines": [ + "__cplusplus" + ] + }, + { + "name": "MIPS2-FINAL US", + "configurationType": "Release", + "generator": "Unix Makefiles", + "cStandard": "c89", + "includePath": [ + "\\\\wsl.localhost\\Ubuntu\\usr\\include", + "${workspaceRoot}", + "${workspaceRoot}\\include", + "${workspaceRoot}\\src", + "${workspaceRoot}\\src\\game", + "${workspaceRoot}\\src\\inflate" + ], + "intelliSenseMode": "linux-gcc-x86", + "defines": [ + "TRI4_Ext", + "VERSION_US", + "TARGET_N64", + "OUTCODE=u", + "LANG_US", + "REFRESH_NTSC", + "LEFTOVERDEBUG", + "LEFTOVERSPECTRUM", + "BUGFIX_R0", + "BYTEMATCH" + /* IDO 5.3 Defs below */, + "_MIPS_FPSET=16", + "_MIPS_ISA=2", + "_ABIO32=1", + "_MIPS_SIM=_ABIO32", + "_MIPS_SZINT=32", + "_MIPS_SZLONG=32", + "_MIPS_SZPTR=32", + "__EXTENSIONS__", + "LANGUAGE_C", + "_LANGUAGE_C", + "__INLINE_INTRINSICS", + "sgi", + "__sgi", + "unix", + "mips", + "host_mips", + "__unix", + "__host_mips", + "_SVR4_SOURCE", + "_MODERN_C", + "_SGI_SOURCE", + "__DSO__", + "SYSTYPE_SVR4", + "_SYSTYPE_SVR4", + "_LONGLONG", + "__mips=2", + "_MIPSEB", + "MIPSEB", + "__STDC__=1" + ], + "undefines": [ + "__cplusplus" + ] + }, + { + "name": "LibUltra-Debug", + "configurationType": "Release", + "generator": "Unix Makefiles", + "cStandard": "c89", + "includePath": [ + "\\\\wsl.localhost\\Ubuntu\\usr\\include" + /*include -I include/PR -I src/libultra*/, + "${workspaceRoot}", + "${workspaceRoot}\\include", + "${workspaceRoot}\\include\\PR", + "${workspaceRoot}\\src\\libultrare", + "${workspaceRoot}\\src\\libultra" + ], + "intelliSenseMode": "linux-gcc-x86", + "defines": [ + "_DEBUG", + "TRI4_Ext", + "VERSION_US", + "TARGET_N64" + /* IDO 5.3 Defs below */, + "_MIPS_FPSET=16", + "_MIPS_ISA=2", + "_ABIO32=1", + "_MIPS_SIM=_ABIO32", + "_MIPS_SZINT=32", + "_MIPS_SZLONG=32", + "_MIPS_SZPTR=32", + "__EXTENSIONS__", + "LANGUAGE_C", + "_LANGUAGE_C", + "__INLINE_INTRINSICS", + "sgi", + "__sgi", + "unix", + "mips", + "host_mips", + "__unix", + "__host_mips", + "_SVR4_SOURCE", + "_MODERN_C", + "_SGI_SOURCE", + "__DSO__", + "SYSTYPE_SVR4", + "_SYSTYPE_SVR4", + "_LONGLONG", + "__mips=2", + "_MIPSEB", + "MIPSEB", + "__STDC__=1" + ], + "undefines": [ + "__cplusplus" + ] + }, + { + "name": "LibUltra-FINAL", + "configurationType": "Release", + "generator": "Unix Makefiles", + "cStandard": "c89", + "includePath": [ + "\\\\wsl.localhost\\Ubuntu\\usr\\include", + "${workspaceRoot}", + "${workspaceRoot}\\include", + "${workspaceRoot}\\include\\PR", + "${workspaceRoot}\\src\\libultrare", + "${workspaceRoot}\\src\\libultra" + ], + "intelliSenseMode": "linux-gcc-x86", + "defines": [ + "_FINALROM", + "TRI4_Ext", + "VERSION_US", + "TARGET_N64" + /* IDO 5.3 Defs below */, + "_MIPS_FPSET=16", + "_MIPS_ISA=2", + "_ABIO32=1", + "_MIPS_SIM=_ABIO32", + "_MIPS_SZINT=32", + "_MIPS_SZLONG=32", + "_MIPS_SZPTR=32", + "__EXTENSIONS__", + "LANGUAGE_C", + "_LANGUAGE_C", + "__INLINE_INTRINSICS", + "sgi", + "__sgi", + "unix", + "mips", + "host_mips", + "__unix", + "__host_mips", + "_SVR4_SOURCE", + "_MODERN_C", + "_SGI_SOURCE", + "__DSO__", + "SYSTYPE_SVR4", + "_SYSTYPE_SVR4", + "_LONGLONG", + "__mips=2", + "_MIPSEB", + "MIPSEB", + "__STDC__=1" + ], + "undefines": [ + "__cplusplus" + ] + } + ] } diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8e8e447 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM ubuntu:22.04 + +# install distro packages +RUN apt update +RUN apt -y install bash-completion sudo binutils-mips-linux-gnu wget make git python3 libcapstone-dev pkg-config build-essential + +# install qemu (can be removed if you're using ido recomp) +RUN wget https://github.com/n64decomp/qemu-irix/releases/download/v2.11-deb/qemu-irix-2.11.0-2169-g32ab296eef_amd64.deb -P /tmp +RUN dpkg -i /tmp/qemu-irix-2.11.0-2169-g32ab296eef_amd64.deb + +# setup sudo +RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +# setup developer directory +RUN useradd -ms /bin/bash dev +RUN usermod -aG sudo dev +USER dev +WORKDIR /home/dev + +CMD ["/bin/bash"] diff --git a/Makefile b/Makefile index 5776c77..b6d8344 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ -# Makefile to rebuild Goldeneye 007 +# Makefile to build Goldeneye 007 ### Default target ### -default: colour +default: all ### Default Build Options ### # Version of the game to build @@ -11,163 +11,13 @@ IDO_RECOMP := YES VERBOSE := 2 # If COMPARE is 1, check the output sha1sum when building 'all', and if fail to match # then compare ELF sections to known md5 checksums. -# If compare is 2, it will just compare the sha1sum. COMPARE := 1 +# Include Terminal Codes for colourising text. +include include/make/VT100Codes.make +include include/make/Gui.make -## VT100 Codes ## -SAVECURSOR := \0337\033[s -RESTORECURSOR := \0338\033[u -SET_SCROLLREGION = \033[$(1);$(2)r -RESTORESCROLLREGION := \033[r -CURSOR_GOTO = \033[$(1);$(2)H -SET_TEXTATTRIB = \033[$(1)$(if $(2),;$(2))$(if $(3),;$(3))m -BELL := \007 - -#Attributes -RESTORECOLOUR := \033[m -BOLD := 1 -DIM := 2 -UNDERSCORE := 4 -BLINK := 5 -INVERT := 7 -HIDDEN := 8 - -#Colours -FG_BLACK:= 30 -FG_MAROON:= 31 -FG_GREEN:= 32 -FG_OLIVE:= 33 -FG_NAVY:= 34 -FG_PURPLE:= 35 -FG_TEAL:= 36 -FG_SILVER:= 37 -FG_GRAY:= 90 -FG_RED:= 91 -FG_LIME:= 92 -FG_YELLOW:= 93 -FG_BLUE:= 94 -FG_VIOLET:= 95 -FG_CYAN:= 96 -FG_WHITE:= 97 - -BG_BLACK:= 40 -BG_MAROON:= 41 -BG_GREEN:= 42 -BG_OLIVE:= 43 -BG_NAVY:= 44 -BG_PURPLE:= 45 -BG_TEAL:= 46 -BG_SILVER:= 47 -BG_GRAY:= 100 -BG_RED:= 101 -BG_LIME:= 102 -BG_YELLOW:= 103 -BG_BLUE:= 104 -BG_VIOLET:= 105 -BG_CYAN:= 106 -BG_WHITE:= 107 - -# define a "newline" variable to be used in make scripts -# use with ${\n} -# https://stackoverflow.com/questions/12528637/how-do-i-execute-each-command-in-a-list -define \n - - -endef -#end newline. - -### Build Functions ### -# Common build print status function -PRINT_STATUS = @echo "$(call SET_TEXTATTRIB,$(FG_GREEN))$(1) $(call SET_TEXTATTRIB,$(FG_OLIVE))$(2)$(call SET_TEXTATTRIB,$(FG_GRAY)) $(if $3, -> $(call SET_TEXTATTRIB,$(FG_NAVY))$(3))$(RESTORECOLOUR)" - -# Seperate "constant" drawing from variable drawing to speed up PBar rendering -# draws a box and fills it grey ready for blue bar -SetupProgressBar = \ - { \ - str="$(SAVECURSOR)$(call SET_SCROLLREGION,4,0)$(call CURSOR_GOTO,2,999)\033[1J$(call CURSOR_GOTO,1)";\ - str=$$str"\033(0lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk"; \ - str=$$str"\nx$(call SET_TEXTATTRIB,$(BG_GRAY))%78s$(RESTORECOLOUR)x\n"; \ - str=$$str"mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj\033(B"; \ - str=$$str"$(RESTORECURSOR)"; \ - printf $$str ""; \ - } - -#(call DrawProgressBar,Percent) -# OR -#(call DrawProgressBar,NumberOfItemsDone,TotalNumberOfItems) -# If second param is given, use it to work out a percentage. -# divide the percentage into a 80 char long bar -# paint the whole bar grey -# paint the first half, then text, then second half. -# clear colour codes -DrawProgressBar = \ - { \ - $(if $(2), \ - if [ "$(1)" -ne "$(2)" ]; \ - then \ - _pdone=`expr 100 / $(2) \* $(1)`; \ - else \ - _pdone=100; \ - fi \ - ,_pdone=$(1) \ - ); \ - pdone=`expr $$_pdone \* 74 / 100`; \ - pdoneb=0; \ - str="$(SAVECURSOR)$(call CURSOR_GOTO,2,2)";\ - str=$$str"$(call SET_TEXTATTRIB,$(BOLD),$(FG_WHITE),$(BG_NAVY))" ; \ - \ - if [ "$$pdone" -lt "36" ]; \ - then \ - str=$$str"%$${pdone}s"; \ - str=$$str"$(call SET_TEXTATTRIB,$(BG_GRAY))";\ - pdoneb=`expr 36 - $$pdone`; \ - str=$$str"%$${pdoneb}s%3d%%"; \ - else \ - pdoneb=`expr $$pdone - 36`; \ - str=$$str"%1s%35s%3d%%%$${pdoneb}s"; \ - fi; \ - str=$$str"$(RESTORECURSOR)$(RESTORECOLOUR)"; \ - printf $$str "" "" $$_pdone; \ - } - -# Increment Progress Bar From percentage (1), and increase by 1 every (2) seconds. -# Continue doing so until calling process ends -IncrementProgressBarFromAtRate = \ - { \ - i=$(1); \ - while [ -d /proc/$$! ] && [ $$i -le 100 ]; do \ - $(call DrawProgressBar,$$i); \ - i=$$((i+1)); \ - sleep $(2); \ - done; \ - } - -# Ask to continue -# (1) Prompt, (2) Do if Yes, -# (3) Do if No [can be blank], -# (4) Do if anything else [can be blank] -# (5) Timeout [can be blank] -ContinuePrompt = \ - { \ - echo "$1 [y/n]"; \ - $(if $(5), readchr(){ old=$$(stty -g); stty raw -echo min 0 time 30; printf '%s' $$(dd bs=1 count=1 2>/dev/null); stty $$old;}; REPLY=$$(readchr) ,read REPLY ); \ - echo $$REPLY; case $$REPLY in \ - y|Y) $2;; \ - n|N) $3;; \ - *) $4;; \ - esac; \ - } - -# Convert AI Print commands from readable strings to byte arrays automatically. -ConvertAIPRINT = sed -E -e ':loop s/PRINT\("(..*?)(.)"/PRINT\("\1",\x27\2\x27/g; tloop; \ - s/(PRINT\(.*?)\x27\\\x27,\x27(.)\x27(.*)\)/\1\x27\\\2\x27\3\)/g; \ - s/(PRINT\()"(.)"(.*)\)/\1\x27\2\x27\3\)/g; \ - s/PRINT\((.*)\)/PRINT\(\1,\x27\\0\x27\,)/g; \ - s/PRINT\((.*)\)/AI_PRINT,\1/g' - -## More Build Variables (Auto) ## - +# set tooolchain based on current OS ifeq ($(shell type mips-linux-gnu-ld >/dev/null 2>/dev/null; echo $$?), 0) TOOLCHAIN := mips-linux-gnu- else ifeq ($(shell type mips64-linux-gnu-ld >/dev/null 2>/dev/null; echo $$?), 0) @@ -176,6 +26,7 @@ else TOOLCHAIN := mips64-elf- endif +# Use IDO Recomp UNLESS specified otherwise ifeq ($(IDO_RECOMP), NO) QEMU_IRIX := $(shell which qemu-irix 2>/dev/null) ifeq (, $(QEMU_IRIX)) @@ -185,6 +36,7 @@ ifeq ($(IDO_RECOMP), NO) else IRIX_ROOT := tools/ido5.3_recomp endif + # other tools TOOLS_DIR := tools DATASEG_COMP := $(TOOLS_DIR)/data_compress.sh @@ -197,6 +49,14 @@ else SHA1SUM = sha1sum --quiet endif +# Convert AI Print commands from readable strings to byte arrays automatically. +ConvertAIPRINT = sed -E -e ':loop s/PRINT\("(..*?)(.)"/PRINT\("\1",\x27\2\x27/g; tloop; \ + s/(PRINT\(.*?)\x27\\\x27,\x27(.)\x27(.*)\)/\1\x27\\\2\x27\3\)/g; \ + s/(PRINT\()"(.)"(.*)\)/\1\x27\2\x27\3\)/g; \ + s/PRINT\((.*)\)/PRINT\(\1,\x27\\0\x27\,)/g; \ + s/PRINT\((.*)\)/AI_PRINT,\1/g' + +# per VERSION flags ifeq ($(FINAL), YES) OPTIMIZATION := -O2 LCDEFS := @@ -258,24 +118,15 @@ ALLOWED_VERSIONS := US EU JP DEBUG USB ALLOWED_COUNTRYCODE := u e j BUILD_DIR_BASE := build -# BUILD_DIR is the location where all build artifacts are placed +# BUILD_DIR is the location where all build artefacts are placed BUILD_DIR := $(BUILD_DIR_BASE)/$(OUTCODE) + +# this file references variables defined above: BUILD_DIR, RZ_COMP +# this file defines and builds $(MUSIC_RZ_FILES) include assets/Makefile.obseg +# this file references variables defined above: BUILD_DIR, RZ_COMP, COUNTRYCODE, LD, CC, CFLAGS, OBJCOPY, ConvertAIPRINT, OPTIMIZATION +# this file defines and builds OBSEGMENT, BG_SEG_FILES, BRIEF_RZ_FILES, CHR_RZ_FILES, GUN_RZ_FILES, PROP_RZ_FILES, ,SETUP_BUILD_FILES, STAN_BUILD_FILES, TEXT_RZ_FILES include assets/Makefile.music -BUILD_SUB_DIRS := \ - rsp src src/game src/inflate \ - src/libultra src/libultra/audio src/libultra/gt src/libultra/gu src/libultra/io \ - src/libultra/libc src/libultra/os src/libultra/rg src/libultra/sched src/libultra/sp \ - src/libultrare src/libultrare/audio src/libultrare/gt src/libultrare/gu src/libultrare/io \ - src/libultrare/libc src/libultrare/os src/libultrare/rg src/libultrare/sched src/libultrare/sp \ - assets assets/obseg \ - assets/obseg/brief assets/obseg/chr assets/obseg/gun assets/obseg/prop \ - assets/obseg/text assets/obseg/bg assets/obseg/setup assets/obseg/setup/$(COUNTRYCODE) assets/obseg/stan \ - assets/music assets/ramrom assets/images assets/images/split assets/font \ - assets/embedded assets/embedded/skeletons assets/embedded/player_gait_object -# create build directories -$(shell mkdir -p $(BUILD_DIR)) -$(foreach subdir,$(BUILD_SUB_DIRS),$(shell mkdir -p $(BUILD_DIR)/$(subdir))) ## Collect Objects ## @@ -349,141 +200,116 @@ else CC := $(IRIX_ROOT)/cc endif -CFLAGS := -Wab,-r4300_mul -non_shared -Olimit 2000 -G 0 -Xcpluscomm $(CFLAGWARNING) $(WOFF) -signed $(INCLUDE) $(MIPSISET) $(LCDEFS) -DTARGET_N64 +CFLAGS := -Wab,-r4300_mul -non_shared -Olimit 2000 -G 0 -Xcpluscomm $(CFLAGWARNING) $(WOFF) $(INCLUDE) $(MIPSISET) $(LCDEFS) -DTARGET_N64 LD := $(TOOLCHAIN)ld -LD_SCRIPT := build/ge007.$(OUTCODE).ld +LD_SCRIPT := $(BUILD_DIR)/ge007.$(OUTCODE).ld # --no-warn-mismatch is needed to link -mips3 object files (some libultra math) with the regular files compiled with -mips2 -LDFLAGS := -T $(LD_SCRIPT) -Map build/ge007.$(OUTCODE).map --no-warn-mismatch +LDFLAGS := -T $(LD_SCRIPT) -Map $(BUILD_DIR)/ge007.$(OUTCODE).map --no-warn-mismatch AS := $(TOOLCHAIN)as -ASFLAGS := -march=vr4300 -mabi=32 $(INCLUDE) $(ASMDEFS) +ASFLAGS := -march=vr4300 -mabi=32 $(INCLUDE) $(ASMDEFS) # Use the system installed armips if available. Otherwise use the one provided with this repository. -ifneq (,$(shell which armips 2>/dev/null)) +ifneq (,$(shell which armips 2>/dev/null)) ARMIPS := armips else ARMIPS := $(TOOLS_DIR)/armips endif -ASM_PREPROC := python3 tools/asmpreproc/asm-processor.py +ASM_PROCESSOR_DIR := tools/asm-processor +ASM_PREPROC := python3 $(ASM_PROCESSOR_DIR)/asm_processor.py OBJCOPY := $(TOOLCHAIN)objcopy -#Now using cursor commands for better look original was //"\033[5;42;97m%80s\r\n%43s%37s\r\n%80s\007\033[0;0m\n" -# Rsrv Up 3 80 Dn 1 Return Dn 1 Ret 80ch -# Lines Lines ch Line SoL midway Line SoL Bell -PRINTNOMATCH := printf "\n\n\033[3A$(call SET_TEXTATTRIB,$(BLINK),$(BG_MAROON),$(FG_WHITE))%80s\033[1B\r%45s%35s\033[1B\r%80s$(BELL)$(RESTORECOLOUR)$(call SET_TEXTATTRIB,$(FG_RED))\n\n\n" "" "NOT MATCH!" "" "" -PRINTMATCH := printf "\n\n\n\033[3A$(call SET_TEXTATTRIB,$(BLINK),$(BG_GREEN),$(FG_WHITE))%80s\033[1B\r%43s%37s\033[1B\r%80s$(BELL)$(RESTORECOLOUR)\n" "" "MATCH!" "" "" -## Build Recipies ## -# this file references variables defined above: BUILD_DIR, CFLAGWARNING, INCLUDE, LCDEFS -# this file defines $(ULTRAOBJECTS) -include src/libultrare/Makefile.libultrare -all: $(APPROM) -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,100) -endif -ifeq ($(COMPARE),1) - @echo "\n" -# Calculate Checksum if fail Allow overspill Which File failed Quick Check (data) Slow Check (extract .text binary) - @$(SHA1SUM) -c ge007.$(OUTCODE).sha1 || ($(PRINTNOMATCH) && echo "$(SAVECURSOR)$(RESTORESCROLLREGION)$(RESTORECURSOR)\033[2D " && $(call ContinuePrompt,"Do you want to check Source Files?",echo "Please wait while we determine which files are affected..." && $(SHA1SUM) --quiet -c checksums.txt && ./test_files.sh -c -i ge007.$(OUTCODE)-test_basis.csv,,,3) && exit 1) -# Else complete - @$(PRINTMATCH) -endif -ifeq ($(COMPARE),2) - @$(SHA1SUM) -c ge007.$(COUNTRYCODE).sha1 -endif - @echo "\n Rom File Generated in Build Directory. \n\n" + + + + + + +## Build Recipes ## + +# Dont delete intermediate files from these targets on make completion. .SECONDARY: $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ - $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) + $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) -ifeq ($(filter clean nuke dataclean help codeclean context cmdbuilder test stanclean setupclean colour print-%,$(MAKECMDGOALS)),) -# Dont print version on "default" since it will be spat out twice - ifneq ($(filter $(VERSION),$(ALLOWED_VERSIONS)),) - #$(info VERSION=$(VERSION)) - else - $(error VERSION "$(VERSION)" not supported") - endif - # Make tools if out of date - $(info Building tools...) - DUMMY != make -s -C tools >&2 || echo FAIL - ifeq ($(DUMMY),FAIL) - $(error Failed to build tools) - endif - $(info Building $(VERSION) ROM...) +# Dont delete these intermediate targets on make cancelation. +.PRECIOUS: %.bin %.o -endif +# Run the following targets sequentialy in this order (unnamed targets will still run in parallel) +.NOTPARALLEL: print_info create_directories $(APPROM) checksum + +# Phony Recipes - These targets are not files, Get Make to do something +.PHONY: print_info create_directories build_tools prerequisites checksum all_p1 all default commonclean setupclean stanclean dataclean libultraclean codeclean clean nuke help cmdbuidler test context extractassets textures + + +# this file references variables defined above: BUILD_DIR, CFLAGWARNING, INCLUDE, LCDEFS +# this file defines and builds $(ULTRAOBJECTS) +include src/libultrare/Makefile.libultrare # Build RSP -$(BUILD_DIR)/rsp/%.bin: rsp/*.s pb1 - $(call PRINT_STATUS,Assembling1:,$<,$@) +$(BUILD_DIR)/rsp/%.bin: rsp/*.s $(ARMIPS) -sym $@.sym -strequ CODE_FILE $(BUILD_DIR)/rsp/$*.bin -strequ DATA_FILE $(BUILD_DIR)/rsp/$*_data.bin $< -$(BUILD_DIR)/src/rspboot.o: $(BUILD_DIR)/rsp/rspboot.bin +$(BUILD_DIR)/src/rspboot.o: $(BUILD_DIR)/rsp/rspboot.bin #Build asm files in root -$(BUILD_DIR)/%.o: src/%.s pb2 - $(call PRINT_STATUS,Assembling2:,$<,$@) +$(BUILD_DIR)/%.o: src/%.s $(AS) $(ASFLAGS) -o $@ $< #Build asm files in src/ -$(BUILD_DIR)/src/%.o: src/%.s pb3 - $(call PRINT_STATUS,Assembling3:,$<,$@) +$(BUILD_DIR)/src/%.o: src/%.s $(AS) $(ASFLAGS) -o $@ $< #Build Images -$(BUILD_DIR)/assets/images/split/%.o: assets/images/split/%.bin pb5 - $(call PRINT_STATUS,Compiling5:,$<,$@) - $(LD) -r -b binary $< -o $@ +$(BUILD_DIR)/assets/images/split/%.o: assets/images/split/%.bin + $(LD) -r -b binary $< -o $@ #Compress Obseg -$(BUILD_DIR)/$(OBSEGMENT): $(OBSEG_RZ) $(IMAGE_OBJS) pb6 - $(call PRINT_STATUS,Compressing6:,$<,$@) +$(BUILD_DIR)/$(OBSEGMENT): $(OBSEG_RZ) $(IMAGE_OBJS) #Build C files in src/ -$(BUILD_DIR)/src/%.o: src/%.c - $(call PRINT_STATUS,Compiling8:,$<,$@) +# convert AI_PRINT commands from readable to byte-array +$(BUILD_DIR)/src/%.o: src/%.c @if grep -q 'GLOBAL_ASM(' $<; then \ - $(ASM_PREPROC) $(OPTIMIZATION) $< | $(CC) -c $(CFLAGS) tools/asmpreproc/include-stdin.c -o $@ $(OPTIMIZATION); \ - $(ASM_PREPROC) $(OPTIMIZATION) $< --post-process $@ --assembler "$(AS) $(ASFLAGS)" --asm-prelude tools/asmpreproc/prelude.s; \ + $(ASM_PREPROC) $(OPTIMIZATION) $< | $(CC) -c $(CFLAGS) $(ASM_PROCESSOR_DIR)/include-stdin.c -o $@ $(OPTIMIZATION); \ + $(ASM_PREPROC) $(OPTIMIZATION) $< --post-process $@ --assembler "$(AS) $(ASFLAGS)" --asm-prelude $(ASM_PROCESSOR_DIR)/prelude.inc; \ + elif [ "$$(basename $<)" = "chraidata.c" ]; then \ + $(ConvertAIPRINT) $< | $(CC) -c $(CFLAGS) $(ASM_PROCESSOR_DIR)/include-stdin.c -o $@ $(OPTIMIZATION); \ else \ $(CC) -c $(CFLAGS) -o $@ $(OPTIMIZATION) $<; \ fi #Build RamRom -$(BUILD_DIR)/assets/ramrom/%.o: assets/ramrom/%.s pb9 - $(call PRINT_STATUS,Assembling9:,$<,$@) +$(BUILD_DIR)/assets/ramrom/%.o: assets/ramrom/%.s $(AS) $(ASFLAGS) -o $@ $< #Build fonts -$(BUILD_DIR)/assets/font/%.o: assets/font/%.c pb10 - $(call PRINT_STATUS,Compiling10:,$<,$@) +$(BUILD_DIR)/assets/font/%.o: assets/font/%.c $(CC) -c $(CFLAGS) -o $@ $(OPTIMIZATION) $< #Build asm files in assets/ -$(BUILD_DIR)/assets/%.o: assets/%.s pb11 - $(call PRINT_STATUS,Assembling11:,$<,$@) +$(BUILD_DIR)/assets/%.o: assets/%.s $(AS) $(ASFLAGS) -o $@ $< #Build Obseg -$(BUILD_DIR)/assets/obseg/%.o: assets/obseg/%.s $(OBSEG_RZ) pb12 - $(call PRINT_STATUS,Assembling12:,$<,$@) +$(BUILD_DIR)/assets/obseg/%.o: assets/obseg/%.s $(OBSEG_RZ) $(AS) $(ASFLAGS) -o $@ $< #Build C files in assets/ -$(BUILD_DIR)/assets/%.o: assets/%.c pb4 - $(call PRINT_STATUS,Compiling4:,$<,$@) +$(BUILD_DIR)/assets/%.o: assets/%.c ifeq ($(filter-out %setup%,$<),) - $(ConvertAIPRINT) $< | $(CC) -c $(CFLAGS) tools/asmpreproc/include-stdin.c -o $@ $(OPTIMIZATION) + $(ConvertAIPRINT) $< | $(CC) -c $(CFLAGS) $(ASM_PROCESSOR_DIR)/include-stdin.c -o $@ $(OPTIMIZATION) else $(CC) -c $(CFLAGS) -o $@ $(OPTIMIZATION) $< endif @@ -495,132 +321,88 @@ endif # $(CC) -c -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm $(CFLAGWARNING) -woff 819,820,852,821,838,649 -signed $(INCLUDE) $(MIPSISET) $(LCDEFS) -DTARGET_N64 $(OPTIMIZATION) -o $@ $< #Link Files -$(APPELF): $(RSPOBJECTS) $(ULTRAOBJECTS) $(HEADEROBJECTS) $(OBSEG_RZ) $(BUILD_DIR)/$(OBSEGMENT) $(MUSIC_RZ_FILES) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(ROMOBJECTS) $(ASSET_DATAOBJECTS) $(ROMOBJECTS2) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(OBSEG_OBJECTS) pb14 ge007.ld - cpp $(LDFILEOPTS) -P ge007.ld -o build/ge007.$(OUTCODE).ld - @echo "Linking Files into ELF" +$(APPELF): $(RSPOBJECTS) $(ULTRAOBJECTS) $(HEADEROBJECTS) $(OBSEG_RZ) $(BUILD_DIR)/$(OBSEGMENT) $(MUSIC_RZ_FILES) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(ROMOBJECTS) $(ASSET_DATAOBJECTS) $(ROMOBJECTS2) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(OBSEG_OBJECTS) ge007.ld + cpp $(LDFILEOPTS) -P ge007.ld -o $(BUILD_DIR)/ge007.$(OUTCODE).ld + @echo "Linking Files into ELF" $(LD) $(LDFLAGS) -o $@ $(APPBIN): $(APPELF) - ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,98) - endif @echo "Building ROM" $(OBJCOPY) $< $@ -O binary --gap-fill=0xff - + $(APPROM): $(APPBIN) - ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,100) - endif @echo "Compressing ROM" $(DATASEG_COMP) $< $(OUTCODE) @echo "Finalizing ROM" $(N64CKSUM) $< $@ -.PRECIOUS: %.bin %.o +## Phony Recipes below - Get Make to do something ## +print_info: + $(info VERSION=$(VERSION)) + $(info Building $(VERSION) ROM...) +create_directories: + scripts/make/create_directories.sh "$(BUILD_DIR)" "$(COUNTRYCODE)" -## Phony Recipies - Get Make to do something ## +build_tools: + $(info Building tools...) + scripts/make/build_tools.sh "$(MAKE)" +prerequisites: print_info create_directories build_tools extractassets -.PHONY: all default codeclean dataclean clean cmdbuidler test help colour -# Dont declare as phony otherwise make will re-evaluate every build including the recipies assosiated with them - just make sure no file is ever called pbx -# pb1 pb2 pb3 pb4 pb5 pb6 pb7 pb8 pb9 pb10 pb11 pb12 pb13 pb14 - -setupclean: - rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map \ - $(SETUP_BUILD_FILES) - -stanclean: - rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map \ - $(STAN_BUILD_FILES) - -libultraclean: - rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map \ - $(ULTRAOBJECTS) - - -codeclean: -ifeq ($(VERBOSE),1) - rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ - $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(RSPOBJECTS) -else - @clear - @$(call SetupProgressBar) - @echo "\n\n\nDeleting All Code Binaries Only [Assets will be left from previous compile]" - @rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map - @$(call DrawProgressBar,50) - @rm -f $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(RSPOBJECTS) - @$(call DrawProgressBar,100) -endif - @echo "\033[1J$(RESTORESCROLLREGION)\nCode Binaries Cleared! Make will Re-Build these next time.\n" - -dataclean: - rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ - $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) \ - $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES) - -# "Conditionals control what 'make' actually "sees" in the makefile, so they cannot be used to control recipes at the time of execution." -# https://www.gnu.org/software/make/manual/html_node/Conditionals.html -ifeq ($(VERBOSE),1) -clean:: - # if this command is modified, make sure to update this in the `nuke` recipe. - rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ - $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ - $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) $(RSPOBJECTS) \ - $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES) -else -clean:: - @clear - @echo "\n\n\nDeleting All Code and Asset Binaries" - @$(call SetupProgressBar) - @rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map & $(call IncrementProgressBarFromAtRate,0,0.125) - @rm -f $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) & $(call IncrementProgressBarFromAtRate,25,0.125) - @rm -f $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) & $(call IncrementProgressBarFromAtRate,50,0.125) - @rm -f $(IMAGE_OBJS) $(MUSIC_RZ_FILES) $(RSPOBJECTS) $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES)& $(call IncrementProgressBarFromAtRate,75,0.125) - - @$(call DrawProgressBar,100) - @echo "\033[1J$(RESTORESCROLLREGION)\nAll Code and Asset Binaries Cleared! Make will Re-Build these next time.\n" +checksum: $(APPROM) +ifeq ($(COMPARE), 1) + scripts/make/checksum.sh "$(SHA1SUM)" "$(OUTCODE)" "$(BUILD_DIR)" endif -nuke: - @echo deleting files specified from make clean ... - @# if this command is modified, update the `clean` recipe above. - rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ - $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ - $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) $(RSPOBJECTS) \ - $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES) - @echo - @echo make: deleting build folders and files - $(foreach x,$(ALLOWED_COUNTRYCODE),rm -r -f -d "$(BUILD_DIR_BASE)/$(x)/"${\n}) - @echo - @echo make: deleting bin / rsp / asp - rm -r -f -d "bin/" - @echo - @echo make: deleting assets - rm -r -f -d "assets/images/split/" - rm -r -f "assets/music/*.bin" "assets/obseg/bg/*.bin" "assets/obseg/brief/*.bin" "assets/obseg/chr/*.bin" "assets/obseg/gun/*.bin" "assets/obseg/prop/*.bin" "assets/obseg/setup/*.bin" "assets/obseg/setup/e/*.bin" "assets/obseg/setup/u/*.bin" "assets/obseg/setup/j/*.bin" "assets/obseg/stan/*.bin" "assets/obseg/text/*.bin" "assets/obseg/text/e/*.bin" "assets/obseg/text/u/*.bin" "assets/obseg/text/j/*.bin" "assets/ramrom/*.bin" "assets/ramrom/e/*.bin" "assets/ramrom/u/*.bin" "assets/ramrom/j/*.bin" +all_p1: prerequisites +all: all_p1 $(APPROM) checksum + @echo "Rom File Generated in Build Directory." + +commonclean: + rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map + +setupclean: commonclean + rm -f $(SETUP_BUILD_FILES) + +stanclean: commonclean + rm -f $(STAN_BUILD_FILES) + +dataclean: commonclean stanclean setupclean + rm -f $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) + +libultraclean: commonclean + rm -f $(ULTRAOBJECTS) + +codeclean: commonclean libultraclean + rm -f $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(RSPOBJECTS) + +clean: codeclean dataclean + @echo "\nAll Code and Asset Binaries Cleared! Make will Re-Build these next time.\n" + +nuke: clean + scripts/make/clean_nuke.sh "$(ALLOWED_COUNTRYCODE)" "$(BUILD_DIR_BASE)" -# 0 4 35 80 80(with colour codes) help: - @echo "\n\033[1;4mmakefile help$(RESTORECOLOUR)" + @echo "mmakefile help" @echo "" @echo " supported targets:" @echo "" - @echo " all $(call SET_TEXTATTRIB,$(FG_LIME)) Build$(RESTORECOLOUR) all (default)" - @echo " clean $(call SET_TEXTATTRIB,$(FG_RED)) Delete all$(RESTORECOLOUR) known build artifacts" - @echo " nuke $(call SET_TEXTATTRIB,$(FG_RED)) Delete all$(RESTORECOLOUR) files explicitly listed in Makefile (same as make clean)," + @echo " all Build all (default)" + @echo " clean Delete all known build artifacts" + @echo " nuke Delete all files explicitly listed in Makefile (same as make clean)," @echo " all build output for all versions, any .bin file in assets folders," @echo " and asp/rsp bin." - @echo " dataclean $(call SET_TEXTATTRIB,$(FG_RED)) Delete$(RESTORECOLOUR) only asset build artifacts" - @echo " codeclean $(call SET_TEXTATTRIB,$(FG_RED)) Delete$(RESTORECOLOUR) only code (asm, .c) build artifacts" - @echo " libultraclean $(call SET_TEXTATTRIB,$(FG_RED)) Delete$(RESTORECOLOUR) only code (asm, .c) build artifacts " + @echo " dataclean Delete only asset build artifacts" + @echo " codeclean Delete only code (asm, .c) build artifacts" + @echo " libultraclean Delete only code (asm, .c) build artifacts " @echo " from Rare's libultra files" - @echo " stanclean $(call SET_TEXTATTRIB,$(FG_RED)) Delete$(RESTORECOLOUR) only stan build artifacts" - @echo " setupclean $(call SET_TEXTATTRIB,$(FG_RED)) Delete$(RESTORECOLOUR) only setup build artifacts" - @echo " cmdbuidler $(call SET_TEXTATTRIB,$(FG_LIME)) Build$(RESTORECOLOUR) AI Commands" - @echo " context [file] $(call SET_TEXTATTRIB,$(FG_LIME)) Build$(RESTORECOLOUR) Context File from [file]" + @echo " stanclean Delete only stan build artifacts" + @echo " setupclean Delete only setup build artifacts" + @echo " cmdbuidler BuildAI Commands" + @echo " context [file] BuildContext File from [file]" @echo " eg make context src/game/chrai.c" @echo " test Re-Run Data Verification " @echo "" @@ -630,88 +412,10 @@ help: @echo " VERSION=v Region version. (US is default)" @echo " Supported values: ${ALLOWED_VERSIONS}\n" -#CMD Builder tools -AI_CMD_BUILDER := $(TOOLS_DIR)/cmdbuilder.c -AI_CMD_LIST_DEFINITIONS := src/aicommands.def -AI_CMD_LIST_TEMP := $(BUILD_DIR)/aicommands.temp -AI_CMD_LIST_H2 := src/aicommands2.h -#Pre-Format encoding newlines and tags -AI_CMD_BUILDER_PRECONVERT := sed -E -AI_CMD_BUILDER_PRECONVERT += -e 's/\x27\\n\x27/\x27\/n\x27/g;' # encode '\n' as '/n' (TEXT PRINT command) -AI_CMD_BUILDER_PRECONVERT += -e '/^\s*\*/ s/\x27/\?\?x27/g;' # encode DocBlock(/**...**/) quotes '' as x27 -AI_CMD_BUILDER_PRECONVERT += -e '/\/\*\*/ , /\*\// s/([^/])$$/\1 \\n\\/g;' # encode DocBlock(/**...**/) Newlines as \n\ . -#AI_CMD_BUILDER_PRECONVERT += -e '/^\s*\*/ s/([^\/])$$/\1 \\n\\/g;' # encode DocBlock(/**...**/) Newlines as \n\ . -AI_CMD_BUILDER_PRECONVERT += -e 's/[^/\*\S]\*$$/\\n\\/g; s/^(\s*)\*[^/\*]/\1 /g;' # remove DocBlock sides (causes problems with tooltips) fixed to check for ordinary comment -#AI_CMD_BUILDER_PRECONVERT += -e '/^_AI_CMD_POLYMORPH\(CMDNAME,\n(.|\n)*?\s{19}DESCRIPTION(\)| DESCRIPTION2\))/ s/[^,]\n/\\n\\/g;' # Newlines in POLYMORPHS -AI_CMD_BUILDER_PRECONVERT += -e 's/\/\*\*/\?\?\\\*\(\*\*/g;' # encode /** as ??\*(** -AI_CMD_BUILDER_PRECONVERT += -e 's/\*\*\//\*\*\)\*\?\?\\ /g;' # encode **/ as **)*??\ -#Format Newlines and Comment tags -AI_CMD_BUILDER_CONVERT := sed -E -AI_CMD_BUILDER_CONVERT += -e 's/\\n/\n/g;' # add newlines -AI_CMD_BUILDER_CONVERT += -e 's/\?{2}\=/\#/g;' # replace ??= with hash for defines -AI_CMD_BUILDER_CONVERT += -e 's/\?{2}\\/\//g;' # replace ??\ with / -AI_CMD_BUILDER_CONVERT += -e 's/DEFINE([^D])/\#define\1/g;' # replace DEFINE with #define -AI_CMD_BUILDER_CONVERT += -e 's/\\.*/\\/g;' # replace \... with \ (line continuation) -AI_CMD_BUILDER_CONVERT += -e 's/\*\(\*/\*/g;' # replace *(* with * -AI_CMD_BUILDER_CONVERT += -e 's/\*\)\*/\*/g;' # replace *)* with * -AI_CMD_BUILDER_CONVERT += -e 's/MAKE_EXPAND\(([^\n]*)MAKE_EXPAND_END\)/\1/g;' #replace MAKE_EXPAND(CONTENTS) with CONTENTS -AI_CMD_BUILDER_CONVERT += -e 's/\?{2}x27/\x27/g;' # replace ??x27 with ' -AI_CMD_BUILDER_CONVERT += -e 's/\x27\/n\x27/\x27\\n\x27/g;' # replace '/n' with '\n' -AI_CMD_BUILDER_CONVERT += -e 's/AI_EndList\s*,/AI_EndList/g;' # replace AI_EndList , with AI_EndList -AI_CMD_BUILDER_CONVERT += -e '/^ *$$/d' - -AI_CMD_LIST_H2_HEADER := \ -"/******************************************************************************\n\ -* *\n\ -* *\n\ -* Do not edit this file. It was automatically generated by \"cmdbuilder\" *\n\ -* from the file \"$(AI_CMD_LIST_DEFINITIONS)\". *\n\ -* To Add/Remove/Modify AI Commands please edit \"$(AI_CMD_LIST_DEFINITIONS)\" *\n\ -* and then run *\n\ -* make cmdbuilder *\n\ -* *\n\ -* *\n\ -*****************************************************************************/\n\n" +include include/make/cmd.make -cmdbuilder: - @clear - @echo - @echo Building AI Command Macros... - @echo - @$(call SetupProgressBar) - @$(call DrawProgressBar,0) - @ # copy command definitions to temp - @cp $(AI_CMD_LIST_DEFINITIONS) $(AI_CMD_LIST_TEMP) - @$(call DrawProgressBar,5) - @ # Preformat Definitions for builder (encode documentation tags) - @$(call PRINT_STATUS,"Pre Formatting",$(AI_CMD_LIST_DEFINITIONS)) - @$(AI_CMD_BUILDER_PRECONVERT) $(AI_CMD_LIST_TEMP) > $(AI_CMD_LIST_DEFINITIONS) - @$(call DrawProgressBar,10) - @ # Print Header - @echo $(AI_CMD_LIST_H2_HEADER) > $(AI_CMD_LIST_H2) - @$(call DrawProgressBar,11) - @ # Execute Builder and format (re-add newlines, documentation tags etc) -C keeps /**/ comments - @$(call PRINT_STATUS,"Processing",$(AI_CMD_LIST_DEFINITIONS)) - @echo This might take some time... - @$(CC) -Xcpluscomm -c $(AI_CMD_BUILDER) $(INCLUDE) -w 581 -E | $(AI_CMD_BUILDER_CONVERT) >> $(AI_CMD_LIST_H2) & $(call IncrementProgressBarFromAtRate,12,0.5) - @$(call DrawProgressBar,98) - @ # restore command def from temp (no encoding) - @cp $(AI_CMD_LIST_TEMP) $(AI_CMD_LIST_DEFINITIONS) - @$(call DrawProgressBar,99) - @rm $(AI_CMD_LIST_TEMP) - @$(call DrawProgressBar,100) - @echo - @echo Done! - @echo - @echo Rebuild AI Command Macros whenever changing aicommands.def. - @echo "\n$(BELL)$(SAVECURSOR)$(RESTORESCROLLREGION)$(RESTORECURSOR)\033[1A" - -test: - @$(SHA1SUM) --quiet -c checksums.txt - @printf "\033[1;92m All Checked Files Match\033[0m\n\n" -# @$(SHA1SUM) $(BG__SEG_FILES) $(BRIEF_RZ_FILES) $(CHR_RZ_FILES) $(GUN_RZ_FILES) \ - $(PROP_RZ_FILES) $(SETUP_BIN_FILES) $(STAN_RZ_FILES) $(TEXT_RZ_FILES) > checksums.txt +test: checksum ifneq ($(filter-out context,$(MAKECMDGOALS)),) @@ -726,101 +430,71 @@ context: @echo "#define FALSE 0" >> build/ctx.h ifeq ($(CONTEXTFILE),build/ctx.c) @echo "#include " > build/ctx.c -endif +endif @sed -n -E ':x /\\$$/ { N; s/\\\n//g ; bx };''/(^\s*#define)|(\\$$)/p; /(\\$$)/p;' src/bondconstants.h src/bondtypes.h $(CONTEXTFILE) >> build/ctx.h @$(CC) -c $(CFLAGS) $(CONTEXTFILE) -E > build/ctx2.h 2> /dev/null || (rm build/ctx2.h && exit 1) @sed -E '/^\s*$$/d' build/ctx2.h >> build/ctx.h @rm build/ctx.c build/ctx2.h || exit 0 @echo You can find it in Build [build/ctx.h]. -testPB: - $(call SetupProgressBar) - $(call IncrementProgressBarFromAtRate,0,0.125) +extractassets: extract_u extract_e extract_j -textures: +extract_u: + @if [ ! -f assets/obseg/ob__ob_end.seg ]; then \ + echo "Extracting assets for u..."; \ + if [ -f baserom.u.z64 ]; then \ + scripts/extract_baserom.u.sh; \ + else \ + echo "Error: baserom.u.z64 not found."; \ + fi \ + else \ + echo "Assets for u already extracted."; \ + fi + +extract_e: + @if [ ! -f assets/obseg/text/e/LwaxP.bin ]; then \ + echo "Extracting assets for e..."; \ + if [ -f baserom.e.z64 ]; then \ + scripts/extract_diff.e.sh; \ + else \ + echo "Error: baserom.e.z64 not found."; \ + fi \ + else \ + echo "Assets for e already extracted."; \ + fi + +extract_j: + @if [ ! -f assets/obseg/text/j/LstatJ.bin ]; then \ + echo "Extracting assets for j..."; \ + if [ -f baserom.j.z64 ]; then \ + scripts/extract_diff.j.sh; \ + else \ + echo "Error: baserom.j.z64 not found."; \ + fi \ + else \ + echo "Assets for j already extracted."; \ + fi + +extract_rsp: + @if [ ! -f build/u/rsp/rspboot.bin ]; then \ + echo "Extracting rsp assets..."; \ + if [ -f baserom.u.z64 ]; then \ + scripts/extract_asp_gsp_rsp.sh; \ + else \ + echo "Error: baserom.u.z64 not found."; \ + fi \ + else \ + echo "RSP assets for already extracted."; \ + fi + +textures: tools/mktex/build/tex2png + @echo "Processing textures..." + mkdir -p assets/images/out $(foreach x,$(IMAGE_BINS),tools/mktex/build/tex2png $(x) assets/images/out ${\n}) - -colour: - @echo "\033[3A" - ifeq ($(VERBOSE),0) -# @clear - @$(call SetupProgressBar) - @$(call DrawProgressBar,0) - endif - @$(MAKE) --no-print-directory all 2>&1 | sed -E \ - -e 's/\(\(\x27E\x27\,\x27R\x27\,\x27R\x27\,\x27O\x27\,\x27R\x27,\s?((\x27?,?\s?\x27.)*)\x27,\s?\x27([^x27])\x27\)/((\x27ERROR\x27,\1\3\x27\)/g; :loop s/\(\((\x27ERROR)((\x27?,?\s?\x27.)*),?\s?\x27(.)\x27([^x27]*)\x27\)/((\1\2\5\x27\)/g; tloop; ' \ - -e "s/(ERROR:[^\x27]*?\x27)|(^.*[Ee]rror.*)|(Mis-Match in)|(:\sFAILED)/$$(echo "$(call SET_TEXTATTRIB,$(FG_RED))")&$$(echo "$(RESTORECOLOUR)")/g" \ - -e "s/^.*[Ww]arning.*/$$(echo "$(call SET_TEXTATTRIB,$(FG_YELLOW))")&$$(echo "$(RESTORECOLOUR)")/g" \ - -e "s/^.*(([Bb]uilding)|(:\sOK)|([Ll]inkin)).*/$$(echo "$(call SET_TEXTATTRIB,$(FG_LIME))")&$$(echo "$(RESTORECOLOUR)")/g" \ - -e "s/((([^\/]*([^s][^t][^d][^i][^n])\.c)|([^\/]*\.o))\s)/$$(echo "$(call SET_TEXTATTRIB,$(FG_WHITE))")&$$(echo "$(RESTORECOLOUR)")/g" - @echo "$(SAVECURSOR)$(RESTORESCROLLREGION)$(RESTORECURSOR)\033[1A" - -# hide output by default, unless this one of the following targets -ifeq ($(filter nuke,$(MAKECMDGOALS)),) -else - ifeq ($(VERBOSE),0) - .SILENT: - endif -endif - - -## Progress Bar status - call once ## -pb1: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,1,15) -endif -pb2: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,2,15) -endif -pb3: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,3,15) -endif -pb4: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,4,15) -endif -pb5: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,5,15) -endif -pb6: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,6,15) -endif -pb7: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,7,15) -endif -pb8: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,8,15) -endif -pb9: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,9,15) -endif -pb10: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,10,15) -endif -pb11: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,11,15) -endif -pb12: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,12,15) -endif -pb13: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,13,15) -endif -pb14: -ifeq ($(VERBOSE),0) - @$(call DrawProgressBar,14,15) -endif - +tools/mktex/build/tex2png: + @if [ ! -f tools/mktex/build/tex2png ]; then \ + echo "Building tex2png..."; \ + cd tools/mktex && $(MAKE); \ + fi \ No newline at end of file diff --git a/allbuild.sh b/allbuild.sh new file mode 100644 index 0000000..15173fb --- /dev/null +++ b/allbuild.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +declare -A build_times + +# Define the builds to run +build_types=("US" "EU" "JP" "DEBUG" "USB") + +for type in "${build_types[@]}"; do + make clean VERSION=$type + start_time=$(date +%s) + if make -j VERSION=$type; then + end_time=$(date +%s) + elapsed_time=$((end_time - start_time)) + hours=$((elapsed_time / 3600)) + minutes=$(((elapsed_time % 3600) / 60)) + seconds=$((elapsed_time % 60)) + build_times[$type]=$(printf "%02d:%02d:%02d" $hours $minutes $seconds) + else + build_times[$type]="failed" + fi +done + +echo "Build results:" +for type in "${build_types[@]}"; do + echo "$type: ${build_times[$type]}" +done \ No newline at end of file diff --git a/assets/font_dl.c b/assets/font_dl.c index c3b0713..e1c904f 100644 --- a/assets/font_dl.c +++ b/assets/font_dl.c @@ -1,33 +1,59 @@ #include -Gfx fontDL_0x000[4] = { +// Display list for basic geometry rendering without textures, shading, or lighting effects. +Gfx dlBasicGeometry[4] = { + // Clear all geometry modes to set a basic state gsSPClearGeometryMode(G_SHADE | G_SHADING_SMOOTH | G_CULL_FRONT | G_CULL_BACK | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD), + // Disable texture mapping gsSPTexture(0x0000, 0x0000, 0, 0, 0), + // Enable basic shading and smooth shading mode gsSPSetGeometryMode(G_SHADE | G_SHADING_SMOOTH ), + // End the display list gsSPEndDisplayList(), }; -Gfx fontDL_0x020[4] = { +// Display list for rendering with Z-buffering enabled for depth comparison. +Gfx dlZBufferGeometry[4] = { + // Clear all geometry modes to set a basic state gsSPClearGeometryMode(G_SHADE | G_SHADING_SMOOTH | G_CULL_FRONT | G_CULL_BACK | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD), + // Disable texture mapping gsSPTexture(0x0000, 0x0000, 0, 0, 0), + // Enable Z-buffering, basic shading, and smooth shading mode gsSPSetGeometryMode(G_ZBUFFER | G_SHADE | G_SHADING_SMOOTH ), + // End the display list gsSPEndDisplayList(), }; -Gfx fontDL_0x040[15] = { +// Display list for configuring the graphics pipeline for fast rendering with specific texture settings. +Gfx dlFastPipelineSetup[15] = { + // Set to one cycle rendering mode (faster rendering, fewer features) gsDPSetCycleType(G_CYC_1CYCLE), + // Set pipeline mode to handle one primitive per cycle gsDPPipelineMode(G_PM_1PRIMITIVE), + // Set texture level of detail to tile (use only one mipmap level) gsDPSetTextureLOD(G_TL_TILE), + // Disable texture lookup table (no color indexing) gsDPSetTextureLUT(G_TT_NONE), + // Clamp texture coordinates to prevent wrapping gsDPSetTextureDetail(G_TD_CLAMP), + // Enable perspective correction for textures gsDPSetTexturePersp(G_TP_PERSP), + // Use bilinear filtering for smoother textures gsDPSetTextureFilter(G_TF_BILERP), + // Convert texture to filtered format gsDPSetTextureConvert(G_TC_FILT), - gsDPSetCombineLERP(0, 0, 0, SHADE, 0, 0, 0, SHADE, 0, 0, 0, SHADE, 0, 0, 0, SHADE), + // Set color combiner to use vertex shading only + gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE), + // Disable color keying (no transparency based on color) gsDPSetCombineKey(G_CK_NONE), + // Disable alpha comparison (no transparency based on alpha) gsDPSetAlphaCompare( G_AC_NONE), + // Set render mode to opaque surface (two cycle mode) gsDPSetRenderMode(G_RM_PASS, G_RM_OPA_SURF2), + // Enable magic square dithering for smoother gradients gsDPSetColorDither(G_CD_MAGICSQ), + // Synchronize the pipeline to ensure commands are executed in order gsDPPipeSync(), + // End the display list gsSPEndDisplayList(), }; diff --git a/assets/font_dl.h b/assets/font_dl.h index 79894ad..f449e05 100644 --- a/assets/font_dl.h +++ b/assets/font_dl.h @@ -1,8 +1,8 @@ #ifndef _FONT_DL_H_ #define _FONT_DL_H_ -extern Gfx fontDL_0x000[4]; -extern Gfx fontDL_0x020[4]; -extern Gfx fontDL_0x040[15]; +extern Gfx dlBasicGeometry[4]; +extern Gfx dlZBufferGeometry[4]; +extern Gfx dlFastPipelineSetup[15]; #endif diff --git a/assets/images.def b/assets/images.def index 80068e3..2e0f059 100644 --- a/assets/images.def +++ b/assets/images.def @@ -1012,7 +1012,7 @@ IMAGE(1010, 0x612, HIT_DIRT, HIT_DIRT, 0, 0, 0, 0) IMAGE(1011, 0x71E, HIT_METALOBJ, HIT_METALOBJ, 0, 0, 0, 0) IMAGE(1012, 0x199, HIT_METALOBJ, HIT_METALOBJ, 0, 0, 0, 0) IMAGE(1013, 0x6AD, HIT_METALOBJ, HIT_METALOBJ, 0, 0, 0, 0) -IMAGE(1014, 0x1F3, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(PAPERCLIP, 0x1F3, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(STATIC_NOISE, 0x389, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(1016, 0x367, HIT_METAL, HIT_METAL, 0, 0, 0, 0) IMAGE(1017, 0x2FF, HIT_METAL, HIT_METAL, 0, 0, 0, 0) @@ -1275,7 +1275,7 @@ IMAGE(1273, 0x1F5, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(1274, 0x33E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(1275, 0x2D6, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(1276, 0x1A1, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(1277, 0xCB, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(GBGRADIENT, 0xCB, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(1278, 0x4F0, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(1279, 0x193, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(1280, 0x370, HIT_STONE, HIT_STONE, 0, 0, 0, 0) @@ -2536,46 +2536,46 @@ IMAGE(2534, 0x306, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(2535, 0x44B, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(2536, 0x412, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(2537, 0x7EB, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2538, 0x925, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2539, 0x959, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2540, 0x9A1, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2541, 0x950, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2542, 0x77E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2543, 0xA2E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2544, 0x8CB, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2545, 0x91E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2546, 0x90F, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2547, 0x8E8, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2548, 0x7A9, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2549, 0x9E0, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2550, 0x8BB, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2551, 0x913, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2552, 0x6B5, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2553, 0x83D, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2554, 0x85D, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2555, 0x840, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2556, 0x62A, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2557, 0x677, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2558, 0x407, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2559, 0x8B7, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2560, 0x8ED, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2561, 0x934, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2562, 0x730, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2563, 0x701, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2564, 0x785, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2565, 0x862, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2566, 0x799, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2567, 0x86E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2568, 0x71B, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2569, 0x5F3, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2570, 0x733, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2571, 0x758, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2572, 0xA27, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2573, 0xAA4, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2574, 0x761, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2575, 0x6F4, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2576, 0x632, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2577, 0x68B, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(ARCHIVES_U, 0x925, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(ARCHIVES_L, 0x959, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(CONTROL_U, 0x9A1, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(CONTROL_L, 0x950, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(FACILITY_U, 0x77E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) //2542 9ee +IMAGE(FACILITY_L, 0xA2E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(AZTEC_U, 0x8CB, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) //2544 9f0 +IMAGE(AZTEC_L, 0x91E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(EGYPT_U, 0x90F, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) // 9f2 +IMAGE(EGYPT_L, 0x8E8, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(CAVERNS_U, 0x7A9, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) //CAVERNS_U +IMAGE(CAVERNS_L, 0x9E0, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(CRADLE_U, 0x8BB, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) //CRADLE_U +IMAGE(CRADLE_L, 0x913, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(DAM_U, 0x6B5, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(DAM_L, 0x83D, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(DEPOT_U, 0x85D, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(DEPOT_L, 0x840, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(FRIGATE_U, 0x62A, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(FRIGATE_L, 0x677, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(JUNGLE_U, 0x407, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(JUNGLE_L, 0x8B7, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(STREETS_U, 0x8ED, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(STREETS_L, 0x934, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(RUNWAY_U, 0x730, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(RUNWAY_L, 0x701, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(BUNKERI_U, 0x785, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(BUNKERI_L, 0x862, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(BUNKERII_U, 0x799, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(BUNKERII_L, 0x86E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(SURFACEI_U, 0x71B, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(SURFACEI_L, 0x5F3, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(SURFACEII_U, 0x733, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(SURFACEII_L, 0x758, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(SILO_U, 0xA27, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(SILO_L, 0xAA4, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(STATUE_U, 0x761, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(STATUE_L, 0x6F4, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(TRAIN_U, 0x632, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(TRAIN_L, 0x68B, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(MP_ARCHIVES, 0x97D, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(MP_CONTROL, 0xA2E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(MP_FACILITY, 0x998, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) @@ -2596,10 +2596,10 @@ IMAGE(MP_SURFACE2, 0x833, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(MP_SILO, 0xA6E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(MP_STATUE, 0x837, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(MP_TRAIN, 0x8E6, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2598, 0x529, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2599, 0x51E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2600, 0x584, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2601, 0x5A6, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(MI6_UL, 0x529, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(MI6_UR, 0x51E, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(MI6_LL, 0x584, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(MI6_LR, 0x5A6, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(BROSNAN_UL, 0x57F, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(BROSNAN_UR, 0x5FD, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(BROSNAN_LL, 0x4CA, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) @@ -2616,19 +2616,19 @@ IMAGE(DALTON_UL, 0x594, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(DALTON_UR, 0x4BE, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(DALTON_LL, 0x54C, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(DALTON_LR, 0x513, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2618, 0x73D, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2619, 0x6E2, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2620, 0x6F4, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2621, 0x6DE, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2622, 0x66F, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2623, 0x6C4, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2624, 0x59B, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2625, 0x75A, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2626, 0x3A3, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2627, 0x67A, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2628, 0x6F2, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2629, 0x28A, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) -IMAGE(2630, 0x542, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(CLASSIFIED_L, 0x73D, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(CLASSIFIED_R, 0x6E2, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(CONFIDENTIAL_L, 0x6F4, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(CONFIDENTIAL_R, 0x6DE, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(EYESONLY_L, 0x66F, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(EYESONLY_R, 0x6C4, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(FORYOUR_L, 0x59B, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(FORYOUR_R, 0x75A, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(FOLDERTEX, 0x3A3, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(OHMSS_L, 0x67A, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(OHMSS_R, 0x6F2, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(PAPERTEX, 0x28A, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) +IMAGE(MI6, 0x542, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(DOT, 0x35, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(BORIS_UL, 0x4B8, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) IMAGE(BORIS_UR, 0x523, HIT_DEFAULT, HIT_DEFAULT, 0, 0, 0, 0) diff --git a/assets/obseg/Makefile.setup b/assets/obseg/Makefile.setup index ff08e43..16eed37 100644 --- a/assets/obseg/Makefile.setup +++ b/assets/obseg/Makefile.setup @@ -19,9 +19,8 @@ $(BUILD_DIR)/$(OBSEG_DIR)/setup/%.o: $(OBSEG_DIR)/setup/$(COUNTRYCODE)/%.c $(BUILD_DIR)/$(OBSEG_DIR)/setup/%.o: $(OBSEG_DIR)/setup/%.c # $(CC) -c $(CFLAGS) -o $@ -O2 $< - $(call PRINT_STATUS,CompilingSETUP:,$<,$@) # convert AI_PRINT commands from readable to byte-array - $(ConvertAIPRINT) $< | $(CC) -c $(CFLAGS) tools/asmpreproc/include-stdin.c -o $@ $(OPTIMIZATION) + $(ConvertAIPRINT) $< | $(CC) -c $(CFLAGS) tools/asm-processor/include-stdin.c -o $@ $(OPTIMIZATION) SETUP_NAMES := \ Ump_setupameZ \ diff --git a/assets/obseg/brief/UbriefarchZ.c b/assets/obseg/brief/UbriefarchZ.c index fe99e59..e8be236 100644 --- a/assets/obseg/brief/UbriefarchZ.c +++ b/assets/obseg/brief/UbriefarchZ.c @@ -2,16 +2,16 @@ struct BriefStruct UbriefarchZ = { { /* Mission Briefing */ - TEXT(LARCH, 0), /* Background */ - TEXT(LARCH, 1), /* M Briefing */ - TEXT(LARCH, 2), /* Q Branch */ - TEXT(LARCH, 3) /* Moneypenny */ + getStringID(LARCH, 0), /* Background */ + getStringID(LARCH, 1), /* M Briefing */ + getStringID(LARCH, 2), /* Q Branch */ + getStringID(LARCH, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LARCH, 4), DIFFICULTY_AGENT}, /* Escape from interrogation room */ - {TEXT(LARCH, 5), DIFFICULTY_AGENT}, /* Find Natalya */ - {TEXT(LARCH, 6), DIFFICULTY_SECRET}, /* Recover helicopter black box */ - {TEXT(LARCH, 7), DIFFICULTY_AGENT}, /* Escape with Natalya */ + {getStringID(LARCH, 4), DIFFICULTY_AGENT}, /* Escape from interrogation room */ + {getStringID(LARCH, 5), DIFFICULTY_AGENT}, /* Find Natalya */ + {getStringID(LARCH, 6), DIFFICULTY_SECRET}, /* Recover helicopter black box */ + {getStringID(LARCH, 7), DIFFICULTY_AGENT}, /* Escape with Natalya */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefarkZ.c b/assets/obseg/brief/UbriefarkZ.c index 4e1d242..25920cd 100644 --- a/assets/obseg/brief/UbriefarkZ.c +++ b/assets/obseg/brief/UbriefarkZ.c @@ -2,17 +2,17 @@ struct BriefStruct UbriefarkZ = { { /* Mission Briefing */ - TEXT(LARK, 0), /* Background */ - TEXT(LARK, 1), /* M Briefing */ - TEXT(LARK, 2), /* Q Branch */ - TEXT(LARK, 3) /* Moneypenny */ + getStringID(LARK, 0), /* Background */ + getStringID(LARK, 1), /* M Briefing */ + getStringID(LARK, 2), /* Q Branch */ + getStringID(LARK, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LARK, 4), DIFFICULTY_AGENT}, /* Gain entry to lab area */ - {TEXT(LARK, 5), DIFFICULTY_SECRET}, /* Contact double agent */ - {TEXT(LARK, 6), DIFFICULTY_AGENT}, /* Rendezvous with 006 */ - {TEXT(LARK, 7), DIFFICULTY_AGENT}, /* Destroy all tanks in bottling room */ - {TEXT(LARK, 8), DIFFICULTY_AGENT}, /* Minimize scientist casualties */ + {getStringID(LARK, 4), DIFFICULTY_AGENT}, /* Gain entry to lab area */ + {getStringID(LARK, 5), DIFFICULTY_SECRET}, /* Contact double agent */ + {getStringID(LARK, 6), DIFFICULTY_AGENT}, /* Rendezvous with 006 */ + {getStringID(LARK, 7), DIFFICULTY_AGENT}, /* Destroy all tanks in bottling room */ + {getStringID(LARK, 8), DIFFICULTY_AGENT}, /* Minimize scientist casualties */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefaztZ.c b/assets/obseg/brief/UbriefaztZ.c index 57150cd..50d1878 100644 --- a/assets/obseg/brief/UbriefaztZ.c +++ b/assets/obseg/brief/UbriefaztZ.c @@ -2,14 +2,14 @@ struct BriefStruct UbriefaztZ = { { /* Mission Briefing */ - TEXT(LAZT, 0), /* Background */ - TEXT(LAZT, 1), /* M Briefing */ - TEXT(LAZT, 2), /* Q Branch */ - TEXT(LAZT, 3) /* Moneypenny */ + getStringID(LAZT, 0), /* Background */ + getStringID(LAZT, 1), /* M Briefing */ + getStringID(LAZT, 2), /* Q Branch */ + getStringID(LAZT, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LAZT, 4), DIFFICULTY_AGENT}, /* Reprogram shuttle guidance */ - {TEXT(LAZT, 5), DIFFICULTY_AGENT}, /* Launch shuttle */ + {getStringID(LAZT, 4), DIFFICULTY_AGENT}, /* Reprogram shuttle guidance */ + {getStringID(LAZT, 5), DIFFICULTY_AGENT}, /* Launch shuttle */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefcaveZ.c b/assets/obseg/brief/UbriefcaveZ.c index 3a1673e..a3bcf4a 100644 --- a/assets/obseg/brief/UbriefcaveZ.c +++ b/assets/obseg/brief/UbriefcaveZ.c @@ -2,18 +2,18 @@ struct BriefStruct UbriefcaveZ = { { /* Mission Briefing */ - TEXT(LCAVE, 0), /* Background */ - TEXT(LCAVE, 1), /* M Briefing */ - TEXT(LCAVE, 2), /* Q Branch */ - TEXT(LCAVE, 3) /* Moneypenny */ + getStringID(LCAVE, 0), /* Background */ + getStringID(LCAVE, 1), /* M Briefing */ + getStringID(LCAVE, 2), /* Q Branch */ + getStringID(LCAVE, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LCAVE, 4), DIFFICULTY_SECRET}, /* Destroy inlet pump controls */ - {TEXT(LCAVE, 5), DIFFICULTY_SECRET}, /* Destroy outlet pump controls */ - {TEXT(LCAVE, 6), DIFFICULTY_SECRET}, /* Destroy master control console */ - {TEXT(LCAVE, 7), DIFFICULTY_00}, /* Use radio to contact Jack Wade */ + {getStringID(LCAVE, 4), DIFFICULTY_SECRET}, /* Destroy inlet pump controls */ + {getStringID(LCAVE, 5), DIFFICULTY_SECRET}, /* Destroy outlet pump controls */ + {getStringID(LCAVE, 6), DIFFICULTY_SECRET}, /* Destroy master control console */ + {getStringID(LCAVE, 7), DIFFICULTY_00}, /* Use radio to contact Jack Wade */ /*{TEXT(LCAVE, 8), DIFFICULTY_AGENT},*/ /* Pursue Trevelyan */ - {TEXT(LCAVE, 9), DIFFICULTY_AGENT}, /* Minimize scientist casualties */ + {getStringID(LCAVE, 9), DIFFICULTY_AGENT}, /* Minimize scientist casualties */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefcontrolZ.c b/assets/obseg/brief/UbriefcontrolZ.c index 1de1c3d..02b5811 100644 --- a/assets/obseg/brief/UbriefcontrolZ.c +++ b/assets/obseg/brief/UbriefcontrolZ.c @@ -2,15 +2,15 @@ struct BriefStruct UbriefcontrolZ = { { /* Mission Briefing */ - TEXT(LAREC, 0), /* Background */ - TEXT(LAREC, 1), /* M Briefing */ - TEXT(LAREC, 2), /* Q Branch */ - TEXT(LAREC, 3) /* Moneypenny */ + getStringID(LAREC, 0), /* Background */ + getStringID(LAREC, 1), /* M Briefing */ + getStringID(LAREC, 2), /* Q Branch */ + getStringID(LAREC, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LAREC, 4), DIFFICULTY_AGENT}, /* Protect Natalya */ - {TEXT(LAREC, 5), DIFFICULTY_AGENT}, /* Disable Goldeneye satellite */ - {TEXT(LAREC, 6), DIFFICULTY_AGENT}, /* Destroy armored mainframes */ + {getStringID(LAREC, 4), DIFFICULTY_AGENT}, /* Protect Natalya */ + {getStringID(LAREC, 5), DIFFICULTY_AGENT}, /* Disable Goldeneye satellite */ + {getStringID(LAREC, 6), DIFFICULTY_AGENT}, /* Destroy armored mainframes */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefcradZ.c b/assets/obseg/brief/UbriefcradZ.c index 45f4442..049df8a 100644 --- a/assets/obseg/brief/UbriefcradZ.c +++ b/assets/obseg/brief/UbriefcradZ.c @@ -2,14 +2,14 @@ struct BriefStruct UbriefcradZ = { { /* Mission Briefing */ - TEXT(LCRAD, 0), /* Background */ - TEXT(LCRAD, 1), /* M Briefing */ - TEXT(LCRAD, 2), /* Q Branch */ - TEXT(LCRAD, 3) /* Moneypenny */ + getStringID(LCRAD, 0), /* Background */ + getStringID(LCRAD, 1), /* M Briefing */ + getStringID(LCRAD, 2), /* Q Branch */ + getStringID(LCRAD, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LCRAD, 4), DIFFICULTY_AGENT}, /* Destroy control console */ - {TEXT(LCRAD, 5), DIFFICULTY_AGENT}, /* Settle the score with Trevelyan */ + {getStringID(LCRAD, 4), DIFFICULTY_AGENT}, /* Destroy control console */ + {getStringID(LCRAD, 5), DIFFICULTY_AGENT}, /* Settle the score with Trevelyan */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefcrypZ.c b/assets/obseg/brief/UbriefcrypZ.c index 62c8807..c5d6f0d 100644 --- a/assets/obseg/brief/UbriefcrypZ.c +++ b/assets/obseg/brief/UbriefcrypZ.c @@ -2,14 +2,14 @@ struct BriefStruct UbriefcrypZ = { { /* Mission Briefing */ - TEXT(LCRYP, 0), /* Background */ - TEXT(LCRYP, 1), /* M Briefing */ - TEXT(LCRYP, 2), /* Q Branch */ - TEXT(LCRYP, 3) /* Moneypenny */ + getStringID(LCRYP, 0), /* Background */ + getStringID(LCRYP, 1), /* M Briefing */ + getStringID(LCRYP, 2), /* Q Branch */ + getStringID(LCRYP, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LCRYP, 4), DIFFICULTY_AGENT}, /* Recover the golden gun */ - {TEXT(LCRYP, 5), DIFFICULTY_AGENT}, /* Defeat Baron Samedi? */ + {getStringID(LCRYP, 4), DIFFICULTY_AGENT}, /* Recover the golden gun */ + {getStringID(LCRYP, 5), DIFFICULTY_AGENT}, /* Defeat Baron Samedi? */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefdamZ.c b/assets/obseg/brief/UbriefdamZ.c index 89dc73a..db9df24 100644 --- a/assets/obseg/brief/UbriefdamZ.c +++ b/assets/obseg/brief/UbriefdamZ.c @@ -2,16 +2,16 @@ struct BriefStruct UbriefdamZ = { { /* Mission Briefing */ - TEXT(LDAM, 0), /* Background */ - TEXT(LDAM, 1), /* M Briefing */ - TEXT(LDAM, 2), /* Q Branch */ - TEXT(LDAM, 3) /* Moneypenny */ + getStringID(LDAM, 0), /* Background */ + getStringID(LDAM, 1), /* M Briefing */ + getStringID(LDAM, 2), /* Q Branch */ + getStringID(LDAM, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LDAM, 4), DIFFICULTY_SECRET}, /* Neutralize all alarms */ - {TEXT(LDAM, 5), DIFFICULTY_00}, /* Install covert modem */ - {TEXT(LDAM, 6), DIFFICULTY_00}, /* Intercept data backup */ - {TEXT(LDAM, 7), DIFFICULTY_AGENT}, /* Bungee jump from platform */ + {getStringID(LDAM, 4), DIFFICULTY_SECRET}, /* Neutralize all alarms */ + {getStringID(LDAM, 5), DIFFICULTY_00}, /* Install covert modem */ + {getStringID(LDAM, 6), DIFFICULTY_00}, /* Intercept data backup */ + {getStringID(LDAM, 7), DIFFICULTY_AGENT}, /* Bungee jump from platform */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefdepoZ.c b/assets/obseg/brief/UbriefdepoZ.c index 7e2d9e5..9b727e6 100644 --- a/assets/obseg/brief/UbriefdepoZ.c +++ b/assets/obseg/brief/UbriefdepoZ.c @@ -2,17 +2,17 @@ struct BriefStruct UbriefdepoZ = { { /* Mission Briefing */ - TEXT(LDEPO, 0), /* Background */ - TEXT(LDEPO, 1), /* M Briefing */ - TEXT(LDEPO, 2), /* Q Branch */ - TEXT(LDEPO, 3) /* Moneypenny */ + getStringID(LDEPO, 0), /* Background */ + getStringID(LDEPO, 1), /* M Briefing */ + getStringID(LDEPO, 2), /* Q Branch */ + getStringID(LDEPO, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LDEPO, 4), DIFFICULTY_00}, /* Destroy illegal arms cache */ - {TEXT(LDEPO, 5), DIFFICULTY_SECRET}, /* Destroy computer network */ - {TEXT(LDEPO, 6), DIFFICULTY_SECRET}, /* Obtain safe key */ - {TEXT(LDEPO, 7), DIFFICULTY_SECRET}, /* Recover helicopter blueprints */ - {TEXT(LDEPO, 8), DIFFICULTY_AGENT}, /* Locate Trevelyan's train */ + {getStringID(LDEPO, 4), DIFFICULTY_00}, /* Destroy illegal arms cache */ + {getStringID(LDEPO, 5), DIFFICULTY_SECRET}, /* Destroy computer network */ + {getStringID(LDEPO, 6), DIFFICULTY_SECRET}, /* Obtain safe key */ + {getStringID(LDEPO, 7), DIFFICULTY_SECRET}, /* Recover helicopter blueprints */ + {getStringID(LDEPO, 8), DIFFICULTY_AGENT}, /* Locate Trevelyan's train */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefdestZ.c b/assets/obseg/brief/UbriefdestZ.c index 6d179df..e77602d 100644 --- a/assets/obseg/brief/UbriefdestZ.c +++ b/assets/obseg/brief/UbriefdestZ.c @@ -2,16 +2,16 @@ struct BriefStruct UbriefdestZ = { { /* Mission Briefing */ - TEXT(LDEST, 0), /* Background */ - TEXT(LDEST, 1), /* M Briefing */ - TEXT(LDEST, 2), /* Q Branch */ - TEXT(LDEST, 3) /* Moneypenny */ + getStringID(LDEST, 0), /* Background */ + getStringID(LDEST, 1), /* M Briefing */ + getStringID(LDEST, 2), /* Q Branch */ + getStringID(LDEST, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LDEST, 4), DIFFICULTY_AGENT}, /* Rescue Hostages */ - {TEXT(LDEST, 5), DIFFICULTY_SECRET}, /* Disarm bridge bomb */ - {TEXT(LDEST, 6), DIFFICULTY_SECRET}, /* Disarm engine room bomb */ - {TEXT(LDEST, 7), DIFFICULTY_AGENT}, /* Plant tracking bug on helicopter */ + {getStringID(LDEST, 4), DIFFICULTY_AGENT}, /* Rescue Hostages */ + {getStringID(LDEST, 5), DIFFICULTY_SECRET}, /* Disarm bridge bomb */ + {getStringID(LDEST, 6), DIFFICULTY_SECRET}, /* Disarm engine room bomb */ + {getStringID(LDEST, 7), DIFFICULTY_AGENT}, /* Plant tracking bug on helicopter */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefjunZ.c b/assets/obseg/brief/UbriefjunZ.c index 65726e0..32b46c5 100644 --- a/assets/obseg/brief/UbriefjunZ.c +++ b/assets/obseg/brief/UbriefjunZ.c @@ -2,16 +2,16 @@ struct BriefStruct UbriefjunZ = { { /* Mission Briefing */ - TEXT(LJUN, 0), /* Background */ - TEXT(LJUN, 1), /* M Briefing */ - TEXT(LJUN, 2), /* Q Branch */ - TEXT(LJUN, 3) /* Moneypenny */ + getStringID(LJUN, 0), /* Background */ + getStringID(LJUN, 1), /* M Briefing */ + getStringID(LJUN, 2), /* Q Branch */ + getStringID(LJUN, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LJUN, 4), DIFFICULTY_AGENT}, /* Destroy drone guns */ - {TEXT(LJUN, 5), DIFFICULTY_AGENT}, /* Eliminate Xenia */ - {TEXT(LJUN, 6), DIFFICULTY_SECRET}, /* Blow up ammo dump */ - {TEXT(LJUN, 7), DIFFICULTY_AGENT}, /* Escort Natalya to Janus Base */ + {getStringID(LJUN, 4), DIFFICULTY_AGENT}, /* Destroy drone guns */ + {getStringID(LJUN, 5), DIFFICULTY_AGENT}, /* Eliminate Xenia */ + {getStringID(LJUN, 6), DIFFICULTY_SECRET}, /* Blow up ammo dump */ + {getStringID(LJUN, 7), DIFFICULTY_AGENT}, /* Escort Natalya to Janus Base */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefpeteZ.c b/assets/obseg/brief/UbriefpeteZ.c index 86cbc56..b560a55 100644 --- a/assets/obseg/brief/UbriefpeteZ.c +++ b/assets/obseg/brief/UbriefpeteZ.c @@ -2,15 +2,15 @@ struct BriefStruct UbriefpeteZ = { { /* Mission Briefing */ - TEXT(LPETE, 0), /* Background */ - TEXT(LPETE, 1), /* M Briefing */ - TEXT(LPETE, 2), /* Q Branch */ - TEXT(LPETE, 3) /* Moneypenny */ + getStringID(LPETE, 0), /* Background */ + getStringID(LPETE, 1), /* M Briefing */ + getStringID(LPETE, 2), /* Q Branch */ + getStringID(LPETE, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LPETE, 6), DIFFICULTY_SECRET}, /* Contact Valentin */ - {TEXT(LPETE, 4), DIFFICULTY_AGENT}, /* Pursue Ourumov and Natalya */ - {TEXT(LPETE, 5), DIFFICULTY_AGENT}, /* Minimize civilian casualties */ + {getStringID(LPETE, 6), DIFFICULTY_SECRET}, /* Contact Valentin */ + {getStringID(LPETE, 4), DIFFICULTY_AGENT}, /* Pursue Ourumov and Natalya */ + {getStringID(LPETE, 5), DIFFICULTY_AGENT}, /* Minimize civilian casualties */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefrunZ.c b/assets/obseg/brief/UbriefrunZ.c index fd15672..3ed901d 100644 --- a/assets/obseg/brief/UbriefrunZ.c +++ b/assets/obseg/brief/UbriefrunZ.c @@ -2,16 +2,16 @@ struct BriefStruct UbriefrunZ = { { /* Mission Briefing */ - TEXT(LRUN, 0), /* Background */ - TEXT(LRUN, 1), /* M Briefing */ - TEXT(LRUN, 2), /* Q Branch */ - TEXT(LRUN, 3) /* Moneypenny */ + getStringID(LRUN, 0), /* Background */ + getStringID(LRUN, 1), /* M Briefing */ + getStringID(LRUN, 2), /* Q Branch */ + getStringID(LRUN, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LRUN, 4), DIFFICULTY_AGENT}, /* Find plane ignition key */ - {TEXT(LRUN, 5), DIFFICULTY_00}, /* Destroy heavy gun emplacements */ - {TEXT(LRUN, 6), DIFFICULTY_SECRET}, /* Destroy missile battery */ - {TEXT(LRUN, 7), DIFFICULTY_AGENT}, /* Escape in plane */ + {getStringID(LRUN, 4), DIFFICULTY_AGENT}, /* Find plane ignition key */ + {getStringID(LRUN, 5), DIFFICULTY_00}, /* Destroy heavy gun emplacements */ + {getStringID(LRUN, 6), DIFFICULTY_SECRET}, /* Destroy missile battery */ + {getStringID(LRUN, 7), DIFFICULTY_AGENT}, /* Escape in plane */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefsevbZ.c b/assets/obseg/brief/UbriefsevbZ.c index e2d54b5..3ddb82f 100644 --- a/assets/obseg/brief/UbriefsevbZ.c +++ b/assets/obseg/brief/UbriefsevbZ.c @@ -2,17 +2,17 @@ struct BriefStruct UbriefsevbZ = { { /* Mission Briefing */ - TEXT(LSEVB, 0), /* Background */ - TEXT(LSEVB, 1), /* M Briefing */ - TEXT(LSEVB, 2), /* Q Branch */ - TEXT(LSEVB, 3) /* Moneypenny */ + getStringID(LSEVB, 0), /* Background */ + getStringID(LSEVB, 1), /* M Briefing */ + getStringID(LSEVB, 2), /* Q Branch */ + getStringID(LSEVB, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LSEVB, 4), DIFFICULTY_SECRET}, /* Compare staff / casualty lists */ - {TEXT(LSEVB, 5), DIFFICULTY_AGENT}, /* Recover CCTV tape */ - {TEXT(LSEVB, 6), DIFFICULTY_SECRET}, /* Disable all security cameras */ - {TEXT(LSEVB, 7), DIFFICULTY_00}, /* Recover Goldeneye operations manual */ - {TEXT(LSEVB, 8), DIFFICULTY_AGENT}, /* Escape with Natalya */ + {getStringID(LSEVB, 4), DIFFICULTY_SECRET}, /* Compare staff / casualty lists */ + {getStringID(LSEVB, 5), DIFFICULTY_AGENT}, /* Recover CCTV tape */ + {getStringID(LSEVB, 6), DIFFICULTY_SECRET}, /* Disable all security cameras */ + {getStringID(LSEVB, 7), DIFFICULTY_00}, /* Recover Goldeneye operations manual */ + {getStringID(LSEVB, 8), DIFFICULTY_AGENT}, /* Escape with Natalya */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefsevbunkerZ.c b/assets/obseg/brief/UbriefsevbunkerZ.c index 504a6ad..e281717 100644 --- a/assets/obseg/brief/UbriefsevbunkerZ.c +++ b/assets/obseg/brief/UbriefsevbunkerZ.c @@ -2,17 +2,17 @@ struct BriefStruct UbriefsevbunkerZ = { { /* Mission Briefing */ - TEXT(LSEV, 0), /* Background */ - TEXT(LSEV, 1), /* M Briefing */ - TEXT(LSEV, 2), /* Q Branch */ - TEXT(LSEV, 3) /* Moneypenny */ + getStringID(LSEV, 0), /* Background */ + getStringID(LSEV, 1), /* M Briefing */ + getStringID(LSEV, 2), /* Q Branch */ + getStringID(LSEV, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LSEV, 4), DIFFICULTY_SECRET}, /* Disrupt all surveillance equipment */ - {TEXT(LSEV, 5), DIFFICULTY_AGENT}, /* Copy Goldeneye key and leave original */ - {TEXT(LSEV, 6), DIFFICULTY_00}, /* Get personnel to activate computer */ - {TEXT(LSEV, 7), DIFFICULTY_00}, /* Download data from computer */ - {TEXT(LSEV, 8), DIFFICULTY_AGENT}, /* Photograph main video screen */ + {getStringID(LSEV, 4), DIFFICULTY_SECRET}, /* Disrupt all surveillance equipment */ + {getStringID(LSEV, 5), DIFFICULTY_AGENT}, /* Copy Goldeneye key and leave original */ + {getStringID(LSEV, 6), DIFFICULTY_00}, /* Get personnel to activate computer */ + {getStringID(LSEV, 7), DIFFICULTY_00}, /* Download data from computer */ + {getStringID(LSEV, 8), DIFFICULTY_AGENT}, /* Photograph main video screen */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefsevxZ.c b/assets/obseg/brief/UbriefsevxZ.c index 3adbbb9..e37a5dc 100644 --- a/assets/obseg/brief/UbriefsevxZ.c +++ b/assets/obseg/brief/UbriefsevxZ.c @@ -2,16 +2,16 @@ struct BriefStruct UbriefsevxZ = { { /* Mission Briefing */ - TEXT(LSEVX, 0), /* Background */ - TEXT(LSEVX, 1), /* M Briefing */ - TEXT(LSEVX, 2), /* Q Branch */ - TEXT(LSEVX, 3) /* Moneypenny */ + getStringID(LSEVX, 0), /* Background */ + getStringID(LSEVX, 1), /* M Briefing */ + getStringID(LSEVX, 2), /* Q Branch */ + getStringID(LSEVX, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LSEVX, 4), DIFFICULTY_AGENT}, /* Power down communications dish */ - {TEXT(LSEVX, 5), DIFFICULTY_SECRET}, /* Obtain safe key */ - {TEXT(LSEVX, 6), DIFFICULTY_SECRET}, /* Steal building plans */ - {TEXT(LSEVX, 7), DIFFICULTY_AGENT}, /* Enter base via ventilation tower */ + {getStringID(LSEVX, 4), DIFFICULTY_AGENT}, /* Power down communications dish */ + {getStringID(LSEVX, 5), DIFFICULTY_SECRET}, /* Obtain safe key */ + {getStringID(LSEVX, 6), DIFFICULTY_SECRET}, /* Steal building plans */ + {getStringID(LSEVX, 7), DIFFICULTY_AGENT}, /* Enter base via ventilation tower */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefsevxbZ.c b/assets/obseg/brief/UbriefsevxbZ.c index 03d36d2..8ff2baa 100644 --- a/assets/obseg/brief/UbriefsevxbZ.c +++ b/assets/obseg/brief/UbriefsevxbZ.c @@ -2,16 +2,16 @@ struct BriefStruct UbriefsevxbZ = { { /* Mission Briefing */ - TEXT(LSEVXB, 0), /* Background */ - TEXT(LSEVXB, 1), /* M Briefing */ - TEXT(LSEVXB, 2), /* Q Branch */ - TEXT(LSEVXB, 3) /* Moneypenny */ + getStringID(LSEVXB, 0), /* Background */ + getStringID(LSEVXB, 1), /* M Briefing */ + getStringID(LSEVXB, 2), /* Q Branch */ + getStringID(LSEVXB, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LSEVXB, 4), DIFFICULTY_00}, /* Disrupt all surveillance equipment */ - {TEXT(LSEVXB, 5), DIFFICULTY_AGENT}, /* Break communications link to bunker */ - {TEXT(LSEVXB, 6), DIFFICULTY_SECRET}, /* Disable Spetznaz support aircraft */ - {TEXT(LSEVXB, 7), DIFFICULTY_AGENT}, /* Gain entry to bunker */ + {getStringID(LSEVXB, 4), DIFFICULTY_00}, /* Disrupt all surveillance equipment */ + {getStringID(LSEVXB, 5), DIFFICULTY_AGENT}, /* Break communications link to bunker */ + {getStringID(LSEVXB, 6), DIFFICULTY_SECRET}, /* Disable Spetznaz support aircraft */ + {getStringID(LSEVXB, 7), DIFFICULTY_AGENT}, /* Gain entry to bunker */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefsiloZ.c b/assets/obseg/brief/UbriefsiloZ.c index a666edd..ee4e240 100644 --- a/assets/obseg/brief/UbriefsiloZ.c +++ b/assets/obseg/brief/UbriefsiloZ.c @@ -2,17 +2,17 @@ struct BriefStruct UbriefsiloZ = { { /* Mission Briefing */ - TEXT(LSILO, 0), /* Background */ - TEXT(LSILO, 1), /* M Briefing */ - TEXT(LSILO, 2), /* Q Branch */ - TEXT(LSILO, 3) /* Moneypenny */ + getStringID(LSILO, 0), /* Background */ + getStringID(LSILO, 1), /* M Briefing */ + getStringID(LSILO, 2), /* Q Branch */ + getStringID(LSILO, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LSILO, 4), DIFFICULTY_00}, /* Plant bombs in fuel rooms */ - {TEXT(LSILO, 5), DIFFICULTY_AGENT}, /* Photograph satellite */ - {TEXT(LSILO, 6), DIFFICULTY_SECRET}, /* Obtain telemetric data */ - {TEXT(LSILO, 7), DIFFICULTY_SECRET}, /* Retrieve satellite circuitry */ - {TEXT(LSILO, 8), DIFFICULTY_AGENT}, /* Minimize scientist casualties */ + {getStringID(LSILO, 4), DIFFICULTY_00}, /* Plant bombs in fuel rooms */ + {getStringID(LSILO, 5), DIFFICULTY_AGENT}, /* Photograph satellite */ + {getStringID(LSILO, 6), DIFFICULTY_SECRET}, /* Obtain telemetric data */ + {getStringID(LSILO, 7), DIFFICULTY_SECRET}, /* Retrieve satellite circuitry */ + {getStringID(LSILO, 8), DIFFICULTY_AGENT}, /* Minimize scientist casualties */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbriefstatueZ.c b/assets/obseg/brief/UbriefstatueZ.c index 7b1d468..cf09a34 100644 --- a/assets/obseg/brief/UbriefstatueZ.c +++ b/assets/obseg/brief/UbriefstatueZ.c @@ -2,17 +2,17 @@ struct BriefStruct UbriefstatueZ = { { /* Mission Briefing */ - TEXT(LSTAT, 0), /* Background */ - TEXT(LSTAT, 1), /* M Briefing */ - TEXT(LSTAT, 2), /* Q Branch */ - TEXT(LSTAT, 3) /* Moneypenny */ + getStringID(LSTAT, 0), /* Background */ + getStringID(LSTAT, 1), /* M Briefing */ + getStringID(LSTAT, 2), /* Q Branch */ + getStringID(LSTAT, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LSTAT, 4), DIFFICULTY_AGENT}, /* Contact Valentin */ - {TEXT(LSTAT, 5), DIFFICULTY_AGENT}, /* Confront and unmask Janus */ - {TEXT(LSTAT, 6), DIFFICULTY_AGENT}, /* Locate helicopter */ - {TEXT(LSTAT, 7), DIFFICULTY_AGENT}, /* Rescue Natalya */ - {TEXT(LSTAT, 8), DIFFICULTY_AGENT}, /* Find flight recorder */ + {getStringID(LSTAT, 4), DIFFICULTY_AGENT}, /* Contact Valentin */ + {getStringID(LSTAT, 5), DIFFICULTY_AGENT}, /* Confront and unmask Janus */ + {getStringID(LSTAT, 6), DIFFICULTY_AGENT}, /* Locate helicopter */ + {getStringID(LSTAT, 7), DIFFICULTY_AGENT}, /* Rescue Natalya */ + {getStringID(LSTAT, 8), DIFFICULTY_AGENT}, /* Find flight recorder */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/brief/UbrieftraZ.c b/assets/obseg/brief/UbrieftraZ.c index 51fa72d..4de4941 100644 --- a/assets/obseg/brief/UbrieftraZ.c +++ b/assets/obseg/brief/UbrieftraZ.c @@ -2,17 +2,17 @@ struct BriefStruct UbrieftraZ = { { /* Mission Briefing */ - TEXT(LTRA, 0), /* Background */ - TEXT(LTRA, 1), /* M Briefing */ - TEXT(LTRA, 2), /* Q Branch */ - TEXT(LTRA, 3) /* Moneypenny */ + getStringID(LTRA, 0), /* Background */ + getStringID(LTRA, 1), /* M Briefing */ + getStringID(LTRA, 2), /* Q Branch */ + getStringID(LTRA, 3) /* Moneypenny */ }, { /* Objectives (Text and Difficult) */ - {TEXT(LTRA, 4), DIFFICULTY_AGENT}, /* Destroy brake units */ - {TEXT(LTRA, 5), DIFFICULTY_AGENT}, /* Rescue Natalya */ - {TEXT(LTRA, 6), DIFFICULTY_SECRET}, /* Locate Janus secret base */ - {TEXT(LTRA, 7), DIFFICULTY_00}, /* Crack Boris' password */ - {TEXT(LTRA, 8), DIFFICULTY_AGENT}, /* Escape to safety */ + {getStringID(LTRA, 4), DIFFICULTY_AGENT}, /* Destroy brake units */ + {getStringID(LTRA, 5), DIFFICULTY_AGENT}, /* Rescue Natalya */ + {getStringID(LTRA, 6), DIFFICULTY_SECRET}, /* Locate Janus secret base */ + {getStringID(LTRA, 7), DIFFICULTY_00}, /* Crack Boris' password */ + {getStringID(LTRA, 8), DIFFICULTY_AGENT}, /* Escape to safety */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ {0, 0}, /* Not assigned */ diff --git a/assets/obseg/gun/fist/gunFileRecord.inc.c b/assets/obseg/gun/fist/gunFileRecord.inc.c index 615bd30..46d9249 100644 --- a/assets/obseg/gun/fist/gunFileRecord.inc.c +++ b/assets/obseg/gun/fist/gunFileRecord.inc.c @@ -1,2 +1,2 @@ /*NAME, NOMODEL, STATS, UPPERTEXTID, LOWERTEXTID, POSX, POSY, POSZ, XROT, YROT, WOCTEXT, EQUIPTEXT, EQUIPX, EQUIPY, EQUIPZ*/ -GUNFILERECORD( fist, 0, GUNSTATS(fist), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_76), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_76), TEXT(LGUN, GUN_STR_CD), 10.0, 10.0, 1000.0) +GUNFILERECORD( fist, 0, GUNSTATS(fist), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_76_UNARMED_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_76_UNARMED_LF), getStringID(LGUN, GUN_STR_CD_UNARMED_LF), 10.0, 10.0, 1000.0) diff --git a/assets/obseg/gun/gunModelFileRecord.inc.c b/assets/obseg/gun/gunModelFileRecord.inc.c index ca4c561..780bfb0 100644 --- a/assets/obseg/gun/gunModelFileRecord.inc.c +++ b/assets/obseg/gun/gunModelFileRecord.inc.c @@ -2,90 +2,90 @@ GunModelFileRecord gitem_structs[] = { { NULL, NULL, TRUE, NULL, 0x9883, 0x9811, 0.0, 0.0, 1000.0, 0.0, 0.0, 0x9811, 0x9811, 10.0, 10.0, 1000.0}, #include #include - GUNFILERECORD( throwknife, 0, GUNSTATS(throwknife), TEXT(LGUN, GUN_STR_71), TEXT(LGUN, GUN_STR_06), 200.0, 51.0, 1327.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_70), TEXT(LGUN, GUN_STR_CA), 38.0, 118.0, 800.0) - GUNFILERECORD( wppk, 0, GUNSTATS(wppk), TEXT(LGUN, GUN_STR_57), TEXT(LGUN, GUN_STR_01), 20.0, 97.0, 579.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_56), TEXT(LGUN, GUN_STR_BA), 94.0, 2.0, 356.0) - GUNFILERECORD( wppksil, 0, GUNSTATS(wppksil), TEXT(LGUN, GUN_STR_03), TEXT(LGUN, GUN_STR_10), 26.0, 162.0, 668.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_55), TEXT(LGUN, GUN_STR_B9), 169.0, 5.0, 535.0) - GUNFILERECORD( tt33, 0, GUNSTATS(tt33), TEXT(LGUN, GUN_STR_04), TEXT(LGUN, GUN_STR_32), 22.0, 128.0, 709.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_2A), TEXT(LGUN, GUN_STR_9A), 124.0, 14.0, 455.0) - GUNFILERECORD( skorpion, 0, GUNSTATS(skorpion), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_6B), 46.0, 124.0, 785.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_6B), TEXT(LGUN, GUN_STR_C6), 124.0, 32.0, 545.0) - GUNFILERECORD( ak47, 0, GUNSTATS(ak47), TEXT(LGUN, GUN_STR_08), TEXT(LGUN, GUN_STR_68), -29.0, 307.0, 1410.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_42), TEXT(LGUN, GUN_STR_AB), 304.0, -31.0, 1020.0) - GUNFILERECORD( uzi, 0, GUNSTATS(uzi), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_82), -18.0, 57.0, 1198.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_82), TEXT(LGUN, GUN_STR_D7), 68.0, -49.0, 667.0) - GUNFILERECORD( mp5k, 0, GUNSTATS(mp5k), TEXT(LGUN, GUN_STR_00), TEXT(LGUN, GUN_STR_2F), 12.0, 112.0, 1300.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_29), TEXT(LGUN, GUN_STR_96), 123.0, -2.0, 628.0) - GUNFILERECORD( mp5ksil, 0, GUNSTATS(mp5ksil), TEXT(LGUN, GUN_STR_00), TEXT(LGUN, GUN_STR_10), 14.0, 227.0, 1300.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_28), TEXT(LGUN, GUN_STR_95), 226.0, -10.0, 834.0) - GUNFILERECORD( spectre, 0, GUNSTATS(spectre), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_58), -4.0, 144.0, 1128.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_58), TEXT(LGUN, GUN_STR_B4), 146.0, -18.0, 801.0) - GUNFILERECORD( m16, 0, GUNSTATS(m16), TEXT(LGUN, GUN_STR_75), TEXT(LGUN, GUN_STR_12), 25.0, 251.0, 1796.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_74), TEXT(LGUN, GUN_STR_84), 246.0, -45.0, 1497.0) - GUNFILERECORD( fnp90, 0, GUNSTATS(fnp90), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_5E), 88.0, -44.0, 1107.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_5E), TEXT(LGUN, GUN_STR_BC), -44.0, 31.0, 867.0) - GUNFILERECORD( shotgun, 0, GUNSTATS(shotgun), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_64), 39.0, 283.0, 1224.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_64), TEXT(LGUN, GUN_STR_C1), 284.0, -22.0, 999.0) - GUNFILERECORD( autoshot, 0, GUNSTATS(autoshot), TEXT(LGUN, GUN_STR_16), TEXT(LGUN, GUN_STR_0C), 73.0, 285.0, 1224.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_15), TEXT(LGUN, GUN_STR_86), 284.0, 4.0, 980.0) - GUNFILERECORD( sniperrifle, 0, GUNSTATS(sniperrifle), TEXT(LGUN, GUN_STR_67), TEXT(LGUN, GUN_STR_0A), 49.0, 265.0, 1760.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_66), TEXT(LGUN, GUN_STR_C3), 268.0, 14.0, 1497.0) - GUNFILERECORD( ruger, 0, GUNSTATS(ruger), TEXT(LGUN, GUN_STR_26), TEXT(LGUN, GUN_STR_4C), 47.0, 184.0, 769.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_25), TEXT(LGUN, GUN_STR_93), 182.0, 36.0, 604.0) - GUNFILERECORD( goldengun, 0, GUNSTATS(goldengun), TEXT(LGUN, GUN_STR_3B), TEXT(LGUN, GUN_STR_05), 29.0, 146.0, 629.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_39), TEXT(LGUN, GUN_STR_A3), 144.0, 18.0, 464.0) - GUNFILERECORD( silverwppk, 0, GUNSTATS(silverwppk), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_65), 20.0, 97.0, 579.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_65), TEXT(LGUN, GUN_STR_C2), 94.0, 2.0, 356.0) - GUNFILERECORD( goldwppk, 0, GUNSTATS(goldwppk), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_38), 20.0, 97.0, 579.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_38), TEXT(LGUN, GUN_STR_A2), 94.0, 2.0, 356.0) - GUNFILERECORD( laser, 0, GUNSTATS(laser), TEXT(LGUN, GUN_STR_52), TEXT(LGUN, GUN_STR_47), 67.0, 106.0, 738.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_51), TEXT(LGUN, GUN_STR_AC), 103.0, 21.0, 545.0) - GUNFILERECORD( watchlaser, 0, GUNSTATS(watchlaser), TEXT(LGUN, GUN_STR_7F), TEXT(LGUN, GUN_STR_47), 82.0, 0.0, 2857.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_7B), TEXT(LGUN, GUN_STR_D2), 0.0, -40.0, 1383.0) - GUNFILERECORD( grenadelaunch, 0, GUNSTATS(grenadelaunch), TEXT(LGUN, GUN_STR_3D), TEXT(LGUN, GUN_STR_48), 27.0, 279.0, 1152.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_3C), TEXT(LGUN, GUN_STR_A5), 284.0, -22.0, 960.0) - GUNFILERECORD( rocketlaunch, 0, GUNSTATS(rocketlaunch), TEXT(LGUN, GUN_STR_0B), TEXT(LGUN, GUN_STR_48), 111.0, -50.0, 1624.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_61), TEXT(LGUN, GUN_STR_BF), -42.0, 16.0, 1381.0) - GUNFILERECORD( grenade, 0, GUNSTATS(grenade), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_3D), 180.0, 0.0, 2745.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_3E), TEXT(LGUN, GUN_STR_A6), 0.0, 48.0, 1468.0) - GUNFILERECORD( timedmine, 0, GUNSTATS(timedmine), TEXT(LGUN, GUN_STR_09), TEXT(LGUN, GUN_STR_0F), 8.0, 0.0, 364.0, 90.0, 0.0, TEXT(LGUN, GUN_STR_72), TEXT(LGUN, GUN_STR_CB), 0.0, -3.0, 179.0) - GUNFILERECORD( proximitymine, 0, GUNSTATS(proximitymine), TEXT(LGUN, GUN_STR_02), TEXT(LGUN, GUN_STR_0D), 8.0, 0.0, 364.0, 90.0, 0.0, TEXT(LGUN, GUN_STR_5D), TEXT(LGUN, GUN_STR_BB), 0.0, -3.0, 179.0) - GUNFILERECORD( remotemine, 0, GUNSTATS(remotemine), TEXT(LGUN, GUN_STR_07), TEXT(LGUN, GUN_STR_0E), 8.0, 0.0, 364.0, 90.0, 0.0, TEXT(LGUN, GUN_STR_60), TEXT(LGUN, GUN_STR_BE), 0.0, -3.0, 179.0) - GUNFILERECORD( trigger, 0, GUNSTATS(trigger), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_2E), 82.0, 0.0, 2857.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_2E), TEXT(LGUN, GUN_STR_9B), 0.0, -40.0, 1383.0) - GUNFILERECORD( taser, 0, GUNSTATS(taser), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_6F), 107.0, 49.0, 568.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_6F), TEXT(LGUN, GUN_STR_C9), 64.0, 80.0, 333.0) - { NULL, NULL, 0, GUNSTATS(tank), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_6E), 20.0, 97.0, 579.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_6E), TEXT(LGUN, GUN_STR_C8), 94.0, 2.0, 356.0}, - GUNFILERECORD( bombcase, 0, GUNSTATS(bombcase), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_1A), 16.0, 0.0, 568.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_1A), TEXT(LGUN, GUN_STR_8A), 0.0, -8.0, 323.0) - GUNFILERECORD( plastique, 0, GUNSTATS(plastique), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_5B), 28.0, 0.0, 1062.0, 80.0, 90.0, TEXT(LGUN, GUN_STR_5B), TEXT(LGUN, GUN_STR_B7), 0.0, -16.0, 739.0) - GUNFILERECORD( flarepistol, 0, GUNSTATS(flarepistol), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_34), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_34), TEXT(LGUN, GUN_STR_9F), 0.0, 0.0, 1000.0) - GUNFILERECORD( pitongun, 0, GUNSTATS(pitongun), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_59), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_59), TEXT(LGUN, GUN_STR_B5), 0.0, 0.0, 1000.0) - GUNFILERECORD( bungee, TRUE, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_1F), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_1F), TEXT(LGUN, GUN_STR_8F), 0.0, 0.0, 1000.0) - GUNFILERECORD( doordecoder, TRUE, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_30), 12.0, 0.0, 364.0, 90.0, 90.0, TEXT(LGUN, GUN_STR_30), TEXT(LGUN, GUN_STR_9C), 0.0, -6.0, 199.0) - GUNFILERECORD( bombdefuser, TRUE, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_1B), 14.0, 0.0, 379.0, 90.0, 90.0, TEXT(LGUN, GUN_STR_1B), TEXT(LGUN, GUN_STR_8B), 0.0, 0.0, 279.0) - GUNFILERECORD( camera, 0, GUNSTATS(camera), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_20), 4.0, 0.0, 195.0, 20.0, 90.0, TEXT(LGUN, GUN_STR_20), TEXT(LGUN, GUN_STR_90), 0.0, -2.0, 144.0) - GUNFILERECORD( lockexploder, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_4A), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_4A), TEXT(LGUN, GUN_STR_AE), 0.0, 0.0, 1000.0) - GUNFILERECORD( doorexploder, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_31), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_31), TEXT(LGUN, GUN_STR_9D), 0.0, 0.0, 1000.0) - GUNFILERECORD( briefcase, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_1C), 16.0, 0.0, 568.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_1C), TEXT(LGUN, GUN_STR_8C), 0.0, -8.0, 323.0) - GUNFILERECORD( weaponcase, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_80), 16.0, 0.0, 568.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_80), TEXT(LGUN, GUN_STR_D5), 0.0, -8.0, 323.0) - GUNFILERECORD( safecrackercase, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_63), 16.0, 0.0, 568.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_62), TEXT(LGUN, GUN_STR_C0), 0.0, -8.0, 323.0) - GUNFILERECORD( keyanalysercase, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_44), 16.0, 0.0, 568.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_43), TEXT(LGUN, GUN_STR_A9), 0.0, -8.0, 323.0) - GUNFILERECORD( bug, 0, GUNSTATS(bug), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_1E), 16.0, 0.0, 513.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_1E), TEXT(LGUN, GUN_STR_8E), 0.0, -6.0, 387.0) - GUNFILERECORD( microcamera, 0, GUNSTATS(microcamera), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_4E), 8.0, 0.0, 310.0, 0.0, 270.0, TEXT(LGUN, GUN_STR_4E), TEXT(LGUN, GUN_STR_B0), 0.0, -8.0, 229.0) - GUNFILERECORD( bugdetector, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_1D), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_1D), TEXT(LGUN, GUN_STR_8D), 0.0, 0.0, 1000.0) - GUNFILERECORD( explosivefloppy, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_33), 12.0, 0.0, 336.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_33), TEXT(LGUN, GUN_STR_9E), 0.0, -4.0, 176.0) - GUNFILERECORD( polarizedglasses, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_5C), 2.0, 0.0, 183.0, 15.0, 90.0, TEXT(LGUN, GUN_STR_5C), TEXT(LGUN, GUN_STR_B8), 0.0, 0.0, 147.0) - GUNFILERECORD( darkglasses, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_2B), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_2B), TEXT(LGUN, GUN_STR_97), 0.0, 0.0, 1000.0) - GUNFILERECORD( creditcard, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_27), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_27), TEXT(LGUN, GUN_STR_94), 0.0, 0.0, 1000.0) - GUNFILERECORD( gaskeyring, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_35), 26.0, 0.0, 769.0, 90.0, 90.0, TEXT(LGUN, GUN_STR_35), TEXT(LGUN, GUN_STR_A0), 0.0, -8.0, 387.0) - GUNFILERECORD( datathief, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_2D), 16.0, 0.0, 474.0, 80.0, 0.0, TEXT(LGUN, GUN_STR_2D), TEXT(LGUN, GUN_STR_99), 0.0, -6.0, 350.0) - GUNFILERECORD( watchidentifier, 1, NULL, TEXT(LGUN, GUN_STR_7F), TEXT(LGUN, GUN_STR_41), 82.0, 0.0, 2857.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_7A), TEXT(LGUN, GUN_STR_D1), 0.0, -40.0, 1383.0) - GUNFILERECORD( watchcommunicator, 1, NULL, TEXT(LGUN, GUN_STR_7F), TEXT(LGUN, GUN_STR_23), 82.0, 0.0, 2857.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_78), TEXT(LGUN, GUN_STR_CF), 0.0, -40.0, 1383.0) - GUNFILERECORD( watchgeigercounter, 1, NULL, TEXT(LGUN, GUN_STR_7F), TEXT(LGUN, GUN_STR_36), 82.0, 0.0, 2857.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_79), TEXT(LGUN, GUN_STR_D0), 0.0, -40.0, 1383.0) - GUNFILERECORD( watchmagnetrepel, 1, NULL, TEXT(LGUN, GUN_STR_7F), TEXT(LGUN, GUN_STR_4B), 82.0, 0.0, 2857.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_7D), TEXT(LGUN, GUN_STR_D4), 0.0, -40.0, 1383.0) - GUNFILERECORD( watchmagnetattract, 0,GUNSTATS(watchmagnetattract), TEXT(LGUN, GUN_STR_7E), TEXT(LGUN, GUN_STR_13), 80.0, 0.0, 3036.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_7C), TEXT(LGUN, GUN_STR_D3), 0.0, -40.0, 1383.0) - GUNFILERECORD( goldeneyekey, 0, GUNSTATS(goldeneyekey), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_3A), 18.0, 0.0, 560.0, 80.0, 0.0, TEXT(LGUN, GUN_STR_3A), TEXT(LGUN, GUN_STR_A4), 0.0, -4.0, 310.0) - GUNFILERECORD( blackbox, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_17), 18.0, 0.0, 545.0, 0.0, 90.0, TEXT(LGUN, GUN_STR_17), TEXT(LGUN, GUN_STR_87), 0.0, -8.0, 380.0) - GUNFILERECORD( circuitboard, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_21), 20.0, 0.0, 568.0, 80.0, 0.0, TEXT(LGUN, GUN_STR_21), TEXT(LGUN, GUN_STR_91), 0.0, 0.0, 394.0) - GUNFILERECORD( clipboard, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_22), 40.0, 0.0, 1151.0, 80.0, 90.0, TEXT(LGUN, GUN_STR_22), TEXT(LGUN, GUN_STR_92), 0.0, -20.0, 580.0) - GUNFILERECORD( stafflist, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_6C), 44.0, 0.0, 1274.0, 80.0, 90.0, TEXT(LGUN, GUN_STR_6C), TEXT(LGUN, GUN_STR_C7), 0.0, -16.0, 681.0) - GUNFILERECORD( dossierred, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_5F), 38.0, 0.0, 1084.0, 350.0, 90.0, TEXT(LGUN, GUN_STR_5F), TEXT(LGUN, GUN_STR_BD), 0.0, -12.0, 580.0) - GUNFILERECORD( plans, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_5A), 18.0, 0.0, 464.0, 350.0, 90.0, TEXT(LGUN, GUN_STR_5A), TEXT(LGUN, GUN_STR_B6), 0.0, -2.0, 253.0) - GUNFILERECORD( spyfile, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_6A), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_6A), TEXT(LGUN, GUN_STR_C5), 0.0, 0.0, 1000.0) - GUNFILERECORD( blueprints, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_18), 18.0, 0.0, 579.0, 350.0, 90.0, TEXT(LGUN, GUN_STR_18), TEXT(LGUN, GUN_STR_88), 0.0, -8.0, 364.0) - GUNFILERECORD( map, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_4D), 18.0, 0.0, 579.0, 350.0, 90.0, TEXT(LGUN, GUN_STR_4D), TEXT(LGUN, GUN_STR_AF), 0.0, -6.0, 364.0) - GUNFILERECORD( audiotape, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_14), 16.0, 0.0, 428.0, 90.0, 90.0, TEXT(LGUN, GUN_STR_14), TEXT(LGUN, GUN_STR_85), 0.0, -2.0, 292.0) - GUNFILERECORD( videotape, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_77), 26.0, 0.0, 753.0, 90.0, 0.0, TEXT(LGUN, GUN_STR_77), TEXT(LGUN, GUN_STR_CE), 0.0, -8.0, 395.0) - GUNFILERECORD( dattape, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_2C), 14.0, 0.0, 387.0, 90.0, 90.0, TEXT(LGUN, GUN_STR_2C), TEXT(LGUN, GUN_STR_98), 0.0, 0.0, 238.0) - GUNFILERECORD( spooltape, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_69), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_69), TEXT(LGUN, GUN_STR_C4), 0.0, 0.0, 1000.0) - GUNFILERECORD( microfilm, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_50), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_50), TEXT(LGUN, GUN_STR_B2), 0.0, 0.0, 1000.0) - GUNFILERECORD( microcode, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_4F), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_4F), TEXT(LGUN, GUN_STR_B1), 0.0, 0.0, 1000.0) - GUNFILERECORD( lectre, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_49), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_49), TEXT(LGUN, GUN_STR_AD), 0.0, 0.0, 1000.0) - GUNFILERECORD( money, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_53), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_53), TEXT(LGUN, GUN_STR_B3), 0.0, 0.0, 1000.0) - GUNFILERECORD( goldbar, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_37), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_37), TEXT(LGUN, GUN_STR_A1), 0.0, 0.0, 1000.0) - GUNFILERECORD( heroin, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_3F), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_3F), TEXT(LGUN, GUN_STR_A7), 0.0, 0.0, 1000.0) - GUNFILERECORD( keycard, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_45), 24.0, 0.0, 556.0, 80.0, 90.0, TEXT(LGUN, GUN_STR_45), TEXT(LGUN, GUN_STR_AA), 0.0, -6.0, 411.0) - GUNFILERECORD( keyyale, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_81), 64.0, 0.0, 1912.0, 260.0, 90.0, TEXT(LGUN, GUN_STR_81), TEXT(LGUN, GUN_STR_D6), 0.0, -18.0, 1568.0) - GUNFILERECORD( keybolt, 1, NULL, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_19), 78.0, 0.0, 3518.0, 80.0, 90.0, TEXT(LGUN, GUN_STR_19), TEXT(LGUN, GUN_STR_89), 0.0, -12.0, 2582.0) - SUIT_LFRECORD(suit_lf_hand, 0, GUNSTATS(Csuit_lf_handz), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_6D), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_83), 10.0, 10.0, 1000.0) - GUNFILERECORD( joypad, 0, GUNSTATS(joypad), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_24), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_83), 10.0, 10.0, 1000.0) - { NULL , NULL, 0, GUNSTATS(null1), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_54), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_83), 10.0, 10.0, 1000.0}, - { NULL , NULL, 0, GUNSTATS(null2), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_54), 0.0, 0.0, 1000.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_83), 10.0, 10.0, 1000.0}, - { NULL , NULL, 0, GUNSTATS(token), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_73), 12.0, 0.0, 528.0, 80.0, 0.0, TEXT(LGUN, GUN_STR_73), TEXT(LGUN, GUN_STR_CC), 0.0, -4.0, 310.0} + GUNFILERECORD( throwknife, 0, GUNSTATS(throwknife), getStringID(LGUN, GUN_STR_71_THROWING_LF), getStringID(LGUN, GUN_STR_06__KNIFE_LF), 200.0, 51.0, 1327.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_70_THROWINGKNIFE_LF), getStringID(LGUN, GUN_STR_CA_THROWINGKNIFE_LF), 38.0, 118.0, 800.0) + GUNFILERECORD( wppk, 0, GUNSTATS(wppk), getStringID(LGUN, GUN_STR_57_WALTHERPPK2_LF), getStringID(LGUN, GUN_STR_01___ISSUE_LF), 20.0, 97.0, 579.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_56_WALTHERPPK_LF), getStringID(LGUN, GUN_STR_BA_PPK_LF), 94.0, 2.0, 356.0) + GUNFILERECORD( wppksil, 0, GUNSTATS(wppksil), getStringID(LGUN, GUN_STR_03__PPK_LF), getStringID(LGUN, GUN_STR_10_SILENCED_LF), 26.0, 162.0, 668.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_55_PPKSILENSED_LF), getStringID(LGUN, GUN_STR_B9_SILENCEDPPK_LF), 169.0, 5.0, 535.0) + GUNFILERECORD( tt33, 0, GUNSTATS(tt33), getStringID(LGUN, GUN_STR_04__TT33_LF), getStringID(LGUN, GUN_STR_32_TOKAREV_LF), 22.0, 128.0, 709.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_2A_TT33TOKAREV_LF), getStringID(LGUN, GUN_STR_9A_TT33_LF), 124.0, 14.0, 455.0) + GUNFILERECORD( skorpion, 0, GUNSTATS(skorpion), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_6B_SKORPION_LF), 46.0, 124.0, 785.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_6B_SKORPION_LF), getStringID(LGUN, GUN_STR_C6_SKORPION_LF), 124.0, 32.0, 545.0) + GUNFILERECORD( ak47, 0, GUNSTATS(ak47), getStringID(LGUN, GUN_STR_08_AK47_LF), getStringID(LGUN, GUN_STR_68_SOVIET_LF), -29.0, 307.0, 1410.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_42_AK47_LF), getStringID(LGUN, GUN_STR_AB_AK47_LF), 304.0, -31.0, 1020.0) + GUNFILERECORD( uzi, 0, GUNSTATS(uzi), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_82_UZI_LF), -18.0, 57.0, 1198.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_82_UZI_LF), getStringID(LGUN, GUN_STR_D7_UZI_LF), 68.0, -49.0, 667.0) + GUNFILERECORD( mp5k, 0, GUNSTATS(mp5k), getStringID(LGUN, GUN_STR_00___MP5_LF), getStringID(LGUN, GUN_STR_2F), 12.0, 112.0, 1300.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_29_MP5K_LF), getStringID(LGUN, GUN_STR_96_MP5_LF), 123.0, -2.0, 628.0) + GUNFILERECORD( mp5ksil, 0, GUNSTATS(mp5ksil), getStringID(LGUN, GUN_STR_00___MP5_LF), getStringID(LGUN, GUN_STR_10_SILENCED_LF), 14.0, 227.0, 1300.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_28_MP5KSILENCED_LF), getStringID(LGUN, GUN_STR_95_MP5SILENSED_LF), 226.0, -10.0, 834.0) + GUNFILERECORD( spectre, 0, GUNSTATS(spectre), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_58_SPECTRE_LF), -4.0, 144.0, 1128.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_58_SPECTRE_LF), getStringID(LGUN, GUN_STR_B4_SPECTRE_LF), 146.0, -18.0, 801.0) + GUNFILERECORD( m16, 0, GUNSTATS(m16), getStringID(LGUN, GUN_STR_75_M16_LF), getStringID(LGUN, GUN_STR_12_ASSAULT_LF), 25.0, 251.0, 1796.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_74_M16ASSAULTRIFLE_LF), getStringID(LGUN, GUN_STR_84_M16_LF), 246.0, -45.0, 1497.0) + GUNFILERECORD( fnp90, 0, GUNSTATS(fnp90), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_5E_FNP90_LF), 88.0, -44.0, 1107.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_5E_FNP90_LF), getStringID(LGUN, GUN_STR_BC_FNP90_LF), -44.0, 31.0, 867.0) + GUNFILERECORD( shotgun, 0, GUNSTATS(shotgun), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_64_SHOTGUN_LF), 39.0, 283.0, 1224.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_64_SHOTGUN_LF), getStringID(LGUN, GUN_STR_C1_SHOTGUN_LF), 284.0, -22.0, 999.0) + GUNFILERECORD( autoshot, 0, GUNSTATS(autoshot), getStringID(LGUN, GUN_STR_16_AUTOMATIC_LF), getStringID(LGUN, GUN_STR_0C_SHOTGUN_LF), 73.0, 285.0, 1224.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_15_AUTOMATICSHOTGUN_LF), getStringID(LGUN, GUN_STR_86_AUTOSHOTGUN_LF), 284.0, 4.0, 980.0) + GUNFILERECORD( sniperrifle, 0, GUNSTATS(sniperrifle), getStringID(LGUN, GUN_STR_67_SNIPER_LF), getStringID(LGUN, GUN_STR_0A_RIFLE_LF), 49.0, 265.0, 1760.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_66_SNIPERRIFLE_LF), getStringID(LGUN, GUN_STR_C3_SNIPERRIFLE_LF), 268.0, 14.0, 1497.0) + GUNFILERECORD( ruger, 0, GUNSTATS(ruger), getStringID(LGUN, GUN_STR_26_ROUGER_LF), getStringID(LGUN, GUN_STR_4C_MAGNUM_LF), 47.0, 184.0, 769.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_25_ROUGERMAGNUM_LF), getStringID(LGUN, GUN_STR_93_ROUGERMAGNUM_LF), 182.0, 36.0, 604.0) + GUNFILERECORD( goldengun, 0, GUNSTATS(goldengun), getStringID(LGUN, GUN_STR_3B_GOLDEN_LF), getStringID(LGUN, GUN_STR_05__GUN_LF), 29.0, 146.0, 629.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_39_GOLDENGUN_LF), getStringID(LGUN, GUN_STR_A3_GOLDENGUN_LF), 144.0, 18.0, 464.0) + GUNFILERECORD( silverwppk, 0, GUNSTATS(silverwppk), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_65_SILVERPPK_LF), 20.0, 97.0, 579.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_65_SILVERPPK_LF), getStringID(LGUN, GUN_STR_C2_SILVERPPK_LF), 94.0, 2.0, 356.0) + GUNFILERECORD( goldwppk, 0, GUNSTATS(goldwppk), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_38_GOLDPPK_LF), 20.0, 97.0, 579.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_38_GOLDPPK_LF), getStringID(LGUN, GUN_STR_A2_GOLDPPK_LF), 94.0, 2.0, 356.0) + GUNFILERECORD( laser, 0, GUNSTATS(laser), getStringID(LGUN, GUN_STR_52_MILITARY_LF), getStringID(LGUN, GUN_STR_47_LASER_LF), 67.0, 106.0, 738.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_51_MILITARYLASER_LF), getStringID(LGUN, GUN_STR_AC_LASER_LF), 103.0, 21.0, 545.0) + GUNFILERECORD( watchlaser, 0, GUNSTATS(watchlaser), getStringID(LGUN, GUN_STR_7F_WATCH_LF), getStringID(LGUN, GUN_STR_47_LASER_LF), 82.0, 0.0, 2857.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_7B_WATCHLASER_LF), getStringID(LGUN, GUN_STR_D2_WATCHLASER_LF), 0.0, -40.0, 1383.0) + GUNFILERECORD( grenadelaunch, 0, GUNSTATS(grenadelaunch), getStringID(LGUN, GUN_STR_3D_GRENADE_LF), getStringID(LGUN, GUN_STR_48_LAUNCHER_LF), 27.0, 279.0, 1152.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_3C_GRENADELAUNCHER_LF), getStringID(LGUN, GUN_STR_A5_GRENADELAUNCHER_LF), 284.0, -22.0, 960.0) + GUNFILERECORD( rocketlaunch, 0, GUNSTATS(rocketlaunch), getStringID(LGUN, GUN_STR_0B_ROCKET_LF), getStringID(LGUN, GUN_STR_48_LAUNCHER_LF), 111.0, -50.0, 1624.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_61_ROCKETLAUNCHER_LF), getStringID(LGUN, GUN_STR_BF_ROCKETLAUNCHER_LF), -42.0, 16.0, 1381.0) + GUNFILERECORD( grenade, 0, GUNSTATS(grenade), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_3D_GRENADE_LF), 180.0, 0.0, 2745.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_3E_HANDGRENADE_LF), getStringID(LGUN, GUN_STR_A6_GRENADE_LF), 0.0, 48.0, 1468.0) + GUNFILERECORD( timedmine, 0, GUNSTATS(timedmine), getStringID(LGUN, GUN_STR_09_MINE_LF), getStringID(LGUN, GUN_STR_0F_TIMED_LF), 8.0, 0.0, 364.0, 90.0, 0.0, getStringID(LGUN, GUN_STR_72_TIMEDMINE_LF), getStringID(LGUN, GUN_STR_CB_TIMEDMINE_LF), 0.0, -3.0, 179.0) + GUNFILERECORD( proximitymine, 0, GUNSTATS(proximitymine), getStringID(LGUN, GUN_STR_02___MINE_LF), getStringID(LGUN, GUN_STR_0D_PROXIMITY_LF), 8.0, 0.0, 364.0, 90.0, 0.0, getStringID(LGUN, GUN_STR_5D_PROXIMITYMINE_LF), getStringID(LGUN, GUN_STR_BB_PROXIMIYTYMINE_LF), 0.0, -3.0, 179.0) + GUNFILERECORD( remotemine, 0, GUNSTATS(remotemine), getStringID(LGUN, GUN_STR_07__MINE_LF), getStringID(LGUN, GUN_STR_0E_REMOTE_LF), 8.0, 0.0, 364.0, 90.0, 0.0, getStringID(LGUN, GUN_STR_60_REMOTEMINE_LF), getStringID(LGUN, GUN_STR_BE_REMOTEMINE_LF), 0.0, -3.0, 179.0) + GUNFILERECORD( trigger, 0, GUNSTATS(trigger), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_2E_DETONATOR_LF), 82.0, 0.0, 2857.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_2E_DETONATOR_LF), getStringID(LGUN, GUN_STR_9B_DETONATOR_LF), 0.0, -40.0, 1383.0) + GUNFILERECORD( taser, 0, GUNSTATS(taser), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_6F_TASER_LF), 107.0, 49.0, 568.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_6F_TASER_LF), getStringID(LGUN, GUN_STR_C9_TASER_LF), 64.0, 80.0, 333.0) + { NULL, NULL, 0, GUNSTATS(tank), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_6E_TANK_LF), 20.0, 97.0, 579.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_6E_TANK_LF), getStringID(LGUN, GUN_STR_C8_TANK_LF), 94.0, 2.0, 356.0}, + GUNFILERECORD( bombcase, 0, GUNSTATS(bombcase), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_1A_BOMBCASE_LF), 16.0, 0.0, 568.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_1A_BOMBCASE_LF), getStringID(LGUN, GUN_STR_8A_BOMBCASE_LF), 0.0, -8.0, 323.0) + GUNFILERECORD( plastique, 0, GUNSTATS(plastique), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_5B_PLASTIQUE_LF), 28.0, 0.0, 1062.0, 80.0, 90.0, getStringID(LGUN, GUN_STR_5B_PLASTIQUE_LF), getStringID(LGUN, GUN_STR_B7_PLASTIQUE_LF), 0.0, -16.0, 739.0) + GUNFILERECORD( flarepistol, 0, GUNSTATS(flarepistol), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_34_FLAREPISTOL_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_34_FLAREPISTOL_LF), getStringID(LGUN, GUN_STR_9F_FLAREPISTOL_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( pitongun, 0, GUNSTATS(pitongun), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_59_PITONGUN_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_59_PITONGUN_LF), getStringID(LGUN, GUN_STR_B5_PITONGUN_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( bungee, TRUE, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_1F_BUNGEE_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_1F_BUNGEE_LF), getStringID(LGUN, GUN_STR_8F_BUNGEE_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( doordecoder, TRUE, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_30_DOORDECODER_LF), 12.0, 0.0, 364.0, 90.0, 90.0, getStringID(LGUN, GUN_STR_30_DOORDECODER_LF), getStringID(LGUN, GUN_STR_9C_DOORDECODER_LF), 0.0, -6.0, 199.0) + GUNFILERECORD( bombdefuser, TRUE, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_1B_BOMBDEFUSER_LF), 14.0, 0.0, 379.0, 90.0, 90.0, getStringID(LGUN, GUN_STR_1B_BOMBDEFUSER_LF), getStringID(LGUN, GUN_STR_8B_BOMBDEFUSER_LF), 0.0, 0.0, 279.0) + GUNFILERECORD( camera, 0, GUNSTATS(camera), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_20_CAMERA_LF), 4.0, 0.0, 195.0, 20.0, 90.0, getStringID(LGUN, GUN_STR_20_CAMERA_LF), getStringID(LGUN, GUN_STR_90_CAMERA_LF), 0.0, -2.0, 144.0) + GUNFILERECORD( lockexploder, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_4A_LOCKEXPLODER_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_4A_LOCKEXPLODER_LF), getStringID(LGUN, GUN_STR_AE_LOCKEXPLODER_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( doorexploder, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_31_DOOREXPLODER_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_31_DOOREXPLODER_LF), getStringID(LGUN, GUN_STR_9D_DOOREXPLODER_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( briefcase, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_1C_BRIEFCASE_LF), 16.0, 0.0, 568.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_1C_BRIEFCASE_LF), getStringID(LGUN, GUN_STR_8C_BRIEFCASE_LF), 0.0, -8.0, 323.0) + GUNFILERECORD( weaponcase, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_80_WEAPONCASE_LF), 16.0, 0.0, 568.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_80_WEAPONCASE_LF), getStringID(LGUN, GUN_STR_D5_WEAPONCASE_LF), 0.0, -8.0, 323.0) + GUNFILERECORD( safecrackercase, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_63_SAFECRACKER_LF), 16.0, 0.0, 568.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_62_SAFECRACKERCASE_LF), getStringID(LGUN, GUN_STR_C0_SAFECRACKER_LF), 0.0, -8.0, 323.0) + GUNFILERECORD( keyanalysercase, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_44_KEYANALYZER_LF), 16.0, 0.0, 568.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_43_KEYANALYZERCASE_LF), getStringID(LGUN, GUN_STR_A9_KEYANALYZER_LF), 0.0, -8.0, 323.0) + GUNFILERECORD( bug, 0, GUNSTATS(bug), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_1E_BUG_LF), 16.0, 0.0, 513.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_1E_BUG_LF), getStringID(LGUN, GUN_STR_8E_BUG_LF), 0.0, -6.0, 387.0) + GUNFILERECORD( microcamera, 0, GUNSTATS(microcamera), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_4E_MICROCAMERA_LF), 8.0, 0.0, 310.0, 0.0, 270.0, getStringID(LGUN, GUN_STR_4E_MICROCAMERA_LF), getStringID(LGUN, GUN_STR_B0_MICROCAMERA_LF), 0.0, -8.0, 229.0) + GUNFILERECORD( bugdetector, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_1D_BUGDETECTOR_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_1D_BUGDETECTOR_LF), getStringID(LGUN, GUN_STR_8D_BUGDETECTOR_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( explosivefloppy, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_33_GUIDANCEDATA_LF), 12.0, 0.0, 336.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_33_GUIDANCEDATA_LF), getStringID(LGUN, GUN_STR_9E_GUIDANCEDATA_LF), 0.0, -4.0, 176.0) + GUNFILERECORD( polarizedglasses, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_5C_POLARISEDGLASSES_LF), 2.0, 0.0, 183.0, 15.0, 90.0, getStringID(LGUN, GUN_STR_5C_POLARISEDGLASSES_LF), getStringID(LGUN, GUN_STR_B8_POLARIZEDGLASSES_LF), 0.0, 0.0, 147.0) + GUNFILERECORD( darkglasses, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_2B_DARKGLASSES_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_2B_DARKGLASSES_LF), getStringID(LGUN, GUN_STR_97_DARKGLASSES_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( creditcard, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_27_CREDITCARD_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_27_CREDITCARD_LF), getStringID(LGUN, GUN_STR_94_CREDITCARD_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( gaskeyring, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_35_GASKEYRING_LF), 26.0, 0.0, 769.0, 90.0, 90.0, getStringID(LGUN, GUN_STR_35_GASKEYRING_LF), getStringID(LGUN, GUN_STR_A0_GASKEYRING_LF), 0.0, -8.0, 387.0) + GUNFILERECORD( datathief, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_2D_DATATHIEF_LF), 16.0, 0.0, 474.0, 80.0, 0.0, getStringID(LGUN, GUN_STR_2D_DATATHIEF_LF), getStringID(LGUN, GUN_STR_99_DATATHIEF_LF), 0.0, -6.0, 350.0) + GUNFILERECORD( watchidentifier, 1, NULL, getStringID(LGUN, GUN_STR_7F_WATCH_LF), getStringID(LGUN, GUN_STR_41_IDENTIFIER_LF), 82.0, 0.0, 2857.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_7A_WATCHIDENTIFIER_LF), getStringID(LGUN, GUN_STR_D1_WATCHIDENTIFIER_LF), 0.0, -40.0, 1383.0) + GUNFILERECORD( watchcommunicator, 1, NULL, getStringID(LGUN, GUN_STR_7F_WATCH_LF), getStringID(LGUN, GUN_STR_23_COMMINICATOR_LF), 82.0, 0.0, 2857.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_78_WATCHCOMMINUCATOR_LF), getStringID(LGUN, GUN_STR_CF_WATCHCOMMUNICATOR_LF), 0.0, -40.0, 1383.0) + GUNFILERECORD( watchgeigercounter, 1, NULL, getStringID(LGUN, GUN_STR_7F_WATCH_LF), getStringID(LGUN, GUN_STR_36_GEIGERCOUNTER_LF), 82.0, 0.0, 2857.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_79_WATCHGEIGERCOUNTER_LF), getStringID(LGUN, GUN_STR_D0_WATCHGEIGERCOUNTER_LF), 0.0, -40.0, 1383.0) + GUNFILERECORD( watchmagnetrepel, 1, NULL, getStringID(LGUN, GUN_STR_7F_WATCH_LF), getStringID(LGUN, GUN_STR_4B_MAGNETREPEL_LF), 82.0, 0.0, 2857.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_7D_WATCHMAGNETREPEL_LF), getStringID(LGUN, GUN_STR_D4_WATCHMAGNETICREPEL_LF), 0.0, -40.0, 1383.0) + GUNFILERECORD( watchmagnetattract, 0,GUNSTATS(watchmagnetattract), getStringID(LGUN, GUN_STR_7E_WATCHMAGNET_LF), getStringID(LGUN, GUN_STR_13_ATTRACT_LF), 80.0, 0.0, 3036.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_7C_WATCHMAGNETATTRACT_LF), getStringID(LGUN, GUN_STR_D3_WATCHMAGNETICATTRACT_LF), 0.0, -40.0, 1383.0) + GUNFILERECORD( goldeneyekey, 0, GUNSTATS(goldeneyekey), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_3A_GOLDENEYEKEY_LF), 18.0, 0.0, 560.0, 80.0, 0.0, getStringID(LGUN, GUN_STR_3A_GOLDENEYEKEY_LF), getStringID(LGUN, GUN_STR_A4_GOLDENEYEKEY_LF), 0.0, -4.0, 310.0) + GUNFILERECORD( blackbox, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_17_BLACKBOX_LF), 18.0, 0.0, 545.0, 0.0, 90.0, getStringID(LGUN, GUN_STR_17_BLACKBOX_LF), getStringID(LGUN, GUN_STR_87_BLACKBOX_LF), 0.0, -8.0, 380.0) + GUNFILERECORD( circuitboard, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_21_CIRCUITBOARD_LF), 20.0, 0.0, 568.0, 80.0, 0.0, getStringID(LGUN, GUN_STR_21_CIRCUITBOARD_LF), getStringID(LGUN, GUN_STR_91_CIRCUITBOARD_LF), 0.0, 0.0, 394.0) + GUNFILERECORD( clipboard, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_22_CLIPBOARD_LF), 40.0, 0.0, 1151.0, 80.0, 90.0, getStringID(LGUN, GUN_STR_22_CLIPBOARD_LF), getStringID(LGUN, GUN_STR_92_CLIPBOARD_LF), 0.0, -20.0, 580.0) + GUNFILERECORD( stafflist, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_6C_STAFFLIST_LF), 44.0, 0.0, 1274.0, 80.0, 90.0, getStringID(LGUN, GUN_STR_6C_STAFFLIST_LF), getStringID(LGUN, GUN_STR_C7_STAFFLIST_LF), 0.0, -16.0, 681.0) + GUNFILERECORD( dossierred, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_5F_REDDOSSIER_LF), 38.0, 0.0, 1084.0, 350.0, 90.0, getStringID(LGUN, GUN_STR_5F_REDDOSSIER_LF), getStringID(LGUN, GUN_STR_BD_REDDOSSIER_LF), 0.0, -12.0, 580.0) + GUNFILERECORD( plans, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_5A_PLANS_LF), 18.0, 0.0, 464.0, 350.0, 90.0, getStringID(LGUN, GUN_STR_5A_PLANS_LF), getStringID(LGUN, GUN_STR_B6_PLANS_LF), 0.0, -2.0, 253.0) + GUNFILERECORD( spyfile, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_6A_SPYFILE_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_6A_SPYFILE_LF), getStringID(LGUN, GUN_STR_C5_SPYFILE_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( blueprints, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_18_BLUEPRINTS_LF), 18.0, 0.0, 579.0, 350.0, 90.0, getStringID(LGUN, GUN_STR_18_BLUEPRINTS_LF), getStringID(LGUN, GUN_STR_88_BLUEPRINTS_LF), 0.0, -8.0, 364.0) + GUNFILERECORD( map, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_4D_MAP_LF), 18.0, 0.0, 579.0, 350.0, 90.0, getStringID(LGUN, GUN_STR_4D_MAP_LF), getStringID(LGUN, GUN_STR_AF_MAP_LF), 0.0, -6.0, 364.0) + GUNFILERECORD( audiotape, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_14_AUDIOTAPE_LF), 16.0, 0.0, 428.0, 90.0, 90.0, getStringID(LGUN, GUN_STR_14_AUDIOTAPE_LF), getStringID(LGUN, GUN_STR_85_AUDIOTAPE_LF), 0.0, -2.0, 292.0) + GUNFILERECORD( videotape, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_77_VIDEOTAPE_LF), 26.0, 0.0, 753.0, 90.0, 0.0, getStringID(LGUN, GUN_STR_77_VIDEOTAPE_LF), getStringID(LGUN, GUN_STR_CE_VIDEOTAPE_LF), 0.0, -8.0, 395.0) + GUNFILERECORD( dattape, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_2C_DATTAPE_LF), 14.0, 0.0, 387.0, 90.0, 90.0, getStringID(LGUN, GUN_STR_2C_DATTAPE_LF), getStringID(LGUN, GUN_STR_98_DATTAPE_LF), 0.0, 0.0, 238.0) + GUNFILERECORD( spooltape, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_69_SPOOLTAPE_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_69_SPOOLTAPE_LF), getStringID(LGUN, GUN_STR_C4_SPOOLTAPE_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( microfilm, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_50_MICROFILM_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_50_MICROFILM_LF), getStringID(LGUN, GUN_STR_B2_MICROFILM_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( microcode, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_4F_MICROCODE_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_4F_MICROCODE_LF), getStringID(LGUN, GUN_STR_B1_MICROCODE_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( lectre, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_49_LECTRE_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_49_LECTRE_LF), getStringID(LGUN, GUN_STR_AD_LECTRE_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( money, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_53_MONEY_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_53_MONEY_LF), getStringID(LGUN, GUN_STR_B3_MONEY_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( goldbar, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_37_GOLDBAR_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_37_GOLDBAR_LF), getStringID(LGUN, GUN_STR_A1_GOLDBAR_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( heroin, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_3F_HEROINE_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_3F_HEROINE_LF), getStringID(LGUN, GUN_STR_A7_HEROINE_LF), 0.0, 0.0, 1000.0) + GUNFILERECORD( keycard, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_45_KEYCARD_LF), 24.0, 0.0, 556.0, 80.0, 90.0, getStringID(LGUN, GUN_STR_45_KEYCARD_LF), getStringID(LGUN, GUN_STR_AA_KEYCARD_LF), 0.0, -6.0, 411.0) + GUNFILERECORD( keyyale, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_81_YALEKEY_LF), 64.0, 0.0, 1912.0, 260.0, 90.0, getStringID(LGUN, GUN_STR_81_YALEKEY_LF), getStringID(LGUN, GUN_STR_D6_YALEKEY_LF), 0.0, -18.0, 1568.0) + GUNFILERECORD( keybolt, 1, NULL, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_19_BOLTKEY_LF), 78.0, 0.0, 3518.0, 80.0, 90.0, getStringID(LGUN, GUN_STR_19_BOLTKEY_LF), getStringID(LGUN, GUN_STR_89_BOLTKEY_LF), 0.0, -12.0, 2582.0) + SUIT_LFRECORD(suit_lf_hand, 0, GUNSTATS(Csuit_lf_handz), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_6D_SUIT_LF_HAND_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_83_LF), 10.0, 10.0, 1000.0) + GUNFILERECORD( joypad, 0, GUNSTATS(joypad), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_24_CONTROLLER_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_83_LF), 10.0, 10.0, 1000.0) + { NULL , NULL, 0, GUNSTATS(null1), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_54_NULL_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_83_LF), 10.0, 10.0, 1000.0}, + { NULL , NULL, 0, GUNSTATS(null2), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_54_NULL_LF), 0.0, 0.0, 1000.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_83_LF), 10.0, 10.0, 1000.0}, + { NULL , NULL, 0, GUNSTATS(token), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_73_TOKEN_LF), 12.0, 0.0, 528.0, 80.0, 0.0, getStringID(LGUN, GUN_STR_73_TOKEN_LF), getStringID(LGUN, GUN_STR_CC_TOKEN_LF), 0.0, -4.0, 310.0} }; diff --git a/assets/obseg/gun/knife/gunFileRecord.inc.c b/assets/obseg/gun/knife/gunFileRecord.inc.c index dad5a3b..6e0b4ae 100644 --- a/assets/obseg/gun/knife/gunFileRecord.inc.c +++ b/assets/obseg/gun/knife/gunFileRecord.inc.c @@ -1,2 +1,2 @@ /*NAME, NOMODEL, STATS, UPPERTEXTID, LOWERTEXTID, POSX, POSY, POSZ, XROT, YROT, WOCTEXT, EQUIPTEXT, EQUIPX, EQUIPY, EQUIPZ*/ -GUNFILERECORD(knife, 0, GUNSTATS(knife), TEXT(LGUN, GUN_STR_83), TEXT(LGUN, GUN_STR_46), 200.0, 39.0, 1327.0, 0.0, 0.0, TEXT(LGUN, GUN_STR_40), TEXT(LGUN, GUN_STR_A8), 38.0, 118.0, 800.0) +GUNFILERECORD(knife, 0, GUNSTATS(knife), getStringID(LGUN, GUN_STR_83_LF), getStringID(LGUN, GUN_STR_46_KNIFE_LF), 200.0, 39.0, 1327.0, 0.0, 0.0, getStringID(LGUN, GUN_STR_40_HUNTINGKNIFE_LF), getStringID(LGUN, GUN_STR_A8_HUNTINGKNIFE_LF), 38.0, 118.0, 800.0) diff --git a/assets/obseg/prop/alarm1/ExplosionDetailsRecord.inc.c b/assets/obseg/prop/alarm1/ExplosionDetailsRecord.inc.c index 6481406..d294477 100644 --- a/assets/obseg/prop/alarm1/ExplosionDetailsRecord.inc.c +++ b/assets/obseg/prop/alarm1/ExplosionDetailsRecord.inc.c @@ -1,4 +1,6 @@ - { - EXPLOSION_SMALL, //type - {0x315c, 0x7b6c, 0xdbff, 0x5126, 0xfb59, 0x7ca7} //seed - }, +//included by propExplosionDetailsRecords.inc.c to pobjdata.c +//touch pobjdata.c to recompile +{ + EXPLOSION_SMALL, //type + {0x315c, 0x7b6c, 0xdbff, 0x5126, 0xfb59, 0x7ca7} //seed +}, diff --git a/assets/obseg/prop/alarm1/Model.c b/assets/obseg/prop/alarm1/Model.c index e9391d9..2ceeb7f 100644 --- a/assets/obseg/prop/alarm1/Model.c +++ b/assets/obseg/prop/alarm1/Model.c @@ -1,17 +1,31 @@ #include +#include "assets/image_externs.h" + #define TEXTURECOUNT 2 + #define VERTEXGROUPCOUNT0 12 #define COLLISIONVERTEXCOUNT0 12 + +extern ModelRoData_GroupRecord GroupRecord_0x060; +extern ModelRoData_BoundingBoxRecord BoundingBoxRecord_0x07c; +extern Vertex Vertex_ARRAY_0x098[VERTEXGROUPCOUNT0]; +extern Vertex Collision_Vertex_ARRAY_0x158[COLLISIONVERTEXCOUNT0]; +extern s16 POINT_USAGE_ARRAY_0x218[VERTEXGROUPCOUNT0]; +extern ModelRoData_DisplayList_CollisionRecord DLCollisionRecord_0x230[]; +extern Gfx GFX_ARRAY_PRIMARY_0x250[]; +extern Gfx GFX_ARRAY_SECONDARY_0x2B0[]; + //base address is 0x05000000 ModelFileTextures proptextures[TEXTURECOUNT] = { - {_image29_ID, 32, 32, 0x06, 0x0, 0x02, 0x0, 0x0}, - {_image31_ID, 32, 32, 0x06, 0x0, 0x02, 0x0, 0x0} + {IMAGE_BUZZERSWITCH, 32, 32, 0x06, 0x0, 0x02, 0x0, 0x0}, + {IMAGE_BELL, 32, 32, 0x06, 0x0, 0x02, 0x0, 0x0} }; - // {opcode, data, parent, next, prev, child} -ModelNode ModelNode_0x018 = { MODELNODE_OPCODE_GROUP, GroupRecord_0x060, 0x0, 0x0, 0x0, ModelNode_0x030}; -ModelNode ModelNode_0x030 = { MODELNODE_OPCODE_BBOX, BoundingBoxRecord_0x07c, ModelNode_0x018, 0x0, 0x0, ModelNode_0x048}; -ModelNode ModelNode_0x048 = { MODELNODE_OPCODE_DLCOLLISION, DLCollisionRecord_0x230, ModelNode_0x030, 0x0, 0x0, 0x0}; + + // { opcode, data, parent, next, prev, child} +ModelNode ModelNode_0x018 = { MODELNODE_OPCODE_GROUP, &GroupRecord_0x060, NULL, NULL, NULL, &ModelNode_0x030}; +ModelNode ModelNode_0x030 = { MODELNODE_OPCODE_BBOX, &BoundingBoxRecord_0x07c, &ModelNode_0x018, NULL, NULL, &ModelNode_0x048}; +ModelNode ModelNode_0x048 = { MODELNODE_OPCODE_DLCOLLISION, &DLCollisionRecord_0x230, &ModelNode_0x030, NULL, NULL, NULL}; ModelRoData_GroupRecord GroupRecord_0x060 = { @@ -20,7 +34,7 @@ ModelRoData_GroupRecord GroupRecord_0x060 = 0x0, //MatrixID0 0xFFFF, //MatrixID1 0xFFFF, //MatrixID2 - 0x0, //ChildGroup + NULL, //ChildGroup 304.6402 //BoundingVolumeRadius }; @@ -71,31 +85,32 @@ s16 POINT_USAGE_ARRAY_0x218[VERTEXGROUPCOUNT0] = ModelRoData_DisplayList_CollisionRecord DLCollisionRecord_0x230 = { - GFX_ARRAY_PRIMARY_0x250, - GFX_ARRAY_SECONDARY_0x2B0, - Vertex_ARRAY_0x098, VERTEXGROUPCOUNT0, - COLLISIONVERTEXCOUNT0, Collision_Vertex_ARRAY_0x158, - POINT_USAGE_ARRAY_0x218, - 0x4, 0x0, 0x0, 0x0 + GFX_ARRAY_PRIMARY_0x250, //primary + GFX_ARRAY_SECONDARY_0x2B0, //secondary + Vertex_ARRAY_0x098, VERTEXGROUPCOUNT0, //vertices,vcount + COLLISIONVERTEXCOUNT0, Collision_Vertex_ARRAY_0x158, //ncolvtx,collision vertices + POINT_USAGE_ARRAY_0x218, //point usage + 0x4, 0x0, //type, index + 0x0 //baseaddr }; -Gfx GFX_ARRAY_PRIMARY_0x250 = +Gfx GFX_ARRAY_PRIMARY_0x250[] = { gsDPSetTextureLOD(G_TL_LOD), - gsSPTexture(0xFFFF, 0xFFFF, 6, 0, true), + gsSPTexture(0xFFFF, 0xFFFF, 6, 0, TRUE), gsDPLoadSync(), gsDPSetTextureLOD(G_TL_LOD), - gsSPTexture(0xFFFF, 0xFFFF, 6, 0, true), + gsSPTexture(0xFFFF, 0xFFFF, 6, 0, TRUE), gsDPSetTextureDetail(G_TD_CLAMP), gsDPSetTextureFilter(G_TF_BILERP), gsSPEndDisplayList(), }; -Gfx GFX_ARRAY_SECONDARY_0x2B0 = +Gfx GFX_ARRAY_SECONDARY_0x2B0[] = { gsDPLoadSync(), gsDPSetTextureLOD(G_TL_LOD), - gsSPTexture(0xFFFF, 0xFFFF, 6, 0, true), + gsSPTexture(0xFFFF, 0xFFFF, 6, 0, TRUE), gsDPSetTextureDetail(G_TD_CLAMP), gsDPSetTextureFilter(G_TF_BILERP), gsSPEndDisplayList(), diff --git a/assets/obseg/prop/alarm1/ModelFileHeader.inc.c b/assets/obseg/prop/alarm1/ModelFileHeader.inc.c index 5a7964b..a171965 100644 --- a/assets/obseg/prop/alarm1/ModelFileHeader.inc.c +++ b/assets/obseg/prop/alarm1/ModelFileHeader.inc.c @@ -1,5 +1,11 @@ - //NAME, ROOTNODE, SKELETON, SWITCHES, NUMSWITCHES, NUMMATRICES, BOUNDINGRADIUS, NUMRECORDS, NUMTEXTURES -MODELFILEHEADER( alarm1, 0, &SKELETON(standard_object), 0, 0, 1, 304.6402, 0, 2) +//included by propModelFileHeaders.inc.c to pobjdata.c +//touch pobjdata.c to recompile + + + // NAME, ROOTNODE, SKELETON, SWITCHES, NUMSWITCHES, NUMMATRICES, BOUNDINGRADIUS, NUMRECORDS, NUMTEXTURES +MODELFILEHEADER( alarm1, 0, &SKELETON(standard_object), 0, 0, 1, 304.6402, 0, 2) + + /* NAME SKEL NAME BOUNDRAD SW HASNAMES? New_ModelFileHeader(alarm1, standard_object, 304.6402, 0, FALSE) diff --git a/assets/obseg/prop/alarm1/propFileRecord.inc.c b/assets/obseg/prop/alarm1/propFileRecord.inc.c index 4e9a00b..0e903e7 100644 --- a/assets/obseg/prop/alarm1/propFileRecord.inc.c +++ b/assets/obseg/prop/alarm1/propFileRecord.inc.c @@ -1,3 +1,6 @@ - //NAME, SCALE - PROPFILERECORD(alarm1, 0.1) +//included by propItemModelFileRecord.inc.c to pobjdata.c +//touch pobjdata.c to recompile + + //NAME, SCALE +PROPFILERECORD(alarm1, 0.1) diff --git a/assets/obseg/prop/cctv/Model.c b/assets/obseg/prop/cctv/Model.c index ec9ff77..fa4f5f5 100644 --- a/assets/obseg/prop/cctv/Model.c +++ b/assets/obseg/prop/cctv/Model.c @@ -10,38 +10,82 @@ #define VERTEXGROUPCOUNT2 24 #define COLLISIONVERTEXCOUNT2 12 -ModelNode* ModelNode1 = ModelNodeGroup_1; -ModelNode* ModelNode2 = ModelNodeDL_Lens; -ModelNode* ModelNode3 = ModelNodeBB_Lens; -ModelNode* ModelNode4 = ModelNodeSwitch_0; + +extern ModelNode ModelNode1; +extern ModelNode ModelNode2; +extern ModelNode ModelNode3; +extern ModelNode ModelNode4; + +extern ModelFileTextures proptextures[TEXTURECOUNT]; + +extern ModelNode ModelNodeGroup_0; +extern ModelNode ModelNodeBB_0; +extern ModelNode ModelNodeDL_Mount; +extern ModelNode ModelNodeGroup_1; +extern ModelNode ModelNodeSwitch_0; +extern ModelNode ModelNodeBB_Lens; +extern ModelNode ModelNodeDL_Lens; +extern ModelNode ModelNodeDL_Housing; + + +extern ModelRoData_GroupRecord GroupRecord_0x118; +extern ModelRoData_GroupRecord GroupRecord_0x118; +extern ModelRoData_BoundingBoxRecord BBoxRecord_0x134; +extern Vertex Vertex_ARRAY_0x150[VERTEXGROUPCOUNT0]; +extern Vertex Collision_Vertex_ARRAY_0x250[COLLISIONVERTEXCOUNT0]; +extern s16 POINT_USAGE_ARRAY_0x320[VERTEXGROUPCOUNT0]; +extern ModelRoData_DisplayList_CollisionRecord DL_Mount; +extern ModelRoData_GroupRecord GroupRecord_0x360; +extern ModelRoData_SwitchRecord Switch_0x37c; +extern ModelRoData_BoundingBoxRecord BBox_Lens; +extern Vertex Vertex_ARRAY_0x3a0[VERTEXGROUPCOUNT1]; +extern Vertex Collision_Vertex_ARRAY_0x3e0[COLLISIONVERTEXCOUNT1]; +extern s16 POINT_USAGE_ARRAY_0x420[VERTEXGROUPCOUNT1]; +extern ModelRoData_DisplayList_CollisionRecord DL_Lens; +extern Vertex Vertex_ARRAY_0x448[VERTEXGROUPCOUNT2]; +extern Vertex Collision_Vertex_ARRAY_0x5c8[COLLISIONVERTEXCOUNT2]; +extern s16 POINT_USAGE_ARRAY_0x688[VERTEXGROUPCOUNT2]; +extern ModelRoData_DisplayList_CollisionRecord DL_Housing; +extern Gfx GFX_ARRAY_PRIMARY_0x6d8[]; +extern Gfx GFX_ARRAY_SECONDARY_0x738[]; +extern Gfx GFX_ARRAY_PRIMARY_0x790[]; +extern Gfx GFX_ARRAY_SECONDARY_0x7a8[]; +extern Gfx GFX_ARRAY_PRIMARY_0x810[]; + + +ModelNode* ModelNode1 = &ModelNodeGroup_1; +ModelNode* ModelNode2 = &ModelNodeDL_Lens; +ModelNode* ModelNode3 = &ModelNodeBB_Lens; +ModelNode* ModelNode4 = &ModelNodeSwitch_0; ModelFileTextures proptextures[TEXTURECOUNT] = { - {_image247_ID, 0x20, 0x40, 0x07, 0x00, 0x01, 0x00, 0x0000}, - {_image265_ID, 0x40, 0x20, 0x07, 0x00, 0x01, 0x00, 0x0000}, - {_image511_ID, 0x80, 0x20, 0x07, 0x00, 0x00, 0x00, 0x0000}, - {_image856_ID, 0x40, 0x40, 0x07, 0x00, 0x00, 0x00, 0x0000}, + {IMAGE_247, 0x20, 0x40, 0x07, 0x00, 0x01, 0x00, 0x0000}, + {IMAGE_265, 0x40, 0x20, 0x07, 0x00, 0x01, 0x00, 0x0000}, + {IMAGE_511, 0x80, 0x20, 0x07, 0x00, 0x00, 0x00, 0x0000}, + {IMAGE_856, 0x40, 0x40, 0x07, 0x00, 0x00, 0x00, 0x0000}, {IMAGE_GLASS3, 0x36, 0x36, 0x03, 0x00, 0x01, 0x02, 0x0200}, - {_image1514_ID, 0x01, 0x01, 0x01, 0x00, 0x02, 0x00, 0x0000}, + {IMAGE_1514, 0x01, 0x01, 0x01, 0x00, 0x02, 0x00, 0x0000}, }; - // { opcode, data, parent, next, prev, child} -ModelNode ModelNodeGroup_0 = { MODELNODE_OPCODE_GROUP, GroupRecord_0x118, 0x0, 0x0, 0x0, ModelNodeBB_0}; -ModelNode ModelNodeBB_0 = { MODELNODE_OPCODE_BBOX, BBoxRecord_0x134, ModelNodeGroup_0, 0x0, 0x0, ModelNodeDL_Mount}; -ModelNode ModelNodeDL_Mount = { MODELNODE_OPCODE_DLCOLLISION, DL_Mount, ModelNodeBB_0, ModelNodeGroup_1, 0x0, 0x0}; -ModelNode ModelNodeGroup_1 = { MODELNODE_OPCODE_GROUP, GroupRecord_0x360, ModelNodeBB_0, 0x0, ModelNodeDL_Mount, ModelNodeSwitch_0}; -ModelNode ModelNodeSwitch_0 = { MODELNODE_OPCODE_SWITCH, Switch_0x37c, ModelNodeGroup_1, ModelNodeDL_Housing, 0x0, ModelNodeBB_Lens}; -ModelNode ModelNodeBB_Lens = { MODELNODE_OPCODE_BBOX, BBox_Lens, ModelNodeSwitch_0, 0x0, 0x0, ModelNodeDL_Lens}; -ModelNode ModelNodeDL_Lens = { MODELNODE_OPCODE_DLCOLLISION, DL_Lens, ModelNodeBB_Lens, 0x0, 0x0, 0x0}; -ModelNode ModelNodeDL_Housing = { MODELNODE_OPCODE_DLCOLLISION, DL_Housing, ModelNodeGroup_1, 0x0, ModelNodeSwitch_0, 0x0}; + + // { opcode, data, parent, next, prev, child} +ModelNode ModelNodeGroup_0 = { MODELNODE_OPCODE_GROUP, &GroupRecord_0x118, NULL, NULL, NULL, &ModelNodeBB_0}; +ModelNode ModelNodeBB_0 = { MODELNODE_OPCODE_BBOX, &BBoxRecord_0x134, &ModelNodeGroup_0, NULL, NULL, &ModelNodeDL_Mount}; +ModelNode ModelNodeDL_Mount = { MODELNODE_OPCODE_DLCOLLISION, &DL_Mount, &ModelNodeBB_0, &ModelNodeGroup_1, NULL, NULL}; +ModelNode ModelNodeGroup_1 = { MODELNODE_OPCODE_GROUP, &GroupRecord_0x360, &ModelNodeBB_0, NULL, &ModelNodeDL_Mount, &ModelNodeSwitch_0}; +ModelNode ModelNodeSwitch_0 = { MODELNODE_OPCODE_SWITCH, &Switch_0x37c, &ModelNodeGroup_1, &ModelNodeDL_Housing, NULL, &ModelNodeBB_Lens}; +ModelNode ModelNodeBB_Lens = { MODELNODE_OPCODE_BBOX, &BBox_Lens, &ModelNodeSwitch_0, NULL, NULL, &ModelNodeDL_Lens}; +ModelNode ModelNodeDL_Lens = { MODELNODE_OPCODE_DLCOLLISION, &DL_Lens, &ModelNodeBB_Lens, NULL, NULL, NULL}; +ModelNode ModelNodeDL_Housing = { MODELNODE_OPCODE_DLCOLLISION, &DL_Housing, &ModelNodeGroup_1, NULL, &ModelNodeSwitch_0, NULL}; ModelRoData_GroupRecord GroupRecord_0x118 = { {0.005449, -773.8468, -200.64182}, 0x0, 0x0, - 0xFFFF, - 0xFFFF, - ModelNodeGroup_1, + -1, + -1, + &ModelNodeGroup_1, 291.0673 }; @@ -88,12 +132,12 @@ Vertex Collision_Vertex_ARRAY_0x250[COLLISIONVERTEXCOUNT0] = {{ -25, 77, 35}, 0x000f, 0x0000, 0x0000, {0xff, 0xff, 0x00, 0x00} } }; -s16 POINT_USAGE_ARRAY_0x320[] = +s16 POINT_USAGE_ARRAY_0x320[VERTEXGROUPCOUNT0] = { - 0x6, 0x3, 0x5, 0xFFFF, - 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, - 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, - 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF + 0x6, 0x3, 0x5, -1, + -1, -1, -1, -1, + -1, -1, -1, -1, + -1, -1, -1, -1 }; ModelRoData_DisplayList_CollisionRecord DL_Mount = @@ -103,9 +147,10 @@ ModelRoData_DisplayList_CollisionRecord DL_Mount = Vertex_ARRAY_0x150, VERTEXGROUPCOUNT0, COLLISIONVERTEXCOUNT0, - Collision_Vertex_ARRAY, + Collision_Vertex_ARRAY_0x250, POINT_USAGE_ARRAY_0x320, - 4, 0, 0, 0 + 4, 0, + 0x0 }; @@ -114,15 +159,15 @@ ModelRoData_GroupRecord GroupRecord_0x360 = {0.0, 70.36643, 31.983679}, 1, 1, - 0xFFFF, - 0xFFFF, + -1, + -1, NULL, 481.60675 }; ModelRoData_SwitchRecord Switch_0x37c = { - ModelNodeBB_Lens, + &ModelNodeBB_Lens, 0 }; @@ -150,7 +195,7 @@ Vertex Collision_Vertex_ARRAY_0x3e0[COLLISIONVERTEXCOUNT1] = s16 POINT_USAGE_ARRAY_0x420[VERTEXGROUPCOUNT1] = { - 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF + -1, -1, -1, -1 }; ModelRoData_DisplayList_CollisionRecord DL_Lens = @@ -160,9 +205,10 @@ ModelRoData_DisplayList_CollisionRecord DL_Lens = Vertex_ARRAY_0x3a0, VERTEXGROUPCOUNT1, COLLISIONVERTEXCOUNT1, - Collision_Vertex_ARRAY, + Collision_Vertex_ARRAY_0x3e0, POINT_USAGE_ARRAY_0x420, - 4, 0, 0, 0 + 4, 0, + 0x0 }; Vertex Vertex_ARRAY_0x448[VERTEXGROUPCOUNT2] = @@ -211,11 +257,11 @@ Vertex Collision_Vertex_ARRAY_0x5c8[COLLISIONVERTEXCOUNT2] = s16 POINT_USAGE_ARRAY_0x688[VERTEXGROUPCOUNT2] = { 0x9, 0xE, 0xD, 0xA, - 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, + -1, -1, -1, -1, 0x11, 0x10, 0x17, 0x14, 0x15, 0x16, 0x13, 0x12, - 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, - 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF + -1, -1, -1, -1, + -1, -1, -1, -1, }; ModelRoData_DisplayList_CollisionRecord DL_Housing = @@ -225,9 +271,10 @@ ModelRoData_DisplayList_CollisionRecord DL_Housing = Vertex_ARRAY_0x448, VERTEXGROUPCOUNT2, COLLISIONVERTEXCOUNT2, - Collision_Vertex_ARRAY, + Collision_Vertex_ARRAY_0x5c8, POINT_USAGE_ARRAY_0x688, - 4, 0, 0, 0 + 4, 0, + 0x0 }; Gfx GFX_ARRAY_PRIMARY_0x6d8[] = @@ -235,13 +282,13 @@ Gfx GFX_ARRAY_PRIMARY_0x6d8[] = gsDPPipeSync(), gsDPSetTextureLOD(G_TL_LOD), gsSPTexture(0xFFFF, 0xFFFF, 6, G_TX_RENDERTILE, G_ON), - gsDPNoOpTag(0x000000F7), + gsDPNoOpTag(IMAGE_247), gsDPSetTextureDetail(G_TD_CLAMP), gsDPSetTextureFilter(G_TF_BILERP), gsSPMatrix(0x03000000, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW), gsSPVertex(0x04000000, 8, 0), gsSP1Triangle(0, 1, 2, 0), - gsDPNoOpTag(0x000001FF), + gsDPNoOpTag(IMAGE_511), 0xB1000035, 0x00007643, gsSPEndDisplayList(), }; @@ -251,13 +298,13 @@ Gfx GFX_ARRAY_SECONDARY_0x738[] = gsDPPipeSync(), gsDPSetTextureLOD(G_TL_LOD), gsSPTexture(0xFFFF, 0xFFFF, 6, G_TX_RENDERTILE, G_ON), - gsDPNoOpTag(0x00000109), + gsDPNoOpTag(IMAGE_265), gsDPSetTextureDetail(G_TD_CLAMP), gsDPSetTextureFilter(G_TF_BILERP), gsSPClearGeometryMode(G_CULL_BOTH), gsSPMatrix(0x03000000, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW), gsSPVertex(0x04000080, 8, 0), - 0xB1007632, 0x64542010, + gsSP2Triangles(0, 59, 25, 0, 42, 16, 8, 0), gsSPEndDisplayList(), }; @@ -273,14 +320,14 @@ Gfx GFX_ARRAY_SECONDARY_0x7a8[] = gsDPPipeSync(), gsDPSetTextureLOD(G_TL_LOD), gsSPTexture(3456, 3456, 2, G_TX_RENDERTILE, G_ON), - gsDPNoOpTag(0x0000028E), + gsDPNoOpTag(IMAGE_GLASS3), gsDPSetTextureDetail(G_TD_CLAMP), gsDPSetTextureFilter(G_TF_BILERP), gsSPSetGeometryMode(G_LIGHTING | G_TEXTURE_GEN), gsSPClearGeometryMode(G_CULL_BOTH), gsSPMatrix(0x03000040, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW), gsSPVertex(0x04000000, 4, 0), - 0xB1000032, 0x00002010, + gsSP2Triangles(0, 0, 25, 0, 0, 16, 8, 0), gsSPClearGeometryMode(G_LIGHTING | G_TEXTURE_GEN), gsSPEndDisplayList(), }; @@ -291,22 +338,22 @@ Gfx GFX_ARRAY_PRIMARY_0x810[] = gsDPPipeSync(), gsDPSetTextureLOD(G_TL_LOD), gsSPTexture(0xFFFF, 0xFFFF, 6, G_TX_RENDERTILE, G_ON), - gsDPNoOpTag(0x000001FF), + gsDPNoOpTag(IMAGE_511), gsDPSetTextureDetail(G_TD_CLAMP), gsDPSetTextureFilter(G_TF_BILERP), gsSPMatrix(0x03000040, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW), gsSPVertex(0x04000000, 16, 0), - 0xB1000032, 0x00002010, - gsDPNoOpTag(0x00000358), - 0xB1000076, 0x00006454, - gsDPNoOpTag(0x000000F7), + gsSP2Triangles(0, 0, 25, 0, 0, 16, 8, 0), + gsDPNoOpTag(IMAGE_856), + gsSP2Triangles(0, 0, 59, 0, 0, 50, 42, 0), + gsDPNoOpTag(IMAGE_247), gsSPClearGeometryMode(G_CULL_BOTH), - 0xB100FEBA, 0xECDCA898, - gsDPNoOpTag(0x000001FF), + gsSP2Triangles(0, 127, 93, 0, 110, 84, 76, 0), + gsDPNoOpTag(IMAGE_511), gsSPVertex(0x04000100, 8, 0), - 0xB1000032, 0x00002010, + gsSP2Triangles(0, 0, 25, 0, 0, 16, 8, 0), gsSPTexture(0xFFFF, 0xFFFF, 1, G_TX_RENDERTILE, G_ON), - gsDPNoOpTag(0x000005EA), - 0xB1000076, 0x00006454, + gsDPNoOpTag(IMAGE_1514), + gsSP2Triangles(0, 0, 59, 0, 0, 50, 42, 0), gsSPEndDisplayList(), }; diff --git a/assets/obseg/prop/cctv/propFileRecord.inc.c b/assets/obseg/prop/cctv/propFileRecord.inc.c index 11a46de..e6c01d9 100644 --- a/assets/obseg/prop/cctv/propFileRecord.inc.c +++ b/assets/obseg/prop/cctv/propFileRecord.inc.c @@ -1 +1,5 @@ - PROPFILERECORD(cctv, 0.1) +//included by propItemModelFileRecord.inc.c to pobjdata.c +//touch pobjdata.c to recompile + + //NAME, SCALE +PROPFILERECORD(cctv, 0.1) diff --git a/assets/obseg/setup/UsetuparchZ.c b/assets/obseg/setup/UsetuparchZ.c index 372a153..aad3ea8 100644 --- a/assets/obseg/setup/UsetuparchZ.c +++ b/assets/obseg/setup/UsetuparchZ.c @@ -2337,7 +2337,7 @@ u8 chrAI_7[] = { IFMyAngleToBondLessThanDeg(90.000000,lbl30) IFMyAngleToBondGreaterThanDeg(270.000000,lbl30) //USING HUD MESSAGE Stringy = 0, ai->txt = 2057 - TextPrintTop(TEXT(LARCH,9)) + TextPrintTop(getStringID(LARCH,9)) LookSurprised() GotoNext(lbl10) @@ -2346,13 +2346,13 @@ u8 chrAI_7[] = { IFObjectiveBitfieldHas(0x800,lbl42) IFChrDoesNotExist(1,lbl42) //USING HUD MESSAGE Stringy = 0, ai->txt = 2082 - TextPrintTop(TEXT(LARCH,34)) + TextPrintTop(getStringID(LARCH,34)) GotoNext(lbl43) Label(lbl42) //USING HUD MESSAGE Stringy = 0, ai->txt = 2058 - TextPrintTop(TEXT(LARCH,10)) + TextPrintTop(getStringID(LARCH,10)) Label(lbl43) RaiseArms() @@ -2371,7 +2371,7 @@ u8 chrAI_7[] = { Label(lbl27) UnsetObjectiveBitfield(0x400) //USING HUD MESSAGE Stringy = 0, ai->txt = 2059 - TextPrintTop(TEXT(LARCH,11)) + TextPrintTop(getStringID(LARCH,11)) SetReturnAiList(1032) SetNewRandom() IFRandomGreaterThan(128,lbl26) @@ -2390,7 +2390,7 @@ u8 chrAI_7[] = { Label(lbl48) //USING HUD MESSAGE Stringy = 0, ai->txt = 2060 - TextPrintTop(TEXT(LARCH,12)) + TextPrintTop(getStringID(LARCH,12)) YIELD_FOREVER(lbl12) @@ -2477,7 +2477,7 @@ u8 chrAI_8[] = { Label(lbl5) PRINT("saw bond\n") //USING HUD MESSAGE Stringy = 0, ai->txt = 2056 - TextPrintTop(TEXT(LARCH,8)) + TextPrintTop(getStringID(LARCH,8)) RaiseArms() SetObjectiveBitfield(0x100) SetMyFlags2(0x80) diff --git a/assets/obseg/stan/Tbg_sev_all_p_stanZ.c b/assets/obseg/stan/Tbg_sev_all_p_stanZ.c index 0cce0b6..f62b286 100644 --- a/assets/obseg/stan/Tbg_sev_all_p_stanZ.c +++ b/assets/obseg/stan/Tbg_sev_all_p_stanZ.c @@ -1,6 +1,6 @@ /* * This file was automatically generated -* +* * Wednesday, August 18, 2021 10:27:15 PM * Getools.Lib: 21.8.18.1 */ @@ -11523,7 +11523,8 @@ StandTile tile_874 = { }; StandTile tile_875 = { - 0x026108, 0x06, + 0x026108 /*p609b*/, + 0x06, 0x0, 0xa, 0xa, 0xa, 3, diff --git a/assets/obseg/text/LgunE.h b/assets/obseg/text/LgunE.h index 960cd79..ac9168a 100644 --- a/assets/obseg/text/LgunE.h +++ b/assets/obseg/text/LgunE.h @@ -1,227 +1,227 @@ enum LGUNE_STRINGS { - GUN_STR_00, // " D5K\n", - GUN_STR_01, // " Issue\n", - GUN_STR_02, // " Mine\n", - GUN_STR_03, // " PP7\n", - GUN_STR_04, // " DD44\n", - GUN_STR_05, // " Gun\n", - GUN_STR_06, // " Knife\n", - GUN_STR_07, // " Mine\n", - GUN_STR_08, // " KF7\n", - GUN_STR_09, // " Mine\n", - GUN_STR_0A, // " Rifle\n", - GUN_STR_0B, // " Rocket\n", - GUN_STR_0C, // " Shotgun\n", - GUN_STR_0D, // "(Proximity)\n", - GUN_STR_0E, // "(Remote)\n", - GUN_STR_0F, // "(Timed)\n", - GUN_STR_10, // "(silenced)\n", - GUN_STR_11, // "-\n", - GUN_STR_12, // "Assault\n", - GUN_STR_13, // "Attract\n", - GUN_STR_14, // "Audio Tape\n", - GUN_STR_15, // "Automatic Shotgun\n", - GUN_STR_16, // "Automatic\n", - GUN_STR_17, // "Blackbox\n", - GUN_STR_18, // "Blueprints\n", - GUN_STR_19, // "Bolt Key\n", - GUN_STR_1A, // "Bomb Case\n", - GUN_STR_1B, // "Bomb Defuser\n", - GUN_STR_1C, // "Briefcase\n", - GUN_STR_1D, // "Bug Detector\n", - GUN_STR_1E, // "Bug\n", - GUN_STR_1F, // "Bungee\n", - GUN_STR_20, // "Camera\n", - GUN_STR_21, // "Circuit Board\n", - GUN_STR_22, // "Clipboard\n", - GUN_STR_23, // "Communicator\n", - GUN_STR_24, // "Controller\n", - GUN_STR_25, // "Cougar Magnum\n", - GUN_STR_26, // "Cougar\n", - GUN_STR_27, // "Credit Card\n", - GUN_STR_28, // "D5K (silenced)\n", - GUN_STR_29, // "D5K Deutsche\n", - GUN_STR_2A, // "DD44 Dostovei\n", - GUN_STR_2B, // "Dark Glasses\n", - GUN_STR_2C, // "Dat Tape\n", - GUN_STR_2D, // "Datathief\n", - GUN_STR_2E, // "Detonator\n", - GUN_STR_2F, // "Deutsche\n", - GUN_STR_30, // "Door Decoder\n", - GUN_STR_31, // "Door Exploder\n", - GUN_STR_32, // "Dostovei\n", - GUN_STR_33, // "Guidance Data\n", - GUN_STR_34, // "Flare Pistol\n", - GUN_STR_35, // "Gas Keyring\n", - GUN_STR_36, // "Geiger Counter\n", - GUN_STR_37, // "Gold Bar\n", - GUN_STR_38, // "Gold PP7\n", - GUN_STR_39, // "Golden Gun\n", - GUN_STR_3A, // "GoldenEye Key\n", - GUN_STR_3B, // "Golden\n", - GUN_STR_3C, // "Grenade Launcher\n", - GUN_STR_3D, // "Grenade\n", - GUN_STR_3E, // "Hand Grenade\n", - GUN_STR_3F, // "Heroine\n", - GUN_STR_40, // "Hunting Knife\n", - GUN_STR_41, // "Identifier\n", - GUN_STR_42, // "KF7 Soviet\n", - GUN_STR_43, // "Key Analyzer Case\n", - GUN_STR_44, // "Key Analyzer\n", - GUN_STR_45, // "Keycard\n", - GUN_STR_46, // "Knife\n", - GUN_STR_47, // "Laser\n", - GUN_STR_48, // "Launcher\n", - GUN_STR_49, // "Lectre\n", - GUN_STR_4A, // "Lock Exploder\n", - GUN_STR_4B, // "Magnet Repel\n", - GUN_STR_4C, // "Magnum\n", - GUN_STR_4D, // "Map\n", - GUN_STR_4E, // "Micro Camera\n", - GUN_STR_4F, // "Microcode\n", - GUN_STR_50, // "Microfilm\n", - GUN_STR_51, // "Military Laser\n", - GUN_STR_52, // "Military\n", - GUN_STR_53, // "Money\n", - GUN_STR_54, // "Null\n", - GUN_STR_55, // "PP7 (silenced)\n", - GUN_STR_56, // "PP7 Special Issue\n", - GUN_STR_57, // "PP7 Special\n", - GUN_STR_58, // "Phantom\n", - GUN_STR_59, // "Piton Gun\n", - GUN_STR_5A, // "Plans\n", - GUN_STR_5B, // "Plastique\n", - GUN_STR_5C, // "Polarized Glasses\n", - GUN_STR_5D, // "Proximity Mine\n", - GUN_STR_5E, // "RC-P90\n", - GUN_STR_5F, // "Red Dossier\n", - GUN_STR_60, // "Remote Mine\n", - GUN_STR_61, // "Rocket Launcher\n", - GUN_STR_62, // "Safecracker Case\n", - GUN_STR_63, // "Safecracker\n", - GUN_STR_64, // "Shotgun\n", - GUN_STR_65, // "Silver PP7\n", - GUN_STR_66, // "Sniper Rifle\n", - GUN_STR_67, // "Sniper\n", - GUN_STR_68, // "Soviet\n", - GUN_STR_69, // "Spool Tape\n", - GUN_STR_6A, // "Spy File\n", - GUN_STR_6B, // "Klobb\n", - GUN_STR_6C, // "Staff List\n", - GUN_STR_6D, // "Suit_lf_hand\n", - GUN_STR_6E, // "Tank\n", - GUN_STR_6F, // "Taser\n", - GUN_STR_70, // "Throwing Knife\n", - GUN_STR_71, // "Throwing\n", - GUN_STR_72, // "Timed Mine\n", - GUN_STR_73, // "Token\n", - GUN_STR_74, // "US AR33 Assault Rifle\n", - GUN_STR_75, // "US AR33\n", - GUN_STR_76, // "Unarmed\n", - GUN_STR_77, // "Video Tape\n", - GUN_STR_78, // "Watch Communicator\n", - GUN_STR_79, // "Watch Geiger Counter\n", - GUN_STR_7A, // "Watch Identifier\n", - GUN_STR_7B, // "Watch Laser\n", - GUN_STR_7C, // "Watch Magnet Attract\n", - GUN_STR_7D, // "Watch Magnet Repel\n", - GUN_STR_7E, // "Watch Magnet\n", - GUN_STR_7F, // "Watch\n", - GUN_STR_80, // "Weapon Case\n", - GUN_STR_81, // "Yale Key\n", - GUN_STR_82, // "ZMG (9mm)\n", - GUN_STR_83, // "\n", - GUN_STR_84, // "ar33\n", - GUN_STR_85, // "audio tape\n", - GUN_STR_86, // "auto shotgun\n", - GUN_STR_87, // "blackbox\n", - GUN_STR_88, // "blueprints\n", - GUN_STR_89, // "bolt key\n", - GUN_STR_8A, // "bomb case\n", - GUN_STR_8B, // "bomb defuser\n", - GUN_STR_8C, // "briefcase\n", - GUN_STR_8D, // "bug detector\n", - GUN_STR_8E, // "bug\n", - GUN_STR_8F, // "bungee\n", - GUN_STR_90, // "camera\n", - GUN_STR_91, // "circuit board\n", - GUN_STR_92, // "clipboard\n", - GUN_STR_93, // "cougar magnum\n", - GUN_STR_94, // "credit card\n", - GUN_STR_95, // "d5k (silenced)\n", - GUN_STR_96, // "d5k\n", - GUN_STR_97, // "dark glasses\n", - GUN_STR_98, // "dat tape\n", - GUN_STR_99, // "datathief\n", - GUN_STR_9A, // "dd44\n", - GUN_STR_9B, // "detonator\n", - GUN_STR_9C, // "door decoder\n", - GUN_STR_9D, // "door exploder\n", - GUN_STR_9E, // "guidance data\n", - GUN_STR_9F, // "flare pistol\n", - GUN_STR_A0, // "gas keyring\n", - GUN_STR_A1, // "gold bar\n", - GUN_STR_A2, // "gold pp7\n", - GUN_STR_A3, // "golden gun\n", - GUN_STR_A4, // "goldeneye key\n", - GUN_STR_A5, // "grenade launcher\n", - GUN_STR_A6, // "grenade\n", - GUN_STR_A7, // "heroine\n", - GUN_STR_A8, // "hunting knife\n", - GUN_STR_A9, // "key analyzer\n", - GUN_STR_AA, // "keycard\n", - GUN_STR_AB, // "kf7 soviet\n", - GUN_STR_AC, // "laser\n", - GUN_STR_AD, // "lectre\n", - GUN_STR_AE, // "lock exploder\n", - GUN_STR_AF, // "map\n", - GUN_STR_B0, // "micro camera\n", - GUN_STR_B1, // "microcode\n", - GUN_STR_B2, // "microfilm\n", - GUN_STR_B3, // "money\n", - GUN_STR_B4, // "phantom\n", - GUN_STR_B5, // "piton gun\n", - GUN_STR_B6, // "plans\n", - GUN_STR_B7, // "plastique\n", - GUN_STR_B8, // "polarized glasses\n", - GUN_STR_B9, // "pp7 (silenced)\n", - GUN_STR_BA, // "pp7\n", - GUN_STR_BB, // "proximity mine\n", - GUN_STR_BC, // "rc-p90\n", - GUN_STR_BD, // "red dossier\n", - GUN_STR_BE, // "remote mine\n", - GUN_STR_BF, // "rocket launcher\n", - GUN_STR_C0, // "safecracker\n", - GUN_STR_C1, // "shotgun\n", - GUN_STR_C2, // "silver pp7\n", - GUN_STR_C3, // "sniper rifle\n", - GUN_STR_C4, // "spool tape\n", - GUN_STR_C5, // "spy file\n", - GUN_STR_C6, // "klobb\n", - GUN_STR_C7, // "staff list\n", - GUN_STR_C8, // "tank\n", - GUN_STR_C9, // "taser\n", - GUN_STR_CA, // "throwing knife\n", - GUN_STR_CB, // "timed mine\n", - GUN_STR_CC, // "token\n", - GUN_STR_CD, // "unarmed\n", - GUN_STR_CE, // "video tape\n", - GUN_STR_CF, // "watch communicator\n", - GUN_STR_D0, // "watch geiger counter\n", - GUN_STR_D1, // "watch identifier\n", - GUN_STR_D2, // "watch laser\n", - GUN_STR_D3, // "watch magnet attract\n", - GUN_STR_D4, // "watch magnet repel\n", - GUN_STR_D5, // "weapon case\n", - GUN_STR_D6, // "yale key\n", - GUN_STR_D7, // "zmg (9mm)\n", - GUN_STR_D8, // "Analyzing the GoldenEye key...\n", - GUN_STR_D9, // "You do not have the GoldenEye\n key.\n", - GUN_STR_DA, // "kill count", - GUN_STR_DB, // "died once\n", - GUN_STR_DC, // "died", - GUN_STR_DD, // "times", - GUN_STR_DE, // "suicide count", - GUN_STR_DF // 0 + GUN_STR_00___MP5_LF, // " D5K\n", + GUN_STR_01___ISSUE_LF, // " Issue\n", + GUN_STR_02___MINE_LF, // " Mine\n", + GUN_STR_03__PPK_LF, // " PP7\n", + GUN_STR_04__TT33_LF, // " DD44\n", + GUN_STR_05__GUN_LF, // " Gun\n", + GUN_STR_06__KNIFE_LF, // " Knife\n", + GUN_STR_07__MINE_LF, // " Mine\n", + GUN_STR_08_AK47_LF, // " KF7\n", + GUN_STR_09_MINE_LF, // " Mine\n", + GUN_STR_0A_RIFLE_LF, // " Rifle\n", + GUN_STR_0B_ROCKET_LF, // " Rocket\n", + GUN_STR_0C_SHOTGUN_LF, // " Shotgun\n", + GUN_STR_0D_PROXIMITY_LF, // "(Proximity)\n", + GUN_STR_0E_REMOTE_LF, // "(Remote)\n", + GUN_STR_0F_TIMED_LF, // "(Timed)\n", + GUN_STR_10_SILENCED_LF, // "(silenced)\n", + GUN_STR_11_DASH_LF, // "-\n", + GUN_STR_12_ASSAULT_LF, // "Assault\n", + GUN_STR_13_ATTRACT_LF, // "Attract\n", + GUN_STR_14_AUDIOTAPE_LF, // "Audio Tape\n", + GUN_STR_15_AUTOMATICSHOTGUN_LF, // "Automatic Shotgun\n", + GUN_STR_16_AUTOMATIC_LF, // "Automatic\n", + GUN_STR_17_BLACKBOX_LF, // "Blackbox\n", + GUN_STR_18_BLUEPRINTS_LF, // "Blueprints\n", + GUN_STR_19_BOLTKEY_LF, // "Bolt Key\n", + GUN_STR_1A_BOMBCASE_LF, // "Bomb Case\n", + GUN_STR_1B_BOMBDEFUSER_LF, // "Bomb Defuser\n", + GUN_STR_1C_BRIEFCASE_LF, // "Briefcase\n", + GUN_STR_1D_BUGDETECTOR_LF, // "Bug Detector\n", + GUN_STR_1E_BUG_LF, // "Bug\n", + GUN_STR_1F_BUNGEE_LF, // "Bungee\n", + GUN_STR_20_CAMERA_LF, // "Camera\n", + GUN_STR_21_CIRCUITBOARD_LF, // "Circuit Board\n", + GUN_STR_22_CLIPBOARD_LF, // "Clipboard\n", + GUN_STR_23_COMMINICATOR_LF, // "Communicator\n", + GUN_STR_24_CONTROLLER_LF, // "Controller\n", + GUN_STR_25_ROUGERMAGNUM_LF, // "Cougar Magnum\n", + GUN_STR_26_ROUGER_LF, // "Cougar\n", + GUN_STR_27_CREDITCARD_LF, // "Credit Card\n", + GUN_STR_28_MP5KSILENCED_LF, // "D5K (silenced)\n", + GUN_STR_29_MP5K_LF, // "D5K Deutsche\n", + GUN_STR_2A_TT33TOKAREV_LF, // "DD44 Dostovei\n", + GUN_STR_2B_DARKGLASSES_LF, // "Dark Glasses\n", + GUN_STR_2C_DATTAPE_LF, // "Dat Tape\n", + GUN_STR_2D_DATATHIEF_LF, // "Datathief\n", + GUN_STR_2E_DETONATOR_LF, // "Detonator\n", + GUN_STR_2F, // "Deutsche\n", + GUN_STR_30_DOORDECODER_LF, // "Door Decoder\n", + GUN_STR_31_DOOREXPLODER_LF, // "Door Exploder\n", + GUN_STR_32_TOKAREV_LF, // "Dostovei\n", + GUN_STR_33_GUIDANCEDATA_LF, // "Guidance Data\n", + GUN_STR_34_FLAREPISTOL_LF, // "Flare Pistol\n", + GUN_STR_35_GASKEYRING_LF, // "Gas Keyring\n", + GUN_STR_36_GEIGERCOUNTER_LF, // "Geiger Counter\n", + GUN_STR_37_GOLDBAR_LF, // "Gold Bar\n", + GUN_STR_38_GOLDPPK_LF, // "Gold PP7\n", + GUN_STR_39_GOLDENGUN_LF, // "Golden Gun\n", + GUN_STR_3A_GOLDENEYEKEY_LF, // "GoldenEye Key\n", + GUN_STR_3B_GOLDEN_LF, // "Golden\n", + GUN_STR_3C_GRENADELAUNCHER_LF, // "Grenade Launcher\n", + GUN_STR_3D_GRENADE_LF, // "Grenade\n", + GUN_STR_3E_HANDGRENADE_LF, // "Hand Grenade\n", + GUN_STR_3F_HEROINE_LF, // "Heroine\n", + GUN_STR_40_HUNTINGKNIFE_LF, // "Hunting Knife\n", + GUN_STR_41_IDENTIFIER_LF, // "Identifier\n", + GUN_STR_42_AK47_LF, // "KF7 Soviet\n", + GUN_STR_43_KEYANALYZERCASE_LF, // "Key Analyzer Case\n", + GUN_STR_44_KEYANALYZER_LF, // "Key Analyzer\n", + GUN_STR_45_KEYCARD_LF, // "Keycard\n", + GUN_STR_46_KNIFE_LF, // "Knife\n", + GUN_STR_47_LASER_LF, // "Laser\n", + GUN_STR_48_LAUNCHER_LF, // "Launcher\n", + GUN_STR_49_LECTRE_LF, // "Lectre\n", + GUN_STR_4A_LOCKEXPLODER_LF, // "Lock Exploder\n", + GUN_STR_4B_MAGNETREPEL_LF, // "Magnet Repel\n", + GUN_STR_4C_MAGNUM_LF, // "Magnum\n", + GUN_STR_4D_MAP_LF, // "Map\n", + GUN_STR_4E_MICROCAMERA_LF, // "Micro Camera\n", + GUN_STR_4F_MICROCODE_LF, // "Microcode\n", + GUN_STR_50_MICROFILM_LF, // "Microfilm\n", + GUN_STR_51_MILITARYLASER_LF, // "Military Laser\n", + GUN_STR_52_MILITARY_LF, // "Military\n", + GUN_STR_53_MONEY_LF, // "Money\n", + GUN_STR_54_NULL_LF, // "Null\n", + GUN_STR_55_PPKSILENSED_LF, // "PP7 (silenced)\n", + GUN_STR_56_WALTHERPPK_LF, // "PP7 Special Issue\n", + GUN_STR_57_WALTHERPPK2_LF, // "PP7 Special\n", + GUN_STR_58_SPECTRE_LF, // "Phantom\n", + GUN_STR_59_PITONGUN_LF, // "Piton Gun\n", + GUN_STR_5A_PLANS_LF, // "Plans\n", + GUN_STR_5B_PLASTIQUE_LF, // "Plastique\n", + GUN_STR_5C_POLARISEDGLASSES_LF, // "Polarized Glasses\n", + GUN_STR_5D_PROXIMITYMINE_LF, // "Proximity Mine\n", + GUN_STR_5E_FNP90_LF, // "RC-P90\n", + GUN_STR_5F_REDDOSSIER_LF, // "Red Dossier\n", + GUN_STR_60_REMOTEMINE_LF, // "Remote Mine\n", + GUN_STR_61_ROCKETLAUNCHER_LF, // "Rocket Launcher\n", + GUN_STR_62_SAFECRACKERCASE_LF, // "Safecracker Case\n", + GUN_STR_63_SAFECRACKER_LF, // "Safecracker\n", + GUN_STR_64_SHOTGUN_LF, // "Shotgun\n", + GUN_STR_65_SILVERPPK_LF, // "Silver PP7\n", + GUN_STR_66_SNIPERRIFLE_LF, // "Sniper Rifle\n", + GUN_STR_67_SNIPER_LF, // "Sniper\n", + GUN_STR_68_SOVIET_LF, // "Soviet\n", + GUN_STR_69_SPOOLTAPE_LF, // "Spool Tape\n", + GUN_STR_6A_SPYFILE_LF, // "Spy File\n", + GUN_STR_6B_SKORPION_LF, // "Klobb\n", + GUN_STR_6C_STAFFLIST_LF, // "Staff List\n", + GUN_STR_6D_SUIT_LF_HAND_LF, // "Suit_lf_hand\n", + GUN_STR_6E_TANK_LF, // "Tank\n", + GUN_STR_6F_TASER_LF, // "Taser\n", + GUN_STR_70_THROWINGKNIFE_LF, // "Throwing Knife\n", + GUN_STR_71_THROWING_LF, // "Throwing\n", + GUN_STR_72_TIMEDMINE_LF, // "Timed Mine\n", + GUN_STR_73_TOKEN_LF, // "Token\n", + GUN_STR_74_M16ASSAULTRIFLE_LF, // "US AR33 Assault Rifle\n", + GUN_STR_75_M16_LF, // "US AR33\n", + GUN_STR_76_UNARMED_LF, // "Unarmed\n", + GUN_STR_77_VIDEOTAPE_LF, // "Video Tape\n", + GUN_STR_78_WATCHCOMMINUCATOR_LF, // "Watch Communicator\n", + GUN_STR_79_WATCHGEIGERCOUNTER_LF, // "Watch Geiger Counter\n", + GUN_STR_7A_WATCHIDENTIFIER_LF, // "Watch Identifier\n", + GUN_STR_7B_WATCHLASER_LF, // "Watch Laser\n", + GUN_STR_7C_WATCHMAGNETATTRACT_LF, // "Watch Magnet Attract\n", + GUN_STR_7D_WATCHMAGNETREPEL_LF, // "Watch Magnet Repel\n", + GUN_STR_7E_WATCHMAGNET_LF, // "Watch Magnet\n", + GUN_STR_7F_WATCH_LF, // "Watch\n", + GUN_STR_80_WEAPONCASE_LF, // "Weapon Case\n", + GUN_STR_81_YALEKEY_LF, // "Yale Key\n", + GUN_STR_82_UZI_LF, // "ZMG (9mm)\n", + GUN_STR_83_LF, // "\n", + GUN_STR_84_M16_LF, // "ar33\n", + GUN_STR_85_AUDIOTAPE_LF, // "audio tape\n", + GUN_STR_86_AUTOSHOTGUN_LF, // "auto shotgun\n", + GUN_STR_87_BLACKBOX_LF, // "blackbox\n", + GUN_STR_88_BLUEPRINTS_LF, // "blueprints\n", + GUN_STR_89_BOLTKEY_LF, // "bolt key\n", + GUN_STR_8A_BOMBCASE_LF, // "bomb case\n", + GUN_STR_8B_BOMBDEFUSER_LF, // "bomb defuser\n", + GUN_STR_8C_BRIEFCASE_LF, // "briefcase\n", + GUN_STR_8D_BUGDETECTOR_LF, // "bug detector\n", + GUN_STR_8E_BUG_LF, // "bug\n", + GUN_STR_8F_BUNGEE_LF, // "bungee\n", + GUN_STR_90_CAMERA_LF, // "camera\n", + GUN_STR_91_CIRCUITBOARD_LF, // "circuit board\n", + GUN_STR_92_CLIPBOARD_LF, // "clipboard\n", + GUN_STR_93_ROUGERMAGNUM_LF, // "cougar magnum\n", + GUN_STR_94_CREDITCARD_LF, // "credit card\n", + GUN_STR_95_MP5SILENSED_LF, // "d5k (silenced)\n", + GUN_STR_96_MP5_LF, // "d5k\n", + GUN_STR_97_DARKGLASSES_LF, // "dark glasses\n", + GUN_STR_98_DATTAPE_LF, // "dat tape\n", + GUN_STR_99_DATATHIEF_LF, // "datathief\n", + GUN_STR_9A_TT33_LF, // "dd44\n", + GUN_STR_9B_DETONATOR_LF, // "detonator\n", + GUN_STR_9C_DOORDECODER_LF, // "door decoder\n", + GUN_STR_9D_DOOREXPLODER_LF, // "door exploder\n", + GUN_STR_9E_GUIDANCEDATA_LF, // "guidance data\n", + GUN_STR_9F_FLAREPISTOL_LF, // "flare pistol\n", + GUN_STR_A0_GASKEYRING_LF, // "gas keyring\n", + GUN_STR_A1_GOLDBAR_LF, // "gold bar\n", + GUN_STR_A2_GOLDPPK_LF, // "gold pp7\n", + GUN_STR_A3_GOLDENGUN_LF, // "golden gun\n", + GUN_STR_A4_GOLDENEYEKEY_LF, // "goldeneye key\n", + GUN_STR_A5_GRENADELAUNCHER_LF, // "grenade launcher\n", + GUN_STR_A6_GRENADE_LF, // "grenade\n", + GUN_STR_A7_HEROINE_LF, // "heroine\n", + GUN_STR_A8_HUNTINGKNIFE_LF, // "hunting knife\n", + GUN_STR_A9_KEYANALYZER_LF, // "key analyzer\n", + GUN_STR_AA_KEYCARD_LF, // "keycard\n", + GUN_STR_AB_AK47_LF, // "kf7 soviet\n", + GUN_STR_AC_LASER_LF, // "laser\n", + GUN_STR_AD_LECTRE_LF, // "lectre\n", + GUN_STR_AE_LOCKEXPLODER_LF, // "lock exploder\n", + GUN_STR_AF_MAP_LF, // "map\n", + GUN_STR_B0_MICROCAMERA_LF, // "micro camera\n", + GUN_STR_B1_MICROCODE_LF, // "microcode\n", + GUN_STR_B2_MICROFILM_LF, // "microfilm\n", + GUN_STR_B3_MONEY_LF, // "money\n", + GUN_STR_B4_SPECTRE_LF, // "phantom\n", + GUN_STR_B5_PITONGUN_LF, // "piton gun\n", + GUN_STR_B6_PLANS_LF, // "plans\n", + GUN_STR_B7_PLASTIQUE_LF, // "plastique\n", + GUN_STR_B8_POLARIZEDGLASSES_LF, // "polarized glasses\n", + GUN_STR_B9_SILENCEDPPK_LF, // "pp7 (silenced)\n", + GUN_STR_BA_PPK_LF, // "pp7\n", + GUN_STR_BB_PROXIMIYTYMINE_LF, // "proximity mine\n", + GUN_STR_BC_FNP90_LF, // "rc-p90\n", + GUN_STR_BD_REDDOSSIER_LF, // "red dossier\n", + GUN_STR_BE_REMOTEMINE_LF, // "remote mine\n", + GUN_STR_BF_ROCKETLAUNCHER_LF, // "rocket launcher\n", + GUN_STR_C0_SAFECRACKER_LF, // "safecracker\n", + GUN_STR_C1_SHOTGUN_LF, // "shotgun\n", + GUN_STR_C2_SILVERPPK_LF, // "silver pp7\n", + GUN_STR_C3_SNIPERRIFLE_LF, // "sniper rifle\n", + GUN_STR_C4_SPOOLTAPE_LF, // "spool tape\n", + GUN_STR_C5_SPYFILE_LF, // "spy file\n", + GUN_STR_C6_SKORPION_LF, // "klobb\n", + GUN_STR_C7_STAFFLIST_LF, // "staff list\n", + GUN_STR_C8_TANK_LF, // "tank\n", + GUN_STR_C9_TASER_LF, // "taser\n", + GUN_STR_CA_THROWINGKNIFE_LF, // "throwing knife\n", + GUN_STR_CB_TIMEDMINE_LF, // "timed mine\n", + GUN_STR_CC_TOKEN_LF, // "token\n", + GUN_STR_CD_UNARMED_LF, // "unarmed\n", + GUN_STR_CE_VIDEOTAPE_LF, // "video tape\n", + GUN_STR_CF_WATCHCOMMUNICATOR_LF, // "watch communicator\n", + GUN_STR_D0_WATCHGEIGERCOUNTER_LF, // "watch geiger counter\n", + GUN_STR_D1_WATCHIDENTIFIER_LF, // "watch identifier\n", + GUN_STR_D2_WATCHLASER_LF, // "watch laser\n", + GUN_STR_D3_WATCHMAGNETICATTRACT_LF, // "watch magnet attract\n", + GUN_STR_D4_WATCHMAGNETICREPEL_LF, // "watch magnet repel\n", + GUN_STR_D5_WEAPONCASE_LF, // "weapon case\n", + GUN_STR_D6_YALEKEY_LF, // "yale key\n", + GUN_STR_D7_UZI_LF, // "zmg (9mm)\n", + GUN_STR_D8_ANALYZINGTHEGOLDENEYEKEY_LF, // "Analyzing the GoldenEye key...\n", + GUN_STR_D9_YOUDONOTHAVETHEGOLDENEYEKEY_LF, // "You do not have the GoldenEye\n key.\n", + GUN_STR_DA_KILLCOUNT, // "kill count", + GUN_STR_DB_DIEDONCE_LF, // "died once\n", + GUN_STR_DC_DIED, // "died", + GUN_STR_DD_TIMES, // "times", + GUN_STR_DE_SUICIDECOUNT, // "suicide count", + GUN_STR_DF // 0 }; diff --git a/assets/obseg/text/LmiscE.h b/assets/obseg/text/LmiscE.h index 49221a5..4bd5a75 100644 --- a/assets/obseg/text/LmiscE.h +++ b/assets/obseg/text/LmiscE.h @@ -1,75 +1,76 @@ enum LMISCE_STRINGS { - MISC_STR_00, // "Invincible", - MISC_STR_01, // "All Guns", - MISC_STR_02, // "Super x2 Health", - MISC_STR_03, // "Super x2 Armor", - MISC_STR_04, // "Bond Invisible", - MISC_STR_05, // "Bond Phase", - MISC_STR_06, // "Infinite Ammo", - MISC_STR_07, // "DK Mode", - MISC_STR_08, // "Tiny Bond", - MISC_STR_09, // "Super x10 Health", - MISC_STR_0A, // "Magnum", - MISC_STR_0B, // "Laser", - MISC_STR_0C, // "Golden Gun", - MISC_STR_0D, // "Silver PP7", - MISC_STR_0E, // "Gold PP7", - MISC_STR_0F, // "invincibility on\n", - MISC_STR_10, // "all guns on\n", - MISC_STR_11, // "maximum ammo\n", - MISC_STR_12, // "super x2 health\n", - MISC_STR_13, // "super x2 armor\n", - MISC_STR_14, // "invisibility on\n", - MISC_STR_15, // "bond phase on\n", - MISC_STR_16, // "infinite ammo on\n", - MISC_STR_17, // "dk mode on\n", - MISC_STR_18, // "extra weapons\n", - MISC_STR_19, // "tiny bond on\n", - MISC_STR_1A, // "paintball mode on\n", - MISC_STR_1B, // "super x10 health\n", - MISC_STR_1C, // "happy now karl?\n", - MISC_STR_1D, // "fast mode on\n", - MISC_STR_1E, // "invincibility off\n", - MISC_STR_1F, // "all guns off\n", - MISC_STR_20, // "invisibility off\n", - MISC_STR_21, // "bond phase off\n", - MISC_STR_22, // "infinite ammo off\n", - MISC_STR_23, // "dk mode off\n", - MISC_STR_24, // "tiny bond off\n", - MISC_STR_25, // "paintball mode off\n", - MISC_STR_26, // "radar on\n", - MISC_STR_27, // "fast mode off\n", - MISC_STR_28, // "NO NAME", - MISC_STR_29, // "E R R O R\n", - MISC_STR_2A, // "no briefing for this mission\n", - MISC_STR_2B, // "\n", - MISC_STR_2C, // "objective", - MISC_STR_2D, // "completed\n", - MISC_STR_2E, // "incomplete\n", - MISC_STR_2F, // "failed\n", - MISC_STR_30, // "slowest motion\n", - MISC_STR_31, // "very slow motion\n", - MISC_STR_32, // "slow motion\n", - MISC_STR_33, // "normal motion\n", - MISC_STR_34, // "fast motion\n", - MISC_STR_35, // "very fast motion\n", - MISC_STR_36, // "fastest motion\n", - MISC_STR_37, // "Line Mode", - MISC_STR_38, // "Paintball Mode", - MISC_STR_39, // "Enemy Rockets", - MISC_STR_3A, // "2x Rocket L.", - MISC_STR_3B, // "2x Grenade L.", - MISC_STR_3C, // "2x RC-P90", - MISC_STR_3D, // "2x Throwing Knife", - MISC_STR_3E, // "2x Hunting Knife", - MISC_STR_3F, // "2x Laser", - MISC_STR_40, // "Turbo Mode", - MISC_STR_41, // "Fast Animation", - MISC_STR_42, // "Slow Animation", - MISC_STR_43 // "No Radar [Multi]" - + MISC_STR_00_INVINCIBLE, // "Invincible", + MISC_STR_01_ALLGUNS, // "All Guns", + MISC_STR_02_SUPER2XHEALTH, // "Super x2 Health", + MISC_STR_03_SUPER2XARMOUR, // "Super x2 Armor", + MISC_STR_04_BONDINVISIBLE, // "Bond Invisible", + MISC_STR_05_BONDPHASE, // "Bond Phase", + MISC_STR_06_INFINITAMMO, // "Infinite Ammo", + MISC_STR_07_DKMODE, // "DK Mode", + MISC_STR_08_TINYBOND, // "Tiny Bond", + MISC_STR_09_SUPER10XHEALTH, // "Super x10 Health", + MISC_STR_0A_MAGNUM, // "Magnum", + MISC_STR_0B_LASER, // "Laser", + MISC_STR_0C_GOLDENGUN, // "Golden Gun", + MISC_STR_0D_SILVERPPK, // "Silver PP7", + MISC_STR_0E_GOLDPPK, // "Gold PP7", + MISC_STR_0F_INVINCIBILITYON_LF, // "invincibility on\n", + MISC_STR_10_ALLGUNSON_LF, // "all guns on\n", + MISC_STR_11_MAXIMUMAMMO_LF, // "maximum ammo\n", + MISC_STR_12_SUPER2XHEALTH_LF, // "super x2 health\n", + MISC_STR_13_SUPER2XARMOUR_LF, // "super x2 armor\n", + MISC_STR_14_INVISIBILITYON_LF, // "invisibility on\n", + MISC_STR_15_BONDPHASEON_LF, // "bond phase on\n", + MISC_STR_16_INFINITEAMMOON_LF, // "infinite ammo on\n", + MISC_STR_17_DKMODEON_LF, // "dk mode on\n", + MISC_STR_18_EXTRAWEAPONS_LF, // "extra weapons\n", + MISC_STR_19_TINYBONDON_LF, // "tiny bond on\n", + MISC_STR_1A_PAINTBALMODEON_LF, // "paintball mode on\n", + MISC_STR_1B_SUPER10XHEALTH_LF, // "super x10 health\n", + MISC_STR_1C_HAPPYNOWKARL_LF, // "happy now karl?\n", + MISC_STR_1D_FASTMODEON_LF, // "fast mode on\n", + MISC_STR_1E_INVINCIBILITYOFF_LF, // "invincibility off\n", + MISC_STR_1F_ALLGUNSOFF_LF, // "all guns off\n", + MISC_STR_20_INVISIBILITYOFF_LF, // "invisibility off\n", + MISC_STR_21_BONDPHASEOFF_LF, // "bond phase off\n", + MISC_STR_22_INFINITEAMMOOFF_LF, // "infinite ammo off\n", + MISC_STR_23_DKMODEOFF_LF, // "dk mode off\n", + MISC_STR_24_TINYBONDOFF_LF, // "tiny bond off\n", + MISC_STR_25_PAINTBALLMODEOFF_LF, // "paintball mode off\n", + MISC_STR_26_RADARON_LF, // "radar on\n", + MISC_STR_27_FASTMODEOFF_LF, // "fast mode off\n", + MISC_STR_28_NONAME, // "NO NAME", + MISC_STR_29_ERROR_LF, // "E R R O R\n", + MISC_STR_2A_NOBRIEFING_LF, // "no briefing for this mission\n", + MISC_STR_2B_LF, // "\n", + MISC_STR_2C_OBJECTIVE, // "objective", + MISC_STR_2D_COMPLETED_LF, // "completed\n", + MISC_STR_2E_INCOMPLETE_LF, // "incomplete\n", + MISC_STR_2F_FAILED_LF, // "failed\n", + MISC_STR_30_SLOWESTMOTION_LF, // "slowest motion\n", + MISC_STR_31_VERYSLOWMOTION_LF, // "very slow motion\n", + MISC_STR_32_SLOWMOTION_LF, // "slow motion\n", + MISC_STR_33_NORMALMOTION_LF, // "normal motion\n", + MISC_STR_34_FASTMOTION_LF, // "fast motion\n", + MISC_STR_35_VERYFASTMOTION_LF, // "very fast motion\n", + MISC_STR_36_FASTESTMOTION_LF, // "fastest motion\n", + MISC_STR_37_LINEMODE, // "Line Mode", + MISC_STR_38_PAINTBALLMODE, // "Paintball Mode", + MISC_STR_39_ENEMYROCKETS, // "Enemy Rockets", + MISC_STR_3A_2XROCKETLAUNCHER, // "2x Rocket L.", + MISC_STR_3B_2XGRENADELAUNCHER, // "2x Grenade L.", + MISC_STR_3C_2XFNP90, // "2x RC-P90", + MISC_STR_3D_2XTHROWINGKNIFE, // "2x Throwing Knife", + MISC_STR_3E_2XHUNTINGKNIFE, // "2x Hunting Knife", + MISC_STR_3F_2XLASER, // "2x Laser", + MISC_STR_40_TURBOMODE, // "Turbo Mode", + MISC_STR_41_FASTANIMATION, // "Fast Animation", + MISC_STR_42_SLOWANIMATION, // "Slow Animation", + MISC_STR_43_NORADAR // "No Radar [Multi]" + #ifdef VERSION_JP - ,MISC_STR_44//,"One minute left" + , + MISC_STR_44 //,"One minute left" #endif }; diff --git a/assets/obseg/text/LmpmenuE.h b/assets/obseg/text/LmpmenuE.h index 8280651..481ce7d 100644 --- a/assets/obseg/text/LmpmenuE.h +++ b/assets/obseg/text/LmpmenuE.h @@ -1,39 +1,39 @@ enum LMPMENUE_STRINGS { - MPMENU_STR_00, // "Lemming Award", - MPMENU_STR_01, // "Where's the Ammo?", - MPMENU_STR_02, // "Where's the Armor?", - MPMENU_STR_03, // "AC -10 Award", - MPMENU_STR_04, // "Marksmanship Award", - MPMENU_STR_05, // "Most Professional", - MPMENU_STR_06, // "Most Deadly", - MPMENU_STR_07, // "Mostly Harmless", - MPMENU_STR_08, // "Most Cowardly", - MPMENU_STR_09, // "Most Frantic", - MPMENU_STR_0A, // "Most Honorable", - MPMENU_STR_0B, // "Most Dishonorable", - MPMENU_STR_0C, // "Shortest Innings", - MPMENU_STR_0D, // "Longest Innings", - MPMENU_STR_0E, // "Double Kill", - MPMENU_STR_0F, // "Triple Kill", - MPMENU_STR_10, // "Quad Kill (Doh!)", - MPMENU_STR_11, // "Rank: 1st", - MPMENU_STR_12, // "Rank: 2nd", - MPMENU_STR_13, // "Rank: 3rd", - MPMENU_STR_14, // "Rank: 4th", - MPMENU_STR_15, // "PLAY", - MPMENU_STR_16, // "GAME OVER", - MPMENU_STR_17, // "START TO EXIT", - MPMENU_STR_18, // "PAUSED", - MPMENU_STR_19, // "PAUSE", - MPMENU_STR_1A, // "EXIT", - MPMENU_STR_1B, // "SCORES", - MPMENU_STR_1C, // "P", - MPMENU_STR_1D, // "KILLS", - MPMENU_STR_1E, // "LOSSES", - MPMENU_STR_1F, // "Weapon of choice:", - MPMENU_STR_20, // "cancel", - MPMENU_STR_21, // "confirm", - MPMENU_STR_22, // "press start\n", - MPMENU_STR_23, // "to continue\n" + MPMENU_STR_00_LEMMINGAWARD, // "Lemming Award", + MPMENU_STR_01_WHERESTHEAMMO, // "Where's the Ammo?", + MPMENU_STR_02_WHERESTHEARMOR, // "Where's the Armor?", + MPMENU_STR_03_AC10AWARD, // "AC -10 Award", + MPMENU_STR_04_MARKSMANSHIPAWARD, // "Marksmanship Award", + MPMENU_STR_05_MOSTPROFESSIONAL, // "Most Professional", + MPMENU_STR_06_MOSTDEADLY, // "Most Deadly", + MPMENU_STR_07_MOSTLYHARMLESS, // "Mostly Harmless", + MPMENU_STR_08_MOSTCOWARD, // "Most Cowardly", + MPMENU_STR_09_MOSTFRANTIC, // "Most Frantic", + MPMENU_STR_0A_MOSTHONORABLE, // "Most Honorable", + MPMENU_STR_0B_MOSTDISHONORABLE, // "Most Dishonorable", + MPMENU_STR_0C_SHORTESTINNINGS, // "Shortest Innings", + MPMENU_STR_0D_LONGESTINNINGS, // "Longest Innings", + MPMENU_STR_0E_DOUBLEKILL, // "Double Kill", + MPMENU_STR_0F_TRIPLEKILL, // "Triple Kill", + MPMENU_STR_10_QUADKILL, // "Quad Kill (Doh!)", + MPMENU_STR_11_RANK1ST, // "Rank: 1st", + MPMENU_STR_12_RANK2ND, // "Rank: 2nd", + MPMENU_STR_13_RANK3RD, // "Rank: 3rd", + MPMENU_STR_14_RANK4TH, // "Rank: 4th", + MPMENU_STR_15_PLAY, // "PLAY", + MPMENU_STR_16_GAMEOVER, // "GAME OVER", + MPMENU_STR_17_STARTTTOEXIT, // "START TO EXIT", + MPMENU_STR_18_PAUSED, // "PAUSED", + MPMENU_STR_19_PAUSE, // "PAUSE", + MPMENU_STR_1A_EXIT, // "EXIT", + MPMENU_STR_1B_SCORES, // "SCORES", + MPMENU_STR_1C_P, // "P", + MPMENU_STR_1D_KILLS, // "KILLS", + MPMENU_STR_1E_LOSSES, // "LOSSES", + MPMENU_STR_1F_WEAPONOFCHOICE, // "Weapon of choice:", + MPMENU_STR_20_CANCEL, // "cancel", + MPMENU_STR_21_CONFIRM, // "confirm", + MPMENU_STR_22_PRESSSTART_LF, // "press start\n", + MPMENU_STR_23_TOCONTINUE_LF // "to continue\n" }; diff --git a/assets/obseg/text/LmpweaponsE.h b/assets/obseg/text/LmpweaponsE.h index 054e496..f76ef81 100644 --- a/assets/obseg/text/LmpweaponsE.h +++ b/assets/obseg/text/LmpweaponsE.h @@ -1,19 +1,19 @@ enum LMPWEAPONSE_STRINGS { - MPWEAPON_STR_00, // "Slappers only!", - MPWEAPON_STR_01, // "Pistols", - MPWEAPON_STR_02, // "Automatics", - MPWEAPON_STR_03, // "Power Weapons", - MPWEAPON_STR_04, // "Sniper Rifles", - MPWEAPON_STR_05, // "Grenades", - MPWEAPON_STR_06, // "Remote Mines", - MPWEAPON_STR_07, // "Grenade Launchers", - MPWEAPON_STR_08, // "Timed Mines", - MPWEAPON_STR_09, // "Proximity Mines", - MPWEAPON_STR_0A, // "Rockets", - MPWEAPON_STR_0B, // "Lasers", - MPWEAPON_STR_0C, // "Golden Gun", - MPWEAPON_STR_0D, // "Throwing Knives", + MPWEAPON_STR_00_SLAPPERSONLY, // "Slappers only!", + MPWEAPON_STR_01_PISTOLS, // "Pistols", + MPWEAPON_STR_02_AUTOMATICS, // "Automatics", + MPWEAPON_STR_03_POWERWEAPONS, // "Power Weapons", + MPWEAPON_STR_04_SNIPERRIFLES, // "Sniper Rifles", + MPWEAPON_STR_05_GRENADES, // "Grenades", + MPWEAPON_STR_06_REMOTEMINES, // "Remote Mines", + MPWEAPON_STR_07_GRENADELAUNCHERS, // "Grenade Launchers", + MPWEAPON_STR_08_TIMEDMINES, // "Timed Mines", + MPWEAPON_STR_09_PROXIMITYMINES, // "Proximity Mines", + MPWEAPON_STR_0A_ROCKETS, // "Rockets", + MPWEAPON_STR_0B_LASERS, // "Lasers", + MPWEAPON_STR_0C_GOLDENGUN, // "Golden Gun", + MPWEAPON_STR_0D_THROWINGKNIVES, // "Throwing Knives", MPWEAPON_STR_0E, // 0, MPWEAPON_STR_0F // 0 }; diff --git a/assets/obseg/text/LoptionE.h b/assets/obseg/text/LoptionE.h index aa85692..227d997 100644 --- a/assets/obseg/text/LoptionE.h +++ b/assets/obseg/text/LoptionE.h @@ -1,67 +1,67 @@ enum LOPTIONE_STRINGS { - OPTION_STR_00, //"fire\n", - OPTION_STR_01, //"aim\n", - OPTION_STR_02, //"action\n", - OPTION_STR_03, //"weapon\n", - OPTION_STR_04, //"pause\n", - OPTION_STR_05, //"move\n", - OPTION_STR_06, //"look\n", - OPTION_STR_07, //"?\n", - OPTION_STR_08, //"move sight\n", - OPTION_STR_09, //"1.1 honey\n", - OPTION_STR_0A, //"1.2 solitaire\n", - OPTION_STR_0B, //"1.3 kissy\n", - OPTION_STR_0C, //"1.4 goodnight\n", - OPTION_STR_0D, //"2.1 plenty\n", - OPTION_STR_0E, //"2.2 galore\n", - OPTION_STR_0F, //"2.3 domino\n", - OPTION_STR_10, //"2.4 goodhead\n", - OPTION_STR_11, //"look up/down\n", - OPTION_STR_12, //"auto-aim\n", - OPTION_STR_13, //"look ahead\n", - OPTION_STR_14, //"aim control\n", - OPTION_STR_15, //"sight on-screen\n", - OPTION_STR_16, //"ammo on-screen\n", - OPTION_STR_17, //"screen\n", - OPTION_STR_18, //"ratio\n", - OPTION_STR_19, //"on\n", - OPTION_STR_1A, //"off\n", - OPTION_STR_1B, //"upright\n", - OPTION_STR_1C, //"reverse\n", - OPTION_STR_1D, //"toggle\n", - OPTION_STR_1E, //"hold\n", - OPTION_STR_1F, //"full\n", - OPTION_STR_20, //"wide\n", - OPTION_STR_21, //"cinema\n", - OPTION_STR_22, //"normal\n", - OPTION_STR_23, //"16:9\n", - OPTION_STR_24, //"abort:\n", - OPTION_STR_25, //"confirm\n", - OPTION_STR_26, //"cancel\n", - OPTION_STR_27, //"mission status:\n", - OPTION_STR_28, //"complete\n", - OPTION_STR_29, //"incomplete\n", - OPTION_STR_2A, //"Left Hand\n", - OPTION_STR_2B, //"q watch v2.01 beta\n", - OPTION_STR_2C, //"down\n", - OPTION_STR_2D, //"up\n", - OPTION_STR_2E, //"sidestep\n", - OPTION_STR_2F, //"sidestep\n", - OPTION_STR_30, //"forward\n", - OPTION_STR_31, //"back\n", - OPTION_STR_32, //"control style\n", - OPTION_STR_33, //"controller\n", - OPTION_STR_34, //"controllers\n", - OPTION_STR_35, //"music\n", - OPTION_STR_36, //"fx\n", - OPTION_STR_37, //"failed\n", - OPTION_STR_38, //"2. background\n", - OPTION_STR_39, //"3. M briefing\n", - OPTION_STR_3A, //"4. Q branch\n", - OPTION_STR_3B, //"5. moneypenny\n", - OPTION_STR_3C, //"1. mission objectives\n", - OPTION_STR_3D, //0, - OPTION_STR_3E, //0, - OPTION_STR_3F //0 + OPTION_STR_00_FIRE_LF, //"fire\n", + OPTION_STR_01_AIM_LF, //"aim\n", + OPTION_STR_02_ACTION_LF, //"action\n", + OPTION_STR_03_WEAPON_LF, //"weapon\n", + OPTION_STR_04_PAUSE_LF, //"pause\n", + OPTION_STR_05_MOVE_LF, //"move\n", + OPTION_STR_06_LOOK_LF, //"look\n", + OPTION_STR_07_QUESTION_LF, //"?\n", + OPTION_STR_08_MOVESIGHT_LF, //"move sight\n", + OPTION_STR_09_11HONEY_LF, //"1.1 honey\n", + OPTION_STR_0A_12SOLITAIRE_LF, //"1.2 solitaire\n", + OPTION_STR_0B_13KISSY_LF, //"1.3 kissy\n", + OPTION_STR_0C_14GOODNIGHT_LF, //"1.4 goodnight\n", + OPTION_STR_0D_21PLENTY_LF, //"2.1 plenty\n", + OPTION_STR_0E_22GALORE_LF, //"2.2 galore\n", + OPTION_STR_0F_23DOMINO_LF, //"2.3 domino\n", + OPTION_STR_10_24GOODHEAD_LF, //"2.4 goodhead\n", + OPTION_STR_11_LOOKUPDOWN_LF, //"look up/down\n", + OPTION_STR_12_AUTOAIM_LF, //"auto-aim\n", + OPTION_STR_13_LOOKAHEAD_LF, //"look ahead\n", + OPTION_STR_14_AIMCONTROL_LF, //"aim control\n", + OPTION_STR_15_SIGHTONSCREEN_LF, //"sight on-screen\n", + OPTION_STR_16_AMMOONSCREEN_LF, //"ammo on-screen\n", + OPTION_STR_17_SCREEN_LF, //"screen\n", + OPTION_STR_18_RATIO_LF, //"ratio\n", + OPTION_STR_19_ON_LF, //"on\n", + OPTION_STR_1A_OFF_LF, //"off\n", + OPTION_STR_1B_UPRIGHT_LF, //"upright\n", + OPTION_STR_1C_REVERSE_LF, //"reverse\n", + OPTION_STR_1D_TOGGLE_LF, //"toggle\n", + OPTION_STR_1E_HOLD_LF, //"hold\n", + OPTION_STR_1F_FULL_LF, //"full\n", + OPTION_STR_20_WIDE_LF, //"wide\n", + OPTION_STR_21_CINEMA_LF, //"cinema\n", + OPTION_STR_22_NORMAL_LF, //"normal\n", + OPTION_STR_23_169_LF, //"16:9\n", + OPTION_STR_24_ABORT_LF, //"abort:\n", + OPTION_STR_25_CONFIRM_LF, //"confirm\n", + OPTION_STR_26_CANCEL_LF, //"cancel\n", + OPTION_STR_27_MISSIONSTATUS_LF, //"mission status:\n", + OPTION_STR_28_COMPLETE_LF, //"complete\n", + OPTION_STR_29_INCOMPLETE_LF, //"incomplete\n", + OPTION_STR_2A_LEFTHAND_LF, //"Left Hand\n", + OPTION_STR_2B_QWATCHVERSION_LF, //"q watch v2.01 beta\n", + OPTION_STR_2C_DOWN_LF, //"down\n", + OPTION_STR_2D_UP_LF, //"up\n", + OPTION_STR_2E_SIDESTEP_LF, //"sidestep\n", + OPTION_STR_2F_SIDESTEP_LF, //"sidestep\n", + OPTION_STR_30_FORWARD_LF, //"forward\n", + OPTION_STR_31_BACK_LF, //"back\n", + OPTION_STR_32_CONTROLSTYLE_LF, //"control style\n", + OPTION_STR_33_CONTROLLER_LF, //"controller\n", + OPTION_STR_34_CONTROLLERS_LF, //"controllers\n", + OPTION_STR_35_MUSIC_LF, //"music\n", + OPTION_STR_36_FX_LF, //"fx\n", + OPTION_STR_37_FAILED_LF, //"failed\n", + OPTION_STR_38_2BACKGROUND_LF, //"2. background\n", + OPTION_STR_39_3MBRIEFING_LF, //"3. M briefing\n", + OPTION_STR_3A_4QBRANCH_LF, //"4. Q branch\n", + OPTION_STR_3B_5MONEYPENNY_LF, //"5. moneypenny\n", + OPTION_STR_3C_1MISSIONOBJECTIVES_LF, //"1. mission objectives\n", + OPTION_STR_3D, // 0, + OPTION_STR_3E, // 0, + OPTION_STR_3F // 0 }; diff --git a/assets/obseg/text/LpropobjE.h b/assets/obseg/text/LpropobjE.h index 5a32068..4426334 100644 --- a/assets/obseg/text/LpropobjE.h +++ b/assets/obseg/text/LpropobjE.h @@ -1,70 +1,70 @@ enum LPROPOBJE_STRINGS { - PROPOBJ_STR_00, // "Picked up ", - PROPOBJ_STR_01, // "some ", - PROPOBJ_STR_02, // "a ", - PROPOBJ_STR_03, // "an ", - PROPOBJ_STR_04, // "the ", - PROPOBJ_STR_05, // "ammo", - PROPOBJ_STR_06, // "shotgun cartridge", - PROPOBJ_STR_07, // "magnum bullet", - PROPOBJ_STR_08, // "golden bullet", - PROPOBJ_STR_09, // "hand grenade", - PROPOBJ_STR_0A, // "grenade round", - PROPOBJ_STR_0B, // "rocket", - PROPOBJ_STR_0C, // "remote mine", - PROPOBJ_STR_0D, // "proximity mine", - PROPOBJ_STR_0E, // "timed mine", - PROPOBJ_STR_0F, // "throwing ", - PROPOBJ_STR_10, // "knife", - PROPOBJ_STR_11, // "knives", - PROPOBJ_STR_12, // "s", - PROPOBJ_STR_13, // "dart", - PROPOBJ_STR_14, // "explosive pen", - PROPOBJ_STR_15, // "explosive case", - PROPOBJ_STR_16, // "flare", - PROPOBJ_STR_17, // "piton", - PROPOBJ_STR_18, // "of dynamite", - PROPOBJ_STR_19, // "stick ", - PROPOBJ_STR_1A, // "sticks ", - PROPOBJ_STR_1B, // "bug", - PROPOBJ_STR_1C, // "micro camera", - PROPOBJ_STR_1D, // "GoldenEye key", - PROPOBJ_STR_1E, // "token", - PROPOBJ_STR_1F, // "plastique", - PROPOBJ_STR_20, // "a hunting knife.\n", - PROPOBJ_STR_21, // "a PP7.\n", - PROPOBJ_STR_22, // "a silenced PP7.\n", - PROPOBJ_STR_23, // "a DD44 Dostovei.\n", - PROPOBJ_STR_24, // "a Klobb.\n", - PROPOBJ_STR_25, // "a KF7 Soviet.\n", - PROPOBJ_STR_26, // "a ZMG (9mm).\n", - PROPOBJ_STR_27, // "a D5K Deutsche.\n", - PROPOBJ_STR_28, // "a silenced D5K.\n", - PROPOBJ_STR_29, // "a Phantom.\n", - PROPOBJ_STR_2A, // "an AR33 assault rifle.\n", - PROPOBJ_STR_2B, // "an RC-P90.\n", - PROPOBJ_STR_2C, // "a shotgun.\n", - PROPOBJ_STR_2D, // "an automatic shotgun.\n", - PROPOBJ_STR_2E, // "a sniper rifle.\n", - PROPOBJ_STR_2F, // "a grenade launcher.\n", - PROPOBJ_STR_30, // "a rocket launcher.\n", - PROPOBJ_STR_31, // "a Cougar Magnum.\n", - PROPOBJ_STR_32, // "the Golden Gun.\n", - PROPOBJ_STR_33, // "a Moonraker laser.\n", - PROPOBJ_STR_34, // "a flare pistol.\n", - PROPOBJ_STR_35, // "a piton gun.\n", - PROPOBJ_STR_36, // "a silver PP7.\n", - PROPOBJ_STR_37, // "a gold PP7.\n", - PROPOBJ_STR_38, // "a keycard.\n", - PROPOBJ_STR_39, // "a yale key.\n", - PROPOBJ_STR_3A, // "a bolt key.\n", - PROPOBJ_STR_3B, // "a new weapon.\n", - PROPOBJ_STR_3C, // "Picked up a key.\n", - PROPOBJ_STR_3D, // "Picked up some body armor.\n", - PROPOBJ_STR_3E, // "body armor.\n", - PROPOBJ_STR_3F, // "Picked up something.\n", - PROPOBJ_STR_40, // "This door is locked.\n", + PROPOBJ_STR_00_PICKEDUP, // "Picked up ", + PROPOBJ_STR_01_SOME, // "some ", + PROPOBJ_STR_02_A, // "a ", + PROPOBJ_STR_03_AN, // "an ", + PROPOBJ_STR_04_THE, // "the ", + PROPOBJ_STR_05_AMMO, // "ammo", + PROPOBJ_STR_06_SHOTGUNCARTRIDGE, // "shotgun cartridge", + PROPOBJ_STR_07_MAGNUMBULLET, // "magnum bullet", + PROPOBJ_STR_08_GOLDENBULLET, // "golden bullet", + PROPOBJ_STR_09_HANDGRENADE, // "hand grenade", + PROPOBJ_STR_0A_GRENADEROUND, // "grenade round", + PROPOBJ_STR_0B_ROCKET, // "rocket", + PROPOBJ_STR_0C_REMOTEMINE, // "remote mine", + PROPOBJ_STR_0D_PROXIMITYMINE, // "proximity mine", + PROPOBJ_STR_0E_TIMEDMINE, // "timed mine", + PROPOBJ_STR_0F_THROWING, // "throwing ", + PROPOBJ_STR_10_KNIFE, // "knife", + PROPOBJ_STR_11_KNIVES, // "knives", + PROPOBJ_STR_12_S, // "s", + PROPOBJ_STR_13_DART, // "dart", + PROPOBJ_STR_14_EXPLOSIVEPEN, // "explosive pen", + PROPOBJ_STR_15_EXPLOSIVECASE, // "explosive case", + PROPOBJ_STR_16_FLARE, // "flare", + PROPOBJ_STR_17_PITON, // "piton", + PROPOBJ_STR_18_OFDYNAMITE, // "of dynamite", + PROPOBJ_STR_19_STICK, // "stick ", + PROPOBJ_STR_1A_STICKS, // "sticks ", + PROPOBJ_STR_1B_BUG, // "bug", + PROPOBJ_STR_1C_MICROCAMERA, // "micro camera", + PROPOBJ_STR_1D_GOLDENEYEKEY, // "GoldenEye key", + PROPOBJ_STR_1E_TOKEN, // "token", + PROPOBJ_STR_1F_PLASTIQUE, // "plastique", + PROPOBJ_STR_20_AHUNTINGKNIFE, // "a hunting knife.\n", + PROPOBJ_STR_21_APPK, // "a PP7.\n", Using filename since renaming was probably done after localisation + PROPOBJ_STR_22_ASILENCEDPPK, // "a silenced PP7.\n", + PROPOBJ_STR_23_ATT33, // "a DD44 Dostovei.\n", + PROPOBJ_STR_24_ASPKORPION, // "a Klobb.\n", + PROPOBJ_STR_25_ANAK47, // "a KF7 Soviet.\n", + PROPOBJ_STR_26_ANUZI, // "a ZMG (9mm).\n", + PROPOBJ_STR_27_ANMP5K, // "a D5K Deutsche.\n", + PROPOBJ_STR_28_ASILENCEDMP5, // "a silenced D5K.\n", + PROPOBJ_STR_29_ASPECTRE, // "a Phantom.\n", + PROPOBJ_STR_2A_ANM16, // "an AR33 assault rifle.\n", + PROPOBJ_STR_2B_ANFNP90, // "an RC-P90.\n", + PROPOBJ_STR_2C_ASHOTGUN, // "a shotgun.\n", + PROPOBJ_STR_2D_ANAUTOSHOTGUN, // "an automatic shotgun.\n", + PROPOBJ_STR_2E_ASNIPERRIFLE, // "a sniper rifle.\n", + PROPOBJ_STR_2F_AGRENADELAUNCHER, // "a grenade launcher.\n", + PROPOBJ_STR_30_AROCKETLAUNCHER, // "a rocket launcher.\n", + PROPOBJ_STR_31_ARUGERMAGNUM, // "a Cougar Magnum.\n", + PROPOBJ_STR_32_THEGOLDENGUN, // "the Golden Gun.\n", + PROPOBJ_STR_33_AMOOKRAKERLASER, // "a Moonraker laser.\n", + PROPOBJ_STR_34_AFLAREPISTOL, // "a flare pistol.\n", + PROPOBJ_STR_35_APITONGUN, // "a piton gun.\n", + PROPOBJ_STR_36_ASILVERPPK, // "a silver PP7.\n", + PROPOBJ_STR_37_AGOLDPPK, // "a gold PP7.\n", + PROPOBJ_STR_38_AKEYCARD, // "a keycard.\n", + PROPOBJ_STR_39_AYALEKEY, // "a yale key.\n", + PROPOBJ_STR_3A_ABOLTKEY, // "a bolt key.\n", + PROPOBJ_STR_3B_ANEWWEAPON, // "a new weapon.\n", + PROPOBJ_STR_3C_PICKEDUPAKEY, // "Picked up a key.\n", + PROPOBJ_STR_3D_PICKEDUPSOMEBODEYARMOUR, // "Picked up some body armor.\n", + PROPOBJ_STR_3E_BODYARMOUR, // "body armor.\n", + PROPOBJ_STR_3F_PICKEDUPSOMETHING, // "Picked up something.\n", + PROPOBJ_STR_40_THISDOORISLOCKED, // "This door is locked.\n", PROPOBJ_STR_41, // 0, PROPOBJ_STR_42, // 0, PROPOBJ_STR_43 // 0 diff --git a/assets/obseg/text/LtitleE.c b/assets/obseg/text/LtitleE.c index 02d996c..1d17981 100644 --- a/assets/obseg/text/LtitleE.c +++ b/assets/obseg/text/LtitleE.c @@ -287,12 +287,12 @@ char *LtitleE[] = { "Select Control Style\n", //TITLE_STR_285 "Control Style\n", //TITLE_STR_286 #ifdef LANG_US - 0 //TITLE_STR_287 + 0 //TITLE_STR_287_RUSSIANSOLDIER #endif #ifdef LANG_JP - "Russian Soldier\n", //TITLE_STR_287 - "Russian Infantry\n", //TITLE_STR_288 - "Scientist\n", //TITLE_STR_289 + "Russian Soldier\n", //TITLE_STR_287_RUSSIANSOLDIER + "Russian Infantry\n", //TITLE_STR_288_RUSSIANINFANTRY + "Scientist\n", //TITLE_STR_289_SCIENTIST "Russian Commandant\n", //TITLE_STR_290 "Janus Marine\n", //TITLE_STR_291 "Naval Officer\n", //TITLE_STR_292 diff --git a/assets/obseg/text/LtitleE.h b/assets/obseg/text/LtitleE.h index 71d70b6..4e8894f 100644 --- a/assets/obseg/text/LtitleE.h +++ b/assets/obseg/text/LtitleE.h @@ -1,299 +1,299 @@ typedef enum LTITLE_STRINGS { - TITLE_STR_00, - TITLE_STR_01, - TITLE_STR_02, - TITLE_STR_03, - TITLE_STR_04, - TITLE_STR_05, - TITLE_STR_06, - TITLE_STR_07, - TITLE_STR_08, - TITLE_STR_09, - TITLE_STR_10, - TITLE_STR_11, - TITLE_STR_12, - TITLE_STR_13, - TITLE_STR_14, - TITLE_STR_15, - TITLE_STR_16, - TITLE_STR_17, - TITLE_STR_18, - TITLE_STR_19, - TITLE_STR_20, - TITLE_STR_21, - TITLE_STR_22, - TITLE_STR_23, - TITLE_STR_24, - TITLE_STR_25, - TITLE_STR_26, - TITLE_STR_27, - TITLE_STR_28, - TITLE_STR_29, - TITLE_STR_30, - TITLE_STR_31, - TITLE_STR_32, - TITLE_STR_33, - TITLE_STR_34, - TITLE_STR_35, - TITLE_STR_36, - TITLE_STR_37, - TITLE_STR_38, - TITLE_STR_39, - TITLE_STR_40, - TITLE_STR_41, - TITLE_STR_42, - TITLE_STR_43, - TITLE_STR_44, - TITLE_STR_45, - TITLE_STR_46, - TITLE_STR_47, - TITLE_STR_48, - TITLE_STR_49, - TITLE_STR_50, - TITLE_STR_51, - TITLE_STR_52, - TITLE_STR_53, - TITLE_STR_54, - TITLE_STR_55, - TITLE_STR_56, - TITLE_STR_57, - TITLE_STR_58, - TITLE_STR_59, - TITLE_STR_60, - TITLE_STR_61, - TITLE_STR_62, - TITLE_STR_63, - TITLE_STR_64, - TITLE_STR_65, - TITLE_STR_66, - TITLE_STR_67, - TITLE_STR_68, - TITLE_STR_69, - TITLE_STR_70, - TITLE_STR_71, - TITLE_STR_72, - TITLE_STR_73, - TITLE_STR_74, - TITLE_STR_75, - TITLE_STR_76, - TITLE_STR_77, - TITLE_STR_78, - TITLE_STR_79, - TITLE_STR_80, - TITLE_STR_81, - TITLE_STR_82, - TITLE_STR_83, - TITLE_STR_84, - TITLE_STR_85, - TITLE_STR_86, - TITLE_STR_87, - TITLE_STR_88, - TITLE_STR_89, - TITLE_STR_90, - TITLE_STR_91, - TITLE_STR_92, - TITLE_STR_93, - TITLE_STR_94, - TITLE_STR_95, - TITLE_STR_96, - TITLE_STR_97, - TITLE_STR_98, - TITLE_STR_99, - TITLE_STR_100, - TITLE_STR_101, - TITLE_STR_102, - TITLE_STR_103, - TITLE_STR_104, - TITLE_STR_105, - TITLE_STR_106, - TITLE_STR_107, - TITLE_STR_108, - TITLE_STR_109, - TITLE_STR_110, - TITLE_STR_111, - TITLE_STR_112, - TITLE_STR_113, - TITLE_STR_114, - TITLE_STR_115, - TITLE_STR_116, - TITLE_STR_117, - TITLE_STR_118, - TITLE_STR_119, - TITLE_STR_120, - TITLE_STR_121, - TITLE_STR_122, - TITLE_STR_123, - TITLE_STR_124, - TITLE_STR_125, - TITLE_STR_126, - TITLE_STR_127, - TITLE_STR_128, - TITLE_STR_129, - TITLE_STR_130, - TITLE_STR_131, - TITLE_STR_132, - TITLE_STR_133, - TITLE_STR_134, - TITLE_STR_135, - TITLE_STR_136, - TITLE_STR_137, - TITLE_STR_138, - TITLE_STR_139, - TITLE_STR_140, - TITLE_STR_141, - TITLE_STR_142, - TITLE_STR_143, - TITLE_STR_144, - TITLE_STR_145, - TITLE_STR_146, - TITLE_STR_147, - TITLE_STR_148, - TITLE_STR_149, - TITLE_STR_150, - TITLE_STR_151, - TITLE_STR_152, - TITLE_STR_153, - TITLE_STR_154, - TITLE_STR_155, - TITLE_STR_156, - TITLE_STR_157, - TITLE_STR_158, - TITLE_STR_159, - TITLE_STR_160, - TITLE_STR_161, - TITLE_STR_162, - TITLE_STR_163, - TITLE_STR_164, - TITLE_STR_165, - TITLE_STR_166, - TITLE_STR_167, - TITLE_STR_168, - TITLE_STR_169, - TITLE_STR_170, - TITLE_STR_171, - TITLE_STR_172, - TITLE_STR_173, - TITLE_STR_174, - TITLE_STR_175, - TITLE_STR_176, - TITLE_STR_177, - TITLE_STR_178, - TITLE_STR_179, - TITLE_STR_180, - TITLE_STR_181, - TITLE_STR_182, - TITLE_STR_183, - TITLE_STR_184, - TITLE_STR_185, - TITLE_STR_186, - TITLE_STR_187, - TITLE_STR_188, - TITLE_STR_189, - TITLE_STR_190, - TITLE_STR_191, - TITLE_STR_192, - TITLE_STR_193, - TITLE_STR_194, - TITLE_STR_195, - TITLE_STR_196, - TITLE_STR_197, - TITLE_STR_198, - TITLE_STR_199, - TITLE_STR_200, - TITLE_STR_201, - TITLE_STR_202, - TITLE_STR_203, - TITLE_STR_204, - TITLE_STR_205, - TITLE_STR_206, - TITLE_STR_207, - TITLE_STR_208, - TITLE_STR_209, - TITLE_STR_210, - TITLE_STR_211, - TITLE_STR_212, - TITLE_STR_213, - TITLE_STR_214, - TITLE_STR_215, - TITLE_STR_216, - TITLE_STR_217, - TITLE_STR_218, - TITLE_STR_219, - TITLE_STR_220, - TITLE_STR_221, - TITLE_STR_222, - TITLE_STR_223, - TITLE_STR_224, - TITLE_STR_225, - TITLE_STR_226, - TITLE_STR_227, - TITLE_STR_228, - TITLE_STR_229, - TITLE_STR_230, - TITLE_STR_231, - TITLE_STR_232, - TITLE_STR_233, - TITLE_STR_234, - TITLE_STR_235, - TITLE_STR_236, - TITLE_STR_237, - TITLE_STR_238, - TITLE_STR_239, - TITLE_STR_240, - TITLE_STR_241, - TITLE_STR_242, - TITLE_STR_243, - TITLE_STR_244, - TITLE_STR_245, - TITLE_STR_246, - TITLE_STR_247, - TITLE_STR_248, - TITLE_STR_249, - TITLE_STR_250, - TITLE_STR_251, - TITLE_STR_252, - TITLE_STR_253, - TITLE_STR_254, - TITLE_STR_255, - TITLE_STR_256, - TITLE_STR_257, - TITLE_STR_258, - TITLE_STR_259, - TITLE_STR_260, - TITLE_STR_261, - TITLE_STR_262, - TITLE_STR_263, - TITLE_STR_264, - TITLE_STR_265, - TITLE_STR_266, - TITLE_STR_267, - TITLE_STR_268, - TITLE_STR_269, - TITLE_STR_270, - TITLE_STR_271, - TITLE_STR_272, - TITLE_STR_273, - TITLE_STR_274, - TITLE_STR_275, - TITLE_STR_276, - TITLE_STR_277, - TITLE_STR_278, - TITLE_STR_279, - TITLE_STR_280, - TITLE_STR_281, - TITLE_STR_282, - TITLE_STR_283, - TITLE_STR_284, - TITLE_STR_285, - TITLE_STR_286, + TITLE_STR_00_HOUR, + TITLE_STR_01_MINUTE, + TITLE_STR_02_SECOND, + TITLE_STR_03_S, + TITLE_STR_04_START, + TITLE_STR_05_NEXT, + TITLE_STR_06_PREVIOUS, + TITLE_STR_07_TWY, + TITLE_STR_08_CERT, + TITLE_STR_09_NINRARE, + TITLE_STR_10_DANJAQ, + TITLE_STR_11_UAC, + TITLE_STR_12_EON, + TITLE_STR_13_MACB, + TITLE_STR_14_PERSONS, + TITLE_STR_15_PRESIDENT, + TITLE_STR_16_VICE, + TITLE_STR_17_NORMAN, + TITLE_STR_18_EMI, + TITLE_STR_19_AGENT, + TITLE_STR_20_SECRETAGENT, + TITLE_STR_21_00AGENT, + TITLE_STR_22_007, + TITLE_STR_23_ERASEFILE, + TITLE_STR_24_CANCEL, + TITLE_STR_25_CONFIRM, + TITLE_STR_26_MISSION, + TITLE_STR_27_COPY, + TITLE_STR_28_ERASE, + TITLE_STR_29_SELECTMISSION, + TITLE_STR_30_MULTIPLAYER, + TITLE_STR_31_CHEATOPTIONS, + TITLE_STR_32_JB, + TITLE_STR_33_MISSION2, + TITLE_STR_34_PART, + TITLE_STR_35_DIFFICULTY, + TITLE_STR_36_AGENT2, + TITLE_STR_37_SECRETAGENT2, + TITLE_STR_38_00AGENT2, + TITLE_STR_39_0072, + TITLE_STR_40_SPECOPS, + TITLE_STR_41_REACTION, + TITLE_STR_42_HEALTH, + TITLE_STR_43_DAMAGE, + TITLE_STR_44_ACCURACY, + TITLE_STR_45_UNLIMITED, + TITLE_STR_46_5MIN, + TITLE_STR_47_10MIN, + TITLE_STR_48_20MIN, + TITLE_STR_49_5PT, + TITLE_STR_50_10PT, + TITLE_STR_51_20PT, + TITLE_STR_52_LASTALIVE, + TITLE_STR_53_NORMAL, + TITLE_STR_54_YOLT, + TITLE_STR_55_FLAGTAG, + TITLE_STR_56_GG, + TITLE_STR_57_LTK, + TITLE_STR_58_2V2, + TITLE_STR_59_3V1, + TITLE_STR_60_2V1, + TITLE_STR_61_HERO, + TITLE_STR_62_VET4, + TITLE_STR_63_VET3, + TITLE_STR_64_VET2, + TITLE_STR_65_VET1, + TITLE_STR_66_HEALTH_NORMAL, + TITLE_STR_67_NOVICE1, + TITLE_STR_68_NOVICE2, + TITLE_STR_69_NOVICE3, + TITLE_STR_70_NOVICE4, + TITLE_STR_71_ROOKIE, + TITLE_STR_72_SOFFAOFF, + TITLE_STR_73_SONAOFF, + TITLE_STR_74_SOFFAON, + TITLE_STR_75_SONAON, + TITLE_STR_76_MPOPTIONS, + TITLE_STR_77_PLAYERS, + TITLE_STR_78_SCENARIO, + TITLE_STR_79_LEVEL, + TITLE_STR_80_GAMELENGTH, + TITLE_STR_81_WEAPONS, + TITLE_STR_82_CHARACTER, + TITLE_STR_83_HEALTH, + TITLE_STR_84_AIM, + TITLE_STR_85_SELECTCHARACTER, + TITLE_STR_86_SELECTHANDICAP, + TITLE_STR_87_SCENARIO2, + TITLE_STR_88_SELECTTEAMS, + TITLE_STR_89_RED, + TITLE_STR_90_BLUE, + TITLE_STR_91_COMPLETED, + TITLE_STR_92_FAILED, + TITLE_STR_93_PRIMARYOBJECTIVES, + TITLE_STR_94_BACKGROUND, + TITLE_STR_95_MBRIEFING, + TITLE_STR_96_QBRANCH, + TITLE_STR_97_MONEYPENNY, + TITLE_STR_98_REPORT, + TITLE_STR_99_MISSIONSTATUS, + TITLE_STR_100_KIA, + TITLE_STR_101_ABORTED, + TITLE_STR_102_COMPLETED, + TITLE_STR_103_FAILED, + TITLE_STR_104_STATS, + TITLE_STR_105_TIME, + TITLE_STR_106_ACCURACY, + TITLE_STR_107_WEAPONOFCHOICE, + TITLE_STR_108_SHOTTOTAL, + TITLE_STR_109_HEADHITS, + TITLE_STR_110_BODYHITS, + TITLE_STR_111_LIMBHITS, + TITLE_STR_112_OTHER, + TITLE_STR_113_KILLTOTAL, + TITLE_STR_114_CHEATOPTIONS2, + TITLE_STR_115_ON, + TITLE_STR_116_OFF, + TITLE_STR_117_CHEATSELECTMISSION, + TITLE_STR_118_NOCONT, + TITLE_STR_119_ATTACHCONT, + TITLE_STR_120_ARK, + TITLE_STR_121_DAM, + TITLE_STR_122_FAC, + TITLE_STR_123_RUN, + TITLE_STR_124_SEV, + TITLE_STR_125_SURF, + TITLE_STR_126_BUNK, + TITLE_STR_127_KIRG, + TITLE_STR_128_SILO4, + TITLE_STR_129_SILO, + TITLE_STR_130_MONTE, + TITLE_STR_131_FRIG, + TITLE_STR_132_STPETER, + TITLE_STR_133_STATPARK, + TITLE_STR_134_STAT, + TITLE_STR_135_MILARCH, + TITLE_STR_136_ARCH, + TITLE_STR_137_STREETS, + TITLE_STR_138_DEPOT, + TITLE_STR_139_TRAIN, + TITLE_STR_140_CUBA, + TITLE_STR_141_JUN, + TITLE_STR_142_CONCENTER, + TITLE_STR_143_CON, + TITLE_STR_144_WATERCAV, + TITLE_STR_145_CAV, + TITLE_STR_146_ANTENNA, + TITLE_STR_147_CRADLE, + TITLE_STR_148_TEOTIHUACA, + TITLE_STR_149_AZTECCOMPLEX, + TITLE_STR_150_AZTEC, + TITLE_STR_151_ELSAGHIRA, + TITLE_STR_152_EGYPTIANTEMPLE, + TITLE_STR_153_EGYPTIAN, + TITLE_STR_154_RANDOM, + TITLE_STR_155_RANDOM2, + TITLE_STR_156_TEMPLE, + TITLE_STR_157_TEMPLE2, + TITLE_STR_158_COMPLEX, + TITLE_STR_159_COMPLEX2, + TITLE_STR_160_LIBRARY, + TITLE_STR_161_LIBRARY2, + TITLE_STR_162_CAVES, + TITLE_STR_163_CAVES2, + TITLE_STR_164_FACMP, + TITLE_STR_165_FACMP22, + TITLE_STR_166_SEVERNAYABUNKER, + TITLE_STR_167_BUNKER, + TITLE_STR_168_MILITARYARCHIVES, + TITLE_STR_169_ARCHIVES, + TITLE_STR_170_WATERCAVERNS, + TITLE_STR_171_CAVERNS, + TITLE_STR_172_EGYPTIANTEMPLEMP, + TITLE_STR_173_EGYPTIANMP, + TITLE_STR_174_CITADEL, + TITLE_STR_175_CITADEL2, + TITLE_STR_176_DEST, + TITLE_STR_177_DEST2, + TITLE_STR_178_STAT, + TITLE_STR_179_STAT2, + TITLE_STR_180_CRAD, + TITLE_STR_181_CRADLE2, + TITLE_STR_182_AZT, + TITLE_STR_183_AZT2, + TITLE_STR_184_BOND, + TITLE_STR_185_MISHKIN, + TITLE_STR_186_BORIS, + TITLE_STR_187_OURUMOV, + TITLE_STR_188_TREVELYAN, + TITLE_STR_189_VALENTIN, + TITLE_STR_190_XENIA, + TITLE_STR_191_NATALYA, + TITLE_STR_192_BARONSAMEDI, + TITLE_STR_193_JAWS, + TITLE_STR_194_MAYDAY, + TITLE_STR_195_ODDJOB, + TITLE_STR_196_ROSIKA, + TITLE_STR_197_KARL, + TITLE_STR_198_MARTIN, + TITLE_STR_199_MARK, + TITLE_STR_200_DAVE, + TITLE_STR_201_DUNCAN, + TITLE_STR_202_B, + TITLE_STR_203_STEVEE, + TITLE_STR_204_GRANT, + TITLE_STR_205_GRAEME, + TITLE_STR_206_KEN, + TITLE_STR_207_ALAN, + TITLE_STR_208_PETE, + TITLE_STR_209_SHAUN, + TITLE_STR_210_DWAYNE, + TITLE_STR_211_DES, + TITLE_STR_212_CHRIS, + TITLE_STR_213_LEE, + TITLE_STR_214_NEIL, + TITLE_STR_215_JIM, + TITLE_STR_216_ROBIN, + TITLE_STR_217_STEVEH, + TITLE_STR_218_TERRORIST, + TITLE_STR_219_BIKER, + TITLE_STR_220_JOEL, + TITLE_STR_221_SCOTT, + TITLE_STR_222_JOE, + TITLE_STR_223_SALLY, + TITLE_STR_224_MARION, + TITLE_STR_225_MANDY, + TITLE_STR_226_VIVIEN, + TITLE_STR_227_LF, + TITLE_STR_228_THEACTORS, + TITLE_STR_229_STARRING, + TITLE_STR_230_ALSOFEATURING, + TITLE_STR_231_GUESTSTAR, + TITLE_STR_232_007, + TITLE_STR_233_JAMESBOND, + TITLE_STR_234_NATALYASIMONOVA, + TITLE_STR_235_006, + TITLE_STR_236_ALECTREVELYAN, + TITLE_STR_237_JANUSOPPERATIVE, + TITLE_STR_238_XENIAONPTOPP, + TITLE_STR_239_GENERAL, + TITLE_STR_240_ARKADYOURUMOV, + TITLE_STR_241_BORISGRISHENKO, + TITLE_STR_242_EXKGBAGENT, + TITLE_STR_243_VELENTINZUKOVSKY, + TITLE_STR_244_DEFENSEMINISTER, + TITLE_STR_245_DIMITRIMISHKIN, + TITLE_STR_246_MAYDAY, + TITLE_STR_247_JAWS, + TITLE_STR_248_ODDJOB, + TITLE_STR_249_BERONSAMEDI, + TITLE_STR_250_JUNGLECOMMANDO, + TITLE_STR_251_STPETERSBURGGUARD, + TITLE_STR_252_RUSSIANINFANTRY, + TITLE_STR_253_RUSSIANSOLDIER, + TITLE_STR_254_JANUSMARINE, + TITLE_STR_255_JANUSSPECIALFORCES, + TITLE_STR_256_RUSSIANCOMMANDANT, + TITLE_STR_257_NAVALOFFICER, + TITLE_STR_258_SIBERIANGUARD, + TITLE_STR_259_ARCTICCOMMANDO, + TITLE_STR_260_SIBERIANSPECIALFORCES, + TITLE_STR_261_MOOKRAKERELITE, + TITLE_STR_262_HELICOPTERPILOT, + TITLE_STR_263_SCIENTIST, + TITLE_STR_264_CIVILIAN, + TITLE_STR_265_1DOT, + TITLE_STR_266_2DOT, + TITLE_STR_267_3DOT, + TITLE_STR_268_4DOT, + TITLE_STR_269_BASEMENT, + TITLE_STR_270_BASEMENT2, + TITLE_STR_271_STACK, + TITLE_STR_272_STACK2, + TITLE_STR_273_BESTTIME, + TITLE_STR_274_TARGET, + TITLE_STR_275_NEWCHEATAVAILABLE, + TITLE_STR_276_CHEATMULTIPLAYER, + TITLE_STR_277_11HONEY, + TITLE_STR_278_12SOLITAIRE, + TITLE_STR_279_13KISSY, + TITLE_STR_280_14GOODNIGHT, + TITLE_STR_281_21PLENTY, + TITLE_STR_282_22GALORE, + TITLE_STR_283_23DOMINO, + TITLE_STR_284_24GOODHEAD, + TITLE_STR_285_SELECTCONTROLSTYLE, + TITLE_STR_286_CONTROLSTYLE, #ifdef BUGFIX_R0 TITLE_STR_287 #endif #ifdef BUGFIX_R1 - TITLE_STR_287, - TITLE_STR_288, - TITLE_STR_289, + TITLE_STR_287_RUSSIANSOLDIER, + TITLE_STR_288_RUSSIANINFANTRY, + TITLE_STR_289_SCIENTIST, TITLE_STR_290, TITLE_STR_291, TITLE_STR_292, diff --git a/build/test.c b/build/test.c deleted file mode 100644 index 6ae8311..0000000 --- a/build/test.c +++ /dev/null @@ -1,4751 +0,0 @@ -/* - COMPILE -/usr/bin/qemu-irix -silent -L tools/irix/root tools/irix/root/usr/bin/cc -Wab,-r4300_mul -non_shared -Olimit 2000 -G 0 -Xcpluscomm -woff 609,649,819,820,852,821,838 -I . -I include -I src -I src/game -I src/rarezip -mips2 -c build/test.c -o build/test.o -O2 - -PRE-COMPILE - -E > build/testpre.c - - DISASSEMBLE -gdis -S build/test.o > build/test.txt - -mips-linux-gnu-objdump --all-headers --disassemble --debugging --source --full-contents build/test.o > build/test1.mips - -single regex for diff - braces | non asm | addr | jal target | Other targets | Blank lines -((\{|\})\n)|(^.[^:]*$\n)|(^.*:.{11}\d?)|((?<=jal\t)([\d a b c d e f]{1,4} <.*\n))|([\d a b c d e f]{1,4} <.*)|(^$\n) - -format for notepad++ -(/\*.*\*\/\s*)|(\$(?=[^f])) - -*/ - -#if 1 - -# define TARGET_N64 -/* #include "../src/game/chrobjdata.c"* / -#include "../src/bondconstants.h" -#include "../src/bondtypes.h" */ -# define DEB2UG 1 -# include "../src/ASSERT.H" -# include "../src/bondgame.h" -# include -# include - -# if 0 - int aiAsTypedStructTest(char *ailist) -{ - - //Variable array val - { - volatile struct - { - char cmd; - char val[]; - } *ai = (ailist + 3); - //8bit loa - assert(*(char*)ai->val<=100); //# MATCH Assert Text - - //32 bit load (manual) - MATCH - testflags(ai->cmd, ai->val[0] << 24 | ai->val[1] << 16 | ai->val[2] << 8 | ai->val[3]); - - //!32bit load (Compiler) - NOT MATCH - testflags(ai->cmd, *(long *)ai->val); - - //16bit load (Compiler) - MATCH - testflags(ai->cmd, *(unsigned short *)ai->val); - - //16bit load (manual) - MATCH - testflags(ai->cmd, ai->val[0] << 8 | ai->val[1]); - } - //static char val - { - volatile struct - { - char cmd; - char val; - } *ai = (ailist + 3); - - assert(ai->val<=100); //MATCH - - //!32 bit load (manual) - NOT MATCH - testflags(ai->cmd, *(((char*)ai->val)+0) << 24 | *(((char*)ai->val)+1) << 16 | *(((char*)ai->val)+2) << 8 | *(((char*)ai->val)+3)); - - //!32bit load (Compiler) - NOT MATCH - testflags(ai->cmd, *(((unsigned long*)(char**)ai->val))); - - //!16bit load (Compiler) - NOT MATCH - testflags(ai->cmd, *(unsigned short *)(char**)ai->val); - - //!16bit load (manual) - NOT MATCH - //testflags(ai->cmd, ai->val[0] << 8 | ai->val[1]); - - } - //typed struct - { - volatile struct - { - char cmd; - short val; - int val2; - char val3; - } *ai = (ailist[3]); - assert(ai->val <= 100); //MATCH - - //32 bit load () - - testflags(ai->cmd, ai->val2); - - //16bit load () - - testflags(ai->cmd, ai->val); - - //8bit load () - - testflags(ai->cmd, ai->val3); - - } - { - volatile struct - { - char cmd; - char val; - char val2[2]; - char val4[1]; - char val3[4]; - } *ai6 = (ailist[3]); - - assert(ai6->val == 100); - assert(*(unsigned short *)&ai6->val3 == 100); - assert(*(short *)&ai6->val3 == 100); - assert(*(unsigned int *)&ai6->val3 == 100); - assert(*(int *)&ai6->val3 == 100); - assert(*(float *)&ai6->val3 == 100); - } - return 0; -} -# endif - -# define Deb4ugAIExecute - -# ifdef DebugEnvironment -# include -// CODE.bss:800825C0 -s32 gEnvironmentHasFog; -// CODE.bss:800825C4 -u32 ptr_nearfog_enviroment_values; -// CODE.bss:800825C8 -sfarfogdetails -{ - s32 buffer_far_pervasiveness; // 0 - // CODE.bss:800825CC - s32 far_fog; // 4 - // CODE.bss:800825D0 - s16 D_800825D0; // 8 - // CODE.bss:800825D4 - s32 D_800825D4; // c - // CODE.bss:800825D8 - s32 flt_CODE_bss_800825D8; // 10 - // CODE.bss:800825DC - s32 flt_CODE_bss_800825DC; // 14 -} -Curfarfogdetails; -// CODE.bss:800825E0 -s32 buffer_far_ambiant; -// CODE.bss:800825E4 -s32 bg_dif_light; -// CODE.bss:800825E8 -EnvironmentRecord *gEnvironmentFoundp; -// CODE.bss:800825EC -EnvironmentRecord *gEnvironmentMainp; -// CODE.bss:800825F0 -EnvironmentRecord *gEnvironmentAltp; -// CODE.bss:800825F4 -s32 D_800825F4; -// CODE.bss:800825F8 -// u32 dword_CODE_bss_800825F8; -// static EnvironmentRecord PreviousEnvironment; //tempCurrentEnvp -u32 TransitionEnvironmentID; // 0 22 during fac gas = Fac Previous ID -f32 TransitionEnvironmentBlendMult; // 4 4120 during fac gas blendmult / - // buffer_far_pervasiveness2 -f32 TransitionEnvironmentFarFog; // 8 ScaledFarFogDist2 (447A0000) -f32 DAT_80082604; // near -f32 DAT_80082608; // maxvis -f32 DAT_8008260c; // max obf -f32 DAT_80082610; // minvis -u32 DAT_80082614; // 3e7 intens - -s32 TransitionEnvironmentDiffFarFog; // 3de diff -s32 TransitionEnvironmentFarIntensity; // 3e8 far - /* Nope - * typedef struct Row - { - u8 val : 5; - } colour; */ -vu8 TransitionEnvironmentSkyRed; // r -vu8 TransitionEnvironmentSkyGreen; // g -vu8 TransitionEnvironmentSkyBlue; // b -u8 byte_CODE_bss_80082623; // clouds -u8 byte_CODE_bss_80082624; //{ -u8 byte_CODE_bss_80082625; // | -u8 byte_CODE_bss_80082626; // | cldrep -u8 byte_CODE_bss_80082627; //} -u8 byte_CODE_bss_80082628; //{ skyimg -u8 byte_CODE_bss_80082629; //} -u8 byte_CODE_bss_8008262a; //{ res -u8 byte_CODE_bss_8008262b; //} -u8 byte_CODE_bss_8008262c; -u8 byte_CODE_bss_8008262d; -u8 byte_CODE_bss_8008262e; -u8 byte_CODE_bss_8008262f; -u8 byte_CODE_bss_80082630; -u8 byte_CODE_bss_80082631; -u8 byte_CODE_bss_80082632; -u8 byte_CODE_bss_80082633; -u8 byte_CODE_bss_80082634; -u8 byte_CODE_bss_80082635; -u8 byte_CODE_bss_80082636; -u8 byte_CODE_bss_80082637; -u8 byte_CODE_bss_80082638; - -// data -// D:80044DC0 -s32 D_80044DC0 = 0; -// D:80044DC4 -f32 near_fog_value = 3.4028235e38; -// D:80044DC8 -f32 near_fog_times_intensity = 0.0; -// D:80044DCC -// Default Environment -CurrentEnvironmentRecord CurrentEnvironment = { - 0x384, // 0 dif_in_light - 0x3E8, // 4 far_ambiantlight - 0, // 8,9,a,b RGBC - 0, // ccloudrepeat - 0, // 10skyimageid - 0, // 14cloudred - 0, // 18cloudgreen - 0, // 1ccloudblue - 0, // 20iswater - 0, // 24waterrepeat - 0, // 28waterimageid - 0, // 2cwaterred - 0, // 30watergreen - 0, // 34 waterblue - 0, // 38 waterconcavity - 0, // 3c* extra? - 0 // 40* -}; - -EnvironmentRecord fog_tables[] = { - - {0x16, 15.0, 3500.0, 2000.0, 2500.0, 2000.0, 0.0, 0x3E7, 0x3E4, 0x3E8, 0, - 0, 8, 1, 5000.0, 0, 0, 170.0, 100.0, 40.0, 0, 0, - 0, 0, -1000.0, 0, 0, 0.0, 0.0, 0.0, 30.0}, - {0x10, 15.0, 3500.0, 2000.0, 2500.0, 2000.0, 0.0, 1, 2, 3, 0, - 0, 8, 12, 5000.0, 0, 0, 170.0, 100.0, 40.0, 0, 0, - 0, 0, -1000.0, 0, 0, 0.0, 0.0, 0.0, 30.0}, - {ENVIRONMENTDATA_END} - -}; - -CurrentEnvironmentRecord *get_ptr_currentdata(void) -{ - return &CurrentEnvironment; -} - -f32 get_near_fog_value(void) -{ - return near_fog_value; -} - -f32 square_near_fog_value(void) -{ - return near_fog_value * near_fog_value; -} -extern void set_page_height(); -extern void video_related_27(); -extern int bgGetLevelVisibilityScale(); - -void copy_table1_env_to_current(EnvironmentRecord *fog_tables_Entry) -{ - f32 sp34; - f32 sp30; - f32 sp20; - f32 sp1C; - f32 sp18; - f32 temp_f14; - f32 temp_f4; - f32 temp_f6; - f32 temp_f8; - f32 temp_ret; - - set_page_height(fog_tables_Entry->Visibility.blendmultiplier, - fog_tables_Entry->Visibility.farfog); // 30, 15000 - video_related_27(&sp30); - temp_ret = bgGetLevelVisibilityScale(); - temp_f6 = sp30 / temp_ret; - sp30 = temp_f6; - sp34 = (f32)(sp34 / temp_ret); - - // arg1 = agr0; - - bg_dif_light = - (f32)((f32)fog_tables_Entry->Fog.DifferenceFromFarIntensity / 1000.0f); - - temp_f14 = sp34 - temp_f6; - - buffer_far_ambiant = - (f32)((f32)fog_tables_Entry->Fog.FarIntensity / 1000.0f); - - near_fog_value = (f32)(temp_f6 + (temp_f14 * buffer_far_ambiant)); - - near_fog_times_intensity = (f32)(temp_f6 + (temp_f14 * bg_dif_light)); - - Curfarfogdetails.buffer_far_pervasiveness = - (f32)(fog_tables_Entry->Visibility.blendmultiplier / temp_ret); - - sp18 = (f32)(buffer_far_ambiant - bg_dif_light); - temp_f4 = sp18; - - Curfarfogdetails.far_fog = - (f32)(fog_tables_Entry->Visibility.farfog / temp_ret); - sp20 = (f32)(128.0f / temp_f4); - temp_f8 = - Curfarfogdetails.far_fog - Curfarfogdetails.buffer_far_pervasiveness; - sp18 = temp_f8; - sp1C = (f32)(((0.5f - bg_dif_light) * 256.0f) / temp_f4); - Curfarfogdetails.flt_CODE_bss_800825D8 = - (f32)((((-sp20 * Curfarfogdetails.far_fog) * - (Curfarfogdetails.buffer_far_pervasiveness + 1.0f)) / - temp_f8) / - 255.0f); - Curfarfogdetails.flt_CODE_bss_800825DC = - (f32)(((((Curfarfogdetails.far_fog + 1.0f) * sp20) / temp_f8) + sp1C) / - 255.0f); - - CurrentEnvironment.Fog.DifferenceFromFarIntensity = - (f32)fog_tables_Entry->Fog.DifferenceFromFarIntensity; - CurrentEnvironment.Fog.FarIntensity = fog_tables_Entry->Fog.FarIntensity; - CurrentEnvironment.Sky.red = fog_tables_Entry->Sky.red; - CurrentEnvironment.Sky.green = fog_tables_Entry->Sky.green; - CurrentEnvironment.Sky.blue = fog_tables_Entry->Sky.blue; - CurrentEnvironment.Sky.clouds = fog_tables_Entry->Sky.clouds; - CurrentEnvironment.Sky.cloudrepeat = fog_tables_Entry->Sky.cloudrepeat; - CurrentEnvironment.Sky.skyimageid = fog_tables_Entry->Sky.skyimageid; - CurrentEnvironment.Sky.cloudred = fog_tables_Entry->Sky.cloudred; - CurrentEnvironment.Sky.cloudgreen = fog_tables_Entry->Sky.cloudgreen; - CurrentEnvironment.Sky.cloudblue = fog_tables_Entry->Sky.cloudblue; - CurrentEnvironment.Sky.iswater = fog_tables_Entry->Sky.iswater; - CurrentEnvironment.Sky.waterrepeat = fog_tables_Entry->Sky.waterrepeat; - CurrentEnvironment.Sky.waterimageid = fog_tables_Entry->Sky.waterimageid; - CurrentEnvironment.Sky.waterred = fog_tables_Entry->Sky.waterred; - CurrentEnvironment.Sky.watergreen = fog_tables_Entry->Sky.watergreen; - CurrentEnvironment.Sky.waterblue = fog_tables_Entry->Sky.waterblue; - CurrentEnvironment.Sky.waterconcavity = - fog_tables_Entry->Sky.waterconcavity; - - // Simplify Above to: - // CurrentEnvironment.Fog = fog_tables_Entry->Fog; - // CurrentEnvironment.Sky = fog_tables_Entry->Sky; - if (fog_tables_Entry->Visibility.nearfog = 0) - { - ptr_nearfog_enviroment_values = 0; - } - else - { - ptr_nearfog_enviroment_values = - (s32)(fog_tables_Entry->Visibility.nearfog); // not a pointer - } - gEnvironmentHasFog = 1; - // return &CurrentEnvironment; -} -void load_enviroment(int StageID, int param_2) -{ - s32 NumPlayers; - u32 EnvironmentUID; - EnvironmentRecord *FogTablep; - EnvironmentFoglessRecord *FogTableFoglessp; - EnvironmentFoglessRecord *FogTableFoglessFoundp; - - NumPlayers = get_num_players(); - if (NumPlayers == 1) - { - NumPlayers = 0; - } - - ScaledFarFogIntensity = default_near_fog; - ScaledDifferenceFromFarFogIntensity = 0.00000000; - - if (isCutscene) - { - FogTablep = fog_tables; - EnvironmentUID = fog_tables[0].ID; - while (EnvironmentUID != ENVIRONMENTDATA_END) - { - if (StageID + ENVIRONMENTDATA_CINEMA == EnvironmentUID) - { - gEnvironmentFoundp = FogTablep; - gEnvironmentMainp = FogTablep; - gEnvironmentAltp = FogTablep + 1; - copy_table1_env_to_current(gEnvironmentFoundp); - return; - } - EnvironmentUID = FogTablep[1].ID; // Next ID - FogTablep++; - } - } - - EnvironmentUID = fog_tables[0].ID; - FogTablep = fog_tables; - while (EnvironmentUID != ENVIRONMENTDATA_END) - { - if (StageID + NumPlayers * 100 == EnvironmentUID) - { - gEnvironmentFoundp = FogTablep; - gEnvironmentMainp = FogTablep; - gEnvironmentAltp = FogTablep + 1; - copy_table1_env_to_current(gEnvironmentFoundp); - return; - } - EnvironmentUID = FogTablep[1].ID; - FogTablep++; - } - - // default MP Skies - if (NumPlayers > 1) - { - EnvironmentUID = fog_tables[0].ID; - while (EnvironmentUID != ENVIRONMENTDATA_END) - { - if (NumPlayers * 100 == EnvironmentUID) - { - gEnvironmentFoundp = FogTablep; - gEnvironmentMainp = FogTablep; - gEnvironmentAltp = FogTablep + 1; - copy_table1_env_to_current(gEnvironmentFoundp); - return; - } - EnvironmentUID = FogTablep[1].ID; - FogTablep++; - } - } - - // still no Environment, Assume Fogless - set_page_height(15.00000000, (f32)flt_80058D74); - gEnvironmentHasFog = 0; - FogTableFoglessp = fog_tables2; - EnvironmentUID = fog_tables2[0].ID; - while (EnvironmentUID != ENVIRONMENTDATA_END) - { - if (StageID == EnvironmentUID) - { - FogTableFoglessFoundp = FogTableFoglessp; - } - EnvironmentUID = FogTableFoglessp[1].ID; - FogTableFoglessp++; - } - - // still No Environment? - if (FogTableFoglessFoundp == NULL) - { - FogTableFoglessFoundp = fog_tables2; // Use first Fogless as default - } - copy_table2_env_to_current((int)FogTableFoglessFoundp); - gEnvironmentFoundp = NULL; // Why bother, its never used again - return; -} - -void switch_to_solosky2(f32 Opacity) -{ - /* - * called by 7f055f64 - Arg0 value table on activation - 0.000278 - 0.1000 - 0.105278 (1 frame = 0.000278) - 0.130278 - 0.130556 - ... - 0.998889 - 1 - 1 - loop forever? - */ - - // cast static variables to EnvData - EnvironmentRecord *TransitionEnvironmentp = - (EnvironmentRecord *)&TransitionEnvironmentID; - - // EnvironmentRecord *gEnvironmentAltp = 0; - - *TransitionEnvironmentp = *gEnvironmentMainp; // copy values from 1st sky - - // NextEnvironmentp = gEnvironmentAltp; //dont name or assign, use directly - - // now alter some parts for transitioning to 2nd sky - TransitionEnvironmentBlendMult = - (gEnvironmentMainp->Visibility.blendmultiplier + - (Opacity * (gEnvironmentAltp->Visibility.blendmultiplier - - gEnvironmentMainp->Visibility.blendmultiplier))); - - TransitionEnvironmentFarFog = - (gEnvironmentMainp->Visibility.farfog + - (Opacity * (gEnvironmentAltp->Visibility.farfog - - gEnvironmentMainp->Visibility.farfog))); - - TransitionEnvironmentDiffFarFog = - (gEnvironmentMainp->Fog.DifferenceFromFarIntensity + - (Opacity * ((f32)gEnvironmentAltp->Fog.DifferenceFromFarIntensity - - gEnvironmentMainp->Fog.DifferenceFromFarIntensity))); - /*Match down to here--*/ - /*has extra lui at,0x HI TransitionEnvironmentFarIntensity*/ - TransitionEnvironmentFarIntensity = - (gEnvironmentMainp->Fog.FarIntensity + - (Opacity * ((f32)gEnvironmentAltp->Fog.FarIntensity - - gEnvironmentMainp->Fog.FarIntensity))); - - { -# if 0 - volatile f32 aa, bb, cc; - volatile f32 a, b, c; - a = (Opacity * ((f32)gEnvironmentAltp->Sky.red - - gEnvironmentMainp->Sky.red)); - TransitionEnvironmentSkyRed = - (gEnvironmentMainp->Sky.red + (u8)a) & 0xf8; - b = (Opacity * ((f32)gEnvironmentAltp->Sky.green - - gEnvironmentMainp->Sky.green)); - TransitionEnvironmentSkyGreen = - (gEnvironmentMainp->Sky.green + (u8)b) & 0xf8; - c = (Opacity * ((f32)gEnvironmentAltp->Sky.blue - - gEnvironmentMainp->Sky.blue)); - TransitionEnvironmentSkyBlue = - (gEnvironmentMainp->Sky.blue + (u8)c) & 0xf8; -# endif - /*Closest to match but with andi order difference */ - TransitionEnvironmentSkyRed = - (u32)(gEnvironmentMainp->Sky.red + - (Opacity * ((f32)gEnvironmentAltp->Sky.red - - gEnvironmentMainp->Sky.red))) & - 248; - - TransitionEnvironmentSkyGreen = - (u32)(gEnvironmentMainp->Sky - .green + /*& f8 for Red happens round here*/ - (Opacity * ((f32)gEnvironmentAltp->Sky.green - - gEnvironmentMainp->Sky.green))) & - 248; - - TransitionEnvironmentSkyBlue = - (u32)(gEnvironmentMainp->Sky.blue + - /*& f8 for Green happens round here*/ - (Opacity * ((f32)gEnvironmentAltp->Sky.blue - - gEnvironmentMainp->Sky.blue))) & - 248; - - /*& f8 for Blue happens round here*/ - // Store Bytes happen here but - // cannot be repeated like below otherwise a1-a3 are produced - // TransitionEnvironmentSkyRed &= 248; - // TransitionEnvironmentSkyGreen &= 248; - // TransitionEnvironmentSkyBlue &= 248; - copy_table1_env_to_current(TransitionEnvironmentp); - } -} -# endif - -# ifdef DebugAIExecute - -# include "../src/bondaicommands.h" //make sure this is after constants -# include "../src/game/chrai.h" - -# if 0 - -/****************************************************************************** - * this is a brief description of func - * with a new line - * @param thing1 = number of theory - * @param thing2 = thing21 - * @returns nothing - *****************************************************************************/ -void cstyle(int theory, int theory2) {} - -/** - * this is a brief description of func - * with a new line - * @param thing1 = number of theory - * @param thing2 = thing21 - * @return nothing - */ -void cstyle2(int theory, int theory2) {} - -/// -/// this is a test -/// -/// number of therory -/// thing2 -/// nothing -void cstyle43(int theory, int theory2) {} -# endif - - -# if 0 -int assertTest(void *Entityp, s32 EntityType) -{ - // initialise to 0 - VehichleRecord *VehichleEntityp = NULL; // a2 - AircraftRecord *AircraftEntityp = NULL; // v1 - ChrRecord *ChrEntityp = NULL; // s7 - s32 regs1 = 1; - s32 regs2 = 2; - s32 regs3 = 3; - s32 regs4 = 4; - s32 regs5 = 5; - s32 regs6 = 6; - s32 regs7 = 7; - s32 regs8 = 8; - s32 regs9 = 9; - s32 regs10 = 10; - s32 regs11 = 11; - s32 regs0 = 0; // s2 save/load tofrom sp7a4 - - - if (EntityType == PROP_TYPE_CHR) //ra,116 f20 48sp f22 52sp - { - ChrEntityp = Entityp; - } - - if (EntityType == PROP_TYPE_OBJ) //not elseif to stop double li,at,1 - { - if (((ObjectRecord *)Entityp)->type == PROPDEF_VEHICHLE) - { - VehichleEntityp = Entityp; - } - else if (((ObjectRecord *)Entityp)->type == PROPDEF_AIRCRAFT) - { - AircraftEntityp = Entityp; - } - } - // Load ailist - if (ChrEntityp) - { - regs1 = ChrEntityp->accuracyrating; - regs2 = ChrEntityp->speedrating; - regs3 = ChrEntityp->sleep; - regs4 = ChrEntityp->headnum; - regs5 = ChrEntityp->invalidmove; - regs6 = ChrEntityp->numarghs; - regs7 = ChrEntityp->numclosearghs; - regs8 = ChrEntityp->chrnum; - regs0 = ChrEntityp->aioffset; // offset 0x108 264 - regs9 = ChrEntityp->chrwidth; - regs10 = ChrEntityp->fadealpha; - regs11 = ChrEntityp->field_184; - } - else if (VehichleEntityp) // truck - { - regs1 = ChrEntityp->accuracyrating; - regs2 = ChrEntityp->speedrating; - regs3 = ChrEntityp->sleep; - regs4 = ChrEntityp->headnum; - regs5 = ChrEntityp->invalidmove; - regs6 = ChrEntityp->numarghs; - regs7 = ChrEntityp->numclosearghs; - regs8 = ChrEntityp->chrnum; - - regs0 = VehichleEntityp->aioffset; // offset 0x84 132 - regs9 = ChrEntityp->chrwidth; - regs10 = ChrEntityp->fadealpha; - regs11 = ChrEntityp->field_184; - } - else if (AircraftEntityp) // heli - { - regs1 = ChrEntityp->accuracyrating; - regs2 = ChrEntityp->speedrating; - regs3 = ChrEntityp->sleep; - regs4 = ChrEntityp->headnum; - regs5 = ChrEntityp->invalidmove; - regs6 = ChrEntityp->numarghs; - regs7 = ChrEntityp->numclosearghs; - regs8 = ChrEntityp->chrnum; - - regs0 = AircraftEntityp->aioffset; // offset 0x84 132 - regs9 = ChrEntityp->chrwidth; - regs10 = ChrEntityp->fadealpha; - regs11 = ChrEntityp->field_184; - } - - { - for (;;) // loop forever (or until broken) - { - AIRecord *ai = ((AIRecord *)regs0 + regs6); - switch (ai->cmd) - { - case AI_GOTO_NEXT: - { - switch (((AIRecord *)regs3)->cmd) - { - case 0: - return; - case 1: - return; - } - regs0 = chraiGoT2oLabel(ChrEntityp, ai,regs0, regs1, regs2, regs3, regs4, regs5, regs6, regs7, regs8, regs9, regs10, regs11); - break; - } - case AI_GOTO_FIRST: - { - switch (((AIRecord *)regs3)->cmd) - { - case 0: - return; - case 1: - return; - } - regs0 = chraiGoT2oLabel(ChrEntityp, ai, regs0, regs1, regs2, regs3, regs4, regs5, regs6, regs7, regs8, regs9, regs10, regs11); - break; - } - } - } - } -} -# endif -# endif - - - -typedef struct bitdesc //0xc long -{ - u16 start; // <= bit offset to the data within one frame? - u8 num; // <= number of bits per value? - s16 offset; // <= an offset value for all stored data values - so need to add this to values obtained from the following transroty data -} bitdesc; - -typedef struct AnimationKeyframe //0xcc long -{ - s16 keyframeTranslationX; - s16 keyframeTranslationY; - s16 keyframeTranslationZ; - f32 keyframeYRotation; - vec3d partRotations[0x10]; -} AnimationKeyframe; - -typedef struct AnimationHeader //0x18 long -{ - AnimationKeyframe *motion; // <= joint rotation data stored on rom - u16 numframes; // <= number of frames of animation data - u8 rotbits; // <= number of bits per x, y, z rotation? - u8 flags; // <= for looping or forcing a gun to drop on death - bitdesc *bitsrel; // <= points to bitsdesc array at start - u16 bitssizerel; // <= number of bits in one frame of transroty data - u16 bitssize; // <= number of bits in one frame of joint rotation data - u8 * bitsmotionrel; // <= points to transroty data (following the bitsdesc array) -} AnimationHeader; -# define PTR_ANIM_ENTRY_idle 0x0000 -// this is a sample of Idle Pose (_animation_dataSegmentRomStart) -u32 ANIM_DATA_idle[] = - { - {PTR_ANIM_ENTRY_idle, 0x00a3, 0x0c, 0x00, 0x00000000, 0x0000, 0x0220, 0x00000018}, - {0x0000, 0x06, 0x0000}, //x - (0x0100, 0x06, 0x0700}, //y - (0x0412, 0x00, 0x0d06}. //z - (0x00ff, 0xff, 0x0013}, //rot - {0x0000, 0x00, 0x0019}, - {0x6864, 0xae, 0xf0b5}, - {0x9e14, 0xb0, 0x1516}, - {0x763a, 0xa0, 0x0552}, - {0x202a, 0x42, 0x0148}, - {0x422a, 0x17, 0xf501}, - {0x7e98, 0x1f, 0x520d}, - {0xea85, 0x7e, 0x4e58}, - {0x6748, 0x20, 0xb0a5}, - {0x8c2c, 0x60, 0xe310}, - {0x14d2, 0x02, 0xa038}, - {0x7446, 0x10, 0x70a2}, - {0x1134, 0x13, 0x84fb}, - {0x401f, 0x42, 0x0bd0}, - {0xb0f8, 0x8e, 0x7643}, - {0xc8b4, 0x40, 0x1683}, - {0xfae0, 0x7e, 0x6523}, - {0xcd63, 0xf9, 0xb84e}, - {0xfb8b, 0xdf, 0xb17d}, - {0xf81f, 0x7f, 0x84f7}, - {0xf89f, 0x7c, 0x07ff}, - {0x807f, 0xec, 0x1ffd}, - {0x03ff, 0xb0, 0x40f6}, - {0x081e, 0x82, 0x03d8}, - {0x3ffa, 0x07, 0xff80}, - {0xfff8, 0x1f, 0xff04}, - {0x07e0, 0x81, 0xf80f}, - {0xff01, 0xff, 0xf03f}, - {0xfd07, 0xff, 0xa0fd}, - {0xf41f, 0xfe, 0x83ff}, - {0xc07f, 0xf8, 0x0fff}, - {0x01ff, 0xe0, 0x5ffd}, - {0x07ef, 0xc0, 0xfffc}, - {0x1fff, 0x83, 0xfff0}, - {0xbffe, 0x0f, 0xff43}, - {0xfbe0, 0xff, 0xf81b}, - {0xff00, 0xff, 0xe010}, - {0x3c03, 0xff, 0x707f}, - {0xf00f, 0xdd, 0x81fb}, - {0xb01e, 0x77, 0xf79f}, - {0x5ee8, 0x03, 0xae7d}, - {0x79f7, 0xc0, 0x3ef7}, - {0xff5d, 0xb7, 0xe3af}, - {0x55ed, 0xb3, 0x3cf7}, - {0xe186, 0xdb, 0xae57}, - {0x9d99, 0xf3, 0xa515}, - {0x74a4, 0xda, 0xcd99}, - {0xe0cb, 0x3c, 0xb8fd}, - {0xc72f, 0x82, 0x03f1}, - {0x707e, 0x40, 0x0fcb}, - {0x41f9, 0x60, 0x3f2c}, - 0x04 -} -; - -//blob for animation data, variable length keyframes (_animation_tableSegmentRomStart) bitArry cannot be made into structs -u32 ANIM_ENTRY_idle[] = - { - {0xfa0f7f00, - 0x8034029f, - 0xfb06805c, - 0x03607a01, - 0xfc99a817, - 0x57c8d000}, - - { - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00003, - 0xe000000f - }, - 0xb8000f7f, - 0xfe8ff4fb, - 0xd01f0390, - 0xfa0f7f00, - 0x8033029f, - 0xfb06805c, - 0x03507a01, - 0xfc99a827, - 0x56c8c000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00003, - 0xf000000f, - 0xbb000f7f, - 0xfe8ff4fc, - 0x101d03b0, - 0xfa0f7f00, - 0x8033029f, - 0xfb06805c, - 0x03507a01, - 0xfc99a827, - 0x56c8c000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00003, - 0xe000000f, - 0xba000f80, - 0xfe8ff4fb, - 0xe01e03a0, - 0xfa0f7f00, - 0x8033029f, - 0xfb06805a, - 0x03407a01, - 0xfc99a827, - 0x56c8d000, - 0xd5d00000, - 0x0238000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00003, - 0xd000000f, - 0xb9000f80, - 0xfe8ff4fb, - 0xb01f0380, - 0xf9ff7f00, - 0x7033029f, - 0xfb069059, - 0x03407a01, - 0xfc99a817, - 0x57c8d000, - 0xd5d00000, - 0x0238000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00003, - 0xf000000f, - 0xba000f7f, - 0xfe8ff4fb, - 0xe01e0390, - 0xf9df7f00, - 0x703302af, - 0xfb06a059, - 0x03407a01, - 0xfc99a837, - 0x56c8c000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xb9000f7f, - 0xfe8ff4fc, - 0x101d03b0, - 0xf9cf7f00, - 0x7032029f, - 0xfb06a059, - 0x03407a01, - 0xfc99a837, - 0x55c8c000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x2000000f, - 0xb9000f7f, - 0xfe8ff4fc, - 0x201d03c0, - 0xf99f7e00, - 0x7033029f, - 0xfb06a05a, - 0x03407a01, - 0xfc99a847, - 0x55c8c000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x3000000f, - 0xb9000f7f, - 0xfe8ff4fc, - 0x501c03d0, - 0xf96f7e00, - 0x7034029f, - 0xfb06b05a, - 0x03407a01, - 0xfc99a847, - 0x55c8d000, - 0xd5d00000, - 0x0236000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x8000000f, - 0xbb000f7e, - 0xfe8ff4fc, - 0xa01a0400, - 0xf97f7e00, - 0x7034029f, - 0xfb06b05a, - 0x03407a01, - 0xfc99a857, - 0x55c8c000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x8000000f, - 0xbb000f7e, - 0xfe8ff4fc, - 0xa01a0410, - 0xf98f7e00, - 0x7034028f, - 0xfb06b05a, - 0x03507a01, - 0xfc99a877, - 0x54c8c000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x6000000f, - 0xbb000f7e, - 0xfe8ff4fc, - 0x801b0400, - 0xf99f7e00, - 0x7034028f, - 0xfb06b05b, - 0x03607a01, - 0xfc99a877, - 0x55c8c000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x7000000f, - 0xbb000f7e, - 0xfe8ff4fc, - 0x901a0400, - 0xf9af7e00, - 0x7034027f, - 0xfb06c05b, - 0x03607a01, - 0xfc99a887, - 0x55c8b000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x7000000f, - 0xbc000f7e, - 0xfe8ff4fc, - 0xa01a0400, - 0xf9bf7e00, - 0x7034026f, - 0xfb06c05b, - 0x03607a01, - 0xfc99a887, - 0x56c8b000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x6000000f, - 0xbd000f7e, - 0xfe8ff4fc, - 0x601b03e0, - 0xf9af7e00, - 0x7034026f, - 0xfb06c05b, - 0x03607a01, - 0xfc99a867, - 0x56c8c000, - 0xd5d00000, - 0x0238000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x7000000f, - 0xbf000f7e, - 0xfe8ff4fc, - 0x501b03d0, - 0xf9af7e00, - 0x7035027f, - 0xfb06b05b, - 0x03607a01, - 0xfc99a857, - 0x57c8c000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x8000000f, - 0xc0000f7e, - 0xfe8ff4fc, - 0x701a03e0, - 0xf9cf7e00, - 0x7035027f, - 0xfb06c05b, - 0x03707a01, - 0xfc99a847, - 0x58c8c000, - 0xd5d00000, - 0x023a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x8000000f, - 0xc1000f7e, - 0xfe8ff4fc, - 0x801a03e0, - 0xf9cf7e00, - 0x7035027f, - 0xfb06c05b, - 0x03707a01, - 0xfc99a847, - 0x58c8c000, - 0xd5d00000, - 0x023a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x8000000f, - 0xc1000f7e, - 0xfe8ff4fc, - 0x801a03e0, - 0xf9cf7e00, - 0x7035027f, - 0xfb06c05c, - 0x03707a01, - 0xfc99a857, - 0x57c8b000, - 0xd5d00000, - 0x023a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x6000000f, - 0xc0000f7e, - 0xfe8ff4fc, - 0x601b03d0, - 0xf9cf7e00, - 0x7034026f, - 0xfb06c05c, - 0x03807a01, - 0xfc99a877, - 0x55c8b000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x4000000f, - 0xbf000f7f, - 0xfe8ff4fc, - 0x301c03c0, - 0xf9bf7e00, - 0x7034027f, - 0xfb06b05c, - 0x03807a01, - 0xfc99a867, - 0x55c8c000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x5000000f, - 0xbf000f7f, - 0xfe8ff4fc, - 0x401b03d0, - 0xf9bf7e00, - 0x7035027f, - 0xfb06b05c, - 0x03807a01, - 0xfc99a857, - 0x55c8d000, - 0xd5d00000, - 0x0238000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe2, - 0x3bd00004, - 0x7000000f, - 0xc0000f7e, - 0xfe8ff4fc, - 0x401b03d0, - 0xf9ef7e00, - 0x7034028f, - 0xfb06a05b, - 0x03907a01, - 0xfc99a847, - 0x55c8c000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x5000000f, - 0xc0000f7f, - 0xfe8ff4fc, - 0x001d03a0, - 0xfa1f7e00, - 0x7033026f, - 0xfa06b05c, - 0x03a07a01, - 0xfc99a887, - 0x53c8b000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x4000000f, - 0xc0000f7f, - 0xfe8ff4fb, - 0xd01e0380, - 0xfa1f7e00, - 0x8033026f, - 0xfa06c05d, - 0x03c07a01, - 0xfc99a8b7, - 0x51c8a000, - 0xd5d00000, - 0x023a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x5000000f, - 0xc1000f7f, - 0xfe8ff4fb, - 0xf01e0390, - 0xfa2f7f00, - 0x8033025f, - 0xfa06c05d, - 0x03d07a01, - 0xfc99a8d7, - 0x50c89000, - 0xd5d00000, - 0x023b000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x5000000f, - 0xc0000f7f, - 0xfe8ff4fb, - 0xd01e0390, - 0xfa2f7f00, - 0x8033025f, - 0xfa06d05d, - 0x03c07a01, - 0xfc99a8e7, - 0x50c89000, - 0xd5d00000, - 0x023b000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x4000000f, - 0xbe000f7f, - 0xfe8ff4fb, - 0xb01f0370, - 0xfa3f7e00, - 0x8034026f, - 0xfa06d05d, - 0x03d07a01, - 0xfc99a8d7, - 0x50c8a000, - 0xd5d00000, - 0x023b000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x5000000f, - 0xbe000f7f, - 0xfe8ff4fb, - 0xe01e0390, - 0xfa4f7e00, - 0x8035027f, - 0xfa06d05d, - 0x03d07a01, - 0xfc99a8e7, - 0x50c8a000, - 0xd5d00000, - 0x023b000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x5000000f, - 0xbe000f7f, - 0xfe8ff4fc, - 0x101d03b0, - 0xfa8f7e00, - 0x8036026f, - 0xfa06e05d, - 0x03c07a01, - 0xfc99a907, - 0x4fc89000, - 0xd5d00000, - 0x023c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x4000000f, - 0xbc000f7f, - 0xfe8ff4fb, - 0xf01d03a0, - 0xfa8f7e00, - 0x8036025f, - 0xfa06f05d, - 0x03c07a01, - 0xfc99a907, - 0x4fc89000, - 0xd5d00000, - 0x023c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x4000000f, - 0xbc000f7f, - 0xfe8ff4fb, - 0xf01c03a0, - 0xfa7f7e00, - 0x8037025f, - 0xfa06f05d, - 0x03d07a01, - 0xfc99a907, - 0x50c89000, - 0xd5d00000, - 0x023d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x4000000f, - 0xbc000f7f, - 0xfe8ff4fb, - 0xf01c03a0, - 0xfa8f7f00, - 0x8036025f, - 0xfa06f05d, - 0x03d07a01, - 0xfc99a8f7, - 0x50c89000, - 0xd5d00000, - 0x023d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xba000f7f, - 0xfe8ff4fb, - 0xd01d0390, - 0xfa7f7f00, - 0x8037025f, - 0xfa06f05e, - 0x03d07a01, - 0xfc99a8e7, - 0x50c8a000, - 0xd5d00000, - 0x023a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xba000f7f, - 0xfe8ff4fb, - 0xc01d0390, - 0xfa6f7f00, - 0x8038025f, - 0xfb06f05f, - 0x03c07a01, - 0xfc99a8d7, - 0x4fc8c000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x2000000f, - 0xbb000f7f, - 0xfe8ff4fb, - 0xe01d03a0, - 0xfa6f7f00, - 0x8038025f, - 0xfb06f05f, - 0x03c07a01, - 0xfc99a8d7, - 0x4fc8c000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x2000000f, - 0xbb000f7f, - 0xfe8ff4fb, - 0xe01d03a0, - 0xfa6f7f00, - 0x8038027f, - 0xfb06e05d, - 0x03c07a01, - 0xfc99a897, - 0x51c8c000, - 0xd5d00000, - 0x0238000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xbb000f80, - 0xfe8ff3fb, - 0xc01d0390, - 0xfa6f7f00, - 0x8038028f, - 0xfb06e05c, - 0x03c07a01, - 0xfc99a877, - 0x52c8c000, - 0xd5d00000, - 0x0238000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xbb000f80, - 0xfe8ff3fb, - 0xc01d0380, - 0xfa6f7f00, - 0x8038027f, - 0xfb06e05d, - 0x03d07a01, - 0xfc99a887, - 0x51c8b000, - 0xd5d00000, - 0x0238000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x0000000f, - 0xbb000f80, - 0xfe8ff3fb, - 0xc01d0380, - 0xfa7f7f00, - 0x8037026f, - 0xfb06e060, - 0x03f07a01, - 0xfc99a8b7, - 0x4fc8b000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x0000000f, - 0xbb000f80, - 0xfe8ff3fb, - 0xb01e0380, - 0xfa7f7f00, - 0x8037026f, - 0xfb06e061, - 0x04107a01, - 0xfc99a8b7, - 0x4ec8b000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x0000000f, - 0xbc000f80, - 0xfe8ff3fb, - 0xb01e0380, - 0xfa7f7f00, - 0x8037026f, - 0xfb06e062, - 0x04107a01, - 0xfc99a8c7, - 0x4ec8b000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x0000000f, - 0xbc000f80, - 0xfe8ff3fb, - 0xb01e0380, - 0xfa6f7f00, - 0x8036026f, - 0xfb06e062, - 0x04107a01, - 0xfc99a8d7, - 0x4dc8a000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x0000000f, - 0xbc000f80, - 0xfe8ff3fb, - 0xb01e0380, - 0xfa6f7f00, - 0x8036026f, - 0xfb06e062, - 0x04107a01, - 0xfc99a8e7, - 0x4dc8a000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xbc000f80, - 0xfe8ff3fb, - 0xc01e0380, - 0xfa4f7f00, - 0x8037027f, - 0xfb06e062, - 0x04207a01, - 0xfc99a8e7, - 0x4dc8b000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x2000000f, - 0xbd000f7f, - 0xfe8ff4fb, - 0xd01d0390, - 0xfa4f7f00, - 0x8037027f, - 0xfb06e063, - 0x04307a01, - 0xfc99a8f7, - 0x4dc8a000, - 0xd5d00000, - 0x0238000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xbd000f7f, - 0xfe8ff4fb, - 0xe01d03a0, - 0xfa5f7f00, - 0x8037026f, - 0xfa06e063, - 0x04407a01, - 0xfc99a907, - 0x4dc8a000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x1000000f, - 0xbc000f7f, - 0xfe8ff4fb, - 0xd01d0390, - 0xfa5f7f00, - 0x8037026f, - 0xfa06f064, - 0x04507a01, - 0xfc99a907, - 0x4dc8a000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x1000000f, - 0xbc000f7f, - 0xfe8ff4fb, - 0xd01d0390, - 0xfa4f7f00, - 0x8038026f, - 0xfb071065, - 0x04607a01, - 0xfc99a917, - 0x4dc8a000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xbd000f7f, - 0xfe8ff4fb, - 0xe01d03a0, - 0xfa5f7f00, - 0x8038026f, - 0xfa071065, - 0x04707a01, - 0xfc99a927, - 0x4dc89000, - 0xd5d00000, - 0x023a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xbd000f7f, - 0xfe8ff4fb, - 0xd01d0390, - 0xfa5f7f00, - 0x8038026f, - 0xfa071065, - 0x04707a01, - 0xfc99a917, - 0x4ec8a000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xbd000f7f, - 0xfe8ff4fb, - 0xb01d0380, - 0xfa5f7f00, - 0x8038026f, - 0xfb072065, - 0x04707a01, - 0xfc99a907, - 0x4ec8a000, - 0xd5d00000, - 0x023a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xbe000f7f, - 0xfe8ff4fb, - 0xb01d0380, - 0xfa5f7f00, - 0x8038027f, - 0xfb072066, - 0x04807a01, - 0xfc99a8f7, - 0x4fc89000, - 0xd5d00000, - 0x023b000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x2000000f, - 0xbe000f7f, - 0xfe8ff4fb, - 0xd01d0390, - 0xfa5f7f00, - 0x8037027f, - 0xfa072066, - 0x04807a01, - 0xfc99a8f7, - 0x4fc89000, - 0xd5d00000, - 0x023b000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xbe000f7f, - 0xfe8ff4fb, - 0xd01c0390, - 0xfa5f7f00, - 0x8037027f, - 0xfa072066, - 0x04807a01, - 0xfc99a8f7, - 0x4fc89000, - 0xd5d00000, - 0x023b000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xbf000f7f, - 0xfe8ff4fb, - 0xd01c0390, - 0xfa4f7f00, - 0x8038027f, - 0xfb071066, - 0x04607a01, - 0xfc99a8c7, - 0x4fc8b000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xbf000f80, - 0xfe8ff4fb, - 0xb01d0390, - 0xfa4f7f00, - 0x8038027f, - 0xfb071066, - 0x04707a01, - 0xfc99a8c7, - 0x4fc8b000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xc0000f80, - 0xfe8ff3fb, - 0xb01d0380, - 0xfa5f7f00, - 0x8037027f, - 0xfb071066, - 0x04607a01, - 0xfc99a8c7, - 0x4fc8a000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xc1000f80, - 0xfe7ff3fb, - 0x901e0370, - 0xfa7f7f00, - 0x8036028f, - 0xfb071065, - 0x04607a01, - 0xfc99a8b7, - 0x50c8b000, - 0xd5d00000, - 0x0239000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x0000000f, - 0xc1000f80, - 0xfe7ff3fb, - 0x50200340, - 0xfa8f7f00, - 0x8035029f, - 0xfb070063, - 0x04507a01, - 0xfc99a887, - 0x52c8c000, - 0xd5d00000, - 0x0238000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe103fc, - 0x040e6fe2, - 0x3be00003, - 0xf000000f, - 0xc0000f80, - 0xfe7ff3fb, - 0x10220310, - 0xfa7f7f00, - 0x803602af, - 0xfb070063, - 0x04407a01, - 0xfc99a897, - 0x53c8c000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe103fc, - 0x040e6fe2, - 0x3bd00003, - 0xf000000f, - 0xc0000f80, - 0xfe7ff3fb, - 0x20210320, - 0xfa7f7f00, - 0x803602af, - 0xfb071063, - 0x04407a01, - 0xfc99a8d7, - 0x52c8c000, - 0xd5d00000, - 0x0236000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x0000000f, - 0xc1000f80, - 0xfe7ff3fb, - 0x60200350, - 0xfa6f7f00, - 0x803602bf, - 0xfb071063, - 0x04407a01, - 0xfc99a907, - 0x51c8d000, - 0xd5d00000, - 0x0234000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x0000000f, - 0xc0000f80, - 0xfe8ff3fb, - 0x701f0360, - 0xfa5f7f00, - 0x803702cf, - 0xfb072063, - 0x04407a01, - 0xfc99a927, - 0x51c8d000, - 0xd5d00000, - 0x0233000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe2, - 0x3bd00004, - 0x1000000f, - 0xc0000f80, - 0xfe8ff3fb, - 0xa01d0380, - 0xfa6f7f00, - 0x803702cf, - 0xfb072063, - 0x04407a01, - 0xfc99a937, - 0x52c8c000, - 0xd5d00000, - 0x0234000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc0000f7f, - 0xfe8ff4fb, - 0xc01c03a0, - 0xfa8f7f00, - 0x803702cf, - 0xfb073063, - 0x04507a01, - 0xfc99a957, - 0x53c8c000, - 0xd5d00000, - 0x0235000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x0000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0xa01c0390, - 0xfa8f7f00, - 0x803602bf, - 0xfb073064, - 0x04507a01, - 0xfc99a947, - 0x55c8c000, - 0xd5d00000, - 0x0235000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x0000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x701d0370, - 0xfa7f7f00, - 0x803702bf, - 0xfb074064, - 0x04507a01, - 0xfc99a957, - 0x56c8c000, - 0xd5d00000, - 0x0236000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x3000000f, - 0xbf000f7f, - 0xfe8ff4fb, - 0xa01b0390, - 0xfa8f7f00, - 0x803602af, - 0xfb075065, - 0x04607a01, - 0xfc99a967, - 0x56c8b000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x3000000f, - 0xbe000f7f, - 0xfe8ff4fb, - 0x901b0390, - 0xfaaf8000, - 0x8034027f, - 0xfb075064, - 0x04607a01, - 0xfc99a957, - 0x58c8c000, - 0xd5d00000, - 0x0236000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00003, - 0xe000000f, - 0xbd000f80, - 0xfe8ff3fb, - 0x001e0330, - 0xfa9f8000, - 0x8033025f, - 0xfb074064, - 0x04607a01, - 0xfc99a947, - 0x59c8d000, - 0xd5d00000, - 0x0235000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe103fc, - 0x040e6fe3, - 0x3be00003, - 0xd000000f, - 0xbf000f81, - 0xfe8ff3fa, - 0xe01f0310, - 0xfa7f8000, - 0x8034026f, - 0xfb074064, - 0x04707a01, - 0xfc99a957, - 0x59c8c000, - 0xd5d00000, - 0x0236000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00003, - 0xe000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x201d0350, - 0xfa6f8000, - 0x8034026f, - 0xfb074064, - 0x04807a01, - 0xfc99a977, - 0x58c8b000, - 0xd5d00000, - 0x0237000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00003, - 0xd000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x401b0360, - 0xfa5f8000, - 0x8034026f, - 0xfb074064, - 0x04907a01, - 0xfc99a987, - 0x58c8b000, - 0xd5d00000, - 0x0236000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00003, - 0xd000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x401b0360, - 0xfa3f7f00, - 0x8035026f, - 0xfc073065, - 0x04807a01, - 0xfc99a997, - 0x57c8c000, - 0xd5d00000, - 0x0234000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00003, - 0xf000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x70190380, - 0xfa4f7f00, - 0x8035026f, - 0xfc073065, - 0x04807a01, - 0xfc99a9b7, - 0x56c8c000, - 0xd5d00000, - 0x0234000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00003, - 0xf000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x70190380, - 0xfa6f8000, - 0x8034025f, - 0xfb073065, - 0x04707a01, - 0xfc99a9d7, - 0x55c8c000, - 0xd5d00000, - 0x0233000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00003, - 0xe000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x401a0350, - 0xfa5f8000, - 0x8034025f, - 0xfc074064, - 0x04707a01, - 0xfc99a9d7, - 0x55c8c000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00003, - 0xe000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x401a0360, - 0xfa5f8000, - 0x8034025f, - 0xfc074064, - 0x04707a01, - 0xfc99a9e7, - 0x55c8c000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00003, - 0xf000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x501a0360, - 0xfa4f8000, - 0x8034025f, - 0xfc078063, - 0x04707a01, - 0xfc99aa17, - 0x54c8a000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc0000f80, - 0xfe8ff3fb, - 0x60190370, - 0xfa4f8000, - 0x8034024f, - 0xfc078062, - 0x04707a01, - 0xfc99aa37, - 0x54c8a000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc0000f80, - 0xfe8ff3fb, - 0x60190370, - 0xfa5f8000, - 0x8035024f, - 0xfc079061, - 0x04707a01, - 0xfc99aa37, - 0x54c8b000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x1000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x50190370, - 0xfa5f8000, - 0x8036025f, - 0xfc07b061, - 0x04707a01, - 0xfc99aa47, - 0x54c8b000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x1000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x80180380, - 0xfa7f8000, - 0x8037025f, - 0xfc07c060, - 0x04707a01, - 0xfc99aa57, - 0x54c89000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00004, - 0x0000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x80170380, - 0xfa8f8000, - 0x8037026f, - 0xfb07c05e, - 0x04607a01, - 0xfc99aa47, - 0x54c89000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00003, - 0xe000000f, - 0xbd000f80, - 0xfe8ff3fb, - 0x50180360, - 0xfa7f8000, - 0x8038026f, - 0xfc07b05e, - 0x04707a01, - 0xfc99aa27, - 0x55c8a000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00003, - 0xf000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x60180370, - 0xfa4f8000, - 0x803a026f, - 0xfc07a05d, - 0x04707a01, - 0xfc99a9f7, - 0x56c8a000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00004, - 0x0000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x90160390, - 0xfa5f8000, - 0x803a026f, - 0xfc07b05d, - 0x04807a01, - 0xfc99aa07, - 0x55c8a000, - 0xd5d00000, - 0x0233000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00004, - 0x0000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x80160390, - 0xfa5f8000, - 0x803a026f, - 0xfc07a05d, - 0x04807a01, - 0xfc99aa17, - 0x52c89000, - 0xd5d00000, - 0x0233000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00003, - 0xf000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x60170380, - 0xfa4f8000, - 0x803b027f, - 0xfc07905d, - 0x04807a01, - 0xfc99aa17, - 0x50c8a000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00003, - 0xf000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x60170370, - 0xfa3f8000, - 0x803c028f, - 0xfc07805b, - 0x04807a01, - 0xfc99a9e7, - 0x51c8c000, - 0xd5d00000, - 0x022f000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00004, - 0x0000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x70160380, - 0xfa4f8000, - 0x803c029f, - 0xfc07805a, - 0x04807a01, - 0xfc99a9c7, - 0x51c8c000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00003, - 0xf000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x50170370, - 0xfa3f8000, - 0x803b029f, - 0xfb07905a, - 0x04a07a01, - 0xfc99a9f7, - 0x4fc8b000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00003, - 0xe000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x50170360, - 0xfa2f8000, - 0x803c028f, - 0xfb07905a, - 0x04a07a01, - 0xfc99aa17, - 0x4dc8b000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00003, - 0xf000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x70170380, - 0xfa3f8000, - 0x803d028f, - 0xfb07905a, - 0x04a07a01, - 0xfc99aa07, - 0x4dc8b000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00004, - 0x0000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x80170380, - 0xfa3f8000, - 0x803d028f, - 0xfb07905a, - 0x04a07a01, - 0xfc99aa07, - 0x4dc8b000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00004, - 0x0000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x80170390, - 0xfa4f8000, - 0x803c028f, - 0xfb07905a, - 0x04a07a01, - 0xfc99aa17, - 0x4dc8c000, - 0xd5d00000, - 0x022f000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3be00003, - 0xf000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x50180360, - 0xfa4f8000, - 0x803c028f, - 0xfb07905a, - 0x04a07a01, - 0xfc99aa17, - 0x4dc8c000, - 0xd5d00000, - 0x022f000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3be00003, - 0xf000000f, - 0xbe000f80, - 0xfe8ff3fb, - 0x40180350, - 0xfa4f8000, - 0x803c028f, - 0xfb07905a, - 0x04a07a01, - 0xfc99aa17, - 0x4dc8c000, - 0xd5d00000, - 0x022f000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3be00004, - 0x0000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x50180360, - 0xfa4f8000, - 0x803d028f, - 0xfb079059, - 0x04a07a01, - 0xfc99aa17, - 0x4dc8b000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3bd00004, - 0x1000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x60180370, - 0xfa4f8000, - 0x803d028f, - 0xfb079059, - 0x04b07a01, - 0xfc99aa17, - 0x4dc8b000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3be00004, - 0x0000000f, - 0xbf000f80, - 0xfe8ff3fb, - 0x40180360, - 0xfa4f8000, - 0x803c028f, - 0xfb07905a, - 0x04b07a01, - 0xfc99aa27, - 0x4dc8b000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3be00004, - 0x1000000f, - 0xc0000f80, - 0xfe8ff3fb, - 0x30190350, - 0xfa3f8000, - 0x803d028f, - 0xfb07905a, - 0x04b07a01, - 0xfc99aa27, - 0x4dc8b000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe4, - 0x3be00004, - 0x2000000f, - 0xc0000f80, - 0xfe8ff3fb, - 0x40180360, - 0xfa4f8000, - 0x803c028f, - 0xfb07905a, - 0x04b07a01, - 0xfc99aa27, - 0x4dc8b000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe4, - 0x3be00004, - 0x2000000f, - 0xc1000f80, - 0xfe8ff3fb, - 0x30180360, - 0xfa4f8100, - 0x803c028f, - 0xfb07905a, - 0x04b07a01, - 0xfc99aa27, - 0x4ec8b000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc1000f80, - 0xfe8ff3fb, - 0x20190350, - 0xfa3f8000, - 0x803c028f, - 0xfb07805a, - 0x04c07a01, - 0xfc99aa17, - 0x4ec8b000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc2000f80, - 0xfe8ff3fb, - 0x20190350, - 0xfa0f8000, - 0x803d028f, - 0xfb07805a, - 0x04d07a01, - 0xfc99aa07, - 0x4fc8b000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x3000000f, - 0xc4000f80, - 0xfe8ff3fb, - 0x60170380, - 0xf9ff8000, - 0x803e029f, - 0xfb07705a, - 0x04c07a01, - 0xfc99aa17, - 0x4ec8b000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x4000000f, - 0xc4000f7f, - 0xfe8ff3fb, - 0x80160390, - 0xfa0f8000, - 0x803d029f, - 0xfb07605a, - 0x04c07a01, - 0xfc99aa17, - 0x4ec8a000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x3000000f, - 0xc4000f7f, - 0xfe8ff3fb, - 0x70170380, - 0xf9ff8000, - 0x803c028f, - 0xfc07705b, - 0x04d07a01, - 0xfc99aa17, - 0x4fc8b000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x3000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x70170370, - 0xfa0f8000, - 0x803b028f, - 0xfc07705b, - 0x04e07a01, - 0xfc99aa17, - 0x50c8c000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x3000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x70170370, - 0xfa1f8000, - 0x8037025f, - 0xfb07a05d, - 0x05007a01, - 0xfc99aa87, - 0x4fc89000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc4000f80, - 0xfe8ff3fb, - 0x50180360, - 0xfa1f8000, - 0x8034024f, - 0xfb07c05e, - 0x05107a01, - 0xfc99aac7, - 0x4ec88000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc4000f80, - 0xfe8ff3fb, - 0x40190360, - 0xfa0f8000, - 0x8034023f, - 0xfb07d05f, - 0x05007a01, - 0xfc99aad7, - 0x4ec89000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc3000f80, - 0xfe8ff3fb, - 0x40190360, - 0xfa0f8000, - 0x8034023f, - 0xfb07d05f, - 0x05007a01, - 0xfc99aad7, - 0x4fc89000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x2000000f, - 0xc3000f80, - 0xfe8ff3fb, - 0x40190360, - 0xf9ff8000, - 0x8034022f, - 0xfb07d05f, - 0x04f07a01, - 0xfc99aa97, - 0x53c8b000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x70170370, - 0xfa0f8000, - 0x8034022f, - 0xfb07e05f, - 0x04f07a01, - 0xfc99aab7, - 0x53c8a000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x70170370, - 0xfa0f8000, - 0x8033022f, - 0xfb07e060, - 0x04f07a01, - 0xfc99aac7, - 0x52c89000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc4000f80, - 0xfe8ff3fb, - 0x70100370, - 0xfa0f8000, - 0x8032021f, - 0xfb07f060, - 0x04f07a01, - 0xfc99aad7, - 0x52c88000, - 0xd5d00000, - 0x0232000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc4000f80, - 0xfe8ff3fb, - 0x50120360, - 0xf9ff8000, - 0x803101ff, - 0xfb080060, - 0x04e07a01, - 0xfc99aad7, - 0x53c89000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc6000f80, - 0xfe8ff3fb, - 0x400c0360, - 0xfa0f8100, - 0x802f01ef, - 0xfc080060, - 0x04d07a01, - 0xfc99aac7, - 0x54c89000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc6000f80, - 0xfe8ff3fb, - 0x200a0340, - 0xfa1f8100, - 0x802e01df, - 0xfb081061, - 0x04d07a01, - 0xfc99aac7, - 0x54c88000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc5000f80, - 0xfe8ff3fa, - 0xe00b0320, - 0xfa0f8100, - 0x802e01df, - 0xfc081062, - 0x04e07a01, - 0xfc99aac7, - 0x54c89000, - 0xd5d00000, - 0x0231000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x2000000f, - 0xc6000f80, - 0xfe8ff3fa, - 0xe00a0320, - 0xfa1f8100, - 0x802e01cf, - 0xfc082063, - 0x04e07a01, - 0xfc99aad7, - 0x54c88000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc7000f80, - 0xfe8ff3fa, - 0xf00a0330, - 0xfa1f8100, - 0x802e01cf, - 0xfc083064, - 0x04f07a01, - 0xfc99aae7, - 0x53c88000, - 0xd5d00000, - 0x0230000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc6000f80, - 0xfe8ff3fa, - 0xf00a0330, - 0xfa0f8100, - 0x802d01cf, - 0xfc085064, - 0x05007a01, - 0xfc99aad7, - 0x54c88000, - 0xd5d00000, - 0x022f000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc6000f80, - 0xfe8ff3fa, - 0xf0080330, - 0xfa0f8100, - 0x802e01df, - 0xfc086062, - 0x05007a01, - 0xfc99aac7, - 0x54c88000, - 0xd5d00000, - 0x022f000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc6000f80, - 0xfe8ff3fb, - 0x000c0330, - 0xfa0f8100, - 0x802d01df, - 0xfc087060, - 0x04f07a01, - 0xfc99aad7, - 0x54c88000, - 0xd5d00000, - 0x022f000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x000d0330, - 0xfa0f8100, - 0x802d01df, - 0xfc089060, - 0x05007a01, - 0xfc99aae7, - 0x53c88000, - 0xd5d00000, - 0x022e000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x000c0330, - 0xfa0f8100, - 0x802c01cf, - 0xfc08d060, - 0x05307a01, - 0xfc99ab07, - 0x51c88000, - 0xd5d00000, - 0x022e000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x100d0340, - 0xfa0f8100, - 0x802c01cf, - 0xfc08d060, - 0x05307a01, - 0xfc99ab17, - 0x51c88000, - 0xd5d00000, - 0x022e000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x100c0350, - 0xfa1f8100, - 0x802c01cf, - 0xfc08e060, - 0x05307a01, - 0xfc99ab27, - 0x50c88000, - 0xd5d00000, - 0x022d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x1000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x100c0350, - 0xfa1f8100, - 0x802c01cf, - 0xfc08e060, - 0x05207a01, - 0xfc99ab37, - 0x50c88000, - 0xd5d00000, - 0x022d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x100e0350, - 0xfa0f8100, - 0x802d01cf, - 0xfc08f060, - 0x05207a01, - 0xfc99ab37, - 0x4fc88000, - 0xd5d00000, - 0x022c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x100b0340, - 0xfa0f8100, - 0x802d01df, - 0xfc090060, - 0x05207a01, - 0xfc99ab37, - 0x4fc88000, - 0xd5d00000, - 0x022c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x200d0350, - 0xfa0f8100, - 0x802d01cf, - 0xfc091060, - 0x05207a01, - 0xfc99ab47, - 0x4ec88000, - 0xd5d00000, - 0x022c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x200c0350, - 0xfa1f8100, - 0x802d01cf, - 0xfc093060, - 0x05207a01, - 0xfc99ab57, - 0x4ec87000, - 0xd5d00000, - 0x022d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x100d0340, - 0xfa1f8100, - 0x802e01cf, - 0xfc09405f, - 0x05207a01, - 0xfc99ab57, - 0x4ec87000, - 0xd5d00000, - 0x022d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc5000f80, - 0xfe8ff3fb, - 0x100e0340, - 0xfa0f8100, - 0x802e01cf, - 0xfc09505f, - 0x05307a01, - 0xfc99ab57, - 0x4ec87000, - 0xd5d00000, - 0x022e000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc6000f80, - 0xfe8ff3fb, - 0x200d0350, - 0xfa1f8100, - 0x802e01cf, - 0xfc09505f, - 0x05307a01, - 0xfc99ab57, - 0x4ec87000, - 0xd5d00000, - 0x022e000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc6000f80, - 0xfe8ff3fb, - 0x100a0350, - 0xfa1f8100, - 0x802f01cf, - 0xfc095060, - 0x05307a01, - 0xfc99ab47, - 0x4ec87000, - 0xd5d00000, - 0x022d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3be00004, - 0x2000000f, - 0xc7000f80, - 0xfe8ff3fb, - 0x000d0340, - 0xfa0f8100, - 0x802f01df, - 0xfc095060, - 0x05407a01, - 0xfc99ab27, - 0x4ec88000, - 0xd5d00000, - 0x022c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x4000000f, - 0xc9000f80, - 0xfe8ff3fb, - 0x10090340, - 0xfa1f8100, - 0x802f01ef, - 0xfc095060, - 0x05407a01, - 0xfc99ab17, - 0x4ec87000, - 0xd5d00000, - 0x022d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x3000000f, - 0xc9000f80, - 0xfe8ff3fb, - 0x00090330, - 0xfa1f8100, - 0x802f01ff, - 0xfc09305f, - 0x05407a01, - 0xfc99aaf7, - 0x4fc88000, - 0xd5d00000, - 0x022c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc8000f80, - 0xfe8ff3fa, - 0xd00c0320, - 0xfa1f8100, - 0x802f020f, - 0xfc09305f, - 0x05307a01, - 0xfc99aab7, - 0x50c8b000, - 0xd5d00000, - 0x022a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc8000f81, - 0xfe8ff3fa, - 0xc0080310, - 0xfa1f8100, - 0x8030021f, - 0xfc09305f, - 0x05307a01, - 0xfc99aaa7, - 0x50c8b000, - 0xd5d00000, - 0x022a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc8000f80, - 0xfe8ff3fa, - 0xe0090330, - 0xfa1f8100, - 0x8030021f, - 0xfc09205f, - 0x05307a01, - 0xfc99aab7, - 0x50c8a000, - 0xd5d00000, - 0x022a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc8000f80, - 0xfe8ff3fb, - 0x00080330, - 0xfa2f8100, - 0x8030021f, - 0xfc09105f, - 0x05307a01, - 0xfc99aab7, - 0x50c8a000, - 0xd5d00000, - 0x022a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc7000f80, - 0xfe8ff3fa, - 0xe00b0320, - 0xfa3f8100, - 0x8030021f, - 0xfc09105f, - 0x05307a01, - 0xfc99aab7, - 0x50c8b000, - 0xd5d00000, - 0x0229000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc7000f81, - 0xfe8ff3fa, - 0xd00a0320, - 0xfa3f8100, - 0x8030021f, - 0xfc09105f, - 0x05207a01, - 0xfc99aab7, - 0x50c8b000, - 0xd5d00000, - 0x0229000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc7000f81, - 0xfe8ff3fa, - 0xd00c0320, - 0xfa3f8100, - 0x8030022f, - 0xfc09105f, - 0x05207a01, - 0xfc99aab7, - 0x50c8b000, - 0xd5d00000, - 0x0229000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc7000f81, - 0xfe8ff3fa, - 0xd00c0320, - 0xfa3f8100, - 0x8031022f, - 0xfc09105f, - 0x05207a01, - 0xfc99aab7, - 0x4fc8a000, - 0xd5d00000, - 0x022a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x1000000f, - 0xc7000f80, - 0xfe8ff3fa, - 0xe00b0320, - 0xfa3f8100, - 0x8031022f, - 0xfc09205f, - 0x05207a01, - 0xfc99aab7, - 0x4fc8a000, - 0xd5d00000, - 0x022a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x1000000f, - 0xc7000f81, - 0xfe8ff3fa, - 0xf00c0320, - 0xfa3f8100, - 0x8030021f, - 0xfc09205f, - 0x05307a01, - 0xfc99aac7, - 0x4fc8a000, - 0xd5d00000, - 0x022a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x0000000f, - 0xc7000f81, - 0xfe8ff3fa, - 0xe00b0320, - 0xfa3f8100, - 0x8030021f, - 0xfc09205f, - 0x05307a01, - 0xfc99aad7, - 0x4ec8a000, - 0xd5d00000, - 0x022a000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x1000000f, - 0xc8000f80, - 0xfe8ff3fa, - 0xd00a0320, - 0xfa2f8100, - 0x8030020f, - 0xfc092060, - 0x05307a01, - 0xfc99aad7, - 0x4fc8a000, - 0xd5d00000, - 0x022b000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3bd00004, - 0x3000000f, - 0xca000f80, - 0xfe7ff3fa, - 0xe0060320, - 0xfa1f8100, - 0x802f01ff, - 0xfc092060, - 0x05307a01, - 0xfc99aad7, - 0x4fc8a000, - 0xd5d00000, - 0x022b000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x3000000f, - 0xca000f80, - 0xfe7ff3fa, - 0xc0070310, - 0xfa1f8100, - 0x803001ff, - 0xfc09105f, - 0x05407a01, - 0xfc99aac7, - 0x4fc8a000, - 0xd5d00000, - 0x022c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x3000000f, - 0xc9000f80, - 0xfe7ff3fa, - 0xa0070300, - 0xfa1f8100, - 0x803001ff, - 0xfc09105f, - 0x05407a01, - 0xfc99aab7, - 0x50c8a000, - 0xd5d00000, - 0x022c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3be00004, - 0x3000000f, - 0xca000f80, - 0xfe7ff3fa, - 0xb0060310, - 0xfa1f8100, - 0x8030020f, - 0xfc09105f, - 0x05407a01, - 0xfc99aac7, - 0x50c89000, - 0xd5d00000, - 0x022d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x3000000f, - 0xca000f80, - 0xfe7ff3fa, - 0xc0070320, - 0xfa1f8100, - 0x8030020f, - 0xfc092060, - 0x05407a01, - 0xfc99aac7, - 0x4fc89000, - 0xd5d00000, - 0x022d000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe203fc, - 0x040e6fe3, - 0x3be00004, - 0x2000000f, - 0xc9000f80, - 0xfe8ff3fa, - 0xc0060320, - 0xf9ff8100, - 0x8032021f, - 0xfc091060, - 0x05507a01, - 0xfc99aac7, - 0x4fc8a000, - 0xd5d00000, - 0x022c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe3, - 0x3bd00004, - 0x2000000f, - 0xc7000f80, - 0xfe8ff3fb, - 0x00070340, - 0xfa8f7e00, - 0x8036025f, - 0xfa092060, - 0x05507a01, - 0xfc99aac7, - 0x4fc89000, - 0xd5d00000, - 0x022c000a, - 0x86f68fb5, - 0xf57fcb12, - 0x6fe303fc, - 0x040e6fe4, - 0x3bd00004, - 0x2000000f, - 0xc6000f80, - 0xfe8ff3fb, - 0x50070380}; - -void ReadAnimationSet(Animation *animations, int numberAnimations, unsigned long animationTable, int numParts) -{ - //&_animation_dataSegmentRomStart; - //&_animation_tableSegmentRomStart; //0x124AC0; - - animations.clear(); - - for (int animationNumber = 0; animationNumber < numberAnimations; animationNumber++) - { - int animationOffset = &animationTable + (animationNumber * 4); - AnimationHeader animation; - AnimationHeader animationHeaderTemp; - - animation.numframes = numParts; - animation.motion.clear(); - - animationHeaderTemp.motion = &_animation_tableSegmentRomStart + *(&_animation_dataSegmentRomStart + animationOffset + 0); //0x124AC0 AKA &ANIM_DATA_empty[] + ANIM_ENTRY_Idle.motion - animationHeaderTemp.numframes = &_animation_dataSegmentRomStart + animationOffset + 4; - animationHeaderTemp.rotbits = &_animation_dataSegmentRomStart + animationOffset + 6; - animationHeaderTemp.flags = &_animation_dataSegmentRomStart + animationOffset + 7; - animationHeaderTemp.bitsrel = &_animation_dataSegmentRomStart + *(&_animation_dataSegmentRomStart + animationOffset + 8); - animationHeaderTemp.bitssizerel = &_animation_dataSegmentRomStart + animationOffset + 0xC; - animationHeaderTemp.bitssize = &_animation_dataSegmentRomStart + animationOffset + 0xE; - animationHeaderTemp.bitsmotionrel = &_animation_dataSegmentRomStart + *(&_animation_dataSegmentRomStart + animationOffset + 0x10); - - for (int r = 0; r < 4; r++) - { - animation.bitsrel[r].start = ([animationHeaderTemp.bitsrel + (0x6 * r)]); - animation.bitsrel[r].num = [animationHeaderTemp.bitsrel + (0x6 * r) + 2]; - animation.bitsrel[r].offset = ([animationHeaderTemp.bitsrel + (0x6 * r + 4)]); - } - - animation.flags = animationHeaderTemp.flags; - animation.rotbits = animationHeaderTemp.rotbits; - animation.bitssize = animationHeaderTemp.bitssize; - animation.bitssizerel = animationHeaderTemp.bitssizerel; - - animation.motion.clear(); - - for (int keyframeIndex = 0; keyframeIndex < animationHeaderTemp.numframes; keyframeIndex++) //eg idle is 0 to 163, bitssizerel = 0, bitsise = 544, robits = 12, start = 0, num = 6 - { - AnimationKeyframe keyframe; - unsigned long transRotYROMOffset = animationHeaderTemp.bitsmotionrel; //eg idle = 0x18 - - unsigned short valueRead = GetBitsFromIndex(keyframeIndex, [transRotYROMOffset], animationHeaderTemp.bitssizerel, animation.animationBitsDesc[0].start, animation.animationBitsDesc[0].num); - keyframe.keyframeTranslationX = SignExtend(animation.animationBitsDesc[0].num, valueRead) + (signed short)animation.animationBitsDesc[0].offset; - - valueRead = GetBitsFromIndex(keyframeIndex, [transRotYROMOffset], animationHeaderTemp.bitssizerel, animation.animationBitsDesc[1].start, animation.animationBitsDesc[1].num); - keyframe.keyframeTranslationY = SignExtend(animation.animationBitsDesc[1].num, valueRead) + (signed short)animation.animationBitsDesc[1].offset; - - valueRead = GetBitsFromIndex(keyframeIndex, [transRotYROMOffset], animationHeaderTemp.bitssizerel, animation.animationBitsDesc[2].start, animation.animationBitsDesc[2].num); - keyframe.keyframeTranslationZ = SignExtend(animation.animationBitsDesc[2].num, valueRead) + (signed short)animation.animationBitsDesc[2].offset; - - valueRead = GetBitsFromIndex(keyframeIndex, [transRotYROMOffset], animationHeaderTemp.bitssizerel, animation.animationBitsDesc[3].start, animation.animationBitsDesc[3].num); - unsigned short valueRot = SignExtend(animation.animationBitsDesc[3].num, valueRead) + (unsigned short)animation.animationBitsDesc[3].offset; - keyframe.keyframeYRotation = D3DXToDegree((valueRot * TWOPI) / 65536.0f); - - unsigned long motion = animationHeaderTemp.motion + (animationHeaderTemp.bitssize >> 3) * keyframeIndex; - - for (int x = 0; x < numParts; x++) - { - unsigned long xrotMapOffset1 = GetBitsFromIndex(x * 3, [motion], animationHeaderTemp.rotbits, 0, animationHeaderTemp.rotbits) << 4; - float xcoordRot = (xrotMapOffset1 * TWOPI) / 65536.0f; - keyframe.partRotations[x].x = D3DXToDegree(xcoordRot); - - unsigned long yrotMapOffset1 = GetBitsFromIndex(x * 3, [motion], animationHeaderTemp.rotbits, animationHeaderTemp.rotbits, animationHeaderTemp.rotbits) << 4; - float ycoordRot = (yrotMapOffset1 * TWOPI) / 65536.0f; - keyframe.partRotations[x].y = D3DXToDegree(ycoordRot); - - unsigned long zrotMapOffset1 = GetBitsFromIndex(x * 3, [motion], animationHeaderTemp.rotbits, animationHeaderTemp.rotbits * 2, animationHeaderTemp.rotbits) << 4; - float zcoordRot = (zrotMapOffset1 * TWOPI) / 65536.0f; - keyframe.partRotations[x].z = D3DXToDegree(zcoordRot); - } - - animation.motion.push_back(keyframe); - } - - animations.push_back(animation); - } -} -# endif -#endif - -#if 1 - -# include "../include/CPPLib.h" -# include "../src/bondaicommands.h" //make sure this is after constants -# include "../src/bondconstants.h" -# include "../src/game/chrai.h" -# define IFNOT(COND) EVAL2(PUSH_ARGS(INC(GNUM), IF_##COND)) \ - _AI_IF -# define _AI_IF(a) a _AI_IF_ELSE -# define _AI_IF_ELSE(a) a -# define _SWAPSTATEMENTS(A, B) B A -# define ELSEIIF(COND) IF_##COND -# define GNUM 0 - DO( //D O(GAILIST LOOP1) - - IFNOT(GUARD_HAS_STOPPED_MOVING(INCGNUM)) - ( - /*ELSE*/ CONTINUE(GAILIST_LOOP1) - ) - ( - LABEL(GAILIST_STOPPED_MOVING) - IF_GUARD_SEES_BOND(INC(GNUM)) - /*ELSE*/ IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS(GAILIST_DONE) - /*ELSE*/ IF_GUARD_HEARD_BOND_WITHIN_LAST_10_SECS(GAILIST_DONE) - /*ELSEIF*/ RANDOM_GENERATE_GREATER_THAN(1, GAILIST_NEXT) // 1/255 chance of playing idle animation - /*ELSE*/ - SETRETURNAILIST(GAILIST_ID_DETECT_BOND_SPAWN_CLONE_ON_HEARD_GUNFIRE) - JUMP(CHR_SELF, GAILIST_ID_IDLE_RAND_ANIM_SUBROUTINE) // play idle animation and return to list - /*ENDIF*/ - ) - LABEL(GAILIST_NEXT) - ) -#endif - -/* The circumference of a circle with diameter 1, PI.*/ -#define M_PI_F 3.1415927f -/* The circumference of a circle with diameter 1, PI.*/ -#define M_MINUS_PI_F -3.1415927f - -/* The circumference of a circle with radius 1, PI*2.*/ -#define M_TAU 6.28318530717958647692 -/* The circumference of a circle with radius 1, PI*2.*/ -#define M_TAU_F 6.2831855f -// Converts radians to degrees. -#define DEG2BYTE(DEG) (char)(256.0f / 360.0f * (DEG)) -#define RAD2BYTE(RAD) (char)(256.0f / M_TAU_F * (RAD)) -#define DegToRad(DEG) (float)((DEG)*M_TAU / 360.0) -#define RadToDeg(RAD) (float)((RAD) / M_TAU_F * 360.0f) -#define ByteToRadian(Byte) ((Byte * M_TAU_F) * (1.0f / 256.0f)) - -float M_45_DEG_IN_RAD = 0.7853982f; -float M45 = DegToRad(45); -float M_90_DEG_IN_RAD = 1.5707964f; -float M90 = DegToRad(90); -float M_100_DEG_IN_RAD = 1.7453293f; -float M100 = DegToRad(100); -float M_110_DEG_IN_RAD = 1.9198622f; -float M110 = DegToRad(110); -float M_135_DEG_IN_RAD = 2.3561945f; -float M135 = DegToRad(135); -float M_225_DEG_IN_RAD = 3.926991f; -float M225 = DegToRad(225.00001); -float M_250_DEG_IN_RAD = 4.363323f; -float M250 = DegToRad(250); -float M_260_DEG_IN_RAD = 4.537856f; -float M260 = DegToRad(260); -float M_270_DEG_IN_RAD = 4.712389f; -float M270 = DegToRad(270); -float M_315_DEG_IN_RAD = 5.4977875f; -float M315 = DegToRad(315.00001); - -#define TARGET_N64 -#include -#include -#include -u16 * g_DebugOutputVideoBuffer1 = NULL; -u16 * g_DebugOutputVideoBuffer2 = NULL; - -void crashSetBuffers(u16 *buffer1, u16 *buffer2) -{ - g_DebugOutputVideoBuffer1 = (void*)K0_TO_K1(buffer1); - g_DebugOutputVideoBuffer2 = (void*)K0_TO_K1(buffer2); -} -void crashSetBuffers2(u16 *buffer1, u16 *buffer2) -{ - g_DebugOutputVideoBuffer1 = OS_PHYSICAL_TO_K1(buffer1); - g_DebugOutputVideoBuffer2 = OS_PHYSICAL_TO_K1(buffer2); -} - - -extern stagesetup *_fileNameLoadToBank(); -f32 g_g_DoorScale = 1.0f; -char *setup_text_pointers[] = { - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "UsetupsevbunkerZ", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "UsetupsiloZ", - "UsetupsevbunkerZ", - "UsetupstatueZ", - "UsetupcontrolZ", - "UsetuparchZ", - "UsetuptraZ", - "UsetupdestZ", - "UsetupsevbZ", - "UsetupaztZ", - "UsetuppeteZ", - "UsetupdepoZ", - "UsetuprefZ", - "UsetupcrypZ", - "UsetupdamZ", - "UsetuparkZ", - "UsetuprunZ", - "UsetupsevxZ", - "UsetupjunZ", - "UsetupdishZ", - "UsetupcaveZ", - "UsetupcatZ", - "UsetupcradZ", - "UsetupshoZ", - "UsetupsevxbZ", - "UsetupeldZ", - "UsetupimpZ", - "UsetupashZ", - "UsetuplueZ", - "UsetupameZ", - "UsetupritZ", - "UsetupoatZ", - "UsetupearZ", - "UsetupleeZ", - "UsetuplipZ", - "UsetuplenZ", - "UsetupwaxZ", - "UsetuppamZ", - NULL, - NULL}; -char *only_read_by_stageload[64]; -struct ObjectRecord *setupCommandGetObject(s32 stageID, s32 index); -const char *tokenFind(s32 index, const char *token); - -void proplvreset2(s32 stageID) -{ - stagesetup *resource; - stagesetup *phi_a3; - stagesetup *phi_a3_2; - stagesetup *phi_a3_3; - AIListRecord *ailists; - AIListRecord *itementries_1_4; - AIListRecord *temp_v0_9; - AIRecord *bnoobj_4; - AIRecord *phi_v1_3; - BoundPadRecord *boundpads; - ChrRecord *bnoobj_13; - ChrRecord *chr; - ItemModelFileRecord *itementries_1; - ItemModelFileRecord *nextitementry; - ModelNode *waypoints_10; - - PadRecord *pad; - - PathRecord *bnochr_4; - PathRecord *patrolpath; - PathRecord *patrolpaths; - PropRecord *pad_5; - ObjectRecord *prop; - PropRecord *prop_2; - PropRecord *vtextptr1; - StandTile *temp_a0_8; - Model *modal; - WeaponObjRecord *temp_s0_8; - WeaponObjRecord *vtextptr3; - WeaponObjRecord *vtextptr4; - char *vtextptr; - char **ptronly_read_by_stageload; - char *ptrsp174; - char *sp174; - char *textptr; - f32 *temp_a0_6; - f32 *waypoints_9; - f32 ptrsp174_4; - f32 ptrsp174_6; - f32 roompos; - f32 roompos_2; - f32 sp10C; - f32 sp110; - f32 sp114; - f32 sp118; - f32 sp11C; - f32 sp120; - f32 sp150; - f32 sp15C; - f32 spE8; - f32 temp_v0_19; - s16 bnoobj_5; - s16 phi_v1_10; - s16 phi_v1_4; - s16 temp_v0_18; - s32 *itementries_1_5; - s32 *temp_a0_3; - s32 *temp_t9; - s32 bnochr; - s32 bnoobj; - s32 bnoobj_2; - s32 bnoobj_3; - s32 bnoprop; - s32 i; - s32 itementries_1_8; - s32 itementries_1_9; - s32 pad_3; - s32 pad_4; - s32 phi_a1; - s32 phi_s1; - s32 phi_s3; - s32 phi_s3_2; - s32 phi_s3_3; - s32 phi_s3_4; - s32 phi_s4; - s32 phi_s4_2; - s32 phi_s4_3; - s32 phi_v1; - s32 phi_v1_2; - s32 ptrsp174_2; - s32 ptrsp174_3; - s32 ptrsp174_5; - s32 sp74; - s32 sp80; - s32 temp_s0_10; - s32 temp_s0_11; - s32 temp_s0_4; - s32 temp_s0_7; - s32 temp_s0_9; - s32 temp_s3; - s32 temp_s3_10; - s32 temp_s3_11; - s32 temp_s3_12; - s32 temp_s3_13; - s32 temp_s3_14; - s32 temp_s3_15; - s32 temp_s3_16; - s32 temp_s3_17; - s32 temp_s3_18; - s32 temp_s3_19; - s32 temp_s3_20; - s32 temp_s3_2; - s32 temp_s3_3; - s32 temp_s3_4; - s32 temp_s3_5; - s32 temp_s3_6; - s32 temp_s3_7; - s32 temp_s3_8; - s32 temp_s3_9; - s32 temp_s4; - s32 temp_s4_2; - s32 temp_v0_15; - s32 temp_v0_16; - ObjectRecord *vtextptr0; - s32 vtextptr2; - s32 vtextptr5; - s32 vtextptr6; - s32 waypoints_3; - s32 waypoints_4; - - s8 *itementries_1_6; - s8 *itementries_1_7; - - s8 *temp_v0_11; - s8 *temp_v0_13; - s8 *waypoints_5; - s8 *waypoints_6; - s8 sp175; - u16 temp_a0_7; - u8 *temp_t2; - u8 propdefType; - - u8 temp_s0_5; - void **bnoobj_7; - - void **waypoints_7; - void *bnoobj_10; - char *boundpadnames; - char *padnames; - - void *path; - void *temp_a0_5; - void *temp_s0_6; - void *temp_t0; - waygroup *itementries_1_3; - waygroup *phi_a0; - waygroup *temp_a0; - waygroup *temp_v0_8; - waygroup *waygroups; - waygroup temp_v0_7; - waypoint *itementries_1_2; - waypoint *pathwaypoint; - waypoint *temp_a0_2; - waypoint *temp_v0_6; - waypoint *waypoints; - - bnochr = tokenFind(1, "-nochr") == 0; - bnoprop = bnochr; - if (bnochr) - { - bnoprop = tokenFind(1, "-noprop") == 0; - } - - bnoobj = tokenFind(1, "-noobj") == 0; - - if (bnoobj) - { - bnoprop = tokenFind(1, "-noprop") == 0; - } - - g_g_DoorScale = 1.0f; - - // for each itme - itementries_1 = PitemZ_entries; - do - { - nextitementry = itementries_1 + sizeof(itementries_1); - itementries_1->header = NULL; - itementries_1 = nextitementry; - } while (nextitementry < (PitemZ_entries + 0xFF0)); - - textptr = setup_text_pointers[stageID]; - - // ptrsp174 = &sp174; - // ptronly_read_by_stageload = &only_read_by_stageload; - if ((stageID < 0x3B) && textptr) - { - // struct copy - // ptrsp174 = ptronly_read_by_stageload; - - sp175 = 0; - sp174 = *vtextptr; - phi_s3 = 0; - phi_s3_3 = 0; - phi_s4_3 = 0; - if (getPlayerCount() >= 2) - { - strcat(ptrsp174, "mp_"); - } - strcat(ptrsp174, *textptr + 1); - resource = _fileNameLoadToBank(ptrsp174, 1, 0x100, 4); - g_ptrStageSetupFile = resource; - langLoadToBank(langGetLangBankIndexFromStagenum(stageID)); - g_CurrentSetup.pathwaypoints = resource->pathwaypoints; - g_CurrentSetup.waypointgroups = resource->waypointgroups; - g_CurrentSetup.intro = resource->intro; - g_CurrentSetup.propDefs = resource->propDefs; - g_CurrentSetup.patrolpaths = resource->patrolpaths; - g_CurrentSetup.ailists = resource->ailists; - g_CurrentSetup.pads = resource->pads; - g_CurrentSetup.boundpads = resource->boundpads; - padnames = resource->padnames; - phi_a3 = &g_CurrentSetup; - phi_a3_3 = &g_CurrentSetup; - if (padnames != 0) - { - g_CurrentSetup.padnames = resource->padnames; - } - else - { - g_CurrentSetup.padnames = NULL; - } - boundpadnames = resource->boundpadnames; - if (boundpadnames != 0) - { - g_CurrentSetup.boundpadnames = resource->boundpadnames; - } - else - { - g_CurrentSetup.boundpadnames = NULL; - } - waypoints = g_CurrentSetup.pathwaypoints; - if (waypoints != 0) - { - itementries_1_2 = waypoints; - phi_v1 = 0; - if (waypoints->padID >= 0) - { - do - { - bnoobj_2 = phi_v1 + 0x10; - // itementries_1_2->neighbours += resource; - temp_v0_6 = g_CurrentSetup.pathwaypoints + bnoobj_2; - itementries_1_2 = temp_v0_6; - phi_v1 = bnoobj_2; - } while (temp_v0_6->padID >= 0); - } - } - waygroups = g_CurrentSetup.waypointgroups; - if (waygroups != 0) - { - itementries_1_3 = waygroups; - phi_v1_2 = 0; - if (waygroups->neighbours != 0) - { - phi_a0 = waygroups->neighbours; - do - { - // itementries_1_3->neighbours = phi_a0 + resource; - temp_v0_7 = g_CurrentSetup.waypointgroups[phi_v1_2]; - bnoobj_3 = phi_v1_2++; - // temp_v0_7->waypoints = temp_v0_7->waypoints; - // temp_v0_8 = g_CurrentSetup.waypointgroups[bnoobj_3]; - temp_a0 = temp_v0_8->neighbours; - phi_a0 = temp_a0; - itementries_1_3 = temp_v0_8; - phi_v1_2 = bnoobj_3; - } while (temp_a0 != 0); - } - } - ailists = g_CurrentSetup.ailists; - if (ailists != 0) - { - itementries_1_4 = ailists; - phi_a1 = 0; - if (ailists->ailist != 0) - { - phi_v1_3 = ailists->ailist; - do - { - // itementries_1_4->ailist = phi_v1_3 + resource; - waypoints_3 = phi_a1 + 8; - temp_v0_9 = g_CurrentSetup.ailists + waypoints_3; - bnoobj_4 = temp_v0_9->ailist; - phi_v1_3 = bnoobj_4; - itementries_1_4 = temp_v0_9; - phi_a1 = waypoints_3; - } while (bnoobj_4 != 0); - } - } - patrolpaths = g_CurrentSetup.patrolpaths; - if (patrolpaths != 0) - { - patrolpath = patrolpaths; - i = 0; - if (patrolpaths->waypoints != 0) - { - pathwaypoint = patrolpaths->waypoints; - do - { - // patrolpath->pathwaypoints = pathwaypoint + resource; - // path = phi_a3->patrolpaths [i]; - // temp_a0_3 = path->unk0; - itementries_1_5 = temp_a0_3; - phi_v1_4 = 0; - phi_a3_2 = phi_a3; - phi_v1_10 = 0; - if (*temp_a0_3 >= 0) - { - do - { - bnoobj_5 = phi_v1_10 + 1; - itementries_1_5 += 4; - phi_v1_4 = bnoobj_5; - phi_v1_10 = bnoobj_5; - } while (0); // itementries_1_5->unk4 >= 0); - phi_a3_2 = &g_CurrentSetup; - } - // path->unk6 = phi_v1_4; - - bnochr_4 = phi_a3_2->patrolpaths + waypoints_4; - // temp_a0_2 = bnochr_4->pathwaypoints; - pathwaypoint = temp_a0_2; - patrolpath = bnochr_4; - phi_a3 = phi_a3_2; - i++; - phi_a3_3 = phi_a3_2; - } while (temp_a0_2 != 0); - } - } - if (phi_a3_3->pads != 0) - { - pad = g_CurrentSetup.pads; - // temp_v0_11 = pad->plink; - itementries_1_6 = temp_v0_11; - pad = pad; - roompos = get_room_data_float2(); - if (temp_v0_11 != 0) - { - do - { - // waypoints_5 = resource + itementries_1_6; - // pad->plink = waypoints_5; - pad->pos.f[0] *= roompos; - pad->pos.f[1] *= roompos; - pad->pos.f[2] *= roompos; - sp15C = roompos; - init_pathtable_something(pad, waypoints_5, pad + 0x28); - // pad = pad->unk50; - itementries_1_6 = pad; - pad += 0x2C; - } while (pad != 0); - } - //sprintf("pad number %d has no stan! (%s)\n",(char *)num); - //sprintf("pad number %d changed stan from %s to %s\n",(char *)num); - } - if (g_CurrentSetup.boundpads != 0) - { - boundpads = g_CurrentSetup.boundpads; - // temp_v0_13 = boundpads->plink; - itementries_1_7 = temp_v0_13; - boundpads = &boundpads; - roompos_2 = get_room_data_float2(); - if (temp_v0_13 != 0) - { - do - { - // waypoints_6 = resource + itementries_1_7; - // boundpads->plink = waypoints_6; - boundpads->pos.x *= roompos_2; - boundpads->pos.y *= roompos_2; - boundpads->pos.z *= roompos_2; - boundpads->bbox.xmin *= roompos_2; - boundpads->bbox.xmax *= roompos_2; - boundpads->bbox.ymin *= roompos_2; - boundpads->bbox.ymax *= roompos_2; - boundpads->bbox.zmin *= roompos_2; - boundpads->bbox.zmax *= roompos_2; - sp150 = roompos_2; - init_pathtable_something(boundpads, waypoints_6, boundpads + 0x28); - // boundpads = boundpads->unk68; - itementries_1_7 = boundpads; - boundpads++; - } while (boundpads != 0); - } - } - waypoints_7 = g_CurrentSetup.padnames; - if (waypoints_7 != 0) - { - padnames = waypoints_7; - i = 0; - if (*waypoints_7 != 0) - { - padnames = *waypoints_7; - do - { - // *padnames = padnames + resource; - - padnames = g_CurrentSetup.padnames[i]; - padnames = *padnames; - padnames = padnames; - padnames = padnames; - i++; - } while (padnames != 0); - } - } - boundpadnames = g_CurrentSetup.boundpadnames; - if (boundpadnames != 0) - { - temp_t0 = *boundpadnames; - boundpadnames = temp_t0; - boundpadnames = boundpadnames; - i = 0; - if (temp_t0 != 0) - { - do - { - // *boundpadnames = boundpadnames + resource; - - bnoobj_7 = g_CurrentSetup.boundpadnames[i]; - temp_a0_5 = *bnoobj_7; - boundpadnames = temp_a0_5; - boundpadnames = bnoobj_7; - i++; - } while (temp_a0_5 != 0); - } - //sprintf("vol number %d has no stan! (%s)\n",(char *)num); - //sprintf("vol number %d changed stan from %s to %s\n",(char *)num); - } - if (bnoprop != 0) - { - alloc_init_GUARDdata_entries(load_proptype(PROPDEF_GUARD, boundpadnames)); - temp_s4 = load_proptype(PROPDEF_GUARD); - phi_s3 = load_proptype(PROPDEF_COLLECTABLE); - phi_s3 += load_proptype(PROPDEF_KEY); - phi_s3 += load_proptype(PROPDEF_HAT); - phi_s4_3 = temp_s4; - } - else - { - alloc_init_GUARDdata_entries(0, boundpadnames); - } - phi_s3_2 = phi_s3; - phi_s4 = phi_s4_3; - if (bnoprop != 0) - { - // load std props for all stages - phi_s4 += load_proptype(PROPDEF_DOOR); - phi_s4 += load_proptype(PROPDEF_CCTV); - phi_s4 += load_proptype(PROPDEF_AUTOGUN); - phi_s4 += load_proptype(PROPDEF_RACK); - phi_s4 += load_proptype(PROPDEF_MONITOR); - phi_s4 += load_proptype(PROPDEF_MULTI_MONITOR); - phi_s4 += load_proptype(PROPDEF_ARMOUR); - phi_s4 += load_proptype(PROPDEF_PROP); - phi_s4 += load_proptype(PROPDEF_GLASS); - phi_s4 += load_proptype(PROPDEF_TINTED_GLASS); - phi_s4 += load_proptype(PROPDEF_SAFE); - phi_s4 += load_proptype(PROPDEF_UNK41); - phi_s4 += load_proptype(PROPDEF_GAS_RELEASING); - phi_s4 += load_proptype(PROPDEF_ALARM); - phi_s4 += load_proptype(PROPDEF_MAGAZINE); - phi_s4 += load_proptype(PROPDEF_AMMO); - phi_s4 += load_proptype(PROPDEF_TINTED_GLASS); - phi_s4 += load_proptype(PROPDEF_TANK); - phi_s3_2 = phi_s4; - phi_s4 += load_proptype(PROPDEF_AIRCRAFT); - } - sub_GAME_7F005540(phi_s3_2); // without planbe - sub_GAME_7F005624(phi_s4); - i = 0; - if (getPlayerCount() > 0) - { - do - { - set_cur_player(i); - alloc_additional_item_slots(load_proptype(0xE)); - i++; - } while (i < getPlayerCount()); - } - if (g_CurrentSetup.propDefs != 0) - { - temp_s4_2 = 1 << (lvlGetSelectedDifficulty() + 4); - phi_s4_2 = temp_s4_2; - if (getPlayerCount() >= 2) - { - phi_s4_2 = temp_s4_2 | (1 << (getPlayerCount() + 0x14)); - } - prop = g_CurrentSetup.propDefs; - propdefType = prop->type; - - if (propdefType != PROPDEF_END) - - { - do - { - switch (propdefType) - { - // switch 1 - case PROPDEF_GUARD_ATTRIBUTE: // switch 1 - { - temp_s0_5 = prop->; - ChrRecord *chr = chrFindByLiteralId(((GuardRecord *)prop)->chrnum); - if ((chr != 0) && (chr->prop != 0) && (chr->model != 0)) - { - chr->grenadeprob = temp_s0_5; - } - #ifdef DEBUG - else - { - osSyncPrintf("grenade prob: no chr number %d for obj number %d! ", (char *)lVar7); - } - #endif - break; - } - case PROPDEF_GUARD: // switch 1 - if (bnoprop != 0) - { - expand_09_characters(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_DOOR: // switch 1 - if ((bnoprop != 0) && (prop->flags2 & phi_s4_2) == 0) - { - setupDoor(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_DOOR_SCALE: // switch 1 - g_g_DoorScale = ((GlobalDoorScaleRecord *)prop)->Scale / 65536.0f; - break; - case PROPDEF_COLLECTABLE: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - weaponAssignToHome(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_KEY: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - setupKey(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_HAT: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - setupHat(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_CCTV: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - setupCctv(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_AUTOGUN: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - setupAutogun(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_RACK: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - setupHangingMonitors(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_MONITOR: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - setupSingleMonitor(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_MULTI_MONITOR: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - setupMultiMonitor(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_ARMOUR: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - ((BodyArmourRecord*)prop)->Strength /= 65536.0f; - // prop->unk84 = prop->Strength; - domakedefaultobj(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_TINTED_GLASS: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - if ((prop->flags * 8) < 0) - { - temp_v0_18 = prop->pad; - if (temp_v0_18 >= 0x2710) - { - BoundPadRecord *temp_s0_6 = &g_CurrentSetup.boundpads[temp_v0_18 - 0x2710]; - TintedGlassRecord *prop = prop; - sub_GAME_7F001BD4(temp_s0_6, &sp118); - temp_a0_6 = &sp118; - waypoints_9 = &sp10C; - sp10C = (temp_s0_6->up.x * 10.0f) + sp118; - sp110 = (temp_s0_6->up.y * 10.0f) + sp11C; - sp114 = (temp_s0_6->up.z * 10.0f) + sp120; - sp118 -= 10.0f * temp_s0_6->up.x; - sp11C -= 10.0f * temp_s0_6->up.y; - sp120 -= 10.0f * temp_s0_6->up.z; - prop->unk8c = sub_GAME_7F0B9E04(temp_a0_6, waypoints_9); - prop->unk90 = (prop->unk90 / 65536.0f); - } - } - domakedefaultobj(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_PROP: // switch 1 - case PROPDEF_ALARM: // switch 1 - case PROPDEF_MAGAZINE: // switch 1 - case PROPDEF_GAS_RELEASING: // switch 1 - case PROPDEF_UNK41: // switch 1 - case PROPDEF_GLASS: // switch 1 - case PROPDEF_SAFE: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - domakedefaultobj(stageID, prop, phi_s3_3); - } - break; - case PROPDEF_AMMO: // switch 1 - pad_4 = 1; - if (getPlayerCount() >= 2) - { - // bnoobj_10 = getPtrMPWeaponSetData() + (lastmpweaponnum * 0x18); - // temp_s0_7 = bnoobj_10->unk10; - //(prop + (bnoobj_10->unkC * 4))->unk7E = temp_s0_7; - pad_4 = temp_s0_7; - } - if ((pad_4 > 0) && (bnoprop != 0)) - { - pad_5 = prop; - phi_s1 = 0; - if ((prop->flags2 & phi_s4_2) == 0) - { - do - { - // if (pad_5->unk82 > 0) - { - // temp_a0_7 = pad_5->unk80; - if (temp_a0_7 != 0xFFFF) - { - modelLoad(temp_a0_7); - } - } - ptrsp174_2 = phi_s1 + 4; - pad_5 += 4; - phi_s1 = ptrsp174_2; - } while (ptrsp174_2 != 0x34); - domakedefaultobj(stageID, prop, phi_s3_3); - } - } - break; - case PROPDEF_TANK: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - TankRecord *prop = prop; - PropRecord *prp; - spE8 = 0.0f; - weaponLoadProjectileModels(0x20); - domakedefaultobj(stageID, prop, phi_s3_3); - prop->turret_vertical_angle = 0.0f; - prop->turret_orientation_angle = 0.0f; - prp = prop->prop; - prop->tank_orientation_angle = M_TAU_F - atan2f(prop->mtx.m[3][3], prop->mtx.m[3][4]); - if (prp != 0) - { - spE8 = stanGetPositionYValue(prp->stan, prp->pos.x, prp->pos.z); - } - prop->stan_y = spE8; - prop->unkD0 = spE8 / 0.17000002f; - } - break; - case PROPDEF_VEHICHLE: // switch 1 - if ((bnoprop != 0) && ((prop->flags2 & phi_s4_2) == 0)) - { - VehichleRecord *prop = prop; - domakedefaultobj(stageID, prop, phi_s3_3); - temp_a0_8 = prop->model; - if (temp_a0_8 != 0) - { - // waypoints_10 = temp_a0_8->obj->Switches->unk14; - if (waypoints_10 != 0) - { - extract_id_from_object_structure_microcode(temp_a0_8, waypoints_10); // = 1;//( prop->flags & 0x10000000) == 0; - } - } - prop->speed = 0.0f; - prop->wheelxrot = 0.0f; - prop->wheelyrot = 0.0f; - prop->speedaim = 0.0f; - prop->turnrot60 = 0.0f; - prop->roty = 0.0f; - prop->speedtime60 = -1.0f; - prop->ailist = ailistFindById(prop->ailist); - prop->aioffset = 0; - prop->aireturnlist = -1; - prop->path = 0; - prop->nextstep = 0; - prop->Sound = 0; - } - break; - case PROPDEF_AIRCRAFT: // switch 1 - if ((bnoprop != 0) && 1) - ; //(( prop->flags2 & phi_s4_2) == 0)) - { - AircraftRecord *prop = prop; - domakedefaultobj(stageID, prop, phi_s3_3); - prop->speed = 0.0f; - prop->speedaim = 0.0f; - prop->rotoryrot = 0.0f; - prop->rotaryspeed = 0.0f; - prop->rotaryspeedaim = 0.0f; - prop->yrot = 0.0f; - prop->speedtime60 = -1.0f; - prop->rotaryspeedtime = -1.0f; - prop->ailist = ailistFindById(prop->ailist); - prop->aioffset = 0; - prop->aireturnlist = -1; - prop->nextstep = 0; - prop->path = 0; - prop->Sound = 0; - } - break; - case PROPDEF_TAG: // switch 1 - vtextptr0 = setupCommandGetObject(stageID, prop->pad + phi_s3_3); - prop->flags2 = vtextptr0; - if (vtextptr0 != 0) - { - vtextptr0->runtime_bitflags |= 0x10; - } - set_parent_cur_tag_entry(prop); - break; - case PROPDEF_RENAME: // switch 1 - { - ObjectRecord *pdef = setupCommandGetObject(stageID, prop->obj + phi_s3_3); - // prop->prev = vtextptr1; - if (pdef != 0) - { - pdef->runtime_bitflags |= 0x400; - } - bondinvAddTextOverride(prop); - break; - } - case PROPDEF_WATCH_MENU_OBJECTIVE_TEXT: // switch 1 - setup_briefing_text_entry_parent(prop); - break; - case PROPDEF_CAMERAPOS: // switch 1 - { - CutsceneRecord *prop = prop; - prop->x /= 100.0f; - prop->y /= 100.0f; - prop->z /= 100.0f; - prop->theta /= 65536.0f; - prop->verta /= 65536.0f; - break; - } - case PROPDEF_OBJECTIVE_START: // switch 1 - add_ptr_to_objective(prop); - break; - case PROPDEF_OBJECTIVE_ENTER_ROOM: // switch 1 - set_parent_cur_obj_enter_room(prop); - break; - case PROPDEF_OBJECTIVE_DEPOSIT_OBJECT_IN_ROOM: // switch 1 - set_parent_cur_obj_deposited_in_room(prop); - break; - case PROPDEF_OBJECTIVE_PHOTOGRAPH: // switch 1 - set_parent_cur_obj_photograph(prop); - break; - } - prop += sizepropdef(prop); - propdefType = prop->type; - - phi_s3_3 += 1; - } while (propdefType != PROPDEF_END); - prop = g_CurrentSetup.propDefs; - } - propdefType = prop->type; - - phi_s3_4 = 0; - if (propdefType != PROPDEF_END) - { - do - { - switch (propdefType) - { - case PROPDEF_PROP: - case PROPDEF_KEY: - case PROPDEF_MAGAZINE: - case PROPDEF_COLLECTABLE: - case PROPDEF_MONITOR: - case PROPDEF_AMMO: - case PROPDEF_ARMOUR: - case PROPDEF_GAS_RELEASING: - case PROPDEF_UNK41: - case PROPDEF_GLASS: - case PROPDEF_SAFE: - case PROPDEF_TINTED_GLASS: - if ((prop->prop != 0) && ((prop->flags & 0x8000) != 0)) - { - vtextptr2 = setupCommandGetObject(stageID, phi_s3_4 + prop->pad); - if ((vtextptr2 != 0) && (vtextptr2->prop != 0)) - { - modal = prop->model; - prop->runtime_bitflags = prop->runtime_bitflags | 0x80000; - modelSetScale(modal, modal->scale); - chrpropReparent(prop->prop, vtextptr2->prop); - } - #ifdef DEBUG - else - { - osSyncPrintf("inobj link not found for object number %d\n"); - } - #endif - } - break; - case PROPDEF_LINK: - temp_s0_8 = setupGetPtrToCommandByIndex(prop->chr + phi_s3_4); - vtextptr3 = setupGetPtrToCommandByIndex(prop->flags + phi_s3_4); - if ((temp_s0_8 != 0) && (vtextptr3 != 0) && (temp_s0_8->type == 8) && (vtextptr3->type == 8)) - { - propweaponSetDual(temp_s0_8, vtextptr3); - } - #ifdef DEBUG - else if ((temp_s0_8->type != PROPDEF_COLLECTABLE) && (vtextptr3->type != PROPDEF_COLLECTABLE)) - { - osSyncPrintf("link type wrong for doublegun object number %d\n"); - } - else - { - osSyncPrintf("link not found for doublegun object number %d\n"); - } - #endif - break; - case PROPDEF_SWITCH: - ptrsp174_3 = prop->flags; - temp_s0_9 = setupCommandGetObject(stageID, phi_s3_4 + prop->chr); - vtextptr4 = setupGetPtrToCommandByIndex(phi_s3_4 + ptrsp174_3); - if (temp_s0_9 != 0) - { - bnoobj_13 = temp_s0_9->prop; - if ((bnoobj_13 != 0) && (vtextptr4 != 0) && (vtextptr4->type == 1) && (vtextptr4->prop != 0)) - { - prop->chr = bnoobj_13; - prop->flags = vtextptr4->prop; - initSetLevelLoadPropSwitch(prop); - temp_s0_9->runtime_bitflags |= 1; - } - } - #ifdef DEBUG - else - { - osSyncPrintf("doorlink object number %d not initialised\n"); - } - #endif - break; - case PROPDEF_SAFE_ITEM: - ptrsp174_4 = prop->flags; - sp80 = prop->flags2; - temp_s0_10 = setupCommandGetObject(stageID, phi_s3_4 + prop->chr); - ptrsp174_5 = setupCommandGetObject(stageID, phi_s3_4 + ptrsp174_4); - vtextptr5 = setupCommandGetObject(stageID, phi_s3_4 + sp80); - if ((temp_s0_10 != 0) && (temp_s0_10->prop != 0) && (ptrsp174_5 != 0) && (ptrsp174_5->prop != 0) && (ptrsp174_5->type == 0x2B) && (vtextptr5 != 0) && (vtextptr5->prop != 0) && (vtextptr5->type == 1)) - { - prop->obj = temp_s0_10; - prop->flags = ptrsp174_5; - prop->flags2 = vtextptr5; - sp74 = vtextptr5; - initSetLevelLoadPropSafeItem(prop); - temp_s0_10->flags2 |= 0x400; - sp74->flags2 |= 0x400; - } - #ifdef DEBUG - else - { - osSyncPrintf("safelink object number %d not initialised\n"); - } - #endif - break; - case PROPDEF_LOCK_DOOR: - ptrsp174_6 = prop->flags; - temp_s0_11 = setupCommandGetObject(stageID, phi_s3_4 + prop->obj); - vtextptr6 = setupCommandGetObject(stageID, phi_s3_4 + ptrsp174_6); - if ((temp_s0_11 != 0) && (temp_s0_11->prop != 0) && (vtextptr6 != 0) && (vtextptr6->prop != 0) && (temp_s0_11->type == 1)) - { - prop->obj = temp_s0_11; - prop->flags = vtextptr6; - initSetLevelLoadPropLockDoor(prop); - temp_s0_11->runtime_bitflags |= 0x2000; - } - #ifdef DEBUG - else - { - osSyncPrintf("doorlock object number %d not initialised\n"); - } - #endif - break; - } - prop = (sizepropdef(prop) * 4) + prop; - propdefType = prop->type; - - prop = prop; - phi_s3_4 += 1; - } while (propdefType != PROPDEF_END); - } - } - } - else - { - g_CurrentSetup.pathwaypoints = NULL; - g_CurrentSetup.waypointgroups = NULL; - g_CurrentSetup.intro = NULL; - g_CurrentSetup.propDefs = NULL; - g_CurrentSetup.patrolpaths = NULL; - g_CurrentSetup.ailists = NULL; - g_CurrentSetup.pads = NULL; - g_CurrentSetup.boundpads = NULL; - g_CurrentSetup.padnames = NULL; - g_CurrentSetup.boundpadnames = NULL; - alloc_init_GUARDdata_entries(0); - sub_GAME_7F005540(0); - sub_GAME_7F005624(0); - } - alloc_false_GUARDdata_to_exec_global_action(); -} diff --git a/checksums.txt b/checksums.txt deleted file mode 100644 index 1278b2d..0000000 --- a/checksums.txt +++ /dev/null @@ -1,715 +0,0 @@ -6934ec4ee59ff3233b35f4f1a6f150872c90946d build/u/assets/obseg/bg/bg_sev_all_p.seg -725079c09c91916b1c92f2409954d30d55bd135d build/u/assets/obseg/bg/bg_silo_all_p.seg -e261790370351cd685a7e889edb82499971aca0c build/u/assets/obseg/bg/bg_stat_all_p.seg -b9b264f12c887922a092f7a2665c533769831585 build/u/assets/obseg/bg/bg_arec_all_p.seg -3a2baa9360e9abee6a8ab20fdc3fe36e85656115 build/u/assets/obseg/bg/bg_arch_all_p.seg -0cf027fc81be4a66425e306bed8bb05561f24851 build/u/assets/obseg/bg/bg_tra_all_p.seg -867e752dfd9e718ef15e3621653323b571110546 build/u/assets/obseg/bg/bg_dest_all_p.seg -71c44847680dfb5c9303278375543152b0df82d2 build/u/assets/obseg/bg/bg_sevb_all_p.seg -e71d85a4f72e9b2d81ffc109cd6803abb75360cd build/u/assets/obseg/bg/bg_azt_all_p.seg -aaa560a8b0af13a72f5a1c25d0a21be4168c53b3 build/u/assets/obseg/bg/bg_pete_all_p.seg -445541bf288425bfe2447929e81e7701794cd24e build/u/assets/obseg/bg/bg_depo_all_p.seg -e87c0f91145ee784f830306478c3b3024255f18d build/u/assets/obseg/bg/bg_ref_all_p.seg -2293c648997ae3f79c17262ba8df2247adb3f344 build/u/assets/obseg/bg/bg_cryp_all_p.seg -11e8a8250f39bd090ed9d00b6fd3ab2ec7dc8243 build/u/assets/obseg/bg/bg_dam_all_p.seg -192dda376370cf9a07c33a08af5836ec0be6175b build/u/assets/obseg/bg/bg_ark_all_p.seg -a58d8963a5d219f61f056887bff996b52e1d79a6 build/u/assets/obseg/bg/bg_run_all_p.seg -3d912e6d6229e5c19a527aa8ae51c353c14b4df7 build/u/assets/obseg/bg/bg_sevx_all_p.seg -ff4f27b38eba194602a524a60cc5dbaccbd795a9 build/u/assets/obseg/bg/bg_jun_all_p.seg -0575f20e0fb71057c2f7c660dd0ded4878b5d495 build/u/assets/obseg/bg/bg_dish_all_p.seg -1bc46ac67773c12cf5d1fe79b48bbab3ea0ef321 build/u/assets/obseg/bg/bg_cave_all_p.seg -8c02ca49fd14db9a72d2e1e54b36308454286a86 build/u/assets/obseg/bg/bg_cat_all_p.seg -44d36870cc2502138b61c62436d0774942ff70b9 build/u/assets/obseg/bg/bg_crad_all_p.seg -da39a3ee5e6b4b0d3255bfef95601890afd80709 build/u/assets/obseg/bg/bg_imp_all_p.seg -da39a3ee5e6b4b0d3255bfef95601890afd80709 build/u/assets/obseg/bg/bg_ash_all_p.seg -da39a3ee5e6b4b0d3255bfef95601890afd80709 build/u/assets/obseg/bg/bg_sho_all_p.seg -46774d70127cae35b898f5b94246c77f6e239a71 build/u/assets/obseg/bg/bg_ame_all_p.seg -da39a3ee5e6b4b0d3255bfef95601890afd80709 build/u/assets/obseg/bg/bg_rit_all_p.seg -70ac79017821950bc71d0f5ea0148cde1825a615 build/u/assets/obseg/bg/bg_oat_all_p.seg -da39a3ee5e6b4b0d3255bfef95601890afd80709 build/u/assets/obseg/bg/bg_lip_all_p.seg -da39a3ee5e6b4b0d3255bfef95601890afd80709 build/u/assets/obseg/bg/bg_lee_all_p.seg -da39a3ee5e6b4b0d3255bfef95601890afd80709 build/u/assets/obseg/bg/bg_ear_all_p.seg -53ea3a1252992714b8f09235909390c001a3f3b8 build/u/assets/obseg/bg/bg_len_all_p.seg -da39a3ee5e6b4b0d3255bfef95601890afd80709 build/u/assets/obseg/bg/bg_pam_all_p.seg -da39a3ee5e6b4b0d3255bfef95601890afd80709 build/u/assets/obseg/bg/bg_wax_all_p.seg -f4e72081570eae7ec26d1fcca157b762f686f465 build/u/assets/obseg/brief/UbriefarchZ.rz -1c3a01646bcb6f9f4f86d93bc82a18b05b922cdb build/u/assets/obseg/brief/UbriefarkZ.rz -931e609e804c1662ab5cee02a72451f1272d9978 build/u/assets/obseg/brief/UbriefaztZ.rz -ee4f4d4554595baa3d2bfd3c67e8c1323f911d49 build/u/assets/obseg/brief/UbriefcaveZ.rz -39f88af2e3281ced82978b008cedc16b709a38e7 build/u/assets/obseg/brief/UbriefcontrolZ.rz -9b24f434908986145a511a77542a8805a9393152 build/u/assets/obseg/brief/UbriefcradZ.rz -9e9a1f80c2ac012131ac68f70de1dd92b2bfde7e build/u/assets/obseg/brief/UbriefcrypZ.rz -a2cd9b46835e51923c5ea6748bfca0e69d176d99 build/u/assets/obseg/brief/UbriefdamZ.rz -95907929c2bc188e03cb073d33aab86ba45f4bd8 build/u/assets/obseg/brief/UbriefdepoZ.rz -7ebcb54478326f792adcb6e202d1bef1c505389a build/u/assets/obseg/brief/UbriefdestZ.rz -972e072765bfcd811decd4dffedddbbf7a29c9bc build/u/assets/obseg/brief/UbriefjunZ.rz -49979c97dbaf913aac796248f42e9a61b756670d build/u/assets/obseg/brief/UbriefpeteZ.rz -df90ab0b35388826748b1bbbb3ba5741518d5f8d build/u/assets/obseg/brief/UbriefrunZ.rz -0aa115c6e2cb380eb48c8009cb45c2b74f15ad7c build/u/assets/obseg/brief/UbriefsevbunkerZ.rz -63de9ce290a19b2c1fa4fe331c97c8bea410c4d4 build/u/assets/obseg/brief/UbriefsevbZ.rz -980db05c0fb37c1aed140de766288930d8122019 build/u/assets/obseg/brief/UbriefsevxbZ.rz -b5dc12755f197eb69db5bb27858e5ba059bb806c build/u/assets/obseg/brief/UbriefsevxZ.rz -558bb65230f1fbd33c8c5854a90e9196201a16d2 build/u/assets/obseg/brief/UbriefsiloZ.rz -2364aa02d403fac8c82fc14dc0411e94dfd97c29 build/u/assets/obseg/brief/UbriefstatueZ.rz -7ebba8fb6938c6f541096fee7b3278b6c91043f0 build/u/assets/obseg/brief/UbrieftraZ.rz -af96b213d4163b9e812599256ca4a677189a4003 build/u/assets/obseg/chr/CarmourguardZ.rz -f9a962910ddc892bb07e3b40685959a4fec5f522 build/u/assets/obseg/chr/CbaronsamediZ.rz -7de2912d10aacc23e192c322f33276345553de76 build/u/assets/obseg/chr/CbluecamguardZ.rz -753048077b04c5f88726aa652af664879e8802c1 build/u/assets/obseg/chr/CbluemanZ.rz -b3ad09ece73c09fa665895ebaf607755a412a2d7 build/u/assets/obseg/chr/CbluewomanZ.rz -c565bfe19c39b075385fca28edcb2ac3ba65bdd1 build/u/assets/obseg/chr/CboilerbondZ.rz -d8ecca4158650753d39353a8fca8da10786218ee build/u/assets/obseg/chr/CboilertrevZ.rz -641dbee70e9bb3a5018596628866ad0c1b5e9c0a build/u/assets/obseg/chr/CborisZ.rz -550728962bad279792cbf657595a9552c93150fd build/u/assets/obseg/chr/CcamguardZ.rz -b532f4401a0f54a03eb6fa4b91dc9ce6ae134c59 build/u/assets/obseg/chr/CcardimanZ.rz -3c987b5c592182f23558372e7ff93d413732a514 build/u/assets/obseg/chr/CcheckmanZ.rz -49d76867e281ad92277fdcd5a997b1f73fe4f4b5 build/u/assets/obseg/chr/CcommguardZ.rz -eb239f8832a9ab510dbe0ae63f65674d39062648 build/u/assets/obseg/chr/CdjbondZ.rz -d3648c7044dd2d5dbf1a26962858220f2c23ec5a build/u/assets/obseg/chr/CfattechwomanZ.rz -4243913931b617a6ddd80f3d66c520006405cfee build/u/assets/obseg/chr/Cgreatguard2Z.rz -240bdbfefa49a1cffe805ade2f2c49f6eb992c6e build/u/assets/obseg/chr/CgreatguardZ.rz -b1baec57726bdfd5c47b2d15d8b48e27ffa54d7e build/u/assets/obseg/chr/CgreyguardZ.rz -583d8f6256e899a3fed7aa1f228177a9d501e6a6 build/u/assets/obseg/chr/CgreymanZ.rz -1970a5f8e1acc97b26e36f9dae0298321bfb876f build/u/assets/obseg/chr/CheadalanZ.rz -7b4366ffcc270b2ee37bc8e1a4d736d2d2c78ed8 build/u/assets/obseg/chr/CheadbalaclavaZ.rz -feb9f0d401ce2882944dc633b8b3c9a0f17fc2e2 build/u/assets/obseg/chr/CheadbikeZ.rz -85cea9b7136c172e5d7ba1be8dd9e68588132754 build/u/assets/obseg/chr/CheadbrosnanboilerZ.rz -b56ffb982be53175c581f9344ad01738cb2a9799 build/u/assets/obseg/chr/CheadbrosnansnowZ.rz -f056c8d0633700d20054552a9920ea97dfd4ebc5 build/u/assets/obseg/chr/CheadbrosnansuitZ.rz -23e8b45441ca4812a525324b88ee4d0438a91dc4 build/u/assets/obseg/chr/CheadbrosnantimberZ.rz -5ee8d74b19efb113de244e1bbb2b076ee6283d8d build/u/assets/obseg/chr/CheadbrosnanZ.rz -98241d9423cd1571847a627e023e496d4a0b548e build/u/assets/obseg/chr/CheadbZ.rz -819b91eac46ae9ee8ecd4dc4ef895a8ef10a031d build/u/assets/obseg/chr/CheadchrisZ.rz -98bc6cbae7fa9be48e062518065e44ec7054b887 build/u/assets/obseg/chr/CheaddaveZ.rz -baf393f5b3fef947aceec2d62ca089b01c4cee9b build/u/assets/obseg/chr/CheaddesZ.rz -4ef80459445e1d8dcb9a264da1f82baf86910fa5 build/u/assets/obseg/chr/CheadduncanZ.rz -099940e3278dbb3c5b17776de0b6cdc433a18779 build/u/assets/obseg/chr/CheaddwayneZ.rz -1aefab90eecc5a900903da9ab98b465bf68db2a2 build/u/assets/obseg/chr/CheadgrahamZ.rz -d1b779b3eafee77bc33752ee233b685cf4f3e966 build/u/assets/obseg/chr/CheadgrantZ.rz -ec4d021cd47cda6ad7c4d5d69031875f0fabab14 build/u/assets/obseg/chr/CheadjimZ.rz -8c445806dad9dc9e23a463053bcd2788499aea9f build/u/assets/obseg/chr/Cheadjoe2Z.rz -5333d360aaa0e13b39e7adcfa6c81878d0dceeef build/u/assets/obseg/chr/CheadjoelZ.rz -19ba0039e3958b1f7dcc3fd38a79bd6953fb26fb build/u/assets/obseg/chr/CheadjoeZ.rz -2e60f66c0ca29491e81a227567223a8153094035 build/u/assets/obseg/chr/CheadkarlZ.rz -517057510bbe4ea9d308f11bb56eb33849758cd4 build/u/assets/obseg/chr/CheadkenZ.rz -601952bf0b973e1cbc85a469525d76042d61cf03 build/u/assets/obseg/chr/CheadleeZ.rz -fbc4972b28da6b8e7dfa5f0c3b33033cdd840331 build/u/assets/obseg/chr/CheadmandyZ.rz -efa446f619ae1f5a1ce8c5c953817bba270433a4 build/u/assets/obseg/chr/CheadmarionZ.rz -0dbf268afa661531cb24821ffa8428a5adc0a0ea build/u/assets/obseg/chr/CheadmarkZ.rz -8b2427714eb1a96fb63537f0af7d7e552d9d4e48 build/u/assets/obseg/chr/CheadmartinZ.rz -4d6438a0c1223ed3afe4c35fb3fc8147f50b2f71 build/u/assets/obseg/chr/CheadmishkinZ.rz -507bb8429843b23ef8beefeb6d85522c886acb18 build/u/assets/obseg/chr/CheadneilZ.rz -85926c33d95c839e38617ef634921da552b274c6 build/u/assets/obseg/chr/CheadpeteZ.rz -59a8675b92bb90314b405251a58f0f0317c8f205 build/u/assets/obseg/chr/CheadrobinZ.rz -40f7901536fcc2bcdb1036af713ad357ca6900b2 build/u/assets/obseg/chr/CheadsallyZ.rz -7d5338f987f9b49632001f9a47dc2b2c75f844c9 build/u/assets/obseg/chr/CheadscottZ.rz -9f496a75d3d49173af1ff77948f1a16b7eb8c50e build/u/assets/obseg/chr/CheadshaunZ.rz -bf50d903fb77b6cc7d5fc8f2c5af39308411cc13 build/u/assets/obseg/chr/CheadsteveeZ.rz -7efd27879add069922632ab0d48ba90b3f555bd6 build/u/assets/obseg/chr/CheadstevehZ.rz -91289963bcd07e659d621da8d11c9d208e9ff3eb build/u/assets/obseg/chr/CheadvivienZ.rz -cbe6889485a8276d25b041e7b52d9866bc3060e0 build/u/assets/obseg/chr/CjawsZ.rz -019af9cd39a7a720a331298112f2288c4aaf9930 build/u/assets/obseg/chr/CjeanwomanZ.rz -20dfd0e89f4834fad2d001eeb3fce09d8c3d5055 build/u/assets/obseg/chr/CmaydayZ.rz -d50267b2bb2c0f29c020894d06ece2bcc19b407c build/u/assets/obseg/chr/CmoonfemaleZ.rz -f30ed13f62118048eec639e183bfc24975269a4b build/u/assets/obseg/chr/CmoonguardZ.rz -3aab8c12017b26c686a1813b4c521fb4acb52791 build/u/assets/obseg/chr/CnatalyaZ.rz -8c3f0f7795b2d3e04a8d5bbf19eede3b892d622a build/u/assets/obseg/chr/CnavyguardZ.rz -30852bcccfa32b213d8fe5ee3c6a7321797b4754 build/u/assets/obseg/chr/CoddjobZ.rz -2da8ed7a5936abffc296c8e875d74f88846b44f7 build/u/assets/obseg/chr/ColiveguardZ.rz -dbf3e3885726cb0b0cf65286ddd46748535397fb build/u/assets/obseg/chr/CorumovZ.rz -f77936814bc414fe647ae442e36b9806b5a86eb1 build/u/assets/obseg/chr/CpilotZ.rz -bbaf4c082fe3e6d217959c1762c81bb15fec0e7a build/u/assets/obseg/chr/CredmanZ.rz -2524ef24c798e30e8cbfcdd24985c01e2ee751d7 build/u/assets/obseg/chr/CrusguardZ.rz -e96010ad083250dbec0b00a45a1decda648e6f90 build/u/assets/obseg/chr/CsnowbondZ.rz -bf9ff65bcfa679e336a15c16c793dbed68a6a8ff build/u/assets/obseg/chr/CsnowguardZ.rz -112f5d50a046f62687c58422286ec439173af683 build/u/assets/obseg/chr/CspicebondZ.rz -1cb1f6a7f11b46e87f4ab6f91ba1d068fce40154 build/u/assets/obseg/chr/CsuitbondZ.rz -5de72f4f175bf1613a253a2bd1b7607bd290f664 build/u/assets/obseg/chr/Csuit_lf_handZ.rz -ef5695e2f548f28ec9809e816172865c0a85dafb build/u/assets/obseg/chr/CtechmanZ.rz -a4bd1527ce647a62ace593da87aa8752a0ada22c build/u/assets/obseg/chr/CtechwomanZ.rz -58f9ba4bc4a645c0a2211eb80079131850b536d6 build/u/assets/obseg/chr/CtimberbondZ.rz -163ffcae6b73fe024a879d089350b54b2d32a3dd build/u/assets/obseg/chr/CtrevelyanZ.rz -78d224bd41b194598cf4eefc270f948e19cdd0a5 build/u/assets/obseg/chr/CtrevguardZ.rz -0b34e0b34c20e26ab83f5fa7bbcc09fd4922dcf4 build/u/assets/obseg/chr/CvalentinZ.rz -2d3d89072922f993f6bb0907e05c3b9db1fdf4a7 build/u/assets/obseg/chr/CxeniaZ.rz -be8f843b4e9b9ec8d3ac83f337105bf50416b4fa build/u/assets/obseg/gun/Gak47Z.rz -8692c58972cb92acb5aa265cb82f6d1e4dd7ecda build/u/assets/obseg/gun/GaudiotapeZ.rz -a283d5c8d47d91fafd21d5aceb6b13e501c81a79 build/u/assets/obseg/gun/GautoshotZ.rz -9c069ec9be7ad3da9868328dff77bf26a6a612d0 build/u/assets/obseg/gun/GblackboxZ.rz -ac72d4ffaa025ace37724887973a5614e9069c7b build/u/assets/obseg/gun/GblueprintsZ.rz -f4eff3a515df736e6759b2777c4a53e5bb5419e3 build/u/assets/obseg/gun/GbombcaseZ.rz -36455963b6adc468bee8a06d9940341f44c2df88 build/u/assets/obseg/gun/GbombdefuserZ.rz -f4eff3a515df736e6759b2777c4a53e5bb5419e3 build/u/assets/obseg/gun/GbriefcaseZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GbugdetectorZ.rz -7aff217d6bf7ab37126e6c23a660790fd8b963ba build/u/assets/obseg/gun/GbugZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GbungeeZ.rz -9e7f5b6d2c835cf83a103813e7c686542862250e build/u/assets/obseg/gun/GcameraZ.rz -a41c3d34dd1dfad6cd76cf43fc260554932fefb5 build/u/assets/obseg/gun/GcartblueZ.rz -7f0fe8845729f3a1a922155dcdaeb834e78d2443 build/u/assets/obseg/gun/GcartridgeZ.rz -bb72550883dd37fbd913e86a3f85465b8d67dc70 build/u/assets/obseg/gun/GcartrifleZ.rz -f4c7df761272ec16f48ebfd0d67d48ab489456da build/u/assets/obseg/gun/GcartshellZ.rz -a41ff8dcd6a96303e394b60f43fb0651b23bab15 build/u/assets/obseg/gun/GcircuitboardZ.rz -0cdb12fa796c3715557818d7fd5f5f092c196079 build/u/assets/obseg/gun/GclipboardZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GcreditcardZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GdarkglassesZ.rz -42f0534cecfb0b0f6484e1ddef3ee4a3f52f5159 build/u/assets/obseg/gun/GdatathiefZ.rz -1fe4eceb3917babce851a503a3ce7568ce3fd14e build/u/assets/obseg/gun/GdattapeZ.rz -95486e4f5f65e587a148450efd98507688f2bef9 build/u/assets/obseg/gun/GdoordecoderZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GdoorexploderZ.rz -913589a6f1f3beed8a75c38af21e6bab6cc52f6b build/u/assets/obseg/gun/GdossierredZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GdynamiteZ.rz -28ff302554421498505d4ac009c68ef856933cf4 build/u/assets/obseg/gun/GexplosivefloppyZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GexplosivepenZ.rz -b7ee4439e8be82f58293321b0666c19c5d9f253c build/u/assets/obseg/gun/GextinguisherZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GfingergunZ.rz -50cf111af8f49a6b6c45cfbb85bc70be8442b9fe build/u/assets/obseg/gun/GfistZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GflarepistolZ.rz -131a5a36346e8de8949841d519d352536b3e1303 build/u/assets/obseg/gun/Gfnp90Z.rz -0ffc7be82e6063c2de1ca6206ee03a4469a51098 build/u/assets/obseg/gun/GgaskeyringZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GgoldbarZ.rz -ef0a685f094da4af7067c124815ce969919c47e1 build/u/assets/obseg/gun/GgoldeneyekeyZ.rz -26adac26145a3ecdcdb85ae02f869e93d4017428 build/u/assets/obseg/gun/GgoldengunZ.rz -f6803819660abd0f42e7afe4dc4a50933f047a6c build/u/assets/obseg/gun/GgoldwppkZ.rz -83dd6e61f382b9c32f74c468dcf0f68fbbbc8d1c build/u/assets/obseg/gun/GgrenadelaunchZ.rz -580421a79e0ddc768ce480acee2f1ed3fef23316 build/u/assets/obseg/gun/GgrenadeZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GheroinZ.rz -0676bc5cffef399e2f1c46cd271012d49279fe8d build/u/assets/obseg/gun/GjoypadZ.rz -f4eff3a515df736e6759b2777c4a53e5bb5419e3 build/u/assets/obseg/gun/GkeyanalysercaseZ.rz -74c87b8e2f4c783dfb7a4ddc64b2de373660df6e build/u/assets/obseg/gun/GkeyboltZ.rz -635dc0dfd4dde0d73cbfe2682a0e8fcae472e5b0 build/u/assets/obseg/gun/GkeycardZ.rz -c79a0735c356407ef1b8875a53eb59f824365cc3 build/u/assets/obseg/gun/GkeyyaleZ.rz -e4a6e4567dd075cfc013d60cf1b0aceaef03cd59 build/u/assets/obseg/gun/GknifeZ.rz -ba3567c3617faeae8a780f87aac42397588a141a build/u/assets/obseg/gun/GlaserZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GlectreZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GlockexploderZ.rz -20240e531fb01dac2ebbcedad6743bb7edcd4f47 build/u/assets/obseg/gun/Gm16Z.rz -4a30a8eb3de219e9cd1a7fccc08e4995d28e44f4 build/u/assets/obseg/gun/GmapZ.rz -28df314e796a34e71b460531d723915528baa7ed build/u/assets/obseg/gun/GmicrocameraZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GmicrocodeZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GmicrofilmZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GmoneyZ.rz -b1d6da18d90da028d936baf6f5e869b8c1cce46d build/u/assets/obseg/gun/Gmp5ksilZ.rz -ba6589b6ddb5ff58112fd21de25dfa86a834da7b build/u/assets/obseg/gun/Gmp5kZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GpitongunZ.rz -afb80b3b1770cea7c75ccd1f508c487d315b2288 build/u/assets/obseg/gun/GplansZ.rz -97cd167006f875c7fba36141bbe9264e99d1b28d build/u/assets/obseg/gun/GplastiqueZ.rz -bed8c08922c522763cb010676c10556223ead57f build/u/assets/obseg/gun/GpolarizedglassesZ.rz -d766fa78540729ce27264a970d41510f6aced847 build/u/assets/obseg/gun/GproximitymineZ.rz -200ab882f42c74a3eb71c99ff2e446b391ae7277 build/u/assets/obseg/gun/GremotemineZ.rz -127515575a0ba7cf66d8e3d663da0c4bb5cb6af8 build/u/assets/obseg/gun/GrocketlaunchZ.rz -5a75b7c3a7dffc18aa11e44ac8107106be1e315a build/u/assets/obseg/gun/GrugerZ.rz -f4eff3a515df736e6759b2777c4a53e5bb5419e3 build/u/assets/obseg/gun/GsafecrackercaseZ.rz -4ef8d6c04045db0f60953cddb999313471670d21 build/u/assets/obseg/gun/GshotgunZ.rz -c843d6d9f67cf2402bbe3feca9a18d906bfbeaab build/u/assets/obseg/gun/GsilverwppkZ.rz -4848729c2113bd7f7795a4d41a34bb412957a988 build/u/assets/obseg/gun/GskorpionZ.rz -c637dd38b0f715a95dc554598f40047b02d38d26 build/u/assets/obseg/gun/GsniperrifleZ.rz -738ae1c9fdf369f532479eff096388dfe3a5d074 build/u/assets/obseg/gun/GspectreZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GspooltapeZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GspyfileZ.rz -9da8872ae757dc89a27595cf28bea4cafdcc0ef7 build/u/assets/obseg/gun/GstafflistZ.rz -89eee7867adb1f9c124bd8277bb9db461e1bece4 build/u/assets/obseg/gun/GtaserZ.rz -efa45e5b2bcd4c03c8b56a9160914272357d61dd build/u/assets/obseg/gun/GthrowknifeZ.rz -3ab2500293f8af76ac1a21db66bc5f1e6a373ef6 build/u/assets/obseg/gun/GtimedmineZ.rz -e9bc424038fd0080d4f4582b5f31b569759d9ae2 build/u/assets/obseg/gun/GtriggerZ.rz -88918f408836032df263ba6be279bb3de3565bac build/u/assets/obseg/gun/Gtt33Z.rz -096504cb9626993eb043e8a7d14ca495f0ab5ce3 build/u/assets/obseg/gun/GuziZ.rz -a9c9669ccb7dd0dc7152c4f3ea627c99a2e3cdf7 build/u/assets/obseg/gun/GvideotapeZ.rz -76c4e07f6b0c6397b0463e6251ba9148e8c4423b build/u/assets/obseg/gun/GwatchcommunicatorZ.rz -76c4e07f6b0c6397b0463e6251ba9148e8c4423b build/u/assets/obseg/gun/GwatchgeigercounterZ.rz -76c4e07f6b0c6397b0463e6251ba9148e8c4423b build/u/assets/obseg/gun/GwatchidentifierZ.rz -e9bc424038fd0080d4f4582b5f31b569759d9ae2 build/u/assets/obseg/gun/GwatchlaserZ.rz -688ed0684ab04e86c10b0842ea50018a155ef3d5 build/u/assets/obseg/gun/GwatchmagnetattractZ.rz -76c4e07f6b0c6397b0463e6251ba9148e8c4423b build/u/assets/obseg/gun/GwatchmagnetrepelZ.rz -f4eff3a515df736e6759b2777c4a53e5bb5419e3 build/u/assets/obseg/gun/GweaponcaseZ.rz -6a223739f3b248922e5ce104635af308d471e1b2 build/u/assets/obseg/gun/GwppksilZ.rz -c6ee07a282862f223c6e4bbcda674bff3633665a build/u/assets/obseg/gun/GwppkZ.rz -ae0b065c4b9b60b3561399dcbb883df9291bad29 build/u/assets/obseg/gun/GwristdartZ.rz -4dfe82e65fc7247c9b712a7a78f885e83b0311a7 build/u/assets/obseg/prop/Pak47magZ.rz -a86aef1cb5e589bf14220cebdba27e5d7162028c build/u/assets/obseg/prop/Palarm1Z.rz -a6d832390d63c59d4a117bd84ce286acbd6700b7 build/u/assets/obseg/prop/Palarm2Z.rz -52933eb5817d27115ec9a63c0553f4e59e3d7c71 build/u/assets/obseg/prop/Pammo_crate1Z.rz -9937799ec7f14e00c26d4330c8fb8dd8a1feb420 build/u/assets/obseg/prop/Pammo_crate2Z.rz -1cabd6f779e6e26a9ccac267e0eb4a1babe20237 build/u/assets/obseg/prop/Pammo_crate3Z.rz -5b46413d1b360ec2ba1e820abf9c32abfd78f19d build/u/assets/obseg/prop/Pammo_crate4Z.rz -83714c93af03aa67933fd25bb0ade9771c48cc85 build/u/assets/obseg/prop/Pammo_crate5Z.rz -902b578f8be1111fe6502b0a5b54c463f9002158 build/u/assets/obseg/prop/PapcZ.rz -45d334de4a7f2d653687f72c19d0620ac846ad7c build/u/assets/obseg/prop/Parchsecdoor1Z.rz -2a896738717740632f927f9a1a6a99beb7b126b0 build/u/assets/obseg/prop/Parchsecdoor2Z.rz -5c3d0a65a26998352cd21428d0d1c3bbdb916916 build/u/assets/obseg/prop/PartictrailerZ.rz -cb1929baccffcf65bfaee613a117ae3f56b794e3 build/u/assets/obseg/prop/ParticZ.rz -e87dcee46037876ff17cafcb261efbb89068557b build/u/assets/obseg/prop/PbarricadeZ.rz -f747037f4318b107c6ef325d5034e742c279fe16 build/u/assets/obseg/prop/Pbin1Z.rz -239245df49a6989477cef9eef9d4b3f0714b32dc build/u/assets/obseg/prop/Pblotter1Z.rz -558f5cb0504793179076ee7679c43721a761dbf0 build/u/assets/obseg/prop/PbodyarmourvestZ.rz -0922b84ee34f6d67b0b478ce59ce808cc027adce build/u/assets/obseg/prop/PbodyarmourZ.rz -3281665e2d33eef6b4f155e3db08fac74b343b67 build/u/assets/obseg/prop/PbollardZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PbombZ.rz -94b930522260cfbc4b3d5d2030ca427cfe665438 build/u/assets/obseg/prop/Pbook1Z.rz -c5fe96cfb73ea0abbab9a0cacfcb218c344bc859 build/u/assets/obseg/prop/Pbookshelf1Z.rz -804dd6ea52cdacb9b35f85031a937623695b07dc build/u/assets/obseg/prop/Pborg_crateZ.rz -34ce4231e0b15248fe00afa2f3942a60130a36a2 build/u/assets/obseg/prop/PboxcartridgesZ.rz -0c39c67baf4dedba2cac31ea1344e4c0df9683f8 build/u/assets/obseg/prop/Pboxes2x4Z.rz -5a8b86b30f3c48bf6fbd47815f9402a67a04e400 build/u/assets/obseg/prop/Pboxes3x4Z.rz -5d800191db97cef348966676f8414a2c776e8a20 build/u/assets/obseg/prop/Pboxes4x4Z.rz -64f4551ae68536e519e4e7f6bbd1e692e6f26e73 build/u/assets/obseg/prop/PbrakeunitZ.rz -a9d17f303790a810bdeccc87e272063a1ec73778 build/u/assets/obseg/prop/Pbridge_console1aZ.rz -2484f854199a0087f2676c394c224a0a46cf3830 build/u/assets/obseg/prop/Pbridge_console1bZ.rz -7aad5b1c18a7c59d3862561f1c367bf3eb2fe489 build/u/assets/obseg/prop/Pbridge_console2aZ.rz -b6d0651e76d8bc457e1f0761ab13781171db4389 build/u/assets/obseg/prop/Pbridge_console2bZ.rz -0c7f08b2c54646d2e861824ef8a238d6eab383cd build/u/assets/obseg/prop/Pbridge_console3aZ.rz -c90faf7ed80b36664e894cc16c5139e0fba680b2 build/u/assets/obseg/prop/Pbridge_console3bZ.rz -bd379dbeb0f59f0156234b33f936bbaec77bf37c build/u/assets/obseg/prop/PcarbmwZ.rz -f8506a0a6b9ac9eae1c6988eb43ed7ac6a2484ca build/u/assets/obseg/prop/Pcard_box1Z.rz -3b70d92bc05b34c8894b912426dbab81c482c7af build/u/assets/obseg/prop/Pcard_box2Z.rz -6d2ac8d2744a215914f11093b2935ab23fc649b2 build/u/assets/obseg/prop/Pcard_box3Z.rz -b39befee71646044f1b66e1022135dc90c99079a build/u/assets/obseg/prop/Pcard_box4Z.rz -f862ecc3e3c5ec3760edfd6864c5a126eeed920c build/u/assets/obseg/prop/Pcard_box5Z.rz -931d1774d903a322ab3001462bc598c487160127 build/u/assets/obseg/prop/Pcard_box6Z.rz -54c3ada7510f2bb6dd1ea212457b31ca30b87cfe build/u/assets/obseg/prop/PcarescortZ.rz -965fa84930051df6d213929c60178d877328d4c9 build/u/assets/obseg/prop/PcargolfZ.rz -3528253fb3fac10a6c5826060af277685f805327 build/u/assets/obseg/prop/PcarweirdZ.rz -ca5a6a593636315dee1d3a5b83e4c0d6c121a61d build/u/assets/obseg/prop/PcarzilZ.rz -9d59c1641dbc9c20cdb9f7d701eebefb7caf5782 build/u/assets/obseg/prop/PcctvZ.rz -9cae1e74fe7d2828c68c68fb8f6aea2978d9cd62 build/u/assets/obseg/prop/PchraudiotapeZ.rz -83c3f7aa07ede08576039d1add06421a2e913cc8 build/u/assets/obseg/prop/PchrautoshotZ.rz -a9c6b375d831a9b4683c5a680810ee62c30ae2c4 build/u/assets/obseg/prop/PchrblackboxZ.rz -d8784ab5408553529c321dfea5edfde7d37d089e build/u/assets/obseg/prop/PchrblueprintsZ.rz -791309eadbc8b773d1b6fbc579d00e563558bcbf build/u/assets/obseg/prop/PchrbombcaseZ.rz -f159b016ee30795e791d10aa1b82fa608d11b3c4 build/u/assets/obseg/prop/PchrbombdefuserZ.rz -65a34f99d86417225ff0af22b97dfd76a7d30670 build/u/assets/obseg/prop/PchrbriefcaseZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrbugdetectorZ.rz -5d85e3ca9e8bd7d0f161d68412f77568191fe68d build/u/assets/obseg/prop/PchrbugZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrbungeeZ.rz -cd9a94c2627e1df0451629d50e47a015e59da1ef build/u/assets/obseg/prop/PchrcameraZ.rz -998e9b6759a830163dfc1565229bb8d4c08d5bac build/u/assets/obseg/prop/PchrcircuitboardZ.rz -22162c77f175707ce0c8a6f2f757470135b7320f build/u/assets/obseg/prop/PchrclipboardZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrcreditcardZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrdarkglassesZ.rz -865ba0a6e9af4dde17f1a91ee9d95533ed380645 build/u/assets/obseg/prop/PchrdatathiefZ.rz -350d4589c3028a548581eccd04ec276880a344ae build/u/assets/obseg/prop/PchrdattapeZ.rz -a93538e9a71031cfbf1eb7037f7ecaca45e4b989 build/u/assets/obseg/prop/PchrdoordecoderZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrdoorexploderZ.rz -e6f067a4f335806927d49c87f8f419ea18ed5c50 build/u/assets/obseg/prop/PchrdossierredZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrdynamiteZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrexplosivepenZ.rz -55df2d4f58332554c6ead8a6bd714ae14c4094b3 build/u/assets/obseg/prop/PchrextinguisherZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrfingergunZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrflarepistolZ.rz -052caca11d482a8bc9c3b1aaf73fe7b5bb74f22b build/u/assets/obseg/prop/Pchrfnp90Z.rz -556ae2ab982fba67ecc0de848d38d9ba37be331d build/u/assets/obseg/prop/PchrgaskeyringZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrgoldbarZ.rz -c8a41b768e56c33dba6b59c3f6ceabab4127d2a8 build/u/assets/obseg/prop/PchrgoldeneyekeyZ.rz -31e0fa52c31b6c23ac3000e31f9db98b0069666b build/u/assets/obseg/prop/PchrgoldenZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrgoldwppkZ.rz -9ede31774c6c7e355e0a42b5a42d702606ab6302 build/u/assets/obseg/prop/PchrgrenadelaunchZ.rz -61dd1e31f7e2a376a99e9eb9012abddec099705a build/u/assets/obseg/prop/PchrgrenaderoundZ.rz -953a374f540b9fc67428d680c6d187dbfab81d04 build/u/assets/obseg/prop/PchrgrenadeZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrheroinZ.rz -56f029c449805eeea8682cea4e84317430f6ec98 build/u/assets/obseg/prop/PchrkalashZ.rz -791309eadbc8b773d1b6fbc579d00e563558bcbf build/u/assets/obseg/prop/PchrkeyanalysercaseZ.rz -94e503cfaaba3b2470febfc7e9889b01f7d7ceb8 build/u/assets/obseg/prop/PchrkeyboltZ.rz -943e1b8c75bb8ee4ea2e633e463f3b16a1a0fb5e build/u/assets/obseg/prop/PchrkeyyaleZ.rz -a2e6fb8c1603e612f2c3556b780d2d8cfd64b8d3 build/u/assets/obseg/prop/PchrknifeZ.rz -e9bf6f9b703a885e0555acbbea443ecdd801db47 build/u/assets/obseg/prop/PchrlaserZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrlectreZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrlockexploderZ.rz -a353ac9f149f345fa33120b77e8902c8c3b6b565 build/u/assets/obseg/prop/Pchrm16Z.rz -cde8cb16e589499649ba82b208f3fa2c47a4c3a2 build/u/assets/obseg/prop/PchrmapZ.rz -c47ec943a04022ffbf56795b1a1ac412669f9ae2 build/u/assets/obseg/prop/PchrmicrocameraZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrmicrocodeZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrmicrofilmZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrmoneyZ.rz -e009cdd8152a98f7368ef219f5bf0904bfa6f3d5 build/u/assets/obseg/prop/Pchrmp5ksilZ.rz -68274f24c2241b33ca00434c422ce34657c1acfd build/u/assets/obseg/prop/Pchrmp5kZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrpitongunZ.rz -a60bc3599c10642cc93ed9f3e4c6de98cc45b7df build/u/assets/obseg/prop/PchrplansZ.rz -b32cfe4dffa91de4b6df81f4c44b2971e99a7870 build/u/assets/obseg/prop/PchrplastiqueZ.rz -c1f567f93961d8c8aa82b2e1263650055f9c4de1 build/u/assets/obseg/prop/PchrpolarizedglassesZ.rz -7a674039f068ca040af28389fd9ee2c400d91e2d build/u/assets/obseg/prop/PchrproximitymineZ.rz -ea3c0de825b556b5e67f420330910cf9f77515b1 build/u/assets/obseg/prop/PchrremotemineZ.rz -f723f7f43dde89aef7683bd69235e6979b1ae3ba build/u/assets/obseg/prop/PchrrocketlaunchZ.rz -0e31b9a711d912a1557d496e590132f9821090d0 build/u/assets/obseg/prop/PchrrocketZ.rz -515ddb60c99056176cc607dcfe3e0caca77d901c build/u/assets/obseg/prop/PchrrugerZ.rz -791309eadbc8b773d1b6fbc579d00e563558bcbf build/u/assets/obseg/prop/PchrsafecrackercaseZ.rz -2293b523da0d6099e453369129645133b509a885 build/u/assets/obseg/prop/PchrshotgunZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrsilverwppkZ.rz -5ce723806354a5087a7388225340878638aa6a4a build/u/assets/obseg/prop/PchrskorpionZ.rz -2d52e6a9952191cd19243ffacd440befe193d289 build/u/assets/obseg/prop/PchrsniperrifleZ.rz -3c52401376a23b1e7d7d5541bcd52675a19ba54c build/u/assets/obseg/prop/PchrspectreZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrspooltapeZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrspyfileZ.rz -7677d5452d3dac72e787bf8b388285637a94bedd build/u/assets/obseg/prop/PchrstafflistZ.rz -01efcf6d4b3a5961072c5718e812a3e952ab8332 build/u/assets/obseg/prop/PchrtesttubeZ.rz -e5560736687560f2a084d64ef6bc59ff196c775a build/u/assets/obseg/prop/PchrthrowknifeZ.rz -74b527b8c5cfcd5e7ae52a12e2f884c4d874b77a build/u/assets/obseg/prop/PchrtimedmineZ.rz -02c6fbb140d924d112c335900e23c1214014e6b3 build/u/assets/obseg/prop/Pchrtt33Z.rz -d922b2e56c3159536506e692b8ae9f206c11d577 build/u/assets/obseg/prop/PchruziZ.rz -82f9530815d795a6eeeb7523e56bc52dcf3ef025 build/u/assets/obseg/prop/PchrvideotapeZ.rz -9eaf4491ef082901ee1af2edf6130d9f2f28cdfd build/u/assets/obseg/prop/PchrweaponcaseZ.rz -40e40109d7c5c66fc05625496a3ea4acd2573292 build/u/assets/obseg/prop/PchrwppksilZ.rz -671857533e5975baf99efa5d65ebb5d92cc15556 build/u/assets/obseg/prop/PchrwppkZ.rz -02c5b39a62bf8edcaae321dbbc3a60658ba50343 build/u/assets/obseg/prop/PchrwristdartZ.rz -a450b3f391759073dfa68c2b110a3b37683a8776 build/u/assets/obseg/prop/Pconsole1Z.rz -fabeefc12448cebc972a3b4f3f4dfc53a7d736f9 build/u/assets/obseg/prop/Pconsole2Z.rz -d13190a9413319a0a6e3ef7706c13e6862dfa208 build/u/assets/obseg/prop/Pconsole3Z.rz -e77a65f6aaf76cc7143a6091e8b3ec0d599cb11e build/u/assets/obseg/prop/Pconsole_sev2aZ.rz -d29647eb3372d82d1ffc6c5838ee90666c831a84 build/u/assets/obseg/prop/Pconsole_sev2bZ.rz -4e12b868b16f133a2ad0c8311d6d4b82a62886dc build/u/assets/obseg/prop/Pconsole_sev2cZ.rz -b353cfcb81ec5b9542c1c2e6f7f4a3cd6cbea5f2 build/u/assets/obseg/prop/Pconsole_sev2dZ.rz -aea1895fcf2fb6fe9d8d2f1bb84a52d3b0b054ee build/u/assets/obseg/prop/Pconsole_sevaZ.rz -e559b13d59ecf65aab8468430c11466e83eb6e1c build/u/assets/obseg/prop/Pconsole_sevbZ.rz -377057f29a6602d6c0a4e033976840d8067c9523 build/u/assets/obseg/prop/Pconsole_sevcZ.rz -0abfe19b6fd0fd210fdb264ecc8539cb37faa477 build/u/assets/obseg/prop/Pconsole_sevdZ.rz -a59ed0aacc304ed4374747e513ef7b5464360b58 build/u/assets/obseg/prop/Pconsole_sev_GEaZ.rz -7c488ace75bd0cacc2fd0e71d873e7b958f78ffc build/u/assets/obseg/prop/Pconsole_sev_GEbZ.rz -46bc086f2022a7ae143003ca542d06ce7fdba90b build/u/assets/obseg/prop/Pcryptdoor1aZ.rz -ac32eb9a4db6956e311adaac8f71764f7a5be178 build/u/assets/obseg/prop/Pcryptdoor1bZ.rz -7c49b6b7762fe671e184707193931f5e78067321 build/u/assets/obseg/prop/Pcryptdoor2aZ.rz -ca37c609124ff7bb14e97eb98b2913398fe08f87 build/u/assets/obseg/prop/Pcryptdoor2bZ.rz -42fd2cb099e9db39b6b143092c21caa5f5b260b3 build/u/assets/obseg/prop/Pcryptdoor3Z.rz -dc3e999f048705c6e801a41cb5c94d8a3560f980 build/u/assets/obseg/prop/Pcryptdoor4Z.rz -0e56673a90a799709c1feac74727fae13a1aab8f build/u/assets/obseg/prop/PdamchaindoorZ.rz -aa5e44fa11b85ef62cb586d18e488dc94a139ae8 build/u/assets/obseg/prop/PdamgatedoorZ.rz -4a925daa21458c5fe0f8e5bf92a8e1124130f638 build/u/assets/obseg/prop/PdamtundoorZ.rz -51cdbdc056c3a4c0c68ef26d9ad283de172bc4b5 build/u/assets/obseg/prop/Pdepot_door_steelZ.rz -1edb36886cb2a8bddd2f5fe20dca4f842dd2a644 build/u/assets/obseg/prop/Pdepot_gate_entryZ.rz -b869dc356210261658eb623cd928a374709a81a2 build/u/assets/obseg/prop/Pdesk1Z.rz -d7138ff6afae7b3f785dab21f5bd1af973351806 build/u/assets/obseg/prop/Pdesk2Z.rz -211100f6b0ae17fdf3f40b1ddec931215a5339a9 build/u/assets/obseg/prop/Pdesk_arecibo1Z.rz -5a629142e471e6ea33a0dea73f196c6de5dd4fae build/u/assets/obseg/prop/Pdesk_lamp2Z.rz -a997fdf3f019cc72bae447f8cb3e7db9dce2647f build/u/assets/obseg/prop/Pdest_engineZ.rz -901072ef41a6ac18ac179fc01eccd703c941aac8 build/u/assets/obseg/prop/Pdest_exocetZ.rz -8e7f49356af363ac9f59ca47a3138141e2e61ed3 build/u/assets/obseg/prop/Pdest_gunZ.rz -cfed4b972ad0ba8a12b4d79c82cdc1fc20d3ada0 build/u/assets/obseg/prop/Pdest_harpoonZ.rz -126a989fc443a8dffc6c9981ee8ab6a49c088660 build/u/assets/obseg/prop/Pdest_seawolfZ.rz -1bc0cf115e6641db5a045d7cc7ed7533b7f61c15 build/u/assets/obseg/prop/Pdisc_readerZ.rz -8a53daad5b7cfa2c93766454b8f64c34113ec657 build/u/assets/obseg/prop/Pdisk_drive1Z.rz -de4d360db2d349566a4613832bfafb3690945e47 build/u/assets/obseg/prop/Pdoor_azt_chairZ.rz -286b519aefb0cdcd7276d9e13a3fabd3d4c168a1 build/u/assets/obseg/prop/Pdoor_azt_desk_topZ.rz -cc86bef39da6eb0c913b588ac4d27968a67779be build/u/assets/obseg/prop/Pdoor_azt_deskZ.rz -b0532135fc4535cd932a9b4c1d1015aa1ae35c45 build/u/assets/obseg/prop/Pdoor_aztecZ.rz -81a6b3ce0da8bc2224b3e6ea082d868fece7eedb build/u/assets/obseg/prop/PdoorconsoleZ.rz -6f930e2faf5f5c0a1d8bcc7a5aac7748a8f84064 build/u/assets/obseg/prop/Pdoor_dest1Z.rz -bae9c24abeb39de2faf0818ac268c99c9d38abe1 build/u/assets/obseg/prop/Pdoor_dest2Z.rz -33d49047b40858918b1d36057b47fea2add28ec9 build/u/assets/obseg/prop/Pdoor_eyelidZ.rz -49d9bae5725f9f29c8683a020bbda542550ea491 build/u/assets/obseg/prop/Pdoor_irisZ.rz -b3b6c9ac334e58929b9ad3333c7581dfca35bc3a build/u/assets/obseg/prop/Pdoor_mfZ.rz -87a08293c1c0225eab12d5d5b1d087a0b2b786c1 build/u/assets/obseg/prop/PdoorpanelZ.rz -ee45319d5141e141ce62387b74ff0efe93392c39 build/u/assets/obseg/prop/Pdoorprison1Z.rz -37f0b18cec567a7a1eb359d21aac06daf87b8ebe build/u/assets/obseg/prop/Pdoor_roller1Z.rz -3728ba926c472500c26b959acfe92f73d74e4f4c build/u/assets/obseg/prop/Pdoor_roller2Z.rz -7395bf6e4cad6f4279117bf2eef9882c2a06088a build/u/assets/obseg/prop/Pdoor_roller3Z.rz -ba9175f9106f51a2e1050315316b7a9cb10d1be2 build/u/assets/obseg/prop/Pdoor_roller4Z.rz -b2891525d7563d61b08217111738816fc9933fd6 build/u/assets/obseg/prop/Pdoor_rollertrainZ.rz -339cb20962e468a07a4ebbd451aa8192fc6b5477 build/u/assets/obseg/prop/Pdoor_st_arec1Z.rz -f51797012ad8ba5bd7d76b38168173156fcf3365 build/u/assets/obseg/prop/Pdoor_st_arec2Z.rz -98fc3f2ed2d1b33fa7e094169f1b76ed5442bb6b build/u/assets/obseg/prop/PdoorstatgateZ.rz -a46d9cc6256ba869ad65afbc6b21fe2baf288dff build/u/assets/obseg/prop/Pdoor_winZ.rz -8784c20d2e0c96718c565351217d82acde425668 build/u/assets/obseg/prop/PexplosionbitZ.rz -4f410a5fb8d55265c8d253ffd403ef3d02310930 build/u/assets/obseg/prop/Pfiling_cabinet1Z.rz -d6cf9d0cd0e3a542315115b5816cac8a0aca5e32 build/u/assets/obseg/prop/PflagZ.rz -656bd713f544cb21e84507a62cc1df54819be7e5 build/u/assets/obseg/prop/PfloppyZ.rz -48d34a4a277c8c1511ac171fb391510bacdc2cdf build/u/assets/obseg/prop/Pfnp90magZ.rz -e003bf7a964e006c12340fb39bf77f72bc0a2e09 build/u/assets/obseg/prop/PgasbarrelsZ.rz -f2fc7683df0be4c40f72ba43e0a19a528913f64e build/u/assets/obseg/prop/PgasbarrelZ.rz -2c133813f5e86d52dcc6298bffc062241a99fe8e build/u/assets/obseg/prop/Pgasplant_clear_doorZ.rz -e2b9210fe47e36c272e8da9ecd85ef08ac1c1693 build/u/assets/obseg/prop/Pgas_plant_met1_do1Z.rz -2e9e0d055a1626df18733c376ffabdd86e1e9c19 build/u/assets/obseg/prop/Pgas_plant_sw2_do1Z.rz -95c1ae4b3a8727e6b069893a8edaf64ce8b4074c build/u/assets/obseg/prop/Pgas_plant_sw3_do1Z.rz -d6e1930e9a37a0b1ebc31f5e922a0548a0310f6c build/u/assets/obseg/prop/Pgas_plant_sw4_do1Z.rz -84c73edbb8a6c081326b82138512dd37c5b0d7ac build/u/assets/obseg/prop/Pgas_plant_sw_do1Z.rz -cc6ea8962847407821ce9d6524b93a60a91bb546 build/u/assets/obseg/prop/Pgas_plant_wc_cub1Z.rz -0e30f5557856dcfd8de59bca5701f4f9a32199d6 build/u/assets/obseg/prop/PgastankZ.rz -556c8dbbfc61fb7fa2a3089d83dde4ce648becee build/u/assets/obseg/prop/Pglassware1Z.rz -1955874a3aaf2b0f2523512b3a60c89f74d01e45 build/u/assets/obseg/prop/Pglassware2Z.rz -d90967a0fe89d1272cb995abeb1211be3adeb260 build/u/assets/obseg/prop/Pglassware3Z.rz -9ac7cc3d8257c044bf4813190b8b16141159d900 build/u/assets/obseg/prop/Pglassware4Z.rz -5a010c4d3cecfa4ad6ad5ce8bbce93d42d34f2bc build/u/assets/obseg/prop/PgoldeneyelogoZ.rz -34ce4231e0b15248fe00afa2f3942a60130a36a2 build/u/assets/obseg/prop/PgoldenshellsZ.rz -a42f452e0bd4e14fe60cb36da6116252a23d73d6 build/u/assets/obseg/prop/PgroundgunZ.rz -02f1079d79a71772f8887c2fe5ad49dc35cbeb99 build/u/assets/obseg/prop/Pgun_runway1Z.rz -3b1863e731f6c3ea01d82130fa784650c4186447 build/u/assets/obseg/prop/PhatberetblueZ.rz -8ca616eea4153c755623653919b2cad5ca069618 build/u/assets/obseg/prop/PhatberetredZ.rz -9c3ab0c57b565478622ee836867cb74bb0b03f2c build/u/assets/obseg/prop/PhatberetZ.rz -7abb38ea05f1b8f40fe302e0b524a317cba83ea2 build/u/assets/obseg/prop/PhatchboltZ.rz -28264d220fbe42b177452227ed1c9c3eb5740d50 build/u/assets/obseg/prop/PhatchdoorZ.rz -7ecee115f8c60fca7ada06ce9aa1eb1b804caa8b build/u/assets/obseg/prop/PhatchsevxZ.rz -16158205592b1c8889c061d9f64352bea0735ffb build/u/assets/obseg/prop/PhatfurryblackZ.rz -ba3bfbb928333b282a77b8ab9758f053f4fa1d61 build/u/assets/obseg/prop/PhatfurrybrownZ.rz -6cca0fa84577202ed9174123e3b96986b06592f9 build/u/assets/obseg/prop/PhatfurryZ.rz -fc28d837964b1a4df0a600c38d6768b39c737e79 build/u/assets/obseg/prop/PhathelmetgreyZ.rz -fc28d837964b1a4df0a600c38d6768b39c737e79 build/u/assets/obseg/prop/PhathelmetZ.rz -5da0a340cb43add4bdb4c3887784778951c51fba build/u/assets/obseg/prop/PhatmoonZ.rz -75c9406f4fd0a9def9960041d02557ada166f962 build/u/assets/obseg/prop/PhatpeakedZ.rz -924d487f3d23db1ac64f126a53bf85368c239c38 build/u/assets/obseg/prop/PhattbirdbrownZ.rz -c86ddabbc803c8abe1426bad770c1841bb6dbf02 build/u/assets/obseg/prop/PhattbirdZ.rz -ae432772b3a63c574349b22ea4ec781b9ed2bd4a build/u/assets/obseg/prop/PhelicopterZ.rz -c5b649b54e76faa959f200ae6a8f617ca32da8b6 build/u/assets/obseg/prop/PhindZ.rz -5aee98c283bf804e218b4ba624711dc47eb9e324 build/u/assets/obseg/prop/PICBM_noseZ.rz -85b3b7ddc504f677f34fcf19a1981ff5bb788ce2 build/u/assets/obseg/prop/PICBMZ.rz -a2c816a8fa8676babf863f128444ebd1c8709450 build/u/assets/obseg/prop/PjeepZ.rz -d2cf22cec4c8822d6c1a46bddd7e36cb1db15005 build/u/assets/obseg/prop/Pjerry_can1Z.rz -8b51a83739b57ca366241a4c8ff7021cc5ec2884 build/u/assets/obseg/prop/Pjungle3_treeZ.rz -67a8b328bbac7b95f6eda9ae7658a9a392002007 build/u/assets/obseg/prop/Pjungle5_treeZ.rz -121476497db770189de227d518df5bad1a5a364d build/u/assets/obseg/prop/Pkeyboard1Z.rz -516a44d39dfd15c0fadecd59d2ed288bde942c8e build/u/assets/obseg/prop/Pkey_holderZ.rz -a240705e027946a4f785325e2339232ba2614c61 build/u/assets/obseg/prop/Pkit_units1Z.rz -f3d4175e66561a00907684e3e06782bc99214a1b build/u/assets/obseg/prop/PlabbenchZ.rz -a080365bc5d367519891a5630ae4cac0e79edb53 build/u/assets/obseg/prop/PlandmineZ.rz -1173d9437932a1708c6a5aeade54f5ade7396cf7 build/u/assets/obseg/prop/PlegalpageZ.rz -4c6b40fa6ba4d9af9268591d24840d4f61a22755 build/u/assets/obseg/prop/Pletter_tray1Z.rz -147d3bfa8724b658edbe41f15e358b880ce98285 build/u/assets/obseg/prop/Plocker3Z.rz -20c72969b5fb335fbe00a50eee9c3bbbe4797e36 build/u/assets/obseg/prop/Plocker4Z.rz -8aa572d5b6277c3d2349d107649fb523beaa5e9a build/u/assets/obseg/prop/Pm16magZ.rz -34ce4231e0b15248fe00afa2f3942a60130a36a2 build/u/assets/obseg/prop/PmagnumshellsZ.rz -0003b6420918af263fd72566b2ad3b8c7ac423fe build/u/assets/obseg/prop/Pmainframe1Z.rz -898a850dbd040de9744ee243b32e0a692e83c102 build/u/assets/obseg/prop/Pmainframe2Z.rz -0d8c5d21fae1da3c8ab62400577dea1c0f956ee8 build/u/assets/obseg/prop/Pmetal_chair1Z.rz -7378b896f71108f2a6e5ae9cd664108727cf1a68 build/u/assets/obseg/prop/Pmetal_crate1Z.rz -10eae6fc7a370086a8233e8701a37c50fe1e6df5 build/u/assets/obseg/prop/Pmetal_crate2Z.rz -8446219fede1d1051cc464163f67a1fb855e0aad build/u/assets/obseg/prop/Pmetal_crate3Z.rz -59992ce3b86a2c3409386104e22241337b5d0b1c build/u/assets/obseg/prop/Pmetal_crate4Z.rz -98f04d5f66f955e240c83eee4dfcdb215a0dae27 build/u/assets/obseg/prop/PmilcopterZ.rz -795a348667a2b225c78b2c9b2c1e689ca2fc83f3 build/u/assets/obseg/prop/PmiltruckZ.rz -cbe510e1e027b5a2f397916e6876271698d2949b build/u/assets/obseg/prop/Pmissile_rack2Z.rz -b3c8d8f3f1e540f1c15d70ae574b6c9b2e2c95af build/u/assets/obseg/prop/Pmissile_rackZ.rz -4b222c53e717cafd1adf0d22de66274035a0fd48 build/u/assets/obseg/prop/PmodemboxZ.rz -384f4ca54e45c7604d78ad476ea5212243717630 build/u/assets/obseg/prop/PmotorbikeZ.rz -8893e30d3ed416b0a7abf7a351e41c6db0047f9f build/u/assets/obseg/prop/Pmp5kmagZ.rz -206fe165677e1017d51811cf71dc613785390bd7 build/u/assets/obseg/prop/PnintendologoZ.rz -03d050d59abd3506221c556033cd29f7cc1e169d build/u/assets/obseg/prop/Poil_drum1Z.rz -3d597b5737baebab14e36751055a3f3572371973 build/u/assets/obseg/prop/Poil_drum2Z.rz -e0721dc8775b0ef76a37fd223c02fee44751b7ac build/u/assets/obseg/prop/Poil_drum3Z.rz -fc5d5521a8855cebf6f7cc365056ce6c5acf9fe8 build/u/assets/obseg/prop/Poil_drum5Z.rz -291d5f2d9c791ad63580bbd762cb2764a965698b build/u/assets/obseg/prop/Poil_drum6Z.rz -c7b853087ee4bd5d60c11a933eb3cc4409d08ea0 build/u/assets/obseg/prop/Poil_drum7Z.rz -98bc932e0d185e333bd1dd8bb3db801138f2bfff build/u/assets/obseg/prop/PpadlockZ.rz -52d0dde50bc167ebf111ee7c29e6a9e7068a9284 build/u/assets/obseg/prop/PpalmtreeZ.rz -1e7869410da4ca07ad0c26381f4619b0d192ad45 build/u/assets/obseg/prop/PpalmZ.rz -384218a7247dae38b7257c766cf9a5e160121cc3 build/u/assets/obseg/prop/Pphone1Z.rz -e351cdaba1b140ff5bb3fa38537d01e08c256a0e build/u/assets/obseg/prop/PplaneZ.rz -516514dc6fc028cf699986067151eb0b1c840d85 build/u/assets/obseg/prop/Pplant11Z.rz -0f3401c29089bfeb47b903fcfc39762d7628c75c build/u/assets/obseg/prop/Pplant1Z.rz -e26ea2f90e0552ed2a48dd115606d772d8c4b19c build/u/assets/obseg/prop/Pplant2bZ.rz -c4d15c254ca3f2e6c3bfdc0aaabdef4776dab369 build/u/assets/obseg/prop/Pplant2Z.rz -21f9dae12dc0012b1f18c5abfe073f947b213ef3 build/u/assets/obseg/prop/Pplant3Z.rz -d77254d65332db62b8f6a33aa73efa845ebf261c build/u/assets/obseg/prop/Pradio_unit1Z.rz -5ad719b39e981baf7c4c63491400bc64e6ef4a28 build/u/assets/obseg/prop/Pradio_unit2Z.rz -f5b00aa1806ba6e76ad8b966774d75f180be47fd build/u/assets/obseg/prop/Pradio_unit3Z.rz -e300fb1329c7fad869681ee2b9f41929a1c68ee6 build/u/assets/obseg/prop/Pradio_unit4Z.rz -ff85545b38a6cfd399427fdbb30f20f91788475d build/u/assets/obseg/prop/ProofgunZ.rz -2241db4f55d7b12c0e61fde1354f475331744aad build/u/assets/obseg/prop/PsafedoorZ.rz -1ef35b66cb4d37d299afbc2e5722e9cdb51ccfd3 build/u/assets/obseg/prop/PsafeZ.rz -c09312a1427b09601b65bb149d493ba9fb26ee36 build/u/assets/obseg/prop/Psat1_reflectZ.rz -af94ab124fb96e266c9ac7c3f17daa974e3497ad build/u/assets/obseg/prop/PsatboxZ.rz -e4d39e4d17af87747146fa0ac7b477c05921aca3 build/u/assets/obseg/prop/PsatdishZ.rz -00222a72095fa8661dc257f8c93ebe66a9b4a423 build/u/assets/obseg/prop/Psec_panelZ.rz -2e21c72ee14b8b3d1c4046badd7b3945a25cdfc0 build/u/assets/obseg/prop/PsevdishZ.rz -2b468664583be413f170d1aa92b6f7a8e9b41926 build/u/assets/obseg/prop/Psev_door3_windZ.rz -aa8146eca9cf8342bf4c5a38e0e0d1a105f1f70e build/u/assets/obseg/prop/Psev_door3Z.rz -ebea1e0c295de89318d6f5dc67bee59e99af9c8c build/u/assets/obseg/prop/Psev_door4_windZ.rz -46bb47b70c540d7f6240af1e30dd3746c2deabfc build/u/assets/obseg/prop/PsevdoormetslideZ.rz -8fcc17fe2baf21584b88f05c60d9caa25390270b build/u/assets/obseg/prop/PsevdoornowindZ.rz -14a52ff1e85678ee9e5e40d514cb1d8f6adf56f3 build/u/assets/obseg/prop/Psev_door_v1Z.rz -916e0d1e9111c4cd771381f4a00eefeb9a79954b build/u/assets/obseg/prop/PsevdoorwindZ.rz -916f76ae744262bc73e78a30bd71c5b2cd8d59f3 build/u/assets/obseg/prop/PsevdoorwoodZ.rz -b835643375b4d4dd1d5881cf83a171b0a6c55a88 build/u/assets/obseg/prop/Psev_doorZ.rz -820cdf9acf11be631c08bb3bdd5ae4954b0fbe9a build/u/assets/obseg/prop/Psev_trislideZ.rz -35afe4983f036c73150f5109eb312e2c30010158 build/u/assets/obseg/prop/Pshuttle_door_lZ.rz -47fc4d04d72566247b85f99c1e51c1f3bfc94169 build/u/assets/obseg/prop/Pshuttle_door_rZ.rz -364ae8c8790923254bc1e9bb81143d2022b5ea7c build/u/assets/obseg/prop/PshuttleZ.rz -beb6312c5f57f6bd92ee8032789e168887075b51 build/u/assets/obseg/prop/PsilencerZ.rz -4d37ff93dbab26d121bd89e6c6c09baa1cf1e63e build/u/assets/obseg/prop/Psilo_lift_doorZ.rz -5c6309bfa066923aabb3e1414b9105269037297e build/u/assets/obseg/prop/PsilotopdoorZ.rz -243d4c881dee25b2fda28914b818da565f912721 build/u/assets/obseg/prop/PskorpionmagZ.rz -e33f35e105668ee516e8529cd78b8ee18923e123 build/u/assets/obseg/prop/PspectremagZ.rz -cdd4695413243301d4c4c432cb9efadde56f5466 build/u/assets/obseg/prop/PspeedboatZ.rz -dd533eaa13217ee7376805b1183419af547804cd build/u/assets/obseg/prop/Psteel_door1Z.rz -93bf8e62a8dd883a86c42f8c8a849aafcb0976f6 build/u/assets/obseg/prop/Psteel_door2bZ.rz -5ca1be9726ed628f6898b314a11249e70e3abf98 build/u/assets/obseg/prop/Psteel_door2Z.rz -436b72c264efd8096fe8314179fed247cbf35a68 build/u/assets/obseg/prop/Psteel_door3Z.rz -96fd876bf57746d8b7e3173ba46ca6331cc9eba5 build/u/assets/obseg/prop/Pstool1Z.rz -2e195c7f43bacdce47748463195315a31a2ca13d build/u/assets/obseg/prop/Pst_pete_room_1iZ.rz -3834c2c467767a567808ea403cf135633a3bbe0e build/u/assets/obseg/prop/Pst_pete_room_2iZ.rz -f18012733716c4b57671fe0910c1a7a35998faee build/u/assets/obseg/prop/Pst_pete_room_3tZ.rz -e25026747ddfcd7e1c67c22171f5f16fb2052423 build/u/assets/obseg/prop/Pst_pete_room_5cZ.rz -63a2c155f24b85f697e2aaf0c8bc36f66ed0c069 build/u/assets/obseg/prop/Pst_pete_room_6cZ.rz -3a1850ef5f5bea2e9d305abd798d9a353f50f31a build/u/assets/obseg/prop/Pswipe_card2Z.rz -49ab87bb92fb8de8d7623defc66dc3eb5f51371d build/u/assets/obseg/prop/Pswivel_chair1Z.rz -7b4a1b175e7330d421fba457e8cd67f30bf2d443 build/u/assets/obseg/prop/PtankZ.rz -621d2101d8b786c05babbab01785fc71cd4034b0 build/u/assets/obseg/prop/PtigerZ.rz -1cb5c8d6e906b205438124a1aa8907983b02a665 build/u/assets/obseg/prop/Ptorpedo_rackZ.rz -fed08fceceba194a55e768f1da10c6c81454e912 build/u/assets/obseg/prop/Ptrain_door2Z.rz -fc40bf32e6c84030a29ce66cc6669774826ab715 build/u/assets/obseg/prop/Ptrain_door3Z.rz -2e9a68f410ba065c04f863d494018bd921926d6d build/u/assets/obseg/prop/Ptrain_doorZ.rz -5fc76342f5ef7ed857242c94e18f12552642dec1 build/u/assets/obseg/prop/PtrainextdoorZ.rz -1b617b746861b7e1b7e8d2ea035818da2ba8d8ff build/u/assets/obseg/prop/Ptt33magZ.rz -7670eb91189b54367ac9560b1d79c3920b969f62 build/u/assets/obseg/prop/Ptuning_console1Z.rz -e54c8c3c851a95328763b97f8e91873b1756ca6b build/u/assets/obseg/prop/Ptv1Z.rz -ba6a13398223e6a1df2ef36c1353e34b982405c7 build/u/assets/obseg/prop/Ptv4screenZ.rz -153e208f38c3f3f1003e71c2f19096ae8f5c5fe0 build/u/assets/obseg/prop/Ptv_holderZ.rz -f43d2d289a7ec56294cf106e08ce8c424dce7045 build/u/assets/obseg/prop/PtvscreenZ.rz -1b617b746861b7e1b7e8d2ea035818da2ba8d8ff build/u/assets/obseg/prop/PuzimagZ.rz -b33e1172f1df27c0d3a202fa9f7d9e1508be8795 build/u/assets/obseg/prop/PvertdoorZ.rz -689304bf94706ed5548c5f3ae8b01eb029de80c1 build/u/assets/obseg/prop/PwalletbondZ.rz -12b0aa0f799f1c862c546384836425dfef1038d3 build/u/assets/obseg/prop/Pwindow_cor11Z.rz -1586d97008e2cb08e32d19eb0241fb63b7f9de31 build/u/assets/obseg/prop/Pwindow_lib_lg1Z.rz -8e41ec1ec0205a49e67afd500748dc23d488544a build/u/assets/obseg/prop/Pwindow_lib_sm1Z.rz -1af98965b6ec2b72692bd4367c27be8e5ad86001 build/u/assets/obseg/prop/PwindowZ.rz -46179f458487fa1c078eead2c4f240834a5430e7 build/u/assets/obseg/prop/Pwooden_table1Z.rz -0dede30c6597abf9d323ef1000c4e5c6af6b2572 build/u/assets/obseg/prop/Pwood_lg_crate1Z.rz -fb26c8df927215e040cdc26c500e801fbb352284 build/u/assets/obseg/prop/Pwood_lg_crate2Z.rz -20e3c758e106aa23e8c1d7cb8c243c2b265feb55 build/u/assets/obseg/prop/Pwood_md_crate3Z.rz -d8c49a50961abc831d2da42cb88dd0d697505365 build/u/assets/obseg/prop/Pwood_sm_crate4Z.rz -004092671498a15e117497ae8ce03c8905d57225 build/u/assets/obseg/prop/Pwood_sm_crate5Z.rz -edfc1aa7a254fd088baa26af6e6ca34f26f62410 build/u/assets/obseg/prop/Pwood_sm_crate6Z.rz -1b617b746861b7e1b7e8d2ea035818da2ba8d8ff build/u/assets/obseg/prop/PwppkmagZ.rz -6e8f5362ddc8693f08f7d1b9b891a3605260091a build/u/assets/obseg/setup/Ump_setupameZ.bin -135309100d487866728a772fcee41bd1a7d32307 build/u/assets/obseg/setup/Ump_setuparchZ.bin -d24c40d624cf618a9b2005d44b0773beee518bb8 build/u/assets/obseg/setup/Ump_setuparkZ.bin -0ff8f7489183dc45e5275f86640d399e6089b6c6 build/u/assets/obseg/setup/Ump_setupashZ.bin -5c5fae8c6d1fae09d06649ceb5a03706c5a437fd build/u/assets/obseg/setup/Ump_setupcaveZ.bin -164a2b14e483f4263848e8049f5b308374d80374 build/u/assets/obseg/setup/Ump_setupcradZ.bin -4c9df15982ba5412a239706cdb6f0faf0c26372a build/u/assets/obseg/setup/Ump_setupcrypZ.bin -250cb7c27cbe2481919d28fe2a293eebe6ec533e build/u/assets/obseg/setup/Ump_setupdishZ.bin -de863e1ec1680c47e2b1b816ec0dd6ab2fcd3a01 build/u/assets/obseg/setup/Ump_setupimpZ.bin -01ac6a13aabf8c1feaf99ffd76a68a5f1e5dfd31 build/u/assets/obseg/setup/Ump_setupoatZ.bin -fd742b3a738e626d525fedf07f52d96baecf4350 build/u/assets/obseg/setup/Ump_setuprefZ.bin -b8af7288bf8714778b3927ace108a36e26c1c816 build/u/assets/obseg/setup/Ump_setupsevbZ.bin -17465deaa7487abcc2a71c302ad46c1b48e0d8bd build/u/assets/obseg/setup/Ump_setupstatueZ.bin -83f1ee70257597dcfefea2b2332e02e09e25744e build/u/assets/obseg/setup/UsetuparchZ.bin -2fc4e7a287a722015b3017f0e120f0aababfdabd build/u/assets/obseg/setup/UsetuparkZ.bin -df7b79bafb3c8fe64eb3cc0bbd0d8f98ac484000 build/u/assets/obseg/setup/UsetupaztZ.bin -e2ff50d38e2820749f5146ef4c937a02f124d1db build/u/assets/obseg/setup/UsetupcaveZ.bin -6467d349200fef2616c546bb10a7b9a179b96f1e build/u/assets/obseg/setup/UsetupcontrolZ.bin -2ca9a22ceba5789e28e94abff5813a9e43a8dd93 build/u/assets/obseg/setup/UsetupcradZ.bin -cfab4ccea0345d4ea776fdbbd4a8c0d8b5728291 build/u/assets/obseg/setup/UsetupcrypZ.bin -7f20d446c1642eaee235270eebcf2f616b08d747 build/u/assets/obseg/setup/UsetupdamZ.bin -e2590d18a27d2f200f6ba1f0fc9b7d2a50fc3689 build/u/assets/obseg/setup/UsetupdepoZ.bin -f9d4e73fd37ff8b386b26829229cb7744d3171cb build/u/assets/obseg/setup/UsetupdestZ.bin -882cb011b234eb161b1c20a01781bdbd215643e6 build/u/assets/obseg/setup/UsetupjunZ.bin -a721d9fa06ca7f3d3034f6635b7cd5cf6c3e74f1 build/u/assets/obseg/setup/UsetuplenZ.bin -9c2176603a9399bc81c9e3872d5f40be75688020 build/u/assets/obseg/setup/UsetuppeteZ.bin -717f3f232a5a8bc1161ed02efc29017bc0db90c1 build/u/assets/obseg/setup/UsetuprunZ.bin -81d25a8c99d3548308439431caee84a760d7936b build/u/assets/obseg/setup/UsetupsevbZ.bin -ce3bafe8c0bddbc9aebd73e25c74a10691f08805 build/u/assets/obseg/setup/UsetupsevbunkerZ.bin -0363d286e296352e130843f5a738e94e9b60591b build/u/assets/obseg/setup/UsetupsevxZ.bin -92f2523abbfb1045e1ca2f466c878584e3d88f4f build/u/assets/obseg/setup/UsetupsevxbZ.bin -2653a45e5896405b712c4833f940c04c8c374ee6 build/u/assets/obseg/setup/UsetupsiloZ.bin -feaf57ece1967b948f82fa8ccf9e11b5ecfc183e build/u/assets/obseg/setup/UsetupstatueZ.bin -6bd0a8f5d4239ffb6ed6447e37757bdfd378c8c5 build/u/assets/obseg/setup/UsetuptraZ.bin -24fcc05a10ca8c469b91ad96ccc1629cf1839e31 build/u/assets/obseg/stan/Tbg_ame_all_p_stanZ.rz -3ddcc6b7e165581bd1af28ec3c6aece0b47d603c build/u/assets/obseg/stan/Tbg_arch_all_p_stanZ.rz -85b6892dbf7a32162c5f9b44d8c44a5b326ce24a build/u/assets/obseg/stan/Tbg_arec_all_p_stanZ.rz -e393f11ce7b36ec736cc7d75fada248a8c4265e8 build/u/assets/obseg/stan/Tbg_ark_all_p_stanZ.rz -24fcc05a10ca8c469b91ad96ccc1629cf1839e31 build/u/assets/obseg/stan/Tbg_ash_all_p_stanZ.rz -67b245c1e47c7c7d53b5d2153a077c6f02c63f8f build/u/assets/obseg/stan/Tbg_azt_all_p_stanZ.rz -455ae812ba0d9ace3c87572b3c590e58cec433a1 build/u/assets/obseg/stan/Tbg_cat_all_p_stanZ.rz -a00ddc18ea5f75e5342fff61f52dc1f53bc3cb2c build/u/assets/obseg/stan/Tbg_cave_all_p_stanZ.rz -ec6bc7a7b19c4953a10ea7a44528afc8c09aed0b build/u/assets/obseg/stan/Tbg_crad_all_p_stanZ.rz -1edf16ca074c81917a2f2b1aed5460453f0edb48 build/u/assets/obseg/stan/Tbg_cryp_all_p_stanZ.rz -3c944606999d5e2316dbe45b04daeeb5cbced585 build/u/assets/obseg/stan/Tbg_dam_all_p_stanZ.rz -a440675a0ff260dfd2c41a4984286de641d517b6 build/u/assets/obseg/stan/Tbg_depo_all_p_stanZ.rz -d10d3bfe0fa92967f91d8b77bd3210343ee1b0b8 build/u/assets/obseg/stan/Tbg_dest_all_p_stanZ.rz -6fb48be8c3022533091dc9edc04ca08e04b308dd build/u/assets/obseg/stan/Tbg_dish_all_p_stanZ.rz -24fcc05a10ca8c469b91ad96ccc1629cf1839e31 build/u/assets/obseg/stan/Tbg_imp_all_p_stanZ.rz -bf7b863521161a9db74953925bf1c182d33290d2 build/u/assets/obseg/stan/Tbg_jun_all_p_stanZ.rz -834418ec489e3a9a76cabe80fc06f8e2a791669a build/u/assets/obseg/stan/Tbg_len_all_p_stanZ.rz -d1d2fca3ed0f771a0f8b2088e344950cfc5b8fe5 build/u/assets/obseg/stan/Tbg_oat_all_p_stanZ.rz -52a85442acd16e453cea3a45b4649cf3b01ab938 build/u/assets/obseg/stan/Tbg_pete_all_p_stanZ.rz -fe6a8c3d4fd636f27dcc7dbd64c7f6e69b73d22d build/u/assets/obseg/stan/Tbg_ref_all_p_stanZ.rz -f3bb4c13dc6536e810a12e085555c240a10a5ffa build/u/assets/obseg/stan/Tbg_run_all_p_stanZ.rz -deea2b623cd44d5d3516097974f0bc00da4f301d build/u/assets/obseg/stan/Tbg_sev_all_p_stanZ.rz -2d1ab00f67e942a89d5bb12b66a7a7242240a65e build/u/assets/obseg/stan/Tbg_sevb_all_p_stanZ.rz -1f6ae696d72f724995f081d25e690a864a5bc787 build/u/assets/obseg/stan/Tbg_sevx_all_p_stanZ.rz -f8be7e1cfc191d98baab043177ad1ceb52dd9d71 build/u/assets/obseg/stan/Tbg_silo_all_p_stanZ.rz -663cc4efe0fe54bf3beb498ee197da7a920087e1 build/u/assets/obseg/stan/Tbg_stat_all_p_stanZ.rz -cd8fd1127f581b40995432ed0e7bae3180de124e build/u/assets/obseg/stan/Tbg_tra_all_p_stanZ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LameJ.rz -4b42a2b400e1a99c7a8829b5831e2dc3ac6fb481 build/u/assets/obseg/text/LarchJ.rz -18b868041daaa1bb6c56604df2877b87d7e93889 build/u/assets/obseg/text/LarecJ.rz -88c00e32b48efdff45bc755588e7624180acb2b3 build/u/assets/obseg/text/LarkJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LashJ.rz -d1a05e2251ef35714f71a1d45da3e42833b37f8c build/u/assets/obseg/text/LaztJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LcatJ.rz -91bdedec92781311c7684ed38c990c65627a4bdb build/u/assets/obseg/text/LcaveJ.rz -7e60f7b5e885ebf62d5251541e7ac86dae5bc098 build/u/assets/obseg/text/LcradJ.rz -60881c82ae3ad246ae298853c52f3b0140d5a432 build/u/assets/obseg/text/LcrypJ.rz -28cd92fdb3675d15ff7c27e2ab1b04f9f2c970b9 build/u/assets/obseg/text/LdamJ.rz -304a520376abe230392ae4c9bb4658ef3a73492a build/u/assets/obseg/text/LdepoJ.rz -97effbee5010c03d167516e61a9b090f6f5ca5a5 build/u/assets/obseg/text/LdestJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LdishJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LearJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LeldJ.rz -ee8313a9add1a157e20b195f875531151d78e548 build/u/assets/obseg/text/LgunJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LimpJ.rz -115570ad2cabbe45298f386d7d7d3cf5e5e3f6bb build/u/assets/obseg/text/LjunJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LleeJ.rz -ee3e0e083aa72dbc0c5bfa6ee338c6017f651392 build/u/assets/obseg/text/LlenJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LlipJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LlueJ.rz -5d1078704c180c7ff18b3d03722346b58388d12b build/u/assets/obseg/text/LmiscJ.rz -1f05a624d03a0174dd6e4a3a02eb67b0148b9281 build/u/assets/obseg/text/LmpmenuJ.rz -75daaa6b8d6ca7be2da402828a1d44d5984a01a7 build/u/assets/obseg/text/LmpweaponsJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LoatJ.rz -8a7518d427d6514a2757fb6a87be56f5c06c3256 build/u/assets/obseg/text/LoptionsJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LpamJ.rz -8cd9d295dd8864411b9a7a2a77a519b48379ed34 build/u/assets/obseg/text/LpeteJ.rz -a78d3c66a36c3219309c348ea244b18fbe878b33 build/u/assets/obseg/text/LpropobjJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LrefJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LritJ.rz -5f6c5fffa9672b87110970e97968f3c7dbee05b0 build/u/assets/obseg/text/LrunJ.rz -2f2fb2f32c161cb0159397594e3114aa4e2167a9 build/u/assets/obseg/text/LsevbJ.rz -8edab9f382ef8cbb4dbf76750402d023f0bfaa0a build/u/assets/obseg/text/LsevJ.rz -27a7c4ce5287197af9b94aabcbda46ac8c906638 build/u/assets/obseg/text/LsevxbJ.rz -2a8279f76cb6a2373563ccd596b40cf9784fadff build/u/assets/obseg/text/LsevxJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LshoJ.rz -2015997236e7728ed43d4df36046a004d37812d0 build/u/assets/obseg/text/LsiloJ.rz -5ffbd3850020a70b2138a8736bea7b41da19effa build/u/assets/obseg/text/LstatJ.rz -d8d597dd9a27e21aef20461d41900c9192df6aab build/u/assets/obseg/text/LtitleJ.rz -86c64fc63b52a7788788c6369ff9b76242ddf729 build/u/assets/obseg/text/LtraJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LwaxJ.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LameE.rz -6c106630029b88174cff1cc7f56b2298b3fbc39c build/u/assets/obseg/text/LarchE.rz -921fe7353bf7f2e8a81e767db7e274d33ec1916c build/u/assets/obseg/text/LarecE.rz -f81ed00f844e467b8e23fe84200721918b5a8dff build/u/assets/obseg/text/LarkE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LashE.rz -0a894be764bef383de3ab7404176c4357d539189 build/u/assets/obseg/text/LaztE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LcatE.rz -2d47eea98a60a4cef3d48d880f312e4e6a89525d build/u/assets/obseg/text/LcaveE.rz -ebab5425f0f2b37d63b75b761c3b95216b6a8b59 build/u/assets/obseg/text/LcradE.rz -93621ad86b317babd86ebbe27a42f2838a3730f8 build/u/assets/obseg/text/LcrypE.rz -a4e9c61b537989761919856aec5fd72dc45a2100 build/u/assets/obseg/text/LdamE.rz -43f95f24e9ed53bda5850891f4d8475547aec4db build/u/assets/obseg/text/LdepoE.rz -80d55727d8645f6444be5ff4b60b8e20a62119a5 build/u/assets/obseg/text/LdestE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LdishE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LearE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LeldE.rz -d462ce46a4327d1d5b50264a3c74584e359f39ad build/u/assets/obseg/text/LgunE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LimpE.rz -194e7412c4587e753fcf5da272a71f72479501fc build/u/assets/obseg/text/LjunE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LleeE.rz -9ee69e89e1b07a70333e8ae6ff4463cc09484be0 build/u/assets/obseg/text/LlenE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LlipE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LlueE.rz -210a82f40bdaf5439d3fe2b52b452cbd905609a6 build/u/assets/obseg/text/LmiscE.rz -f54ad9a04d118034b94909b94ace06620e14b1ed build/u/assets/obseg/text/LmpmenuE.rz -98c4f26813968ee3664bd00e061249adab3be273 build/u/assets/obseg/text/LmpweaponsE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LoatE.rz -28741d21da37a013a3991c668d14fc14db36c48d build/u/assets/obseg/text/LoptionsE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LpamE.rz -1af509ee2ce444951d694ed4c57282c387a11e46 build/u/assets/obseg/text/LpeteE.rz -c9f1f0d308227dec50c91ba7a9961124b0db41eb build/u/assets/obseg/text/LpropobjE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LrefE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LritE.rz -f87abac9936df099fbc6f9ec9dfc4dde79080a24 build/u/assets/obseg/text/LrunE.rz -e335aeae15a7f02b23cc6801fb74257e3332e86b build/u/assets/obseg/text/LsevbE.rz -6058b1230318a6af86fe1849322c7597f9c72041 build/u/assets/obseg/text/LsevE.rz -6aacfb70424ee6d3c42927f7f87e4780164417d7 build/u/assets/obseg/text/LsevxbE.rz -a0433f9905bd1afe88bea18264c072917c47175d build/u/assets/obseg/text/LsevxE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LshoE.rz -d7c9db38149e31b965861f9bd800a36c8a21a9c8 build/u/assets/obseg/text/LsiloE.rz -d18559b543a41e70e3d28ecb89ddd04c45d6e5ea build/u/assets/obseg/text/LstatE.rz -20aa214af1ccaf5b990d9992164073aac273e518 build/u/assets/obseg/text/LtitleE.rz -bfd7e0384e87790bfeeab6a09a51df79d5928721 build/u/assets/obseg/text/LtraE.rz -6a358a7f0cf4ea87bae5c11c79118d7f2c4772d6 build/u/assets/obseg/text/LwaxE.rz diff --git a/diff.py b/diff.py deleted file mode 100755 index abb9eac..0000000 --- a/diff.py +++ /dev/null @@ -1,1507 +0,0 @@ -#!/usr/bin/env python3 -# PYTHON_ARGCOMPLETE_OK -import argparse -import sys -from typing import ( - Any, - Dict, - List, - Match, - NamedTuple, - NoReturn, - Optional, - Set, - Tuple, - Union, -) - - -def fail(msg: str) -> NoReturn: - print(msg, file=sys.stderr) - sys.exit(1) - - -# Prefer to use diff_settings.py from the current working directory -sys.path.insert(0, ".") -try: - import diff_settings -except ModuleNotFoundError: - fail("Unable to find diff_settings.py in the same directory.") -sys.path.pop(0) - -# ==== COMMAND-LINE ==== - -try: - import argcomplete # type: ignore -except ModuleNotFoundError: - argcomplete = None - -parser = argparse.ArgumentParser(description="Diff MIPS or AArch64 assembly.") - -start_argument = parser.add_argument( - "start", - help="Function name or address to start diffing from.", -) - -if argcomplete: - - def complete_symbol( - prefix: str, parsed_args: argparse.Namespace, **kwargs: object - ) -> List[str]: - if not prefix or prefix.startswith("-"): - # skip reading the map file, which would - # result in a lot of useless completions - return [] - config: Dict[str, Any] = {} - diff_settings.apply(config, parsed_args) # type: ignore - mapfile = config.get("mapfile") - if not mapfile: - return [] - completes = [] - with open(mapfile) as f: - data = f.read() - # assume symbols are prefixed by a space character - search = f" {prefix}" - pos = data.find(search) - while pos != -1: - # skip the space character in the search string - pos += 1 - # assume symbols are suffixed by either a space - # character or a (unix-style) line return - spacePos = data.find(" ", pos) - lineReturnPos = data.find("\n", pos) - if lineReturnPos == -1: - endPos = spacePos - elif spacePos == -1: - endPos = lineReturnPos - else: - endPos = min(spacePos, lineReturnPos) - if endPos == -1: - match = data[pos:] - pos = -1 - else: - match = data[pos:endPos] - pos = data.find(search, endPos) - completes.append(match) - return completes - - setattr(start_argument, "completer", complete_symbol) - -parser.add_argument( - "end", - nargs="?", - help="Address to end diff at.", -) -parser.add_argument( - "-o", - dest="diff_obj", - action="store_true", - help="Diff .o files rather than a whole binary. This makes it possible to " - "see symbol names. (Recommended)", -) -parser.add_argument( - "-e", - "--elf", - dest="diff_elf_symbol", - metavar="SYMBOL", - help="Diff a given function in two ELFs, one being stripped and the other " - "one non-stripped. Requires objdump from binutils 2.33+.", -) -parser.add_argument( - "--source", - action="store_true", - help="Show source code (if possible). Only works with -o and -e.", -) -parser.add_argument( - "--inlines", - action="store_true", - help="Show inline function calls (if possible). Only works with -o and -e.", -) -parser.add_argument( - "--base-asm", - dest="base_asm", - metavar="FILE", - help="Read assembly from given file instead of configured base img.", -) -parser.add_argument( - "--write-asm", - dest="write_asm", - metavar="FILE", - help="Write the current assembly output to file, e.g. for use with --base-asm.", -) -parser.add_argument( - "-m", - "--make", - dest="make", - action="store_true", - help="Automatically run 'make' on the .o file or binary before diffing.", -) -parser.add_argument( - "-l", - "--skip-lines", - dest="skip_lines", - type=int, - default=0, - metavar="LINES", - help="Skip the first N lines of output.", -) -parser.add_argument( - "-s", - "--stop-jr-ra", - dest="stop_jrra", - action="store_true", - help="Stop disassembling at the first 'jr ra'. Some functions have multiple return points, so use with care!", -) -parser.add_argument( - "-i", - "--ignore-large-imms", - dest="ignore_large_imms", - action="store_true", - help="Pretend all large enough immediates are the same.", -) -parser.add_argument( - "-I", - "--ignore-addr-diffs", - action="store_true", - help="Ignore address differences. Currently only affects AArch64.", -) -parser.add_argument( - "-B", - "--no-show-branches", - dest="show_branches", - action="store_false", - help="Don't visualize branches/branch targets.", -) -parser.add_argument( - "-S", - "--base-shift", - dest="base_shift", - type=str, - default="0", - help="Diff position X in our img against position X + shift in the base img. " - 'Arithmetic is allowed, so e.g. |-S "0x1234 - 0x4321"| is a reasonable ' - "flag to pass if it is known that position 0x1234 in the base img syncs " - "up with position 0x4321 in our img. Not supported together with -o.", -) -parser.add_argument( - "-w", - "--watch", - dest="watch", - action="store_true", - help="Automatically update when source/object files change. " - "Recommended in combination with -m.", -) -parser.add_argument( - "-3", - "--threeway=prev", - dest="threeway", - action="store_const", - const="prev", - help="Show a three-way diff between target asm, current asm, and asm " - "prior to -w rebuild. Requires -w.", -) -parser.add_argument( - "-b", - "--threeway=base", - dest="threeway", - action="store_const", - const="base", - help="Show a three-way diff between target asm, current asm, and asm " - "when diff.py was started. Requires -w.", -) -parser.add_argument( - "--width", - dest="column_width", - type=int, - default=50, - help="Sets the width of the left and right view column.", -) -parser.add_argument( - "--algorithm", - dest="algorithm", - default="levenshtein", - choices=["levenshtein", "difflib"], - help="Diff algorithm to use. Levenshtein gives the minimum diff, while difflib " - "aims for long sections of equal opcodes. Defaults to %(default)s.", -) -parser.add_argument( - "--max-size", - "--max-lines", - dest="max_lines", - type=int, - default=1024, - help="The maximum length of the diff, in lines.", -) - -# Project-specific flags, e.g. different versions/make arguments. -add_custom_arguments_fn = getattr(diff_settings, "add_custom_arguments", None) -if add_custom_arguments_fn: - add_custom_arguments_fn(parser) - -if argcomplete: - argcomplete.autocomplete(parser) - -# ==== IMPORTS ==== - -# (We do imports late to optimize auto-complete performance.) - -import re -import os -import ast -import subprocess -import difflib -import string -import itertools -import threading -import queue -import time - - -MISSING_PREREQUISITES = ( - "Missing prerequisite python module {}. " - "Run `python3 -m pip install --user colorama ansiwrap watchdog python-Levenshtein cxxfilt` to install prerequisites (cxxfilt only needed with --source)." -) - -try: - from colorama import Fore, Style, Back # type: ignore - import ansiwrap # type: ignore - import watchdog # type: ignore -except ModuleNotFoundError as e: - fail(MISSING_PREREQUISITES.format(e.name)) - -# ==== CONFIG ==== - -args = parser.parse_args() - -# Set imgs, map file and make flags in a project-specific manner. -config: Dict[str, Any] = {} -diff_settings.apply(config, args) # type: ignore - -arch: str = config.get("arch", "mips") -baseimg: Optional[str] = config.get("baseimg") -myimg: Optional[str] = config.get("myimg") -mapfile: Optional[str] = config.get("mapfile") -makeflags: List[str] = config.get("makeflags", []) -source_directories: Optional[List[str]] = config.get("source_directories") -objdump_executable: Optional[str] = config.get("objdump_executable") - -MAX_FUNCTION_SIZE_LINES: int = args.max_lines -MAX_FUNCTION_SIZE_BYTES: int = MAX_FUNCTION_SIZE_LINES * 4 - -COLOR_ROTATION: List[str] = [ - Fore.MAGENTA, - Fore.CYAN, - Fore.GREEN, - Fore.RED, - Fore.LIGHTYELLOW_EX, - Fore.LIGHTMAGENTA_EX, - Fore.LIGHTCYAN_EX, - Fore.LIGHTGREEN_EX, - Fore.LIGHTBLACK_EX, -] - -BUFFER_CMD: List[str] = ["tail", "-c", str(10 ** 9)] -LESS_CMD: List[str] = ["less", "-SRic", "-#6"] - -DEBOUNCE_DELAY: float = 0.1 -FS_WATCH_EXTENSIONS: List[str] = [".c", ".h"] - -# ==== LOGIC ==== - -ObjdumpCommand = Tuple[List[str], str, Optional[str]] - -if args.algorithm == "levenshtein": - try: - import Levenshtein # type: ignore - except ModuleNotFoundError as e: - fail(MISSING_PREREQUISITES.format(e.name)) - -if args.source: - try: - import cxxfilt # type: ignore - except ModuleNotFoundError as e: - fail(MISSING_PREREQUISITES.format(e.name)) - -if args.threeway and not args.watch: - fail("Threeway diffing requires -w.") - -if objdump_executable is None: - for objdump_cand in ["mips-linux-gnu-objdump", "mips64-elf-objdump"]: - try: - subprocess.check_call( - [objdump_cand, "--version"], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - ) - objdump_executable = objdump_cand - break - except subprocess.CalledProcessError: - pass - except FileNotFoundError: - pass - -if not objdump_executable: - fail( - "Missing binutils; please ensure mips-linux-gnu-objdump or mips64-elf-objdump exist, or configure objdump_executable." - ) - - -def maybe_eval_int(expr: str) -> Optional[int]: - try: - ret = ast.literal_eval(expr) - if not isinstance(ret, int): - raise Exception("not an integer") - return ret - except Exception: - return None - - -def eval_int(expr: str, emsg: str) -> int: - ret = maybe_eval_int(expr) - if ret is None: - fail(emsg) - return ret - - -def eval_line_num(expr: str) -> int: - return int(expr.strip().replace(":", ""), 16) - - -def run_make(target: str) -> None: - subprocess.check_call(["make"] + makeflags + [target]) - - -def run_make_capture_output(target: str) -> "subprocess.CompletedProcess[bytes]": - return subprocess.run( - ["make"] + makeflags + [target], - stderr=subprocess.PIPE, - stdout=subprocess.PIPE, - ) - - -def restrict_to_function(dump: str, fn_name: str) -> str: - out: List[str] = [] - search = f"<{fn_name}>:" - found = False - for line in dump.split("\n"): - if found: - if len(out) >= MAX_FUNCTION_SIZE_LINES: - break - out.append(line) - elif search in line: - found = True - return "\n".join(out) - - -def maybe_get_objdump_source_flags() -> List[str]: - if not args.source: - return [] - - flags = [ - "--source", - "--source-comment=│ ", - "-l", - ] - - if args.inlines: - flags.append("--inlines") - - return flags - - -def run_objdump(cmd: ObjdumpCommand) -> str: - flags, target, restrict = cmd - assert objdump_executable, "checked previously" - out = subprocess.check_output( - [objdump_executable] + arch_flags + flags + [target], universal_newlines=True - ) - if restrict is not None: - return restrict_to_function(out, restrict) - return out - - -base_shift: int = eval_int( - args.base_shift, "Failed to parse --base-shift (-S) argument as an integer." -) - - -def search_map_file(fn_name: str) -> Tuple[Optional[str], Optional[int]]: - if not mapfile: - fail(f"No map file configured; cannot find function {fn_name}.") - - try: - with open(mapfile) as f: - lines = f.read().split("\n") - except Exception: - fail(f"Failed to open map file {mapfile} for reading.") - - try: - cur_objfile = None - ram_to_rom = None - cands = [] - last_line = "" - for line in lines: - if line.startswith(" .text"): - cur_objfile = line.split()[3] - if "load address" in line: - tokens = last_line.split() + line.split() - ram = int(tokens[1], 0) - rom = int(tokens[5], 0) - ram_to_rom = rom - ram - if line.endswith(" " + fn_name): - ram = int(line.split()[0], 0) - if cur_objfile is not None and ram_to_rom is not None: - cands.append((cur_objfile, ram + ram_to_rom)) - last_line = line - except Exception as e: - import traceback - - traceback.print_exc() - fail(f"Internal error while parsing map file") - - if len(cands) > 1: - fail(f"Found multiple occurrences of function {fn_name} in map file.") - if len(cands) == 1: - return cands[0] - return None, None - - -def dump_elf() -> Tuple[str, ObjdumpCommand, ObjdumpCommand]: - if not baseimg or not myimg: - fail("Missing myimg/baseimg in config.") - if base_shift: - fail("--base-shift not compatible with -e") - - start_addr = eval_int(args.start, "Start address must be an integer expression.") - - if args.end is not None: - end_addr = eval_int(args.end, "End address must be an integer expression.") - else: - end_addr = start_addr + MAX_FUNCTION_SIZE_BYTES - - flags1 = [ - f"--start-address={start_addr}", - f"--stop-address={end_addr}", - ] - - flags2 = [ - f"--disassemble={args.diff_elf_symbol}", - ] - - objdump_flags = ["-drz", "-j", ".text"] - return ( - myimg, - (objdump_flags + flags1, baseimg, None), - (objdump_flags + flags2 + maybe_get_objdump_source_flags(), myimg, None), - ) - - -def dump_objfile() -> Tuple[str, ObjdumpCommand, ObjdumpCommand]: - if base_shift: - fail("--base-shift not compatible with -o") - if args.end is not None: - fail("end address not supported together with -o") - if args.start.startswith("0"): - fail("numerical start address not supported with -o; pass a function name") - - objfile, _ = search_map_file(args.start) - if not objfile: - fail("Not able to find .o file for function.") - - if args.make: - run_make(objfile) - - if not os.path.isfile(objfile): - fail(f"Not able to find .o file for function: {objfile} is not a file.") - - refobjfile = "expected/" + objfile - if not os.path.isfile(refobjfile): - fail(f'Please ensure an OK .o file exists at "{refobjfile}".') - - objdump_flags = ["-drz"] - return ( - objfile, - (objdump_flags, refobjfile, args.start), - (objdump_flags + maybe_get_objdump_source_flags(), objfile, args.start), - ) - - -def dump_binary() -> Tuple[str, ObjdumpCommand, ObjdumpCommand]: - if not baseimg or not myimg: - fail("Missing myimg/baseimg in config.") - if args.make: - run_make(myimg) - start_addr = maybe_eval_int(args.start) - if start_addr is None: - _, start_addr = search_map_file(args.start) - if start_addr is None: - fail("Not able to find function in map file.") - if args.end is not None: - end_addr = eval_int(args.end, "End address must be an integer expression.") - else: - end_addr = start_addr + MAX_FUNCTION_SIZE_BYTES - objdump_flags = ["-Dz", "-bbinary", "-EB"] - flags1 = [ - f"--start-address={start_addr + base_shift}", - f"--stop-address={end_addr + base_shift}", - ] - flags2 = [f"--start-address={start_addr}", f"--stop-address={end_addr}"] - return ( - myimg, - (objdump_flags + flags1, baseimg, None), - (objdump_flags + flags2, myimg, None), - ) - - -def ansi_ljust(s: str, width: int) -> str: - """Like s.ljust(width), but accounting for ANSI colors.""" - needed: int = width - ansiwrap.ansilen(s) - if needed > 0: - return s + " " * needed - else: - return s - - -if arch == "mips": - re_int = re.compile(r"[0-9]+") - re_comment = re.compile(r"<.*?>") - re_reg = re.compile( - r"\$?\b(a[0-3]|t[0-9]|s[0-8]|at|v[01]|f[12]?[0-9]|f3[01]|k[01]|fp|ra)\b" - ) - re_sprel = re.compile(r"(?<=,)([0-9]+|0x[0-9a-f]+)\(sp\)") - re_large_imm = re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}") - re_imm = re.compile(r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(sp)|%(lo|hi)\([^)]*\)") - forbidden = set(string.ascii_letters + "_") - arch_flags = ["-m", "mips:4300"] - branch_likely_instructions = { - "beql", - "bnel", - "beqzl", - "bnezl", - "bgezl", - "bgtzl", - "blezl", - "bltzl", - "bc1tl", - "bc1fl", - } - branch_instructions = branch_likely_instructions.union( - { - "b", - "beq", - "bne", - "beqz", - "bnez", - "bgez", - "bgtz", - "blez", - "bltz", - "bc1t", - "bc1f", - } - ) - instructions_with_address_immediates = branch_instructions.union({"jal", "j"}) -elif arch == "aarch64": - re_int = re.compile(r"[0-9]+") - re_comment = re.compile(r"(<.*?>|//.*$)") - # GPRs and FP registers: X0-X30, W0-W30, [DSHQ]0..31 - # The zero registers and SP should not be in this list. - re_reg = re.compile(r"\$?\b([dshq][12]?[0-9]|[dshq]3[01]|[xw][12]?[0-9]|[xw]30)\b") - re_sprel = re.compile(r"sp, #-?(0x[0-9a-fA-F]+|[0-9]+)\b") - re_large_imm = re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}") - re_imm = re.compile(r"(? str: - full = pat.group(0) - if len(full) <= 1: - # leave one-digit ints alone - return full - start, end = pat.span() - if start and row[start - 1] in forbidden: - return full - if end < len(row) and row[end] in forbidden: - return full - return hex(int(full)) - - -def parse_relocated_line(line: str) -> Tuple[str, str, str]: - try: - ind2 = line.rindex(",") - except ValueError: - ind2 = line.rindex("\t") - before = line[: ind2 + 1] - after = line[ind2 + 1 :] - ind2 = after.find("(") - if ind2 == -1: - imm, after = after, "" - else: - imm, after = after[:ind2], after[ind2:] - if imm == "0x0": - imm = "0" - return before, imm, after - - -def process_mips_reloc(row: str, prev: str) -> str: - before, imm, after = parse_relocated_line(prev) - repl = row.split()[-1] - if imm != "0": - # MIPS uses relocations with addends embedded in the code as immediates. - # If there is an immediate, show it as part of the relocation. Ideally - # we'd show this addend in both %lo/%hi, but annoyingly objdump's output - # doesn't include enough information to pair up %lo's and %hi's... - # TODO: handle unambiguous cases where all addends for a symbol are the - # same, or show "+???". - mnemonic = prev.split()[0] - if mnemonic in instructions_with_address_immediates and not imm.startswith("0x"): - imm = "0x" + imm - repl += "+" + imm if int(imm, 0) > 0 else imm - if "R_MIPS_LO16" in row: - repl = f"%lo({repl})" - elif "R_MIPS_HI16" in row: - # Ideally we'd pair up R_MIPS_LO16 and R_MIPS_HI16 to generate a - # correct addend for each, but objdump doesn't give us the order of - # the relocations, so we can't find the right LO16. :( - repl = f"%hi({repl})" - else: - assert "R_MIPS_26" in row, f"unknown relocation type '{row}'" - return before + repl + after - - -def pad_mnemonic(line: str) -> str: - if "\t" not in line: - return line - mn, args = line.split("\t", 1) - return f"{mn:<7s} {args}" - - -class Line(NamedTuple): - mnemonic: str - diff_row: str - original: str - normalized_original: str - line_num: str - branch_target: Optional[str] - source_lines: List[str] - comment: Optional[str] - - -class DifferenceNormalizer: - def normalize(self, mnemonic: str, row: str) -> str: - """This should be called exactly once for each line.""" - row = self._normalize_arch_specific(mnemonic, row) - if args.ignore_large_imms: - row = re.sub(re_large_imm, "", row) - return row - - def _normalize_arch_specific(self, mnemonic: str, row: str) -> str: - return row - - -class DifferenceNormalizerAArch64(DifferenceNormalizer): - def __init__(self) -> None: - super().__init__() - self._adrp_pair_registers: Set[str] = set() - - def _normalize_arch_specific(self, mnemonic: str, row: str) -> str: - if args.ignore_addr_diffs: - row = self._normalize_adrp_differences(mnemonic, row) - row = self._normalize_bl(mnemonic, row) - return row - - def _normalize_bl(self, mnemonic: str, row: str) -> str: - if mnemonic != "bl": - return row - - row, _ = split_off_branch(row) - return row - - def _normalize_adrp_differences(self, mnemonic: str, row: str) -> str: - """Identifies ADRP + LDR/ADD pairs that are used to access the GOT and - suppresses any immediate differences. - - Whenever an ADRP is seen, the destination register is added to the set of registers - that are part of an ADRP + LDR/ADD pair. Registers are removed from the set as soon - as they are used for an LDR or ADD instruction which completes the pair. - - This method is somewhat crude but should manage to detect most such pairs. - """ - row_parts = row.split("\t", 1) - if mnemonic == "adrp": - self._adrp_pair_registers.add(row_parts[1].strip().split(",")[0]) - row, _ = split_off_branch(row) - elif mnemonic == "ldr": - for reg in self._adrp_pair_registers: - # ldr xxx, [reg] - # ldr xxx, [reg, ] - if f", [{reg}" in row_parts[1]: - self._adrp_pair_registers.remove(reg) - return normalize_imms(row) - elif mnemonic == "add": - for reg in self._adrp_pair_registers: - # add reg, reg, - if row_parts[1].startswith(f"{reg}, {reg}, "): - self._adrp_pair_registers.remove(reg) - return normalize_imms(row) - - return row - - -def make_difference_normalizer() -> DifferenceNormalizer: - if arch == "aarch64": - return DifferenceNormalizerAArch64() - return DifferenceNormalizer() - - -def process(lines: List[str]) -> List[Line]: - normalizer = make_difference_normalizer() - skip_next = False - source_lines = [] - if not args.diff_obj: - lines = lines[7:] - if lines and not lines[-1]: - lines.pop() - - output: List[Line] = [] - stop_after_delay_slot = False - for row in lines: - if args.diff_obj and (">:" in row or not row): - continue - - if args.source and (row and row[0] != " "): - source_lines.append(row) - continue - - if "R_AARCH64_" in row: - # TODO: handle relocation - continue - - if "R_MIPS_" in row: - # N.B. Don't transform the diff rows, they already ignore immediates - # if output[-1].diff_row != "": - # output[-1] = output[-1].replace(diff_row=process_mips_reloc(row, output[-1].row_with_imm)) - new_original = process_mips_reloc(row, output[-1].original) - output[-1] = output[-1]._replace(original=new_original) - continue - - m_comment = re.search(re_comment, row) - comment = m_comment[0] if m_comment else None - row = re.sub(re_comment, "", row) - row = row.rstrip() - tabs = row.split("\t") - row = "\t".join(tabs[2:]) - line_num = tabs[0].strip() - row_parts = row.split("\t", 1) - mnemonic = row_parts[0].strip() - if mnemonic not in instructions_with_address_immediates: - row = re.sub(re_int, lambda m: hexify_int(row, m), row) - original = row - normalized_original = normalizer.normalize(mnemonic, original) - if skip_next: - skip_next = False - row = "" - mnemonic = "" - if mnemonic in branch_likely_instructions: - skip_next = True - row = re.sub(re_reg, "", row) - row = re.sub(re_sprel, "addr(sp)", row) - row_with_imm = row - if mnemonic in instructions_with_address_immediates: - row = row.strip() - row, _ = split_off_branch(row) - row += "" - else: - row = normalize_imms(row) - - branch_target = None - if mnemonic in branch_instructions: - target = row_parts[1].strip().split(",")[-1] - if mnemonic in branch_likely_instructions: - target = hex(int(target, 16) - 4)[2:] - branch_target = target.strip() - - output.append( - Line( - mnemonic=mnemonic, - diff_row=row, - original=original, - normalized_original=normalized_original, - line_num=line_num, - branch_target=branch_target, - source_lines=source_lines, - comment=comment, - ) - ) - source_lines = [] - - if args.stop_jrra and mnemonic == "jr" and row_parts[1].strip() == "ra": - stop_after_delay_slot = True - elif stop_after_delay_slot: - break - - return output - - -def format_single_line_diff(line1: str, line2: str, column_width: int) -> str: - return ansi_ljust(line1, column_width) + line2 - - -class SymbolColorer: - symbol_colors: Dict[str, str] - - def __init__(self, base_index: int) -> None: - self.color_index = base_index - self.symbol_colors = {} - - def color_symbol(self, s: str, t: Optional[str] = None) -> str: - try: - color = self.symbol_colors[s] - except: - color = COLOR_ROTATION[self.color_index % len(COLOR_ROTATION)] - self.color_index += 1 - self.symbol_colors[s] = color - t = t or s - return f"{color}{t}{Fore.RESET}" - - -def normalize_imms(row: str) -> str: - return re.sub(re_imm, "", row) - - -def normalize_stack(row: str) -> str: - return re.sub(re_sprel, "addr(sp)", row) - - -def split_off_branch(line: str) -> Tuple[str, str]: - parts = line.split(",") - if len(parts) < 2: - parts = line.split(None, 1) - off = len(line) - len(parts[-1]) - return line[:off], line[off:] - - -def color_imms(out1: str, out2: str) -> Tuple[str, str]: - # Call re_imm.sub() and record the calls made to the callback. - # We will assume they happen in the same order further down, when - # we do re_imm.sub() on the same input but with a different callback. - # (Swithing to re_imm.finditer would be cleaner...) - g1 = [] - g2 = [] - re_imm.sub(lambda m: g1.append(m.group()) or "", out1) # type: ignore - re_imm.sub(lambda m: g2.append(m.group()) or "", out2) # type: ignore - if len(g1) == len(g2): - diffs = [x != y for (x, y) in zip(g1, g2)] - it = iter(diffs) - - def maybe_color(s: str) -> str: - return f"{Fore.LIGHTBLUE_EX}{s}{Style.RESET_ALL}" if next(it) else s - - out1 = re_imm.sub(lambda m: maybe_color(m.group()), out1) - it = iter(diffs) - out2 = re_imm.sub(lambda m: maybe_color(m.group()), out2) - return out1, out2 - - -def color_branch_imms(br1: str, br2: str) -> Tuple[str, str]: - if br1 != br2: - br1 = f"{Fore.LIGHTBLUE_EX}{br1}{Style.RESET_ALL}" - br2 = f"{Fore.LIGHTBLUE_EX}{br2}{Style.RESET_ALL}" - return br1, br2 - - -def diff_sequences_difflib( - seq1: List[str], seq2: List[str] -) -> List[Tuple[str, int, int, int, int]]: - differ = difflib.SequenceMatcher(a=seq1, b=seq2, autojunk=False) - return differ.get_opcodes() - - -def diff_sequences( - seq1: List[str], seq2: List[str] -) -> List[Tuple[str, int, int, int, int]]: - if ( - args.algorithm != "levenshtein" - or len(seq1) * len(seq2) > 4 * 10 ** 8 - or len(seq1) + len(seq2) >= 0x110000 - ): - return diff_sequences_difflib(seq1, seq2) - - # The Levenshtein library assumes that we compare strings, not lists. Convert. - # (Per the check above we know we have fewer than 0x110000 unique elements, so chr() works.) - remapping: Dict[str, str] = {} - - def remap(seq: List[str]) -> str: - seq = seq[:] - for i in range(len(seq)): - val = remapping.get(seq[i]) - if val is None: - val = chr(len(remapping)) - remapping[seq[i]] = val - seq[i] = val - return "".join(seq) - - rem1 = remap(seq1) - rem2 = remap(seq2) - return Levenshtein.opcodes(rem1, rem2) # type: ignore - - -def diff_lines( - lines1: List[Line], - lines2: List[Line], -) -> List[Tuple[Optional[Line], Optional[Line]]]: - ret = [] - for (tag, i1, i2, j1, j2) in diff_sequences( - [line.mnemonic for line in lines1], - [line.mnemonic for line in lines2], - ): - for line1, line2 in itertools.zip_longest(lines1[i1:i2], lines2[j1:j2]): - if tag == "replace": - if line1 is None: - tag = "insert" - elif line2 is None: - tag = "delete" - elif tag == "insert": - assert line1 is None - elif tag == "delete": - assert line2 is None - ret.append((line1, line2)) - - return ret - - -class OutputLine: - base: Optional[str] - fmt2: str - key2: Optional[str] - - def __init__(self, base: Optional[str], fmt2: str, key2: Optional[str]) -> None: - self.base = base - self.fmt2 = fmt2 - self.key2 = key2 - - def __eq__(self, other: object) -> bool: - if not isinstance(other, OutputLine): - return NotImplemented - return self.key2 == other.key2 - - def __hash__(self) -> int: - return hash(self.key2) - - -def do_diff(basedump: str, mydump: str) -> List[OutputLine]: - output: List[OutputLine] = [] - - lines1 = process(basedump.split("\n")) - lines2 = process(mydump.split("\n")) - - sc1 = SymbolColorer(0) - sc2 = SymbolColorer(0) - sc3 = SymbolColorer(4) - sc4 = SymbolColorer(4) - sc5 = SymbolColorer(0) - sc6 = SymbolColorer(0) - bts1: Set[str] = set() - bts2: Set[str] = set() - - if args.show_branches: - for (lines, btset, sc) in [ - (lines1, bts1, sc5), - (lines2, bts2, sc6), - ]: - for line in lines: - bt = line.branch_target - if bt is not None: - btset.add(bt + ":") - sc.color_symbol(bt + ":") - - for (line1, line2) in diff_lines(lines1, lines2): - line_color1 = line_color2 = sym_color = Fore.RESET - line_prefix = " " - if line1 and line2 and line1.diff_row == line2.diff_row: - if line1.normalized_original == line2.normalized_original: - out1 = line1.original - out2 = line2.original - elif line1.diff_row == "": - out1 = f"{Style.BRIGHT}{Fore.LIGHTBLACK_EX}{line1.original}" - out2 = f"{Style.BRIGHT}{Fore.LIGHTBLACK_EX}{line2.original}" - else: - mnemonic = line1.original.split()[0] - out1, out2 = line1.original, line2.original - branch1 = branch2 = "" - if mnemonic in instructions_with_address_immediates: - out1, branch1 = split_off_branch(line1.original) - out2, branch2 = split_off_branch(line2.original) - branchless1 = out1 - branchless2 = out2 - out1, out2 = color_imms(out1, out2) - - same_relative_target = False - if line1.branch_target is not None and line2.branch_target is not None: - relative_target1 = eval_line_num(line1.branch_target) - eval_line_num(line1.line_num) - relative_target2 = eval_line_num(line2.branch_target) - eval_line_num(line2.line_num) - same_relative_target = relative_target1 == relative_target2 - - if not same_relative_target: - branch1, branch2 = color_branch_imms(branch1, branch2) - - out1 += branch1 - out2 += branch2 - if normalize_imms(branchless1) == normalize_imms(branchless2): - if not same_relative_target: - # only imms differences - sym_color = Fore.LIGHTBLUE_EX - line_prefix = "i" - else: - out1 = re.sub( - re_sprel, lambda m: sc3.color_symbol(m.group()), out1, - ) - out2 = re.sub( - re_sprel, lambda m: sc4.color_symbol(m.group()), out2, - ) - if normalize_stack(branchless1) == normalize_stack(branchless2): - # only stack differences (luckily stack and imm - # differences can't be combined in MIPS, so we - # don't have to think about that case) - sym_color = Fore.YELLOW - line_prefix = "s" - else: - # regs differences and maybe imms as well - out1 = re.sub( - re_reg, lambda m: sc1.color_symbol(m.group()), out1 - ) - out2 = re.sub( - re_reg, lambda m: sc2.color_symbol(m.group()), out2 - ) - line_color1 = line_color2 = sym_color = Fore.YELLOW - line_prefix = "r" - elif line1 and line2: - line_prefix = "|" - line_color1 = Fore.LIGHTBLUE_EX - line_color2 = Fore.LIGHTBLUE_EX - sym_color = Fore.LIGHTBLUE_EX - out1 = line1.original - out2 = line2.original - elif line1: - line_prefix = "<" - line_color1 = sym_color = Fore.RED - out1 = line1.original - out2 = "" - elif line2: - line_prefix = ">" - line_color2 = sym_color = Fore.GREEN - out1 = "" - out2 = line2.original - - if args.source and line2 and line2.comment: - out2 += f" {line2.comment}" - - def format_part( - out: str, - line: Optional[Line], - line_color: str, - btset: Set[str], - sc: SymbolColorer, - ) -> Optional[str]: - if line is None: - return None - in_arrow = " " - out_arrow = "" - if args.show_branches: - if line.line_num in btset: - in_arrow = sc.color_symbol(line.line_num, "~>") + line_color - if line.branch_target is not None: - out_arrow = " " + sc.color_symbol(line.branch_target + ":", "~>") - out = pad_mnemonic(out) - return f"{line_color}{line.line_num} {in_arrow} {out}{Style.RESET_ALL}{out_arrow}" - - part1 = format_part(out1, line1, line_color1, bts1, sc5) - part2 = format_part(out2, line2, line_color2, bts2, sc6) - key2 = line2.original if line2 else None - - mid = f"{sym_color}{line_prefix}" - - if line2: - for source_line in line2.source_lines: - color = Style.DIM - # File names and function names - if source_line and source_line[0] != "│": - color += Style.BRIGHT - # Function names - if source_line.endswith("():"): - # Underline. Colorama does not provide this feature, unfortunately. - color += "\u001b[4m" - try: - source_line = cxxfilt.demangle( - source_line[:-3], external_only=False - ) - except: - pass - output.append( - OutputLine( - None, - f" {color}{source_line}{Style.RESET_ALL}", - source_line, - ) - ) - - fmt2 = mid + " " + (part2 or "") - output.append(OutputLine(part1, fmt2, key2)) - - return output - - -def chunk_diff(diff: List[OutputLine]) -> List[Union[List[OutputLine], OutputLine]]: - cur_right: List[OutputLine] = [] - chunks: List[Union[List[OutputLine], OutputLine]] = [] - for output_line in diff: - if output_line.base is not None: - chunks.append(cur_right) - chunks.append(output_line) - cur_right = [] - else: - cur_right.append(output_line) - chunks.append(cur_right) - return chunks - - -def format_diff( - old_diff: List[OutputLine], new_diff: List[OutputLine] -) -> Tuple[str, List[str]]: - old_chunks = chunk_diff(old_diff) - new_chunks = chunk_diff(new_diff) - output: List[Tuple[str, OutputLine, OutputLine]] = [] - assert len(old_chunks) == len(new_chunks), "same target" - empty = OutputLine("", "", None) - for old_chunk, new_chunk in zip(old_chunks, new_chunks): - if isinstance(old_chunk, list): - assert isinstance(new_chunk, list) - if not old_chunk and not new_chunk: - # Most of the time lines sync up without insertions/deletions, - # and there's no interdiffing to be done. - continue - differ = difflib.SequenceMatcher(a=old_chunk, b=new_chunk, autojunk=False) - for (tag, i1, i2, j1, j2) in differ.get_opcodes(): - if tag in ["equal", "replace"]: - for i, j in zip(range(i1, i2), range(j1, j2)): - output.append(("", old_chunk[i], new_chunk[j])) - if tag in ["insert", "replace"]: - for j in range(j1 + i2 - i1, j2): - output.append(("", empty, new_chunk[j])) - if tag in ["delete", "replace"]: - for i in range(i1 + j2 - j1, i2): - output.append(("", old_chunk[i], empty)) - else: - assert isinstance(new_chunk, OutputLine) - assert new_chunk.base - # old_chunk.base and new_chunk.base have the same text since - # both diffs are based on the same target, but they might - # differ in color. Use the new version. - output.append((new_chunk.base, old_chunk, new_chunk)) - - # TODO: status line, with e.g. approximate permuter score? - width = args.column_width - if args.threeway: - header_line = "TARGET".ljust(width) + " CURRENT".ljust(width) + " PREVIOUS" - diff_lines = [ - ansi_ljust(base, width) - + ansi_ljust(new.fmt2, width) - + (old.fmt2 or "-" if old != new else "") - for (base, old, new) in output - ] - else: - header_line = "" - diff_lines = [ - ansi_ljust(base, width) + new.fmt2 - for (base, old, new) in output - if base or new.key2 is not None - ] - return header_line, diff_lines - - -def debounced_fs_watch( - targets: List[str], - outq: "queue.Queue[Optional[float]]", - debounce_delay: float, -) -> None: - import watchdog.events # type: ignore - import watchdog.observers # type: ignore - - class WatchEventHandler(watchdog.events.FileSystemEventHandler): # type: ignore - def __init__( - self, queue: "queue.Queue[float]", file_targets: List[str] - ) -> None: - self.queue = queue - self.file_targets = file_targets - - def on_modified(self, ev: object) -> None: - if isinstance(ev, watchdog.events.FileModifiedEvent): - self.changed(ev.src_path) - - def on_moved(self, ev: object) -> None: - if isinstance(ev, watchdog.events.FileMovedEvent): - self.changed(ev.dest_path) - - def should_notify(self, path: str) -> bool: - for target in self.file_targets: - if path == target: - return True - if args.make and any( - path.endswith(suffix) for suffix in FS_WATCH_EXTENSIONS - ): - return True - return False - - def changed(self, path: str) -> None: - if self.should_notify(path): - self.queue.put(time.time()) - - def debounce_thread() -> NoReturn: - listenq: "queue.Queue[float]" = queue.Queue() - file_targets: List[str] = [] - event_handler = WatchEventHandler(listenq, file_targets) - observer = watchdog.observers.Observer() - observed = set() - for target in targets: - if os.path.isdir(target): - observer.schedule(event_handler, target, recursive=True) - else: - file_targets.append(target) - target = os.path.dirname(target) or "." - if target not in observed: - observed.add(target) - observer.schedule(event_handler, target) - observer.start() - while True: - t = listenq.get() - more = True - while more: - delay = t + debounce_delay - time.time() - if delay > 0: - time.sleep(delay) - # consume entire queue - more = False - try: - while True: - t = listenq.get(block=False) - more = True - except queue.Empty: - pass - outq.put(t) - - th = threading.Thread(target=debounce_thread, daemon=True) - th.start() - - -class Display: - basedump: str - mydump: str - emsg: Optional[str] - last_diff_output: Optional[List[OutputLine]] - pending_update: Optional[Tuple[str, bool]] - ready_queue: "queue.Queue[None]" - watch_queue: "queue.Queue[Optional[float]]" - less_proc: "Optional[subprocess.Popen[bytes]]" - - def __init__(self, basedump: str, mydump: str) -> None: - self.basedump = basedump - self.mydump = mydump - self.emsg = None - self.last_diff_output = None - - def run_less(self) -> "Tuple[subprocess.Popen[bytes], subprocess.Popen[bytes]]": - if self.emsg is not None: - output = self.emsg - else: - diff_output = do_diff(self.basedump, self.mydump) - last_diff_output = self.last_diff_output or diff_output - if args.threeway != "base" or not self.last_diff_output: - self.last_diff_output = diff_output - header, diff_lines = format_diff(last_diff_output, diff_output) - header_lines = [header] if header else [] - output = "\n".join(header_lines + diff_lines[args.skip_lines :]) - - # Pipe the output through 'tail' and only then to less, to ensure the - # write call doesn't block. ('tail' has to buffer all its input before - # it starts writing.) This also means we don't have to deal with pipe - # closure errors. - buffer_proc = subprocess.Popen( - BUFFER_CMD, stdin=subprocess.PIPE, stdout=subprocess.PIPE - ) - less_proc = subprocess.Popen(LESS_CMD, stdin=buffer_proc.stdout) - assert buffer_proc.stdin - assert buffer_proc.stdout - buffer_proc.stdin.write(output.encode()) - buffer_proc.stdin.close() - buffer_proc.stdout.close() - return (buffer_proc, less_proc) - - def run_sync(self) -> None: - proca, procb = self.run_less() - procb.wait() - proca.wait() - - def run_async(self, watch_queue: "queue.Queue[Optional[float]]") -> None: - self.watch_queue = watch_queue - self.ready_queue = queue.Queue() - self.pending_update = None - dthread = threading.Thread(target=self.display_thread) - dthread.start() - self.ready_queue.get() - - def display_thread(self) -> None: - proca, procb = self.run_less() - self.less_proc = procb - self.ready_queue.put(None) - while True: - ret = procb.wait() - proca.wait() - self.less_proc = None - if ret != 0: - # fix the terminal - os.system("tput reset") - if ret != 0 and self.pending_update is not None: - # killed by program with the intent to refresh - msg, error = self.pending_update - self.pending_update = None - if not error: - self.mydump = msg - self.emsg = None - else: - self.emsg = msg - proca, procb = self.run_less() - self.less_proc = procb - self.ready_queue.put(None) - else: - # terminated by user, or killed - self.watch_queue.put(None) - self.ready_queue.put(None) - break - - def progress(self, msg: str) -> None: - # Write message to top-left corner - sys.stdout.write("\x1b7\x1b[1;1f{}\x1b8".format(msg + " ")) - sys.stdout.flush() - - def update(self, text: str, error: bool) -> None: - if not error and not self.emsg and text == self.mydump: - self.progress("Unchanged. ") - return - self.pending_update = (text, error) - if not self.less_proc: - return - self.less_proc.kill() - self.ready_queue.get() - - def terminate(self) -> None: - if not self.less_proc: - return - self.less_proc.kill() - self.ready_queue.get() - - -def main() -> None: - if args.diff_elf_symbol: - make_target, basecmd, mycmd = dump_elf() - elif args.diff_obj: - make_target, basecmd, mycmd = dump_objfile() - else: - make_target, basecmd, mycmd = dump_binary() - - if args.write_asm is not None: - mydump = run_objdump(mycmd) - with open(args.write_asm, "w") as f: - f.write(mydump) - print(f"Wrote assembly to {args.write_asm}.") - sys.exit(0) - - if args.base_asm is not None: - with open(args.base_asm) as f: - basedump = f.read() - else: - basedump = run_objdump(basecmd) - - mydump = run_objdump(mycmd) - - display = Display(basedump, mydump) - - if not args.watch: - display.run_sync() - else: - if not args.make: - yn = input( - "Warning: watch-mode (-w) enabled without auto-make (-m). " - "You will have to run make manually. Ok? (Y/n) " - ) - if yn.lower() == "n": - return - if args.make: - watch_sources = None - watch_sources_for_target_fn = getattr( - diff_settings, "watch_sources_for_target", None - ) - if watch_sources_for_target_fn: - watch_sources = watch_sources_for_target_fn(make_target) - watch_sources = watch_sources or source_directories - if not watch_sources: - fail("Missing source_directories config, don't know what to watch.") - else: - watch_sources = [make_target] - q: "queue.Queue[Optional[float]]" = queue.Queue() - debounced_fs_watch(watch_sources, q, DEBOUNCE_DELAY) - display.run_async(q) - last_build = 0.0 - try: - while True: - t = q.get() - if t is None: - break - if t < last_build: - continue - last_build = time.time() - if args.make: - display.progress("Building...") - ret = run_make_capture_output(make_target) - if ret.returncode != 0: - display.update( - ret.stderr.decode("utf-8-sig", "replace") - or ret.stdout.decode("utf-8-sig", "replace"), - error=True, - ) - continue - mydump = run_objdump(mycmd) - display.update(mydump, error=False) - except KeyboardInterrupt: - display.terminate() - - -main() diff --git a/ge007.ld b/ge007.ld index d4a7ae1..5131c92 100644 --- a/ge007.ld +++ b/ge007.ld @@ -222,22 +222,12 @@ SECTIONS _bssSegmentEnd = ADDR(.bss) + SIZEOF(.bss); _bssSegmentSize = SIZEOF(.bss); - _roombufSegmentStart = ADDR(.roombuf); - .roombuf (NOLOAD) : - { - build/OUTCODE/src/game/room_model_buffer.o (.bss); - } - _roombufSegmentEnd = ADDR(.roombuf) + SIZEOF(.roombuf); - - _decompbufSegmentStart = ADDR(.decompbuf); - .decompbuf 0x80300000 : - { - build/OUTCODE/src/decompressbuffer.o (.bss); - } - _decompbufSegmentEnd = ADDR(.decompbuf) + SIZEOF(.decompbuf); - _stacksSegmentStart = ADDR(.stacks); - .stacks (NOLOAD) : +#if defined(VERSION_EU) + .stacks 0x803A1AB0 : +#else + .stacks 0x803AB400 : +#endif { build/OUTCODE/src/stacks.o (.bss); } diff --git a/include/CPPLib.h b/include/CPPLib.h index 00e8c3d..6cae4b0 100644 --- a/include/CPPLib.h +++ b/include/CPPLib.h @@ -21,11 +21,16 @@ #define PLUS() + #define ZERO() 0 #define ONE() 1 - -#define EXPAND(a) a -#define EAT(x) #define STR(n) #n +#ifdef __sgi +# define EXPAND(a) a +# define EAT(x) +#else +# define EXPAND(...) __VA_ARGS__ +# define EAT(x, ...) __VA_ARGS__ +#endif + /** * Force the pre-processor to expand the macro a large number of times. Usage: @@ -87,7 +92,11 @@ #define EVAL8(a) EVAL4(EVAL2(EVAL1(a))) #define EVAL4(a) EVAL2(EVAL1(a)) #define EVAL2(a) EVAL1(a) -#define EVAL1(VA) IF_VA(EXPAND(DEFER(IS_PAREN)(VA)))(DEFER(EXPAND_ARGS_STACK)) VA +#ifdef __sgi +# define EVAL1(VA) IF_VA(EXPAND(DEFER(IS_PAREN)(VA)))(DEFER(EXPAND_ARGS_STACK)) VA +#else +# define EVAL1(...) __VA_ARGS__ +#endif /** * Causes a function-style macro to require an additional pass to be expanded. @@ -181,15 +190,29 @@ #define CAT(a, b) PRIMITIVECAT(a, b) #define PRIMITIVECAT(a, b) a##b -/** - * Get the first argument and ignore the rest. - */ -#define FIRST_PRE_VA(a) a +#ifdef __sgi + /** + * Get the first argument and ignore the rest. + */ + #define FIRST_PRE_VA(a) a +#else + /** + * Get the first argument and ignore the rest. + */ + # define FIRST_PRE_VA(a,...) a +#endif -/** - * Get the second argument and ignore the rest. - */ -#define SECOND_PRE_VA(a, b) b +#ifdef __sgi + /** + * Get the second argument and ignore the rest. + */ + # define SECOND_PRE_VA(a, b) b +#else + /** + * Get the second argument and ignore the rest. + */ + # define SECOND_PRE_VA(a, b,...) b +#endif /** * Expects a single input (not containing commas). Returns 1 if the input is @@ -200,42 +223,54 @@ * This macro abuses the fact that PROBE() contains a comma while other valid * inputs must not. */ -#define IS_PROBE(a) SECOND_PRE_VA(a, 0) -#define PROBE() ~, 1 - -/** - * Detect Parenthesis - * @return TRUE/FALSE - */ -#define IS_PAREN(x) IS_PROBE(IS_PAREN_PROBE x) -#define IS_PAREN_PROBE(A) PROBE(~) - -#ifdef EXPAND_EXAMPLES - IS_PAREN((S)) // Expands to 1 - IS_PAREN(xxx) // Expands to 0 +#ifdef __sgi +# define IS_PROBE(a) SECOND_PRE_VA(a, 0) +# define PROBE() ~, 1 +#else +# define IS_PROBE(...) SECOND_PRE_VA(__VA_ARGS__,0) +# define PROBE(...) ~, 1, __VA_ARGS__ #endif /** - * Detects if arg or macro is defined as nothing. + * Detect Parenthesis + * @return TRUE/FALSE + */ + +#ifdef __sgi +# define IS_PAREN(x) IS_PROBE(IS_PAREN_PROBE x) +# define IS_PAREN_PROBE(A) PROBE(~) +#else +# define IS_PAREN(...) IS_PROBE(IS_PAREN_PROBE __VA_ARGS__) +# define IS_PAREN_PROBE(...) PROBE(~) __VA_ARGS__ +#endif + +#ifdef EXPAND_EXAMPLES + //IS PAREN + IS_PAREN((S)) // IS...((s)) Expands to 1 + IS_PAREN(xxx) // IS...(xxx) Expands to 0 +#endif + +/** + * Detects if arg or macro is defined as nothing. */ #define IS_EMPTY(x) _IS_EMPTY(x) #define _IS_EMPTY(x) IS_PROBE(CAT(_IS_EMPTY, _##x##_)) #define _IS_EMPTY__ PROBE(~) /*NULL*/ /** - * Detects if arg or macro is a Bool (1 or 0). + * Detects if arg or macro is a Bool (1 or 0). * Use _IS_BOOL to prevent first expansion (TRUE/FALSE macro) * @return TRUE/FALSE */ #define IS_BOOL(x) _IS_BOOL(x) #define _IS_BOOL(x) IS_PROBE(CAT(_IS_BOOL, _##x##_)) #define _IS_BOOL_TRUE_ PROBE(~) -#define _IS_BOOL_FALSE_ PROBE(~) +#define _IS_BOOL_FALSE_ PROBE(~) #define _IS_BOOL_1_ PROBE(~) #define _IS_BOOL_0_ PROBE(~) /** - * Macro version of "defined" however its limited to 1/0/nothing. Any other value + * Macro version of "defined" however its limited to 1/0/nothing. Any other value * is indistuiguishable from a random name * Certain pre-defined definitions can be "NOTDEFINED" eg THIS. * so checking IF(DEFINED(THIS)) is asking if THIS is NOT defined @@ -268,6 +303,7 @@ #ifdef EXPAND_EXAMPLES + //NOT NOT(1) // not 1 NOT(0) // not 0 NOT() // not @@ -295,7 +331,7 @@ #define _IF_VA_0(a) /** - * _VA_ARGS_ for c89 + * _VA_ARGS_ for c89 * Allows up to 32 Args on the stack */ #define EXPAND_ARGS_STACK(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF,ERROR) \ @@ -399,39 +435,63 @@ IF_VA(NOT(IS_EMPTY(A)))/* */(/* */COMMA() undefinedlocal = 1/0 "_VA_ARGS Stack full"/* */)/* -*/) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) +*/) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) /** * Push/Pop VA Args arrays */ -#define POP_ARG(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF) /* - */(IF_VA(IS_PAREN(A))(_POP_ARG A) /* - ELSE*/IF_VA(NOT(IS_PAREN(A)))(EXPAND_ARGS_STACK(B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF))) -#define _POP_ARG(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF) EXPAND_ARGS_STACK(B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF) -#define PUSH_ARG(A,B)(A, TRY_EXPAND(B)) -/** +#ifdef __sgi +# define POP_ARG(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF) /* + */(IF_VA(IS_PAREN(A))(_POP_ARG A) /* + ELSE*/IF_VA(NOT(IS_PAREN(A)))(EXPAND_ARGS_STACK(B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,AA,AB,AC,AD,AE,AF))) +# define _POP_ARG(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF) EXPAND_ARGS_STACK(B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, AA, AB, AC, AD, AE, AF) +#else +# define POP_ARG(A, ...) (IF_VA(IS_PAREN(A))(_POP_ARG A) IF_VA(NOT(IS_PAREN(A))) (_POP_ARG(A, __VA_ARGS__)) +# define _POP_ARG(A, ...) __VA_ARGS__ +#endif +# define PUSH_ARG(A,B)(A, TRY_EXPAND(B)) + + /** * TRY Expand If Array */ #define TRY_EXPAND(c) _TRY_EXPAND(IS_PAREN(c))(c) #define _TRY_EXPAND(c) CAT(__TRY_EXPAND_, c) -#define __TRY_EXPAND_1(a) EXPAND_ARGS_STACK a +#ifdef __sgi +# define __TRY_EXPAND_1(a) EXPAND_ARGS_STACK a +#else +# define __TRY_EXPAND_1(A) __TRY_EXPAND_11 A +# define __TRY_EXPAND_11(...) __VA_ARGS__ +#endif #define __TRY_EXPAND_0(a) a -/** - * Get the first argument and ignore the rest. - */ -#define FIRST(a) EXPAND(DEFER(FIRST_PRE_VA)(TRY_EXPAND(a))) -/** - * Get the second argument and ignore the rest. - */ -#define SECOND(a, b) EXPAND(DEFER(SECOND_PRE_VA)(TRY_EXPAND(a), b)) +#ifdef __sgi + /** + * Get the first argument and ignore the rest. + */ +# define FIRST(a) EXPAND(DEFER(FIRST_PRE_VA)(TRY_EXPAND(a))) + /** + * Get the second argument and ignore the rest. + */ +# define SECOND(a, b) EXPAND(DEFER(SECOND_PRE_VA)(TRY_EXPAND(a), b)) + +#else + /** + * Get the first argument and ignore the rest. + */ +# define FIRST(A,...) EXPAND(DEFER(FIRST_PRE_VA)(TRY_EXPAND(a))) + /** + * Get the second argument and ignore the rest. + */ +# define SECOND(a, b,...) EXPAND(DEFER(SECOND_PRE_VA)(TRY_EXPAND(a), b)) +#endif + #ifdef EXPAND_EXAMPLES -// POP ARG +// POP ARG (THIS, IS, a, TEST, hy) POP_ARG(THIS, IS, a, TEST, hy) -// push arg - PUSH_ARG(test, (this, is, a, test, with, a , is, so, is, a, test, with, a , is, so, is, a, test, with, a , is, so, is, a, test, with, a , is, so)) +// push arg test (this, is, a, test, with, a , is, so, is, a, test, with, a , is, so, is, a, test, with, a , is, so, is, a, test, with, a , is, so) + PUSH_ARG(test, (this, is, a, test, with, a2 , is2, so, is3, a3, test2, with2, a3 , is4, so4, is5, a4, test3, with3, a6 , is6, so5, is7, a7, test4, with5, a8 , is8, so8)) #endif /** @@ -453,14 +513,14 @@ IF_VA(NOT(IS_EMPTY(A)))/* /** * Logical AND. Simply performs a lookup. */ -#define AND(a, b) CAT(CAT(_AND_, a), b) -#define _AND_00 0 -#define _AND_01 0 -#define _AND_10 0 -#define _AND_11 1 +#define AND_CPPLIB(a, b) CAT(CAT(_AND_CPPLIB_, a), b) +#define _AND_CPPLIB_00 0 +#define _AND_CPPLIB_01 0 +#define _AND_CPPLIB_10 0 +#define _AND_CPPLIB_11 1 /** - * Macro if statement. + * Macro if statement. * Usage: * IF(condition) \ * ( \ @@ -474,16 +534,16 @@ IF_VA(NOT(IS_EMPTY(A)))/* #define _IF_1(a) TRY_EXPAND(a) #define _IF_0(a) -/** - * Macro if/else statement. +/** + * Macro if/else statement. * Usage: * - * IF_ELSE(condition) - * (( - * expansion when true - * )) - * (( - * expansion when false + * IF_ELSE(condition) + * (( + * expansion when true + * )) + * (( + * expansion when false * )) * @param condition * @return TRUE/FALSE @@ -496,10 +556,13 @@ IF_VA(NOT(IS_EMPTY(A)))/* #ifdef EXPAND_EXAMPLES - IF_ELSE(220)((it was, non - zero))(it was zero) // Expands to "non Zero" + //if else 220 + IF_ELSE(220)((it was, non - zero))(it was zero) // Expands to "it was, non Zero" + //if 06 IF(06)(NONZERO) +#endif - +#if 0 /* * When */ @@ -507,12 +570,16 @@ IF_VA(NOT(IS_EMPTY(A)))/* #endif /** * Macro which checks if it has any arguments. Returns '0' if there are no - * arguments, '1' otherwise. + * arguments, '1' otherwise. * Limitation: HAS_ARGS(,1,2,3) returns 0 -- this check essentially only checks * that the first argument exists. * @return TRUE/FALSE */ -#define HAS_ARGS(a) BOOL(EXPAND(_END_OF_ARGUMENTS_ FIRST(a)())) +#ifdef __sgi +# define HAS_ARGS(a) BOOL(EXPAND(_END_OF_ARGUMENTS_ FIRST(a)())) +#else +# define HAS_ARGS(...) BOOL(FIRST(__VA_ARGS__)) +#endif #define _END_OF_ARGUMENTS_() 0 /* @@ -523,7 +590,7 @@ for_each(v.begin(), v.end(), [](int &number) */ /** * foreach macro - * @param + * @param */ #define foreach(var, collection) for (var = *collection; var; var++) @@ -535,8 +602,9 @@ HAS_ARGS((a, b, c)) //no HAS_ARGS() HAS_ARGS(()) -HAS_ARGS(( ())) - +HAS_ARGS(( ())) //this one has too many parens +#endif +#if 0 # define test() Im expanded DEFER8(test)() EVAL1(EVAL4(DEFER4(test)())) @@ -545,7 +613,7 @@ HAS_ARGS(( ())) // RECURSE EVAL16(RECURSE((this, is, a, test, WITH, MANY, ARGS))) #endif - +#ifdef __sgi #define COUNTPARAMS(X) \ IF_ELSE(IS_PAREN(X)) /* */( /* @@ -563,22 +631,37 @@ HAS_ARGS(( ())) */COUNT /* */) # define _COUNTPARMS() COUNTPARAMS_INNER - +#else +# define ELEVENTH_ARGUMENT(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, ...) a11 +# define COUNTPARAMS(...) IF_ELSE(IS_PAREN(__VA_ARGS__))(_COUNTPARAMS __VA_ARGS__)(ELEVENTH_ARGUMENT(dummy, ##__VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)) +# define _COUNTPARAMS(...) ELEVENTH_ARGUMENT(dummy, ##__VA_ARGS__, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) +#endif #ifdef EXPAND_EXAMPLES // COUNTPARAMS - IT WORKS!!!, THIS WILL BE GREAT FOR AI + //0 COUNTPARAMS(()) + //1 COUNTPARAMS((A)) + // 2 COUNTPARAMS((A, B)) + // 3 COUNTPARAMS((A, B, C)) + // 4 COUNTPARAMS((A, B, C, D)) + // 5 COUNTPARAMS((A, B, C, D, E)) + // 6 COUNTPARAMS((A, B, C, D, E, F)) + // 7 COUNTPARAMS((A, B, C, D, E, F, G)) - COUNTPARAMS((A, B, C, D, E, F,G,H)) - COUNTPARAMS((A, B, C, D, E, F,G,H,I)) + // 8 + COUNTPARAMS((A, B, C, D, E, F, G, H)) + // 9 + COUNTPARAMS((A, B, C, D, E, F, G, H, I)) -#enAdif +#endif +#if 0 #define LIST_TO_TUPLE(list) \ IF_ELSE(IS_PAREN(list))\ (\ @@ -586,8 +669,8 @@ HAS_ARGS(( ())) )\ (\ list\ - ) - + ) + #define LIST_TO_TUPLE_INNER(list, listb) \ IF_ELSE(HAS_ARGS(list)) \ (\ @@ -595,25 +678,26 @@ HAS_ARGS(( ())) )\ (\ 0 listb\ - ) -#define _LIST_TO_TUPLE_INNER() LIST_TO_TUPLE_INNER -// list to tuple -LIST_TO_TUPLE((this, (is, (a, (li8st, (lots, (of, (test, (another, ))))))))) -//SINGLE + ) +#define _LIST_TO_TUPLE_INNER() LIST_TO_TUPLE_INNER +// list to tuple +LIST_TO_TUPLE((this, (is, (a, (li8st, (lots, (of, (test, (another, ))))))))) +//SINGLE LIST_TO_TUPLE((this,(is))) +#endif + #define REPEAT(count, macro, a) \ IF_ELSE(DEC(count)) \ (DEFER3(REPEAT_INDIRECT)()(DEC(count), macro, a))( \ /* Do nothing, just terminate */) DEFER(macro)(DEC(count), a) #define REPEAT_INDIRECT() REPEAT - -#ifdAef EXPAND_EXAMPLES -// An example of using this macro +#ifdef EXPAND_EXAMPLES +// An example of repeat 9 # define M(i, _) i - EVAL16(REPEAT(9, M, ~)) // 0 1 2 3 4 5 6 7 -#endiAf + EVAL16(REPEAT(9, M, ~)) // 0 1 2 3 4 5 6 7 8 +#endif #define WHILE(pred, op, a) \ IF(pred(a)) \ @@ -649,4 +733,4 @@ LIST_TO_TUPLE((this,(is))) /*MAP(MAKE_HAPPY, COMMA, (1,2,3,A))*/ #endif -#endif + diff --git a/include/Makefile.targets b/include/Makefile.targets new file mode 100644 index 0000000..2a8ce7c --- /dev/null +++ b/include/Makefile.targets @@ -0,0 +1,206 @@ +all: $(APPROM) + @if [ -f ge007.$(OUTCODE).sha1 ]; then \ + $(SHA1SUM) -c ge007.$(OUTCODE).sha1 && echo "\n MATCH!\n\n" || (echo "\n ERROR!\n\n\n NOT MATCH!\n\n" && exit 1); \ + fi + @echo "\nRom File Generated in Build Directory. \n\n" + +.SECONDARY: + $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ + $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ + $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) + +ifeq ($(filter clean nuke dataclean help codeclean context cmdbuilder test stanclean setupclean,$(MAKECMDGOALS)),) + # Dont print version on "default" since it will be spat out twice + ifneq ($(filter $(VERSION),$(ALLOWED_VERSIONS)),) + #$(info VERSION=$(VERSION)) + else + $(error VERSION "$(VERSION)" not supported") + endif + # Make tools if out of date + $(info Building tools...) + DUMMY != make -s -C tools >&2 || echo FAIL + ifeq ($(DUMMY),FAIL) + $(error Failed to build tools) + endif + $(info Building $(VERSION) ROM...) + +endif + +# Build RSP +$(BUILD_DIR)/rsp/%.bin: rsp/*.s + $(ARMIPS) -sym $@.sym -strequ CODE_FILE $(BUILD_DIR)/rsp/$*.bin -strequ DATA_FILE $(BUILD_DIR)/rsp/$*_data.bin $< + +$(BUILD_DIR)/src/rspboot.o: $(BUILD_DIR)/rsp/rspboot.bin + +#Build asm files in root +$(BUILD_DIR)/%.o: src/%.s + $(AS) $(ASFLAGS) -o $@ $< + +#Build asm files in src/ +$(BUILD_DIR)/src/%.o: src/%.s + $(AS) $(ASFLAGS) -o $@ $< + +#Build Images +$(BUILD_DIR)/assets/images/split/%.o: assets/images/split/%.bin + $(LD) -r -b binary $< -o $@ + +#Compress Obseg +$(BUILD_DIR)/$(OBSEGMENT): $(OBSEG_RZ) $(IMAGE_OBJS) + + +#Build C files in src/ +$(BUILD_DIR)/src/%.o: src/%.c + @if grep -q 'GLOBAL_ASM(' $<; then \ + $(ASM_PREPROC) $(OPTIMIZATION) $< | $(CC) -c $(CFLAGS) tools/asm-processor/include-stdin.c -o $@ $(OPTIMIZATION); \ + $(ASM_PREPROC) $(OPTIMIZATION) $< --post-process $@ --assembler "$(AS) $(ASFLAGS)" --asm-prelude tools/asm-processor/prelude.s; \ + else \ + $(CC) -c $(CFLAGS) -o $@ $(OPTIMIZATION) $<; \ + fi + + +#Build RamRom +$(BUILD_DIR)/assets/ramrom/%.o: assets/ramrom/%.s + $(AS) $(ASFLAGS) -o $@ $< + +#Build fonts +$(BUILD_DIR)/assets/font/%.o: assets/font/%.c + $(CC) -c $(CFLAGS) -o $@ $(OPTIMIZATION) $< + +#Build asm files in assets/ +$(BUILD_DIR)/assets/%.o: assets/%.s + $(AS) $(ASFLAGS) -o $@ $< + +#Build Obseg +$(BUILD_DIR)/assets/obseg/%.o: assets/obseg/%.s $(OBSEG_RZ) + $(AS) $(ASFLAGS) -o $@ $< + +#Build C files in assets/ +$(BUILD_DIR)/assets/%.o: assets/%.c + $(CC) -c $(CFLAGS) -o $@ $(OPTIMIZATION) $< + +#$(BUILD_DIR)/src/random.o: OPTIMIZATION := -O3 +#$(BUILD_DIR)/src/random.o: INCLUDE := -I . -I include -I include/PR +#$(BUILD_DIR)/src/random.o: MIPSISET := -mips3 -o32 +#$(BUILD_DIR)/src/random.o: src/random.c +# $(CC) -c -Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm $(CFLAGWARNING) -woff 819,820,852,821,838,649 -signed $(INCLUDE) $(MIPSISET) $(LCDEFS) -DTARGET_N64 $(OPTIMIZATION) -o $@ $< + +#Link Files +$(APPELF): $(RSPOBJECTS) $(ULTRAOBJECTS) $(HEADEROBJECTS) $(OBSEG_RZ) $(BUILD_DIR)/$(OBSEGMENT) $(MUSIC_RZ_FILES) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(ROMOBJECTS) $(ASSET_DATAOBJECTS) $(ROMOBJECTS2) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(OBSEG_OBJECTS) ge007.ld + cpp $(LDFILEOPTS) -P ge007.ld -o build/ge007.$(OUTCODE).ld + @echo "Linking Files into ELF" + $(LD) $(LDFLAGS) -o $@ + +$(APPBIN): $(APPELF) + @echo "Building ROM" + $(OBJCOPY) $< $@ -O binary --gap-fill=0xff + +$(APPROM): $(APPBIN) + @echo "Compressing ROM" + $(DATASEG_COMP) $< $(OUTCODE) + @echo "Finalizing ROM" + $(N64CKSUM) $< $@ + +.PRECIOUS: %.bin %.o + +## Phony Recipies - Get Make to do something ## + + +.PHONY: all default codeclean dataclean clean cmdbuilder test help + +setupclean: + rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map \ + $(SETUP_BUILD_FILES) + +stanclean: + rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map \ + $(STAN_BUILD_FILES) + +libultraclean: + rm -f $(APPELF) $(APPROM) $(APPBIN) $(BUILD_DIR)/ge007.$(OUTCODE).map \ + $(ULTRAOBJECTS) + +codeclean: + rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ + $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) $(RSPOBJECTS) + +dataclean: + rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ + $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) \ + $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES) + +clean:: + # if this command is modified, make sure to update this in the `nuke` recipe. + rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ + $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ + $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) $(RSPOBJECTS) \ + $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES) + +nuke: + @echo deleting files specified from make clean ... + @# if this command is modified, update the `clean` recipe above. + rm -f $(APPELF) $(APPROM) $(APPBIN) $(ULTRAOBJECTS) $(BUILD_DIR)/ge007.$(OUTCODE).map \ + $(HEADEROBJECTS) $(BOOTOBJECTS) $(CODEOBJECTS) $(GAMEOBJECTS) $(RZOBJECTS) \ + $(OBSEG_OBJECTS) $(OBSEG_RZ) $(ROMOBJECTS) $(RAMROM_OBJECTS) $(FONTOBJECTS) $(MUSIC_OBJECTS) $(IMAGE_OBJS) $(MUSIC_RZ_FILES) $(RSPOBJECTS) \ + $(STAN_BUILD_FILES) $(SETUP_BUILD_FILES) + @echo + @echo make: deleting build folders and files + $(foreach x,$(ALLOWED_COUNTRYCODE),rm -r -f -d "$(BUILD_DIR_BASE)/$(x)/"${\n}) + @echo + @echo make: deleting bin / rsp / asp + rm -r -f -d "bin/" + @echo + @echo make: deleting assets + rm -r -f -d "assets/images/split/" + rm -r -f "assets/music/*.bin" "assets/obseg/bg/*.bin" "assets/obseg/brief/*.bin" "assets/obseg/chr/*.bin" "assets/obseg/gun/*.bin" "assets/obseg/prop/*.bin" "assets/obseg/setup/*.bin" "assets/obseg/setup/e/*.bin" "assets/obseg/setup/u/*.bin" "assets/obseg/setup/j/*.bin" "assets/obseg/stan/*.bin" "assets/obseg/text/*.bin" "assets/obseg/text/e/*.bin" "assets/obseg/text/u/*.bin" "assets/obseg/text/j/*.bin" "assets/ramrom/*.bin" "assets/ramrom/e/*.bin" "assets/ramrom/u/*.bin" "assets/ramrom/j/*.bin" + +help: + @echo "mmakefile help" + @echo "" + @echo " supported targets:" + @echo "" + @echo " all Build all (default)" + @echo " clean Delete all known build artifacts" + @echo " nuke Delete all files explicitly listed in Makefile (same as make clean)," + @echo " all build output for all versions, any .bin file in assets folders," + @echo " and asp/rsp bin." + @echo " dataclean Delete only asset build artifacts" + @echo " codeclean Delete only code (asm, .c) build artifacts" + @echo " libultraclean Delete only code (asm, .c) build artifacts " + @echo " from Rare's libultra files" + @echo " stanclean Delete only stan build artifacts" + @echo " setupclean Delete only setup build artifacts" + @echo " cmdbuilder BuildAI Commands" + @echo " context [file] BuildContext File from [file]" + @echo " eg make context src/game/chrai.c" + @echo " test Re-Run Data Verification " + @echo "" + @echo "" + @echo " options:" + @echo "" + @echo " VERSION=v Region version. (US is default)" + @echo " Supported values: ${ALLOWED_VERSIONS}\n" + +test: + @$(SHA1SUM) --quiet -c checksums.txt + +ifneq ($(filter-out context,$(MAKECMDGOALS)),) + CONTEXTFILE := $(filter-out context ,$(MAKECMDGOALS)) +else + CONTEXTFILE := build/ctx.c +endif +context: + @clear + @echo Building Context File [ctx.h] from $(CONTEXTFILE) + @echo "#define TRUE 1" > build/ctx.h + @echo "#define FALSE 0" >> build/ctx.h +ifeq ($(CONTEXTFILE),build/ctx.c) + @echo "#include " > build/ctx.c +endif + @sed -n -E ':x /\\$$/ { N; s/\\\n//g ; bx };''/(^\s*#define)|(\\$$)/p; /(\\$$)/p;' src/bondconstants.h src/bondtypes.h $(CONTEXTFILE) >> build/ctx.h + @$(CC) -c $(CFLAGS) $(CONTEXTFILE) -E > build/ctx2.h 2> /dev/null || (rm build/ctx2.h && exit 1) + @sed -E '/^\s*$$/d' build/ctx2.h >> build/ctx.h + @rm build/ctx.c build/ctx2.h || exit 0 + @echo You can find it in Build [build/ctx.h]. + +textures: + $(foreach x,$(IMAGE_BINS),tools/mktex/build/tex2png $(x) assets/images/out ${\n}) \ No newline at end of file diff --git a/include/assert.h b/include/assert.h index efba530..7f6a6d2 100644 --- a/include/assert.h +++ b/include/assert.h @@ -29,7 +29,7 @@ extern "C" { * standard header ARE SPECIFIED BY ANSI! CONFORMANCE WILL BE ALTERED * IF ANY NEW IDENTIFIERS ARE ADDED TO THIS AREA UNLESS THEY ARE IN ANSI's * RESERVED NAMESPACE. (i.e., unless they are prefixed by __[a-z] or - * _[A-Z]. For external objects, identifiers with the prefix _[a-z] + * _[A-Z]. For external objects, identifiers with the prefix _[a-z] * are also reserved.) */ @@ -42,6 +42,8 @@ extern "C" { extern void osSyncPrintf(const char *fmt, ...); #define assert(EX) if(!(EX))osSyncPrintf("\n--- ASSERTION FAULT - %s - %s, line %d\n\n", # EX , __FILE__, __LINE__) +#define assertmsg(EX, MSG) if (!(EX)) osSyncPrintf(MSG) + // extern void __assert(const char *, const char *, int); // #ifdef __ANSI_CPP__ // #define assert(EX) ((EX)?((void)0):__assert( # EX , __FILE__, __LINE__)) diff --git a/include/gbi_extension.h b/include/gbi_extension.h index 73391f6..2ed4989 100644 --- a/include/gbi_extension.h +++ b/include/gbi_extension.h @@ -195,6 +195,12 @@ _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8) | _SHIFTL((a), 14, 10) | _SHIFTL((b), 2, 10); \ _g->words.w1 = _SHIFTL(0x06, 24, 8) | _SHIFTL((c), 14, 10) | _SHIFTL((d), 2, 10); \ } +#define gDPLoadTLUT07(pkt, a, b, c, d) \ +{ \ + Gfx *_g = (Gfx *)pkt; \ + _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8) | _SHIFTL((a), 14, 10) | _SHIFTL((b), 2, 10); \ + _g->words.w1 = _SHIFTL(0x07, 24, 8) | _SHIFTL((c), 14, 10) | _SHIFTL((d), 2, 10); \ +} #define gDPLoadTLUTCmd2(pkt, tile, count) \ { \ diff --git a/include/macros.inc b/include/macros.inc index c97fd81..dd4a338 100644 --- a/include/macros.inc +++ b/include/macros.inc @@ -2,6 +2,18 @@ .macro glabel label .global \label + .balign 4 + .type \label, @function \label: .endm +.macro dlabel label + .global \label + \label: +.endm + +.macro jlabel label + .global \label + .type \label, @function + \label: +.endm diff --git a/include/make/Gui.make b/include/make/Gui.make new file mode 100644 index 0000000..f3170db --- /dev/null +++ b/include/make/Gui.make @@ -0,0 +1,82 @@ + +#Only Draw PBar if NOT verbose +ifeq ($(VERBOSE),0) + +# Separate "constant" drawing from variable drawing to speed up PBar rendering +# draws a box and fills it grey ready for blue bar +SetupProgressBar = \ + { \ + str="$(SAVECURSOR)$(call SET_SCROLLREGION,4,0)$(call CURSOR_GOTO,2,999)$(VT_ED)$(call CURSOR_GOTO,1)";\ + str=$$str"\033(0lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk"; \ + str=$$str"\nx$(call SET_TEXTATTRIB,$(BG_GRAY))%78s$(RESTORECOLOUR)x\n"; \ + str=$$str"mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj\033(B"; \ + str=$$str"$(RESTORECURSOR)"; \ + printf $$str ""; \ + } + +#(call DrawProgressBar,Percent) +# OR +#(call DrawProgressBar,NumberOfItemsDone,TotalNumberOfItems) +# If second param is given, use it to work out a percentage. +# divide the percentage into a 80 char long bar +# paint the whole bar grey +# paint the first half, then text, then second half. +# clear colour codes +DrawProgressBar = \ + { \ + $(if $(2), \ + if [ "$(1)" -ne "$(2)" ]; \ + then \ + _pdone=`expr 100 / $(2) \* $(1)`; \ + else \ + _pdone=100; \ + fi \ + ,_pdone=$(1) \ + ); \ + pdone=`expr $$_pdone \* 74 / 100`; \ + pdoneb=0; \ + str="$(SAVECURSOR)$(call CURSOR_GOTO,2,2)";\ + str=$$str"$(call SET_TEXTATTRIB,$(BOLD),$(FG_WHITE),$(BG_NAVY))" ; \ + \ + if [ "$$pdone" -lt "36" ]; \ + then \ + str=$$str"%$${pdone}s"; \ + str=$$str"$(call SET_TEXTATTRIB,$(BG_GRAY))";\ + pdoneb=`expr 36 - $$pdone`; \ + str=$$str"%$${pdoneb}s%3d%%"; \ + else \ + pdoneb=`expr $$pdone - 36`; \ + str=$$str"%1s%35s%3d%%%$${pdoneb}s"; \ + fi; \ + str=$$str"$(RESTORECURSOR)$(RESTORECOLOUR)"; \ + printf $$str "" "" $$_pdone; \ + } +# Increment Progress Bar From percentage (1), and increase by 1 every (2) seconds. +# Continue doing so until calling process ends +IncrementProgressBarFromAtRate = \ + { \ + i=$(1); \ + while [ -d /proc/$$! ] && [ $$i -le 100 ]; do \ + $(call DrawProgressBar,$$i); \ + i=$$((i+1)); \ + sleep $(2); \ + done; \ + } +endif #Verbose No Draw PBar + +# Ask to continue +# (1) Prompt, +# (2) Do if Yes, +# (3) Do if No [can be blank], +# (4) Do if anything else [can be blank] +# (5) Timeout [can be blank] +ContinuePrompt = \ + { \ + echo "$1 [y/n]"; \ + $(if $(5), readchr(){ old=$$(stty -g); stty raw -echo min 0 time 30; printf '%s' $$(dd bs=1 count=1 2>/dev/null); stty $$old;}; REPLY=$$(readchr) ,read REPLY ); \ + echo $$REPLY; case $$REPLY in \ + y|Y) $2;; \ + n|N) $3;; \ + *) $4;; \ + esac; \ + } diff --git a/include/make/VT100Codes.make b/include/make/VT100Codes.make new file mode 100644 index 0000000..c4d81a4 --- /dev/null +++ b/include/make/VT100Codes.make @@ -0,0 +1,83 @@ + +## VT100 Codes ## + +SAVECURSOR := \0337\033[s +RESTORECURSOR := \0338\033[u +SET_SCROLLREGION = \033[$(1);$(2)r +RESTORESCROLLREGION := \033[r +RESTORESCROLLREGION2 = $(SAVECURSOR)$(RESTORESCROLLREGION)$(RESTORECURSOR)\033[1A +CURSOR_GOTO = \033[$(1);$(2)H +SET_TEXTATTRIB = \033[$(1)$(if $(2),;$(2))$(if $(3),;$(3))m +BELL := \007 +VT_ED := \033[2J +VT_CUU = \033[$(1)A +VT_CUD = \033[$(1)B +VT_CUF = \033[$(1)C +VT_CUB = \033[$(1)D + +#Attributes +RESTORECOLOUR := \033[m +BOLD := 1 +DIM := 2 +UNDERSCORE := 4 +BLINK := 5 +INVERT := 7 +HIDDEN := 8 + +#Colours +FG_BLACK:= 30 +FG_MAROON:= 31 +FG_GREEN:= 32 +FG_OLIVE:= 33 +FG_NAVY:= 34 +FG_PURPLE:= 35 +FG_TEAL:= 36 +FG_SILVER:= 37 +FG_GRAY:= 90 +FG_RED:= 91 +FG_LIME:= 92 +FG_YELLOW:= 93 +FG_BLUE:= 94 +FG_VIOLET:= 95 +FG_CYAN:= 96 +FG_WHITE:= 97 + +BG_BLACK:= 40 +BG_MAROON:= 41 +BG_GREEN:= 42 +BG_OLIVE:= 43 +BG_NAVY:= 44 +BG_PURPLE:= 45 +BG_TEAL:= 46 +BG_SILVER:= 47 +BG_GRAY:= 100 +BG_RED:= 101 +BG_LIME:= 102 +BG_YELLOW:= 103 +BG_BLUE:= 104 +BG_VIOLET:= 105 +BG_CYAN:= 106 +BG_WHITE:= 107 + +# define a "newline" variable to be used in make scripts +# use with ${\n} +# https://stackoverflow.com/questions/12528637/how-do-i-execute-each-command-in-a-list +define \n + + +endef +#end newline. + +#Colour IDO Output (GCC does this automatically) +CLR_OUT := sed -E +#colour AI errors +CLR_OUT += -e 's/\(\(\x27E\x27\,\x27R\x27\,\x27R\x27\,\x27O\x27\,\x27R\x27,\s?((\x27?,?\s?\x27.)*)\x27,\s?\x27([^x27])\x27\)/((\x27ERROR\x27,\1\3\x27\)/g; :loop s/\(\((\x27ERROR)((\x27?,?\s?\x27.)*),?\s?\x27(.)\x27([^x27]*)\x27\)/((\1\2\5\x27\)/g; tloop; ' +#colour errors +CLR_OUT += -e "s/(ERROR:[^\x27]*?\x27)|(^.*[Ee]rror.*)|(Mis-Match in)|(:\sFAILED)/$$(echo "$(call SET_TEXTATTRIB,$(FG_RED))")&$$(echo "$(RESTORECOLOUR)")/g" +#colour warnings +CLR_OUT += -e "s/^.*[Ww]arning.*/$$(echo "$(call SET_TEXTATTRIB,$(FG_YELLOW))")&$$(echo "$(RESTORECOLOUR)")/g" +#colour Info Tags +CLR_OUT += -e "s/^.*(([Bb]uilding)|(:\sOK)|([Ll]inkin)).*/$$(echo "$(call SET_TEXTATTRIB,$(FG_LIME))")&$$(echo "$(RESTORECOLOUR)")/g" +#colour filenames +CLR_OUT += -e "s/((([^\/]*([^s][^t][^d][^i][^n])\.c)|([^\/]*\.o))\s)/$$(echo "$(call SET_TEXTATTRIB,$(FG_WHITE))")&$$(echo "$(RESTORECOLOUR)")/g" + diff --git a/include/make/cmd.make b/include/make/cmd.make new file mode 100644 index 0000000..a143632 --- /dev/null +++ b/include/make/cmd.make @@ -0,0 +1,86 @@ +################################################################################ +# CMD Builder +################################################################################ + +#CMD Builder tools +AI_CMD_BUILDER := $(TOOLS_DIR)/cmdbuilder.c +AI_CMD_LIST_DEFINITIONS := src/aicommands.def +AI_CMD_LIST_TEMP := $(BUILD_DIR)/aicommands.temp +AI_CMD_LIST_H2 := src/aicommands2.h +#Pre-Format encoding newlines and tags +AI_CMD_BUILDER_PRECONVERT := sed -E +AI_CMD_BUILDER_PRECONVERT += -e 's/\x27\\n\x27/\x27\/n\x27/g;' # encode '\n' as '/n' (TEXT PRINT command) +AI_CMD_BUILDER_PRECONVERT += -e '/^\s*\*/ s/\x27/\?\?x27/g;' # encode DocBlock(/**...**/) quotes '' as x27 +AI_CMD_BUILDER_PRECONVERT += -e '/\/\*\*/ , /\*\// s/([^/])$$/\1 \\n\\/g;' # encode DocBlock(/**...**/) Newlines as \n\ . +#AI_CMD_BUILDER_PRECONVERT += -e '/^\s*\*/ s/([^\/])$$/\1 \\n\\/g;' # encode DocBlock(/**...**/) Newlines as \n\ . +AI_CMD_BUILDER_PRECONVERT += -e 's/[^/\*\S]\*$$/\\n\\/g; s/^(\s*)\*[^/\*]/\1 /g;' # remove DocBlock sides (causes problems with tooltips) fixed to check for ordinary comment +#AI_CMD_BUILDER_PRECONVERT += -e '/^_AI_CMD_POLYMORPH\(CMDNAME,\n(.|\n)*?\s{19}DESCRIPTION(\)| DESCRIPTION2\))/ s/[^,]\n/\\n\\/g;' # Newlines in POLYMORPHS +AI_CMD_BUILDER_PRECONVERT += -e 's/\/\*\*/\?\?\\\*\(\*\*/g;' # encode /** as ??\*(** +AI_CMD_BUILDER_PRECONVERT += -e 's/\*\*\//\*\*\)\*\?\?\\ /g;' # encode **/ as **)*??\ + +#Format Newlines and Comment tags +AI_CMD_BUILDER_CONVERT := sed -E +AI_CMD_BUILDER_CONVERT += -e 's/\\n/\n/g;' # add newlines +AI_CMD_BUILDER_CONVERT += -e 's/\?{2}\=/\#/g;' # replace ??= with hash for defines +AI_CMD_BUILDER_CONVERT += -e 's/\?{2}\\/\//g;' # replace ??\ with / +AI_CMD_BUILDER_CONVERT += -e 's/DEFINE([^D])/\#define\1/g;' # replace DEFINE with #define +AI_CMD_BUILDER_CONVERT += -e 's/\\.*/\\/g;' # replace \... with \ (line continuation) +AI_CMD_BUILDER_CONVERT += -e 's/\*\(\*/\*/g;' # replace *(* with * +AI_CMD_BUILDER_CONVERT += -e 's/\*\)\*/\*/g;' # replace *)* with * +AI_CMD_BUILDER_CONVERT += -e 's/MAKE_EXPAND\(([^\n]*)MAKE_EXPAND_END\)/\1/g;' # replace MAKE_EXPAND(CONTENTS) with CONTENTS +AI_CMD_BUILDER_CONVERT += -e 's/\?{2}x27/\x27/g;' # replace ??x27 with ' +AI_CMD_BUILDER_CONVERT += -e 's/\x27\/n\x27/\x27\\n\x27/g;' # replace '/n' with '\n' +AI_CMD_BUILDER_CONVERT += -e 's/AI_EndList\s*,/AI_EndList/g;' # replace AI_EndList , with AI_EndList +AI_CMD_BUILDER_CONVERT += -e 's/ *(,|;) */\1 /g; ' # remove spaces +AI_CMD_BUILDER_CONVERT += -e '/define (AICMDSIZE)|(AI.*_LENGTH)/! s/define ([^ ]*) *\( *([^ ]*)/define \1(\2/g; ' # for each command, remove the space so macro is read as a function +AI_CMD_BUILDER_CONVERT += -e '/^typedef/ s/\}/\n\}/g; /^typedef/ s/(; |\{)/\1\n /g;' # for each typedef, break into ALLMAN +AI_CMD_BUILDER_CONVERT += -e '/^typedef/ s/(\{)/\n\1/g; /^\s*AI_/ s/,/,\\\n /g' # for each command, break into a list +AI_CMD_BUILDER_CONVERT += -e '/^ *$$/d; s/ *\n/\n/g;' # remove surplus newlines + +AI_CMD_LIST_H2_HEADER := \ +"/******************************************************************************\n\ +* *\n\ +* *\n\ +* Do not edit this file. It was automatically generated by \"cmdbuilder\" *\n\ +* from the file \"$(AI_CMD_LIST_DEFINITIONS)\". *\n\ +* To Add/Remove/Modify AI Commands please edit \"$(AI_CMD_LIST_DEFINITIONS)\" *\n\ +* and then run *\n\ +* make cmdbuilder *\n\ +* *\n\ +* *\n\ +*****************************************************************************/\n\n" + + +cmdbuilder: + @clear + @echo + @echo Building AI Command Macros... + @echo + @$(call SetupProgressBar) + @$(call DrawProgressBar,0) + @ # copy command definitions to temp + @cp $(AI_CMD_LIST_DEFINITIONS) $(AI_CMD_LIST_TEMP) + @$(call DrawProgressBar,5) + @ # Preformat Definitions for builder (encode documentation tags) + @$(call PRINT_STATUS,"Pre Formatting",$(AI_CMD_LIST_DEFINITIONS)) + @$(AI_CMD_BUILDER_PRECONVERT) $(AI_CMD_LIST_TEMP) > $(AI_CMD_LIST_DEFINITIONS) + @$(call DrawProgressBar,10) + @ # Print Header + @echo $(AI_CMD_LIST_H2_HEADER) > $(AI_CMD_LIST_H2) + @$(call DrawProgressBar,11) + @ # Execute Builder and format (re-add newlines, documentation tags etc) -C keeps /**/ comments + @$(call PRINT_STATUS,"Processing",$(AI_CMD_LIST_DEFINITIONS)) + @echo This might take some time... + @$(CC) -Xcpluscomm -c $(AI_CMD_BUILDER) $(INCLUDE) -w 581 -E | $(AI_CMD_BUILDER_CONVERT) >> $(AI_CMD_LIST_H2) || (cp $(AI_CMD_LIST_TEMP) $(AI_CMD_LIST_DEFINITIONS) ; echo Error with cmdbuilder ; false) & $(call IncrementProgressBarFromAtRate,12,0.5) + @$(call DrawProgressBar,98) + @ # restore command def from temp (no encoding) + @cp $(AI_CMD_LIST_TEMP) $(AI_CMD_LIST_DEFINITIONS) + @$(call DrawProgressBar,99) + @rm $(AI_CMD_LIST_TEMP) + @$(call DrawProgressBar,100) + @echo + @echo Done! + @echo + @echo Rebuild AI Command Macros whenever changing aicommands.def. + @echo "\n$(BELL)$(RESTORESCROLLREGION2)" + diff --git a/ld/game.bss.ld.inc b/ld/game.bss.ld.inc index 2879939..7e695a8 100644 --- a/ld/game.bss.ld.inc +++ b/ld/game.bss.ld.inc @@ -125,7 +125,7 @@ build/OUTCODE/src/game/indy_commands.o (.bss); build/OUTCODE/src/game/game_debug.o (.bss); build/OUTCODE/src/game/compiletime.o (.bss); - build/OUTCODE/src/game/unk_0D1AC0.o (.bss); + build/OUTCODE/src/game/speedgraphrenderer.o (.bss); build/OUTCODE/src/game/viewport.o (.bss); build/OUTCODE/src/game/music_0D2720.o (.bss); #ifndef VERSION_EU diff --git a/ld/game.data.ld.inc b/ld/game.data.ld.inc index 8044975..804ab4c 100644 --- a/ld/game.data.ld.inc +++ b/ld/game.data.ld.inc @@ -125,7 +125,7 @@ build/OUTCODE/src/game/indy_commands.o (.data); build/OUTCODE/src/game/game_debug.o (.data); build/OUTCODE/src/game/compiletime.o (.data); - build/OUTCODE/src/game/unk_0D1AC0.o (.data); + build/OUTCODE/src/game/speedgraphrenderer.o (.data); build/OUTCODE/src/game/viewport.o (.data); build/OUTCODE/src/game/music_0D2720.o (.data); #ifndef VERSION_EU diff --git a/ld/game.rodata.ld.inc b/ld/game.rodata.ld.inc index c8e4e7e..02fb3ec 100644 --- a/ld/game.rodata.ld.inc +++ b/ld/game.rodata.ld.inc @@ -125,7 +125,7 @@ build/OUTCODE/src/game/indy_commands.o (.rodata); build/OUTCODE/src/game/game_debug.o (.rodata); build/OUTCODE/src/game/compiletime.o (.rodata); - build/OUTCODE/src/game/unk_0D1AC0.o (.rodata); + build/OUTCODE/src/game/speedgraphrenderer.o (.rodata); build/OUTCODE/src/game/viewport.o (.rodata); build/OUTCODE/src/game/music_0D2720.o (.rodata); #ifndef VERSION_EU diff --git a/ld/game.text.ld.inc b/ld/game.text.ld.inc index 14f4cbb..6167399 100644 --- a/ld/game.text.ld.inc +++ b/ld/game.text.ld.inc @@ -125,7 +125,7 @@ build/OUTCODE/src/game/indy_commands.o (.text); build/OUTCODE/src/game/game_debug.o (.text); build/OUTCODE/src/game/compiletime.o (.text); - build/OUTCODE/src/game/unk_0D1AC0.o (.text); + build/OUTCODE/src/game/speedgraphrenderer.o (.text); build/OUTCODE/src/game/viewport.o (.text); build/OUTCODE/src/game/music_0D2720.o (.text); #ifndef VERSION_EU diff --git a/readme-build.md b/readme-build.md index f1e1d0f..8f22223 100644 --- a/readme-build.md +++ b/readme-build.md @@ -23,7 +23,7 @@ The c compiler can be found in `tools/irix/root/usr/bin/cc`. This splits the com # Assembly Preprocessor -There is a (much forked) preprocessor used by many N64 projects, found in `tools/asmpreproc/asm-processor.py`. This searches for a line +There is a (much forked) preprocessor used by many N64 projects, found in `tools/asm-processor/asm_processor.py`. This searches for a line beginning with `GLOBAL_ASM(` and a subsequent line beginning with `)` and treats everything in between as assembly. This is bundled with any c code in the file and sent to the compiler. @@ -53,8 +53,8 @@ in `assets/obseg/ob_seg.s` and music is bundled in `assets/music/music.s`. Once all code and assets are compiled into .o files, these are combined into one .elf file. The layout of the object files is given by the `ge007.*.ld` files in the root of the project. For a list of individual methods, assets, and files see -the map file in `build/ge007.*.map` (where `*` is the country code, `u`, `e`, or `j`). +the map file in `build/[uje]/ge007.*.map` (where `*` is the country code, `u`, `e`, or `j`). The toolchain `-objcopy` program is then used to create the bundled .bin of the entire ROM. -The final step is to run the `tools/n64cksum` program on the .bin file to create the final .z64. \ No newline at end of file +The final step is to run the `tools/n64cksum` program on the .bin file to create the final .z64. diff --git a/readme.md b/readme.md index c43e1eb..0b64b0c 100644 --- a/readme.md +++ b/readme.md @@ -44,7 +44,7 @@ If you don't have host development tools already installed then you will also ne sudo apt-get install build-essential ``` -Optionally [qemu-irix](https://github.com/n64decomp/qemu-irix/releases) is needed. Download the package to a desired location and install with: +Additionally [qemu-irix](https://github.com/n64decomp/qemu-irix/releases) is needed. Download the package to a desired location and install with: ```bash sudo dpkg -i qemu-irix-2.11.0-2169-g32ab296eef_amd64.deb @@ -73,7 +73,7 @@ Place an unmodified copy of your existing NTSC (US) ROM inside the root of this To extract the baserom assets run: ```bash -./extract_baserom.u.sh +./scripts/extract_baserom.u.sh ``` For JP and PAL (EU) versions support, place each existing ROM in the root of this repository with the name `baserom..z64` (where `` is the country code, `j`, or `e`). @@ -83,30 +83,46 @@ Extracting NTSC (US) baserom assets is mandatory before extracting JP or PAL ass To extract JP assets run: ```bash -./extract_baserom.u.sh && ./extract_diff.j.sh +./scripts/extract_baserom.u.sh && ./scripts/extract_diff.j.sh ``` To extract PAL assets run: ```bash -./extract_baserom.u.sh && ./extract_diff.e.sh +./scripts/extract_baserom.u.sh && ./scripts/extract_diff.e.sh ``` Other options to extract baserom assets or extract diff: ```bash -./extract_baserom.u.sh /path_to/rom.n64 # ROM in another directory -./extract_baserom.u.sh /mnt/e/Goldeneye.n64 # ROM located on EverDrive -./extract_baserom.u.sh files # Extract files only -./extract_baserom.u.sh images # Extract images only +./scripts/extract_baserom.u.sh /path_to/rom.n64 # ROM in another directory +./scripts/extract_baserom.u.sh /mnt/e/Goldeneye.n64 # ROM located on EverDrive +./scripts/extract_baserom.u.sh files # Extract files only +./scripts/extract_baserom.u.sh images # Extract images only ``` Note: If you are upgrading from an old repository, run: ```bash -./clean_baserom.sh && ./extract_baserom.u.sh && make clean +./scripts/clean_baserom.sh && ./scripts/extract_baserom.u.sh && make clean ``` +### Install using Docker (compatible with Apple silicon Macs) + +Once the Docker service is running on your computer (you must have Docker installed), clone the GoldenEye repo where you'd like to have it (Step 2 of the previous section). + +Build the image: `docker build -t goldeneye .` + +`cd` to your cloned `goldeneye_src` repo's directory. You can change `$(pwd)` below to the absolute path of your directory if you don't want to do this. + +Connect to the container: `docker run --rm -it -v $(pwd):/home/dev goldeneye` + +All what's left is to go through Steps 3 and 4 of the previous section. + +Be careful! If you previously compiled GoldenEye on another system (differente OS or CPU architecture), the binaries (gzip, n64cksum) that were compiled will be incompatible. You must delete them. + +There may be a "dubious ownership" error from Git and it may say it fails to detect the Git repository. Running `git status`, it should tell you how to fix it. + ## Build the ROM Run `make` to build the ROM (defaults to `VERSION=US`). diff --git a/rsp/graphics/gmain.s b/rsp/graphics/gmain.s new file mode 100644 index 0000000..a380d88 --- /dev/null +++ b/rsp/graphics/gmain.s @@ -0,0 +1,1545 @@ + + /* + * File: gmain.s + */ + +Overlay0Address: + j doInit + addi $29, $0, 0x110 + + #include "ginit.s" + + jal segmented_to_physical + add $19, $24, $0 + add $20, $0, $22 + jal DMAproc + addi $17, $0, 0x0 + + # $1 = most significant 2 bits of cmd byte << 1 + # $25 = first command word +dispatch_task: #ContDecode + lh $2, 0xbc($1) + jr $2 + srl $2, $25, 23 + + + +SP_NOOP: + mfc0 $2, SP_STATUS + andi $2, $2, 0x80 + bne $2, $0, lbl104c + lh $21, 0x26($0) + bgtz $28, lblfe0 + nop + j lbl10d4 + lh $31, 0x104($0) + +lbl_1048: + lh $21, 0xb6($0) + +lbl_104c: + j lbl10fc + ori $30, $0, 0x20 + + +load_display_list_dma: + addi $28, $0, 0x140 + add $21, $0, $31 + addi $20, $0, 0x6a0 + add $19, $0, $26 + addi $18, $0, 0x13f + jal DMAproc + addi $17, $0, 0x0 + jr $21 + addi $27, $0, 0x6a0 + + // load overlay into IMEM +// $30 = offset into overlay table +// $21 = return address + +load_overlay_fcn: + add $21, $0, $31 +load_overlay: + lw $19, 0x0($30) + lh $18, 0x4($30) + lh $20, 0x6($30) + jal DMAproc + addi $17, $0, 0x0 + jal DMAwait + nop + jr $21 + lw $11, 0xb8($0) + srl $12, $19, 22 + andi $12, $12, 0x3c + + + +lbl_10a8: + and $19, $19, $11 + add $13, $0, $12 + lw $12, 0x160($13) + jr $31 + + + +lbl_10b8: + add $19, $19, $12 + + + +lbl_10bc: + mfc0 $11, DMA_FULL + bne $11, $0, lbl10bc + nop + + + +lbl_10c8: + mtc0 $20, DMA_CACHE + bgtz $17, lbl10dc + mtc0 $19, DMA_DRAM + + + +lbl_10d4: + jr $31 + mtc0 $18, DMA_READ_LENGTH + + + +lbl_10dc: + jr $31 + mtc0 $18, DMA_WRITE_LENGTH + + + +lbl_10e4: + mfc0 $11, DMA_BUSY + bne $11, $0, lbl10e4 + nop + jr $31 + nop + + +lbl_10f8: + add $21, $0, $31 + + + +lbl_10fc: + lw $19, 0x18($29) + addi $18, $23, 0xf620 + lw $23, 0x44($29) + blez $18, lbl1174 + add $20, $19, $18 + sub $20, $23, $20 + bgez $20, lbl1138 + + + +lbl_1118: + mfc0 $20, CMD_STATUS + + + +lbl_111c: + andi $20, $20, 0x400 + bne $20, $0, lbl1118 + + + +lbl_1124: + mfc0 $23, CMD_CURRENT + lw $19, 0x40($29) + beq $23, $19, lbl1124 + nop + mtc0 $19, CMD_START + + + +lbl_1138: + mfc0 $23, CMD_CURRENT + + + +lbl_113c: + sub $20, $19, $23 + bgez $20, lbl1154 + add $20, $19, $18 + sub $20, $20, $23 + bgez $20, lbl1138 + nop + + + +lbl_1154: + add $23, $19, $18 + addi $18, $18, 0xffff + addi $20, $0, 0x9e0 + jal DMAproc + + + +lbl_1164: + addi $17, $0, 0x1 + jal DMAwait + sw $23, 0x18($29) + mtc0 $23, CMD_END + + + +lbl_1174: + jr $21 + + + +lbl_1178: + addi $23, $0, 0x9e0 + andi $2, $2, 0xfe + lh $2, 0x76($2) + jr $2 + lbu $1, 0xffff($27) + beq $24, $0, lbl1028 + andi $1, $24, 0xf + srl $24, $24, 4 + andi $2, $24, 0xf + srl $24, $24, 4 + andi $3, $25, 0xf + srl $25, $25, 4 + addi $26, $26, 0xfff8 + addi $27, $27, 0xfff8 + addi $28, $28, 0x8 + sh $25, 0x2($27) + sw $24, 0x4($27) + add $5, $0, $0 + lbu $1, 0x2d0($1) + lbu $2, 0x2d0($2) + j 0xlbl1264 + lbu $3, 0x2d0($3) + lbu $5, 0xfffc($27) + lbu $1, 0xfffd($27) + lbu $2, 0xfffe($27) + lbu $3, 0xffff($27) + sll $5, $5, 2 + sll $1, $1, 2 + sll $2, $2, 2 + sll $3, $3, 2 + addi $1, $1, 0x420 + addi $2, $2, 0x420 + addi $3, $3, 0x420 + sw $1, 0xde0($0) + sw $2, 0xde4($0) + sw $3, 0xde8($0) + lw $4, 0xde0($5) + j 0xlbl19b0 + lh $30, 0xbe($0) + lbu $1, 0xfffb($27) + lhu $2, 0xfff9($27) + lh $5, 0x30e($1) + add $5, $5, $2 + j lbl10a8 + sw $24, 0x0($5) + sw $25, 0x10($29) + sw $24, 0x14($29) + lh $2, 0x6($29) + andi $2, $2, 0xfffd + andi $3, $25, 0x1 + sll $3, $3, 1 + or $2, $2, $3 + j lbl10a8 + sh $2, 0x6($29) + j 0xlbl12dc + addi $7, $29, 0x8 + addi $7, $29, 0xc + lw $3, 0x0($7) + addi $8, $0, 0xffff + + +lbl_1264: + lbu $5, 0xfffb($27) + lbu $6, 0xfffa($27) + addi $2, $0, 0x1 + sllv $2, $2, $5 + addi $2, $2, 0xffff + sllv $2, $2, $6 + xor $2, $2, $8 + and $2, $2, $3 + or $3, $2, $24 + sw $3, 0x0($7) + lw $25, 0x8($29) + j lbl13ac + lw $24, 0xc($29) + andi $25, $25, 0x3ff + ori $2, $0, 0x7030 + + +lbl_12a0: + lh $3, 0x444($25) + addi $25, $25, 0x28 + bne $25, $24, 0xlbl12a0 + and $2, $2, $3 + beq $2, $0, lbl1028 + lb $2, 0x4a($29) + addi $2, $2, 0xfffc + bltz $2, lbl1048 + addi $3, $2, 0x336 + lw $26, 0x0($3) + sb $2, 0x4a($29) + j lbl10a8 + addi $28, $0, 0x0 + lw $2, 0x4($29) + or $2, $2, $24 + + +lbl_12dc: + j lbl10a8 + sw $2, 0x4($29) + lw $2, 0x4($29) + addi $3, $0, 0xffff + xor $3, $3, $24 + and $2, $2, $3 + j lbl10a8 + sw $2, 0x4($29) + j lbl10b8 + sw $24, 0xfffc($29) + ori $2, $0, 0x0 + j lbl13ac + lw $25, 0xfffc($29) + sra $2, $25, 24 + addi $2, $2, 0x3 + bltz $2, lbl132c + addi $2, $2, 0x18 + jal segmented_to_physical + add $19, $24, $0 + add $24, $19, $0 + + + +lbl_132c: + sw $25, 0x0($23) + sw $24, 0x4($23) + jal lbl1178 + addi $23, $23, 0x8 + bgtz $2, lbl1028 + nop + j lbl10b8 + andi $2, $2, 0x1fe + lh $2, 0xc4($2) + jal DMAwait + lbu $1, 0xfff9($27) + jr $2 + andi $6, $1, 0xf + sbv $v31[6], 0x1c($29) + andi $8, $1, 0x1 + bne $8, $0, 0xlbl13d8 + andi $7, $1, 0x2 + addi $20, $0, 0x360 + andi $8, $1, 0x4 + beq $8, $0, 0xlbl13a4 + lqv $v26[0], 0x30($22) + lw $19, 0x24($29) + lw $8, 0x4c($29) + addi $17, $0, 0x1 + addi $1, $19, 0x40 + beq $19, $8, 0xlbl13a4 + addi $12, $0, 0x3f + jal DMAproc + sw $1, 0x24($29) + jal DMAwait + + +lbl_13a4: + , 0x10($22) + beq $7, $0, 0xlbl13e4 + + + +lbl_13ac: + , 0x20($22) + sqv $v26[0], 0x30($20) + lqv $v29[0], 0x0($22) + sqv $v28[0], 0x10($20) + addi $3, $0, 0x3e0 + sqv $v27[0], 0x20($20) + sqv $v29[0], 0x0($20) + addi $1, $0, 0x360 + addi $2, $0, 0x3a0 + j 0xlbl1488 + lh $31, 0xbe($0) + + +lbl_13d8: + , 0x30($22) + j 0xlbl1424 + addi $20, $0, 0x3a0 + + +lbl_13e4: + addiu $3, $0, 0xde0 + addu $1, $0, $22 + jal 0xlbl1488 + addu $2, $0, $20 + sqv $v6[0], 0x30($20) + sqv $v5[0], 0x10($20) + lqv $v27[0], 0x0($3) + j 0xlbl143c + lqv $v29[0], -0x20($3) + addi $19, $3, 0x10 + + +lbl_140c: + + addi $18, $1, 0x8 + + +lbl_1414: + , 0x0($2) + ldv $v4[0], 0x20($2) + lqv $v1[0], 0x0($1) + lqv $v2[0], 0x20($1) + + +lbl_1424: + , 0x0($2) + ldv $v4[8], 0x20($2) + vmadl $v6, $v4, $v2[0h] + addi $1, $1, 0x2 + vmadm $v6, $v3, $v2[0h] + addi $2, $2, 0x8 + + +lbl_143c: + + vmadh $v5, $v3, $v1[0h] + bne $1, $18, 0xlbl1414 + vmadn $v6, $v31, $v31[0] + addi $2, $2, 0xffe0 + addi $1, $1, 0x8 + sqv $v5[0], 0x0($3) + sqv $v6[0], 0x20($3) + bne $3, $19, 0xlbl140c + addi $3, $3, 0x10 + jr $31 + nop + addi $8, $0, 0x320 + lqv $v3[0], 0x50($0) + lsv $v19[0], 0x2($29) + lh $3, 0x4($29) + ldv $v0[0], 0x0($8) + ldv $v1[0], 0x8($8) + ldv $v0[8], 0x0($8) + + +lbl_1488: + , 0x8($8) + jr $31 + vmudh $v0, $v0, $v3 + addi $8, $0, 0x3e0 + ldv $v11[0], 0x18($8) + ldv $v11[8], 0x18($8) + ldv $v15[0], 0x38($8) + ldv $v15[8], 0x38($8) + ldv $v8[0], 0x0($8) + ldv $v9[0], 0x8($8) + ldv $v10[0], 0x10($8) + ldv $v12[0], 0x20($8) + ldv $v13[0], 0x28($8) + ldv $v14[0], 0x30($8) + ldv $v8[8], 0x0($8) + ldv $v9[8], 0x8($8) + ldv $v10[8], 0x10($8) + ldv $v12[8], 0x20($8) + ldv $v13[8], 0x28($8) + jr $31 + ldv $v14[8], 0x30($8) + lqv $v0[0], 0x0($22) + lh $5, 0x270($1) + j lbl10a8 + sqv $v0[0], 0x0($5) + + +lbl_14ec: + lh $8, 0xbe($0) + sh $8, 0x106($0) + srl $1, $1, 4 + addi $5, $1, 0x1 + addi $9, $5, 0x0 + ldv $v2[0], 0x0($22) + ldv $v2[8], 0x10($22) + addi $7, $0, 0x420 + sll $8, $6, 5 + sll $6, $6, 3 + + +lbl_1514: + add $8, $6, $8 + jal 0xlbl14ec + add $7, $7, $8 + llv $v17[0], 0x14($29) + jal 0xlbl1514 + + +lbl_1528: + , 0x14($29) + + +lbl_152c: + + llv $v18[0], 0x8($22) + vmadh $v28, $v8, $v2[0h] + lw $15, 0xc($22) + vmadn $v28, $v13, $v2[1h] + lw $16, 0x1c($22) + vmadh $v28, $v9, $v2[1h] + andi $1, $3, 0x2 + vmadn $v28, $v14, $v2[2h] + vmadh $v28, $v10, $v2[2h] + vmadn $v28, $v15, $v31[1] + llv $v18[8], 0x18($22) + vmadh $v29, $v11, $v31[1] + bne $1, $0, 0xlbl171c + addi $22, $22, 0x20 + vmudm $v18, $v18, $v17 + lsv $v21[0], 0x76($0) + vmudn $v20, $v28, $v21[0] + mfc2 $13, $v29[6] + andi $13, $13, 0x8000 + srl $13, $13, 13 + vmadh $v21, $v29, $v21[0] + mfc2 $14, $v29[14] + andi $14, $14, 0x8000 + srl $14, $14, 9 + vch $v3, $v29, $v29[3h] + or $14, $14, $13 + vcl $v3, $v28, $v28[3h] + cfc2 $13, $vcc + vch $v3, $v29, $v21[3h] + vcl $v3, $v28, $v20[3h] + andi $8, $13, 0x703 + andi $13, $13, 0x7030 + or $13, $13, $14 + sll $8, $8, 4 + sll $13, $13, 16 + or $13, $13, $8 + cfc2 $14, $vcc + andi $8, $14, 0x707 + vadd $v21, $v29, $v31[0] + andi $14, $14, 0x7070 + vadd $v20, $v28, $v31[0] + sll $14, $14, 12 + vmudl $v28, $v28, $v19[0] + or $8, $8, $14 + vmadm $v29, $v29, $v19[0] + or $8, $8, $13 + + +lbl_15e8: + + + +lbl_15ec: + sh $8, 0x24($7) + jal 0xlbl1000 + lh $13, 0xffe6($22) + vge $v6, $v27, $v31[0] + sdv $v21[0], 0x0($7) + vmrg $v6, $v27, $v30[0] + sdv $v20[0], 0x8($7) + vmudl $v5, $v20, $v26[3h] + vmadm $v5, $v21, $v26[3h] + vmadn $v5, $v20, $v6[3h] + vmadh $v4, $v21, $v6[3h] + addi $9, $9, 0xffff + vmudl $v5, $v5, $v19[0] + vmadm $v4, $v4, $v19[0] + vmadn $v5, $v31, $v31[0] + andi $12, $3, 0x1 + ldv $v2[0], 0x0($22) + vmudh $v7, $v1, $v31[1] + ldv $v2[8], 0x10($22) + vmadn $v7, $v5, $v0 + ldv $v29[0], 0x28($0) + vmadh $v6, $v4, $v0 + ldv $v29[8], 0x28($0) + vmadn $v7, $v31, $v31[0] + vge $v6, $v6, $v29[1q] + sw $15, 0x10($7) + beq $12, $0, 0xlbl1684 + vlt $v6, $v6, $v29[0q] + lqv $v3[0], 0x330($0) + vmudn $v5, $v5, $v3[0] + vmadh $v4, $v4, $v3[0] + vadd $v4, $v4, $v3[1] + vge $v4, $v4, $v31[0] + vlt $v4, $v4, $v3[2] + sbv $v4[5], 0x13($7) + sw $16, 0x18($7) + sbv $v4[13], 0x1b($7) + lw $16, 0x18($7) + + +lbl_1684: + , 0x14($7) + sdv $v6[0], 0x18($7) + ssv $v7[4], 0x1e($7) + ssv $v27[6], 0x20($7) + ssv $v26[6], 0x22($7) + blez $9, 0xlbl16cc + addi $9, $9, 0xffff + sdv $v21[8], 0x28($7) + sdv $v20[8], 0x30($7) + slv $v18[8], 0x3c($7) + sw $16, 0x38($7) + sdv $v6[8], 0x40($7) + ssv $v7[12], 0x46($7) + ssv $v27[14], 0x48($7) + ssv $v26[14], 0x4a($7) + sw $8, 0x4c($7) + addi $7, $7, 0x50 + bgtz $9, 0xlbl152c + + +lbl_16cc: + lh $8, 0x106($0) + jr $8 + nop + bgtz $1, 0xlbl16f8 + lb $2, 0x4a($29) + addi $4, $2, 0xffdc + bgtz $4, lbl1028 + addi $3, $2, 0x336 + addi $2, $2, 0x4 + sw $26, 0x0($3) + sb $2, 0x4a($29) + + +lbl_16f8: + jal segmented_to_physical + add $19, $24, $0 + add $26, $19, $0 + j lbl10a8 + addi $28, $0, 0x0 + nop + + +lbl_1710: + ori $30, $0, 0x10 + beq $0, $0, 0xlbl107c + lh $21, 0x100($0) + + +lbl_171c: + ori $30, $0, 0x18 + beq $0, $0, 0xlbl107c + lh $21, 0xa0($0) + ori $2, $0, 0x2800 + mtc0 $2, SP_STATUS + lqv $v31[0], 0x30($0) + lqv $v30[0], 0x40($0) + lw $4, 0xfc4($0) + andi $4, $4, 0x1 + bne $4, $0, 0xlbl1818 + nop + lw $23, 0x28($1) + lw $3, 0x2c($1) + sw $23, 0x40($29) + sw $3, 0x44($29) + mfc0 $4, CMD_STATUS + andi $4, $4, 0x1 + bne $4, $0, 0xlbl178c + mfc0 $4, CMD_END + sub $23, $23, $4 + bgtz $23, 0xlbl178c + mfc0 $5, CMD_CURRENT + beq $5, $0, 0xlbl178c + nop + beq $5, $4, 0xlbl178c + nop + j 0xlbl1828 + ori $3, $4, 0x0 + + +lbl_178c: + mfc0 $4, CMD_STATUS + andi $4, $4, 0x400 + bne $4, $0, 0xlbl178c + addi $4, $0, 0x1 + mtc0 $4, CMD_STATUS + mtc0 $3, CMD_START + mtc0 $3, CMD_END + + + +lbl_17a8: + sw $3, 0x18($29) + addi $23, $0, 0x9e0 + + +lbl_17b0: + lw $5, 0x10($1) + lw $2, 0x8($0) + lw $3, 0x10($0) + lw $4, 0x18($0) + lw $6, 0x20($0) + add $2, $2, $5 + add $3, $3, $5 + add $4, $4, $5 + add $6, $6, $5 + sw $2, 0x8($0) + sw $3, 0x10($0) + sw $4, 0x18($0) + sw $6, 0x20($0) + jal 0xlbl10f8 + addi $30, $0, 0x8 + jal lbl10d4 + lw $26, 0x30($1) + lw $2, 0x20($1) + sw $2, 0x20($29) + + +lbl_17fc: + sw $2, 0x24($29) + addi $2, $2, 0x280 + sw $2, 0x4c($29) + lw $2, 0xfff8($0) + sw $2, 0x108($0) + j 0xlbl1058 + nop + + +lbl_1818: + jal 0xlbl10f8 + addi $30, $0, 0x8 + lw $23, 0x8f0($0) + lw $28, 0x8e4($0) + + +lbl_1828: + lw $27, 0x8e8($0) + j lbl10a8 + lw $26, 0x8ec($0) + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + lh $11, 0x24($3) + lh $8, 0x24($2) + lh $9, 0x24($1) + and $12, $11, $8 + or $11, $11, $8 + and $12, $12, $9 + andi $12, $12, 0x7030 + bne $12, $0, lbl1028 + or $11, $11, $9 + andi $11, $11, 0x4343 + bne $11, $0, 0xlbl1710 + llv $v13[0], 0x18($1) + llv $v14[0], 0x18($2) + llv $v15[0], 0x18($3) + lw $13, 0x4($29) + + +lbl_001c: + addi $8, $0, 0x8e0 + lsv $v21[0], 0x2($29) + lsv $v5[0], 0x6($1) + vsub $v10, $v14, $v13 + lsv $v6[0], 0xe($1) + vsub $v9, $v15, $v13 + lsv $v5[2], 0x6($2) + vsub $v12, $v13, $v14 + lsv $v6[2], 0xe($2) + lsv $v5[4], 0x6($3) + lsv $v6[4], 0xe($3) + vmudh $v16, $v9, $v10[1] + lh $9, 0x1a($1) + vsar $v18, $v18, $v18[1] + lh $10, 0x1a($2) + + +lbl_19a8: + + lh $11, 0x1a($3) + + +lbl_19b0: + + andi $14, $13, 0x1000 + vsar $v20, $v20, $v20[1] + andi $15, $13, 0x2000 + vsar $v19, $v19, $v19[0] + addi $12, $0, 0x0 + slt $7, $10, $9 + blez $7, 0xlbl19f0 + add $7, $10, $0 + add $10, $9, $0 + add $9, $7, $0 + addu $7, $2, $0 + addu $2, $1, $0 + addu $1, $7, $0 + xori $12, $12, 0x1 + nop + + +lbl_19f0: + vaddc $v28, $v18, $v20 + slt $7, $11, $10 + vadd $v29, $v17, $v19 + blez $7, 0xlbl1a20 + add $7, $11, $0 + add $11, $10, $0 + add $10, $7, $0 + addu $7, $3, $0 + addu $3, $2, $0 + addu $2, $7, $0 + j 0xlbl1a48 + xori $12, $12, 0x1 + + +lbl_1a20: + + llv $v15[0], 0x18($3) + vor $v26, $v29, $v28 + llv $v14[0], 0x18($2) + llv $v13[0], 0x18($1) + blez $12, 0xlbl1a48 + vsub $v4, $v15, $v14 + vmudn $v28, $v28, $v31[3] + vmadh $v29, $v29, $v31[3] + vmadn $v28, $v31, $v31[0] + + +lbl_1a48: + vsub $v10, $v14, $v13 + mfc2 $17, $v27[0] + vsub $v9, $v15, $v13 + mfc2 $16, $v26[0] + sra $17, $17, 31 + vmov $v29[3], $v29[0] + and $15, $15, $17 + vmov $v28[3], $v28[0] + vmov $v4[2], $v10[0] + beq $16, $0, 0xlbl1f68 + xori $17, $17, 0xffff + vlt $v27, $v29, $v31[0] + and $14, $14, $17 + vmov $v4[3], $v10[1] + or $16, $15, $14 + vmov $v4[4], $v9[0] + bgtz $16, 0xlbl1f68 + vmov $v4[5], $v9[1] + mfc2 $7, $v27[0] + jal 0xlbl1000 + addi $6, $0, 0x80 + bltz $7, 0xlbl1aa8 + lb $5, 0x7($29) + addi $6, $0, 0x0 + + +lbl_1aa8: + + vmadn $v10, $v31, $v31[0] + vrcp $v8[1], $v4[1] + vrcph $v7[1], $v31[0] + ori $5, $5, 0xc8 + lb $7, 0x12($29) + vrcp $v8[3], $v4[3] + vrcph $v7[3], $v31[0] + vrcp $v8[5], $v4[5] + vrcph $v7[5], $v31[0] + or $6, $6, $7 + vmudl $v8, $v8, $v30[4] + sb $5, 0x0($23) + vmadm $v7, $v7, $v30[4] + sb $6, 0x1($23) + vmadn $v8, $v31, $v31[0] + vmudh $v4, $v4, $v31[5] + lsv $v12[0], 0x18($2) + vmudl $v6, $v6, $v21[0] + lsv $v12[4], 0x18($1) + vmadm $v5, $v5, $v21[0] + lsv $v12[8], 0x18($1) + vmadn $v6, $v31, $v31[0] + sll $7, $9, 14 + vmudl $v1, $v8, $v10[0q] + vmadm $v1, $v7, $v10[0q] + vmadn $v1, $v8, $v9[0q] + vmadh $v0, $v7, $v9[0q] + mtc2 $7, $v2[0] + vmadn $v1, $v31, $v31[0] + sw $3, 0x0($8) + vmudl $v8, $v8, $v31[4] + vmadm $v7, $v7, $v31[4] + vmadn $v8, $v31, $v31[0] + vmudl $v1, $v1, $v31[4] + vmadm $v0, $v0, $v31[4] + vmadn $v1, $v31, $v31[0] + sh $11, 0x2($23) + vand $v16, $v1, $v30[1] + sh $9, 0x6($23) + vmudm $v12, $v12, $v31[4] + sw $2, 0x4($8) + vmadn $v13, $v31, $v31[0] + sw $1, 0x8($8) + sh $10, 0x4($23) + vcr $v0, $v0, $v30[6] + ssv $v12[0], 0x8($23) + vmudl $v11, $v16, $v2[0] + ssv $v13[0], 0xa($23) + vmadm $v10, $v0, $v2[0] + ssv $v0[2], 0xc($23) + vmadn $v11, $v31, $v31[0] + ssv $v1[2], 0xe($23) + andi $7, $5, 0x2 + addi $15, $8, 0x8 + addi $16, $8, 0x10 + vsubc $v3, $v13, $v11[1q] + + +lbl_1b8c: + , 0x14($23) + vsub $v9, $v12, $v10[1q] + ssv $v1[10], 0x16($23) + vsubc $v21, $v6, $v6[1] + ssv $v0[6], 0x1c($23) + vlt $v19, $v5, $v5[1] + ssv $v1[6], 0x1e($23) + vmrg $v20, $v6, $v6[1] + ssv $v9[8], 0x10($23) + vsubc $v21, $v20, $v6[2] + ssv $v3[8], 0x12($23) + vlt $v19, $v19, $v5[2] + ssv $v9[4], 0x18($23) + vmrg $v20, $v20, $v6[2] + ssv $v3[4], 0x1a($23) + addi $23, $23, 0x20 + blez $7, lbl1c94 + vmudl $v20, $v20, $v30[5] + lw $14, 0x0($15) + vmadm $v19, $v19, $v30[5] + lw $17, 0xfffc($15) + vmadn $v20, $v31, $v31[0] + lw $18, 0xfff8($15) + llv $v9[0], 0x14($14) + llv $v9[8], 0x14($17) + llv $v22[0], 0x14($18) + lsv $v11[0], 0x22($14) + lsv $v12[0], 0x20($14) + lsv $v11[8], 0x22($17) + vmov $v9[2], $v30[0] + lsv $v12[8], 0x20($17) + vmov $v9[6], $v30[0] + lsv $v24[0], 0x22($18) + vmov $v22[2], $v30[0] + lsv $v25[0], 0x20($18) + vmudl $v6, $v11, $v20[0] + vmadm $v6, $v12, $v20[0] + ssv $v19[0], 0x44($8) + vmadn $v6, $v11, $v19[0] + ssv $v20[0], 0x4c($8) + vmadh $v5, $v12, $v19[0] + vmudl $v16, $v24, $v20[0] + vmadm $v16, $v25, $v20[0] + vmadn $v20, $v24, $v19[0] + vmadh $v19, $v25, $v19[0] + vmudm $v16, $v9, $v6[0h] + vmadh $v9, $v9, $v5[0h] + vmadn $v10, $v31, $v31[0] + vmudm $v16, $v22, $v20[0] + vmadh $v22, $v22, $v19[0] + vmadn $v23, $v31, $v31[0] + sdv $v9[8], 0x10($16) + sdv $v10[8], 0x18($16) + sdv $v9[0], 0x0($16) + sdv $v10[0], 0x8($16) + sdv $v22[0], 0x20($16) + sdv $v23[0], 0x28($16) + vabs $v9, $v9, $v9 + llv $v19[0], 0x10($16) + vabs $v22, $v22, $v22 + llv $v20[0], 0x18($16) + vabs $v19, $v19, $v19 + vge $v17, $v9, $v22 + vmrg $v18, $v10, $v23 + vge $v17, $v17, $v19 + vmrg $v18, $v18, $v20 + + +lbl_1c94: + , 0x40($8) + slv $v18[0], 0x48($8) + andi $7, $5, 0x7 + blez $7, 0xlbl1f64 + vxor $v18, $v31, $v31 + luv $v25[0], 0x10($3) + vadd $v16, $v18, $v30[5] + luv $v15[0], 0x10($1) + vadd $v24, $v18, $v30[5] + andi $7, $13, 0x200 + vadd $v5, $v18, $v30[5] + bgtz $7, 0xlbl1cd4 + luv $v23[0], 0x10($2) + luv $v25[0], 0x10($4) + luv $v15[0], 0x10($4) + luv $v23[0], 0x10($4) + + +lbl_1cd4: + + vmudm $v15, $v15, $v31[7] + vmudm $v23, $v23, $v31[7] + ldv $v16[8], 0x18($8) + ldv $v15[8], 0x10($8) + ldv $v24[8], 0x28($8) + ldv $v23[8], 0x20($8) + ldv $v5[8], 0x38($8) + ldv $v25[8], 0x30($8) + lsv $v16[14], 0x1e($1) + lsv $v15[14], 0x1c($1) + lsv $v24[14], 0x1e($2) + lsv $v23[14], 0x1c($2) + lsv $v5[14], 0x1e($3) + lsv $v25[14], 0x1c($3) + vsubc $v12, $v24, $v16 + vsub $v11, $v23, $v15 + vsubc $v20, $v16, $v5 + vsub $v19, $v15, $v25 + vsubc $v10, $v5, $v16 + vsub $v9, $v25, $v15 + vsubc $v22, $v16, $v24 + vsub $v21, $v15, $v23 + vmudn $v6, $v10, $v4[3] + vmadh $v6, $v9, $v4[3] + vmadn $v6, $v22, $v4[5] + vmadh $v6, $v21, $v4[5] + vsar $v9, $v9, $v9[0] + vsar $v10, $v10, $v10[1] + vmudn $v6, $v12, $v4[4] + vmadh $v6, $v11, $v4[4] + vmadn $v6, $v20, $v4[2] + vmadh $v6, $v19, $v4[2] + vsar $v11, $v11, $v11[0] + vsar $v12, $v12, $v12[1] + vmudl $v6, $v10, $v26[3] + vmadm $v6, $v9, $v26[3] + vmadn $v10, $v10, $v27[3] + vmadh $v9, $v9, $v27[3] + vmudl $v6, $v12, $v26[3] + vmadm $v6, $v11, $v26[3] + vmadn $v12, $v12, $v27[3] + sdv $v9[0], 0x8($23) + vmadh $v11, $v11, $v27[3] + sdv $v10[0], 0x18($23) + vmudn $v6, $v12, $v31[1] + vmadh $v6, $v11, $v31[1] + vmadl $v6, $v10, $v1[5] + vmadm $v6, $v9, $v1[5] + vmadn $v14, $v10, $v0[5] + sdv $v11[0], 0x28($23) + vmadh $v13, $v9, $v0[5] + sdv $v12[0], 0x38($23) + vmudl $v28, $v14, $v2[0] + sdv $v13[0], 0x20($23) + vmadm $v6, $v13, $v2[0] + sdv $v14[0], 0x30($23) + vmadn $v28, $v31, $v31[0] + vsubc $v18, $v16, $v28 + vsub $v17, $v15, $v6 + andi $7, $5, 0x4 + blez $7, 0xlbl1ddc + andi $7, $5, 0x2 + addi $23, $23, 0x40 + sdv $v17[0], -0x40($23) + sdv $v18[0], -0x30($23) + + +lbl_1ddc: + blez $7, 0xlbl1ee0 + andi $7, $5, 0x1 + addi $16, $0, 0x800 + mtc2 $16, $v19[0] + vabs $v24, $v9, $v9 + ldv $v20[8], 0x40($8) + vabs $v25, $v11, $v11 + ldv $v21[8], 0x48($8) + vmudm $v24, $v24, $v19[0] + vmadn $v26, $v31, $v31[0] + vmudm $v25, $v25, $v19[0] + vmadn $v27, $v31, $v31[0] + vmudl $v21, $v21, $v19[0] + vmadm $v20, $v20, $v19[0] + vmadn $v21, $v31, $v31[0] + vmudn $v26, $v26, $v31[2] + vmadh $v24, $v24, $v31[2] + vmadn $v26, $v31, $v31[0] + vmadn $v23, $v27, $v31[1] + vmadh $v22, $v25, $v31[1] + addi $16, $0, 0x40 + vmadn $v6, $v21, $v31[1] + mtc2 $16, $v19[0] + vmadh $v5, $v20, $v31[1] + vsubc $v23, $v6, $v6[5] + vge $v5, $v5, $v5[5] + vmrg $v6, $v6, $v6[5] + vsubc $v23, $v6, $v6[6] + vge $v5, $v5, $v5[6] + vmrg $v6, $v6, $v6[6] + vmudl $v6, $v6, $v19[0] + vmadm $v5, $v5, $v19[0] + vmadn $v6, $v31, $v31[0] + vrcph $v23[0], $v5[4] + vrcpl $v6[0], $v6[4] + vrcph $v5[0], $v31[0] + vmudn $v6, $v6, $v31[2] + vmadh $v5, $v5, $v31[2] + vlt $v5, $v5, $v31[1] + vmrg $v6, $v6, $v31[0] + vmudl $v20, $v18, $v6[0] + vmadm $v20, $v17, $v6[0] + vmadn $v20, $v18, $v5[0] + vmadh $v19, $v17, $v5[0] + vmudl $v22, $v10, $v6[0] + vmadm $v22, $v9, $v6[0] + vmadn $v22, $v10, $v5[0] + sdv $v19[8], 0x0($23) + vmadh $v21, $v9, $v5[0] + sdv $v20[8], 0x10($23) + vmudl $v24, $v12, $v6[0] + vmadm $v24, $v11, $v6[0] + vmadn $v24, $v12, $v5[0] + sdv $v21[8], 0x8($23) + vmadh $v23, $v11, $v5[0] + sdv $v22[8], 0x18($23) + vmudl $v26, $v14, $v6[0] + vmadm $v26, $v13, $v6[0] + vmadn $v26, $v14, $v5[0] + sdv $v23[8], 0x28($23) + vmadh $v25, $v13, $v5[0] + sdv $v24[8], 0x38($23) + addi $23, $23, 0x40 + sdv $v25[8], -0x20($23) + sdv $v26[8], -0x10($23) + + +lbl_1ee0: + blez $7, 0xlbl1f64 + vmudn $v14, $v14, $v30[4] + vmadh $v13, $v13, $v30[4] + vmadn $v14, $v31, $v31[0] + vmudn $v16, $v16, $v30[4] + vmadh $v15, $v15, $v30[4] + vmadn $v16, $v31, $v31[0] + ssv $v13[14], 0x8($23) + vmudn $v10, $v10, $v30[4] + ssv $v14[14], 0xa($23) + vmadh $v9, $v9, $v30[4] + vmadn $v10, $v31, $v31[0] + vmudn $v12, $v12, $v30[4] + vmadh $v11, $v11, $v30[4] + vmadn $v12, $v31, $v31[0] + lbu $7, 0x11($29) + sub $7, $0, $7 + beq $7, $0, 0xlbl1f34 + mtc2 $7, $v6[0] + vch $v11, $v11, $v6[0] + vcl $v12, $v12, $v31[0] + + +lbl_1f34: + , 0x4($23) + vmudl $v28, $v14, $v2[0] + ssv $v10[14], 0x6($23) + vmadm $v6, $v13, $v2[0] + ssv $v11[14], 0xc($23) + vmadn $v28, $v31, $v31[0] + ssv $v12[14], 0xe($23) + vsubc $v18, $v16, $v28 + vsub $v17, $v15, $v6 + addi $23, $23, 0x10 + ssv $v17[14], -0x10($23) + ssv $v18[14], -0xe($23) + + +lbl_1f64: + jal lbl1178 + + +lbl_1f68: + nop + jr $30 + nop + nop + vrcph $v27[3], $v29[3] + vrcpl $v26[3], $v28[3] + vrcph $v27[3], $v29[7] + vrcpl $v26[7], $v28[7] + vrcph $v27[7], $v31[0] + vmudn $v26, $v26, $v31[2] + vmadh $v27, $v27, $v31[2] + vmadn $v26, $v31, $v31[0] + lqv $v23[0], 0x60($0) + vxor $v22, $v31, $v31 + vmudl $v24, $v26, $v28 + vmadm $v24, $v27, $v28 + vmadn $v24, $v26, $v29 + vmadh $v25, $v27, $v29 + vsubc $v24, $v22, $v24 + vsub $v25, $v23, $v25 + vmudl $v22, $v26, $v24 + vmadm $v23, $v27, $v24 + vmadn $v26, $v26, $v25 + vmadh $v27, $v27, $v25 + jr $31 + nop + jal DMAwait + addi $27, $0, 0x6a0 + lw $25, 0x0($27) + lw $24, 0x4($27) + srl $1, $25, 29 + andi $1, $1, 0x6 + addi $26, $26, 0x8 + addi $27, $27, 0x8 + addi $28, $28, 0xfff8 + bgtz $1, 0xlbl0014 + andi $18, $25, 0x1ff + addi $22, $0, 0x7e0 + beq $0, $0, lbl001c + sh $31, 0x158($0) + nop + nop + ori $30, $0, 0x18 + beq $0, $0, lbl001c + lh $21, 0xa0($0) + sh $3, 0x940($0) + sh $2, 0x942($0) + sh $1, 0x944($0) + sh $0, 0x946($0) + ori $7, $0, 0xdb8 + ori $30, $0, 0x940 + ori $6, $0, 0xc + or $5, $30, $30 + xori $30, $30, 0x14 + beq $6, $0, 0xlbl00ec + lh $11, 0xa6($6) + addi $6, $6, 0xfffe + ori $17, $0, 0x0 + or $18, $0, $0 + ori $2, $5, 0x0 + j lbl17fc + addi $14, $30, 0x2 + and $8, $8, $11 + beq $8, $18, 0xlbl009c + addi $2, $2, 0x2 + or $20, $10, $0 + sh $10, 0x0($14) + addi $14, $14, 0x2 + lh $10, 0x0($2) + bne $10, $0, 0xlbl0060 + lh $8, 0x24($10) + addi $8, $17, 0xfffe + bgtz $8, 0xlbl0078 + ori $2, $5, 0x0 + beq $8, $0, 0xlbl0040 + nop + j lbl19a8 + xor $18, $18, $11 + lh $8, 0xf6($17) + addi $17, $17, 0x2 + jr $8 + lh $8, 0x102($0) + mtc2 $10, $v13[0] + or $10, $20, $0 + mfc2 $20, $v13[0] + ori $14, $30, 0x0 + lh $8, 0xf8($0) + sh $8, 0x106($0) + addi $7, $7, 0x28 + sh $7, 0x0($14) + sh $0, 0x2($14) + ldv $v9[0], 0x0($10) + ldv $v10[0], 0x8($10) + ldv $v4[0], 0x0($20) + ldv $v5[0], 0x8($20) + sll $8, $6, 2 + ldv $v1[0], 0x70($8) + vmudh $v0, $v1, $v31[3] + vmudn $v12, $v5, $v1 + vmadh $v11, $v4, $v1 + vmadn $v12, $v31, $v31[0] + vmadn $v28, $v10, $v0 + vmadh $v29, $v9, $v0 + vmadn $v28, $v31, $v31[0] + vaddc $v26, $v28, $v28[0q] + vadd $v27, $v29, $v29[0q] + vaddc $v28, $v26, $v26[1h] + vadd $v29, $v27, $v27[1h] + mfc2 $8, $v29[6] + vrcph $v7[3], $v29[3] + vrcpl $v3[3], $v28[3] + vrcph $v7[3], $v31[0] + vmudn $v3, $v3, $v31[2] + bgez $8, 0xlbl013c + vmadh $v7, $v7, $v31[2] + vmudn $v3, $v3, $v31[3] + vmadh $v7, $v7, $v31[3] + veq $v7, $v7, $v31[0] + vmrg $v3, $v3, $v31[3] + vmudl $v28, $v28, $v3[3] + vmadm $v29, $v29, $v3[3] + jal 0xlbl1000 + vmadn $v28, $v31, $v31[0] + vaddc $v28, $v12, $v12[0q] + vadd $v29, $v11, $v11[0q] + vaddc $v12, $v28, $v28[1h] + vadd $v11, $v29, $v29[1h] + vmudl $v15, $v12, $v26 + vmadm $v15, $v11, $v26 + vmadn $v15, $v12, $v27 + vmadh $v8, $v11, $v27 + vmudl $v28, $v31, $v31[5] + vmadl $v15, $v15, $v3[3] + vmadm $v8, $v8, $v3[3] + vmadn $v15, $v31, $v31[0] + veq $v8, $v8, $v31[0] + vmrg $v15, $v15, $v31[3] + vne $v15, $v15, $v31[0] + vmrg $v15, $v15, $v31[1] + vnxor $v8, $v15, $v31[0] + vaddc $v8, $v8, $v31[1] + vadd $v29, $v29, $v29 + vmudl $v28, $v5, $v8[3h] + vmadm $v29, $v4, $v8[3h] + vmadl $v28, $v10, $v15[3h] + vmadm $v29, $v9, $v15[3h] + vmadn $v28, $v31, $v31[0] + luv $v12[0], 0x10($10) + luv $v11[0], 0x10($20) + llv $v12[8], 0x14($10) + llv $v11[8], 0x14($20) + vmudm $v18, $v12, $v15[3] + vmadm $v18, $v11, $v8[3] + suv $v18[0], 0x0($7) + sdv $v18[8], 0x8($7) + ldv $v18[0], 0x8($7) + jal 0xlbl14ec + lw $15, 0x0($7) + mfc2 $10, $v13[0] + j lbl15ec + ori $9, $0, 0x1 + lh $8, 0x0($5) + sh $8, 0xb4($0) + sh $5, 0x106($0) + lh $30, 0xfe($0) + lh $8, 0x106($0) + lh $3, 0xb4($0) + lh $2, 0x2($8) + lh $1, 0x4($8) + addi $8, $8, 0x2 + bne $1, $0, 0xlbl024c + sh $8, 0x106($0) + j lbl10a8 + nop + ori $30, $0, 0x10 + beq $0, $0, lbl1b8c + lh $21, 0x100($0) + lw $1, 0x12c($0) + sw $15, 0x0($7) + sw $16, 0x4($7) + bltz $1, 0xlbl02c4 + lpv $v4[0], 0x0($7) + luv $v7[0], 0x1d0($1) + vxor $v27, $v27, $v27 + vge $v7, $v7, $v31[0] + lpv $v5[0], 0x1c0($1) + vadd $v27, $v27, $v7 + luv $v7[0], 0x1b0($1) + vor $v20, $v6, $v31[0] + vmulf $v6, $v4, $v5 + vadd $v3, $v6, $v6[1q] + vadd $v6, $v3, $v6[2h] + vmulf $v7, $v7, $v6[0h] + bgtz $1, 0xlbl0248 + addi $1, $1, 0xffe0 + suv $v27[0], 0x0($7) + andi $8, $3, 0x4 + sb $15, 0x3($7) + sb $16, 0x7($7) + lw $15, 0x0($7) + beq $8, $0, 0xlbl0078 + lw $16, 0x4($7) + andi $8, $3, 0x8 + lpv $v7[0], 0x90($29) + ldv $v6[0], 0xa0($0) + vmadn $v20, $v7, $v20[0h] + beq $8, $0, 0x40002bc + vmadm $v18, $v31, $v31[0] + vmulf $v7, $v18, $v18 + vmulf $v7, $v7, $v18 + vmulf $v20, $v7, $v6[1] + vmacf $v20, $v7, $v6[3] + vmacf $v18, $v18, $v6[2] + j lbl15e8 + vadd $v18, $v18, $v31[4] + andi $1, $1, 0xfff + sw $1, 0x12c($0) + jal lbl1528 + addi $8, $0, 0x360 + ori $8, $0, 0xde0 + stv $v8[2], 0x10($8) + stv $v8[4], 0x20($8) + stv $v8[12], 0x30($8) + stv $v8[14], 0x40($8) + ltv $v8[14], 0x10($8) + ltv $v8[12], 0x20($8) + ltv $v8[4], 0x30($8) + ltv $v8[2], 0x40($8) + sdv $v12[8], 0x10($8) + sdv $v13[8], 0x20($8) + sdv $v14[8], 0x30($8) + ldv $v12[0], 0x10($8) + ldv $v13[0], 0x20($8) + ldv $v14[0], 0x30($8) + lpv $v5[0], 0x1b8($1) + vmulf $v5, $v5, $v31[4] + vmudn $v6, $v12, $v5[0h] + vmadn $v6, $v13, $v5[1h] + vmadn $v6, $v14, $v5[2h] + vmadm $v3, $v31, $v31[0] + vmudm $v6, $v3, $v31[2] + vmacf $v3, $v8, $v5[0h] + vmacf $v3, $v9, $v5[1h] + vmacf $v3, $v10, $v5[2h] + vmadn $v6, $v31, $v31[0] + vmudl $v5, $v6, $v6 + vmadm $v5, $v3, $v6 + vmadn $v5, $v6, $v3 + vmadh $v26, $v3, $v3 + vaddc $v7, $v5, $v5[1q] + vadd $v4, $v26, $v26[1q] + vaddc $v7, $v5, $v7[0h] + vadd $v4, $v26, $v4[0h] + vrsqh $v11[0], $v4[2] + vrsql $v15[0], $v7[2] + vrsqh $v11[0], $v31[0] + vmudl $v15, $v15, $v30[3] + vmadm $v11, $v11, $v30[3] + vmadn $v15, $v31, $v31[0] + vmudl $v7, $v6, $v15[0] + vmadm $v7, $v3, $v15[0] + vmadn $v7, $v6, $v11[0] + vmadh $v4, $v3, $v11[0] + vmadn $v7, $v31, $v31[0] + ldv $v2[0], 0xf8($29) + vge $v7, $v7, $v2[0] + vlt $v7, $v7, $v2[1] + vmudn $v7, $v7, $v2[2] + spv $v7[0], 0x1c0($1) + lw $8, 0x1c0($1) + sw $8, 0x1c4($1) + bgtz $1, 0xlbl0310 + addi $1, $1, 0xffe0 + j 0xlbl1514 + lh $31, 0xa0($0) + nop + j lbl17b0 + nop + nop + + + + + /* + * File: gdone.s + */ + + TaskHalt: + jal DMAwait + ori $2, $0, 0x4000 + mtc0 $2, SP_STATUS + break 0 + nop + + #include "gyield.s" + /* + * File: gyield.s + */ + RSPYield: + ori $2, $0, 0x1000 + sw $28, 0x8e4($0) + sw $27, 0x8e8($0) + sw $26, 0x8ec($0) + sw $23, 0x8f0($0) + lw $19, 0x108($0) + ori $20, $0, 0x0 + ori $18, $0, 0x8ff + + jal DMAproc + ori $17, $0, 0x1 + jal DMAwait + nop + j TaskDone + mtc0 $2, SP_STATUS + + nop + nop + addiu $0, $0, 0xbeef + nop diff --git a/asmdiff.sh b/scripts/asmdiff.sh old mode 100755 new mode 100644 similarity index 100% rename from asmdiff.sh rename to scripts/asmdiff.sh diff --git a/clean_baserom.sh b/scripts/clean_baserom.sh old mode 100755 new mode 100644 similarity index 86% rename from clean_baserom.sh rename to scripts/clean_baserom.sh index a1ed2c4..39d131e --- a/clean_baserom.sh +++ b/scripts/clean_baserom.sh @@ -1,4 +1,5 @@ #!/bin/bash +# This file will delete all extracted *.bin files from a previous ./extract_baserom.sh (provided the csv has not changed!!!) if [ -z "$1" ]; then DOALL="1" echo "Processing Everything" diff --git a/extract_asp_gsp_rsp.sh b/scripts/extract_asp_gsp_rsp.sh old mode 100755 new mode 100644 similarity index 99% rename from extract_asp_gsp_rsp.sh rename to scripts/extract_asp_gsp_rsp.sh index 2337191..e47babd --- a/extract_asp_gsp_rsp.sh +++ b/scripts/extract_asp_gsp_rsp.sh @@ -29,7 +29,7 @@ OUT_FILENAME="baserom.u.cdata" MD5_US="70c525880240c1e838b8b1be35666c3b" if [ -f "${ROM_FILENAME}" ]; then ROM_MD5=$(md5sum "${ROM_FILENAME}" | cut -d " " -f1) - + if [ "${ROM_MD5}" = "${MD5_US}" ]; then echo "extracting US compressed data segment" dd bs=1 skip=137616 count=71760 if="${ROM_FILENAME}" of="${OUT_FILENAME}" status=none @@ -73,7 +73,7 @@ START=${rspbootTextStart_ADDR} SIZE=${rspbootTextSize} if [ -f "${DATA_FILENAME}" ]; then ROM_MD5=$(md5sum "${DATA_FILENAME}" | cut -d " " -f1) - + if [ "${ROM_MD5}" = "${MD5_DATA_US}" ]; then echo "extracting ${OUT_FILENAME}" dd bs=1 skip=${START} count=${SIZE} if="${DATA_FILENAME}" of="${OUT_FILENAME}" status=none @@ -91,7 +91,7 @@ START=${gsp3DTextStart_ADDR} SIZE=${gsp3DTextSize} if [ -f "${DATA_FILENAME}" ]; then ROM_MD5=$(md5sum "${DATA_FILENAME}" | cut -d " " -f1) - + if [ "${ROM_MD5}" = "${MD5_DATA_US}" ]; then echo "extracting ${OUT_FILENAME}" dd bs=1 skip=${START} count=${SIZE} if="${DATA_FILENAME}" of="${OUT_FILENAME}" status=none @@ -109,7 +109,7 @@ START=${gsp3DDataStart_ADDR} SIZE=${gsp3DDataSize} if [ -f "${DATA_FILENAME}" ]; then ROM_MD5=$(md5sum "${DATA_FILENAME}" | cut -d " " -f1) - + if [ "${ROM_MD5}" = "${MD5_DATA_US}" ]; then echo "extracting ${OUT_FILENAME}" dd bs=1 skip=${START} count=${SIZE} if="${DATA_FILENAME}" of="${OUT_FILENAME}" status=none @@ -127,7 +127,7 @@ START=${aspMainTextStart_ADDR} SIZE=${aspMainTextSize} if [ -f "${DATA_FILENAME}" ]; then ROM_MD5=$(md5sum "${DATA_FILENAME}" | cut -d " " -f1) - + if [ "${ROM_MD5}" = "${MD5_DATA_US}" ]; then echo "extracting ${OUT_FILENAME}" dd bs=1 skip=${START} count=${SIZE} if="${DATA_FILENAME}" of="${OUT_FILENAME}" status=none @@ -145,7 +145,7 @@ START=${aspMainDataStart_ADDR} SIZE=${aspMainDataSize} if [ -f "${DATA_FILENAME}" ]; then ROM_MD5=$(md5sum "${DATA_FILENAME}" | cut -d " " -f1) - + if [ "${ROM_MD5}" = "${MD5_DATA_US}" ]; then echo "extracting ${OUT_FILENAME}" dd bs=1 skip=${START} count=${SIZE} if="${DATA_FILENAME}" of="${OUT_FILENAME}" status=none @@ -154,4 +154,4 @@ if [ -f "${DATA_FILENAME}" ]; then fi else echo "${DATA_FILENAME} not found" -fi \ No newline at end of file +fi diff --git a/extract_baserom.u.sh b/scripts/extract_baserom.u.sh old mode 100755 new mode 100644 similarity index 95% rename from extract_baserom.u.sh rename to scripts/extract_baserom.u.sh index 9899767..7fa80e4 --- a/extract_baserom.u.sh +++ b/scripts/extract_baserom.u.sh @@ -49,7 +49,7 @@ done if [ "$DOALL" == "1" ] || [ $1 == 'files' ]; then echo "Processing Files" if [ -x tools/extractor/extractor ]; then - tools/extractor/extractor "$BASEROM" filelist.u.csv + tools/extractor/extractor "$BASEROM" scripts/filelist.u.csv else while IFS=, read -r offset size name compressed extract do @@ -67,7 +67,7 @@ if [ "$DOALL" == "1" ] || [ $1 == 'files' ]; then else echo "skip $name" fi - done < filelist.u.csv + done < scripts/filelist.u.csv fi #filelist.u.csv should follow pattern of: #offset,size,name,compressed,extract @@ -93,4 +93,4 @@ if [ "$DOALL" == "1" ] || [ $1 == 'images' ]; then #and always end with a newline fi mkdir -p ./bin -./extract_asp_gsp_rsp.sh \ No newline at end of file +./scripts/extract_asp_gsp_rsp.sh diff --git a/extract_cdata.sh b/scripts/extract_cdata.sh old mode 100755 new mode 100644 similarity index 100% rename from extract_cdata.sh rename to scripts/extract_cdata.sh diff --git a/extract_diff.e.sh b/scripts/extract_diff.e.sh old mode 100755 new mode 100644 similarity index 97% rename from extract_diff.e.sh rename to scripts/extract_diff.e.sh index e87e3d2..5610423 --- a/extract_diff.e.sh +++ b/scripts/extract_diff.e.sh @@ -25,7 +25,7 @@ if [ "$DOALL" == "1" ] || [ $1 == 'files' ]; then else echo "skip $name" fi - done < filediff.e.csv + done < scripts/filediff.e.csv #filediff.e.csv should follow pattern of: #offset,size,name,compressed,extract #formatting matters, no comments, no extra lines, unix line endings only diff --git a/extract_diff.j.sh b/scripts/extract_diff.j.sh old mode 100755 new mode 100644 similarity index 97% rename from extract_diff.j.sh rename to scripts/extract_diff.j.sh index 67ef54b..227a787 --- a/extract_diff.j.sh +++ b/scripts/extract_diff.j.sh @@ -25,7 +25,7 @@ if [ "$DOALL" == "1" ] || [ $1 == 'files' ]; then else echo "skip $name" fi - done < filediff.j.csv + done < scripts/filediff.j.csv #filediff.j.csv should follow pattern of: #offset,size,name,compressed,extract #formatting matters, no comments, no extra lines, unix line endings only diff --git a/filediff.e.csv b/scripts/filediff.e.csv similarity index 94% rename from filediff.e.csv rename to scripts/filediff.e.csv index 4c43d08..afef3c2 100644 --- a/filediff.e.csv +++ b/scripts/filediff.e.csv @@ -15,14 +15,14 @@ 5836336,105520,assets/obseg/bg/e/bg_pete_all_p.bin,0,1 6806352,86256,assets/obseg/bg/e/bg_jun_all_p.bin,0,1 1148512,46848,assets/ge007.e.118660.jfont_chardata.bin,0,0 -9000160,11680,assets/obseg/setup/e/Ump_setuparchZ.bin,1,1 +9000160,11680,assets/obseg/setup/e/Ump_setuparchZ.bin,1,0 9124336,7216,assets/obseg/setup/e/UsetupcradZ.bin,1,0 -9168656,9040,assets/obseg/setup/e/UsetupdestZ.bin,1,1 -9177696,14096,assets/obseg/setup/e/UsetupjunZ.bin,1,1 -9191792,1520,assets/obseg/setup/e/UsetuplenZ.bin,1,1 -9262032,10944,assets/obseg/setup/e/UsetupsiloZ.bin,1,1 -9272976,10192,assets/obseg/setup/e/UsetupstatueZ.bin,1,1 -9283168,12864,assets/obseg/setup/e/UsetuptraZ.bin,1,1 +9168656,9040,assets/obseg/setup/e/UsetupdestZ.bin,1,0 +9177696,14096,assets/obseg/setup/e/UsetupjunZ.bin,1,0 +9191792,1520,assets/obseg/setup/e/UsetuplenZ.bin,1,0 +9262032,10944,assets/obseg/setup/e/UsetupsiloZ.bin,1,0 +9272976,10192,assets/obseg/setup/e/UsetupstatueZ.bin,1,0 +9283168,12864,assets/obseg/setup/e/UsetuptraZ.bin,1,0 9296032,16,assets/obseg/text/e/LameE.bin,1,1 9296048,16,assets/obseg/text/e/LameJ.bin,1,1 9296064,16,assets/obseg/text/e/LameP.bin,1,1 diff --git a/filediff.j.csv b/scripts/filediff.j.csv similarity index 72% rename from filediff.j.csv rename to scripts/filediff.j.csv index 9655a03..6fa09cb 100644 --- a/filediff.j.csv +++ b/scripts/filediff.j.csv @@ -1,12 +1,12 @@ 1148512,46848,assets/ge007.j.118660.jfont_chardata.bin,0,0 -9043488,11680,assets/obseg/setup/j/Ump_setuparchZ.bin,1,1 -9167664,7216,assets/obseg/setup/j/UsetupcradZ.bin,1,1 -9211984,9040,assets/obseg/setup/j/UsetupdestZ.bin,1,1 -9221024,14096,assets/obseg/setup/j/UsetupjunZ.bin,1,1 -9235120,1520,assets/obseg/setup/j/UsetuplenZ.bin,1,1 -9305360,10944,assets/obseg/setup/j/UsetupsiloZ.bin,1,1 -9316304,10192,assets/obseg/setup/j/UsetupstatueZ.bin,1,1 -9326496,12864,assets/obseg/setup/j/UsetuptraZ.bin,1,1 +9043488,11680,assets/obseg/setup/j/Ump_setuparchZ.bin,1,0 +9167664,7216,assets/obseg/setup/j/UsetupcradZ.bin,1,0 +9211984,9040,assets/obseg/setup/j/UsetupdestZ.bin,1,0 +9221024,14096,assets/obseg/setup/j/UsetupjunZ.bin,1,0 +9235120,1520,assets/obseg/setup/j/UsetuplenZ.bin,1,0 +9305360,10944,assets/obseg/setup/j/UsetupsiloZ.bin,1,0 +9316304,10192,assets/obseg/setup/j/UsetupstatueZ.bin,1,0 +9326496,12864,assets/obseg/setup/j/UsetuptraZ.bin,1,0 9344096,1440,assets/obseg/text/j/LarecJ.bin,1,0 9347232,1680,assets/obseg/text/j/LarkJ.bin,1,0 9350032,1104,assets/obseg/text/j/LaztJ.bin,1,1 diff --git a/filelist.e.csv b/scripts/filelist.e.csv similarity index 100% rename from filelist.e.csv rename to scripts/filelist.e.csv diff --git a/filelist.j.csv b/scripts/filelist.j.csv similarity index 100% rename from filelist.j.csv rename to scripts/filelist.j.csv diff --git a/filelist.u.csv b/scripts/filelist.u.csv similarity index 100% rename from filelist.u.csv rename to scripts/filelist.u.csv diff --git a/ge007.e-test_basis.csv b/scripts/ge007.e-test_basis.csv similarity index 99% rename from ge007.e-test_basis.csv rename to scripts/ge007.e-test_basis.csv index 8bc721d..4a3a768 100644 --- a/ge007.e-test_basis.csv +++ b/scripts/ge007.e-test_basis.csv @@ -838,11 +838,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_0CC4C0.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_0CC4C0.o 3276b0ae12d43e34773e3e7340fd7eb7,.data,build/e/src/game/unk_0CC4C0.o 649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/e/src/game/unk_0CC4C0.o -16b4e13d4b5d2c2924a59aff80c5f24a,.text,build/e/src/game/unk_0D1AC0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/unk_0D1AC0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/unk_0D1AC0.o -4ae71336e44bf9bf79d2752e234818a5,.data,build/e/src/game/unk_0D1AC0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/unk_0D1AC0.o +16b4e13d4b5d2c2924a59aff80c5f24a,.text,build/e/src/game/speedgraphrenderer.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/speedgraphrenderer.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/speedgraphrenderer.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/e/src/game/speedgraphrenderer.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/e/src/game/speedgraphrenderer.o a0492e6fe3289d7509758faffa7907c1,.text,build/e/src/game/viewport.o d41d8cd98f00b204e9800998ecf8427e,.code,build/e/src/game/viewport.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/e/src/game/viewport.o diff --git a/ge007.j-test_basis.csv b/scripts/ge007.j-test_basis.csv similarity index 99% rename from ge007.j-test_basis.csv rename to scripts/ge007.j-test_basis.csv index 964e572..196a7a1 100644 --- a/ge007.j-test_basis.csv +++ b/scripts/ge007.j-test_basis.csv @@ -833,11 +833,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_0CC4C0.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_0CC4C0.o 3276b0ae12d43e34773e3e7340fd7eb7,.data,build/j/src/game/unk_0CC4C0.o 649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/j/src/game/unk_0CC4C0.o -16b4e13d4b5d2c2924a59aff80c5f24a,.text,build/j/src/game/unk_0D1AC0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/unk_0D1AC0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/unk_0D1AC0.o -4ae71336e44bf9bf79d2752e234818a5,.data,build/j/src/game/unk_0D1AC0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/unk_0D1AC0.o +16b4e13d4b5d2c2924a59aff80c5f24a,.text,build/j/src/game/speedgraphrenderer.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/speedgraphrenderer.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/speedgraphrenderer.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/j/src/game/speedgraphrenderer.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/j/src/game/speedgraphrenderer.o 7e01bd828f54335aefbf28fc14d26b02,.text,build/j/src/game/viewport.o d41d8cd98f00b204e9800998ecf8427e,.code,build/j/src/game/viewport.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/j/src/game/viewport.o diff --git a/ge007.u-test_basis.csv b/scripts/ge007.u-test_basis.csv similarity index 94% rename from ge007.u-test_basis.csv rename to scripts/ge007.u-test_basis.csv index e4d8283..a8f64e1 100644 --- a/ge007.u-test_basis.csv +++ b/scripts/ge007.u-test_basis.csv @@ -1,23 +1,28 @@ +f9eaf36fba2d9fbb6e34367e1d5c575b,.text,build/u/src/_start.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/_start.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/_start.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/_start.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/_start.o 491aefb4d4b8ac93d91148b1ffba34ac,.text,build/u/src/aspboot.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/aspboot.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/aspboot.o efed453a5d8495a5ff7a9242f47ca5a1,.data,build/u/src/aspboot.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/aspboot.o -ec1b7c30c4a2b1131754094c3c70f626,.text,build/u/src/audi.o +cbc7fa12683f60e5808eb38a0c05d8b3,.text,build/u/src/audi.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/audi.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/audi.o e62d8b253b0235961f2b07a2fc6aa310,.data,build/u/src/audi.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/audi.o -390a6e8fd9248820c669513b093e671d,.text,build/u/src/bootcode.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/bootcode.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/bootcode.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/bootcode.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/bootcode.o 777e15af9a517597194bb67603ffc8c0,.text,build/u/src/boot.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/boot.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/boot.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/boot.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/boot.o +390a6e8fd9248820c669513b093e671d,.text,build/u/src/bootcode.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/bootcode.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/bootcode.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/bootcode.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/bootcode.o b02cc13378f02a5cd4e3279a9ae5c1e3,.text,build/u/src/boss.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/boss.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/boss.o @@ -33,17 +38,17 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/cfb.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/cfb.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/cfb.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/cfb.o +1b26367f447e1934799ce7f835db6a32,.text,build/u/src/crash.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/crash.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/crash.o +08f0f14492e929b8a74f9a2005c0122d,.data,build/u/src/crash.o +778ded1675811d28570afa393ab3501b,.rodata,build/u/src/crash.o 1a53f2324202f75c22c5e2ab48fb6ea1,.text,build/u/src/deb.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/deb.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/deb.o 70bc8f4b72a86921468bf8e8441dce51,.data,build/u/src/deb.o 7f819c72a85094a2370e27c08875e1e3,.rodata,build/u/src/deb.o -c06dd6894bbcb7e4fe479ca21e77793c,.text,build/u/src/deb_print.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/deb_print.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/deb_print.o -08f0f14492e929b8a74f9a2005c0122d,.data,build/u/src/deb_print.o -778ded1675811d28570afa393ab3501b,.rodata,build/u/src/deb_print.o -e1eddee08e1e2e81b1cf6e90e889bd11,.text,build/u/src/debugmenu.o +4477e4008770aca3857f3ecf07fe2003,.text,build/u/src/debugmenu.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/debugmenu.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/debugmenu.o 276d4a6d9a2e7c9d498e07fc837a2aa0,.data,build/u/src/debugmenu.o @@ -53,11 +58,6 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/decompressbuffer.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/decompressbuffer.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/decompressbuffer.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/decompressbuffer.o -377a8cb4f582defa3f1bb86cd30a60c1,.text,build/u/src/crash.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/crash.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/crash.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/crash.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/crash.o c6af3c2e9a83066c1ff902c20ee56af0,.text,build/u/src/fr.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/fr.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/fr.o @@ -73,7 +73,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/gspboot.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/gspboot.o 139b8a71a892412631fde2baec4c818a,.data,build/u/src/gspboot.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/gspboot.o -4e2fd6364911f468331aaeb81aec3a36,.text,build/u/src/init.o +7f67be25a6de8e1cfb9f7de1e358ca60,.text,build/u/src/init.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/init.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/init.o 6722e53003673c8d170b5e7b90347db8,.data,build/u/src/init.o @@ -83,7 +83,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/joy.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/joy.o 7ec00c5c61b1ffae630f69b9af0b948a,.data,build/u/src/joy.o f977a71969374ebad0f7c04f294cac7a,.rodata,build/u/src/joy.o -99c544866af5e219fc6124ec41ef2f26,.text,build/u/src/mema.o +0382ca46a3288d6e0026350d51be0285,.text,build/u/src/mema.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/mema.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/mema.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/mema.o @@ -123,7 +123,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/random.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/random.o dca45fee049430e0eb82fbab95852594,.data,build/u/src/random.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/random.o -4723984a9d04151a854554dbb4cd6409,.text,build/u/src/rmon.o +2f18a8a28ba6d871e606bf3d84733b17,.text,build/u/src/rmon.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/rmon.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/rmon.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/rmon.o @@ -148,7 +148,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/snd.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/snd.o 3164fd3deaf61a47e826f42ac0cb0ef6,.data,build/u/src/snd.o 3b5d3c7d207e37dceeedd301e35e2e58,.rodata,build/u/src/snd.o -1faa20338a632f7d19bb7fdb6c76ae13,.text,build/u/src/speed_graph.o +6793e62c6c048c8076ef1ba01c811afd,.text,build/u/src/speed_graph.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/speed_graph.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/speed_graph.o 6ba2212493a6e0df179e18776ec91a2d,.data,build/u/src/speed_graph.o @@ -163,11 +163,6 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/stacks.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/stacks.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/stacks.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/stacks.o -f9eaf36fba2d9fbb6e34367e1d5c575b,.text,build/u/src/_start.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/_start.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/_start.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/_start.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/_start.o 9daa52f61a66d99824ff1819e30eaf45,.text,build/u/src/str.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/str.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/str.o @@ -198,21 +193,31 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/token.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/token.o 517c562ef69db9b195e72398e86df2e8,.data,build/u/src/token.o a42d56e2d5c450108bc25059309dde97,.rodata,build/u/src/token.o +88df3b22747a0669007e5dc45395eb36,.text,build/u/src/usb.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/usb.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/usb.o +4a00906b1a7d23084c88deff78bc4925,.data,build/u/src/usb.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/usb.o 837b3153b8a25676f66f18514229a9d8,.text,build/u/src/vi.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/vi.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/vi.o 7fd04b9095026981c5f4433e9eb658c4,.data,build/u/src/vi.o 3890dff1c2a5913504508f6cf5c6760b,.rodata,build/u/src/vi.o +c3e080f35dd357dc91f2c000908766b3,.text,build/u/src/game/alloc_window_pieces.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/alloc_window_pieces.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/alloc_window_pieces.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/alloc_window_pieces.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/alloc_window_pieces.o +68a7438bd0d19d37c608750626578bdb,.text,build/u/src/game/bg.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bg.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bg.o +bd127dd2e420266918d4e0fc29c3aec1,.data,build/u/src/game/bg.o +acbd92f46e58f485783dd7990993e722,.rodata,build/u/src/game/bg.o a147ff55f19da8d2fed990b18129a648,.text,build/u/src/game/bg2.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bg2.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bg2.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/bg2.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/bg2.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bg2.o -0a3e9300d0406ae8036a97b5596f3f5c,.text,build/u/src/game/bg.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bg.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bg.o -93fe81e18003cc3f6f539ee109b07482,.data,build/u/src/game/bg.o -acbd92f46e58f485783dd7990993e722,.rodata,build/u/src/game/bg.o fe503f7412d15ae04b09165052627104,.text,build/u/src/game/blood_animation.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/blood_animation.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/blood_animation.o @@ -223,17 +228,22 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/blood_decrypt.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/blood_decrypt.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/blood_decrypt.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/blood_decrypt.o +e3573c7b32f39670f3b097946aca7daf,.text,build/u/src/game/bondhead.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondhead.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondhead.o +1f41ef4e892dded7bd385975a10cc847,.data,build/u/src/game/bondhead.o +eb5394271972e0dc98385a7f324e03b8,.rodata,build/u/src/game/bondhead.o b80f4ac38334b9b697c3f04b128b672d,.text,build/u/src/game/bondinv.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondinv.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondinv.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/bondinv.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/bondinv.o -556957c2639e8d9f9a7fc2c1dc306006,.text,build/u/src/game/bondview.o +45d80b642fe6c1b693c576fea58891fc,.text,build/u/src/game/bondview.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondview.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondview.o 9a2ea906234912531f10259886af5a71,.data,build/u/src/game/bondview.o d4df812547f220942fc71306e1314ad5,.rodata,build/u/src/game/bondview.o -990a5f2f4f474d38457687bd8eb60fa2,.text,build/u/src/game/bondview_r.o +4c5d3a0f0c118d20e4b4209ac79ca075,.text,build/u/src/game/bondview_r.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondview_r.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondview_r.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/bondview_r.o @@ -248,47 +258,77 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cheat_buttons.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cheat_buttons.o a5d9f8135b3ee2e5c0e1594a670b2d91,.data,build/u/src/game/cheat_buttons.o 3bb27c0cde12447e0dedd3ddd829314b,.rodata,build/u/src/game/cheat_buttons.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/chraidata.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chraidata.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chraidata.o -6c8450891609d05baa1ba76d025b3845,.data,build/u/src/game/chraidata.o -90e9dc5eef55aaad94ae4590c98f8f7a,.rodata,build/u/src/game/chraidata.o -89856685f835efec8d81240a25ec408a,.text,build/u/src/game/chrai.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrai.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrai.o -512dc2734573c3b02f332bdebeca73bc,.data,build/u/src/game/chrai.o -091cb73395a0df68b78013188ff96840,.rodata,build/u/src/game/chrai.o -b7cc4eb31582c3b06090d75aa740fa60,.text,build/u/src/game/chr_b.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chr_b.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chr_b.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/chr_b.o -54c85123dad8457678af007c7c7d4026,.rodata,build/u/src/game/chr_b.o -89198a9e01688e7a382abfd44782e2c7,.text,build/u/src/game/chrlv.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrlv.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrlv.o -873553fec38e500fd0459ed32ba07065,.data,build/u/src/game/chrlv.o -365e4726f2a4e1b80043f9fbedc3657b,.rodata,build/u/src/game/chrlv.o ab69f37ac9853c7b285e6fdbcc3c8db1,.text,build/u/src/game/chr.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chr.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chr.o 3d3dd3bc067d8f01ebfb0ee1d6c26367,.data,build/u/src/game/chr.o 85fabff9d72f8d2d78f7ab3b09d25418,.rodata,build/u/src/game/chr.o -83515d53af14f65aac8b348dbaeddc2b,.text,build/u/src/game/chrobjhandler.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrobjhandler.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrobjhandler.o -d6999d725ff5515f392fcd371be980b7,.data,build/u/src/game/chrobjhandler.o -1520b85ea7306a448406364f3c51fe95,.rodata,build/u/src/game/chrobjhandler.o e51cbd1536b829abf8760560fe767afb,.text,build/u/src/game/chrObjRandom.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrObjRandom.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrObjRandom.o dca45fee049430e0eb82fbab95852594,.data,build/u/src/game/chrObjRandom.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/chrObjRandom.o +b7cc4eb31582c3b06090d75aa740fa60,.text,build/u/src/game/chr_b.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chr_b.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chr_b.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/chr_b.o +54c85123dad8457678af007c7c7d4026,.rodata,build/u/src/game/chr_b.o +b39b9ec278ea21267f13af8d74631e37,.text,build/u/src/game/chrai.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrai.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrai.o +b203621a65475445e6fcdca717c667b5,.data,build/u/src/game/chrai.o +ea37c1d473ff45caadf97ad82a428d01,.rodata,build/u/src/game/chrai.o +d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/chraidata.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chraidata.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chraidata.o +6c8450891609d05baa1ba76d025b3845,.data,build/u/src/game/chraidata.o +90e9dc5eef55aaad94ae4590c98f8f7a,.rodata,build/u/src/game/chraidata.o +89198a9e01688e7a382abfd44782e2c7,.text,build/u/src/game/chrlv.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrlv.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrlv.o +873553fec38e500fd0459ed32ba07065,.data,build/u/src/game/chrlv.o +365e4726f2a4e1b80043f9fbedc3657b,.rodata,build/u/src/game/chrlv.o +3fd3ec69631dd5b0eb5cf8e28500abdd,.text,build/u/src/game/chrobjhandler.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrobjhandler.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrobjhandler.o +d6999d725ff5515f392fcd371be980b7,.data,build/u/src/game/chrobjhandler.o +1520b85ea7306a448406364f3c51fe95,.rodata,build/u/src/game/chrobjhandler.o +55f5291095565c6d972749c9ef45ff13,.text,build/u/src/game/chrprop.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/chrprop.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/chrprop.o +085fe3d18808921cfb8737e0c19f6bfb,.data,build/u/src/game/chrprop.o +5bc2a5b36071a2cfefb643368ce01f8a,.rodata,build/u/src/game/chrprop.o +65eba106b7145c8d18e62e41b0fca5cb,.text,build/u/src/game/cleanexplosions.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanexplosions.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanexplosions.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanexplosions.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanexplosions.o +581ec48b1cabdc45315a9a7ef4dde5ec,.text,build/u/src/game/cleanplayersound.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanplayersound.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanplayersound.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanplayersound.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanplayersound.o +d61324cc5e9a0d979fe6e7f35395fa1c,.text,build/u/src/game/cleanupSFXRelated.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanupSFXRelated.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanupSFXRelated.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanupSFXRelated.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanupSFXRelated.o e8111e7712186220218476fa1e164f60,.text,build/u/src/game/cleanup_alarms.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_alarms.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_alarms.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_alarms.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanup_alarms.o -d14686414080919bc444f8f816093417,.text,build/u/src/game/cleanup_objectives.o +8e400a3267ff4e97615eea6a8aac3637,.text,build/u/src/game/cleanup_guard_data.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_guard_data.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_guard_data.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_guard_data.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanup_guard_data.o +5d250b152f2a3e502f4b4da990f03366,.text,build/u/src/game/cleanup_object_sounds.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_object_sounds.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_object_sounds.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_object_sounds.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanup_object_sounds.o +baa128fff074de6122fb0029a59dc5e6,.text,build/u/src/game/cleanup_objectives.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_objectives.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_objectives.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_objectives.o @@ -298,11 +338,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_objects.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_objects.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_objects.o f8cc02e3fca557906560baee10d58b8e,.rodata,build/u/src/game/cleanup_objects.o -edea38f9b96f7e5132b7ffcc4ef4fea7,.text,build/u/src/game/cleanupSFXRelated.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanupSFXRelated.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanupSFXRelated.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanupSFXRelated.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanupSFXRelated.o +e27c6eaae21319ffd65df3ec73cae9ba,.text,build/u/src/game/cleanwindowpieces.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanwindowpieces.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanwindowpieces.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanwindowpieces.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanwindowpieces.o d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/cobjdata.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cobjdata.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cobjdata.o @@ -328,7 +368,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/debugmenu_08FE00.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/debugmenu_08FE00.o 2c7bd276745dcdc96ad8f5208821d33f,.data,build/u/src/game/debugmenu_08FE00.o 2c8135c82c264dbddcd191237d4cdb7e,.rodata,build/u/src/game/debugmenu_08FE00.o -849f7d59223be0098562e952f7858d1e,.text,build/u/src/game/debugmenu_handler.o +745a9be0507a0263a931dc71eb93d9b6,.text,build/u/src/game/debugmenu_handler.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/debugmenu_handler.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/debugmenu_handler.o 5b4e4215afc95ebc9e9f8ad22a188723,.data,build/u/src/game/debugmenu_handler.o @@ -343,61 +383,66 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/dyn.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/dyn.o 062a8e296fe206f8023cad1c6124c17b,.data,build/u/src/game/dyn.o 98b2039f9b5a250a69026b80f92242b4,.rodata,build/u/src/game/dyn.o -fa5e40c87d269743a76bb04bf7fe8bc9,.text,build/u/src/game/ejectedcartridges.o +4e58e5ab806e0283d16e7a6e1bd7850d,.text,build/u/src/game/ejectedcartridges.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/ejectedcartridges.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/ejectedcartridges.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/ejectedcartridges.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/ejectedcartridges.o -7648a8e15da9e82fc32d1c510852e678,.text,build/u/src/game/file2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/file2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/file2.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/file2.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/file2.o +611b9b73637f8add35cf24f49abd88f7,.text,build/u/src/game/explosions.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/explosions.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/explosions.o +fbda85eb8d9891c2efde432e0336946e,.data,build/u/src/game/explosions.o +9b1db0ae34ae1901b30b1cb9163c1f66,.rodata,build/u/src/game/explosions.o 1600018b9afbe69881f274b0023644fb,.text,build/u/src/game/file.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/file.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/file.o -eeec347630f5896aa34d74a8014be746,.data,build/u/src/game/file.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/file.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/file.o +dc557102f98af1012104e5468e2deed8,.text,build/u/src/game/file2.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/file2.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/file2.o +eeec347630f5896aa34d74a8014be746,.data,build/u/src/game/file2.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/file2.o 6262372c48959b0d142d7bd9512818d7,.text,build/u/src/game/fog.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/fog.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/fog.o 3334c40f44aa232d8e19c8e008dea37a,.data,build/u/src/game/fog.o 63a41286331e03e597726bae6bd57d73,.rodata,build/u/src/game/fog.o -16604ef067c1dcf4da908134b2bbdaeb,.text,build/u/src/game/front.o +ffa8cb5c91f127dcc58c8ed8239b9bd9,.text,build/u/src/game/front.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/front.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/front.o 202cacaebbb7c0e6f88647e7b36e4c6f,.data,build/u/src/game/front.o -5ab580aa7d43b288ceef837d8ed00ae0,.rodata,build/u/src/game/front.o +9b68f3408850d02a9c9c358ccb8cf15b,.rodata,build/u/src/game/front.o b08bde2e31044c0b408ede1cfdd06325,.text,build/u/src/game/game_debug.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/game_debug.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/game_debug.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/game_debug.o 9b7ce57fe7617597f32ff056b43202c4,.rodata,build/u/src/game/game_debug.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/gobjdata2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gobjdata2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gobjdata2.o -5b486cfa5049803b6e6480dc1db84c6c,.data,build/u/src/game/gobjdata2.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/gobjdata2.o d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/gobjdata.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gobjdata.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gobjdata.o 09534983a7284daabcc290c7a3b1b5c5,.data,build/u/src/game/gobjdata.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/gobjdata.o -03b693fb67fcdf5b4afa0394851f98b0,.text,build/u/src/game/gun.o +d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/gobjdata2.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gobjdata2.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gobjdata2.o +5b486cfa5049803b6e6480dc1db84c6c,.data,build/u/src/game/gobjdata2.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/gobjdata2.o +f2e086150b6210e1be45fca167f5954c,.text,build/u/src/game/gun.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/gun.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/gun.o 0289c36e967840bba7f6fbd026dda001,.data,build/u/src/game/gun.o c22c38087e38ab54d904cdfe76f17b48,.rodata,build/u/src/game/gun.o -bafa8d68a24181ba109df4325757462d,.text,build/u/src/game/image_bank.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/image_bank.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/image_bank.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/image_bank.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/image_bank.o -0a9edffb3fe5e7e4f308d8093fcab90e,.text,build/u/src/game/image.o +3506c50473e5f831f4b5b67d80cf2880,.text,build/u/src/game/image.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/image.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/image.o 5cc07645f31f767e06e7275daa6a48b9,.data,build/u/src/game/image.o 7bb5a82d66dcf043723196d3397ea8d5,.rodata,build/u/src/game/image.o +60381b4620ccbe55b06819b8d4f719b2,.text,build/u/src/game/image_bank.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/image_bank.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/image_bank.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/image_bank.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/image_bank.o 6ddd854f71ff162f3ba95dc9eeb3eb81,.text,build/u/src/game/indy_commands.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/indy_commands.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/indy_commands.o @@ -408,26 +453,31 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/indy_comms.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/indy_comms.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/indy_comms.o 8b739a82297d5b19e4cf48c594c782f7,.rodata,build/u/src/game/indy_comms.o -aa2690d8ca90d088dd990f1d1717cc70,.text,build/u/src/game/initactorpropstuff.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initactorpropstuff.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initactorpropstuff.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initactorpropstuff.o -d1c7d5ce895aab2c74f422e89ac7301f,.rodata,build/u/src/game/initactorpropstuff.o -1ef6c73df22d17ba495ef9096ef272a8,.text,build/u/src/game/initanitable.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initanitable.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initanitable.o -5e19c149b3a17a65bef4f99dfe9fe15c,.data,build/u/src/game/initanitable.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initanitable.o +1d041d34492b00d9ffc6b8e575235636,.text,build/u/src/game/initBondDATA.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initBondDATA.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initBondDATA.o +f1a3cd21448026b51237816257ec0cd5,.data,build/u/src/game/initBondDATA.o +d7bf0e953e2938586e9839ac4e151ee0,.rodata,build/u/src/game/initBondDATA.o 381e243566b9012cb61d0ea4f304a3a6,.text,build/u/src/game/initBondDATAdefaults.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initBondDATAdefaults.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initBondDATAdefaults.o 31507984a7ba9b284e07be5ec9215734,.data,build/u/src/game/initBondDATAdefaults.o bb937d22d13b6582963664b638217077,.rodata,build/u/src/game/initBondDATAdefaults.o -72fdafd90bc5656f024847c8c39304e2,.text,build/u/src/game/initBondDATA.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initBondDATA.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initBondDATA.o -f1a3cd21448026b51237816257ec0cd5,.data,build/u/src/game/initBondDATA.o -d7bf0e953e2938586e9839ac4e151ee0,.rodata,build/u/src/game/initBondDATA.o +aa2690d8ca90d088dd990f1d1717cc70,.text,build/u/src/game/initactorpropstuff.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initactorpropstuff.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initactorpropstuff.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initactorpropstuff.o +d1c7d5ce895aab2c74f422e89ac7301f,.rodata,build/u/src/game/initactorpropstuff.o +eaf91a3b414baab952b0b11e09316245,.text,build/u/src/game/initanitable.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initanitable.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initanitable.o +5e19c149b3a17a65bef4f99dfe9fe15c,.data,build/u/src/game/initanitable.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initanitable.o +b2f21d41a0d43d7510c362992f97aaf4,.text,build/u/src/game/initcheattext.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initcheattext.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initcheattext.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initcheattext.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initcheattext.o 7bd576aee1e6380edb6cfdc47475f6f0,.text,build/u/src/game/initexplosioncasing.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initexplosioncasing.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initexplosioncasing.o @@ -458,7 +508,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/inititemslots.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/inititemslots.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/inititemslots.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/inititemslots.o -14d0728f62ec250b8669f2579adfa4d1,.text,build/u/src/game/initmenus.o +1be876526904eebd36e0364e83cc07bf,.text,build/u/src/game/initmenus.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initmenus.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initmenus.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initmenus.o @@ -513,52 +563,32 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initunk_005520.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initunk_005520.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initunk_005520.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initunk_005520.o -c3e080f35dd357dc91f2c000908766b3,.text,build/u/src/game/alloc_window_pieces.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/alloc_window_pieces.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/alloc_window_pieces.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/alloc_window_pieces.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/alloc_window_pieces.o 80c4741ea8d335e1cd55bc6f8855b8fe,.text,build/u/src/game/initunk_007290.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initunk_007290.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initunk_007290.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initunk_007290.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initunk_007290.o -b2f21d41a0d43d7510c362992f97aaf4,.text,build/u/src/game/initcheattext.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initcheattext.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initcheattext.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initcheattext.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initcheattext.o -8e400a3267ff4e97615eea6a8aac3637,.text,build/u/src/game/cleanup_guard_data.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_guard_data.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_guard_data.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_guard_data.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanup_guard_data.o -565b094ac26178b6723feb37ba142c13,.text,build/u/src/game/cleanup_object_sounds.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanup_object_sounds.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanup_object_sounds.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanup_object_sounds.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanup_object_sounds.o 4fc91dfaef607af506049f33839c6a99,.text,build/u/src/game/initweaponanigroups.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/initweaponanigroups.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/initweaponanigroups.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/initweaponanigroups.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/initweaponanigroups.o -dc7bbf8858c2f3dedda913d125c8153b,.text,build/u/src/game/lightfixture.o +82621e294a3ff34195d75bbcbb2a746f,.text,build/u/src/game/lightfixture.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lightfixture.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lightfixture.o 70bc8f4b72a86921468bf8e8441dce51,.data,build/u/src/game/lightfixture.o 5feb1f52242be6ca00278aea97630cc2,.rodata,build/u/src/game/lightfixture.o -0b81daa2305ca2b0ae3294b84cda1773,.text,build/u/src/game/loadobjectmodel.o +f93afdcea6b3baecd3e8bd0c79b93e12,.text,build/u/src/game/loadobjectmodel.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/loadobjectmodel.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/loadobjectmodel.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/loadobjectmodel.o 758dd27724bf2441991958a52d84b620,.rodata,build/u/src/game/loadobjectmodel.o -b897d5a9a42bf9dead767f978c28e78f,.text,build/u/src/game/lvl.o +43fa0dd4d48b7f01f50dd922d167d229,.text,build/u/src/game/lvl.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lvl.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lvl.o 778b187770df6551fc254a75c066d47a,.data,build/u/src/game/lvl.o 43ee36987e8d9804ad1f15d27b6e0171,.rodata,build/u/src/game/lvl.o -085bf29f55c534a4f8a303eb44f209c4,.text,build/u/src/game/lvl_text.o +08a5bb8287043d4e671605f88cc077c1,.text,build/u/src/game/lvl_text.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/lvl_text.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/lvl_text.o b608913d417cf5898f46d451d2ee7e36,.data,build/u/src/game/lvl_text.o @@ -598,22 +628,27 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/math_unk_05A9E0.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/math_unk_05A9E0.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/math_unk_05A9E0.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/math_unk_05A9E0.o -36ad186936847099dfd0ff45b6da2bfe,.text,build/u/src/game/matrixmath_misc.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/matrixmath_misc.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/matrixmath_misc.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/matrixmath_misc.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/matrixmath_misc.o a3f297256593b1b9e3e63d7c5027ee9a,.text,build/u/src/game/matrixmath.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/matrixmath.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/matrixmath.o 443b5cb29b8db751795a83e372d93c13,.data,build/u/src/game/matrixmath.o 0a35159196687bb0c05210537b0b72dd,.rodata,build/u/src/game/matrixmath.o -36b514f94110f7d4b0f375cb43875623,.text,build/u/src/game/mp_music.o +36ad186936847099dfd0ff45b6da2bfe,.text,build/u/src/game/matrixmath_misc.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/matrixmath_misc.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/matrixmath_misc.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/matrixmath_misc.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/matrixmath_misc.o +41136aa1b2bcb087addaabc3eb4e3048,.text,build/u/src/game/model.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/model.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/model.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/model.o +63392afd7ef8420cf22b9e1f4b947ac7,.rodata,build/u/src/game/model.o +cb8e6a63ac2bb5a94211a678cb31643f,.text,build/u/src/game/mp_music.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/mp_music.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/mp_music.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/mp_music.o 4f29b2b0a354eef2f858c1912ef6b3f4,.rodata,build/u/src/game/mp_music.o -f8939a5abdf5ca9ca51e55c688e8b667,.text,build/u/src/game/mp_watch.o +99b616ded0340b1539d2f41654a92d1f,.text,build/u/src/game/mp_watch.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/mp_watch.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/mp_watch.o 73fd6c08f30314bfa70d1800c88309b3,.data,build/u/src/game/mp_watch.o @@ -633,56 +668,56 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/null_007970.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/null_007970.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/null_007970.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/null_007970.o -eb1d4282f3c092f900ae0384b32c45ff,.text,build/u/src/game/model.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/model.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/model.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/model.o -63392afd7ef8420cf22b9e1f4b947ac7,.rodata,build/u/src/game/model.o -b9ecfe8ecc3ef965e425146c53659a76,.text,build/u/src/game/objecthandler_2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objecthandler_2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objecthandler_2.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/objecthandler_2.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/objecthandler_2.o -3cfcae2ddcf69c0d104d787245961440,.text,build/u/src/game/objecthandler.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objecthandler.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objecthandler.o -766d7aee05f96dff2a5649eb36ac32c1,.data,build/u/src/game/objecthandler.o -0412997c691931680d7ec0b02d2dcaa4,.rodata,build/u/src/game/objecthandler.o -d82993a7d50f7c76b359fc4a3d0a943f,.text,build/u/src/game/objective.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/objective.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/objective.o -7ac5150d5bb8e61b7153f71e0e08804b,.text,build/u/src/game/objective_status2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective_status2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective_status2.o -4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/objective_status2.o -66c72a9f52883a35821c069094d98950,.rodata,build/u/src/game/objective_status2.o -e6dd08e8abd9c87796681eaa411c9a45,.text,build/u/src/game/objective_status.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective_status.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective_status.o -696656bad06fe3f908e2d43ca762cc24,.data,build/u/src/game/objective_status.o -8f76ee8ed548ce1d035595be064438a0,.rodata,build/u/src/game/objective_status.o cba5efed93aaade1e6ee6bcd720e8492,.text,build/u/src/game/ob.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/ob.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/ob.o c2028385babc92baad8fcbe57e4a7882,.data,build/u/src/game/ob.o f04d26298c53b9ed2b1846e108c4f0f5,.rodata,build/u/src/game/ob.o -12efd0881d6159098313b243cd8c2cfc,.text,build/u/src/game/othermodemicrocode.o +3cfcae2ddcf69c0d104d787245961440,.text,build/u/src/game/objecthandler.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objecthandler.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objecthandler.o +766d7aee05f96dff2a5649eb36ac32c1,.data,build/u/src/game/objecthandler.o +0412997c691931680d7ec0b02d2dcaa4,.rodata,build/u/src/game/objecthandler.o +b9ecfe8ecc3ef965e425146c53659a76,.text,build/u/src/game/objecthandler_2.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objecthandler_2.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objecthandler_2.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/objecthandler_2.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/objecthandler_2.o +c5316b432784e09aaa71a939117d1732,.text,build/u/src/game/objective.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/objective.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/objective.o +f696b8003446a0b74e7a0d78fcfb1f01,.text,build/u/src/game/objective_status.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective_status.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective_status.o +696656bad06fe3f908e2d43ca762cc24,.data,build/u/src/game/objective_status.o +8f76ee8ed548ce1d035595be064438a0,.rodata,build/u/src/game/objective_status.o +1b2cb18a0aa475a34a0df250a9d325a8,.text,build/u/src/game/objective_status2.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/objective_status2.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/objective_status2.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/objective_status2.o +66c72a9f52883a35821c069094d98950,.rodata,build/u/src/game/objective_status2.o +4383ca9144751d6b8bed63a299117578,.text,build/u/src/game/othermodemicrocode.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/othermodemicrocode.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/othermodemicrocode.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/othermodemicrocode.o 68d0cd46011653e6d810f11c93f2c981,.rodata,build/u/src/game/othermodemicrocode.o -5d42554d363b4b64d47069c7b87c5a06,.text,build/u/src/game/player_2.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/player_2.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/player_2.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/player_2.o -f874444d8bfd10718f57b02b19629fea,.rodata,build/u/src/game/player_2.o -bc9076ade55250dfd5030b23ed331646,.text,build/u/src/game/player.o +9a3a5f96a32de7e7d9acf59aaeda0bf8,.text,build/u/src/game/padhalllv.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/padhalllv.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/padhalllv.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/padhalllv.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/padhalllv.o +8a06ff554d3f774a1d5c3efec9c18d15,.text,build/u/src/game/player.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/player.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/player.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/player.o 02bdd476e84dbefa5ab23eab7cc4c7d5,.rodata,build/u/src/game/player.o +c27212f178434893a386379a5d0d951e,.text,build/u/src/game/player_2.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/player_2.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/player_2.o +d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/player_2.o +f874444d8bfd10718f57b02b19629fea,.rodata,build/u/src/game/player_2.o e6962f02e5f239114544446d7948c05c,.text,build/u/src/game/playerstats_007770.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/playerstats_007770.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/playerstats_007770.o @@ -693,7 +728,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/pobjdata.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/pobjdata.o a6765d6de23292908d03ba983ed2f8b2,.data,build/u/src/game/pobjdata.o a02237588cbbf3cbb6f84791e1edc256,.rodata,build/u/src/game/pobjdata.o -f03996bff6e7a092ebb0b9f4fdc9fe0b,.text,build/u/src/game/prop.o +71574a112bea3350da72bc31cf29c739,.text,build/u/src/game/prop.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/prop.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/prop.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/prop.o @@ -703,31 +738,16 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/quaternion.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/quaternion.o dd8a23d5bf38aa81e9e52eb43d310cea,.data,build/u/src/game/quaternion.o dcf28c5b87d1bafd8f6cb584ea25112a,.rodata,build/u/src/game/quaternion.o -56b5a26d40931632137490777d875b8e,.text,build/u/src/game/radar.o +750fbea75750acbcfb5c3feb1cbff4f2,.text,build/u/src/game/radar.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/radar.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/radar.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/radar.o 03c3fbafd5dd335bac35e7b54da4709c,.rodata,build/u/src/game/radar.o -acf886bf279c54322a19b41115357c5d,.text,build/u/src/game/ramromreplay.o +938d1d7605ff49f1f0418dbec37c8e7a,.text,build/u/src/game/ramromreplay.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/ramromreplay.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/ramromreplay.o cb415e05b85be31494ae1bc233beb58b,.data,build/u/src/game/ramromreplay.o c90adc466041f6e464269a31165d0499,.rodata,build/u/src/game/ramromreplay.o -98cc02d0a4a6e39638c67e00520a4a06,.text,build/u/src/game/romhack.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/romhack.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/romhack.o -06a7f9aa368a29171565a7113b51cda4,.data,build/u/src/game/romhack.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/romhack.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/romhack_runlist.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/romhack_runlist.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/romhack_runlist.o -bf193911c20eb4eb493b2b3515ce3221,.data,build/u/src/game/romhack_runlist.o -f351c84ed8ad6498ec69ea369a1011cb,.rodata,build/u/src/game/romhack_runlist.o -d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/romhack_times.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/romhack_times.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/romhack_times.o -bde9c458d93917fb73e07456af856590,.data,build/u/src/game/romhack_times.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/romhack_times.o d41d8cd98f00b204e9800998ecf8427e,.text,build/u/src/game/room_model_buffer.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/room_model_buffer.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/room_model_buffer.o @@ -748,6 +768,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/spectrum.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/spectrum.o 2ce81ebe3ddf133df9e5efc28f0e99ad,.data,build/u/src/game/spectrum.o 3035d02bd694ebdead84c918a03129d6,.rodata,build/u/src/game/spectrum.o +16b4e13d4b5d2c2924a59aff80c5f24a,.text,build/u/src/game/speedgraphrenderer.o +d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/speedgraphrenderer.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/speedgraphrenderer.o +4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/speedgraphrenderer.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/speedgraphrenderer.o a43eb71310cabab33807e1e48a9e426a,.text,build/u/src/game/stan.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/stan.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/stan.o @@ -758,26 +783,11 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/textrelated.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/textrelated.o 5b2be5a4a56e5d047ddd92f749836d87,.data,build/u/src/game/textrelated.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/textrelated.o -da07a32762f121fea4f7c2e7d521d4ca,.text,build/u/src/game/title.o +5152db464b3f52019f62367b97c1a055,.text,build/u/src/game/title.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/title.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/title.o e09fcfa9f21f3499758e33b62d2d3668,.data,build/u/src/game/title.o 071a279563d8add07811107f2c2ec0f1,.rodata,build/u/src/game/title.o -65eba106b7145c8d18e62e41b0fca5cb,.text,build/u/src/game/cleanexplosions.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanexplosions.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanexplosions.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanexplosions.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanexplosions.o -e27c6eaae21319ffd65df3ec73cae9ba,.text,build/u/src/game/cleanwindowpieces.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanwindowpieces.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanwindowpieces.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanwindowpieces.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanwindowpieces.o -581ec48b1cabdc45315a9a7ef4dde5ec,.text,build/u/src/game/cleanplayersound.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/cleanplayersound.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/cleanplayersound.o -d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/cleanplayersound.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/cleanplayersound.o 7e46aa3c9b889a57f29a750575d15d57,.text,build/u/src/game/unk_01B0E0.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_01B0E0.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_01B0E0.o @@ -793,12 +803,7 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_01BAE0.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_01BAE0.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/unk_01BAE0.o 334b90953c5606d68014564e5eda0c1b,.rodata,build/u/src/game/unk_01BAE0.o -155f1fa47776a23483dca05a6d9d83c2,.text,build/u/src/game/bondhead.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/bondhead.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/bondhead.o -1f41ef4e892dded7bd385975a10cc847,.data,build/u/src/game/bondhead.o -eb5394271972e0dc98385a7f324e03b8,.rodata,build/u/src/game/bondhead.o -eba52185e5d35cafd4ae341cc5808a3f,.text,build/u/src/game/unk_091080.o +dd242b32c8416fd08783a347d95b57b5,.text,build/u/src/game/unk_091080.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_091080.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_091080.o 8b28117b30ba1eb01aece3db381370ae,.data,build/u/src/game/unk_091080.o @@ -818,17 +823,12 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_09B7A0.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_09B7A0.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/unk_09B7A0.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/unk_09B7A0.o -6baef6240a86f52c0eed436f986f062d,.text,build/u/src/game/explosions.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/explosions.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/explosions.o -fbda85eb8d9891c2efde432e0336946e,.data,build/u/src/game/explosions.o -9b1db0ae34ae1901b30b1cb9163c1f66,.rodata,build/u/src/game/explosions.o -e31ee3e91af13777d6da868054f4fdc5,.text,build/u/src/game/unk_0A1DA0.o +b41030c1904e701bcdeab30ed5c5148d,.text,build/u/src/game/unk_0A1DA0.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_0A1DA0.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_0A1DA0.o 7449248de18da3f5a96c70e5dd0570e9,.data,build/u/src/game/unk_0A1DA0.o 91e9c74a6ac093c98ffc9e1515ea270d,.rodata,build/u/src/game/unk_0A1DA0.o -1831614af3ecf8f4acf0243a62d0e460,.text,build/u/src/game/unk_0B3200.o +d5263986657df7aac13742312709305d,.text,build/u/src/game/unk_0B3200.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_0B3200.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_0B3200.o d41d8cd98f00b204e9800998ecf8427e,.data,build/u/src/game/unk_0B3200.o @@ -848,17 +848,12 @@ d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_0CC4C0.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_0CC4C0.o 3276b0ae12d43e34773e3e7340fd7eb7,.data,build/u/src/game/unk_0CC4C0.o 649f505c857e9b5f6bc4b652ea1d387e,.rodata,build/u/src/game/unk_0CC4C0.o -16b4e13d4b5d2c2924a59aff80c5f24a,.text,build/u/src/game/unk_0D1AC0.o -d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/unk_0D1AC0.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/unk_0D1AC0.o -4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/unk_0D1AC0.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/unk_0D1AC0.o 7e01bd828f54335aefbf28fc14d26b02,.text,build/u/src/game/viewport.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/viewport.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/viewport.o 4ae71336e44bf9bf79d2752e234818a5,.data,build/u/src/game/viewport.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/src/game/viewport.o -b0b5fd0827011239db8aca9b25d62f74,.text,build/u/src/game/watch.o +e5efaca4f99364758f1e20aebf293455,.text,build/u/src/game/watch.o d41d8cd98f00b204e9800998ecf8427e,.code,build/u/src/game/watch.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/src/game/watch.o 5761f5a56e201189104122ad0642a536,.data,build/u/src/game/watch.o @@ -892,15 +887,15 @@ d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_cryp_all_p.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_dish_all_p.o b3af6a77beb24fa4c3d5acf2bcdeeb88,.data,build/u/assets/obseg/bg/bg_dish_all_p.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_dish_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_lip_all_p.o -357d4c781f68a77f77777f22312ca8be,.data,build/u/assets/obseg/bg/bg_lip_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_lip_all_p.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_len_all_p.o +357d4c781f68a77f77777f22312ca8be,.data,build/u/assets/obseg/bg/bg_len_all_p.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_len_all_p.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_oat_all_p.o +96ecc30d5e54a3bc35158283ff3a6179,.data,build/u/assets/obseg/bg/bg_oat_all_p.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_oat_all_p.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_ref_all_p.o 728f045cd2dcfcab7e956001c8210ee7,.data,build/u/assets/obseg/bg/bg_ref_all_p.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_ref_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_rit_all_p.o -96ecc30d5e54a3bc35158283ff3a6179,.data,build/u/assets/obseg/bg/bg_rit_all_p.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_rit_all_p.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/bg/bg_run_all_p.o f9bfa0db72247cc624983241a80cc2da,.data,build/u/assets/obseg/bg/bg_run_all_p.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/bg/bg_run_all_p.o @@ -955,18 +950,18 @@ d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefpeteZ. d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefrunZ.o 2e72c21b0aa658363c7d26a846616a5c,.data,build/u/assets/obseg/brief/UbriefrunZ.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefrunZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevbunkerZ.o -2207330d53ebb26240adadac3075dc37,.data,build/u/assets/obseg/brief/UbriefsevbunkerZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevbunkerZ.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevbZ.o ee356641add167a35310a6bb14b7d7f1,.data,build/u/assets/obseg/brief/UbriefsevbZ.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevbZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevxbZ.o -06e62170941cf9226161b204a0bcc975,.data,build/u/assets/obseg/brief/UbriefsevxbZ.o -d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevxbZ.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevbunkerZ.o +2207330d53ebb26240adadac3075dc37,.data,build/u/assets/obseg/brief/UbriefsevbunkerZ.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevbunkerZ.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevxZ.o 1fbf379b61826ed7dd56cd57934b1031,.data,build/u/assets/obseg/brief/UbriefsevxZ.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevxZ.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsevxbZ.o +06e62170941cf9226161b204a0bcc975,.data,build/u/assets/obseg/brief/UbriefsevxbZ.o +d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsevxbZ.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/brief/UbriefsiloZ.o 1f012033e14273295212b6999665899f,.data,build/u/assets/obseg/brief/UbriefsiloZ.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/brief/UbriefsiloZ.o @@ -1057,18 +1052,18 @@ d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetuppeteZ.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetuprunZ.o 2a26a94abd77eb88153ce42d4d6e3414,.data,build/u/assets/obseg/setup/UsetuprunZ.o 7638bc9258fb1dd47ce0cbb77a916f4f,.rodata,build/u/assets/obseg/setup/UsetuprunZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevbunkerZ.o -6ae37ef5d6eee372ef100bc85e864de2,.data,build/u/assets/obseg/setup/UsetupsevbunkerZ.o -b5d1f1688129156bed0f46a1f10f4c4e,.rodata,build/u/assets/obseg/setup/UsetupsevbunkerZ.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevbZ.o a94881aeb4f12a22bd27b71fcbea7f93,.data,build/u/assets/obseg/setup/UsetupsevbZ.o 0cf8f0dc88c6e5c615415596d9ee1439,.rodata,build/u/assets/obseg/setup/UsetupsevbZ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevxbZ.o -493bfe05761a14f4f7647f613115e0f7,.data,build/u/assets/obseg/setup/UsetupsevxbZ.o -214e937f3abb7fa20e8ec4df011578de,.rodata,build/u/assets/obseg/setup/UsetupsevxbZ.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevbunkerZ.o +6ae37ef5d6eee372ef100bc85e864de2,.data,build/u/assets/obseg/setup/UsetupsevbunkerZ.o +b5d1f1688129156bed0f46a1f10f4c4e,.rodata,build/u/assets/obseg/setup/UsetupsevbunkerZ.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevxZ.o 5a95cb479a12148813980fcbca8cf93c,.data,build/u/assets/obseg/setup/UsetupsevxZ.o 6b0d217217cc5137855ec4f175ebcfa5,.rodata,build/u/assets/obseg/setup/UsetupsevxZ.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsevxbZ.o +493bfe05761a14f4f7647f613115e0f7,.data,build/u/assets/obseg/setup/UsetupsevxbZ.o +214e937f3abb7fa20e8ec4df011578de,.rodata,build/u/assets/obseg/setup/UsetupsevxbZ.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/setup/UsetupsiloZ.o 631ac7507ee4572ecddf59fd9af48b7e,.data,build/u/assets/obseg/setup/UsetupsiloZ.o 6fdb011700c5c0c289ae934e8c6ec60f,.rodata,build/u/assets/obseg/setup/UsetupsiloZ.o @@ -1357,27 +1352,27 @@ e9c5308dc6ccc93b5f34141b8f9a46ba,.data,build/u/assets/obseg/text/LrunE.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LrunJ.o 53d5da8d3b0a205209bc32bffb623f2c,.data,build/u/assets/obseg/text/LrunJ.o 9ee606c9907824ea41a68ed50449b8c2,.rodata,build/u/assets/obseg/text/LrunJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevbE.o -99b5d2c99e8436044ab80f4d5c10955d,.data,build/u/assets/obseg/text/LsevbE.o -a533dc0dea666db00823112b16a25e35,.rodata,build/u/assets/obseg/text/LsevbE.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevE.o 857201f7708da54326d9f65a607f0699,.data,build/u/assets/obseg/text/LsevE.o 4388dfac4ac5ddd6f1e806f444785d1f,.rodata,build/u/assets/obseg/text/LsevE.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevJ.o 216e3e8ac6df1deefd48a44048b7f2a9,.data,build/u/assets/obseg/text/LsevJ.o 9d5d536dbf0ac817c41c6f6ce1da1c2e,.rodata,build/u/assets/obseg/text/LsevJ.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxbE.o -381c7194edce1643c856ee5408955858,.data,build/u/assets/obseg/text/LsevxbE.o -5c151a11ab6f175f6dd2cf18fc8d9c48,.rodata,build/u/assets/obseg/text/LsevxbE.o -d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxbJ.o -4b3b5544e4cb3af47d90f2d0bf992003,.data,build/u/assets/obseg/text/LsevxbJ.o -7a6f1aef8ae105dfb7b8c7e4944bbe19,.rodata,build/u/assets/obseg/text/LsevxbJ.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevbE.o +99b5d2c99e8436044ab80f4d5c10955d,.data,build/u/assets/obseg/text/LsevbE.o +a533dc0dea666db00823112b16a25e35,.rodata,build/u/assets/obseg/text/LsevbE.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxE.o b7253c719a43dcc64c39e3021777dfe4,.data,build/u/assets/obseg/text/LsevxE.o bc300a0d53e25053b73dd7f2515a622b,.rodata,build/u/assets/obseg/text/LsevxE.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxJ.o ce0d781b0d13eec737ed28c1ec89700c,.data,build/u/assets/obseg/text/LsevxJ.o b7b850df3d2cac26c9cfd6ba47f632d1,.rodata,build/u/assets/obseg/text/LsevxJ.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxbE.o +381c7194edce1643c856ee5408955858,.data,build/u/assets/obseg/text/LsevxbE.o +5c151a11ab6f175f6dd2cf18fc8d9c48,.rodata,build/u/assets/obseg/text/LsevxbE.o +d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LsevxbJ.o +4b3b5544e4cb3af47d90f2d0bf992003,.data,build/u/assets/obseg/text/LsevxbJ.o +7a6f1aef8ae105dfb7b8c7e4944bbe19,.rodata,build/u/assets/obseg/text/LsevxbJ.o d41d8cd98f00b204e9800998ecf8427e,.bss,build/u/assets/obseg/text/LshoE.o 70bc8f4b72a86921468bf8e8441dce51,.data,build/u/assets/obseg/text/LshoE.o d41d8cd98f00b204e9800998ecf8427e,.rodata,build/u/assets/obseg/text/LshoE.o diff --git a/make_test_files_basis.sh b/scripts/make/build_hashtable.sh old mode 100755 new mode 100644 similarity index 94% rename from make_test_files_basis.sh rename to scripts/make/build_hashtable.sh index 34787ce..9ed95c8 --- a/make_test_files_basis.sh +++ b/scripts/make/build_hashtable.sh @@ -8,7 +8,7 @@ usage() { echo "" echo "$0 -v u [-o results_file]" echo "" - echo " -o output filename. Optional. Defaults to make_test_files_basis_out" + echo " -o output filename. Optional. Defaults to full_hashtable_{version}.csv" echo " -v version. Supported options are: US,u, JP,j, EU,e" echo "" exit 0; @@ -31,7 +31,7 @@ while getopts "o:hv:" arg; do elif [ "${OPTARG,,}" = "e" ]; then COUNTRY_CODE="e" fi - + ARG_VERSION="${OPTARG}" ;; o) # out file @@ -50,8 +50,8 @@ then exit 1 fi -if [ "${OUTFILE}" = "" ] ; then - OUTFILE="make_test_files_basis_out" +if [ "${OUTFILE}" = "" ] ; then + OUTFILE="full_hashtable_${version}.csv" fi TMP=$(mktemp /tmp/ge_test_files.XXXXXX) @@ -68,19 +68,19 @@ touch "${OUTFILE}" for FILE in build/${COUNTRY_CODE}/src/*.o do echo "adding ${FILE}" - + mips-linux-gnu-objcopy -j .text -O binary "${FILE}" "${TMP}" printf "%s,.text,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .code -O binary "${FILE}" "${TMP}" printf "%s,.code,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" done @@ -88,19 +88,19 @@ done for FILE in build/${COUNTRY_CODE}/src/game/*.o do echo "adding ${FILE}" - + mips-linux-gnu-objcopy -j .text -O binary "${FILE}" "${TMP}" printf "%s,.text,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .code -O binary "${FILE}" "${TMP}" printf "%s,.code,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" done @@ -108,13 +108,13 @@ done for FILE in build/${COUNTRY_CODE}/assets/obseg/bg/*.o do echo "adding ${FILE}" - + mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" done @@ -122,13 +122,13 @@ done for FILE in build/${COUNTRY_CODE}/assets/obseg/brief/*.o do echo "adding ${FILE}" - + mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" done @@ -136,13 +136,13 @@ done for FILE in build/${COUNTRY_CODE}/assets/obseg/setup/*.o do echo "adding ${FILE}" - + mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" done @@ -150,13 +150,13 @@ done for FILE in build/${COUNTRY_CODE}/assets/obseg/stan/*.o do echo "adding ${FILE}" - + mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" done @@ -164,15 +164,15 @@ done for FILE in build/${COUNTRY_CODE}/assets/obseg/text/*.o do echo "adding ${FILE}" - + mips-linux-gnu-objcopy -j .bss -O binary "${FILE}" "${TMP}" printf "%s,.bss,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .data -O binary "${FILE}" "${TMP}" printf "%s,.data,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" - + mips-linux-gnu-objcopy -j .rodata -O binary "${FILE}" "${TMP}" printf "%s,.rodata,%s\n" $(md5sum -b "${TMP}" | cut -c -32) "${FILE}" >> "${OUTFILE}" done -rm -f "${TMP}" \ No newline at end of file +rm -f "${TMP}" diff --git a/scripts/make/build_tools.sh b/scripts/make/build_tools.sh new file mode 100644 index 0000000..84edf17 --- /dev/null +++ b/scripts/make/build_tools.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# arg1: make command passthrough, per make user manual. + +MAKECMD=$1 + +if [ -z ${MAKECMD} ]; then echo "$0: missing argument: MAKECMD"; exit 1; fi + +$MAKECMD -s -C tools >&2 + +retVal=$? +if [ $retVal -ne 0 ]; then + echo "Failed to build tools" +fi +exit $retVal \ No newline at end of file diff --git a/scripts/make/checksum.sh b/scripts/make/checksum.sh new file mode 100644 index 0000000..0c0e5ab --- /dev/null +++ b/scripts/make/checksum.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) + +if [ -f "$SCRIPT_DIR"/local/checksum.sh ]; then + "$SCRIPT_DIR"/local/checksum.sh "$1" "$2" "$3" +else + "$SCRIPT_DIR"/default/checksum.sh "$1" "$2" +fi diff --git a/scripts/make/clean_nuke.sh b/scripts/make/clean_nuke.sh new file mode 100644 index 0000000..e44ada9 --- /dev/null +++ b/scripts/make/clean_nuke.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# this is a partial extension of "make clean". +# this should be invoked along with regular make clean. +# +# arg 1: ALLOWED_COUNTRYCODE; this should be a string of country codes separated by space. +# arg 2: BUILD_DIR_BASE + +ALLOWED_COUNTRYCODE=$1 +BUILD_DIR_BASE=$2 + +# quote to allow space characters +if [ -z "${ALLOWED_COUNTRYCODE}" ]; then echo "$0: missing argument: ALLOWED_COUNTRYCODE"; exit 1; fi +if [ -z "${BUILD_DIR_BASE}" ]; then echo "$0: missing argument: BUILD_DIR_BASE"; exit 1; fi + +echo "deleting build folders and files" + +# dont quote to split on space characters +for cc in ${ALLOWED_COUNTRYCODE[@]}; do + rm -r -f -d "${BUILD_DIR_BASE}/${cc}" +done + +echo "deleting bin / rsp / asp" +rm -r -f -d bin/ +rm -r -f -d assets/images/split/ + +# delete binary files according to current source control directory structure. +# fixes issues if directory structure changes ... +echo "deleting assets" +rm -r -f "assets/music/*.bin" "assets/obseg/bg/*.bin" "assets/obseg/brief/*.bin" "assets/obseg/chr/*.bin" "assets/obseg/gun/*.bin" "assets/obseg/prop/*.bin" "assets/obseg/setup/*.bin" "assets/obseg/setup/e/*.bin" "assets/obseg/setup/u/*.bin" "assets/obseg/setup/j/*.bin" "assets/obseg/stan/*.bin" "assets/obseg/text/*.bin" "assets/obseg/text/e/*.bin" "assets/obseg/text/u/*.bin" "assets/obseg/text/j/*.bin" "assets/ramrom/*.bin" "assets/ramrom/e/*.bin" "assets/ramrom/u/*.bin" "assets/ramrom/j/*.bin" \ No newline at end of file diff --git a/scripts/make/create_directories.sh b/scripts/make/create_directories.sh new file mode 100644 index 0000000..dfca78e --- /dev/null +++ b/scripts/make/create_directories.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +# $1: BUILD_DIR +# $2: country code + +echo "creating required build directories" + +BUILD_DIR=$1 +COUNTRYCODE=$2 + +if [ -z ${BUILD_DIR} ]; then echo "$0: missing argument: BUILD_DIR"; exit 1; fi +if [ -z ${COUNTRYCODE} ]; then echo "$0: missing argument: COUNTRYCODE"; exit 1; fi + +dirs=( + rsp + src + src/game + src/inflate + src/libultra + src/libultra/audio + src/libultra/gt + src/libultra/gu + src/libultra/io + src/libultra/libc + src/libultra/os + src/libultra/rg + src/libultra/sched + src/libultra/sp + src/libultrare + src/libultrare/audio + src/libultrare/gt + src/libultrare/gu + src/libultrare/io + src/libultrare/libc + src/libultrare/os + src/libultrare/rg + src/libultrare/sched + src/libultrare/sp + assets assets/obseg + assets/obseg/brief + assets/obseg/chr + assets/obseg/gun + assets/obseg/prop + assets/obseg/text + assets/obseg/bg + assets/obseg/setup + assets/obseg/setup/${COUNTRYCODE} + assets/obseg/stan + assets/music + assets/ramrom + assets/images + assets/images/split + assets/font + assets/embedded + assets/embedded/skeletons + assets/embedded/player_gait_object +) + +mkdir -p "${BUILD_DIR}" + +for dir in "${dirs[@]}"; do + mkdir -p "${BUILD_DIR}/${dir}" +done + +exit 0 \ No newline at end of file diff --git a/scripts/make/default/checksum.sh b/scripts/make/default/checksum.sh new file mode 100644 index 0000000..1d0f5a5 --- /dev/null +++ b/scripts/make/default/checksum.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +SHA1SUM=$1 +OUTCODE=$2 + +# quote to allow space +if [ -z "${SHA1SUM}" ]; then echo "$0: missing argument: SHA1SUM"; exit 1; fi +if [ -z "${OUTCODE}" ]; then echo "$0: missing argument: OUTCODE"; exit 1; fi + +# no quotes on SHA1SUM to allow padding command line arguments from parent +${SHA1SUM} -c ge007.${OUTCODE}.sha1 + +retVal=$? +if [ $retVal -ne 0 ]; then + echo -e "\n\n ERROR: NOT MATCH!\n\n" +else + echo -e "\n\n MATCH!\n\n" +fi +exit $retVal \ No newline at end of file diff --git a/scripts/make/local_template/checksum.sh b/scripts/make/local_template/checksum.sh new file mode 100644 index 0000000..fc448c5 --- /dev/null +++ b/scripts/make/local_template/checksum.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +SHA1SUM=$1 +OUTCODE=$2 + +# quote to allow space +if [ -z "${SHA1SUM}" ]; then echo "$0: missing argument: SHA1SUM"; exit 1; fi +if [ -z "${OUTCODE}" ]; then echo "$0: missing argument: OUTCODE"; exit 1; fi + +# no quotes on SHA1SUM to allow padding command line arguments from parent +${SHA1SUM} -c ge007.${OUTCODE}.sha1 +retVal=$? + +if [ $retVal -ne 0 ]; then + echo -e "\n\n\033[1;41;37m" + echo -e " " + echo -e " ERROR: NOT MATCH! " + echo -e " \033[m" + echo -e "\n\n" + + RESPONSE=0 + read -t 5 -p "Do you want to check Source Files (y/n)? " choice + case "$choice" in + y|Y ) RESPONSE=1; ;; + n|N ) RESPONSE=2; ;; + * ) RESPONSE=3; ;; + esac + + echo "" + + if [ $RESPONSE -eq 1 ]; then + echo "Please wait while we determine which files are affected..." + # scripts file relative to root source control directory + ./scripts/test_files.sh -c -i scripts/ge007.${OUTCODE}-test_basis.csv + echo "Dumping map diff..." + diff --suppress-common-lines build/${OUTCODE}-match/ge007.${OUTCODE}.map build/${OUTCODE}/ge007.${OUTCODE}.map + fi + +else + echo -e "\n\n\033[1;42;37m" + echo -e " " + echo -e " MATCH! " + echo -e " \033[m" + echo -e "\n\n" + + RESPONSE=0 + read -t 5 -p "Do you want to update the matching hashtable (recommended but slow) (y/n)?" choice + case "$choice" in + y|Y ) RESPONSE=1; ;; + n|N ) RESPONSE=2; ;; + * ) RESPONSE=3; ;; + esac + + echo "" + + if [ $RESPONSE -eq 1 ]; then + echo "Please wait while we rebuild the hashtable..." + cp -r build/${OUTCODE}/* build/${OUTCODE}-match + # cp build/${OUTCODE}/ge007.${OUTCODE}.map build/${OUTCODE}-match/ge007.$(OUTCODE).map + # scripts file relative to root source control directory + ./scripts/make/build_hashtable.sh -v ${OUTCODE} -o scripts/ge007.${OUTCODE}-test_basis.csv + fi +fi + +exit $retVal diff --git a/scripts/make/rebuild_allver_hashtables.sh b/scripts/make/rebuild_allver_hashtables.sh new file mode 100644 index 0000000..5c6b6a1 --- /dev/null +++ b/scripts/make/rebuild_allver_hashtables.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# This script should execute from root source control directory. +result=$(basename "$PWD") +if [ $result = "scripts" ] ; then + cd .. +fi + +./scripts/make/build_hashtable.sh -v u -o scripts/ge007.u-test_basis.csv +./scripts/make/build_hashtable.sh -v j -o scripts/ge007.j-test_basis.csv +./scripts/make/build_hashtable.sh -v e -o scripts/ge007.e-test_basis.csv \ No newline at end of file diff --git a/rename_sym.sh b/scripts/rename_sym.sh old mode 100755 new mode 100644 similarity index 100% rename from rename_sym.sh rename to scripts/rename_sym.sh diff --git a/show_build_offsets.sh b/scripts/show_build_offsets.sh old mode 100755 new mode 100644 similarity index 100% rename from show_build_offsets.sh rename to scripts/show_build_offsets.sh diff --git a/scripts/test_files.sh b/scripts/test_files.sh new file mode 100644 index 0000000..239bb92 --- /dev/null +++ b/scripts/test_files.sh @@ -0,0 +1,110 @@ +#!/bin/bash + +# execute from the root source control directory. +result=$(basename "$PWD") +if [ $result = "scripts" ] ; then + cd .. +fi + +SRC= +CONTINUE_ON_ERROR=0 +VERBOSE=0 + +usage() { + echo "checks md5s generated from make/build_hashtable.sh" + echo "" + echo "This script should execute from root source control directory." + echo "" + echo "$0 usage:" + echo "" + echo " $0 -i file [-c]" + echo "" + echo " -c continue on error" + exit 0; +} + +[ $# -eq 0 ] && usage +while getopts "i:chv" arg; do + case $arg in + i) + SRC="${OPTARG}" + ;; + c) + CONTINUE_ON_ERROR=1 + ;; + v) + VERBOSE=1 + ;; + h | *) # Display help. + usage + exit 0 + ;; + esac +done + +if [ "${SRC}" = "" ] ; then + usage +fi + +if [ ! -f "${SRC}" ]; then + echo "File not found: ${SRC}" + exit 1 +fi + +OLDIFS=$IFS +IFS="," +TMP=$(mktemp /tmp/ge_test_files.XXXXXX) +TMP2=$(mktemp /tmp/ge_test_files.XXXXXX) + +while read MD5 SECTION FILE +do + if [ ! -f "${SRC}" ]; then + echo "File not found: ${SRC}" + continue + fi + if [ -f $FILE ]; then + mips-linux-gnu-objcopy -j "${SECTION}" -O binary "${FILE}" "${TMP}" + ACTUAL=$(md5sum -b "${TMP}" | cut -c -32 | tr '[:upper:]' '[:lower:]') + EXPECTED=$(echo "${MD5}" | tr '[:upper:]' '[:lower:]') + FILENAME=$(echo $FILE | sed -E -e 's/build\/[uje]\/src\//src\//g;'); + VERSION=$(echo $FILE | sed -E -e 's/build\/([uje])\/.*/\1/g;'); + + if [ "${ACTUAL}" != "${EXPECTED}" ] ; then + #if [ "${SECTION}" == ".data" ] || [ "${SECTION}" == ".rodata" ] ; then + # echo -e "\033[93m\033[1A"; + #fi + echo "checksums differ, section'${SECTION}', file: '${FILE}'." + echo "Comparing Files..." + echo "Original | New" + if [ -f "build/${VERSION}-match/${FILENAME}" ]; then + mips-linux-gnu-objcopy -j "${SECTION}" -O binary "build/${VERSION}-match/${FILENAME}" "${TMP2}" + (diff -y -W 80 --suppress-common-lines <(xxd -c8 $TMP2) <(xxd -c8 $TMP) && echo -e "\033[92mFiles Identical!") || \ + (\ + echo -e "\033[91mDifference Found, Dumping assembly! (${FILE}New.mips)" && touch "${FILE}New.mips" && touch "${FILE}Match.mips" && \ + mips-linux-gnu-objdump --all-headers --disassemble --debugging --source --full-contents --line-numbers "build/${VERSION}-match/${FILENAME}" > "${FILE}Match.mips" && \ + mips-linux-gnu-objdump --all-headers --disassemble --debugging --source --full-contents --line-numbers "${FILE}" > "${FILE}New.mips" \ + ); + else + echo -e "\033[93mNo Previously matching files to compare... Please run this test again on a matching build to generate." + fi + + if [ ${CONTINUE_ON_ERROR} -eq 0 ] ; then + IFS=$OLDIFS + rm -f "${TMP}" + rm -f "${TMP2}" + exit 1 + fi + else + if [ ${VERBOSE} -eq 1 ]; then + echo -e "\033[92mpass: section'${SECTION}' ${FILE}" + fi + fi + echo -e -n "\033[m" + fi +done < "${SRC}" + +IFS=$OLDIFS +rm -f "${TMP}" +rm -f "${TMP2}" + +exit 0 diff --git a/test_files_readme.md b/scripts/test_files_readme.md similarity index 91% rename from test_files_readme.md rename to scripts/test_files_readme.md index 1f8f10d..57e5bec 100644 --- a/test_files_readme.md +++ b/scripts/test_files_readme.md @@ -1,112 +1,112 @@ -### test files readme ### - -This is a tool suite to identify discrepancies between builds. It will extract relevant sections from ELF binary and compare against known good md5. The purpose is to help identify where the build is failing to match. - -### Quick start ### - - ./test_files.sh -i ge007.u-test_basis.csv - -### Overview ### - -This consists of two bash scripts: - - make_test_files_basis.sh - test_files.sh - -The first is used to generate a list of md5 checksums. This should only be used if a new build is added, or you want to generate checksums against a particular variant. - -### Making test file ### - -Output format is simple csv, one entry per line. Each line is a 32 character md5, the name of section extracted from ELF binary, and path to file relative from repo root (where this script is). - -Escaped csv, quotes or commas in filenames are not supported. - -The script iterates the following build directories, looking for `.o` files: - -- src/ -- src/game -- assets/obseg/bg -- assets/obseg/brief -- assets/obseg/setup -- assets/obseg/stan -- assets/obseg/text - -For source files, the following ELF sections are extracted: - -- .text -- .code -- .bss -- .data -- .rodata - -For asset files, the following ELF sections are extracted: - -- .bss -- .data -- .rodata - -The supported versions have already had the md5 checksums extracted from known good builds. These files are: - -- ge007.u-test_basis.csv -- ge007.j-test_basis.csv -- ge007.e-test_basis.csv - -**build test file example** - - ./make_test_files_basis.sh -v u -o ge007.u-test_basis.csv - ./make_test_files_basis.sh -v j -o ge007.j-test_basis.csv - ./make_test_files_basis.sh -v e -o ge007.e-test_basis.csv - -### Testing build ### - -A build can be compared against a test file by running `./test_files.sh`. The input file is required. This will This lists the path to the build object files. Example - - ./test_files.sh -i ge007.u-test_basis.csv - -This lists each section and file as it is tested. You should see output like - - ... - pass: section'.bss' build/u/assets/obseg/text/LsiloJ.o - pass: section'.data' build/u/assets/obseg/text/LsiloJ.o - pass: section'.rodata' build/u/assets/obseg/text/LsiloJ.o - pass: section'.bss' build/u/assets/obseg/text/LstatE.o - pass: section'.data' build/u/assets/obseg/text/LstatE.o - ... - -The output stops on the first failure. Use option `-c` to continue on mismatch. - -### Examples ### - -**Rename function**: - -Modify `src/game/bg.c` method `bgRectIsInside` (an unreferenced method). - -*result*: all files pass. - -**Change function**: - -Modify `src/game/bg.c` method `bgRectIsInside` (an unreferenced method) to return a different value. Rebuild the project and test. - -*result*: Test script should stop with a message similar to the following: - - checksums differ, section'.text', file: 'build/u/src/game/bg.o'. Actual=[6747949109773c07983a2584101ef214], expected=[0a3e9300d0406ae8036a97b5596f3f5c] - -**change .rodata** - -Modify `src/fr.c` method `indyGrabJpg16bit` and change one of the printf strings: - - sprintf(buffer, "zzzgrab.%d.jpeg", *pgrabnum); - -*result*: Test script should stop with a message similar to the following: - - checksums differ, section'.rodata', file: 'build/u/src/fr.o'. Actual=[9e108ace3e0dab31c819d22ed1d063b9], expected=[94e2bec0d83b53385ba626feb3005cb4] - -**Change setup file** - -Modify `assets/obseg/setup/Ump_setupcaveZ.c` padlist and change one of the float variables. Here is modifying the first entry in the array: - - { {1.0f, -726.0f, -378.0f}, {0.0f, 1.0f, 0.0f}, {-2e-06, 0.0f, 1.0f}, "p1884a", 0 }, - -*result*: Test script should stop with a message similar to the following: - - checksums differ, section'.data', file: 'build/u/assets/obseg/setup/Ump_setupcaveZ.o'. Actual=[1dd1b59ed38408ba67b6616f9194c6d9], expected=[9caabe90e7f9b62668b607b286e14738] +### test files readme ### + +This is a tool suite to identify discrepancies between builds. It will extract relevant sections from ELF binary and compare against known good md5. The purpose is to help identify where the build is failing to match. + +### Quick start ### + + ./test_files.sh -i ge007.u-test_basis.csv + +### Overview ### + +This consists of two bash scripts: + + make/build_hashtable.sh + test_files.sh + +The first is used to generate a list of md5 checksums. This should only be used if a new build is added, or you want to generate checksums against a particular variant. + +### Making test file ### + +Output format is simple csv, one entry per line. Each line is a 32 character md5, the name of section extracted from ELF binary, and path to file relative from repo root (where this script is). + +Escaped csv, quotes or commas in filenames are not supported. + +The script iterates the following build directories, looking for `.o` files: + +- src/ +- src/game +- assets/obseg/bg +- assets/obseg/brief +- assets/obseg/setup +- assets/obseg/stan +- assets/obseg/text + +For source files, the following ELF sections are extracted: + +- .text +- .code +- .bss +- .data +- .rodata + +For asset files, the following ELF sections are extracted: + +- .bss +- .data +- .rodata + +The supported versions have already had the md5 checksums extracted from known good builds. These files are: + +- ge007.u-test_basis.csv +- ge007.j-test_basis.csv +- ge007.e-test_basis.csv + +**build test file example** + + ./make/build_hashtable.sh -v u -o ge007.u-test_basis.csv + ./make/build_hashtable.sh -v j -o ge007.j-test_basis.csv + ./make/build_hashtable.sh -v e -o ge007.e-test_basis.csv + +### Testing build ### + +A build can be compared against a test file by running `./test_files.sh`. The input file is required. This will This lists the path to the build object files. Example + + ./test_files.sh -i ge007.u-test_basis.csv + +This lists each section and file as it is tested. You should see output like + + ... + pass: section'.bss' build/u/assets/obseg/text/LsiloJ.o + pass: section'.data' build/u/assets/obseg/text/LsiloJ.o + pass: section'.rodata' build/u/assets/obseg/text/LsiloJ.o + pass: section'.bss' build/u/assets/obseg/text/LstatE.o + pass: section'.data' build/u/assets/obseg/text/LstatE.o + ... + +The output stops on the first failure. Use option `-c` to continue on mismatch. + +### Examples ### + +**Rename function**: + +Modify `src/game/bg.c` method `bgRectIsInside` (an unreferenced method). + +*result*: all files pass. + +**Change function**: + +Modify `src/game/bg.c` method `bgRectIsInside` (an unreferenced method) to return a different value. Rebuild the project and test. + +*result*: Test script should stop with a message similar to the following: + + checksums differ, section'.text', file: 'build/u/src/game/bg.o'. Actual=[6747949109773c07983a2584101ef214], expected=[0a3e9300d0406ae8036a97b5596f3f5c] + +**change .rodata** + +Modify `src/fr.c` method `indyGrabJpg16bit` and change one of the printf strings: + + sprintf(buffer, "zzzgrab.%d.jpeg", *pgrabnum); + +*result*: Test script should stop with a message similar to the following: + + checksums differ, section'.rodata', file: 'build/u/src/fr.o'. Actual=[9e108ace3e0dab31c819d22ed1d063b9], expected=[94e2bec0d83b53385ba626feb3005cb4] + +**Change setup file** + +Modify `assets/obseg/setup/Ump_setupcaveZ.c` padlist and change one of the float variables. Here is modifying the first entry in the array: + + { {1.0f, -726.0f, -378.0f}, {0.0f, 1.0f, 0.0f}, {-2e-06, 0.0f, 1.0f}, "p1884a", 0 }, + +*result*: Test script should stop with a message similar to the following: + + checksums differ, section'.data', file: 'build/u/assets/obseg/setup/Ump_setupcaveZ.o'. Actual=[1dd1b59ed38408ba67b6616f9194c6d9], expected=[9caabe90e7f9b62668b607b286e14738] diff --git a/scripts/wsl_32bit_enable.sh b/scripts/wsl_32bit_enable.sh new file mode 100644 index 0000000..aa87c8d --- /dev/null +++ b/scripts/wsl_32bit_enable.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +echo "WSL1 32bit ELF Enabler (Needed for 32bit pointers used by N64)" + +dpkg -s "qemu-user-static" >/dev/null 2>&1 && { + echo "" +} || { + echo "Installing Required patches." + apt update + apt install -y qemu-user-static +} + +sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff' +sudo service binfmt-support start + +dpkg -s "libc6:i386" >/dev/null 2>&1 && { + echo "" +} || { + apt update + apt install -y libc6:i386 libncurses5:i386 libstdc++6:i386 zlib1g:i386 zlib1g-dev:i386 +} + diff --git a/src/aicommands.def b/src/aicommands.def index 1bd3cb5..b1de732 100644 --- a/src/aicommands.def +++ b/src/aicommands.def @@ -5,41 +5,41 @@ Each AI command uses a series of defines, and each define MUST be used. #define CMDNAME COMMAND_NAME - + #define DESCRIPTION \ / * * Description *See Documentation* * / - + #define PARAMS BYTE(FirstParam), BYTE(secondParam) - + _AI_CMD( { - Code //Pute Code here (newlines supported within {}) + Code //Put Code here (newlines supported within {}) }) - + Each command is responsible for undefining its own macros - + You may define up to 8 unsigned parameters. Parameter Types: BYTE(NAME) Most parameters are single bytes DBYTE(NAME) Most Floats are 2 bytes TBYTE(NAME) Some times are 3 bytes - QBYTE(NAME) Most bitflags are 4 bytes - + QBYTE(NAME) Most bit masks are 4 bytes + Code: inline comments / / are NOT allowed. - - + + _AI_CMD_POLYMORPH( - Commands before base command, // (Do NOT seperate by comma) + Commands before base command, // (Do NOT separate by comma) POLYMORPH NAME, (CMD PARAM NAMES OR VALUES), (POLY PARAM NAMES)) - + Parameter Types: N/A - Polymorphs are Non-Typed. - + CMD PARAMS: These MUST follow the same order as the base command. Params not included in Polymorph must have a value. - + POLY PARAMS: Parameters for Polymorph. Polymorph example: @@ -52,7 +52,7 @@ Explanation: Cmd takes CHR_ID, NUM, LABEL Poly Takes LABEL CHR_ID and NUM must have values - + //##HACKS: //###Extending Polymorph child commands: Extra Commands after CMDNAME can be added to the 3rd Parameter @@ -61,31 +61,31 @@ Where (GOTOLABEL) is the param and SLEEP and GOTO_FIRST are extra commands. See DO LOOP and RANDOM_GENERATE_LESS_THAN - + //##Documentation: - Description Format: Opening and closing / * * / MUST have 2 asterixes + Description Format: Opening and closing / * * / MUST have 2 asterisks after/before slash.( / * * ... * * /) - Importiant Notess are indicated by Exception tags. - + Important Notes are indicated by Exception tags. + Comments: Ordinary comments NOT for output MUST NOT have - 2 asterixes after/before slash. - + 2 asterisks after/before slash. + Inline Comments: Inline comments that use / / ARE included in output If you do NOT want the comment included in output - use multiline comment tags.(/ * * /) + use multi-line comment tags.(/ * * /) HACK: To include an inline comment within a parameter of Command Builder or to otherwise break a - single line use a multiline comment tag with + single line use a multi-line comment tag with a new line inside, e.g. \ * \ n * / - + **************************************************************************** */ /*Visual Studio syntax highlighter Assistant, -(FIXED 20/02/2020) if problems occur break this asterix! --> */ - +(FIXED 20/02/2020) if problems occur break this asterisk! --> */ +#ifndef __GNUC__ #include - -#if 1 +#endif +#if 0 #ifndef _AI_CMD #define _SYNHILITE #include @@ -102,14 +102,14 @@ #endif #endif /* -//#Usefull Regex: +//#Useful Regex: /(^\*.{78,78}?)(.*)(\*$)/ $1$3 regex for long comments trimming (^_.*?\()(.*?,)(.*$) Matches command name replace with $1CMDNAME,$3 -//##Changelog: -//!FIXED! 02/02/2020 Use of CMDNAME mandantory for Polymorph +//##Change log: +//!FIXED! 02/02/2020 Use of CMDNAME mandatory for Polymorph //!FIXED! 05/11/2020 No longer need Number of Params, they are calculated. -//!BUG! 11/11/2020 Attempt at more automated All-in-One command that did away +//BUG! 11/11/2020 Attempt at more automated All-in-One command that did away with defines worked except for polymorph description... Syntax was as below: (command, description, params, code,(polymorphs)) @@ -119,9 +119,9 @@ //============================================================================== -//## GOTO NEXT +//## GOTO NEXT //============================================================================== -#if 0 /*//!BUG All-in-One command failed on description inclusion during loop (newlines)*/ +#if 0 /*//BUG All-in-One command failed on description inclusion during loop (newlines)*/ _AI_CMD(GONEXT, /******************************************************************************* * Skips a22ll commands between this command and LABEL then continues @@ -183,7 +183,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GOTO FIRST +//## GOTO FIRST //============================================================================== /* #define CMDNAME GOTO_FIRST */ @@ -191,12 +191,12 @@ _AI_CMD_POLYMORPH(, #define DESCRIPTION \ /******************************************************************************* - Starting from the beginning, Skips all commands until LABEL - continues - executing after found LABEL +* Starting from the beginning, Skips all commands until LABEL - continues +* executing after found LABEL ******************************************************************************** - @param LABEL: 8bit Integer/enum ID of label to Go To - @return Continue execution from LABEL or End - @exception None +* @param LABEL: 8bit Integer/enum ID of label to Go To +* @return Continue execution from LABEL or End +* @exception None *******************************************************************************/ #define PARAMS BYTE(LABEL) @@ -249,7 +249,7 @@ _AI_CMD_POLYMORPH( , //============================================================================== -//## LABEL +//## LABEL //============================================================================== /* #define CMDNAME LABEL */ @@ -261,7 +261,7 @@ _AI_CMD_POLYMORPH( , ******************************************************************************** * @param ID: 8bit Integer/enum ID * @return Nothing -* @exception None +* @exception None *******************************************************************************/ #define PARAMS BYTE(ID) @@ -271,7 +271,7 @@ _AI_CMD( Offset += CAT(CAT(AI_, CMDNAME), _LENGTH); break; }) - + //ALIAS FOR SYNTAX SUGER #undef DESCRIPTION @@ -303,7 +303,7 @@ _AI_CMD_POLYMORPH(, ******************************************************************************** * @param ID: 8bit Integer/enum ID of LOOP * @return Nothing -* @exception Must have uniqe ID +* @exception Must have unique ID *******************************************************************************/ _AI_CMD_POLYMORPH(, @@ -323,7 +323,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## Yield +//## Yield //============================================================================== /* #define CMDNAME SLEEP */ @@ -331,11 +331,11 @@ _AI_CMD_POLYMORPH(, #define DESCRIPTION\ /******************************************************************************* -* Halt the AI List - frees engine to start executing next AI List until all +* Halt the AI List - frees engine to start executing next AI List until all * Lists have been executed for game tick. ******************************************************************************** -* @return Current Ai List Position -* @exception Offscreen/idle guard's will take 14 game ticks instead of 1 tick +* @return Current AI List Position +* @exception Off-screen/idle guard's will take 14 game ticks instead of 1 tick *******************************************************************************/ #define PARAMS /*NONE*/ @@ -370,7 +370,7 @@ _AI_CMD({ /*83% Match*/ //============================================================================== -//## END +//## END //============================================================================== /* #define CMDNAME ENDLIST */ @@ -399,7 +399,7 @@ _AI_CMD({return;}/*Match*/) //============================================================================== -//## JUMP TO AI LIST +//## JUMP TO AI LIST //============================================================================== /* #define CMDNAME JUMP_TO_AI_LIST */ @@ -408,11 +408,11 @@ _AI_CMD({return;}/*Match*/) #define DESCRIPTION\ /****************************************************************************** * Set Chr's current AI List to beginning of AI_LIST_ID and execute at -* next opertunity. +* next opportunity. ******************************************************************************* * @param CHR_NUM: ID of Chr (0-255) * @param AI_LIST_ID: 16bit pointer to AI List within Chr/Global -* @exception: Not recommended to Goto a BG List (10XX) +* @exception: Not recommended to Go to a BG List (10XX) ******************************************************************************/ #define PARAMS BYTE(CHR_NUM), DBYTE(AI_LIST_ID) @@ -439,7 +439,8 @@ _AI_CMD( Offset += CAT(CAT(AI_, CMDNAME), _LENGTH); } break; - }) + } +) //POLYMORPHS @@ -448,9 +449,9 @@ _AI_CMD( /****************************************************************************** * Jump my AI to AI_LIST_ID then return to Standard Guard ******************************************************************************* - @return Continue execution from begginning of Standard Guard - @param AI_LIST_ID: AI List to execute - @exception: AI_LIST_ID Must NOT be a BG List (10XX) +* @return None - Will continue as "Standard Guard" +* @param AI_LIST_ID: AI List to execute +* @exception: AI_LIST_ID Must NOT be a BG List (10XX) ******************************************************************************/ _AI_CMD_POLYMORPH(SetReturnAiList(GAILIST_STANDARD_GUARD), @@ -463,9 +464,9 @@ _AI_CMD_POLYMORPH(SetReturnAiList(GAILIST_STANDARD_GUARD), /****************************************************************************** * Jump my AI to AI_LIST_ID and loop ******************************************************************************* - @return Continue execution from begginning of AI_LIST_ID - @param AI_LIST_ID: AI List to execute - @exception: AI_LIST_ID Must NOT be a BG List (10XX) +* @return None - Will Loop the New AI List +* @param AI_LIST_ID: AI List to execute +* @exception: AI_LIST_ID Must NOT be a BG List (10XX) ******************************************************************************/ _AI_CMD_POLYMORPH(SetReturnAiList(AI_LIST_ID), @@ -476,11 +477,11 @@ _AI_CMD_POLYMORPH(SetReturnAiList(AI_LIST_ID), #undef DESCRIPTION #define DESCRIPTION \ /****************************************************************************** -* Set my AI List program counter to beginning of a List and execute +* Jump To Another AI List ******************************************************************************* - @return Continue execution from begginning of AI_LIST_ID - @param AI_LIST_ID: AI List to execute - @exception: AI_LIST_ID Must NOT be a BG List (10XX) +* @return None +* @param AI_LIST_ID: AI List to execute +* @exception: AI_LIST_ID Must NOT be a BG List (10XX) ******************************************************************************/ _AI_CMD_POLYMORPH(, @@ -491,11 +492,11 @@ _AI_CMD_POLYMORPH(, #undef DESCRIPTION #define DESCRIPTION \ /****************************************************************************** -* Set Bond's AI List program counter to beginning of a List +* Set Bond's Cinema AI List ******************************************************************************* - @param AI_LIST_ID: AI List for Bond to execute during cinema - @exception: AI_LIST_ID Must NOT be a BG List (10XX) - Only use when Bond has a 3rd person model (cutscenes) +* @param AI_LIST_ID: AI List for Bond to execute during cinema +* @exception: AI_LIST_ID Must NOT be a BG List (10XX) +* Only use when Bond has a 3rd person model (cutscenes) ******************************************************************************/ _AI_CMD_POLYMORPH(, @@ -505,13 +506,27 @@ _AI_CMD_POLYMORPH(, #undef DESCRIPTION #define DESCRIPTION \ -/****************************************************************************** +/****************************************************************************** +* Set my Clone's AI List +******************************************************************************* +* @param AI_LIST_ID: AI List for Bond to execute during cinema +* @exception: AI_LIST_ID Must NOT be a BG List (10XX) +******************************************************************************/ + +_AI_CMD_POLYMORPH(, + SetMyClonesAiList, + (CHR_CLONE, (!isBGAIListID(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_NOTCHR)), + (AI_LIST_ID)) + +#undef DESCRIPTION +#define DESCRIPTION \ +/****************************************************************************** * Call AI Subroutine with AI_LIST_ID and return (If subroutine allows) -******************************************************************************* - @return Restart execution on Return - @param AI_LIST_ID: AI List to execute (Must be a subroutine/have return) - @exception: AI_LIST_ID Must NOT be a BG List (10XX) - THIS must be defined for this function to be able to return +******************************************************************************* +* @return Restart Calling AI list on Return +* @param AI_LIST_ID: AI List to execute (Must be a subroutine/have return) +* @exception: AI_LIST_ID Must NOT be a BG List (10XX) +* "THIS" must be defined for this function to be able to return ******************************************************************************/ _AI_CMD_POLYMORPH(\ @@ -533,7 +548,7 @@ _AI_CMD_POLYMORPH(\ //============================================================================== -//## SET RETURN AI LIST +//## SET RETURN AI LIST //============================================================================== /* #define CMDNAME SET_RETURN_AI_LIST */ @@ -543,7 +558,7 @@ _AI_CMD_POLYMORPH(\ /******************************************************************************* * Set the Return AI List - used by aiReturn ******************************************************************************** -* @param AI_LIST_ID to be abale to return to +* @param AI_LIST_ID to be able to return to * @exception: Not recommended to set stored List to a BG List (10XX) *******************************************************************************/ @@ -581,7 +596,7 @@ _AI_CMD( //============================================================================== -//## JUMP TO RETURN AI LIST +//## JUMP TO RETURN AI LIST //============================================================================== /* #define CMDNAME JUMP_TO_RETURN_AI_LIST */ @@ -592,7 +607,7 @@ _AI_CMD( * Jump the return AI List set in chr struct - pointer set by SetReturnAiList * Used for subroutine Lists. ******************************************************************************** -* @return Continue execution from begginning of stored return list ID +* @return Continue execution from beginning of stored return list ID * @exception: If stored return List pointer is not set, game will crash *******************************************************************************/ @@ -629,7 +644,7 @@ _AI_CMD( //============================================================================== -//## GUARD ANIMATION STOP +//## GUARD ANIMATION STOP //============================================================================== /* #define CMDNAME GUARD_ANIMATION_STOP */ @@ -637,7 +652,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Imediatly Reset me back to idle pose +* Immediately Reset me back to idle pose *******************************************************************************/ #define PARAMS /*NONE*/ @@ -661,7 +676,7 @@ _AI_CMD( //============================================================================== -//## GUARD KNEEL +//## GUARD KNEEL //============================================================================== /* #define CMDNAME GUARD_KNEEL */ @@ -693,7 +708,7 @@ _AI_CMD( //============================================================================== -//## PLAY ANIMATION +//## PLAY ANIMATION //============================================================================== /* #define CMDNAME GUARD_PLAY_ANIMATION */ @@ -707,7 +722,7 @@ _AI_CMD( * @param INTERPOL_TIME: will set how long it will take to transition * from the previous state. * @param ANIMATION_ID: Use ANIM_# enum -* @param BITFIELD: Use ANIM_# Bitflags +* @param BITFIELD: Use ANIM_# Bit flags * @exception: If interpolation time is too low it may crash! - use 16 if unsure. * Start/End Keyframe 30 tick units. * Interpolation use 60 tick units. @@ -736,7 +751,7 @@ _AI_CMD( } else if (AircraftEntityp) { - zero = 0; + zero = 0; modelSetAnimation(AircraftEntityp->model, animation_table_ptrs2[anim_id], zero, startframe, 0.5f, (s32)ai->val[7]); if (endframe >= 0) { @@ -772,7 +787,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD PLAYING ANIMATION +//## IF GUARD PLAYING ANIMATION //============================================================================== /* #define CMDNAME IF_GUARD_PLAYING_ANIMATION */ @@ -813,7 +828,7 @@ _AI_CMD( //============================================================================== -//## GUARD POINTS AT BOND +//## GUARD POINTS AT BOND //============================================================================== /* #define CMDNAME GUARD_POINTS_AT_BOND */ @@ -825,7 +840,7 @@ _AI_CMD( * ignored ******************************************************************************** * @exception: Global AI List GAILIST_ATTACK_BOND skips this command -* if bitfield flag FLAGS2_DONT_POINT_AT_BOND is on +* if bit field flag FLAGS2_DONT_POINT_AT_BOND is on *******************************************************************************/ #define PARAMS /*NONE*/ @@ -849,7 +864,7 @@ _AI_CMD( //============================================================================== -//## GUARD LOOKS AROUND SELF +//## GUARD LOOKS AROUND SELF //============================================================================== /* #define CMDNAME GUARD_LOOKS_AROUND_SELF */ @@ -881,7 +896,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY SIDESTEPPING +//## GUARD TRY SIDESTEPPING //============================================================================== /* #define CMDNAME GUARD_TRY_SIDESTEPPING */ @@ -923,7 +938,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY HOPPING SIDEWAYS +//## GUARD TRY HOPPING SIDEWAYS //============================================================================== /* #define CMDNAME GUARD_TRY_HOPPING_SIDEWAYS */ @@ -965,7 +980,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY RUNNING TO SIDE +//## GUARD TRY RUNNING TO SIDE //============================================================================== /* #define CMDNAME GUARD_TRY_RUNNING_TO_SIDE */ @@ -1007,7 +1022,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY FIRING WALK +//## GUARD TRY FIRING WALK //============================================================================== /* #define CMDNAME GUARD_TRY_FIRING_WALK */ @@ -1049,7 +1064,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY FIRING RUN +//## GUARD TRY FIRING RUN //============================================================================== /* #define CMDNAME GUARD_TRY_FIRING_RUN */ @@ -1091,7 +1106,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY FIRING ROLL +//## GUARD TRY FIRING ROLL //============================================================================== /* #define CMDNAME GUARD_TRY_FIRING_ROLL */ @@ -1133,7 +1148,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY FIRE OR AIM AT TARGET +//## GUARD TRY FIRE OR AIM AT TARGET //============================================================================== /* #define CMDNAME GUARD_TRY_FIRE_OR_AIM_AT_TARGET */ @@ -1147,7 +1162,7 @@ _AI_CMD( * @param TARGET: 16bit ID * @param BITFIELD: 16bit Target Type * @exception: Use TARGET_# flags to set the target type (pad/Bond/chr) or use -* Seperated commands eg GUARD_TRYFIRE_AT_PAD +* Separated commands e.g. GUARD_TRYFIRE_AT_PAD *******************************************************************************/ #define PARAMS DBYTE(BITFIELD), DBYTE(TARGET), BYTE(GOTOLABEL) @@ -1167,7 +1182,7 @@ _AI_CMD( } break; }) - + //POLYMORPHS #undef DESCRIPTION @@ -1206,7 +1221,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD TRY FIRE OR AIM AT TARGET KNEEL +//## GUARD TRY FIRE OR AIM AT TARGET KNEEL //============================================================================== /* #define CMDNAME GUARD_TRY_FIRE_OR_AIM_AT_TARGET_KNEEL */ @@ -1241,7 +1256,7 @@ _AI_CMD( }) //POLYMORPHS - + #undef DESCRIPTION #define DESCRIPTION \ /******************************************************************************* @@ -1278,7 +1293,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD TRY FIRE OR AIM AT TARGET UPDATE +//## GUARD TRY FIRE OR AIM AT TARGET UPDATE //============================================================================== /* #define CMDNAME GUARD_TRY_FIRE_OR_AIM_AT_TARGET_UPDATE */ @@ -1351,7 +1366,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD TRY FACING TARGET +//## GUARD TRY FACING TARGET //============================================================================== /* #define CMDNAME GUARD_TRY_FACING_TARGET */ @@ -1409,7 +1424,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## CHR HIT BODY PART WITH ITEM DAMAGE +//## CHR HIT BODY PART WITH ITEM DAMAGE //============================================================================== /* #define CMDNAME CHR_HIT_BODY_PART_WITH_ITEM_DAMAGE */ @@ -1419,7 +1434,7 @@ _AI_CMD_POLYMORPH(, /******************************************************************************* * Hit Chr body part with item damage, play reaction to hit location ******************************************************************************** -* @exception: Does NOT trigger items fireing sfx. +* @exception: Does NOT trigger items firing sfx. * @param ITEM_NUM: Item damage uses body part damage modifier. * @param PART_NUM: Use HIT_# define for hit part number * @param CHR_NUM: ID of Chr (0-255) @@ -1457,7 +1472,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## CHR HIT CHR BODY PART WITH HELD ITEM +//## CHR HIT CHR BODY PART WITH HELD ITEM //============================================================================== /* #define CMDNAME CHR_HIT_CHR_BODY_PART_WITH_HELD_ITEM */ @@ -1467,7 +1482,7 @@ _AI_CMD_POLYMORPH(, /******************************************************************************* * Chr hits Target chrs body part with held item, play reaction to hit location ******************************************************************************** -* @exception: Does NOT trigger items fireing sfx or Chr's firing animation +* @exception: Does NOT trigger items firing sfx or Chr's firing animation * @param ITEM_NUM: Item damage uses body part damage modifier. * @param PART_NUM: Use HIT_# define for hit part number * @param CHR_NUM: ID of Chr (0-255) @@ -1507,7 +1522,7 @@ _AI_CMD( }) //POLYMORPHS - + _AI_CMD_POLYMORPH(, ChrHitMe, (CHR_NUM, CHR_SELF, PART_NUM), @@ -1527,7 +1542,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD TRY THROWING GRENADE +//## GUARD TRY THROWING GRENADE //============================================================================== /* #define CMDNAME GUARD_TRY_THROWING_GRENADE */ @@ -1539,7 +1554,7 @@ _AI_CMD_POLYMORPH(, ******************************************************************************** * @return Continue execution from LABEL if successful * @exception: A random number is generated and compared against chr->grenadeprob, -* if number is less than grenadeprob throw grenade and Goto LABEL, +* if number is less than grenadeprob throw grenade and Go to LABEL, * else do nothing. * Chr->grenadeprob default is 0 - to change use setup * object 12 or GUARD_SET_GRENADE_PROBABILITY @@ -1573,7 +1588,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY DROPPING ITEM +//## GUARD TRY DROPPING ITEM //============================================================================== /* #define CMDNAME GUARD_TRY_DROPPING_ITEM */ @@ -1619,7 +1634,7 @@ _AI_CMD( //============================================================================== -//## GUARD RUNS TO PAD +//## GUARD RUNS TO PAD //============================================================================== /* #define CMDNAME GUARD_RUNS_TO_PAD */ @@ -1655,7 +1670,7 @@ _AI_CMD( //============================================================================== -//## GUARD RUNS TO PAD PRESET +//## GUARD RUNS TO PAD PRESET //============================================================================== /* #define CMDNAME GUARD_RUNS_TO_PAD_PRESET */ @@ -1669,7 +1684,7 @@ _AI_CMD( #define PARAMS /*NONE*/ /* PD uses GoTo Pad (speed) which seems better -switch (ai->val[0]) +switch (AI->val[0]) { case SPEED_WALK: chrGoToPad(ChrEntityp, ChrEntityp->padpreset1, SPEED_WALK); @@ -1696,7 +1711,7 @@ _AI_CMD( //============================================================================== -//## GUARD WALKS TO PAD +//## GUARD WALKS TO PAD //============================================================================== /* #define CMDNAME GUARD_WALKS_TO_PAD */ @@ -1732,7 +1747,7 @@ _AI_CMD( //============================================================================== -//## GUARD SPRINTS TO PAD +//## GUARD SPRINTS TO PAD //============================================================================== /* #define CMDNAME GUARD_SPRINTS_TO_PAD */ @@ -1740,7 +1755,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Makes me Sprint to pad - dont ask me to do this too long +* Makes me Sprint to pad - don't ask me to do this too long ******************************************************************************** * @param 16bit PAD ID *******************************************************************************/ @@ -1768,7 +1783,7 @@ _AI_CMD( //============================================================================== -//## GUARD START PATROL +//## GUARD START PATROL //============================================================================== /* #define CMDNAME GUARD_START_PATROL */ @@ -1805,7 +1820,7 @@ _AI_CMD( //============================================================================== -//## GUARD SURRENDERS +//## GUARD SURRENDERS //============================================================================== /* #define CMDNAME GUARD_SURRENDERS */ @@ -1839,7 +1854,7 @@ _AI_CMD( //============================================================================== -//## GUARD REMOVE FADE +//## GUARD REMOVE FADE //============================================================================== /* #define CMDNAME GUARD_REMOVE_FADE */ @@ -1875,7 +1890,7 @@ _AI_CMD( //============================================================================== -//## CHR REMOVE INSTANT +//## CHR REMOVE INSTANT //============================================================================== /* #define CMDNAME CHR_REMOVE_INSTANT */ @@ -1905,7 +1920,7 @@ _AI_CMD( //POLYMORPHS -#undef DESCRIPTION +#undef DESCRIPTION #define DESCRIPTION \ /******************************************************************************* * Instantly remove me unlike RemoveMe @@ -1928,7 +1943,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD TRY TRIGGERING ALARM AT PAD +//## GUARD TRY TRIGGERING ALARM AT PAD //============================================================================== /* #define CMDNAME GUARD_TRY_TRIGGERING_ALARM_AT_PAD */ @@ -1975,7 +1990,7 @@ _AI_CMD( //============================================================================== -//## ALARM ON +//## ALARM ON //============================================================================== /* #define CMDNAME ALARM_ON */ @@ -2005,7 +2020,7 @@ _AI_CMD( //============================================================================== -//## ALARM OFF +//## ALARM OFF //============================================================================== /* #define CMDNAME ALARM_OFF */ @@ -2035,7 +2050,7 @@ _AI_CMD( //============================================================================== -//## REMOVED COMMAND27 +//## REMOVED COMMAND27 //============================================================================== /* #define CMDNAME REMOVED_COMMAND27 */ @@ -2074,7 +2089,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY RUNNING TO BOND POSITION +//## GUARD TRY RUNNING TO BOND POSITION //============================================================================== /* #define CMDNAME GUARD_TRY_RUNNING_TO_BOND_POSITION */ @@ -2117,7 +2132,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY WALKING TO BOND POSITION +//## GUARD TRY WALKING TO BOND POSITION //============================================================================== /* #define CMDNAME GUARD_TRY_WALKING_TO_BOND_POSITION */ @@ -2160,7 +2175,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY SPRINTNING TO BOND POSITION +//## GUARD TRY SPRINTNING TO BOND POSITION //============================================================================== /* #define CMDNAME GUARD_TRY_SPRINTNING_TO_BOND_POSITION */ @@ -2203,7 +2218,7 @@ _AI_CMD( //============================================================================== -//## REMOVED COMMAND2B +//## REMOVED COMMAND2B //============================================================================== /* #define CMDNAME REMOVED_COMMAND2B */ @@ -2244,7 +2259,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY RUNNING TO CHR POSITION +//## GUARD TRY RUNNING TO CHR POSITION //============================================================================== /* #define CMDNAME GUARD_TRY_RUNNING_TO_CHR_POSITION */ @@ -2277,7 +2292,7 @@ _AI_CMD( }) //POLYMORPHS - + _AI_CMD_POLYMORPH(, TRYRunToPresetChr, (CHR_PRESET, GOTOLABEL), @@ -2293,7 +2308,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD TRY WALKING TO CHR POSITION +//## GUARD TRY WALKING TO CHR POSITION //============================================================================== /* #define CMDNAME GUARD_TRY_WALKING_TO_CHR_POSITION */ @@ -2342,7 +2357,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD TRY SPRINTNING TO CHR POSITION +//## GUARD TRY SPRINTNING TO CHR POSITION //============================================================================== /* #define CMDNAME GUARD_TRY_SPRINTNING_TO_CHR_POSITION */ @@ -2392,7 +2407,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD HAS STOPPED MOVING +//## IF GUARD HAS STOPPED MOVING //============================================================================== /* #define CMDNAME IF_GUARD_HAS_STOPPED_MOVING */ @@ -2435,7 +2450,7 @@ _AI_CMD( //============================================================================== -//## IF CHR DYING OR DEAD +//## IF CHR DYING OR DEAD //============================================================================== /* #define CMDNAME IF_CHR_DYING_OR_DEAD */ @@ -2467,7 +2482,7 @@ _AI_CMD( }) //POLYMORPHS - + _AI_CMD_POLYMORPH(, IFImDyingOrDead, (CHR_SELF, GOTOLABEL), @@ -2483,7 +2498,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF CHR DOES NOT EXIST +//## IF CHR DOES NOT EXIST //============================================================================== /* #define CMDNAME IF_CHR_DOES_NOT_EXIST */ @@ -2495,7 +2510,7 @@ _AI_CMD_POLYMORPH(, ******************************************************************************** * @param CHR_NUM: ID of Chr (0-255) * @return Continue execution from LABEL if TRUE -* @exception: This command is used to check if chr has finished dying animation +* @exception: This command is used to check if chr has finished dying animation * and faded away, or chr num is free *******************************************************************************/ @@ -2538,7 +2553,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD SEES BOND +//## IF GUARD SEES BOND //============================================================================== /* #define CMDNAME IF_GUARD_SEES_BOND */ @@ -2553,8 +2568,8 @@ _AI_CMD_POLYMORPH(, * spotted, check if Bond and guard are within line of sight * (ignores facing direction). * injured guards will also set spotted Bond state (won't work with -* invincible/armored guards). -* If Bond breaks line of sight, do not Goto LABEL. If Bond has broken +* invincible/armoured guards). +* If Bond breaks line of sight, do not Go to LABEL. If Bond has broken * line of sight for more than 10 seconds, reset spotted bond state. * When using with IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS, make * sure IF_GUARD_SEES_BOND takes priority over @@ -2589,7 +2604,7 @@ _AI_CMD( //============================================================================== -//## RANDOM GENERATE SEED +//## RANDOM GENERATE SEED //============================================================================== /* #define CMDNAME RANDOM_GENERATE_SEED */ @@ -2623,7 +2638,7 @@ _AI_CMD( //============================================================================== -//## IF RANDOM SEED LESS THAN +//## IF RANDOM SEED LESS THAN //============================================================================== /* #define CMDNAME IF_RANDOM_SEED_LESS_THAN */ @@ -2672,7 +2687,7 @@ _AI_CMD_POLYMORPH(SetNewRandom(), //============================================================================== -//## IF RANDOM SEED GREATER THAN +//## IF RANDOM SEED GREATER THAN //============================================================================== /* #define CMDNAME IF_RANDOM_SEED_GREATER_THAN */ @@ -2722,7 +2737,7 @@ _AI_CMD_POLYMORPH(SetNewRandom(), //============================================================================== -//## IF ALARM IS ON UNUSED +//## IF ALARM IS ON UNUSED //============================================================================== /* #define CMDNAME IF_ALARM_IS_ON_UNUSED */ @@ -2765,7 +2780,7 @@ _AI_CMD( //============================================================================== -//## IF ALARM IS ON +//## IF ALARM IS ON //============================================================================== /* #define CMDNAME IF_ALARM_IS_ON */ @@ -2806,7 +2821,7 @@ _AI_CMD( //============================================================================== -//## IF GAS IS LEAKING +//## IF GAS IS LEAKING //============================================================================== /* #define CMDNAME IF_GAS_IS_LEAKING */ @@ -2817,7 +2832,7 @@ _AI_CMD( * Is gas leaking? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @exception: Once gas leak event has started, always Goto LABEL +* @exception: Once gas leak event has started, always Go to LABEL *******************************************************************************/ #define PARAMS BYTE(GOTOLABEL) @@ -2848,7 +2863,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD HEARD BOND +//## IF GUARD HEARD BOND //============================================================================== /* #define CMDNAME IF_GUARD_HEARD_BOND */ @@ -2892,7 +2907,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD SEE ANOTHER GUARD SHOT +//## IF GUARD SEE ANOTHER GUARD SHOT //============================================================================== /* #define CMDNAME IF_GUARD_SEE_ANOTHER_GUARD_SHOT */ @@ -2903,7 +2918,7 @@ _AI_CMD( * Did I see another chr shot? (by anyone) ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @exception: Guard friendly fire (if flagged) will also trigger Goto LABEL. +* @exception: Guard friendly fire (if flagged) will also trigger Go to LABEL. * Checks if chr->chrseeshot is set to valid chrnum (not -1). * Does NOT work with shot invincible/armoured guards *******************************************************************************/ @@ -2936,7 +2951,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD SEE ANOTHER GUARD DIE +//## IF GUARD SEE ANOTHER GUARD DIE //============================================================================== /* #define CMDNAME IF_GUARD_SEE_ANOTHER_GUARD_DIE */ @@ -2947,7 +2962,7 @@ _AI_CMD( * Did I see another chr die? (for any reason) ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @exception: When a chr in sight switches to ACT_DIE/ACT_DEAD, Goto LABEL. +* @exception: When a chr in sight switches to ACT_DIE/ACT_DEAD, Go to LABEL. * Checks if chr->chrseedie is set to valid chrnum (not -1) *******************************************************************************/ @@ -2979,7 +2994,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD AND BOND WITHIN LINE OF SIGHT +//## IF GUARD AND BOND WITHIN LINE OF SIGHT //============================================================================== /* #define CMDNAME IF_GUARD_AND_BOND_WITHIN_LINE_OF_SIGHT */ @@ -2991,7 +3006,7 @@ _AI_CMD( ******************************************************************************** * @return Continue execution from LABEL if TRUE * @exception: Uses Stand Tiles & ignores facing direction of Bond/guard. -* If Prop/guard is in the way do not Goto LABEL. +* If Prop/guard is in the way do not Go to LABEL. * Does NOT use chr->visionrangefor line of sight check. * Use IFISeeBond to check using chr->visionrange and * IFImOnScreen to account for Bond's view @@ -3025,7 +3040,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD AND BOND WITHIN PARTIAL LINE OF SIGHT +//## IF GUARD AND BOND WITHIN PARTIAL LINE OF SIGHT //============================================================================== /* #define CMDNAME IF_GUARD_AND_BOND_WITHIN_PARTIAL_LINE_OF_SIGHT */ @@ -3036,7 +3051,7 @@ _AI_CMD( * If I looked at Bond, could I walk in a straight line to his Stan Tile? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @exception: Unused command, functions like above but only Goto LABEL if Bond is +* @exception: Unused command, functions like above but only Go to LABEL if Bond is * half occluded by Stand Tiles (Neither blocked or within full view) *******************************************************************************/ @@ -3068,7 +3083,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD WAS SHOT WITHIN LAST 10 SECS +//## IF GUARD WAS SHOT WITHIN LAST 10 SECS //============================================================================== /* #define CMDNAME IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS */ @@ -3116,7 +3131,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD HEARD BOND WITHIN LAST 10 SECS +//## IF GUARD HEARD BOND WITHIN LAST 10 SECS //============================================================================== /* #define CMDNAME IF_GUARD_HEARD_BOND_WITHIN_LAST_10_SECS */ @@ -3160,7 +3175,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD IN ROOM WITH CHR +//## IF GUARD IN ROOM WITH CHR //============================================================================== /* #define CMDNAME IF_GUARD_IN_ROOM_WITH_CHR */ @@ -3203,7 +3218,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD HAS NOT BEEN SEEN +//## IF GUARD HAS NOT BEEN SEEN //============================================================================== /* #define CMDNAME IF_GUARD_HAS_NOT_BEEN_SEEN */ @@ -3246,7 +3261,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD IS ON SCREEN +//## IF GUARD IS ON SCREEN //============================================================================== /* #define CMDNAME IF_GUARD_IS_ON_SCREEN */ @@ -3288,7 +3303,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD ROOM CONTAINING SELF IS ON SCREEN +//## IF GUARD ROOM CONTAINING SELF IS ON SCREEN //============================================================================== /* #define CMDNAME IF_GUARD_ROOM_CONTAINING_SELF_IS_ON_SCREEN */ @@ -3300,7 +3315,7 @@ _AI_CMD( ******************************************************************************** * @return Continue execution from LABEL if TRUE * @exception: Only checks if room is being rendered, not if Bond can see guard. -* To check if guard is being rendered use IF_GUARD_IS_ON_SCREEN +* To check if guard is being rendered use IF_GUARD_IS_ON_SCREEN * instead. *******************************************************************************/ @@ -3309,7 +3324,7 @@ _AI_CMD( _AI_CMD( { AIRecord *ai = AiListp + Offset; - if (getROOMID_Bitflags(getTileRoom(ChrEntityp->prop->stan))) + if (getROOMID_isRendered(getTileRoom(ChrEntityp->prop->stan))) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[0]); } @@ -3332,7 +3347,7 @@ _AI_CMD( //============================================================================== -//## IF ROOM CONTAINING PAD IS ON SCREEN +//## IF ROOM CONTAINING PAD IS ON SCREEN //============================================================================== /* #define CMDNAME IF_ROOM_CONTAINING_PAD_IS_ON_SCREEN */ @@ -3343,7 +3358,7 @@ _AI_CMD( * Is the room containing PAD being rendered on screen? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @exception: Only checks if room is being rendered, not if Bond can see inside +* @exception: Only checks if room is being rendered, not if Bond can see inside * room *******************************************************************************/ @@ -3376,7 +3391,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD IS TARGETED BY BOND +//## IF GUARD IS TARGETED BY BOND //============================================================================== /* #define CMDNAME IF_GUARD_IS_TARGETED_BY_BOND */ @@ -3387,7 +3402,7 @@ _AI_CMD( * Is Bond looking/aiming at me? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @exception: Also checks if player's crosshair is aiming at guard +* @exception: Also checks if player's cross-hair is aiming at guard *******************************************************************************/ #define PARAMS BYTE(GOTOLABEL) @@ -3418,7 +3433,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD SHOT FROM BOND MISSED +//## IF GUARD SHOT FROM BOND MISSED //============================================================================== /* #define CMDNAME IF_GUARD_SHOT_FROM_BOND_MISSED */ @@ -3429,7 +3444,7 @@ _AI_CMD( * Did Bond's shot miss/land near me? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @exception: Command will sometimes Goto LABEL if guard was shot - use +* @exception: Command will sometimes Go to LABEL if guard was shot - use * IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS instead to check if * guard was shot recently (more consistent) *******************************************************************************/ @@ -3462,7 +3477,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD COUNTER CLOCKWISE DIRECTION TO BOND LESS THAN +//## IF GUARD COUNTER CLOCKWISE DIRECTION TO BOND LESS THAN //============================================================================== /* #define CMDNAME IF_GUARD_COUNTER_CLOCKWISE_DIRECTION_TO_BOND_LESS_THAN */ @@ -3476,7 +3491,7 @@ _AI_CMD( ******************************************************************************** * @return Continue execution from LABEL if TRUE * @param ANGLE: 0 - 255 Unsigned Integer -* @exception: This is RAW byte command, use either Deg or Rad Varient +* @exception: This is RAW byte command, use either Deg or Rad Variant *******************************************************************************/ #define PARAMS BYTE(ANGLE), BYTE(GOTOLABEL) @@ -3544,7 +3559,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD COUNTER CLOCKWISE DIRECTION TO BOND GREATER THAN +//## IF GUARD COUNTER CLOCKWISE DIRECTION TO BOND GREATER THAN //============================================================================== /* #define CMDNAME IF_GUARD_COUNTER_CLOCKWISE_DIRECTION_TO_BOND_GREATER_THAN */ @@ -3556,7 +3571,7 @@ _AI_CMD_POLYMORPH(, ******************************************************************************** * @return Continue execution from LABEL if TRUE * @param ANGLE: 0 - 255 Unsigned Integer -* @exception: This is RAW byte command, use either Deg or Rad Varient +* @exception: This is RAW byte command, use either Deg or Rad Variant *******************************************************************************/ #define PARAMS BYTE(ANGLE), BYTE(GOTOLABEL) @@ -3623,7 +3638,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD COUNTER CLOCKWISE DIRECTION FROM BOND LESS THAN +//## IF GUARD COUNTER CLOCKWISE DIRECTION FROM BOND LESS THAN //============================================================================== /* #define CMDNAME IF_GUARD_COUNTER_CLOCKWISE_DIRECTION_FROM_BOND_LESS_THAN */ @@ -3635,7 +3650,7 @@ _AI_CMD_POLYMORPH(, ******************************************************************************** * @return Continue execution from LABEL if TRUE * @param ANGLE: 0 - 255 Unsigned Integer -* @exception: This is RAW byte command, use either Deg or Rad Varient +* @exception: This is RAW byte command, use either Deg or Rad Variant *******************************************************************************/ #define PARAMS BYTE(ANGLE), BYTE(GOTOLABEL) @@ -3701,7 +3716,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD COUNTER CLOCKWISE ANGLE FROM BOND GREATER THAN +//## IF GUARD COUNTER CLOCKWISE ANGLE FROM BOND GREATER THAN //============================================================================== /* #define CMDNAME IF_GUARD_COUNTER_CLOCKWISE_DIRECTION_FROM_BOND_GREATER_THAN */ @@ -3713,7 +3728,7 @@ _AI_CMD_POLYMORPH(, ******************************************************************************** * @return Continue execution from LABEL if TRUE * @param ANGLE: 0 - 255 Unsigned Integer -* @exception: This is RAW byte command, use either Deg or Rad Varient +* @exception: This is RAW byte command, use either Deg or Rad Variant *******************************************************************************/ #define PARAMS BYTE(ANGLE), BYTE(GOTOLABEL) @@ -3779,7 +3794,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD DISTANCE TO BOND LESS THAN +//## IF GUARD DISTANCE TO BOND LESS THAN //============================================================================== /* #define CMDNAME IF_GUARD_DISTANCE_TO_BOND_LESS_THAN */ @@ -3790,7 +3805,7 @@ _AI_CMD_POLYMORPH(, * Is my distance to Bond Less Than DISTANCE? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +* @param DISTANCE: Integer, scale is 10 units per meter (decimetre) *******************************************************************************/ #define PARAMS DBYTE(DISTANCE), BYTE(GOTOLABEL) @@ -3835,7 +3850,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD DISTANCE TO BOND GREATER THAN +//## IF GUARD DISTANCE TO BOND GREATER THAN //============================================================================== /* #define CMDNAME IF_GUARD_DISTANCE_TO_BOND_GREATER_THAN */ @@ -3846,7 +3861,7 @@ _AI_CMD_POLYMORPH(, * Is my distance to Bond Greater Than DISTANCE? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +* @param DISTANCE: Integer, scale is 10 units per meter (decimetre) *******************************************************************************/ #define PARAMS DBYTE(DISTANCE), BYTE(GOTOLABEL) @@ -3891,7 +3906,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF CHR DISTANCE TO PAD LESS THAN +//## IF CHR DISTANCE TO PAD LESS THAN //============================================================================== /* #define CMDNAME IF_CHR_DISTANCE_TO_PAD_LESS_THAN */ @@ -3902,7 +3917,7 @@ _AI_CMD_POLYMORPH(, * Is My/Chr distance to PAD Less Than DISTANCE? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +* @param DISTANCE: Integer, scale is 10 units per meter (decimetre) * @param CHR_NUM: ID of Chr (0-255) *******************************************************************************/ @@ -3961,7 +3976,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF CHR DISTANCE TO PAD GREATER THAN +//## IF CHR DISTANCE TO PAD GREATER THAN //============================================================================== /* #define CMDNAME IF_CHR_DISTANCE_TO_PAD_GREATER_THAN */ @@ -3972,7 +3987,7 @@ _AI_CMD_POLYMORPH(, * Is My/Chr distance to PAD Greater Than DISTANCE? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +* @param DISTANCE: Integer, scale is 10 units per meter (decimetre) * @param CHR_NUM: ID of Chr (0-255) *******************************************************************************/ @@ -4030,7 +4045,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD DISTANCE TO CHR LESS THAN +//## IF GUARD DISTANCE TO CHR LESS THAN //============================================================================== /* #define CMDNAME IF_GUARD_DISTANCE_TO_CHR_LESS_THAN */ @@ -4041,7 +4056,7 @@ _AI_CMD_POLYMORPH(, * Is my distance to CHR_NUM Less Than DISTANCE? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +* @param DISTANCE: Integer, scale is 10 units per meter (decimetre) * @param CHR_NUM: ID of Chr (0-255) *******************************************************************************/ @@ -4088,7 +4103,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD DISTANCE TO CHR GREATER THAN +//## IF GUARD DISTANCE TO CHR GREATER THAN //============================================================================== /* #define CMDNAME IF_GUARD_DISTANCE_TO_CHR_GREATER_THAN */ @@ -4099,7 +4114,7 @@ _AI_CMD_POLYMORPH(, * Is my distance to CHR_NUM Greater Than DISTANCE? ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +* @param DISTANCE: Integer, scale is 10 units per meter (decimetre) * @param CHR_NUM: ID of Chr (0-255) ********************************************************************************/ @@ -4146,7 +4161,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD TRY SETTING CHR PRESET TO GUARD WITHIN DISTANCE +//## GUARD TRY SETTING CHR PRESET TO GUARD WITHIN DISTANCE //============================================================================== /* #define CMDNAME GUARD_TRY_SETTING_CHR_PRESET_TO_GUARD_WITHIN_DISTANCE */ @@ -4206,7 +4221,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF BOND DISTANCE TO PAD LESS THAN +//## IF BOND DISTANCE TO PAD LESS THAN //============================================================================== /* #define CMDNAME IF_BOND_DISTANCE_TO_PAD_LESS_THAN */ @@ -4263,7 +4278,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF BOND DISTANCE TO PAD GREATER THAN +//## IF BOND DISTANCE TO PAD GREATER THAN //============================================================================== /* #define CMDNAME IF_BOND_DISTANCE_TO_PAD_GREATER_THAN */ @@ -4320,7 +4335,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF CHR IN ROOM WITH PAD +//## IF CHR IN ROOM WITH PAD //============================================================================== /* #define CMDNAME IF_CHR_IN_ROOM_WITH_PAD */ @@ -4375,7 +4390,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF BOND IN ROOM WITH PAD +//## IF BOND IN ROOM WITH PAD //============================================================================== /* #define CMDNAME IF_BOND_IN_ROOM_WITH_PAD */ @@ -4417,7 +4432,7 @@ _AI_CMD( //============================================================================== -//## IF BOND COLLECTED OBJECT +//## IF BOND COLLECTED OBJECT //============================================================================== /* #define CMDNAME IF_BOND_COLLECTED_OBJECT */ @@ -4459,24 +4474,23 @@ _AI_CMD( //============================================================================== -//## IF ITEM IS STATIONARY WITHIN LEVEL +//## IF KEY DROPPED //============================================================================== -/* #define CMDNAME IF_ITEM_IS_STATIONARY_WITHIN_LEVEL */ -#define CMDNAME IFItemIsStationaryWithinLevel +/* #define CMDNAME IF_KEY_DROPPED */ +#define CMDNAME IFKeyDropped #define DESCRIPTION \ /******************************************************************************* -* Is item, if it exists, stationary? (not moving/in mid-air) +* Is Key, if it exists, "Dropped"? (not moving/in mid-air) ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @exception: Used to check if Bond threw an item in level. Also checks if item -* was attached to an object (item is stationary within level). -* Make sure IF_ITEM_IS_ATTACHED_TO_OBJECT takes priority over -* IF_ITEM_IS_STATIONARY_WITHIN_LEVEL when using both commands +* @exception: Used to check if a Key with ID has been "Dropped" (RUNTIMEBITFLAG_DEPOSIT) +* Make sure IFItemIsAttachedToObject takes priority over +* IFKeyDropped when using both commands *******************************************************************************/ -#define PARAMS BYTE(ITEM_NUM), BYTE(GOTOLABEL) +#define PARAMS BYTE(KEY_ID), BYTE(GOTOLABEL) _AI_CMD( { @@ -4504,7 +4518,7 @@ _AI_CMD( //============================================================================== -//## IF ITEM IS ATTACHED TO OBJECT +//## IF ITEM IS ATTACHED TO OBJECT //============================================================================== /* #define CMDNAME IF_ITEM_IS_ATTACHED_TO_OBJECT */ @@ -4512,13 +4526,13 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Was ITEM_NUM thrown onto Tagged Object +* Was ITEM_NUM thrown onto Tagged Object ******************************************************************************** * @return Continue execution from LABEL if TRUE * @exception: Used to check if Bond threw an item onto a tagged object. -* If used with IFItemIsStationaryWithinLevel, make sure +* If used with IFKeyDropped, make sure * IFItemIsAttachedToObject take priority over -* IFItemIsStationaryWithinLevel +* IFKeyDropped *******************************************************************************/ #define PARAMS BYTE(ITEM_NUM), BYTE(OBJECT_TAG), BYTE(GOTOLABEL) @@ -4574,7 +4588,7 @@ _AI_CMD( //============================================================================== -//## IF BOND HAS ITEM EQUIPPED +//## IF BOND HAS ITEM EQUIPPED //============================================================================== /* #define CMDNAME IF_BOND_HAS_ITEM_EQUIPPED */ @@ -4615,7 +4629,7 @@ _AI_CMD( //============================================================================== -//## IF OBJECT EXISTS +//## IF OBJECT EXISTS //============================================================================== /* #define CMDNAME IF_OBJECT_EXISTS */ @@ -4657,7 +4671,7 @@ _AI_CMD( //============================================================================== -//## IF OBJECT NOT DESTROYED +//## IF OBJECT NOT DESTROYED //============================================================================== /* #define CMDNAME IF_OBJECT_NOT_DESTROYED */ @@ -4699,7 +4713,7 @@ _AI_CMD( //============================================================================== -//## IF OBJECT WAS ACTIVATED +//## IF OBJECT WAS ACTIVATED //============================================================================== /* #define CMDNAME IF_OBJECT_WAS_ACTIVATED */ @@ -4745,7 +4759,7 @@ _AI_CMD( //============================================================================== -//## IF BOND USED GADGET ON OBJECT +//## IF BOND USED GADGET ON OBJECT //============================================================================== /* #define CMDNAME IF_BOND_USED_GADGET_ON_OBJECT */ @@ -4794,7 +4808,7 @@ _AI_CMD( //============================================================================== -//## OBJECT ACTIVATE +//## OBJECT ACTIVATE //============================================================================== /* #define CMDNAME OBJECT_ACTIVATE */ @@ -4840,7 +4854,7 @@ _AI_CMD( //============================================================================== -//## DESTROY OBJECT +//## DESTROY OBJECT //============================================================================== // Canonical Name : destroyobj /* #define CMDNAME OBJECT_DESTROY */ @@ -4882,7 +4896,7 @@ _AI_CMD( //============================================================================== -//## OBJECT DROP FROM CHR +//## OBJECT DROP FROM CHR //============================================================================== /* #define CMDNAME OBJECT_DROP_FROM_CHR */ @@ -4923,7 +4937,7 @@ _AI_CMD( //============================================================================== -//## CHR DROP ALL CONCEALED ITEMS +//## CHR DROP ALL CONCEALED ITEMS //============================================================================== /* #define CMDNAME CHR_DROP_ALL_CONCEALED_ITEMS */ @@ -4971,7 +4985,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## CHR DROP ALL HELD ITEMS +//## CHR DROP ALL HELD ITEMS //============================================================================== /* #define CMDNAME CHR_DROP_ALL_HELD_ITEMS */ @@ -5027,7 +5041,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## BOND COLLECT OBJECT +//## BOND COLLECT OBJECT //============================================================================== /* #define CMDNAME BOND_COLLECT_OBJECT */ @@ -5065,7 +5079,7 @@ _AI_CMD( //============================================================================== -//## CHR EQUIP OBJECT +//## CHR EQUIP OBJECT //============================================================================== /* #define CMDNAME CHR_EQUIP_OBJECT */ @@ -5121,7 +5135,7 @@ _AI_CMD( //============================================================================== -//## Move Object (Canonical Name) +//## Move Object (Canonical Name) //============================================================================== //Canonical Name: MoveObj /* #define CMDNAME OBJECT_MOVE_TO_PAD */ @@ -5131,7 +5145,7 @@ _AI_CMD( /******************************************************************************* * Move object to PAD ******************************************************************************** -* @exception: If object is assigned to padextra type, then object scale will be +* @exception: If object is assigned to padextra type, then object scale will be * lost after moving to target pad. * Object will inherit rotation from target pad *******************************************************************************/ @@ -5177,7 +5191,7 @@ _AI_CMD( //============================================================================== -//## DOOR OPEN +//## DOOR OPEN //============================================================================== /* #define CMDNAME DOOR_OPEN */ @@ -5212,7 +5226,7 @@ _AI_CMD( //============================================================================== -//## DOOR CLOSE +//## DOOR CLOSE //============================================================================== /* #define CMDNAME DOOR_CLOSE */ @@ -5247,7 +5261,7 @@ _AI_CMD( //============================================================================== -//## IF DOOR STATE EQUAL +//## IF DOOR STATE EQUAL //============================================================================== /* #define CMDNAME IF_DOOR_STATE_EQUAL */ @@ -5255,7 +5269,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* If tagged door state matches any of bitfield +* If tagged door state matches any of bit field ******************************************************************************** * @return Continue execution from LABEL if TRUE * @exception: Use DOOR_STATE_# flags for door state argument. @@ -5304,7 +5318,7 @@ _AI_CMD( }) //POLYMORPHS - + #undef DESCRIPTION #define DESCRIPTION \ /******************************************************************************* @@ -5380,7 +5394,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF DOOR HAS BEEN OPENED BEFORE +//## IF DOOR HAS BEEN OPENED BEFORE //============================================================================== /* #define CMDNAME IF_DOOR_HAS_BEEN_OPENED_BEFORE */ @@ -5422,7 +5436,7 @@ _AI_CMD( //============================================================================== -//## DOOR SET LOCK +//## DOOR SET LOCK //============================================================================== /* #define CMDNAME DOOR_SET_LOCK */ @@ -5462,7 +5476,7 @@ _AI_CMD( //============================================================================== -//## DOOR UNSET LOCK +//## DOOR UNSET LOCK //============================================================================== /* #define CMDNAME DOOR_UNSET_LOCK */ @@ -5502,7 +5516,7 @@ _AI_CMD( //============================================================================== -//## IF DOOR LOCK EQUAL +//## IF DOOR LOCK EQUAL //============================================================================== /* #define CMDNAME IF_DOOR_LOCK_EQUAL */ @@ -5554,7 +5568,7 @@ _AI_CMD( //============================================================================== -//## IF OBJECTIVE NUM COMPLETE +//## IF OBJECTIVE NUM COMPLETE //============================================================================== /* #define CMDNAME IF_OBJECTIVE_NUM_COMPLETE */ @@ -5567,8 +5581,8 @@ _AI_CMD( * @return Continue execution from LABEL if TRUE * @exception: Ignores difficulty settings. * For example - if game on agent and player -* completes an unlisted 00 agent objective, checking that -* objective num will Goto LABEL +* completes an unlisted 00 agent objective, checking that +* objective num will Go to LABEL *******************************************************************************/ #define PARAMS BYTE(OBJ_NUM), BYTE(GOTOLABEL) @@ -5602,7 +5616,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY UNKNOWN6E +//## GUARD TRY UNKNOWN6E //============================================================================== /* #define CMDNAME GUARD_TRY_UNKNOWN6E */ @@ -5610,7 +5624,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Unknown command, Goto LABEL +* Unknown command, Go to LABEL ******************************************************************************** * @return Continue execution from LABEL if Successful * @exception: Sets chr->padpreset1 @@ -5648,7 +5662,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY UNKNOWN6F +//## GUARD TRY UNKNOWN6F //============================================================================== /* #define CMDNAME GUARD_TRY_UNKNOWN6F */ @@ -5694,7 +5708,7 @@ _AI_CMD( //============================================================================== -//## IF GAME DIFFICULTY LESS THAN +//## IF GAME DIFFICULTY LESS THAN //============================================================================== /* #define CMDNAME IF_GAME_DIFFICULTY_LESS_THAN */ @@ -5737,7 +5751,7 @@ _AI_CMD( //============================================================================== -//## IF GAME DIFFICULTY GREATER THAN +//## IF GAME DIFFICULTY GREATER THAN //============================================================================== /* #define CMDNAME IF_GAME_DIFFICULTY_GREATER_THAN */ @@ -5780,7 +5794,7 @@ _AI_CMD( //============================================================================== -//## IF MISSION TIME LESS THAN +//## IF MISSION TIME LESS THAN //============================================================================== /* #define CMDNAME IF_MISSION_TIME_LESS_THAN */ @@ -5821,7 +5835,7 @@ _AI_CMD( //============================================================================== -//## IF MISSION TIME GREATER THAN +//## IF MISSION TIME GREATER THAN //============================================================================== /* #define CMDNAME IF_MISSION_TIME_GREATER_THAN */ @@ -5862,7 +5876,7 @@ _AI_CMD( //============================================================================== -//## IF SYSTEM POWER TIME LESS THAN +//## IF SYSTEM POWER TIME LESS THAN //============================================================================== /* #define CMDNAME IF_SYSTEM_POWER_TIME_LESS_THAN */ @@ -5903,7 +5917,7 @@ _AI_CMD( //============================================================================== -//## IF SYSTEM POWER TIME GREATER THAN +//## IF SYSTEM POWER TIME GREATER THAN //============================================================================== /* #define CMDNAME IF_SYSTEM_POWER_TIME_GREATER_THAN */ @@ -5944,7 +5958,7 @@ _AI_CMD( //============================================================================== -//## IF LEVEL ID LESS THAN +//## IF LEVEL ID LESS THAN //============================================================================== /* #define CMDNAME IF_LEVEL_ID_LESS_THAN */ @@ -5984,7 +5998,7 @@ _AI_CMD( //============================================================================== -//## IF LEVEL ID GREATER THAN +//## IF LEVEL ID GREATER THAN //============================================================================== /* #define CMDNAME IF_LEVEL_ID_GREATER_THAN */ @@ -6024,7 +6038,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD HITS LESS THAN +//## IF GUARD HITS LESS THAN //============================================================================== /* #define CMDNAME IF_GUARD_HITS_LESS_THAN */ @@ -6065,7 +6079,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD HITS GREATER THAN +//## IF GUARD HITS GREATER THAN //============================================================================== /* #define CMDNAME IF_GUARD_HITS_GREATER_THAN */ @@ -6106,7 +6120,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD HITS MISSED LESS THAN +//## IF GUARD HITS MISSED LESS THAN //============================================================================== /* #define CMDNAME IF_GUARD_HITS_MISSED_LESS_THAN */ @@ -6146,7 +6160,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD HITS MISSED GREATER THAN +//## IF GUARD HITS MISSED GREATER THAN //============================================================================== /* #define CMDNAME IF_GUARD_HITS_MISSED_GREATER_THAN */ @@ -6186,7 +6200,7 @@ _AI_CMD( //============================================================================== -//## IF CHR HEALTH LESS THAN +//## IF CHR HEALTH LESS THAN //============================================================================== /* #define CMDNAME IF_CHR_HEALTH_LESS_THAN */ @@ -6199,7 +6213,7 @@ _AI_CMD( * @return Continue execution from LABEL if TRUE * @param CHR_NUM: ID of Chr (0-255) * @param HEALTH (Default = 40 (4.0f)) -* @exception: HEALTH is unsigned, converted to float and compares difference +* @exception: HEALTH is unsigned, converted to float and compares difference * between chr->maxdamage - chr->damage. * Armour is tested *******************************************************************************/ @@ -6246,7 +6260,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF CHR HEALTH GREATER THAN +//## IF CHR HEALTH GREATER THAN //============================================================================== /* #define CMDNAME IF_CHR_HEALTH_GREATER_THAN */ @@ -6259,7 +6273,7 @@ _AI_CMD_POLYMORPH(, * @return Continue execution from LABEL if TRUE * @param CHR_NUM: ID of Chr (0-255) * @param HEALTH (Default = 40 (4.0f)) -* @exception: HEALTH is unsigned, converted to float and compares difference +* @exception: HEALTH is unsigned, converted to float and compares difference * between chr->maxdamage - chr->damage. * Armour is tested *******************************************************************************/ @@ -6307,7 +6321,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF CHR WAS DAMAGED SINCE LAST CHECK +//## IF CHR WAS DAMAGED SINCE LAST CHECK //============================================================================== /* #define CMDNAME IF_CHR_WAS_DAMAGED_SINCE_LAST_CHECK */ @@ -6320,7 +6334,7 @@ _AI_CMD_POLYMORPH(, * @return Continue execution from LABEL if TRUE * @param CHR_NUM: ID of Chr (0-255) * @exception: Checks chr->chrflags if CHRFLAG_WAS_DAMAGED is set. -* If true, unset flag and Goto LABEL. +* If true, unset flag and Go to LABEL. * CHRFLAG_WAS_DAMAGED is set if guard took damage (not invincible) *******************************************************************************/ @@ -6359,7 +6373,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF BOND HEALTH LESS THAN +//## IF BOND HEALTH LESS THAN //============================================================================== /* #define CMDNAME IF_BOND_HEALTH_LESS_THAN */ @@ -6401,7 +6415,7 @@ _AI_CMD( //============================================================================== -//## IF BOND HEALTH GREATER THAN +//## IF BOND HEALTH GREATER THAN //============================================================================== /* #define CMDNAME IF_BOND_HEALTH_GREATER_THAN */ @@ -6443,7 +6457,7 @@ _AI_CMD( //============================================================================== -//## LOCAL BYTE 1 SET +//## LOCAL BYTE 1 SET //============================================================================== /* #define CMDNAME LOCAL_BYTE_1_SET */ @@ -6451,9 +6465,9 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Set My Morale +* Set My Morale ******************************************************************************** -* @param CHRBYTE is a value 0 - 255 +* @param CHRBYTE is a value 0 - 255 *******************************************************************************/ #define PARAMS BYTE(CHRBYTE) @@ -6476,7 +6490,7 @@ _AI_CMD( //============================================================================== -//## LOCAL BYTE 1 ADD +//## LOCAL BYTE 1 ADD //============================================================================== /* #define CMDNAME LOCAL_BYTE_1_ADD */ @@ -6517,7 +6531,7 @@ _AI_CMD( //============================================================================== -//## LOCAL BYTE 1 SUBTRACT +//## LOCAL BYTE 1 SUBTRACT //============================================================================== /* #define CMDNAME LOCAL_BYTE_1_SUBTRACT */ @@ -6558,7 +6572,7 @@ _AI_CMD( //============================================================================== -//## IF LOCAL BYTE 1 LESS THAN +//## IF LOCAL BYTE 1 LESS THAN //============================================================================== /* #define CMDNAME IF_LOCAL_BYTE_1_LESS_THAN */ @@ -6597,7 +6611,7 @@ _AI_CMD( //============================================================================== -//## IF LOCAL BYTE 1 LESS THAN RANDOM SEED +//## IF LOCAL BYTE 1 LESS THAN RANDOM SEED //============================================================================== /* #define CMDNAME IF_LOCAL_BYTE_1_LESS_THAN_RANDOM_SEED */ @@ -6636,7 +6650,7 @@ _AI_CMD( //============================================================================== -//## LOCAL BYTE 2 SET +//## LOCAL BYTE 2 SET //============================================================================== /* #define CMDNAME LOCAL_BYTE_2_SET */ @@ -6644,9 +6658,9 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Set My Morale +* Set My Morale ******************************************************************************** -* @param CHRBYTE is a value 0 - 255 +* @param CHRBYTE is a value 0 - 255 *******************************************************************************/ #define PARAMS BYTE(CHRBYTE) @@ -6669,7 +6683,7 @@ _AI_CMD( //============================================================================== -//## LOCAL BYTE 2 ADD +//## LOCAL BYTE 2 ADD //============================================================================== /* #define CMDNAME LOCAL_BYTE_2_ADD */ @@ -6710,7 +6724,7 @@ _AI_CMD( //============================================================================== -//## LOCAL BYTE 2 SUBTRACT +//## LOCAL BYTE 2 SUBTRACT //============================================================================== /* #define CMDNAME LOCAL_BYTE_2_SUBTRACT */ @@ -6751,7 +6765,7 @@ _AI_CMD( //============================================================================== -//## IF LOCAL BYTE 2 LESS THAN +//## IF LOCAL BYTE 2 LESS THAN //============================================================================== /* #define CMDNAME IF_LOCAL_BYTE_2_LESS_THAN */ @@ -6759,7 +6773,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* If My Alertness is Less Than +* If My Alertness is Less Than ******************************************************************************** * @return Continue execution from LABEL if TRUE *******************************************************************************/ @@ -6790,7 +6804,7 @@ _AI_CMD( //============================================================================== -//## IF LOCAL BYTE 2 LESS THAN RANDOM SEED +//## IF LOCAL BYTE 2 LESS THAN RANDOM SEED //============================================================================== /* #define CMDNAME IF_LOCAL_BYTE_2_LESS_THAN_RANDOM_SEED */ @@ -6829,7 +6843,7 @@ _AI_CMD( //============================================================================== -//## GUARD SET HEARING SCALE +//## GUARD SET HEARING SCALE //============================================================================== /* #define CMDNAME GUARD_SET_HEARING_SCALE */ @@ -6873,7 +6887,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD SET VISION RANGE +//## GUARD SET VISION RANGE //============================================================================== /* #define CMDNAME GUARD_SET_VISION_RANGE */ @@ -6909,7 +6923,7 @@ _AI_CMD( //============================================================================== -//## GUARD SET GRENADE PROBABILITY +//## GUARD SET GRENADE PROBABILITY //============================================================================== /* #define CMDNAME GUARD_SET_GRENADE_PROBABILITY */ @@ -6917,11 +6931,11 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Set My probability of lobbing a grenade - the higher the value, the +* Set My probability of lobbing a grenade - the higher the value, the * more likely I will throw one when asked (TRYThrowingGrenade). ******************************************************************************** * @exception: Sets to chr->grenadeprob - (Default = 0) -* The only way to make guards throw grenades is by using this +* The only way to make guards throw grenades is by using this * command or assigning setup object 0x12 to chr *******************************************************************************/ @@ -6945,7 +6959,7 @@ _AI_CMD( //============================================================================== -//## GUARD SET CHR NUM +//## GUARD SET CHR NUM //============================================================================== /* #define CMDNAME GUARD_SET_CHR_NUM */ @@ -6953,7 +6967,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Set My Chr Number, or ID, for calling me later. eg respawn or clone. +* Set My Chr Number, or ID, for calling me later. e.g. respawn or clone. ******************************************************************************** * @param CHR_NUM: Should be a unique Integer 0-240 *******************************************************************************/ @@ -6978,7 +6992,7 @@ _AI_CMD( //============================================================================== -//## GUARD SET HEALTH TOTAL +//## GUARD SET HEALTH TOTAL //============================================================================== /* #define CMDNAME GUARD_SET_HEALTH_TOTAL */ @@ -7023,7 +7037,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD SET ARMOUR +//## GUARD SET ARMOUR //============================================================================== /* #define CMDNAME GUARD_SET_ARMOUR */ @@ -7066,7 +7080,7 @@ _AI_CMD_POLYMORPH(, #undef DESCRIPTION #define DESCRIPTION \ /******************************************************************************* -* Remove All damage from me +* Remove All damage from me ******************************************************************************** * @return Continue execution from DONELABEL * @param LOOPLABEL: Private ID for internal loop @@ -7088,7 +7102,7 @@ _AI_CMD_POLYMORPH( \ //============================================================================== -//## GUARD SET SPEED RATING +//## GUARD SET SPEED RATING //============================================================================== /* #define CMDNAME GUARD_SET_SPEED_RATING */ @@ -7100,7 +7114,7 @@ _AI_CMD_POLYMORPH( \ ******************************************************************************** * @param SPEED_RATING: Signed* 0 - 100 (Default = 0) * @exception: Sets to chr->speedrating. -* Negative values will make guard animate slower - this affects +* Negative values will make guard animate slower - this affects * firing animations. * Does NOT use 007 reaction speed modifier. * Do NOT use values above 100 or below 0 or it may crash @@ -7130,7 +7144,7 @@ _AI_CMD( //============================================================================== -//## GUARD SET ARGH RATING +//## GUARD SET ARGH RATING //============================================================================== /* #define CMDNAME GUARD_SET_ARGH_RATING */ @@ -7140,10 +7154,10 @@ _AI_CMD( /******************************************************************************* * Set My argh rating - controls how quickly I recover from being shot. ******************************************************************************** -* @param ARGH_RATING Signed* 0-100 (Default = 0) (100 is almost no hit +* @param ARGH_RATING Signed* 0-100 (Default = 0) (100 is almost no hit * reaction) * @exception: Sets to chr->arghrating. -* Negative values will make guard animate slower - this affects +* Negative values will make guard animate slower - this affects * firing animations. * Does NOT use 007 reaction speed modifier * Do NOT use values above 100 or below 0 or it may crash @@ -7173,7 +7187,7 @@ _AI_CMD( //============================================================================== -//## GUARD SET ACCURACY RATING +//## GUARD SET ACCURACY RATING //============================================================================== /* #define CMDNAME GUARD_SET_ACCURACY_RATING */ @@ -7212,7 +7226,7 @@ _AI_CMD( //============================================================================== -//## GUARD FLAGS2 SET ON +//## GUARD FLAGS2 SET ON //============================================================================== /* #define CMDNAME GUARD_BITFIELD_SET_ON */ @@ -7257,7 +7271,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD FLAGS2 SET OFF +//## GUARD FLAGS2 SET OFF //============================================================================== /* #define CMDNAME GUARD_BITFIELD_SET_OFF */ @@ -7301,7 +7315,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD FLAGS2 IS SET ON +//## IF GUARD FLAGS2 IS SET ON //============================================================================== /* #define CMDNAME IF_GUARD_BITFIELD_IS_SET_ON */ @@ -7309,7 +7323,7 @@ _AI_CMD_POLYMORPH(, #define DESCRIPTION \ /******************************************************************************* -* If flags2 has BITS enabled +* If flags2 has BITS enabled ******************************************************************************** * @return Continue execution from LABEL if TRUE * @param BITS: Can be used to store a custom flag per chr, useful for missions. @@ -7352,7 +7366,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## CHR FLAGS2 SET ON +//## CHR FLAGS2 SET ON //============================================================================== /* #define CMDNAME CHR_BITFIELD_SET_ON */ @@ -7390,7 +7404,7 @@ _AI_CMD( //============================================================================== -//## CHR FLAGS2 SET OFF +//## CHR FLAGS2 SET OFF //============================================================================== /* #define CMDNAME CHR_BITFIELD_SET_OFF */ @@ -7398,7 +7412,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Unet flags2 for CHR_NUM +* Unset flags2 for CHR_NUM ******************************************************************************** * @param CHR_NUM: ID of Chr (0-240) * @param BITS: Can be used to store a custom flag per chr, useful for missions. @@ -7428,7 +7442,7 @@ _AI_CMD( //============================================================================== -//## IF CHR FLAGS2 IS SET ON +//## IF CHR FLAGS2 IS SET ON //============================================================================== /* #define CMDNAME IF_CHR_BITFIELD_IS_SET_ON */ @@ -7436,7 +7450,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* If flags2 has BITS enabled +* If flags2 has BITS enabled ******************************************************************************** * @return Continue execution from LABEL if TRUE * @param CHR_NUM: ID of Chr (0-240) @@ -7473,7 +7487,7 @@ _AI_CMD( //============================================================================== -//## OBJECTIVE BITFIELD SET ON +//## OBJECTIVE BITFIELD SET ON //============================================================================== /* #define CMDNAME OBJECTIVE_BITFIELD_SET_ON */ @@ -7481,15 +7495,15 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Set bits in objective bitfield +* Set bits in objective bit field ******************************************************************************** * @param BITFIELD: 32 bits * @exception: Can be used to store a mission unique objective flag, which can be * linked to mission objectives. * It can also be used to store miscellaneous flags used by other * AI Lists -* If a mission objective is changed while in third person, it will -* not be updated on the briefing page - all mission objectives +* If a mission objective is changed while in third person, it will +* not be updated on the briefing page - all mission objectives * status are locked while in third person *******************************************************************************/ @@ -7514,7 +7528,7 @@ _AI_CMD( //============================================================================== -//## OBJECTIVE BITFIELD SET OFF +//## OBJECTIVE BITFIELD SET OFF //============================================================================== /* #define CMDNAME OBJECTIVE_BITFIELD_SET_OFF */ @@ -7522,15 +7536,15 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Unset bits in objective bitfield +* Unset bits in objective bit field ******************************************************************************** * @param BITFIELD: 32 bits * @exception: Can be used to store a mission unique objective flag, which can be * linked to mission objectives. * It can also be used to store miscellaneous flags used by other * AI Lists -* If a mission objective is changed while in third person, it will -* not be updated on the briefing page - all mission objectives +* If a mission objective is changed while in third person, it will +* not be updated on the briefing page - all mission objectives * status are locked while in third person *******************************************************************************/ @@ -7555,7 +7569,7 @@ _AI_CMD( //============================================================================== -//## IF OBJECTIVE BITFIELD IS SET ON +//## IF OBJECTIVE BITFIELD IS SET ON //============================================================================== /* #define CMDNAME IF_OBJECTIVE_BITFIELD_IS_SET_ON */ @@ -7563,7 +7577,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* If ObjectiveBitfield has BITS enabled +* If ObjectiveBitfield has BITS enabled ******************************************************************************** * @return Continue execution from LABEL if TRUE *******************************************************************************/ @@ -7595,7 +7609,7 @@ _AI_CMD( //============================================================================== -//## GUARD FLAGS SET ON +//## GUARD FLAGS SET ON //============================================================================== /* #define CMDNAME GUARD_FLAGS_SET_ON */ @@ -7624,7 +7638,7 @@ _AI_CMD( }) //POLYMORPHS - + _AI_CMD_POLYMORPH(, SetBGchrflags, (CHRFLAGS), @@ -7639,7 +7653,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## GUARD FLAGS SET OFF +//## GUARD FLAGS SET OFF //============================================================================== /* #define CMDNAME GUARD_FLAGS_SET_OFF */ @@ -7684,7 +7698,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF GUARD FLAGS IS SET ON +//## IF GUARD FLAGS IS SET ON //============================================================================== /* #define CMDNAME IF_GUARD_FLAGS_IS_SET_ON */ @@ -7720,7 +7734,7 @@ _AI_CMD( }) //POLYMORPHS - + _AI_CMD_POLYMORPH(, IFBGchrflagsHas, (CHRFLAGS), @@ -7736,7 +7750,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## CHR FLAGS SET ON +//## CHR FLAGS SET ON //============================================================================== /* #define CMDNAME CHR_FLAGS_SET_ON */ @@ -7776,7 +7790,7 @@ _AI_CMD( //============================================================================== -//## CHR FLAGS SET OFF +//## CHR FLAGS SET OFF //============================================================================== /* #define CMDNAME CHR_FLAGS_SET_OFF */ @@ -7816,7 +7830,7 @@ _AI_CMD( //============================================================================== -//## IF CHR FLAGS IS SET ON +//## IF CHR FLAGS IS SET ON //============================================================================== /* #define CMDNAME IF_CHR_FLAGS_IS_SET_ON */ @@ -7860,7 +7874,7 @@ _AI_CMD( //============================================================================== -//## OBJECT FLAGS 1 SET ON +//## OBJECT FLAGS 1 SET ON //============================================================================== /* #define CMDNAME OBJECT_FLAGS_1_SET_ON */ @@ -7898,7 +7912,7 @@ _AI_CMD( //============================================================================== -//## OBJECT FLAGS 1 SET OFF +//## OBJECT FLAGS 1 SET OFF //============================================================================== /* #define CMDNAME OBJECT_FLAGS_1_SET_OFF */ @@ -7936,7 +7950,7 @@ _AI_CMD( //============================================================================== -//## IF OBJECT FLAGS 1 IS SET ON +//## IF OBJECT FLAGS 1 IS SET ON //============================================================================== /* #define CMDNAME IF_OBJECT_FLAGS_1_IS_SET_ON */ @@ -7978,7 +7992,7 @@ _AI_CMD( //============================================================================== -//## OBJECT FLAGS 2 SET ON +//## OBJECT FLAGS 2 SET ON //============================================================================== /* #define CMDNAME OBJECT_FLAGS_2_SET_ON */ @@ -8016,7 +8030,7 @@ _AI_CMD( //============================================================================== -//## OBJECT FLAGS 2 SET OFF +//## OBJECT FLAGS 2 SET OFF //============================================================================== /* #define CMDNAME OBJECT_FLAGS_2_SET_OFF */ @@ -8024,7 +8038,7 @@ _AI_CMD( #define DESCRIPTION \ /******************************************************************************* -* Unset object flags2 +* Unset object flags2 ******************************************************************************** * @param BITS: uses PROPFLAG2_# defines *******************************************************************************/ @@ -8054,7 +8068,7 @@ _AI_CMD( //============================================================================== -//## IF OBJECT FLAGS 2 IS SET ON +//## IF OBJECT FLAGS 2 IS SET ON //============================================================================== /* #define CMDNAME IF_OBJECT_FLAGS_2_IS_SET_ON */ @@ -8096,7 +8110,7 @@ _AI_CMD( //============================================================================== -//## GUARD SET CHR PRESET +//## GUARD SET CHR PRESET //============================================================================== /* #define CMDNAME GUARD_SET_CHR_PRESET */ @@ -8118,7 +8132,7 @@ _AI_CMD( }) //POLYMORPHS - + _AI_CMD_POLYMORPH(, SetBGChrPreset, (CHRFLAGS), @@ -8134,7 +8148,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## CHR SET CHR PRESET +//## CHR SET CHR PRESET //============================================================================== /* #define CMDNAME CHR_SET_CHR_PRESET */ @@ -8165,7 +8179,7 @@ _AI_CMD( //============================================================================== -//## GUARD SET PAD PRESET +//## GUARD SET PAD PRESET //============================================================================== /* #define CMDNAME GUARD_SET_PAD_PRESET */ @@ -8211,7 +8225,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## CHR SET PAD PRESET +//## CHR SET PAD PRESET //============================================================================== /* #define CMDNAME CHR_SET_PAD_PRESET */ @@ -8243,10 +8257,10 @@ _AI_CMD( //============================================================================== -//## Print (Canonical name) +//## Print (Canonical name) //============================================================================== -/* -pre-process comments into bytestrings +/* +pre-process comments into byte strings sed -e ':loop' -e 's/PRINT\("(..*?)(\\n|\s|\S)"/PRINT("$1",\'$2\'/g' -e 't loop' sed -e 's/PRINT\("(.)"(.*)\)/PRINT,\'$1\'$2,\'\0\',/g' */ @@ -8275,7 +8289,7 @@ _AI_DEBUG( //============================================================================== -//## LOCAL TIMER RESET START +//## LOCAL TIMER RESET START //============================================================================== /* #define CMDNAME LOCAL_TIMER_RESET_START */ @@ -8285,7 +8299,7 @@ _AI_DEBUG( /******************************************************************************* * Start My/BG timer from 0. Counts up 60 times a second. ******************************************************************************** -* @exception: Local timer is unique for each chr, while hud countdown is global +* @exception: Local timer is unique for each chr, while hud countdown is global * for the entire mission. *******************************************************************************/ @@ -8315,7 +8329,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## LOCAL TIMER RESET +//## LOCAL TIMER RESET //============================================================================== /* #define CMDNAME LOCAL_TIMER_RESET */ @@ -8325,7 +8339,7 @@ _AI_CMD_POLYMORPH(, /******************************************************************************* * Reset My/BG timer to 0. Does Not start or stop timer. ******************************************************************************** -* @exception: Local timer is unique for each chr, while hud countdown is global +* @exception: Local timer is unique for each chr, while hud countdown is global * for the entire mission. *******************************************************************************/ @@ -8355,7 +8369,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## LOCAL TIMER STOP +//## LOCAL TIMER STOP //============================================================================== /* #define CMDNAME LOCAL_TIMER_STOP */ @@ -8365,7 +8379,7 @@ _AI_CMD_POLYMORPH(, /******************************************************************************* * Pause My/BG timer. ******************************************************************************** -* @exception: Local timer is unique for each chr, while hud countdown is global +* @exception: Local timer is unique for each chr, while hud countdown is global * for the entire mission. *******************************************************************************/ @@ -8395,7 +8409,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## LOCAL TIMER START +//## LOCAL TIMER START //============================================================================== /* #define CMDNAME LOCAL_TIMER_START */ @@ -8405,7 +8419,7 @@ _AI_CMD_POLYMORPH(, /******************************************************************************* * Resume My/BG timer. If you want to Start from 0, use MyTimerStart() ******************************************************************************** -* @exception: Local timer is unique for each chr, while hud countdown is global +* @exception: Local timer is unique for each chr, while hud countdown is global * for the entire mission. *******************************************************************************/ @@ -8435,7 +8449,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF LOCAL TIMER HAS STOPPED +//## IF LOCAL TIMER HAS STOPPED //============================================================================== /* #define CMDNAME IF_LOCAL_TIMER_HAS_STOPPED */ @@ -8482,7 +8496,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF LOCAL TIMER LESS THAN +//## IF LOCAL TIMER LESS THAN //============================================================================== /* #define CMDNAME IF_LOCAL_TIMER_LESS_THAN */ @@ -8493,7 +8507,7 @@ _AI_CMD_POLYMORPH(, * If My/BG Timer is Less Than TICKS ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @param TICKS: Unsigned integer 1/60 or 1/50 Second +* @param TICKS: Unsigned integer 1/60 or 1/50 Second * @exception: TICKS is converted to float and compared. *******************************************************************************/ @@ -8549,7 +8563,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF LOCAL TIMER GREATER THAN +//## IF LOCAL TIMER GREATER THAN //============================================================================== /* #define CMDNAME IF_LOCAL_TIMER_GREATER_THAN */ @@ -8560,7 +8574,7 @@ _AI_CMD_POLYMORPH(, * If My/BG Timer is Greater Than TICKS ******************************************************************************** * @return Continue execution from LABEL if TRUE -* @param TICKS: Unsigned integer 1/60 or 1/50 Second +* @param TICKS: Unsigned integer 1/60 or 1/50 Second * @exception: TICKS is converted to float and compared. *******************************************************************************/ @@ -8614,7 +8628,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## HUD COUNTDOWN SHOW +//## HUD COUNTDOWN SHOW //============================================================================== /* #define CMDNAME HUD_COUNTDOWN_SHOW */ @@ -8644,7 +8658,7 @@ _AI_CMD( //============================================================================== -//## HUD COUNTDOWN HIDE +//## HUD COUNTDOWN HIDE //============================================================================== /* #define CMDNAME HUD_COUNTDOWN_HIDE */ @@ -8676,7 +8690,7 @@ _AI_CMD( //============================================================================== -//## HUD COUNTDOWN SET +//## HUD COUNTDOWN SET //============================================================================== /* #define CMDNAME HUD_COUNTDOWN_SET */ @@ -8710,7 +8724,7 @@ _AI_CMD( //============================================================================== -//## HUD COUNTDOWN STOP +//## HUD COUNTDOWN STOP //============================================================================== /* #define CMDNAME HUD_COUNTDOWN_STOP */ @@ -8740,7 +8754,7 @@ _AI_CMD( //============================================================================== -//## HUD COUNTDOWN START +//## HUD COUNTDOWN START //============================================================================== /* #define CMDNAME HUD_COUNTDOWN_START */ @@ -8770,7 +8784,7 @@ _AI_CMD( //============================================================================== -//## IF HUD COUNTDOWN HAS STOPPED +//## IF HUD COUNTDOWN HAS STOPPED //============================================================================== /* #define CMDNAME IF_HUD_COUNTDOWN_HAS_STOPPED */ @@ -8810,7 +8824,7 @@ _AI_CMD( //============================================================================== -//## IF HUD COUNTDOWN LESS THAN +//## IF HUD COUNTDOWN LESS THAN //============================================================================== /* #define CMDNAME IF_HUD_COUNTDOWN_LESS_THAN */ @@ -8852,7 +8866,7 @@ _AI_CMD( //============================================================================== -//## IF HUD COUNTDOWN GREATER THAN +//## IF HUD COUNTDOWN GREATER THAN //============================================================================== /* #define CMDNAME IF_HUD_COUNTDOWN_GREATER_THAN */ @@ -8894,7 +8908,7 @@ _AI_CMD( //============================================================================== -//## CHR TRY SPAWNING AT PAD +//## CHR TRY SPAWNING AT PAD //============================================================================== /* #define CMDNAME CHR_TRY_SPAWNING_AT_PAD */ @@ -8943,7 +8957,7 @@ _AI_CMD( //============================================================================== -//## CHR TRY SPAWNING NEXT TO UNSEEN CHR +//## CHR TRY SPAWNING NEXT TO UNSEEN CHR //============================================================================== /* #define CMDNAME CHR_TRY_SPAWNING_NEXT_TO_UNSEEN_CHR */ @@ -8991,7 +9005,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY SPAWNING ITEM +//## GUARD TRY SPAWNING ITEM //============================================================================== /* #define CMDNAME GUARD_TRY_SPAWNING_ITEM */ @@ -9003,11 +9017,11 @@ _AI_CMD( ******************************************************************************** * @return Continue execution from LABEL if Successful * @param PROPFLAG uses PROPFLAG defines - NOT PROPFLAG2! -* @param PROP_NUM: use PROP_xxx eg PROP_CHRWPPK for visible model -* @param ITEM_NUM: use ITEM_xxx eg ITEM_WPPK for item type +* @param PROP_NUM: use PROP_xxx e.g. PROP_CHRWPPK for visible model +* @param ITEM_NUM: use ITEM_xxx e.g. ITEM_WPPK for item type * @exception: If out of memory or hands occupied - Item can NOT spawn. -* Spawned Prop must have a holding position command within the -* model file, else use conceal flag so guard does not attempt to +* Spawned Prop must have a holding position command within the +* model file, else use conceal flag so guard does not attempt to * hold Prop *******************************************************************************/ @@ -9021,7 +9035,7 @@ _AI_CMD( PropRecord *prop = NULL; if (ChrEntityp && ChrEntityp->prop && ChrEntityp->model) { - /* more nice PD code that might be usefull in future + /* more nice PD code that might be useful in future if (cheatIsActive(CHEAT_MARQUIS)) { flags &= ~0x10000000; @@ -9094,7 +9108,7 @@ _AI_CMD( //============================================================================== -//## GUARD TRY SPAWNING HAT +//## GUARD TRY SPAWNING HAT //============================================================================== /* #define CMDNAME GUARD_TRY_SPAWNING_HAT */ @@ -9106,9 +9120,9 @@ _AI_CMD( ******************************************************************************** * @return Continue execution from LABEL if Successful * @param PROPFLAG uses PROPFLAG defines - NOT PROPFLAG2! -* @param PROP_NUM: use PROP_xxx eg PROP_CHRWPPK for visible model +* @param PROP_NUM: use PROP_xxx e.g. PROP_CHRWPPK for visible model * @exception: If out of memory or already have hat - Item can NOT spawn. -* Spawned Prop must have a holding position command within the +* Spawned Prop must have a holding position command within the * model file. *******************************************************************************/ @@ -9145,7 +9159,7 @@ _AI_CMD( //============================================================================== -//## CHR TRY SPAWNING CLONE +//## CHR TRY SPAWNING CLONE //============================================================================== /* #define CMDNAME CHR_TRY_SPAWNING_CLONE */ @@ -9157,7 +9171,7 @@ _AI_CMD( ******************************************************************************** * @return Continue execution from LABEL if Successful * @param AI_LIST_ID Assign this 16bit AI_LIST ID to Clone -* @exception: Clone flag is stored in chr->chrflags which is assigned at setup +* @exception: Clone flag is stored in chr->chrflags which is assigned at setup * Newly spawned clone is placed in front of original chr *******************************************************************************/ @@ -9252,7 +9266,7 @@ _AI_CMD( ******************************************************************************** * @return Continue execution from LABEL if Successful * @param AI_LIST_ID Assign this 16bit AI_LIST ID to Clone -* @exception: Clone flag is stored in chr->chrflags which is assigned at setup +* @exception: Clone flag is stored in chr->chrflags which is assigned at setup * Newly spawned clone is placed in front of original chr *******************************************************************************/ @@ -9271,7 +9285,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## TEXT PRINT BOTTOM +//## TEXT PRINT BOTTOM //============================================================================== /* #define CMDNAME TEXT_PRINT_BOTTOM */ @@ -9279,9 +9293,9 @@ _AI_CMD_POLYMORPH(, #define DESCRIPTION \ /******************************************************************************* -* Print text slot to bottom left part of screen (where pickup text is located) +* Print text slot to bottom left part of screen (where pick-up text is located) ******************************************************************************** -* @exception: If text slot is not currently allocated in memory, game will softlock. +* @exception: If text slot is not currently allocated in memory, game will soft-lock. * Expects string to end with '\n' (LF) character *******************************************************************************/ @@ -9306,7 +9320,7 @@ _AI_CMD( //============================================================================== -//## TEXT PRINT TOP +//## TEXT PRINT TOP //============================================================================== /* #define CMDNAME TEXT_PRINT_TOP */ @@ -9316,7 +9330,7 @@ _AI_CMD( /******************************************************************************* * Print text slot to top part of screen ******************************************************************************** -* @exception: If text slot is not currently allocated in memory, game will softlock. +* @exception: If text slot is not currently allocated in memory, game will soft-lock. * Expects string to end with '\n' (LF) character *******************************************************************************/ @@ -9348,7 +9362,7 @@ _AI_CMD( //============================================================================== -//## SFX PLAY +//## SFX PLAY //============================================================================== /* #define CMDNAME SFX_PLAY */ @@ -9401,7 +9415,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## SFX EMIT FROM OBJECT +//## SFX EMIT FROM OBJECT //============================================================================== /* #define CMDNAME SFX_EMIT_FROM_OBJECT */ @@ -9452,7 +9466,7 @@ _AI_CMD( //============================================================================== -//## SFX EMIT FROM PAD +//## SFX EMIT FROM PAD //============================================================================== /* #define CMDNAME SFX_EMIT_FROM_PAD */ @@ -9512,7 +9526,7 @@ _AI_CMD( //============================================================================== -//## SFX SET CHANNEL VOLUME +//## SFX SET CHANNEL VOLUME //============================================================================== /* #define CMDNAME SFX_SET_CHANNEL_VOLUME */ @@ -9565,7 +9579,7 @@ _AI_CMD( //============================================================================== -//## SFX FADE CHANNEL VOLUME +//## SFX FADE CHANNEL VOLUME //============================================================================== /* #define CMDNAME SFX_FADE_CHANNEL_VOLUME */ @@ -9618,7 +9632,7 @@ _AI_CMD( //============================================================================== -//## SFX STOP CHANNEL +//## SFX STOP CHANNEL //============================================================================== /* #define CMDNAME SFX_STOP_CHANNEL */ @@ -9638,7 +9652,7 @@ _AI_CMD( Offset += CAT(CAT(AI_, CMDNAME), _LENGTH); break; }) - + #undef PARAMS #undef CMDNAME #undef DESCRIPTION @@ -9649,7 +9663,7 @@ _AI_CMD( //============================================================================== -//## IF SFX CHANNEL VOLUME LESS THAN +//## IF SFX CHANNEL VOLUME LESS THAN //============================================================================== /* #define CMDNAME IF_SFX_CHANNEL_VOLUME_LESS_THAN */ @@ -9661,7 +9675,7 @@ _AI_CMD( ******************************************************************************** * @return Continue execution from LABEL if TRUE * @param VOLUME signed range 0 - 100% (0x0000-0x7FFF) -* @exception: If sfx channel is free (no audio playing), Goto LABEL. +* @exception: If sfx channel is free (no audio playing), Go to LABEL. * VOLUME can NOT be negative *******************************************************************************/ @@ -9704,7 +9718,7 @@ _AI_CMD( //============================================================================== //============================================================================== -//## VEHICLE START PATH +//## VEHICLE START PATH //============================================================================== /* #define CMDNAME VEHICLE_START_PATH */ @@ -9740,7 +9754,7 @@ _AI_CMD( //============================================================================== -//## VEHICLE SPEED +//## VEHICLE SPEED //============================================================================== /* #define CMDNAME VEHICLE_SPEED */ @@ -9796,7 +9810,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## AIRCRAFT ROTOR SPEED +//## AIRCRAFT ROTOR SPEED //============================================================================== /* #define CMDNAME AIRCRAFT_ROTOR_SPEED */ @@ -9804,7 +9818,7 @@ _AI_CMD_POLYMORPH(, #define DESCRIPTION \ /******************************************************************************* -* Sets aircrafts rotor speed +* Sets aircraft's rotor speed ******************************************************************************** * @param ROTOR_SPEED Unsigned Revolutions Per Minute (RPM) * ACCELERATION_TIME60 is number of game ticks to reach top speed @@ -9847,7 +9861,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF CAMERA IS IN INTRO +//## IF CAMERA IS IN INTRO //============================================================================== /* #define CMDNAME IF_CAMERA_IS_IN_INTRO */ @@ -9887,7 +9901,7 @@ _AI_CMD( //============================================================================== -//## IF CAMERA IS IN BOND SWIRL +//## IF CAMERA IS IN BOND SWIRL //============================================================================== /* #define CMDNAME IF_CAMERA_IS_IN_BOND_SWIRL */ @@ -9927,7 +9941,7 @@ _AI_CMD( //============================================================================== -//## TV CHANGE SCREEN BANK +//## TV CHANGE SCREEN BANK //============================================================================== /* #define CMDNAME TV_CHANGE_SCREEN_BANK */ @@ -9978,7 +9992,7 @@ _AI_CMD( //============================================================================== -//## IF BOND IN TANK +//## IF BOND IN TANK //============================================================================== /* #define CMDNAME IF_BOND_IN_TANK */ @@ -10017,7 +10031,7 @@ _AI_CMD( //============================================================================== -//## END LEVEL +//## END LEVEL //============================================================================== /* #define CMDNAME EXIT_LEVEL */ @@ -10037,11 +10051,11 @@ _AI_CMD( _AI_CMD( { - if (camera_8003642C) + if (cameraBufferToggle) { - if (camera_80036434 == FALSE) + if (cameraFrameCounter2 == FALSE) { - camera_80036434 = TRUE; + cameraFrameCounter2 = TRUE; } } else @@ -10068,26 +10082,26 @@ _AI_CMD( /******************************************************************************* * Prepare to Transition to bond from Camera *******************************************************************************/ -DEFINE(CameraTransitionToBond() +DEFINE(CameraTransitionToBond() Yield() Yield() Yield()) - + /******************************************************************************* * Prepare to Transition from bond to Camera *******************************************************************************/ -DEFINE(CameraTransitionFromBond() +DEFINE(CameraTransitionFromBond() BondHideWeapons() Yield() Yield() Yield()) - + //============================================================================== -//## CAMERA RETURN TO BOND +//## CAMERA RETURN TO BOND //============================================================================== /* #define CMDNAME CAMERA_RETURN_TO_BOND */ @@ -10126,7 +10140,7 @@ _AI_CMD( //============================================================================== -//## CAMERA LOOK AT BOND FROM PAD +//## CAMERA LOOK AT BOND FROM PAD //============================================================================== /* #define CMDNAME CAMERA_LOOK_AT_BOND_FROM_PAD */ @@ -10172,7 +10186,7 @@ _AI_CMD( //============================================================================== -//## CAMERA SWITCH +//## CAMERA SWITCH //============================================================================== /* #define CMDNAME CAMERA_SWITCH */ @@ -10225,7 +10239,7 @@ _AI_CMD( //============================================================================== -//## IF BOND Y POS LESS THAN +//## IF BOND Y POS LESS THAN //============================================================================== /* #define CMDNAME IF_BOND_Y_POS_LESS_THAN */ @@ -10269,7 +10283,7 @@ _AI_CMD( //============================================================================== -//## HUD HIDE AND LOCK CONTROLS AND PAUSE MISSION TIME +//## HUD HIDE AND LOCK CONTROLS AND PAUSE MISSION TIME //============================================================================== /* #define CMDNAME HUD_HIDE_AND_LOCK_CONTROLS_AND_PAUSE_MISSION_TIME */ @@ -10279,9 +10293,9 @@ _AI_CMD( /******************************************************************************* * hide hud elements, lock player controls and pause mission time ******************************************************************************** -* @param BITFIELD use HUD_# flags to hide indavidual Hud Elements +* @param BITFIELD use HUD_# flags to hide individual Hud Elements * @exception: Will not hide element on command execution. -* This is needed for dialog/HUD countdown while in cinema mode. +* This is needed for dialogue/HUD countdown while in cinema mode. * Flags can be combined together to show multiple elements. * Sequential executions of HUD_HIDE can be used to hide more elements, * but once an element has been hidden it cannot be shown again until @@ -10309,7 +10323,7 @@ _AI_CMD( { countdownTimerSetVisible(16, FALSE); } - D_800364B0 = FALSE; + is_timer_active = FALSE; Offset += CAT(CAT(AI_, CMDNAME), _LENGTH); break; }) @@ -10324,7 +10338,7 @@ _AI_CMD( //============================================================================== -//## HUD SHOW ALL AND UNLOCK CONTROLS AND RESUME MISSION TIME +//## HUD SHOW ALL AND UNLOCK CONTROLS AND RESUME MISSION TIME //============================================================================== /* #define CMDNAME HUD_SHOW_ALL_AND_UNLOCK_CONTROLS_AND_RESUME_MISSION_TIME */ @@ -10347,7 +10361,7 @@ _AI_CMD( hudmsgsSetOn(PLAYERFLAG_NOCONTROL); bondviewClearUpperTextDisplayFlag(2); countdownTimerSetVisible(16, TRUE); - D_800364B0 = TRUE; + is_timer_active = TRUE; Offset += CAT(CAT(AI_, CMDNAME), _LENGTH); break; }) @@ -10362,7 +10376,7 @@ _AI_CMD( //============================================================================== -//## CHR TRY TELEPORTING TO PAD +//## CHR TRY TELEPORTING TO PAD //============================================================================== /* #define CMDNAME CHR_TRY_TELEPORTING_TO_PAD */ @@ -10404,7 +10418,7 @@ _AI_CMD( pos.z = pad->pos.z; stan = pad->stan; sub_GAME_7F03D058(chr->prop, FALSE); - if (sub_GAME_7F033F48(&pos, &stan, FacingDirection, TRUE)) + if (chrAdjustPosForSpawn(&pos, &stan, FacingDirection, TRUE)) { { chr->prop->pos.x = pos.x; @@ -10455,7 +10469,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## SCREEN FADE TO BLACK +//## SCREEN FADE TO BLACK //============================================================================== /* #define CMDNAME SCREEN_FADE_TO_BLACK */ @@ -10491,7 +10505,7 @@ _AI_CMD( //============================================================================== -//## SCREEN FADE FROM BLACK +//## SCREEN FADE FROM BLACK //============================================================================== /* #define CMDNAME SCREEN_FADE_FROM_BLACK */ @@ -10527,7 +10541,7 @@ _AI_CMD( //============================================================================== -//## IF SCREEN FADE COMPLETED +//## IF SCREEN FADE COMPLETED //============================================================================== /* #define CMDNAME IF_SCREEN_FADE_COMPLETED */ @@ -10567,7 +10581,7 @@ _AI_CMD( //============================================================================== -//## CHR HIDE ALL +//## CHR HIDE ALL //============================================================================== /* #define CMDNAME CHR_HIDE_ALL */ @@ -10607,7 +10621,7 @@ _AI_CMD( //============================================================================== -//## CHR SHOW ALL +//## CHR SHOW ALL //============================================================================== /* #define CMDNAME CHR_SHOW_ALL */ @@ -10646,7 +10660,7 @@ _AI_CMD( //============================================================================== -//## DOOR OPEN INSTANT +//## DOOR OPEN INSTANT //============================================================================== /* #define CMDNAME DOOR_OPEN_INSTANT */ @@ -10690,7 +10704,7 @@ _AI_CMD( //============================================================================== -//## CHR REMOVE ITEM IN HAND +//## CHR REMOVE ITEM IN HAND //============================================================================== /* #define CMDNAME CHR_REMOVE_ITEM_IN_HAND */ @@ -10727,7 +10741,7 @@ _AI_CMD( //============================================================================== -//## IF NUMBER OF ACTIVE PLAYERS LESS THAN +//## IF NUMBER OF ACTIVE PLAYERS LESS THAN //============================================================================== /* #define CMDNAME IF_NUMBER_OF_ACTIVE_PLAYERS_LESS_THAN */ @@ -10787,7 +10801,7 @@ _AI_CMD_POLYMORPH(, //============================================================================== -//## IF BOND ITEM TOTAL AMMO LESS THAN +//## IF BOND ITEM TOTAL AMMO LESS THAN //============================================================================== /* #define CMDNAME IF_BOND_ITEM_TOTAL_AMMO_LESS_THAN */ @@ -10827,7 +10841,7 @@ _AI_CMD( //============================================================================== -//## BOND EQUIP ITEM +//## BOND EQUIP ITEM //============================================================================== /* #define CMDNAME BOND_EQUIP_ITEM */ @@ -10861,7 +10875,7 @@ _AI_CMD( //============================================================================== -//## BOND EQUIP ITEM CINEMA +//## BOND EQUIP ITEM CINEMA //============================================================================== /* #define CMDNAME BOND_EQUIP_ITEM_CINEMA */ @@ -10895,7 +10909,7 @@ _AI_CMD( //============================================================================== -//## BOND SET LOCKED VELOCITY +//## BOND SET LOCKED VELOCITY //============================================================================== /* #define CMDNAME BOND_SET_LOCKED_VELOCITY */ @@ -10933,7 +10947,7 @@ _AI_CMD( //============================================================================== -//## IF OBJECT IN ROOM WITH PAD +//## IF OBJECT IN ROOM WITH PAD //============================================================================== /* #define CMDNAME IF_OBJECT_IN_ROOM_WITH_PAD */ @@ -11024,7 +11038,7 @@ _AI_CMD( //============================================================================== -//## IF GUARD IS FIRING +//## IF GUARD IS FIRING //============================================================================== /* #define CMDNAME IF_GUARD_IS_FIRING */ @@ -11063,7 +11077,7 @@ _AI_CMD( //============================================================================== -//## SWITCH ENVIRONMENT +//## SWITCH ENVIRONMENT //============================================================================== /* #define CMDNAME SWITCH_SKY */ @@ -11096,7 +11110,7 @@ _AI_CMD( //============================================================================== -//## TRIGGER FADE AND EXIT LEVEL ON BUTTON PRESS +//## TRIGGER FADE AND EXIT LEVEL ON BUTTON PRESS //============================================================================== /* #define CMDNAME TRIGGER_FADE_AND_EXIT_LEVEL_ON_BUTTON_PRESS */ @@ -11133,7 +11147,7 @@ _AI_CMD( //============================================================================== -//## IF BOND IS DEAD +//## IF BOND IS DEAD //============================================================================== /* #define CMDNAME IF_BOND_IS_DEAD */ @@ -11172,7 +11186,7 @@ _AI_CMD( //============================================================================== -//## BOND DISABLE DAMAGE AND PICKUPS +//## BOND DISABLE DAMAGE AND PICKUPS //============================================================================== /* #define CMDNAME BOND_DISABLE_DAMAGE_AND_PICKUPS */ @@ -11206,7 +11220,7 @@ _AI_CMD( //============================================================================== -//## BOND HIDE WEAPONS +//## BOND HIDE WEAPONS //============================================================================== /* #define CMDNAME BOND_HIDE_WEAPONS */ @@ -11237,7 +11251,7 @@ _AI_CMD( //============================================================================== -//## CAMERA ORBIT PAD +//## CAMERA ORBIT PAD //============================================================================== /* #define CMDNAME CAMERA_ORBIT_PAD */ @@ -11249,8 +11263,8 @@ _AI_CMD( ******************************************************************************** * @param LAT_DISTANCE: Unsigned camera distance from pad in centimeters * @param VERT_DISTANCE: Signed camera distance from pad in centimeters -* @param ORBIT_SPEED: Normalised angle -0.5 - 0 - 0.5 (8000 - 7FFF) to rotate -* per frame. Generally stick to a low range as it is used +* @param ORBIT_SPEED: Normalised angle -0.5 - 0 - 0.5 (8000 - 7FFF) to rotate +* per frame. Generally stick to a low range as it is used * for delta timing (FF00-0100) (-0.02 - 0 - 0.02) * @param PAD: pad for camera to target and orbit around * @param Y_POS_OFFSET: Signed offset the relative y position for pad @@ -11303,7 +11317,7 @@ _AI_CMD( //============================================================================== -//## CREDITS ROLL +//## CREDITS ROLL //============================================================================== /* #define CMDNAME CREDITS_ROLL */ @@ -11320,7 +11334,7 @@ _AI_CMD( _AI_CMD( { - D_8003643C = TRUE; + credits_state = TRUE; Offset += CAT(CAT(AI_, CMDNAME), _LENGTH); break; }) @@ -11335,7 +11349,7 @@ _AI_CMD( //============================================================================== -//## IF CREDITS HAS COMPLETED +//## IF CREDITS HAS COMPLETED //============================================================================== /* #define CMDNAME IF_CREDITS_HAS_COMPLETED */ @@ -11353,7 +11367,7 @@ _AI_CMD( _AI_CMD( { AIRecord *ai = AiListp + Offset; - if (D_8003643C == 2) + if (credits_state == 2) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[0]); } @@ -11374,7 +11388,7 @@ _AI_CMD( //============================================================================== -//## IF OBJECTIVE ALL COMPLETED +//## IF OBJECTIVE ALL COMPLETED //============================================================================== /* #define CMDNAME IF_OBJECTIVE_ALL_COMPLETED */ @@ -11416,7 +11430,7 @@ _AI_CMD( //============================================================================== -//## IF FOLDER ACTOR IS EQUAL +//## IF FOLDER ACTOR IS EQUAL //============================================================================== /* #define CMDNAME IF_FOLDER_ACTOR_IS_EQUAL */ @@ -11440,7 +11454,7 @@ _AI_CMD( _AI_CMD( { AIRecord *ai = AiListp + Offset; - if (getSelectedFolderBond() == (s8)ai->val[0]) + if (fileGetBondForCurrentFolder() == (s8)ai->val[0]) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[1]); } @@ -11461,7 +11475,7 @@ _AI_CMD( //============================================================================== -//## IF BOND DAMAGE AND PICKUPS DISABLED +//## IF BOND DAMAGE AND PICKUPS DISABLED //============================================================================== /* #define CMDNAME IF_BOND_DAMAGE_AND_PICKUPS_DISABLED */ @@ -11503,7 +11517,7 @@ _AI_CMD( //============================================================================== -//## MUSIC XTRACK PLAY +//## MUSIC XTRACK PLAY //============================================================================== /* #define CMDNAME MUSIC_XTRACK_PLAY */ @@ -11541,7 +11555,7 @@ _AI_CMD( //============================================================================== -//## MUSIC XTRACK STOP +//## MUSIC XTRACK STOP //============================================================================== /* #define CMDNAME MUSIC_XTRACK_STOP */ @@ -11579,7 +11593,7 @@ _AI_CMD( //============================================================================== -//## TRIGGER EXPLOSIONS AROUND BOND +//## TRIGGER EXPLOSIONS AROUND BOND //============================================================================== /* #define CMDNAME TRIGGER_EXPLOSIONS_AROUND_BOND */ @@ -11611,7 +11625,7 @@ _AI_CMD( //============================================================================== -//## IF KILLED CIVILIANS GREATER THAN +//## IF KILLED CIVILIANS GREATER THAN //============================================================================== /* #define CMDNAME IF_KILLED_CIVILIANS_GREATER_THAN */ @@ -11653,7 +11667,7 @@ _AI_CMD( //============================================================================== -//## IF CHR WAS SHOT SINCE LAST CHECK +//## IF CHR WAS SHOT SINCE LAST CHECK //============================================================================== /* #define CMDNAME IF_CHR_WAS_SHOT_SINCE_LAST_CHECK */ @@ -11665,7 +11679,7 @@ _AI_CMD( ******************************************************************************** * @return Continue execution from LABEL if TRUE * @exception: Checks chr->chrflags if CHRFLAG_WAS_HIT is set. -* If true, unset flag and Goto LABEL. +* If true, unset flag and Go to LABEL. * CHRFLAG_WAS_HIT is set even if guard is invincible *******************************************************************************/ @@ -11697,7 +11711,7 @@ _AI_CMD( //============================================================================== -//## BOND KILLED IN ACTION +//## BOND KILLED IN ACTION //============================================================================== /* #define CMDNAME BOND_KILLED_IN_ACTION */ @@ -11729,7 +11743,7 @@ _AI_CMD( //============================================================================== -//## GUARD RAISES ARMS +//## GUARD RAISES ARMS //============================================================================== /* #define CMDNAME GUARD_RAISES_ARMS */ @@ -11759,7 +11773,7 @@ _AI_CMD( //============================================================================== -//## GAS LEAK AND FADE FOG +//## GAS LEAK AND FADE FOG //============================================================================== /* #define CMDNAME GAS_LEAK_AND_FADE_FOG */ @@ -11794,7 +11808,7 @@ _AI_CMD( * Trigger gas leak event and slowly transition fog to the next fogs slot ******************************************************************************** * @exception: This command triggers a gas leak. -* For the level egypt, this command will not trigger a gas leak, but +* For the level Egypt, this command will not trigger a gas leak, but * instead will only transition the fog. * Can NOT be stopped after executing. * Level must have a fog assigned or will crash! @@ -11812,7 +11826,7 @@ _AI_CMD_POLYMORPH( , FADE_FOG, (), ()) //============================================================================== -//## OBJECT ROCKET LAUNCH +//## OBJECT ROCKET LAUNCH //============================================================================== /* #define CMDNAME OBJECT_ROCKET_LAUNCH */ diff --git a/src/aicommands2.h b/src/aicommands2.h index fca5865..2656c4b 100644 --- a/src/aicommands2.h +++ b/src/aicommands2.h @@ -27,5333 +27,5333 @@ #include // make sure this is after constants -//Define All Commands At Once From File: +//Define All Commands At Once From File: //Number of bytes for AI cmds, GE 1, PD 2 -#define AICMDSIZE ((u8)(AI_CMD_COUNT / 255) + 1) +#define AICMDSIZE ((u8)(AI_CMD_COUNT / 255) + 1) # 1 "src/aicommands.def" # 1 "include/CPPLib.h" # 649 "include/CPPLib.h" # 87 "src/aicommands.def" //============================================================================== -//## GOTO NEXT +//## GOTO NEXT //============================================================================== - -/******************************************************************************* - Skips all commands between this command and LABEL then continues - executing after found LABEL -******************************************************************************** - @param LABEL: 8bit Integer/enum ID of label to Go To - @return Continue execution from LABEL or End - @exception Does Not search from beginning -*******************************************************************************/ + +/******************************************************************************* + Skips all commands between this command and LABEL then continues + executing after found LABEL +******************************************************************************** + @param LABEL: 8bit Integer/enum ID of label to Go To + @return Continue execution from LABEL or End + @exception Does Not search from beginning +*******************************************************************************/ #define GotoNext(LABEL) \ AI_GotoNext , \ - LABEL , - -#define AI_GotoNext_LENGTH (AICMDSIZE +1 ) + LABEL , + +#define AI_GotoNext_LENGTH (AICMDSIZE +1 ) + - # 169 "src/aicommands.def" //ALIAS FOR SYNTAX SUGER -/******************************************************************************* - Skips all commands between this command and LABEL then continues - executing after found LABEL -******************************************************************************** - @param LABEL: 8bit Integer/enum ID of label to Go To - @return Continue execution from LABEL or End - @exception Does Not search from beginning -*******************************************************************************/ +/******************************************************************************* + Skips all commands between this command and LABEL then continues + executing after found LABEL +******************************************************************************** + @param LABEL: 8bit Integer/enum ID of label to Go To + @return Continue execution from LABEL or End + @exception Does Not search from beginning +*******************************************************************************/ #define BREAK(LABEL) \ - GotoNext(LABEL) + GotoNext(LABEL) + - # 175 "src/aicommands.def" //============================================================================== -//## GOTO FIRST +//## GOTO FIRST //============================================================================== - -/******************************************************************************* - Starting from the beginning, Skips all commands until LABEL - continues - executing after found LABEL -******************************************************************************** - @param LABEL: 8bit Integer/enum ID of label to Go To - @return Continue execution from LABEL or End - @exception None -*******************************************************************************/ + +/******************************************************************************* + Starting from the beginning, Skips all commands until LABEL - continues + executing after found LABEL +******************************************************************************** + @param LABEL: 8bit Integer/enum ID of label to Go To + @return Continue execution from LABEL or End + @exception None +*******************************************************************************/ #define GotoFirst(LABEL) \ AI_GotoFirst , \ - LABEL , - -#define AI_GotoFirst_LENGTH (AICMDSIZE +1 ) + LABEL , + +#define AI_GotoFirst_LENGTH (AICMDSIZE +1 ) + - # 209 "src/aicommands.def" //ALIAS FOR SYNTAX SUGER -/******************************************************************************* - LOOP back to DO with ID -******************************************************************************** - @param ID: 8bit Integer/enum ID of DO - @return Loop Back and Continue execution from LABEL - @exception Must have valid DO ID -*******************************************************************************/ +/******************************************************************************* + LOOP back to DO with ID +******************************************************************************** + @param ID: 8bit Integer/enum ID of DO + @return Loop Back and Continue execution from LABEL + @exception Must have valid DO ID +*******************************************************************************/ #define LOOP(ID) \ - GotoFirst(ID) + GotoFirst(ID) + - # 226 "src/aicommands.def" -/******************************************************************************* - Exit LOOP early and go back to DO with ID -******************************************************************************** - @param ID: 8bit Integer/enum ID of DO - @return Loop back and Continue execution from LABEL - @exception Must have valid DO ID -*******************************************************************************/ +/******************************************************************************* + Exit LOOP early and go back to DO with ID +******************************************************************************** + @param ID: 8bit Integer/enum ID of DO + @return Loop back and Continue execution from LABEL + @exception Must have valid DO ID +*******************************************************************************/ #define CONTINUE(ID) \ - GotoFirst(ID) + GotoFirst(ID) + - # 241 "src/aicommands.def" //============================================================================== -//## LABEL +//## LABEL //============================================================================== - -/******************************************************************************* - Used as a target for Loops and Conditionals -******************************************************************************** - @param ID: 8bit Integer/enum ID - @return Nothing - @exception None -*******************************************************************************/ + +/******************************************************************************* + Used as a target for Loops and Conditionals +******************************************************************************** + @param ID: 8bit Integer/enum ID + @return Nothing + @exception None +*******************************************************************************/ #define Label(ID) \ AI_Label , \ - ID , - -#define AI_Label_LENGTH (AICMDSIZE +1 ) + ID , + +#define AI_Label_LENGTH (AICMDSIZE +1 ) + - # 274 "src/aicommands.def" //ALIAS FOR SYNTAX SUGER -/******************************************************************************* - DO LOOP with ID -******************************************************************************** - @param ID: 8bit Integer/enum ID of DO - @return Nothing - @exception Do NOT re-use the ID again within this block -*******************************************************************************/ +/******************************************************************************* + DO LOOP with ID +******************************************************************************** + @param ID: 8bit Integer/enum ID of DO + @return Nothing + @exception Do NOT re-use the ID again within this block +*******************************************************************************/ #define DO(ID) \ - Label(ID) Yield() + Label(ID) Yield() - -/******************************************************************************* - DO INFINITE LOOP with ID -******************************************************************************** - @param ID: 8bit Integer/enum ID of LOOP - @return Nothing - @exception Must have uniqe ID -*******************************************************************************/ + +/******************************************************************************* + DO INFINITE LOOP with ID +******************************************************************************** + @param ID: 8bit Integer/enum ID of LOOP + @return Nothing + @exception Must have uniqe ID +*******************************************************************************/ #define YIELD_FOREVER(ID) \ - Label(ID) Yield() GotoFirst(ID) + Label(ID) Yield() GotoFirst(ID) + - # 315 "src/aicommands.def" //============================================================================== -//## Yield +//## Yield //============================================================================== - -/******************************************************************************* - Halt the AI List - frees engine to start executing next AI List until all - Lists have been executed for game tick. -******************************************************************************** - @return Current Ai List Position - @exception Offscreen/idle guard's will take 14 game ticks instead of 1 tick -*******************************************************************************/ + +/******************************************************************************* + Halt the AI List - frees engine to start executing next AI List until all + Lists have been executed for game tick. +******************************************************************************** + @return Current Ai List Position + @exception Offscreen/idle guard's will take 14 game ticks instead of 1 tick +*******************************************************************************/ #define Yield() \ - AI_Yield , - -#define AI_Yield_LENGTH (AICMDSIZE ) + AI_Yield , + +#define AI_Yield_LENGTH (AICMDSIZE ) + - //============================================================================== -//## END +//## END //============================================================================== - -/******************************************************************************* - Used for AI List parser to check when List ends -******************************************************************************** - @exception: Not recommended to execute this command - to finish a List create - an infinite loop (YIELD_FOREVER) or jump to GAILIST_DEAD_AI - when List has finished tasks -*******************************************************************************/ + +/******************************************************************************* + Used for AI List parser to check when List ends +******************************************************************************** + @exception: Not recommended to execute this command - to finish a List create + an infinite loop (YIELD_FOREVER) or jump to GAILIST_DEAD_AI + when List has finished tasks +*******************************************************************************/ #define EndList() \ - AI_EndList - -#define AI_EndList_LENGTH (AICMDSIZE ) + AI_EndList + +#define AI_EndList_LENGTH (AICMDSIZE ) + - # 391 "src/aicommands.def" //============================================================================== -//## JUMP TO AI LIST +//## JUMP TO AI LIST //============================================================================== - -/****************************************************************************** - Set Chr's current AI List to beginning of AI_LIST_ID and execute at - next opertunity. -******************************************************************************* - @param CHR_NUM: ID of Chr (0-255) - @param AI_LIST_ID: 16bit pointer to AI List within Chr/Global - @exception: Not recommended to Goto a BG List (10XX) -******************************************************************************/ + +/****************************************************************************** + Set Chr's current AI List to beginning of AI_LIST_ID and execute at + next opertunity. +******************************************************************************* + @param CHR_NUM: ID of Chr (0-255) + @param AI_LIST_ID: 16bit pointer to AI List within Chr/Global + @exception: Not recommended to Goto a BG List (10XX) +******************************************************************************/ #define SetChrAiList(CHR_NUM, AI_LIST_ID) \ AI_SetChrAiList , \ CHR_NUM , \ - CharArrayFrom16(AI_LIST_ID) , - -#define AI_SetChrAiList_LENGTH (AICMDSIZE +1 +2 ) + CharArrayFrom16(AI_LIST_ID) , + +#define AI_SetChrAiList_LENGTH (AICMDSIZE +1 +2 ) + - //POLYMORPHS -/****************************************************************************** - Jump my AI to AI_LIST_ID then return to Standard Guard -******************************************************************************* - @return Continue execution from begginning of Standard Guard - @param AI_LIST_ID: AI List to execute - @exception: AI_LIST_ID Must NOT be a BG List (10XX) -******************************************************************************/ +/****************************************************************************** + Jump my AI to AI_LIST_ID then return to Standard Guard +******************************************************************************* + @return Continue execution from begginning of Standard Guard + @param AI_LIST_ID: AI List to execute + @exception: AI_LIST_ID Must NOT be a BG List (10XX) +******************************************************************************/ #define JUMPTO_THEN_GUARD(AI_LIST_ID) \ - SetReturnAiList(GAILIST_STANDARD_GUARD)SetChrAiList(CHR_SELF, (!isBGAIListID(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_SUB)) + SetReturnAiList(GAILIST_STANDARD_GUARD)SetChrAiList(CHR_SELF, (!isBGAIListID(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_SUB)) + - # 460 "src/aicommands.def" -/****************************************************************************** - Jump my AI to AI_LIST_ID and loop -******************************************************************************* - @return Continue execution from begginning of AI_LIST_ID - @param AI_LIST_ID: AI List to execute - @exception: AI_LIST_ID Must NOT be a BG List (10XX) -******************************************************************************/ +/****************************************************************************** + Jump my AI to AI_LIST_ID and loop +******************************************************************************* + @return Continue execution from begginning of AI_LIST_ID + @param AI_LIST_ID: AI List to execute + @exception: AI_LIST_ID Must NOT be a BG List (10XX) +******************************************************************************/ #define JUMPTO_THEN_LOOP(AI_LIST_ID) \ - SetReturnAiList(AI_LIST_ID)SetChrAiList(CHR_SELF, (!isBGAIListID(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_SUB)) + SetReturnAiList(AI_LIST_ID)SetChrAiList(CHR_SELF, (!isBGAIListID(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_SUB)) + - # 475 "src/aicommands.def" -/****************************************************************************** - Set my AI List program counter to beginning of a List and execute -******************************************************************************* - @return Continue execution from begginning of AI_LIST_ID - @param AI_LIST_ID: AI List to execute - @exception: AI_LIST_ID Must NOT be a BG List (10XX) -******************************************************************************/ +/****************************************************************************** + Set my AI List program counter to beginning of a List and execute +******************************************************************************* + @return Continue execution from begginning of AI_LIST_ID + @param AI_LIST_ID: AI List to execute + @exception: AI_LIST_ID Must NOT be a BG List (10XX) +******************************************************************************/ #define JumpTo(AI_LIST_ID) \ - SetChrAiList(CHR_SELF, (!isBGAIListID(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_SUB)) + SetChrAiList(CHR_SELF, (!isBGAIListID(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_SUB)) + - # 490 "src/aicommands.def" -/****************************************************************************** - Set Bond's AI List program counter to beginning of a List -******************************************************************************* - @param AI_LIST_ID: AI List for Bond to execute during cinema - @exception: AI_LIST_ID Must NOT be a BG List (10XX) - Only use when Bond has a 3rd person model (cutscenes) -******************************************************************************/ +/****************************************************************************** + Set Bond's AI List program counter to beginning of a List +******************************************************************************* + @param AI_LIST_ID: AI List for Bond to execute during cinema + @exception: AI_LIST_ID Must NOT be a BG List (10XX) + Only use when Bond has a 3rd person model (cutscenes) +******************************************************************************/ #define SetBondsAiList(AI_LIST_ID) \ - SetChrAiList(CHR_BOND_CINEMA, (!isBGAIListID(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_NOTCHR)) + SetChrAiList(CHR_BOND_CINEMA, (!isBGAIListID(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_NOTCHR)) + - # 505 "src/aicommands.def" -/****************************************************************************** - Call AI Subroutine with AI_LIST_ID and return (If subroutine allows) -******************************************************************************* - @return Restart execution on Return - @param AI_LIST_ID: AI List to execute (Must be a subroutine/have return) - @exception: AI_LIST_ID Must NOT be a BG List (10XX) - THIS must be defined for this function to be able to return -******************************************************************************/ +/****************************************************************************** + Call AI Subroutine with AI_LIST_ID and return (If subroutine allows) +******************************************************************************* + @return Restart execution on Return + @param AI_LIST_ID: AI List to execute (Must be a subroutine/have return) + @exception: AI_LIST_ID Must NOT be a BG List (10XX) + THIS must be defined for this function to be able to return +******************************************************************************/ #define CALL(AI_LIST_ID) \ - IF_ELSE ( DEFINED ( THIS ) ) ( AI_ERR_NO_THIS ) ( ( SetReturnAiList(THIS)SetChrAiList(CHR_SELF, (!isBGAIListID(AI_LIST_ID) && isSubroutine(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_NOTSUB)) ) ) , + IF_ELSE ( DEFINED ( THIS ) ) ( AI_ERR_NO_THIS ) ( ( SetReturnAiList(THIS)SetChrAiList(CHR_SELF, (!isBGAIListID(AI_LIST_ID) && isSubroutine(AI_LIST_ID) ? AI_LIST_ID : AI_ERR_NOTSUB)) ) ) , + - //============================================================================== -//## SET RETURN AI LIST +//## SET RETURN AI LIST //============================================================================== - -/******************************************************************************* - Set the Return AI List - used by aiReturn -******************************************************************************** - @param AI_LIST_ID to be abale to return to - @exception: Not recommended to set stored List to a BG List (10XX) -*******************************************************************************/ + +/******************************************************************************* + Set the Return AI List - used by aiReturn +******************************************************************************** + @param AI_LIST_ID to be abale to return to + @exception: Not recommended to set stored List to a BG List (10XX) +*******************************************************************************/ #define SetReturnAiList(AI_LIST_ID) \ AI_SetReturnAiList , \ - CharArrayFrom16(AI_LIST_ID) , - -#define AI_SetReturnAiList_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(AI_LIST_ID) , + +#define AI_SetReturnAiList_LENGTH (AICMDSIZE +2 ) + - //============================================================================== -//## JUMP TO RETURN AI LIST +//## JUMP TO RETURN AI LIST //============================================================================== - -/******************************************************************************* - Jump the return AI List set in chr struct - pointer set by SetReturnAiList - Used for subroutine Lists. -******************************************************************************** - @return Continue execution from begginning of stored return list ID - @exception: If stored return List pointer is not set, game will crash -*******************************************************************************/ + +/******************************************************************************* + Jump the return AI List set in chr struct - pointer set by SetReturnAiList + Used for subroutine Lists. +******************************************************************************** + @return Continue execution from begginning of stored return list ID + @exception: If stored return List pointer is not set, game will crash +*******************************************************************************/ #define Return() \ - AI_Return , - -#define AI_Return_LENGTH (AICMDSIZE ) + AI_Return , + +#define AI_Return_LENGTH (AICMDSIZE ) + - //============================================================================== -//## GUARD ANIMATION STOP +//## GUARD ANIMATION STOP //============================================================================== - -/******************************************************************************* - Imediatly Reset me back to idle pose -*******************************************************************************/ + +/******************************************************************************* + Imediatly Reset me back to idle pose +*******************************************************************************/ #define Stop() \ - AI_Stop , - -#define AI_Stop_LENGTH (AICMDSIZE ) + AI_Stop , + +#define AI_Stop_LENGTH (AICMDSIZE ) + - # 651 "src/aicommands.def" //============================================================================== -//## GUARD KNEEL +//## GUARD KNEEL //============================================================================== - -/******************************************************************************* - Make me kneel on one knee -*******************************************************************************/ + +/******************************************************************************* + Make me kneel on one knee +*******************************************************************************/ #define Kneel() \ - AI_Kneel , - -#define AI_Kneel_LENGTH (AICMDSIZE ) + AI_Kneel , + +#define AI_Kneel_LENGTH (AICMDSIZE ) + - # 683 "src/aicommands.def" //============================================================================== -//## PLAY ANIMATION +//## PLAY ANIMATION //============================================================================== - -/******************************************************************************* - Play an animation -******************************************************************************** - @param START/END: set to -1/-1 will playback the entire animation length. - @param INTERPOL_TIME: will set how long it will take to transition - from the previous state. - @param ANIMATION_ID: Use ANIM_# enum - @param BITFIELD: Use ANIM_# Bitflags - @exception: If interpolation time is too low it may crash! - use 16 if unsure. - Start/End Keyframe 30 tick units. - Interpolation use 60 tick units. -*******************************************************************************/ + +/******************************************************************************* + Play an animation +******************************************************************************** + @param START/END: set to -1/-1 will playback the entire animation length. + @param INTERPOL_TIME: will set how long it will take to transition + from the previous state. + @param ANIMATION_ID: Use ANIM_# enum + @param BITFIELD: Use ANIM_# Bitflags + @exception: If interpolation time is too low it may crash! - use 16 if unsure. + Start/End Keyframe 30 tick units. + Interpolation use 60 tick units. +*******************************************************************************/ #define PlayAnimation(ANIMATION_ID, START_TIME30, END_TIME30, BITFIELD, INTERPOL_TIME60) \ AI_PlayAnimation , \ CharArrayFrom16(ANIMATION_ID) , \ CharArrayFrom16(START_TIME30) , \ CharArrayFrom16(END_TIME30) , \ BITFIELD , \ - INTERPOL_TIME60 , - -#define AI_PlayAnimation_LENGTH (AICMDSIZE +2 +2 +2 +1 +1 ) + INTERPOL_TIME60 , + +#define AI_PlayAnimation_LENGTH (AICMDSIZE +2 +2 +2 +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Play an animation -*******************************************************************************/ +/******************************************************************************* + Play an animation +*******************************************************************************/ #define PlayAnimationSimple(ANIMATION_ID) \ - PlayAnimation(ANIMATION_ID, -1, -1, ANIM_UNKNOWN | ANIM_LOOP_HOLD_LAST_FRAME, ANIM_DEFAULT_INTERPOLATION) + PlayAnimation(ANIMATION_ID, -1, -1, ANIM_UNKNOWN | ANIM_LOOP_HOLD_LAST_FRAME, ANIM_DEFAULT_INTERPOLATION) + - # 764 "src/aicommands.def" //============================================================================== -//## IF GUARD PLAYING ANIMATION +//## IF GUARD PLAYING ANIMATION //============================================================================== - -/******************************************************************************* - Am I in animation playback state? (ACT_ANIM) -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + Am I in animation playback state? (ACT_ANIM) +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFPlayingAnimation(GOTOLABEL) \ AI_IFPlayingAnimation , \ - GOTOLABEL , - -#define AI_IFPlayingAnimation_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFPlayingAnimation_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD POINTS AT BOND +//## GUARD POINTS AT BOND //============================================================================== - -/******************************************************************************* - Point only if Bond is directly in front of me, else command is - ignored -******************************************************************************** - @exception: Global AI List GAILIST_ATTACK_BOND skips this command - if bitfield flag FLAGS2_DONT_POINT_AT_BOND is on -*******************************************************************************/ + +/******************************************************************************* + Point only if Bond is directly in front of me, else command is + ignored +******************************************************************************** + @exception: Global AI List GAILIST_ATTACK_BOND skips this command + if bitfield flag FLAGS2_DONT_POINT_AT_BOND is on +*******************************************************************************/ #define PointAtBond() \ - AI_PointAtBond , - -#define AI_PointAtBond_LENGTH (AICMDSIZE ) + AI_PointAtBond , + +#define AI_PointAtBond_LENGTH (AICMDSIZE ) + - # 839 "src/aicommands.def" //============================================================================== -//## GUARD LOOKS AROUND SELF +//## GUARD LOOKS AROUND SELF //============================================================================== - -/******************************************************************************* - Make me look around when shots land near me -*******************************************************************************/ + +/******************************************************************************* + Make me look around when shots land near me +*******************************************************************************/ #define LookSurprised() \ - AI_LookSurprised , - -#define AI_LookSurprised_LENGTH (AICMDSIZE ) + AI_LookSurprised , + +#define AI_LookSurprised_LENGTH (AICMDSIZE ) + - # 871 "src/aicommands.def" //============================================================================== -//## GUARD TRY SIDESTEPPING +//## GUARD TRY SIDESTEPPING //============================================================================== - -/******************************************************************************* - Try getting me to sidestep -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Direction is random -*******************************************************************************/ + +/******************************************************************************* + Try getting me to sidestep +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Direction is random +*******************************************************************************/ #define TRYSidestepping(GOTOLABEL) \ AI_TRYSidestepping , \ - GOTOLABEL , - -#define AI_TRYSidestepping_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYSidestepping_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY HOPPING SIDEWAYS +//## GUARD TRY HOPPING SIDEWAYS //============================================================================== - -/******************************************************************************* - Try getting me to hop sideways -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Direction is random -*******************************************************************************/ + +/******************************************************************************* + Try getting me to hop sideways +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Direction is random +*******************************************************************************/ #define TRYSideHopping(GOTOLABEL) \ AI_TRYSideHopping , \ - GOTOLABEL , - -#define AI_TRYSideHopping_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYSideHopping_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY RUNNING TO SIDE +//## GUARD TRY RUNNING TO SIDE //============================================================================== - -/******************************************************************************* - Try getting me to Run sideways of Bond -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Direction is random -*******************************************************************************/ + +/******************************************************************************* + Try getting me to Run sideways of Bond +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Direction is random +*******************************************************************************/ #define TRYSideRunning(GOTOLABEL) \ AI_TRYSideRunning , \ - GOTOLABEL , - -#define AI_TRYSideRunning_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYSideRunning_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY FIRING WALK +//## GUARD TRY FIRING WALK //============================================================================== - -/******************************************************************************* - Try getting me to walk and fire at Bond -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Bond needs to be at long distance away from guard to work -*******************************************************************************/ + +/******************************************************************************* + Try getting me to walk and fire at Bond +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Bond needs to be at long distance away from guard to work +*******************************************************************************/ #define TRYFiringWalk(GOTOLABEL) \ AI_TRYFiringWalk , \ - GOTOLABEL , - -#define AI_TRYFiringWalk_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYFiringWalk_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY FIRING RUN +//## GUARD TRY FIRING RUN //============================================================================== - -/******************************************************************************* - Try getting me to Run and fire at Bond, -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Bond needs to be at long distance away from guard to work -*******************************************************************************/ + +/******************************************************************************* + Try getting me to Run and fire at Bond, +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Bond needs to be at long distance away from guard to work +*******************************************************************************/ #define TRYFiringRun(GOTOLABEL) \ AI_TRYFiringRun , \ - GOTOLABEL , - -#define AI_TRYFiringRun_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYFiringRun_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY FIRING ROLL +//## GUARD TRY FIRING ROLL //============================================================================== - -/******************************************************************************* - Try getting me to roll on ground then fire at Bond -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Bond cannot be too close to guard or it will not work -*******************************************************************************/ + +/******************************************************************************* + Try getting me to roll on ground then fire at Bond +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Bond cannot be too close to guard or it will not work +*******************************************************************************/ #define TRYFiringRoll(GOTOLABEL) \ AI_TRYFiringRoll , \ - GOTOLABEL , - -#define AI_TRYFiringRoll_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYFiringRoll_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY FIRE OR AIM AT TARGET +//## GUARD TRY FIRE OR AIM AT TARGET //============================================================================== - -/******************************************************************************* - Try making me aim/fire their weapon at TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID - @param BITFIELD: 16bit Target Type - @exception: Use TARGET_# flags to set the target type (pad/Bond/chr) or use - Seperated commands eg GUARD_TRYFIRE_AT_PAD -*******************************************************************************/ + +/******************************************************************************* + Try making me aim/fire their weapon at TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID + @param BITFIELD: 16bit Target Type + @exception: Use TARGET_# flags to set the target type (pad/Bond/chr) or use + Seperated commands eg GUARD_TRYFIRE_AT_PAD +*******************************************************************************/ #define TRYFireOrAimAtTarget(BITFIELD, TARGET, GOTOLABEL) \ AI_TRYFireOrAimAtTarget , \ CharArrayFrom16(BITFIELD) , \ CharArrayFrom16(TARGET) , \ - GOTOLABEL , - -#define AI_TRYFireOrAimAtTarget_LENGTH (AICMDSIZE +2 +2 +1 ) + GOTOLABEL , + +#define AI_TRYFireOrAimAtTarget_LENGTH (AICMDSIZE +2 +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Try making me aim/fire their weapon at ... -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID -*******************************************************************************/ +/******************************************************************************* + Try making me aim/fire their weapon at ... +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID +*******************************************************************************/ #define TRYFireAtPad(TARGET, GOTOLABEL) \ - TRYFireOrAimAtTarget(TARGET_PAD, TARGET, GOTOLABEL) + TRYFireOrAimAtTarget(TARGET_PAD, TARGET, GOTOLABEL) + - # 1186 "src/aicommands.def" -/******************************************************************************* - Try making me aim/fire their weapon at ... -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID -*******************************************************************************/ +/******************************************************************************* + Try making me aim/fire their weapon at ... +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID +*******************************************************************************/ #define TRYAimAtPad(TARGET, GOTOLABEL) \ - TRYFireOrAimAtTarget(TARGET_PAD | TARGET_AIM_ONLY, TARGET, GOTOLABEL) + TRYFireOrAimAtTarget(TARGET_PAD | TARGET_AIM_ONLY, TARGET, GOTOLABEL) + - # 1190 "src/aicommands.def" -/******************************************************************************* - Try making me aim/fire their weapon at ... -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID -*******************************************************************************/ +/******************************************************************************* + Try making me aim/fire their weapon at ... +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID +*******************************************************************************/ #define TRYFireAtBond(GOTOLABEL) \ - TRYFireOrAimAtTarget(TARGET_BOND, 0, GOTOLABEL) + TRYFireOrAimAtTarget(TARGET_BOND, 0, GOTOLABEL) + - # 1194 "src/aicommands.def" -/******************************************************************************* - Try making me aim/fire their weapon at ... -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID -*******************************************************************************/ +/******************************************************************************* + Try making me aim/fire their weapon at ... +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID +*******************************************************************************/ #define TRYAimAtBond(GOTOLABEL) \ - TRYFireOrAimAtTarget(TARGET_BOND | TARGET_AIM_ONLY, 0, GOTOLABEL) + TRYFireOrAimAtTarget(TARGET_BOND | TARGET_AIM_ONLY, 0, GOTOLABEL) + - # 1198 "src/aicommands.def" //============================================================================== -//## GUARD TRY FIRE OR AIM AT TARGET KNEEL +//## GUARD TRY FIRE OR AIM AT TARGET KNEEL //============================================================================== - -/******************************************************************************* - Try making me kneel and aim/fire at TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID - @param BITFIELD: 16bit Target Type - @exception: Use TARGET_# flags to set the target type (pad/Bond/chr) -*******************************************************************************/ + +/******************************************************************************* + Try making me kneel and aim/fire at TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID + @param BITFIELD: 16bit Target Type + @exception: Use TARGET_# flags to set the target type (pad/Bond/chr) +*******************************************************************************/ #define TRYFireOrAimAtTargetKneel(BITFIELD, TARGET, GOTOLABEL) \ AI_TRYFireOrAimAtTargetKneel , \ CharArrayFrom16(BITFIELD) , \ CharArrayFrom16(TARGET) , \ - GOTOLABEL , - -#define AI_TRYFireOrAimAtTargetKneel_LENGTH (AICMDSIZE +2 +2 +1 ) + GOTOLABEL , + +#define AI_TRYFireOrAimAtTargetKneel_LENGTH (AICMDSIZE +2 +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Make me kneel and aim/fire at ... -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID -*******************************************************************************/ +/******************************************************************************* + Make me kneel and aim/fire at ... +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID +*******************************************************************************/ #define TRYFireAtPadKneeling(TARGET, GOTOLABEL) \ - TRYFireOrAimAtTargetKneel(TARGET_PAD, TARGET, GOTOLABEL) + TRYFireOrAimAtTargetKneel(TARGET_PAD, TARGET, GOTOLABEL) + - # 1258 "src/aicommands.def" -/******************************************************************************* - Make me kneel and aim/fire at ... -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID -*******************************************************************************/ +/******************************************************************************* + Make me kneel and aim/fire at ... +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID +*******************************************************************************/ #define TRYAimAtPadKneeling(TARGET, GOTOLABEL) \ - TRYFireOrAimAtTargetKneel(TARGET_PAD | TARGET_AIM_ONLY, TARGET, GOTOLABEL) + TRYFireOrAimAtTargetKneel(TARGET_PAD | TARGET_AIM_ONLY, TARGET, GOTOLABEL) + - # 1262 "src/aicommands.def" -/******************************************************************************* - Make me kneel and aim/fire at ... -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID -*******************************************************************************/ +/******************************************************************************* + Make me kneel and aim/fire at ... +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID +*******************************************************************************/ #define TRYFireAtBondKneeling(GOTOLABEL) \ - TRYFireOrAimAtTargetKneel(TARGET_BOND, 0, GOTOLABEL) + TRYFireOrAimAtTargetKneel(TARGET_BOND, 0, GOTOLABEL) + - # 1266 "src/aicommands.def" -/******************************************************************************* - Make me kneel and aim/fire at ... -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID -*******************************************************************************/ +/******************************************************************************* + Make me kneel and aim/fire at ... +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID +*******************************************************************************/ #define TRYAimAtBondKneeling(GOTOLABEL) \ - TRYFireOrAimAtTargetKneel(TARGET_BOND | TARGET_AIM_ONLY, 0, GOTOLABEL) + TRYFireOrAimAtTargetKneel(TARGET_BOND | TARGET_AIM_ONLY, 0, GOTOLABEL) + - # 1270 "src/aicommands.def" //============================================================================== -//## GUARD TRY FIRE OR AIM AT TARGET UPDATE +//## GUARD TRY FIRE OR AIM AT TARGET UPDATE //============================================================================== - -/******************************************************************************* - Try updating my TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param BITFIELD: 16bit Target Type Use TARGET_# flags to set the - target type (pad/Bond/chr) - @exception: Only works if guard is currently aiming at a target. - Use TARGET_# flags to set the target type (pad/Bond/chr) -*******************************************************************************/ + +/******************************************************************************* + Try updating my TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param BITFIELD: 16bit Target Type Use TARGET_# flags to set the + target type (pad/Bond/chr) + @exception: Only works if guard is currently aiming at a target. + Use TARGET_# flags to set the target type (pad/Bond/chr) +*******************************************************************************/ #define TRYFireOrAimAtTargetUpdate(BITFIELD, TARGET, GOTOLABEL) \ AI_TRYFireOrAimAtTargetUpdate , \ CharArrayFrom16(BITFIELD) , \ CharArrayFrom16(TARGET) , \ - GOTOLABEL , - -#define AI_TRYFireOrAimAtTargetUpdate_LENGTH (AICMDSIZE +2 +2 +1 ) + GOTOLABEL , + +#define AI_TRYFireOrAimAtTargetUpdate_LENGTH (AICMDSIZE +2 +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Try updating my TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET 16bit ID -*******************************************************************************/ +/******************************************************************************* + Try updating my TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET 16bit ID +*******************************************************************************/ #define TRYFireAtPadUpdate(TARGET, GOTOLABEL) \ - TRYFireOrAimAtTargetUpdate(TARGET_PAD, TARGET, GOTOLABEL) + TRYFireOrAimAtTargetUpdate(TARGET_PAD, TARGET, GOTOLABEL) + - # 1331 "src/aicommands.def" -/******************************************************************************* - Try updating my TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET 16bit ID -*******************************************************************************/ +/******************************************************************************* + Try updating my TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET 16bit ID +*******************************************************************************/ #define TRYAimAtPadUpdate(TARGET, GOTOLABEL) \ - TRYFireOrAimAtTargetUpdate(TARGET_PAD | TARGET_AIM_ONLY, TARGET, GOTOLABEL) + TRYFireOrAimAtTargetUpdate(TARGET_PAD | TARGET_AIM_ONLY, TARGET, GOTOLABEL) + - # 1335 "src/aicommands.def" -/******************************************************************************* - Try updating my TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET 16bit ID -*******************************************************************************/ +/******************************************************************************* + Try updating my TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET 16bit ID +*******************************************************************************/ #define TRYFireAtBondUpdate(GOTOLABEL) \ - TRYFireOrAimAtTargetUpdate(TARGET_BOND, 0, GOTOLABEL) + TRYFireOrAimAtTargetUpdate(TARGET_BOND, 0, GOTOLABEL) + - # 1339 "src/aicommands.def" -/******************************************************************************* - Try updating my TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET 16bit ID -*******************************************************************************/ +/******************************************************************************* + Try updating my TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET 16bit ID +*******************************************************************************/ #define TRYAimAtBondUpdate(GOTOLABEL) \ - TRYFireOrAimAtTargetUpdate(TARGET_BOND | TARGET_AIM_ONLY, 0, GOTOLABEL) + TRYFireOrAimAtTargetUpdate(TARGET_BOND | TARGET_AIM_ONLY, 0, GOTOLABEL) + - # 1343 "src/aicommands.def" //============================================================================== -//## GUARD TRY FACING TARGET +//## GUARD TRY FACING TARGET //============================================================================== - -/******************************************************************************* - Try making me continuously face TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID - @param BITFIELD: 16bit Target Type - @exception: If guard was shot while facing target, guard will snap out of facing - state. - Use TARGET_# flags to set the target type (pad/Bond/chr) - Can NOT use TARGET_AIM_ONLY flag -*******************************************************************************/ + +/******************************************************************************* + Try making me continuously face TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID + @param BITFIELD: 16bit Target Type + @exception: If guard was shot while facing target, guard will snap out of facing + state. + Use TARGET_# flags to set the target type (pad/Bond/chr) + Can NOT use TARGET_AIM_ONLY flag +*******************************************************************************/ #define TRYFacingTarget(BITFIELD, TARGET, GOTOLABEL) \ AI_TRYFacingTarget , \ CharArrayFrom16(BITFIELD) , \ CharArrayFrom16(TARGET) , \ - GOTOLABEL , - -#define AI_TRYFacingTarget_LENGTH (AICMDSIZE +2 +2 +1 ) + GOTOLABEL , + +#define AI_TRYFacingTarget_LENGTH (AICMDSIZE +2 +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Try making me continuously face TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID - @param BITFIELD: 16bit Target Type - @exception: If guard was shot while facing target, guard will snap out of facing - state. - Use TARGET_# flags to set the target type (pad/Bond/chr) - Can NOT use TARGET_AIM_ONLY flag -*******************************************************************************/ +/******************************************************************************* + Try making me continuously face TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID + @param BITFIELD: 16bit Target Type + @exception: If guard was shot while facing target, guard will snap out of facing + state. + Use TARGET_# flags to set the target type (pad/Bond/chr) + Can NOT use TARGET_AIM_ONLY flag +*******************************************************************************/ #define TRYFacingPad(TARGET, GOTOLABEL) \ - TRYFacingTarget(TARGET_PAD, TARGET, GOTOLABEL) + TRYFacingTarget(TARGET_PAD, TARGET, GOTOLABEL) + - # 1397 "src/aicommands.def" -/******************************************************************************* - Try making me continuously face TARGET -******************************************************************************** - @return Continue execution from LABEL if successful - @param TARGET: 16bit ID - @param BITFIELD: 16bit Target Type - @exception: If guard was shot while facing target, guard will snap out of facing - state. - Use TARGET_# flags to set the target type (pad/Bond/chr) - Can NOT use TARGET_AIM_ONLY flag -*******************************************************************************/ +/******************************************************************************* + Try making me continuously face TARGET +******************************************************************************** + @return Continue execution from LABEL if successful + @param TARGET: 16bit ID + @param BITFIELD: 16bit Target Type + @exception: If guard was shot while facing target, guard will snap out of facing + state. + Use TARGET_# flags to set the target type (pad/Bond/chr) + Can NOT use TARGET_AIM_ONLY flag +*******************************************************************************/ #define TRYFacingBond(GOTOLABEL) \ - TRYFacingTarget(TARGET_BOND, 0, GOTOLABEL) + TRYFacingTarget(TARGET_BOND, 0, GOTOLABEL) + - # 1401 "src/aicommands.def" //============================================================================== -//## CHR HIT BODY PART WITH ITEM DAMAGE +//## CHR HIT BODY PART WITH ITEM DAMAGE //============================================================================== - -/******************************************************************************* - Hit Chr body part with item damage, play reaction to hit location -******************************************************************************** - @exception: Does NOT trigger items fireing sfx. - @param ITEM_NUM: Item damage uses body part damage modifier. - @param PART_NUM: Use HIT_# define for hit part number - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ + +/******************************************************************************* + Hit Chr body part with item damage, play reaction to hit location +******************************************************************************** + @exception: Does NOT trigger items fireing sfx. + @param ITEM_NUM: Item damage uses body part damage modifier. + @param PART_NUM: Use HIT_# define for hit part number + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define HitChrWithItem(CHR_NUM, PART_NUM, ITEM_NUM) \ AI_HitChrWithItem , \ CHR_NUM , \ PART_NUM , \ - ITEM_NUM , - -#define AI_HitChrWithItem_LENGTH (AICMDSIZE +1 +1 +1 ) + ITEM_NUM , + +#define AI_HitChrWithItem_LENGTH (AICMDSIZE +1 +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Hit Chr body part with item damage, play reaction to hit location -******************************************************************************** - @exception: Does NOT trigger items fireing sfx. - @param ITEM_NUM: Item damage uses body part damage modifier. - @param PART_NUM: Use HIT_# define for hit part number - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ +/******************************************************************************* + Hit Chr body part with item damage, play reaction to hit location +******************************************************************************** + @exception: Does NOT trigger items fireing sfx. + @param ITEM_NUM: Item damage uses body part damage modifier. + @param PART_NUM: Use HIT_# define for hit part number + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define HitMeWithItem(PART_NUM, ITEM_NUM) \ - HitChrWithItem(CHR_SELF, PART_NUM, ITEM_NUM) + HitChrWithItem(CHR_SELF, PART_NUM, ITEM_NUM) + - # 1449 "src/aicommands.def" //============================================================================== -//## CHR HIT CHR BODY PART WITH HELD ITEM +//## CHR HIT CHR BODY PART WITH HELD ITEM //============================================================================== - -/******************************************************************************* - Chr hits Target chrs body part with held item, play reaction to hit location -******************************************************************************** - @exception: Does NOT trigger items fireing sfx or Chr's firing animation - @param ITEM_NUM: Item damage uses body part damage modifier. - @param PART_NUM: Use HIT_# define for hit part number - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ + +/******************************************************************************* + Chr hits Target chrs body part with held item, play reaction to hit location +******************************************************************************** + @exception: Does NOT trigger items fireing sfx or Chr's firing animation + @param ITEM_NUM: Item damage uses body part damage modifier. + @param PART_NUM: Use HIT_# define for hit part number + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define ChrHitChr(CHR_NUM, CHR_NUM_TARGET, PART_NUM) \ AI_ChrHitChr , \ CHR_NUM , \ CHR_NUM_TARGET , \ - PART_NUM , - -#define AI_ChrHitChr_LENGTH (AICMDSIZE +1 +1 +1 ) + PART_NUM , + +#define AI_ChrHitChr_LENGTH (AICMDSIZE +1 +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Chr hits Target chrs body part with held item, play reaction to hit location -******************************************************************************** - @exception: Does NOT trigger items fireing sfx or Chr's firing animation - @param ITEM_NUM: Item damage uses body part damage modifier. - @param PART_NUM: Use HIT_# define for hit part number - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ +/******************************************************************************* + Chr hits Target chrs body part with held item, play reaction to hit location +******************************************************************************** + @exception: Does NOT trigger items fireing sfx or Chr's firing animation + @param ITEM_NUM: Item damage uses body part damage modifier. + @param PART_NUM: Use HIT_# define for hit part number + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define ChrHitMe(CHR_NUM, PART_NUM) \ - ChrHitChr(CHR_NUM, CHR_SELF, PART_NUM) + ChrHitChr(CHR_NUM, CHR_SELF, PART_NUM) + - # 1515 "src/aicommands.def" -/******************************************************************************* - Chr hits Target chrs body part with held item, play reaction to hit location -******************************************************************************** - @exception: Does NOT trigger items fireing sfx or Chr's firing animation - @param ITEM_NUM: Item damage uses body part damage modifier. - @param PART_NUM: Use HIT_# define for hit part number - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ +/******************************************************************************* + Chr hits Target chrs body part with held item, play reaction to hit location +******************************************************************************** + @exception: Does NOT trigger items fireing sfx or Chr's firing animation + @param ITEM_NUM: Item damage uses body part damage modifier. + @param PART_NUM: Use HIT_# define for hit part number + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IHitChr(CHR_NUM_TARGET, PART_NUM) \ - ChrHitChr(CHR_SELF, CHR_NUM_TARGET, PART_NUM) + ChrHitChr(CHR_SELF, CHR_NUM_TARGET, PART_NUM) + - # 1519 "src/aicommands.def" //============================================================================== -//## GUARD TRY THROWING GRENADE +//## GUARD TRY THROWING GRENADE //============================================================================== - -/******************************************************************************* - Try getting me to throw a grenade at Bond -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: A random number is generated and compared against chr->grenadeprob, - if number is less than grenadeprob throw grenade and Goto LABEL, - else do nothing. - Chr->grenadeprob default is 0 - to change use setup - object 12 or GUARD_SET_GRENADE_PROBABILITY -*******************************************************************************/ + +/******************************************************************************* + Try getting me to throw a grenade at Bond +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: A random number is generated and compared against chr->grenadeprob, + if number is less than grenadeprob throw grenade and Goto LABEL, + else do nothing. + Chr->grenadeprob default is 0 - to change use setup + object 12 or GUARD_SET_GRENADE_PROBABILITY +*******************************************************************************/ #define TRYThrowingGrenade(GOTOLABEL) \ AI_TRYThrowingGrenade , \ - GOTOLABEL , - -#define AI_TRYThrowingGrenade_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYThrowingGrenade_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY DROPPING ITEM +//## GUARD TRY DROPPING ITEM //============================================================================== - -/******************************************************************************* - Try spawning and drop item with Prop model -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Dropped item uses item type (08) with model number - - They can be picked up. - Grenade/Mines will be dropped live - this is used for cradle - (ailist #0411) -*******************************************************************************/ + +/******************************************************************************* + Try spawning and drop item with Prop model +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Dropped item uses item type (08) with model number - + They can be picked up. + Grenade/Mines will be dropped live - this is used for cradle + (ailist #0411) +*******************************************************************************/ #define TRYDroppingItem(PROP_NUM, ITEM_NUM, GOTOLABEL) \ AI_TRYDroppingItem , \ CharArrayFrom16(PROP_NUM) , \ ITEM_NUM , \ - GOTOLABEL , - -#define AI_TRYDroppingItem_LENGTH (AICMDSIZE +2 +1 +1 ) + GOTOLABEL , + +#define AI_TRYDroppingItem_LENGTH (AICMDSIZE +2 +1 +1 ) + - //============================================================================== -//## GUARD RUNS TO PAD +//## GUARD RUNS TO PAD //============================================================================== - -/******************************************************************************* - Makes me Run to pad -******************************************************************************** - @param 16bit PAD ID -*******************************************************************************/ + +/******************************************************************************* + Makes me Run to pad +******************************************************************************** + @param 16bit PAD ID +*******************************************************************************/ #define RunToPad(PAD) \ AI_RunToPad , \ - CharArrayFrom16(PAD) , - -#define AI_RunToPad_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(PAD) , + +#define AI_RunToPad_LENGTH (AICMDSIZE +2 ) + - //============================================================================== -//## GUARD RUNS TO PAD PRESET +//## GUARD RUNS TO PAD PRESET //============================================================================== - -/******************************************************************************* - Makes me Run to my Preset Pad -*******************************************************************************/ + +/******************************************************************************* + Makes me Run to my Preset Pad +*******************************************************************************/ #define RunToPadPreset() \ - AI_RunToPadPreset , - -#define AI_RunToPadPreset_LENGTH (AICMDSIZE ) + AI_RunToPadPreset , + +#define AI_RunToPadPreset_LENGTH (AICMDSIZE ) + - # 1686 "src/aicommands.def" //============================================================================== -//## GUARD WALKS TO PAD +//## GUARD WALKS TO PAD //============================================================================== - -/******************************************************************************* - Makes me walk to pad -******************************************************************************** - @param 16bit PAD ID -*******************************************************************************/ + +/******************************************************************************* + Makes me walk to pad +******************************************************************************** + @param 16bit PAD ID +*******************************************************************************/ #define WalkToPad(PAD) \ AI_WalkToPad , \ - CharArrayFrom16(PAD) , - -#define AI_WalkToPad_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(PAD) , + +#define AI_WalkToPad_LENGTH (AICMDSIZE +2 ) + - //============================================================================== -//## GUARD SPRINTS TO PAD +//## GUARD SPRINTS TO PAD //============================================================================== - -/******************************************************************************* - Makes me Sprint to pad - dont ask me to do this too long -******************************************************************************** - @param 16bit PAD ID -*******************************************************************************/ + +/******************************************************************************* + Makes me Sprint to pad - dont ask me to do this too long +******************************************************************************** + @param 16bit PAD ID +*******************************************************************************/ #define SprintToPad(PAD) \ AI_SprintToPad , \ - CharArrayFrom16(PAD) , - -#define AI_SprintToPad_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(PAD) , + +#define AI_SprintToPad_LENGTH (AICMDSIZE +2 ) + - //============================================================================== -//## GUARD START PATROL +//## GUARD START PATROL //============================================================================== - -/******************************************************************************* - Makes me walk a predefined path within setup -******************************************************************************** - @exception: Usually paired with GAILIST_SIMPLE_GUARD_DEAF - or GAILIST_SIMPLE_GUARD -*******************************************************************************/ + +/******************************************************************************* + Makes me walk a predefined path within setup +******************************************************************************** + @exception: Usually paired with GAILIST_SIMPLE_GUARD_DEAF + or GAILIST_SIMPLE_GUARD +*******************************************************************************/ #define StartPatrol(PATH_NUM) \ AI_StartPatrol , \ - PATH_NUM , - -#define AI_StartPatrol_LENGTH (AICMDSIZE +1 ) + PATH_NUM , + +#define AI_StartPatrol_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD SURRENDERS +//## GUARD SURRENDERS //============================================================================== - -/******************************************************************************* - Makes me surrender and drop all attached and held items -******************************************************************************** - @exception: Will NOT drop items embedded within guard -*******************************************************************************/ + +/******************************************************************************* + Makes me surrender and drop all attached and held items +******************************************************************************** + @exception: Will NOT drop items embedded within guard +*******************************************************************************/ #define Surrender() \ - AI_Surrender , - -#define AI_Surrender_LENGTH (AICMDSIZE ) + AI_Surrender , + +#define AI_Surrender_LENGTH (AICMDSIZE ) + - # 1829 "src/aicommands.def" //============================================================================== -//## GUARD REMOVE FADE +//## GUARD REMOVE FADE //============================================================================== - -/******************************************************************************* - Makes me fade away - fade time is 90 ticks (1.5 seconds). When - the fade finishes, automatically remove guard -******************************************************************************** - @exception: Guard collision is ignored during fade - Will NOT drop items -*******************************************************************************/ + +/******************************************************************************* + Makes me fade away - fade time is 90 ticks (1.5 seconds). When + the fade finishes, automatically remove guard +******************************************************************************** + @exception: Guard collision is ignored during fade + Will NOT drop items +*******************************************************************************/ #define RemoveMe() \ - AI_RemoveMe , - -#define AI_RemoveMe_LENGTH (AICMDSIZE ) + AI_RemoveMe , + +#define AI_RemoveMe_LENGTH (AICMDSIZE ) + - # 1865 "src/aicommands.def" //============================================================================== -//## CHR REMOVE INSTANT +//## CHR REMOVE INSTANT //============================================================================== - -/******************************************************************************* - Instantly remove CHR_NUM unlike RemoveMe -******************************************************************************** - @param CHR_NUM: ID of Chr (0-255) - @exception: Will NOT drop items -*******************************************************************************/ + +/******************************************************************************* + Instantly remove CHR_NUM unlike RemoveMe +******************************************************************************** + @param CHR_NUM: ID of Chr (0-255) + @exception: Will NOT drop items +*******************************************************************************/ #define ChrRemoveInstant(CHR_NUM) \ AI_ChrRemoveInstant , \ - CHR_NUM , - -#define AI_ChrRemoveInstant_LENGTH (AICMDSIZE +1 ) + CHR_NUM , + +#define AI_ChrRemoveInstant_LENGTH (AICMDSIZE +1 ) + - //POLYMORPHS -/******************************************************************************* - Instantly remove me unlike RemoveMe -******************************************************************************** - @exception: Will NOT drop items -*******************************************************************************/ +/******************************************************************************* + Instantly remove me unlike RemoveMe +******************************************************************************** + @exception: Will NOT drop items +*******************************************************************************/ #define RemoveMeInstantly() \ - ChrRemoveInstant(CHR_SELF) + ChrRemoveInstant(CHR_SELF) + - # 1920 "src/aicommands.def" //============================================================================== -//## GUARD TRY TRIGGERING ALARM AT PAD +//## GUARD TRY TRIGGERING ALARM AT PAD //============================================================================== - -/******************************************************************************* - Try to activate alarm assigned to pad -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Does NOT care what object type is at pad, as long as the object - is NOT destroyed. - Checks if guard is alive before activating alarm. - When triggering alarm, guard will be set to state ACT_STARTALARM - and play animation -*******************************************************************************/ + +/******************************************************************************* + Try to activate alarm assigned to pad +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Does NOT care what object type is at pad, as long as the object + is NOT destroyed. + Checks if guard is alive before activating alarm. + When triggering alarm, guard will be set to state ACT_STARTALARM + and play animation +*******************************************************************************/ #define TRYTriggeringAlarmAtPad(PAD, GOTOLABEL) \ AI_TRYTriggeringAlarmAtPad , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_TRYTriggeringAlarmAtPad_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_TRYTriggeringAlarmAtPad_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## ALARM ON +//## ALARM ON //============================================================================== - -/******************************************************************************* - Activates alarm -*******************************************************************************/ + +/******************************************************************************* + Activates alarm +*******************************************************************************/ #define AlarmOn() \ - AI_AlarmOn , - -#define AI_AlarmOn_LENGTH (AICMDSIZE ) + AI_AlarmOn , + +#define AI_AlarmOn_LENGTH (AICMDSIZE ) + - # 1997 "src/aicommands.def" //============================================================================== -//## ALARM OFF +//## ALARM OFF //============================================================================== - -/******************************************************************************* - Deactivates alarm -*******************************************************************************/ + +/******************************************************************************* + Deactivates alarm +*******************************************************************************/ #define AlarmOff() \ - AI_AlarmOff , - -#define AI_AlarmOff_LENGTH (AICMDSIZE ) + AI_AlarmOff , + +#define AI_AlarmOff_LENGTH (AICMDSIZE ) + - # 2027 "src/aicommands.def" //============================================================================== -//## REMOVED COMMAND27 +//## REMOVED COMMAND27 //============================================================================== - -/******************************************************************************* - Try running from Bond -******************************************************************************** - @return Continue execution from LABEL if successful -*******************************************************************************/ + +/******************************************************************************* + Try running from Bond +******************************************************************************** + @return Continue execution from LABEL if successful +*******************************************************************************/ #define TRYRunFromBond(GOTOLABEL) \ AI_TRYRunFromBond , \ - GOTOLABEL , - -#define AI_TRYRunFromBond_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYRunFromBond_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY RUNNING TO BOND POSITION +//## GUARD TRY RUNNING TO BOND POSITION //============================================================================== - -/******************************************************************************* - Try getting me to Run to Bond -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Guard has died or Bond is at an unreachable area (no navigation - pads in area) -*******************************************************************************/ + +/******************************************************************************* + Try getting me to Run to Bond +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Guard has died or Bond is at an unreachable area (no navigation + pads in area) +*******************************************************************************/ #define TRYRunToBond(GOTOLABEL) \ AI_TRYRunToBond , \ - GOTOLABEL , - -#define AI_TRYRunToBond_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYRunToBond_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY WALKING TO BOND POSITION +//## GUARD TRY WALKING TO BOND POSITION //============================================================================== - -/******************************************************************************* - Try getting me to walk to Bond -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Guard has died or Bond is at an unreachable area (no navigation - pads in area) -*******************************************************************************/ + +/******************************************************************************* + Try getting me to walk to Bond +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Guard has died or Bond is at an unreachable area (no navigation + pads in area) +*******************************************************************************/ #define TRYWalkToBond(GOTOLABEL) \ AI_TRYWalkToBond , \ - GOTOLABEL , - -#define AI_TRYWalkToBond_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYWalkToBond_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY SPRINTNING TO BOND POSITION +//## GUARD TRY SPRINTNING TO BOND POSITION //============================================================================== - -/******************************************************************************* - Try getting me to Sprint to Bond -******************************************************************************** - @return Continue execution from LABEL if successful - @exception: Guard has died or Bond is at an unreachable area (no navigation - pads in area) -*******************************************************************************/ + +/******************************************************************************* + Try getting me to Sprint to Bond +******************************************************************************** + @return Continue execution from LABEL if successful + @exception: Guard has died or Bond is at an unreachable area (no navigation + pads in area) +*******************************************************************************/ #define TRYSprintToBond(GOTOLABEL) \ AI_TRYSprintToBond , \ - GOTOLABEL , - -#define AI_TRYSprintToBond_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYSprintToBond_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## REMOVED COMMAND2B +//## REMOVED COMMAND2B //============================================================================== - -/******************************************************************************* - Try finding cover -******************************************************************************** - @return Continue execution from LABEL if successful -*******************************************************************************/ + +/******************************************************************************* + Try finding cover +******************************************************************************** + @return Continue execution from LABEL if successful +*******************************************************************************/ #define TRYFindCover(GOTOLABEL) \ AI_TRYFindCover , \ - GOTOLABEL , - -#define AI_TRYFindCover_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_TRYFindCover_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD TRY RUNNING TO CHR POSITION +//## GUARD TRY RUNNING TO CHR POSITION //============================================================================== - -/******************************************************************************* - Try getting me to Run to CHR_NUM -******************************************************************************** - @return Continue execution from LABEL if successful - @param CHR_NUM: ID of Chr (0-255) - @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation - pads in area) or CHR_NUM is dead -*******************************************************************************/ + +/******************************************************************************* + Try getting me to Run to CHR_NUM +******************************************************************************** + @return Continue execution from LABEL if successful + @param CHR_NUM: ID of Chr (0-255) + @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation + pads in area) or CHR_NUM is dead +*******************************************************************************/ #define TRYRunToChr(CHR_NUM, GOTOLABEL) \ AI_TRYRunToChr , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_TRYRunToChr_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_TRYRunToChr_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Try getting me to Run to CHR_NUM -******************************************************************************** - @return Continue execution from LABEL if successful - @param CHR_NUM: ID of Chr (0-255) - @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation - pads in area) or CHR_NUM is dead -*******************************************************************************/ +/******************************************************************************* + Try getting me to Run to CHR_NUM +******************************************************************************** + @return Continue execution from LABEL if successful + @param CHR_NUM: ID of Chr (0-255) + @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation + pads in area) or CHR_NUM is dead +*******************************************************************************/ #define TRYRunToPresetChr(GOTOLABEL) \ - TRYRunToChr(CHR_PRESET, GOTOLABEL) + TRYRunToChr(CHR_PRESET, GOTOLABEL) + - # 2285 "src/aicommands.def" //============================================================================== -//## GUARD TRY WALKING TO CHR POSITION +//## GUARD TRY WALKING TO CHR POSITION //============================================================================== - -/******************************************************************************* - Try getting me to walk to CHR_NUM -******************************************************************************** - @return Continue execution from LABEL if successful - @param CHR_NUM: ID of Chr (0-255) - @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation - pads in area) or CHR_NUM is dead -*******************************************************************************/ + +/******************************************************************************* + Try getting me to walk to CHR_NUM +******************************************************************************** + @return Continue execution from LABEL if successful + @param CHR_NUM: ID of Chr (0-255) + @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation + pads in area) or CHR_NUM is dead +*******************************************************************************/ #define TRYWalkToChr(CHR_NUM, GOTOLABEL) \ AI_TRYWalkToChr , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_TRYWalkToChr_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_TRYWalkToChr_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Try getting me to walk to CHR_NUM -******************************************************************************** - @return Continue execution from LABEL if successful - @param CHR_NUM: ID of Chr (0-255) - @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation - pads in area) or CHR_NUM is dead -*******************************************************************************/ +/******************************************************************************* + Try getting me to walk to CHR_NUM +******************************************************************************** + @return Continue execution from LABEL if successful + @param CHR_NUM: ID of Chr (0-255) + @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation + pads in area) or CHR_NUM is dead +*******************************************************************************/ #define TRYWalkToPresetChr(GOTOLABEL) \ - TRYWalkToChr(CHR_PRESET, GOTOLABEL) + TRYWalkToChr(CHR_PRESET, GOTOLABEL) + - # 2334 "src/aicommands.def" //============================================================================== -//## GUARD TRY SPRINTNING TO CHR POSITION +//## GUARD TRY SPRINTNING TO CHR POSITION //============================================================================== - -/******************************************************************************* - Try getting me to Sprint to CHR_NUM -******************************************************************************** - @return Continue execution from LABEL if successful - @param CHR_NUM: ID of Chr (0-255) - @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation - pads in area) or CHR_NUM is dead -*******************************************************************************/ + +/******************************************************************************* + Try getting me to Sprint to CHR_NUM +******************************************************************************** + @return Continue execution from LABEL if successful + @param CHR_NUM: ID of Chr (0-255) + @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation + pads in area) or CHR_NUM is dead +*******************************************************************************/ #define TRYSprintToChr(CHR_NUM, GOTOLABEL) \ AI_TRYSprintToChr , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_TRYSprintToChr_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_TRYSprintToChr_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Try getting me to Sprint to CHR_NUM -******************************************************************************** - @return Continue execution from LABEL if successful - @param CHR_NUM: ID of Chr (0-255) - @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation - pads in area) or CHR_NUM is dead -*******************************************************************************/ +/******************************************************************************* + Try getting me to Sprint to CHR_NUM +******************************************************************************** + @return Continue execution from LABEL if successful + @param CHR_NUM: ID of Chr (0-255) + @exception: Guard has died or CHR_NUM is at an unreachable area (no navigation + pads in area) or CHR_NUM is dead +*******************************************************************************/ #define TRYSprintToPresetChr(GOTOLABEL) \ - TRYSprintToChr(CHR_PRESET, GOTOLABEL) + TRYSprintToChr(CHR_PRESET, GOTOLABEL) + - # 2383 "src/aicommands.def" //============================================================================== -//## IF GUARD HAS STOPPED MOVING +//## IF GUARD HAS STOPPED MOVING //============================================================================== - -/******************************************************************************* - Have I stopped moving? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Check if guard is NOT looking for Bond or if guard has finished - moving to destination -*******************************************************************************/ + +/******************************************************************************* + Have I stopped moving? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Check if guard is NOT looking for Bond or if guard has finished + moving to destination +*******************************************************************************/ #define IFImOnPatrolOrStopped(GOTOLABEL) \ AI_IFImOnPatrolOrStopped , \ - GOTOLABEL , - -#define AI_IFImOnPatrolOrStopped_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFImOnPatrolOrStopped_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF CHR DYING OR DEAD +//## IF CHR DYING OR DEAD //============================================================================== - -/******************************************************************************* - Is CHR_NUM dying or dead? -******************************************************************************** - @param CHR_NUM: ID of Chr (0-255) - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + Is CHR_NUM dying or dead? +******************************************************************************** + @param CHR_NUM: ID of Chr (0-255) + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFChrDyingOrDead(CHR_NUM, GOTOLABEL) \ AI_IFChrDyingOrDead , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_IFChrDyingOrDead_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFChrDyingOrDead_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is CHR_NUM dying or dead? -******************************************************************************** - @param CHR_NUM: ID of Chr (0-255) - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + Is CHR_NUM dying or dead? +******************************************************************************** + @param CHR_NUM: ID of Chr (0-255) + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFImDyingOrDead(GOTOLABEL) \ - IFChrDyingOrDead(CHR_SELF, GOTOLABEL) + IFChrDyingOrDead(CHR_SELF, GOTOLABEL) + - # 2475 "src/aicommands.def" //============================================================================== -//## IF CHR DOES NOT EXIST +//## IF CHR DOES NOT EXIST //============================================================================== - -/******************************************************************************* - Does CHR_NUM NOT exist? (died and faded/not spawned) -******************************************************************************** - @param CHR_NUM: ID of Chr (0-255) - @return Continue execution from LABEL if TRUE - @exception: This command is used to check if chr has finished dying animation - and faded away, or chr num is free -*******************************************************************************/ + +/******************************************************************************* + Does CHR_NUM NOT exist? (died and faded/not spawned) +******************************************************************************** + @param CHR_NUM: ID of Chr (0-255) + @return Continue execution from LABEL if TRUE + @exception: This command is used to check if chr has finished dying animation + and faded away, or chr num is free +*******************************************************************************/ #define IFChrDoesNotExist(CHR_NUM, GOTOLABEL) \ AI_IFChrDoesNotExist , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_IFChrDoesNotExist_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFChrDoesNotExist_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Does CHR_NUM NOT exist? (died and faded/not spawned) -******************************************************************************** - @param CHR_NUM: ID of Chr (0-255) - @return Continue execution from LABEL if TRUE - @exception: This command is used to check if chr has finished dying animation - and faded away, or chr num is free -*******************************************************************************/ +/******************************************************************************* + Does CHR_NUM NOT exist? (died and faded/not spawned) +******************************************************************************** + @param CHR_NUM: ID of Chr (0-255) + @return Continue execution from LABEL if TRUE + @exception: This command is used to check if chr has finished dying animation + and faded away, or chr num is free +*******************************************************************************/ #define IFIDoNotExist(GOTOLABEL) \ - IFChrDoesNotExist(CHR_SELF, GOTOLABEL) + IFChrDoesNotExist(CHR_SELF, GOTOLABEL) + - # 2525 "src/aicommands.def" -/******************************************************************************* - Does CHR_NUM NOT exist? (died and faded/not spawned) -******************************************************************************** - @param CHR_NUM: ID of Chr (0-255) - @return Continue execution from LABEL if TRUE - @exception: This command is used to check if chr has finished dying animation - and faded away, or chr num is free -*******************************************************************************/ +/******************************************************************************* + Does CHR_NUM NOT exist? (died and faded/not spawned) +******************************************************************************** + @param CHR_NUM: ID of Chr (0-255) + @return Continue execution from LABEL if TRUE + @exception: This command is used to check if chr has finished dying animation + and faded away, or chr num is free +*******************************************************************************/ #define IFMyCloneDoesNotExist(GOTOLABEL) \ - IFChrDoesNotExist(CHR_CLONE, GOTOLABEL) + IFChrDoesNotExist(CHR_CLONE, GOTOLABEL) + - # 2530 "src/aicommands.def" //============================================================================== -//## IF GUARD SEES BOND +//## IF GUARD SEES BOND //============================================================================== - -/******************************************************************************* - Can I see Bond? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Uses chr->visionrange while checking for Bond. Once Bond has been - spotted, check if Bond and guard are within line of sight - (ignores facing direction). - injured guards will also set spotted Bond state (won't work with - invincible/armored guards). - If Bond breaks line of sight, do not Goto LABEL. If Bond has broken - line of sight for more than 10 seconds, reset spotted bond state. - When using with IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS, make - sure IF_GUARD_SEES_BOND takes priority over - IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS -*******************************************************************************/ + +/******************************************************************************* + Can I see Bond? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Uses chr->visionrange while checking for Bond. Once Bond has been + spotted, check if Bond and guard are within line of sight + (ignores facing direction). + injured guards will also set spotted Bond state (won't work with + invincible/armored guards). + If Bond breaks line of sight, do not Goto LABEL. If Bond has broken + line of sight for more than 10 seconds, reset spotted bond state. + When using with IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS, make + sure IF_GUARD_SEES_BOND takes priority over + IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS +*******************************************************************************/ #define IFISeeBond(GOTOLABEL) \ AI_IFISeeBond , \ - GOTOLABEL , - -#define AI_IFISeeBond_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFISeeBond_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## RANDOM GENERATE SEED +//## RANDOM GENERATE SEED //============================================================================== - -/******************************************************************************* - Generate a random byte and store to My/BG Random -******************************************************************************** - @exception: Random byte range is 00-FF (unsigned) -*******************************************************************************/ + +/******************************************************************************* + Generate a random byte and store to My/BG Random +******************************************************************************** + @exception: Random byte range is 00-FF (unsigned) +*******************************************************************************/ #define SetNewRandom() \ - AI_SetNewRandom , - -#define AI_SetNewRandom_LENGTH (AICMDSIZE ) + AI_SetNewRandom , + +#define AI_SetNewRandom_LENGTH (AICMDSIZE ) + - # 2613 "src/aicommands.def" //============================================================================== -//## IF RANDOM SEED LESS THAN +//## IF RANDOM SEED LESS THAN //============================================================================== - -/******************************************************************************* - Is My/BG Random Less Than BYTE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Compare is unsigned -*******************************************************************************/ + +/******************************************************************************* + Is My/BG Random Less Than BYTE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Compare is unsigned +*******************************************************************************/ #define IFRandomLessThan(BYTE, GOTOLABEL) \ AI_IFRandomLessThan , \ BYTE , \ - GOTOLABEL , - -#define AI_IFRandomLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFRandomLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is My/BG Random Less Than BYTE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Compare is unsigned -*******************************************************************************/ +/******************************************************************************* + Is My/BG Random Less Than BYTE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Compare is unsigned +*******************************************************************************/ #define IFNewRandomLessThan(BYTE, GOTOLABEL) \ - SetNewRandom()IFRandomLessThan(BYTE, GOTOLABEL) + SetNewRandom()IFRandomLessThan(BYTE, GOTOLABEL) + - # 2662 "src/aicommands.def" //============================================================================== -//## IF RANDOM SEED GREATER THAN +//## IF RANDOM SEED GREATER THAN //============================================================================== - -/******************************************************************************* - Is My/BG Random Greater Than BYTE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Compare is unsigned -*******************************************************************************/ + +/******************************************************************************* + Is My/BG Random Greater Than BYTE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Compare is unsigned +*******************************************************************************/ #define IFRandomGreaterThan(BYTE, GOTOLABEL) \ AI_IFRandomGreaterThan , \ BYTE , \ - GOTOLABEL , - -#define AI_IFRandomGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFRandomGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is My/BG Random Greater Than BYTE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Compare is unsigned -*******************************************************************************/ +/******************************************************************************* + Is My/BG Random Greater Than BYTE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Compare is unsigned +*******************************************************************************/ #define IFNewRandomGreaterThan(BYTE, GOTOLABEL) \ - SetNewRandom()IFRandomGreaterThan(BYTE, GOTOLABEL) + SetNewRandom()IFRandomGreaterThan(BYTE, GOTOLABEL) + - # 2711 "src/aicommands.def" //============================================================================== -//## IF ALARM IS ON UNUSED +//## IF ALARM IS ON UNUSED //============================================================================== - -/******************************************************************************* - Is alarm is activated and in range? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: This command works but is unused in retail game, use IF_ALARM_IS_ON - instead. -*******************************************************************************/ + +/******************************************************************************* + Is alarm is activated and in range? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: This command works but is unused in retail game, use IF_ALARM_IS_ON + instead. +*******************************************************************************/ #define IFICanHearAlarm(GOTOLABEL) \ AI_IFICanHearAlarm , \ - GOTOLABEL , - -#define AI_IFICanHearAlarm_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFICanHearAlarm_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF ALARM IS ON +//## IF ALARM IS ON //============================================================================== - -/******************************************************************************* - Is alarm is activated? -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + Is alarm is activated? +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFAlarmIsOn(GOTOLABEL) \ AI_IFAlarmIsOn , \ - GOTOLABEL , - -#define AI_IFAlarmIsOn_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFAlarmIsOn_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GAS IS LEAKING +//## IF GAS IS LEAKING //============================================================================== - -/******************************************************************************* - Is gas leaking? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Once gas leak event has started, always Goto LABEL -*******************************************************************************/ + +/******************************************************************************* + Is gas leaking? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Once gas leak event has started, always Goto LABEL +*******************************************************************************/ #define IFGasIsLeaking(GOTOLABEL) \ AI_IFGasIsLeaking , \ - GOTOLABEL , - -#define AI_IFGasIsLeaking_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFGasIsLeaking_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD HEARD BOND +//## IF GUARD HEARD BOND //============================================================================== - -/******************************************************************************* - Did I hear Bond fire a weapon? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Uses chr->hearingscale while listening for Bond. To check if Bond has - shot within the last 10 seconds, use - IFIHeardBondRecently -*******************************************************************************/ + +/******************************************************************************* + Did I hear Bond fire a weapon? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Uses chr->hearingscale while listening for Bond. To check if Bond has + shot within the last 10 seconds, use + IFIHeardBondRecently +*******************************************************************************/ #define IFIHeardBond(GOTOLABEL) \ AI_IFIHeardBond , \ - GOTOLABEL , - -#define AI_IFIHeardBond_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFIHeardBond_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD SEE ANOTHER GUARD SHOT +//## IF GUARD SEE ANOTHER GUARD SHOT //============================================================================== - -/******************************************************************************* - Did I see another chr shot? (by anyone) -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Guard friendly fire (if flagged) will also trigger Goto LABEL. - Checks if chr->chrseeshot is set to valid chrnum (not -1). - Does NOT work with shot invincible/armoured guards -*******************************************************************************/ + +/******************************************************************************* + Did I see another chr shot? (by anyone) +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Guard friendly fire (if flagged) will also trigger Goto LABEL. + Checks if chr->chrseeshot is set to valid chrnum (not -1). + Does NOT work with shot invincible/armoured guards +*******************************************************************************/ #define IFISeeSomeoneShot(GOTOLABEL) \ AI_IFISeeSomeoneShot , \ - GOTOLABEL , - -#define AI_IFISeeSomeoneShot_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFISeeSomeoneShot_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD SEE ANOTHER GUARD DIE +//## IF GUARD SEE ANOTHER GUARD DIE //============================================================================== - -/******************************************************************************* - Did I see another chr die? (for any reason) -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: When a chr in sight switches to ACT_DIE/ACT_DEAD, Goto LABEL. - Checks if chr->chrseedie is set to valid chrnum (not -1) -*******************************************************************************/ + +/******************************************************************************* + Did I see another chr die? (for any reason) +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: When a chr in sight switches to ACT_DIE/ACT_DEAD, Goto LABEL. + Checks if chr->chrseedie is set to valid chrnum (not -1) +*******************************************************************************/ #define IFISeeSomeoneDie(GOTOLABEL) \ AI_IFISeeSomeoneDie , \ - GOTOLABEL , - -#define AI_IFISeeSomeoneDie_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFISeeSomeoneDie_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD AND BOND WITHIN LINE OF SIGHT +//## IF GUARD AND BOND WITHIN LINE OF SIGHT //============================================================================== - -/******************************************************************************* - If I looked at Bond, could I walk in a straight line to him? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Uses Stand Tiles & ignores facing direction of Bond/guard. - If Prop/guard is in the way do not Goto LABEL. - Does NOT use chr->visionrangefor line of sight check. - Use IFISeeBond to check using chr->visionrange and - IFImOnScreen to account for Bond's view -*******************************************************************************/ + +/******************************************************************************* + If I looked at Bond, could I walk in a straight line to him? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Uses Stand Tiles & ignores facing direction of Bond/guard. + If Prop/guard is in the way do not Goto LABEL. + Does NOT use chr->visionrangefor line of sight check. + Use IFISeeBond to check using chr->visionrange and + IFImOnScreen to account for Bond's view +*******************************************************************************/ #define IFICouldSeeBond(GOTOLABEL) \ AI_IFICouldSeeBond , \ - GOTOLABEL , - -#define AI_IFICouldSeeBond_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFICouldSeeBond_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD AND BOND WITHIN PARTIAL LINE OF SIGHT +//## IF GUARD AND BOND WITHIN PARTIAL LINE OF SIGHT //============================================================================== - -/******************************************************************************* - If I looked at Bond, could I walk in a straight line to his Stan Tile? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Unused command, functions like above but only Goto LABEL if Bond is - half occluded by Stand Tiles (Neither blocked or within full view) -*******************************************************************************/ + +/******************************************************************************* + If I looked at Bond, could I walk in a straight line to his Stan Tile? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Unused command, functions like above but only Goto LABEL if Bond is + half occluded by Stand Tiles (Neither blocked or within full view) +*******************************************************************************/ #define IFICouldSeeBondsStan(GOTOLABEL) \ AI_IFICouldSeeBondsStan , \ - GOTOLABEL , - -#define AI_IFICouldSeeBondsStan_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFICouldSeeBondsStan_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD WAS SHOT WITHIN LAST 10 SECS +//## IF GUARD WAS SHOT WITHIN LAST 10 SECS //============================================================================== - -/******************************************************************************* - Was I shot (by anyone) or seen Bond within the last 10 seconds? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: This will NOT count guard as shot if they are invincible/have armour. - When using with IFISeeBond, make sure IFISeeBond takes - priority over IFIWasShotRecently. - To check if guard was hit/damaged use - IFChrWasDamagedSinceLastCheck/IFIWasShotRecently - instead, or check if flags CHRFLAG_WAS_DAMAGED/CHRFLAG_WAS_HIT are set - using IFMyFlagsAreSet OR IFChrFlagsAreSet -*******************************************************************************/ + +/******************************************************************************* + Was I shot (by anyone) or seen Bond within the last 10 seconds? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: This will NOT count guard as shot if they are invincible/have armour. + When using with IFISeeBond, make sure IFISeeBond takes + priority over IFIWasShotRecently. + To check if guard was hit/damaged use + IFChrWasDamagedSinceLastCheck/IFIWasShotRecently + instead, or check if flags CHRFLAG_WAS_DAMAGED/CHRFLAG_WAS_HIT are set + using IFMyFlagsAreSet OR IFChrFlagsAreSet +*******************************************************************************/ #define IFIWasShotRecently(GOTOLABEL) \ AI_IFIWasShotRecently , \ - GOTOLABEL , - -#define AI_IFIWasShotRecently_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFIWasShotRecently_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD HEARD BOND WITHIN LAST 10 SECS +//## IF GUARD HEARD BOND WITHIN LAST 10 SECS //============================================================================== - -/******************************************************************************* - Did I hear Bond fire weapon within the last 10 seconds? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Uses chr->hearingscale while listening for Bond. To check if Bond has - now fired weapon instead of within the last 10 seconds, use - IF_GUARD_HEARD_BOND -*******************************************************************************/ + +/******************************************************************************* + Did I hear Bond fire weapon within the last 10 seconds? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Uses chr->hearingscale while listening for Bond. To check if Bond has + now fired weapon instead of within the last 10 seconds, use + IF_GUARD_HEARD_BOND +*******************************************************************************/ #define IFIHeardBondRecently(GOTOLABEL) \ AI_IFIHeardBondRecently , \ - GOTOLABEL , - -#define AI_IFIHeardBondRecently_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFIHeardBondRecently_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD IN ROOM WITH CHR +//## IF GUARD IN ROOM WITH CHR //============================================================================== - -/******************************************************************************* - Am I in same room as chr? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ + +/******************************************************************************* + Am I in same room as chr? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFImInRoomWithChr(CHR_NUM, GOTOLABEL) \ AI_IFImInRoomWithChr , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_IFImInRoomWithChr_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFImInRoomWithChr_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF GUARD HAS NOT BEEN SEEN +//## IF GUARD HAS NOT BEEN SEEN //============================================================================== - -/******************************************************************************* - Have I been on-screen yet? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: When Bond has seen guard, it will add flag CHRFLAG_HAS_BEEN_ON_SCREEN - to chr->chrflags. The seen flag will be set for duration of level -*******************************************************************************/ + +/******************************************************************************* + Have I been on-screen yet? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: When Bond has seen guard, it will add flag CHRFLAG_HAS_BEEN_ON_SCREEN + to chr->chrflags. The seen flag will be set for duration of level +*******************************************************************************/ #define IFIveNotBeenSeen(GOTOLABEL) \ AI_IFIveNotBeenSeen , \ - GOTOLABEL , - -#define AI_IFIveNotBeenSeen_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFIveNotBeenSeen_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD IS ON SCREEN +//## IF GUARD IS ON SCREEN //============================================================================== - -/******************************************************************************* - Am I currently being rendered on screen? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Portals will affect this commands output. -*******************************************************************************/ + +/******************************************************************************* + Am I currently being rendered on screen? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Portals will affect this commands output. +*******************************************************************************/ #define IFImOnScreen(GOTOLABEL) \ AI_IFImOnScreen , \ - GOTOLABEL , - -#define AI_IFImOnScreen_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFImOnScreen_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD ROOM CONTAINING SELF IS ON SCREEN +//## IF GUARD ROOM CONTAINING SELF IS ON SCREEN //============================================================================== - -/******************************************************************************* - Is my room being rendered on screen? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Only checks if room is being rendered, not if Bond can see guard. - To check if guard is being rendered use IF_GUARD_IS_ON_SCREEN - instead. -*******************************************************************************/ + +/******************************************************************************* + Is my room being rendered on screen? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Only checks if room is being rendered, not if Bond can see guard. + To check if guard is being rendered use IF_GUARD_IS_ON_SCREEN + instead. +*******************************************************************************/ #define IFMyRoomIsOnScreen(GOTOLABEL) \ AI_IFMyRoomIsOnScreen , \ - GOTOLABEL , - -#define AI_IFMyRoomIsOnScreen_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFMyRoomIsOnScreen_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF ROOM CONTAINING PAD IS ON SCREEN +//## IF ROOM CONTAINING PAD IS ON SCREEN //============================================================================== - -/******************************************************************************* - Is the room containing PAD being rendered on screen? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Only checks if room is being rendered, not if Bond can see inside - room -*******************************************************************************/ + +/******************************************************************************* + Is the room containing PAD being rendered on screen? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Only checks if room is being rendered, not if Bond can see inside + room +*******************************************************************************/ #define IFRoomWithPadIsOnScreen(PAD, GOTOLABEL) \ AI_IFRoomWithPadIsOnScreen , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_IFRoomWithPadIsOnScreen_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFRoomWithPadIsOnScreen_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## IF GUARD IS TARGETED BY BOND +//## IF GUARD IS TARGETED BY BOND //============================================================================== - -/******************************************************************************* - Is Bond looking/aiming at me? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Also checks if player's crosshair is aiming at guard -*******************************************************************************/ + +/******************************************************************************* + Is Bond looking/aiming at me? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Also checks if player's crosshair is aiming at guard +*******************************************************************************/ #define IFImTargetedByBond(GOTOLABEL) \ AI_IFImTargetedByBond , \ - GOTOLABEL , - -#define AI_IFImTargetedByBond_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFImTargetedByBond_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD SHOT FROM BOND MISSED +//## IF GUARD SHOT FROM BOND MISSED //============================================================================== - -/******************************************************************************* - Did Bond's shot miss/land near me? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Command will sometimes Goto LABEL if guard was shot - use - IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS instead to check if - guard was shot recently (more consistent) -*******************************************************************************/ + +/******************************************************************************* + Did Bond's shot miss/land near me? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Command will sometimes Goto LABEL if guard was shot - use + IF_GUARD_WAS_SHOT_OR_SEEN_WITHIN_LAST_10_SECS instead to check if + guard was shot recently (more consistent) +*******************************************************************************/ #define IFBondMissedMe(GOTOLABEL) \ AI_IFBondMissedMe , \ - GOTOLABEL , - -#define AI_IFBondMissedMe_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFBondMissedMe_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD COUNTER CLOCKWISE DIRECTION TO BOND LESS THAN +//## IF GUARD COUNTER CLOCKWISE DIRECTION TO BOND LESS THAN //============================================================================== // Alternative Names? // aiIfTargetInFovLeft or aiIfBondOutOfFov - -/******************************************************************************* - Is my counter-clockwise angle to Bond Less Than ANGLE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param ANGLE: 0 - 255 Unsigned Integer - @exception: This is RAW byte command, use either Deg or Rad Varient -*******************************************************************************/ + +/******************************************************************************* + Is my counter-clockwise angle to Bond Less Than ANGLE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param ANGLE: 0 - 255 Unsigned Integer + @exception: This is RAW byte command, use either Deg or Rad Varient +*******************************************************************************/ #define IFMyAngleToBondLessThan(ANGLE, GOTOLABEL) \ AI_IFMyAngleToBondLessThan , \ ANGLE , \ - GOTOLABEL , - -#define AI_IFMyAngleToBondLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyAngleToBondLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is my counter-clockwise angle to Bond Less Than DEG? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DEG: Degrees - 00: Never TRUE, angle is always above 0 - 90: Bond must be within my 9-to-12 o'clock - 180: Bond must be on my left-side 6-to-12 o'clock - 270: Bond must be within my 3-to-12 o'clock - 360: Always TRUE - angle is always Less Than 360 -*******************************************************************************/ +/******************************************************************************* + Is my counter-clockwise angle to Bond Less Than DEG? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DEG: Degrees + 00: Never TRUE, angle is always above 0 + 90: Bond must be within my 9-to-12 o'clock + 180: Bond must be on my left-side 6-to-12 o'clock + 270: Bond must be within my 3-to-12 o'clock + 360: Always TRUE - angle is always Less Than 360 +*******************************************************************************/ #define IFMyAngleToBondLessThanDeg(DEG, GOTOLABEL) \ - IFMyAngleToBondLessThan(DEG2BYTE(DEG), GOTOLABEL) + IFMyAngleToBondLessThan(DEG2BYTE(DEG), GOTOLABEL) + - # 3519 "src/aicommands.def" -/******************************************************************************* - Is my counter-clockwise angle to Bond Less Than RAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param RAD: Radians - 00: Never TRUE, angle is always above 0 - PI: Bond must be on my left-side 6-to-12 o'clock - TAU: Always TRUE - angle is always Less Than TAU -*******************************************************************************/ +/******************************************************************************* + Is my counter-clockwise angle to Bond Less Than RAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param RAD: Radians + 00: Never TRUE, angle is always above 0 + PI: Bond must be on my left-side 6-to-12 o'clock + TAU: Always TRUE - angle is always Less Than TAU +*******************************************************************************/ #define IFMyAngleToBondLessThanRad(RAD, GOTOLABEL) \ - IFMyAngleToBondLessThan(RAD2BYTE(RAD), GOTOLABEL) + IFMyAngleToBondLessThan(RAD2BYTE(RAD), GOTOLABEL) + - # 3536 "src/aicommands.def" //============================================================================== -//## IF GUARD COUNTER CLOCKWISE DIRECTION TO BOND GREATER THAN +//## IF GUARD COUNTER CLOCKWISE DIRECTION TO BOND GREATER THAN //============================================================================== - -/******************************************************************************* - Is my counter-clockwise angle to Bond Greater Than ANGLE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param ANGLE: 0 - 255 Unsigned Integer - @exception: This is RAW byte command, use either Deg or Rad Varient -*******************************************************************************/ + +/******************************************************************************* + Is my counter-clockwise angle to Bond Greater Than ANGLE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param ANGLE: 0 - 255 Unsigned Integer + @exception: This is RAW byte command, use either Deg or Rad Varient +*******************************************************************************/ #define IFMyAngleToBondGreaterThan(ANGLE, GOTOLABEL) \ AI_IFMyAngleToBondGreaterThan , \ ANGLE , \ - GOTOLABEL , - -#define AI_IFMyAngleToBondGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyAngleToBondGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is my counter-clockwise angle to Bond Greater Than DEG? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DEG: Degrees - 00: Always TRUE, angle is always above 0 - 90: Bond must be within my 12-to-9 o'clock - 180: Bond must be on my right-side 12-to-6 o'clock - 270: Bond must be within my 12-to-3 o'clock - 360: Never TRUE - angle is always Less Than 360 -******************************************************************************/ +/******************************************************************************* + Is my counter-clockwise angle to Bond Greater Than DEG? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DEG: Degrees + 00: Always TRUE, angle is always above 0 + 90: Bond must be within my 12-to-9 o'clock + 180: Bond must be on my right-side 12-to-6 o'clock + 270: Bond must be within my 12-to-3 o'clock + 360: Never TRUE - angle is always Less Than 360 +******************************************************************************/ #define IFMyAngleToBondGreaterThanDeg(DEG, GOTOLABEL) \ - IFMyAngleToBondGreaterThan(DEG2BYTE(DEG), GOTOLABEL) + IFMyAngleToBondGreaterThan(DEG2BYTE(DEG), GOTOLABEL) + - # 3599 "src/aicommands.def" -/******************************************************************************* - Is my counter-clockwise angle to Bond Greater Than RAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param RAD: Radians - 00: Always TRUE, angle is always above 0 - PI: Bond must be on my right-side 6-to-12 o'clock - TAU: Never TRUE - angle is always Less Than TAU -*******************************************************************************/ +/******************************************************************************* + Is my counter-clockwise angle to Bond Greater Than RAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param RAD: Radians + 00: Always TRUE, angle is always above 0 + PI: Bond must be on my right-side 6-to-12 o'clock + TAU: Never TRUE - angle is always Less Than TAU +*******************************************************************************/ #define IFMyAngleToBondGreaterThanRad(RAD, GOTOLABEL) \ - IFMyAngleToBondGreaterThan(RAD2BYTE(RAD), GOTOLABEL) + IFMyAngleToBondGreaterThan(RAD2BYTE(RAD), GOTOLABEL) + - # 3616 "src/aicommands.def" //============================================================================== -//## IF GUARD COUNTER CLOCKWISE DIRECTION FROM BOND LESS THAN +//## IF GUARD COUNTER CLOCKWISE DIRECTION FROM BOND LESS THAN //============================================================================== - -/******************************************************************************* - Is my counter-clockwise angle from Bond Less Than ANGLE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param ANGLE: 0 - 255 Unsigned Integer - @exception: This is RAW byte command, use either Deg or Rad Varient -*******************************************************************************/ + +/******************************************************************************* + Is my counter-clockwise angle from Bond Less Than ANGLE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param ANGLE: 0 - 255 Unsigned Integer + @exception: This is RAW byte command, use either Deg or Rad Varient +*******************************************************************************/ #define IFMyAngleFromBondLessThan(ANGLE, GOTOLABEL) \ AI_IFMyAngleFromBondLessThan , \ ANGLE , \ - GOTOLABEL , - -#define AI_IFMyAngleFromBondLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyAngleFromBondLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is my counter-clockwise angle from Bond Less Than DEG? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DEG: Degrees - 00: Never TRUE, angle is always above 0 - 90: I must be within Bond's 9-to-12 o'clock - 180: I must be on Bond's left-side 6-to-12 o'clock - 270: I must be within Bond's 3-to-12 o'clock - 360: Always TRUE - angle is always Less Than 360 -*******************************************************************************/ +/******************************************************************************* + Is my counter-clockwise angle from Bond Less Than DEG? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DEG: Degrees + 00: Never TRUE, angle is always above 0 + 90: I must be within Bond's 9-to-12 o'clock + 180: I must be on Bond's left-side 6-to-12 o'clock + 270: I must be within Bond's 3-to-12 o'clock + 360: Always TRUE - angle is always Less Than 360 +*******************************************************************************/ #define IFMyAngleFromBondLessThanDeg(DEG, GOTOLABEL) \ - IFMyAngleFromBondLessThan(DEG2BYTE(DEG), GOTOLABEL) + IFMyAngleFromBondLessThan(DEG2BYTE(DEG), GOTOLABEL) + - # 3677 "src/aicommands.def" -/******************************************************************************* - Is my counter-clockwise angle from Bond Less Than RAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param RAD: Radians - 00: Never TRUE, angle is always above 0 - PI: Bond must be on my left-side 6-to-12 o'clock - TAU: Always TRUE - angle is always Less Than TAU -*******************************************************************************/ +/******************************************************************************* + Is my counter-clockwise angle from Bond Less Than RAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param RAD: Radians + 00: Never TRUE, angle is always above 0 + PI: Bond must be on my left-side 6-to-12 o'clock + TAU: Always TRUE - angle is always Less Than TAU +*******************************************************************************/ #define IFMyAngleFromBondLessThanRad(ANGLE, GOTOLABEL) \ - IFMyAngleFromBondLessThan(RAD2BYTE(ANGLE), GOTOLABEL) + IFMyAngleFromBondLessThan(RAD2BYTE(ANGLE), GOTOLABEL) + - # 3694 "src/aicommands.def" //============================================================================== -//## IF GUARD COUNTER CLOCKWISE ANGLE FROM BOND GREATER THAN +//## IF GUARD COUNTER CLOCKWISE ANGLE FROM BOND GREATER THAN //============================================================================== - -/******************************************************************************* - Is my counter-clockwise angle from Bond Greater Than ANGLE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param ANGLE: 0 - 255 Unsigned Integer - @exception: This is RAW byte command, use either Deg or Rad Varient -*******************************************************************************/ + +/******************************************************************************* + Is my counter-clockwise angle from Bond Greater Than ANGLE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param ANGLE: 0 - 255 Unsigned Integer + @exception: This is RAW byte command, use either Deg or Rad Varient +*******************************************************************************/ #define IFMyAngleFromBondGreaterThan(ANGLE, GOTOLABEL) \ AI_IFMyAngleFromBondGreaterThan , \ ANGLE , \ - GOTOLABEL , - -#define AI_IFMyAngleFromBondGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyAngleFromBondGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is my counter-clockwise angle from Bond Greater Than DEG? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DEG: Degrees - 00: Always TRUE, angle is always above 0 - 90: I must be within Bond's 12-to-9 o'clock - 180: I must be on Bond's right-side 12-to-6 o'clock - 270: I must be within Bond's 12-to-3 o'clock - 360: Never TRUE - angle is always Less Than 360 -*******************************************************************************/ +/******************************************************************************* + Is my counter-clockwise angle from Bond Greater Than DEG? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DEG: Degrees + 00: Always TRUE, angle is always above 0 + 90: I must be within Bond's 12-to-9 o'clock + 180: I must be on Bond's right-side 12-to-6 o'clock + 270: I must be within Bond's 12-to-3 o'clock + 360: Never TRUE - angle is always Less Than 360 +*******************************************************************************/ #define IFMyAngleFromBondGreaterThanDeg(DEG, GOTOLABEL) \ - IFMyAngleFromBondGreaterThan(DEG2BYTE(DEG), GOTOLABEL) + IFMyAngleFromBondGreaterThan(DEG2BYTE(DEG), GOTOLABEL) + - # 3755 "src/aicommands.def" -/******************************************************************************* - Is my counter-clockwise angle from Bond Greater Than RAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param RAD: Radians - 00: Always TRUE, angle is always above 0 - PI: I must be on Bond's right-side 12-to-6 o'clock - TAU: Never TRUE - angle is always Less Than TAU -*******************************************************************************/ +/******************************************************************************* + Is my counter-clockwise angle from Bond Greater Than RAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param RAD: Radians + 00: Always TRUE, angle is always above 0 + PI: I must be on Bond's right-side 12-to-6 o'clock + TAU: Never TRUE - angle is always Less Than TAU +*******************************************************************************/ #define IFMyAngleFromBondGreaterThanRad(ANGLE, GOTOLABEL) \ - IFMyAngleFromBondGreaterThan(RAD2BYTE(ANGLE), GOTOLABEL) + IFMyAngleFromBondGreaterThan(RAD2BYTE(ANGLE), GOTOLABEL) + - # 3772 "src/aicommands.def" //============================================================================== -//## IF GUARD DISTANCE TO BOND LESS THAN +//## IF GUARD DISTANCE TO BOND LESS THAN //============================================================================== - -/******************************************************************************* - Is my distance to Bond Less Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) -*******************************************************************************/ + +/******************************************************************************* + Is my distance to Bond Less Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +*******************************************************************************/ #define IFMyDistanceToBondLessThanDecimeter(DISTANCE, GOTOLABEL) \ AI_IFMyDistanceToBondLessThanDecimeter , \ CharArrayFrom16(DISTANCE) , \ - GOTOLABEL , - -#define AI_IFMyDistanceToBondLessThanDecimeter_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFMyDistanceToBondLessThanDecimeter_LENGTH (AICMDSIZE +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is my distance to Bond Less Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to bond -********************************************************************************/ +/******************************************************************************* + Is my distance to Bond Less Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to bond +********************************************************************************/ #define IFMyDistanceToBondLessThanMeter(DISTANCE, GOTOLABEL) \ - IFMyDistanceToBondLessThanDecimeter((u16)(DISTANCE * 10), GOTOLABEL) + IFMyDistanceToBondLessThanDecimeter((u16)(DISTANCE * 10), GOTOLABEL) + - # 3827 "src/aicommands.def" //============================================================================== -//## IF GUARD DISTANCE TO BOND GREATER THAN +//## IF GUARD DISTANCE TO BOND GREATER THAN //============================================================================== - -/******************************************************************************* - Is my distance to Bond Greater Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) -*******************************************************************************/ + +/******************************************************************************* + Is my distance to Bond Greater Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +*******************************************************************************/ #define IFMyDistanceToBondGreaterThanDecimeter(DISTANCE, GOTOLABEL) \ AI_IFMyDistanceToBondGreaterThanDecimeter , \ CharArrayFrom16(DISTANCE) , \ - GOTOLABEL , - -#define AI_IFMyDistanceToBondGreaterThanDecimeter_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFMyDistanceToBondGreaterThanDecimeter_LENGTH (AICMDSIZE +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is My distance to Bond Greater Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to Bond -********************************************************************************/ +/******************************************************************************* + Is My distance to Bond Greater Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to Bond +********************************************************************************/ #define IFMyDistanceToBondGreaterThanMeter(DISTANCE, GOTOLABEL) \ - IFMyDistanceToBondGreaterThanDecimeter((u16)(DISTANCE * 10), GOTOLABEL) + IFMyDistanceToBondGreaterThanDecimeter((u16)(DISTANCE * 10), GOTOLABEL) + - # 3883 "src/aicommands.def" //============================================================================== -//## IF CHR DISTANCE TO PAD LESS THAN +//## IF CHR DISTANCE TO PAD LESS THAN //============================================================================== - -/******************************************************************************* - Is My/Chr distance to PAD Less Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ + +/******************************************************************************* + Is My/Chr distance to PAD Less Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFChrDistanceToPadLessThanDecimeter(CHR_NUM, DISTANCE, PAD, GOTOLABEL) \ AI_IFChrDistanceToPadLessThanDecimeter , \ CHR_NUM , \ CharArrayFrom16(DISTANCE) , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_IFChrDistanceToPadLessThanDecimeter_LENGTH (AICMDSIZE +1 +2 +2 +1 ) + GOTOLABEL , + +#define AI_IFChrDistanceToPadLessThanDecimeter_LENGTH (AICMDSIZE +1 +2 +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is My/Chr distance to PAD Less Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ +/******************************************************************************* + Is My/Chr distance to PAD Less Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFMyDistanceToPadLessThanDecimeter(DISTANCE, PAD, GOTOLABEL) \ - IFChrDistanceToPadLessThanDecimeter(CHR_SELF, (DISTANCE), PAD, GOTOLABEL) + IFChrDistanceToPadLessThanDecimeter(CHR_SELF, (DISTANCE), PAD, GOTOLABEL) + - # 3934 "src/aicommands.def" -/******************************************************************************* - Is My/Chr distance to PAD Less Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to pad - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ +/******************************************************************************* + Is My/Chr distance to PAD Less Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to pad + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFChrDistanceToPadLessThanMeter(CHR_NUM, DISTANCE, PAD, GOTOLABEL) \ - IFChrDistanceToPadLessThanDecimeter(CHR_NUM, (u16)(DISTANCE * 10), PAD, GOTOLABEL) + IFChrDistanceToPadLessThanDecimeter(CHR_NUM, (u16)(DISTANCE * 10), PAD, GOTOLABEL) + - # 3949 "src/aicommands.def" -/******************************************************************************* - Is My/Chr distance to PAD Less Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to pad - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ +/******************************************************************************* + Is My/Chr distance to PAD Less Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to pad + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFMyDistanceToPadLessThanMeter(DISTANCE, PAD, GOTOLABEL) \ - IFChrDistanceToPadLessThanDecimeter(CHR_SELF, (u16)(DISTANCE * 10), PAD, GOTOLABEL) + IFChrDistanceToPadLessThanDecimeter(CHR_SELF, (u16)(DISTANCE * 10), PAD, GOTOLABEL) + - # 3953 "src/aicommands.def" //============================================================================== -//## IF CHR DISTANCE TO PAD GREATER THAN +//## IF CHR DISTANCE TO PAD GREATER THAN //============================================================================== - -/******************************************************************************* - Is My/Chr distance to PAD Greater Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ + +/******************************************************************************* + Is My/Chr distance to PAD Greater Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFChrDistanceToPadGreaterThanDecimeter(CHR_NUM, DISTANCE, PAD, GOTOLABEL) \ AI_IFChrDistanceToPadGreaterThanDecimeter , \ CHR_NUM , \ CharArrayFrom16(DISTANCE) , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_IFChrDistanceToPadGreaterThanDecimeter_LENGTH (AICMDSIZE +1 +2 +2 +1 ) + GOTOLABEL , + +#define AI_IFChrDistanceToPadGreaterThanDecimeter_LENGTH (AICMDSIZE +1 +2 +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is My/Chr distance to PAD Greater Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ +/******************************************************************************* + Is My/Chr distance to PAD Greater Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFMyDistanceToPadGreaterThanDecimeter(DISTANCE, PAD, GOTOLABEL) \ - IFChrDistanceToPadGreaterThanDecimeter(CHR_SELF, (DISTANCE), PAD, GOTOLABEL) + IFChrDistanceToPadGreaterThanDecimeter(CHR_SELF, (DISTANCE), PAD, GOTOLABEL) + - # 4004 "src/aicommands.def" -/******************************************************************************* - Is My/Chr distance to PAD Greater Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to pad - @param CHR_NUM: ID of Chr (0-255) -********************************************************************************/ +/******************************************************************************* + Is My/Chr distance to PAD Greater Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to pad + @param CHR_NUM: ID of Chr (0-255) +********************************************************************************/ #define IFChrDistanceToPadGreaterThanMeter(CHR_NUM, DISTANCE, PAD, GOTOLABEL) \ - IFChrDistanceToPadGreaterThanDecimeter(CHR_NUM, (u16)(DISTANCE * 10), PAD, GOTOLABEL) + IFChrDistanceToPadGreaterThanDecimeter(CHR_NUM, (u16)(DISTANCE * 10), PAD, GOTOLABEL) + - # 4018 "src/aicommands.def" -/******************************************************************************* - Is My/Chr distance to PAD Greater Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to pad - @param CHR_NUM: ID of Chr (0-255) -********************************************************************************/ +/******************************************************************************* + Is My/Chr distance to PAD Greater Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to pad + @param CHR_NUM: ID of Chr (0-255) +********************************************************************************/ #define IFMyDistanceToPadGreaterThanMeter(DISTANCE, PAD, GOTOLABEL) \ - IFChrDistanceToPadGreaterThanDecimeter(CHR_SELF, (u16)(DISTANCE * 10), PAD, GOTOLABEL) + IFChrDistanceToPadGreaterThanDecimeter(CHR_SELF, (u16)(DISTANCE * 10), PAD, GOTOLABEL) + - # 4022 "src/aicommands.def" //============================================================================== -//## IF GUARD DISTANCE TO CHR LESS THAN +//## IF GUARD DISTANCE TO CHR LESS THAN //============================================================================== - -/******************************************************************************* - Is my distance to CHR_NUM Less Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ + +/******************************************************************************* + Is my distance to CHR_NUM Less Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFMyDistanceToChrLessThanDecimeter(DISTANCE, CHR_NUM, GOTOLABEL) \ AI_IFMyDistanceToChrLessThanDecimeter , \ CharArrayFrom16(DISTANCE) , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_IFMyDistanceToChrLessThanDecimeter_LENGTH (AICMDSIZE +2 +1 +1 ) + GOTOLABEL , + +#define AI_IFMyDistanceToChrLessThanDecimeter_LENGTH (AICMDSIZE +2 +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is my distance to CHR_NUM Less Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to chr - @param CHR_NUM: ID of Chr (0-255) -********************************************************************************/ +/******************************************************************************* + Is my distance to CHR_NUM Less Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to chr + @param CHR_NUM: ID of Chr (0-255) +********************************************************************************/ #define IFMyDistanceToChrLessThanMeter(DISTANCE, CHR_NUM, GOTOLABEL) \ - IFMyDistanceToChrLessThanDecimeter((u16)(DISTANCE * 10), CHR_NUM, GOTOLABEL) + IFMyDistanceToChrLessThanDecimeter((u16)(DISTANCE * 10), CHR_NUM, GOTOLABEL) + - # 4080 "src/aicommands.def" //============================================================================== -//## IF GUARD DISTANCE TO CHR GREATER THAN +//## IF GUARD DISTANCE TO CHR GREATER THAN //============================================================================== - -/******************************************************************************* - Is my distance to CHR_NUM Greater Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) - @param CHR_NUM: ID of Chr (0-255) -********************************************************************************/ + +/******************************************************************************* + Is my distance to CHR_NUM Greater Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) + @param CHR_NUM: ID of Chr (0-255) +********************************************************************************/ #define IFMyDistanceToChrGreaterThanDecimeter(DISTANCE, CHR_NUM, GOTOLABEL) \ AI_IFMyDistanceToChrGreaterThanDecimeter , \ CharArrayFrom16(DISTANCE) , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_IFMyDistanceToChrGreaterThanDecimeter_LENGTH (AICMDSIZE +2 +1 +1 ) + GOTOLABEL , + +#define AI_IFMyDistanceToChrGreaterThanDecimeter_LENGTH (AICMDSIZE +2 +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is my distance to CHR_NUM Greater Than DISTANCE? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to chr - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ +/******************************************************************************* + Is my distance to CHR_NUM Greater Than DISTANCE? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to chr + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFMyDistanceToChrGreaterThanMeters(DISTANCE, CHR_NUM, GOTOLABEL) \ - IFMyDistanceToChrGreaterThanDecimeter((u16)(DISTANCE * 10), CHR_NUM, GOTOLABEL) + IFMyDistanceToChrGreaterThanDecimeter((u16)(DISTANCE * 10), CHR_NUM, GOTOLABEL) + - # 4138 "src/aicommands.def" //============================================================================== -//## GUARD TRY SETTING CHR PRESET TO GUARD WITHIN DISTANCE +//## GUARD TRY SETTING CHR PRESET TO GUARD WITHIN DISTANCE //============================================================================== - -/******************************************************************************* - Try setting my padpreset to the pad of the first Chr found within DISTANCE -******************************************************************************** - @return Continue execution from LABEL if a Chr is found - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) - @exception: Does NOT pick the closest found chr, but whoever was found first - within the DISTANCE argument. -*******************************************************************************/ + +/******************************************************************************* + Try setting my padpreset to the pad of the first Chr found within DISTANCE +******************************************************************************** + @return Continue execution from LABEL if a Chr is found + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) + @exception: Does NOT pick the closest found chr, but whoever was found first + within the DISTANCE argument. +*******************************************************************************/ #define TRYSettingMyPresetToChrWithinDistanceDecimeter(DISTANCE, GOTOLABEL) \ AI_TRYSettingMyPresetToChrWithinDistanceDecimeter , \ CharArrayFrom16(DISTANCE) , \ - GOTOLABEL , - -#define AI_TRYSettingMyPresetToChrWithinDistanceDecimeter_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_TRYSettingMyPresetToChrWithinDistanceDecimeter_LENGTH (AICMDSIZE +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Try setting my padpreset to the pad of the first Chr found within DISTANCE -******************************************************************************** - @return Continue execution from LABEL if a Chr is found - @param DISTANCE: Float, meters to test - @exception: Does NOT pick the closest found chr, but whoever was found first - within the DISTANCE argument. -*******************************************************************************/ +/******************************************************************************* + Try setting my padpreset to the pad of the first Chr found within DISTANCE +******************************************************************************** + @return Continue execution from LABEL if a Chr is found + @param DISTANCE: Float, meters to test + @exception: Does NOT pick the closest found chr, but whoever was found first + within the DISTANCE argument. +*******************************************************************************/ #define TRYSettingMyPresetToChrWithinDistanceMeters(DISTANCE, GOTOLABEL) \ - TRYSettingMyPresetToChrWithinDistanceDecimeter((u16)(DISTANCE * 10), GOTOLABEL) + TRYSettingMyPresetToChrWithinDistanceDecimeter((u16)(DISTANCE * 10), GOTOLABEL) + - # 4198 "src/aicommands.def" //============================================================================== -//## IF BOND DISTANCE TO PAD LESS THAN +//## IF BOND DISTANCE TO PAD LESS THAN //============================================================================== - -/******************************************************************************* - Is Bond within DISTANCE to PAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) -********************************************************************************/ + +/******************************************************************************* + Is Bond within DISTANCE to PAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +********************************************************************************/ #define IFBondDistanceToPadLessThanDecimeter(DISTANCE, PAD, GOTOLABEL) \ AI_IFBondDistanceToPadLessThanDecimeter , \ CharArrayFrom16(DISTANCE) , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_IFBondDistanceToPadLessThanDecimeter_LENGTH (AICMDSIZE +2 +2 +1 ) + GOTOLABEL , + +#define AI_IFBondDistanceToPadLessThanDecimeter_LENGTH (AICMDSIZE +2 +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is Bond within DISTANCE to PAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to pad -********************************************************************************/ +/******************************************************************************* + Is Bond within DISTANCE to PAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to pad +********************************************************************************/ #define IFBondDistanceToPadLessThanMeter(DISTANCE, PAD, GOTOLABEL) \ - IFBondDistanceToPadLessThanDecimeter((u16)(DISTANCE * 10), PAD, GOTOLABEL) + IFBondDistanceToPadLessThanDecimeter((u16)(DISTANCE * 10), PAD, GOTOLABEL) + - # 4255 "src/aicommands.def" //============================================================================== -//## IF BOND DISTANCE TO PAD GREATER THAN +//## IF BOND DISTANCE TO PAD GREATER THAN //============================================================================== - -/******************************************************************************* - Is Bond further than DISTANCE to PAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Integer, scale is 10 units per meter (decimeter) -********************************************************************************/ + +/******************************************************************************* + Is Bond further than DISTANCE to PAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Integer, scale is 10 units per meter (decimeter) +********************************************************************************/ #define IFBondDistanceToPadGreaterThanDecimeter(DISTANCE, PAD, GOTOLABEL) \ AI_IFBondDistanceToPadGreaterThanDecimeter , \ CharArrayFrom16(DISTANCE) , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_IFBondDistanceToPadGreaterThanDecimeter_LENGTH (AICMDSIZE +2 +2 +1 ) + GOTOLABEL , + +#define AI_IFBondDistanceToPadGreaterThanDecimeter_LENGTH (AICMDSIZE +2 +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Is Bond further than DISTANCE to PAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DISTANCE: Float, meters to pad -********************************************************************************/ +/******************************************************************************* + Is Bond further than DISTANCE to PAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DISTANCE: Float, meters to pad +********************************************************************************/ #define IFBondDistanceToPadGreaterThanMeter(DISTANCE, PAD, GOTOLABEL) \ - IFBondDistanceToPadGreaterThanDecimeter((u16)(DISTANCE * 10), PAD, GOTOLABEL) + IFBondDistanceToPadGreaterThanDecimeter((u16)(DISTANCE * 10), PAD, GOTOLABEL) + - # 4312 "src/aicommands.def" //============================================================================== -//## IF CHR IN ROOM WITH PAD +//## IF CHR IN ROOM WITH PAD //============================================================================== - -/******************************************************************************* - Is CHR_NUM in room with PAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) -*******************************************************************************/ + +/******************************************************************************* + Is CHR_NUM in room with PAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) +*******************************************************************************/ #define IFChrInRoomWithPad(CHR_NUM, PAD, GOTOLABEL) \ AI_IFChrInRoomWithPad , \ CHR_NUM , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_IFChrInRoomWithPad_LENGTH (AICMDSIZE +1 +2 +1 ) + GOTOLABEL , + +#define AI_IFChrInRoomWithPad_LENGTH (AICMDSIZE +1 +2 +1 ) + - //POLYMORPHS -/******************************************************************************* - Am I in room with PAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE -********************************************************************************/ +/******************************************************************************* + Am I in room with PAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE +********************************************************************************/ #define IFImInRoomWithPad(PAD, GOTOLABEL) \ - IFChrInRoomWithPad(CHR_SELF, PAD, GOTOLABEL) + IFChrInRoomWithPad(CHR_SELF, PAD, GOTOLABEL) + - # 4367 "src/aicommands.def" //============================================================================== -//## IF BOND IN ROOM WITH PAD +//## IF BOND IN ROOM WITH PAD //============================================================================== - -/******************************************************************************* - Is Bond in room with PAD? -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + Is Bond in room with PAD? +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFBondInRoomWithPad(PAD, GOTOLABEL) \ AI_IFBondInRoomWithPad , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_IFBondInRoomWithPad_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFBondInRoomWithPad_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## IF BOND COLLECTED OBJECT +//## IF BOND COLLECTED OBJECT //============================================================================== - -/******************************************************************************* - Did Bond collect Tagged Object OBJECT_TAG? -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + Did Bond collect Tagged Object OBJECT_TAG? +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFBondCollectedObject(OBJECT_TAG, GOTOLABEL) \ AI_IFBondCollectedObject , \ OBJECT_TAG , \ - GOTOLABEL , - -#define AI_IFBondCollectedObject_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFBondCollectedObject_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF ITEM IS STATIONARY WITHIN LEVEL +//## IF ITEM IS STATIONARY WITHIN LEVEL //============================================================================== - -/******************************************************************************* - Is item, if it exists, stationary? (not moving/in mid-air) -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Used to check if Bond threw an item in level. Also checks if item - was attached to an object (item is stationary within level). - Make sure IF_ITEM_IS_ATTACHED_TO_OBJECT takes priority over - IF_ITEM_IS_STATIONARY_WITHIN_LEVEL when using both commands -*******************************************************************************/ -#define IFItemIsStationaryWithinLevel(ITEM_NUM, GOTOLABEL) \ - AI_IFItemIsStationaryWithinLevel , \ + +/******************************************************************************* + Is item, if it exists, stationary? (not moving/in mid-air) +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Used to check if Bond threw an item in level. Also checks if item + was attached to an object (item is stationary within level). + Make sure IF_ITEM_IS_ATTACHED_TO_OBJECT takes priority over + IF_ITEM_IS_STATIONARY_WITHIN_LEVEL when using both commands +*******************************************************************************/ +#define IFKeyDropped(ITEM_NUM, GOTOLABEL) \ + AI_IFKeyDropped , \ ITEM_NUM , \ - GOTOLABEL , - -#define AI_IFItemIsStationaryWithinLevel_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFKeyDropped_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF ITEM IS ATTACHED TO OBJECT +//## IF ITEM IS ATTACHED TO OBJECT //============================================================================== - -/******************************************************************************* - Was ITEM_NUM thrown onto Tagged Object -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Used to check if Bond threw an item onto a tagged object. - If used with IFItemIsStationaryWithinLevel, make sure - IFItemIsAttachedToObject take priority over - IFItemIsStationaryWithinLevel -*******************************************************************************/ + +/******************************************************************************* + Was ITEM_NUM thrown onto Tagged Object +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Used to check if Bond threw an item onto a tagged object. + If used with IFItemIsStationaryWithinLevel, make sure + IFItemIsAttachedToObject take priority over + IFItemIsStationaryWithinLevel +*******************************************************************************/ #define IFItemIsAttachedToObject(ITEM_NUM, OBJECT_TAG, GOTOLABEL) \ AI_IFItemIsAttachedToObject , \ ITEM_NUM , \ OBJECT_TAG , \ - GOTOLABEL , - -#define AI_IFItemIsAttachedToObject_LENGTH (AICMDSIZE +1 +1 +1 ) + GOTOLABEL , + +#define AI_IFItemIsAttachedToObject_LENGTH (AICMDSIZE +1 +1 +1 ) + - //============================================================================== -//## IF BOND HAS ITEM EQUIPPED +//## IF BOND HAS ITEM EQUIPPED //============================================================================== - -/******************************************************************************* - If Bond has an item equipped (currently held) -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If Bond has an item equipped (currently held) +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFBondHasItemEquipped(ITEM_NUM, GOTOLABEL) \ AI_IFBondHasItemEquipped , \ ITEM_NUM , \ - GOTOLABEL , - -#define AI_IFBondHasItemEquipped_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFBondHasItemEquipped_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF OBJECT EXISTS +//## IF OBJECT EXISTS //============================================================================== - -/******************************************************************************* - If tagged object exists in level -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If tagged object exists in level +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFObjectExists(OBJECT_TAG, GOTOLABEL) \ AI_IFObjectExists , \ OBJECT_TAG , \ - GOTOLABEL , - -#define AI_IFObjectExists_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFObjectExists_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF OBJECT NOT DESTROYED +//## IF OBJECT NOT DESTROYED //============================================================================== - -/******************************************************************************* - If tagged object is not destroyed -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If tagged object is not destroyed +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFObjectNotDestroyed(OBJECT_TAG, GOTOLABEL) \ AI_IFObjectNotDestroyed , \ OBJECT_TAG , \ - GOTOLABEL , - -#define AI_IFObjectNotDestroyed_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFObjectNotDestroyed_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF OBJECT WAS ACTIVATED +//## IF OBJECT WAS ACTIVATED //============================================================================== - -/******************************************************************************* - If tagged object was activated since last check -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: When executed, it will clear tagged objects activated flag. - Only Bond and OBJECT_ACTIVATE can activate tagged objects. - Bond can NOT activate destroyed objects -*******************************************************************************/ + +/******************************************************************************* + If tagged object was activated since last check +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: When executed, it will clear tagged objects activated flag. + Only Bond and OBJECT_ACTIVATE can activate tagged objects. + Bond can NOT activate destroyed objects +*******************************************************************************/ #define IFObjectWasActivated(OBJECT_TAG, GOTOLABEL) \ AI_IFObjectWasActivated , \ OBJECT_TAG , \ - GOTOLABEL , - -#define AI_IFObjectWasActivated_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFObjectWasActivated_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF BOND USED GADGET ON OBJECT +//## IF BOND USED GADGET ON OBJECT //============================================================================== - -/******************************************************************************* - If Bond used a gadget item on a tagged object since last check -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Gadgets are a pre-defined list of items set to gadget flag: - ITEM_BOMBDEFUSER - ITEM_DATATHIEF - ITEM_DOORDECODER - ITEM_EXPLOSIVEFLOPPY - ITEM_DATTAPE -*******************************************************************************/ + +/******************************************************************************* + If Bond used a gadget item on a tagged object since last check +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Gadgets are a pre-defined list of items set to gadget flag: + ITEM_BOMBDEFUSER + ITEM_DATATHIEF + ITEM_DOORDECODER + ITEM_EXPLOSIVEFLOPPY + ITEM_DATTAPE +*******************************************************************************/ #define IFBondUsedGadgetOnObject(OBJECT_TAG, GOTOLABEL) \ AI_IFBondUsedGadgetOnObject , \ OBJECT_TAG , \ - GOTOLABEL , - -#define AI_IFBondUsedGadgetOnObject_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFBondUsedGadgetOnObject_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## OBJECT ACTIVATE +//## OBJECT ACTIVATE //============================================================================== - -/******************************************************************************* - Activate a tagged object -******************************************************************************** - @exception: Does NOT check if object has been destroyed -*******************************************************************************/ + +/******************************************************************************* + Activate a tagged object +******************************************************************************** + @exception: Does NOT check if object has been destroyed +*******************************************************************************/ #define ActivateObject(OBJECT_TAG) \ AI_ActivateObject , \ - OBJECT_TAG , - -#define AI_ActivateObject_LENGTH (AICMDSIZE +1 ) + OBJECT_TAG , + +#define AI_ActivateObject_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## DESTROY OBJECT +//## DESTROY OBJECT //============================================================================== // Canonical Name : destroyobj - -/******************************************************************************* - Destroy/explode a tagged object -******************************************************************************** - @exception: Only works if object is not destroyed. - Can NOT destroy invincible objects -*******************************************************************************/ + +/******************************************************************************* + Destroy/explode a tagged object +******************************************************************************** + @exception: Only works if object is not destroyed. + Can NOT destroy invincible objects +*******************************************************************************/ #define DestroyObject(OBJECT_TAG) \ AI_DestroyObject , \ - OBJECT_TAG , - -#define AI_DestroyObject_LENGTH (AICMDSIZE +1 ) + OBJECT_TAG , + +#define AI_DestroyObject_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## OBJECT DROP FROM CHR +//## OBJECT DROP FROM CHR //============================================================================== - -/******************************************************************************* - Drop tagged object held by/attached to chr -******************************************************************************** - @exception: Item must be held by or attached to a chr. - Embedded objects will not drop, only works with attached objects. - Props can be damaged on drop -*******************************************************************************/ + +/******************************************************************************* + Drop tagged object held by/attached to chr +******************************************************************************** + @exception: Item must be held by or attached to a chr. + Embedded objects will not drop, only works with attached objects. + Props can be damaged on drop +*******************************************************************************/ #define DropObject(OBJECT_TAG) \ AI_DropObject , \ - OBJECT_TAG , - -#define AI_DropObject_LENGTH (AICMDSIZE +1 ) + OBJECT_TAG , + +#define AI_DropObject_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## CHR DROP ALL CONCEALED ITEMS +//## CHR DROP ALL CONCEALED ITEMS //============================================================================== - -/******************************************************************************* - Make chr drop all concealed attachments -******************************************************************************** - @param CHR_NUM: ID of Chr (0-255) - @exception: Item must be attached to chr, to drop held items use - ChrDropAllHeldItems. - Embedded objects will not drop, only works with attached objects. - Props can be damaged on drop -*******************************************************************************/ + +/******************************************************************************* + Make chr drop all concealed attachments +******************************************************************************** + @param CHR_NUM: ID of Chr (0-255) + @exception: Item must be attached to chr, to drop held items use + ChrDropAllHeldItems. + Embedded objects will not drop, only works with attached objects. + Props can be damaged on drop +*******************************************************************************/ #define ChrDropAllConcealedItems(CHR_NUM) \ AI_ChrDropAllConcealedItems , \ - CHR_NUM , - -#define AI_ChrDropAllConcealedItems_LENGTH (AICMDSIZE +1 ) + CHR_NUM , + +#define AI_ChrDropAllConcealedItems_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## CHR DROP ALL HELD ITEMS +//## CHR DROP ALL HELD ITEMS //============================================================================== - -/******************************************************************************* - Make chr drop all held items -******************************************************************************** - @param CHR_NUM: ID of Chr (0-255) - @exception: Items must be held by chr, to drop concealed attachments use - ChrDropAllConcealedItems. - Embedded objects will not drop, only works with attached objects -*******************************************************************************/ + +/******************************************************************************* + Make chr drop all held items +******************************************************************************** + @param CHR_NUM: ID of Chr (0-255) + @exception: Items must be held by chr, to drop concealed attachments use + ChrDropAllConcealedItems. + Embedded objects will not drop, only works with attached objects +*******************************************************************************/ #define ChrDropAllHeldItems(CHR_NUM) \ AI_ChrDropAllHeldItems , \ - CHR_NUM , - -#define AI_ChrDropAllHeldItems_LENGTH (AICMDSIZE +1 ) + CHR_NUM , + +#define AI_ChrDropAllHeldItems_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## BOND COLLECT OBJECT +//## BOND COLLECT OBJECT //============================================================================== - -/******************************************************************************* - Force Bond to instantly collect a tagged object -******************************************************************************** - @exception: Does not trigger bottom text telling player they collected an item -*******************************************************************************/ + +/******************************************************************************* + Force Bond to instantly collect a tagged object +******************************************************************************** + @exception: Does not trigger bottom text telling player they collected an item +*******************************************************************************/ #define BondCollectObject(OBJECT_TAG) \ AI_BondCollectObject , \ - OBJECT_TAG , - -#define AI_BondCollectObject_LENGTH (AICMDSIZE +1 ) + OBJECT_TAG , + +#define AI_BondCollectObject_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## CHR EQUIP OBJECT +//## CHR EQUIP OBJECT //============================================================================== - -/******************************************************************************* - Makes chr hold tagged object -******************************************************************************** - @param CHR_NUM: ID of Chr (0-255) - @exception: If chrs hands are occupied, object will be equipped as a concealed - attachment, but if tagged object's GUNHAND flag is free on guard - then guard will equip weapon. - Tagged objects Prop MUST have a holding position command within - the model file -*******************************************************************************/ + +/******************************************************************************* + Makes chr hold tagged object +******************************************************************************** + @param CHR_NUM: ID of Chr (0-255) + @exception: If chrs hands are occupied, object will be equipped as a concealed + attachment, but if tagged object's GUNHAND flag is free on guard + then guard will equip weapon. + Tagged objects Prop MUST have a holding position command within + the model file +*******************************************************************************/ #define ChrEquipObject(OBJECT_TAG, CHR_NUM) \ AI_ChrEquipObject , \ OBJECT_TAG , \ - CHR_NUM , - -#define AI_ChrEquipObject_LENGTH (AICMDSIZE +1 +1 ) + CHR_NUM , + +#define AI_ChrEquipObject_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## Move Object (Canonical Name) +//## Move Object (Canonical Name) //============================================================================== //Canonical Name: MoveObj - -/******************************************************************************* - Move object to PAD -******************************************************************************** - @exception: If object is assigned to padextra type, then object scale will be - lost after moving to target pad. - Object will inherit rotation from target pad -*******************************************************************************/ + +/******************************************************************************* + Move object to PAD +******************************************************************************** + @exception: If object is assigned to padextra type, then object scale will be + lost after moving to target pad. + Object will inherit rotation from target pad +*******************************************************************************/ #define MoveObject(OBJECT_TAG, PAD) \ AI_MoveObject , \ OBJECT_TAG , \ - CharArrayFrom16(PAD) , - -#define AI_MoveObject_LENGTH (AICMDSIZE +1 +2 ) + CharArrayFrom16(PAD) , + +#define AI_MoveObject_LENGTH (AICMDSIZE +1 +2 ) + - //============================================================================== -//## DOOR OPEN +//## DOOR OPEN //============================================================================== - -/******************************************************************************* - Open tagged door even if locked -*******************************************************************************/ + +/******************************************************************************* + Open tagged door even if locked +*******************************************************************************/ #define DoorOpen(OBJECT_TAG) \ AI_DoorOpen , \ - OBJECT_TAG , - -#define AI_DoorOpen_LENGTH (AICMDSIZE +1 ) + OBJECT_TAG , + +#define AI_DoorOpen_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## DOOR CLOSE +//## DOOR CLOSE //============================================================================== - -/******************************************************************************* - Close tagged door -*******************************************************************************/ + +/******************************************************************************* + Close tagged door +*******************************************************************************/ #define DoorClose(OBJECT_TAG) \ AI_DoorClose , \ - OBJECT_TAG , - -#define AI_DoorClose_LENGTH (AICMDSIZE +1 ) + OBJECT_TAG , + +#define AI_DoorClose_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF DOOR STATE EQUAL +//## IF DOOR STATE EQUAL //============================================================================== - -/******************************************************************************* - If tagged door state matches any of bitfield -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Use DOOR_STATE_# flags for door state argument. - Flags can be combined -*******************************************************************************/ + +/******************************************************************************* + If tagged door state matches any of bitfield +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Use DOOR_STATE_# flags for door state argument. + Flags can be combined +*******************************************************************************/ #define IFDoorStateEqual(OBJECT_TAG, DOOR_STATE, GOTOLABEL) \ AI_IFDoorStateEqual , \ OBJECT_TAG , \ DOOR_STATE , \ - GOTOLABEL , - -#define AI_IFDoorStateEqual_LENGTH (AICMDSIZE +1 +1 +1 ) + GOTOLABEL , + +#define AI_IFDoorStateEqual_LENGTH (AICMDSIZE +1 +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorClosed(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_CLOSED, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_CLOSED, GOTOLABEL) + - # 5306 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorOpen(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_OPEN, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_OPEN, GOTOLABEL) + - # 5310 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorClosing(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_CLOSING, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_CLOSING, GOTOLABEL) + - # 5314 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorOpening(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_OPENING, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_OPENING, GOTOLABEL) + - # 5318 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorOpenOrClosed(GOTOLABEL) \ - IFDoorStateEqual(IFDOOR_STATE_OPEN | DOOR_STATE_CLOSED, GOTOLABEL) + IFDoorStateEqual(IFAI_DOOR_STATE_OPEN | AI_DOOR_STATE_CLOSED, GOTOLABEL) + - # 5322 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorOpeningOrClosing(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_CLOSING | DOOR_STATE_CLOSED, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_CLOSING | AI_DOOR_STATE_CLOSED, GOTOLABEL) + - # 5326 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorOpenOrClosing(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_OPEN | DOOR_STATE_CLOSING, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_OPEN | AI_DOOR_STATE_CLOSING, GOTOLABEL) + - # 5330 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorNotOpening(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_OPEN | DOOR_STATE_CLOSING | DOOR_STATE_CLOSED, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_OPEN | AI_DOOR_STATE_CLOSING | AI_DOOR_STATE_CLOSED, GOTOLABEL) + - # 5334 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorClosedOrOpening(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_CLOSED | DOOR_STATE_OPENING, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_CLOSED | AI_DOOR_STATE_OPENING, GOTOLABEL) + - # 5338 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorOpenOrOpening(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_OPEN | DOOR_STATE_OPENING, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_OPEN | AI_DOOR_STATE_OPENING, GOTOLABEL) + - # 5342 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorNotClosing(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_OPEN | DOOR_STATE_OPENING | DOOR_STATE_CLOSED, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_OPEN | AI_DOOR_STATE_OPENING | AI_DOOR_STATE_CLOSED, GOTOLABEL) + - # 5346 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorOpeningOrClosed(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_OPENING | DOOR_STATE_CLOSED, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_OPENING | AI_DOOR_STATE_CLOSED, GOTOLABEL) + - # 5350 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorNotOpen(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_OPENING | DOOR_STATE_CLOSED | DOOR_STATE_CLOSING, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_OPENING | AI_DOOR_STATE_CLOSED | AI_DOOR_STATE_CLOSING, GOTOLABEL) + - # 5354 "src/aicommands.def" -/******************************************************************************* - If tagged door state is ... -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If tagged door state is ... +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFDoorNotClosed(GOTOLABEL) \ - IFDoorStateEqual(DOOR_STATE_OPEN | DOOR_STATE_OPENING | DOOR_STATE_CLOSING, GOTOLABEL) + IFDoorStateEqual(AI_DOOR_STATE_OPEN | AI_DOOR_STATE_OPENING | AI_DOOR_STATE_CLOSING, GOTOLABEL) + - # 5358 "src/aicommands.def" //============================================================================== -//## IF DOOR HAS BEEN OPENED BEFORE +//## IF DOOR HAS BEEN OPENED BEFORE //============================================================================== - -/******************************************************************************* - If tagged door has been opened before -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: If tagged door is open by default in setup, then it must be closed - before it will check if opened again -*******************************************************************************/ + +/******************************************************************************* + If tagged door has been opened before +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: If tagged door is open by default in setup, then it must be closed + before it will check if opened again +*******************************************************************************/ #define IFDoorHasBeenOpenedBefore(OBJECT_TAG, GOTOLABEL) \ AI_IFDoorHasBeenOpenedBefore , \ OBJECT_TAG , \ - GOTOLABEL , - -#define AI_IFDoorHasBeenOpenedBefore_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFDoorHasBeenOpenedBefore_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## DOOR SET LOCK +//## DOOR SET LOCK //============================================================================== - -/******************************************************************************* - Set tagged doors lock with flags -******************************************************************************** - @exception: Use DOOR_LOCK_# flags for LOCK argument. - Lock flags are same as used within setup for doors and keys -*******************************************************************************/ + +/******************************************************************************* + Set tagged doors lock with flags +******************************************************************************** + @exception: Use DOOR_LOCK_# flags for LOCK argument. + Lock flags are same as used within setup for doors and keys +*******************************************************************************/ #define DoorSetLock(OBJECT_TAG, LOCK_FLAG) \ AI_DoorSetLock , \ OBJECT_TAG , \ - LOCK_FLAG , - -#define AI_DoorSetLock_LENGTH (AICMDSIZE +1 +1 ) + LOCK_FLAG , + +#define AI_DoorSetLock_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## DOOR UNSET LOCK +//## DOOR UNSET LOCK //============================================================================== - -/******************************************************************************* - Unset tagged doors lock with flags -******************************************************************************** - @exception: Use DOOR_LOCK_# flags for LOCK argument. - Lock flags are same as used within setup for doors and keys -*******************************************************************************/ + +/******************************************************************************* + Unset tagged doors lock with flags +******************************************************************************** + @exception: Use DOOR_LOCK_# flags for LOCK argument. + Lock flags are same as used within setup for doors and keys +*******************************************************************************/ #define DoorUnsetLock(OBJECT_TAG, LOCK_FLAG) \ AI_DoorUnsetLock , \ OBJECT_TAG , \ - LOCK_FLAG , - -#define AI_DoorUnsetLock_LENGTH (AICMDSIZE +1 +1 ) + LOCK_FLAG , + +#define AI_DoorUnsetLock_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF DOOR LOCK EQUAL +//## IF DOOR LOCK EQUAL //============================================================================== - -/******************************************************************************* - If tagged doors lock flags matches any lock flag argument -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Use DOOR_LOCK_# flags for LOCK argument. - Lock flags are same as used within setup for doors and keys -*******************************************************************************/ + +/******************************************************************************* + If tagged doors lock flags matches any lock flag argument +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Use DOOR_LOCK_# flags for LOCK argument. + Lock flags are same as used within setup for doors and keys +*******************************************************************************/ #define IFDoorLockEqual(OBJECT_TAG, LOCK_FLAG, GOTOLABEL) \ AI_IFDoorLockEqual , \ OBJECT_TAG , \ LOCK_FLAG , \ - GOTOLABEL , - -#define AI_IFDoorLockEqual_LENGTH (AICMDSIZE +1 +1 +1 ) + GOTOLABEL , + +#define AI_IFDoorLockEqual_LENGTH (AICMDSIZE +1 +1 +1 ) + - //============================================================================== -//## IF OBJECTIVE NUM COMPLETE +//## IF OBJECTIVE NUM COMPLETE //============================================================================== - -/******************************************************************************* - If objective ID completed -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Ignores difficulty settings. - For example - if game on agent and player - completes an unlisted 00 agent objective, checking that - objective num will Goto LABEL -*******************************************************************************/ + +/******************************************************************************* + If objective ID completed +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Ignores difficulty settings. + For example - if game on agent and player + completes an unlisted 00 agent objective, checking that + objective num will Goto LABEL +*******************************************************************************/ #define IFObjectiveNumComplete(OBJ_NUM, GOTOLABEL) \ AI_IFObjectiveNumComplete , \ OBJ_NUM , \ - GOTOLABEL , - -#define AI_IFObjectiveNumComplete_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFObjectiveNumComplete_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## GUARD TRY UNKNOWN6E +//## GUARD TRY UNKNOWN6E //============================================================================== - -/******************************************************************************* - Unknown command, Goto LABEL -******************************************************************************** - @return Continue execution from LABEL if Successful - @exception: Sets chr->padpreset1 - BITFIELD (hex): - 0001: Sets to nearest pad to path to Bond - 0004: ??? - 0008: ??? - 0010: ??? - 0020: ??? -*******************************************************************************/ + +/******************************************************************************* + Unknown command, Goto LABEL +******************************************************************************** + @return Continue execution from LABEL if Successful + @exception: Sets chr->padpreset1 + BITFIELD (hex): + 0001: Sets to nearest pad to path to Bond + 0004: ??? + 0008: ??? + 0010: ??? + 0020: ??? +*******************************************************************************/ #define TRYUnknown6e(UNKNOWN_FLAG, GOTOLABEL) \ AI_TRYUnknown6e , \ UNKNOWN_FLAG , \ - GOTOLABEL , - -#define AI_TRYUnknown6e_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_TRYUnknown6e_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## GUARD TRY UNKNOWN6F +//## GUARD TRY UNKNOWN6F //============================================================================== - -/******************************************************************************* - Unknown command -******************************************************************************** - @return Continue execution from LABEL if Successful - @exception: Sets chr->padpreset1 - BITFIELD (hex): - 0001: Sets to nearest pad to path to Bond - 0004: ??? - 0008: ??? - 0010: ??? - 0020: ??? -*******************************************************************************/ + +/******************************************************************************* + Unknown command +******************************************************************************** + @return Continue execution from LABEL if Successful + @exception: Sets chr->padpreset1 + BITFIELD (hex): + 0001: Sets to nearest pad to path to Bond + 0004: ??? + 0008: ??? + 0010: ??? + 0020: ??? +*******************************************************************************/ #define TRYUnknown6f(UNKNOWN_FLAG, GOTOLABEL) \ AI_TRYUnknown6f , \ UNKNOWN_FLAG , \ - GOTOLABEL , - -#define AI_TRYUnknown6f_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_TRYUnknown6f_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF GAME DIFFICULTY LESS THAN +//## IF GAME DIFFICULTY LESS THAN //============================================================================== - -/******************************************************************************* - If current difficulty is less than DIFFICULTY_ID -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DIFICULTY_ID - 01: agent only - 02: agent/secret agent - 03: agent/secret agent/00 agent -*******************************************************************************/ + +/******************************************************************************* + If current difficulty is less than DIFFICULTY_ID +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DIFICULTY_ID + 01: agent only + 02: agent/secret agent + 03: agent/secret agent/00 agent +*******************************************************************************/ #define IFGameDifficultyLessThan(DIFICULTY_ID, GOTOLABEL) \ AI_IFGameDifficultyLessThan , \ DIFICULTY_ID , \ - GOTOLABEL , - -#define AI_IFGameDifficultyLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFGameDifficultyLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF GAME DIFFICULTY GREATER THAN +//## IF GAME DIFFICULTY GREATER THAN //============================================================================== - -/******************************************************************************* - If current difficulty is greater than DIFFICULTY_ID -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param DIFICULTY_ID - 00: secret agent/00 agent/007 - 01: 00 agent/007 - 02: 007 only -*******************************************************************************/ + +/******************************************************************************* + If current difficulty is greater than DIFFICULTY_ID +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param DIFICULTY_ID + 00: secret agent/00 agent/007 + 01: 00 agent/007 + 02: 007 only +*******************************************************************************/ #define IFGameDifficultyGreaterThan(DIFICULTY_ID, GOTOLABEL) \ AI_IFGameDifficultyGreaterThan , \ DIFICULTY_ID , \ - GOTOLABEL , - -#define AI_IFGameDifficultyGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFGameDifficultyGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF MISSION TIME LESS THAN +//## IF MISSION TIME LESS THAN //============================================================================== - -/******************************************************************************* - If current mission time (in seconds) < SECONDS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param SECONDS: Unsigned Integer seconds, compares against mission timer -*******************************************************************************/ + +/******************************************************************************* + If current mission time (in seconds) < SECONDS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param SECONDS: Unsigned Integer seconds, compares against mission timer +*******************************************************************************/ #define IFMissionTimeLessThan(SECONDS, GOTOLABEL) \ AI_IFMissionTimeLessThan , \ CharArrayFrom16(SECONDS) , \ - GOTOLABEL , - -#define AI_IFMissionTimeLessThan_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFMissionTimeLessThan_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## IF MISSION TIME GREATER THAN +//## IF MISSION TIME GREATER THAN //============================================================================== - -/******************************************************************************* - If current mission time (in seconds) > SECONDS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param SECONDS: Unsigned Integer seconds, compares against mission timer -*******************************************************************************/ + +/******************************************************************************* + If current mission time (in seconds) > SECONDS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param SECONDS: Unsigned Integer seconds, compares against mission timer +*******************************************************************************/ #define IFMissionTimeGreaterThan(SECONDS, GOTOLABEL) \ AI_IFMissionTimeGreaterThan , \ CharArrayFrom16(SECONDS) , \ - GOTOLABEL , - -#define AI_IFMissionTimeGreaterThan_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFMissionTimeGreaterThan_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## IF SYSTEM POWER TIME LESS THAN +//## IF SYSTEM POWER TIME LESS THAN //============================================================================== - -/******************************************************************************* - If system powered on time (in minutes) < MINUTES -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param MINUTES: Unsigned Integer minutes, compares against mission time -r*******************************************************************************/ + +/******************************************************************************* + If system powered on time (in minutes) < MINUTES +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param MINUTES: Unsigned Integer minutes, compares against mission time +r*******************************************************************************/ #define IFSystemPowerTimeLessThan(MINUTES, GOTOLABEL) \ AI_IFSystemPowerTimeLessThan , \ CharArrayFrom16(MINUTES) , \ - GOTOLABEL , - -#define AI_IFSystemPowerTimeLessThan_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFSystemPowerTimeLessThan_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## IF SYSTEM POWER TIME GREATER THAN +//## IF SYSTEM POWER TIME GREATER THAN //============================================================================== - -/******************************************************************************* - If system powered on time (in minutes) > MINUTES -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param MINUTES: Unsigned Integer minutes, compares against mission time -*******************************************************************************/ + +/******************************************************************************* + If system powered on time (in minutes) > MINUTES +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param MINUTES: Unsigned Integer minutes, compares against mission time +*******************************************************************************/ #define IFSystemPowerTimeGreaterThan(MINUTES, GOTOLABEL) \ AI_IFSystemPowerTimeGreaterThan , \ CharArrayFrom16(MINUTES) , \ - GOTOLABEL , - -#define AI_IFSystemPowerTimeGreaterThan_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFSystemPowerTimeGreaterThan_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## IF LEVEL ID LESS THAN +//## IF LEVEL ID LESS THAN //============================================================================== - -/******************************************************************************* - If current level id < LEVEL_ID -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param LEVEL_ID: Uses LEVELID enum values, not briefing menu stage number -*******************************************************************************/ + +/******************************************************************************* + If current level id < LEVEL_ID +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param LEVEL_ID: Uses LEVELID enum values, not briefing menu stage number +*******************************************************************************/ #define IFLevelIdLessThan(LEVEL_ID, GOTOLABEL) \ AI_IFLevelIdLessThan , \ LEVEL_ID , \ - GOTOLABEL , - -#define AI_IFLevelIdLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFLevelIdLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF LEVEL ID GREATER THAN +//## IF LEVEL ID GREATER THAN //============================================================================== - -/******************************************************************************* - If current level id > LEVEL_ID -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param LEVEL_ID: Uses LEVELID enum values, not briefing menu stage number -*******************************************************************************/ + +/******************************************************************************* + If current level id > LEVEL_ID +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param LEVEL_ID: Uses LEVELID enum values, not briefing menu stage number +*******************************************************************************/ #define IFLevelIdGreaterThan(LEVEL_ID, GOTOLABEL) \ AI_IFLevelIdGreaterThan , \ LEVEL_ID , \ - GOTOLABEL , - -#define AI_IFLevelIdGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFLevelIdGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF GUARD HITS LESS THAN +//## IF GUARD HITS LESS THAN //============================================================================== - -/******************************************************************************* - If I have been hit less than HIT_NUM -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param HIT_NUM: Unsigned Integer to test against numarghs - @exception: Hits count even if guard is invincible -*******************************************************************************/ + +/******************************************************************************* + If I have been hit less than HIT_NUM +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param HIT_NUM: Unsigned Integer to test against numarghs + @exception: Hits count even if guard is invincible +*******************************************************************************/ #define IFMyNumArghsLessThan(HIT_NUM, GOTOLABEL) \ AI_IFMyNumArghsLessThan , \ HIT_NUM , \ - GOTOLABEL , - -#define AI_IFMyNumArghsLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyNumArghsLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF GUARD HITS GREATER THAN +//## IF GUARD HITS GREATER THAN //============================================================================== - -/******************************************************************************* - If I have been Hit Greater Than HIT_NUM -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param HIT_NUM: Unsigned Integer to test against numarghs - @exception: Hits count even if guard is invincible -*******************************************************************************/ + +/******************************************************************************* + If I have been Hit Greater Than HIT_NUM +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param HIT_NUM: Unsigned Integer to test against numarghs + @exception: Hits count even if guard is invincible +*******************************************************************************/ #define IFMyNumArghsGreaterThan(HIT_NUM, GOTOLABEL) \ AI_IFMyNumArghsGreaterThan , \ HIT_NUM , \ - GOTOLABEL , - -#define AI_IFMyNumArghsGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyNumArghsGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF GUARD HITS MISSED LESS THAN +//## IF GUARD HITS MISSED LESS THAN //============================================================================== - -/******************************************************************************* - If Bond's shots missed/landed near me less than MISSED_NUM -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param MISSED_NUM: Unsigned Integer to test against numclosearghs -*******************************************************************************/ + +/******************************************************************************* + If Bond's shots missed/landed near me less than MISSED_NUM +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param MISSED_NUM: Unsigned Integer to test against numclosearghs +*******************************************************************************/ #define IFMyNumCloseArghsLessThan(MISSED_NUM, GOTOLABEL) \ AI_IFMyNumCloseArghsLessThan , \ MISSED_NUM , \ - GOTOLABEL , - -#define AI_IFMyNumCloseArghsLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyNumCloseArghsLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF GUARD HITS MISSED GREATER THAN +//## IF GUARD HITS MISSED GREATER THAN //============================================================================== - -/******************************************************************************* - If Bond's shots missed/landed near me Greater Than MISSED_NUM -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param MISSED_NUM: Unsigned Integer to test against numclosearghs -*******************************************************************************/ + +/******************************************************************************* + If Bond's shots missed/landed near me Greater Than MISSED_NUM +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param MISSED_NUM: Unsigned Integer to test against numclosearghs +*******************************************************************************/ #define IFMyNumCloseArghsGreaterThan(MISSED_NUM, GOTOLABEL) \ AI_IFMyNumCloseArghsGreaterThan , \ MISSED_NUM , \ - GOTOLABEL , - -#define AI_IFMyNumCloseArghsGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyNumCloseArghsGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF CHR HEALTH LESS THAN +//## IF CHR HEALTH LESS THAN //============================================================================== - -/******************************************************************************* - If My/chrs health < HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @param HEALTH (Default = 40 (4.0f)) - @exception: HEALTH is unsigned, converted to float and compares difference - between chr->maxdamage - chr->damage. - Armour is tested -*******************************************************************************/ + +/******************************************************************************* + If My/chrs health < HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @param HEALTH (Default = 40 (4.0f)) + @exception: HEALTH is unsigned, converted to float and compares difference + between chr->maxdamage - chr->damage. + Armour is tested +*******************************************************************************/ #define IFChrHealthLessThan(CHR_NUM, HEALTH, GOTOLABEL) \ AI_IFChrHealthLessThan , \ CHR_NUM , \ HEALTH , \ - GOTOLABEL , - -#define AI_IFChrHealthLessThan_LENGTH (AICMDSIZE +1 +1 +1 ) + GOTOLABEL , + +#define AI_IFChrHealthLessThan_LENGTH (AICMDSIZE +1 +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - If My/chrs health < HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @param HEALTH (Default = 40 (4.0f)) - @exception: HEALTH is unsigned, converted to float and compares difference - between chr->maxdamage - chr->damage. - Armour is tested -*******************************************************************************/ +/******************************************************************************* + If My/chrs health < HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @param HEALTH (Default = 40 (4.0f)) + @exception: HEALTH is unsigned, converted to float and compares difference + between chr->maxdamage - chr->damage. + Armour is tested +*******************************************************************************/ #define IFChrHealthLessThanF(CHR_NUM,HEALTH,GOTOLABEL) \ - IFChrHealthLessThan(CHR_NUM,(u8)(HEALTH*10), GOTOLABEL) + IFChrHealthLessThan(CHR_NUM,(u8)(HEALTH*10), GOTOLABEL) + - # 6217 "src/aicommands.def" -/******************************************************************************* - If My/chrs health < HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @param HEALTH (Default = 40 (4.0f)) - @exception: HEALTH is unsigned, converted to float and compares difference - between chr->maxdamage - chr->damage. - Armour is tested -*******************************************************************************/ +/******************************************************************************* + If My/chrs health < HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @param HEALTH (Default = 40 (4.0f)) + @exception: HEALTH is unsigned, converted to float and compares difference + between chr->maxdamage - chr->damage. + Armour is tested +*******************************************************************************/ #define IFMyHealthLessThan(HEALTH, GOTOLABEL) \ - IFChrHealthLessThan(CHR_SELF,HEALTH, GOTOLABEL) + IFChrHealthLessThan(CHR_SELF,HEALTH, GOTOLABEL) + - # 6221 "src/aicommands.def" -/******************************************************************************* - If My/chrs health < HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @param HEALTH (Default = 40 (4.0f)) - @exception: HEALTH is unsigned, converted to float and compares difference - between chr->maxdamage - chr->damage. - Armour is tested -*******************************************************************************/ +/******************************************************************************* + If My/chrs health < HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @param HEALTH (Default = 40 (4.0f)) + @exception: HEALTH is unsigned, converted to float and compares difference + between chr->maxdamage - chr->damage. + Armour is tested +*******************************************************************************/ #define IFMyHealthLessThanF(HEALTH,GOTOLABEL) \ - IFChrHealthLessThan(CHR_SELF, (u8)(HEALTH*10), GOTOLABEL) + IFChrHealthLessThan(CHR_SELF, (u8)(HEALTH*10), GOTOLABEL) + - # 6225 "src/aicommands.def" //============================================================================== -//## IF CHR HEALTH GREATER THAN +//## IF CHR HEALTH GREATER THAN //============================================================================== - -/******************************************************************************* - If My/chrs health > HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @param HEALTH (Default = 40 (4.0f)) - @exception: HEALTH is unsigned, converted to float and compares difference - between chr->maxdamage - chr->damage. - Armour is tested -*******************************************************************************/ + +/******************************************************************************* + If My/chrs health > HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @param HEALTH (Default = 40 (4.0f)) + @exception: HEALTH is unsigned, converted to float and compares difference + between chr->maxdamage - chr->damage. + Armour is tested +*******************************************************************************/ #define IFChrHealthGreaterThan(CHR_NUM, HEALTH, GOTOLABEL) \ AI_IFChrHealthGreaterThan , \ CHR_NUM , \ HEALTH , \ - GOTOLABEL , - -#define AI_IFChrHealthGreaterThan_LENGTH (AICMDSIZE +1 +1 +1 ) + GOTOLABEL , + +#define AI_IFChrHealthGreaterThan_LENGTH (AICMDSIZE +1 +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - If My/chrs health > HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @param HEALTH (Default = 40 (4.0f)) - @exception: HEALTH is unsigned, converted to float and compares difference - between chr->maxdamage - chr->damage. - Armour is tested -*******************************************************************************/ +/******************************************************************************* + If My/chrs health > HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @param HEALTH (Default = 40 (4.0f)) + @exception: HEALTH is unsigned, converted to float and compares difference + between chr->maxdamage - chr->damage. + Armour is tested +*******************************************************************************/ #define IFChrHealthGreaterThanF(CHR_NUM,HEALTH,GOTOLABEL) \ - IFChrHealthGreaterThan(CHR_NUM,(u8)(HEALTH*10), GOTOLABEL) + IFChrHealthGreaterThan(CHR_NUM,(u8)(HEALTH*10), GOTOLABEL) + - # 6277 "src/aicommands.def" -/******************************************************************************* - If My/chrs health > HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @param HEALTH (Default = 40 (4.0f)) - @exception: HEALTH is unsigned, converted to float and compares difference - between chr->maxdamage - chr->damage. - Armour is tested -*******************************************************************************/ +/******************************************************************************* + If My/chrs health > HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @param HEALTH (Default = 40 (4.0f)) + @exception: HEALTH is unsigned, converted to float and compares difference + between chr->maxdamage - chr->damage. + Armour is tested +*******************************************************************************/ #define IFMyHealthGreaterThan(HEALTH, GOTOLABEL) \ - IFChrHealthGreaterThan(CHR_SELF,HEALTH, GOTOLABEL) + IFChrHealthGreaterThan(CHR_SELF,HEALTH, GOTOLABEL) + - # 6281 "src/aicommands.def" -/******************************************************************************* - If My/chrs health > HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @param HEALTH (Default = 40 (4.0f)) - @exception: HEALTH is unsigned, converted to float and compares difference - between chr->maxdamage - chr->damage. - Armour is tested -*******************************************************************************/ +/******************************************************************************* + If My/chrs health > HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @param HEALTH (Default = 40 (4.0f)) + @exception: HEALTH is unsigned, converted to float and compares difference + between chr->maxdamage - chr->damage. + Armour is tested +*******************************************************************************/ #define IFMyHealthGreaterThanF(HEALTH,GOTOLABEL) \ - IFChrHealthGreaterThan(CHR_SELF, (u8)(HEALTH*10), GOTOLABEL) + IFChrHealthGreaterThan(CHR_SELF, (u8)(HEALTH*10), GOTOLABEL) + - # 6285 "src/aicommands.def" //============================================================================== -//## IF CHR WAS DAMAGED SINCE LAST CHECK +//## IF CHR WAS DAMAGED SINCE LAST CHECK //============================================================================== - -/******************************************************************************* - If chr has taken damage since last check -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @exception: Checks chr->chrflags if CHRFLAG_WAS_DAMAGED is set. - If true, unset flag and Goto LABEL. - CHRFLAG_WAS_DAMAGED is set if guard took damage (not invincible) -*******************************************************************************/ + +/******************************************************************************* + If chr has taken damage since last check +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @exception: Checks chr->chrflags if CHRFLAG_WAS_DAMAGED is set. + If true, unset flag and Goto LABEL. + CHRFLAG_WAS_DAMAGED is set if guard took damage (not invincible) +*******************************************************************************/ #define IFChrWasDamagedSinceLastCheck(CHR_NUM, GOTOLABEL) \ AI_IFChrWasDamagedSinceLastCheck , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_IFChrWasDamagedSinceLastCheck_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFChrWasDamagedSinceLastCheck_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - If chr has taken damage since last check -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-255) - @exception: Checks chr->chrflags if CHRFLAG_WAS_DAMAGED is set. - If true, unset flag and Goto LABEL. - CHRFLAG_WAS_DAMAGED is set if guard took damage (not invincible) -*******************************************************************************/ +/******************************************************************************* + If chr has taken damage since last check +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-255) + @exception: Checks chr->chrflags if CHRFLAG_WAS_DAMAGED is set. + If true, unset flag and Goto LABEL. + CHRFLAG_WAS_DAMAGED is set if guard took damage (not invincible) +*******************************************************************************/ #define IFIWasDamagedSinceLastCheck(GOTOLABEL) \ - IFChrWasDamagedSinceLastCheck(CHR_SELF, GOTOLABEL) + IFChrWasDamagedSinceLastCheck(CHR_SELF, GOTOLABEL) + - # 6337 "src/aicommands.def" //============================================================================== -//## IF BOND HEALTH LESS THAN +//## IF BOND HEALTH LESS THAN //============================================================================== - -/******************************************************************************* - If Bond's health < HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param HEALTH u8 where 255 equal to 100% health - @exception: Does NOT check armour. -*******************************************************************************/ + +/******************************************************************************* + If Bond's health < HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param HEALTH u8 where 255 equal to 100% health + @exception: Does NOT check armour. +*******************************************************************************/ #define IFBondHealthLessThan(HEALTH, GOTOLABEL) \ AI_IFBondHealthLessThan , \ HEALTH , \ - GOTOLABEL , - -#define AI_IFBondHealthLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFBondHealthLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF BOND HEALTH GREATER THAN +//## IF BOND HEALTH GREATER THAN //============================================================================== - -/******************************************************************************* - If Bond's health > HEALTH -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param HEALTH u8 where 255 equal to 100% health - @exception: Does NOT check armour. -*******************************************************************************/ + +/******************************************************************************* + If Bond's health > HEALTH +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param HEALTH u8 where 255 equal to 100% health + @exception: Does NOT check armour. +*******************************************************************************/ #define IFBondHealthGreaterThan(HEALTH, GOTOLABEL) \ AI_IFBondHealthGreaterThan , \ HEALTH , \ - GOTOLABEL , - -#define AI_IFBondHealthGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFBondHealthGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## LOCAL BYTE 1 SET +//## LOCAL BYTE 1 SET //============================================================================== - -/******************************************************************************* - Set My Morale -******************************************************************************** - @param CHRBYTE is a value 0 - 255 -*******************************************************************************/ + +/******************************************************************************* + Set My Morale +******************************************************************************** + @param CHRBYTE is a value 0 - 255 +*******************************************************************************/ #define SetMyMorale(CHRBYTE) \ AI_SetMyMorale , \ - CHRBYTE , - -#define AI_SetMyMorale_LENGTH (AICMDSIZE +1 ) + CHRBYTE , + +#define AI_SetMyMorale_LENGTH (AICMDSIZE +1 ) + - # 6454 "src/aicommands.def" //============================================================================== -//## LOCAL BYTE 1 ADD +//## LOCAL BYTE 1 ADD //============================================================================== - -/******************************************************************************* - Add To My Morale - Make me Happier -******************************************************************************** - @param CHRBYTE is a value 0 - 255 - @exception Anything above 255 is clamped to 255 -*******************************************************************************/ + +/******************************************************************************* + Add To My Morale - Make me Happier +******************************************************************************** + @param CHRBYTE is a value 0 - 255 + @exception Anything above 255 is clamped to 255 +*******************************************************************************/ #define AddToMyMorale(CHRBYTE) \ AI_AddToMyMorale , \ - CHRBYTE , - -#define AI_AddToMyMorale_LENGTH (AICMDSIZE +1 ) + CHRBYTE , + +#define AI_AddToMyMorale_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## LOCAL BYTE 1 SUBTRACT +//## LOCAL BYTE 1 SUBTRACT //============================================================================== - -/******************************************************************************* - Subtract from My Morale - Make me Sad -******************************************************************************** - @param CHRBYTE is a value 0 - 255 - @exception Anything below 0 is clamped to 0 -*******************************************************************************/ + +/******************************************************************************* + Subtract from My Morale - Make me Sad +******************************************************************************** + @param CHRBYTE is a value 0 - 255 + @exception Anything below 0 is clamped to 0 +*******************************************************************************/ #define SubtractFromMyMorale(CHRBYTE) \ AI_SubtractFromMyMorale , \ - CHRBYTE , - -#define AI_SubtractFromMyMorale_LENGTH (AICMDSIZE +1 ) + CHRBYTE , + +#define AI_SubtractFromMyMorale_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF LOCAL BYTE 1 LESS THAN +//## IF LOCAL BYTE 1 LESS THAN //============================================================================== - -/******************************************************************************* - If My Morale Less Than -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If My Morale Less Than +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFMyMoraleLessThan(CHRBYTE, GOTOLABEL) \ AI_IFMyMoraleLessThan , \ CHRBYTE , \ - GOTOLABEL , - -#define AI_IFMyMoraleLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyMoraleLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF LOCAL BYTE 1 LESS THAN RANDOM SEED +//## IF LOCAL BYTE 1 LESS THAN RANDOM SEED //============================================================================== - -/******************************************************************************* - If My Morale is Less Than My Random (Use SetRandom) -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If My Morale is Less Than My Random (Use SetRandom) +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFMyMoraleLessThanRandom(GOTOLABEL) \ AI_IFMyMoraleLessThanRandom , \ - GOTOLABEL , - -#define AI_IFMyMoraleLessThanRandom_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFMyMoraleLessThanRandom_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## LOCAL BYTE 2 SET +//## LOCAL BYTE 2 SET //============================================================================== - -/******************************************************************************* - Set My Morale -******************************************************************************** - @param CHRBYTE is a value 0 - 255 -*******************************************************************************/ + +/******************************************************************************* + Set My Morale +******************************************************************************** + @param CHRBYTE is a value 0 - 255 +*******************************************************************************/ #define SetMyAlertness(CHRBYTE) \ AI_SetMyAlertness , \ - CHRBYTE , - -#define AI_SetMyAlertness_LENGTH (AICMDSIZE +1 ) + CHRBYTE , + +#define AI_SetMyAlertness_LENGTH (AICMDSIZE +1 ) + - # 6647 "src/aicommands.def" //============================================================================== -//## LOCAL BYTE 2 ADD +//## LOCAL BYTE 2 ADD //============================================================================== - -/******************************************************************************* - Add To My Alertness - Make me See Things -******************************************************************************** - @param CHRBYTE is a value 0 - 255 - @exception Anything above 255 is clamped to 255 -*******************************************************************************/ + +/******************************************************************************* + Add To My Alertness - Make me See Things +******************************************************************************** + @param CHRBYTE is a value 0 - 255 + @exception Anything above 255 is clamped to 255 +*******************************************************************************/ #define AddToMyAlertness(CHRBYTE) \ AI_AddToMyAlertness , \ - CHRBYTE , - -#define AI_AddToMyAlertness_LENGTH (AICMDSIZE +1 ) + CHRBYTE , + +#define AI_AddToMyAlertness_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## LOCAL BYTE 2 SUBTRACT +//## LOCAL BYTE 2 SUBTRACT //============================================================================== - -/******************************************************************************* - Subtract from My Morale - Make me Blind -******************************************************************************** - @param CHRBYTE is a value 0 - 255 - @exception Anything below 0 is clamped to 0 -*******************************************************************************/ + +/******************************************************************************* + Subtract from My Morale - Make me Blind +******************************************************************************** + @param CHRBYTE is a value 0 - 255 + @exception Anything below 0 is clamped to 0 +*******************************************************************************/ #define SubtractFromMyAlertness(CHRBYTE) \ AI_SubtractFromMyAlertness , \ - CHRBYTE , - -#define AI_SubtractFromMyAlertness_LENGTH (AICMDSIZE +1 ) + CHRBYTE , + +#define AI_SubtractFromMyAlertness_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF LOCAL BYTE 2 LESS THAN +//## IF LOCAL BYTE 2 LESS THAN //============================================================================== - -/******************************************************************************* - If My Alertness is Less Than -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If My Alertness is Less Than +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFMyAlertnessLessThan(CHRBYTE, GOTOLABEL) \ AI_IFMyAlertnessLessThan , \ CHRBYTE , \ - GOTOLABEL , - -#define AI_IFMyAlertnessLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyAlertnessLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF LOCAL BYTE 2 LESS THAN RANDOM SEED +//## IF LOCAL BYTE 2 LESS THAN RANDOM SEED //============================================================================== - -/******************************************************************************* - If My Morale is Less Than My Random (Use SetRandom) -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If My Morale is Less Than My Random (Use SetRandom) +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFMyAlertnessLessThanRandom(GOTOLABEL) \ AI_IFMyAlertnessLessThanRandom , \ - GOTOLABEL , - -#define AI_IFMyAlertnessLessThanRandom_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFMyAlertnessLessThanRandom_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD SET HEARING SCALE +//## GUARD SET HEARING SCALE //============================================================================== - -/******************************************************************************* - Set My hearing scale - the higher the value, the further away I - can hear Bond's gunfire -******************************************************************************** - @param HEARING_SCALE 0.0 - 32.0 (Default = 1.0f) - @exception: HEARING_SCALE is converted to float and divided by 1000 before setting - to hearingscale -*******************************************************************************/ + +/******************************************************************************* + Set My hearing scale - the higher the value, the further away I + can hear Bond's gunfire +******************************************************************************** + @param HEARING_SCALE 0.0 - 32.0 (Default = 1.0f) + @exception: HEARING_SCALE is converted to float and divided by 1000 before setting + to hearingscale +*******************************************************************************/ #define SetMyHearingScale(HEARING_SCALE) \ AI_SetMyHearingScale , \ - CharArrayFrom16(HEARING_SCALE) , - -#define AI_SetMyHearingScale_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(HEARING_SCALE) , + +#define AI_SetMyHearingScale_LENGTH (AICMDSIZE +2 ) + - //POLYMORPHS -/******************************************************************************* - Set My hearing scale - the higher the value, the further away I - can hear Bond's gunfire -******************************************************************************** - @param HEARING_SCALE 0.0 - 32.0 (Default = 1.0f) - @exception: HEARING_SCALE is converted to float and divided by 1000 before setting - to hearingscale -*******************************************************************************/ +/******************************************************************************* + Set My hearing scale - the higher the value, the further away I + can hear Bond's gunfire +******************************************************************************** + @param HEARING_SCALE 0.0 - 32.0 (Default = 1.0f) + @exception: HEARING_SCALE is converted to float and divided by 1000 before setting + to hearingscale +*******************************************************************************/ #define SetMyHearingScaleF(HEARING_SCALE) \ - SetMyHearingScale((u16)(HEARING_SCALE * 1000)) + SetMyHearingScale((u16)(HEARING_SCALE * 1000)) + - # 6851 "src/aicommands.def" //============================================================================== -//## GUARD SET VISION RANGE +//## GUARD SET VISION RANGE //============================================================================== - -/******************************************************************************* - Set My vision range - the smaller the value, the longer I - take to detect Bond with IFISeeBond. -******************************************************************************** - @param VISION_RANGE 0-255 (Default = 100) - @exception: Sets to chr->visionrange. - Does NOT affect firing distance -*******************************************************************************/ + +/******************************************************************************* + Set My vision range - the smaller the value, the longer I + take to detect Bond with IFISeeBond. +******************************************************************************** + @param VISION_RANGE 0-255 (Default = 100) + @exception: Sets to chr->visionrange. + Does NOT affect firing distance +*******************************************************************************/ #define SetMyVisionRange(VISION_RANGE) \ AI_SetMyVisionRange , \ - VISION_RANGE , - -#define AI_SetMyVisionRange_LENGTH (AICMDSIZE +1 ) + VISION_RANGE , + +#define AI_SetMyVisionRange_LENGTH (AICMDSIZE +1 ) + - # 6887 "src/aicommands.def" //============================================================================== -//## GUARD SET GRENADE PROBABILITY +//## GUARD SET GRENADE PROBABILITY //============================================================================== - -/******************************************************************************* - Set My probability of lobbing a grenade - the higher the value, the - more likely I will throw one when asked (TRYThrowingGrenade). -******************************************************************************** - @exception: Sets to chr->grenadeprob - (Default = 0) - The only way to make guards throw grenades is by using this - command or assigning setup object 0x12 to chr -*******************************************************************************/ + +/******************************************************************************* + Set My probability of lobbing a grenade - the higher the value, the + more likely I will throw one when asked (TRYThrowingGrenade). +******************************************************************************** + @exception: Sets to chr->grenadeprob - (Default = 0) + The only way to make guards throw grenades is by using this + command or assigning setup object 0x12 to chr +*******************************************************************************/ #define SetMyGrenadeProbability(GRENADE_PROB) \ AI_SetMyGrenadeProbability , \ - GRENADE_PROB , - -#define AI_SetMyGrenadeProbability_LENGTH (AICMDSIZE +1 ) + GRENADE_PROB , + +#define AI_SetMyGrenadeProbability_LENGTH (AICMDSIZE +1 ) + - # 6923 "src/aicommands.def" //============================================================================== -//## GUARD SET CHR NUM +//## GUARD SET CHR NUM //============================================================================== - -/******************************************************************************* - Set My Chr Number, or ID, for calling me later. eg respawn or clone. -******************************************************************************** - @param CHR_NUM: Should be a unique Integer 0-240 -*******************************************************************************/ + +/******************************************************************************* + Set My Chr Number, or ID, for calling me later. eg respawn or clone. +******************************************************************************** + @param CHR_NUM: Should be a unique Integer 0-240 +*******************************************************************************/ #define SetMyChrNum(CHR_NUM) \ AI_SetMyChrNum , \ - CHR_NUM , - -#define AI_SetMyChrNum_LENGTH (AICMDSIZE +1 ) + CHR_NUM , + +#define AI_SetMyChrNum_LENGTH (AICMDSIZE +1 ) + - # 6956 "src/aicommands.def" //============================================================================== -//## GUARD SET HEALTH TOTAL +//## GUARD SET HEALTH TOTAL //============================================================================== - -/******************************************************************************* - Set My total HEALTH - the higher the value, the more shots needed - to kill Me. -******************************************************************************** - @param HEALTH: unsigned float (Default = 4.0) -1 will be set to 6553.5f - @exception: Sets to chr->maxdamage. - HEALTH is converted to float and divided by 10 before setting to - maxdamage. - Will use 007 health modifier If difficulty mode 007 is active -*******************************************************************************/ + +/******************************************************************************* + Set My total HEALTH - the higher the value, the more shots needed + to kill Me. +******************************************************************************** + @param HEALTH: unsigned float (Default = 4.0) -1 will be set to 6553.5f + @exception: Sets to chr->maxdamage. + HEALTH is converted to float and divided by 10 before setting to + maxdamage. + Will use 007 health modifier If difficulty mode 007 is active +*******************************************************************************/ #define SetMyHealthTotal(HEALTH) \ AI_SetMyHealthTotal , \ - CharArrayFrom16(HEALTH) , - -#define AI_SetMyHealthTotal_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(HEALTH) , + +#define AI_SetMyHealthTotal_LENGTH (AICMDSIZE +2 ) + - //POLYMORPHS -/******************************************************************************* - Set My total HEALTH - the higher the value, the more shots needed - to kill Me. -******************************************************************************** - @param HEALTH: unsigned float (Default = 4.0) -1 will be set to 6553.5f - @exception: Sets to chr->maxdamage. - HEALTH is converted to float and divided by 10 before setting to - maxdamage. - Will use 007 health modifier If difficulty mode 007 is active -*******************************************************************************/ +/******************************************************************************* + Set My total HEALTH - the higher the value, the more shots needed + to kill Me. +******************************************************************************** + @param HEALTH: unsigned float (Default = 4.0) -1 will be set to 6553.5f + @exception: Sets to chr->maxdamage. + HEALTH is converted to float and divided by 10 before setting to + maxdamage. + Will use 007 health modifier If difficulty mode 007 is active +*******************************************************************************/ #define SetMyHealthTotalF(HEALTH) \ - SetMyHealthTotal((u16)(HEALTH*10)) + SetMyHealthTotal((u16)(HEALTH*10)) + - # 7002 "src/aicommands.def" //============================================================================== -//## GUARD SET ARMOUR +//## GUARD SET ARMOUR //============================================================================== - -/******************************************************************************* - Set My armour value - the higher the value, the higher the armour. - Armoured guards will not show hit reactions. They also do NOT instantly die - from explosions, instead taking damaged based on how close they are to - explosions like Bond. To any setup designers reading this, please use armour - sparingly! -******************************************************************************** - @param ARMOUR: Unsigned (Default = 0) - @exception: Subtracts from chr->damage - negative damage means guard has armour. - Instead of storing armour as a separate chr variable, we reuse the - current damage and read negative damage as armour. - Will use 007 health modifier if difficulty mode 007 is active. - -1 will be set to 6553.5f armour, or -6553.5f damage (Invincible) -*******************************************************************************/ + +/******************************************************************************* + Set My armour value - the higher the value, the higher the armour. + Armoured guards will not show hit reactions. They also do NOT instantly die + from explosions, instead taking damaged based on how close they are to + explosions like Bond. To any setup designers reading this, please use armour + sparingly! +******************************************************************************** + @param ARMOUR: Unsigned (Default = 0) + @exception: Subtracts from chr->damage - negative damage means guard has armour. + Instead of storing armour as a separate chr variable, we reuse the + current damage and read negative damage as armour. + Will use 007 health modifier if difficulty mode 007 is active. + -1 will be set to 6553.5f armour, or -6553.5f damage (Invincible) +*******************************************************************************/ #define SetMyArmour(AMOUNT) \ AI_SetMyArmour , \ - CharArrayFrom16(AMOUNT) , - -#define AI_SetMyArmour_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(AMOUNT) , + +#define AI_SetMyArmour_LENGTH (AICMDSIZE +2 ) + - //POLYMORPHS -/******************************************************************************* - Set My armour value - the higher the value, the higher the armour. - Armoured guards will not show hit reactions. They also do NOT instantly die - from explosions, instead taking damaged based on how close they are to - explosions like Bond. To any setup designers reading this, please use armour - sparingly! -******************************************************************************** - @param ARMOUR: Unsigned (Default = 0) - @exception: Subtracts from chr->damage - negative damage means guard has armour. - Instead of storing armour as a separate chr variable, we reuse the - current damage and read negative damage as armour. - Will use 007 health modifier if difficulty mode 007 is active. - -1 will be set to 6553.5f armour, or -6553.5f damage (Invincible) -*******************************************************************************/ +/******************************************************************************* + Set My armour value - the higher the value, the higher the armour. + Armoured guards will not show hit reactions. They also do NOT instantly die + from explosions, instead taking damaged based on how close they are to + explosions like Bond. To any setup designers reading this, please use armour + sparingly! +******************************************************************************** + @param ARMOUR: Unsigned (Default = 0) + @exception: Subtracts from chr->damage - negative damage means guard has armour. + Instead of storing armour as a separate chr variable, we reuse the + current damage and read negative damage as armour. + Will use 007 health modifier if difficulty mode 007 is active. + -1 will be set to 6553.5f armour, or -6553.5f damage (Invincible) +*******************************************************************************/ #define SetMyArmourF(AMOUNT) \ - SetMyArmour((u16)(AMOUNT*10)) + SetMyArmour((u16)(AMOUNT*10)) + - # 7051 "src/aicommands.def" -/******************************************************************************* - Remove All damage from me -******************************************************************************** - @return Continue execution from DONELABEL - @param LOOPLABEL: Private ID for internal loop -*******************************************************************************/ +/******************************************************************************* + Remove All damage from me +******************************************************************************** + @return Continue execution from DONELABEL + @param LOOPLABEL: Private ID for internal loop +*******************************************************************************/ #define RemoveMyDamage(LOOPLABEL, DONELABEL) \ - DO(LOOPLABEL) IFMyHealthGreaterThanF(3.5,DONELABEL)SetMyArmour(5) LOOP(LOOPLABEL) + DO(LOOPLABEL) IFMyHealthGreaterThanF(3.5,DONELABEL)SetMyArmour(5) LOOP(LOOPLABEL) + - # 7067 "src/aicommands.def" //============================================================================== -//## GUARD SET SPEED RATING +//## GUARD SET SPEED RATING //============================================================================== - -/******************************************************************************* - Set My speed rating - controls how quickly I animate. -******************************************************************************** - @param SPEED_RATING: Signed* 0 - 100 (Default = 0) - @exception: Sets to chr->speedrating. - Negative values will make guard animate slower - this affects - firing animations. - Does NOT use 007 reaction speed modifier. - Do NOT use values above 100 or below 0 or it may crash -*******************************************************************************/ + +/******************************************************************************* + Set My speed rating - controls how quickly I animate. +******************************************************************************** + @param SPEED_RATING: Signed* 0 - 100 (Default = 0) + @exception: Sets to chr->speedrating. + Negative values will make guard animate slower - this affects + firing animations. + Does NOT use 007 reaction speed modifier. + Do NOT use values above 100 or below 0 or it may crash +*******************************************************************************/ #define SetMySpeedRating(SPEED_RATING) \ AI_SetMySpeedRating , \ - SPEED_RATING , - -#define AI_SetMySpeedRating_LENGTH (AICMDSIZE +1 ) + SPEED_RATING , + +#define AI_SetMySpeedRating_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD SET ARGH RATING +//## GUARD SET ARGH RATING //============================================================================== - -/******************************************************************************* - Set My argh rating - controls how quickly I recover from being shot. -******************************************************************************** - @param ARGH_RATING Signed* 0-100 (Default = 0) (100 is almost no hit - reaction) - @exception: Sets to chr->arghrating. - Negative values will make guard animate slower - this affects - firing animations. - Does NOT use 007 reaction speed modifier - Do NOT use values above 100 or below 0 or it may crash -*******************************************************************************/ + +/******************************************************************************* + Set My argh rating - controls how quickly I recover from being shot. +******************************************************************************** + @param ARGH_RATING Signed* 0-100 (Default = 0) (100 is almost no hit + reaction) + @exception: Sets to chr->arghrating. + Negative values will make guard animate slower - this affects + firing animations. + Does NOT use 007 reaction speed modifier + Do NOT use values above 100 or below 0 or it may crash +*******************************************************************************/ #define SetMyArghRating(ARGH_RATING) \ AI_SetMyArghRating , \ - ARGH_RATING , - -#define AI_SetMyArghRating_LENGTH (AICMDSIZE +1 ) + ARGH_RATING , + +#define AI_SetMyArghRating_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD SET ACCURACY RATING +//## GUARD SET ACCURACY RATING //============================================================================== - -/******************************************************************************* - Set My Accuracy Rating - controls how accurately I fire my weapon -******************************************************************************** - @param ACCURACY_RATING: Signed* 0 - 100 (Default = 0) - @exception: Sets to chr->accuracyrating. - Does NOT use 007 accuracy modifier -*******************************************************************************/ + +/******************************************************************************* + Set My Accuracy Rating - controls how accurately I fire my weapon +******************************************************************************** + @param ACCURACY_RATING: Signed* 0 - 100 (Default = 0) + @exception: Sets to chr->accuracyrating. + Does NOT use 007 accuracy modifier +*******************************************************************************/ #define SetMyAccuracyRating(ACCURACY_RATING) \ AI_SetMyAccuracyRating , \ - ACCURACY_RATING , - -#define AI_SetMyAccuracyRating_LENGTH (AICMDSIZE +1 ) + ACCURACY_RATING , + +#define AI_SetMyAccuracyRating_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## GUARD FLAGS2 SET ON +//## GUARD FLAGS2 SET ON //============================================================================== - -/******************************************************************************* - Set My/BG flags2 -******************************************************************************** - @param BITS: Can be used to store a custom flag per chr, useful for missions. - Global Lists use flag 01, which is defined as - FLAGS2_DONT_POINT_AT_BOND. - Other bits are free to use for setups AI Lists. - BG Lists are free to utilize the entire spectrum of flags -*******************************************************************************/ + +/******************************************************************************* + Set My/BG flags2 +******************************************************************************** + @param BITS: Can be used to store a custom flag per chr, useful for missions. + Global Lists use flag 01, which is defined as + FLAGS2_DONT_POINT_AT_BOND. + Other bits are free to use for setups AI Lists. + BG Lists are free to utilize the entire spectrum of flags +*******************************************************************************/ #define SetMyFlags2(BITS) \ AI_SetMyFlags2 , \ - BITS , - -#define AI_SetMyFlags2_LENGTH (AICMDSIZE +1 ) + BITS , + +#define AI_SetMyFlags2_LENGTH (AICMDSIZE +1 ) + - # 7227 "src/aicommands.def" //POLYMORPHS -/******************************************************************************* - Set My/BG flags2 -******************************************************************************** - @param BITS: Can be used to store a custom flag per chr, useful for missions. - Global Lists use flag 01, which is defined as - FLAGS2_DONT_POINT_AT_BOND. - Other bits are free to use for setups AI Lists. - BG Lists are free to utilize the entire spectrum of flags -*******************************************************************************/ +/******************************************************************************* + Set My/BG flags2 +******************************************************************************** + @param BITS: Can be used to store a custom flag per chr, useful for missions. + Global Lists use flag 01, which is defined as + FLAGS2_DONT_POINT_AT_BOND. + Other bits are free to use for setups AI Lists. + BG Lists are free to utilize the entire spectrum of flags +*******************************************************************************/ #define SetBGFlags2(BITS) \ - SetMyFlags2(BITS) + SetMyFlags2(BITS) + - # 7234 "src/aicommands.def" //============================================================================== -//## GUARD FLAGS2 SET OFF +//## GUARD FLAGS2 SET OFF //============================================================================== - -/******************************************************************************* - Unset flags2 -******************************************************************************** - @param BITS: Can be used to store a custom flag per chr, useful for missions. - Global Lists use flag 01, which is defined as - FLAGS2_DONT_POINT_AT_BOND. - Other bits are free to use for setups AI Lists. - BG Lists are free to utilize the entire spectrum of flags -*******************************************************************************/ + +/******************************************************************************* + Unset flags2 +******************************************************************************** + @param BITS: Can be used to store a custom flag per chr, useful for missions. + Global Lists use flag 01, which is defined as + FLAGS2_DONT_POINT_AT_BOND. + Other bits are free to use for setups AI Lists. + BG Lists are free to utilize the entire spectrum of flags +*******************************************************************************/ #define UnsetMyFlags2(BITS) \ AI_UnsetMyFlags2 , \ - BITS , - -#define AI_UnsetMyFlags2_LENGTH (AICMDSIZE +1 ) + BITS , + +#define AI_UnsetMyFlags2_LENGTH (AICMDSIZE +1 ) + - # 7272 "src/aicommands.def" //POLYMORPHS -/******************************************************************************* - Unset flags2 -******************************************************************************** - @param BITS: Can be used to store a custom flag per chr, useful for missions. - Global Lists use flag 01, which is defined as - FLAGS2_DONT_POINT_AT_BOND. - Other bits are free to use for setups AI Lists. - BG Lists are free to utilize the entire spectrum of flags -*******************************************************************************/ +/******************************************************************************* + Unset flags2 +******************************************************************************** + @param BITS: Can be used to store a custom flag per chr, useful for missions. + Global Lists use flag 01, which is defined as + FLAGS2_DONT_POINT_AT_BOND. + Other bits are free to use for setups AI Lists. + BG Lists are free to utilize the entire spectrum of flags +*******************************************************************************/ #define UnsetBGFlags2(BITS) \ - UnsetMyFlags2(BITS) + UnsetMyFlags2(BITS) + - # 7279 "src/aicommands.def" //============================================================================== -//## IF GUARD FLAGS2 IS SET ON +//## IF GUARD FLAGS2 IS SET ON //============================================================================== - -/******************************************************************************* - If flags2 has BITS enabled -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param BITS: Can be used to store a custom flag per chr, useful for missions. - Global Lists use flag 01, which is defined as - FLAGS2_DONT_POINT_AT_BOND. - Other bits are free to use for setups AI Lists. - BG Lists are free to utilize the entire spectrum of flags -*******************************************************************************/ + +/******************************************************************************* + If flags2 has BITS enabled +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param BITS: Can be used to store a custom flag per chr, useful for missions. + Global Lists use flag 01, which is defined as + FLAGS2_DONT_POINT_AT_BOND. + Other bits are free to use for setups AI Lists. + BG Lists are free to utilize the entire spectrum of flags +*******************************************************************************/ #define IFMyFlags2Has(BITS, GOTOLABEL) \ AI_IFMyFlags2Has , \ BITS , \ - GOTOLABEL , - -#define AI_IFMyFlags2Has_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFMyFlags2Has_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - If flags2 has BITS enabled -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param BITS: Can be used to store a custom flag per chr, useful for missions. - Global Lists use flag 01, which is defined as - FLAGS2_DONT_POINT_AT_BOND. - Other bits are free to use for setups AI Lists. - BG Lists are free to utilize the entire spectrum of flags -*******************************************************************************/ +/******************************************************************************* + If flags2 has BITS enabled +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param BITS: Can be used to store a custom flag per chr, useful for missions. + Global Lists use flag 01, which is defined as + FLAGS2_DONT_POINT_AT_BOND. + Other bits are free to use for setups AI Lists. + BG Lists are free to utilize the entire spectrum of flags +*******************************************************************************/ #define IFBGFlags2Has(BITS) \ - IFMyFlags2Has(BITS) + IFMyFlags2Has(BITS) + - # 7330 "src/aicommands.def" //============================================================================== -//## CHR FLAGS2 SET ON +//## CHR FLAGS2 SET ON //============================================================================== - -/******************************************************************************* - Set flags2 for CHR_NUM -******************************************************************************** - @param CHR_NUM: ID of Chr (0-240) - @param BITS: Can be used to store a custom flag per chr, useful for missions. - Global Lists use flag 01, which is defined as - FLAGS2_DONT_POINT_AT_BOND. - Other bits are free to use for setups AI Lists. - BG Lists are free to utilize the entire spectrum of flags -*******************************************************************************/ + +/******************************************************************************* + Set flags2 for CHR_NUM +******************************************************************************** + @param CHR_NUM: ID of Chr (0-240) + @param BITS: Can be used to store a custom flag per chr, useful for missions. + Global Lists use flag 01, which is defined as + FLAGS2_DONT_POINT_AT_BOND. + Other bits are free to use for setups AI Lists. + BG Lists are free to utilize the entire spectrum of flags +*******************************************************************************/ #define SetChrBitfield(CHR_NUM, BITS) \ AI_SetChrBitfield , \ CHR_NUM , \ - BITS , - -#define AI_SetChrBitfield_LENGTH (AICMDSIZE +1 +1 ) + BITS , + +#define AI_SetChrBitfield_LENGTH (AICMDSIZE +1 +1 ) + - # 7368 "src/aicommands.def" //============================================================================== -//## CHR FLAGS2 SET OFF +//## CHR FLAGS2 SET OFF //============================================================================== - -/******************************************************************************* - Unet flags2 for CHR_NUM -******************************************************************************** - @param CHR_NUM: ID of Chr (0-240) - @param BITS: Can be used to store a custom flag per chr, useful for missions. - Global Lists use flag 01, which is defined as - FLAGS2_DONT_POINT_AT_BOND. - Other bits are free to use for setups AI Lists. - BG Lists are free to utilize the entire spectrum of flags -*******************************************************************************/ + +/******************************************************************************* + Unet flags2 for CHR_NUM +******************************************************************************** + @param CHR_NUM: ID of Chr (0-240) + @param BITS: Can be used to store a custom flag per chr, useful for missions. + Global Lists use flag 01, which is defined as + FLAGS2_DONT_POINT_AT_BOND. + Other bits are free to use for setups AI Lists. + BG Lists are free to utilize the entire spectrum of flags +*******************************************************************************/ #define UnsetChrBitfield(CHR_NUM, BITS) \ AI_UnsetChrBitfield , \ CHR_NUM , \ - BITS , - -#define AI_UnsetChrBitfield_LENGTH (AICMDSIZE +1 +1 ) + BITS , + +#define AI_UnsetChrBitfield_LENGTH (AICMDSIZE +1 +1 ) + - # 7406 "src/aicommands.def" //============================================================================== -//## IF CHR FLAGS2 IS SET ON +//## IF CHR FLAGS2 IS SET ON //============================================================================== - -/******************************************************************************* - If flags2 has BITS enabled -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param CHR_NUM: ID of Chr (0-240) - @param BITS: Can be used to store a custom flag per chr, useful for missions. - Global Lists use flag 01, which is defined as - FLAGS2_DONT_POINT_AT_BOND. - Other bits are free to use for setups AI Lists. - BG Lists are free to utilize the entire spectrum of flags -*******************************************************************************/ + +/******************************************************************************* + If flags2 has BITS enabled +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param CHR_NUM: ID of Chr (0-240) + @param BITS: Can be used to store a custom flag per chr, useful for missions. + Global Lists use flag 01, which is defined as + FLAGS2_DONT_POINT_AT_BOND. + Other bits are free to use for setups AI Lists. + BG Lists are free to utilize the entire spectrum of flags +*******************************************************************************/ #define IFChrBitfieldHas(CHR_NUM, BITS, GOTOLABEL) \ AI_IFChrBitfieldHas , \ CHR_NUM , \ BITS , \ - GOTOLABEL , - -#define AI_IFChrBitfieldHas_LENGTH (AICMDSIZE +1 +1 +1 ) + GOTOLABEL , + +#define AI_IFChrBitfieldHas_LENGTH (AICMDSIZE +1 +1 +1 ) + - //============================================================================== -//## OBJECTIVE BITFIELD SET ON +//## OBJECTIVE BITFIELD SET ON //============================================================================== - -/******************************************************************************* - Set bits in objective bitfield -******************************************************************************** - @param BITFIELD: 32 bits - @exception: Can be used to store a mission unique objective flag, which can be - linked to mission objectives. - It can also be used to store miscellaneous flags used by other - AI Lists - If a mission objective is changed while in third person, it will - not be updated on the briefing page - all mission objectives - status are locked while in third person -*******************************************************************************/ + +/******************************************************************************* + Set bits in objective bitfield +******************************************************************************** + @param BITFIELD: 32 bits + @exception: Can be used to store a mission unique objective flag, which can be + linked to mission objectives. + It can also be used to store miscellaneous flags used by other + AI Lists + If a mission objective is changed while in third person, it will + not be updated on the briefing page - all mission objectives + status are locked while in third person +*******************************************************************************/ #define SetObjectiveBitfield(BITFIELD) \ AI_SetObjectiveBitfield , \ - CharArrayFrom32(BITFIELD) , - -#define AI_SetObjectiveBitfield_LENGTH (AICMDSIZE +4 ) + CharArrayFrom32(BITFIELD) , + +#define AI_SetObjectiveBitfield_LENGTH (AICMDSIZE +4 ) + - //============================================================================== -//## OBJECTIVE BITFIELD SET OFF +//## OBJECTIVE BITFIELD SET OFF //============================================================================== - -/******************************************************************************* - Unset bits in objective bitfield -******************************************************************************** - @param BITFIELD: 32 bits - @exception: Can be used to store a mission unique objective flag, which can be - linked to mission objectives. - It can also be used to store miscellaneous flags used by other - AI Lists - If a mission objective is changed while in third person, it will - not be updated on the briefing page - all mission objectives - status are locked while in third person -*******************************************************************************/ + +/******************************************************************************* + Unset bits in objective bitfield +******************************************************************************** + @param BITFIELD: 32 bits + @exception: Can be used to store a mission unique objective flag, which can be + linked to mission objectives. + It can also be used to store miscellaneous flags used by other + AI Lists + If a mission objective is changed while in third person, it will + not be updated on the briefing page - all mission objectives + status are locked while in third person +*******************************************************************************/ #define UnsetObjectiveBitfield(BITFIELD) \ AI_UnsetObjectiveBitfield , \ - CharArrayFrom32(BITFIELD) , - -#define AI_UnsetObjectiveBitfield_LENGTH (AICMDSIZE +4 ) + CharArrayFrom32(BITFIELD) , + +#define AI_UnsetObjectiveBitfield_LENGTH (AICMDSIZE +4 ) + - //============================================================================== -//## IF OBJECTIVE BITFIELD IS SET ON +//## IF OBJECTIVE BITFIELD IS SET ON //============================================================================== - -/******************************************************************************* - If ObjectiveBitfield has BITS enabled -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If ObjectiveBitfield has BITS enabled +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFObjectiveBitfieldHas(BITS, GOTOLABEL) \ AI_IFObjectiveBitfieldHas , \ CharArrayFrom32(BITS) , \ - GOTOLABEL , - -#define AI_IFObjectiveBitfieldHas_LENGTH (AICMDSIZE +4 +1 ) + GOTOLABEL , + +#define AI_IFObjectiveBitfieldHas_LENGTH (AICMDSIZE +4 +1 ) + - //============================================================================== -//## GUARD FLAGS SET ON +//## GUARD FLAGS SET ON //============================================================================== - -/******************************************************************************* - Set My/BG chrflags -******************************************************************************** - @param CHRFLAGS: uses CHRFLAG_# defines. - @exception: Chr->chrflags are not AI List or setup exclusive, they are - controlled by many parts of the engine. - Can be used by BG AI Lists, BG AI Lists are free to utilize the - entire spectrum of flags -*******************************************************************************/ + +/******************************************************************************* + Set My/BG chrflags +******************************************************************************** + @param CHRFLAGS: uses CHRFLAG_# defines. + @exception: Chr->chrflags are not AI List or setup exclusive, they are + controlled by many parts of the engine. + Can be used by BG AI Lists, BG AI Lists are free to utilize the + entire spectrum of flags +*******************************************************************************/ #define SetMychrflags(CHRFLAGS) \ AI_SetMychrflags , \ - CharArrayFrom32(CHRFLAGS) , - -#define AI_SetMychrflags_LENGTH (AICMDSIZE +4 ) + CharArrayFrom32(CHRFLAGS) , + +#define AI_SetMychrflags_LENGTH (AICMDSIZE +4 ) + - //POLYMORPHS -/******************************************************************************* - Set My/BG chrflags -******************************************************************************** - @param CHRFLAGS: uses CHRFLAG_# defines. - @exception: Chr->chrflags are not AI List or setup exclusive, they are - controlled by many parts of the engine. - Can be used by BG AI Lists, BG AI Lists are free to utilize the - entire spectrum of flags -*******************************************************************************/ +/******************************************************************************* + Set My/BG chrflags +******************************************************************************** + @param CHRFLAGS: uses CHRFLAG_# defines. + @exception: Chr->chrflags are not AI List or setup exclusive, they are + controlled by many parts of the engine. + Can be used by BG AI Lists, BG AI Lists are free to utilize the + entire spectrum of flags +*******************************************************************************/ #define SetBGchrflags(CHRFLAGS) \ - SetMychrflags(CHRFLAGS) + SetMychrflags(CHRFLAGS) + - # 7618 "src/aicommands.def" //============================================================================== -//## GUARD FLAGS SET OFF +//## GUARD FLAGS SET OFF //============================================================================== - -/******************************************************************************* - Set My/BG chrflags -******************************************************************************** - @param CHRFLAGS: uses CHRFLAG_# defines. - @exception: Chr->chrflags are not AI List or setup exclusive, they are - controlled by many parts of the engine. - Can be used by BG AI Lists, BG AI Lists are free to utilize the - entire spectrum of flags -*******************************************************************************/ + +/******************************************************************************* + Set My/BG chrflags +******************************************************************************** + @param CHRFLAGS: uses CHRFLAG_# defines. + @exception: Chr->chrflags are not AI List or setup exclusive, they are + controlled by many parts of the engine. + Can be used by BG AI Lists, BG AI Lists are free to utilize the + entire spectrum of flags +*******************************************************************************/ #define UnsetMychrflags(CHRFLAGS) \ AI_UnsetMychrflags , \ - CharArrayFrom32(CHRFLAGS) , - -#define AI_UnsetMychrflags_LENGTH (AICMDSIZE +4 ) + CharArrayFrom32(CHRFLAGS) , + +#define AI_UnsetMychrflags_LENGTH (AICMDSIZE +4 ) + - //POLYMORPHS -/******************************************************************************* - Set My/BG chrflags -******************************************************************************** - @param CHRFLAGS: uses CHRFLAG_# defines. - @exception: Chr->chrflags are not AI List or setup exclusive, they are - controlled by many parts of the engine. - Can be used by BG AI Lists, BG AI Lists are free to utilize the - entire spectrum of flags -*******************************************************************************/ +/******************************************************************************* + Set My/BG chrflags +******************************************************************************** + @param CHRFLAGS: uses CHRFLAG_# defines. + @exception: Chr->chrflags are not AI List or setup exclusive, they are + controlled by many parts of the engine. + Can be used by BG AI Lists, BG AI Lists are free to utilize the + entire spectrum of flags +*******************************************************************************/ #define UnsetBGchrflags(CHRFLAGS) \ - UnsetMychrflags(CHRFLAGS) + UnsetMychrflags(CHRFLAGS) + - # 7662 "src/aicommands.def" //============================================================================== -//## IF GUARD FLAGS IS SET ON +//## IF GUARD FLAGS IS SET ON //============================================================================== - -/******************************************************************************* - If My/BG chrflags has CHRFLAGS set -******************************************************************************** - @param CHRFLAGS: uses CHRFLAG_# defines. - @return Continue execution from LABEL if TRUE - @exception: Chr->chrflags are not AI List or setup exclusive, they are - controlled by many parts of the engine. - Can be used by BG AI Lists, BG AI Lists are free to utilize the - entire spectrum of flags -*******************************************************************************/ + +/******************************************************************************* + If My/BG chrflags has CHRFLAGS set +******************************************************************************** + @param CHRFLAGS: uses CHRFLAG_# defines. + @return Continue execution from LABEL if TRUE + @exception: Chr->chrflags are not AI List or setup exclusive, they are + controlled by many parts of the engine. + Can be used by BG AI Lists, BG AI Lists are free to utilize the + entire spectrum of flags +*******************************************************************************/ #define IFMychrflagsHas(CHRFLAGS, GOTOLABEL) \ AI_IFMychrflagsHas , \ CharArrayFrom32(CHRFLAGS) , \ - GOTOLABEL , - -#define AI_IFMychrflagsHas_LENGTH (AICMDSIZE +4 +1 ) + GOTOLABEL , + +#define AI_IFMychrflagsHas_LENGTH (AICMDSIZE +4 +1 ) + - //POLYMORPHS -/******************************************************************************* - If My/BG chrflags has CHRFLAGS set -******************************************************************************** - @param CHRFLAGS: uses CHRFLAG_# defines. - @return Continue execution from LABEL if TRUE - @exception: Chr->chrflags are not AI List or setup exclusive, they are - controlled by many parts of the engine. - Can be used by BG AI Lists, BG AI Lists are free to utilize the - entire spectrum of flags -*******************************************************************************/ +/******************************************************************************* + If My/BG chrflags has CHRFLAGS set +******************************************************************************** + @param CHRFLAGS: uses CHRFLAG_# defines. + @return Continue execution from LABEL if TRUE + @exception: Chr->chrflags are not AI List or setup exclusive, they are + controlled by many parts of the engine. + Can be used by BG AI Lists, BG AI Lists are free to utilize the + entire spectrum of flags +*******************************************************************************/ #define IFBGchrflagsHas(CHRFLAGS) \ - IFMychrflagsHas(CHRFLAGS) + IFMychrflagsHas(CHRFLAGS) + - # 7714 "src/aicommands.def" //============================================================================== -//## CHR FLAGS SET ON +//## CHR FLAGS SET ON //============================================================================== - -/******************************************************************************* - Set chr chrflags -******************************************************************************** - @param CHRFLAGS: uses CHRFLAG_# defines. - @exception: Chr->chrflags are not AI List or setup exclusive, they are - controlled by many parts of the engine. -*******************************************************************************/ + +/******************************************************************************* + Set chr chrflags +******************************************************************************** + @param CHRFLAGS: uses CHRFLAG_# defines. + @exception: Chr->chrflags are not AI List or setup exclusive, they are + controlled by many parts of the engine. +*******************************************************************************/ #define SetChrchrflags(CHR_NUM, CHRFLAGS) \ AI_SetChrchrflags , \ CHR_NUM , \ - CharArrayFrom32(CHRFLAGS) , - -#define AI_SetChrchrflags_LENGTH (AICMDSIZE +1 +4 ) + CharArrayFrom32(CHRFLAGS) , + +#define AI_SetChrchrflags_LENGTH (AICMDSIZE +1 +4 ) + - //============================================================================== -//## CHR FLAGS SET OFF +//## CHR FLAGS SET OFF //============================================================================== - -/******************************************************************************* - Unset chr chrflags -******************************************************************************** - @param CHRFLAGS: uses CHRFLAG_# defines. - @exception: Chr->chrflags are not AI List or setup exclusive, they are - controlled by many parts of the engine. -*******************************************************************************/ + +/******************************************************************************* + Unset chr chrflags +******************************************************************************** + @param CHRFLAGS: uses CHRFLAG_# defines. + @exception: Chr->chrflags are not AI List or setup exclusive, they are + controlled by many parts of the engine. +*******************************************************************************/ #define UnsetChrchrflags(CHR_NUM, CHRFLAGS) \ AI_UnsetChrchrflags , \ CHR_NUM , \ - CharArrayFrom32(CHRFLAGS) , - -#define AI_UnsetChrchrflags_LENGTH (AICMDSIZE +1 +4 ) + CharArrayFrom32(CHRFLAGS) , + +#define AI_UnsetChrchrflags_LENGTH (AICMDSIZE +1 +4 ) + - //============================================================================== -//## IF CHR FLAGS IS SET ON +//## IF CHR FLAGS IS SET ON //============================================================================== - -/******************************************************************************* - If Chr chrflags has CHRFLAGS set -******************************************************************************** - @param CHRFLAGS: uses CHRFLAG_# defines. - @return Continue execution from LABEL if TRUE - @exception: Chr->chrflags are not AI List or setup exclusive, they are - controlled by many parts of the engine. -*******************************************************************************/ + +/******************************************************************************* + If Chr chrflags has CHRFLAGS set +******************************************************************************** + @param CHRFLAGS: uses CHRFLAG_# defines. + @return Continue execution from LABEL if TRUE + @exception: Chr->chrflags are not AI List or setup exclusive, they are + controlled by many parts of the engine. +*******************************************************************************/ #define IFChrchrflagsHas(CHR_NUM, CHRFLAGS, GOTOLABEL) \ AI_IFChrchrflagsHas , \ CHR_NUM , \ CharArrayFrom32(CHRFLAGS) , \ - GOTOLABEL , - -#define AI_IFChrchrflagsHas_LENGTH (AICMDSIZE +1 +4 +1 ) + GOTOLABEL , + +#define AI_IFChrchrflagsHas_LENGTH (AICMDSIZE +1 +4 +1 ) + - //============================================================================== -//## OBJECT FLAGS 1 SET ON +//## OBJECT FLAGS 1 SET ON //============================================================================== - -/******************************************************************************* - Set object flags -******************************************************************************** - @param BITFIELD uses PROPFLAG_# defines -*******************************************************************************/ + +/******************************************************************************* + Set object flags +******************************************************************************** + @param BITFIELD uses PROPFLAG_# defines +*******************************************************************************/ #define SetObjectFlags(OBJECT_TAG, BITFIELD) \ AI_SetObjectFlags , \ OBJECT_TAG , \ - CharArrayFrom32(BITFIELD) , - -#define AI_SetObjectFlags_LENGTH (AICMDSIZE +1 +4 ) + CharArrayFrom32(BITFIELD) , + +#define AI_SetObjectFlags_LENGTH (AICMDSIZE +1 +4 ) + - //============================================================================== -//## OBJECT FLAGS 1 SET OFF +//## OBJECT FLAGS 1 SET OFF //============================================================================== - -/******************************************************************************* - Unset object flags -******************************************************************************** - @param BITFIELD uses PROPFLAG_# defines -*******************************************************************************/ + +/******************************************************************************* + Unset object flags +******************************************************************************** + @param BITFIELD uses PROPFLAG_# defines +*******************************************************************************/ #define UnsetObjectFlags(OBJECT_TAG, BITFIELD) \ AI_UnsetObjectFlags , \ OBJECT_TAG , \ - CharArrayFrom32(BITFIELD) , - -#define AI_UnsetObjectFlags_LENGTH (AICMDSIZE +1 +4 ) + CharArrayFrom32(BITFIELD) , + +#define AI_UnsetObjectFlags_LENGTH (AICMDSIZE +1 +4 ) + - //============================================================================== -//## IF OBJECT FLAGS 1 IS SET ON +//## IF OBJECT FLAGS 1 IS SET ON //============================================================================== - -/******************************************************************************* - If object flags has BITS -******************************************************************************** - @param BITS: uses PROPFLAG_# defines - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If object flags has BITS +******************************************************************************** + @param BITS: uses PROPFLAG_# defines + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFObjectFlagsHas(OBJECT_TAG, BITS, GOTOLABEL) \ AI_IFObjectFlagsHas , \ OBJECT_TAG , \ CharArrayFrom32(BITS) , \ - GOTOLABEL , - -#define AI_IFObjectFlagsHas_LENGTH (AICMDSIZE +1 +4 +1 ) + GOTOLABEL , + +#define AI_IFObjectFlagsHas_LENGTH (AICMDSIZE +1 +4 +1 ) + - //============================================================================== -//## OBJECT FLAGS 2 SET ON +//## OBJECT FLAGS 2 SET ON //============================================================================== - -/******************************************************************************* - Set object flags2 -******************************************************************************** - @param BITS: uses PROPFLAG2_# defines -*******************************************************************************/ + +/******************************************************************************* + Set object flags2 +******************************************************************************** + @param BITS: uses PROPFLAG2_# defines +*******************************************************************************/ #define SetObjectFlags2(OBJECT_TAG, BITS) \ AI_SetObjectFlags2 , \ OBJECT_TAG , \ - CharArrayFrom32(BITS) , - -#define AI_SetObjectFlags2_LENGTH (AICMDSIZE +1 +4 ) + CharArrayFrom32(BITS) , + +#define AI_SetObjectFlags2_LENGTH (AICMDSIZE +1 +4 ) + - //============================================================================== -//## OBJECT FLAGS 2 SET OFF +//## OBJECT FLAGS 2 SET OFF //============================================================================== - -/******************************************************************************* - Unset object flags2 -******************************************************************************** - @param BITS: uses PROPFLAG2_# defines -*******************************************************************************/ + +/******************************************************************************* + Unset object flags2 +******************************************************************************** + @param BITS: uses PROPFLAG2_# defines +*******************************************************************************/ #define UnsetObjectFlags2(OBJECT_TAG, BITS) \ AI_UnsetObjectFlags2 , \ OBJECT_TAG , \ - CharArrayFrom32(BITS) , - -#define AI_UnsetObjectFlags2_LENGTH (AICMDSIZE +1 +4 ) + CharArrayFrom32(BITS) , + +#define AI_UnsetObjectFlags2_LENGTH (AICMDSIZE +1 +4 ) + - //============================================================================== -//## IF OBJECT FLAGS 2 IS SET ON +//## IF OBJECT FLAGS 2 IS SET ON //============================================================================== - -/******************************************************************************* - If object flags2 has BITS -******************************************************************************** - @param BITS: uses PROPFLAG2_# defines - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If object flags2 has BITS +******************************************************************************** + @param BITS: uses PROPFLAG2_# defines + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFObjectFlags2Has(OBJECT_TAG, BITFIELD, GOTOLABEL) \ AI_IFObjectFlags2Has , \ OBJECT_TAG , \ CharArrayFrom32(BITFIELD) , \ - GOTOLABEL , - -#define AI_IFObjectFlags2Has_LENGTH (AICMDSIZE +1 +4 +1 ) + GOTOLABEL , + +#define AI_IFObjectFlags2Has_LENGTH (AICMDSIZE +1 +4 +1 ) + - //============================================================================== -//## GUARD SET CHR PRESET +//## GUARD SET CHR PRESET //============================================================================== - -/******************************************************************************* - Set My/BG Preset Chr to CHR_PRESET -*******************************************************************************/ + +/******************************************************************************* + Set My/BG Preset Chr to CHR_PRESET +*******************************************************************************/ #define SetMyChrPreset(CHR_PRESET) \ AI_SetMyChrPreset , \ - CHR_PRESET , - -#define AI_SetMyChrPreset_LENGTH (AICMDSIZE +1 ) + CHR_PRESET , + +#define AI_SetMyChrPreset_LENGTH (AICMDSIZE +1 ) + - # 8105 "src/aicommands.def" //POLYMORPHS -/******************************************************************************* - Set My/BG Preset Chr to CHR_PRESET -*******************************************************************************/ +/******************************************************************************* + Set My/BG Preset Chr to CHR_PRESET +*******************************************************************************/ #define SetBGChrPreset(CHRFLAGS) \ - SetMyChrPreset(CHRFLAGS) + SetMyChrPreset(CHRFLAGS) + - # 8112 "src/aicommands.def" //============================================================================== -//## CHR SET CHR PRESET +//## CHR SET CHR PRESET //============================================================================== - -/******************************************************************************* - Set Chr Preset Chr to CHR_PRESET -*******************************************************************************/ + +/******************************************************************************* + Set Chr Preset Chr to CHR_PRESET +*******************************************************************************/ #define SetChrChrPreset(CHR_NUM, CHR_PRESET) \ AI_SetChrChrPreset , \ CHR_NUM , \ - CHR_PRESET , - -#define AI_SetChrChrPreset_LENGTH (AICMDSIZE +1 +1 ) + CHR_PRESET , + +#define AI_SetChrChrPreset_LENGTH (AICMDSIZE +1 +1 ) + - # 8143 "src/aicommands.def" //============================================================================== -//## GUARD SET PAD PRESET +//## GUARD SET PAD PRESET //============================================================================== - -/******************************************************************************* - Set My/BG Preset Pad to PAD_PRESET -*******************************************************************************/ + +/******************************************************************************* + Set My/BG Preset Pad to PAD_PRESET +*******************************************************************************/ #define SetMyPadPreset(PAD_PRESET) \ AI_SetMyPadPreset , \ - CharArrayFrom16(PAD_PRESET) , - -#define AI_SetMyPadPreset_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(PAD_PRESET) , + +#define AI_SetMyPadPreset_LENGTH (AICMDSIZE +2 ) + - //POLYMORPHS -/******************************************************************************* - Set My/BG Preset Pad to PAD_PRESET -*******************************************************************************/ +/******************************************************************************* + Set My/BG Preset Pad to PAD_PRESET +*******************************************************************************/ #define SetBGPadPreset(CHRFLAGS) \ - SetMyPadPreset(CHRFLAGS) + SetMyPadPreset(CHRFLAGS) + - # 8189 "src/aicommands.def" //============================================================================== -//## CHR SET PAD PRESET +//## CHR SET PAD PRESET //============================================================================== - -/******************************************************************************* - Set Chr Preset Pad to PAD_PRESET -*******************************************************************************/ + +/******************************************************************************* + Set Chr Preset Pad to PAD_PRESET +*******************************************************************************/ #define SetChrPadPreset(CHR_NUM, PAD_PRESET) \ AI_SetChrPadPreset , \ CHR_NUM , \ - CharArrayFrom16(PAD_PRESET) , - -#define AI_SetChrPadPreset_LENGTH (AICMDSIZE +1 +2 ) + CharArrayFrom16(PAD_PRESET) , + +#define AI_SetChrPadPreset_LENGTH (AICMDSIZE +1 +2 ) + - # 8221 "src/aicommands.def" //============================================================================== -//## Print (Canonical name) +//## Print (Canonical name) //============================================================================== - -/******************************************************************************* - Debug Comment -******************************************************************************** - @return: May have originally printed to stderr on host 1 devkit. -*******************************************************************************/ + +/******************************************************************************* + Debug Comment +******************************************************************************** + @return: May have originally printed to stderr on host 1 devkit. +*******************************************************************************/ #define PRINT(STRING) \ - AI_PRINT , + AI_PRINT , + - //============================================================================== -//## LOCAL TIMER RESET START +//## LOCAL TIMER RESET START //============================================================================== - -/******************************************************************************* - Start My/BG timer from 0. Counts up 60 times a second. -******************************************************************************** - @exception: Local timer is unique for each chr, while hud countdown is global - for the entire mission. -*******************************************************************************/ + +/******************************************************************************* + Start My/BG timer from 0. Counts up 60 times a second. +******************************************************************************** + @exception: Local timer is unique for each chr, while hud countdown is global + for the entire mission. +*******************************************************************************/ #define MyTimerStart() \ - AI_MyTimerStart , - -#define AI_MyTimerStart_LENGTH (AICMDSIZE ) + AI_MyTimerStart , + +#define AI_MyTimerStart_LENGTH (AICMDSIZE ) + - # 8286 "src/aicommands.def" //POLYMORPHS -/******************************************************************************* - Start My/BG timer from 0. Counts up 60 times a second. -******************************************************************************** - @exception: Local timer is unique for each chr, while hud countdown is global - for the entire mission. -*******************************************************************************/ +/******************************************************************************* + Start My/BG timer from 0. Counts up 60 times a second. +******************************************************************************** + @exception: Local timer is unique for each chr, while hud countdown is global + for the entire mission. +*******************************************************************************/ #define BGTimerResetStart() \ - MyTimerStart() + MyTimerStart() + - # 8293 "src/aicommands.def" //============================================================================== -//## LOCAL TIMER RESET +//## LOCAL TIMER RESET //============================================================================== - -/******************************************************************************* - Reset My/BG timer to 0. Does Not start or stop timer. -******************************************************************************** - @exception: Local timer is unique for each chr, while hud countdown is global - for the entire mission. -*******************************************************************************/ + +/******************************************************************************* + Reset My/BG timer to 0. Does Not start or stop timer. +******************************************************************************** + @exception: Local timer is unique for each chr, while hud countdown is global + for the entire mission. +*******************************************************************************/ #define MyTimerReset() \ - AI_MyTimerReset , - -#define AI_MyTimerReset_LENGTH (AICMDSIZE ) + AI_MyTimerReset , + +#define AI_MyTimerReset_LENGTH (AICMDSIZE ) + - # 8326 "src/aicommands.def" //POLYMORPHS -/******************************************************************************* - Reset My/BG timer to 0. Does Not start or stop timer. -******************************************************************************** - @exception: Local timer is unique for each chr, while hud countdown is global - for the entire mission. -*******************************************************************************/ +/******************************************************************************* + Reset My/BG timer to 0. Does Not start or stop timer. +******************************************************************************** + @exception: Local timer is unique for each chr, while hud countdown is global + for the entire mission. +*******************************************************************************/ #define BGTimerReset() \ - MyTimerReset() + MyTimerReset() + - # 8333 "src/aicommands.def" //============================================================================== -//## LOCAL TIMER STOP +//## LOCAL TIMER STOP //============================================================================== - -/******************************************************************************* - Pause My/BG timer. -******************************************************************************** - @exception: Local timer is unique for each chr, while hud countdown is global - for the entire mission. -*******************************************************************************/ + +/******************************************************************************* + Pause My/BG timer. +******************************************************************************** + @exception: Local timer is unique for each chr, while hud countdown is global + for the entire mission. +*******************************************************************************/ #define MyTimerPause() \ - AI_MyTimerPause , - -#define AI_MyTimerPause_LENGTH (AICMDSIZE ) + AI_MyTimerPause , + +#define AI_MyTimerPause_LENGTH (AICMDSIZE ) + - # 8366 "src/aicommands.def" //POLYMORPHS -/******************************************************************************* - Pause My/BG timer. -******************************************************************************** - @exception: Local timer is unique for each chr, while hud countdown is global - for the entire mission. -*******************************************************************************/ +/******************************************************************************* + Pause My/BG timer. +******************************************************************************** + @exception: Local timer is unique for each chr, while hud countdown is global + for the entire mission. +*******************************************************************************/ #define BGTimerPause() \ - MyTimerPause() + MyTimerPause() + - # 8373 "src/aicommands.def" //============================================================================== -//## LOCAL TIMER START +//## LOCAL TIMER START //============================================================================== - -/******************************************************************************* - Resume My/BG timer. If you want to Start from 0, use MyTimerStart() -******************************************************************************** - @exception: Local timer is unique for each chr, while hud countdown is global - for the entire mission. -*******************************************************************************/ + +/******************************************************************************* + Resume My/BG timer. If you want to Start from 0, use MyTimerStart() +******************************************************************************** + @exception: Local timer is unique for each chr, while hud countdown is global + for the entire mission. +*******************************************************************************/ #define MyTimerResume() \ - AI_MyTimerResume , - -#define AI_MyTimerResume_LENGTH (AICMDSIZE ) + AI_MyTimerResume , + +#define AI_MyTimerResume_LENGTH (AICMDSIZE ) + - # 8406 "src/aicommands.def" //POLYMORPHS -/******************************************************************************* - Resume My/BG timer. If you want to Start from 0, use MyTimerStart() -******************************************************************************** - @exception: Local timer is unique for each chr, while hud countdown is global - for the entire mission. -*******************************************************************************/ +/******************************************************************************* + Resume My/BG timer. If you want to Start from 0, use MyTimerStart() +******************************************************************************** + @exception: Local timer is unique for each chr, while hud countdown is global + for the entire mission. +*******************************************************************************/ #define BGTimerResume() \ - MyTimerResume() + MyTimerResume() + - # 8413 "src/aicommands.def" //============================================================================== -//## IF LOCAL TIMER HAS STOPPED +//## IF LOCAL TIMER HAS STOPPED //============================================================================== - -/******************************************************************************* - If My/BG timer is NOT running (paused) -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: By default, timer is inactive -*******************************************************************************/ + +/******************************************************************************* + If My/BG timer is NOT running (paused) +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: By default, timer is inactive +*******************************************************************************/ #define IFMyTimerIsNotRunning(GOTOLABEL) \ AI_IFMyTimerIsNotRunning , \ - GOTOLABEL , - -#define AI_IFMyTimerIsNotRunning_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFMyTimerIsNotRunning_LENGTH (AICMDSIZE +1 ) + - //POLYMORPHS -/******************************************************************************* - If My/BG timer is NOT running (paused) -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: By default, timer is inactive -*******************************************************************************/ +/******************************************************************************* + If My/BG timer is NOT running (paused) +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: By default, timer is inactive +*******************************************************************************/ #define IFBGTimerIsNotRunning(GOTOLABEL) \ - IFMyTimerIsNotRunning(GOTOLABEL) + IFMyTimerIsNotRunning(GOTOLABEL) + - # 8460 "src/aicommands.def" //============================================================================== -//## IF LOCAL TIMER LESS THAN +//## IF LOCAL TIMER LESS THAN //============================================================================== - -/******************************************************************************* - If My/BG Timer is Less Than TICKS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param TICKS: Unsigned integer 1/60 or 1/50 Second - @exception: TICKS is converted to float and compared. -*******************************************************************************/ + +/******************************************************************************* + If My/BG Timer is Less Than TICKS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param TICKS: Unsigned integer 1/60 or 1/50 Second + @exception: TICKS is converted to float and compared. +*******************************************************************************/ #define IFMyTimerLessThanTicks(TICKS, GOTOLABEL) \ AI_IFMyTimerLessThanTicks , \ CharArrayFrom24(TICKS) , \ - GOTOLABEL , - -#define AI_IFMyTimerLessThanTicks_LENGTH (AICMDSIZE +3 +1 ) + GOTOLABEL , + +#define AI_IFMyTimerLessThanTicks_LENGTH (AICMDSIZE +3 +1 ) + - //POLYMORPHS -/******************************************************************************* - If My/BG Timer is Less Than TICKS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param TICKS: Unsigned integer 1/60 or 1/50 Second - @exception: TICKS is converted to float and compared. -*******************************************************************************/ +/******************************************************************************* + If My/BG Timer is Less Than TICKS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param TICKS: Unsigned integer 1/60 or 1/50 Second + @exception: TICKS is converted to float and compared. +*******************************************************************************/ #define IFBGTimerLessThanTicks(TICKS,GOTOLABEL) \ - IFMyTimerLessThanTicks(TICKS,GOTOLABEL) + IFMyTimerLessThanTicks(TICKS,GOTOLABEL) + - # 8509 "src/aicommands.def" -/******************************************************************************* - If My/BG Timer is Less Than SECONDS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param SECONDS: Unsigned integer -*******************************************************************************/ +/******************************************************************************* + If My/BG Timer is Less Than SECONDS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param SECONDS: Unsigned integer +*******************************************************************************/ #define IFMyTimerLessThanSeconds(SECONDS, GOTOLABEL) \ - IFMyTimerLessThanTicks((SECS_TO_TIMER60(SECONDS)), GOTOLABEL) + IFMyTimerLessThanTicks((SECS_TO_TIMER60(SECONDS)), GOTOLABEL) + - # 8522 "src/aicommands.def" -/******************************************************************************* - If My/BG Timer is Less Than SECONDS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param SECONDS: Unsigned integer -*******************************************************************************/ +/******************************************************************************* + If My/BG Timer is Less Than SECONDS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param SECONDS: Unsigned integer +*******************************************************************************/ #define IFBGTimerLessThanSeconds(SECONDS, GOTOLABEL) \ - IFMyTimerLessThanTicks((SECS_TO_TIMER60(SECONDS)), GOTOLABEL) + IFMyTimerLessThanTicks((SECS_TO_TIMER60(SECONDS)), GOTOLABEL) + - # 8526 "src/aicommands.def" //============================================================================== -//## IF LOCAL TIMER GREATER THAN +//## IF LOCAL TIMER GREATER THAN //============================================================================== - -/******************************************************************************* - If My/BG Timer is Greater Than TICKS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param TICKS: Unsigned integer 1/60 or 1/50 Second - @exception: TICKS is converted to float and compared. -*******************************************************************************/ + +/******************************************************************************* + If My/BG Timer is Greater Than TICKS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param TICKS: Unsigned integer 1/60 or 1/50 Second + @exception: TICKS is converted to float and compared. +*******************************************************************************/ #define IFMyTimerGreaterThanTicks(TICKS, GOTOLABEL) \ AI_IFMyTimerGreaterThanTicks , \ CharArrayFrom24(TICKS) , \ - GOTOLABEL , - -#define AI_IFMyTimerGreaterThanTicks_LENGTH (AICMDSIZE +3 +1 ) + GOTOLABEL , + +#define AI_IFMyTimerGreaterThanTicks_LENGTH (AICMDSIZE +3 +1 ) + - //POLYMORPHS -/******************************************************************************* - If My/BG Timer is Greater Than TICKS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param TICKS: Unsigned integer 1/60 or 1/50 Second - @exception: TICKS is converted to float and compared. -*******************************************************************************/ +/******************************************************************************* + If My/BG Timer is Greater Than TICKS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param TICKS: Unsigned integer 1/60 or 1/50 Second + @exception: TICKS is converted to float and compared. +*******************************************************************************/ #define IFBGTimerGreaterThanTicks(TICKS,GOTOLABEL) \ - IFMyTimerGreaterThanTicks(TICKS,GOTOLABEL) + IFMyTimerGreaterThanTicks(TICKS,GOTOLABEL) + - # 8576 "src/aicommands.def" -/******************************************************************************* - If My/BG Timer is Less Than SECONDS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param SECONDS: Unsigned integer -*******************************************************************************/ +/******************************************************************************* + If My/BG Timer is Less Than SECONDS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param SECONDS: Unsigned integer +*******************************************************************************/ #define IFMyTimerGreaterThanSeconds(SECONDS, GOTOLABEL) \ - IFMyTimerGreaterThanTicks((SECS_TO_TIMER60(SECONDS)), GOTOLABEL) + IFMyTimerGreaterThanTicks((SECS_TO_TIMER60(SECONDS)), GOTOLABEL) + - # 8589 "src/aicommands.def" -/******************************************************************************* - If My/BG Timer is Less Than SECONDS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param SECONDS: Unsigned integer -*******************************************************************************/ +/******************************************************************************* + If My/BG Timer is Less Than SECONDS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param SECONDS: Unsigned integer +*******************************************************************************/ #define IFBGTimerGreaterThanSeconds(SECONDS, GOTOLABEL) \ - IFMyTimerGreaterThanTicks((SECS_TO_TIMER60(SECONDS)), GOTOLABEL) + IFMyTimerGreaterThanTicks((SECS_TO_TIMER60(SECONDS)), GOTOLABEL) + - # 8593 "src/aicommands.def" //============================================================================== -//## HUD COUNTDOWN SHOW +//## HUD COUNTDOWN SHOW //============================================================================== - -/******************************************************************************* - Shows the hud countdown -*******************************************************************************/ + +/******************************************************************************* + Shows the hud countdown +*******************************************************************************/ #define HudCountdownShow() \ - AI_HudCountdownShow , - -#define AI_HudCountdownShow_LENGTH (AICMDSIZE ) + AI_HudCountdownShow , + +#define AI_HudCountdownShow_LENGTH (AICMDSIZE ) + - # 8622 "src/aicommands.def" //============================================================================== -//## HUD COUNTDOWN HIDE +//## HUD COUNTDOWN HIDE //============================================================================== - -/******************************************************************************* - Hides the hud countdown -******************************************************************************** - @exception: Can be used as a hidden global timer for objective logic -*******************************************************************************/ + +/******************************************************************************* + Hides the hud countdown +******************************************************************************** + @exception: Can be used as a hidden global timer for objective logic +*******************************************************************************/ #define HudCountdownHide() \ - AI_HudCountdownHide , - -#define AI_HudCountdownHide_LENGTH (AICMDSIZE ) + AI_HudCountdownHide , + +#define AI_HudCountdownHide_LENGTH (AICMDSIZE ) + - # 8654 "src/aicommands.def" //============================================================================== -//## HUD COUNTDOWN SET +//## HUD COUNTDOWN SET //============================================================================== - -/******************************************************************************* - Set the hud countdown -******************************************************************************** - @exception: To make the timer count up, set to 0 and start timer -*******************************************************************************/ + +/******************************************************************************* + Set the hud countdown +******************************************************************************** + @exception: To make the timer count up, set to 0 and start timer +*******************************************************************************/ #define HudCountdownSet(SECONDS) \ AI_HudCountdownSet , \ - CharArrayFrom16(SECONDS) , - -#define AI_HudCountdownSet_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(SECONDS) , + +#define AI_HudCountdownSet_LENGTH (AICMDSIZE +2 ) + - //============================================================================== -//## HUD COUNTDOWN STOP +//## HUD COUNTDOWN STOP //============================================================================== - -/******************************************************************************* - Stops the hud countdown -*******************************************************************************/ + +/******************************************************************************* + Stops the hud countdown +*******************************************************************************/ #define HudCountdownStop() \ - AI_HudCountdownStop , - -#define AI_HudCountdownStop_LENGTH (AICMDSIZE ) + AI_HudCountdownStop , + +#define AI_HudCountdownStop_LENGTH (AICMDSIZE ) + - # 8718 "src/aicommands.def" //============================================================================== -//## HUD COUNTDOWN START +//## HUD COUNTDOWN START //============================================================================== - -/******************************************************************************* - Start the hud countdown -*******************************************************************************/ + +/******************************************************************************* + Start the hud countdown +*******************************************************************************/ #define HudCountdownStart() \ - AI_HudCountdownStart , - -#define AI_HudCountdownStart_LENGTH (AICMDSIZE ) + AI_HudCountdownStart , + +#define AI_HudCountdownStart_LENGTH (AICMDSIZE ) + - # 8748 "src/aicommands.def" //============================================================================== -//## IF HUD COUNTDOWN HAS STOPPED +//## IF HUD COUNTDOWN HAS STOPPED //============================================================================== - -/******************************************************************************* - If Hud Countdown is NOT running (paused) -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: By default, timer is inactive -*******************************************************************************/ + +/******************************************************************************* + If Hud Countdown is NOT running (paused) +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: By default, timer is inactive +*******************************************************************************/ #define IFHudCountdownIsNotRunning(GOTOLABEL) \ AI_IFHudCountdownIsNotRunning , \ - GOTOLABEL , - -#define AI_IFHudCountdownIsNotRunning_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFHudCountdownIsNotRunning_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF HUD COUNTDOWN LESS THAN +//## IF HUD COUNTDOWN LESS THAN //============================================================================== - -/******************************************************************************* - if hud countdown is Less Than SECONDS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param SECONDS: Unsigned Integer, 0 means TRUE on count-up only. - @exception: SECONDS can NOT test negative values (counting up) -*******************************************************************************/ + +/******************************************************************************* + if hud countdown is Less Than SECONDS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param SECONDS: Unsigned Integer, 0 means TRUE on count-up only. + @exception: SECONDS can NOT test negative values (counting up) +*******************************************************************************/ #define IFHudCountdownLessThan(SECONDS, GOTOLABEL) \ AI_IFHudCountdownLessThan , \ CharArrayFrom16(SECONDS) , \ - GOTOLABEL , - -#define AI_IFHudCountdownLessThan_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFHudCountdownLessThan_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## IF HUD COUNTDOWN GREATER THAN +//## IF HUD COUNTDOWN GREATER THAN //============================================================================== - -/******************************************************************************* - if hud countdown is Greater Than SECONDS -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param SECONDS: Unsigned Integer, 0 means TRUE on count-down only. - @exception: SECONDS can NOT test negative values (counting up) -*******************************************************************************/ + +/******************************************************************************* + if hud countdown is Greater Than SECONDS +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param SECONDS: Unsigned Integer, 0 means TRUE on count-down only. + @exception: SECONDS can NOT test negative values (counting up) +*******************************************************************************/ #define IFHudCountdownGreaterThan(SECONDS, GOTOLABEL) \ AI_IFHudCountdownGreaterThan , \ CharArrayFrom16(SECONDS) , \ - GOTOLABEL , - -#define AI_IFHudCountdownGreaterThan_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFHudCountdownGreaterThan_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## CHR TRY SPAWNING AT PAD +//## CHR TRY SPAWNING AT PAD //============================================================================== - -/******************************************************************************* - Spawn new chr at pad -******************************************************************************** - @return Continue execution from LABEL if Successful - @param BITFIELD: uses SPAWN_# defines - @param AI_LIST_ID: Assign this 16bit AI_LIST ID to Chr - @exception: If out of memory chr can NOT spawn. - If pad is blocked, attempt to spawn chr around pad. - By default, guard will NOT spawn if target pad can be seen by Bond. - However this is ignored if passed SPAWN_IGNORE_PAD_SIGHT_CHECK flag. -*******************************************************************************/ + +/******************************************************************************* + Spawn new chr at pad +******************************************************************************** + @return Continue execution from LABEL if Successful + @param BITFIELD: uses SPAWN_# defines + @param AI_LIST_ID: Assign this 16bit AI_LIST ID to Chr + @exception: If out of memory chr can NOT spawn. + If pad is blocked, attempt to spawn chr around pad. + By default, guard will NOT spawn if target pad can be seen by Bond. + However this is ignored if passed SPAWN_IGNORE_PAD_SIGHT_CHECK flag. +*******************************************************************************/ #define TRYSpawningChrAtPad(BODY_NUM, HEAD_NUM, PAD, AI_LIST_ID, BITFIELD, GOTOLABEL) \ AI_TRYSpawningChrAtPad , \ BODY_NUM , \ @@ -5361,29 +5361,29 @@ r******************************************************************************* CharArrayFrom16(PAD) , \ CharArrayFrom16(AI_LIST_ID) , \ CharArrayFrom32(BITFIELD) , \ - GOTOLABEL , - -#define AI_TRYSpawningChrAtPad_LENGTH (AICMDSIZE +1 +1 +2 +2 +4 +1 ) + GOTOLABEL , + +#define AI_TRYSpawningChrAtPad_LENGTH (AICMDSIZE +1 +1 +2 +2 +4 +1 ) + - # 8921 "src/aicommands.def" //============================================================================== -//## CHR TRY SPAWNING NEXT TO UNSEEN CHR +//## CHR TRY SPAWNING NEXT TO UNSEEN CHR //============================================================================== - -/******************************************************************************* - Spawn a chr next to another chr -******************************************************************************* - @return Continue execution from LABEL if Successful - @param BITFIELD: uses SPAWN_# defines - @param AI_LIST_ID: Assign this 16bit AI_LIST ID to Chr - @exception: If out of memory or chr/pad is in view of Bond - chr can NOT spawn. - Target chr must still exist in level or else command will crash. - Will not spawn chr if target chr has been seen before - (CHRFLAG_HAS_BEEN_ON_SCREEN) -*******************************************************************************/ + +/******************************************************************************* + Spawn a chr next to another chr +******************************************************************************* + @return Continue execution from LABEL if Successful + @param BITFIELD: uses SPAWN_# defines + @param AI_LIST_ID: Assign this 16bit AI_LIST ID to Chr + @exception: If out of memory or chr/pad is in view of Bond - chr can NOT spawn. + Target chr must still exist in level or else command will crash. + Will not spawn chr if target chr has been seen before + (CHRFLAG_HAS_BEEN_ON_SCREEN) +*******************************************************************************/ #define TRYSpawningChrNextToChr(BODY_NUM, HEAD_NUM, CHR_NUM_TARGET, AI_LIST_ID, BITFIELD, GOTOLABEL) \ AI_TRYSpawningChrNextToChr , \ BODY_NUM , \ @@ -5391,332 +5391,332 @@ r******************************************************************************* CHR_NUM_TARGET , \ CharArrayFrom16(AI_LIST_ID) , \ CharArrayFrom32(BITFIELD) , \ - GOTOLABEL , - -#define AI_TRYSpawningChrNextToChr_LENGTH (AICMDSIZE +1 +1 +1 +2 +4 +1 ) + GOTOLABEL , + +#define AI_TRYSpawningChrNextToChr_LENGTH (AICMDSIZE +1 +1 +1 +2 +4 +1 ) + - # 8969 "src/aicommands.def" //============================================================================== -//## GUARD TRY SPAWNING ITEM +//## GUARD TRY SPAWNING ITEM //============================================================================== - -/******************************************************************************* - Spawn Item/Weapon for Me -******************************************************************************** - @return Continue execution from LABEL if Successful - @param PROPFLAG uses PROPFLAG defines - NOT PROPFLAG2! - @param PROP_NUM: use PROP_xxx eg PROP_CHRWPPK for visible model - @param ITEM_NUM: use ITEM_xxx eg ITEM_WPPK for item type - @exception: If out of memory or hands occupied - Item can NOT spawn. - Spawned Prop must have a holding position command within the - model file, else use conceal flag so guard does not attempt to - hold Prop -*******************************************************************************/ + +/******************************************************************************* + Spawn Item/Weapon for Me +******************************************************************************** + @return Continue execution from LABEL if Successful + @param PROPFLAG uses PROPFLAG defines - NOT PROPFLAG2! + @param PROP_NUM: use PROP_xxx eg PROP_CHRWPPK for visible model + @param ITEM_NUM: use ITEM_xxx eg ITEM_WPPK for item type + @exception: If out of memory or hands occupied - Item can NOT spawn. + Spawned Prop must have a holding position command within the + model file, else use conceal flag so guard does not attempt to + hold Prop +*******************************************************************************/ #define TRYGiveMeItem(PROP_NUM, ITEM_NUM, PROPFLAG, GOTOLABEL) \ AI_TRYGiveMeItem , \ CharArrayFrom16(PROP_NUM) , \ ITEM_NUM , \ CharArrayFrom32(PROPFLAG) , \ - GOTOLABEL , - -#define AI_TRYGiveMeItem_LENGTH (AICMDSIZE +2 +1 +4 +1 ) + GOTOLABEL , + +#define AI_TRYGiveMeItem_LENGTH (AICMDSIZE +2 +1 +4 +1 ) + - # 9072 "src/aicommands.def" //============================================================================== -//## GUARD TRY SPAWNING HAT +//## GUARD TRY SPAWNING HAT //============================================================================== - -/******************************************************************************* - Spawn hat on Me -******************************************************************************** - @return Continue execution from LABEL if Successful - @param PROPFLAG uses PROPFLAG defines - NOT PROPFLAG2! - @param PROP_NUM: use PROP_xxx eg PROP_CHRWPPK for visible model - @exception: If out of memory or already have hat - Item can NOT spawn. - Spawned Prop must have a holding position command within the - model file. -*******************************************************************************/ + +/******************************************************************************* + Spawn hat on Me +******************************************************************************** + @return Continue execution from LABEL if Successful + @param PROPFLAG uses PROPFLAG defines - NOT PROPFLAG2! + @param PROP_NUM: use PROP_xxx eg PROP_CHRWPPK for visible model + @exception: If out of memory or already have hat - Item can NOT spawn. + Spawned Prop must have a holding position command within the + model file. +*******************************************************************************/ #define TRYGiveMeHat(PROP_NUM, PROP_BITFIELD, GOTOLABEL) \ AI_TRYGiveMeHat , \ CharArrayFrom16(PROP_NUM) , \ CharArrayFrom32(PROP_BITFIELD) , \ - GOTOLABEL , - -#define AI_TRYGiveMeHat_LENGTH (AICMDSIZE +2 +4 +1 ) + GOTOLABEL , + +#define AI_TRYGiveMeHat_LENGTH (AICMDSIZE +2 +4 +1 ) + - //============================================================================== -//## CHR TRY SPAWNING CLONE +//## CHR TRY SPAWNING CLONE //============================================================================== - -/******************************************************************************* - If CHR_NUM has clone flag on, spawn a clone -******************************************************************************** - @return Continue execution from LABEL if Successful - @param AI_LIST_ID Assign this 16bit AI_LIST ID to Clone - @exception: Clone flag is stored in chr->chrflags which is assigned at setup - Newly spawned clone is placed in front of original chr -*******************************************************************************/ + +/******************************************************************************* + If CHR_NUM has clone flag on, spawn a clone +******************************************************************************** + @return Continue execution from LABEL if Successful + @param AI_LIST_ID Assign this 16bit AI_LIST ID to Clone + @exception: Clone flag is stored in chr->chrflags which is assigned at setup + Newly spawned clone is placed in front of original chr +*******************************************************************************/ #define TRYCloningChr(CHR_NUM, AI_LIST_ID, GOTOLABEL) \ AI_TRYCloningChr , \ CHR_NUM , \ CharArrayFrom16(AI_LIST_ID) , \ - GOTOLABEL , - -#define AI_TRYCloningChr_LENGTH (AICMDSIZE +1 +2 +1 ) + GOTOLABEL , + +#define AI_TRYCloningChr_LENGTH (AICMDSIZE +1 +2 +1 ) + - # 9233 "src/aicommands.def" -/******************************************************************************* - If I have clone flag on, spawn a clone -******************************************************************************** - @return Continue execution from LABEL if Successful - @param AI_LIST_ID Assign this 16bit AI_LIST ID to Clone - @exception: Clone flag is stored in chr->chrflags which is assigned at setup - Newly spawned clone is placed in front of original chr -*******************************************************************************/ +/******************************************************************************* + If I have clone flag on, spawn a clone +******************************************************************************** + @return Continue execution from LABEL if Successful + @param AI_LIST_ID Assign this 16bit AI_LIST ID to Clone + @exception: Clone flag is stored in chr->chrflags which is assigned at setup + Newly spawned clone is placed in front of original chr +*******************************************************************************/ #define TRYCloningMe(AI_LIST_ID, GOTOLABEL) \ - TRYCloningChr(CHR_SELF, AI_LIST_ID, GOTOLABEL) + TRYCloningChr(CHR_SELF, AI_LIST_ID, GOTOLABEL) + - # 9249 "src/aicommands.def" //============================================================================== -//## TEXT PRINT BOTTOM +//## TEXT PRINT BOTTOM //============================================================================== - -/******************************************************************************* - Print text slot to bottom left part of screen (where pickup text is located) -******************************************************************************** - @exception: If text slot is not currently allocated in memory, game will softlock. - Expects string to end with '\n' (LF) character -*******************************************************************************/ + +/******************************************************************************* + Print text slot to bottom left part of screen (where pickup text is located) +******************************************************************************** + @exception: If text slot is not currently allocated in memory, game will softlock. + Expects string to end with '\n' (LF) character +*******************************************************************************/ #define TextPrintBottom(TEXT_SLOT) \ AI_TextPrintBottom , \ - CharArrayFrom16(TEXT_SLOT) , - -#define AI_TextPrintBottom_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(TEXT_SLOT) , + +#define AI_TextPrintBottom_LENGTH (AICMDSIZE +2 ) + - //============================================================================== -//## TEXT PRINT TOP +//## TEXT PRINT TOP //============================================================================== - -/******************************************************************************* - Print text slot to top part of screen -******************************************************************************** - @exception: If text slot is not currently allocated in memory, game will softlock. - Expects string to end with '\n' (LF) character -*******************************************************************************/ + +/******************************************************************************* + Print text slot to top part of screen +******************************************************************************** + @exception: If text slot is not currently allocated in memory, game will softlock. + Expects string to end with '\n' (LF) character +*******************************************************************************/ #define TextPrintTop(TEXT_SLOT) \ AI_TextPrintTop , \ - CharArrayFrom16(TEXT_SLOT) , - -#define AI_TextPrintTop_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(TEXT_SLOT) , + +#define AI_TextPrintTop_LENGTH (AICMDSIZE +2 ) + - //============================================================================== //# SFX COMMANDS //============================================================================== //============================================================================== -//## SFX PLAY +//## SFX PLAY //============================================================================== - -/******************************************************************************* - Play a sound effect -******************************************************************************** - @exception: Channel argument range is 0-7. - Use a channel if you plan on modifying sfx volume with SFX Commands; - SFX_EMIT_FROM_OBJECT - SFX_EMIT_FROM_PAD - SFX_SET_CHANNEL_VOLUME - SFX_FADE_CHANNEL_VOLUME - SFX_STOP_CHANNEL - IF_SFX_CHANNEL_VOLUME_LESS_THAN - If you do NOT plan on doing this, use an invalid channel such as -1. - This will play the sfx but not bother initializing channel - data for SFX Commands. - If a sfx is already occupying channel, retriggering sfx will overwrite - old sfx slot data and no longer can be used by SFX Commands -*******************************************************************************/ + +/******************************************************************************* + Play a sound effect +******************************************************************************** + @exception: Channel argument range is 0-7. + Use a channel if you plan on modifying sfx volume with SFX Commands; + SFX_EMIT_FROM_OBJECT + SFX_EMIT_FROM_PAD + SFX_SET_CHANNEL_VOLUME + SFX_FADE_CHANNEL_VOLUME + SFX_STOP_CHANNEL + IF_SFX_CHANNEL_VOLUME_LESS_THAN + If you do NOT plan on doing this, use an invalid channel such as -1. + This will play the sfx but not bother initializing channel + data for SFX Commands. + If a sfx is already occupying channel, retriggering sfx will overwrite + old sfx slot data and no longer can be used by SFX Commands +*******************************************************************************/ #define SfxPlay(SOUND_NUM, CHANNEL_NUM) \ AI_SfxPlay , \ CharArrayFrom16(SOUND_NUM) , \ - CHANNEL_NUM , - -#define AI_SfxPlay_LENGTH (AICMDSIZE +2 +1 ) + CHANNEL_NUM , + +#define AI_SfxPlay_LENGTH (AICMDSIZE +2 +1 ) + - # 9372 "src/aicommands.def" //POLYMORPHS -/******************************************************************************* - Play a sound effect -******************************************************************************** - @exception: Channel argument range is 0-7. - Use a channel if you plan on modifying sfx volume with SFX Commands; - SFX_EMIT_FROM_OBJECT - SFX_EMIT_FROM_PAD - SFX_SET_CHANNEL_VOLUME - SFX_FADE_CHANNEL_VOLUME - SFX_STOP_CHANNEL - IF_SFX_CHANNEL_VOLUME_LESS_THAN - If you do NOT plan on doing this, use an invalid channel such as -1. - This will play the sfx but not bother initializing channel - data for SFX Commands. - If a sfx is already occupying channel, retriggering sfx will overwrite - old sfx slot data and no longer can be used by SFX Commands -*******************************************************************************/ +/******************************************************************************* + Play a sound effect +******************************************************************************** + @exception: Channel argument range is 0-7. + Use a channel if you plan on modifying sfx volume with SFX Commands; + SFX_EMIT_FROM_OBJECT + SFX_EMIT_FROM_PAD + SFX_SET_CHANNEL_VOLUME + SFX_FADE_CHANNEL_VOLUME + SFX_STOP_CHANNEL + IF_SFX_CHANNEL_VOLUME_LESS_THAN + If you do NOT plan on doing this, use an invalid channel such as -1. + This will play the sfx but not bother initializing channel + data for SFX Commands. + If a sfx is already occupying channel, retriggering sfx will overwrite + old sfx slot data and no longer can be used by SFX Commands +*******************************************************************************/ #define SFX_PLAY_SIMPLE(SOUND_NUM) \ - SfxPlay(SOUND_NUM, -1) + SfxPlay(SOUND_NUM, -1) + - # 9379 "src/aicommands.def" //============================================================================== -//## SFX EMIT FROM OBJECT +//## SFX EMIT FROM OBJECT //============================================================================== - -/******************************************************************************* - Sets an occupied sfx channel to emit from a tagged object -******************************************************************************** - @param VOL_DECAY_TIME60: is number of ticks to fully transition from - max volume to target volume - @exception: Panning is not calculated (mono), only affects volume. -*******************************************************************************/ + +/******************************************************************************* + Sets an occupied sfx channel to emit from a tagged object +******************************************************************************** + @param VOL_DECAY_TIME60: is number of ticks to fully transition from + max volume to target volume + @exception: Panning is not calculated (mono), only affects volume. +*******************************************************************************/ #define SfxEmitFromObject(CHANNEL_NUM, OBJECT_TAG, VOL_DECAY_TIME60) \ AI_SfxEmitFromObject , \ CHANNEL_NUM , \ OBJECT_TAG , \ - CharArrayFrom16(VOL_DECAY_TIME60) , - -#define AI_SfxEmitFromObject_LENGTH (AICMDSIZE +1 +1 +2 ) + CharArrayFrom16(VOL_DECAY_TIME60) , + +#define AI_SfxEmitFromObject_LENGTH (AICMDSIZE +1 +1 +2 ) + - //============================================================================== -//## SFX EMIT FROM PAD +//## SFX EMIT FROM PAD //============================================================================== - -/******************************************************************************* - Sets an occupied sfx channel to emit from a pad -******************************************************************************** - @param VOL_DECAY_TIME60 is number of ticks to fully transition from - max volume to target volume - @exception: Panning is not calculated (mono), only affects volume. -*******************************************************************************/ + +/******************************************************************************* + Sets an occupied sfx channel to emit from a pad +******************************************************************************** + @param VOL_DECAY_TIME60 is number of ticks to fully transition from + max volume to target volume + @exception: Panning is not calculated (mono), only affects volume. +*******************************************************************************/ #define SfxEmitFromPad(CHANNEL_NUM, PAD, VOL_DECAY_TIME60) \ AI_SfxEmitFromPad , \ CHANNEL_NUM , \ CharArrayFrom16(PAD) , \ - CharArrayFrom16(VOL_DECAY_TIME60) , - -#define AI_SfxEmitFromPad_LENGTH (AICMDSIZE +1 +2 +2 ) + CharArrayFrom16(VOL_DECAY_TIME60) , + +#define AI_SfxEmitFromPad_LENGTH (AICMDSIZE +1 +2 +2 ) + - //============================================================================== -//## SFX SET CHANNEL VOLUME +//## SFX SET CHANNEL VOLUME //============================================================================== - -/******************************************************************************* - Sets an occupied sfx channel's volume -******************************************************************************** - @param TRANSITION_TIME60: is number of ticks to fade between current - volume to TARGET_VOLUME - param TARGET_VOLUME: signed range 0 - 100% (0x0000-0x7FFF) - @exception: TARGET_VOLUME can NOT be negative -*******************************************************************************/ + +/******************************************************************************* + Sets an occupied sfx channel's volume +******************************************************************************** + @param TRANSITION_TIME60: is number of ticks to fade between current + volume to TARGET_VOLUME + param TARGET_VOLUME: signed range 0 - 100% (0x0000-0x7FFF) + @exception: TARGET_VOLUME can NOT be negative +*******************************************************************************/ #define SfxSetChannelVolume(CHANNEL_NUM, TARGET_VOLUME, TRANSITION_TIME60) \ AI_SfxSetChannelVolume , \ CHANNEL_NUM , \ CharArrayFrom16(TARGET_VOLUME) , \ - CharArrayFrom16(TRANSITION_TIME60) , - -#define AI_SfxSetChannelVolume_LENGTH (AICMDSIZE +1 +2 +2 ) + CharArrayFrom16(TRANSITION_TIME60) , + +#define AI_SfxSetChannelVolume_LENGTH (AICMDSIZE +1 +2 +2 ) + - //============================================================================== -//## SFX FADE CHANNEL VOLUME +//## SFX FADE CHANNEL VOLUME //============================================================================== - -/******************************************************************************* - Fade out an occupied sfx channel's volume by volume percent -******************************************************************************** - @param TRANSITION_TIME60: is number of ticks to fade between current - volume to TARGET_VOLUME - @param TARGET_VOLUME: signed range 0 - 100% (0x0000-0x7FFF) - @exception: TARGET_VOLUME can NOT be negative -*******************************************************************************/ + +/******************************************************************************* + Fade out an occupied sfx channel's volume by volume percent +******************************************************************************** + @param TRANSITION_TIME60: is number of ticks to fade between current + volume to TARGET_VOLUME + @param TARGET_VOLUME: signed range 0 - 100% (0x0000-0x7FFF) + @exception: TARGET_VOLUME can NOT be negative +*******************************************************************************/ #define SfxFadeChannelVolume(CHANNEL_NUM, TARGET_VOLUME, TRANSITION_TIME60) \ AI_SfxFadeChannelVolume , \ CHANNEL_NUM , \ CharArrayFrom16(TARGET_VOLUME) , \ - CharArrayFrom16(TRANSITION_TIME60) , - -#define AI_SfxFadeChannelVolume_LENGTH (AICMDSIZE +1 +2 +2 ) + CharArrayFrom16(TRANSITION_TIME60) , + +#define AI_SfxFadeChannelVolume_LENGTH (AICMDSIZE +1 +2 +2 ) + - //============================================================================== -//## SFX STOP CHANNEL +//## SFX STOP CHANNEL //============================================================================== - -/******************************************************************************* - Stop playing sfx in occupied sfx channel -*******************************************************************************/ + +/******************************************************************************* + Stop playing sfx in occupied sfx channel +*******************************************************************************/ #define SfxStopChannel(CHANNEL_NUM) \ AI_SfxStopChannel , \ - CHANNEL_NUM , - -#define AI_SfxStopChannel_LENGTH (AICMDSIZE +1 ) + CHANNEL_NUM , + +#define AI_SfxStopChannel_LENGTH (AICMDSIZE +1 ) + - # 9627 "src/aicommands.def" //============================================================================== -//## IF SFX CHANNEL VOLUME LESS THAN +//## IF SFX CHANNEL VOLUME LESS THAN //============================================================================== - -/******************************************************************************* - If a sfx channel's volume is < volume argument -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param VOLUME signed range 0 - 100% (0x0000-0x7FFF) - @exception: If sfx channel is free (no audio playing), Goto LABEL. - VOLUME can NOT be negative -*******************************************************************************/ + +/******************************************************************************* + If a sfx channel's volume is < volume argument +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param VOLUME signed range 0 - 100% (0x0000-0x7FFF) + @exception: If sfx channel is free (no audio playing), Goto LABEL. + VOLUME can NOT be negative +*******************************************************************************/ #define IFSfxChannelVolumeLessThan(CHANNEL_NUM, VOLUME, GOTOLABEL) \ AI_IFSfxChannelVolumeLessThan , \ CHANNEL_NUM , \ CharArrayFrom16(VOLUME) , \ - GOTOLABEL , - -#define AI_IFSfxChannelVolumeLessThan_LENGTH (AICMDSIZE +1 +2 +1 ) + GOTOLABEL , + +#define AI_IFSfxChannelVolumeLessThan_LENGTH (AICMDSIZE +1 +2 +1 ) + - //============================================================================== //# SFX COMMANDS END //============================================================================== @@ -5724,814 +5724,814 @@ r******************************************************************************* //# VEHICHLE COMMANDS //============================================================================== //============================================================================== -//## VEHICLE START PATH +//## VEHICLE START PATH //============================================================================== - -/******************************************************************************* - Makes vehicle follow a predefined path within setup -*******************************************************************************/ + +/******************************************************************************* + Makes vehicle follow a predefined path within setup +*******************************************************************************/ #define VehicleStartPath(PATH_NUM) \ AI_VehicleStartPath , \ - PATH_NUM , - -#define AI_VehicleStartPath_LENGTH (AICMDSIZE +1 ) + PATH_NUM , + +#define AI_VehicleStartPath_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## VEHICLE SPEED +//## VEHICLE SPEED //============================================================================== - -/******************************************************************************* - Sets vehicle speed, usually paired with VEHICLE_START_PATH -******************************************************************************** - @param TOP_SPEED Unsigned (1000 = 1 meter per second) - ACCELERATION_TIME60 is number of game ticks to reach top speed - (lower = faster) -*******************************************************************************/ + +/******************************************************************************* + Sets vehicle speed, usually paired with VEHICLE_START_PATH +******************************************************************************** + @param TOP_SPEED Unsigned (1000 = 1 meter per second) + ACCELERATION_TIME60 is number of game ticks to reach top speed + (lower = faster) +*******************************************************************************/ #define VehicleSpeed(TOP_SPEED, ACCELERATION_TIME60) \ AI_VehicleSpeed , \ CharArrayFrom16(TOP_SPEED) , \ - CharArrayFrom16(ACCELERATION_TIME60) , - -#define AI_VehicleSpeed_LENGTH (AICMDSIZE +2 +2 ) + CharArrayFrom16(ACCELERATION_TIME60) , + +#define AI_VehicleSpeed_LENGTH (AICMDSIZE +2 +2 ) + - //POLYMORPHS -/******************************************************************************* - Sets vehicle speed, usually paired with VEHICLE_START_PATH -******************************************************************************** - @param TOP_SPEED Unsigned (1000 = 1 meter per second) - ACCELERATION_TIME60 is number of game ticks to reach top speed - (lower = faster) -*******************************************************************************/ +/******************************************************************************* + Sets vehicle speed, usually paired with VEHICLE_START_PATH +******************************************************************************** + @param TOP_SPEED Unsigned (1000 = 1 meter per second) + ACCELERATION_TIME60 is number of game ticks to reach top speed + (lower = faster) +*******************************************************************************/ #define VEHICLE_SPEED_MPH(TOP_SPEED, MPH_PER_SECOND) \ - VehicleSpeed((TOP_SPEED * 447), TOP_SPEED*(60/MPH_PER_SECOND)) + VehicleSpeed((TOP_SPEED * 447), TOP_SPEED*(60/MPH_PER_SECOND)) + - # 9766 "src/aicommands.def" -/******************************************************************************* - Sets vehicle speed, usually paired with VEHICLE_START_PATH -******************************************************************************** - @param TOP_SPEED Unsigned (1000 = 1 meter per second) - ACCELERATION_TIME60 is number of game ticks to reach top speed - (lower = faster) -*******************************************************************************/ +/******************************************************************************* + Sets vehicle speed, usually paired with VEHICLE_START_PATH +******************************************************************************** + @param TOP_SPEED Unsigned (1000 = 1 meter per second) + ACCELERATION_TIME60 is number of game ticks to reach top speed + (lower = faster) +*******************************************************************************/ #define VEHICLE_SPEED_KPH(TOP_SPEED, KPH_PER_SECOND) \ - VehicleSpeed((TOP_SPEED * 278), TOP_SPEED*(60/KPH_PER_SECOND)) + VehicleSpeed((TOP_SPEED * 278), TOP_SPEED*(60/KPH_PER_SECOND)) + - # 9770 "src/aicommands.def" -/******************************************************************************* - Sets vehicle speed, usually paired with VEHICLE_START_PATH -******************************************************************************** - @param TOP_SPEED Unsigned (1000 = 1 meter per second) - ACCELERATION_TIME60 is number of game ticks to reach top speed - (lower = faster) -*******************************************************************************/ +/******************************************************************************* + Sets vehicle speed, usually paired with VEHICLE_START_PATH +******************************************************************************** + @param TOP_SPEED Unsigned (1000 = 1 meter per second) + ACCELERATION_TIME60 is number of game ticks to reach top speed + (lower = faster) +*******************************************************************************/ #define VEHICLE_SPEED_MS(TOP_SPEED, MSS) \ - VehicleSpeed((TOP_SPEED * 1000), TOP_SPEED*(60/MSS)) + VehicleSpeed((TOP_SPEED * 1000), TOP_SPEED*(60/MSS)) + - # 9774 "src/aicommands.def" //============================================================================== -//## AIRCRAFT ROTOR SPEED +//## AIRCRAFT ROTOR SPEED //============================================================================== - -/******************************************************************************* - Sets aircrafts rotor speed -******************************************************************************** - @param ROTOR_SPEED Unsigned Revolutions Per Minute (RPM) - ACCELERATION_TIME60 is number of game ticks to reach top speed - (lower = faster) -*******************************************************************************/ + +/******************************************************************************* + Sets aircrafts rotor speed +******************************************************************************** + @param ROTOR_SPEED Unsigned Revolutions Per Minute (RPM) + ACCELERATION_TIME60 is number of game ticks to reach top speed + (lower = faster) +*******************************************************************************/ #define AircraftRotorSpeed(ROTOR_SPEED, ACCELERATION_TIME60) \ AI_AircraftRotorSpeed , \ CharArrayFrom16(ROTOR_SPEED) , \ - CharArrayFrom16(ACCELERATION_TIME60) , - -#define AI_AircraftRotorSpeed_LENGTH (AICMDSIZE +2 +2 ) + CharArrayFrom16(ACCELERATION_TIME60) , + +#define AI_AircraftRotorSpeed_LENGTH (AICMDSIZE +2 +2 ) + - //POLYMORPHS -/******************************************************************************* - Sets aircrafts rotor speed -******************************************************************************** - @param ROTOR_SPEED Unsigned Revolutions Per Minute (RPM) - ACCELERATION_TIME60 is number of game ticks to reach top speed - (lower = faster) -*******************************************************************************/ +/******************************************************************************* + Sets aircrafts rotor speed +******************************************************************************** + @param ROTOR_SPEED Unsigned Revolutions Per Minute (RPM) + ACCELERATION_TIME60 is number of game ticks to reach top speed + (lower = faster) +*******************************************************************************/ #define AIRCRAFT_ROTOR_SPEED_RPMS(ROTOR_SPEED, RPMS) \ - AircraftRotorSpeed(ROTOR_SPEED, ROTOR_SPEED*(60/RPMS)) + AircraftRotorSpeed(ROTOR_SPEED, ROTOR_SPEED*(60/RPMS)) + - # 9822 "src/aicommands.def" //============================================================================== //# VEHICHLE COMMANDS END //============================================================================== //============================================================================== -//## IF CAMERA IS IN INTRO +//## IF CAMERA IS IN INTRO //============================================================================== - -/******************************************************************************* - If camera mode equal to INTRO_CAM/FADESWIRL_CAM (viewing mission intro) -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: If setup lacks intro camera structs, intro will be skipped -*******************************************************************************/ + +/******************************************************************************* + If camera mode equal to INTRO_CAM/FADESWIRL_CAM (viewing mission intro) +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: If setup lacks intro camera structs, intro will be skipped +*******************************************************************************/ #define IFCameraIsInIntro(GOTOLABEL) \ AI_IFCameraIsInIntro , \ - GOTOLABEL , - -#define AI_IFCameraIsInIntro_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFCameraIsInIntro_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF CAMERA IS IN BOND SWIRL +//## IF CAMERA IS IN BOND SWIRL //============================================================================== - -/******************************************************************************* - If camera mode equal to SWIRL_CAM (moving to back of Bond's head) -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: If setup lacks swirl points, intro swirl will be skipped -*******************************************************************************/ + +/******************************************************************************* + If camera mode equal to SWIRL_CAM (moving to back of Bond's head) +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: If setup lacks swirl points, intro swirl will be skipped +*******************************************************************************/ #define IFCameraIsInBondSwirl(GOTOLABEL) \ AI_IFCameraIsInBondSwirl , \ - GOTOLABEL , - -#define AI_IFCameraIsInBondSwirl_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFCameraIsInBondSwirl_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## TV CHANGE SCREEN BANK +//## TV CHANGE SCREEN BANK //============================================================================== - -/******************************************************************************* - Change the screen bank of a tagged TV monitor -******************************************************************************** - @exception: If tagged object has multiple screens, use SCREEN_INDEX to set. - If tagged object has one screen, SCREEN_INDEX is ignored -*******************************************************************************/ + +/******************************************************************************* + Change the screen bank of a tagged TV monitor +******************************************************************************** + @exception: If tagged object has multiple screens, use SCREEN_INDEX to set. + If tagged object has one screen, SCREEN_INDEX is ignored +*******************************************************************************/ #define TvChangeScreenBank(OBJECT_TAG, SCREEN_INDEX, SCREEN_BANK) \ AI_TvChangeScreenBank , \ OBJECT_TAG , \ SCREEN_INDEX , \ - SCREEN_BANK , - -#define AI_TvChangeScreenBank_LENGTH (AICMDSIZE +1 +1 +1 ) + SCREEN_BANK , + +#define AI_TvChangeScreenBank_LENGTH (AICMDSIZE +1 +1 +1 ) + - //============================================================================== -//## IF BOND IN TANK +//## IF BOND IN TANK //============================================================================== - -/******************************************************************************* - If Bond is controlling tank -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If Bond is controlling tank +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFBondInTank(GOTOLABEL) \ AI_IFBondInTank , \ - GOTOLABEL , - -#define AI_IFBondInTank_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFBondInTank_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## END LEVEL +//## END LEVEL //============================================================================== - -/******************************************************************************* - Exits the level -******************************************************************************** - @exception: Recommend not to use this command, instead use GAILIST_END_LEVEL for - exit cutscene ailist. - Retail game has a glitch with hires mode that needs to execute this - command in a loop, check Cuba's 1000 List -*******************************************************************************/ + +/******************************************************************************* + Exits the level +******************************************************************************** + @exception: Recommend not to use this command, instead use GAILIST_END_LEVEL for + exit cutscene ailist. + Retail game has a glitch with hires mode that needs to execute this + command in a loop, check Cuba's 1000 List +*******************************************************************************/ #define EndLevel() \ - AI_EndLevel , - -#define AI_EndLevel_LENGTH (AICMDSIZE ) + AI_EndLevel , + +#define AI_EndLevel_LENGTH (AICMDSIZE ) + - //============================================================================== //# CINEMATICS //============================================================================== -/******************************************************************************* - Prepare to Transition to bond from Camera -*******************************************************************************/ -#define CameraTransitionToBond() Yield() Yield() Yield() +/******************************************************************************* + Prepare to Transition to bond from Camera +*******************************************************************************/ +#define CameraTransitionToBond() Yield() Yield() Yield() + + +/******************************************************************************* + Prepare to Transition from bond to Camera +*******************************************************************************/ +#define CameraTransitionFromBond() BondHideWeapons() Yield() Yield() Yield() - -/******************************************************************************* - Prepare to Transition from bond to Camera -*******************************************************************************/ -#define CameraTransitionFromBond() BondHideWeapons() Yield() Yield() Yield() - //============================================================================== -//## CAMERA RETURN TO BOND +//## CAMERA RETURN TO BOND //============================================================================== - -/******************************************************************************* - Switch back to first person view -******************************************************************************** - @exception: Unused command, never used in retail game. - Tagged items within inventory will become invalid after command - only - weapons are safe. - Must have 3 Yield commands before executing this command or else - engine will crash on console (use CameraTransitionToBond). - Mission time is resumed on return to first person view -*******************************************************************************/ + +/******************************************************************************* + Switch back to first person view +******************************************************************************** + @exception: Unused command, never used in retail game. + Tagged items within inventory will become invalid after command - only + weapons are safe. + Must have 3 Yield commands before executing this command or else + engine will crash on console (use CameraTransitionToBond). + Mission time is resumed on return to first person view +*******************************************************************************/ #define CameraReturnToBond() \ - AI_CameraReturnToBond , - -#define AI_CameraReturnToBond_LENGTH (AICMDSIZE ) + AI_CameraReturnToBond , + +#define AI_CameraReturnToBond_LENGTH (AICMDSIZE ) + - # 10102 "src/aicommands.def" //POLYMORPHS //============================================================================== -//## CAMERA LOOK AT BOND FROM PAD +//## CAMERA LOOK AT BOND FROM PAD //============================================================================== - -/******************************************************************************* - Change view to PAD and look at Bond -******************************************************************************** - @exception: Must have a BondHideWeapons and 3 Yield commands before executing - or else engine will crash on console (use CameraTransitionFromBond). - If camera mode is already in third person then you do NOT need to - do the above. - Mission time is paused while in third person -*******************************************************************************/ + +/******************************************************************************* + Change view to PAD and look at Bond +******************************************************************************** + @exception: Must have a BondHideWeapons and 3 Yield commands before executing + or else engine will crash on console (use CameraTransitionFromBond). + If camera mode is already in third person then you do NOT need to + do the above. + Mission time is paused while in third person +*******************************************************************************/ #define CameraLookAtBondFromPad(PAD) \ AI_CameraLookAtBondFromPad , \ - CharArrayFrom16(PAD) , - -#define AI_CameraLookAtBondFromPad_LENGTH (AICMDSIZE +2 ) + CharArrayFrom16(PAD) , + +#define AI_CameraLookAtBondFromPad_LENGTH (AICMDSIZE +2 ) + - //============================================================================== -//## CAMERA SWITCH +//## CAMERA SWITCH //============================================================================== - -/******************************************************************************* - Change view to tagged cameras position and rotation -******************************************************************************** - @exception: Must have a BondHideWeapons and 3 Yield commands before executing - or else engine will crash on console (use CameraTransitionFromBond). - If camera mode is already in third person then you do NOT need to - do the above - Only look at Bond if flag is set. - Unused flag may have separated look at Bond as x/y flags instead of - a single flag - for retail unused flag does nothing - Mission time is paused while in third person -*******************************************************************************/ + +/******************************************************************************* + Change view to tagged cameras position and rotation +******************************************************************************** + @exception: Must have a BondHideWeapons and 3 Yield commands before executing + or else engine will crash on console (use CameraTransitionFromBond). + If camera mode is already in third person then you do NOT need to + do the above + Only look at Bond if flag is set. + Unused flag may have separated look at Bond as x/y flags instead of + a single flag - for retail unused flag does nothing + Mission time is paused while in third person +*******************************************************************************/ #define CameraSwitch(OBJECT_TAG, LOOK_AT_BOND_FLAG, UNUSED_FLAG) \ AI_CameraSwitch , \ OBJECT_TAG , \ CharArrayFrom16(LOOK_AT_BOND_FLAG) , \ - CharArrayFrom16(UNUSED_FLAG) , - -#define AI_CameraSwitch_LENGTH (AICMDSIZE +1 +2 +2 ) + CharArrayFrom16(UNUSED_FLAG) , + +#define AI_CameraSwitch_LENGTH (AICMDSIZE +1 +2 +2 ) + - //============================================================================== -//## IF BOND Y POS LESS THAN +//## IF BOND Y POS LESS THAN //============================================================================== - -/******************************************************************************* - If Bond's y axis position < Y_POS -******************************************************************************** - @return Continue execution from LABEL if TRYE - @param Y_POS signed Integer - @exception: Checks if Bond's y axis is below Y_POS. - Uses world units. (scale is 1:1 to in-game position.) - Bond's point of view is accounted for by command (like debug's manpos) -*******************************************************************************/ + +/******************************************************************************* + If Bond's y axis position < Y_POS +******************************************************************************** + @return Continue execution from LABEL if TRYE + @param Y_POS signed Integer + @exception: Checks if Bond's y axis is below Y_POS. + Uses world units. (scale is 1:1 to in-game position.) + Bond's point of view is accounted for by command (like debug's manpos) +*******************************************************************************/ #define IFBondYPosLessThan(Y_POS, GOTOLABEL) \ AI_IFBondYPosLessThan , \ CharArrayFrom16(Y_POS) , \ - GOTOLABEL , - -#define AI_IFBondYPosLessThan_LENGTH (AICMDSIZE +2 +1 ) + GOTOLABEL , + +#define AI_IFBondYPosLessThan_LENGTH (AICMDSIZE +2 +1 ) + - //============================================================================== -//## HUD HIDE AND LOCK CONTROLS AND PAUSE MISSION TIME +//## HUD HIDE AND LOCK CONTROLS AND PAUSE MISSION TIME //============================================================================== - -/******************************************************************************* - hide hud elements, lock player controls and pause mission time -******************************************************************************** - @param BITFIELD use HUD_# flags to hide indavidual Hud Elements - @exception: Will not hide element on command execution. - This is needed for dialog/HUD countdown while in cinema mode. - Flags can be combined together to show multiple elements. - Sequential executions of HUD_HIDE can be used to hide more elements, - but once an element has been hidden it cannot be shown again until - HUD_SHOW_ALL is executed. - Bond can take damage while in locked state. - Mission time is paused while in locked state -*******************************************************************************/ + +/******************************************************************************* + hide hud elements, lock player controls and pause mission time +******************************************************************************** + @param BITFIELD use HUD_# flags to hide indavidual Hud Elements + @exception: Will not hide element on command execution. + This is needed for dialog/HUD countdown while in cinema mode. + Flags can be combined together to show multiple elements. + Sequential executions of HUD_HIDE can be used to hide more elements, + but once an element has been hidden it cannot be shown again until + HUD_SHOW_ALL is executed. + Bond can take damage while in locked state. + Mission time is paused while in locked state +*******************************************************************************/ #define BondDisableControl(BITFIELD) \ AI_BondDisableControl , \ - BITFIELD , - -#define AI_BondDisableControl_LENGTH (AICMDSIZE +1 ) + BITFIELD , + +#define AI_BondDisableControl_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## HUD SHOW ALL AND UNLOCK CONTROLS AND RESUME MISSION TIME +//## HUD SHOW ALL AND UNLOCK CONTROLS AND RESUME MISSION TIME //============================================================================== - -/******************************************************************************* - Show all hud elements, unlock player control and resume mission time -******************************************************************************** - @exception: Should only be executed after HUD_HIDE_AND_LOCK_CONTROLS - Mission time is resumed -*******************************************************************************/ + +/******************************************************************************* + Show all hud elements, unlock player control and resume mission time +******************************************************************************** + @exception: Should only be executed after HUD_HIDE_AND_LOCK_CONTROLS + Mission time is resumed +*******************************************************************************/ #define BondEnableControl() \ - AI_BondEnableControl , - -#define AI_BondEnableControl_LENGTH (AICMDSIZE ) + AI_BondEnableControl , + +#define AI_BondEnableControl_LENGTH (AICMDSIZE ) + - //============================================================================== -//## CHR TRY TELEPORTING TO PAD +//## CHR TRY TELEPORTING TO PAD //============================================================================== - -/******************************************************************************* - Teleport chr to PAD -******************************************************************************** - @return Continue execution from LABEL if Successful -*******************************************************************************/ + +/******************************************************************************* + Teleport chr to PAD +******************************************************************************** + @return Continue execution from LABEL if Successful +*******************************************************************************/ #define TRYTeleportingChrToPad(CHR_NUM, PAD, GOTOLABEL) \ AI_TRYTeleportingChrToPad , \ CHR_NUM , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_TRYTeleportingChrToPad_LENGTH (AICMDSIZE +1 +2 +1 ) + GOTOLABEL , + +#define AI_TRYTeleportingChrToPad_LENGTH (AICMDSIZE +1 +2 +1 ) + - # 10426 "src/aicommands.def" //POLYMORPHS -/******************************************************************************* - Teleport chr to PAD -******************************************************************************** - @return Continue execution from LABEL if Successful -*******************************************************************************/ +/******************************************************************************* + Teleport chr to PAD +******************************************************************************** + @return Continue execution from LABEL if Successful +*******************************************************************************/ #define TRYTeleportingMeToPad(PAD, GOTOLABEL) \ - TRYTeleportingChrToPad(CHR_SELF, PAD, GOTOLABEL) + TRYTeleportingChrToPad(CHR_SELF, PAD, GOTOLABEL) + - # 10433 "src/aicommands.def" //============================================================================== -//## SCREEN FADE TO BLACK +//## SCREEN FADE TO BLACK //============================================================================== - -/******************************************************************************* - Fades the screen out to black -******************************************************************************** - @exception: Fade duration is 1 second -*******************************************************************************/ + +/******************************************************************************* + Fades the screen out to black +******************************************************************************** + @exception: Fade duration is 1 second +*******************************************************************************/ #define ScreenFadeToBlack() \ - AI_ScreenFadeToBlack , - -#define AI_ScreenFadeToBlack_LENGTH (AICMDSIZE ) + AI_ScreenFadeToBlack , + +#define AI_ScreenFadeToBlack_LENGTH (AICMDSIZE ) + - //============================================================================== -//## SCREEN FADE FROM BLACK +//## SCREEN FADE FROM BLACK //============================================================================== - -/******************************************************************************* - Fades the screen from black -******************************************************************************** - @exception: Fade duration is 1 second -*******************************************************************************/ + +/******************************************************************************* + Fades the screen from black +******************************************************************************** + @exception: Fade duration is 1 second +*******************************************************************************/ #define ScreenFadeFromBlack() \ - AI_ScreenFadeFromBlack , - -#define AI_ScreenFadeFromBlack_LENGTH (AICMDSIZE ) + AI_ScreenFadeFromBlack , + +#define AI_ScreenFadeFromBlack_LENGTH (AICMDSIZE ) + - //============================================================================== -//## IF SCREEN FADE COMPLETED +//## IF SCREEN FADE COMPLETED //============================================================================== - -/******************************************************************************* - When screen fade has completed (from/to black) -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Fade duration is 1 second -*******************************************************************************/ + +/******************************************************************************* + When screen fade has completed (from/to black) +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Fade duration is 1 second +*******************************************************************************/ #define IFScreenFadeCompleted(GOTOLABEL) \ AI_IFScreenFadeCompleted , \ - GOTOLABEL , - -#define AI_IFScreenFadeCompleted_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFScreenFadeCompleted_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## CHR HIDE ALL +//## CHR HIDE ALL //============================================================================== - -/******************************************************************************* - Hide all characters in level - including Bond's third person model. -******************************************************************************** - @exception: Hidden characters will halt their AI List execution until unhidden - Execute this before switching to exit camera or Bond will disappear -*******************************************************************************/ + +/******************************************************************************* + Hide all characters in level - including Bond's third person model. +******************************************************************************** + @exception: Hidden characters will halt their AI List execution until unhidden + Execute this before switching to exit camera or Bond will disappear +*******************************************************************************/ #define HideAllChrs() \ - AI_HideAllChrs , - -#define AI_HideAllChrs_LENGTH (AICMDSIZE ) + AI_HideAllChrs , + +#define AI_HideAllChrs_LENGTH (AICMDSIZE ) + - //============================================================================== -//## CHR SHOW ALL +//## CHR SHOW ALL //============================================================================== - -/******************************************************************************* - Show all characters previously hidden by HideAllChrs -*******************************************************************************/ + +/******************************************************************************* + Show all characters previously hidden by HideAllChrs +*******************************************************************************/ #define ShowAllChrs() \ - AI_ShowAllChrs , - -#define AI_ShowAllChrs_LENGTH (AICMDSIZE ) + AI_ShowAllChrs , + +#define AI_ShowAllChrs_LENGTH (AICMDSIZE ) + - //============================================================================== //# CINEMATICS END //============================================================================== //============================================================================== -//## DOOR OPEN INSTANT +//## DOOR OPEN INSTANT //============================================================================== - -/******************************************************************************* - Instantly open tagged door -******************************************************************************** - @exception: Mostly used for cutscenes, does NOT trigger door opening sfx. - Open tagged door even if locked -*******************************************************************************/ + +/******************************************************************************* + Instantly open tagged door +******************************************************************************** + @exception: Mostly used for cutscenes, does NOT trigger door opening sfx. + Open tagged door even if locked +*******************************************************************************/ #define DoorOpenInstant(OBJECT_TAG) \ AI_DoorOpenInstant , \ - OBJECT_TAG , - -#define AI_DoorOpenInstant_LENGTH (AICMDSIZE +1 ) + OBJECT_TAG , + +#define AI_DoorOpenInstant_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## CHR REMOVE ITEM IN HAND +//## CHR REMOVE ITEM IN HAND //============================================================================== - -/******************************************************************************* - Remove the item held by HAND_INDEX -******************************************************************************** - @exception: Does NOT drop item, instead clears holding item flag for HAND_INDEX -*******************************************************************************/ + +/******************************************************************************* + Remove the item held by HAND_INDEX +******************************************************************************** + @exception: Does NOT drop item, instead clears holding item flag for HAND_INDEX +*******************************************************************************/ #define ChrRemoveItemInHand(CHR_NUM, HAND_INDEX) \ AI_ChrRemoveItemInHand , \ CHR_NUM , \ - HAND_INDEX , - -#define AI_ChrRemoveItemInHand_LENGTH (AICMDSIZE +1 +1 ) + HAND_INDEX , + +#define AI_ChrRemoveItemInHand_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF NUMBER OF ACTIVE PLAYERS LESS THAN +//## IF NUMBER OF ACTIVE PLAYERS LESS THAN //============================================================================== - -/******************************************************************************* - If the number of active players < NUMBER -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Single player always has a total of active players set to 1 -*******************************************************************************/ + +/******************************************************************************* + If the number of active players < NUMBER +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Single player always has a total of active players set to 1 +*******************************************************************************/ #define IfNumberOfActivePlayersLessThan(NUMBER, GOTOLABEL) \ AI_IfNumberOfActivePlayersLessThan , \ NUMBER , \ - GOTOLABEL , - -#define AI_IfNumberOfActivePlayersLessThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IfNumberOfActivePlayersLessThan_LENGTH (AICMDSIZE +1 +1 ) + - //POLYMORPHS -/******************************************************************************* - If Single Player -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ +/******************************************************************************* + If Single Player +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFSinglePlayer(GOTOLABEL) \ - IfNumberOfActivePlayersLessThan(2, GOTOLABEL) + IfNumberOfActivePlayersLessThan(2, GOTOLABEL) + - # 10765 "src/aicommands.def" //============================================================================== -//## IF BOND ITEM TOTAL AMMO LESS THAN +//## IF BOND ITEM TOTAL AMMO LESS THAN //============================================================================== - -/******************************************************************************* - If Bond's total ammo for item < AMMO_TOTAL -******************************************************************************** - @return Continue execution from LABEL if TRUE - @param AMMO_TOTAL singed char includes loaded gun + reserve -*******************************************************************************/ + +/******************************************************************************* + If Bond's total ammo for item < AMMO_TOTAL +******************************************************************************** + @return Continue execution from LABEL if TRUE + @param AMMO_TOTAL singed char includes loaded gun + reserve +*******************************************************************************/ #define IFBondItemTotalAmmoLessThan(ITEM_NUM, AMMO_TOTAL, GOTOLABEL) \ AI_IFBondItemTotalAmmoLessThan , \ ITEM_NUM , \ AMMO_TOTAL , \ - GOTOLABEL , - -#define AI_IFBondItemTotalAmmoLessThan_LENGTH (AICMDSIZE +1 +1 +1 ) + GOTOLABEL , + +#define AI_IFBondItemTotalAmmoLessThan_LENGTH (AICMDSIZE +1 +1 +1 ) + - //============================================================================== -//## BOND EQUIP ITEM +//## BOND EQUIP ITEM //============================================================================== - -/******************************************************************************* - Forces Bond to equip an item - only works in first person -******************************************************************************** - @exception: Can be used for any item, even if Bond does NOT have it in inventory -*******************************************************************************/ + +/******************************************************************************* + Forces Bond to equip an item - only works in first person +******************************************************************************** + @exception: Can be used for any item, even if Bond does NOT have it in inventory +*******************************************************************************/ #define BondEquipItem(ITEM_NUM) \ AI_BondEquipItem , \ - ITEM_NUM , - -#define AI_BondEquipItem_LENGTH (AICMDSIZE +1 ) + ITEM_NUM , + +#define AI_BondEquipItem_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## BOND EQUIP ITEM CINEMA +//## BOND EQUIP ITEM CINEMA //============================================================================== - -/******************************************************************************* - Forces Bond to equip an item - only works in third person (cinema) -******************************************************************************** - @exception: Can be used for any item, even if Bond does NOT have it in inventory -*******************************************************************************/ + +/******************************************************************************* + Forces Bond to equip an item - only works in third person (cinema) +******************************************************************************** + @exception: Can be used for any item, even if Bond does NOT have it in inventory +*******************************************************************************/ #define BondEquipItemCinema(ITEM_NUM) \ AI_BondEquipItemCinema , \ - ITEM_NUM , - -#define AI_BondEquipItemCinema_LENGTH (AICMDSIZE +1 ) + ITEM_NUM , + +#define AI_BondEquipItemCinema_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## BOND SET LOCKED VELOCITY +//## BOND SET LOCKED VELOCITY //============================================================================== - -/******************************************************************************* - Forces Bond to move in X/Z direction -******************************************************************************** - @param X/Z_SPEED60 is number of world units per tick (1 = 0.6m/s) - @exception: Only works when Bond has been locked by HUD_HIDE_AND_LOCK_CONTROLS. - Used for dam jump. - Uses world units. (scale is 1:1 to in-game position.) -*******************************************************************************/ + +/******************************************************************************* + Forces Bond to move in X/Z direction +******************************************************************************** + @param X/Z_SPEED60 is number of world units per tick (1 = 0.6m/s) + @exception: Only works when Bond has been locked by HUD_HIDE_AND_LOCK_CONTROLS. + Used for dam jump. + Uses world units. (scale is 1:1 to in-game position.) +*******************************************************************************/ #define BondSetLockedVelocity(X_SPEED60, Z_SPEED60) \ AI_BondSetLockedVelocity , \ X_SPEED60 , \ - Z_SPEED60 , - -#define AI_BondSetLockedVelocity_LENGTH (AICMDSIZE +1 +1 ) + Z_SPEED60 , + +#define AI_BondSetLockedVelocity_LENGTH (AICMDSIZE +1 +1 ) + - # 10911 "src/aicommands.def" //============================================================================== -//## IF OBJECT IN ROOM WITH PAD +//## IF OBJECT IN ROOM WITH PAD //============================================================================== - -/******************************************************************************* - If tagged object in the same room with PAD -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If tagged object in the same room with PAD +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFObjectInRoomWithPad(OBJECT_TAG, PAD, GOTOLABEL) \ AI_IFObjectInRoomWithPad , \ OBJECT_TAG , \ CharArrayFrom16(PAD) , \ - GOTOLABEL , - -#define AI_IFObjectInRoomWithPad_LENGTH (AICMDSIZE +1 +2 +1 ) + GOTOLABEL , + +#define AI_IFObjectInRoomWithPad_LENGTH (AICMDSIZE +1 +2 +1 ) + - //============================================================================== //## IF GUARD IS FIRING AND LOCKED FORWARD //============================================================================== - -/******************************************************************************* - If guard is in firing state (ACT_ATTACK) and TARGET_180_RANGE is set -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If guard is in firing state (ACT_ATTACK) and TARGET_180_RANGE is set +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFImFiringAndLockedForward(GOTOLABEL) \ AI_IFImFiringAndLockedForward , \ - GOTOLABEL , - -#define AI_IFImFiringAndLockedForward_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFImFiringAndLockedForward_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF GUARD IS FIRING +//## IF GUARD IS FIRING //============================================================================== - -/******************************************************************************* - If guard is in firing state (ACT_ATTACK) -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If guard is in firing state (ACT_ATTACK) +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFImFiring(GOTOLABEL) \ AI_IFImFiring , \ - GOTOLABEL , - -#define AI_IFImFiring_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFImFiring_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## SWITCH ENVIRONMENT +//## SWITCH ENVIRONMENT //============================================================================== - -/******************************************************************************* - Instantly switch Sky to the Alternative Sky -******************************************************************************** - @exception: Can NOT be stopped after executing. - Level must have a Sky assigned or will crash! -*******************************************************************************/ + +/******************************************************************************* + Instantly switch Sky to the Alternative Sky +******************************************************************************** + @exception: Can NOT be stopped after executing. + Level must have a Sky assigned or will crash! +*******************************************************************************/ #define SwitchSky() \ - AI_SwitchSky , - -#define AI_SwitchSky_LENGTH (AICMDSIZE ) + AI_SwitchSky , + +#define AI_SwitchSky_LENGTH (AICMDSIZE ) + - # 11074 "src/aicommands.def" //============================================================================== -//## TRIGGER FADE AND EXIT LEVEL ON BUTTON PRESS +//## TRIGGER FADE AND EXIT LEVEL ON BUTTON PRESS //============================================================================== - -/******************************************************************************* - If player pressed any button, fade to black and exit level -******************************************************************************** - @exception: This command activates a state where game will fade to black when - button input is detected from controller 1. - Does NOT pause mission time -*******************************************************************************/ + +/******************************************************************************* + If player pressed any button, fade to black and exit level +******************************************************************************** + @exception: This command activates a state where game will fade to black when + button input is detected from controller 1. + Does NOT pause mission time +*******************************************************************************/ #define TriggerFadeAndExitLevelOnButtonPress() \ - AI_TriggerFadeAndExitLevelOnButtonPress , - -#define AI_TriggerFadeAndExitLevelOnButtonPress_LENGTH (AICMDSIZE ) + AI_TriggerFadeAndExitLevelOnButtonPress , + +#define AI_TriggerFadeAndExitLevelOnButtonPress_LENGTH (AICMDSIZE ) + - //============================================================================== -//## IF BOND IS DEAD +//## IF BOND IS DEAD //============================================================================== - -/******************************************************************************* - If Bond has died/been killed -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If Bond has died/been killed +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFBondIsDead(GOTOLABEL) \ AI_IFBondIsDead , \ - GOTOLABEL , - -#define AI_IFBondIsDead_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFBondIsDead_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## BOND DISABLE DAMAGE AND PICKUPS +//## BOND DISABLE DAMAGE AND PICKUPS //============================================================================== - -/******************************************************************************* - Disables Bond damage and ability to pick up items -******************************************************************************** - @exception: Commonly used for level exit AI Lists - prevents Bond dying after - triggering exit cutscene. - Use IF_BOND_DAMAGE_AND_PICKUPS_DISABLED to check if flag is set on -*******************************************************************************/ + +/******************************************************************************* + Disables Bond damage and ability to pick up items +******************************************************************************** + @exception: Commonly used for level exit AI Lists - prevents Bond dying after + triggering exit cutscene. + Use IF_BOND_DAMAGE_AND_PICKUPS_DISABLED to check if flag is set on +*******************************************************************************/ #define BondDisableDamageAndPickups() \ - AI_BondDisableDamageAndPickups , - -#define AI_BondDisableDamageAndPickups_LENGTH (AICMDSIZE ) + AI_BondDisableDamageAndPickups , + +#define AI_BondDisableDamageAndPickups_LENGTH (AICMDSIZE ) + - # 11184 "src/aicommands.def" //============================================================================== -//## BOND HIDE WEAPONS +//## BOND HIDE WEAPONS //============================================================================== - -/******************************************************************************* - Set Bond's left/right weapons to be invisible -*******************************************************************************/ + +/******************************************************************************* + Set Bond's left/right weapons to be invisible +*******************************************************************************/ #define BondHideWeapons() \ - AI_BondHideWeapons , - -#define AI_BondHideWeapons_LENGTH (AICMDSIZE ) + AI_BondHideWeapons , + +#define AI_BondHideWeapons_LENGTH (AICMDSIZE ) + - //============================================================================== -//## CAMERA ORBIT PAD +//## CAMERA ORBIT PAD //============================================================================== - -/******************************************************************************* - Change view to orbit a pad with set speed -******************************************************************************** - @param LAT_DISTANCE: Unsigned camera distance from pad in centimeters - @param VERT_DISTANCE: Signed camera distance from pad in centimeters - @param ORBIT_SPEED: Normalised angle -0.5 - 0 - 0.5 (8000 - 7FFF) to rotate - per frame. Generally stick to a low range as it is used - for delta timing (FF00-0100) (-0.02 - 0 - 0.02) - @param PAD: pad for camera to target and orbit around - @param Y_POS_OFFSET: Signed offset the relative y position for pad - (boom/jib) - @param INITIAL_ROTATION: Counter-clockwise normalised angle 0 - 1.0 (65535) - @exception: Must have a BondHideWeapons and 3 Yield commands before executing - or else engine will crash on console (use CameraTransitionFromBond). - If camera mode is already in third person then you do NOT need to do - the above. - Mission time is paused while in third person -*******************************************************************************/ + +/******************************************************************************* + Change view to orbit a pad with set speed +******************************************************************************** + @param LAT_DISTANCE: Unsigned camera distance from pad in centimeters + @param VERT_DISTANCE: Signed camera distance from pad in centimeters + @param ORBIT_SPEED: Normalised angle -0.5 - 0 - 0.5 (8000 - 7FFF) to rotate + per frame. Generally stick to a low range as it is used + for delta timing (FF00-0100) (-0.02 - 0 - 0.02) + @param PAD: pad for camera to target and orbit around + @param Y_POS_OFFSET: Signed offset the relative y position for pad + (boom/jib) + @param INITIAL_ROTATION: Counter-clockwise normalised angle 0 - 1.0 (65535) + @exception: Must have a BondHideWeapons and 3 Yield commands before executing + or else engine will crash on console (use CameraTransitionFromBond). + If camera mode is already in third person then you do NOT need to do + the above. + Mission time is paused while in third person +*******************************************************************************/ #define CameraOrbitPad(LAT_DISTANCE, VERT_DISTANCE, ORBIT_SPEED60, PAD, Y_POS_OFFSET, INITIAL_ROTATION) \ AI_CameraOrbitPad , \ CharArrayFrom16(LAT_DISTANCE) , \ @@ -6539,332 +6539,332 @@ r******************************************************************************* CharArrayFrom16(ORBIT_SPEED60) , \ CharArrayFrom16(PAD) , \ CharArrayFrom16(Y_POS_OFFSET) , \ - CharArrayFrom16(INITIAL_ROTATION) , - -#define AI_CameraOrbitPad_LENGTH (AICMDSIZE +2 +2 +2 +2 +2 +2 ) + CharArrayFrom16(INITIAL_ROTATION) , + +#define AI_CameraOrbitPad_LENGTH (AICMDSIZE +2 +2 +2 +2 +2 +2 ) + - //============================================================================== -//## CREDITS ROLL +//## CREDITS ROLL //============================================================================== - -/******************************************************************************* - Trigger credits crawl -******************************************************************************** - @exception: Credits text and positions are stored in setup intro struct -*******************************************************************************/ + +/******************************************************************************* + Trigger credits crawl +******************************************************************************** + @exception: Credits text and positions are stored in setup intro struct +*******************************************************************************/ #define CreditsRoll() \ - AI_CreditsRoll , - -#define AI_CreditsRoll_LENGTH (AICMDSIZE ) + AI_CreditsRoll , + +#define AI_CreditsRoll_LENGTH (AICMDSIZE ) + - # 11313 "src/aicommands.def" //============================================================================== -//## IF CREDITS HAS COMPLETED +//## IF CREDITS HAS COMPLETED //============================================================================== - -/******************************************************************************* - If credits crawl has finished -******************************************************************************** - @return Continue execution from LABEL if TRUE -*******************************************************************************/ + +/******************************************************************************* + If credits crawl has finished +******************************************************************************** + @return Continue execution from LABEL if TRUE +*******************************************************************************/ #define IFCreditsHasCompleted(GOTOLABEL) \ AI_IFCreditsHasCompleted , \ - GOTOLABEL , - -#define AI_IFCreditsHasCompleted_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFCreditsHasCompleted_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF OBJECTIVE ALL COMPLETED +//## IF OBJECTIVE ALL COMPLETED //============================================================================== - -/******************************************************************************* - If all objectives for current difficulty has been completed -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Uses objective difficulty settings within setup, briefing file - settings are not referenced. - Ensure both setup and briefing files are consistent -*******************************************************************************/ + +/******************************************************************************* + If all objectives for current difficulty has been completed +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Uses objective difficulty settings within setup, briefing file + settings are not referenced. + Ensure both setup and briefing files are consistent +*******************************************************************************/ #define IFObjectiveAllCompleted(GOTOLABEL) \ AI_IFObjectiveAllCompleted , \ - GOTOLABEL , - -#define AI_IFObjectiveAllCompleted_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFObjectiveAllCompleted_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## IF FOLDER ACTOR IS EQUAL +//## IF FOLDER ACTOR IS EQUAL //============================================================================== - -/******************************************************************************* - If current Bond equal to folder actor index -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: In retail release only index 0 works. - Originally this would have checked which Bond - (Brosnan/Connery/Moore/Dalton) is currently used, with each briefing - folder using a different Bond likeness in-game. However Rare didn't - have the license to use the other actor's faces so this feature was - removed. Command is only used for Cuba (credits) -*******************************************************************************/ + +/******************************************************************************* + If current Bond equal to folder actor index +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: In retail release only index 0 works. + Originally this would have checked which Bond + (Brosnan/Connery/Moore/Dalton) is currently used, with each briefing + folder using a different Bond likeness in-game. However Rare didn't + have the license to use the other actor's faces so this feature was + removed. Command is only used for Cuba (credits) +*******************************************************************************/ #define IFFolderActorIsEqual(BOND_ACTOR_INDEX, GOTOLABEL) \ AI_IFFolderActorIsEqual , \ BOND_ACTOR_INDEX , \ - GOTOLABEL , - -#define AI_IFFolderActorIsEqual_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFFolderActorIsEqual_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF BOND DAMAGE AND PICKUPS DISABLED +//## IF BOND DAMAGE AND PICKUPS DISABLED //============================================================================== - -/******************************************************************************* - If Bond damage and ability to pick up items disabled -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Used to check when Bond has exited level, usually to stop guards from - spawning during mission cinema. - Use BOND_DISABLE_DAMAGE_AND_PICKUPS to set state on -*******************************************************************************/ + +/******************************************************************************* + If Bond damage and ability to pick up items disabled +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Used to check when Bond has exited level, usually to stop guards from + spawning during mission cinema. + Use BOND_DISABLE_DAMAGE_AND_PICKUPS to set state on +*******************************************************************************/ #define IFBondDamageAndPickupsDisabled(GOTOLABEL) \ AI_IFBondDamageAndPickupsDisabled , \ - GOTOLABEL , - -#define AI_IFBondDamageAndPickupsDisabled_LENGTH (AICMDSIZE +1 ) + GOTOLABEL , + +#define AI_IFBondDamageAndPickupsDisabled_LENGTH (AICMDSIZE +1 ) + - //============================================================================== -//## MUSIC XTRACK PLAY +//## MUSIC XTRACK PLAY //============================================================================== - -/******************************************************************************* - Play levels x track for duration -******************************************************************************** - @param SECONDS unsigned - @param MUSIC_SLOT available music slots range is 0-3 - @exception: SECONDS_STOPPED_DURATION is used by MUSIC_XTRACK_STOP - When a slot is stopped, the xtrack will continue to play until - this or SECONDS_TOTAL_DURATION reaches 0. - If you do not want this to happen, set SECONDS_STOPPED_DURATION to 0 -*******************************************************************************/ + +/******************************************************************************* + Play levels x track for duration +******************************************************************************** + @param SECONDS unsigned + @param MUSIC_SLOT available music slots range is 0-3 + @exception: SECONDS_STOPPED_DURATION is used by MUSIC_XTRACK_STOP + When a slot is stopped, the xtrack will continue to play until + this or SECONDS_TOTAL_DURATION reaches 0. + If you do not want this to happen, set SECONDS_STOPPED_DURATION to 0 +*******************************************************************************/ #define MusicPlaySlot(MUSIC_SLOT, SECONDS_STOPPED_DURATION, SECONDS_TOTAL_DURATION) \ AI_MusicPlaySlot , \ MUSIC_SLOT , \ SECONDS_STOPPED_DURATION , \ - SECONDS_TOTAL_DURATION , - -#define AI_MusicPlaySlot_LENGTH (AICMDSIZE +1 +1 +1 ) + SECONDS_TOTAL_DURATION , + +#define AI_MusicPlaySlot_LENGTH (AICMDSIZE +1 +1 +1 ) + - # 11519 "src/aicommands.def" //============================================================================== -//## MUSIC XTRACK STOP +//## MUSIC XTRACK STOP //============================================================================== - -/******************************************************************************* - Stop currently playing x track in slot -******************************************************************************** - @param MUSIC_SLOT available music slots range is 0-3 - @exception: Use slot -1 to stop all xtrack slots instantly. - When stopping a music slot, it will let the track continue to play - until the seconds stopped duration time or total time - (set by MUSIC_XTRACK_PLAY) reaches zero. - This is ignored when using music slot -1 -*******************************************************************************/ + +/******************************************************************************* + Stop currently playing x track in slot +******************************************************************************** + @param MUSIC_SLOT available music slots range is 0-3 + @exception: Use slot -1 to stop all xtrack slots instantly. + When stopping a music slot, it will let the track continue to play + until the seconds stopped duration time or total time + (set by MUSIC_XTRACK_PLAY) reaches zero. + This is ignored when using music slot -1 +*******************************************************************************/ #define MusicStopSlot(MUSIC_SLOT) \ AI_MusicStopSlot , \ - MUSIC_SLOT , - -#define AI_MusicStopSlot_LENGTH (AICMDSIZE +1 ) + MUSIC_SLOT , + +#define AI_MusicStopSlot_LENGTH (AICMDSIZE +1 ) + - # 11557 "src/aicommands.def" //============================================================================== -//## TRIGGER EXPLOSIONS AROUND BOND +//## TRIGGER EXPLOSIONS AROUND BOND //============================================================================== - -/******************************************************************************* - Triggers explosions around Bond, will continue forever -******************************************************************************** - @exception: Does NOT trigger level exit or killed in action state -*******************************************************************************/ + +/******************************************************************************* + Triggers explosions around Bond, will continue forever +******************************************************************************** + @exception: Does NOT trigger level exit or killed in action state +*******************************************************************************/ #define TriggerExplosionsAroundBond() \ - AI_TriggerExplosionsAroundBond , - -#define AI_TriggerExplosionsAroundBond_LENGTH (AICMDSIZE ) + AI_TriggerExplosionsAroundBond , + +#define AI_TriggerExplosionsAroundBond_LENGTH (AICMDSIZE ) + - # 11589 "src/aicommands.def" //============================================================================== -//## IF KILLED CIVILIANS GREATER THAN +//## IF KILLED CIVILIANS GREATER THAN //============================================================================== - -/******************************************************************************* - If total civilians killed > CIVILIANS_KILLED -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Guards flagged with CHRFLAG_COUNT_DEATH_AS_CIVILIAN will count towards - total when killed. - Usually set for scientists/civilians/innocent NPCs -*******************************************************************************/ + +/******************************************************************************* + If total civilians killed > CIVILIANS_KILLED +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Guards flagged with CHRFLAG_COUNT_DEATH_AS_CIVILIAN will count towards + total when killed. + Usually set for scientists/civilians/innocent NPCs +*******************************************************************************/ #define IFKilledCiviliansGreaterThan(CIVILIANS_KILLED, GOTOLABEL) \ AI_IFKilledCiviliansGreaterThan , \ CIVILIANS_KILLED , \ - GOTOLABEL , - -#define AI_IFKilledCiviliansGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFKilledCiviliansGreaterThan_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## IF CHR WAS SHOT SINCE LAST CHECK +//## IF CHR WAS SHOT SINCE LAST CHECK //============================================================================== - -/******************************************************************************* - If chr was shot since last check -******************************************************************************** - @return Continue execution from LABEL if TRUE - @exception: Checks chr->chrflags if CHRFLAG_WAS_HIT is set. - If true, unset flag and Goto LABEL. - CHRFLAG_WAS_HIT is set even if guard is invincible -*******************************************************************************/ + +/******************************************************************************* + If chr was shot since last check +******************************************************************************** + @return Continue execution from LABEL if TRUE + @exception: Checks chr->chrflags if CHRFLAG_WAS_HIT is set. + If true, unset flag and Goto LABEL. + CHRFLAG_WAS_HIT is set even if guard is invincible +*******************************************************************************/ #define IFChrWasShotSinceLastCheck(CHR_NUM, GOTOLABEL) \ AI_IFChrWasShotSinceLastCheck , \ CHR_NUM , \ - GOTOLABEL , - -#define AI_IFChrWasShotSinceLastCheck_LENGTH (AICMDSIZE +1 +1 ) + GOTOLABEL , + +#define AI_IFChrWasShotSinceLastCheck_LENGTH (AICMDSIZE +1 +1 ) + - //============================================================================== -//## BOND KILLED IN ACTION +//## BOND KILLED IN ACTION //============================================================================== - -/******************************************************************************* - Sets briefing status to killed in action, automatic mission failure -******************************************************************************** - @exception: Does NOT kill Bond, only changes the mission status -*******************************************************************************/ + +/******************************************************************************* + Sets briefing status to killed in action, automatic mission failure +******************************************************************************** + @exception: Does NOT kill Bond, only changes the mission status +*******************************************************************************/ #define BondKilledInAction() \ - AI_BondKilledInAction , - -#define AI_BondKilledInAction_LENGTH (AICMDSIZE ) + AI_BondKilledInAction , + +#define AI_BondKilledInAction_LENGTH (AICMDSIZE ) + - # 11707 "src/aicommands.def" //============================================================================== -//## GUARD RAISES ARMS +//## GUARD RAISES ARMS //============================================================================== - -/******************************************************************************* - Makes me raise my arms for half a second -*******************************************************************************/ + +/******************************************************************************* + Makes me raise my arms for half a second +*******************************************************************************/ #define RaiseArms() \ - AI_RaiseArms , - -#define AI_RaiseArms_LENGTH (AICMDSIZE ) + AI_RaiseArms , + +#define AI_RaiseArms_LENGTH (AICMDSIZE ) + - # 11737 "src/aicommands.def" //============================================================================== -//## GAS LEAK AND FADE FOG +//## GAS LEAK AND FADE FOG //============================================================================== - -/******************************************************************************* - Trigger gas leak event and slowly transition fog to the next fogs slot -******************************************************************************** - @exception: This command triggers a gas leak. - For the level egypt, this command will not trigger a gas leak, but - instead will only transition the fog. - Can NOT be stopped after executing. - Level must have a fog assigned or will crash! -*******************************************************************************/ + +/******************************************************************************* + Trigger gas leak event and slowly transition fog to the next fogs slot +******************************************************************************** + @exception: This command triggers a gas leak. + For the level egypt, this command will not trigger a gas leak, but + instead will only transition the fog. + Can NOT be stopped after executing. + Level must have a fog assigned or will crash! +*******************************************************************************/ #define GasLeakAndFadeFog() \ - AI_GasLeakAndFadeFog , - -#define AI_GasLeakAndFadeFog_LENGTH (AICMDSIZE ) + AI_GasLeakAndFadeFog , + +#define AI_GasLeakAndFadeFog_LENGTH (AICMDSIZE ) + - //POLYMORPHS -/******************************************************************************* - Trigger gas leak event and slowly transition fog to the next fogs slot -******************************************************************************** - @exception: This command triggers a gas leak. - For the level egypt, this command will not trigger a gas leak, but - instead will only transition the fog. - Can NOT be stopped after executing. - Level must have a fog assigned or will crash! - ONLY WORKS FOR LEVEL ID AZTEC -*******************************************************************************/ +/******************************************************************************* + Trigger gas leak event and slowly transition fog to the next fogs slot +******************************************************************************** + @exception: This command triggers a gas leak. + For the level egypt, this command will not trigger a gas leak, but + instead will only transition the fog. + Can NOT be stopped after executing. + Level must have a fog assigned or will crash! + ONLY WORKS FOR LEVEL ID AZTEC +*******************************************************************************/ #define FADE_FOG() \ - GasLeakAndFadeFog() + GasLeakAndFadeFog() + - # 11790 "src/aicommands.def" //============================================================================== -//## OBJECT ROCKET LAUNCH +//## OBJECT ROCKET LAUNCH //============================================================================== - -/******************************************************************************* - Launch a tagged object like a rocket -******************************************************************************** - @exception: If tagged object can NOT be turned upright, object will be destroyed - instead. - Can be used to drop attached props -*******************************************************************************/ + +/******************************************************************************* + Launch a tagged object like a rocket +******************************************************************************** + @exception: If tagged object can NOT be turned upright, object will be destroyed + instead. + Can be used to drop attached props +*******************************************************************************/ #define ObjectRocketLaunch(OBJECT_TAG) \ AI_ObjectRocketLaunch , \ - OBJECT_TAG , - -#define AI_ObjectRocketLaunch_LENGTH (AICMDSIZE +1 ) + OBJECT_TAG , + +#define AI_ObjectRocketLaunch_LENGTH (AICMDSIZE +1 ) + - //POLYMORPHS -/******************************************************************************* - Launch a tagged object like a rocket -******************************************************************************** - @exception: If tagged object can NOT be turned upright, object will be destroyed - instead. - Can be used to drop attached props -*******************************************************************************/ +/******************************************************************************* + Launch a tagged object like a rocket +******************************************************************************** + @exception: If tagged object can NOT be turned upright, object will be destroyed + instead. + Can be used to drop attached props +*******************************************************************************/ #define PROP_DROP_FROM_ATTACHMENT(OBJECT_TAG) \ - ObjectRocketLaunch(OBJECT_TAG) + ObjectRocketLaunch(OBJECT_TAG) + - # 11846 "src/aicommands.def" //UNDEF CMDS # 195 "tools/cmdbuilder.c" diff --git a/src/aspboot.s b/src/aspboot.s index 1b859ef..4423cde 100644 --- a/src/aspboot.s +++ b/src/aspboot.s @@ -10,11 +10,11 @@ .section .text, "ax" glabel aspMainTextStart -.incbin "/bin/aspboot.text.bin" +.incbin "bin/aspboot.text.bin" glabel aspMainTextEnd .section .data glabel aspMainDataStart -.incbin "/bin/aspboot.data.bin" +.incbin "bin/aspboot.data.bin" glabel aspMainDataEnd diff --git a/src/audi.c b/src/audi.c index 5495a18..38399a5 100644 --- a/src/audi.c +++ b/src/audi.c @@ -4,6 +4,7 @@ #include "audi.h" #include "thread_config.h" #include "bondgame.h" +#include "speed_graph.h" /** * EU .data, offset from start of data_seg : 0x23A0 @@ -431,18 +432,10 @@ void amMain(void* arg) switch (*msg) { case OS_SC_RETRACE_MSG: g_StartTime = osGetTime(); -#if defined(LEFTOVERDEBUG) - profileSetMarker(0x30000); -#else - speedGraphDisplay(0x30000); -#endif + speedgraphMarkerHandler(0x30000); amHandleFrameMessage(g_AudioManager.audioInfo[g_AudioFrameCount % 3], info); count++; -#if defined(LEFTOVERDEBUG) - profileSetMarker(0x60000); -#else - speedGraphDisplay(0x60000); -#endif + speedgraphMarkerHandler(0x60000); g_EndTime = osGetTime(); g_DeltaTime = g_EndTime - g_StartTime; diff --git a/src/bondaicommands.h b/src/bondaicommands.h index b83c489..9f2bcc8 100644 --- a/src/bondaicommands.h +++ b/src/bondaicommands.h @@ -85,8 +85,8 @@ //### AI commands with CHR_NUM argument ============================================================================== - Most commands with "chr" in the name use a CHR_NUM argument. For the most - part, this can be used with any loaded chr number and it will work fine. + Most commands with "chr" in the name use a CHR_NUM argument. For the most + part, this can be used with any loaded chr number and it will work fine. There is however one exception to this and that is the special CHR_XXX ID : CHR_BOND_CINEMA. This ID only works when bond has a third person model assigned (intro/exit @@ -187,21 +187,21 @@ Ortho View 90 Y+. Azimuth /|\ - .``|`` + .''|'' ' | - | . | | S 180 E 270 | / '-.|/` - - /` ```--.. - . /` ``--.. . - 0 . /` ``--:.`. + - /' '''--.. + . /' ''--.. . + 0 . /' ''--:.`. ./` :----' X+ W 90 |'-.` | `- - Z+ ```````` N 0 - + Z+ '''''''' N 0 + 10x10 Grid showing angles at distance from origin (Chr) @@ -246,6 +246,7 @@ #define AI_LIST_CHR_START 0x0401 #define AI_LIST_OBJ_START 0x1000 +// Print Helpful Compile-time error messages #if defined(__INTELLISENSE__) # define AI_ERR_SUB (GAILIST_DEAD_AI) # define AI_ERR_NOTSUB (GAILIST_DEAD_AI) @@ -266,7 +267,7 @@ /** * Is the called AI List a subroutine (will it return) - * Per Setup Subroutines should be added to SETUPSUBROUTINES at the top of the + * Per Setup Subroutines should be added to SETUPSUBROUTINES at the top of the * setup. * eg * #define SETUPSUBROUTINES(ID) (ID == ACTIVATE_OBJECT) |\ @@ -292,16 +293,16 @@ typedef enum GAILISTID GAILIST_AIM_AT_BOND, /** - Dead or Removed AI. + Dead or Removed AI. Use when AI has no more to do (or use YIELD_FOREVER) @return No Return - AI List can only be changed by a 3rd party via SetChrAiList */ GAILIST_DEAD_AI, /** - Stand Guard and Kill Time or patrol (Not typicaly used for patrolling). - While killing time, play Idle animations - On detecting Bond, Send a clone OR Run to Bond and Attack. + Stand Guard and Kill Time or patrol (Not typicaly used for patrolling). + While killing time, play Idle animations + On detecting Bond, Send a clone OR Run to Bond and Attack. This AI List is used by nearly all guards either as default or as a result of detecting Bond or finnishing their assigned behaivior. @return No Return - AI List can only be changed by a 3rd party via SetChrAiList @@ -310,7 +311,7 @@ typedef enum GAILISTID /** Play one random idle animation - @return to caller if called with CALL + @return to caller if called with CALL -or- return to List set by SetReturnAiList - If not set will crash */ @@ -318,7 +319,7 @@ typedef enum GAILISTID /** Bash that Keyboard once with a random animation - @return to caller if called with CALL + @return to caller if called with CALL -or- return to List set by SetReturnAiList - If not set will crash */ @@ -326,7 +327,7 @@ typedef enum GAILISTID /** Stand Guard Statically (No Clones, No animations) or patrol. - On detecting Bond (sight/near-miss only), Act like a Standard Guard. + On detecting Bond (sight/near-miss only), Act like a Standard Guard. @return to Standard Guard */ GAILIST_SIMPLE_GUARD_DEAF, @@ -340,7 +341,7 @@ typedef enum GAILISTID GAILIST_ATTACK_BOND, /** - Stand Guard Statically (No Clones, No animations) or patrol (Typical use of this type). + Stand Guard Statically (No Clones, No animations) or patrol (Typical use of this type). On detecting Bond, Act like a Standard Guard. @return to Standard Guard */ @@ -355,8 +356,8 @@ typedef enum GAILISTID GAILIST_RUN_TO_BOND, /** - Stand Guard Statically (No Clones, No animations) or patrol. - On detecting Bond, Run to padpreset1 and activate alarm. + Stand Guard Statically (No Clones, No animations) or patrol. + On detecting Bond, Run to padpreset1 and activate alarm. Act like a Standard Guard thereafter @return to Standard Guard */ @@ -469,10 +470,10 @@ typedef enum HITTARGET } HITTARGET; // command 68 - door states -#define DOOR_STATE_CLOSED 0x01 /* Closed*/ -#define DOOR_STATE_OPEN 0x02 /* Opened*/ -#define DOOR_STATE_CLOSING 0x04 /* Closing*/ -#define DOOR_STATE_OPENING 0x08 /* Opening*/ +#define AI_DOOR_STATE_CLOSED 0x01 /* Closed*/ +#define AI_DOOR_STATE_OPEN 0x02 /* Opened*/ +#define AI_DOOR_STATE_CLOSING 0x04 /* Closing*/ +#define AI_DOOR_STATE_OPENING 0x08 /* Opening*/ // command BD/BE - spawn flags #define SPAWN_SUNGLASSES 0x00000001 /* Sunglasses*/ @@ -563,104 +564,60 @@ IF_VA(NOT(IS_EMPTY(CASE_CONTENT2)))(IF_VA(NOT(IS_EMPTY(CASE_CONTENT3)))(Label(lb IF_VA(NOT(IS_EMPTY(CASE_CONTENT1)))(IF_VA(NOT(IS_EMPTY(CASE_CONTENT2)))(Label(lblNext)) CASE0 (CASE_VAL0,lblNext) EXPAND_ARGS_STACK(CASE_CONTENT1)(lblDone))\ IF_VA(NOT(IS_EMPTY(CASE_CONTENT0)))(IF_VA(NOT(IS_EMPTY(CASE_CONTENT1)))(Label(lblNext)) EXPAND_ARGS_STACK(CASE_CONTENT0)(lblDone) \ Label(lblDone)) - - + + /** + Simple AND Statement. + Test should separate Command from value. + Empty Test is equivelant to a switch default:. + Limited to 16 compares. + Format: AND(Fail_Label, + TEST_COMMAND, TEST_VALUE, + TEST_COMMAND, TEST_VALUE,...) + do stuff + Label(FAIL) + do stuff + */ +#define AND(FAIL_LBL,\ + CASE0, CASE_VAL0, \ + CASE1, CASE_VAL1, \ + CASE2, CASE_VAL2, \ + CASE3, CASE_VAL3, \ + CASE4, CASE_VAL4, \ + CASE5, CASE_VAL5, \ + CASE6, CASE_VAL6, \ + CASE7, CASE_VAL7, \ + CASE8, CASE_VAL8, \ + CASE9, CASE_VAL9, \ + CASEA, CASE_VALA, \ + CASEB, CASE_VALB, \ + CASEC, CASE_VALC, \ + CASED, CASE_VALD, \ + CASEE, CASE_VALE, \ + CASEF, CASE_VALF)\ +IF_VA(NOT(IS_EMPTY(CASEF)))(0}; Error: And Limited to 15 elements \ + \ + /*This is here to stop the spread of errors*/ u8 CASEF[] = {)\ +IF_VA(NOT(IS_EMPTY(CASE_VALF)))( CASEE (CASE_VALE,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VALE)))(IF_VA(NOT(IS_EMPTY(CASE_VALF)))(BREAK(FAIL_LBL) Label(lblNext)) CASED (CASE_VALD,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VALD)))(IF_VA(NOT(IS_EMPTY(CASE_VALE)))(BREAK(FAIL_LBL) Label(lblNext)) CASEC (CASE_VALC,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VALC)))(IF_VA(NOT(IS_EMPTY(CASE_VALD)))(BREAK(FAIL_LBL) Label(lblNext)) CASEB (CASE_VALB,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VALB)))(IF_VA(NOT(IS_EMPTY(CASE_VALC)))(BREAK(FAIL_LBL) Label(lblNext)) CASEA (CASE_VALA,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VALA)))(IF_VA(NOT(IS_EMPTY(CASE_VALB)))(BREAK(FAIL_LBL) Label(lblNext)) CASE9 (CASE_VAL9,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL9)))(IF_VA(NOT(IS_EMPTY(CASE_VALA)))(BREAK(FAIL_LBL) Label(lblNext)) CASE8 (CASE_VAL8,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL8)))(IF_VA(NOT(IS_EMPTY(CASE_VAL9)))(BREAK(FAIL_LBL) Label(lblNext)) CASE7 (CASE_VAL7,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL7)))(IF_VA(NOT(IS_EMPTY(CASE_VAL8)))(BREAK(FAIL_LBL) Label(lblNext)) CASE6 (CASE_VAL6,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL6)))(IF_VA(NOT(IS_EMPTY(CASE_VAL7)))(BREAK(FAIL_LBL) Label(lblNext)) CASE5 (CASE_VAL5,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL5)))(IF_VA(NOT(IS_EMPTY(CASE_VAL6)))(BREAK(FAIL_LBL) Label(lblNext)) CASE4 (CASE_VAL4,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL4)))(IF_VA(NOT(IS_EMPTY(CASE_VAL5)))(BREAK(FAIL_LBL) Label(lblNext)) CASE3 (CASE_VAL3,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL3)))(IF_VA(NOT(IS_EMPTY(CASE_VAL4)))(BREAK(FAIL_LBL) Label(lblNext)) CASE2 (CASE_VAL2,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL2)))(IF_VA(NOT(IS_EMPTY(CASE_VAL3)))(BREAK(FAIL_LBL) Label(lblNext)) CASE1 (CASE_VAL1,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL1)))(IF_VA(NOT(IS_EMPTY(CASE_VAL2)))(BREAK(FAIL_LBL) Label(lblNext)) CASE0 (CASE_VAL0,lblNext) )\ +IF_VA(NOT(IS_EMPTY(CASE_VAL0)))(IF_VA(NOT(IS_EMPTY(CASE_VAL1)))(BREAK(FAIL_LBL) Label(lblNext)) ) + #include "aicommands2.h" #if 1 -// //temporary thunking for ai names -// #define DO(label_id) \ -// label(label_id) \ -// ai_sleep - -// #define LOOP(label) \ -// goto_first(label) - -// #define CONTINUE(label) \ -// goto_first(label) - -// #define YIELD_FOREVER(label_id) \ -// label(label_id) \ -// ai_sleep \ -// goto_first(label_id) - -// #define RETURN(label_id)\ -// label(label_id) \ -// jump_to_return_ai_list \ -// ai_list_end - - -// /*============================================================================= -// // ai command shortcuts -// //===========================================================================*/ -// #define goto_loop_start(label_id) \ -// label(label_id) \ -// ai_sleep - -// #define goto_loop_repeat(label) \ -// goto_first(label) - -// #define goto_loop_infinite(label_id) \ -// label(label_id) \ -// ai_sleep \ -// goto_first(label_id) - -// #define random_generate_greater_than(byte, label) \ -// random_generate_seed \ -// if_random_seed_greater_than(byte, label) - -// #define random_generate_less_than(byte, label) \ -// random_generate_seed \ -// if_random_seed_less_than(byte, label) - -// #define if_guard_meters_to_bond_less_than(distance, label) \ -// if_guard_distance_to_bond_less_than((distance * 10U), label) - -// #define if_guard_meters_to_bond_greater_than(distance, label) \ -// if_guard_distance_to_bond_greater_than((distance * 10U), label) - -// #define if_chr_meters_to_pad_less_than(chr_num, distance, pad, label) \ -// if_chr_distance_to_pad_less_than(chr_num, (distance * 10U), pad, label) - -// #define if_chr_meters_to_pad_greater_than(chr_num, distance, pad, label) \ -// if_chr_distance_to_pad_greater_than(chr_num, (distance * 10U), pad, label) - -// #define if_guard_meters_to_chr_less_than(distance, chr_num, label) \ -// if_guard_distance_to_chr_less_than((distance * 10U), chr_num, label) - -// #define if_guard_meters_to_chr_greater_than(distance, chr_num, label) \ -// if_guard_distance_to_chr_greater_than((distance * 10U), chr_num, label) - -// #define guard_try_setting_chr_preset_to_guard_within_meters(distance, label) \ -// guard_try_setting_chr_preset_to_guard_within_distance((distance * 10U), label) - -// #define if_bond_meters_to_pad_less_than(distance, pad, label) \ -// if_bond_distance_to_pad_less_than((distance * 10U), pad, label) - -// #define if_bond_meters_to_pad_greater_than(distance, pad, label) \ -// if_bond_distance_to_pad_greater_than((distance * 10U), pad, label) - -// #define debug_log_end \ -// '\0', - -// #define if_local_timer_seconds_less_than(seconds, label) \ -// if_local_timer_less_than((SECS_TO_TIMER60(seconds)), label) - -// #define if_local_timer_seconds_greater_than(seconds, label) \ -// if_local_timer_greater_than((SECS_TO_TIMER60(seconds)), label) - -// #define camera_transition_from_bond \ -// bond_hide_weapons \ -// ai_sleep \ -// ai_sleep \ -// ai_sleep - -// #define camera_transition_to_bond \ -// ai_sleep \ -// ai_sleep \ -// ai_sleep -/*===========================================================================*/ /*============================================================================= // ai commands macros and information diff --git a/src/bondconstants.h b/src/bondconstants.h index 8577cb6..d51e694 100644 --- a/src/bondconstants.h +++ b/src/bondconstants.h @@ -31,7 +31,7 @@ * A single list can be made into an enum and string array for debug. * Also Known as X-Macros * - * Usage: CREATE_TYPES(ENUM, ACT, ACT_TYPES) + * Usage: `CREATE_TYPES(ENUM, ACT, ACT_TYPES)` * * @param type: ENUM or STRINGS * @param prefix: Prefix to be applied to Enum, eg ACT for ACT_INIT @@ -55,7 +55,7 @@ * A single list can be made into an enum and string array for debug. * Also Known as X-Macros * - * Usage: CREATE_TYPES1(ACT, ACT_TYPES) + * Usage: `CREATE_TYPES1(ACT, ACT_TYPES)` * * @param prefix: Prefix to be applied to Enum, eg ACT for ACT_INIT * @param name: Name of list to use for Enum or String Array @@ -77,11 +77,12 @@ typedef enum prefix #define CREATE_STRINGS1(prefix, name) IF_VA(DEFINED(DEBUG))(IF_ELSE(prefix) \ (#prefix "_" #name)(#name)COMMA()) - +#ifdef __sgi /** * Auto Generate Bitflag enums. (up to 32bit) - Unfortunatly we loose intellisense comments * @param NAME: Name of bitflag * @param a-af: bitfield names (will be appended to bitflag name for every field) + * @return Enum of bitflags */ #define BITFLAG(NAME,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,aa,ab,ac,ad,ae,af)\ typedef enum NAME \ @@ -120,13 +121,15 @@ typedef enum NAME \ */IF(NOT(IS_EMPTY(ae)))(NAME ## _ ## ae = 1 << 30) EVAL1(COMMA_IF_I(NOT(IS_EMPTY(af))))/*\ */IF(NOT(IS_EMPTY(af)))(NAME ## _ ## af = 1 << 31) /*\ */} NAME; - +#else +# define BITFLAG(...) +#endif #pragma endregion #pragma region Bitflags -/** +/** * Reverted to manual Enums for intellisense descriptions (comments) * Advantage of BITFLAG macro is auto-numbering but with loss of comments * if the Auto numbering sounds better or I find a way to keep comments then I can revert. @@ -135,14 +138,14 @@ typedef enum NAME \ typedef enum ATTACKTYPE { ATTACKTYPE_NONE, - ATTACKTYPE_BOND = 1 << 0, // aim/shoot at Bond - ATTACKTYPE_FORWARD = 1 << 1, // aim/shoot in front of self - ATTACKTYPE_CHR = 1 << 2, // aim/shoot at chr (ID should be given in entity_id) - ATTACKTYPE_PAD = 1 << 3, // aim/shoot at pad (ID should be given in entity_id) - ATTACKTYPE_DIRECTION = 1 << 4, // aim/shoot in compass direction (0000, 4000, 8000, c000) - ATTACKTYPE_AIMONLY = 1 << 5, // aim only - do not shoot + ATTACKTYPE_BOND = 1 << 0, // aim/shoot at Bond + ATTACKTYPE_FORWARD = 1 << 1, // aim/shoot in front of self + ATTACKTYPE_CHR = 1 << 2, // aim/shoot at chr (ID should be given in entity_id) + ATTACKTYPE_PAD = 1 << 3, // aim/shoot at pad (ID should be given in entity_id) + ATTACKTYPE_DIRECTION = 1 << 4, // aim/shoot in compass direction (0000, 4000, 8000, c000) + ATTACKTYPE_AIMONLY = 1 << 5, // aim only - do not shoot ATTACKTYPE_DONTTURN = 1 << 6, // dont do a shooting animation that would change the chrs direction - ATTACKTYPE_TARGET = 1 << 7 // aim/shoot at whatever is in the chrs `target` field + ATTACKTYPE_TARGET = 1 << 7 // aim/shoot at whatever is in the chrs `target` field }ATTACKTYPE; #if 0 BITFLAG(ATTACKTYPE, @@ -173,20 +176,22 @@ typedef enum CHRHIDDEN calculate collision. It'll keep the 0x10 flag until the guard appears on screen. */ - CHRHIDDEN_OFFSCREEN_PATROL = 0x0010, + CHRHIDDEN_OFFSCREEN_PATROL = 0x0010, CHRHIDDEN_REMOVE = 0x0020, // remove character CHRHIDDEN_TIMER_ACTIVE = 0x0040, // chr timer is active CHRHIDDEN_FIRE_TRACER = 0x0080, // spawn a tracer CHRHIDDEN_MOVING = 0x0100, // moving - CHRHIDDEN_0200 = 0x0200, // unknown + CHRHIDDEN_BACKGROUND_AI = 0x0200, // chr has an AI script currently running CHRHIDDEN_0400 = 0x0400, // unknown CHRHIDDEN_FREEZE = 0x0800, // freeze current animation state - CHRHIDDEN_1000 = 0x1000, // unknown - CHRHIDDEN_2000 = 0x2000, // unknown - CHRHIDDEN_4000 = 0x4000, // unknown - CHRHIDDEN_8000 = 0x8000 // unknown + CHRHIDDEN_RAND_FLINCH_1 = 0x1000, // unknown + CHRHIDDEN_RAND_FLINCH_2 = 0x2000, // unknown + CHRHIDDEN_RAND_FLINCH_4 = 0x4000, // unknown + CHRHIDDEN_RAND_FLINCH_8 = 0x8000 // unknown }CHRHIDDEN; +#define CHRHIDDEN_RAND_FLINCH_MASK (CHRHIDDEN_RAND_FLINCH_1 | CHRHIDDEN_RAND_FLINCH_2 | CHRHIDDEN_RAND_FLINCH_4 | CHRHIDDEN_RAND_FLINCH_8) + typedef enum CHRFLAG { CHRFLAG_NONE, @@ -199,16 +204,16 @@ typedef enum CHRFLAG CHRFLAG_CAN_SHOOT_CHRS = 0x00000040 , // can shoot other guards CHRFLAG_00000080 = 0x00000080 , // unknown CHRFLAG_WAS_DAMAGED = 0x00000100 , // chr has taken damage (not invincible) - CHRFLAG_00000200 = 0x00000200 , // unknown + CHRFLAG_00000200 = 0x00000200 , // Possibly isBGAI CHRFLAG_HIDDEN = 0x00000400 , // hidden CHRFLAG_NO_AUTOAIM = 0x00000800 , // no autoaim CHRFLAG_LOCK_Y_POS = 0x00001000 , // lock y position (no gravity, used for dam/cradle jump) CHRFLAG_NO_SHADOW = 0x00002000 , // no shadow CHRFLAG_IGNORE_ANIM_TRANSLATION = 0x00004000 , // ignore animation translation - CHRFLAG_IMPACT_ALWAYS = 0x00008000 , // Trev on cradle sets this flag so he can be shot off the platform + CHRFLAG_IMPACT_ALWAYS = 0x00008000 , // Trev on cradle sets this flag so he can be shot off the platform CHRFLAG_00010000 = 0x00010000 , // unknown CHRFLAG_00020000 = 0x00020000 , // unknown - CHRFLAG_00040000 = 0x00040000 , // unknown + CHRFLAG_00040000 = 0x00040000 , // maybe: update guard ACTION ? CHRFLAG_INCREASE_RUNNING_SPEED = 0x00080000 , // increase sprinting speed (used by trevelyan) CHRFLAG_COUNT_DEATH_AS_CIVILIAN = 0x00100000 , // count death as civilian killed CHRFLAG_WAS_HIT = 0x00200000 , // chr has been hit (even if invincible) @@ -216,7 +221,7 @@ typedef enum CHRFLAG CHRFLAG_CULL_USING_HITBOX = 0x00800000 , // cull chr using hitbox instead of tile/clipping (useful with lock y pos flag) CHRFLAG_01000000 = 0x01000000 , // unknown CHRFLAG_02000000 = 0x02000000 , // unknown - CHRFLAG_04000000 = 0x04000000 , // unknown + CHRFLAG_04000000 = 0x04000000 , // unknown NoFade CHRFLAG_08000000 = 0x08000000 , // unknown CHRFLAG_10000000 = 0x10000000 , // unknown CHRFLAG_20000000 = 0x20000000 , // unknown @@ -309,21 +314,22 @@ typedef enum PROPFLAG PROPFLAG_CANNOT_ACTIVATE = 0x02000000, // Cannot Activate Door/Object PROPFLAG_04000000 = 0x04000000, // AI Sees Through Door/Object PROPFLAG_DOOR_TWOWAY = 0x08000000, // Open Away From Player - PROPFLAG_WEAPON_LEFTHANDED = 0x10000000, /* Area Behind Door Invisible/Monitor Fixed/Left-Handed weapon/Disable security camera/drone gun*/ - PROPFLAG_CULL_BEHIND_DOOR = 0x10000000, - PROPFLAG_FIXED_MONITOR = 0x10000000, - PROPFLAG_CCTV_DISABLED = 0x10000000, - PROPFLAG_IS_DRONE_GUN = 0x10000000, - PROPFLAG_DOOR_OPENTOFRONT = 0x20000000, /* Open Backwards/Special Function/Conceal Weapon*/ - PROPFLAG_SPECIAL_FUNC = 0x20000000, - PROPFLAG_CONCEAL_GUN = 0x20000000, - PROPFLAG_MONITOR_RENDERPOSTBG = 0x40000000, /* No Ammo on pickup / Area Behind Door Visible*/ - PROPFLAG_NO_PORTAL_CLOSE = 0x40000000, - PROPFLAG_NO_AMMO = 0x40000000, + PROPFLAG_WEAPON_LEFTHANDED = 0x10000000, /* Left-Handed weapon*/ + PROPFLAG_GLASS_HASPORTAL = 0x10000000, /* Glass Has Portal*/ + PROPFLAG_CULL_BEHIND_DOOR = 0x10000000, // Area Behind Door Invisible + PROPFLAG_FIXED_MONITOR = 0x10000000, // Monitor Fixed + PROPFLAG_CCTV_DISABLED = 0x10000000, // Disable security camera + PROPFLAG_IS_DRONE_GUN = 0x10000000, // drone gun + PROPFLAG_DOOR_OPENTOFRONT = 0x20000000, /* Open Backwards*/ + PROPFLAG_SPECIAL_FUNC = 0x20000000, //Special Function + PROPFLAG_CONCEAL_GUN = 0x20000000, //Conceal Weapon + PROPFLAG_MONITOR_RENDERPOSTBG = 0x40000000, + PROPFLAG_NO_PORTAL_CLOSE = 0x40000000, // Area Behind Door Visible + PROPFLAG_NO_AMMO = 0x40000000,/* No Ammo on pickup */ PROPFLAG_80000000 = 0x80000000, // Open By Default/Weapon Paired for Player PROPFLAG_IS_DOUBLE = 0x80000000 }PROPFLAG; -// prop definition flags +// prop definition flags typedef enum PROPFLAG2 { PROPFLAG2_00000001 = 0x00000001, // Activate Drone Gun @@ -346,7 +352,7 @@ typedef enum PROPFLAG2 PROPFLAG2_00020000 = 0x00020000, // unknown PROPFLAG2_00040000 = 0x00040000, // Hide inventory item (for tagged armor/ammo/magazine) PROPFLAG2_00080000 = 0x00080000, // Invincible Except to Explosions - PROPFLAG2_00100000 = 0x00100000, // Bulletproof Glass + PROPFLAG2_00100000 = 0x00100000, // Bulletproof Glass PROPFLAG2_00200000 = 0x00200000, // Immune to Explosions PROPFLAG2_00400000 = 0x00400000, // Don't load on 2P PROPFLAG2_00800000 = 0x00800000, // Don't load on 3P @@ -362,13 +368,83 @@ typedef enum PROPFLAG2 typedef enum DOORFLAG { + DOORFLAG_0001 = 0x00000001, + DOORFLAG_WINDOWED = 0x00000002, + DOORFLAG_0004 = 0x00000004, + DOORFLAG_FLIP = 0x00000008, + DOORFLAG_AUTOMATIC = 0x00000010, + DOORFLAG_0020 = 0x00000020, + DOORFLAG_ROTATEDPAD = 0x00000040, DOORFLAG_080 = 0x00000080, DOORFLAG_100 = 0x00000100, + DOORFLAG_LONGRANGE = 0x00000200, + DOORFLAG_DAMAGEONCONTACT = 0x00000400, // Lasers + DOORFLAG_UNBLOCKABLEOPEN = 0x00000800, // Skip collision checks when opening + DOORFLAG_4000 = 0x00004000, // Two Investigation vertical doors after lasers DOORFLAG_CANNOT_ACTIVATE = 0x02000000, DOORFLAG_KEEPOPEN = 0x80000000 } DOORFLAG; +typedef enum DOORMODE +{ + DOORMODE_IDLE, + DOORMODE_OPENING, + DOORMODE_CLOSING, + // Waiting for sibling door to close. Eg. Dam gates in GE + DOORMODE_WAITING +} DOORMODE; + +typedef enum DOORSTATE +{ + DOORSTATE_STATIONARY, + DOORSTATE_OPENING,// also OPEN but NOT AIlist compatible (02) + DOORSTATE_CLOSING, // also CLOSE but NOT AIlist compatible (01) + DOORSTATE_WAITING +} DOORSTATE; + +#define DOORTYPE_SLIDING 0 +// GE only - Bunker flexi door +#define DOORTYPE_FLEXI1 1 +#define DOORTYPE_FLEXI2 2 +#define DOORTYPE_FLEXI3 3 +#define DOORTYPE_VERTICAL 4 +#define DOORTYPE_SWINGING 5 +// GE only - Caverns +#define DOORTYPE_EYE 6 +// GE only - Caverns +#define DOORTYPE_IRIS 7 +// GE only - Surface grate and Train floor panel +#define DOORTYPE_FALLAWAY 8 +// GE only +#define DOORTYPE_AZTECCHAIR 9 +// Attack Ship windows +#define DOORTYPE_HULL 10 +#define DOORTYPE_LASER 11 + +typedef enum DOOR_OPEN_SOUND +{ + DOOR_OPEN_SOUND_NONE = 0, + DOOR_OPEN_SOUND_01, + DOOR_OPEN_SOUND_02, + DOOR_OPEN_SOUND_METAL, + DOOR_OPEN_SOUND_04, + DOOR_OPEN_SOUND_WOOD, + DOOR_OPEN_SOUND_06, + DOOR_OPEN_SOUND_WOOD_2, + DOOR_OPEN_SOUND_WOOD_3, + DOOR_OPEN_SOUND_09, + DOOR_OPEN_SOUND_METAL_2, + DOOR_OPEN_SOUND_11, + DOOR_OPEN_SOUND_METAL_3, + DOOR_OPEN_SOUND_13, + DOOR_OPEN_SOUND_HYDROLIC, + DOOR_OPEN_SOUND_STONE, + DOOR_OPEN_SOUND_16, + DOOR_OPEN_SOUND_METAL_4, + DOOR_OPEN_SOUND_18 +} DOOR_OPEN_SOUND; + typedef enum DROPTYPE { DROPTYPE_DEFAULT = 1, @@ -412,16 +488,19 @@ BITFLAG(DOOR_LOCK, 7 ) -BITFLAG(PROPSTATE, - DAMAGED, - 02, - RESPAWN, - EXT_COLISION_BLOCK, - 10, - 20, - ACTIVATED, - DESTROYED -) +/** PropDefHeaderRecord->state only u8 */ +typedef enum PROPSTATE { + PROPSTATE_NONE = 0x00, + PROPSTATE_DAMAGED = 0x01, + PROPSTATE_2 = 0x02, // maybe "double damaged" + PROPSTATE_RESPAWN = 0x04, + PROPSTATE_EXT_COLISION_BLOCK = 0x08, + PROPSTATE_10 = 0x10, + PROPSTATE_20 = 0x20, + PROPSTATE_ACTIVATED = 0x40, + PROPSTATE_DESTROYED = 0x80 +} PROPSTATE; + #define PROPSTATE_NORMAL PROPSTATE_NONE BITFLAG(PLAYERFLAG, @@ -429,13 +508,13 @@ BITFLAG(PLAYERFLAG, NOCONTROL, NOTIMER ) - +//PropDef bitflag canonically PROPHID_ BITFLAG(RUNTIMEBITFLAG, 00000001, 00000002, REMOVE, /* removes object when set */ ISRETICK, - 00000010, + TAGGED, THROWING_KNIFE_RELATED, EMBEDDED, DEPOSIT, /* depositted (thrown/launching) */ @@ -467,6 +546,7 @@ BITFLAG(RUNTIMEBITFLAG, #define RUNTIMEBITFLAG_OWNER 0x60000 #define RUNTIMEBITSHIFT_OWNER 0x11 +#define RUNTIMEBITFLAG_00000001 0x1 BITFLAG(WEAPONSTATBITFLAG, 00000001, @@ -549,6 +629,7 @@ BITFLAG(WEAPONSTATBITFLAG, #define QUADRANT_2NDWPTOTARGET 0x10 // second waypoint on route to target #define QUADRANT_20 0x20 // second waypoint on route to target +#define CULLMODE_BOTH 0 #define CULLMODE_NONE 1 #define CULLMODE_FRONT 2 #define CULLMODE_BACK 3 @@ -594,13 +675,18 @@ typedef enum AI_CMD #ifndef _SYNHILITE // makes enum list -# define _AI_CMD(C) CAT(AI_, CMDNAME), +# ifdef __sgi +# define _AI_CMD(C) CAT(AI_, CMDNAME), +# define _AI_DEBUG(C) CAT(AI_, CMDNAME), +# define _AI_CMD_POLYMORPH(CMD, A, P, Q, D) +# define DEFINE(x) +# else +# define _AI_CMD(...) CAT(AI_, CMDNAME), +# define _AI_DEBUG(...) CAT(AI_, CMDNAME), +# define _AI_CMD_POLYMORPH(...) +# define DEFINE(...) +# endif -# define _AI_DEBUG(C) CAT(AI_, CMDNAME), - -# define _AI_CMD_POLYMORPH(CMD, A, P, Q, D) - -# define DEFINE(x) # include "aicommands.def" #endif /* !_SYNHILITE */ @@ -608,6 +694,10 @@ typedef enum AI_CMD AI_CMD_COUNT } AI_CMD; +// Number of bytes for AI cmds, GE 1, PD 2 +#define AICMDSIZE ((u8)(AI_CMD_COUNT / 255) + 1) + + /* Motion capture actor: Duncan Botwood * Motion capture assistance: B Jones * Recorded using 'flock of birds' system by Ascension Technology Corporation, @@ -823,7 +913,7 @@ typedef enum CHEAT_IDS CHEAT_INVINCIBILITY, CHEAT_ALLGUNS, CHEAT_MAXAMMO, - CHEAT_DEBUG_RETURN_SAVED_RA, /* unverified */ + CHEAT_DEBUG_UNK5, /* unverified */ CHEAT_DEACTIVATE_INVINCIBILITY, CHEAT_LINEMODE, CHEAT_2X_HEALTH, @@ -840,7 +930,7 @@ typedef enum CHEAT_IDS CHEAT_GOLDEN_GUN, CHEAT_SILVER_PP7, CHEAT_GOLD_PP7, - CHEAT_INVISIBILITY_MP, /* unverified */ + CHEAT_BONDPHASE, CHEAT_NO_RADAR_MP, CHEAT_TURBO_MODE, CHEAT_DEBUG_POS, @@ -928,7 +1018,7 @@ typedef enum CONTROLLER_CONFIG /* 2.4 */ CONTROLLER_CONFIG_GOODHEAD, - + CONTROLLER_CONFIG_CINEMA } CONTROLLER_CONFIG; @@ -1145,7 +1235,7 @@ typedef enum E_EXPLOSIONTYPE E_EXPLOSIONTYPE_COUNT } E_EXPLOSIONTYPE; -/* index into array_explosion_types. +/* index into g_ExplosionTypes. * Is this the same as E_EXPLOSIONTYPE ? * Some names are based on logic in chrobjWeaponTick method. */ @@ -1187,7 +1277,8 @@ typedef enum GAMEMODE typedef enum GUNHAND //Canonical name { GUNRIGHT, - GUNLEFT + GUNLEFT, + GUNHANDS } GUNHAND; @@ -1208,9 +1299,24 @@ typedef enum HIT_TYPE HIT_CHR, HIT_GLASS_XLU, HIT_TYPE_COUNT -} HIT_TYPE; +}HIT_TYPE; +#ifdef DEBUG + char *HIT_TYPE_ToString[] = { + "HIT_DEFAULT", + "HIT_STONE", + "HIT_WOOD", + "HIT_METAL", + "HIT_GLASS", + "HIT_WATER", + "HIT_SNOW", + "HIT_DIRT", + "HIT_MUD", + "HIT_TILE", + "HIT_METALOBJ", + "HIT_CHR", + "HIT_GLASS_XLU"}; +#endif - #define IMAGE(NAME, SZ, HS, HT, F3, F4, F5, F6) IMAGE_ ## NAME, typedef enum IMAGEIDS { @@ -1446,6 +1552,14 @@ typedef enum MODELNODE_CHILD MODELNODE_CHILD_MAX } MODELNODE_CHILD; +typedef enum BOND +{ + BOND_BROSNAN, + BOND_CONNERY, + BOND_DALTON, + BOND_MOORE +} BOND; + typedef enum MP_STAGE_SELECTED { MP_STAGE_RANDOM, @@ -1636,8 +1750,31 @@ typedef enum PLAYER_ID PLAYER_4 } PLAYER_ID; +#define SAVESLOT1 0x0 +#define SAVESLOT2 0x1 +#define SAVESLOT3 0x2 +#define SAVESLOT4 0x3 +#define SAVESLOTRAMROM 0x5 +#define SAVESLOTMAX 0x6 + +#define SAVEFLAG_FOLDER 0x7 +#define SAVEFLAG_SLOT 0x18 +#define SAVEFLAG_BOND 0x60 +#define SAVEFLAG_DORESET 0x80 + +#define SAVEFLAGS_SET(folder, slot, bond, reset) (((folder << 5) & 0xE0) | ((slot * 8) & 0x18) | ((bond << 1) & 0x6) | (reset & 1 ? SAVEFLAG_DORESET : 0)) + +#define BLANKSAVEDATA {0, 0, SAVEFLAGS_SET(0,0,BOND_BROSNAN,1), 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + #define MAX_PLAYER_COUNT 4 + +#define FOLDER_INVALID -1 +#define FOLDER1 0x0 +#define FOLDER2 0x1 +#define FOLDER3 0x2 +#define FOLDER4 0x3 #define MAX_FOLDER_COUNT 4 +#define RAMROM_FOLDERNUM 0x64 typedef enum RGBA_ENUM { @@ -1652,11 +1789,11 @@ typedef enum SFX_ID { NOTHING_SFX, ROCKET_LAUNCH_SFX, - GLASS_SHATTERING_SFX, + GLASS_SHATTERING_SFX, KNIFE_HIT_WALL_SFX, GRENADE_THROW_SFX, //Grenade/Mine or in fact Any object thrown. - GRENADE_THROW_QUIET_SFX, - GRENADE_THROW_FAINT_SFX, + GRENADE_THROW_QUIET_SFX, + GRENADE_THROW_FAINT_SFX, TRAIN_SLIDE_DOOR_SLIDE_SFX, //Ding used on elevator TRAIN_RAILS_SFX, TRAIN_RAILS2_SFX, @@ -1666,8 +1803,8 @@ typedef enum SFX_ID GET_HIT_GIRL1_SFX, GET_HIT_GIRL2_SFX, GET_HIT_GIRL3_SFX, - BEEP_SFX, - BEEP_QUIET_SFX, + BEEP_SFX, + BEEP_QUIET_SFX, OPTION_CLICK2_SFX, RICO_12_GBU_A_SFX, RICO_12_GBU_B_SFX, @@ -1694,7 +1831,7 @@ typedef enum SFX_ID RICO_6_HBBA_C_SFX, RICO_6_HBBA_D_SFX, OPTION_CHOOSE_SFX, - UNKNOWN1_SFX, + UNKNOWN1_SFX, DROP_GUN_SFX, GUN_SILPPK_A_SFX, PUNCH1_SFX, @@ -1702,12 +1839,12 @@ typedef enum SFX_ID PUNCH3_SFX, GUN_RIFLECOCK_SFX, TRAIN_CLUTTER3_SFX, - TRAIN_CLUTTER3B_SFX, - TRAIN_CLUTTER3C_SFX, + TRAIN_CLUTTER3B_SFX, + TRAIN_CLUTTER3C_SFX, EVIL_LAUGH_SFX, - EVIL_LAUGH_QUIET_SFX, - EVIL_LAUGH_FAINT_SFX, - EVIL_LAUGH_HUSH_SFX, + EVIL_LAUGH_QUIET_SFX, + EVIL_LAUGH_FAINT_SFX, + EVIL_LAUGH_HUSH_SFX, HELI_RUN_SFX, HELI_FLY_SFX, ENGINE_ROOM_SFX, @@ -1717,7 +1854,7 @@ typedef enum SFX_ID TRAIN_GO_SFX, TRUCK_RUN_SFX, TRUCK_START_SFX, - TRUCK_ENGINE_SFX, + TRUCK_ENGINE_SFX, BOND_GET_HIT1_SFX, HIT_BULLET_FLESH_SFX, HIT_BULLET_GLASS_SFX, @@ -1728,7 +1865,7 @@ typedef enum SFX_ID HIT_BULLET_WOOD_SFX, HIT_BULLET_WATER_SFX, PAPER_TURN_SFX, - PAPER_TURN_2_SFX, + PAPER_TURN_2_SFX, COPY_FILE_SFX, RADIO_MESSAGE_SFX, ARMOUR_COLLECT_SFX, @@ -1736,25 +1873,25 @@ typedef enum SFX_ID DOOR_DECODER_SFX, GIRL_GET_HIT1_SFX, CONSOLE_OFF_SFX, - CONSOLE_OFF2_SFX, - CONSOLE_ON2_SFX, - CONSOLE_ON3_SFX, + CONSOLE_OFF2_SFX, + CONSOLE_ON2_SFX, + CONSOLE_ON3_SFX, EMPTY_GUN_FIRE_SFX, - SHELL_CASE_SFX, + SHELL_CASE_SFX, RICO_LASER1_SFX, RICO_LASER2_SFX, RICO_LASER3_SFX, - RADIO_SFX, + RADIO_SFX, KNIFE_THROW1_SFX, KNIFE_THROW2_SFX, KNIFE_THROW3_SFX, COUGH_SFX, - COUGH2_SFX, + COUGH2_SFX, GUN_TASER_SFX, - GUN_TASER_LOOP_SFX, + GUN_TASER_LOOP_SFX, GAS_HISS_SFX, - UNKNOWN2_SFX, - UNKNOWN3_SFX, + UNKNOWN2_SFX, + UNKNOWN3_SFX, PUNCHING_AIR_SFX, GUN_B1_MGUN3_3_SFX, //Used for Skorpion (Klobb) GUN_B2_HEAVY_SFX, //Used for PPK @@ -1764,12 +1901,12 @@ typedef enum SFX_ID GUN_RIFLE7BIG_1_SFX, //used for Rugar GUN_B8_ANOTHER_SFX, //used for TT33 GUN_B9_CANNON_SFX, //used for M16 - GUN_GRENADE_LAUNCHER_SFX, - GUN_UNKNOWN2_SFX, + GUN_GRENADE_LAUNCHER_SFX, + GUN_UNKNOWN2_SFX, GUN_B12_FULLAMRIFLE_SFX, //used for Auto Shotgun GUN_B13_M60AMMGUN_SFX, //used for Golden Gun GUN_M60AMMGUN_3_SFX, - GUN_UNKNOWN3_SFX, + GUN_UNKNOWN3_SFX, HIT_METAL_OBJECT1_SFX, GUN_B17_RIFLE_SFX, //used for Shotgun CART_SPENT_SFX, @@ -1810,7 +1947,7 @@ typedef enum SFX_ID GET_HIT_MALE23_SFX, GET_HIT_MALE24_SFX, CAMERA_BEEP1_SFX, //Used for Watch Beeping - BING_SFX, + BING_SFX, ALARM1_SFX, ALARM2_SFX, ALARM3_SFX, @@ -1819,18 +1956,18 @@ typedef enum SFX_ID RICO_EAR_WHISTLE3_SFX, RICO_EAR_WHISTLE4_SFX, RICO_EAR_WHISTLE5_SFX, - EXPLOSION_2A_SFX, + EXPLOSION_2A_SFX, EXPLOSION_2B_SFX, - EXPLOSION_3_SFX, + EXPLOSION_3_SFX, EXPLOSION_4A_SFX, EXPLOSION_4B_SFX, EXPLOSION_5A_SFX, - EXPLOSION_5B_SFX, - EXPLOSION_5C_SFX, - EXPLOSION_6_SFX, - EXPLOSION_7_SFX, - EXPLOSION_8_SFX, - EXPLOSION_9_SFX, + EXPLOSION_5B_SFX, + EXPLOSION_5C_SFX, + EXPLOSION_6_SFX, + EXPLOSION_7_SFX, + EXPLOSION_8_SFX, + EXPLOSION_9_SFX, EXPLOSION_1B_SFX, EXPLOSION_1C_SFX, CRUSHED_YELL_SFX, @@ -1840,10 +1977,10 @@ typedef enum SFX_ID DOOR_WOOD_CLOSE_SFX, DOOR_WOOD_OPEN_SFX, ATOMIC_BOMB_SFX, - KEY_ANALYSER2_SFX, + KEY_ANALYSER2_SFX, DOOR_WOOD_SLIDE_SFX, TRAIN_SLIDE_DOOR_CATCH_SFX, - GAS_LEAK_SFX, + GAS_LEAK_SFX, DOOR_SHUTTER_OPEN_SFX, DOOR_SHUTTER_CLOSE_SFX, DOOR_METAL_OPEN_SFX, @@ -1855,9 +1992,9 @@ typedef enum SFX_ID METAL_SLIDE_OPEN_SFX, METAL_SLIDE_CLOSE_SFX, METAL_SLIDE_LOOP_SFX, - UNKNOWN4_SFX, - UNKNOWN5_SFX, - UNKNOWN6_SFX, + UNKNOWN4_SFX, + UNKNOWN5_SFX, + UNKNOWN6_SFX, HIT_BULLET_STONE1_SFX, HIT_BULLET_STONE2_SFX, DOOR_SMART_CATCH1_SFX, @@ -1890,7 +2027,7 @@ typedef enum SFX_ID WATCH_ON_SFX, WATCH_OFF_SFX, HIT_BULLET_METAL_A3_SFX, - HIT_BULLET_METAL_A4_SFX, + HIT_BULLET_METAL_A4_SFX, ATTACH_MINE_SFX, PICKUP_LASER_SFX, WATCH_DETONATE_MINE_SFX, //Watch Trigger @@ -1900,17 +2037,17 @@ typedef enum SFX_ID BOMB_DEFUSE_SFX, BI_PLANE_SFX, TRAIN_CLUTTER_SFX, - TRAIN_CLUTTERB_SFX, - TRAIN_CLUTTERC_SFX, - TRAIN_CLUTTERD_SFX, + TRAIN_CLUTTERB_SFX, + TRAIN_CLUTTERC_SFX, + TRAIN_CLUTTERD_SFX, GUN_B9_CANNON_SHORT_SFX, - UNKNOWN_QUIET_SFX, - CAMERA_ZOOM_LOOP_SFX, - CAMERA_ZOOM_STOP_SFX, + UNKNOWN_QUIET_SFX, + CAMERA_ZOOM_LOOP_SFX, + CAMERA_ZOOM_STOP_SFX, SNEEZE_SFX, RARELOGO_SFX, - RARELOGO_QUIET_SFX, - RARELOGO_FAINT_SFX, + RARELOGO_QUIET_SFX, + RARELOGO_FAINT_SFX, BIG_CLANK_SFX } SFX_ID; @@ -2297,7 +2434,7 @@ typedef enum AWARD { AWARD_MOSTSUICIDAL = 0x00001, AWARD_WHONEEDSAMMO = 0x00002, - AWARD_WHERESTHEARMOR = 0x00004, + AWARD_WHERESTHEARMOUR = 0x00004, AWARD_ACNEGATIVE10 = 0x00008, AWARD_MARKSMANSHIP = 0x00010, AWARD_MOSTPROFESSIONAL = 0x00020, @@ -2360,6 +2497,20 @@ typedef enum TVCMD TVCMD_ROTATEREL = 0x0f } TVCMD; +enum CCRMLUT +{ + CCRMLUT_UNKNOWN, + CCRMLUT_PRIMARY_ADDFOG, + CCRMLUT_BILLBOARD, + CCRMLUT_WATER, + CCRMLUT_CLOUD, + CCRMLUT_SECONDARY_ADDFOG, + CCRMLUT_PRIMARY, + CCRMLUT_SECONDARY, + CCRMLUT_WALLETBOND, + CCRMLUT_FIXFOGALPHA3 +}; + #pragma region Object Instance Stuff typedef enum BODIES { @@ -2369,11 +2520,11 @@ typedef enum TVCMD BODY_Russian_Infantry, BODY_Janus_Special_Forces, BODY_Brosnan_Tuxedo, - /* + #ifdef ALL_BONDS BODY_Connery_Tuxedo, BODY_Dalton_Tuxedo, BODY_Moore_Tuxedo, - */ + #endif BODY_Boris, BODY_Ourumov, BODY_Trevelyan_Janus, @@ -2498,11 +2649,11 @@ typedef enum TVCMD HEAD_Male_Brosnan_Jungle, HEAD_Male_Brosnan_Parka, HEAD_Male_Brosnan_Tuxedo, - /* + #ifdef ALL_BONDS HEAD_Male_Connery_Tuxedo, HEAD_Male_Dalton_Tuxedo, HEAD_Male_Moore_Tuxedo, - */ + #endif HEAD_Natalya_Jungle_Fatigues, HEAD_END, /*The following are some maybe helpfull counts (maybe GE doesnt need them, but thought Id ad while here)*/ @@ -2857,7 +3008,12 @@ typedef enum TVCMD PROP_MAX } PROP; - typedef enum PROJECTILES + #define MAX_MULTI_PROP_IDS 600 + #define MAX_DROPPED_PROP_IDS 1000 +#define DROPPED_PROP_ID_NUMBIT 0x1fff +#define GUNTYPE_NUMBITS 127 + +typedef enum PROJECTILES { PROJECTILES_MAX = 0x2E, PROJECTILES_TYPE_KNIFE = PROP_CHRKNIFE, @@ -2890,11 +3046,24 @@ typedef enum TVCMD PROP_TYPE_MAX } PROP_TYPE; +#ifdef DEBUG + char *PROP_TYPE_ToString[] = { + "PROP_TYPE_NUL", + "PROP_TYPE_OBJ", + "PROP_TYPE_DOOR", + "PROP_TYPE_CHR", + "PROP_TYPE_WEAPON", + "PROP_TYPE_PLAYER", + "PROP_TYPE_VIEWER", + "PROP_TYPE_EXPLOSION", + "PROP_TYPE_SMOKE" }; + #endif + #pragma endregion #pragma region PropDef stuff // used by characters - + /*Action Type to be performed by chr (canonical names)*/ typedef enum ACT_STATUS { @@ -2934,7 +3103,43 @@ typedef enum TVCMD ACT_STATUS_UNARMEDATTACK, ACT_STATUS_MAX } ACT_STATUS; - + #ifdef DEBUG + char *ACT_STATUS_ToString[] = { + "NONE", + "NORMAL", + "COVERWAIT", + "GRENADEWAIT", + "WAITING", + "COVERGOTO", + "COVERBREAK", + "COVERSEEN", + "FLANKLEFT", + "FLANKRIGHT", + "DODGE", + "GRENADE", + "WAITSEEN", + "WITHDRAW", + "SHOOTING", + "SYNCSHOOT", + "WAITTIMEOUT", + "COVERTIMEOUT", + "TRACKING", + "RETREAT", + "SURRENDER", + "TALKING", + "LISTENING", + "GOTOALARM", + "BOTFRIENDFOLLOW", + "BOTHIDE", + "BOTPATH", + "BOTINJURED", + "BOTNORMAL", + "BOTSHOOTING", + "DRUGGED", + "PANIC", + "RUNFROMGRENADE", + "UNARMEDATTACK"}; + #endif /*Action Type to be performed by chr (canonical names)*/ typedef enum ACT_TYPE { @@ -2948,7 +3153,7 @@ typedef enum TVCMD ACT_PREARGH, ACT_ATTACK, ACT_ATTACKWALK, - ACT_ATTACKROLL, + ACT_ATTACKROLL, // 10 ACT_SIDESTEP, ACT_JUMPOUT, ACT_RUNPOS, @@ -2958,7 +3163,7 @@ typedef enum TVCMD ACT_LOOKATTARGET, ACT_SURPRISED, ACT_STARTALARM, - ACT_THROWGRENADE, + ACT_THROWGRENADE, // 20 ACT_TURNDIR, ACT_TEST, ACT_BONDINTRO, @@ -2973,12 +3178,43 @@ typedef enum TVCMD ACT_DRUGGEDCOMINGUP ACT_ATTACKAMOUNT ACT_ROBOTATTACK - ACT_SKJUMP* + ACT_SKJUMP* */ ACT_NULL, ACT_TYPE_MAX } ACT_TYPE; + #ifdef DEBUG + char *ACT_TYPE_ToString[] = { + "ACT_INIT", + "ACT_STAND", + "ACT_KNEEL", + "ACT_ANIM", + "ACT_DIE", + "ACT_DEAD", + "ACT_ARGH", + "ACT_PREARGH", + "ACT_ATTACK", + "ACT_ATTACKWALK", + "ACT_ATTACKROLL", // 10 + "ACT_SIDESTEP", + "ACT_JUMPOUT", + "ACT_RUNPOS", + "ACT_PATROL", + "ACT_GOPOS", + "ACT_SURRENDER", + "ACT_LOOKATTARGET", + "ACT_SURPRISED", + "ACT_STARTALARM", + "ACT_THROWGRENADE", // 20 + "ACT_TURNDIR", + "ACT_TEST", + "ACT_BONDINTRO", + "ACT_BONDDIE", + "ACT_BONDMULTI", + "ACT_NULL"}; + #endif + typedef enum AMMOTYPE { @@ -3017,13 +3253,6 @@ typedef enum TVCMD AMMOTYPE_MAX } AMMOTYPE; - typedef enum DOORSTATE - { - DOORSTATE_STATIONARY, - DOORSTATE_OPENING,// also OPEN but NOT AIlist compatible (02) - DOORSTATE_CLOSING, // also CLOSE but NOT AIlist compatible (01) - DOORSTATE_WAITING - } DOORSTATE; typedef enum HATTYPE { HATTYPE_OTHER = -1, @@ -3154,7 +3383,7 @@ typedef enum TVCMD PROPDEF_RACK, PROPDEF_AUTOGUN, PROPDEF_LINK, - PROPDEF_UNK15, + PROPDEF_DEBRIS, PROPDEF_UNK16, PROPDEF_HAT, PROPDEF_GUARD_ATTRIBUTE, @@ -3194,12 +3423,12 @@ typedef enum TVCMD #pragma endregion -#pragma region Setup +#pragma region Setup /** * enums were listed in a particular order, it appears the first few are associated with the start/intro * of a level: - * if (g_CurrentPlayer->redbloodfinished && g_CurrentPlayer->deathanimfinished && (D_80036510 >= CAMERAMODE_SWIRL)) + * if (g_CurrentPlayer->redbloodfinished && g_CurrentPlayer->deathanimfinished && (camera_mode >= CAMERAMODE_SWIRL)) */ typedef enum CAMERAMODE { @@ -3208,12 +3437,12 @@ typedef enum TVCMD CAMERAMODE_FADESWIRL, CAMERAMODE_SWIRL, CAMERAMODE_FP, - CAMERAMODE_DEATH_CAM_FIRST, - CAMERAMODE_DEATH_CAM_SECOND, + CAMERAMODE_DEATH_CAM_SP, + CAMERAMODE_DEATH_CAM_MP, CAMERAMODE_POSEND, CAMERAMODE_FP_NOINPUT, CAMERAMODE_MP, - CAMERAMODE_UNK10, + CAMERAMODE_FADE_TO_TITLE, CAMERAMODE_COUNT } CAMERAMODE; @@ -3284,11 +3513,17 @@ typedef enum TVCMD SCREEN_RATIO_16_9 } SCREEN_RATIO_OPTION; + //canonically MD typedef enum VIDEOMODE { - VIDEOMODE_DISABLE_320x240, - VIDEOMODE_320x240, - VIDEOMODE_640x480 + MD_BLACK, + MD_NORMAL, + MD_MAXIMUM, + + //just in case someone commits with old name + VIDEOMODE_DISABLE_320x240 = MD_BLACK, + VIDEOMODE_320x240 = MD_NORMAL, + VIDEOMODE_640x480 = MD_MAXIMUM } VIDEOMODE; #pragma endregion @@ -3296,7 +3531,7 @@ typedef enum TVCMD #define MAXROOMCOUNT 150 #else #define MAXROOMCOUNT 139 -#endif +#endif /* special chr num IDs */ @@ -3379,23 +3614,23 @@ typedef enum TVCMD #define getBoundPadNum(pad) pad - 10000 #define setBoundPadNum(pad) pad + 10000 /* AI Catagory */ -#define isGlobalAIListID(ID) ((ID) < 1025) -#define isBGAIListID(ID) ((ID) > 4097) +#define isGlobalAIListID(ID) ((ID) <= 1024) +#define isBGAIListID(ID) ((ID) >= 4096) #define isChrAIListID(ID) (!isGlobalAIListID(ID) && !isBGAIListID(ID)) #define setGlobalAIListID(ID) ((ID) + 0) #define setChrAIListID(ID) ((ID) + 1025) #define setBGAIListID(ID) ((ID) + 4096) -#define getGlobalAIListID(ID) ((ID)-0) -#define getChrAIListID(ID) ((ID)-1025) -#define getBGAIListID(ID) ((ID)-4096) +#define getGlobalAIListID(ID) ((ID) - 0) +#define getChrAIListID(ID) ((ID) - 1025) +#define getBGAIListID(ID) ((ID) - 4096) /* language file to slot allocation */ -#define TEXT(TEXTBANK, TEXTSLOT) ((TEXTBANK * 0x0400U) + TEXTSLOT) +#define getStringID(TEXTBANK, TEXTSLOT) ((TEXTBANK * 0x0400U) + TEXTSLOT) /* Image ID to RAM allocation */ #define IMAGESEG(id) 0xABCD0000 | id -/*Doesnt work! might be handy for something else +/*Doesnt work! might be handy for something else #define setMask(t)\ (t) <= 2 ? 1\ : (t) <= 4 ? 2\ @@ -3408,7 +3643,7 @@ typedef enum TVCMD : (t) <= 512 ? 9\ : (t) <=1024 ? 10\ : "TEXTURE TOO BIG (>1024)"*/ - + //macros for FILERECORDS #define SKELETON(NAME) skeleton_ ## NAME #define JOINTLIST(NAME) jointlist_ ## NAME diff --git a/src/bondgame.h b/src/bondgame.h index 4e76587..e7dacc8 100644 --- a/src/bondgame.h +++ b/src/bondgame.h @@ -5,6 +5,8 @@ #include // game constants #include // game structs and types +extern u32 *_bssSegmentEnd; + extern u32 *_codeSegmentStart; extern u32 *_codeSegmentEnd; extern u32 *_codeSegmentRomStart; @@ -25,6 +27,10 @@ extern u32 *_gameSegmentVaddrEnd; extern u32 *_gameSegmentRomStart; extern u32 *_gameSegmentRomEnd; +extern u32* _animation_dataSegmentRomStart; +extern u32* _animation_dataSegmentStart; +extern u32* _animation_dataSegmentEnd; + extern u32* _alt_startSegmentRomStart; extern u32* _alt_startSegmentStart; diff --git a/src/bondtypes.h b/src/bondtypes.h index c221516..2c39f79 100644 --- a/src/bondtypes.h +++ b/src/bondtypes.h @@ -10,7 +10,7 @@ * Sometimes its nice to be verbose and see the structures instead of * random arrays or conglomerate integers. * - * + * * While typedefs are used to avoid typing "struct" and to help intellisence * they are not foolproof. * Using structs before they are declaired need to have the struct keyword or @@ -19,7 +19,7 @@ * Structs that "inherit" other structs can use the syntax * struct A {int adef}; * struct B {inherits A; int extra}; - * + * * using adef from B is as simple as calling B->adef, no need for sub-structs anymore */ #ifndef _BONDTYPES_H_ @@ -31,9 +31,9 @@ /** * Syntax Sugar for clarification of intent - * Inheritance allows child structs to directly use parent elements - * without sub-struct style calls - * obj->type and wep->base.type becomes simply + * Inheritance allows child structs to directly use parent elements + * without sub-struct style calls + * obj->type and wep->base.type becomes simply * obj->type and wep->type (wep inherits obj) * Usage: * Define the first entry to the inheriting struct as "inherits xxx" @@ -58,7 +58,7 @@ struct WeaponObjRecordExtended; union ModelRoData; /** - * The following region deals with various AI structures that can be applied to + * The following region deals with various AI structures that can be applied to * the AI bytestream */ #pragma region AI @@ -124,7 +124,7 @@ typedef union u8 a; }; u8 rgba[4]; - s32 word; + u32 word; //added to match }; } rgba_u8; @@ -185,7 +185,7 @@ typedef union }; } rgba_s32; - #pragma endregion + #pragma endregion #pragma region coordinates /** @@ -379,9 +379,11 @@ typedef union typedef struct StandTilePoint { inherits coord16; //points for tile - u16 link; //link to nother tile + u16 link; //link to another tile } StandTilePoint; - + /* + unused struct for clarity of intent + */ typedef struct StandTileHeaderMid { u16 special : 4;// 0=normal 1=kneeling 3=ladder @@ -405,7 +407,7 @@ typedef union u16 GroupID : 4; // a1,a2,a3...z5,z6,z7 u16 RoomID : 4; // compared to 0xFF, not -1 in a function. Seen LBUs. */ - u32 name1 : 24; + u32 id : 24; u8 room; // compared to 0xFF, not -1 in a function. Seen LBUs. @@ -438,7 +440,7 @@ typedef union typedef struct StandFileTile { - u32 name1 : 24; + u32 id : 24; //u8 name2; u8 room; // compared to 0xFF, not -1 in a function. Seen LBUs. union @@ -520,15 +522,13 @@ typedef union typedef struct BetaStandTile { - const char *debugName; + const char *id; StandTileHeaderMid headerMid; u16 betaUnknown; BetaStandTileHeaderTail hdrTail; struct BetaStandFilePoint points[]; } BetaStandTile; - StandTilePoint *stanMatchTileName(char *); - #pragma endregion //Animation controller located in initobjects.h @@ -542,17 +542,30 @@ typedef union // unknown struct, unknown size. typedef struct ModelAnimation { - s32 unk00; - u16 unk04; + s32 address; + u16 unk04; //nextframe u16 unk06; u16 unk08; u16 unk0A; u16 unk0C; u16 unk0E; + int unk10; + int unk14; + int unk18; + int unk1c; + int unk20; + int unk24; + int unk28; + int unk2c; + int unk30; + int unk34; + int unk38; + int unk3c; //endframe + // ... } ModelAnimation; - + struct object_animation_controller { void *ptranimation; // 0x00 @@ -668,27 +681,31 @@ typedef union /** * Taken from PD, unsure that all of the fields line up */ - typedef struct ModelRenderData { - /*0x00*/ Mtxf *unk00; - /*0x04*/ bool zbufferenabled; - /*0x08*/ u32 flags; - /*0x0c*/ Gfx *gdl; - /*0x10*/ Mtxf *unk10; - /*0x14*/ u32 unk14; - /*0x18*/ u32 unk18; - /*0x1c*/ u32 unk1c; - /*0x20*/ u32 unk20; - /*0x24*/ u32 unk24; - /*0x28*/ u32 unk28; - /*0x2c*/ u32 unk2c; - /*0x30*/ s32 unk30; - /*0x34*/ u32 envcolour; - /*0x38*/ u32 fogcolour; - /*0x3c*/ u32 cullmode; + typedef struct ModelRenderData + { + Mtxf *unk_matrix; /*0x00 */ + bool zbufferenabled; /*0x04*/ + u32 flags; /*0x08*/ + Gfx *gdl; /*0x0c*/ + + Mtxf *mtxlist; /*0x10 */ + u32 unk14; /*0x14*/ + u32 unk18; /*0x18*/ + u32 unk1c; /*0x1c*/ + + u32 unk20; /*0x20*/ + u32 unk24; /*0x24*/ + u32 unk28; /*0x28*/ + u32 unk2c; /*0x2c*/ + + s32 PropType; /*0x30*/ + rgba_u8 envcolour; /*0x34*/ + rgba_u8 fogcolour; /*0x38*/ + u32 cullmode; /*0x3c*/ } ModelRenderData; /** - * Binary compatible with gbi Vtx but more verbose and with "collision" + * Binary compatible with gbi Vtx but more verbose and with "collision" * information in place of "flags" for use in Openflight Records below */ typedef struct Vertex @@ -1245,6 +1262,12 @@ typedef union Gfx *gdl; } ModelRwData_DisplayList_CollisionRecord; + // placeholder struct when need to access offset but don't know type. + struct ModelRwData_Raw + { + s32 unk00; + }; + #pragma endregion Model Node OpCode Definitions /* @@ -1289,6 +1312,7 @@ typedef union struct ModelRwData_SwitchRecord Switch; struct ModelRwData_HeadPlaceholderRecord HeadPlaceholder; struct ModelRwData_DisplayList_CollisionRecord DisplayListCollisions; + struct ModelRwData_Raw Raw; }; @@ -1416,12 +1440,12 @@ typedef union }; /** - * I beleve that "datas" is actually " struct modeldata_root" and that + * I beleve that "datas" is actually " struct modeldata_root" and that * unk1c is the model node data array */ typedef struct Model { - u8 unk00; /*0x00*/ // objInit() indicates that unk00 is a s16... + s16 unk00; /*0x00*/ // objInit() indicates that unk00 is a s16... s16 Type; /*0x01*/ // but modelInit() indicates that Type is a s16... // not sure which is correct. @@ -1591,13 +1615,13 @@ typedef union /** //##Paths Paths are formed by connecting several pads together in 3 tables. - The first table is the waypoint node table which lists the pad used, and + The first table is the waypoint node table which lists the pad used, and the subset group the waypoint belongs to. - - Next is the waygroup table which lists the IDs of the waypoints that + + Next is the waygroup table which lists the IDs of the waypoints that belong to each group. waypoints are grouped into subsets to reduce calculations on large numbers of nodes. - + Finally is the Path table which again lists all the waypoints used in the path and gives the path an ID. Paths do not contribute to pathfinding. @@ -1606,7 +1630,7 @@ typedef union /** - * The waypoint table lists the pad used, and the group the waypoint + * The waypoint table lists the pad used, and the group the waypoint * belongs to as well as any connected waypoints. */ typedef struct waypoint @@ -1619,7 +1643,7 @@ typedef union /** - * The Subset waygroup table which lists the IDs of the waypoints that + * The Subset waygroup table which lists the IDs of the waypoints that * belong to each group as well as any connected groups */ typedef struct waygroup @@ -1721,10 +1745,10 @@ typedef union struct act_anim { u32 unk02c; /*0x2c*/ - u32 unk30; /*0x30*/ - u32 unk034; /*0x34*/ - u32 unk038; /*0x38*/ - u32 unk03c; /*0x3c*/ + u32 holdLastFrame; /*0x30*/ + u32 playSfx; /*0x34*/ + u32 idleOnEnd; /*0x38*/ + u32 noTranslate; /*0x3c*/ u8 unk040; /*0x40*/ u8 unk041; /*0x41*/ u16 unk042; /*0x42*/ @@ -2145,7 +2169,7 @@ typedef union #pragma region Prop, Chr and Definition Records - + /** * Prop Record holds the relationship between various "props" on a stage. @@ -2161,8 +2185,9 @@ typedef union struct ObjectRecord *obj; struct DoorRecord *door; struct WeaponObjRecord *weapon; - void *explosion; - void *smoke; + struct Explosion *explosion; + struct Smoke *smoke; + struct Scorch *scorch; void *voidp; }; /*0x04*/ coord3d pos; /*0x08*/ @@ -2171,7 +2196,7 @@ typedef union /** * Maybe float. Something related to draw (render) distance. */ - f32 Unk18; + f32 zDepth; /*0x18*/ struct PropRecord *parent; /*0x1c*/ struct PropRecord *child; /*0x20*/ struct PropRecord *prev; /*0x24*/ @@ -2197,7 +2222,7 @@ typedef union } PropRecord; #pragma region GlobalPropDef - + /** * sizeof = 0x2c = 44 bytes. */ @@ -2237,7 +2262,7 @@ typedef union x2 x1 damaged */ - u8 state; + u8 state; u8 type; /*0x3*/ } PropDefHeaderRecord; #define New_PropDefHeaderRecord(scale, Type) \ @@ -2378,7 +2403,10 @@ typedef union // there should be some ALSoundState * pointers in here. // PropRecord *weapons_held[3]; /* handle_positiondata 0x0160 0x0164 0x0168 Right, Left, Hat*/ - s8 fireslot[2]; /* 0x016C 0x0170*/ + union { + s32 fireslot_word; + s8 fireslot[2]; /* 0x016C 0x0170*/ + }; int *ptr_SEbuffer3; int *ptr_SEbuffer4; int field_178[2]; @@ -2433,7 +2461,7 @@ typedef union f32 unk78[4]; struct PropRecord* ownerprop; // 0x88 - f32 unk8C; + f32 unk8C; u32 unk90; f32 unk94; @@ -2448,7 +2476,7 @@ typedef union f32 unkB0; // runtime y position? f32 unkB4; // previous pos.y? DROPTYPE droptype; // 0xB8 - u32 refreshrate; // 0xBC; + s32 refreshrate; // 0xBC; f32 unkC0; f32 unkC4; @@ -2588,7 +2616,7 @@ typedef union PropRecord *prop; /*0x10*/ Model *model; /*0x14*/ // mtx realrot; -#if 0 +#if 0 void *runtime_MATRIX0; /*0x18*/ void *runtime_MATRIX1; /*0x1c*/ void *runtime_MATRIX2; /*0x20*/ @@ -2610,41 +2638,43 @@ typedef union coord3d runtime_pos; /*0x58 - 0x60*/ union { - /*This union is a test but is less efficant than doing binary compare by hand eg runtimebitflags && REMOVED*/ + #if 0 + /*This union is a test but is less efficient than doing binary compare by hand eg runtimebitflags && REMOVED*/ struct { - bool a00000001 : 1; - bool a00000002 : 1; - bool remove : 1; /* removes object when set */ - bool a00000008 : 1; - bool a00000010 : 1; - bool a00000020 : 1; - bool a00000040 : 1; - bool isDeposited : 1; /* depositted (thrown) */ - bool hasBeenOpened : 1; - bool isDestroyed : 1; /* only set with disabled or destroyed doors */ - bool a00000400 : 1; - bool a00000800 : 1; - bool a00001000 : 1; - bool a00002000 : 1; - bool isActivated : 1; /* activated*/ - bool a00008000 : 1; - bool a00010000 : 1; + bool _80000000 : 1; + bool _40000000 : 1; + bool _20000000 : 1; + bool _10000000 : 1; + bool _08000000 : 1; + bool _04000000 : 1; + bool _02000000 : 1; + bool _01000000 : 1; + bool _00800000 : 1; + bool _00400000 : 1; + bool _00200000 : 1; + bool _00100000 : 1; + bool _00080000 : 1; s32 owner : 2; /*Owner 2bit (0-3)*/ - bool a00080000 : 1; - bool a00100000 : 1; - bool a00200000 : 1; - bool a00400000 : 1; - bool a00800000 : 1; - bool a01000000 : 1; - bool a02000000 : 1; - bool a04000000 : 1; - bool a08000000 : 1; - bool a10000000 : 1; - bool a20000000 : 1; - bool a40000000 : 1; - bool a80000000 : 1; - }; + bool _00010000 : 1; + bool _00008000 : 1; + bool isActivated : 1; /* activated*/ + bool _00002000 : 1; + bool _00001000 : 1; + bool _00000800 : 1; + bool _00000400 : 1; + bool isDestroyed : 1; /* only set with disabled or destroyed doors */ + bool hasBeenOpened : 1; + bool isDeposited : 1; /* depositted (thrown) */ + bool _00000040 : 1; + bool _00000020 : 1; + bool _00000010 : 1; + bool _00000008 : 1; + bool remove : 1; /* removes object when set */ + bool _00000002 : 1; + bool _00000001 : 1; + } runtime_bitflag; + #endif /*0x64* 10000000 00060000 owner (0-3); used to attribute kills to players @@ -2835,15 +2865,7 @@ typedef union Vertex* unkcc; /*0xcc*/ - // maybe struct ModelRoData_BoundingBoxRecord * - u32 unkd0; - - u32 unkd4; - u32 unkd8; - u32 unkdc; - u32 unke0; - u32 unke4; - u32 unke8; + struct ModelRoData_BoundingBoxRecord bbox; /** * When the door completely opens, the current global timer value is @@ -2872,9 +2894,17 @@ typedef union /** * Copy of global timer value. + * + * For each sibling, the original frac is backed up into the sibling's + * lastcalc60 field. The desired frac is then calculated and set in the + * sibling's frac property. Then collision checks are done, and the original + * frac is restored if any sibling is blocked. * Offset 0xfc. */ - u32 timer; + union { + s32 lastcalc60i; + f32 lastcalc60f; + }; } DoorRecord; #define New_DoorRecord(pad) \ @@ -2882,13 +2912,13 @@ typedef union New_PropDefHeaderRecord(1), New_ObjectRecord(pad) \ } - + /** PROPDEF_GLOBAL_DOOR_SCALE (2) * The value is used for door calculations. Changing it will shrink/enlarge doors. * Why they ever made it is beyond me. * @param Scale: Fixed-Point converted to float and divided by 65536 (0x10000) */ - typedef struct GlobalDoorScaleRecord + typedef struct GlobalDoorScaleRecord { inherits PropDefHeaderRecord; s32 Scale; @@ -2998,22 +3028,22 @@ typedef union typedef struct CCTVRecord { struct ObjectRecord; - s32 unk80; + s32 pad; Mtxf unk84; f32 unkC4; f32 unkC8; f32 unkCC; - + f32 unkD0; s32 unkD4; f32 unkD8; f32 unkDC; - + s32 timer; // 0xe0 - s32 unkE4; + s32 convert_to_f32; f32 unkE8; s32 unkEC; - + s32 unkF0; s32 unkF4; s32 unkF8; @@ -3175,9 +3205,18 @@ typedef union // PROPDEF_LINK (14) typedef struct LinkRecord { - inherits PropDefHeaderRecord; - s32 Index1; - s32 Index2; + struct PropDefHeaderRecord; + union + { + struct PropRecord *first; + s32 Index1; + }; + union + { + struct PropRecord *second; + s32 Index2; + }; + struct LinkRecord *next; } LinkRecord; #define New_LinkRecord(ID1, ID2) \ { \ @@ -3198,15 +3237,16 @@ typedef union inherits PropDefHeaderRecord; s32 chrnum; //0x4 s16 unk8; //0x8 - s8 unkA; // 0xa + s8 unkA; // 0xa s8 GrenadeProb; //0xb } GuardAttributeRecord; - #define New_SwitchRecord(ID1, ID2) \ + #define New_GuardAttributeRecord(ID1, ID2) \ { \ New_PropDefHeaderRecord(19), ID1 + 0, ID2 + 0 \ } // PROPDEF_SWITCH (19) - see LinkRecord + typedef LinkRecord SwitchRecord; #define New_SwitchRecord(ID1, ID2) \ { \ New_PropDefHeaderRecord(19), ID1 + 0, ID2 + 0 \ @@ -3216,7 +3256,7 @@ typedef union typedef struct MultiAmmoCrateRecord { inherits ObjectRecord; - s16 unk80; + u16 unk80; u16 quantities[AMMOTYPE_GLOBAL_MAX]; // indexed by ammotype /*0x80*/ } MultiAmmoCrateRecord; #define New_MultiAmmoCrateRecord(pad) \ @@ -3228,7 +3268,8 @@ typedef union typedef struct BodyArmourRecord { inherits ObjectRecord; - u32 Strength; + f32 initialamount; + f32 amount; } BodyArmourRecord; #define New_BodyArmourRecord(pad) \ { \ @@ -3322,7 +3363,7 @@ typedef union New_PropDefHeaderRecord(28), TagID + 0 \ } - // PROPDEF_OBJECTIVE_DEPOSIT_OBJECT (29) + // PROPDEF_OBJECTIVE_DEPOSIT_OBJECT (29) typedef struct DepositObjectRecord { inherits PropDefHeaderRecord; @@ -3338,6 +3379,9 @@ typedef union { inherits PropDefHeaderRecord; u16 unk4; + u16 unk6; + u32 unk8; + PropRecord *lastprop; } PhotographObjectRecord; #define New_CollectObjectRecord(TagID) \ { \ @@ -3359,6 +3403,8 @@ typedef union { inherits PropDefHeaderRecord; u16 unk4; + u32 unk8; + s32 lastroomentered; } EnterRoomRecord; #define New_CollectObjectRecord(TagID) \ { \ @@ -3402,7 +3448,15 @@ typedef union typedef struct RenameObjectRecord { inherits PropDefHeaderRecord; - //u16 TagID; + s32 TagID; + s32 unk08; + s32 unk0c; + s32 unk10; + s32 unk14; + s32 unk18; + s32 unk1c; + s32 unk20; + ObjectRecord *renobj; } RenameObjectRecord; #define New_RenameObjectRecord(TagID) \ { \ @@ -3413,10 +3467,17 @@ typedef union typedef struct LockDoorRecord { inherits PropDefHeaderRecord; - struct DoorRecord* door; - struct ObjectRecord* lock; + union + { + struct DoorRecord* door; + s32 Index1; + }; + union + { + struct ObjectRecord* lock; + s32 Index2; + }; struct LockDoorRecord* next; - //u16 TagID; } LockDoorRecord; #define New_RenameObjectRecord(TagID) \ { \ @@ -3467,7 +3528,7 @@ typedef union f32 speedaim; /*0x9c*/ f32 speedtime60; /*0xa0*/ f32 yrot; /*0xa4*/ - f32 nextstep; /*0xa8*/ + s32 nextstep; /*0xa8*/ PathRecord *path; /*0xac*/ struct ALSoundState *Sound; /*0xb0*/ } AircraftRecord; @@ -3495,10 +3556,19 @@ typedef union //PROPDEF_SAFE_ITEM (42) typedef struct SafeObjectRecord { - u32 unk00; - struct ObjectRecord *item; - struct SafeRecord *safe; - struct DoorRecord *door; + inherits PropDefHeaderRecord; + union { + struct ObjectRecord *item; + s32 Index1; + }; + union { + struct SafeRecord *safe; + s32 Index2; + }; + union { + struct DoorRecord *door; + s32 Index3; + }; struct SafeObjectRecord *next; } SafeObjectRecord; @@ -3520,10 +3590,10 @@ typedef union s32 unkA8; s32 unkAC; s32 unkB0; - s32 unkB4; - s32 unkB8; - s32 unkBC; - s32 unkC0; + s32 unkB4; // Tank! Acceleration + s32 unkB8; // Tank! Top Speed, Low Angle, Gun Type, Gun Check + s32 unkBC; // Tank! Ignition sfx, Idle sfx + s32 unkC0; // Tank! Motion sfx, crush sfx s32 is_firing_tank; f32 turret_vertical_angle; f32 turret_orientation_angle; @@ -3558,7 +3628,7 @@ typedef union s32 TintDist; s32 CullDist; s32 calculatedopacity; - s32 unk8c; + s32 portalnum; f32 unk90; } TintedGlassRecord; #define New_TintedGlassRecord(pad) \ @@ -3746,7 +3816,7 @@ struct SetupIntroCredits u16 reserved;//8 u16 text; //a u16 unkC; //c - s8 unkD; //d + u8 unkD; //d s8 difficulty; //f }; #pragma endregion Objectives @@ -3803,32 +3873,39 @@ struct SetupIntroCredits #pragma endregion Player #pragma region stagesetup.h - typedef struct stagesetup - { - waypoint *pathwaypoints; - waygroup *waypointgroups; - struct SetupIntroEmpty *intro; - PropDefHeaderRecord *propDefs; - PathRecord *patrolpaths; - AIListRecord *ailists; - PadRecord *pads; - BoundPadRecord *boundpads; - char *padnames; - char *boundpadnames; - } stagesetup; + struct pname { + union { + char *p; + s32 offset; + }; + }; + + typedef struct stagesetup + { + waypoint *pathwaypoints; + waygroup *waypointgroups; + struct SetupIntroEmpty *intro; + PropDefHeaderRecord *propDefs; + PathRecord *patrolpaths; + AIListRecord *ailists; + PadRecord *pads; + BoundPadRecord *boundpads; + struct pname *padnames; + struct pname *boundpadnames; + } stagesetup; #pragma endregion stagesetup.h - typedef struct sfxRecord //Need 24 size - { - ALSoundState *state; //0 - s32 Volume2; //4 - s32 sfxID; //8 - s32 Volume; //12 - coord3d *pos; //16 - ObjectRecord *Obj; //20 - } sfxRecord; + typedef struct sfxRecord //Need 24 size + { + ALSoundState *state; //0 + s32 Volume2; //4 + s32 sfxID; //8 + s32 Volume; //12 + coord3d *pos; //16 + ObjectRecord *Obj; //20 + } sfxRecord; @@ -3911,7 +3988,7 @@ struct MoveData { f32 zoomOutFovPersec; s32 zooming; s32 aiming; - + // 0x50 s32 weaponForwardOffset; s32 weaponBackOffset; @@ -3953,11 +4030,18 @@ struct unkown_gun_struct struct { s32 unk00; - s32 unk04; + s32 unk04; }; }; }; +struct setup_objective_text { + s32 unk00; + s32 unk04; + s32 unk08; + struct setup_objective_text *next; +}; + /* matches Perfect Dark */ struct criteria_roomentered { u32 unk00; @@ -3966,6 +4050,7 @@ struct criteria_roomentered { struct criteria_roomentered *next; }; + /* completely made up */ struct criteria_deposit { s32 unk00; @@ -3975,6 +4060,13 @@ struct criteria_deposit { struct criteria_deposit *next; }; +struct criteria_picture { + s32 unk00; + s32 tag_id; + s32 flag; + struct criteria_picture *next; +}; + struct PortalMetric { struct coord3d normal; f32 min; @@ -3987,4 +4079,36 @@ struct FolderSelect { s32 unk08; }; +struct damage_display_val { + s16 unk00; + s16 unk02; + s16 unk04; + s16 unk06; + s16 unk08; + s16 unk0A; + s8 unk0C; + s8 unk0D; + s8 unk0E; + s8 unk0F; +}; + +struct damage_display_parent { + struct damage_display_val items[2]; +}; + +// is this the same as damage_display_val ? +struct s_display_list_something +{ + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + u8 unkC; + u8 unkD; + u8 unkE; + u8 unkF; +}; + #endif diff --git a/src/boss.c b/src/boss.c index 13ec6ec..dad2186 100644 --- a/src/boss.c +++ b/src/boss.c @@ -33,23 +33,23 @@ #include "game/debugmenu_handler.h" #include "game/lvl.h" #include "game/ramromreplay.h" -#include "game/room_model_buffer.h" #include "game/rsp.h" #include "game/stan.h" #include "game/textrelated.h" #include "game/player.h" #include "game/unk_0C0A70.h" - -/** - * EU .data, offset from start of data_seg : 0x33e0 -*/ +#include "PR/R4300.h" /** * @file boss.c - * This file contains the main game loop code. + * @brief Main game loop and initialization functions. + * + * This file contains the core functions that drive the game loop, manage stages, and handle debug operations. */ + + #ifdef REFRESH_PAL -#define MAIN_LOOP_TICK_INTERVAL D_800484B4 * 0xe34ea - 0x71a75U +#define MAIN_LOOP_TICK_INTERVAL frameDelay * 0xe34ea - 0x71a75U #else #define MAIN_LOOP_TICK_INTERVAL 0x5eb61U #endif @@ -76,12 +76,12 @@ void bossMainloop(void); /* data */ u32 g_BossDebugNoticeEntry = 0; -s32 g_DebugAndUpdateStageFlag = 0; +s32 g_DebugAndUpdateStageFlag = FALSE; s32 g_StageNum = LEVELID_TITLE; u32 g_CurentMMallocValue = 0x234800; u32 g_CurentMaMallocValue = 0x4B000; -s32 g_ShowMemUseFlag = 0; -s32 g_ShowMemBarsFlag = 0; +s32 g_ShowMemUseFlag = FALSE; +s32 g_ShowMemBarsFlag = FALSE; struct memallocstring memallocstringtable[] = { { LEVELID_DAM, "-ml0 -me0 -mgfx70 -mvtx50 -mt625 -ma275"}, @@ -120,14 +120,14 @@ struct memallocstring memallocstringtable[] = { { LEVELID_CAVERNS_MP , "-ml0 -me0 -mgfx130 -mvtx100 -mt440 -ma220"}, { LEVELID_FACILITY_MP , "-ml0 -me0 -mgfx90 -mvtx100 -mt550 -ma230"}, { LEVELID_EGYPT_MP , "-ml0 -me0 -mgfx110 -mvtx100 -mt350 -ma400"}, -{ 0x0, "-ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400"}, +{ LEVELID_DEFAULT, "-ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400"}, { 0x0, }, { 0x0, }, { 0x0, } }; s32 g_MainStageNum = LEVELID_NONE; -s32 g_BossIsDebugMenuOpen = 0; +s32 g_BossIsDebugMenuOpen = FALSE; OSScMsg g_bossGfxDoneMsg = { OS_SC_DONE_MSG }; @@ -146,7 +146,7 @@ void bossInitMainthreadData(void) OSMesg bossmsg; OSTimer bosstimer; OSMesgQueue bossmq; - u32 temp_s0; + u32 start; u32 unused; s32 i; @@ -199,8 +199,8 @@ void bossInitMainthreadData(void) g_CurentMMallocValue = (s32) (strtol(tokenFind(1, "-m"), 0, 0) << 0xa); } - temp_s0 = (osVirtualToPhysical(&room_model_buffer) | 0x80000000); - mempCheckMemflagTokens(temp_s0, ((u32)tlbmanageGetTlbAllocatedBlock() - (u32)temp_s0)); + start = (PHYS_TO_K0(osVirtualToPhysical(&_bssSegmentEnd))); + mempCheckMemflagTokens(start, ((u32)tlbmanageGetTlbAllocatedBlock() - (u32)start)); mempResetBank(MEMPOOL_PERMANENT); langInit(); lvInit(); @@ -210,7 +210,7 @@ void bossInitMainthreadData(void) default_player_perspective_and_height(); store_osgetcount(); null_init_main_1(); - speedGraphDisplayListRelated(); + speedgraphInit(); set_gu_scale(); null_init_main_2(); sub_GAME_7F000980(); @@ -327,7 +327,7 @@ void bossMainloop(void) if (g_StageNum != LEVELID_TITLE) { fileValidateSaves(); - set_selected_folder_num(0); + fileSetCurrentFolder(FOLDER1); set_selected_difficulty(DIFFICULTY_AGENT); set_solo_and_ptr_briefing(g_StageNum); @@ -424,8 +424,8 @@ void bossMainloop(void) lvlStageLoad(g_StageNum); viInitBuffers(); debmenuInit(); - sub_GAME_7F0C0B4C(); - speedGraphVideoRelated_2(); + waitForNextFrame(); + speedgraphMarkerCommit(); if(1); // regalloc if(1); @@ -468,18 +468,12 @@ void bossMainloop(void) } else { - sub_GAME_7F0C0B4C(); + waitForNextFrame(); } -#if defined(VERSION_EU) - profileSetMarker(); - speedGraphVideoRelated_2(); - speedGraphDisplay(0x20000); -#else - video_DL_related_4(); - speedGraphVideoRelated_2(); - profileSetMarker(0x20000); -#endif + speedgraphRenderGraph(); + speedgraphMarkerCommit(); + speedgraphMarkerHandler(0x20000); joyConsumeSamplesWrapper(); permit_stderr(0); @@ -495,7 +489,7 @@ void bossMainloop(void) g_BossIsDebugMenuOpen = debug_menu_processor(joyStickXPos, joyStickYPos, joyButtons, joyGetButtonsPressedThisFrame(0, ANY_BUTTON)); } else if (joyGetButtons(0, START_BUTTON) == 0) { g_DebugMode = g_DebugHighlightedOption; - } else + } else #endif #ifndef DEBUGMENU if (g_BossIsDebugMenuOpen) @@ -545,11 +539,7 @@ void bossMainloop(void) if (get_memusage_display_flag()) { -#if defined(VERSION_EU) - gdl = video_DL_related_4(gdl); -#else - gdl = speedGraphDisplay(gdl); -#endif + gdl = speedgraphDisplayMetrics(gdl); } if (g_BossIsDebugMenuOpen) @@ -613,12 +603,8 @@ void bossMainloop(void) #endif toggleFlag ^= 1; -#if defined(VERSION_EU) - speedGraphDisplay(0x10000); + speedgraphMarkerHandler(0x10000); if(1); -#else - profileSetMarker(0x10000); -#endif } } } @@ -633,7 +619,7 @@ void bossMainloop(void) break; } } - + lvlUnloadStageTextData(); stop_demo_playback(); mempNullNextEntryInBank(MEMPOOL_STAGE); diff --git a/src/boss.h b/src/boss.h index 02e8027..d58e208 100644 --- a/src/boss.h +++ b/src/boss.h @@ -9,7 +9,7 @@ struct memallocstring void *string; }; -LEVELID bossGetStageNum(); +LEVELID bossGetStageNum(void); void bossSetLoadedStage(LEVELID stage); void bossInit(void); void bossEnableShowMemUseFlag(void); diff --git a/src/crash.c b/src/crash.c index 1fb6a61..04eb4a1 100644 --- a/src/crash.c +++ b/src/crash.c @@ -518,7 +518,7 @@ const u32 *crashGetParentStackFrame(const u32 *origptr, const u32 *minaddr, cons * V0=TRUE if opcode that set RA A0 was a JAL or JALR type within bounds (70000450,70020D90) * accepts: A0=p->70-mapped TLB function, presumably from RA */ -s32 crashIsReturnAddress(u32 *instruction) +bool crashIsReturnAddress(u32 *instruction) { u32 prevop; @@ -527,14 +527,14 @@ s32 crashIsReturnAddress(u32 *instruction) prevop = instruction[-2]; if ((prevop & 0xFC00003C) == 9) { - return 1; + return TRUE; } if ((prevop & 0xFC000000) == 0xC000000) { - return 1; + return TRUE; } } - return 0; + return FALSE; } /** diff --git a/src/crash.h b/src/crash.h index c8b3c6f..82b9528 100644 --- a/src/crash.h +++ b/src/crash.h @@ -23,7 +23,7 @@ void crashMain(void* arg0); void crashAppendChar(unsigned char c); void crashScroll(s32 numlines); -void crashInitBuffers(); +void crashInitBuffers(void); void crashRenderFrame(u16 *buffer); diff --git a/src/deb.c b/src/deb.c index d3e31a6..55a80a8 100644 --- a/src/deb.c +++ b/src/deb.c @@ -55,7 +55,7 @@ u8 *debAllocate(s32 size) { { curr -= size; *pos = curr; - return mempAllocBytesInBank(size, 6); + return mempAllocBytesInBank(size, MEMPOOL_PERMANENT); } else { diff --git a/src/debugmenu.c b/src/debugmenu.c index 09e18fe..2f8949b 100644 --- a/src/debugmenu.c +++ b/src/debugmenu.c @@ -193,7 +193,7 @@ void debmenuResetPosition(void) { void debmenuReset(void) { #ifdef LEFTOVERDEBUG s32 x; - s32 y; + s32 y; for (y = 0; y < 35; y++) { for (x = 0; x < 80; x++) { debmenuWriteCharAtPos(x, y, '\0'); @@ -236,13 +236,16 @@ void debmenu7000AF98(s32 height) for (x = 0; x != 80; x++) { debmenuWriteCharAtPos(x, y, 0); - } + } } } #endif } +/* +* Address: 0x7000b040 +*/ void debmenuSetPos(s32 x, s32 y) { #ifdef LEFTOVERDEBUG x += g_DebugMenuTextStartX; @@ -273,7 +276,7 @@ void debmenuWriteChar(unsigned char c) { } g_DebugMenuTextCurrentX++; if ((c == '\r') || (c == '\n') || (g_DebugMenuTextCurrentX >= width)) { - g_DebugMenuTextCurrentX = g_DebugMenuTextStartX; + g_DebugMenuTextCurrentX = g_DebugMenuTextStartX; g_DebugMenuTextCurrentY++; if (g_DebugMenuTextCurrentY >= height) { g_DebugMenuTextCurrentY = g_DebugMenuTextStartY; @@ -298,7 +301,7 @@ void debmenuPrintString(const unsigned char *str) { #endif } -void debmenuSetPositionAndWriteString(s32 x, s32 y, const unsigned char *str) { +void debmenuSetPositionAndWriteString(s32 x, s32 y, const unsigned char *str) { #ifdef LEFTOVERDEBUG debmenuSetPos(x, y); while (*str != '\0') { @@ -308,7 +311,9 @@ void debmenuSetPositionAndWriteString(s32 x, s32 y, const unsigned char *str) { } - +/* +* Address: 0x7000b27c +*/ Gfx *debmenuDraw(Gfx *gdl) { #if defined(LEFTOVERDEBUG) @@ -340,15 +345,15 @@ Gfx *debmenuDraw(Gfx *gdl) gdl2 += 2; appliedpaletteindex = paletteindex; } - + if (1) { gdl2 += 3; - } + } } } } - + // Make sure there'll be a least 256 GBI commands free (2KB) available = dynGetFreeGfx(gdl) - 256 * sizeof(Gfx); needed = (u32)gdl2 - (u32)gdl; @@ -360,10 +365,10 @@ Gfx *debmenuDraw(Gfx *gdl) if(1) { s32 appliedpaletteindex = -1; - + // Write a "g_DebugMenuPercentage" (out of 255) into a global variable // which shows how much of the displaylist will be committed, - // provided 2KB is kept free. + // provided 2KB is kept free. if (available <= 0) { // There's already less than 2KB free in the display list @@ -381,7 +386,7 @@ Gfx *debmenuDraw(Gfx *gdl) // so the displaylist can be committed in full g_DebugMenuPercentage = 256; } - + gSPDisplayList(gdl++, g_DebugMenuTextureDisplayList); // Build the display list for real this time. @@ -398,7 +403,7 @@ Gfx *debmenuDraw(Gfx *gdl) s32 paletteindex = g_DebugMenuTextBuffer[x][y].color; if(x == 80); - + if (c != '\0') { if (paletteindex != appliedpaletteindex) @@ -440,8 +445,8 @@ Gfx *debmenuDraw(Gfx *gdl) } } } - + #endif // defined(LEFTOVERDEBUG) - + return gdl; -} \ No newline at end of file +} diff --git a/src/decompressbuffer.c b/src/decompressbuffer.c deleted file mode 100644 index 71c8af9..0000000 --- a/src/decompressbuffer.c +++ /dev/null @@ -1,7 +0,0 @@ -#include - -#if defined(LEFTOVERDEBUG) -u8 _decompressBuffer[0xAB400]; -#else -u8 _decompressBuffer[0xA1AB0]; -#endif \ No newline at end of file diff --git a/src/fr.c b/src/fr.c index e1f9a00..33e557c 100644 --- a/src/fr.c +++ b/src/fr.c @@ -21,7 +21,7 @@ /** * @file video.c - * This file contains video handling code. + * This file contains video handling code. */ // same codegen as (x & 0xffff) @@ -35,7 +35,7 @@ /** * Splits a 32 bit value into upper and lower 16, adds a 16 bit value to each, and combines back to 32 bits. - * + * * Note: both unsigned 16 bit casts result in the same codegen, but I'm using different * macros to give a more "natural" explanation of the asm codegen. */ @@ -49,17 +49,16 @@ u32 g_unused80023240 = 0; #if defined(VERSION_EU) -struct VideoSettings_s g_ViDataArray[NUM_VIDEO_SETTINGS] = +struct VideoSettings_s g_ViDataArray[NUM_VIDEO_SETTINGS] = { - {0, 0, 0, 0, 320, 272, 60.0f, 1.17647063732f, 30.0f, 10000.0f, SCREEN_WIDTH, SCREEN_HEIGHT, 320, 272, 0, 0, 1, NULL}, - {0, 0, 0, 0, 320, 272, 60.0f, 1.17647063732f, 30.0f, 10000.0f, SCREEN_WIDTH, SCREEN_HEIGHT, 320, 272, 0, 0, 1, NULL} + {0, 0, 0, 0, 320, 272, 60.0f, 1.17647063732f, 30.0f, 10000.0f, SCREEN_WIDTH, SCREEN_HEIGHT, 320, 272, 0, 0, TRUE, NULL}, + {0, 0, 0, 0, 320, 272, 60.0f, 1.17647063732f, 30.0f, 10000.0f, SCREEN_WIDTH, SCREEN_HEIGHT, 320, 272, 0, 0, TRUE, NULL} }; #else -struct VideoSettings_s g_ViDataArray[NUM_VIDEO_SETTINGS] = +struct VideoSettings_s g_ViDataArray[NUM_VIDEO_SETTINGS] = { - {0, 0, 0, 0, 320, 240, 60.0f, ASPECT_RATIO_SD, 30.0f, 10000.0f, SCREEN_WIDTH, SCREEN_HEIGHT, 320, 240, 0, 0, 1, NULL}, - {0, 0, 0, 0, 320, 240, 60.0f, ASPECT_RATIO_SD, 30.0f, 10000.0f, SCREEN_WIDTH, SCREEN_HEIGHT, 320, 240, 0, 0, 1, NULL} -}; + {MD_BLACK, 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FOV_Y_F, ASPECT_RATIO, 30.0f, 10000.0f, SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0, TRUE, NULL}, + {MD_BLACK, 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, FOV_Y_F, ASPECT_RATIO, 30.0f, 10000.0f, SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0, TRUE, NULL}}; #endif /** @@ -193,12 +192,12 @@ void viInitVideoSettings(void) g_ViFrontIndex = 0; g_ViBackIndex = 1; - g_ViFrontData = (VideoSettings*)((u8*)&g_ViDataArray + (g_ViFrontIndex * sizeof(VideoSettings))); - g_ViFrontData->framebuf = cfb_16[g_ViFrontIndex]; + g_ViFrontData = (VideoSettings*)((u8*)&g_ViDataArray + (g_ViFrontIndex * sizeof(VideoSettings))); //AKA front = viDataArray[0] + g_ViFrontData->framebuf = cfb_16[g_ViFrontIndex]; - g_ViBackData = (VideoSettings*)((u8*)&g_ViDataArray + (g_ViBackIndex * sizeof(VideoSettings))); + g_ViBackData = (VideoSettings*)((u8*)&g_ViDataArray + (g_ViBackIndex * sizeof(VideoSettings))); //AKA back = viDataArray[1] - was Rare mental? g_ViBackData->framebuf = cfb_16[g_ViBackIndex]; - + g_viHorizontalOffset = 0; #ifndef VERSION_EU D_800232A0 = 0; @@ -233,7 +232,7 @@ void frBlack(u32 black) * Calls osViSetMode with current viMode. * Also calls osViBlack. * Applies verticalOffset to vstart. - * + * * Looks related to n64devkit\ultra\usr\src\pr\demos\blockmonkey\block.c * in particular, ModifyVStart */ @@ -245,7 +244,7 @@ void viVsyncRelated(void) if (g_ViShakeTimer > 0) { g_ViShakeTimer--; - + if (g_ViShakeTimer == 0) { g_ViShakeIntensity = 0; @@ -275,6 +274,8 @@ void viVsyncRelated(void) g_ViUnblackTimer--; } + //smooth dither pattern and disable weird gamma + //(N64 was supposed to compensate for CRT's 2.2 gamma, but by this time most games were made with sRGB in mind) osViSetSpecialFeatures(OS_VI_DITHER_FILTER_ON | OS_VI_GAMMA_OFF); g_viVstartSign = -g_viVstartSign; @@ -283,15 +284,15 @@ void viVsyncRelated(void) /** * 3E98 70003298 * Some code (and defines) based on n64devkit\ultra\usr\src\pr\demos\blockmonkey\block.c - * + * * https://decomp.me/scratch/0yXle 98.52% - * + * * decomp status: * - compiles: yes * - stack resize: ok * - identical instructions: fail * - identical registers: fail - * + * * There's a problem loading D_800232C0 the first time (+1 instruction), and again when * it's being stored (-1 instruction), but the opcodes match other than that. * Then just some regalloc. @@ -310,7 +311,7 @@ void video_related_8(void) { switch (g_ViBackData->mode) { - case VIDEOMODE_DISABLE_320x240: + case MD_BLACK: { osViSetYScale(1.0f); osViBlack(TRUE); @@ -318,7 +319,7 @@ void video_related_8(void) break; } - case VIDEOMODE_320x240: + case MD_NORMAL: { if (g_viColorOutputMode != COLORMODE_32BIT) { @@ -354,7 +355,7 @@ void video_related_8(void) break; } - case VIDEOMODE_640x480: + case MD_MAXIMUM: { if (osTvType == TV_TYPE_MPAL) { @@ -364,7 +365,7 @@ void video_related_8(void) { viMode = &osViModeTable[OS_VI_NTSC_HAF1]; } - + g_viOriginalHstart = viMode->comRegs.hStart; g_viOriginalVstart0 = viMode->fldRegs[0].vStart; g_viOriginalVstart1 = viMode->fldRegs[1].vStart; @@ -381,18 +382,18 @@ void video_related_8(void) calculatedXScale = (f32)g_ViBackData->x / (f32)g_ViBackData->bufx; calculatedYScale = (f32)g_ViBackData->y / (f32)g_ViBackData->bufy; - // osViBlack requires YScale to be 1.0, otherwise, + // osViBlack requires YScale to be 1.0, otherwise, // "Using it for YScale factors that are not 1.0 creates the potential // for the video interface to malfunction and enter a state that cannot // be exited without resetting the system." - if (g_ViBackData->mode == VIDEOMODE_DISABLE_320x240) + if (g_ViBackData->mode == MD_BLACK) { calculatedYScale = 1.0f; } // macro for testing theories ... #define GET_D_800232C0 D_800232C0 - + // current: // lui t4, 0x0 4ec: R_MIPS_HI16 D_800232C0 // ... @@ -407,7 +408,7 @@ void video_related_8(void) g_ViXScales[GET_D_800232C0] = calculatedXScale; g_ViYScales[GET_D_800232C0] = calculatedYScale; - + if (g_ViBackData->mode == VIDEOMODE_320x240) { g_ViModePtrs[GET_D_800232C0] = &g_viOriginalVideoMode; @@ -488,7 +489,7 @@ void video_related_8(void) { ((struct GfxInfo_s *)g_gfxTaskSettingsList)->cfb = cfb_16[0]; } - + settings = g_ViBackData; g_ViFrontIndex = (g_ViFrontIndex + 1) % NUM_VIDEO_SETTINGS; @@ -496,7 +497,7 @@ void video_related_8(void) g_ViFrontData = g_ViDataArray + g_ViFrontIndex; g_ViBackData = g_ViDataArray + g_ViBackIndex; - + bcopy(settings, g_ViBackData, sizeof(VideoSettings)); g_ViBackData->framebuf = cfb_16[g_ViBackIndex]; } @@ -505,9 +506,9 @@ void video_related_8(void) GLOBAL_ASM( .text glabel video_related_8 -/* 003E98 70003298 3C0D8002 */ lui $t5, %hi(g_ViBackData) +/* 003E98 70003298 3C0D8002 */ lui $t5, %hi(g_ViBackData) /* 003E9C 7000329C 25AD32A8 */ addiu $t5, %lo(g_ViBackData) # addiu $t5, $t5, 0x32a8 -/* 003EA0 700032A0 3C0E8002 */ lui $t6, %hi(g_ViFrontData) +/* 003EA0 700032A0 3C0E8002 */ lui $t6, %hi(g_ViFrontData) /* 003EA4 700032A4 8DCE32A4 */ lw $t6, %lo(g_ViFrontData)($t6) /* 003EA8 700032A8 8DA80000 */ lw $t0, ($t5) /* 003EAC 700032AC 27BDFFE8 */ addiu $sp, $sp, -0x18 @@ -520,35 +521,35 @@ glabel video_related_8 /* 003EC8 700032C8 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 003ECC 700032CC 24010001 */ li $at, 1 /* 003ED0 700032D0 1041000D */ beq $v0, $at, .L70003308 -/* 003ED4 700032D4 3C188002 */ lui $t8, %hi(g_viColorOutputMode) +/* 003ED4 700032D4 3C188002 */ lui $t8, %hi(g_viColorOutputMode) /* 003ED8 700032D8 24010002 */ li $at, 2 /* 003EDC 700032DC 10410071 */ beq $v0, $at, .L700034A4 /* 003EE0 700032E0 3C198000 */ lui $t9, 0x8000 /* 003EE4 700032E4 10000089 */ b .L7000350C -/* 003EE8 700032E8 00000000 */ nop +/* 003EE8 700032E8 00000000 */ nop .L700032EC: /* 003EEC 700032EC 44816000 */ mtc1 $at, $f12 /* 003EF0 700032F0 0C003880 */ jal osViSetYScale -/* 003EF4 700032F4 00000000 */ nop +/* 003EF4 700032F4 00000000 */ nop /* 003EF8 700032F8 0C0038B4 */ jal osViBlack /* 003EFC 700032FC 24040001 */ li $a0, 1 /* 003F00 70003300 10000082 */ b .L7000350C -/* 003F04 70003304 00000000 */ nop +/* 003F04 70003304 00000000 */ nop .L70003308: /* 003F08 70003308 8F1832AC */ lw $t8, %lo(g_viColorOutputMode)($t8) /* 003F0C 7000330C 3C038006 */ lui $v1, %hi(viMode) /* 003F10 70003310 3C0F8000 */ lui $t7, 0x8000 /* 003F14 70003314 1300002B */ beqz $t8, .L700033C4 /* 003F18 70003318 2463087C */ addiu $v1, %lo(viMode) # addiu $v1, $v1, 0x87c -/* 003F1C 7000331C 3C198000 */ lui $t9, %hi(osTvType) +/* 003F1C 7000331C 3C198000 */ lui $t9, %hi(osTvType) /* 003F20 70003320 8F390300 */ lw $t9, %lo(osTvType)($t9) /* 003F24 70003324 24010002 */ li $at, 2 -/* 003F28 70003328 3C188006 */ lui $t8, %hi(g_viOriginalVideoMode) +/* 003F28 70003328 3C188006 */ lui $t8, %hi(g_viOriginalVideoMode) /* 003F2C 7000332C 17210014 */ bne $t9, $at, .L70003380 /* 003F30 70003330 27180828 */ addiu $t8, %lo(g_viOriginalVideoMode) # addiu $t8, $t8, 0x828 -/* 003F34 70003334 3C0F8002 */ lui $t7, %hi(osViModeTable + 2400) +/* 003F34 70003334 3C0F8002 */ lui $t7, %hi(osViModeTable + 2400) /* 003F38 70003338 25EF7320 */ addiu $t7, %lo(osViModeTable + 2400) # addiu $t7, $t7, 0x7320 -/* 003F3C 7000333C 3C0E8006 */ lui $t6, %hi(g_viOriginalVideoMode) +/* 003F3C 7000333C 3C0E8006 */ lui $t6, %hi(g_viOriginalVideoMode) /* 003F40 70003340 25CE0828 */ addiu $t6, %lo(g_viOriginalVideoMode) # addiu $t6, $t6, 0x828 /* 003F44 70003344 25F90048 */ addiu $t9, $t7, 0x48 .L70003348: @@ -567,7 +568,7 @@ glabel video_related_8 /* 003F78 70003378 1000003A */ b .L70003464 /* 003F7C 7000337C ADD90004 */ sw $t9, 4($t6) .L70003380: -/* 003F80 70003380 3C198002 */ lui $t9, %hi(osViModeTable + 160) +/* 003F80 70003380 3C198002 */ lui $t9, %hi(osViModeTable + 160) /* 003F84 70003384 27396A60 */ addiu $t9, %lo(osViModeTable + 160) # addiu $t9, $t9, 0x6a60 /* 003F88 70003388 272E0048 */ addiu $t6, $t9, 0x48 .L7000338C: @@ -588,12 +589,12 @@ glabel video_related_8 .L700033C4: /* 003FC4 700033C4 8DEF0300 */ lw $t7, 0x300($t7) /* 003FC8 700033C8 24010002 */ li $at, 2 -/* 003FCC 700033CC 3C188006 */ lui $t8, %hi(g_viOriginalVideoMode) +/* 003FCC 700033CC 3C188006 */ lui $t8, %hi(g_viOriginalVideoMode) /* 003FD0 700033D0 15E10014 */ bne $t7, $at, .L70003424 /* 003FD4 700033D4 27180828 */ addiu $t8, %lo(g_viOriginalVideoMode) # addiu $t8, $t8, 0x828 -/* 003FD8 700033D8 3C198002 */ lui $t9, %hi(osViModeTable + 2720) +/* 003FD8 700033D8 3C198002 */ lui $t9, %hi(osViModeTable + 2720) /* 003FDC 700033DC 27397460 */ addiu $t9, %lo(osViModeTable + 2720) # addiu $t9, $t9, 0x7460 -/* 003FE0 700033E0 3C0E8006 */ lui $t6, %hi(g_viOriginalVideoMode) +/* 003FE0 700033E0 3C0E8006 */ lui $t6, %hi(g_viOriginalVideoMode) /* 003FE4 700033E4 25CE0828 */ addiu $t6, %lo(g_viOriginalVideoMode) # addiu $t6, $t6, 0x828 /* 003FE8 700033E8 272F0048 */ addiu $t7, $t9, 0x48 .L700033EC: @@ -612,7 +613,7 @@ glabel video_related_8 /* 00401C 7000341C 10000011 */ b .L70003464 /* 004020 70003420 ADCF0004 */ sw $t7, 4($t6) .L70003424: -/* 004024 70003424 3C0F8002 */ lui $t7, %hi(osViModeTable + 480) +/* 004024 70003424 3C0F8002 */ lui $t7, %hi(osViModeTable + 480) /* 004028 70003428 25EF6BA0 */ addiu $t7, %lo(osViModeTable + 480) # addiu $t7, $t7, 0x6ba0 /* 00402C 7000342C 25EE0048 */ addiu $t6, $t7, 0x48 .L70003430: @@ -630,7 +631,7 @@ glabel video_related_8 /* 00405C 7000345C AF010000 */ sw $at, ($t8) /* 004060 70003460 AF0E0004 */ sw $t6, 4($t8) .L70003464: -/* 004064 70003464 3C198006 */ lui $t9, %hi(g_viOriginalVideoMode) +/* 004064 70003464 3C198006 */ lui $t9, %hi(g_viOriginalVideoMode) /* 004068 70003468 27390828 */ addiu $t9, %lo(g_viOriginalVideoMode) # addiu $t9, $t9, 0x828 /* 00406C 7000346C AC790000 */ sw $t9, ($v1) /* 004070 70003470 8F2E001C */ lw $t6, 0x1c($t9) @@ -645,7 +646,7 @@ glabel video_related_8 /* 004094 70003494 0C000C64 */ jal frBlack /* 004098 70003498 AC380888 */ sw $t8, %lo(viMode+0xC)($at) /* 00409C 7000349C 1000001B */ b .L7000350C -/* 0040A0 700034A0 00000000 */ nop +/* 0040A0 700034A0 00000000 */ nop .L700034A4: /* 0040A4 700034A4 8F390300 */ lw $t9, 0x300($t9) /* 0040A8 700034A8 24010002 */ li $at, 2 @@ -653,13 +654,13 @@ glabel video_related_8 /* 0040B0 700034B0 17210007 */ bne $t9, $at, .L700034D0 /* 0040B4 700034B4 2463087C */ addiu $v1, %lo(viMode) # addiu $v1, $v1, 0x87c /* 0040B8 700034B8 3C038006 */ lui $v1, %hi(viMode) -/* 0040BC 700034BC 3C0E8002 */ lui $t6, %hi(osViModeTable + 3120) +/* 0040BC 700034BC 3C0E8002 */ lui $t6, %hi(osViModeTable + 3120) /* 0040C0 700034C0 2463087C */ addiu $v1, %lo(viMode) # addiu $v1, $v1, 0x87c /* 0040C4 700034C4 25CE75F0 */ addiu $t6, %lo(osViModeTable + 3120) # addiu $t6, $t6, 0x75f0 /* 0040C8 700034C8 10000004 */ b .L700034DC /* 0040CC 700034CC AC6E0000 */ sw $t6, ($v1) .L700034D0: -/* 0040D0 700034D0 3C0F8002 */ lui $t7, %hi(osViModeTable + 880) +/* 0040D0 700034D0 3C0F8002 */ lui $t7, %hi(osViModeTable + 880) /* 0040D4 700034D4 25EF6D30 */ addiu $t7, %lo(osViModeTable + 880) # addiu $t7, $t7, 0x6d30 /* 0040D8 700034D8 AC6F0000 */ sw $t7, ($v1) .L700034DC: @@ -678,9 +679,9 @@ glabel video_related_8 .L7000350C: /* 00410C 7000350C 0C003DEC */ jal osViSetSpecialFeatures /* 004110 70003510 24040042 */ li $a0, 66 -/* 004114 70003514 3C088002 */ lui $t0, %hi(g_ViBackData) +/* 004114 70003514 3C088002 */ lui $t0, %hi(g_ViBackData) /* 004118 70003518 8D0832A8 */ lw $t0, %lo(g_ViBackData)($t0) -/* 00411C 7000351C 3C0D8002 */ lui $t5, %hi(g_ViBackData) +/* 00411C 7000351C 3C0D8002 */ lui $t5, %hi(g_ViBackData) /* 004120 70003520 25AD32A8 */ addiu $t5, %lo(g_ViBackData) # addiu $t5, $t5, 0x32a8 /* 004124 70003524 91020000 */ lbu $v0, ($t0) /* 004128 70003528 850F0004 */ lh $t7, 4($t0) @@ -693,19 +694,19 @@ glabel video_related_8 /* 004140 70003540 468021A0 */ cvt.s.w $f6, $f4 /* 004144 70003544 44998000 */ mtc1 $t9, $f16 /* 004148 70003548 448E2000 */ mtc1 $t6, $f4 -/* 00414C 7000354C 3C188006 */ lui $t8, %hi(g_viOriginalVideoMode) -/* 004150 70003550 3C0A8002 */ lui $t2, %hi(D_800232C0) +/* 00414C 7000354C 3C188006 */ lui $t8, %hi(g_viOriginalVideoMode) +/* 004150 70003550 3C0A8002 */ lui $t2, %hi(D_800232C0) /* 004154 70003554 468042A0 */ cvt.s.w $f10, $f8 /* 004158 70003558 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 00415C 7000355C 27180828 */ addiu $t8, %lo(g_viOriginalVideoMode) # addiu $t8, $t8, 0x828 -/* 004160 70003560 3C0B8002 */ lui $t3, %hi(g_viColorOutputMode) +/* 004160 70003560 3C0B8002 */ lui $t3, %hi(g_viColorOutputMode) /* 004164 70003564 468084A0 */ cvt.s.w $f18, $f16 /* 004168 70003568 46802220 */ cvt.s.w $f8, $f4 /* 00416C 7000356C 460A3083 */ div.s $f2, $f6, $f10 /* 004170 70003570 14400003 */ bnez $v0, .L70003580 /* 004174 70003574 46089003 */ div.s $f0, $f18, $f8 /* 004178 70003578 44810000 */ mtc1 $at, $f0 -/* 00417C 7000357C 00000000 */ nop +/* 00417C 7000357C 00000000 */ nop .L70003580: /* 004180 70003580 8D4A32C0 */ lw $t2, %lo(D_800232C0)($t2) /* 004184 70003584 3C018002 */ lui $at, %hi(g_ViXScales) @@ -718,25 +719,25 @@ glabel video_related_8 /* 0041A0 700035A0 910F0000 */ lbu $t7, ($t0) /* 0041A4 700035A4 24010001 */ li $at, 1 /* 0041A8 700035A8 15E10105 */ bne $t7, $at, .L700039C0 -/* 0041AC 700035AC 00000000 */ nop +/* 0041AC 700035AC 00000000 */ nop /* 0041B0 700035B0 8D6B32AC */ lw $t3, %lo(g_viColorOutputMode)($t3) /* 0041B4 700035B4 3C018006 */ lui $at, %hi(g_ViModePtrs) /* 0041B8 700035B8 00290821 */ addu $at, $at, $t1 /* 0041BC 700035BC 11600035 */ beqz $t3, .L70003694 /* 0041C0 700035C0 AC38DBE0 */ sw $t8, %lo(g_ViModePtrs)($at) -/* 0041C4 700035C4 3C198000 */ lui $t9, %hi(osTvType) +/* 0041C4 700035C4 3C198000 */ lui $t9, %hi(osTvType) /* 0041C8 700035C8 8F390300 */ lw $t9, %lo(osTvType)($t9) /* 0041CC 700035CC 24010002 */ li $at, 2 -/* 0041D0 700035D0 3C0E8006 */ lui $t6, %hi(g_ViModes) +/* 0041D0 700035D0 3C0E8006 */ lui $t6, %hi(g_ViModes) /* 0041D4 700035D4 17210019 */ bne $t9, $at, .L7000363C /* 0041D8 700035D8 25CEDB40 */ addiu $t6, %lo(g_ViModes) # addiu $t6, $t6, -0x24c0 /* 0041DC 700035DC 000A7080 */ sll $t6, $t2, 2 /* 0041E0 700035E0 01CA7021 */ addu $t6, $t6, $t2 -/* 0041E4 700035E4 3C0F8006 */ lui $t7, %hi(g_ViModes) +/* 0041E4 700035E4 3C0F8006 */ lui $t7, %hi(g_ViModes) /* 0041E8 700035E8 25EFDB40 */ addiu $t7, %lo(g_ViModes) # addiu $t7, $t7, -0x24c0 /* 0041EC 700035EC 000E7100 */ sll $t6, $t6, 4 /* 0041F0 700035F0 01CF1821 */ addu $v1, $t6, $t7 -/* 0041F4 700035F4 3C188002 */ lui $t8, %hi(osViModeTable + 2400) +/* 0041F4 700035F4 3C188002 */ lui $t8, %hi(osViModeTable + 2400) /* 0041F8 700035F8 27187320 */ addiu $t8, %lo(osViModeTable + 2400) # addiu $t8, $t8, 0x7320 /* 0041FC 700035FC 270E0048 */ addiu $t6, $t8, 0x48 /* 004200 70003600 00607825 */ move $t7, $v1 @@ -760,7 +761,7 @@ glabel video_related_8 /* 004240 70003640 032AC821 */ addu $t9, $t9, $t2 /* 004244 70003644 0019C900 */ sll $t9, $t9, 4 /* 004248 70003648 032E1821 */ addu $v1, $t9, $t6 -/* 00424C 7000364C 3C188002 */ lui $t8, %hi(osViModeTable + 160) +/* 00424C 7000364C 3C188002 */ lui $t8, %hi(osViModeTable + 160) /* 004250 70003650 27186A60 */ addiu $t8, %lo(osViModeTable + 160) # addiu $t8, $t8, 0x6a60 /* 004254 70003654 27190048 */ addiu $t9, $t8, 0x48 /* 004258 70003658 00607025 */ move $t6, $v1 @@ -780,17 +781,17 @@ glabel video_related_8 /* 00428C 7000368C 10000034 */ b .L70003760 /* 004290 70003690 ADD90004 */ sw $t9, 4($t6) .L70003694: -/* 004294 70003694 3C0F8000 */ lui $t7, %hi(osTvType) +/* 004294 70003694 3C0F8000 */ lui $t7, %hi(osTvType) /* 004298 70003698 8DEF0300 */ lw $t7, %lo(osTvType)($t7) /* 00429C 7000369C 24010002 */ li $at, 2 /* 0042A0 700036A0 15E10018 */ bne $t7, $at, .L70003704 /* 0042A4 700036A4 000AC880 */ sll $t9, $t2, 2 /* 0042A8 700036A8 032AC821 */ addu $t9, $t9, $t2 -/* 0042AC 700036AC 3C188006 */ lui $t8, %hi(g_ViModes) +/* 0042AC 700036AC 3C188006 */ lui $t8, %hi(g_ViModes) /* 0042B0 700036B0 2718DB40 */ addiu $t8, %lo(g_ViModes) # addiu $t8, $t8, -0x24c0 /* 0042B4 700036B4 0019C900 */ sll $t9, $t9, 4 /* 0042B8 700036B8 03381821 */ addu $v1, $t9, $t8 -/* 0042BC 700036BC 3C0E8002 */ lui $t6, %hi(osViModeTable + 2720) +/* 0042BC 700036BC 3C0E8002 */ lui $t6, %hi(osViModeTable + 2720) /* 0042C0 700036C0 25CE7460 */ addiu $t6, %lo(osViModeTable + 2720) # addiu $t6, $t6, 0x7460 /* 0042C4 700036C4 25D90048 */ addiu $t9, $t6, 0x48 /* 0042C8 700036C8 0060C025 */ move $t8, $v1 @@ -812,11 +813,11 @@ glabel video_related_8 .L70003704: /* 004304 70003704 000A7880 */ sll $t7, $t2, 2 /* 004308 70003708 01EA7821 */ addu $t7, $t7, $t2 -/* 00430C 7000370C 3C198006 */ lui $t9, %hi(g_ViModes) +/* 00430C 7000370C 3C198006 */ lui $t9, %hi(g_ViModes) /* 004310 70003710 2739DB40 */ addiu $t9, %lo(g_ViModes) # addiu $t9, $t9, -0x24c0 /* 004314 70003714 000F7900 */ sll $t7, $t7, 4 /* 004318 70003718 01F91821 */ addu $v1, $t7, $t9 -/* 00431C 7000371C 3C0E8002 */ lui $t6, %hi(osViModeTable + 480) +/* 00431C 7000371C 3C0E8002 */ lui $t6, %hi(osViModeTable + 480) /* 004320 70003720 25CE6BA0 */ addiu $t6, %lo(osViModeTable + 480) # addiu $t6, $t6, 0x6ba0 /* 004324 70003724 25CF0048 */ addiu $t7, $t6, 0x48 /* 004328 70003728 0060C825 */ move $t9, $v1 @@ -855,14 +856,14 @@ glabel video_related_8 /* 0043A4 700037A4 AC6E002C */ sw $t6, 0x2c($v1) /* 0043A8 700037A8 8519001A */ lh $t9, 0x1a($t0) /* 0043AC 700037AC 15800002 */ bnez $t4, .L700037B8 -/* 0043B0 700037B0 00000000 */ nop +/* 0043B0 700037B0 00000000 */ nop /* 0043B4 700037B4 0007000D */ break 7 .L700037B8: /* 0043B8 700037B8 2401FFFF */ li $at, -1 /* 0043BC 700037BC 15810004 */ bne $t4, $at, .L700037D0 /* 0043C0 700037C0 3C018000 */ lui $at, 0x8000 /* 0043C4 700037C4 15E10002 */ bne $t7, $at, .L700037D0 -/* 0043C8 700037C8 00000000 */ nop +/* 0043C8 700037C8 00000000 */ nop /* 0043CC 700037CC 0006000D */ break 6 .L700037D0: /* 0043D0 700037D0 0019C2C0 */ sll $t8, $t9, 0xb @@ -871,14 +872,14 @@ glabel video_related_8 /* 0043DC 700037DC AC6F0040 */ sw $t7, 0x40($v1) /* 0043E0 700037E0 850E0018 */ lh $t6, 0x18($t0) /* 0043E4 700037E4 15800002 */ bnez $t4, .L700037F0 -/* 0043E8 700037E8 00000000 */ nop +/* 0043E8 700037E8 00000000 */ nop /* 0043EC 700037EC 0007000D */ break 7 .L700037F0: /* 0043F0 700037F0 2401FFFF */ li $at, -1 /* 0043F4 700037F4 15810004 */ bne $t4, $at, .L70003808 /* 0043F8 700037F8 3C018000 */ lui $at, 0x8000 /* 0043FC 700037FC 17010002 */ bne $t8, $at, .L70003808 -/* 004400 70003800 00000000 */ nop +/* 004400 70003800 00000000 */ nop /* 004404 70003804 0006000D */ break 6 .L70003808: /* 004408 70003808 000EC840 */ sll $t9, $t6, 1 @@ -892,14 +893,14 @@ glabel video_related_8 /* 004428 70003828 0327C021 */ addu $t8, $t9, $a3 /* 00442C 7000382C 0306001A */ div $zero, $t8, $a2 /* 004430 70003830 14C00002 */ bnez $a2, .L7000383C -/* 004434 70003834 00000000 */ nop +/* 004434 70003834 00000000 */ nop /* 004438 70003838 0007000D */ break 7 .L7000383C: /* 00443C 7000383C 2401FFFF */ li $at, -1 /* 004440 70003840 14C10004 */ bne $a2, $at, .L70003854 /* 004444 70003844 3C018000 */ lui $at, 0x8000 /* 004448 70003848 17010002 */ bne $t8, $at, .L70003854 -/* 00444C 7000384C 00000000 */ nop +/* 00444C 7000384C 00000000 */ nop /* 004450 70003850 0006000D */ break 6 .L70003854: /* 004454 70003854 3059FFFF */ andi $t9, $v0, 0xffff @@ -908,14 +909,14 @@ glabel video_related_8 /* 004460 70003860 000F7400 */ sll $t6, $t7, 0x10 /* 004464 70003864 0306001A */ div $zero, $t8, $a2 /* 004468 70003868 14C00002 */ bnez $a2, .L70003874 -/* 00446C 7000386C 00000000 */ nop +/* 00446C 7000386C 00000000 */ nop /* 004470 70003870 0007000D */ break 7 .L70003874: /* 004474 70003874 2401FFFF */ li $at, -1 /* 004478 70003878 14C10004 */ bne $a2, $at, .L7000388C /* 00447C 7000387C 3C018000 */ lui $at, 0x8000 /* 004480 70003880 17010002 */ bne $t8, $at, .L7000388C -/* 004484 70003884 00000000 */ nop +/* 004484 70003884 00000000 */ nop /* 004488 70003888 0006000D */ break 6 .L7000388C: /* 00448C 7000388C 00007810 */ mfhi $t7 @@ -930,14 +931,14 @@ glabel video_related_8 /* 0044B0 700038B0 03057021 */ addu $t6, $t8, $a1 /* 0044B4 700038B4 01C6001A */ div $zero, $t6, $a2 /* 0044B8 700038B8 14C00002 */ bnez $a2, .L700038C4 -/* 0044BC 700038BC 00000000 */ nop +/* 0044BC 700038BC 00000000 */ nop /* 0044C0 700038C0 0007000D */ break 7 .L700038C4: /* 0044C4 700038C4 2401FFFF */ li $at, -1 /* 0044C8 700038C8 14C10004 */ bne $a2, $at, .L700038DC /* 0044CC 700038CC 3C018000 */ lui $at, 0x8000 /* 0044D0 700038D0 15C10002 */ bne $t6, $at, .L700038DC -/* 0044D4 700038D4 00000000 */ nop +/* 0044D4 700038D4 00000000 */ nop /* 0044D8 700038D8 0006000D */ break 6 .L700038DC: /* 0044DC 700038DC 3058FFFF */ andi $t8, $v0, 0xffff @@ -946,14 +947,14 @@ glabel video_related_8 /* 0044E8 700038E8 000FCC00 */ sll $t9, $t7, 0x10 /* 0044EC 700038EC 01C6001A */ div $zero, $t6, $a2 /* 0044F0 700038F0 14C00002 */ bnez $a2, .L700038FC -/* 0044F4 700038F4 00000000 */ nop +/* 0044F4 700038F4 00000000 */ nop /* 0044F8 700038F8 0007000D */ break 7 .L700038FC: /* 0044FC 700038FC 2401FFFF */ li $at, -1 /* 004500 70003900 14C10004 */ bne $a2, $at, .L70003914 /* 004504 70003904 3C018000 */ lui $at, 0x8000 /* 004508 70003908 15C10002 */ bne $t6, $at, .L70003914 -/* 00450C 7000390C 00000000 */ nop +/* 00450C 7000390C 00000000 */ nop /* 004510 70003910 0006000D */ break 6 .L70003914: /* 004514 70003914 00007810 */ mfhi $t7 @@ -967,14 +968,14 @@ glabel video_related_8 /* 004534 70003934 01C5C821 */ addu $t9, $t6, $a1 /* 004538 70003938 0326001A */ div $zero, $t9, $a2 /* 00453C 7000393C 14C00002 */ bnez $a2, .L70003948 -/* 004540 70003940 00000000 */ nop +/* 004540 70003940 00000000 */ nop /* 004544 70003944 0007000D */ break 7 .L70003948: /* 004548 70003948 2401FFFF */ li $at, -1 /* 00454C 7000394C 14C10004 */ bne $a2, $at, .L70003960 /* 004550 70003950 3C018000 */ lui $at, 0x8000 /* 004554 70003954 17210002 */ bne $t9, $at, .L70003960 -/* 004558 70003958 00000000 */ nop +/* 004558 70003958 00000000 */ nop /* 00455C 7000395C 0006000D */ break 6 .L70003960: /* 004560 70003960 304EFFFF */ andi $t6, $v0, 0xffff @@ -984,14 +985,14 @@ glabel video_related_8 /* 004570 70003970 240E0001 */ li $t6, 1 /* 004574 70003974 0326001A */ div $zero, $t9, $a2 /* 004578 70003978 14C00002 */ bnez $a2, .L70003984 -/* 00457C 7000397C 00000000 */ nop +/* 00457C 7000397C 00000000 */ nop /* 004580 70003980 0007000D */ break 7 .L70003984: /* 004584 70003984 2401FFFF */ li $at, -1 /* 004588 70003988 14C10004 */ bne $a2, $at, .L7000399C /* 00458C 7000398C 3C018000 */ lui $at, 0x8000 /* 004590 70003990 17210002 */ bne $t9, $at, .L7000399C -/* 004594 70003994 00000000 */ nop +/* 004594 70003994 00000000 */ nop /* 004598 70003998 0006000D */ break 6 .L7000399C: /* 00459C 7000399C 00007810 */ mfhi $t7 @@ -1006,7 +1007,7 @@ glabel video_related_8 .L700039C0: /* 0045C0 700039C0 3C018002 */ lui $at, %hi(g_ViChangeVideoModes) /* 0045C4 700039C4 00290821 */ addu $at, $at, $t1 -/* 0045C8 700039C8 3C0B8002 */ lui $t3, %hi(g_viColorOutputMode) +/* 0045C8 700039C8 3C0B8002 */ lui $t3, %hi(g_viColorOutputMode) /* 0045CC 700039CC 8D6B32AC */ lw $t3, %lo(g_viColorOutputMode)($t3) /* 0045D0 700039D0 AC2030C4 */ sw $zero, %lo(g_ViChangeVideoModes)($at) .L700039D4: @@ -1014,19 +1015,19 @@ glabel video_related_8 /* 0045D8 700039D8 05410004 */ bgez $t2, .L700039EC /* 0045DC 700039DC 31590001 */ andi $t9, $t2, 1 /* 0045E0 700039E0 13200002 */ beqz $t9, .L700039EC -/* 0045E4 700039E4 00000000 */ nop +/* 0045E4 700039E4 00000000 */ nop /* 0045E8 700039E8 2739FFFE */ addiu $t9, $t9, -2 .L700039EC: /* 0045EC 700039EC 3C018002 */ lui $at, %hi(D_800232C0) /* 0045F0 700039F0 11600006 */ beqz $t3, .L70003A0C /* 0045F4 700039F4 AC3932C0 */ sw $t9, %lo(D_800232C0)($at) -/* 0045F8 700039F8 3C0F8005 */ lui $t7, %hi(g_gfxTaskSettingsList) +/* 0045F8 700039F8 3C0F8005 */ lui $t7, %hi(g_gfxTaskSettingsList) /* 0045FC 700039FC 8DEFEAB0 */ lw $t7, %lo(g_gfxTaskSettingsList)($t7) /* 004600 70003A00 8D180028 */ lw $t8, 0x28($t0) /* 004604 70003A04 10000006 */ b .L70003A20 /* 004608 70003A08 ADF80058 */ sw $t8, 0x58($t7) .L70003A0C: -/* 00460C 70003A0C 3C198005 */ lui $t9, %hi(g_gfxTaskSettingsList) +/* 00460C 70003A0C 3C198005 */ lui $t9, %hi(g_gfxTaskSettingsList) /* 004610 70003A10 8F39EAB0 */ lw $t9, %lo(g_gfxTaskSettingsList)($t9) /* 004614 70003A14 3C0E803B */ lui $t6, %hi(cfb_16) # $t6, 0x803b /* 004618 70003A18 25CE5000 */ addiu $t6, %lo(cfb_16) # addiu $t6, $t6, 0x5000 @@ -1047,7 +1048,7 @@ glabel video_related_8 /* 004650 70003A50 05E10004 */ bgez $t7, .L70003A64 /* 004654 70003A54 31EE0001 */ andi $t6, $t7, 1 /* 004658 70003A58 11C00002 */ beqz $t6, .L70003A64 -/* 00465C 70003A5C 00000000 */ nop +/* 00465C 70003A5C 00000000 */ nop /* 004660 70003A60 25CEFFFE */ addiu $t6, $t6, -2 .L70003A64: /* 004664 70003A64 A04E0000 */ sb $t6, ($v0) @@ -1055,7 +1056,7 @@ glabel video_related_8 /* 00466C 70003A6C 07010004 */ bgez $t8, .L70003A80 /* 004670 70003A70 330F0001 */ andi $t7, $t8, 1 /* 004674 70003A74 11E00002 */ beqz $t7, .L70003A80 -/* 004678 70003A78 00000000 */ nop +/* 004678 70003A78 00000000 */ nop /* 00467C 70003A7C 25EFFFFE */ addiu $t7, $t7, -2 .L70003A80: /* 004680 70003A80 01C80019 */ multu $t6, $t0 @@ -1082,7 +1083,7 @@ glabel video_related_8 /* 0046D4 70003AD4 01F87823 */ subu $t7, $t7, $t8 /* 0046D8 70003AD8 000F7880 */ sll $t7, $t7, 2 /* 0046DC 70003ADC 01F87823 */ subu $t7, $t7, $t8 -/* 0046E0 70003AE0 3C188002 */ lui $t8, %hi(g_ViBackData) +/* 0046E0 70003AE0 3C188002 */ lui $t8, %hi(g_ViBackData) /* 0046E4 70003AE4 8F1832A8 */ lw $t8, %lo(g_ViBackData)($t8) /* 0046E8 70003AE8 000F7AC0 */ sll $t7, $t7, 0xb /* 0046EC 70003AEC 01EEC821 */ addu $t9, $t7, $t6 @@ -1090,7 +1091,7 @@ glabel video_related_8 /* 0046F4 70003AF4 8FBF0014 */ lw $ra, 0x14($sp) /* 0046F8 70003AF8 27BD0018 */ addiu $sp, $sp, 0x18 /* 0046FC 70003AFC 03E00008 */ jr $ra -/* 004700 70003B00 00000000 */ nop +/* 004700 70003B00 00000000 */ nop ) #endif #ifdef VERSION_EU @@ -1116,15 +1117,15 @@ glabel video_related_8 /* 003A4C 70002E4C 10610043 */ beq $v1, $at, .L70002F5C /* 003A50 70002E50 3C0E8002 */ lui $t6, 0x8002 # fixme? /* 003A54 70002E54 10000050 */ b .L70002F98 -/* 003A58 70002E58 00000000 */ nop +/* 003A58 70002E58 00000000 */ nop .L70002E5C: /* 003A5C 70002E5C 44816000 */ mtc1 $at, $f12 /* 003A60 70002E60 0C003300 */ jal osViSetYScale -/* 003A64 70002E64 00000000 */ nop +/* 003A64 70002E64 00000000 */ nop /* 003A68 70002E68 0C003334 */ jal osViBlack /* 003A6C 70002E6C 24040001 */ li $a0, 1 /* 003A70 70002E70 10000049 */ b .L70002F98 -/* 003A74 70002E74 00000000 */ nop +/* 003A74 70002E74 00000000 */ nop .L70002E78: /* 003A78 70002E78 8F18114C */ lw $t8, %lo(g_viColorOutputMode)($t8) /* 003A7C 70002E7C 3C038005 */ lui $v1, %hi(viMode) # $v1, 0x8005 @@ -1186,7 +1187,7 @@ glabel video_related_8 /* 003B4C 70002F4C 0C000B41 */ jal frBlack /* 003B50 70002F50 AC2F3E58 */ sw $t7, %lo(viMode+0xC)($at) /* 003B54 70002F54 10000010 */ b .L70002F98 -/* 003B58 70002F58 00000000 */ nop +/* 003B58 70002F58 00000000 */ nop .L70002F5C: /* 003B5C 70002F5C 3C038005 */ lui $v1, %hi(viMode) # $v1, 0x8005 /* 003B60 70002F60 24633E4C */ addiu $v1, %lo(viMode) # addiu $v1, $v1, 0x3e4c @@ -1233,7 +1234,7 @@ glabel video_related_8 /* 003BFC 70002FFC 14600003 */ bnez $v1, .L7000300C /* 003C00 70003000 46089003 */ div.s $f0, $f18, $f8 /* 003C04 70003004 44810000 */ mtc1 $at, $f0 -/* 003C08 70003008 00000000 */ nop +/* 003C08 70003008 00000000 */ nop .L7000300C: /* 003C0C 7000300C 8FFF1160 */ lw $ra, %lo(D_800232C0)($ra) /* 003C10 70003010 3C018002 */ lui $at, %hi(g_ViXScales) @@ -1246,7 +1247,7 @@ glabel video_related_8 /* 003C2C 7000302C 90EE0000 */ lbu $t6, ($a3) /* 003C30 70003030 24010001 */ li $at, 1 /* 003C34 70003034 15C100F2 */ bne $t6, $at, .L70003400 -/* 003C38 70003038 00000000 */ nop +/* 003C38 70003038 00000000 */ nop /* 003C3C 7000303C 8DAD114C */ lw $t5, %lo(g_viColorOutputMode)($t5) /* 003C40 70003040 3C018005 */ lui $at, %hi(g_ViModePtrs) /* 003C44 70003044 002C0821 */ addu $at, $at, $t4 @@ -1326,14 +1327,14 @@ glabel video_related_8 /* 003D58 70003158 AC8E002C */ sw $t6, 0x2c($a0) /* 003D5C 7000315C 84E5001A */ lh $a1, 0x1a($a3) /* 003D60 70003160 17200002 */ bnez $t9, .L7000316C -/* 003D64 70003164 00000000 */ nop +/* 003D64 70003164 00000000 */ nop /* 003D68 70003168 0007000D */ break 7 .L7000316C: /* 003D6C 7000316C 2401FFFF */ li $at, -1 /* 003D70 70003170 17210004 */ bne $t9, $at, .L70003184 /* 003D74 70003174 3C018000 */ lui $at, 0x8000 /* 003D78 70003178 15E10002 */ bne $t7, $at, .L70003184 -/* 003D7C 7000317C 00000000 */ nop +/* 003D7C 7000317C 00000000 */ nop /* 003D80 70003180 0006000D */ break 6 .L70003184: /* 003D84 70003184 00001025 */ move $v0, $zero @@ -1348,14 +1349,14 @@ glabel video_related_8 /* 003DA4 700031A4 AC990040 */ sw $t9, 0x40($a0) /* 003DA8 700031A8 84EE0018 */ lh $t6, 0x18($a3) /* 003DAC 700031AC 15E00002 */ bnez $t7, .L700031B8 -/* 003DB0 700031B0 00000000 */ nop +/* 003DB0 700031B0 00000000 */ nop /* 003DB4 700031B4 0007000D */ break 7 .L700031B8: /* 003DB8 700031B8 2401FFFF */ li $at, -1 /* 003DBC 700031BC 15E10004 */ bne $t7, $at, .L700031D0 /* 003DC0 700031C0 3C018000 */ lui $at, 0x8000 /* 003DC4 700031C4 17010002 */ bne $t8, $at, .L700031D0 -/* 003DC8 700031C8 00000000 */ nop +/* 003DC8 700031C8 00000000 */ nop /* 003DCC 700031CC 0006000D */ break 6 .L700031D0: /* 003DD0 700031D0 000EC040 */ sll $t8, $t6, 1 @@ -1371,14 +1372,14 @@ glabel video_related_8 /* 003DF8 700031F8 03037821 */ addu $t7, $t8, $v1 /* 003DFC 700031FC 01EA001A */ div $zero, $t7, $t2 /* 003E00 70003200 15400002 */ bnez $t2, .L7000320C -/* 003E04 70003204 00000000 */ nop +/* 003E04 70003204 00000000 */ nop /* 003E08 70003208 0007000D */ break 7 .L7000320C: /* 003E0C 7000320C 2401FFFF */ li $at, -1 /* 003E10 70003210 15410004 */ bne $t2, $at, .L70003224 /* 003E14 70003214 3C018000 */ lui $at, 0x8000 /* 003E18 70003218 15E10002 */ bne $t7, $at, .L70003224 -/* 003E1C 7000321C 00000000 */ nop +/* 003E1C 7000321C 00000000 */ nop /* 003E20 70003220 0006000D */ break 6 .L70003224: /* 003E24 70003224 30D8FFFF */ andi $t8, $a2, 0xffff @@ -1387,14 +1388,14 @@ glabel video_related_8 /* 003E30 70003230 00197400 */ sll $t6, $t9, 0x10 /* 003E34 70003234 01EA001A */ div $zero, $t7, $t2 /* 003E38 70003238 15400002 */ bnez $t2, .L70003244 -/* 003E3C 7000323C 00000000 */ nop +/* 003E3C 7000323C 00000000 */ nop /* 003E40 70003240 0007000D */ break 7 .L70003244: /* 003E44 70003244 2401FFFF */ li $at, -1 /* 003E48 70003248 15410004 */ bne $t2, $at, .L7000325C /* 003E4C 7000324C 3C018000 */ lui $at, 0x8000 /* 003E50 70003250 15E10002 */ bne $t7, $at, .L7000325C -/* 003E54 70003254 00000000 */ nop +/* 003E54 70003254 00000000 */ nop /* 003E58 70003258 0006000D */ break 6 .L7000325C: /* 003E5C 7000325C 0000C810 */ mfhi $t9 @@ -1406,12 +1407,12 @@ glabel video_related_8 /* 003E74 70003274 8C860030 */ lw $a2, 0x30($a0) /* 003E78 70003278 00001825 */ move $v1, $zero /* 003E7C 7000327C 15650003 */ bne $t3, $a1, .L7000328C -/* 003E80 70003280 00000000 */ nop +/* 003E80 70003280 00000000 */ nop /* 003E84 70003284 10000001 */ b .L7000328C /* 003E88 70003288 2409FFF2 */ li $t1, -14 .L7000328C: /* 003E8C 7000328C 15650003 */ bne $t3, $a1, .L7000329C -/* 003E90 70003290 00000000 */ nop +/* 003E90 70003290 00000000 */ nop /* 003E94 70003294 10000001 */ b .L7000329C /* 003E98 70003298 2403000E */ li $v1, 14 .L7000329C: @@ -1423,14 +1424,14 @@ glabel video_related_8 /* 003EB0 700032B0 032A001A */ div $zero, $t9, $t2 /* 003EB4 700032B4 00067C03 */ sra $t7, $a2, 0x10 /* 003EB8 700032B8 15400002 */ bnez $t2, .L700032C4 -/* 003EBC 700032BC 00000000 */ nop +/* 003EBC 700032BC 00000000 */ nop /* 003EC0 700032C0 0007000D */ break 7 .L700032C4: /* 003EC4 700032C4 2401FFFF */ li $at, -1 /* 003EC8 700032C8 15410004 */ bne $t2, $at, .L700032DC /* 003ECC 700032CC 3C018000 */ lui $at, 0x8000 /* 003ED0 700032D0 17210002 */ bne $t9, $at, .L700032DC -/* 003ED4 700032D4 00000000 */ nop +/* 003ED4 700032D4 00000000 */ nop /* 003ED8 700032D8 0006000D */ break 6 .L700032DC: /* 003EDC 700032DC 31EEFFFF */ andi $t6, $t7, 0xffff @@ -1441,14 +1442,14 @@ glabel video_related_8 /* 003EF0 700032F0 00001825 */ move $v1, $zero /* 003EF4 700032F4 01EA001A */ div $zero, $t7, $t2 /* 003EF8 700032F8 15400002 */ bnez $t2, .L70003304 -/* 003EFC 700032FC 00000000 */ nop +/* 003EFC 700032FC 00000000 */ nop /* 003F00 70003300 0007000D */ break 7 .L70003304: /* 003F04 70003304 2401FFFF */ li $at, -1 /* 003F08 70003308 15410004 */ bne $t2, $at, .L7000331C /* 003F0C 7000330C 3C018000 */ lui $at, 0x8000 /* 003F10 70003310 15E10002 */ bne $t7, $at, .L7000331C -/* 003F14 70003314 00000000 */ nop +/* 003F14 70003314 00000000 */ nop /* 003F18 70003318 0006000D */ break 6 .L7000331C: /* 003F1C 7000331C 00007010 */ mfhi $t6 @@ -1465,7 +1466,7 @@ glabel video_related_8 /* 003F48 70003348 2409FFF2 */ li $t1, -14 .L7000334C: /* 003F4C 7000334C 15650003 */ bne $t3, $a1, .L7000335C -/* 003F50 70003350 00000000 */ nop +/* 003F50 70003350 00000000 */ nop /* 003F54 70003354 10000001 */ b .L7000335C /* 003F58 70003358 2403000E */ li $v1, 14 .L7000335C: @@ -1475,32 +1476,32 @@ glabel video_related_8 /* 003F68 70003368 032A001A */ div $zero, $t9, $t2 /* 003F6C 7000336C 00067403 */ sra $t6, $a2, 0x10 /* 003F70 70003370 15400002 */ bnez $t2, .L7000337C -/* 003F74 70003374 00000000 */ nop +/* 003F74 70003374 00000000 */ nop /* 003F78 70003378 0007000D */ break 7 .L7000337C: /* 003F7C 7000337C 2401FFFF */ li $at, -1 /* 003F80 70003380 15410004 */ bne $t2, $at, .L70003394 /* 003F84 70003384 3C018000 */ lui $at, 0x8000 /* 003F88 70003388 17210002 */ bne $t9, $at, .L70003394 -/* 003F8C 7000338C 00000000 */ nop +/* 003F8C 7000338C 00000000 */ nop /* 003F90 70003390 0006000D */ break 6 .L70003394: /* 003F94 70003394 31D8FFFF */ andi $t8, $t6, 0xffff /* 003F98 70003398 0308C821 */ addu $t9, $t8, $t0 /* 003F9C 7000339C 03297021 */ addu $t6, $t9, $t1 /* 003FA0 700033A0 00007810 */ mfhi $t7 -/* 003FA4 700033A4 00000000 */ nop -/* 003FA8 700033A8 00000000 */ nop +/* 003FA4 700033A4 00000000 */ nop +/* 003FA8 700033A8 00000000 */ nop /* 003FAC 700033AC 01CA001A */ div $zero, $t6, $t2 /* 003FB0 700033B0 15400002 */ bnez $t2, .L700033BC -/* 003FB4 700033B4 00000000 */ nop +/* 003FB4 700033B4 00000000 */ nop /* 003FB8 700033B8 0007000D */ break 7 .L700033BC: /* 003FBC 700033BC 2401FFFF */ li $at, -1 /* 003FC0 700033C0 15410004 */ bne $t2, $at, .L700033D4 /* 003FC4 700033C4 3C018000 */ lui $at, 0x8000 /* 003FC8 700033C8 15C10002 */ bne $t6, $at, .L700033D4 -/* 003FCC 700033CC 00000000 */ nop +/* 003FCC 700033CC 00000000 */ nop /* 003FD0 700033D0 0006000D */ break 6 .L700033D4: /* 003FD4 700033D4 0000C010 */ mfhi $t8 @@ -1525,7 +1526,7 @@ glabel video_related_8 /* 004018 70003418 07E10004 */ bgez $ra, .L7000342C /* 00401C 7000341C 33F80001 */ andi $t8, $ra, 1 /* 004020 70003420 13000002 */ beqz $t8, .L7000342C -/* 004024 70003424 00000000 */ nop +/* 004024 70003424 00000000 */ nop /* 004028 70003428 2718FFFE */ addiu $t8, $t8, -2 .L7000342C: /* 00402C 7000342C 3C018002 */ lui $at, %hi(D_800232C0) # $at, 0x8002 @@ -1558,7 +1559,7 @@ glabel video_related_8 /* 004090 70003490 07210004 */ bgez $t9, .L700034A4 /* 004094 70003494 332E0001 */ andi $t6, $t9, 1 /* 004098 70003498 11C00002 */ beqz $t6, .L700034A4 -/* 00409C 7000349C 00000000 */ nop +/* 00409C 7000349C 00000000 */ nop /* 0040A0 700034A0 25CEFFFE */ addiu $t6, $t6, -2 .L700034A4: /* 0040A4 700034A4 A04E0000 */ sb $t6, ($v0) @@ -1567,7 +1568,7 @@ glabel video_related_8 /* 0040B0 700034B0 05E10004 */ bgez $t7, .L700034C4 /* 0040B4 700034B4 31F90001 */ andi $t9, $t7, 1 /* 0040B8 700034B8 13200002 */ beqz $t9, .L700034C4 -/* 0040BC 700034BC 00000000 */ nop +/* 0040BC 700034BC 00000000 */ nop /* 0040C0 700034C0 2739FFFE */ addiu $t9, $t9, -2 .L700034C4: /* 0040C4 700034C4 01C80019 */ multu $t6, $t0 @@ -1605,7 +1606,7 @@ glabel video_related_8 /* 004144 70003544 8FBF0014 */ lw $ra, 0x14($sp) /* 004148 70003548 27BD0018 */ addiu $sp, $sp, 0x18 /* 00414C 7000354C 03E00008 */ jr $ra -/* 004150 70003550 00000000 */ nop +/* 004150 70003550 00000000 */ nop ) #endif #endif @@ -1691,7 +1692,7 @@ Gfx *video_related_F(Gfx *gdl) } gSPViewport(gdl++, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->viewports[g_ViBackIndex])); - g_viProjectionMatrix = dynAllocateMatrix(); + g_viProjectionMatrix = dynAllocateMatrix(); guPerspectiveF(g_viProjectionMatrixF, &g_viPerspNorm, g_ViBackData->fovy, g_ViBackData->aspect, g_ViBackData->znear, g_ViBackData->zfar, 1.0f); guMtxF2L(g_viProjectionMatrixF, g_viProjectionMatrix); gSPMatrix(gdl++, OS_K0_TO_PHYSICAL(g_viProjectionMatrix), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); @@ -1926,7 +1927,7 @@ Gfx *viSetFillColor(Gfx *gdl, s32 r, s32 g, s32 b) { gDPSetFillColor(gdl++, ((r << 24) | (g << 16) | (b << 8) | 0xFF)); } - + return gdl; } @@ -1951,7 +1952,7 @@ void indyGrabJpg16bit(void) *pgrabnum = *pgrabnum + 1; } - + sprintf(buffer, "grab.%d.temp.uix", *pgrabnum); indycommHostSendDump((u8*)&buffer, (u8*)g_ViBackData->framebuf, (viGetX() * viGetY() * 2)); @@ -1978,7 +1979,7 @@ void indyGrabJpg16bit(void) */ void indyGrabJpg32bit(void) { - #if defined(LEFTOVERDEBUG) + #if defined(LEFTOVERDEBUG) s32 *pgrabnum = &g_indyJpg32BitGrabnum; char buffer[250]; s32 filesize; @@ -1993,7 +1994,7 @@ void indyGrabJpg32bit(void) *pgrabnum = *pgrabnum + 1; } - + sprintf(buffer, "grab.%d.temp.Uix", *pgrabnum); indycommHostSendDump((u8*)&buffer, (u8*)&cfb_16, (viGetX() * viGetY() * 4)); @@ -2035,7 +2036,7 @@ void indyGrabRgb16bit(void) *pgrabnum = *pgrabnum + 1; } - + sprintf(buffer, "grab.%d.temp.uix", *pgrabnum); indycommHostSendDump((u8*)&buffer, (u8*)g_ViBackData->framebuf, (viGetX() * viGetY() * 2)); @@ -2074,7 +2075,7 @@ void indyGrabRgb32bit(void) *pgrabnum = *pgrabnum + 1; } - + sprintf(buffer, "grab.%d.temp.Uix", *pgrabnum); indycommHostSendDump((u8*)&buffer, (u8*)&cfb_16, (viGetX() * viGetY() * 4)); diff --git a/src/game/alloc_window_pieces.c b/src/game/alloc_window_pieces.c index e0451da..4cd04c8 100644 --- a/src/game/alloc_window_pieces.c +++ b/src/game/alloc_window_pieces.c @@ -10,18 +10,18 @@ void alloc_shattered_window_pieces(void) { s32 i; s32 level = lvlGetCurrentStageToLoad(); - + SHATTERED_WINDOW_PIECES_BUFFER_LEN = (200 / getPlayerCount()); if ((level == LEVELID_STREETS) || (level == LEVELID_DEPOT)) { SHATTERED_WINDOW_PIECES_BUFFER_LEN = (SHATTERED_WINDOW_PIECES_BUFFER_LEN >> 1); } - ptr_shattered_window_pieces = mempAllocBytesInBank(((SHATTERED_WINDOW_PIECES_BUFFER_LEN * 0x68) + 0xF) & ~0xF, 4U); + ptr_shattered_window_pieces = mempAllocBytesInBank(((SHATTERED_WINDOW_PIECES_BUFFER_LEN * 0x68) + 0xF) & ~0xF, MEMPOOL_STAGE); for(i=0; iportallist; + if (levelentry_index == currentPortal->levelid) { + portalId = *portalList; + do { + portalIndex = portalId & 0xFF; + portalIndex2 = portalIndex; + if ((s32) portalList[1] >= portalIndex) { + do { + portalData = &g_BgPortals[portalIndex2]; + controlByte = portalData->controlbytes1; + portalIndex2 = (portalIndex + 1) & 0xFF; + portalIndex = portalIndex2; + portalData->controlbytes1 = controlByte | 2; + } while ((s32) portalList[1] >= portalIndex2); + } + portalId = portalList[2]; + portalList += 2; + } while (portalId != 0xFF); } else { - portals = specialportalarray[i].portallist; - for ( p=0; portals[p] != 0xFF; p++) - { - ; - } + do { + tempByte = portalList[2]; + portalList += 2; + } while (tempByte != 0xFF); } - } + currentPortal = (s_specialportal* ) (portalList + 1); + } while ((u32) currentPortal < (u32) &g_BgCurrentRoom); } #else GLOBAL_ASM( @@ -682,7 +691,7 @@ GLOBAL_ASM( glabel sub_GAME_7F0B37EC /* 0E831C 7F0B37EC 3C028004 */ lui $v0, %hi(specialportalarray) /* 0E8320 7F0B37F0 3C038004 */ lui $v1, %hi(g_BgCurrentRoom) -/* 0E8324 7F0B37F4 3C088008 */ lui $t0, %hi(g_BgPortals) +/* 0E8324 7F0B37F4 3C088008 */ lui $t0, %hi(g_BgPortals) /* 0E8328 7F0B37F8 3C078004 */ lui $a3, %hi(levelentry_index) /* 0E832C 7F0B37FC 24424824 */ addiu $v0, %lo(specialportalarray) # addiu $v0, $v0, 0x4824 /* 0E8330 7F0B3800 24634838 */ addiu $v1, %lo(g_BgCurrentRoom) # addiu $v1, $v1, 0x4838 @@ -735,7 +744,7 @@ glabel sub_GAME_7F0B37EC /* 0E83D4 7F0B38A4 5420FFDB */ bnezl $at, .L7F0B3814 /* 0E83D8 7F0B38A8 8CEE0000 */ lw $t6, ($a3) /* 0E83DC 7F0B38AC 03E00008 */ jr $ra -/* 0E83E0 7F0B38B0 00000000 */ nop +/* 0E83E0 7F0B38B0 00000000 */ nop ) #endif @@ -762,11 +771,11 @@ glabel sub_GAME_7F0B38B4 /* 0E8400 7F0B38D0 02002025 */ move $a0, $s0 .L7F0B38D4: /* 0E8404 7F0B38D4 1062000B */ beq $v1, $v0, .L7F0B3904 -/* 0E8408 7F0B38D8 00000000 */ nop +/* 0E8408 7F0B38D8 00000000 */ nop /* 0E840C 7F0B38DC 92020001 */ lbu $v0, 1($s0) /* 0E8410 7F0B38E0 26100001 */ addiu $s0, $s0, 1 /* 0E8414 7F0B38E4 1440FFFB */ bnez $v0, .L7F0B38D4 -/* 0E8418 7F0B38E8 00000000 */ nop +/* 0E8418 7F0B38E8 00000000 */ nop /* 0E841C 7F0B38EC 920E0001 */ lbu $t6, 1($s0) .L7F0B38F0: /* 0E8420 7F0B38F0 26100001 */ addiu $s0, $s0, 1 @@ -844,11 +853,11 @@ glabel sub_GAME_7F0B38B4 /* 0E5580 7F0B2B90 02002025 */ move $a0, $s0 .L7F0B2B94: /* 0E5584 7F0B2B94 1062000B */ beq $v1, $v0, .L7F0B2BC4 -/* 0E5588 7F0B2B98 00000000 */ nop +/* 0E5588 7F0B2B98 00000000 */ nop /* 0E558C 7F0B2B9C 92020001 */ lbu $v0, 1($s0) /* 0E5590 7F0B2BA0 26100001 */ addiu $s0, $s0, 1 /* 0E5594 7F0B2BA4 1440FFFB */ bnez $v0, .L7F0B2B94 -/* 0E5598 7F0B2BA8 00000000 */ nop +/* 0E5598 7F0B2BA8 00000000 */ nop /* 0E559C 7F0B2BAC 920E0001 */ lbu $t6, 1($s0) .L7F0B2BB0: /* 0E55A0 7F0B2BB0 26100001 */ addiu $s0, $s0, 1 @@ -918,38 +927,61 @@ glabel sub_GAME_7F0B38B4 #ifdef NONMATCHING -void sub_GAME_7F0B39BC(int curroom,int unk1, bbox2d * screensize,s32 next) +/** + * Address 0x7F0B39BC. + * + * decomp status: + * - compiles: ? + * - stack resize: ? + * - identical instructions: fail + * - identical registers: fail + * + * https://decomp.me/scratch/GKQcb + * +*/ +s32 sub_GAME_7F0B39BC(int curroom,int unk1, bbox2d * screensize, s32 next) { int i; - - array_room_info[curroom].bitflags0 = '\x01'; - - if (array_room_info[curroom].room_loaded_mask == '\0') { - for (i = 0; i < g_BgNumberOfRoomsDrawn; i++) - { - if (curroom == dword_CODE_bss_8007FFA0[i].roomid) { - if (dword_CODE_bss_8007FFA0[i].unk1 < unk1) { - dword_CODE_bss_8007FFA0[i].unk1 = unk1; - } - sub_GAME_7F0B5CC0(screensize,&dword_CODE_bss_8007FFA0[i].bbox); - dword_CODE_bss_8007FFA0[i].bbox.min.x = screensize->min.x; - dword_CODE_bss_8007FFA0[i].bbox.min.y = screensize->min.y; - dword_CODE_bss_8007FFA0[i].bbox.max.x = screensize->max.x; - dword_CODE_bss_8007FFA0[i].bbox.max.y = screensize->max.y; - dword_CODE_bss_8007FFA0[i].next = next; - - return; - } - } - dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].roomid = curroom; - dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].unk1 = unk1; - dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].bbox.min.x = screensize->min.x; - dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].bbox.min.y = screensize->min.y; - dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].bbox.max.x = screensize->max.x; - dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].bbox.max.y = screensize->max.y; - dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].next = next; + int temp; + + g_BgRoomInfo[curroom].room_rendered = '\x01'; + + if (g_BgRoomInfo[curroom].room_loaded_mask != '\0') { + return 0; } - return; + + // Need g_BgNumberOfRoomsDrawn in a3 + for (i = 0; i < g_BgNumberOfRoomsDrawn; i++) + { + if (curroom == dword_CODE_bss_8007FFA0[i].roomid) { + if (dword_CODE_bss_8007FFA0[i].unk1 < unk1) { + dword_CODE_bss_8007FFA0[i].unk1 = unk1; + } + sub_GAME_7F0B5CC0(screensize,&dword_CODE_bss_8007FFA0[i].bbox); + temp = dword_CODE_bss_8007FFA0[i].next; + dword_CODE_bss_8007FFA0[i].bbox.min.x = screensize->min.x; + dword_CODE_bss_8007FFA0[i].bbox.min.y = screensize->min.y; + dword_CODE_bss_8007FFA0[i].bbox.max.x = screensize->max.x; + dword_CODE_bss_8007FFA0[i].bbox.max.y = screensize->max.y; + dword_CODE_bss_8007FFA0[i].next = temp | next; + + return temp; + } + } + + dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].roomid = curroom; + dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].unk1 = unk1; + dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].bbox.min.x = screensize->min.x; + dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].bbox.min.y = screensize->min.y; + dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].bbox.max.x = screensize->max.x; + dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].bbox.max.y = screensize->max.y; + dword_CODE_bss_8007FFA0[g_BgNumberOfRoomsDrawn].next = next; + g_BgNumberOfRoomsDrawn++; + + // FAKE puts g_BgNumberOfRoomsDrawn in a3 + if (g_BgNumberOfRoomsDrawn) {} + + return 0; } #else @@ -959,8 +991,8 @@ GLOBAL_ASM( glabel sub_GAME_7F0B39BC /* 0E84EC 7F0B39BC 00047080 */ sll $t6, $a0, 2 /* 0E84F0 7F0B39C0 01C47021 */ addu $t6, $t6, $a0 -/* 0E84F4 7F0B39C4 3C0F8004 */ lui $t7, %hi(array_room_info) -/* 0E84F8 7F0B39C8 25EF1414 */ addiu $t7, %lo(array_room_info) # addiu $t7, $t7, 0x1414 +/* 0E84F4 7F0B39C4 3C0F8004 */ lui $t7, %hi(g_BgRoomInfo) +/* 0E84F8 7F0B39C8 25EF1414 */ addiu $t7, %lo(g_BgRoomInfo) # addiu $t7, $t7, 0x1414 /* 0E84FC 7F0B39CC 000E7100 */ sll $t6, $t6, 4 /* 0E8500 7F0B39D0 01CF1021 */ addu $v0, $t6, $t7 /* 0E8504 7F0B39D4 90590034 */ lbu $t9, 0x34($v0) @@ -979,7 +1011,7 @@ glabel sub_GAME_7F0B39BC /* 0E8534 7F0B3A04 24E7483C */ addiu $a3, %lo(g_BgNumberOfRoomsDrawn) # addiu $a3, $a3, 0x483c /* 0E8538 7F0B3A08 8CE40000 */ lw $a0, ($a3) /* 0E853C 7F0B3A0C 00001025 */ move $v0, $zero -/* 0E8540 7F0B3A10 3C0D8008 */ lui $t5, %hi(dword_CODE_bss_8007FFA0) +/* 0E8540 7F0B3A10 3C0D8008 */ lui $t5, %hi(dword_CODE_bss_8007FFA0) /* 0E8544 7F0B3A14 18800023 */ blez $a0, .L7F0B3AA4 /* 0E8548 7F0B3A18 000460C0 */ sll $t4, $a0, 3 /* 0E854C 7F0B3A1C 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007FFA0) @@ -989,7 +1021,7 @@ glabel sub_GAME_7F0B39BC /* 0E8558 7F0B3A28 24420001 */ addiu $v0, $v0, 1 /* 0E855C 7F0B3A2C 0044082A */ slt $at, $v0, $a0 /* 0E8560 7F0B3A30 1608001A */ bne $s0, $t0, .L7F0B3A9C -/* 0E8564 7F0B3A34 00000000 */ nop +/* 0E8564 7F0B3A34 00000000 */ nop /* 0E8568 7F0B3A38 8C690004 */ lw $t1, 4($v1) /* 0E856C 7F0B3A3C 00C02025 */ move $a0, $a2 /* 0E8570 7F0B3A40 0125082A */ slt $at, $t1, $a1 @@ -1044,7 +1076,7 @@ glabel sub_GAME_7F0B39BC /* 0E8624 7F0B3AF4 8FB00018 */ lw $s0, 0x18($sp) /* 0E8628 7F0B3AF8 27BD0030 */ addiu $sp, $sp, 0x30 /* 0E862C 7F0B3AFC 03E00008 */ jr $ra -/* 0E8630 7F0B3B00 00000000 */ nop +/* 0E8630 7F0B3B00 00000000 */ nop ) #endif @@ -1054,8 +1086,8 @@ GLOBAL_ASM( glabel sub_GAME_7F0B39BC /* 0E566C 7F0B2C7C 00047080 */ sll $t6, $a0, 2 /* 0E5670 7F0B2C80 01C47021 */ addu $t6, $t6, $a0 -/* 0E5674 7F0B2C84 3C0F8004 */ lui $t7, %hi(array_room_info) # $t7, 0x8004 -/* 0E5678 7F0B2C88 25EFAC64 */ addiu $t7, %lo(array_room_info) # addiu $t7, $t7, -0x539c +/* 0E5674 7F0B2C84 3C0F8004 */ lui $t7, %hi(g_BgRoomInfo) # $t7, 0x8004 +/* 0E5678 7F0B2C88 25EFAC64 */ addiu $t7, %lo(g_BgRoomInfo) # addiu $t7, $t7, -0x539c /* 0E567C 7F0B2C8C 000E7100 */ sll $t6, $t6, 4 /* 0E5680 7F0B2C90 01CF1021 */ addu $v0, $t6, $t7 /* 0E5684 7F0B2C94 90590034 */ lbu $t9, 0x34($v0) @@ -1084,7 +1116,7 @@ glabel sub_GAME_7F0B39BC /* 0E56D8 7F0B2CE8 24420001 */ addiu $v0, $v0, 1 /* 0E56DC 7F0B2CEC 0044082A */ slt $at, $v0, $a0 /* 0E56E0 7F0B2CF0 1609001C */ bne $s0, $t1, .L7F0B2D64 -/* 0E56E4 7F0B2CF4 00000000 */ nop +/* 0E56E4 7F0B2CF4 00000000 */ nop /* 0E56E8 7F0B2CF8 846A0002 */ lh $t2, 2($v1) /* 0E56EC 7F0B2CFC 8FAB0034 */ lw $t3, 0x34($sp) /* 0E56F0 7F0B2D00 00C02025 */ move $a0, $a2 @@ -1152,7 +1184,7 @@ glabel sub_GAME_7F0B39BC /* 0E57D4 7F0B2DE4 8FB00018 */ lw $s0, 0x18($sp) /* 0E57D8 7F0B2DE8 27BD0030 */ addiu $sp, $sp, 0x30 /* 0E57DC 7F0B2DEC 03E00008 */ jr $ra -/* 0E57E0 7F0B2DF0 00000000 */ nop +/* 0E57E0 7F0B2DF0 00000000 */ nop ) #endif @@ -1161,9 +1193,9 @@ glabel sub_GAME_7F0B39BC -void bgZeroBitflags2ForRoom(s32 roomnum) +void bgZeroPortalsToRoom(s32 roomnum) { - array_room_info[roomnum].bitflags2 = '\0'; + g_BgRoomInfo[roomnum].portals_to_room_count = '\0'; } @@ -1175,10 +1207,10 @@ void bgZeroBitflags2ForRoom(s32 roomnum) s32 sub_GAME_7F0B3B20(void) { s32 i; - + for (i=0;i b_min - 1; i--) + for (i=b_max; i >= b_min; i--) { + #ifdef DEBUG +notdone = g_BgNumberOfRoomsDrawn; +#endif + + for (j=0; j> 16) # lui $s4, 0x103 /* 0E89C8 7F0B3E98 36940040 */ ori $s4, (0x01030040 & 0xFFFF) # ori $s4, $s4, 0x40 @@ -1593,10 +1650,10 @@ glabel sub_GAME_7F0B3C8C /* 0E89F4 7F0B3EC4 0FC2F63C */ jal sub_GAME_7F0BD8F0 /* 0E89F8 7F0B3EC8 AE220004 */ sw $v0, 4($s1) /* 0E89FC 7F0B3ECC 10400006 */ beqz $v0, .L7F0B3EE8 -/* 0E8A00 7F0B3ED0 00000000 */ nop -/* 0E8A04 7F0B3ED4 0FC282AD */ jal sub_GAME_7F0A0AB4 +/* 0E8A00 7F0B3ED0 00000000 */ nop +/* 0E8A04 7F0B3ED4 0FC282AD */ jal explosionRenderScorchBuffer /* 0E8A08 7F0B3ED8 02002025 */ move $a0, $s0 -/* 0E8A0C 7F0B3EDC 0FC2875E */ jal sub_GAME_7F0A1D78 +/* 0E8A0C 7F0B3EDC 0FC2875E */ jal explosionCallRenderBulletImpactOnProp /* 0E8A10 7F0B3EE0 00402025 */ move $a0, $v0 /* 0E8A14 7F0B3EE4 00408025 */ move $s0, $v0 .L7F0B3EE8: @@ -1637,7 +1694,7 @@ glabel sub_GAME_7F0B3C8C /* 0E8A98 7F0B3F68 50400009 */ beql $v0, $zero, .L7F0B3F90 /* 0E8A9C 7F0B3F6C 02008825 */ move $s1, $s0 /* 0E8AA0 7F0B3F70 0FC2F63C */ jal sub_GAME_7F0BD8F0 -/* 0E8AA4 7F0B3F74 00000000 */ nop +/* 0E8AA4 7F0B3F74 00000000 */ nop /* 0E8AA8 7F0B3F78 10400004 */ beqz $v0, .L7F0B3F8C /* 0E8AAC 7F0B3F7C 02002025 */ move $a0, $s0 /* 0E8AB0 7F0B3F80 0FC2DA26 */ jal sub_GAME_7F0B6898 @@ -1657,9 +1714,9 @@ glabel sub_GAME_7F0B3C8C /* 0E8AE0 7F0B3FB0 0FC243D3 */ jal get_debug_do_draw_obj /* 0E8AE4 7F0B3FB4 00408025 */ move $s0, $v0 /* 0E8AE8 7F0B3FB8 10400009 */ beqz $v0, .L7F0B3FE0 -/* 0E8AEC 7F0B3FBC 00000000 */ nop +/* 0E8AEC 7F0B3FBC 00000000 */ nop /* 0E8AF0 7F0B3FC0 0FC2F63C */ jal sub_GAME_7F0BD8F0 -/* 0E8AF4 7F0B3FC4 00000000 */ nop +/* 0E8AF4 7F0B3FC4 00000000 */ nop /* 0E8AF8 7F0B3FC8 10400005 */ beqz $v0, .L7F0B3FE0 /* 0E8AFC 7F0B3FCC 02002025 */ move $a0, $s0 /* 0E8B00 7F0B3FD0 8E450000 */ lw $a1, ($s2) @@ -1677,7 +1734,7 @@ glabel sub_GAME_7F0B3C8C .L7F0B3FF8: /* 0E8B28 7F0B3FF8 26B5FFFF */ addiu $s5, $s5, -1 /* 0E8B2C 7F0B3FFC 16B6FFC0 */ bne $s5, $s6, .L7F0B3F00 -/* 0E8B30 7F0B4000 00000000 */ nop +/* 0E8B30 7F0B4000 00000000 */ nop .L7F0B4004: /* 0E8B34 7F0B4004 8FBF003C */ lw $ra, 0x3c($sp) /* 0E8B38 7F0B4008 02001025 */ move $v0, $s0 @@ -1771,7 +1828,7 @@ glabel sub_GAME_7F0B3C8C /* 0E5A94 7F0B30A4 5040000A */ beql $v0, $zero, .L7F0B30D0 /* 0E5A98 7F0B30A8 02008825 */ move $s1, $s0 /* 0E5A9C 7F0B30AC 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5AA0 7F0B30B0 00000000 */ nop +/* 0E5AA0 7F0B30B0 00000000 */ nop /* 0E5AA4 7F0B30B4 10400005 */ beqz $v0, .L7F0B30CC /* 0E5AA8 7F0B30B8 02002025 */ move $a0, $s0 /* 0E5AAC 7F0B30BC 92450000 */ lbu $a1, ($s2) @@ -1802,7 +1859,7 @@ glabel sub_GAME_7F0B3C8C /* 0E5B08 7F0B3118 50400009 */ beql $v0, $zero, .L7F0B3140 /* 0E5B0C 7F0B311C 02008825 */ move $s1, $s0 /* 0E5B10 7F0B3120 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5B14 7F0B3124 00000000 */ nop +/* 0E5B14 7F0B3124 00000000 */ nop /* 0E5B18 7F0B3128 10400004 */ beqz $v0, .L7F0B313C /* 0E5B1C 7F0B312C 02002025 */ move $a0, $s0 /* 0E5B20 7F0B3130 0FC2D6AE */ jal sub_GAME_7F0B677C @@ -1822,9 +1879,9 @@ glabel sub_GAME_7F0B3C8C /* 0E5B50 7F0B3160 0FC24104 */ jal get_debug_do_draw_obj /* 0E5B54 7F0B3164 00408025 */ move $s0, $v0 /* 0E5B58 7F0B3168 10400009 */ beqz $v0, .L7F0B3190 -/* 0E5B5C 7F0B316C 00000000 */ nop +/* 0E5B5C 7F0B316C 00000000 */ nop /* 0E5B60 7F0B3170 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5B64 7F0B3174 00000000 */ nop +/* 0E5B64 7F0B3174 00000000 */ nop /* 0E5B68 7F0B3178 10400005 */ beqz $v0, .L7F0B3190 /* 0E5B6C 7F0B317C 02002025 */ move $a0, $s0 /* 0E5B70 7F0B3180 92450000 */ lbu $a1, ($s2) @@ -1845,7 +1902,7 @@ glabel sub_GAME_7F0B3C8C /* 0E5BA0 7F0B31B0 000AAC03 */ sra $s5, $t2, 0x10 /* 0E5BA4 7F0B31B4 02D5082A */ slt $at, $s6, $s5 /* 0E5BA8 7F0B31B8 1020FFA8 */ beqz $at, .L7F0B305C -/* 0E5BAC 7F0B31BC 00000000 */ nop +/* 0E5BAC 7F0B31BC 00000000 */ nop .L7F0B31C0: /* 0E5BB0 7F0B31C0 3C140103 */ lui $s4, (0x01030040 >> 16) # lui $s4, 0x103 /* 0E5BB4 7F0B31C4 36940040 */ ori $s4, (0x01030040 & 0xFFFF) # ori $s4, $s4, 0x40 @@ -1863,9 +1920,9 @@ glabel sub_GAME_7F0B3C8C /* 0E5BE4 7F0B31F4 AE220004 */ sw $v0, 4($s1) /* 0E5BE8 7F0B31F8 50400007 */ beql $v0, $zero, .L7F0B3218 /* 0E5BEC 7F0B31FC 0016AC00 */ sll $s5, $s6, 0x10 -/* 0E5BF0 7F0B3200 0FC27FFE */ jal sub_GAME_7F0A0AB4 +/* 0E5BF0 7F0B3200 0FC27FFE */ jal explosionRenderScorchBuffer /* 0E5BF4 7F0B3204 02002025 */ move $a0, $s0 -/* 0E5BF8 7F0B3208 0FC284AF */ jal sub_GAME_7F0A1D78 +/* 0E5BF8 7F0B3208 0FC284AF */ jal explosionCallRenderBulletImpactOnProp /* 0E5BFC 7F0B320C 00402025 */ move $a0, $v0 /* 0E5C00 7F0B3210 00408025 */ move $s0, $v0 /* 0E5C04 7F0B3214 0016AC00 */ sll $s5, $s6, 0x10 @@ -1907,7 +1964,7 @@ glabel sub_GAME_7F0B3C8C /* 0E5C88 7F0B3298 50400009 */ beql $v0, $zero, .L7F0B32C0 /* 0E5C8C 7F0B329C 02008825 */ move $s1, $s0 /* 0E5C90 7F0B32A0 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5C94 7F0B32A4 00000000 */ nop +/* 0E5C94 7F0B32A4 00000000 */ nop /* 0E5C98 7F0B32A8 10400004 */ beqz $v0, .L7F0B32BC /* 0E5C9C 7F0B32AC 02002025 */ move $a0, $s0 /* 0E5CA0 7F0B32B0 0FC2D6F5 */ jal sub_GAME_7F0B6898 @@ -1927,9 +1984,9 @@ glabel sub_GAME_7F0B3C8C /* 0E5CD0 7F0B32E0 0FC24104 */ jal get_debug_do_draw_obj /* 0E5CD4 7F0B32E4 00408025 */ move $s0, $v0 /* 0E5CD8 7F0B32E8 10400009 */ beqz $v0, .L7F0B3310 -/* 0E5CDC 7F0B32EC 00000000 */ nop +/* 0E5CDC 7F0B32EC 00000000 */ nop /* 0E5CE0 7F0B32F0 0FC2F328 */ jal sub_GAME_7F0BD8F0 -/* 0E5CE4 7F0B32F4 00000000 */ nop +/* 0E5CE4 7F0B32F4 00000000 */ nop /* 0E5CE8 7F0B32F8 10400005 */ beqz $v0, .L7F0B3310 /* 0E5CEC 7F0B32FC 02002025 */ move $a0, $s0 /* 0E5CF0 7F0B3300 92450000 */ lbu $a1, ($s2) @@ -1950,7 +2007,7 @@ glabel sub_GAME_7F0B3C8C /* 0E5D20 7F0B3330 000FAC03 */ sra $s5, $t7, 0x10 /* 0E5D24 7F0B3334 02B7082A */ slt $at, $s5, $s7 /* 0E5D28 7F0B3338 1020FFBD */ beqz $at, .L7F0B3230 -/* 0E5D2C 7F0B333C 00000000 */ nop +/* 0E5D2C 7F0B333C 00000000 */ nop .L7F0B3340: /* 0E5D30 7F0B3340 8FBF003C */ lw $ra, 0x3c($sp) /* 0E5D34 7F0B3344 02001025 */ move $v0, $s0 @@ -2026,8 +2083,8 @@ glabel load_bg_file /* 0E8C5C 7F0B412C 3C128004 */ lui $s2, %hi(levelentry_index) /* 0E8C60 7F0B4130 AFB00018 */ sw $s0, 0x18($sp) /* 0E8C64 7F0B4134 26521400 */ addiu $s2, %lo(levelentry_index) # addiu $s2, $s2, 0x1400 -/* 0E8C68 7F0B4138 3C108004 */ lui $s0, %hi(array_room_info) -/* 0E8C6C 7F0B413C 3C028004 */ lui $v0, %hi(MaxNumRooms) +/* 0E8C68 7F0B4138 3C108004 */ lui $s0, %hi(g_BgRoomInfo) +/* 0E8C6C 7F0B413C 3C028004 */ lui $v0, %hi(g_MaxNumRooms) /* 0E8C70 7F0B4140 AFBF003C */ sw $ra, 0x3c($sp) /* 0E8C74 7F0B4144 AFBE0038 */ sw $fp, 0x38($sp) /* 0E8C78 7F0B4148 AFB70034 */ sw $s7, 0x34($sp) @@ -2037,8 +2094,8 @@ glabel load_bg_file /* 0E8C88 7F0B4158 AFB30024 */ sw $s3, 0x24($sp) /* 0E8C8C 7F0B415C AFB1001C */ sw $s1, 0x1c($sp) /* 0E8C90 7F0B4160 AE400000 */ sw $zero, ($s2) -/* 0E8C94 7F0B4164 244242F4 */ addiu $v0, %lo(MaxNumRooms) # addiu $v0, $v0, 0x42f4 -/* 0E8C98 7F0B4168 26101414 */ addiu $s0, %lo(array_room_info) # addiu $s0, $s0, 0x1414 +/* 0E8C94 7F0B4164 244242F4 */ addiu $v0, %lo(g_MaxNumRooms) # addiu $v0, $v0, 0x42f4 +/* 0E8C98 7F0B4168 26101414 */ addiu $s0, %lo(g_BgRoomInfo) # addiu $s0, $s0, 0x1414 .L7F0B416C: /* 0E8C9C 7F0B416C 26100050 */ addiu $s0, $s0, 0x50 /* 0E8CA0 7F0B4170 0202082B */ sltu $at, $s0, $v0 @@ -2064,7 +2121,7 @@ glabel load_bg_file /* 0E8CE8 7F0B41B8 3C118004 */ lui $s1, %hi(levelinfotable) /* 0E8CEC 7F0B41BC 03140019 */ multu $t8, $s4 /* 0E8CF0 7F0B41C0 2631448C */ addiu $s1, %lo(levelinfotable) # addiu $s1, $s1, 0x448c -/* 0E8CF4 7F0B41C4 3C178008 */ lui $s7, %hi(ptr_bg_data) +/* 0E8CF4 7F0B41C4 3C178008 */ lui $s7, %hi(ptr_bg_data) /* 0E8CF8 7F0B41C8 26F7BF90 */ addiu $s7, %lo(ptr_bg_data) # addiu $s7, $s7, -0x4070 /* 0E8CFC 7F0B41CC 27A50070 */ addiu $a1, $sp, 0x70 /* 0E8D00 7F0B41D0 AEE50000 */ sw $a1, ($s7) @@ -2139,7 +2196,7 @@ glabel load_bg_file /* 0E8E14 7F0B42E4 01140019 */ multu $t0, $s4 /* 0E8E18 7F0B42E8 00004812 */ mflo $t1 /* 0E8E1C 7F0B42EC 02295021 */ addu $t2, $s1, $t1 -/* 0E8E20 7F0B42F0 0FC2456F */ jal sub_GAME_7F0915BC +/* 0E8E20 7F0B42F0 0FC2456F */ jal setDebugCameraScale /* 0E8E24 7F0B42F4 C54C000C */ lwc1 $f12, 0xc($t2) /* 0E8E28 7F0B42F8 8E4B0000 */ lw $t3, ($s2) /* 0E8E2C 7F0B42FC 01740019 */ multu $t3, $s4 @@ -2173,8 +2230,8 @@ glabel load_bg_file /* 0E8E9C 7F0B436C AC8A0000 */ sw $t2, ($a0) /* 0E8EA0 7F0B4370 AEC20000 */ sw $v0, ($s6) /* 0E8EA4 7F0B4374 8C4B0004 */ lw $t3, 4($v0) -/* 0E8EA8 7F0B4378 3C168004 */ lui $s6, %hi(MaxNumRooms) -/* 0E8EAC 7F0B437C 26D642F4 */ addiu $s6, %lo(MaxNumRooms) # addiu $s6, $s6, 0x42f4 +/* 0E8EA8 7F0B4378 3C168004 */ lui $s6, %hi(g_MaxNumRooms) +/* 0E8EAC 7F0B437C 26D642F4 */ addiu $s6, %lo(g_MaxNumRooms) # addiu $s6, $s6, 0x42f4 /* 0E8EB0 7F0B4380 01626021 */ addu $t4, $t3, $v0 /* 0E8EB4 7F0B4384 01936821 */ addu $t5, $t4, $s3 /* 0E8EB8 7F0B4388 AEAD0000 */ sw $t5, ($s5) @@ -2193,7 +2250,7 @@ glabel load_bg_file /* 0E8EE8 7F0B43B8 8ECF0000 */ lw $t7, ($s6) .L7F0B43BC: /* 0E8EEC 7F0B43BC 8CA80008 */ lw $t0, 8($a1) -/* 0E8EF0 7F0B43C0 3C1E8008 */ lui $fp, %hi(g_BgPortals) +/* 0E8EF0 7F0B43C0 3C1E8008 */ lui $fp, %hi(g_BgPortals) /* 0E8EF4 7F0B43C4 27DEFF80 */ addiu $fp, %lo(g_BgPortals) # addiu $fp, $fp, -0x80 /* 0E8EF8 7F0B43C8 01024821 */ addu $t1, $t0, $v0 /* 0E8EFC 7F0B43CC 01335021 */ addu $t2, $t1, $s3 @@ -2266,12 +2323,12 @@ glabel load_bg_file /* 0E8FEC 7F0B44BC 26100008 */ addiu $s0, $s0, 8 /* 0E8FF0 7F0B44C0 24630008 */ addiu $v1, $v1, 8 /* 0E8FF4 7F0B44C4 1440FFF0 */ bnez $v0, .L7F0B4488 -/* 0E8FF8 7F0B44C8 00000000 */ nop +/* 0E8FF8 7F0B44C8 00000000 */ nop .L7F0B44CC: /* 0E8FFC 7F0B44CC 8ED90000 */ lw $t9, ($s6) .L7F0B44D0: -/* 0E9000 7F0B44D0 3C108004 */ lui $s0, %hi(array_room_info + 0x10 +0x40) -/* 0E9004 7F0B44D4 26101464 */ addiu $s0, %lo(array_room_info + 0x10 +0x40) # addiu $s0, $s0, 0x1464 +/* 0E9000 7F0B44D0 3C108004 */ lui $s0, %hi(g_BgRoomInfo + 0x10 +0x40) +/* 0E9004 7F0B44D4 26101464 */ addiu $s0, %lo(g_BgRoomInfo + 0x10 +0x40) # addiu $s0, $s0, 0x1464 /* 0E9008 7F0B44D8 2B210002 */ slti $at, $t9, 2 /* 0E900C 7F0B44DC 14200064 */ bnez $at, .L7F0B4670 /* 0E9010 7F0B44E0 24110001 */ li $s1, 1 @@ -2295,7 +2352,7 @@ glabel load_bg_file /* 0E9054 7F0B4524 8FA50068 */ lw $a1, 0x68($sp) /* 0E9058 7F0B4528 0045082A */ slt $at, $v0, $a1 /* 0E905C 7F0B452C 1420000B */ bnez $at, .L7F0B455C -/* 0E9060 7F0B4530 00000000 */ nop +/* 0E9060 7F0B4530 00000000 */ nop /* 0E9064 7F0B4534 00B40019 */ multu $a1, $s4 /* 0E9068 7F0B4538 8EA30000 */ lw $v1, ($s5) /* 0E906C 7F0B453C 00732021 */ addu $a0, $v1, $s3 @@ -2329,7 +2386,7 @@ glabel load_bg_file /* 0E90D4 7F0B45A4 02402025 */ move $a0, $s2 /* 0E90D8 7F0B45A8 0051082A */ slt $at, $v0, $s1 /* 0E90DC 7F0B45AC 1420000B */ bnez $at, .L7F0B45DC -/* 0E90E0 7F0B45B0 00000000 */ nop +/* 0E90E0 7F0B45B0 00000000 */ nop /* 0E90E4 7F0B45B4 02340019 */ multu $s1, $s4 /* 0E90E8 7F0B45B8 8EA30000 */ lw $v1, ($s5) /* 0E90EC 7F0B45BC 00732021 */ addu $a0, $v1, $s3 @@ -2382,8 +2439,8 @@ glabel load_bg_file /* 0E9198 7F0B4668 AE17FFD8 */ sw $s7, -0x28($s0) /* 0E919C 7F0B466C 24110001 */ li $s1, 1 .L7F0B4670: -/* 0E91A0 7F0B4670 0FC2F14C */ jal sub_GAME_7F0BC530 -/* 0E91A4 7F0B4674 00000000 */ nop +/* 0E91A0 7F0B4670 0FC2F14C */ jal initializeRoomData +/* 0E91A4 7F0B4674 00000000 */ nop /* 0E91A8 7F0B4678 8ED80000 */ lw $t8, ($s6) /* 0E91AC 7F0B467C 2B010002 */ slti $at, $t8, 2 /* 0E91B0 7F0B4680 54200009 */ bnezl $at, .L7F0B46A8 @@ -2395,7 +2452,7 @@ glabel load_bg_file /* 0E91C4 7F0B4694 26310001 */ addiu $s1, $s1, 1 /* 0E91C8 7F0B4698 0239082A */ slt $at, $s1, $t9 /* 0E91CC 7F0B469C 1420FFFA */ bnez $at, .L7F0B4688 -/* 0E91D0 7F0B46A0 00000000 */ nop +/* 0E91D0 7F0B46A0 00000000 */ nop /* 0E91D4 7F0B46A4 8FC40000 */ lw $a0, ($fp) .L7F0B46A8: /* 0E91D8 7F0B46A8 3C038004 */ lui $v1, %hi(D_800443C4) @@ -2404,7 +2461,7 @@ glabel load_bg_file /* 0E91E4 7F0B46B4 00008825 */ move $s1, $zero /* 0E91E8 7F0B46B8 00008025 */ move $s0, $zero /* 0E91EC 7F0B46BC 10400010 */ beqz $v0, .L7F0B4700 -/* 0E91F0 7F0B46C0 00000000 */ nop +/* 0E91F0 7F0B46C0 00000000 */ nop /* 0E91F4 7F0B46C4 02202025 */ move $a0, $s1 .L7F0B46C8: /* 0E91F8 7F0B46C8 0FC2E64F */ jal sub_GAME_7F0B993C @@ -2433,7 +2490,7 @@ glabel load_bg_file /* 0E924C 7F0B471C 00905021 */ addu $t2, $a0, $s0 /* 0E9250 7F0B4720 8D4B0000 */ lw $t3, ($t2) /* 0E9254 7F0B4724 1560FFF8 */ bnez $t3, .L7F0B4708 -/* 0E9258 7F0B4728 00000000 */ nop +/* 0E9258 7F0B4728 00000000 */ nop /* 0E925C 7F0B472C 00008825 */ move $s1, $zero .L7F0B4730: /* 0E9260 7F0B4730 8ECC0000 */ lw $t4, ($s6) @@ -2446,14 +2503,14 @@ glabel load_bg_file /* 0E9278 7F0B4748 26310001 */ addiu $s1, $s1, 1 /* 0E927C 7F0B474C 022D082A */ slt $at, $s1, $t5 /* 0E9280 7F0B4750 1420FFFA */ bnez $at, .L7F0B473C -/* 0E9284 7F0B4754 00000000 */ nop +/* 0E9284 7F0B4754 00000000 */ nop /* 0E9288 7F0B4758 8FC40000 */ lw $a0, ($fp) /* 0E928C 7F0B475C 8C8E0000 */ lw $t6, ($a0) .L7F0B4760: /* 0E9290 7F0B4760 00008025 */ move $s0, $zero /* 0E9294 7F0B4764 00801025 */ move $v0, $a0 /* 0E9298 7F0B4768 11C0000A */ beqz $t6, .L7F0B4794 -/* 0E929C 7F0B476C 00000000 */ nop +/* 0E929C 7F0B476C 00000000 */ nop /* 0E92A0 7F0B4770 904F0006 */ lbu $t7, 6($v0) .L7F0B4774: /* 0E92A4 7F0B4774 26100008 */ addiu $s0, $s0, 8 @@ -2466,7 +2523,7 @@ glabel load_bg_file /* 0E92C0 7F0B4790 904F0006 */ lbu $t7, 6($v0) .L7F0B4794: /* 0E92C4 7F0B4794 0FC2CDFB */ jal sub_GAME_7F0B37EC -/* 0E92C8 7F0B4798 00000000 */ nop +/* 0E92C8 7F0B4798 00000000 */ nop .L7F0B479C: /* 0E92CC 7F0B479C 0FC2EA97 */ jal fogRemoved7F0BAA5C /* 0E92D0 7F0B47A0 8FA400B8 */ lw $a0, 0xb8($sp) @@ -2497,8 +2554,8 @@ glabel load_bg_file /* 0E5E58 7F0B3468 3C128004 */ lui $s2, %hi(levelentry_index) # $s2, 0x8004 /* 0E5E5C 7F0B346C AFB00018 */ sw $s0, 0x18($sp) /* 0E5E60 7F0B3470 2652AC50 */ addiu $s2, %lo(levelentry_index) # addiu $s2, $s2, -0x53b0 -/* 0E5E64 7F0B3474 3C108004 */ lui $s0, %hi(array_room_info) # $s0, 0x8004 -/* 0E5E68 7F0B3478 3C028004 */ lui $v0, %hi(MaxNumRooms) # $v0, 0x8004 +/* 0E5E64 7F0B3474 3C108004 */ lui $s0, %hi(g_BgRoomInfo) # $s0, 0x8004 +/* 0E5E68 7F0B3478 3C028004 */ lui $v0, %hi(g_MaxNumRooms) # $v0, 0x8004 /* 0E5E6C 7F0B347C AFBF003C */ sw $ra, 0x3c($sp) /* 0E5E70 7F0B3480 AFBE0038 */ sw $fp, 0x38($sp) /* 0E5E74 7F0B3484 AFB70034 */ sw $s7, 0x34($sp) @@ -2508,8 +2565,8 @@ glabel load_bg_file /* 0E5E84 7F0B3494 AFB30024 */ sw $s3, 0x24($sp) /* 0E5E88 7F0B3498 AFB1001C */ sw $s1, 0x1c($sp) /* 0E5E8C 7F0B349C AE400000 */ sw $zero, ($s2) -/* 0E5E90 7F0B34A0 2442D7D4 */ addiu $v0, %lo(MaxNumRooms) # addiu $v0, $v0, -0x282c -/* 0E5E94 7F0B34A4 2610AC64 */ addiu $s0, %lo(array_room_info) # addiu $s0, $s0, -0x539c +/* 0E5E90 7F0B34A0 2442D7D4 */ addiu $v0, %lo(g_MaxNumRooms) # addiu $v0, $v0, -0x282c +/* 0E5E94 7F0B34A4 2610AC64 */ addiu $s0, %lo(g_BgRoomInfo) # addiu $s0, $s0, -0x539c .L7F0B34A8: /* 0E5E98 7F0B34A8 26100050 */ addiu $s0, $s0, 0x50 /* 0E5E9C 7F0B34AC 0202082B */ sltu $at, $s0, $v0 @@ -2610,7 +2667,7 @@ glabel load_bg_file /* 0E6010 7F0B3620 01140019 */ multu $t0, $s4 /* 0E6014 7F0B3624 00004812 */ mflo $t1 /* 0E6018 7F0B3628 02295021 */ addu $t2, $s1, $t1 -/* 0E601C 7F0B362C 0FC2428F */ jal sub_GAME_7F0915BC +/* 0E601C 7F0B362C 0FC2428F */ jal setDebugCameraScale /* 0E6020 7F0B3630 C54C000C */ lwc1 $f12, 0xc($t2) /* 0E6024 7F0B3634 8E4B0000 */ lw $t3, ($s2) /* 0E6028 7F0B3638 01740019 */ multu $t3, $s4 @@ -2644,8 +2701,8 @@ glabel load_bg_file /* 0E6098 7F0B36A8 AC8A0000 */ sw $t2, ($a0) /* 0E609C 7F0B36AC AEC20000 */ sw $v0, ($s6) /* 0E60A0 7F0B36B0 8C4B0004 */ lw $t3, 4($v0) -/* 0E60A4 7F0B36B4 3C168004 */ lui $s6, %hi(MaxNumRooms) # $s6, 0x8004 -/* 0E60A8 7F0B36B8 26D6D7D4 */ addiu $s6, %lo(MaxNumRooms) # addiu $s6, $s6, -0x282c +/* 0E60A4 7F0B36B4 3C168004 */ lui $s6, %hi(g_MaxNumRooms) # $s6, 0x8004 +/* 0E60A8 7F0B36B8 26D6D7D4 */ addiu $s6, %lo(g_MaxNumRooms) # addiu $s6, $s6, -0x282c /* 0E60AC 7F0B36BC 01626021 */ addu $t4, $t3, $v0 /* 0E60B0 7F0B36C0 01936821 */ addu $t5, $t4, $s3 /* 0E60B4 7F0B36C4 AEAD0000 */ sw $t5, ($s5) @@ -2737,12 +2794,12 @@ glabel load_bg_file /* 0E61E8 7F0B37F8 26100008 */ addiu $s0, $s0, 8 /* 0E61EC 7F0B37FC 24630008 */ addiu $v1, $v1, 8 /* 0E61F0 7F0B3800 1440FFF0 */ bnez $v0, .L7F0B37C4 -/* 0E61F4 7F0B3804 00000000 */ nop +/* 0E61F4 7F0B3804 00000000 */ nop .L7F0B3808: /* 0E61F8 7F0B3808 8ED90000 */ lw $t9, ($s6) .L7F0B380C: -/* 0E61FC 7F0B380C 3C108004 */ lui $s0, %hi(array_room_info + 0x10 +0x40) # $s0, 0x8004 -/* 0E6200 7F0B3810 2610ACB4 */ addiu $s0, %lo(array_room_info + 0x10 +0x40) # addiu $s0, $s0, -0x534c +/* 0E61FC 7F0B380C 3C108004 */ lui $s0, %hi(g_BgRoomInfo + 0x10 +0x40) # $s0, 0x8004 +/* 0E6200 7F0B3810 2610ACB4 */ addiu $s0, %lo(g_BgRoomInfo + 0x10 +0x40) # addiu $s0, $s0, -0x534c /* 0E6204 7F0B3814 2B210002 */ slti $at, $t9, 2 /* 0E6208 7F0B3818 14200064 */ bnez $at, .L7F0B39AC /* 0E620C 7F0B381C 24110001 */ li $s1, 1 @@ -2766,7 +2823,7 @@ glabel load_bg_file /* 0E6250 7F0B3860 8FA50068 */ lw $a1, 0x68($sp) /* 0E6254 7F0B3864 0045082A */ slt $at, $v0, $a1 /* 0E6258 7F0B3868 1420000B */ bnez $at, .L7F0B3898 -/* 0E625C 7F0B386C 00000000 */ nop +/* 0E625C 7F0B386C 00000000 */ nop /* 0E6260 7F0B3870 00B40019 */ multu $a1, $s4 /* 0E6264 7F0B3874 8EA30000 */ lw $v1, ($s5) /* 0E6268 7F0B3878 00732021 */ addu $a0, $v1, $s3 @@ -2800,7 +2857,7 @@ glabel load_bg_file /* 0E62D0 7F0B38E0 02402025 */ move $a0, $s2 /* 0E62D4 7F0B38E4 0051082A */ slt $at, $v0, $s1 /* 0E62D8 7F0B38E8 1420000B */ bnez $at, .L7F0B3918 -/* 0E62DC 7F0B38EC 00000000 */ nop +/* 0E62DC 7F0B38EC 00000000 */ nop /* 0E62E0 7F0B38F0 02340019 */ multu $s1, $s4 /* 0E62E4 7F0B38F4 8EA30000 */ lw $v1, ($s5) /* 0E62E8 7F0B38F8 00732021 */ addu $a0, $v1, $s3 @@ -2853,8 +2910,8 @@ glabel load_bg_file /* 0E6394 7F0B39A4 AE17FFD8 */ sw $s7, -0x28($s0) /* 0E6398 7F0B39A8 24110001 */ li $s1, 1 .L7F0B39AC: -/* 0E639C 7F0B39AC 0FC2EE4C */ jal sub_GAME_7F0BC530 -/* 0E63A0 7F0B39B0 00000000 */ nop +/* 0E639C 7F0B39AC 0FC2EE4C */ jal initializeRoomData +/* 0E63A0 7F0B39B0 00000000 */ nop /* 0E63A4 7F0B39B4 8ED80000 */ lw $t8, ($s6) /* 0E63A8 7F0B39B8 2B010002 */ slti $at, $t8, 2 /* 0E63AC 7F0B39BC 54200009 */ bnezl $at, .L7F0B39E4 @@ -2866,7 +2923,7 @@ glabel load_bg_file /* 0E63C0 7F0B39D0 26310001 */ addiu $s1, $s1, 1 /* 0E63C4 7F0B39D4 0239082A */ slt $at, $s1, $t9 /* 0E63C8 7F0B39D8 1420FFFA */ bnez $at, .L7F0B39C4 -/* 0E63CC 7F0B39DC 00000000 */ nop +/* 0E63CC 7F0B39DC 00000000 */ nop /* 0E63D0 7F0B39E0 8FC40000 */ lw $a0, ($fp) .L7F0B39E4: /* 0E63D4 7F0B39E4 3C038004 */ lui $v1, %hi(D_800443C4) # $v1, 0x8004 @@ -2875,7 +2932,7 @@ glabel load_bg_file /* 0E63E0 7F0B39F0 00008825 */ move $s1, $zero /* 0E63E4 7F0B39F4 00008025 */ move $s0, $zero /* 0E63E8 7F0B39F8 10400010 */ beqz $v0, .L7F0B3A3C -/* 0E63EC 7F0B39FC 00000000 */ nop +/* 0E63EC 7F0B39FC 00000000 */ nop /* 0E63F0 7F0B3A00 02202025 */ move $a0, $s1 .L7F0B3A04: /* 0E63F4 7F0B3A04 0FC2E2F6 */ jal sub_GAME_7F0B993C @@ -2904,7 +2961,7 @@ glabel load_bg_file /* 0E6448 7F0B3A58 00905021 */ addu $t2, $a0, $s0 /* 0E644C 7F0B3A5C 8D4B0000 */ lw $t3, ($t2) /* 0E6450 7F0B3A60 1560FFF8 */ bnez $t3, .L7F0B3A44 -/* 0E6454 7F0B3A64 00000000 */ nop +/* 0E6454 7F0B3A64 00000000 */ nop /* 0E6458 7F0B3A68 00008825 */ move $s1, $zero .L7F0B3A6C: /* 0E645C 7F0B3A6C 8ECC0000 */ lw $t4, ($s6) @@ -2917,14 +2974,14 @@ glabel load_bg_file /* 0E6474 7F0B3A84 26310001 */ addiu $s1, $s1, 1 /* 0E6478 7F0B3A88 022D082A */ slt $at, $s1, $t5 /* 0E647C 7F0B3A8C 1420FFFA */ bnez $at, .L7F0B3A78 -/* 0E6480 7F0B3A90 00000000 */ nop +/* 0E6480 7F0B3A90 00000000 */ nop /* 0E6484 7F0B3A94 8FC40000 */ lw $a0, ($fp) /* 0E6488 7F0B3A98 8C8E0000 */ lw $t6, ($a0) .L7F0B3A9C: /* 0E648C 7F0B3A9C 00008025 */ move $s0, $zero /* 0E6490 7F0B3AA0 00801025 */ move $v0, $a0 /* 0E6494 7F0B3AA4 11C0000A */ beqz $t6, .L7F0B3AD0 -/* 0E6498 7F0B3AA8 00000000 */ nop +/* 0E6498 7F0B3AA8 00000000 */ nop /* 0E649C 7F0B3AAC 904F0006 */ lbu $t7, 6($v0) .L7F0B3AB0: /* 0E64A0 7F0B3AB0 26100008 */ addiu $s0, $s0, 8 @@ -2937,7 +2994,7 @@ glabel load_bg_file /* 0E64BC 7F0B3ACC 904F0006 */ lbu $t7, 6($v0) .L7F0B3AD0: /* 0E64C0 7F0B3AD0 0FC2CAAB */ jal sub_GAME_7F0B37EC -/* 0E64C4 7F0B3AD4 00000000 */ nop +/* 0E64C4 7F0B3AD4 00000000 */ nop .L7F0B3AD8: /* 0E64C8 7F0B3AD8 0FC2E78B */ jal fogRemoved7F0BAA5C /* 0E64CC 7F0B3ADC 8FA400B8 */ lw $a0, 0xb8($sp) @@ -3008,7 +3065,7 @@ f32 bgGetLevelVisibilityScale(void) { #ifdef NONMATCHING -void sub_GAME_7F0B4884(void) { +void bgRoomVisibilityRelated(void) { } #else @@ -3027,7 +3084,7 @@ glabel jpt_80058C58 .word .L7F0B4914 .text -glabel sub_GAME_7F0B4884 +glabel bgRoomVisibilityRelated /* 0E93B4 7F0B4884 27BDFFC0 */ addiu $sp, $sp, -0x40 /* 0E93B8 7F0B4888 AFBF003C */ sw $ra, 0x3c($sp) /* 0E93BC 7F0B488C AFB60030 */ sw $s6, 0x30($sp) @@ -3046,12 +3103,12 @@ glabel sub_GAME_7F0B4884 /* 0E93F0 7F0B48C0 0FC26D36 */ jal sub_GAME_7F09B4D8 /* 0E93F4 7F0B48C4 00402025 */ move $a0, $v0 /* 0E93F8 7F0B48C8 14400003 */ bnez $v0, .L7F0B48D8 -/* 0E93FC 7F0B48CC 00000000 */ nop +/* 0E93FC 7F0B48CC 00000000 */ nop /* 0E9400 7F0B48D0 0FC2D9BA */ jal sub_GAME_7F0B66E8 -/* 0E9404 7F0B48D4 00000000 */ nop +/* 0E9404 7F0B48D4 00000000 */ nop .L7F0B48D8: -/* 0E9408 7F0B48D8 0FC1E94A */ jal get_camera_mode -/* 0E940C 7F0B48DC 00000000 */ nop +/* 0E9408 7F0B48D8 0FC1E94A */ jal bondviewGetCameraMode +/* 0E940C 7F0B48DC 00000000 */ nop /* 0E9410 7F0B48E0 3C038004 */ lui $v1, %hi(D_800442F8) /* 0E9414 7F0B48E4 244FFFFF */ addiu $t7, $v0, -1 /* 0E9418 7F0B48E8 246342F8 */ addiu $v1, %lo(D_800442F8) # addiu $v1, $v1, 0x42f8 @@ -3065,14 +3122,14 @@ glabel sub_GAME_7F0B4884 /* 0E9438 7F0B4908 8C2F8C58 */ lw $t7, %lo(jpt_80058C58)($at) .L7F0B490C: /* 0E943C 7F0B490C 01E00008 */ jr $t7 -/* 0E9440 7F0B4910 00000000 */ nop +/* 0E9440 7F0B4910 00000000 */ nop .L7F0B4914: /* 0E9444 7F0B4914 241800C8 */ li $t8, 200 /* 0E9448 7F0B4918 AC780000 */ sw $t8, ($v1) def_7F0B490C: .L7F0B491C: /* 0E944C 7F0B491C 0FC227E6 */ jal bondviewGetCurrentPlayersRoom -/* 0E9450 7F0B4920 00000000 */ nop +/* 0E9450 7F0B4920 00000000 */ nop /* 0E9454 7F0B4924 3C018004 */ lui $at, %hi(g_BgCurrentRoom) /* 0E9458 7F0B4928 00409825 */ move $s3, $v0 /* 0E945C 7F0B492C 0FC227F5 */ jal bondviewGetCurrentPlayersPosition @@ -3102,10 +3159,10 @@ def_7F0B490C: /* 0E94B4 7F0B4984 02002025 */ move $a0, $s0 /* 0E94B8 7F0B4988 02802825 */ move $a1, $s4 /* 0E94BC 7F0B498C 12690004 */ beq $s3, $t1, .L7F0B49A0 -/* 0E94C0 7F0B4990 00000000 */ nop +/* 0E94C0 7F0B4990 00000000 */ nop /* 0E94C4 7F0B4994 904A0005 */ lbu $t2, 5($v0) /* 0E94C8 7F0B4998 166A000D */ bne $s3, $t2, .L7F0B49D0 -/* 0E94CC 7F0B499C 00000000 */ nop +/* 0E94CC 7F0B499C 00000000 */ nop .L7F0B49A0: /* 0E94D0 7F0B49A0 0FC2E7C5 */ jal sub_GAME_7F0B9F14 /* 0E94D4 7F0B49A4 02A03025 */ move $a2, $s5 @@ -3136,7 +3193,7 @@ def_7F0B490C: /* 0E952C 7F0B49FC 8F190000 */ lw $t9, ($t8) /* 0E9530 7F0B4A00 26F70001 */ addiu $s7, $s7, 1 /* 0E9534 7F0B4A04 13200003 */ beqz $t9, .L7F0B4A14 -/* 0E9538 7F0B4A08 00000000 */ nop +/* 0E9538 7F0B4A08 00000000 */ nop /* 0E953C 7F0B4A0C 56FEFFD1 */ bnel $s7, $fp, .L7F0B4954 /* 0E9540 7F0B4A10 8C790000 */ lw $t9, ($v1) .L7F0B4A14: @@ -3289,12 +3346,12 @@ glabel sub_GAME_7F0B4AB4 /* 0E9748 7F0B4C18 92220000 */ lbu $v0, ($s1) .L7F0B4C1C: /* 0E974C 7F0B4C1C 16C20011 */ bne $s6, $v0, .L7F0B4C64 -/* 0E9750 7F0B4C20 00000000 */ nop +/* 0E9750 7F0B4C20 00000000 */ nop /* 0E9754 7F0B4C24 906B0004 */ lbu $t3, 4($v1) /* 0E9758 7F0B4C28 920C0000 */ lbu $t4, ($s0) /* 0E975C 7F0B4C2C 02602025 */ move $a0, $s3 /* 0E9760 7F0B4C30 156C000C */ bne $t3, $t4, .L7F0B4C64 -/* 0E9764 7F0B4C34 00000000 */ nop +/* 0E9764 7F0B4C34 00000000 */ nop /* 0E9768 7F0B4C38 0FC2D294 */ jal addToByteSetMaxSize15 /* 0E976C 7F0B4C3C 90650005 */ lbu $a1, 5($v1) /* 0E9770 7F0B4C40 8EAD0000 */ lw $t5, ($s5) @@ -3348,7 +3405,7 @@ glabel sub_GAME_7F0B4AB4 /* 0E981C 7F0B4CEC 27A30150 */ addiu $v1, $sp, 0x150 /* 0E9820 7F0B4CF0 27A20140 */ addiu $v0, $sp, 0x140 /* 0E9824 7F0B4CF4 14A40003 */ bne $a1, $a0, .L7F0B4D04 -/* 0E9828 7F0B4CF8 00000000 */ nop +/* 0E9828 7F0B4CF8 00000000 */ nop /* 0E982C 7F0B4CFC 10000015 */ b .L7F0B4D54 /* 0E9830 7F0B4D00 93A20150 */ lbu $v0, 0x150($sp) .L7F0B4D04: @@ -3367,7 +3424,7 @@ glabel sub_GAME_7F0B4AB4 /* 0E9860 7F0B4D30 24420001 */ addiu $v0, $v0, 1 /* 0E9864 7F0B4D34 27B90150 */ addiu $t9, $sp, 0x150 /* 0E9868 7F0B4D38 10B80003 */ beq $a1, $t8, .L7F0B4D48 -/* 0E986C 7F0B4D3C 00000000 */ nop +/* 0E986C 7F0B4D3C 00000000 */ nop /* 0E9870 7F0B4D40 5459FFFB */ bnel $v0, $t9, .L7F0B4D30 /* 0E9874 7F0B4D44 90580001 */ lbu $t8, 1($v0) .L7F0B4D48: @@ -3473,7 +3530,7 @@ Gfx *bgLevelRender(Gfx *arg0) -f32 sub_GAME_7F0B4F9C(s32 arg0) +f32 sub_GAME_7F0B4F9C(s32 arg0) { return dword_CODE_bss_8007FF94[arg0 + 1]; } @@ -3522,13 +3579,13 @@ Gfx* bgScissorCurrentPlayerViewF(Gfx* arg0, f32 arg1, f32 arg2, f32 arg3, f32 ar /** * Specifies the drawing area (the scissoring box). * View is bound to current player view properties, but parameters can clip to smaller area. - * + * * @param arg0: Display list pointer * @param left: Screen's left edge coordinates. Must be >= g_CurrentPlayer->viewleft otherwise ignored. * @param top: Screen's top edge coordinates. Must be >= g_CurrentPlayer->viewtop otherwise ignored. * @param width: Screen's right edge coordinates. Must be <= g_CurrentPlayer->viewleft+viewx otherwise ignored. * @param height: Screen's left bottom coordinates. Must be <= g_CurrentPlayer->viewtop+viewy otherwise ignored. - * + * * Address 0x7F0B5058. */ Gfx *bgScissorCurrentPlayerView(Gfx *arg0, s32 left, s32 top, s32 width, s32 height) @@ -3580,9 +3637,9 @@ void sub_GAME_7F0B5168(void) { /** * Unreferenced. - * + * * Loosely checks that arg1 surrounds arg0. Requires points be ordered according to min/max. - * + * * Address 0x7F0B519C. */ s32 bgRectIsInside(struct bbox2d *arg0, struct bbox2d *arg1) @@ -3638,7 +3695,7 @@ void sub_GAME_7F0B5208(s32 arg0, void *arg1) { viGetZRange(&sp3C); sp40 = (f32) (sp40 / mCurrentLevelVisibilityScale); phi_v1 = 0; - phi_a2 = ((arg0 * 0x50) + &array_room_info); + phi_a2 = ((arg0 * 0x50) + &g_BgRoomInfo); phi_s6_2 = 0; phi_s4_2 = 0; phi_s5_2 = 0; @@ -3835,12 +3892,12 @@ glabel sub_GAME_7F0B5208 /* 0E9D88 7F0B5258 C42613FC */ lwc1 $f6, %lo(mCurrentLevelVisibilityScale)($at) /* 0E9D8C 7F0B525C C7A40040 */ lwc1 $f4, 0x40($sp) /* 0E9D90 7F0B5260 8FAE0078 */ lw $t6, 0x78($sp) -/* 0E9D94 7F0B5264 3C188004 */ lui $t8, %hi(array_room_info) +/* 0E9D94 7F0B5264 3C188004 */ lui $t8, %hi(g_BgRoomInfo) /* 0E9D98 7F0B5268 46062203 */ div.s $f8, $f4, $f6 /* 0E9D9C 7F0B526C 000E7880 */ sll $t7, $t6, 2 /* 0E9DA0 7F0B5270 01EE7821 */ addu $t7, $t7, $t6 /* 0E9DA4 7F0B5274 000F7900 */ sll $t7, $t7, 4 -/* 0E9DA8 7F0B5278 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 +/* 0E9DA8 7F0B5278 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 /* 0E9DAC 7F0B527C 01F83021 */ addu $a2, $t7, $t8 /* 0E9DB0 7F0B5280 00001825 */ move $v1, $zero /* 0E9DB4 7F0B5284 E7A80040 */ swc1 $f8, 0x40($sp) @@ -3901,23 +3958,23 @@ glabel sub_GAME_7F0B5208 /* 0E9E70 7F0B5340 C6080008 */ lwc1 $f8, 8($s0) .L7F0B5344: /* 0E9E74 7F0B5344 4608503E */ c.le.s $f10, $f8 -/* 0E9E78 7F0B5348 00000000 */ nop +/* 0E9E78 7F0B5348 00000000 */ nop /* 0E9E7C 7F0B534C 45020003 */ bc1fl .L7F0B535C /* 0E9E80 7F0B5350 C6120004 */ lwc1 $f18, 4($s0) /* 0E9E84 7F0B5354 26730001 */ addiu $s3, $s3, 1 /* 0E9E88 7F0B5358 C6120004 */ lwc1 $f18, 4($s0) .L7F0B535C: /* 0E9E8C 7F0B535C 4610903E */ c.le.s $f18, $f16 -/* 0E9E90 7F0B5360 00000000 */ nop +/* 0E9E90 7F0B5360 00000000 */ nop /* 0E9E94 7F0B5364 45020003 */ bc1fl .L7F0B5374 /* 0E9E98 7F0B5368 C604000C */ lwc1 $f4, 0xc($s0) /* 0E9E9C 7F0B536C 26940001 */ addiu $s4, $s4, 1 /* 0E9EA0 7F0B5370 C604000C */ lwc1 $f4, 0xc($s0) .L7F0B5374: /* 0E9EA4 7F0B5374 4604303E */ c.le.s $f6, $f4 -/* 0E9EA8 7F0B5378 00000000 */ nop +/* 0E9EA8 7F0B5378 00000000 */ nop /* 0E9EAC 7F0B537C 45000002 */ bc1f .L7F0B5388 -/* 0E9EB0 7F0B5380 00000000 */ nop +/* 0E9EB0 7F0B5380 00000000 */ nop /* 0E9EB4 7F0B5384 26B50001 */ addiu $s5, $s5, 1 .L7F0B5388: /* 0E9EB8 7F0B5388 10000025 */ b .L7F0B5420 @@ -3944,7 +4001,7 @@ glabel sub_GAME_7F0B5208 /* 0E9F04 7F0B53D4 C6080008 */ lwc1 $f8, 8($s0) .L7F0B53D8: /* 0E9F08 7F0B53D8 4606403E */ c.le.s $f8, $f6 -/* 0E9F0C 7F0B53DC 00000000 */ nop +/* 0E9F0C 7F0B53DC 00000000 */ nop /* 0E9F10 7F0B53E0 45020003 */ bc1fl .L7F0B53F0 /* 0E9F14 7F0B53E4 C60A0004 */ lwc1 $f10, 4($s0) /* 0E9F18 7F0B53E8 26730001 */ addiu $s3, $s3, 1 @@ -3952,7 +4009,7 @@ glabel sub_GAME_7F0B5208 /* 0E9F1C 7F0B53EC C60A0004 */ lwc1 $f10, 4($s0) .L7F0B53F0: /* 0E9F20 7F0B53F0 460A803E */ c.le.s $f16, $f10 -/* 0E9F24 7F0B53F4 00000000 */ nop +/* 0E9F24 7F0B53F4 00000000 */ nop /* 0E9F28 7F0B53F8 45020004 */ bc1fl .L7F0B540C /* 0E9F2C 7F0B53FC C604000C */ lwc1 $f4, 0xc($s0) /* 0E9F30 7F0B5400 10000007 */ b .L7F0B5420 @@ -3960,7 +4017,7 @@ glabel sub_GAME_7F0B5208 /* 0E9F38 7F0B5408 C604000C */ lwc1 $f4, 0xc($s0) .L7F0B540C: /* 0E9F3C 7F0B540C 4612203E */ c.le.s $f4, $f18 -/* 0E9F40 7F0B5410 00000000 */ nop +/* 0E9F40 7F0B5410 00000000 */ nop /* 0E9F44 7F0B5414 45020003 */ bc1fl .L7F0B5424 /* 0E9F48 7F0B5418 24630001 */ addiu $v1, $v1, 1 /* 0E9F4C 7F0B541C 26B50001 */ addiu $s5, $s5, 1 @@ -3972,13 +4029,13 @@ glabel sub_GAME_7F0B5208 /* 0E9F5C 7F0B542C 12C7000B */ beq $s6, $a3, .L7F0B545C /* 0E9F60 7F0B5430 8FB00018 */ lw $s0, 0x18($sp) /* 0E9F64 7F0B5434 12270009 */ beq $s1, $a3, .L7F0B545C -/* 0E9F68 7F0B5438 00000000 */ nop +/* 0E9F68 7F0B5438 00000000 */ nop /* 0E9F6C 7F0B543C 12470007 */ beq $s2, $a3, .L7F0B545C -/* 0E9F70 7F0B5440 00000000 */ nop +/* 0E9F70 7F0B5440 00000000 */ nop /* 0E9F74 7F0B5444 12670005 */ beq $s3, $a3, .L7F0B545C -/* 0E9F78 7F0B5448 00000000 */ nop +/* 0E9F78 7F0B5448 00000000 */ nop /* 0E9F7C 7F0B544C 12870003 */ beq $s4, $a3, .L7F0B545C -/* 0E9F80 7F0B5450 00000000 */ nop +/* 0E9F80 7F0B5450 00000000 */ nop /* 0E9F84 7F0B5454 16A70003 */ bne $s5, $a3, .L7F0B5464 /* 0E9F88 7F0B5458 24020001 */ li $v0, 1 .L7F0B545C: @@ -4009,7 +4066,7 @@ s32 sub_GAME_7F0B5488(coord3d* arg0, coord3d* arg1) arg1->z = arg0->z * room_data_float2; mtx4TransformVecInPlace(temp_a0, arg1); - sub_GAME_7F078060(arg1, arg1); + transform3Dto2DWithZScaling(arg1, arg1); if (arg1->z > 0.0f) { @@ -4137,7 +4194,7 @@ glabel sub_GAME_7F0B5528 /* 0EA1E4 7F0B56B4 46003287 */ neg.s $f10, $f6 /* 0EA1E8 7F0B56B8 46185202 */ mul.s $f8, $f10, $f24 /* 0EA1EC 7F0B56BC 4612403C */ c.lt.s $f8, $f18 -/* 0EA1F0 7F0B56C0 00000000 */ nop +/* 0EA1F0 7F0B56C0 00000000 */ nop /* 0EA1F4 7F0B56C4 45020003 */ bc1fl .L7F0B56D4 /* 0EA1F8 7F0B56C8 8E780000 */ lw $t8, ($s3) /* 0EA1FC 7F0B56CC 0000F025 */ move $fp, $zero @@ -4171,14 +4228,14 @@ glabel sub_GAME_7F0B5528 /* 0EA25C 7F0B572C 00A09025 */ move $s2, $a1 /* 0EA260 7F0B5730 4610B03C */ c.lt.s $f22, $f16 /* 0EA264 7F0B5734 14800002 */ bnez $a0, .L7F0B5740 -/* 0EA268 7F0B5738 00000000 */ nop +/* 0EA268 7F0B5738 00000000 */ nop /* 0EA26C 7F0B573C 0007000D */ break 7 .L7F0B5740: /* 0EA270 7F0B5740 2401FFFF */ li $at, -1 /* 0EA274 7F0B5744 14810004 */ bne $a0, $at, .L7F0B5758 /* 0EA278 7F0B5748 3C018000 */ lui $at, 0x8000 /* 0EA27C 7F0B574C 14A10002 */ bne $a1, $at, .L7F0B5758 -/* 0EA280 7F0B5750 00000000 */ nop +/* 0EA280 7F0B5750 00000000 */ nop /* 0EA284 7F0B5754 0006000D */ break 6 .L7F0B5758: /* 0EA288 7F0B5758 4502000A */ bc1fl .L7F0B5784 @@ -4188,12 +4245,12 @@ glabel sub_GAME_7F0B5528 /* 0EA298 7F0B5768 02C81021 */ addu $v0, $s6, $t0 /* 0EA29C 7F0B576C C44E0008 */ lwc1 $f14, 8($v0) /* 0EA2A0 7F0B5770 4616703E */ c.le.s $f14, $f22 -/* 0EA2A4 7F0B5774 00000000 */ nop +/* 0EA2A4 7F0B5774 00000000 */ nop /* 0EA2A8 7F0B5778 4503000E */ bc1tl .L7F0B57B4 /* 0EA2AC 7F0B577C 46107181 */ sub.s $f6, $f14, $f16 /* 0EA2B0 7F0B5780 4616803E */ c.le.s $f16, $f22 .L7F0B5784: -/* 0EA2B4 7F0B5784 00000000 */ nop +/* 0EA2B4 7F0B5784 00000000 */ nop /* 0EA2B8 7F0B5788 45020024 */ bc1fl .L7F0B581C /* 0EA2BC 7F0B578C 00A4082A */ slt $at, $a1, $a0 /* 0EA2C0 7F0B5790 00660019 */ multu $v1, $a2 @@ -4201,7 +4258,7 @@ glabel sub_GAME_7F0B5528 /* 0EA2C8 7F0B5798 02C91021 */ addu $v0, $s6, $t1 /* 0EA2CC 7F0B579C C44E0008 */ lwc1 $f14, 8($v0) /* 0EA2D0 7F0B57A0 460EB03C */ c.lt.s $f22, $f14 -/* 0EA2D4 7F0B57A4 00000000 */ nop +/* 0EA2D4 7F0B57A4 00000000 */ nop /* 0EA2D8 7F0B57A8 4502001C */ bc1fl .L7F0B581C /* 0EA2DC 7F0B57AC 00A4082A */ slt $at, $a1, $a0 /* 0EA2E0 7F0B57B0 46107181 */ sub.s $f6, $f14, $f16 @@ -4211,7 +4268,7 @@ glabel sub_GAME_7F0B5528 /* 0EA2EC 7F0B57BC 46008107 */ neg.s $f4, $f16 /* 0EA2F0 7F0B57C0 00E60019 */ multu $a3, $a2 /* 0EA2F4 7F0B57C4 46062303 */ div.s $f12, $f4, $f6 -/* 0EA2F8 7F0B57C8 3C0B8008 */ lui $t3, %hi(g_BgPortals) +/* 0EA2F8 7F0B57C8 3C0B8008 */ lui $t3, %hi(g_BgPortals) /* 0EA2FC 7F0B57CC 24E70001 */ addiu $a3, $a3, 1 /* 0EA300 7F0B57D0 46005201 */ sub.s $f8, $f10, $f0 /* 0EA304 7F0B57D4 00005012 */ mflo $t2 @@ -4272,7 +4329,7 @@ glabel sub_GAME_7F0B5864 /* 0EA394 7F0B5864 27BDFE90 */ addiu $sp, $sp, -0x170 /* 0EA398 7F0B5868 00047080 */ sll $t6, $a0, 2 /* 0EA39C 7F0B586C 01C47021 */ addu $t6, $t6, $a0 -/* 0EA3A0 7F0B5870 3C0F8008 */ lui $t7, %hi(table_for_portals) +/* 0EA3A0 7F0B5870 3C0F8008 */ lui $t7, %hi(table_for_portals) /* 0EA3A4 7F0B5874 AFB5003C */ sw $s5, 0x3c($sp) /* 0EA3A8 7F0B5878 25EF1618 */ addiu $t7, %lo(table_for_portals) # addiu $t7, $t7, 0x1618 /* 0EA3AC 7F0B587C 000E7080 */ sll $t6, $t6, 2 @@ -4339,7 +4396,7 @@ glabel sub_GAME_7F0B5864 /* 0EA494 7F0B5964 02002025 */ move $a0, $s0 /* 0EA498 7F0B5968 45020024 */ bc1fl .L7F0B59FC /* 0EA49C 7F0B596C 26310001 */ addiu $s1, $s1, 1 -/* 0EA4A0 7F0B5970 0FC1E018 */ jal sub_GAME_7F078060 +/* 0EA4A0 7F0B5970 0FC1E018 */ jal transform3Dto2DWithZScaling /* 0EA4A4 7F0B5974 02802825 */ move $a1, $s4 /* 0EA4A8 7F0B5978 16400006 */ bnez $s2, .L7F0B5994 /* 0EA4AC 7F0B597C C7A20078 */ lwc1 $f2, 0x78($sp) @@ -4360,19 +4417,19 @@ glabel sub_GAME_7F0B5864 /* 0EA4E4 7F0B59B4 46001586 */ mov.s $f22, $f2 /* 0EA4E8 7F0B59B8 4602903C */ c.lt.s $f18, $f2 .L7F0B59BC: -/* 0EA4EC 7F0B59BC 00000000 */ nop +/* 0EA4EC 7F0B59BC 00000000 */ nop /* 0EA4F0 7F0B59C0 45020003 */ bc1fl .L7F0B59D0 /* 0EA4F4 7F0B59C4 4610603C */ c.lt.s $f12, $f16 /* 0EA4F8 7F0B59C8 46001486 */ mov.s $f18, $f2 /* 0EA4FC 7F0B59CC 4610603C */ c.lt.s $f12, $f16 .L7F0B59D0: -/* 0EA500 7F0B59D0 00000000 */ nop +/* 0EA500 7F0B59D0 00000000 */ nop /* 0EA504 7F0B59D4 45020003 */ bc1fl .L7F0B59E4 /* 0EA508 7F0B59D8 460C703C */ c.lt.s $f14, $f12 /* 0EA50C 7F0B59DC 46006406 */ mov.s $f16, $f12 /* 0EA510 7F0B59E0 460C703C */ c.lt.s $f14, $f12 .L7F0B59E4: -/* 0EA514 7F0B59E4 00000000 */ nop +/* 0EA514 7F0B59E4 00000000 */ nop /* 0EA518 7F0B59E8 45020003 */ bc1fl .L7F0B59F8 /* 0EA51C 7F0B59EC 26520001 */ addiu $s2, $s2, 1 /* 0EA520 7F0B59F0 46006386 */ mov.s $f14, $f12 @@ -4533,7 +4590,7 @@ glabel sub_GAME_7F0B5864 /* 0E7690 7F0B4CA0 02002025 */ move $a0, $s0 /* 0E7694 7F0B4CA4 45020024 */ bc1fl .L7F0B4D38 /* 0E7698 7F0B4CA8 26310001 */ addiu $s1, $s1, 1 -/* 0E769C 7F0B4CAC 0FC1E038 */ jal sub_GAME_7F078060 +/* 0E769C 7F0B4CAC 0FC1E038 */ jal transform3Dto2DWithZScaling /* 0E76A0 7F0B4CB0 02802825 */ move $a1, $s4 /* 0E76A4 7F0B4CB4 16400006 */ bnez $s2, .L7F0B4CD0 /* 0E76A8 7F0B4CB8 C7A20078 */ lwc1 $f2, 0x78($sp) @@ -4554,19 +4611,19 @@ glabel sub_GAME_7F0B5864 /* 0E76E0 7F0B4CF0 46001586 */ mov.s $f22, $f2 /* 0E76E4 7F0B4CF4 4602903C */ c.lt.s $f18, $f2 .L7F0B4CF8: -/* 0E76E8 7F0B4CF8 00000000 */ nop +/* 0E76E8 7F0B4CF8 00000000 */ nop /* 0E76EC 7F0B4CFC 45020003 */ bc1fl .L7F0B4D0C /* 0E76F0 7F0B4D00 4610603C */ c.lt.s $f12, $f16 /* 0E76F4 7F0B4D04 46001486 */ mov.s $f18, $f2 /* 0E76F8 7F0B4D08 4610603C */ c.lt.s $f12, $f16 .L7F0B4D0C: -/* 0E76FC 7F0B4D0C 00000000 */ nop +/* 0E76FC 7F0B4D0C 00000000 */ nop /* 0E7700 7F0B4D10 45020003 */ bc1fl .L7F0B4D20 /* 0E7704 7F0B4D14 460C703C */ c.lt.s $f14, $f12 /* 0E7708 7F0B4D18 46006406 */ mov.s $f16, $f12 /* 0E770C 7F0B4D1C 460C703C */ c.lt.s $f14, $f12 .L7F0B4D20: -/* 0E7710 7F0B4D20 00000000 */ nop +/* 0E7710 7F0B4D20 00000000 */ nop /* 0E7714 7F0B4D24 45020003 */ bc1fl .L7F0B4D34 /* 0E7718 7F0B4D28 26520001 */ addiu $s2, $s2, 1 /* 0E771C 7F0B4D2C 46006386 */ mov.s $f14, $f12 @@ -4660,7 +4717,7 @@ glabel sub_GAME_7F0B5864 /** * Unreferenced. - * + * * Address 0x7F0B5B14. */ Gfx *bgFillRectangle(Gfx *gdl, s32 ulx, s32 uly, s32 lrx, s32 lry) @@ -4692,9 +4749,9 @@ void bgFillRectangleWithSides(Gfx *gdl, s32 ulx, s32 uly, s32 lrx, s32 lry) /** * Determines if two rectangles overlap, adjusting first argument to be the intersection. - * + * * Returns 0 if no intersection (or edge equality), 1 otherwise. - * + * * Address 0x7F0B5BDC. */ s32 bgRectIntersect(struct bbox2d *a, struct bbox2d *b) @@ -4766,7 +4823,7 @@ glabel bgDebPrintPORTALID /* 0EA8AC 7F0B5D7C 3C028004 */ lui $v0, %hi(bgDebPortalOutLineNum) /* 0EA8B0 7F0B5D80 8C424860 */ lw $v0, %lo(bgDebPortalOutLineNum)($v0) /* 0EA8B4 7F0B5D84 2401000A */ li $at, 10 -/* 0EA8B8 7F0B5D88 3C188008 */ lui $t8, %hi(bgDebPortalOutBuffer) +/* 0EA8B8 7F0B5D88 3C188008 */ lui $t8, %hi(bgDebPortalOutBuffer) /* 0EA8BC 7F0B5D8C 24420001 */ addiu $v0, $v0, 1 /* 0EA8C0 7F0B5D90 0041001A */ div $zero, $v0, $at /* 0EA8C4 7F0B5D94 00007010 */ mfhi $t6 @@ -4787,7 +4844,7 @@ glabel bgDebPrintPORTALID /* 0EA900 7F0B5DD0 8FA2001C */ lw $v0, 0x1c($sp) /* 0EA904 7F0B5DD4 27BD0020 */ addiu $sp, $sp, 0x20 /* 0EA908 7F0B5DD8 03E00008 */ jr $ra -/* 0EA90C 7F0B5DDC 00000000 */ nop +/* 0EA90C 7F0B5DDC 00000000 */ nop ) #endif @@ -4817,7 +4874,7 @@ glabel bgDebPrintROOMID /* 0EA910 7F0B5DE0 3C028004 */ lui $v0, %hi(bgDebRoomOutLineNum) /* 0EA914 7F0B5DE4 8C424864 */ lw $v0, %lo(bgDebRoomOutLineNum)($v0) /* 0EA918 7F0B5DE8 2401000A */ li $at, 10 -/* 0EA91C 7F0B5DEC 3C188008 */ lui $t8, %hi(bgDebRoomOutBuffer) +/* 0EA91C 7F0B5DEC 3C188008 */ lui $t8, %hi(bgDebRoomOutBuffer) /* 0EA920 7F0B5DF0 24420001 */ addiu $v0, $v0, 1 /* 0EA924 7F0B5DF4 0041001A */ div $zero, $v0, $at /* 0EA928 7F0B5DF8 00007010 */ mfhi $t6 @@ -4838,7 +4895,7 @@ glabel bgDebPrintROOMID /* 0EA964 7F0B5E34 8FA2001C */ lw $v0, 0x1c($sp) /* 0EA968 7F0B5E38 27BD0020 */ addiu $sp, $sp, 0x20 /* 0EA96C 7F0B5E3C 03E00008 */ jr $ra -/* 0EA970 7F0B5E40 00000000 */ nop +/* 0EA970 7F0B5E40 00000000 */ nop ) #endif @@ -4848,37 +4905,40 @@ glabel bgDebPrintROOMID s32 getMaxNumRooms(void) { - return MaxNumRooms; + return g_MaxNumRooms; } /* * Return butflags0 (confirmed u8) */ -u8 getROOMID_Bitflags(s32 roomID) +u8 getROOMID_isRendered(s32 roomID) { - return array_room_info[roomID].bitflags0; + return g_BgRoomInfo[roomID].room_rendered; } /* * Return butflags1 (confirmed u8) */ -u8 getROOMID_Bitflags1(s32 roomID) +u8 getROOMID_isNeighborToRendered(s32 roomID) { - return array_room_info[roomID].bitflags1; + return g_BgRoomInfo[roomID].room_neighbor_to_rendered; } s32 getIndexOfPORTALID(s32 portalID) { s32 i; - + for(i = 0; g_BgPortals[i].offset_portal != NULL; i++) { - if (portalID == (s32)g_BgPortals[i].offset_portal) + if (portalID == (s32)g_BgPortals[i].offset_portal) { return i; } } + #ifdef DEBUG + osSyncPrintf("bg: bgPortalIndexFromPtr(): No portal found for %08x ",portalID); + #endif return 0; } @@ -4902,10 +4962,10 @@ void roomsHandleStateDebugging(void) { { // Node 1 phi_a0_3 = 1; - if (MaxNumRooms >= 2) + if (g_MaxNumRooms >= 2) { // Node 2 - phi_v1 = &array_room_info + 0x10 +0x40; + phi_v1 = &g_BgRoomInfo + 0x10 +0x40; phi_a0 = 1; phi_v0 = &sp29; loop_3: @@ -4927,7 +4987,7 @@ loop_3: phi_a0 = phi_a0_2; phi_v0 = (phi_v0 + 1); phi_a0_3 = phi_a0_2; - if (phi_a0_2 < MaxNumRooms) + if (phi_a0_2 < g_MaxNumRooms) { goto loop_3; } @@ -4947,12 +5007,12 @@ glabel roomsHandleStateDebugging /* 0EAA08 7F0B5ED8 27BDFF40 */ addiu $sp, $sp, -0xc0 /* 0EAA0C 7F0B5EDC AFBF0014 */ sw $ra, 0x14($sp) /* 0EAA10 7F0B5EE0 0FC243F4 */ jal debugIsRoomStateDebugEnabled -/* 0EAA14 7F0B5EE4 00000000 */ nop +/* 0EAA14 7F0B5EE4 00000000 */ nop /* 0EAA18 7F0B5EE8 10400024 */ beqz $v0, .L7F0B5F7C -/* 0EAA1C 7F0B5EEC 3C078004 */ lui $a3, %hi(MaxNumRooms) -/* 0EAA20 7F0B5EF0 8CE742F4 */ lw $a3, %lo(MaxNumRooms)($a3) -/* 0EAA24 7F0B5EF4 3C038004 */ lui $v1, %hi(array_room_info + 0x10 +0x40) -/* 0EAA28 7F0B5EF8 24631464 */ addiu $v1, %lo(array_room_info + 0x10 +0x40) # addiu $v1, $v1, 0x1464 +/* 0EAA1C 7F0B5EEC 3C078004 */ lui $a3, %hi(g_MaxNumRooms) +/* 0EAA20 7F0B5EF0 8CE742F4 */ lw $a3, %lo(g_MaxNumRooms)($a3) +/* 0EAA24 7F0B5EF4 3C038004 */ lui $v1, %hi(g_BgRoomInfo + 0x10 +0x40) +/* 0EAA28 7F0B5EF8 24631464 */ addiu $v1, %lo(g_BgRoomInfo + 0x10 +0x40) # addiu $v1, $v1, 0x1464 /* 0EAA2C 7F0B5EFC 28E10002 */ slti $at, $a3, 2 /* 0EAA30 7F0B5F00 1420001C */ bnez $at, .L7F0B5F74 /* 0EAA34 7F0B5F04 24040001 */ li $a0, 1 @@ -4968,14 +5028,14 @@ glabel roomsHandleStateDebugging /* 0EAA58 7F0B5F28 00007810 */ mfhi $t7 /* 0EAA5C 7F0B5F2C 25F80030 */ addiu $t8, $t7, 0x30 /* 0EAA60 7F0B5F30 14A00002 */ bnez $a1, .L7F0B5F3C -/* 0EAA64 7F0B5F34 00000000 */ nop +/* 0EAA64 7F0B5F34 00000000 */ nop /* 0EAA68 7F0B5F38 0007000D */ break 7 .L7F0B5F3C: /* 0EAA6C 7F0B5F3C 2401FFFF */ li $at, -1 /* 0EAA70 7F0B5F40 14A10004 */ bne $a1, $at, .L7F0B5F54 /* 0EAA74 7F0B5F44 3C018000 */ lui $at, 0x8000 /* 0EAA78 7F0B5F48 14810002 */ bne $a0, $at, .L7F0B5F54 -/* 0EAA7C 7F0B5F4C 00000000 */ nop +/* 0EAA7C 7F0B5F4C 00000000 */ nop /* 0EAA80 7F0B5F50 0006000D */ break 6 .L7F0B5F54: /* 0EAA84 7F0B5F54 A0580000 */ sb $t8, ($v0) @@ -4995,7 +5055,7 @@ glabel roomsHandleStateDebugging /* 0EAAAC 7F0B5F7C 8FBF0014 */ lw $ra, 0x14($sp) /* 0EAAB0 7F0B5F80 27BD00C0 */ addiu $sp, $sp, 0xc0 /* 0EAAB4 7F0B5F84 03E00008 */ jr $ra -/* 0EAAB8 7F0B5F88 00000000 */ nop +/* 0EAAB8 7F0B5F88 00000000 */ nop ) #endif @@ -5006,12 +5066,12 @@ glabel roomsHandleStateDebugging /* 0E7C04 7F0B5214 27BDFF48 */ addiu $sp, $sp, -0xb8 /* 0E7C08 7F0B5218 AFBF0014 */ sw $ra, 0x14($sp) /* 0E7C0C 7F0B521C 0FC2411A */ jal debugIsRoomStateDebugEnabled -/* 0E7C10 7F0B5220 00000000 */ nop +/* 0E7C10 7F0B5220 00000000 */ nop /* 0E7C14 7F0B5224 10400024 */ beqz $v0, .L7F0B52B8 -/* 0E7C18 7F0B5228 3C078004 */ lui $a3, %hi(MaxNumRooms) # $a3, 0x8004 -/* 0E7C1C 7F0B522C 8CE7D7D4 */ lw $a3, %lo(MaxNumRooms)($a3) -/* 0E7C20 7F0B5230 3C038004 */ lui $v1, %hi(array_room_info + 0x10 +0x40) # $v1, 0x8004 -/* 0E7C24 7F0B5234 2463ACB4 */ addiu $v1, %lo(array_room_info + 0x10 +0x40) # addiu $v1, $v1, -0x534c +/* 0E7C18 7F0B5228 3C078004 */ lui $a3, %hi(g_MaxNumRooms) # $a3, 0x8004 +/* 0E7C1C 7F0B522C 8CE7D7D4 */ lw $a3, %lo(g_MaxNumRooms)($a3) +/* 0E7C20 7F0B5230 3C038004 */ lui $v1, %hi(g_BgRoomInfo + 0x10 +0x40) # $v1, 0x8004 +/* 0E7C24 7F0B5234 2463ACB4 */ addiu $v1, %lo(g_BgRoomInfo + 0x10 +0x40) # addiu $v1, $v1, -0x534c /* 0E7C28 7F0B5238 28E10002 */ slti $at, $a3, 2 /* 0E7C2C 7F0B523C 1420001C */ bnez $at, .L7F0B52B0 /* 0E7C30 7F0B5240 24040001 */ li $a0, 1 @@ -5027,14 +5087,14 @@ glabel roomsHandleStateDebugging /* 0E7C54 7F0B5264 00007810 */ mfhi $t7 /* 0E7C58 7F0B5268 25F80030 */ addiu $t8, $t7, 0x30 /* 0E7C5C 7F0B526C 14A00002 */ bnez $a1, .L7F0B5278 -/* 0E7C60 7F0B5270 00000000 */ nop +/* 0E7C60 7F0B5270 00000000 */ nop /* 0E7C64 7F0B5274 0007000D */ break 7 .L7F0B5278: /* 0E7C68 7F0B5278 2401FFFF */ li $at, -1 /* 0E7C6C 7F0B527C 14A10004 */ bne $a1, $at, .L7F0B5290 /* 0E7C70 7F0B5280 3C018000 */ lui $at, 0x8000 /* 0E7C74 7F0B5284 14810002 */ bne $a0, $at, .L7F0B5290 -/* 0E7C78 7F0B5288 00000000 */ nop +/* 0E7C78 7F0B5288 00000000 */ nop /* 0E7C7C 7F0B528C 0006000D */ break 6 .L7F0B5290: /* 0E7C80 7F0B5290 A0580000 */ sb $t8, ($v0) @@ -5054,7 +5114,7 @@ glabel roomsHandleStateDebugging /* 0E7CA8 7F0B52B8 8FBF0014 */ lw $ra, 0x14($sp) /* 0E7CAC 7F0B52BC 27BD00B8 */ addiu $sp, $sp, 0xb8 /* 0E7CB0 7F0B52C0 03E00008 */ jr $ra -/* 0E7CB4 7F0B52C4 00000000 */ nop +/* 0E7CB4 7F0B52C4 00000000 */ nop ) #endif #endif @@ -5080,19 +5140,19 @@ void* sub_GAME_7F0B5FAC(int roomID, int* data, int size) s32 len; - - - len = array_room_info[roomID].csize_point_index_binary + 0xfU & 0xfffffff0; + + + len = g_BgRoomInfo[roomID].csize_point_index_binary + 0xfU & 0xfffffff0; if (size < len + 0x20) { dest = -1; } else { source = (size - len) + data; - obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename, source, + obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename, source, (ptr_bg_data+ &ptr_bgdata_room_fileposition_list[roomID] - ptr_bg_data) + 0xF1000000, len); dest = bgDecompress(source,data); - array_room_info[roomID].usize_point_index_binary = dest; - array_room_info[roomID].ptr_point_index = data; + g_BgRoomInfo[roomID].usize_point_index_binary = dest; + g_BgRoomInfo[roomID].ptr_point_index = data; } return dest; } @@ -5104,8 +5164,8 @@ GLOBAL_ASM( glabel sub_GAME_7F0B5FAC /* 0EAADC 7F0B5FAC 00047880 */ sll $t7, $a0, 2 /* 0EAAE0 7F0B5FB0 01E47821 */ addu $t7, $t7, $a0 -/* 0EAAE4 7F0B5FB4 3C188004 */ lui $t8, %hi(array_room_info) -/* 0EAAE8 7F0B5FB8 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 +/* 0EAAE4 7F0B5FB4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) +/* 0EAAE8 7F0B5FB8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 /* 0EAAEC 7F0B5FBC 000F7900 */ sll $t7, $t7, 4 /* 0EAAF0 7F0B5FC0 01F81821 */ addu $v1, $t7, $t8 /* 0EAAF4 7F0B5FC4 8C670010 */ lw $a3, 0x10($v1) @@ -5126,10 +5186,10 @@ glabel sub_GAME_7F0B5FAC .L7F0B6000: /* 0EAB30 7F0B6000 8FAC0030 */ lw $t4, 0x30($sp) /* 0EAB34 7F0B6004 24080018 */ li $t0, 24 -/* 0EAB38 7F0B6008 3C198004 */ lui $t9, %hi(levelentry_index) +/* 0EAB38 7F0B6008 3C198004 */ lui $t9, %hi(levelentry_index) /* 0EAB3C 7F0B600C 01880019 */ multu $t4, $t0 /* 0EAB40 7F0B6010 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAB44 7F0B6014 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) +/* 0EAB44 7F0B6014 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) /* 0EAB48 7F0B6018 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) /* 0EAB4C 7F0B601C 3C028008 */ lui $v0, %hi(ptr_bg_data) /* 0EAB50 7F0B6020 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) @@ -5163,7 +5223,7 @@ glabel sub_GAME_7F0B5FAC /* 0EABBC 7F0B608C 8FBF0014 */ lw $ra, 0x14($sp) /* 0EABC0 7F0B6090 27BD0030 */ addiu $sp, $sp, 0x30 /* 0EABC4 7F0B6094 03E00008 */ jr $ra -/* 0EABC8 7F0B6098 00000000 */ nop +/* 0EABC8 7F0B6098 00000000 */ nop ) #endif @@ -5173,8 +5233,8 @@ GLOBAL_ASM( glabel sub_GAME_7F0B5FAC /* 0EAADC 7F0B5FAC 00047880 */ sll $t7, $a0, 2 /* 0EAAE0 7F0B5FB0 01E47821 */ addu $t7, $t7, $a0 -/* 0EAAE4 7F0B5FB4 3C188004 */ lui $t8, %hi(array_room_info) -/* 0EAAE8 7F0B5FB8 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 +/* 0EAAE4 7F0B5FB4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) +/* 0EAAE8 7F0B5FB8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 /* 0EAAEC 7F0B5FBC 000F7900 */ sll $t7, $t7, 4 /* 0EAAF0 7F0B5FC0 01F81821 */ addu $v1, $t7, $t8 /* 0EAAF4 7F0B5FC4 8C670010 */ lw $a3, 0x10($v1) @@ -5195,10 +5255,10 @@ glabel sub_GAME_7F0B5FAC .L7F0B6000: /* 0EAB30 7F0B6000 8FAC0030 */ lw $t4, 0x30($sp) /* 0EAB34 7F0B6004 24080018 */ li $t0, 24 -/* 0EAB38 7F0B6008 3C198004 */ lui $t9, %hi(levelentry_index) +/* 0EAB38 7F0B6008 3C198004 */ lui $t9, %hi(levelentry_index) /* 0EAB3C 7F0B600C 01880019 */ multu $t4, $t0 /* 0EAB40 7F0B6010 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAB44 7F0B6014 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) +/* 0EAB44 7F0B6014 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) /* 0EAB48 7F0B6018 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) /* 0EAB4C 7F0B601C 3C028008 */ lui $v0, %hi(ptr_bg_data) /* 0EAB50 7F0B6020 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) @@ -5232,7 +5292,7 @@ glabel sub_GAME_7F0B5FAC /* 0EABBC 7F0B608C 8FBF0014 */ lw $ra, 0x14($sp) /* 0EABC0 7F0B6090 27BD0030 */ addiu $sp, $sp, 0x30 /* 0EABC4 7F0B6094 03E00008 */ jr $ra -/* 0EABC8 7F0B6098 00000000 */ nop +/* 0EABC8 7F0B6098 00000000 */ nop ) #endif @@ -5249,8 +5309,8 @@ u32 * sub_GAME_7F0B609C(int roomID, int *data, u32 size) u32 puVar1; u8 *source; u32 len; - - len = array_room_info[roomID].csize_primary_DL_binary + 0xfU & 0xfffffff0; + + len = g_BgRoomInfo[roomID].csize_primary_DL_binary + 0xfU & 0xfffffff0; if (size < len + 0x20) { dest = 0xffffffff; } @@ -5261,14 +5321,14 @@ u32 * sub_GAME_7F0B609C(int roomID, int *data, u32 size) &ptr_bgdata_room_fileposition_list[roomID] + -0xf000000,len); dest = bgDecompress(source,data); puVar1 = (size - dest) + data; - sub_GAME_7F0CE794(data,puVar1,dest); + texCopyGdls(data,puVar1,dest); clear_light_fixturetable_in_room(roomID); - puVar1 = process_microcode_sort_display_modes_expand_image_calls(puVar1,dest,data,NULL); + puVar1 = texLoadFromGdl(puVar1,dest,data,NULL); if (dest < puVar1) { dest = puVar1; } - array_room_info[roomID].ptr_expanded_mapping_info = data; - array_room_info[roomID].usize_primary_DL_binary = dest; + g_BgRoomInfo[roomID].ptr_expanded_mapping_info = data; + g_BgRoomInfo[roomID].usize_primary_DL_binary = dest; } return dest; } @@ -5280,8 +5340,8 @@ GLOBAL_ASM( glabel sub_GAME_7F0B609C /* 0EABCC 7F0B609C 00047880 */ sll $t7, $a0, 2 /* 0EABD0 7F0B60A0 01E47821 */ addu $t7, $t7, $a0 -/* 0EABD4 7F0B60A4 3C188004 */ lui $t8, %hi(array_room_info) -/* 0EABD8 7F0B60A8 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 +/* 0EABD4 7F0B60A4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) +/* 0EABD8 7F0B60A8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 /* 0EABDC 7F0B60AC 000F7900 */ sll $t7, $t7, 4 /* 0EABE0 7F0B60B0 01F84021 */ addu $t0, $t7, $t8 /* 0EABE4 7F0B60B4 8D070014 */ lw $a3, 0x14($t0) @@ -5304,10 +5364,10 @@ glabel sub_GAME_7F0B609C .L7F0B60F8: /* 0EAC28 7F0B60F8 8FAC0038 */ lw $t4, 0x38($sp) /* 0EAC2C 7F0B60FC 24030018 */ li $v1, 24 -/* 0EAC30 7F0B6100 3C198004 */ lui $t9, %hi(levelentry_index) +/* 0EAC30 7F0B6100 3C198004 */ lui $t9, %hi(levelentry_index) /* 0EAC34 7F0B6104 01830019 */ multu $t4, $v1 /* 0EAC38 7F0B6108 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAC3C 7F0B610C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) +/* 0EAC3C 7F0B610C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) /* 0EAC40 7F0B6110 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) /* 0EAC44 7F0B6114 3C028008 */ lui $v0, %hi(ptr_bg_data) /* 0EAC48 7F0B6118 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) @@ -5338,14 +5398,14 @@ glabel sub_GAME_7F0B609C /* 0EACAC 7F0B617C 01626823 */ subu $t5, $t3, $v0 /* 0EACB0 7F0B6180 01B02821 */ addu $a1, $t5, $s0 /* 0EACB4 7F0B6184 AFA50028 */ sw $a1, 0x28($sp) -/* 0EACB8 7F0B6188 0FC339E5 */ jal sub_GAME_7F0CE794 +/* 0EACB8 7F0B6188 0FC339E5 */ jal texCopyGdls /* 0EACBC 7F0B618C 00403025 */ move $a2, $v0 /* 0EACC0 7F0B6190 0FC2F131 */ jal clear_light_fixturetable_in_room /* 0EACC4 7F0B6194 8FA40038 */ lw $a0, 0x38($sp) /* 0EACC8 7F0B6198 8FA40028 */ lw $a0, 0x28($sp) /* 0EACCC 7F0B619C 02202825 */ move $a1, $s1 /* 0EACD0 7F0B61A0 02003025 */ move $a2, $s0 -/* 0EACD4 7F0B61A4 0FC33846 */ jal process_microcode_sort_display_modes_expand_image_calls +/* 0EACD4 7F0B61A4 0FC33846 */ jal texLoadFromGdl /* 0EACD8 7F0B61A8 00003825 */ move $a3, $zero /* 0EACDC 7F0B61AC 0222082A */ slt $at, $s1, $v0 /* 0EACE0 7F0B61B0 10200002 */ beqz $at, .L7F0B61BC @@ -5370,8 +5430,8 @@ GLOBAL_ASM( glabel sub_GAME_7F0B609C /* 0EABCC 7F0B609C 00047880 */ sll $t7, $a0, 2 /* 0EABD0 7F0B60A0 01E47821 */ addu $t7, $t7, $a0 -/* 0EABD4 7F0B60A4 3C188004 */ lui $t8, %hi(array_room_info) -/* 0EABD8 7F0B60A8 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 +/* 0EABD4 7F0B60A4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) +/* 0EABD8 7F0B60A8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 /* 0EABDC 7F0B60AC 000F7900 */ sll $t7, $t7, 4 /* 0EABE0 7F0B60B0 01F84021 */ addu $t0, $t7, $t8 /* 0EABE4 7F0B60B4 8D070014 */ lw $a3, 0x14($t0) @@ -5394,10 +5454,10 @@ glabel sub_GAME_7F0B609C .L7F0B60F8: /* 0EAC28 7F0B60F8 8FAC0038 */ lw $t4, 0x38($sp) /* 0EAC2C 7F0B60FC 24030018 */ li $v1, 24 -/* 0EAC30 7F0B6100 3C198004 */ lui $t9, %hi(levelentry_index) +/* 0EAC30 7F0B6100 3C198004 */ lui $t9, %hi(levelentry_index) /* 0EAC34 7F0B6104 01830019 */ multu $t4, $v1 /* 0EAC38 7F0B6108 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAC3C 7F0B610C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) +/* 0EAC3C 7F0B610C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) /* 0EAC40 7F0B6110 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) /* 0EAC44 7F0B6114 3C028008 */ lui $v0, %hi(ptr_bg_data) /* 0EAC48 7F0B6118 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) @@ -5428,14 +5488,14 @@ glabel sub_GAME_7F0B609C /* 0EACAC 7F0B617C 01626823 */ subu $t5, $t3, $v0 /* 0EACB0 7F0B6180 01B02821 */ addu $a1, $t5, $s0 /* 0EACB4 7F0B6184 AFA50028 */ sw $a1, 0x28($sp) -/* 0EACB8 7F0B6188 0FC339E5 */ jal sub_GAME_7F0CE794 +/* 0EACB8 7F0B6188 0FC339E5 */ jal texCopyGdls /* 0EACBC 7F0B618C 00403025 */ move $a2, $v0 /* 0EACC0 7F0B6190 0FC2F131 */ jal clear_light_fixturetable_in_room /* 0EACC4 7F0B6194 8FA40038 */ lw $a0, 0x38($sp) /* 0EACC8 7F0B6198 8FA40028 */ lw $a0, 0x28($sp) /* 0EACCC 7F0B619C 02202825 */ move $a1, $s1 /* 0EACD0 7F0B61A0 02003025 */ move $a2, $s0 -/* 0EACD4 7F0B61A4 0FC33846 */ jal process_microcode_sort_display_modes_expand_image_calls +/* 0EACD4 7F0B61A4 0FC33846 */ jal texLoadFromGdl /* 0EACD8 7F0B61A8 00003825 */ move $a3, $zero /* 0EACDC 7F0B61AC 0222082A */ slt $at, $s1, $v0 /* 0EACE0 7F0B61B0 10200002 */ beqz $at, .L7F0B61BC @@ -5467,25 +5527,25 @@ u32 sub_GAME_7F0B61DC(s32 roomID, u32 *data, s32 size) u32 puVar1; u8 *source; u32 len; - - len = array_room_info[roomID].csize_secondary_DL_binary + 0xfU & 0xfffffff0; + + len = g_BgRoomInfo[roomID].csize_secondary_DL_binary + 0xfU & 0xfffffff0; if (size < len + 0x20) { dest = 0xffffffff; } - else + else { source = (size - len) + data; obLoadBGFileBytesAtOffset(levelinfotable[levelentry_index].bg_seg_filename,source, ptr_bgdata_room_fileposition_list[roomID].pos.z + -0xf000000,len); dest = bgDecompress(source,data); puVar1 = (size - dest) + data; - sub_GAME_7F0CE794(data,puVar1,dest); - puVar1 = process_microcode_sort_display_modes_expand_image_calls(puVar1,dest,data,NULL); + texCopyGdls(data,puVar1,dest); + puVar1 = texLoadFromGdl(puVar1,dest,data,NULL); if (dest < puVar1) { dest = puVar1; } - array_room_info[roomID].ptr_secondary_expanded_mapping_info = data; - array_room_info[roomID].usize_secondary_DL_binary = dest; + g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info = data; + g_BgRoomInfo[roomID].usize_secondary_DL_binary = dest; } return dest; } @@ -5497,8 +5557,8 @@ GLOBAL_ASM( glabel sub_GAME_7F0B61DC /* 0EAD0C 7F0B61DC 00047880 */ sll $t7, $a0, 2 /* 0EAD10 7F0B61E0 01E47821 */ addu $t7, $t7, $a0 -/* 0EAD14 7F0B61E4 3C188004 */ lui $t8, %hi(array_room_info) -/* 0EAD18 7F0B61E8 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 +/* 0EAD14 7F0B61E4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) +/* 0EAD18 7F0B61E8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 /* 0EAD1C 7F0B61EC 000F7900 */ sll $t7, $t7, 4 /* 0EAD20 7F0B61F0 01F84021 */ addu $t0, $t7, $t8 /* 0EAD24 7F0B61F4 8D070018 */ lw $a3, 0x18($t0) @@ -5521,10 +5581,10 @@ glabel sub_GAME_7F0B61DC .L7F0B6238: /* 0EAD68 7F0B6238 8FAC0038 */ lw $t4, 0x38($sp) /* 0EAD6C 7F0B623C 24030018 */ li $v1, 24 -/* 0EAD70 7F0B6240 3C198004 */ lui $t9, %hi(levelentry_index) +/* 0EAD70 7F0B6240 3C198004 */ lui $t9, %hi(levelentry_index) /* 0EAD74 7F0B6244 01830019 */ multu $t4, $v1 /* 0EAD78 7F0B6248 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAD7C 7F0B624C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) +/* 0EAD7C 7F0B624C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) /* 0EAD80 7F0B6250 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) /* 0EAD84 7F0B6254 3C028008 */ lui $v0, %hi(ptr_bg_data) /* 0EAD88 7F0B6258 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) @@ -5555,12 +5615,12 @@ glabel sub_GAME_7F0B61DC /* 0EADEC 7F0B62BC 01626823 */ subu $t5, $t3, $v0 /* 0EADF0 7F0B62C0 01B12821 */ addu $a1, $t5, $s1 /* 0EADF4 7F0B62C4 AFA50028 */ sw $a1, 0x28($sp) -/* 0EADF8 7F0B62C8 0FC339E5 */ jal sub_GAME_7F0CE794 +/* 0EADF8 7F0B62C8 0FC339E5 */ jal texCopyGdls /* 0EADFC 7F0B62CC 00403025 */ move $a2, $v0 /* 0EAE00 7F0B62D0 8FA40028 */ lw $a0, 0x28($sp) /* 0EAE04 7F0B62D4 02002825 */ move $a1, $s0 /* 0EAE08 7F0B62D8 02203025 */ move $a2, $s1 -/* 0EAE0C 7F0B62DC 0FC33846 */ jal process_microcode_sort_display_modes_expand_image_calls +/* 0EAE0C 7F0B62DC 0FC33846 */ jal texLoadFromGdl /* 0EAE10 7F0B62E0 00003825 */ move $a3, $zero /* 0EAE14 7F0B62E4 0202082A */ slt $at, $s0, $v0 /* 0EAE18 7F0B62E8 10200002 */ beqz $at, .L7F0B62F4 @@ -5585,8 +5645,8 @@ GLOBAL_ASM( glabel sub_GAME_7F0B61DC /* 0EAD0C 7F0B61DC 00047880 */ sll $t7, $a0, 2 /* 0EAD10 7F0B61E0 01E47821 */ addu $t7, $t7, $a0 -/* 0EAD14 7F0B61E4 3C188004 */ lui $t8, %hi(array_room_info) -/* 0EAD18 7F0B61E8 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 +/* 0EAD14 7F0B61E4 3C188004 */ lui $t8, %hi(g_BgRoomInfo) +/* 0EAD18 7F0B61E8 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 /* 0EAD1C 7F0B61EC 000F7900 */ sll $t7, $t7, 4 /* 0EAD20 7F0B61F0 01F84021 */ addu $t0, $t7, $t8 /* 0EAD24 7F0B61F4 8D070018 */ lw $a3, 0x18($t0) @@ -5609,10 +5669,10 @@ glabel sub_GAME_7F0B61DC .L7F0B6238: /* 0EAD68 7F0B6238 8FAC0038 */ lw $t4, 0x38($sp) /* 0EAD6C 7F0B623C 24030018 */ li $v1, 24 -/* 0EAD70 7F0B6240 3C198004 */ lui $t9, %hi(levelentry_index) +/* 0EAD70 7F0B6240 3C198004 */ lui $t9, %hi(levelentry_index) /* 0EAD74 7F0B6244 01830019 */ multu $t4, $v1 /* 0EAD78 7F0B6248 8F391400 */ lw $t9, %lo(levelentry_index)($t9) -/* 0EAD7C 7F0B624C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) +/* 0EAD7C 7F0B624C 3C0B8008 */ lui $t3, %hi(ptr_bgdata_room_fileposition_list) /* 0EAD80 7F0B6250 8D6BFF8C */ lw $t3, %lo(ptr_bgdata_room_fileposition_list)($t3) /* 0EAD84 7F0B6254 3C028008 */ lui $v0, %hi(ptr_bg_data) /* 0EAD88 7F0B6258 8C42BF90 */ lw $v0, %lo(ptr_bg_data)($v0) @@ -5643,12 +5703,12 @@ glabel sub_GAME_7F0B61DC /* 0EADEC 7F0B62BC 01626823 */ subu $t5, $t3, $v0 /* 0EADF0 7F0B62C0 01B12821 */ addu $a1, $t5, $s1 /* 0EADF4 7F0B62C4 AFA50028 */ sw $a1, 0x28($sp) -/* 0EADF8 7F0B62C8 0FC339E5 */ jal sub_GAME_7F0CE794 +/* 0EADF8 7F0B62C8 0FC339E5 */ jal texCopyGdls /* 0EADFC 7F0B62CC 00403025 */ move $a2, $v0 /* 0EAE00 7F0B62D0 8FA40028 */ lw $a0, 0x28($sp) /* 0EAE04 7F0B62D4 02002825 */ move $a1, $s0 /* 0EAE08 7F0B62D8 02203025 */ move $a2, $s1 -/* 0EAE0C 7F0B62DC 0FC33846 */ jal process_microcode_sort_display_modes_expand_image_calls +/* 0EAE0C 7F0B62DC 0FC33846 */ jal texLoadFromGdl /* 0EAE10 7F0B62E0 00003825 */ move $a3, $zero /* 0EAE14 7F0B62E4 0202082A */ slt $at, $s0, $v0 /* 0EAE18 7F0B62E8 10200002 */ beqz $at, .L7F0B62F4 @@ -5675,8 +5735,8 @@ glabel sub_GAME_7F0B61DC s32 bgCheckIfRoomModelNeedsLoad(s32 roomID) { - array_room_info[roomID].field_35 = 1; - if (array_room_info[roomID].model_bin_loaded == FALSE) + g_BgRoomInfo[roomID].field_35 = 1; + if (g_BgRoomInfo[roomID].model_bin_loaded == FALSE) { sub_GAME_7F0B6368(roomID); return 1; @@ -5689,7 +5749,11 @@ s32 bgCheckIfRoomModelNeedsLoad(s32 roomID) #ifdef NONMATCHING -void sub_GAME_7F0B6368(s32 rooms) { +/* +* Allocates memory for room and update its display lists +* Address: 7F0B6368 +*/ +void sub_GAME_7F0B6368(s32 room) { void *sp1C; s32 sp20; s32 sp28; @@ -5714,10 +5778,10 @@ void sub_GAME_7F0B6368(s32 rooms) { void *phi_v1_3; // Node 0 - if (rooms < MaxNumRooms) + if (room < g_MaxNumRooms) { // Node 1 - temp_v1 = ((rooms * 0x50) + &array_room_info); + temp_v1 = ((room * 0x50) + &g_BgRoomInfo); if (temp_v1->unk2 == 0) { // Node 2 @@ -5751,13 +5815,13 @@ void sub_GAME_7F0B6368(s32 rooms) { { // Node 8 sp1C = temp_v1_2; - temp_ret_2 = sub_GAME_7F0B5FAC(rooms, temp_ret, sp2C, sp28); + temp_ret_2 = sub_GAME_7F0B5FAC(room, temp_ret, sp2C, sp28); if (temp_ret_2 >= 0) { // Node 9 sp1C = temp_v1_2; sp28 = temp_ret_2; - redarken_lights_in_room(rooms, sp28); + redarken_lights_in_room(room, sp28); } } else @@ -5773,7 +5837,7 @@ void sub_GAME_7F0B6368(s32 rooms) { { // Node 12 sp1C = (void *) temp_v1_2; - temp_ret_3 = sub_GAME_7F0B609C(rooms, (sp20 + sp28), (sp2C - sp28), sp28); + temp_ret_3 = sub_GAME_7F0B609C(room, (sp20 + sp28), (sp2C - sp28), sp28); temp_v1_5 = temp_v1_2; phi_v1 = temp_v1_5; phi_a3 = sp28; @@ -5789,7 +5853,7 @@ void sub_GAME_7F0B6368(s32 rooms) { { // Node 15 sp1C = (void *) phi_v1; - temp_ret_4 = sub_GAME_7F0B61DC(rooms, (sp20 + phi_a3), (sp2C - phi_a3), phi_a3); + temp_ret_4 = sub_GAME_7F0B61DC(room, (sp20 + phi_a3), (sp2C - phi_a3), phi_a3); temp_v1_6 = phi_v1; phi_a3_2 = sp28; phi_v1_2 = temp_v1_6; @@ -5847,7 +5911,7 @@ void sub_GAME_7F0B6368(s32 rooms) { } } // Node 25 - sub_GAME_7F0B6994(rooms); + sub_GAME_7F0B6994(room); roomsHandleStateDebugging(); } } @@ -5860,8 +5924,8 @@ void sub_GAME_7F0B6368(s32 rooms) { GLOBAL_ASM( .text glabel sub_GAME_7F0B6368 -/* 0EAE98 7F0B6368 3C0F8004 */ lui $t7, %hi(MaxNumRooms) -/* 0EAE9C 7F0B636C 8DEF42F4 */ lw $t7, %lo(MaxNumRooms)($t7) +/* 0EAE98 7F0B6368 3C0F8004 */ lui $t7, %hi(g_MaxNumRooms) +/* 0EAE9C 7F0B636C 8DEF42F4 */ lw $t7, %lo(g_MaxNumRooms)($t7) /* 0EAEA0 7F0B6370 27BDFFD0 */ addiu $sp, $sp, -0x30 /* 0EAEA4 7F0B6374 AFBF0014 */ sw $ra, 0x14($sp) /* 0EAEA8 7F0B6378 008F082A */ slt $at, $a0, $t7 @@ -5870,8 +5934,8 @@ glabel sub_GAME_7F0B6368 /* 0EAEB4 7F0B6384 00003825 */ move $a3, $zero /* 0EAEB8 7F0B6388 0004C880 */ sll $t9, $a0, 2 /* 0EAEBC 7F0B638C 0324C821 */ addu $t9, $t9, $a0 -/* 0EAEC0 7F0B6390 3C088004 */ lui $t0, %hi(array_room_info) -/* 0EAEC4 7F0B6394 25081414 */ addiu $t0, %lo(array_room_info) # addiu $t0, $t0, 0x1414 +/* 0EAEC0 7F0B6390 3C088004 */ lui $t0, %hi(g_BgRoomInfo) +/* 0EAEC4 7F0B6394 25081414 */ addiu $t0, %lo(g_BgRoomInfo) # addiu $t0, $t0, 0x1414 /* 0EAEC8 7F0B6398 0019C900 */ sll $t9, $t9, 4 /* 0EAECC 7F0B639C 03281821 */ addu $v1, $t9, $t0 /* 0EAED0 7F0B63A0 90690002 */ lbu $t1, 2($v1) @@ -5977,7 +6041,7 @@ glabel sub_GAME_7F0B6368 /* 0EB044 7F0B6514 AFA3001C */ sw $v1, 0x1c($sp) /* 0EB048 7F0B6518 8FA3001C */ lw $v1, 0x1c($sp) .L7F0B651C: -/* 0EB04C 7F0B651C 3C0C8008 */ lui $t4, %hi(g_FogSkyIsEnabled) +/* 0EB04C 7F0B651C 3C0C8008 */ lui $t4, %hi(g_FogSkyIsEnabled) /* 0EB050 7F0B6520 8D8C25C0 */ lw $t4, %lo(g_FogSkyIsEnabled)($t4) /* 0EB054 7F0B6524 24060006 */ li $a2, 6 /* 0EB058 7F0B6528 51800012 */ beql $t4, $zero, .L7F0B6574 @@ -5991,13 +6055,13 @@ glabel sub_GAME_7F0B6368 /* 0EB078 7F0B6548 8FA3001C */ lw $v1, 0x1c($sp) /* 0EB07C 7F0B654C 8C64000C */ lw $a0, 0xc($v1) /* 0EB080 7F0B6550 10800014 */ beqz $a0, .L7F0B65A4 -/* 0EB084 7F0B6554 00000000 */ nop +/* 0EB084 7F0B6554 00000000 */ nop /* 0EB088 7F0B6558 8C6E0024 */ lw $t6, 0x24($v1) /* 0EB08C 7F0B655C 24060005 */ li $a2, 5 /* 0EB090 7F0B6560 0FC2E990 */ jal bgLoadFromDynamicCCRMLUT /* 0EB094 7F0B6564 01C42821 */ addu $a1, $t6, $a0 /* 0EB098 7F0B6568 1000000E */ b .L7F0B65A4 -/* 0EB09C 7F0B656C 00000000 */ nop +/* 0EB09C 7F0B656C 00000000 */ nop /* 0EB0A0 7F0B6570 8C640008 */ lw $a0, 8($v1) .L7F0B6574: /* 0EB0A4 7F0B6574 8C6F0020 */ lw $t7, 0x20($v1) @@ -6007,7 +6071,7 @@ glabel sub_GAME_7F0B6368 /* 0EB0B4 7F0B6584 8FA3001C */ lw $v1, 0x1c($sp) /* 0EB0B8 7F0B6588 8C64000C */ lw $a0, 0xc($v1) /* 0EB0BC 7F0B658C 10800005 */ beqz $a0, .L7F0B65A4 -/* 0EB0C0 7F0B6590 00000000 */ nop +/* 0EB0C0 7F0B6590 00000000 */ nop /* 0EB0C4 7F0B6594 8C780024 */ lw $t8, 0x24($v1) /* 0EB0C8 7F0B6598 24060007 */ li $a2, 7 /* 0EB0CC 7F0B659C 0FC2E990 */ jal bgLoadFromDynamicCCRMLUT @@ -6016,13 +6080,13 @@ glabel sub_GAME_7F0B6368 /* 0EB0D4 7F0B65A4 0FC2DA65 */ jal sub_GAME_7F0B6994 /* 0EB0D8 7F0B65A8 8FA40030 */ lw $a0, 0x30($sp) /* 0EB0DC 7F0B65AC 0FC2D7B6 */ jal roomsHandleStateDebugging -/* 0EB0E0 7F0B65B0 00000000 */ nop +/* 0EB0E0 7F0B65B0 00000000 */ nop .L7F0B65B4: /* 0EB0E4 7F0B65B4 8FBF0014 */ lw $ra, 0x14($sp) .L7F0B65B8: /* 0EB0E8 7F0B65B8 27BD0030 */ addiu $sp, $sp, 0x30 /* 0EB0EC 7F0B65BC 03E00008 */ jr $ra -/* 0EB0F0 7F0B65C0 00000000 */ nop +/* 0EB0F0 7F0B65C0 00000000 */ nop ) #endif @@ -6030,8 +6094,8 @@ glabel sub_GAME_7F0B6368 GLOBAL_ASM( .text glabel sub_GAME_7F0B6368 -/* 0E8094 7F0B56A4 3C0F8004 */ lui $t7, %hi(MaxNumRooms) # $t7, 0x8004 -/* 0E8098 7F0B56A8 8DEFD7D4 */ lw $t7, %lo(MaxNumRooms)($t7) +/* 0E8094 7F0B56A4 3C0F8004 */ lui $t7, %hi(g_MaxNumRooms) # $t7, 0x8004 +/* 0E8098 7F0B56A8 8DEFD7D4 */ lw $t7, %lo(g_MaxNumRooms)($t7) /* 0E809C 7F0B56AC 27BDFFD0 */ addiu $sp, $sp, -0x30 /* 0E80A0 7F0B56B0 AFBF0014 */ sw $ra, 0x14($sp) /* 0E80A4 7F0B56B4 008F082A */ slt $at, $a0, $t7 @@ -6040,8 +6104,8 @@ glabel sub_GAME_7F0B6368 /* 0E80B0 7F0B56C0 00003825 */ move $a3, $zero /* 0E80B4 7F0B56C4 0004C880 */ sll $t9, $a0, 2 /* 0E80B8 7F0B56C8 0324C821 */ addu $t9, $t9, $a0 -/* 0E80BC 7F0B56CC 3C088004 */ lui $t0, %hi(array_room_info) # $t0, 0x8004 -/* 0E80C0 7F0B56D0 2508AC64 */ addiu $t0, %lo(array_room_info) # addiu $t0, $t0, -0x539c +/* 0E80BC 7F0B56CC 3C088004 */ lui $t0, %hi(g_BgRoomInfo) # $t0, 0x8004 +/* 0E80C0 7F0B56D0 2508AC64 */ addiu $t0, %lo(g_BgRoomInfo) # addiu $t0, $t0, -0x539c /* 0E80C4 7F0B56D4 0019C900 */ sll $t9, $t9, 4 /* 0E80C8 7F0B56D8 03281821 */ addu $v1, $t9, $t0 /* 0E80CC 7F0B56DC 90690002 */ lbu $t1, 2($v1) @@ -6161,13 +6225,13 @@ glabel sub_GAME_7F0B6368 /* 0E8274 7F0B5884 8FA3001C */ lw $v1, 0x1c($sp) /* 0E8278 7F0B5888 8C64000C */ lw $a0, 0xc($v1) /* 0E827C 7F0B588C 10800014 */ beqz $a0, .L7F0B58E0 -/* 0E8280 7F0B5890 00000000 */ nop +/* 0E8280 7F0B5890 00000000 */ nop /* 0E8284 7F0B5894 8C6E0024 */ lw $t6, 0x24($v1) /* 0E8288 7F0B5898 24060005 */ li $a2, 5 /* 0E828C 7F0B589C 0FC2E638 */ jal bgLoadFromDynamicCCRMLUT /* 0E8290 7F0B58A0 01C42821 */ addu $a1, $t6, $a0 /* 0E8294 7F0B58A4 1000000E */ b .L7F0B58E0 -/* 0E8298 7F0B58A8 00000000 */ nop +/* 0E8298 7F0B58A8 00000000 */ nop /* 0E829C 7F0B58AC 8C640008 */ lw $a0, 8($v1) .L7F0B58B0: /* 0E82A0 7F0B58B0 8C6F0020 */ lw $t7, 0x20($v1) @@ -6177,7 +6241,7 @@ glabel sub_GAME_7F0B6368 /* 0E82B0 7F0B58C0 8FA3001C */ lw $v1, 0x1c($sp) /* 0E82B4 7F0B58C4 8C64000C */ lw $a0, 0xc($v1) /* 0E82B8 7F0B58C8 10800005 */ beqz $a0, .L7F0B58E0 -/* 0E82BC 7F0B58CC 00000000 */ nop +/* 0E82BC 7F0B58CC 00000000 */ nop /* 0E82C0 7F0B58D0 8C780024 */ lw $t8, 0x24($v1) /* 0E82C4 7F0B58D4 24060007 */ li $a2, 7 /* 0E82C8 7F0B58D8 0FC2E638 */ jal bgLoadFromDynamicCCRMLUT @@ -6186,13 +6250,13 @@ glabel sub_GAME_7F0B6368 /* 0E82D0 7F0B58E0 0FC2D734 */ jal sub_GAME_7F0B6994 /* 0E82D4 7F0B58E4 8FA40030 */ lw $a0, 0x30($sp) /* 0E82D8 7F0B58E8 0FC2D485 */ jal roomsHandleStateDebugging -/* 0E82DC 7F0B58EC 00000000 */ nop +/* 0E82DC 7F0B58EC 00000000 */ nop .L7F0B58F0: /* 0E82E0 7F0B58F0 8FBF0014 */ lw $ra, 0x14($sp) .L7F0B58F4: /* 0E82E4 7F0B58F4 27BD0030 */ addiu $sp, $sp, 0x30 /* 0E82E8 7F0B58F8 03E00008 */ jr $ra -/* 0E82EC 7F0B58FC 00000000 */ nop +/* 0E82EC 7F0B58FC 00000000 */ nop ) #endif @@ -6203,27 +6267,27 @@ glabel sub_GAME_7F0B6368 void delete_room_data(s32 roomID) { - if (array_room_info[roomID].ptr_unique_collision_points) + if (g_BgRoomInfo[roomID].ptr_unique_collision_points) { - memaFree(array_room_info[roomID].ptr_unique_collision_points, (((s16)array_room_info[roomID].bitflags3 * 0x1C) + 0xF) & ~0xF); - array_room_info[roomID].ptr_unique_collision_points = 0; + memaFree(g_BgRoomInfo[roomID].ptr_unique_collision_points, (((s16)g_BgRoomInfo[roomID].bitflags3 * 0x1C) + 0xF) & ~0xF); + g_BgRoomInfo[roomID].ptr_unique_collision_points = 0; } - if ( 0 < array_room_info[roomID].cur_room_totalsize) + if ( 0 < g_BgRoomInfo[roomID].cur_room_totalsize) { - if (array_room_info[roomID].ptr_point_index) + if (g_BgRoomInfo[roomID].ptr_point_index) { - memaFree(array_room_info[roomID].ptr_point_index, array_room_info[roomID].cur_room_totalsize); + memaFree(g_BgRoomInfo[roomID].ptr_point_index, g_BgRoomInfo[roomID].cur_room_totalsize); } else { - memaFree(array_room_info[roomID].ptr_expanded_mapping_info, array_room_info[roomID].cur_room_totalsize); + memaFree(g_BgRoomInfo[roomID].ptr_expanded_mapping_info, g_BgRoomInfo[roomID].cur_room_totalsize); } - array_room_info[roomID].ptr_point_index = 0; - array_room_info[roomID].ptr_expanded_mapping_info = 0; - array_room_info[roomID].ptr_secondary_expanded_mapping_info = 0; + g_BgRoomInfo[roomID].ptr_point_index = 0; + g_BgRoomInfo[roomID].ptr_expanded_mapping_info = 0; + g_BgRoomInfo[roomID].ptr_secondary_expanded_mapping_info = 0; } - array_room_info[roomID].model_bin_loaded = 0; + g_BgRoomInfo[roomID].model_bin_loaded = 0; roomsHandleStateDebugging(); } #else @@ -6233,9 +6297,9 @@ glabel delete_room_data /* 0EB0F4 7F0B65C4 00047080 */ sll $t6, $a0, 2 /* 0EB0F8 7F0B65C8 27BDFFE0 */ addiu $sp, $sp, -0x20 /* 0EB0FC 7F0B65CC 01C47021 */ addu $t6, $t6, $a0 -/* 0EB100 7F0B65D0 3C0F8004 */ lui $t7, %hi(array_room_info) +/* 0EB100 7F0B65D0 3C0F8004 */ lui $t7, %hi(g_BgRoomInfo) /* 0EB104 7F0B65D4 AFB00018 */ sw $s0, 0x18($sp) -/* 0EB108 7F0B65D8 25EF1414 */ addiu $t7, %lo(array_room_info) # addiu $t7, $t7, 0x1414 +/* 0EB108 7F0B65D8 25EF1414 */ addiu $t7, %lo(g_BgRoomInfo) # addiu $t7, $t7, 0x1414 /* 0EB10C 7F0B65DC 000E7100 */ sll $t6, $t6, 4 /* 0EB110 7F0B65E0 01CF8021 */ addu $s0, $t6, $t7 /* 0EB114 7F0B65E4 8E06002C */ lw $a2, 0x2c($s0) @@ -6256,11 +6320,11 @@ glabel delete_room_data /* 0EB150 7F0B6620 8E020028 */ lw $v0, 0x28($s0) .L7F0B6624: /* 0EB154 7F0B6624 1840000E */ blez $v0, .L7F0B6660 -/* 0EB158 7F0B6628 00000000 */ nop +/* 0EB158 7F0B6628 00000000 */ nop /* 0EB15C 7F0B662C 8E040004 */ lw $a0, 4($s0) /* 0EB160 7F0B6630 00402825 */ move $a1, $v0 /* 0EB164 7F0B6634 10800005 */ beqz $a0, .L7F0B664C -/* 0EB168 7F0B6638 00000000 */ nop +/* 0EB168 7F0B6638 00000000 */ nop /* 0EB16C 7F0B663C 0C002808 */ jal memaFree /* 0EB170 7F0B6640 00402825 */ move $a1, $v0 /* 0EB174 7F0B6644 10000004 */ b .L7F0B6658 @@ -6279,7 +6343,7 @@ glabel delete_room_data /* 0EB19C 7F0B666C 8FB00018 */ lw $s0, 0x18($sp) /* 0EB1A0 7F0B6670 27BD0020 */ addiu $sp, $sp, 0x20 /* 0EB1A4 7F0B6674 03E00008 */ jr $ra -/* 0EB1A8 7F0B6678 00000000 */ nop +/* 0EB1A8 7F0B6678 00000000 */ nop ) #endif @@ -6292,9 +6356,9 @@ void unload_rooms(void) { s32 i; - for(i = 1; i < MaxNumRooms; i++) + for(i = 1; i < g_MaxNumRooms; i++) { - if (array_room_info[i].model_bin_loaded) + if (g_BgRoomInfo[i].model_bin_loaded) { delete_room_data(i); } @@ -6307,17 +6371,17 @@ void sub_GAME_7F0B66E8(void) { s32 i; - for(i = 1; i < MaxNumRooms; i++) + for(i = 1; i < g_MaxNumRooms; i++) { - if (array_room_info[i].field_35 == 0) + if (g_BgRoomInfo[i].field_35 == 0) { - if (array_room_info[i].model_bin_loaded == 4) + if (g_BgRoomInfo[i].model_bin_loaded == 4) { delete_room_data(i); } - else if (array_room_info[i].model_bin_loaded != 0) + else if (g_BgRoomInfo[i].model_bin_loaded != 0) { - array_room_info[i].model_bin_loaded = array_room_info[i].model_bin_loaded + 1; + g_BgRoomInfo[i].model_bin_loaded = g_BgRoomInfo[i].model_bin_loaded + 1; } } } @@ -6332,14 +6396,14 @@ void sub_GAME_7F0B66E8(void) */ Gfx *sub_GAME_7F0B677C(Gfx *arg0, s32 room_index) { - if (room_index >= MaxNumRooms) + if (room_index >= g_MaxNumRooms) { return arg0; } if ((D_8004485C != 0) || (D_80044858 == (room_index % 10))) { - if (array_room_info[room_index].model_bin_loaded == 0) + if (g_BgRoomInfo[room_index].model_bin_loaded == 0) { if (D_800442F8 > 0) { @@ -6348,18 +6412,18 @@ Gfx *sub_GAME_7F0B677C(Gfx *arg0, s32 room_index) } } - if (array_room_info[room_index].model_bin_loaded == 0) + if (g_BgRoomInfo[room_index].model_bin_loaded == 0) { return arg0; } else { - arg0 = sub_GAME_7F0BC9C4(arg0, room_index); + arg0 = applyRoomMatrixToDisplayList(arg0, room_index); - gSPSegment(arg0++, SPSEGMENT_BG_VTX, OS_K0_TO_PHYSICAL(array_room_info[room_index].ptr_point_index)); - gSPDisplayList(arg0++, OS_K0_TO_PHYSICAL(array_room_info[room_index].ptr_expanded_mapping_info)); + gSPSegment(arg0++, SPSEGMENT_BG_VTX, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_point_index)); + gSPDisplayList(arg0++, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_expanded_mapping_info)); - array_room_info[room_index].model_bin_loaded = 1; + g_BgRoomInfo[room_index].model_bin_loaded = 1; } } @@ -6373,25 +6437,25 @@ Gfx *sub_GAME_7F0B677C(Gfx *arg0, s32 room_index) */ Gfx *sub_GAME_7F0B6898(Gfx *arg0, s32 room_index) { - if (room_index >= MaxNumRooms) + if (room_index >= g_MaxNumRooms) { return arg0; } - if (array_room_info[room_index].ptr_secondary_expanded_mapping_info == 0) + if (g_BgRoomInfo[room_index].ptr_secondary_expanded_mapping_info == 0) { return arg0; } else if ((D_8004485C != 0) || (D_80044858 == (room_index % 10))) { - if (array_room_info[room_index].model_bin_loaded != 0) + if (g_BgRoomInfo[room_index].model_bin_loaded != 0) { - arg0 = sub_GAME_7F0BC9C4(arg0, room_index); + arg0 = applyRoomMatrixToDisplayList(arg0, room_index); - gSPSegment(arg0++, SPSEGMENT_BG_VTX, OS_K0_TO_PHYSICAL(array_room_info[room_index].ptr_point_index)); - gSPDisplayList(arg0++, OS_K0_TO_PHYSICAL(array_room_info[room_index].ptr_secondary_expanded_mapping_info)); + gSPSegment(arg0++, SPSEGMENT_BG_VTX, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_point_index)); + gSPDisplayList(arg0++, OS_K0_TO_PHYSICAL(g_BgRoomInfo[room_index].ptr_secondary_expanded_mapping_info)); - array_room_info[room_index].model_bin_loaded = 1; + g_BgRoomInfo[room_index].model_bin_loaded = 1; } else { @@ -6405,6 +6469,10 @@ Gfx *sub_GAME_7F0B6898(Gfx *arg0, s32 room_index) #ifdef NONMATCHING +/* +* Is this related to room collisions? (for bullets) +* Address: 7F0B6994 +*/ void sub_GAME_7F0B6994(s32 arg0) { s32 sp24; s32 sp3C; @@ -6441,7 +6509,7 @@ void sub_GAME_7F0B6994(s32 arg0) { s32 phi_t5_4; // Node 0 - temp_a1 = ((arg0 * 0x50) + &array_room_info); + temp_a1 = ((arg0 * 0x50) + &g_BgRoomInfo); if (temp_a1->unk2C == 0) { // Node 1 @@ -6619,8 +6687,8 @@ GLOBAL_ASM( glabel sub_GAME_7F0B6994 /* 0EB4C4 7F0B6994 00047880 */ sll $t7, $a0, 2 /* 0EB4C8 7F0B6998 01E47821 */ addu $t7, $t7, $a0 -/* 0EB4CC 7F0B699C 3C188004 */ lui $t8, %hi(array_room_info) -/* 0EB4D0 7F0B69A0 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 +/* 0EB4CC 7F0B699C 3C188004 */ lui $t8, %hi(g_BgRoomInfo) +/* 0EB4D0 7F0B69A0 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 /* 0EB4D4 7F0B69A4 000F7900 */ sll $t7, $t7, 4 /* 0EB4D8 7F0B69A8 01F82821 */ addu $a1, $t7, $t8 /* 0EB4DC 7F0B69AC 8CB9002C */ lw $t9, 0x2c($a1) @@ -6649,7 +6717,7 @@ glabel sub_GAME_7F0B6994 .L7F0B6A04: /* 0EB534 7F0B6A04 256B0008 */ addiu $t3, $t3, 8 /* 0EB538 7F0B6A08 1603FFFA */ bne $s0, $v1, .L7F0B69F4 -/* 0EB53C 7F0B6A0C 00000000 */ nop +/* 0EB53C 7F0B6A0C 00000000 */ nop .L7F0B6A10: /* 0EB540 7F0B6A10 000D20C0 */ sll $a0, $t5, 3 /* 0EB544 7F0B6A14 008D2023 */ subu $a0, $a0, $t5 @@ -6674,7 +6742,7 @@ glabel sub_GAME_7F0B6994 /* 0EB590 7F0B6A60 0000F825 */ move $ra, $zero /* 0EB594 7F0B6A64 1219009C */ beq $s0, $t9, .L7F0B6CD8 /* 0EB598 7F0B6A68 00C05825 */ move $t3, $a2 -/* 0EB59C 7F0B6A6C 3C0C8008 */ lui $t4, %hi(ptr_bgdata_room_fileposition_list) +/* 0EB59C 7F0B6A6C 3C0C8008 */ lui $t4, %hi(ptr_bgdata_room_fileposition_list) /* 0EB5A0 7F0B6A70 258CFF8C */ addiu $t4, %lo(ptr_bgdata_room_fileposition_list) # addiu $t4, $t4, -0x74 /* 0EB5A4 7F0B6A74 80C30000 */ lb $v1, ($a2) /* 0EB5A8 7F0B6A78 24098000 */ li $t1, -32768 @@ -6756,7 +6824,7 @@ glabel sub_GAME_7F0B6994 /* 0EB6B8 7F0B6B88 8C8F0018 */ lw $t7, 0x18($a0) /* 0EB6BC 7F0B6B8C 01E3082A */ slt $at, $t7, $v1 /* 0EB6C0 7F0B6B90 10200002 */ beqz $at, .L7F0B6B9C -/* 0EB6C4 7F0B6B94 00000000 */ nop +/* 0EB6C4 7F0B6B94 00000000 */ nop /* 0EB6C8 7F0B6B98 AC830018 */ sw $v1, 0x18($a0) .L7F0B6B9C: /* 0EB6CC 7F0B6B9C 14C7FFDA */ bne $a2, $a3, .L7F0B6B08 @@ -6791,7 +6859,7 @@ glabel sub_GAME_7F0B6994 /* 0EB730 7F0B6C00 25AD0001 */ addiu $t5, $t5, 1 /* 0EB734 7F0B6C04 4600218D */ trunc.w.s $f6, $f4 /* 0EB738 7F0B6C08 440E3000 */ mfc1 $t6, $f6 -/* 0EB73C 7F0B6C0C 00000000 */ nop +/* 0EB73C 7F0B6C0C 00000000 */ nop /* 0EB740 7F0B6C10 032E7821 */ addu $t7, $t9, $t6 /* 0EB744 7F0B6C14 AC8F0004 */ sw $t7, 4($a0) /* 0EB748 7F0B6C18 8D990000 */ lw $t9, ($t4) @@ -6799,7 +6867,7 @@ glabel sub_GAME_7F0B6994 /* 0EB750 7F0B6C20 C5C80010 */ lwc1 $f8, 0x10($t6) /* 0EB754 7F0B6C24 4600428D */ trunc.w.s $f10, $f8 /* 0EB758 7F0B6C28 44195000 */ mfc1 $t9, $f10 -/* 0EB75C 7F0B6C2C 00000000 */ nop +/* 0EB75C 7F0B6C2C 00000000 */ nop /* 0EB760 7F0B6C30 03197021 */ addu $t6, $t8, $t9 /* 0EB764 7F0B6C34 AC8E0008 */ sw $t6, 8($a0) /* 0EB768 7F0B6C38 8D8F0000 */ lw $t7, ($t4) @@ -6808,7 +6876,7 @@ glabel sub_GAME_7F0B6994 /* 0EB774 7F0B6C44 8C980010 */ lw $t8, 0x10($a0) /* 0EB778 7F0B6C48 4600848D */ trunc.w.s $f18, $f16 /* 0EB77C 7F0B6C4C 440E9000 */ mfc1 $t6, $f18 -/* 0EB780 7F0B6C50 00000000 */ nop +/* 0EB780 7F0B6C50 00000000 */ nop /* 0EB784 7F0B6C54 006E7821 */ addu $t7, $v1, $t6 /* 0EB788 7F0B6C58 AC8F000C */ sw $t7, 0xc($a0) /* 0EB78C 7F0B6C5C 8D990000 */ lw $t9, ($t4) @@ -6817,7 +6885,7 @@ glabel sub_GAME_7F0B6994 /* 0EB798 7F0B6C68 C5C4000C */ lwc1 $f4, 0xc($t6) /* 0EB79C 7F0B6C6C 4600218D */ trunc.w.s $f6, $f4 /* 0EB7A0 7F0B6C70 44193000 */ mfc1 $t9, $f6 -/* 0EB7A4 7F0B6C74 00000000 */ nop +/* 0EB7A4 7F0B6C74 00000000 */ nop /* 0EB7A8 7F0B6C78 03197021 */ addu $t6, $t8, $t9 /* 0EB7AC 7F0B6C7C AC8E0010 */ sw $t6, 0x10($a0) /* 0EB7B0 7F0B6C80 8D980000 */ lw $t8, ($t4) @@ -6826,7 +6894,7 @@ glabel sub_GAME_7F0B6994 /* 0EB7BC 7F0B6C8C C7280010 */ lwc1 $f8, 0x10($t9) /* 0EB7C0 7F0B6C90 4600428D */ trunc.w.s $f10, $f8 /* 0EB7C4 7F0B6C94 44185000 */ mfc1 $t8, $f10 -/* 0EB7C8 7F0B6C98 00000000 */ nop +/* 0EB7C8 7F0B6C98 00000000 */ nop /* 0EB7CC 7F0B6C9C 01F8C821 */ addu $t9, $t7, $t8 /* 0EB7D0 7F0B6CA0 AC990014 */ sw $t9, 0x14($a0) /* 0EB7D4 7F0B6CA4 8D8F0000 */ lw $t7, ($t4) @@ -6834,7 +6902,7 @@ glabel sub_GAME_7F0B6994 /* 0EB7DC 7F0B6CAC C7100014 */ lwc1 $f16, 0x14($t8) /* 0EB7E0 7F0B6CB0 4600848D */ trunc.w.s $f18, $f16 /* 0EB7E4 7F0B6CB4 440F9000 */ mfc1 $t7, $f18 -/* 0EB7E8 7F0B6CB8 00000000 */ nop +/* 0EB7E8 7F0B6CB8 00000000 */ nop /* 0EB7EC 7F0B6CBC 01CFC021 */ addu $t8, $t6, $t7 /* 0EB7F0 7F0B6CC0 AC980018 */ sw $t8, 0x18($a0) .L7F0B6CC4: @@ -6842,7 +6910,7 @@ glabel sub_GAME_7F0B6994 /* 0EB7F8 7F0B6CC8 27FF0001 */ addiu $ra, $ra, 1 /* 0EB7FC 7F0B6CCC 256B0008 */ addiu $t3, $t3, 8 /* 0EB800 7F0B6CD0 1603FF6B */ bne $s0, $v1, .L7F0B6A80 -/* 0EB804 7F0B6CD4 00000000 */ nop +/* 0EB804 7F0B6CD4 00000000 */ nop .L7F0B6CD8: /* 0EB808 7F0B6CD8 8FBF001C */ lw $ra, 0x1c($sp) /* 0EB80C 7F0B6CDC 8FB00014 */ lw $s0, 0x14($sp) @@ -7010,7 +7078,7 @@ bool bgTestLineIntersectsBbox(coord3d *arg0, coord3d *arg1, s32 *arg2, s32 *arg3 #ifdef NONMATCHING -?32 sub_GAME_7F0B7010(void *arg0, s32 arg1, ?32 arg2, void *arg3, s32 arg4, void *arg5) { +?32 bgTestLineIntersectionInRoom(void *arg0, s32 arg1, ?32 arg2, void *arg3, s32 arg4, void *arg5) { s32 sp54; void *sp64; s32 sp80; @@ -7066,7 +7134,7 @@ bool bgTestLineIntersectsBbox(coord3d *arg0, coord3d *arg1, s32 *arg2, s32 *arg3 void *phi_t0_2; // Node 0 - temp_t0 = ((arg4 * 0x50) + &array_room_info); + temp_t0 = ((arg4 * 0x50) + &g_BgRoomInfo); temp_s3 = ((*arg3 * 8) + temp_t0->unk8); spF0 = 0x7fffffff; sp12C = 0; @@ -7156,7 +7224,7 @@ loop_5: { // Node 19 phi_t0_2 = &spA8; - if (sub_GAME_7F092890((temp_s1 + (spE4 * 0x10)), (temp_s1 + (spE8 * 0x10)), (temp_s1 + (spEC * 0x10)), ((sp54 + ptr_bgdata_room_fileposition_list) + 0xc), arg0, arg1, arg2, &spF8) != 0) + if (intersectLineTriangle((temp_s1 + (spE4 * 0x10)), (temp_s1 + (spE8 * 0x10)), (temp_s1 + (spEC * 0x10)), ((sp54 + ptr_bgdata_room_fileposition_list) + 0xc), arg0, arg1, arg2, &spF8) != 0) { // Node 20 temp_v0_4 = phi_s3; @@ -7340,7 +7408,7 @@ loop_42: if (bgTestLineIntersectsBbox(arg0, arg2, &sp8C, &sp80) != 0) { // Node 56 - if (sub_GAME_7F092890((temp_s1 + (sp9C * 0x10)), (temp_s1 + (spA0 * 0x10)), (temp_s1 + (spA4 * 0x10)), ((sp54 + ptr_bgdata_room_fileposition_list) + 0xc), arg0, arg1, arg2, &spF8) != 0) + if (intersectLineTriangle((temp_s1 + (sp9C * 0x10)), (temp_s1 + (spA0 * 0x10)), (temp_s1 + (spA4 * 0x10)), ((sp54 + ptr_bgdata_room_fileposition_list) + 0xc), arg0, arg1, arg2, &spF8) != 0) { // Node 57 temp_v0_6 = phi_s3; @@ -7439,10 +7507,10 @@ loop_59: #else GLOBAL_ASM( .text -glabel sub_GAME_7F0B7010 +glabel bgTestLineIntersectionInRoom /* 0EBB40 7F0B7010 27BDFEC0 */ addiu $sp, $sp, -0x140 /* 0EBB44 7F0B7014 8FAE0150 */ lw $t6, 0x150($sp) -/* 0EBB48 7F0B7018 3C188004 */ lui $t8, %hi(array_room_info) +/* 0EBB48 7F0B7018 3C188004 */ lui $t8, %hi(g_BgRoomInfo) /* 0EBB4C 7F0B701C AFBF004C */ sw $ra, 0x4c($sp) /* 0EBB50 7F0B7020 000E7880 */ sll $t7, $t6, 2 /* 0EBB54 7F0B7024 01EE7821 */ addu $t7, $t7, $t6 @@ -7459,7 +7527,7 @@ glabel sub_GAME_7F0B7010 /* 0EBB80 7F0B7050 AFA50144 */ sw $a1, 0x144($sp) /* 0EBB84 7F0B7054 AFA60148 */ sw $a2, 0x148($sp) /* 0EBB88 7F0B7058 000F7900 */ sll $t7, $t7, 4 -/* 0EBB8C 7F0B705C 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 +/* 0EBB8C 7F0B705C 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 /* 0EBB90 7F0B7060 84F90000 */ lh $t9, ($a3) /* 0EBB94 7F0B7064 01F84021 */ addu $t0, $t7, $t8 /* 0EBB98 7F0B7068 8D130008 */ lw $s3, 8($t0) @@ -7491,11 +7559,11 @@ glabel sub_GAME_7F0B7010 /* 0EBC00 7F0B70D0 2401FFBF */ li $at, -65 .L7F0B70D4: /* 0EBC04 7F0B70D4 1441011F */ bne $v0, $at, .L7F0B7554 -/* 0EBC08 7F0B70D8 3C0E8004 */ lui $t6, %hi(D_80044868) +/* 0EBC08 7F0B70D8 3C0E8004 */ lui $t6, %hi(D_80044868) /* 0EBC0C 7F0B70DC 25CE4868 */ addiu $t6, %lo(D_80044868) # addiu $t6, $t6, 0x4868 /* 0EBC10 7F0B70E0 8DC10000 */ lw $at, ($t6) /* 0EBC14 7F0B70E4 27A600D4 */ addiu $a2, $sp, 0xd4 -/* 0EBC18 7F0B70E8 3C198004 */ lui $t9, %hi(D_80044874) +/* 0EBC18 7F0B70E8 3C198004 */ lui $t9, %hi(D_80044874) /* 0EBC1C 7F0B70EC ACC10000 */ sw $at, ($a2) /* 0EBC20 7F0B70F0 8DD80004 */ lw $t8, 4($t6) /* 0EBC24 7F0B70F4 27394874 */ addiu $t9, %lo(D_80044874) # addiu $t9, $t9, 0x4874 @@ -7519,14 +7587,14 @@ glabel sub_GAME_7F0B7010 /* 0EBC6C 7F0B713C AFAD00E4 */ sw $t5, 0xe4($sp) /* 0EBC70 7F0B7140 926F0006 */ lbu $t7, 6($s3) /* 0EBC74 7F0B7144 14A00002 */ bnez $a1, .L7F0B7150 -/* 0EBC78 7F0B7148 00000000 */ nop +/* 0EBC78 7F0B7148 00000000 */ nop /* 0EBC7C 7F0B714C 0007000D */ break 7 .L7F0B7150: /* 0EBC80 7F0B7150 2401FFFF */ li $at, -1 /* 0EBC84 7F0B7154 14A10004 */ bne $a1, $at, .L7F0B7168 /* 0EBC88 7F0B7158 3C018000 */ lui $at, 0x8000 /* 0EBC8C 7F0B715C 15610002 */ bne $t3, $at, .L7F0B7168 -/* 0EBC90 7F0B7160 00000000 */ nop +/* 0EBC90 7F0B7160 00000000 */ nop /* 0EBC94 7F0B7164 0006000D */ break 6 .L7F0B7168: /* 0EBC98 7F0B7168 01E5001A */ div $zero, $t7, $a1 @@ -7535,14 +7603,14 @@ glabel sub_GAME_7F0B7010 /* 0EBCA4 7F0B7174 AFB800E8 */ sw $t8, 0xe8($sp) /* 0EBCA8 7F0B7178 92690007 */ lbu $t1, 7($s3) /* 0EBCAC 7F0B717C 14A00002 */ bnez $a1, .L7F0B7188 -/* 0EBCB0 7F0B7180 00000000 */ nop +/* 0EBCB0 7F0B7180 00000000 */ nop /* 0EBCB4 7F0B7184 0007000D */ break 7 .L7F0B7188: /* 0EBCB8 7F0B7188 2401FFFF */ li $at, -1 /* 0EBCBC 7F0B718C 14A10004 */ bne $a1, $at, .L7F0B71A0 /* 0EBCC0 7F0B7190 3C018000 */ lui $at, 0x8000 /* 0EBCC4 7F0B7194 15E10002 */ bne $t7, $at, .L7F0B71A0 -/* 0EBCC8 7F0B7198 00000000 */ nop +/* 0EBCC8 7F0B7198 00000000 */ nop /* 0EBCCC 7F0B719C 0006000D */ break 6 .L7F0B71A0: /* 0EBCD0 7F0B71A0 0125001A */ div $zero, $t1, $a1 @@ -7555,14 +7623,14 @@ glabel sub_GAME_7F0B7010 /* 0EBCEC 7F0B71BC AFAA00EC */ sw $t2, 0xec($sp) /* 0EBCF0 7F0B71C0 AFAC0054 */ sw $t4, 0x54($sp) /* 0EBCF4 7F0B71C4 14A00002 */ bnez $a1, .L7F0B71D0 -/* 0EBCF8 7F0B71C8 00000000 */ nop +/* 0EBCF8 7F0B71C8 00000000 */ nop /* 0EBCFC 7F0B71CC 0007000D */ break 7 .L7F0B71D0: /* 0EBD00 7F0B71D0 2401FFFF */ li $at, -1 /* 0EBD04 7F0B71D4 14A10004 */ bne $a1, $at, .L7F0B71E8 /* 0EBD08 7F0B71D8 3C018000 */ lui $at, 0x8000 /* 0EBD0C 7F0B71DC 15210002 */ bne $t1, $at, .L7F0B71E8 -/* 0EBD10 7F0B71E0 00000000 */ nop +/* 0EBD10 7F0B71E0 00000000 */ nop /* 0EBD14 7F0B71E4 0006000D */ break 6 .L7F0B71E8: /* 0EBD18 7F0B71E8 8C8D0000 */ lw $t5, ($a0) @@ -7610,12 +7678,12 @@ glabel sub_GAME_7F0B7010 .L7F0B727C: /* 0EBDAC 7F0B727C 0162082A */ slt $at, $t3, $v0 /* 0EBDB0 7F0B7280 10200002 */ beqz $at, .L7F0B728C -/* 0EBDB4 7F0B7284 00000000 */ nop +/* 0EBDB4 7F0B7284 00000000 */ nop /* 0EBDB8 7F0B7288 AFA200D0 */ sw $v0, 0xd0($sp) .L7F0B728C: /* 0EBDBC 7F0B728C 548CFFD7 */ bnel $a0, $t4, .L7F0B71EC /* 0EBDC0 7F0B7290 8C8D0000 */ lw $t5, ($a0) -/* 0EBDC4 7F0B7294 3C0D8008 */ lui $t5, %hi(ptr_bgdata_room_fileposition_list) +/* 0EBDC4 7F0B7294 3C0D8008 */ lui $t5, %hi(ptr_bgdata_room_fileposition_list) /* 0EBDC8 7F0B7298 8DADFF8C */ lw $t5, %lo(ptr_bgdata_room_fileposition_list)($t5) /* 0EBDCC 7F0B729C 8FAF0054 */ lw $t7, 0x54($sp) /* 0EBDD0 7F0B72A0 8FAE00D4 */ lw $t6, 0xd4($sp) @@ -7627,40 +7695,40 @@ glabel sub_GAME_7F0B7010 /* 0EBDE8 7F0B72B8 4600218D */ trunc.w.s $f6, $f4 /* 0EBDEC 7F0B72BC 8FA50148 */ lw $a1, 0x148($sp) /* 0EBDF0 7F0B72C0 44093000 */ mfc1 $t1, $f6 -/* 0EBDF4 7F0B72C4 00000000 */ nop +/* 0EBDF4 7F0B72C4 00000000 */ nop /* 0EBDF8 7F0B72C8 01C9C821 */ addu $t9, $t6, $t1 /* 0EBDFC 7F0B72CC AFB900D4 */ sw $t9, 0xd4($sp) /* 0EBE00 7F0B72D0 C4480010 */ lwc1 $f8, 0x10($v0) /* 0EBE04 7F0B72D4 8FB900C8 */ lw $t9, 0xc8($sp) /* 0EBE08 7F0B72D8 4600428D */ trunc.w.s $f10, $f8 /* 0EBE0C 7F0B72DC 440C5000 */ mfc1 $t4, $f10 -/* 0EBE10 7F0B72E0 00000000 */ nop +/* 0EBE10 7F0B72E0 00000000 */ nop /* 0EBE14 7F0B72E4 014C6821 */ addu $t5, $t2, $t4 /* 0EBE18 7F0B72E8 AFAD00D8 */ sw $t5, 0xd8($sp) /* 0EBE1C 7F0B72EC C4500014 */ lwc1 $f16, 0x14($v0) /* 0EBE20 7F0B72F0 8FAD00CC */ lw $t5, 0xcc($sp) /* 0EBE24 7F0B72F4 4600848D */ trunc.w.s $f18, $f16 /* 0EBE28 7F0B72F8 440E9000 */ mfc1 $t6, $f18 -/* 0EBE2C 7F0B72FC 00000000 */ nop +/* 0EBE2C 7F0B72FC 00000000 */ nop /* 0EBE30 7F0B7300 01EE4821 */ addu $t1, $t7, $t6 /* 0EBE34 7F0B7304 AFA900DC */ sw $t1, 0xdc($sp) /* 0EBE38 7F0B7308 C444000C */ lwc1 $f4, 0xc($v0) /* 0EBE3C 7F0B730C 8FA900D0 */ lw $t1, 0xd0($sp) /* 0EBE40 7F0B7310 4600218D */ trunc.w.s $f6, $f4 /* 0EBE44 7F0B7314 440A3000 */ mfc1 $t2, $f6 -/* 0EBE48 7F0B7318 00000000 */ nop +/* 0EBE48 7F0B7318 00000000 */ nop /* 0EBE4C 7F0B731C 032A6021 */ addu $t4, $t9, $t2 /* 0EBE50 7F0B7320 AFAC00C8 */ sw $t4, 0xc8($sp) /* 0EBE54 7F0B7324 C4480010 */ lwc1 $f8, 0x10($v0) /* 0EBE58 7F0B7328 4600428D */ trunc.w.s $f10, $f8 /* 0EBE5C 7F0B732C 440F5000 */ mfc1 $t7, $f10 -/* 0EBE60 7F0B7330 00000000 */ nop +/* 0EBE60 7F0B7330 00000000 */ nop /* 0EBE64 7F0B7334 01AF7021 */ addu $t6, $t5, $t7 /* 0EBE68 7F0B7338 AFAE00CC */ sw $t6, 0xcc($sp) /* 0EBE6C 7F0B733C C4500014 */ lwc1 $f16, 0x14($v0) /* 0EBE70 7F0B7340 4600848D */ trunc.w.s $f18, $f16 /* 0EBE74 7F0B7344 44199000 */ mfc1 $t9, $f18 -/* 0EBE78 7F0B7348 00000000 */ nop +/* 0EBE78 7F0B7348 00000000 */ nop /* 0EBE7C 7F0B734C 01395021 */ addu $t2, $t1, $t9 /* 0EBE80 7F0B7350 0FC2DB3B */ jal bgTestLineIntersectsBbox /* 0EBE84 7F0B7354 AFAA00D0 */ sw $t2, 0xd0($sp) @@ -7668,7 +7736,7 @@ glabel sub_GAME_7F0B7010 /* 0EBE8C 7F0B735C 27A800A8 */ addiu $t0, $sp, 0xa8 /* 0EBE90 7F0B7360 8FAC00E4 */ lw $t4, 0xe4($sp) /* 0EBE94 7F0B7364 8FAD00E8 */ lw $t5, 0xe8($sp) -/* 0EBE98 7F0B7368 3C198008 */ lui $t9, %hi(ptr_bgdata_room_fileposition_list) +/* 0EBE98 7F0B7368 3C198008 */ lui $t9, %hi(ptr_bgdata_room_fileposition_list) /* 0EBE9C 7F0B736C 000CC100 */ sll $t8, $t4, 4 /* 0EBEA0 7F0B7370 8F39FF8C */ lw $t9, %lo(ptr_bgdata_room_fileposition_list)($t9) /* 0EBEA4 7F0B7374 8FAE00EC */ lw $t6, 0xec($sp) @@ -7687,7 +7755,7 @@ glabel sub_GAME_7F0B7010 /* 0EBED8 7F0B73A8 022F2821 */ addu $a1, $s1, $t7 /* 0EBEDC 7F0B73AC AFB80018 */ sw $t8, 0x18($sp) /* 0EBEE0 7F0B73B0 AFAC0014 */ sw $t4, 0x14($sp) -/* 0EBEE4 7F0B73B4 0FC24A24 */ jal sub_GAME_7F092890 +/* 0EBEE4 7F0B73B4 0FC24A24 */ jal intersectLineTriangle /* 0EBEE8 7F0B73B8 AFAA0010 */ sw $t2, 0x10($sp) /* 0EBEEC 7F0B73BC 1040019A */ beqz $v0, .L7F0B7A28 /* 0EBEF0 7F0B73C0 27A800A8 */ addiu $t0, $sp, 0xa8 @@ -7724,7 +7792,7 @@ glabel sub_GAME_7F0B7010 /* 0EBF6C 7F0B743C 8FAE0064 */ lw $t6, 0x64($sp) /* 0EBF70 7F0B7440 0000C812 */ mflo $t9 /* 0EBF74 7F0B7444 01396021 */ addu $t4, $t1, $t9 -/* 0EBF78 7F0B7448 00000000 */ nop +/* 0EBF78 7F0B7448 00000000 */ nop /* 0EBF7C 7F0B744C 00A50019 */ multu $a1, $a1 /* 0EBF80 7F0B7450 00005012 */ mflo $t2 /* 0EBF84 7F0B7454 018A9021 */ addu $s2, $t4, $t2 @@ -7807,14 +7875,14 @@ glabel sub_GAME_7F0B7010 /* 0EC09C 7F0B756C AFB80054 */ sw $t8, 0x54($sp) /* 0EC0A0 7F0B7570 0000A825 */ move $s5, $zero .L7F0B7574: -/* 0EC0A4 7F0B7574 3C0B8004 */ lui $t3, %hi(D_80044880) +/* 0EC0A4 7F0B7574 3C0B8004 */ lui $t3, %hi(D_80044880) /* 0EC0A8 7F0B7578 256B4880 */ addiu $t3, %lo(D_80044880) # addiu $t3, $t3, 0x4880 /* 0EC0AC 7F0B757C 8D610000 */ lw $at, ($t3) /* 0EC0B0 7F0B7580 27AD008C */ addiu $t5, $sp, 0x8c /* 0EC0B4 7F0B7584 8D690004 */ lw $t1, 4($t3) /* 0EC0B8 7F0B7588 ADA10000 */ sw $at, ($t5) /* 0EC0BC 7F0B758C 8D610008 */ lw $at, 8($t3) -/* 0EC0C0 7F0B7590 3C0C8004 */ lui $t4, %hi(D_8004488C) +/* 0EC0C0 7F0B7590 3C0C8004 */ lui $t4, %hi(D_8004488C) /* 0EC0C4 7F0B7594 258C488C */ addiu $t4, %lo(D_8004488C) # addiu $t4, $t4, 0x488c /* 0EC0C8 7F0B7598 ADA90004 */ sw $t1, 4($t5) /* 0EC0CC 7F0B759C ADA10008 */ sw $at, 8($t5) @@ -7932,12 +8000,12 @@ glabel sub_GAME_7F0B7010 .L7F0B7738: /* 0EC268 7F0B7738 0182082A */ slt $at, $t4, $v0 /* 0EC26C 7F0B773C 10200002 */ beqz $at, .L7F0B7748 -/* 0EC270 7F0B7740 00000000 */ nop +/* 0EC270 7F0B7740 00000000 */ nop /* 0EC274 7F0B7744 AFA20088 */ sw $v0, 0x88($sp) .L7F0B7748: /* 0EC278 7F0B7748 5488FFD8 */ bnel $a0, $t0, .L7F0B76AC /* 0EC27C 7F0B774C 8C8F0000 */ lw $t7, ($a0) -/* 0EC280 7F0B7750 3C0E8008 */ lui $t6, %hi(ptr_bgdata_room_fileposition_list) +/* 0EC280 7F0B7750 3C0E8008 */ lui $t6, %hi(ptr_bgdata_room_fileposition_list) /* 0EC284 7F0B7754 8DCEFF8C */ lw $t6, %lo(ptr_bgdata_room_fileposition_list)($t6) /* 0EC288 7F0B7758 8FAF0054 */ lw $t7, 0x54($sp) /* 0EC28C 7F0B775C 8FAD008C */ lw $t5, 0x8c($sp) @@ -7951,40 +8019,40 @@ glabel sub_GAME_7F0B7010 /* 0EC2AC 7F0B777C 27A6008C */ addiu $a2, $sp, 0x8c /* 0EC2B0 7F0B7780 27A70080 */ addiu $a3, $sp, 0x80 /* 0EC2B4 7F0B7784 44093000 */ mfc1 $t1, $f6 -/* 0EC2B8 7F0B7788 00000000 */ nop +/* 0EC2B8 7F0B7788 00000000 */ nop /* 0EC2BC 7F0B778C 01A9C021 */ addu $t8, $t5, $t1 /* 0EC2C0 7F0B7790 AFB8008C */ sw $t8, 0x8c($sp) /* 0EC2C4 7F0B7794 C4480010 */ lwc1 $f8, 0x10($v0) /* 0EC2C8 7F0B7798 8FB80080 */ lw $t8, 0x80($sp) /* 0EC2CC 7F0B779C 4600428D */ trunc.w.s $f10, $f8 /* 0EC2D0 7F0B77A0 440C5000 */ mfc1 $t4, $f10 -/* 0EC2D4 7F0B77A4 00000000 */ nop +/* 0EC2D4 7F0B77A4 00000000 */ nop /* 0EC2D8 7F0B77A8 014C7021 */ addu $t6, $t2, $t4 /* 0EC2DC 7F0B77AC AFAE0090 */ sw $t6, 0x90($sp) /* 0EC2E0 7F0B77B0 C4500014 */ lwc1 $f16, 0x14($v0) /* 0EC2E4 7F0B77B4 8FAE0084 */ lw $t6, 0x84($sp) /* 0EC2E8 7F0B77B8 4600848D */ trunc.w.s $f18, $f16 /* 0EC2EC 7F0B77BC 440D9000 */ mfc1 $t5, $f18 -/* 0EC2F0 7F0B77C0 00000000 */ nop +/* 0EC2F0 7F0B77C0 00000000 */ nop /* 0EC2F4 7F0B77C4 01ED4821 */ addu $t1, $t7, $t5 /* 0EC2F8 7F0B77C8 AFA90094 */ sw $t1, 0x94($sp) /* 0EC2FC 7F0B77CC C444000C */ lwc1 $f4, 0xc($v0) /* 0EC300 7F0B77D0 8FA90088 */ lw $t1, 0x88($sp) /* 0EC304 7F0B77D4 4600218D */ trunc.w.s $f6, $f4 /* 0EC308 7F0B77D8 440A3000 */ mfc1 $t2, $f6 -/* 0EC30C 7F0B77DC 00000000 */ nop +/* 0EC30C 7F0B77DC 00000000 */ nop /* 0EC310 7F0B77E0 030A6021 */ addu $t4, $t8, $t2 /* 0EC314 7F0B77E4 AFAC0080 */ sw $t4, 0x80($sp) /* 0EC318 7F0B77E8 C4480010 */ lwc1 $f8, 0x10($v0) /* 0EC31C 7F0B77EC 4600428D */ trunc.w.s $f10, $f8 /* 0EC320 7F0B77F0 440F5000 */ mfc1 $t7, $f10 -/* 0EC324 7F0B77F4 00000000 */ nop +/* 0EC324 7F0B77F4 00000000 */ nop /* 0EC328 7F0B77F8 01CF6821 */ addu $t5, $t6, $t7 /* 0EC32C 7F0B77FC AFAD0084 */ sw $t5, 0x84($sp) /* 0EC330 7F0B7800 C4500014 */ lwc1 $f16, 0x14($v0) /* 0EC334 7F0B7804 4600848D */ trunc.w.s $f18, $f16 /* 0EC338 7F0B7808 44189000 */ mfc1 $t8, $f18 -/* 0EC33C 7F0B780C 00000000 */ nop +/* 0EC33C 7F0B780C 00000000 */ nop /* 0EC340 7F0B7810 01385021 */ addu $t2, $t1, $t8 /* 0EC344 7F0B7814 0FC2DB3B */ jal bgTestLineIntersectsBbox /* 0EC348 7F0B7818 AFAA0088 */ sw $t2, 0x88($sp) @@ -7992,7 +8060,7 @@ glabel sub_GAME_7F0B7010 /* 0EC350 7F0B7820 27A800A8 */ addiu $t0, $sp, 0xa8 /* 0EC354 7F0B7824 8FAC009C */ lw $t4, 0x9c($sp) /* 0EC358 7F0B7828 8FAE00A0 */ lw $t6, 0xa0($sp) -/* 0EC35C 7F0B782C 3C188008 */ lui $t8, %hi(ptr_bgdata_room_fileposition_list) +/* 0EC35C 7F0B782C 3C188008 */ lui $t8, %hi(ptr_bgdata_room_fileposition_list) /* 0EC360 7F0B7830 000C5900 */ sll $t3, $t4, 4 /* 0EC364 7F0B7834 8F18FF8C */ lw $t8, %lo(ptr_bgdata_room_fileposition_list)($t8) /* 0EC368 7F0B7838 8FAD00A4 */ lw $t5, 0xa4($sp) @@ -8011,7 +8079,7 @@ glabel sub_GAME_7F0B7010 /* 0EC39C 7F0B786C 022F2821 */ addu $a1, $s1, $t7 /* 0EC3A0 7F0B7870 AFAB0018 */ sw $t3, 0x18($sp) /* 0EC3A4 7F0B7874 AFAC0014 */ sw $t4, 0x14($sp) -/* 0EC3A8 7F0B7878 0FC24A24 */ jal sub_GAME_7F092890 +/* 0EC3A8 7F0B7878 0FC24A24 */ jal intersectLineTriangle /* 0EC3AC 7F0B787C AFAA0010 */ sw $t2, 0x10($sp) /* 0EC3B0 7F0B7880 10400065 */ beqz $v0, .L7F0B7A18 /* 0EC3B4 7F0B7884 27A800A8 */ addiu $t0, $sp, 0xa8 @@ -8048,7 +8116,7 @@ glabel sub_GAME_7F0B7010 /* 0EC430 7F0B7900 8FAD0064 */ lw $t5, 0x64($sp) /* 0EC434 7F0B7904 0000C012 */ mflo $t8 /* 0EC438 7F0B7908 01386021 */ addu $t4, $t1, $t8 -/* 0EC43C 7F0B790C 00000000 */ nop +/* 0EC43C 7F0B790C 00000000 */ nop /* 0EC440 7F0B7910 00A50019 */ multu $a1, $a1 /* 0EC444 7F0B7914 00005012 */ mflo $t2 /* 0EC448 7F0B7918 018A9021 */ addu $s2, $t4, $t2 @@ -8126,7 +8194,7 @@ glabel sub_GAME_7F0B7010 .L7F0B7A1C: /* 0EC54C 7F0B7A1C 24010004 */ li $at, 4 /* 0EC550 7F0B7A20 16A1FED4 */ bne $s5, $at, .L7F0B7574 -/* 0EC554 7F0B7A24 00000000 */ nop +/* 0EC554 7F0B7A24 00000000 */ nop .L7F0B7A28: /* 0EC558 7F0B7A28 82620008 */ lb $v0, 8($s3) .L7F0B7A2C: @@ -8158,13 +8226,13 @@ glabel sub_GAME_7F0B7010 #ifdef NONMATCHING -void sub_GAME_7F0B7A78(void) { +void bgTestBulletHitBackground(void) { } #else GLOBAL_ASM( .text -glabel sub_GAME_7F0B7A78 +glabel bgTestBulletHitBackground /* 0EC5A8 7F0B7A78 27BDFF28 */ addiu $sp, $sp, -0xd8 /* 0EC5AC 7F0B7A7C 3C0E7FFF */ lui $t6, (0x7FFFFFFF >> 16) # lui $t6, 0x7fff /* 0EC5B0 7F0B7A80 35CEFFFF */ ori $t6, (0x7FFFFFFF & 0xFFFF) # ori $t6, $t6, 0xffff @@ -8187,8 +8255,8 @@ glabel sub_GAME_7F0B7A78 /* 0EC5F4 7F0B7AC4 0006C080 */ sll $t8, $a2, 2 /* 0EC5F8 7F0B7AC8 0306C021 */ addu $t8, $t8, $a2 /* 0EC5FC 7F0B7ACC 46002182 */ mul.s $f6, $f4, $f0 -/* 0EC600 7F0B7AD0 3C198004 */ lui $t9, %hi(array_room_info) -/* 0EC604 7F0B7AD4 27391414 */ addiu $t9, %lo(array_room_info) # addiu $t9, $t9, 0x1414 +/* 0EC600 7F0B7AD0 3C198004 */ lui $t9, %hi(g_BgRoomInfo) +/* 0EC604 7F0B7AD4 27391414 */ addiu $t9, %lo(g_BgRoomInfo) # addiu $t9, $t9, 0x1414 /* 0EC608 7F0B7AD8 0018C100 */ sll $t8, $t8, 4 /* 0EC60C 7F0B7ADC 03194021 */ addu $t0, $t8, $t9 /* 0EC610 7F0B7AE0 8D02002C */ lw $v0, 0x2c($t0) @@ -8249,7 +8317,7 @@ glabel sub_GAME_7F0B7A78 /* 0EC6E4 7F0B7BB4 27A500B8 */ addiu $a1, $sp, 0xb8 /* 0EC6E8 7F0B7BB8 03C03025 */ move $a2, $fp /* 0EC6EC 7F0B7BBC 02603825 */ move $a3, $s3 -/* 0EC6F0 7F0B7BC0 0FC2DC04 */ jal sub_GAME_7F0B7010 +/* 0EC6F0 7F0B7BC0 0FC2DC04 */ jal bgTestLineIntersectionInRoom /* 0EC6F4 7F0B7BC4 AFA90010 */ sw $t1, 0x10($sp) /* 0EC6F8 7F0B7BC8 1040003D */ beqz $v0, .L7F0B7CC0 /* 0EC6FC 7F0B7BCC C7AA007C */ lwc1 $f10, 0x7c($sp) @@ -8272,11 +8340,11 @@ glabel sub_GAME_7F0B7A78 /* 0EC740 7F0B7C10 4600320D */ trunc.w.s $f8, $f6 /* 0EC744 7F0B7C14 00007012 */ mflo $t6 /* 0EC748 7F0B7C18 44054000 */ mfc1 $a1, $f8 -/* 0EC74C 7F0B7C1C 00000000 */ nop +/* 0EC74C 7F0B7C1C 00000000 */ nop /* 0EC750 7F0B7C20 00630019 */ multu $v1, $v1 /* 0EC754 7F0B7C24 00007812 */ mflo $t7 /* 0EC758 7F0B7C28 01CFC021 */ addu $t8, $t6, $t7 -/* 0EC75C 7F0B7C2C 00000000 */ nop +/* 0EC75C 7F0B7C2C 00000000 */ nop /* 0EC760 7F0B7C30 00A50019 */ multu $a1, $a1 /* 0EC764 7F0B7C34 0000C812 */ mflo $t9 /* 0EC768 7F0B7C38 03199021 */ addu $s2, $t8, $t9 @@ -8396,14 +8464,14 @@ u8 sub_GAME_7F0B7DA8(s32 arg0) u8 bitflags; u8 out; - room_info = &array_room_info[arg0]; - bitflags = room_info->bitflags2; + room_info = &g_BgRoomInfo[arg0]; + bitflags = room_info->portals_to_room_count; out = bitflags; if ((s32) bitflags < 0xFF) { tmp_flags = bitflags + 1; - room_info->bitflags2 = tmp_flags; + room_info->portals_to_room_count = tmp_flags; out = tmp_flags & 0xFF; } @@ -8432,7 +8500,7 @@ void sub_GAME_7F0B7DE4(s32 arg0, s32 arg1, s32 arg2, s32 arg3, void *arg4) { temp_v1->unk14 = (f32) arg4->unk4; temp_v1->unk18 = (f32) arg4->unk8; temp_v1->unk1C = (f32) arg4->unkC; - temp_a0 = (*&D_800448A0 + 1); + temp_a0 = D_800448A4; *&D_800448A0 = temp_a0; phi_a0 = temp_a0; if (temp_a0 == 0x1f4) @@ -8445,6 +8513,9 @@ void sub_GAME_7F0B7DE4(s32 arg0, s32 arg1, s32 arg2, s32 arg3, void *arg4) { if (D_800448A4 == phi_a0) { // Node 5 + #ifdef DEBUG + osSyncPrintf("bg: pstackat: Overflow "); + #endif *&D_800448A0 = (s32) (phi_a0 + -1); } } @@ -8461,11 +8532,11 @@ void sub_GAME_7F0B7DE4(s32 arg0, s32 arg1, s32 arg2, s32 arg3, void *arg4) { GLOBAL_ASM( .text glabel sub_GAME_7F0B7DE4 -/* 0EC914 7F0B7DE4 3C088004 */ lui $t0, %hi(D_800448A0) +/* 0EC914 7F0B7DE4 3C088004 */ lui $t0, %hi(D_800448A0) /* 0EC918 7F0B7DE8 250848A0 */ addiu $t0, %lo(D_800448A0) # addiu $t0, $t0, 0x48a0 /* 0EC91C 7F0B7DEC 8D0E0000 */ lw $t6, ($t0) /* 0EC920 7F0B7DF0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0EC924 7F0B7DF4 3C188008 */ lui $t8, %hi(dword_CODE_bss_8007C100) +/* 0EC924 7F0B7DF4 3C188008 */ lui $t8, %hi(dword_CODE_bss_8007C100) /* 0EC928 7F0B7DF8 2718C100 */ addiu $t8, %lo(dword_CODE_bss_8007C100) # addiu $t8, $t8, -0x3f00 /* 0EC92C 7F0B7DFC 28E10002 */ slti $at, $a3, 2 /* 0EC930 7F0B7E00 000E7940 */ sll $t7, $t6, 5 @@ -8475,7 +8546,7 @@ glabel sub_GAME_7F0B7DE4 /* 0EC940 7F0B7E10 AFA60028 */ sw $a2, 0x28($sp) /* 0EC944 7F0B7E14 14200012 */ bnez $at, .L7F0B7E60 /* 0EC948 7F0B7E18 01F81821 */ addu $v1, $t7, $t8 -/* 0EC94C 7F0B7E1C 3C198008 */ lui $t9, %hi(g_BgPortals) +/* 0EC94C 7F0B7E1C 3C198008 */ lui $t9, %hi(g_BgPortals) /* 0EC950 7F0B7E20 8F39FF80 */ lw $t9, %lo(g_BgPortals)($t9) /* 0EC954 7F0B7E24 000650C0 */ sll $t2, $a2, 3 /* 0EC958 7F0B7E28 032A1021 */ addu $v0, $t9, $t2 @@ -8486,7 +8557,7 @@ glabel sub_GAME_7F0B7DE4 /* 0EC96C 7F0B7E3C 016C6826 */ xor $t5, $t3, $t4 /* 0EC970 7F0B7E40 0FC2DF6A */ jal sub_GAME_7F0B7DA8 /* 0EC974 7F0B7E44 01A52026 */ xor $a0, $t5, $a1 -/* 0EC978 7F0B7E48 3C088004 */ lui $t0, %hi(D_800448A0) +/* 0EC978 7F0B7E48 3C088004 */ lui $t0, %hi(D_800448A0) /* 0EC97C 7F0B7E4C 28410009 */ slti $at, $v0, 9 /* 0EC980 7F0B7E50 250848A0 */ addiu $t0, %lo(D_800448A0) # addiu $t0, $t0, 0x48a0 /* 0EC984 7F0B7E54 8FA3001C */ lw $v1, 0x1c($sp) @@ -8498,7 +8569,7 @@ glabel sub_GAME_7F0B7DE4 /* 0EC998 7F0B7E68 240101F4 */ li $at, 500 /* 0EC99C 7F0B7E6C AC6F0000 */ sw $t7, ($v1) /* 0EC9A0 7F0B7E70 8FB80024 */ lw $t8, 0x24($sp) -/* 0EC9A4 7F0B7E74 3C0B8004 */ lui $t3, %hi(D_800448A4) +/* 0EC9A4 7F0B7E74 3C0B8004 */ lui $t3, %hi(D_800448A4) /* 0EC9A8 7F0B7E78 AC780004 */ sw $t8, 4($v1) /* 0EC9AC 7F0B7E7C 8FA90028 */ lw $t1, 0x28($sp) /* 0EC9B0 7F0B7E80 AC67000C */ sw $a3, 0xc($v1) @@ -8528,7 +8599,7 @@ glabel sub_GAME_7F0B7DE4 .L7F0B7ED8: /* 0ECA08 7F0B7ED8 27BD0020 */ addiu $sp, $sp, 0x20 /* 0ECA0C 7F0B7EDC 03E00008 */ jr $ra -/* 0ECA10 7F0B7EE0 00000000 */ nop +/* 0ECA10 7F0B7EE0 00000000 */ nop ) #endif @@ -8603,7 +8674,7 @@ glabel sub_GAME_7F0B7DE4 .L7F0B7214: /* 0E9C04 7F0B7214 27BD0020 */ addiu $sp, $sp, 0x20 /* 0E9C08 7F0B7218 03E00008 */ jr $ra -/* 0E9C0C 7F0B721C 00000000 */ nop +/* 0E9C0C 7F0B721C 00000000 */ nop ) #endif @@ -8615,7 +8686,26 @@ glabel sub_GAME_7F0B7DE4 #ifdef NONMATCHING void sub_GAME_7F0B7EE4(void) { + int iVar1; + undefined8 uVar2; + if (_D_800448A4 == _D_800448A0) + { + uVar2 = 0; + } + else + { + iVar1 = _D_800448A4 * 0x14; + bgPortalDescend(*(&QWORD_83aa1dd0 + iVar1),*(&QWORD_83aa1dd0 + iVar1 + 1), + *(&QWORD_83aa1dd0 + iVar1 + 2),&QWORD_83aa1dd0 + iVar1 + 4); + _D_800448A4 += 1; + if (_D_800448A4 == 0xfa) + { + _D_800448A4 = 0; + } + uVar2 = 1; + } + return uVar2; } #else @@ -8626,7 +8716,7 @@ glabel sub_GAME_7F0B7EE4 /* 0ECA14 7F0B7EE4 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 0ECA18 7F0B7EE8 3C038004 */ lui $v1, %hi(D_800448A4) /* 0ECA1C 7F0B7EEC 246348A4 */ addiu $v1, %lo(D_800448A4) # addiu $v1, $v1, 0x48a4 -/* 0ECA20 7F0B7EF0 3C188004 */ lui $t8, %hi(D_800448A0) +/* 0ECA20 7F0B7EF0 3C188004 */ lui $t8, %hi(D_800448A0) /* 0ECA24 7F0B7EF4 8F1848A0 */ lw $t8, %lo(D_800448A0)($t8) /* 0ECA28 7F0B7EF8 8C680000 */ lw $t0, ($v1) /* 0ECA2C 7F0B7EFC AFBF001C */ sw $ra, 0x1c($sp) @@ -8638,7 +8728,7 @@ glabel sub_GAME_7F0B7EE4 /* 0ECA44 7F0B7F14 10000017 */ b .L7F0B7F74 /* 0ECA48 7F0B7F18 00001025 */ move $v0, $zero .L7F0B7F1C: -/* 0ECA4C 7F0B7F1C 3C098008 */ lui $t1, %hi(dword_CODE_bss_8007C100) +/* 0ECA4C 7F0B7F1C 3C098008 */ lui $t1, %hi(dword_CODE_bss_8007C100) /* 0ECA50 7F0B7F20 2529C100 */ addiu $t1, %lo(dword_CODE_bss_8007C100) # addiu $t1, $t1, -0x3f00 /* 0ECA54 7F0B7F24 03291021 */ addu $v0, $t9, $t1 /* 0ECA58 7F0B7F28 8C450004 */ lw $a1, 4($v0) @@ -8665,7 +8755,7 @@ glabel sub_GAME_7F0B7EE4 /* 0ECAA4 7F0B7F74 8FBF001C */ lw $ra, 0x1c($sp) /* 0ECAA8 7F0B7F78 27BD0028 */ addiu $sp, $sp, 0x28 /* 0ECAAC 7F0B7F7C 03E00008 */ jr $ra -/* 0ECAB0 7F0B7F80 00000000 */ nop +/* 0ECAB0 7F0B7F80 00000000 */ nop ) #endif @@ -8708,7 +8798,7 @@ glabel sub_GAME_7F0B7EE4 /* 0E9C88 7F0B7298 8FBF0014 */ lw $ra, 0x14($sp) /* 0E9C8C 7F0B729C 27BD0018 */ addiu $sp, $sp, 0x18 /* 0E9C90 7F0B72A0 03E00008 */ jr $ra -/* 0E9C94 7F0B72A4 00000000 */ nop +/* 0E9C94 7F0B72A4 00000000 */ nop ) #endif @@ -8717,10 +8807,16 @@ glabel sub_GAME_7F0B7EE4 - +#define PORTMAX 200 #ifdef NONMATCHING -void sub_GAME_7F0B7F84(void) { - +//bgPortalDesend +void sub_GAME_7F0B7F84(void, int p, int arg2) { + if (arg2 > 100) + { + osSyncPrintf("bg: << Deep\n"); + } + assert(ptype==RS_STOP) + #endif - return parse_global_vis_command_list(cmd, 1); + return parse_global_vis_command_list(pc, 1); } @@ -10375,10 +10474,10 @@ glabel sub_GAME_7F0B8A6C /* 0ED5D4 7F0B8AA4 C44A1124 */ lwc1 $f10, 0x1124($v0) /* 0ED5D8 7F0B8AA8 0FC2CEF1 */ jal sub_GAME_7F0B3BC4 /* 0ED5DC 7F0B8AAC E7AA005C */ swc1 $f10, 0x5c($sp) -/* 0ED5E0 7F0B8AB0 3C028004 */ lui $v0, %hi(array_room_info) -/* 0ED5E4 7F0B8AB4 3C038004 */ lui $v1, %hi(MaxNumRooms) -/* 0ED5E8 7F0B8AB8 246342F4 */ addiu $v1, %lo(MaxNumRooms) # addiu $v1, $v1, 0x42f4 -/* 0ED5EC 7F0B8ABC 24421414 */ addiu $v0, %lo(array_room_info) # addiu $v0, $v0, 0x1414 +/* 0ED5E0 7F0B8AB0 3C028004 */ lui $v0, %hi(g_BgRoomInfo) +/* 0ED5E4 7F0B8AB4 3C038004 */ lui $v1, %hi(g_MaxNumRooms) +/* 0ED5E8 7F0B8AB8 246342F4 */ addiu $v1, %lo(g_MaxNumRooms) # addiu $v1, $v1, 0x42f4 +/* 0ED5EC 7F0B8ABC 24421414 */ addiu $v0, %lo(g_BgRoomInfo) # addiu $v0, $v0, 0x1414 .L7F0B8AC0: /* 0ED5F0 7F0B8AC0 24420050 */ addiu $v0, $v0, 0x50 /* 0ED5F4 7F0B8AC4 0043082B */ sltu $at, $v0, $v1 @@ -10411,20 +10510,20 @@ glabel sub_GAME_7F0B8A6C /* 0ED65C 7F0B8B2C 0FC2DF65 */ jal sub_GAME_7F0B7D94 /* 0ED660 7F0B8B30 AC204898 */ sw $zero, %lo(D_80044898)($at) /* 0ED664 7F0B8B34 0FC2D45A */ jal sub_GAME_7F0B5168 -/* 0ED668 7F0B8B38 00000000 */ nop +/* 0ED668 7F0B8B38 00000000 */ nop /* 0ED66C 7F0B8B3C 3C048008 */ lui $a0, %hi(dword_CODE_bss_8007FF90) /* 0ED670 7F0B8B40 0FC2E289 */ jal sub_GAME_7F0B8A24 /* 0ED674 7F0B8B44 8C84FF90 */ lw $a0, %lo(dword_CODE_bss_8007FF90)($a0) /* 0ED678 7F0B8B48 3C028004 */ lui $v0, %hi(levelentry_index) /* 0ED67C 7F0B8B4C 8C421400 */ lw $v0, %lo(levelentry_index)($v0) /* 0ED680 7F0B8B50 24030015 */ li $v1, 21 -/* 0ED684 7F0B8B54 3C198008 */ lui $t9, %hi(g_BgPortals) +/* 0ED684 7F0B8B54 3C198008 */ lui $t9, %hi(g_BgPortals) /* 0ED688 7F0B8B58 10620005 */ beq $v1, $v0, .L7F0B8B70 -/* 0ED68C 7F0B8B5C 00000000 */ nop +/* 0ED68C 7F0B8B5C 00000000 */ nop /* 0ED690 7F0B8B60 8F39FF80 */ lw $t9, %lo(g_BgPortals)($t9) /* 0ED694 7F0B8B64 8F2A0000 */ lw $t2, ($t9) /* 0ED698 7F0B8B68 15400023 */ bnez $t2, .L7F0B8BF8 -/* 0ED69C 7F0B8B6C 00000000 */ nop +/* 0ED69C 7F0B8B6C 00000000 */ nop .L7F0B8B70: /* 0ED6A0 7F0B8B70 14620006 */ bne $v1, $v0, .L7F0B8B8C /* 0ED6A4 7F0B8B74 24040009 */ li $a0, 9 @@ -10434,12 +10533,12 @@ glabel sub_GAME_7F0B8A6C /* 0ED6B4 7F0B8B84 0FC2CE6F */ jal sub_GAME_7F0B39BC /* 0ED6B8 7F0B8B88 24C61118 */ addiu $a2, $a2, 0x1118 .L7F0B8B8C: -/* 0ED6BC 7F0B8B8C 3C0B8004 */ lui $t3, %hi(MaxNumRooms) -/* 0ED6C0 7F0B8B90 8D6B42F4 */ lw $t3, %lo(MaxNumRooms)($t3) +/* 0ED6BC 7F0B8B8C 3C0B8004 */ lui $t3, %hi(g_MaxNumRooms) +/* 0ED6C0 7F0B8B90 8D6B42F4 */ lw $t3, %lo(g_MaxNumRooms)($t3) /* 0ED6C4 7F0B8B94 24100001 */ li $s0, 1 /* 0ED6C8 7F0B8B98 29610002 */ slti $at, $t3, 2 /* 0ED6CC 7F0B8B9C 14200012 */ bnez $at, .L7F0B8BE8 -/* 0ED6D0 7F0B8BA0 00000000 */ nop +/* 0ED6D0 7F0B8BA0 00000000 */ nop /* 0ED6D4 7F0B8BA4 8E250000 */ lw $a1, ($s1) .L7F0B8BA8: /* 0ED6D8 7F0B8BA8 02002025 */ move $a0, $s0 @@ -10453,8 +10552,8 @@ glabel sub_GAME_7F0B8A6C /* 0ED6F8 7F0B8BC8 0FC2CE6F */ jal sub_GAME_7F0B39BC /* 0ED6FC 7F0B8BCC 24C61118 */ addiu $a2, $a2, 0x1118 .L7F0B8BD0: -/* 0ED700 7F0B8BD0 3C0C8004 */ lui $t4, %hi(MaxNumRooms) -/* 0ED704 7F0B8BD4 8D8C42F4 */ lw $t4, %lo(MaxNumRooms)($t4) +/* 0ED700 7F0B8BD0 3C0C8004 */ lui $t4, %hi(g_MaxNumRooms) +/* 0ED704 7F0B8BD4 8D8C42F4 */ lw $t4, %lo(g_MaxNumRooms)($t4) /* 0ED708 7F0B8BD8 26100001 */ addiu $s0, $s0, 1 /* 0ED70C 7F0B8BDC 020C082A */ slt $at, $s0, $t4 /* 0ED710 7F0B8BE0 5420FFF1 */ bnezl $at, .L7F0B8BA8 @@ -10502,7 +10601,7 @@ glabel sub_GAME_7F0B8A6C /* 0ED7A4 7F0B8C74 AFB80010 */ sw $t8, 0x10($sp) /* 0ED7A8 7F0B8C78 0FC2DF79 */ jal sub_GAME_7F0B7DE4 /* 0ED7AC 7F0B8C7C AFA30034 */ sw $v1, 0x34($sp) -/* 0ED7B0 7F0B8C80 3C198008 */ lui $t9, %hi(g_BgPortals) +/* 0ED7B0 7F0B8C80 3C198008 */ lui $t9, %hi(g_BgPortals) /* 0ED7B4 7F0B8C84 8F39FF80 */ lw $t9, %lo(g_BgPortals)($t9) /* 0ED7B8 7F0B8C88 8FA30034 */ lw $v1, 0x34($sp) /* 0ED7BC 7F0B8C8C 03231021 */ addu $v0, $t9, $v1 @@ -10518,12 +10617,12 @@ glabel sub_GAME_7F0B8A6C /* 0ED7DC 7F0B8CAC 0FC2DFB9 */ jal sub_GAME_7F0B7EE4 /* 0ED7E0 7F0B8CB0 02002025 */ move $a0, $s0 /* 0ED7E4 7F0B8CB4 10400005 */ beqz $v0, .L7F0B8CCC -/* 0ED7E8 7F0B8CB8 00000000 */ nop +/* 0ED7E8 7F0B8CB8 00000000 */ nop .L7F0B8CBC: /* 0ED7EC 7F0B8CBC 0FC2DFB9 */ jal sub_GAME_7F0B7EE4 /* 0ED7F0 7F0B8CC0 02002025 */ move $a0, $s0 /* 0ED7F4 7F0B8CC4 1440FFFD */ bnez $v0, .L7F0B8CBC -/* 0ED7F8 7F0B8CC8 00000000 */ nop +/* 0ED7F8 7F0B8CC8 00000000 */ nop .L7F0B8CCC: /* 0ED7FC 7F0B8CCC 3C048008 */ lui $a0, %hi(g_BgPortals) /* 0ED800 7F0B8CD0 8C84FF80 */ lw $a0, %lo(g_BgPortals)($a0) @@ -10531,8 +10630,8 @@ glabel sub_GAME_7F0B8A6C .L7F0B8CD8: /* 0ED808 7F0B8CD8 10400022 */ beqz $v0, .L7F0B8D64 /* 0ED80C 7F0B8CDC 24090001 */ li $t1, 1 -/* 0ED810 7F0B8CE0 3C078004 */ lui $a3, %hi(array_room_info) -/* 0ED814 7F0B8CE4 24E71414 */ addiu $a3, %lo(array_room_info) # addiu $a3, $a3, 0x1414 +/* 0ED810 7F0B8CE0 3C078004 */ lui $a3, %hi(g_BgRoomInfo) +/* 0ED814 7F0B8CE4 24E71414 */ addiu $a3, %lo(g_BgRoomInfo) # addiu $a3, $a3, 0x1414 /* 0ED818 7F0B8CE8 00801025 */ move $v0, $a0 /* 0ED81C 7F0B8CEC 24080050 */ li $t0, 80 /* 0ED820 7F0B8CF0 90430004 */ lbu $v1, 4($v0) @@ -10543,13 +10642,13 @@ glabel sub_GAME_7F0B8A6C /* 0ED830 7F0B8D00 00EB2821 */ addu $a1, $a3, $t3 /* 0ED834 7F0B8D04 90A60000 */ lbu $a2, ($a1) /* 0ED838 7F0B8D08 10C00009 */ beqz $a2, .L7F0B8D30 -/* 0ED83C 7F0B8D0C 00000000 */ nop +/* 0ED83C 7F0B8D0C 00000000 */ nop /* 0ED840 7F0B8D10 00880019 */ multu $a0, $t0 /* 0ED844 7F0B8D14 00006012 */ mflo $t4 /* 0ED848 7F0B8D18 00EC1821 */ addu $v1, $a3, $t4 /* 0ED84C 7F0B8D1C 906D0000 */ lbu $t5, ($v1) /* 0ED850 7F0B8D20 15A00003 */ bnez $t5, .L7F0B8D30 -/* 0ED854 7F0B8D24 00000000 */ nop +/* 0ED854 7F0B8D24 00000000 */ nop /* 0ED858 7F0B8D28 1000000A */ b .L7F0B8D54 /* 0ED85C 7F0B8D2C A0690001 */ sb $t1, 1($v1) .L7F0B8D30: @@ -10598,10 +10697,10 @@ glabel sub_GAME_7F0B8A6C /* 0EA744 7F0B7D54 C44A111C */ lwc1 $f10, 0x111c($v0) /* 0EA748 7F0B7D58 0FC2CBB3 */ jal sub_GAME_7F0B3BC4 /* 0EA74C 7F0B7D5C E7AA004C */ swc1 $f10, 0x4c($sp) -/* 0EA750 7F0B7D60 3C028004 */ lui $v0, %hi(array_room_info) # $v0, 0x8004 -/* 0EA754 7F0B7D64 3C038004 */ lui $v1, %hi(MaxNumRooms) # $v1, 0x8004 -/* 0EA758 7F0B7D68 2463D7D4 */ addiu $v1, %lo(MaxNumRooms) # addiu $v1, $v1, -0x282c -/* 0EA75C 7F0B7D6C 2442AC64 */ addiu $v0, %lo(array_room_info) # addiu $v0, $v0, -0x539c +/* 0EA750 7F0B7D60 3C028004 */ lui $v0, %hi(g_BgRoomInfo) # $v0, 0x8004 +/* 0EA754 7F0B7D64 3C038004 */ lui $v1, %hi(g_MaxNumRooms) # $v1, 0x8004 +/* 0EA758 7F0B7D68 2463D7D4 */ addiu $v1, %lo(g_MaxNumRooms) # addiu $v1, $v1, -0x282c +/* 0EA75C 7F0B7D6C 2442AC64 */ addiu $v0, %lo(g_BgRoomInfo) # addiu $v0, $v0, -0x539c .L7F0B7D70: /* 0EA760 7F0B7D70 24420050 */ addiu $v0, $v0, 0x50 /* 0EA764 7F0B7D74 0043082B */ sltu $at, $v0, $v1 @@ -10634,7 +10733,7 @@ glabel sub_GAME_7F0B8A6C /* 0EA7CC 7F0B7DDC 0FC2DC34 */ jal sub_GAME_7F0B7D94 /* 0EA7D0 7F0B7DE0 AC20DD80 */ sw $zero, %lo(D_80044898)($at) /* 0EA7D4 7F0B7DE4 0FC2D129 */ jal sub_GAME_7F0B5168 -/* 0EA7D8 7F0B7DE8 00000000 */ nop +/* 0EA7D8 7F0B7DE8 00000000 */ nop /* 0EA7DC 7F0B7DEC 3C048007 */ lui $a0, %hi(dword_CODE_bss_8007FF90) # $a0, 0x8007 /* 0EA7E0 7F0B7DF0 0FC2DF35 */ jal sub_GAME_7F0B8A24 /* 0EA7E4 7F0B7DF4 8C84B3D8 */ lw $a0, %lo(dword_CODE_bss_8007FF90)($a0) @@ -10643,11 +10742,11 @@ glabel sub_GAME_7F0B8A6C /* 0EA7F0 7F0B7E00 24030015 */ li $v1, 21 /* 0EA7F4 7F0B7E04 3C198007 */ lui $t9, %hi(g_BgPortals) # $t9, 0x8007 /* 0EA7F8 7F0B7E08 10620005 */ beq $v1, $v0, .L7F0B7E20 -/* 0EA7FC 7F0B7E0C 00000000 */ nop +/* 0EA7FC 7F0B7E0C 00000000 */ nop /* 0EA800 7F0B7E10 8F39B3C8 */ lw $t9, %lo(g_BgPortals)($t9) /* 0EA804 7F0B7E14 8F2A0000 */ lw $t2, ($t9) /* 0EA808 7F0B7E18 15400021 */ bnez $t2, .L7F0B7EA0 -/* 0EA80C 7F0B7E1C 00000000 */ nop +/* 0EA80C 7F0B7E1C 00000000 */ nop .L7F0B7E20: /* 0EA810 7F0B7E20 14620006 */ bne $v1, $v0, .L7F0B7E3C /* 0EA814 7F0B7E24 24040009 */ li $a0, 9 @@ -10657,12 +10756,12 @@ glabel sub_GAME_7F0B8A6C /* 0EA824 7F0B7E34 0FC2CB1F */ jal sub_GAME_7F0B39BC /* 0EA828 7F0B7E38 24C61110 */ addiu $a2, $a2, 0x1110 .L7F0B7E3C: -/* 0EA82C 7F0B7E3C 3C0B8004 */ lui $t3, %hi(MaxNumRooms) # $t3, 0x8004 -/* 0EA830 7F0B7E40 8D6BD7D4 */ lw $t3, %lo(MaxNumRooms)($t3) +/* 0EA82C 7F0B7E3C 3C0B8004 */ lui $t3, %hi(g_MaxNumRooms) # $t3, 0x8004 +/* 0EA830 7F0B7E40 8D6BD7D4 */ lw $t3, %lo(g_MaxNumRooms)($t3) /* 0EA834 7F0B7E44 24100001 */ li $s0, 1 /* 0EA838 7F0B7E48 29610002 */ slti $at, $t3, 2 /* 0EA83C 7F0B7E4C 14200012 */ bnez $at, .L7F0B7E98 -/* 0EA840 7F0B7E50 00000000 */ nop +/* 0EA840 7F0B7E50 00000000 */ nop /* 0EA844 7F0B7E54 8E250000 */ lw $a1, ($s1) .L7F0B7E58: /* 0EA848 7F0B7E58 02002025 */ move $a0, $s0 @@ -10676,15 +10775,15 @@ glabel sub_GAME_7F0B8A6C /* 0EA868 7F0B7E78 0FC2CB1F */ jal sub_GAME_7F0B39BC /* 0EA86C 7F0B7E7C 24C61110 */ addiu $a2, $a2, 0x1110 .L7F0B7E80: -/* 0EA870 7F0B7E80 3C0C8004 */ lui $t4, %hi(MaxNumRooms) # $t4, 0x8004 -/* 0EA874 7F0B7E84 8D8CD7D4 */ lw $t4, %lo(MaxNumRooms)($t4) +/* 0EA870 7F0B7E80 3C0C8004 */ lui $t4, %hi(g_MaxNumRooms) # $t4, 0x8004 +/* 0EA874 7F0B7E84 8D8CD7D4 */ lw $t4, %lo(g_MaxNumRooms)($t4) /* 0EA878 7F0B7E88 26100001 */ addiu $s0, $s0, 1 /* 0EA87C 7F0B7E8C 020C082A */ slt $at, $s0, $t4 /* 0EA880 7F0B7E90 5420FFF1 */ bnezl $at, .L7F0B7E58 /* 0EA884 7F0B7E94 8E250000 */ lw $a1, ($s1) .L7F0B7E98: /* 0EA888 7F0B7E98 10000033 */ b .L7F0B7F68 -/* 0EA88C 7F0B7E9C 00000000 */ nop +/* 0EA88C 7F0B7E9C 00000000 */ nop .L7F0B7EA0: /* 0EA890 7F0B7EA0 14620006 */ bne $v1, $v0, .L7F0B7EBC /* 0EA894 7F0B7EA4 24040009 */ li $a0, 9 @@ -10734,19 +10833,19 @@ glabel sub_GAME_7F0B8A6C /* 0EA934 7F0B7F44 24420008 */ addiu $v0, $v0, 8 .L7F0B7F48: /* 0EA938 7F0B7F48 0FC2DC88 */ jal sub_GAME_7F0B7EE4 -/* 0EA93C 7F0B7F4C 00000000 */ nop +/* 0EA93C 7F0B7F4C 00000000 */ nop /* 0EA940 7F0B7F50 10400005 */ beqz $v0, .L7F0B7F68 -/* 0EA944 7F0B7F54 00000000 */ nop +/* 0EA944 7F0B7F54 00000000 */ nop .L7F0B7F58: /* 0EA948 7F0B7F58 0FC2DC88 */ jal sub_GAME_7F0B7EE4 -/* 0EA94C 7F0B7F5C 00000000 */ nop +/* 0EA94C 7F0B7F5C 00000000 */ nop /* 0EA950 7F0B7F60 1440FFFD */ bnez $v0, .L7F0B7F58 -/* 0EA954 7F0B7F64 00000000 */ nop +/* 0EA954 7F0B7F64 00000000 */ nop .L7F0B7F68: /* 0EA958 7F0B7F68 3C048007 */ lui $a0, %hi(g_BgPortals) # $a0, 0x8007 /* 0EA95C 7F0B7F6C 8C84B3C8 */ lw $a0, %lo(g_BgPortals)($a0) -/* 0EA960 7F0B7F70 3C078004 */ lui $a3, %hi(array_room_info) # $a3, 0x8004 -/* 0EA964 7F0B7F74 24E7AC64 */ addiu $a3, %lo(array_room_info) # addiu $a3, $a3, -0x539c +/* 0EA960 7F0B7F70 3C078004 */ lui $a3, %hi(g_BgRoomInfo) # $a3, 0x8004 +/* 0EA964 7F0B7F74 24E7AC64 */ addiu $a3, %lo(g_BgRoomInfo) # addiu $a3, $a3, -0x539c /* 0EA968 7F0B7F78 8C8A0000 */ lw $t2, ($a0) /* 0EA96C 7F0B7F7C 24090001 */ li $t1, 1 /* 0EA970 7F0B7F80 24080050 */ li $t0, 80 @@ -10760,13 +10859,13 @@ glabel sub_GAME_7F0B8A6C /* 0EA98C 7F0B7F9C 00EB2821 */ addu $a1, $a3, $t3 /* 0EA990 7F0B7FA0 90A60000 */ lbu $a2, ($a1) /* 0EA994 7F0B7FA4 10C00009 */ beqz $a2, .L7F0B7FCC -/* 0EA998 7F0B7FA8 00000000 */ nop +/* 0EA998 7F0B7FA8 00000000 */ nop /* 0EA99C 7F0B7FAC 00880019 */ multu $a0, $t0 /* 0EA9A0 7F0B7FB0 00006012 */ mflo $t4 /* 0EA9A4 7F0B7FB4 00EC1821 */ addu $v1, $a3, $t4 /* 0EA9A8 7F0B7FB8 906D0000 */ lbu $t5, ($v1) /* 0EA9AC 7F0B7FBC 15A00003 */ bnez $t5, .L7F0B7FCC -/* 0EA9B0 7F0B7FC0 00000000 */ nop +/* 0EA9B0 7F0B7FC0 00000000 */ nop /* 0EA9B4 7F0B7FC4 1000000A */ b .L7F0B7FF0 /* 0EA9B8 7F0B7FC8 A0690001 */ sb $t1, 1($v1) .L7F0B7FCC: @@ -10834,7 +10933,7 @@ void sub_GAME_7F0B8DF4(void) { GLOBAL_ASM( .text glabel sub_GAME_7F0B8DF4 -/* 0ED924 7F0B8DF4 3C088008 */ lui $t0, %hi(g_BgPortals) +/* 0ED924 7F0B8DF4 3C088008 */ lui $t0, %hi(g_BgPortals) /* 0ED928 7F0B8DF8 2508FF80 */ addiu $t0, %lo(g_BgPortals) # addiu $t0, $t0, -0x80 /* 0ED92C 7F0B8DFC 8D070000 */ lw $a3, ($t0) /* 0ED930 7F0B8E00 27BDFFF0 */ addiu $sp, $sp, -0x10 @@ -10943,10 +11042,10 @@ glabel sub_GAME_7F0B8E98 /* 0ED9D0 7F0B8EA0 8CEE0000 */ lw $t6, ($a3) /* 0ED9D4 7F0B8EA4 00001825 */ move $v1, $zero /* 0ED9D8 7F0B8EA8 19C00012 */ blez $t6, .L7F0B8EF4 -/* 0ED9DC 7F0B8EAC 00000000 */ nop +/* 0ED9DC 7F0B8EAC 00000000 */ nop /* 0ED9E0 7F0B8EB0 18A00010 */ blez $a1, .L7F0B8EF4 /* 0ED9E4 7F0B8EB4 00007880 */ sll $t7, $zero, 2 -/* 0ED9E8 7F0B8EB8 3C188008 */ lui $t8, %hi(list_visible_rooms_in_cur_global_vis_packet) +/* 0ED9E8 7F0B8EB8 3C188008 */ lui $t8, %hi(list_visible_rooms_in_cur_global_vis_packet) /* 0ED9EC 7F0B8EBC 2718BFA0 */ addiu $t8, %lo(list_visible_rooms_in_cur_global_vis_packet) # addiu $t8, $t8, -0x4060 /* 0ED9F0 7F0B8EC0 00183021 */ addu $a2, $zero, $t8 /* 0ED9F4 7F0B8EC4 008F1021 */ addu $v0, $a0, $t7 @@ -10998,7 +11097,7 @@ glabel sub_GAME_7F0B8EFC .L7F0B8F38: /* 0EDA68 7F0B8F38 90A60005 */ lbu $a2, 5($a1) /* 0EDA6C 7F0B8F3C 14500003 */ bne $v0, $s0, .L7F0B8F4C -/* 0EDA70 7F0B8F40 00000000 */ nop +/* 0EDA70 7F0B8F40 00000000 */ nop /* 0EDA74 7F0B8F44 00C01025 */ move $v0, $a2 /* 0EDA78 7F0B8F48 02003025 */ move $a2, $s0 .L7F0B8F4C: @@ -11024,7 +11123,7 @@ glabel sub_GAME_7F0B8EFC /* 0EDAC0 7F0B8F90 1000000A */ b .L7F0B8FBC /* 0EDAC4 7F0B8F94 00601025 */ move $v0, $v1 .L7F0B8F98: -/* 0EDAC8 7F0B8F98 3C088008 */ lui $t0, %hi(g_BgPortals) +/* 0EDAC8 7F0B8F98 3C088008 */ lui $t0, %hi(g_BgPortals) /* 0EDACC 7F0B8F9C 8D08FF80 */ lw $t0, %lo(g_BgPortals)($t0) /* 0EDAD0 7F0B8FA0 01042821 */ addu $a1, $t0, $a0 /* 0EDAD4 7F0B8FA4 8CA90008 */ lw $t1, 8($a1) @@ -11106,9 +11205,9 @@ glabel sub_GAME_7F0B8FD0 .L7F0B8FF0: /* 0EDB20 7F0B8FF0 90830005 */ lbu $v1, 5($a0) /* 0EDB24 7F0B8FF4 14460005 */ bne $v0, $a2, .L7F0B900C -/* 0EDB28 7F0B8FF8 00000000 */ nop +/* 0EDB28 7F0B8FF8 00000000 */ nop /* 0EDB2C 7F0B8FFC 14650003 */ bne $v1, $a1, .L7F0B900C -/* 0EDB30 7F0B9000 00000000 */ nop +/* 0EDB30 7F0B9000 00000000 */ nop /* 0EDB34 7F0B9004 03E00008 */ jr $ra /* 0EDB38 7F0B9008 24020001 */ li $v0, 1 @@ -11128,7 +11227,7 @@ glabel sub_GAME_7F0B8FD0 /* 0EDB64 7F0B9034 00001025 */ move $v0, $zero .L7F0B9038: /* 0EDB68 7F0B9038 03E00008 */ jr $ra -/* 0EDB6C 7F0B903C 00000000 */ nop +/* 0EDB6C 7F0B903C 00000000 */ nop ) #endif @@ -11138,13 +11237,13 @@ glabel sub_GAME_7F0B8FD0 /** * Unreferenced. - * + * * Adjusts value in bgViewRelated and returns the new value. - * + * * @param index: index into bgViewRelated. * @param times: multiples value by this amount first. * @param add: then adds this. - * + * * Address 0x7F0B9040. */ f32 bgTimesAddViewRelatedMaybe(s32 index, f32 times, f32 add) @@ -11160,7 +11259,8 @@ f32 bgTimesAddViewRelatedMaybe(s32 index, f32 times, f32 add) /** * Address 0x7F0B908C. */ -void bgUpdateCurrentPlayerScreenMinMax(void) { +void bgUpdateCurrentPlayerScreenMinMax(void) +{ f32 fx; f32 fwidth; f32 fy; @@ -11197,18 +11297,18 @@ void bgUpdateCurrentPlayerScreenMinMax(void) { g_CurrentPlayer->screenxmaxf = (f32) (viGetViewLeft() + viGetViewWidth()); - if ( g_CurrentPlayer->screenxmaxf < fx) + if (g_CurrentPlayer->screenxmaxf < fx) { g_CurrentPlayer->screenxmaxf = fx; } - if (fwidth < g_CurrentPlayer->screenxmaxf) + if (fwidth < g_CurrentPlayer->screenxmaxf) { g_CurrentPlayer->screenxmaxf = fwidth; } g_CurrentPlayer->screenymaxf = (f32) (viGetViewTop() + viGetViewHeight()); - + if (g_CurrentPlayer->screenymaxf < fy) { g_CurrentPlayer->screenymaxf = fy; @@ -11225,7 +11325,8 @@ void bgUpdateCurrentPlayerScreenMinMax(void) { #ifdef NONMATCHING -s32 sub_GAME_7F0B92B4(s32 arg0, void *arg1) { +s32 sub_GAME_7F0B92B4(s32 arg0, void *arg1) +{ void *temp_a2; s32 temp_v0; f32 temp_f18; @@ -11240,8 +11341,14 @@ s32 sub_GAME_7F0B92B4(s32 arg0, void *arg1) { void *phi_v1_2; void *phi_a2; + //try this, its just a guess but its only a loop of 3 and I think its unrolled + for (i = 0; i < 3; i++) + { + arg1[i]->room_id = arg0[i]->roomid + arg0[i]->next->roomid/2; + } // Node 0 - temp_a2 = ((arg0 * 0x50) + &array_room_info); + + temp_a2 = ((arg0 * 0x50) + &g_BgRoomInfo); temp_v0 = (0 + 1); temp_f18 = ((temp_a2->unk44 + temp_a2->unk38) * 0.5f); phi_f18 = temp_f18; @@ -11280,9 +11387,9 @@ GLOBAL_ASM( glabel sub_GAME_7F0B92B4 /* 0EDDE4 7F0B92B4 00047080 */ sll $t6, $a0, 2 /* 0EDDE8 7F0B92B8 01C47021 */ addu $t6, $t6, $a0 -/* 0EDDEC 7F0B92BC 3C0F8004 */ lui $t7, %hi(array_room_info) +/* 0EDDEC 7F0B92BC 3C0F8004 */ lui $t7, %hi(g_BgRoomInfo) /* 0EDDF0 7F0B92C0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0EDDF4 7F0B92C4 25EF1414 */ addiu $t7, %lo(array_room_info) # addiu $t7, $t7, 0x1414 +/* 0EDDF4 7F0B92C4 25EF1414 */ addiu $t7, %lo(g_BgRoomInfo) # addiu $t7, $t7, 0x1414 /* 0EDDF8 7F0B92C8 000E7100 */ sll $t6, $t6, 4 /* 0EDDFC 7F0B92CC 44810000 */ mtc1 $at, $f0 /* 0EDE00 7F0B92D0 01CF3021 */ addu $a2, $t6, $t7 @@ -11312,7 +11419,7 @@ glabel sub_GAME_7F0B92B4 /* 0EDE58 7F0B9328 24630004 */ addiu $v1, $v1, 4 /* 0EDE5C 7F0B932C E472FFFC */ swc1 $f18, -4($v1) /* 0EDE60 7F0B9330 03E00008 */ jr $ra -/* 0EDE64 7F0B9334 00000000 */ nop +/* 0EDE64 7F0B9334 00000000 */ nop ) #endif @@ -11321,14 +11428,21 @@ glabel sub_GAME_7F0B92B4 #ifdef NONMATCHING -void sub_GAME_7F0B9338(void) { - +//bgRoomCalcBB +void sub_GAME_7F0B9338(int room) { + if ((room < dword_CODE_bss_8007B9DC) && (firststaninroom[room] != NULL)) + #ifdef DEBUG + else + { + osSyncPrintf("bg: bgRoomCalcBB: ROOM%d has no gfx, and no stans! Can\'t make bb & roomoffset ", room); + } + #endif } #else GLOBAL_ASM( .text glabel sub_GAME_7F0B9338 -/* 0EDE68 7F0B9338 3C088008 */ lui $t0, %hi(ptr_bgdata_room_fileposition_list) +/* 0EDE68 7F0B9338 3C088008 */ lui $t0, %hi(ptr_bgdata_room_fileposition_list) /* 0EDE6C 7F0B933C 2508FF8C */ addiu $t0, %lo(ptr_bgdata_room_fileposition_list) # addiu $t0, $t0, -0x74 /* 0EDE70 7F0B9340 8D0E0000 */ lw $t6, ($t0) /* 0EDE74 7F0B9344 00041080 */ sll $v0, $a0, 2 @@ -11339,28 +11453,28 @@ glabel sub_GAME_7F0B9338 /* 0EDE88 7F0B9358 AFB00018 */ sw $s0, 0x18($sp) /* 0EDE8C 7F0B935C 01C24821 */ addu $t1, $t6, $v0 /* 0EDE90 7F0B9360 8D2F0000 */ lw $t7, ($t1) -/* 0EDE94 7F0B9364 3C188004 */ lui $t8, %hi(array_room_info) +/* 0EDE94 7F0B9364 3C188004 */ lui $t8, %hi(g_BgRoomInfo) /* 0EDE98 7F0B9368 00808025 */ move $s0, $a0 /* 0EDE9C 7F0B936C 15E00035 */ bnez $t7, .L7F0B9444 -/* 0EDEA0 7F0B9370 27181414 */ addiu $t8, %lo(array_room_info) # addiu $t8, $t8, 0x1414 -/* 0EDEA4 7F0B9374 3C188008 */ lui $t8, %hi(dword_CODE_bss_8007B9DC) +/* 0EDEA0 7F0B9370 27181414 */ addiu $t8, %lo(g_BgRoomInfo) # addiu $t8, $t8, 0x1414 +/* 0EDEA4 7F0B9374 3C188008 */ lui $t8, %hi(dword_CODE_bss_8007B9DC) /* 0EDEA8 7F0B9378 8F18B9DC */ lw $t8, %lo(dword_CODE_bss_8007B9DC)($t8) /* 0EDEAC 7F0B937C 0004C880 */ sll $t9, $a0, 2 -/* 0EDEB0 7F0B9380 3C0B8008 */ lui $t3, %hi(dword_CODE_bss_8007B128) +/* 0EDEB0 7F0B9380 3C0B8008 */ lui $t3, %hi(firststaninroom) /* 0EDEB4 7F0B9384 0098082A */ slt $at, $a0, $t8 /* 0EDEB8 7F0B9388 1020008E */ beqz $at, .L7F0B95C4 /* 0EDEBC 7F0B938C 01795821 */ addu $t3, $t3, $t9 -/* 0EDEC0 7F0B9390 8D6BB128 */ lw $t3, %lo(dword_CODE_bss_8007B128)($t3) +/* 0EDEC0 7F0B9390 8D6BB128 */ lw $t3, %lo(firststaninroom)($t3) /* 0EDEC4 7F0B9394 00106080 */ sll $t4, $s0, 2 /* 0EDEC8 7F0B9398 01906021 */ addu $t4, $t4, $s0 /* 0EDECC 7F0B939C 11600089 */ beqz $t3, .L7F0B95C4 /* 0EDED0 7F0B93A0 00002025 */ move $a0, $zero /* 0EDED4 7F0B93A4 00107080 */ sll $t6, $s0, 2 /* 0EDED8 7F0B93A8 01D07023 */ subu $t6, $t6, $s0 -/* 0EDEDC 7F0B93AC 3C0D8004 */ lui $t5, %hi(array_room_info) -/* 0EDEE0 7F0B93B0 3C0F8008 */ lui $t7, %hi(dword_CODE_bss_8007B358) +/* 0EDEDC 7F0B93AC 3C0D8004 */ lui $t5, %hi(g_BgRoomInfo) +/* 0EDEE0 7F0B93B0 3C0F8008 */ lui $t7, %hi(dword_CODE_bss_8007B358) /* 0EDEE4 7F0B93B4 25EFB358 */ addiu $t7, %lo(dword_CODE_bss_8007B358) # addiu $t7, $t7, -0x4ca8 -/* 0EDEE8 7F0B93B8 25AD1414 */ addiu $t5, %lo(array_room_info) # addiu $t5, $t5, 0x1414 +/* 0EDEE8 7F0B93B8 25AD1414 */ addiu $t5, %lo(g_BgRoomInfo) # addiu $t5, $t5, 0x1414 /* 0EDEEC 7F0B93BC 000E7080 */ sll $t6, $t6, 2 /* 0EDEF0 7F0B93C0 000C6100 */ sll $t4, $t4, 4 /* 0EDEF4 7F0B93C4 018D2821 */ addu $a1, $t4, $t5 @@ -11391,7 +11505,7 @@ glabel sub_GAME_7F0B9338 /* 0EDF54 7F0B9424 0001C843 */ sra $t9, $at, 1 .L7F0B9428: /* 0EDF58 7F0B9428 44998000 */ mtc1 $t9, $f16 -/* 0EDF5C 7F0B942C 00000000 */ nop +/* 0EDF5C 7F0B942C 00000000 */ nop /* 0EDF60 7F0B9430 468084A0 */ cvt.s.w $f18, $f16 /* 0EDF64 7F0B9434 1487FFE6 */ bne $a0, $a3, .L7F0B93D0 /* 0EDF68 7F0B9438 E5D2000C */ swc1 $f18, 0xc($t6) @@ -11410,7 +11524,7 @@ glabel sub_GAME_7F0B9338 /* 0EDF98 7F0B9468 AFA80028 */ sw $t0, 0x28($sp) /* 0EDF9C 7F0B946C 0FC2D8DA */ jal sub_GAME_7F0B6368 /* 0EDFA0 7F0B9470 A3AA0037 */ sb $t2, 0x37($sp) -/* 0EDFA4 7F0B9474 3C198008 */ lui $t9, %hi(ptr_bgdata_room_fileposition_list) +/* 0EDFA4 7F0B9474 3C198008 */ lui $t9, %hi(ptr_bgdata_room_fileposition_list) /* 0EDFA8 7F0B9478 8F39FF8C */ lw $t9, %lo(ptr_bgdata_room_fileposition_list)($t9) /* 0EDFAC 7F0B947C 8FA20030 */ lw $v0, 0x30($sp) /* 0EDFB0 7F0B9480 8FA80028 */ lw $t0, 0x28($sp) @@ -11506,7 +11620,7 @@ glabel sub_GAME_7F0B9338 /* 0EE0F8 7F0B95C8 8FB00018 */ lw $s0, 0x18($sp) /* 0EE0FC 7F0B95CC 27BD0050 */ addiu $sp, $sp, 0x50 /* 0EE100 7F0B95D0 03E00008 */ jr $ra -/* 0EE104 7F0B95D4 00000000 */ nop +/* 0EE104 7F0B95D4 00000000 */ nop ) #endif @@ -11545,7 +11659,7 @@ loop_1: loop_5: // Node 5 phi_t0 = 0; - phi_t2 = ((arg0 * 0x50) + &array_room_info); + phi_t2 = ((arg0 * 0x50) + &g_BgRoomInfo); loop_6: // Node 6 temp_t8 = ((phi_a2 + (((phi_a1 * 4) - phi_a1) * 4)) + phi_t0); @@ -11605,7 +11719,7 @@ glabel sub_GAME_7F0B95D8 /* 0EE118 7F0B95E8 8CAE0000 */ lw $t6, ($a1) /* 0EE11C 7F0B95EC 00A01825 */ move $v1, $a1 /* 0EE120 7F0B95F0 11C00034 */ beqz $t6, .L7F0B96C4 -/* 0EE124 7F0B95F4 00000000 */ nop +/* 0EE124 7F0B95F4 00000000 */ nop /* 0EE128 7F0B95F8 906F0004 */ lbu $t7, 4($v1) .L7F0B95FC: /* 0EE12C 7F0B95FC 508F0005 */ beql $a0, $t7, .L7F0B9614 @@ -11621,8 +11735,8 @@ glabel sub_GAME_7F0B95D8 /* 0EE150 7F0B9620 000C6100 */ sll $t4, $t4, 4 /* 0EE154 7F0B9624 00002825 */ move $a1, $zero /* 0EE158 7F0B9628 1B200022 */ blez $t9, .L7F0B96B4 -/* 0EE15C 7F0B962C 3C0D8004 */ lui $t5, %hi(array_room_info) -/* 0EE160 7F0B9630 25AD1414 */ addiu $t5, %lo(array_room_info) # addiu $t5, $t5, 0x1414 +/* 0EE15C 7F0B962C 3C0D8004 */ lui $t5, %hi(g_BgRoomInfo) +/* 0EE160 7F0B9630 25AD1414 */ addiu $t5, %lo(g_BgRoomInfo) # addiu $t5, $t5, 0x1414 /* 0EE164 7F0B9634 018D4821 */ addu $t1, $t4, $t5 /* 0EE168 7F0B9638 00004025 */ move $t0, $zero .L7F0B963C: @@ -11637,7 +11751,7 @@ glabel sub_GAME_7F0B95D8 /* 0EE188 7F0B9658 C5440038 */ lwc1 $f4, 0x38($t2) /* 0EE18C 7F0B965C 25080004 */ addiu $t0, $t0, 4 /* 0EE190 7F0B9660 4604003C */ c.lt.s $f0, $f4 -/* 0EE194 7F0B9664 00000000 */ nop +/* 0EE194 7F0B9664 00000000 */ nop /* 0EE198 7F0B9668 45020004 */ bc1fl .L7F0B967C /* 0EE19C 7F0B966C C5460044 */ lwc1 $f6, 0x44($t2) /* 0EE1A0 7F0B9670 E5400038 */ swc1 $f0, 0x38($t2) @@ -11645,7 +11759,7 @@ glabel sub_GAME_7F0B95D8 /* 0EE1A8 7F0B9678 C5460044 */ lwc1 $f6, 0x44($t2) .L7F0B967C: /* 0EE1AC 7F0B967C 4600303C */ c.lt.s $f6, $f0 -/* 0EE1B0 7F0B9680 00000000 */ nop +/* 0EE1B0 7F0B9680 00000000 */ nop /* 0EE1B4 7F0B9684 45020004 */ bc1fl .L7F0B9698 /* 0EE1B8 7F0B9688 254A0004 */ addiu $t2, $t2, 4 /* 0EE1BC 7F0B968C E5400044 */ swc1 $f0, 0x44($t2) @@ -11667,7 +11781,7 @@ glabel sub_GAME_7F0B95D8 /* 0EE1F0 7F0B96C0 906F0004 */ lbu $t7, 4($v1) .L7F0B96C4: /* 0EE1F4 7F0B96C4 03E00008 */ jr $ra -/* 0EE1F8 7F0B96C8 00000000 */ nop +/* 0EE1F8 7F0B96C8 00000000 */ nop ) #endif @@ -11676,8 +11790,10 @@ glabel sub_GAME_7F0B95D8 #ifdef NONMATCHING -void sub_GAME_7F0B96CC(void) { - +void sub_GAME_7F0B96CC(int p) { + #ifdef + assert(levelportals[p].p->n>=3) + #endif } #else GLOBAL_ASM( @@ -11689,7 +11805,7 @@ glabel D_80058D58 .text glabel sub_GAME_7F0B96CC /* 0EE1FC 7F0B96CC 27BDFF88 */ addiu $sp, $sp, -0x78 -/* 0EE200 7F0B96D0 3C0E8008 */ lui $t6, %hi(g_BgPortals) +/* 0EE200 7F0B96D0 3C0E8008 */ lui $t6, %hi(g_BgPortals) /* 0EE204 7F0B96D4 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) /* 0EE208 7F0B96D8 000440C0 */ sll $t0, $a0, 3 /* 0EE20C 7F0B96DC AFB00020 */ sw $s0, 0x20($sp) @@ -11773,7 +11889,7 @@ glabel sub_GAME_7F0B96CC /* 0EE334 7F0B9804 46083282 */ mul.s $f10, $f6, $f8 /* 0EE338 7F0B9808 460A2181 */ sub.s $f6, $f4, $f10 /* 0EE33C 7F0B980C 46108202 */ mul.s $f8, $f16, $f16 -/* 0EE340 7F0B9810 00000000 */ nop +/* 0EE340 7F0B9810 00000000 */ nop /* 0EE344 7F0B9814 46129102 */ mul.s $f4, $f18, $f18 /* 0EE348 7F0B9818 E6060008 */ swc1 $f6, 8($s0) /* 0EE34C 7F0B981C C60E0008 */ lwc1 $f14, 8($s0) @@ -11791,12 +11907,12 @@ glabel sub_GAME_7F0B96CC /* 0EE37C 7F0B984C 45030005 */ bc1tl .L7F0B9864 /* 0EE380 7F0B9850 C6060000 */ lwc1 $f6, ($s0) /* 0EE384 7F0B9854 44812000 */ mtc1 $at, $f4 -/* 0EE388 7F0B9858 00000000 */ nop +/* 0EE388 7F0B9858 00000000 */ nop /* 0EE38C 7F0B985C 46002503 */ div.s $f20, $f4, $f0 /* 0EE390 7F0B9860 C6060000 */ lwc1 $f6, ($s0) .L7F0B9864: /* 0EE394 7F0B9864 C6080004 */ lwc1 $f8, 4($s0) -/* 0EE398 7F0B9868 3C198008 */ lui $t9, %hi(g_BgPortals) +/* 0EE398 7F0B9868 3C198008 */ lui $t9, %hi(g_BgPortals) /* 0EE39C 7F0B986C 46143282 */ mul.s $f10, $f6, $f20 /* 0EE3A0 7F0B9870 C6060008 */ lwc1 $f6, 8($s0) /* 0EE3A4 7F0B9874 3C018006 */ lui $at, %hi(D_80058D54) @@ -11832,15 +11948,15 @@ glabel sub_GAME_7F0B96CC /* 0EE418 7F0B98E8 46067102 */ mul.s $f4, $f14, $f6 /* 0EE41C 7F0B98EC 46082000 */ add.s $f0, $f4, $f8 /* 0EE420 7F0B98F0 4602003C */ c.lt.s $f0, $f2 -/* 0EE424 7F0B98F4 00000000 */ nop +/* 0EE424 7F0B98F4 00000000 */ nop /* 0EE428 7F0B98F8 45020003 */ bc1fl .L7F0B9908 /* 0EE42C 7F0B98FC 4600603C */ c.lt.s $f12, $f0 /* 0EE430 7F0B9900 46000086 */ mov.s $f2, $f0 /* 0EE434 7F0B9904 4600603C */ c.lt.s $f12, $f0 .L7F0B9908: -/* 0EE438 7F0B9908 00000000 */ nop +/* 0EE438 7F0B9908 00000000 */ nop /* 0EE43C 7F0B990C 45000002 */ bc1f .L7F0B9918 -/* 0EE440 7F0B9910 00000000 */ nop +/* 0EE440 7F0B9910 00000000 */ nop /* 0EE444 7F0B9914 46000306 */ mov.s $f12, $f0 .L7F0B9918: /* 0EE448 7F0B9918 1420FFEB */ bnez $at, .L7F0B98C8 @@ -11862,7 +11978,7 @@ glabel sub_GAME_7F0B96CC /** * Unknown, makes use of sub_GAME_7F0B96CC. - * + * * Address 0x7F0B993C. */ s32 sub_GAME_7F0B993C(s32 arg0) @@ -11946,7 +12062,7 @@ loop_4: GLOBAL_ASM( .text glabel sub_GAME_7F0B9990 -/* 0EE4C0 7F0B9990 3C0E8008 */ lui $t6, %hi(g_BgPortals) +/* 0EE4C0 7F0B9990 3C0E8008 */ lui $t6, %hi(g_BgPortals) /* 0EE4C4 7F0B9994 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) /* 0EE4C8 7F0B9998 000478C0 */ sll $t7, $a0, 3 /* 0EE4CC 7F0B999C 3C013E80 */ li $at, 0x3E800000 # 0.250000 @@ -11963,7 +12079,7 @@ glabel sub_GAME_7F0B9990 /* 0EE4F8 7F0B99C8 00042023 */ negu $a0, $a0 /* 0EE4FC 7F0B99CC 46083082 */ mul.s $f2, $f6, $f8 /* 0EE500 7F0B99D0 1320000E */ beqz $t9, .L7F0B9A0C -/* 0EE504 7F0B99D4 00000000 */ nop +/* 0EE504 7F0B99D4 00000000 */ nop /* 0EE508 7F0B99D8 10800006 */ beqz $a0, .L7F0B99F4 /* 0EE50C 7F0B99DC 00991021 */ addu $v0, $a0, $t9 .L7F0B99E0: @@ -11971,7 +12087,7 @@ glabel sub_GAME_7F0B9990 /* 0EE514 7F0B99E4 1443FFFE */ bne $v0, $v1, .L7F0B99E0 /* 0EE518 7F0B99E8 46021080 */ add.s $f2, $f2, $f2 /* 0EE51C 7F0B99EC 10600007 */ beqz $v1, .L7F0B9A0C -/* 0EE520 7F0B99F0 00000000 */ nop +/* 0EE520 7F0B99F0 00000000 */ nop .L7F0B99F4: /* 0EE524 7F0B99F4 46021080 */ add.s $f2, $f2, $f2 /* 0EE528 7F0B99F8 2463FFFC */ addiu $v1, $v1, -4 @@ -11990,12 +12106,12 @@ glabel sub_GAME_7F0B9990 /** * Unreferenced. - * + * * Address 0x7F0B9A14. */ -u8 bgGetDataPortalsControlBytes2(s32 arg0) +u8 bgGetDataPortalsControlBytes2(s32 p) { - return g_BgPortals[arg0].controlbytes2; + return g_BgPortals[p].controlbytes2; } @@ -12003,40 +12119,30 @@ u8 bgGetDataPortalsControlBytes2(s32 arg0) #ifdef NONMATCHING -s32 sub_GAME_7F0B9A2C(s32 arg0) { - void *temp_v1; - s32 temp_v0; - s32 temp_t8; - s8 phi_v0; +s32 sub_GAME_7F0B9A2C(s32 p) +{ + byte byte2; - // Node 0 - temp_v1 = (g_BgPortals + (arg0 * 8)); - temp_v0 = (temp_v1->unk7 + 1); - if (temp_v1->unk7 >= 0xff) + if (g_BgPortals[p].controlbytes2 == -1) { - // Node 1 - phi_v0 = (u8)0xff; + byte2 = 0xff; } else { - // Node 2 - temp_t8 = (temp_v0 & 0xff); - phi_v0 = temp_t8; - if (((temp_t8 >> 4) & 0xf) > 0) + byte2 = g_BgPortals[p].controlbytes2 + 1; + if (byte2 >> 4 != 0) { - // Node 3 - phi_v0 = ((temp_t8 | 8) & 0xff); + byte2 |= 8; } } - // Node 4 - temp_v1->unk7 = (s8) phi_v0; - return temp_v0; + g_BgPortals[p].controlbytes2 = byte2; + return; } #else GLOBAL_ASM( .text glabel sub_GAME_7F0B9A2C -/* 0EE55C 7F0B9A2C 3C0E8008 */ lui $t6, %hi(g_BgPortals) +/* 0EE55C 7F0B9A2C 3C0E8008 */ lui $t6, %hi(g_BgPortals) /* 0EE560 7F0B9A30 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) /* 0EE564 7F0B9A34 000478C0 */ sll $t7, $a0, 3 /* 0EE568 7F0B9A38 01CF1821 */ addu $v1, $t6, $t7 @@ -12066,43 +12172,32 @@ glabel sub_GAME_7F0B9A2C #ifdef NONMATCHING -s32 sub_GAME_7F0B9A7C(s32 arg0) { - void *temp_v1; - s8 temp_t1; - s8 phi_v0; - - // Node 0 - temp_v1 = (g_BgPortals + (arg0 * 8)); - if ((((s32) temp_v1->unk7 >> 4) & 0xf) == 0) +s32 sub_GAME_7F0B9A7C(s32 p) +{ + if (g_BgPortals[p].controlbytes2 >> 4 == 0) { - // Node 1 - phi_v0 = (s8) temp_v1->unk7; - if (temp_v1->unk7 > 0) + byte22 = g_BgPortals[p].controlbytes2; + if (byte2 != 0) { - // Node 2 - phi_v0 = ((temp_v1->unk7 + -1) & 0xff); + byte22 = g_BgPortals[p].controlbytes2 - 1; } } else { - // Node 3 - temp_t1 = ((temp_v1->unk7 + -1) & 0xff); - phi_v0 = temp_t1; - if ((temp_t1 & 0xf) < 8) + byte22 = g_BgPortals[p].controlbytes2 - 1; + if ((g_BgPortals[p].controlbytes2 - 1 & 0xf) < 8) { - // Node 4 - phi_v0 = ((temp_t1 + -8) & 0xff); + byte22 = g_BgPortals[p].controlbytes2 - 9; } } - // Node 5 - temp_v1->unk7 = (s8) phi_v0; - return temp_v1->unk7; + g_BgPortals[p].controlbytes2] = byte22; + return; } #else GLOBAL_ASM( .text glabel sub_GAME_7F0B9A7C -/* 0EE5AC 7F0B9A7C 3C0E8008 */ lui $t6, %hi(g_BgPortals) +/* 0EE5AC 7F0B9A7C 3C0E8008 */ lui $t6, %hi(g_BgPortals) /* 0EE5B0 7F0B9A80 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) /* 0EE5B4 7F0B9A84 000478C0 */ sll $t7, $a0, 3 /* 0EE5B8 7F0B9A88 01CF1821 */ addu $v1, $t6, $t7 @@ -12112,7 +12207,7 @@ glabel sub_GAME_7F0B9A7C /* 0EE5C8 7F0B9A98 17200007 */ bnez $t9, .L7F0B9AB8 /* 0EE5CC 7F0B9A9C 00402825 */ move $a1, $v0 /* 0EE5D0 7F0B9AA0 18A0000E */ blez $a1, .L7F0B9ADC -/* 0EE5D4 7F0B9AA4 00000000 */ nop +/* 0EE5D4 7F0B9AA4 00000000 */ nop /* 0EE5D8 7F0B9AA8 2442FFFF */ addiu $v0, $v0, -1 /* 0EE5DC 7F0B9AAC 304800FF */ andi $t0, $v0, 0xff /* 0EE5E0 7F0B9AB0 1000000A */ b .L7F0B9ADC @@ -12137,7 +12232,7 @@ glabel sub_GAME_7F0B9A7C /** * @param index: index into portal array. - * + * * Address 0x7F0B9AE4. */ s32 bgGetDataPortalsControlBytes1Bit1(s32 index) @@ -12149,7 +12244,7 @@ s32 bgGetDataPortalsControlBytes1Bit1(s32 index) /** * @param index: index into portal array. - * + * * Address 0x7F0B9B04. */ s32 bgGetDataPortalsControlBytes1Bit2(s32 index) @@ -12161,7 +12256,7 @@ s32 bgGetDataPortalsControlBytes1Bit2(s32 index) /** * @param index: index into portal array. - * + * * Address 0x7F0B9B24. */ void bgSetDataPortalsControlBytes1Bit2(s32 index) @@ -12173,7 +12268,7 @@ void bgSetDataPortalsControlBytes1Bit2(s32 index) /** * @param index: index into portal array. - * + * * Address 0x7F0B9B44. */ void bgClearDataPortalsControlBytes1Low2Bits(s32 index) @@ -12185,9 +12280,9 @@ void bgClearDataPortalsControlBytes1Low2Bits(s32 index) /** * Swaps connected rooms. - * + * * @param index: index into portal array. - * + * * Address 0x7F0B9B64. */ s8 bgSwapConnectedRooms(s32 index) @@ -12204,6 +12299,7 @@ s8 bgSwapConnectedRooms(s32 index) #ifdef NONMATCHING +//bgorderPortal f32 sub_GAME_7F0B9B94(s32 arg0) { s32 sp24; ?32 sp28; @@ -12226,7 +12322,14 @@ f32 sub_GAME_7F0B9B94(s32 arg0) { sp28 = (?32) temp_v0->unk5; sub_GAME_7F0B92B4(temp_v0->unk4, &sp54); sub_GAME_7F0B92B4(sp28, &sp48); - sub_GAME_7F0B96CC(arg0, &sp34); + sub_GAME_7F0B96CC(arg0, &sp34); //possible float return + #ifdef DEBUG + if (0.1 < local_50 - local_54) + { + iVar4 = osSyncPrintf("bg: bgOrderPortal: Portal \'%s\' not planar by %5.2f\n", bgDebPrintPORTALID(param_1), local_50 - local_54); + } + #endif + phi_f16 = sp3C; phi_f18 = sp34; phi_f14 = sp40; @@ -12267,7 +12370,7 @@ f32 sub_GAME_7F0B9B94(s32 arg0) { GLOBAL_ASM( .text glabel sub_GAME_7F0B9B94 -/* 0EE6C4 7F0B9B94 3C0E8008 */ lui $t6, %hi(g_BgPortals) +/* 0EE6C4 7F0B9B94 3C0E8008 */ lui $t6, %hi(g_BgPortals) /* 0EE6C8 7F0B9B98 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) /* 0EE6CC 7F0B9B9C 27BDFFA0 */ addiu $sp, $sp, -0x60 /* 0EE6D0 7F0B9BA0 0004C0C0 */ sll $t8, $a0, 3 @@ -12301,7 +12404,7 @@ glabel sub_GAME_7F0B9B94 /* 0EE740 7F0B9C10 46105102 */ mul.s $f4, $f10, $f16 /* 0EE744 7F0B9C14 46062080 */ add.s $f2, $f4, $f6 /* 0EE748 7F0B9C18 4602603C */ c.lt.s $f12, $f2 -/* 0EE74C 7F0B9C1C 00000000 */ nop +/* 0EE74C 7F0B9C1C 00000000 */ nop /* 0EE750 7F0B9C20 45020012 */ bc1fl .L7F0B9C6C /* 0EE754 7F0B9C24 C7A40038 */ lwc1 $f4, 0x38($sp) /* 0EE758 7F0B9C28 24020001 */ li $v0, 1 @@ -12334,7 +12437,7 @@ glabel sub_GAME_7F0B9B94 /* 0EE7C0 7F0B9C90 46105102 */ mul.s $f4, $f10, $f16 /* 0EE7C4 7F0B9C94 46062000 */ add.s $f0, $f4, $f6 /* 0EE7C8 7F0B9C98 460E003E */ c.le.s $f0, $f14 -/* 0EE7CC 7F0B9C9C 00000000 */ nop +/* 0EE7CC 7F0B9C9C 00000000 */ nop /* 0EE7D0 7F0B9CA0 45020006 */ bc1fl .L7F0B9CBC /* 0EE7D4 7F0B9CA4 8FBF0014 */ lw $ra, 0x14($sp) /* 0EE7D8 7F0B9CA8 10400003 */ beqz $v0, .L7F0B9CB8 @@ -12346,7 +12449,7 @@ glabel sub_GAME_7F0B9B94 .L7F0B9CBC: /* 0EE7EC 7F0B9CBC 27BD0060 */ addiu $sp, $sp, 0x60 /* 0EE7F0 7F0B9CC0 03E00008 */ jr $ra -/* 0EE7F4 7F0B9CC4 00000000 */ nop +/* 0EE7F4 7F0B9CC4 00000000 */ nop ) #endif @@ -12356,7 +12459,10 @@ glabel sub_GAME_7F0B9B94 #ifdef NONMATCHING void sub_GAME_7F0B9CC8(void) { + if (something == -1) osSyncPrintf("bg: bgGetPortalBetweenRooms(): No portal joins room \'%s\' and \'%s\'\n", bgDebPrintROOMID(), bgDebPrintROOMID()); + //if reach end + osSyncPrintf("bg: bgGetPortalBetweenRooms(): Multiple portals join room \'%s\' and \'%s\'\ n", bgDebPrintROOMID(), bgDebPrintROOMID()); } #else GLOBAL_ASM( @@ -12364,7 +12470,7 @@ GLOBAL_ASM( glabel sub_GAME_7F0B9CC8 /* 0EE7F8 7F0B9CC8 27BDFFC0 */ addiu $sp, $sp, -0x40 /* 0EE7FC 7F0B9CCC AFBE0038 */ sw $fp, 0x38($sp) -/* 0EE800 7F0B9CD0 3C1E8008 */ lui $fp, %hi(g_BgPortals) +/* 0EE800 7F0B9CD0 3C1E8008 */ lui $fp, %hi(g_BgPortals) /* 0EE804 7F0B9CD4 27DEFF80 */ addiu $fp, %lo(g_BgPortals) # addiu $fp, $fp, -0x80 /* 0EE808 7F0B9CD8 8FC30000 */ lw $v1, ($fp) /* 0EE80C 7F0B9CDC AFBF003C */ sw $ra, 0x3c($sp) @@ -12389,7 +12495,7 @@ glabel sub_GAME_7F0B9CC8 /* 0EE858 7F0B9D28 90430004 */ lbu $v1, 4($v0) .L7F0B9D2C: /* 0EE85C 7F0B9D2C 16430004 */ bne $s2, $v1, .L7F0B9D40 -/* 0EE860 7F0B9D30 00000000 */ nop +/* 0EE860 7F0B9D30 00000000 */ nop /* 0EE864 7F0B9D34 904F0005 */ lbu $t7, 5($v0) /* 0EE868 7F0B9D38 526F0006 */ beql $s3, $t7, .L7F0B9D54 /* 0EE86C 7F0B9D3C 02002025 */ move $a0, $s0 @@ -12438,15 +12544,18 @@ glabel sub_GAME_7F0B9CC8 /** * Toggles control bytes 1 lowest bit, based on toggle parameter. - * + * * @param index: index into data portals. * @param toggle: When zero, sets lowest bit. Otherwise, clears lowest bit. - * + * * Address 0x7F0B9DBC. */ -void bgToggleDataPortalsContrlBytes1Bit1(s32 index, s32 toggle) +void bgToggleDataPortalsContrlBytes1Bit1(s32 portal, s32 toggle) { - g_BgPortals[index].controlbytes1 = (g_BgPortals[index].controlbytes1 | 1) ^ (toggle != 0); + #ifdef DEBUG + assert(portalunk0 * room_data_float1; + spA4 = arg0->unk4 * room_data_float1; + spA8 = arg0->unk8 * room_data_float1; + sp94 = arg1->unk0 * room_data_float1; + sp98 = arg1->unk4 * room_data_float1; + sp7C = var_s1; + sp9C = arg1->unk8 * room_data_float1; +loop_1: + if (var_t0 < var_s1) + { + temp_v0 = g_BgPortals; + sp5C = arg2 + (var_t0 * 4); +loop_3: + var_s2 = 0; + temp_s3 = *sp5C; + if (*temp_v0 != NULL) + { + sp8C = var_t0; + var_a3 = temp_v0; +loop_5: + if (!(var_a3->unk6 & 1) && ((temp_s3 == var_a3->unk4) || (temp_s3 == var_a3->unk5))) + { + sp70.unk0 = D_80044904.unk0; + sp70.unk4 = D_80044904.unk4; + sp70.unk8 = D_80044904.unk8; + var_a2 = 0; + sp64.unk0 = D_80044910.unk0; + sp64.unk4 = D_80044910.unk4; + sp64.unk8 = D_80044910.unk8; + if (*var_a3->unk0 > 0) //g_BgRoomInfo->numportals 0x47 in debug, 0x0 in retail... maybesomething comes before ? + { + do + { + var_a0 = 0; + var_v1 = &sp70; + var_v0 = &sp64; +loop_10: + temp_f0 = (var_a3->unk0 + (var_a2 * 0xC) + var_a0)->unk4; + var_a0 += 4; + if (temp_f0 < *var_v1) + { + *var_v1 = temp_f0; + } + var_v1 += 4; + if (*var_v0 < temp_f0) + { + *var_v0 = temp_f0; + } + var_v0 += 4; + if (var_v0 != &sp70) + { + goto loop_10; + } + var_a2 += 1; + } while (var_a2 < *var_a3->unk0); + } + if (bgIsBboxOverlapping(&sp70, &sp64, &spA0, &sp94) != 0) + { + var_t0_2 = 0; + temp_a3 = g_BgPortals + var_s2; + temp_v0_2 = temp_a3->unk4; + var_v1_2 = temp_v0_2; + if (temp_s3 == temp_v0_2) + { + var_v1_2 = temp_a3->unk5; + } + var_v0_2 = arg2; + if (var_s1 > 0) + { +loop_20: + if (var_v1_2 != *var_v0_2) + { + var_t0_2 += 1; + var_v0_2 += 4; + if (var_t0_2 != var_s1) + { + goto loop_20; + } + } + } + if (var_t0_2 == var_s1) + { + if (var_s1 < arg4) + { + *(arg2 + (var_s1 * 4)) = var_v1_2; + var_s1 += 1; + } + if (var_s1 >= arg4) + { + *arg3 = var_s1; + return; + } + goto block_27; + } + goto block_27; + } +block_27: + var_a3 = g_BgPortals + var_s2; + goto block_28; + } +block_28: + temp_t2 = var_a3->unk8; + var_s2 += 8; + var_a3 += 8; + if (temp_t2 == 0) + { + var_t0 = sp8C; + goto block_30; + } + goto loop_5; + } +block_30: + var_t0 += 1; + sp5C += 4; + if (var_t0 >= sp7C) + { + goto block_31; + } + goto loop_3; + } +block_31: + if (var_s1 != sp7C) + { + sp7C = var_s1; + goto loop_1; + } + *arg3 = var_s1; } #else GLOBAL_ASM( @@ -12813,7 +13088,7 @@ glabel sub_GAME_7F0BA2D4 /* 0EEE38 7F0BA308 C42013F4 */ lwc1 $f0, %lo(room_data_float1)($at) /* 0EEE3C 7F0BA30C C4840000 */ lwc1 $f4, ($a0) /* 0EEE40 7F0BA310 8CF10000 */ lw $s1, ($a3) -/* 0EEE44 7F0BA314 3C1E8004 */ lui $fp, %hi(D_80044904) +/* 0EEE44 7F0BA314 3C1E8004 */ lui $fp, %hi(D_80044904) /* 0EEE48 7F0BA318 46002182 */ mul.s $f6, $f4, $f0 /* 0EEE4C 7F0BA31C 00C0A025 */ move $s4, $a2 /* 0EEE50 7F0BA320 00004025 */ move $t0, $zero @@ -12869,7 +13144,7 @@ glabel sub_GAME_7F0BA2D4 /* 0EEF0C 7F0BA3DC 8FC10000 */ lw $at, ($fp) .L7F0BA3E0: /* 0EEF10 7F0BA3E0 8FCF0004 */ lw $t7, 4($fp) -/* 0EEF14 7F0BA3E4 3C188004 */ lui $t8, %hi(D_80044910) +/* 0EEF14 7F0BA3E4 3C188004 */ lui $t8, %hi(D_80044910) /* 0EEF18 7F0BA3E8 AEC10000 */ sw $at, ($s6) /* 0EEF1C 7F0BA3EC 8FC10008 */ lw $at, 8($fp) /* 0EEF20 7F0BA3F0 27184910 */ addiu $t8, %lo(D_80044910) # addiu $t8, $t8, 0x4910 @@ -12899,7 +13174,7 @@ glabel sub_GAME_7F0BA2D4 /* 0EEF78 7F0BA448 C4640000 */ lwc1 $f4, ($v1) /* 0EEF7C 7F0BA44C 24840004 */ addiu $a0, $a0, 4 /* 0EEF80 7F0BA450 4604003C */ c.lt.s $f0, $f4 -/* 0EEF84 7F0BA454 00000000 */ nop +/* 0EEF84 7F0BA454 00000000 */ nop /* 0EEF88 7F0BA458 45020003 */ bc1fl .L7F0BA468 /* 0EEF8C 7F0BA45C C4460000 */ lwc1 $f6, ($v0) /* 0EEF90 7F0BA460 E4600000 */ swc1 $f0, ($v1) @@ -12907,7 +13182,7 @@ glabel sub_GAME_7F0BA2D4 .L7F0BA468: /* 0EEF98 7F0BA468 24630004 */ addiu $v1, $v1, 4 /* 0EEF9C 7F0BA46C 4600303C */ c.lt.s $f6, $f0 -/* 0EEFA0 7F0BA470 00000000 */ nop +/* 0EEFA0 7F0BA470 00000000 */ nop /* 0EEFA4 7F0BA474 45020003 */ bc1fl .L7F0BA484 /* 0EEFA8 7F0BA478 24420004 */ addiu $v0, $v0, 4 /* 0EEFAC 7F0BA47C E4400000 */ swc1 $f0, ($v0) @@ -12927,7 +13202,7 @@ glabel sub_GAME_7F0BA2D4 /* 0EEFDC 7F0BA4AC 0FC2E89B */ jal bgIsBboxOverlapping /* 0EEFE0 7F0BA4B0 27A70094 */ addiu $a3, $sp, 0x94 /* 0EEFE4 7F0BA4B4 1040001F */ beqz $v0, .L7F0BA534 -/* 0EEFE8 7F0BA4B8 3C0E8008 */ lui $t6, %hi(g_BgPortals) +/* 0EEFE8 7F0BA4B8 3C0E8008 */ lui $t6, %hi(g_BgPortals) /* 0EEFEC 7F0BA4BC 8DCEFF80 */ lw $t6, %lo(g_BgPortals)($t6) /* 0EEFF0 7F0BA4C0 00004025 */ move $t0, $zero /* 0EEFF4 7F0BA4C4 0235082A */ slt $at, $s1, $s5 @@ -12943,13 +13218,13 @@ glabel sub_GAME_7F0BA2D4 .L7F0BA4E8: /* 0EF018 7F0BA4E8 8C4F0000 */ lw $t7, ($v0) /* 0EF01C 7F0BA4EC 106F0004 */ beq $v1, $t7, .L7F0BA500 -/* 0EF020 7F0BA4F0 00000000 */ nop +/* 0EF020 7F0BA4F0 00000000 */ nop /* 0EF024 7F0BA4F4 25080001 */ addiu $t0, $t0, 1 /* 0EF028 7F0BA4F8 1511FFFB */ bne $t0, $s1, .L7F0BA4E8 /* 0EF02C 7F0BA4FC 24420004 */ addiu $v0, $v0, 4 .L7F0BA500: /* 0EF030 7F0BA500 1511000C */ bne $t0, $s1, .L7F0BA534 -/* 0EF034 7F0BA504 00000000 */ nop +/* 0EF034 7F0BA504 00000000 */ nop /* 0EF038 7F0BA508 10200004 */ beqz $at, .L7F0BA51C /* 0EF03C 7F0BA50C 0011C880 */ sll $t9, $s1, 2 /* 0EF040 7F0BA510 0299C021 */ addu $t8, $s4, $t9 @@ -12958,7 +13233,7 @@ glabel sub_GAME_7F0BA2D4 .L7F0BA51C: /* 0EF04C 7F0BA51C 0235082A */ slt $at, $s1, $s5 /* 0EF050 7F0BA520 14200004 */ bnez $at, .L7F0BA534 -/* 0EF054 7F0BA524 00000000 */ nop +/* 0EF054 7F0BA524 00000000 */ nop /* 0EF058 7F0BA528 8FA900C4 */ lw $t1, 0xc4($sp) /* 0EF05C 7F0BA52C 10000018 */ b .L7F0BA590 /* 0EF060 7F0BA530 AD310000 */ sw $s1, ($t1) diff --git a/src/game/bg.h b/src/game/bg.h index ece3177..f4b358d 100644 --- a/src/game/bg.h +++ b/src/game/bg.h @@ -16,10 +16,18 @@ struct levelentry }; typedef struct s_room_info { - u8 bitflags0; - u8 bitflags1; + // is room being rendered? boolean + u8 room_rendered; + + // is the room a neighbor to a room being rendered? boolean + u8 room_neighbor_to_rendered; + u8 model_bin_loaded; - u8 bitflags2; + + // number of portals in between the player's room and this room. + // is 0 if the room is not visible or if the player is standing in this room. + u8 portals_to_room_count; + Vtx * ptr_point_index; void * ptr_expanded_mapping_info; void * ptr_secondary_expanded_mapping_info; @@ -102,11 +110,13 @@ typedef struct unk_portalstruct } unk_portalstruct; extern struct unk_portalstruct table_for_portals[200]; -extern s32 MaxNumRooms; +extern s32 g_MaxNumRooms; extern f32 room_data_float2; extern bg_room_data * ptr_bgdata_room_fileposition_list; -extern s_room_info array_room_info[]; +extern s_room_info g_BgRoomInfo[]; +extern Gfx *ptrDynamic_CC_RM_LUT[]; +extern Gfx DL_LUT_PRIMARY_ADDFOG[]; void bgInit(void); @@ -129,19 +139,19 @@ void bgClearDataPortalsControlBytes1Low2Bits(s32 index); void bgSetDataPortalsControlBytes1Bit2(s32 index); s32 sub_GAME_7F0B9A7C(s32 arg0); s32 sub_GAME_7F0B9A2C(s32 arg0); -void sub_GAME_7F0B4884(void); +void bgRoomVisibilityRelated(void); Gfx* bgLevelRender(Gfx *arg0); Gfx *bgScissorCurrentPlayerView(Gfx *arg0, s32 left, s32 top, s32 width, s32 height); Gfx* bgScissorCurrentPlayerViewDefault(Gfx* arg0); Gfx* bgScissorCurrentPlayerViewF(Gfx* arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4); f32 get_room_data_float1(void); -u8 getROOMID_Bitflags(int roomID); +u8 getROOMID_isRendered(int roomID); s32 bgGet2dBboxByRoomId(s32 room_id, struct bbox2d *result); f32 bgGetLevelVisibilityScale(void); void sub_GAME_7F0B5CC0(struct bbox2d *a, struct bbox2d *b); f32 get_room_data_float2(void); s32 sub_GAME_7F0B9CC8(s32 arg0, s32 arg1, struct coord3d *arg2, struct coord3d *arg3); void sub_GAME_7F0B96CC(s32 arg0, struct PortalMetric *arg1); -void bgLoadFromDynamicCCRMLUT(s32 arg0, s32 arg1, s32 arg2); +void bgLoadFromDynamicCCRMLUT(Gfx *arg0, Gfx *arg1, enum CCRMLUT arg2); #endif diff --git a/src/game/bg2.c b/src/game/bg2.c index a05b626..ee0e91a 100644 --- a/src/game/bg2.c +++ b/src/game/bg2.c @@ -18,236 +18,53 @@ // new file, per EU -#ifdef NONMATCHING -u32 sub_GAME_7F0BA5C0(u32 arg0, u32 arg1) { - s32 temp_a0; - u32 temp_v0; - void *phi_v0; - s32 phi_a0; - void *phi_v1; - - // Node 0 - if (arg0 < arg1) - { - // Node 1 - phi_v0 = arg0; -loop_2: - // Node 2 - if (DL_LUT_PRIMARY_ADDFOG != 0) - { - // Node 3 - phi_a0 = DL_LUT_PRIMARY_ADDFOG; - phi_v1 = &DL_LUT_PRIMARY_ADDFOG; -loop_4: - // Node 4 - if (*phi_v0 == phi_a0) - { - // Node 5 - if (phi_v0->unk4 == phi_v1->unk4) - { - // Node 6 - *phi_v0 = (s32) phi_v1->unk8; - phi_v0->unk4 = (s32) phi_v1->unkC; - } - } - // Node 7 - temp_a0 = phi_v1->unk10; - phi_a0 = temp_a0; - phi_v1 = (phi_v1 + 0x10); - if (temp_a0 != 0) - { - goto loop_4; - } - } - // Node 8 - temp_v0 = (phi_v0 + 8); - phi_v0 = temp_v0; - if (temp_v0 < arg1) - { - goto loop_2; - } - } - // Node 9 - return arg0; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0BA5C0 -/* 0EF0F0 7F0BA5C0 0085082B */ sltu $at, $a0, $a1 -/* 0EF0F4 7F0BA5C4 1020001C */ beqz $at, .L7F0BA638 -/* 0EF0F8 7F0BA5C8 00801025 */ move $v0, $a0 -/* 0EF0FC 7F0BA5CC 3C068004 */ lui $a2, %hi(DL_LUT_PRIMARY_ADDFOG) -/* 0EF100 7F0BA5D0 24C64940 */ addiu $a2, %lo(DL_LUT_PRIMARY_ADDFOG) # addiu $a2, $a2, 0x4940 -/* 0EF104 7F0BA5D4 8CCE0000 */ lw $t6, ($a2) -.L7F0BA5D8: -/* 0EF108 7F0BA5D8 3C0F8004 */ lui $t7, %hi(DL_LUT_PRIMARY_ADDFOG) -/* 0EF10C 7F0BA5DC 25EF4940 */ addiu $t7, %lo(DL_LUT_PRIMARY_ADDFOG) # addiu $t7, $t7, 0x4940 -/* 0EF110 7F0BA5E0 11C00011 */ beqz $t6, .L7F0BA628 -/* 0EF114 7F0BA5E4 00C01825 */ move $v1, $a2 -/* 0EF118 7F0BA5E8 8DE40000 */ lw $a0, ($t7) -/* 0EF11C 7F0BA5EC 8C580000 */ lw $t8, ($v0) -.L7F0BA5F0: -/* 0EF120 7F0BA5F0 5704000A */ bnel $t8, $a0, .L7F0BA61C -/* 0EF124 7F0BA5F4 8C640010 */ lw $a0, 0x10($v1) -/* 0EF128 7F0BA5F8 8C590004 */ lw $t9, 4($v0) -/* 0EF12C 7F0BA5FC 8C680004 */ lw $t0, 4($v1) -/* 0EF130 7F0BA600 57280006 */ bnel $t9, $t0, .L7F0BA61C -/* 0EF134 7F0BA604 8C640010 */ lw $a0, 0x10($v1) -/* 0EF138 7F0BA608 8C610008 */ lw $at, 8($v1) -/* 0EF13C 7F0BA60C AC410000 */ sw $at, ($v0) -/* 0EF140 7F0BA610 8C6A000C */ lw $t2, 0xc($v1) -/* 0EF144 7F0BA614 AC4A0004 */ sw $t2, 4($v0) -/* 0EF148 7F0BA618 8C640010 */ lw $a0, 0x10($v1) -.L7F0BA61C: -/* 0EF14C 7F0BA61C 24630010 */ addiu $v1, $v1, 0x10 -/* 0EF150 7F0BA620 5480FFF3 */ bnezl $a0, .L7F0BA5F0 -/* 0EF154 7F0BA624 8C580000 */ lw $t8, ($v0) -.L7F0BA628: -/* 0EF158 7F0BA628 24420008 */ addiu $v0, $v0, 8 -/* 0EF15C 7F0BA62C 0045082B */ sltu $at, $v0, $a1 -/* 0EF160 7F0BA630 5420FFE9 */ bnezl $at, .L7F0BA5D8 -/* 0EF164 7F0BA634 8CCE0000 */ lw $t6, ($a2) -.L7F0BA638: -/* 0EF168 7F0BA638 03E00008 */ jr $ra -/* 0EF16C 7F0BA63C 00000000 */ nop -) - -#endif - - - - - -#ifdef NONMATCHING -void LoadFromDynamicCCRMLUT(Gfx *glistp, int DLSize, int LUTToUse) +/** + * Unreferenced. +*/ +void sub_GAME_7F0BA5C0(Gfx *arg0, Gfx *arg1) { - char cVar1; - int *piVar2; - int iVar3; - int iVar4; + Gfx *var_v0; + Gfx *var_v1; - if ((param_2 != NULL) && (param_1 < param_2)) - goto code_r0x7f0ba66c; - if (param_2 == NULL) + var_v0 = arg0; + + while (var_v0 < arg1) { - cVar1 = *(char *)param_1; - while (cVar1 != -0x48) + for (var_v1 = DL_LUT_PRIMARY_ADDFOG; var_v1->words.w0 != 0; var_v1 += 2) { -code_r0x7f0ba66c: - do + if ((var_v1->words.w0 == var_v0->words.w0) && (var_v1->words.w1 == var_v0->words.w1)) { - piVar2 = (int *)(&gDynamic_CC_RM_LUTp)[param_3]; - iVar3 = *piVar2; - if (iVar3 != 0) - { - iVar4 = *param_1; - while (true) - { - if (iVar4 == iVar3) - { - if (param_1[1] == piVar2[1]) - { - dword_80044DB0 += 1; - *param_1 = piVar2[2]; - param_1[1] = piVar2[3]; - iVar3 = piVar2[4]; - } - else - { - iVar3 = piVar2[4]; - } - } - else - { - iVar3 = piVar2[4]; - } - piVar2 = piVar2 + 4; - if (iVar3 == 0) - break; - iVar4 = *param_1; - } - } - param_1 = param_1 + 2; - } while ((param_2 != NULL) && (param_1 < param_2)); - if (param_2 != NULL) - { - return; + *var_v0 = *(var_v1+1); } - cVar1 = *(char *)param_1; } + + var_v0++; } - return; } -#else - - -GLOBAL_ASM( -.text -glabel bgLoadFromDynamicCCRMLUT /*DynamicCCRMLUT(Int DLSize (a0), Gfx GBICommand(a1), Gfx ReplacementGBICommand (a2))*/ -/* 0EF170 7F0BA640 10A00004 */ beqz $a1, .L7F0BA654 /*if a1 = 0 goto L7F0BA654*/ -/* 0EF174 7F0BA644 00801025 */ move $v0, $a0 /*v0 = a0*/ -/* 0EF178 7F0BA648 0045082B */ sltu $at, $v0, $a1 /*if a1 < v0 then goto L7F0BA668*/ -/* 0EF17C 7F0BA64C 14200006 */ bnez $at, .L7F0BA668 -/* 0EF180 7F0BA650 00000000 */ nop -.L7F0BA654: -/* 0EF184 7F0BA654 14A0002E */ bnez $a1, .L7F0BA710 /*if a1 != 0 goto return*/ -/* 0EF188 7F0BA658 00000000 */ nop -/* 0EF18C 7F0BA65C 808E0000 */ lb $t6, ($a0) /*t6 = byte(a0)*/ -/* 0EF190 7F0BA660 2408FFB8 */ li $t0, -72 /*t0 = 0xB8*/ -/* 0EF194 7F0BA664 110E002A */ beq $t0, $t6, .L7F0BA710 /*if t6 = 0xB8 return (B8 = EndDl())*/ -.L7F0BA668: -/* 0EF198 7F0BA668 3C098004 */ lui $t1, %hi(ptrDynamic_CC_RM_LUT) -/* 0EF19C 7F0BA66C 25294D88 */ addiu $t1, %lo(ptrDynamic_CC_RM_LUT) # addiu $t1, $t1, 0x4d88 -/* 0EF1A0 7F0BA670 00067880 */ sll $t7, $a2, 2 /*t7 = a2 << 2*/ -/* 0EF1A4 7F0BA674 012FC021 */ addu $t8, $t1, $t7 /*t8 = t7 + t1*/ -/* 0EF1A8 7F0BA678 8F030000 */ lw $v1, ($t8) -/* 0EF1AC 7F0BA67C 3C078004 */ lui $a3, %hi(D_80044DB0) -/* 0EF1B0 7F0BA680 8CE74DB0 */ lw $a3, %lo(D_80044DB0)($a3) # 0x4DB0($a3), -/* 0EF1B4 7F0BA684 8C640000 */ lw $a0, ($v1) -/* 0EF1B8 7F0BA688 2408FFB8 */ li $t0, -72 -/* 0EF1BC 7F0BA68C 10800011 */ beqz $a0, .L7F0BA6D4 -/* 0EF1C0 7F0BA690 00000000 */ nop -/* 0EF1C4 7F0BA694 8C590000 */ lw $t9, ($v0) -.L7F0BA698: -/* 0EF1C8 7F0BA698 5724000B */ bnel $t9, $a0, .L7F0BA6C8 -/* 0EF1CC 7F0BA69C 8C640010 */ lw $a0, 0x10($v1) -/* 0EF1D0 7F0BA6A0 8C4A0004 */ lw $t2, 4($v0) -/* 0EF1D4 7F0BA6A4 8C6B0004 */ lw $t3, 4($v1) -/* 0EF1D8 7F0BA6A8 554B0007 */ bnel $t2, $t3, .L7F0BA6C8 -/* 0EF1DC 7F0BA6AC 8C640010 */ lw $a0, 0x10($v1) -/* 0EF1E0 7F0BA6B0 8C610008 */ lw $at, 8($v1) -/* 0EF1E4 7F0BA6B4 24E70001 */ addiu $a3, $a3, 1 -/* 0EF1E8 7F0BA6B8 AC410000 */ sw $at, ($v0) -/* 0EF1EC 7F0BA6BC 8C6D000C */ lw $t5, 0xc($v1) -/* 0EF1F0 7F0BA6C0 AC4D0004 */ sw $t5, 4($v0) -/* 0EF1F4 7F0BA6C4 8C640010 */ lw $a0, 0x10($v1) -.L7F0BA6C8: -/* 0EF1F8 7F0BA6C8 24630010 */ addiu $v1, $v1, 0x10 -/* 0EF1FC 7F0BA6CC 5480FFF2 */ bnezl $a0, .L7F0BA698 -/* 0EF200 7F0BA6D0 8C590000 */ lw $t9, ($v0) -.L7F0BA6D4: -/* 0EF204 7F0BA6D4 10A00006 */ beqz $a1, .L7F0BA6F0 -/* 0EF208 7F0BA6D8 24420008 */ addiu $v0, $v0, 8 -/* 0EF20C 7F0BA6DC 3C018004 */ lui $at, %hi(D_80044DB0) -/* 0EF210 7F0BA6E0 AC274DB0 */ sw $a3, %lo(D_80044DB0)($at) -/* 0EF214 7F0BA6E4 0045082B */ sltu $at, $v0, $a1 -/* 0EF218 7F0BA6E8 1420FFDF */ bnez $at, .L7F0BA668 -/* 0EF21C 7F0BA6EC 00000000 */ nop -.L7F0BA6F0: -/* 0EF220 7F0BA6F0 3C018004 */ lui $at, %hi(D_80044DB0) -/* 0EF224 7F0BA6F4 14A00006 */ bnez $a1, .L7F0BA710 -/* 0EF228 7F0BA6F8 AC274DB0 */ sw $a3, %lo(D_80044DB0)($at) -/* 0EF22C 7F0BA6FC 3C018004 */ lui $at, %hi(D_80044DB0) -/* 0EF230 7F0BA700 AC274DB0 */ sw $a3, %lo(D_80044DB0)($at) -/* 0EF234 7F0BA704 804E0000 */ lb $t6, ($v0) -/* 0EF238 7F0BA708 150EFFD7 */ bne $t0, $t6, .L7F0BA668 -/* 0EF23C 7F0BA70C 00000000 */ nop -.L7F0BA710: -/* 0EF240 7F0BA710 03E00008 */ jr $ra -/* 0EF244 7F0BA714 00000000 */ nop -) -#endif +void bgLoadFromDynamicCCRMLUT(Gfx *arg0, Gfx *arg1, enum CCRMLUT arg2) +{ + Gfx *var_v0; + Gfx *var_v1; + + static s32 D_80044DB0 = 0; + + var_v0 = arg0; + + while (((arg1 != NULL) && (var_v0 < arg1)) || ((arg1 == NULL) && (((s8*)var_v0)[0] != (s8)G_ENDDL))) + { + for (var_v1 = ptrDynamic_CC_RM_LUT[(s32)arg2]; var_v1->words.w0 != 0; var_v1 += 2) + { + if ((var_v1->words.w0 == var_v0->words.w0) && (var_v1->words.w1 == var_v0->words.w1)) + { + D_80044DB0 += 1; + + *var_v0 = *(var_v1+1); + } + } + + var_v0++; + } +} diff --git a/src/game/blood_animation.c b/src/game/blood_animation.c index 5e9cabf..0b726aa 100644 --- a/src/game/blood_animation.c +++ b/src/game/blood_animation.c @@ -203,8 +203,8 @@ Gfx *insert_imageDL(Gfx *gdl) { } Gfx *sub_GAME_7F01C1A4(Gfx *gdl) { - gSPMatrix(gdl++, osVirtualToPhysical(matrix_buffer_gunbarrel_0), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); - gSPMatrix(gdl++, osVirtualToPhysical(&matrix_buffer_rarelogo_2[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); + gSPMatrix(gdl++, osVirtualToPhysical(matrixBufferGunbarrel0), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + gSPMatrix(gdl++, osVirtualToPhysical(&matrixBufferRareLogo2[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); gDPPipeSync(gdl++); gDPSetCycleType(gdl++, G_CYC_1CYCLE); gDPSetRenderMode(gdl++, G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2); diff --git a/src/game/bondhead.c b/src/game/bondhead.c index 34eb0ad..879a038 100644 --- a/src/game/bondhead.c +++ b/src/game/bondhead.c @@ -22,31 +22,6 @@ struct init_bond_anim_unk g_BondMoveAnimationSetup[2] = { {PTR_ANIM_sprinting, 7.5f, 17.0f, 0.0f, 1.5f, 100.0f} }; -/** - * Address 0x80036B00. -*/ -coord3d D_80036B00 = { 0.0f, 0.0f, 0.0f }; - -/** - * Address 0x80036B0C. -*/ -coord3d D_80036B0C = { 0.0f, 0.0f, 1.0f }; - -/** - * Address 0x80036B18. -*/ -coord3d D_80036B18 = { 0.0f, 1.0f, 0.0f }; - -/** - * Address 0x80036B24. -*/ -struct unk_joint_list D_80036B24 = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; - -/** - * Address 0x80036B64. -*/ -coord3d D_80036B64 = { 0.0f, 0.0f, 0.0f }; - @@ -65,7 +40,7 @@ void bheadSetdamp(f32 headdamp); void bheadFlipAnimation() { - g_CurrentPlayer->field_5BC = !g_CurrentPlayer->field_5BC; + g_CurrentPlayer->animFlipFlag = !g_CurrentPlayer->animFlipFlag; } void bheadUpdateIdleRoll() @@ -131,7 +106,7 @@ void bheadUpdateRot(coord3d *lookvel, coord3d *upvel) g_CurrentPlayer->headlooksum.f[0] = lookvel->f[0] / (1.0f - g_CurrentPlayer->headdamp); g_CurrentPlayer->headlooksum.f[1] = lookvel->f[1] / (1.0f - g_CurrentPlayer->headdamp); g_CurrentPlayer->headlooksum.f[2] = lookvel->f[2] / (1.0f - g_CurrentPlayer->headdamp); - + g_CurrentPlayer->headupsum.f[0] = upvel->f[0] / (1.0f - g_CurrentPlayer->headdamp); g_CurrentPlayer->headupsum.f[1] = upvel->f[1] / (1.0f - g_CurrentPlayer->headdamp); g_CurrentPlayer->headupsum.f[2] = upvel->f[2] / (1.0f - g_CurrentPlayer->headdamp); @@ -144,7 +119,7 @@ void bheadUpdateRot(coord3d *lookvel, coord3d *upvel) g_CurrentPlayer->headlooksum.f[0] = g_CurrentPlayer->headdamp * g_CurrentPlayer->headlooksum.f[0] + lookvel->f[0]; g_CurrentPlayer->headlooksum.f[1] = g_CurrentPlayer->headdamp * g_CurrentPlayer->headlooksum.f[1] + lookvel->f[1]; g_CurrentPlayer->headlooksum.f[2] = g_CurrentPlayer->headdamp * g_CurrentPlayer->headlooksum.f[2] + lookvel->f[2]; - + g_CurrentPlayer->headupsum.f[0] = g_CurrentPlayer->headdamp * g_CurrentPlayer->headupsum.f[0] + upvel->f[0]; g_CurrentPlayer->headupsum.f[1] = g_CurrentPlayer->headdamp * g_CurrentPlayer->headupsum.f[1] + upvel->f[1]; g_CurrentPlayer->headupsum.f[2] = g_CurrentPlayer->headdamp * g_CurrentPlayer->headupsum.f[2] + upvel->f[2]; @@ -153,7 +128,7 @@ void bheadUpdateRot(coord3d *lookvel, coord3d *upvel) g_CurrentPlayer->headlook.f[0] = g_CurrentPlayer->headlooksum.f[0] * (1.0f - g_CurrentPlayer->headdamp); g_CurrentPlayer->headlook.f[1] = g_CurrentPlayer->headlooksum.f[1] * (1.0f - g_CurrentPlayer->headdamp); g_CurrentPlayer->headlook.f[2] = g_CurrentPlayer->headlooksum.f[2] * (1.0f - g_CurrentPlayer->headdamp); - + g_CurrentPlayer->headup.f[0] = g_CurrentPlayer->headupsum.f[0] * (1.0f - g_CurrentPlayer->headdamp); g_CurrentPlayer->headup.f[1] = g_CurrentPlayer->headupsum.f[1] * (1.0f - g_CurrentPlayer->headdamp); g_CurrentPlayer->headup.f[2] = g_CurrentPlayer->headupsum.f[2] * (1.0f - g_CurrentPlayer->headdamp); @@ -164,33 +139,79 @@ void bheadSetdamp(f32 headdamp) if (headdamp != g_CurrentPlayer->headdamp) { f32 divisor = 1.0f - headdamp; - + g_CurrentPlayer->headlooksum.f[0] = (g_CurrentPlayer->headlooksum.f[0] * (1.0f - g_CurrentPlayer->headdamp)) / divisor; g_CurrentPlayer->headlooksum.f[1] = (g_CurrentPlayer->headlooksum.f[1] * (1.0f - g_CurrentPlayer->headdamp)) / divisor; g_CurrentPlayer->headlooksum.f[2] = (g_CurrentPlayer->headlooksum.f[2] * (1.0f - g_CurrentPlayer->headdamp)) / divisor; - + g_CurrentPlayer->headupsum.f[0] = (g_CurrentPlayer->headupsum.f[0] * (1.0f - g_CurrentPlayer->headdamp)) / divisor; g_CurrentPlayer->headupsum.f[1] = (g_CurrentPlayer->headupsum.f[1] * (1.0f - g_CurrentPlayer->headdamp)) / divisor; g_CurrentPlayer->headupsum.f[2] = (g_CurrentPlayer->headupsum.f[2] * (1.0f - g_CurrentPlayer->headdamp)) / divisor; - + g_CurrentPlayer->headdamp = headdamp; } } + +/** + * Address 0x80036B00. +*/ +coord3d initialHeadPosition = { 0.0f, 0.0f, 0.0f }; + +/** + * Address 0x80036B0C. +*/ +coord3d headLookDirection = { 0.0f, 0.0f, 1.0f }; + +/** + * Address 0x80036B18. +*/ +coord3d headUpDirection = { 0.0f, 1.0f, 0.0f }; + +/** + * Address 0x80036B24. +*/ +ModelRenderData headModelRenderData = {NULL, + TRUE, + 0x00000003, + NULL, + NULL, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; +/** + * Address 0x80036B64. +*/ +coord3d D_80036B64 = { 0.0f, 0.0f, 0.0f }; + + + + +/** + * Updates the head movement based on the player's speed and animation state. + */ void bheadUpdate(f32 percent_speed, f32 speedsideways) { coord3d headpos; coord3d lookvel; coord3d upvel; f32 abs_anim_speed; - struct unk_joint_list sp80; + ModelRenderData renderData; Mtxf sp40; - coord3d sp34; - u32 sp30; + coord3d offset; + u32 isMergable; - headpos = D_80036B00; - lookvel = D_80036B0C; - upvel = D_80036B18; + headpos = initialHeadPosition; + lookvel = headLookDirection; + upvel = headUpDirection; abs_anim_speed = modelGetAbsAnimSpeed(&g_CurrentPlayer->model); @@ -222,35 +243,35 @@ void bheadUpdate(f32 percent_speed, f32 speedsideways) g_CurrentPlayer->sideamplitude = g_CurrentPlayer->headamplitude; } - sp80 = D_80036B24; - sp34 = D_80036B64; + renderData = headModelRenderData; + offset = D_80036B64; - sp30 = modelIsAnimMergingEnabled(); + isMergable = modelIsAnimMergingEnabled(); - g_CurrentPlayer->resetheadtick = 0; + g_CurrentPlayer->resetheadtick = FALSE; modelSetAnimMergingEnabled(0); modelTickAnimQuarterSpeed(&g_CurrentPlayer->model, g_ClockTimer, 1); - modelSetAnimMergingEnabled((s32) sp30); + modelSetAnimMergingEnabled((s32) isMergable); subcalcpos(&g_CurrentPlayer->model); matrix_4x4_set_identity(&sp40); - sp80.unk_matrix = &sp40; - sp80.mtxlist = &g_CurrentPlayer->bondheadmatrices[0]; + renderData.unk_matrix = &sp40; + renderData.mtxlist = &g_CurrentPlayer->bondheadmatrices[0]; - subcalcmatrices(&sp80, &g_CurrentPlayer->model); + subcalcmatrices(&renderData, &g_CurrentPlayer->model); g_CurrentPlayer->headbodyoffset.f[0] = g_CurrentPlayer->standbodyoffset.x; g_CurrentPlayer->headbodyoffset.f[1] = g_CurrentPlayer->standbodyoffset.y; g_CurrentPlayer->headbodyoffset.f[2] = g_CurrentPlayer->standbodyoffset.z; - getsuboffset(&g_CurrentPlayer->model, (struct float3 *) &sp34); + getsuboffset(&g_CurrentPlayer->model, (struct float3 *) &offset); - sp34.f[0] -= g_CurrentPlayer->bondheadmatrices[0].m[3][0]; - sp34.f[2] -= g_CurrentPlayer->bondheadmatrices[0].m[3][2]; - - setsuboffset(&g_CurrentPlayer->model, (coord3d *) &sp34); + offset.f[0] -= g_CurrentPlayer->bondheadmatrices[0].m[3][0]; + offset.f[2] -= g_CurrentPlayer->bondheadmatrices[0].m[3][2]; + + setsuboffset(&g_CurrentPlayer->model, (coord3d *) &offset); if (abs_anim_speed > 0.0f) { @@ -366,20 +387,20 @@ void bheadUpdate(f32 percent_speed, f32 speedsideways) /** - * Adjust Bond model based on speed (speedforwards). - * Toggle the currently selected headanim index. - * Address 0x7F08E8BC. -*/ + * Adjusts Bond's head animation based on movement speed. + * + * @param speed The movement speed to adjust the animation to. + */ void bheadAdjustAnimation(f32 speed) { s32 i; f32 startframe; - - speed *= g_BondMoveAnimationSetup[1].unk0C; + + speed *= g_BondMoveAnimationSetup[1].speedMultiplier; for (i=0; i<2; i++) { - if (speed <= g_BondMoveAnimationSetup[i].unk14 * g_BondMoveAnimationSetup[i].unk0C) + if (speed <= g_BondMoveAnimationSetup[i].unk14 * g_BondMoveAnimationSetup[i].speedMultiplier) { if (i != g_CurrentPlayer->headanim) { @@ -397,7 +418,7 @@ void bheadAdjustAnimation(f32 speed) &g_CurrentPlayer->model, // match hack: addu address backwards (struct ModelAnimation *) ((s32)g_BondMoveAnimationSetup[i].anim_id + (s32)&ptr_animation_table->data), - (s32) g_CurrentPlayer->field_5BC, + (s32) g_CurrentPlayer->animFlipFlag, startframe, 0.5f, 12.0f); @@ -408,7 +429,7 @@ void bheadAdjustAnimation(f32 speed) g_CurrentPlayer->headanim = i; } - speed /= g_BondMoveAnimationSetup[i].unk0C; + speed /= g_BondMoveAnimationSetup[i].speedMultiplier; modelSetAnimSpeed(&g_CurrentPlayer->model, speed * 0.5f, 0.0f); return; @@ -417,12 +438,14 @@ void bheadAdjustAnimation(f32 speed) } - - - /** - * Address 0x7F08EA48. -*/ + * Starts a new death animation for Bond's head. + * + * @param animNum The animation to play. + * @param flip Whether to flip the animation. + * @param startFrame The starting frame of the animation. + * @param speed The speed of the animation. + */ void bheadStartDeathAnimation(struct ModelAnimation *animnum, s32 flip, f32 fstarttime, f32 speed) { modelSetAnimation(&g_CurrentPlayer->model, animnum, flip, fstarttime, speed * 0.5f, 12.0f); @@ -430,37 +453,40 @@ void bheadStartDeathAnimation(struct ModelAnimation *animnum, s32 flip, f32 fsta } - - - - /** - * Address 0x7F08EAB8. -*/ + * Sets the speed of the current head animation. + * + * @param speed The speed to set for the head animation. + */ void bheadSetSpeed(f32 speed) { modelSetAnimSpeed(&g_CurrentPlayer->model, speed * 0.5f, 0.0f); } +/** + * Calculates the breathing value for Bond's head animation. + * + * @return The calculated breathing value. + */ f32 bheadGetBreathingValue(void) { if (g_CurrentPlayer->headanim >= 0) { // bondviewGetBondBreathing() * (1/80) + (1/240) - f32 a = bondviewGetBondBreathing() * 0.012500001f + 0.004166667f; - f32 b = modelGetAbsAnimSpeed(&g_CurrentPlayer->model); + f32 baseBreathing = bondviewGetBondBreathing() * 0.012500001f + 0.004166667f; + f32 animSpeed = modelGetAbsAnimSpeed(&g_CurrentPlayer->model); - if (b > 0) { - f32 c = b / (g_BondMoveAnimationSetup[g_CurrentPlayer->headanim].endframe - g_BondMoveAnimationSetup[g_CurrentPlayer->headanim].loopframe); + if (animSpeed > 0) { + f32 calculatedBreathing = animSpeed / (g_BondMoveAnimationSetup[g_CurrentPlayer->headanim].endframe - g_BondMoveAnimationSetup[g_CurrentPlayer->headanim].loopframe); - if (c < a) { - c = a; + if (calculatedBreathing < baseBreathing) { + calculatedBreathing = baseBreathing; } - return c; + return calculatedBreathing; } - return a; + return baseBreathing; } return 0; diff --git a/src/game/bondhead.h b/src/game/bondhead.h index 2209248..4a619b3 100644 --- a/src/game/bondhead.h +++ b/src/game/bondhead.h @@ -8,7 +8,7 @@ struct init_bond_anim_unk { u32 anim_id; f32 loopframe; f32 endframe; - f32 unk0C; + f32 speedMultiplier; f32 unk10; f32 unk14; @@ -18,8 +18,8 @@ extern struct init_bond_anim_unk g_BondMoveAnimationSetup[]; s32 waypointFindRoute(waypoint *, waypoint *, waypoint ** arr, s32 arr_len); waypoint * sub_GAME_7F08FB90(waypoint *, waypoint *); -void bheadFlipAnimation(); -void bheadUpdateIdleRoll(); +void bheadFlipAnimation(void); +void bheadUpdateIdleRoll(void); void bheadUpdate(f32 percent_speed, f32 speedsideways); void bheadAdjustAnimation(f32 arg0); void bheadStartDeathAnimation(struct ModelAnimation *arg0, s32 arg1, f32 arg2, f32 arg3); diff --git a/src/game/bondinv.c b/src/game/bondinv.c index 50dc00c..bb05882 100644 --- a/src/game/bondinv.c +++ b/src/game/bondinv.c @@ -169,6 +169,10 @@ InvItem *bondinvGetNextAvailItem(void) } } + #ifdef DEBUG + osSyncPrintf("equipgetfreeitem: No free equip items!!!!\n"); + #endif + return NULL; } @@ -1075,9 +1079,9 @@ u16 *bondinvGetNameByIndex(s32 index) if (override) { - if (override->unk6) + if (override->shorttext) { - return langGet(override->unk6); + return langGet(override->shorttext); } weaponnum = override->weapon; @@ -1088,9 +1092,9 @@ u16 *bondinvGetNameByIndex(s32 index) weaponnum = item->type_inv_item.type_weap.weapon; override = bondinvGetTextbyWeaponID(weaponnum); - if (override && override->unk6) + if (override && override->shorttext) { - return langGet(override->unk6); + return langGet(override->shorttext); } } } @@ -1135,9 +1139,9 @@ u16 *bondinvGetLongNameByIndex(s32 index) if (override) { - if (override->unk7) + if (override->longtext) { - return langGet(override->unk7); + return langGet(override->longtext); } weaponnum = override->weapon; @@ -1148,9 +1152,9 @@ u16 *bondinvGetLongNameByIndex(s32 index) weaponnum = item->type_inv_item.type_weap.weapon; override = bondinvGetTextbyWeaponID(weaponnum); - if (override && override->unk7) + if (override && override->longtext) { - return langGet(override->unk7); + return langGet(override->longtext); } } } @@ -1215,9 +1219,9 @@ u16 *bondinvGetFirstTitlebyIndex(s32 index) if (override) { - if (override->unk4) + if (override->titletext1) { - return langGet(override->unk4); + return langGet(override->titletext1); } weaponnum = override->weapon; @@ -1228,9 +1232,9 @@ u16 *bondinvGetFirstTitlebyIndex(s32 index) weaponnum = item->type_inv_item.type_weap.weapon; override = bondinvGetTextbyWeaponID(weaponnum); - if (override && override->unk4) + if (override && override->titletext1) { - return langGet(override->unk4); + return langGet(override->titletext1); } } } @@ -1275,9 +1279,9 @@ u16 *bondinvGetSecondTitlebyIndex(s32 index) if (override) { - if (override->unk5) + if (override->titletext2) { - return langGet(override->unk5); + return langGet(override->titletext2); } weaponnum = override->weapon; @@ -1288,9 +1292,9 @@ u16 *bondinvGetSecondTitlebyIndex(s32 index) weaponnum = item->type_inv_item.type_weap.weapon; override = bondinvGetTextbyWeaponID(weaponnum); - if (override && override->unk5) + if (override && override->titletext2) { - return langGet(override->unk5); + return langGet(override->titletext2); } } } diff --git a/src/game/bondview.c b/src/game/bondview.c index e86bcae..5925b9a 100644 --- a/src/game/bondview.c +++ b/src/game/bondview.c @@ -71,8 +71,13 @@ #endif +/*cannonically these are both*/ #define BONDVIEW_HUD_MSG_TOP_BUFFER_LENGTH 0x97 #define BONDVIEW_HUD_MSG_BOTTOM_BUFFER_LENGTH 0x65 +/*these*/ +#define MAXTALKMESSLEN 150 +#define MAXMESSAGELEN 100 + #if defined(VERSION_US) @@ -96,7 +101,7 @@ #if defined(VERSION_EU) - #define TANKUPDATEROTATION_SCALE 0.904799997807f + #define TANKUPDATEROTATION_SCALE 0.904799997807f #define TANKTURRETVERTICALANGLERELATED_SCALE 0.928399980068f #define TANK_UNKD0_SCALE 0.79960000515f #define CHR_OBJ_ACCEL_SPEED_FACTOR 0.6f @@ -224,10 +229,11 @@ struct coord3d g_EnterTankCoord; //CODE.bss:800799DC f32 flt_CODE_bss_800799DC; + //CODE.bss:800799E0 -s32 starting_right_weapon; -//CODE.bss:800799E4 -s32 starting_left_weapon; +//s32 starting_right_weapon; +//s32 starting_left_weapon; +ITEM_IDS starting_weapon[2]; //CODE.bss:800799E8 struct coord3d flt_CODE_bss_800799E8; @@ -340,17 +346,17 @@ s32 g_bondviewForceDisarm = 0; //D:80036428 s32 resolution = 0; //D:8003642C -s32 camera_8003642C = 0; +s32 cameraBufferToggle = 0; //D:80036430 -s32 camera_80036430 = 0; +s32 cameraFrameCounter1 = 0; //D:80036434 -s32 camera_80036434 = 0; +s32 cameraFrameCounter2 = 0; //D:80036438 s32 camera_80036438 = 0; //D:8003643C -s32 D_8003643C = 0; +s32 credits_state = 0; //D:80036440 -CreditsEntry *D_80036440 = NULL; +CreditsEntry *credits_pointer = NULL; //D:80036444 s32 g_SurroundBondWithExplosionsFlag = 0; @@ -360,7 +366,7 @@ s32 in_tank_flag = 0; //D:8003644C struct PropRecord *g_WorldTankProp = NULL; -//D:80036450 +//D:80036450 cannonically bondonprop2 struct PropRecord *g_PlayerTankProp = NULL; /** @@ -386,11 +392,11 @@ f32 g_TankTurnSpeed = 0; f32 g_TankOrientationAngle = 0; //D:80036468 -f32 D_80036468 = 0.0f; +f32 tank_turret_unused_angle = 0.0f; /** * Argument to sinf,cosf. - * + * * Address 0x8003646C. */ f32 g_TankTurretVerticalAngle = 0; @@ -406,10 +412,10 @@ f32 g_TankTurretVerticalAngleRelated = 0; f32 g_TankTurretOrientationAngleRad = 0; //D:80036478 -f32 D_80036478 = 0; +f32 g_TankTurretOrientationAngleDeg = 0; //D:8003647C -f32 D_8003647C = 0; +f32 tank_turret_turn_speed = 0; /** * Can enter tank, remains set once Bond is in tank. @@ -436,17 +442,17 @@ enum CAMERAMODE g_CameraMode = CAMERAMODE_NONE; //D:80036498 enum CAMERAMODE g_CameraAfterCinema = CAMERAMODE_NONE; //D:8003649C -s32 D_8003649C = 0; +s32 camera_fade_active = 0; //D:800364A0 s32 stop_time_flag = 0; //D:800364A4 -f32 D_800364A4 = 0; +f32 camera_transition_timer = 0; //D:800364A8 -s32 D_800364A8 = 1; +s32 intro_camera_index = 1; //D:800364AC struct SetupIntroSwirl *g_IntroSwirl = NULL; //D:800364B0 -s32 D_800364B0 = 1; +s32 is_timer_active = 1; //D:800364B4 s32 g_PlayerInvincible = 0; //D:800364B8 @@ -460,13 +466,13 @@ struct SetupIntroCamera *ptr_random06cam_entry = NULL; * Flag to toggle invisibility cheat. * 1 = visible to guards * 0 = not visible to guards - * + * * Address 0x800364C4. */ -s32 g_VisibleToGuardsFlag = 1; +s32 g_VisibleToGuardsFlag = TRUE; //D:800364C8 -s32 obj_collision_flag = 1; +s32 obj_collision_flag = TRUE; //D:800364CC f32 D_800364CC = 1.0; //D:800364D0 @@ -499,21 +505,21 @@ s32 g_bondviewBondDeathAnimations[] = { s32 g_bondviewBondDeathAnimationsCount = 0; //D:80036510 -enum CAMERAMODE D_80036510 = CAMERAMODE_NONE; +enum CAMERAMODE camera_mode = CAMERAMODE_NONE; //D:80036514 s32 g_IntroAnimationIndex = 0; //D:80036518 struct struct_4 stage_intro_anim_table[] = { - {0x5744, 95.0, -1.0, 0.02}, - {0x6254, 7.0, 40.0, 0.5}, - {0x78C8, 0.0, -1.0, 0.5}, - {0x7AA8, 0.0, -1.0, 0.5}, - {0x7C4C, 0.0, -1.0, 0.5}, - {0x7D04, 0.0, -1.0, 0.5}, - {0x7F0C, 0.0, -1.0, 0.5}, - {0x7FB4, 0.0, -1.0, 0.5}, - {0xD89C, 0.0, -1.0, 0.5} + {PTR_ANIM_extending_left_hand, 95.0, -1.0, 0.02}, + {PTR_ANIM_fire_standing_draw_one_handed_weapon_fast, 7.0, 40.0, 0.5}, + {PTR_ANIM_draw_one_handed_weapon_and_look_around, 0.0, -1.0, 0.5}, + {PTR_ANIM_draw_one_handed_weapon_and_stand_up, 0.0, -1.0, 0.5}, + {PTR_ANIM_aim_one_handed_weapon_left_right, 0.0, -1.0, 0.5}, + {PTR_ANIM_cock_one_handed_weapon_and_turn_around, 0.0, -1.0, 0.5}, + {PTR_ANIM_cock_one_handed_weapon_turn_around_and_stand_up, 0.0, -1.0, 0.5}, + {PTR_ANIM_draw_one_handed_weapon_and_turn_around, 0.0, -1.0, 0.5}, + {PTR_ANIM_bond_eye_fire_alt, 0.0, -1.0, 0.5} }; //D:800365A8 @@ -525,11 +531,11 @@ WeaponObjRecord dummy_08_pp7_obj[] = { 0x00, 0x08, PROP_CHRWPPK, - 0x4000, - 0x00000000, + 0x4000, 0x00000000, - NULL, - NULL, + 0x00000000, + NULL, + NULL, { 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, @@ -538,9 +544,9 @@ WeaponObjRecord dummy_08_pp7_obj[] = { }, {0.0f, 0.0f, 0.0f}, {0x00000000}, - NULL, NULL, - 0.0f, + NULL, + 0.0f, 1000.0f, {0xff, 0xff, 0xff, 0x00}, 0xff, @@ -616,7 +622,23 @@ s32 D_80036834 = 0; //D:80036838 s32 D_80036838 = 0; //D:8003683C -struct unk_joint_list D_8003683C = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData D_8003683C = {NULL, + TRUE, + 0x00000003, + NULL, + NULL, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; + //D:8003687C s32 D_8003687C = 0; @@ -732,7 +754,7 @@ s32 bondviewTankCollisionStatus(struct coord3d *collision_position, StandTile *a s32 bondviewCallTankCollisionStatus(struct coord3d *arg0, struct StandTile *arg1, f32 arg2); s32 sub_GAME_7F07CDD4(struct coord3d *arg0, f32 arg1, struct StandTile **arg2); s32 bondviewTryMoveToStan(struct coord3d *arg0, struct StandTile **stan); -s32 bondviewTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, s32 objFlags, struct coord3d *coord_p, struct coord3d *coord_dest); +s32 bondviewTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, s32 cdtypes, struct coord3d *coord_p, struct coord3d *coord_dest); s32 bondviewTryFractionMovePlayerCollision(struct coord3d *next_pos, struct coord3d *collision1_pt0, struct coord3d *collision1_pt1, struct coord3d *collision2_pt0, struct coord3d *collision2_pt1); s32 bondviewTryEdgeMovePlayerCollision(struct coord3d *prior_next_pos, struct coord3d *collision_pt0, struct coord3d *collision_pt1); @@ -753,6 +775,7 @@ void bondviewUpdateSpeedSideways(s32 arg0); void bondviewUpdateSpeedForwards(s32 arg0); void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, struct coord3d *pos2, struct coord3d *offset, struct StandTile **stan, struct coord3d *arg6); void sub_GAME_7F07B2A0(s32, f32, struct coord3d *, struct coord3d *); +s32 pickDeathCameraAngles(struct PropRecord *, struct coord3d *, struct PropRecord *, struct coord3d *, struct StandTile *, f32); // end forward declarations @@ -819,7 +842,15 @@ void currentPlayerSetCameraScale(void) g_CurrentPlayer->c_cameraleftnorm.z = -fVar5 * fVar4; } -void sub_GAME_7F077EEC(coord2d *in, coord3d *out, f32 value) { +/** + * Transforms a 2D screen coordinate to a 3D world coordinate + * + * 'out' looks to be a vector which probably has the length 'length' + * It starts from the middle of the screen. + * + * Address 0x7F077EEC. + */ +void transformAndNormalizeByLength2Dto3D(coord2d *in, coord3d *out, f32 length) { f32 norm; f32 x; f32 y; @@ -827,24 +858,24 @@ void sub_GAME_7F077EEC(coord2d *in, coord3d *out, f32 value) { y = (g_CurrentPlayer->c_halfheight - (in->y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; x = ((in->x - g_CurrentPlayer->c_screenleft) - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; z = -1.0f; - norm = value / sqrtf((x * x) + (y * y) + (z * z)); + norm = length / sqrtf((x * x) + (y * y) + (z * z)); out->x = (x * norm); out->y = (y * norm); out->z = (-1.0f * norm); } -void sub_GAME_7F077FB4(coord3d *in, f32 value, coord3d *out) { +void scale3DCoordinates(coord3d *in, f32 value, coord3d *out) { out->y = ((in->y * value) * g_CurrentPlayer->c_scaley); out->x = ((in->x * value) * g_CurrentPlayer->c_scalex); } -void sub_GAME_7F077FF4(coord3d *in, coord3d *out) { +void transform3Dto2DCoords(coord3d *in, coord2d *out) { f32 inv_z = (1.0f / in->z); out->y = (in->y * inv_z * g_CurrentPlayer->c_recipscaley) + (g_CurrentPlayer->c_screentop + g_CurrentPlayer->c_halfheight); out->x = (g_CurrentPlayer->c_screenleft + g_CurrentPlayer->c_halfwidth) - (in->x * inv_z * g_CurrentPlayer->c_recipscalex); } -void sub_GAME_7F078060(coord3d *in, coord3d *out) +void transform3Dto2DWithZScaling(coord3d *in, coord3d *out) { f32 inv_z; @@ -858,13 +889,13 @@ void sub_GAME_7F078060(coord3d *in, coord3d *out) out->x = (g_CurrentPlayer->c_screenleft + g_CurrentPlayer->c_halfwidth) - in->x * inv_z * g_CurrentPlayer->c_recipscalex; } -void sub_GAME_7F0780F0(coord3d *in, f32 divisor, coord3d *out) +void divide3DCoordinates(coord3d *in, f32 divisor, coord3d *out) { out->y = in->y * (1.0f / divisor) * g_CurrentPlayer->c_recipscaley; out->x = in->x * (1.0f / divisor) * g_CurrentPlayer->c_recipscalex; } -void sub_GAME_7F078140(coord3d *in, coord3d *out, f32 value1, f32 angle, f32 value2) { +void transform3DCoordinatesWithAngle(coord3d *in, coord3d *out, f32 value1, f32 angle, f32 value2) { f32 var1; f32 x; f32 y; @@ -882,10 +913,10 @@ void sub_GAME_7F078140(coord3d *in, coord3d *out, f32 value1, f32 angle, f32 val /** * Unreferenced. - * + * * Address 0x7F078258. */ -void sub_GAME_7F078258(coord3d *in, coord3d *out, f32 angle, f32 value) +void transform3DCoordinatesWithAngleAndValue(coord3d *in, coord3d *out, f32 angle, f32 value) { f32 var1 = (cosf(mDegToHalfRad(angle)) * g_CurrentPlayer->c_halfheight) / (sinf(mDegToHalfRad(angle)) * in->f[2]); f32 var2 = (var1 * g_CurrentPlayer->c_halfwidth) / (value * g_CurrentPlayer->c_halfheight); @@ -1142,40 +1173,42 @@ void sub_GAME_7F078A10(coord3d *arg0, f32 *arg1) { } /** - * Takes dot product of some vectors and compares each to an associated scalar value. + * Check if the 3D coordinate is within the screen + * + * Takes dot product of some position and compares each to an associated scalar value. * Returns 0 if the dot product exceeds the scalar amount, 1 otherwise. - * - * @param vec_scale: Applies dot product of this vector against g_CurrentPlayer->field_10D4 + * + * @param pos: Applies dot product of this position against g_CurrentPlayer->field_10D4 * and four coords starting at flt_CODE_bss_80079960. - * - * @param norm_scale: Value added to flt_CODE_bss_80079980 to compare g_CurrentPlayer->field_10D4, + * + * @param margin: Value added to flt_CODE_bss_80079980 to compare g_CurrentPlayer->field_10D4, * and the four values starting at flt_CODE_bss_8007996C. - * + * * Address 0x7F078A58. */ -s32 sub_GAME_7F078A58(coord3d *vec_scale, f32 norm_scale) +s32 camIsPosInScreen(coord3d *pos, f32 margin) { - if (flt_CODE_bss_80079980 + norm_scale < (g_CurrentPlayer->field_10D4->m[2][0] * vec_scale->f[0]) + (g_CurrentPlayer->field_10D4->m[2][1] * vec_scale->f[1]) + (g_CurrentPlayer->field_10D4->m[2][2] * vec_scale->f[2])) + if (flt_CODE_bss_80079980 + margin < (g_CurrentPlayer->field_10D4->m[2][0] * pos->f[0]) + (g_CurrentPlayer->field_10D4->m[2][1] * pos->f[1]) + (g_CurrentPlayer->field_10D4->m[2][2] * pos->f[2])) { return 0; } - if (flt_CODE_bss_8007996C + norm_scale < (flt_CODE_bss_80079960.f[0] * vec_scale->f[0]) + (flt_CODE_bss_80079960.f[1] * vec_scale->f[1]) + (flt_CODE_bss_80079960.f[2] * vec_scale->f[2])) + if (flt_CODE_bss_8007996C + margin < (flt_CODE_bss_80079960.f[0] * pos->f[0]) + (flt_CODE_bss_80079960.f[1] * pos->f[1]) + (flt_CODE_bss_80079960.f[2] * pos->f[2])) { return 0; } - if (flt_CODE_bss_8007997C + norm_scale < (flt_CODE_bss_80079970.f[0] * vec_scale->f[0]) + (flt_CODE_bss_80079970.f[1] * vec_scale->f[1]) + (flt_CODE_bss_80079970.f[2] * vec_scale->f[2])) + if (flt_CODE_bss_8007997C + margin < (flt_CODE_bss_80079970.f[0] * pos->f[0]) + (flt_CODE_bss_80079970.f[1] * pos->f[1]) + (flt_CODE_bss_80079970.f[2] * pos->f[2])) { return 0; } - if (flt_CODE_bss_8007994C + norm_scale < (flt_CODE_bss_80079940.f[0] * vec_scale->f[0]) + (flt_CODE_bss_80079940.f[1] * vec_scale->f[1]) + (flt_CODE_bss_80079940.f[2] * vec_scale->f[2])) + if (flt_CODE_bss_8007994C + margin < (flt_CODE_bss_80079940.f[0] * pos->f[0]) + (flt_CODE_bss_80079940.f[1] * pos->f[1]) + (flt_CODE_bss_80079940.f[2] * pos->f[2])) { return 0; } - if (flt_CODE_bss_8007995C + norm_scale < (flt_CODE_bss_80079950.f[0] * vec_scale->f[0]) + (flt_CODE_bss_80079950.f[1] * vec_scale->f[1]) + (flt_CODE_bss_80079950.f[2] * vec_scale->f[2])) + if (flt_CODE_bss_8007995C + margin < (flt_CODE_bss_80079950.f[0] * pos->f[0]) + (flt_CODE_bss_80079950.f[1] * pos->f[1]) + (flt_CODE_bss_80079950.f[2] * pos->f[2])) { return 0; } @@ -1184,7 +1217,7 @@ s32 sub_GAME_7F078A58(coord3d *vec_scale, f32 norm_scale) } -bool camIsPosInScreenBox(coord3d *pos, f32 arg1, bbox2d *arg2) +bool camIsPosInScreenBox(coord3d *pos, f32 margin, bbox2d *box) { coord3d sp74; f32 sp70; @@ -1205,12 +1238,12 @@ bool camIsPosInScreenBox(coord3d *pos, f32 arg1, bbox2d *arg2) f32 sp1c; f32 sp18; - if (flt_CODE_bss_80079980 + arg1 < g_CurrentPlayer->field_10D4->m[2][0] * pos->f[0] + g_CurrentPlayer->field_10D4->m[2][1] * pos->f[1] + g_CurrentPlayer->field_10D4->m[2][2] * pos->f[2]) + if (flt_CODE_bss_80079980 + margin < g_CurrentPlayer->field_10D4->m[2][0] * pos->f[0] + g_CurrentPlayer->field_10D4->m[2][1] * pos->f[1] + g_CurrentPlayer->field_10D4->m[2][2] * pos->f[2]) { return FALSE; } - sp38 = (arg2->min.x - g_CurrentPlayer->c_screenleft - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; + sp38 = (box->min.x - g_CurrentPlayer->c_screenleft - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; sp3c = 1.0f / sqrtf(sp38 * sp38 + 1.0f); sp38 *= sp3c; @@ -1222,12 +1255,12 @@ bool camIsPosInScreenBox(coord3d *pos, f32 arg1, bbox2d *arg2) sp50 = sp54.f[0] * g_CurrentPlayer->field_10D4->m[3][0] + sp54.f[1] * g_CurrentPlayer->field_10D4->m[3][1] + sp54.f[2] * g_CurrentPlayer->field_10D4->m[3][2]; - if (sp50 + arg1 < sp54.f[0] * pos->f[0] + sp54.f[1] * pos->f[1] + sp54.f[2] * pos->f[2]) + if (sp50 + margin < sp54.f[0] * pos->f[0] + sp54.f[1] * pos->f[1] + sp54.f[2] * pos->f[2]) { return FALSE; } - sp38 = -(arg2->max.x - g_CurrentPlayer->c_screenleft - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; + sp38 = -(box->max.x - g_CurrentPlayer->c_screenleft - g_CurrentPlayer->c_halfwidth) * g_CurrentPlayer->c_scalex; sp30 = 1.0f / sqrtf(sp38 * sp38 + 1.0f); sp38 *= sp30; sp20 = -sp30; @@ -1238,12 +1271,12 @@ bool camIsPosInScreenBox(coord3d *pos, f32 arg1, bbox2d *arg2) sp40 = sp44.f[0] * g_CurrentPlayer->field_10D4->m[3][0] + sp44.f[1] * g_CurrentPlayer->field_10D4->m[3][1] + sp44.f[2] * g_CurrentPlayer->field_10D4->m[3][2]; - if (sp40 + arg1 < sp44.f[0] * pos->f[0] + sp44.f[1] * pos->f[1] + sp44.f[2] * pos->f[2]) + if (sp40 + margin < sp44.f[0] * pos->f[0] + sp44.f[1] * pos->f[1] + sp44.f[2] * pos->f[2]) { return FALSE; } - sp34 = (g_CurrentPlayer->c_halfheight - (arg2->min.y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; + sp34 = (g_CurrentPlayer->c_halfheight - (box->min.y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; sp2c = 1.0f / sqrtf(sp34 * sp34 + 1.0f); sp34 *= sp2c; sp1c = -sp2c; @@ -1254,12 +1287,12 @@ bool camIsPosInScreenBox(coord3d *pos, f32 arg1, bbox2d *arg2) sp70 = sp74.f[0] * g_CurrentPlayer->field_10D4->m[3][0] + sp74.f[1] * g_CurrentPlayer->field_10D4->m[3][1] + sp74.f[2] * g_CurrentPlayer->field_10D4->m[3][2]; - if (sp70 + arg1 < sp74.f[0] * pos->f[0] + sp74.f[1] * pos->f[1] + sp74.f[2] * pos->f[2]) + if (sp70 + margin < sp74.f[0] * pos->f[0] + sp74.f[1] * pos->f[1] + sp74.f[2] * pos->f[2]) { return FALSE; } - sp34 = -(g_CurrentPlayer->c_halfheight - (arg2->max.y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; + sp34 = -(g_CurrentPlayer->c_halfheight - (box->max.y - g_CurrentPlayer->c_screentop)) * g_CurrentPlayer->c_scaley; sp28 = 1.0f / sqrtf(sp34 * sp34 + 1.0f); sp34 *= sp28; sp18 = -sp28; @@ -1270,7 +1303,7 @@ bool camIsPosInScreenBox(coord3d *pos, f32 arg1, bbox2d *arg2) sp60 = sp64.f[0] * g_CurrentPlayer->field_10D4->m[3][0] + sp64.f[1] * g_CurrentPlayer->field_10D4->m[3][1] + sp64.f[2] * g_CurrentPlayer->field_10D4->m[3][2]; - if (sp60 + arg1 < sp64.f[0] * pos->f[0] + sp64.f[1] * pos->f[1] + sp64.f[2] * pos->f[2]) + if (sp60 + margin < sp64.f[0] * pos->f[0] + sp64.f[1] * pos->f[1] + sp64.f[2] * pos->f[2]) { return FALSE; } @@ -1278,7 +1311,7 @@ bool camIsPosInScreenBox(coord3d *pos, f32 arg1, bbox2d *arg2) return TRUE; } - +//split here makes sense to have the pd split make sense s32 bondviewGetRandomSpawnPadIndex(void) { PadRecord *pad; @@ -1425,10 +1458,10 @@ void init_player_BONDdata(void) g_CurrentPlayer->damageshowtime = -1; g_CurrentPlayer->healthshowtime = -1; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x0; - g_CurrentPlayer->outside_watch_menu = 1; - g_CurrentPlayer->open_close_solo_watch_menu = 0; + g_CurrentPlayer->outside_watch_menu = TRUE; + g_CurrentPlayer->open_close_solo_watch_menu = FALSE; g_CurrentPlayer->field_1A0 = 0; g_CurrentPlayer->bondbreathing = 0.0f; g_CurrentPlayer->speedtheta = 0.0f; @@ -1446,7 +1479,7 @@ void init_player_BONDdata(void) g_CurrentPlayer->speedsideways = 0.0f; g_CurrentPlayer->speedstrafe = 0.0f; g_CurrentPlayer->speedforwards = 0.0f; - g_CurrentPlayer->field_2A4C = 0.0f; + g_CurrentPlayer->speedgo = 0.0f; g_CurrentPlayer->speedboost = 1.0f; g_CurrentPlayer->speedmaxtime60 = 0; g_CurrentPlayer->bondshotspeed.x = 0.0f; @@ -1455,17 +1488,17 @@ void init_player_BONDdata(void) g_CurrentPlayer->field_104 = 0; g_CurrentPlayer->field_108 = 0; g_CurrentPlayer->field_10C = 0; - g_CurrentPlayer->movecentrerelease = 0; - g_CurrentPlayer->lookaheadcentreenabled = 1; - g_CurrentPlayer->automovecentreenabled = 1; - g_CurrentPlayer->fastmovecentreenabled = 0; - g_CurrentPlayer->automovecentre = 1; - g_CurrentPlayer->insightaimmode = 0; - g_CurrentPlayer->autoyaimenabled = 1; + g_CurrentPlayer->movecentrerelease = FALSE; + g_CurrentPlayer->lookaheadcentreenabled = TRUE; + g_CurrentPlayer->automovecentreenabled = TRUE; + g_CurrentPlayer->fastmovecentreenabled = FALSE; + g_CurrentPlayer->automovecentre = TRUE; + g_CurrentPlayer->insightaimmode = FALSE; + g_CurrentPlayer->autoyaimenabled = TRUE; g_CurrentPlayer->autoaimy = 0.0f; g_CurrentPlayer->autoaim_target_y = NULL; g_CurrentPlayer->autoyaimtime60 = -1; - g_CurrentPlayer->autoxaimenabled = 1; + g_CurrentPlayer->autoxaimenabled = TRUE; g_CurrentPlayer->autoaimx = 0.0f; g_CurrentPlayer->autoaim_target_x = NULL; g_CurrentPlayer->autoxaimtime60 = -1; @@ -1488,7 +1521,7 @@ void init_player_BONDdata(void) g_CurrentPlayer->bondfadefracold = 0.0f; g_CurrentPlayer->bondfadefracnew = 0.0f; g_CurrentPlayer->field_42c = 2; - g_CurrentPlayer->controldef = 0; + g_CurrentPlayer->controldef = CONTROLLER_CONFIG_HONEY; g_CurrentPlayer->pause_starting_angle = 0.0f; g_CurrentPlayer->pause_related = 0.0f; g_CurrentPlayer->pause_target_angle = 0.0f; @@ -1497,7 +1530,7 @@ void init_player_BONDdata(void) g_CurrentPlayer->field_218 = 0; g_CurrentPlayer->step_in_view_watch_animation = 0; g_CurrentPlayer->pause_animation_counter = 0.0f; - g_CurrentPlayer->pausing_flag = 0; + g_CurrentPlayer->pausing_flag = FALSE; g_CurrentPlayer->buttons_pressed = (u16)0; g_CurrentPlayer->prev_buttons_pressed = (u16)0; g_CurrentPlayer->field_29C0 = 15.0f; @@ -1522,8 +1555,8 @@ void bondviewPlayerSpawnRelated(void) if (getPlayerCount() >= 2) { - currentPlayerEquipWeaponWrapper(GUNLEFT, starting_left_weapon); - currentPlayerEquipWeaponWrapper(GUNRIGHT, starting_right_weapon); + currentPlayerEquipWeaponWrapper(GUNLEFT, starting_weapon[GUNLEFT]); + currentPlayerEquipWeaponWrapper(GUNRIGHT, starting_weapon[GUNRIGHT]); if (g_CurrentPlayer->ptr_char_objectinstance == NULL) { @@ -1565,7 +1598,7 @@ void currentPlayerSetField00(s32 value) { * Compares current player position to parameters. If different, sets current * player position values to parameter values. * Also updates related room pointer. - * + * * Address 0x7F079A60. */ void bondviewSetCurrentPlayerPosition(coord3d *pos, coord3d *pos2, coord3d *offset, StandTile *tile, coord3d *stan_walk_start) @@ -1656,7 +1689,7 @@ void solo_char_load(void) ModelFileHeader *p_leftHeader; ModelFileHeader *bodyBuffer; ModelFileHeader *headBuffer; - s32 totalsize; + s32 totalsize; //canonically sizer s32 bodyBufSize; s32 headBufSize; WeaponObjRecord *p_rightHeader; @@ -1700,7 +1733,7 @@ void solo_char_load(void) sub_GAME_7F07DE64(g_CurrentPlayer); if (getPlayerCount() == 1) { - folderBond = getSelectedFolderBond(); + folderBond = fileGetBondForCurrentFolder(); cuffId = g_CurrentPlayer->bondtype; switch (cuffId) /* switch 1 */ { @@ -1721,20 +1754,20 @@ void solo_char_load(void) case CUFF_FOLDER: /* switch 1 */ switch (folderBond) /* switch 3; irregular */ { - case 0: /* switch 3 */ + case BOND_BROSNAN: /* switch 3 */ body = BODY_Brosnan_Tuxedo; break; - case 1: /* switch 3 */ + case BOND_CONNERY: /* switch 3 */ body = BODY_Brosnan_Tuxedo; break; - case 2: /* switch 3 */ + case BOND_DALTON: /* switch 3 */ body = BODY_Brosnan_Tuxedo; break; - case 3: + case BOND_MOORE: body = BODY_Brosnan_Tuxedo; break; } break; } switch (folderBond) /* switch 4; irregular */ { - case 0: /* switch 4 */ + case BOND_BROSNAN: /* switch 4 */ switch (cuffId) /* switch 2 */ { case CUFF_BOILER: /* switch 2 */ @@ -1753,11 +1786,11 @@ void solo_char_load(void) head = HEAD_Male_Brosnan_Tuxedo; break; } break; - case 1: /* switch 4 */ + case BOND_CONNERY: /* switch 4 */ head = HEAD_Male_Brosnan_Tuxedo; break; - case 2: /* switch 4 */ + case BOND_DALTON: /* switch 4 */ head = HEAD_Male_Brosnan_Tuxedo; break; - case 3: /* switch 4 */ + case BOND_MOORE: /* switch 4 */ head = HEAD_Male_Brosnan_Tuxedo; break; } } @@ -1772,6 +1805,11 @@ void solo_char_load(void) } if (getPlayerCount() == 1) { +#ifdef DEBUG + assert(currentplayer->gunmemused[GUNRIGHT]==0 || currentplayer->gunmemtype[GUNRIGHT]==0); + assert(currentplayer->gunmemused[GUNLEFT]==0 || currentplayer->gunmemtype[GUNLEFT]==0); //j +#endif + remove_item_in_hand(GUNLEFT); remove_item_in_hand(GUNRIGHT); texInitPool(&texPool, headBuffer, headBufSize); @@ -1781,7 +1819,7 @@ void solo_char_load(void) p_bodyEntryHeader = p_bodyEntry->header; pBody = p_bodyHeader; - + p_bodyHeader->RootNode = p_bodyEntryHeader->RootNode; p_bodyHeader->Skeleton = p_bodyEntryHeader->Skeleton; p_bodyHeader->Switches = p_bodyEntryHeader->Switches; @@ -1790,7 +1828,7 @@ void solo_char_load(void) p_bodyHeader->unk14 = p_bodyEntryHeader->unk14; p_bodyHeader->Textures = p_bodyEntryHeader->Textures; p_bodyHeader->isLoaded = p_bodyEntryHeader->isLoaded; - + p_modelEntry = p_bodyEntry; load_object_fill_header(p_bodyHeader, p_bodyEntry->filename, bodyBuffer, bodyBufSize, &texPool); @@ -1798,6 +1836,9 @@ void solo_char_load(void) p_headEntryHeader = p_headEntry->header; bufferSizeRemain = ALIGN64_V3(get_pc_buffer_remaining_value(p_modelEntry->filename) + 0x3F); +#ifdef DEBUG + assert(sizer<=bondmemsizer); +#endif p_headHeader = bodyBuffer + bufferSizeRemain; bodyalignedSizeRemainPlus0x5F = ALIGN64_V3(bufferSizeRemain + 0x5F); @@ -1809,7 +1850,7 @@ void solo_char_load(void) p_headHeader->unk14 = p_headEntryHeader->unk14; p_headHeader->Textures = p_headEntryHeader->Textures; p_headHeader->isLoaded = p_headEntryHeader->isLoaded; - + totalsize = bodyalignedSizeRemainPlus0x5F; pHead = p_headHeader; p_modelEntry = p_headEntry; @@ -1822,9 +1863,12 @@ void solo_char_load(void) modelCalculateRwDataLen(pBody); modelCalculateRwDataLen(pHead); numRecords = pBody->numRecords + pHead->numRecords + 0xA; - + totalsize = ALIGN64_V3((numRecords * 4) + totalsize + 0x3F); - + #ifdef DEBUG + assert(sizer<=bondmemsizer); + #endif + animInit(model, pBody, bodyBuffer + totalsize); model->Type = numRecords; //??? //goto block_46; @@ -1845,7 +1889,10 @@ void solo_char_load(void) // &c_item_entries[head]->header = pHead; } g_CurrentPlayer->ptr_char_objectinstance = makeonebody(body, head, pBody, &c_item_entries[head]->header/*pHead maybe?*/, 0, model); - + #ifdef DEBUG + assert(currentplayer->bondsub); + #endif + modelSetScale((Model *) g_CurrentPlayer->ptr_char_objectinstance, g_CurrentPlayer->ptr_char_objectinstance->unk14 * 0.97f); init_GUARDdata_with_set_values(g_CurrentPlayer->prop, g_CurrentPlayer->ptr_char_objectinstance, &g_CurrentPlayer->prop->pos, hRot, g_CurrentPlayer->prop->stan, 0); g_CurrentPlayer->prop->type = VIEWER; @@ -1859,6 +1906,9 @@ void solo_char_load(void) { p_rightHeader = bodyBuffer + totalsize; totalsize = ALIGN64_V3(totalsize + 0xC7); + #ifdef DEBUG + assert(sizer<=bondmemsizer); + #endif p_lhandItemHeader = get_ptr_itemheader_in_hand(GUNLEFT); p_rhandItemHeader = &PitemZ_entries[rhandPropID]->header; p_leftHeader = p_lhandItemHeader; @@ -1887,7 +1937,7 @@ void solo_char_load(void) } if (curChr->model->anim == NULL) { - curChr->chrflags |= 1; + curChr->chrflags |= CHRFLAG_INIT; chrlvIdleAnimationRelated7F023A94(curChr, 0.0f); setsuboffset(g_CurrentPlayer->ptr_char_objectinstance, &g_CurrentPlayer->prop->pos); setsubroty(g_CurrentPlayer->ptr_char_objectinstance, hRot); @@ -1938,6 +1988,7 @@ glabel jpt_bondcuff .word cuff_6_moore .word cuff_7_dalton .word cuff_8_variable_bond_head +.size jpt_bondcuff, . - jpt_bondcuff /*D:80055008*/ glabel jpt_bondhead @@ -2011,7 +2062,7 @@ glabel solo_char_load /* 0AE8F0 7F079DC0 24010001 */ li $at, 1 /* 0AE8F4 7F079DC4 14410066 */ bne $v0, $at, .L7F079F60 /* 0AE8F8 7F079DC8 00000000 */ nop -/* 0AE8FC 7F079DCC 0FC0755B */ jal getSelectedFolderBond +/* 0AE8FC 7F079DCC 0FC0755B */ jal fileGetBondForCurrentFolder /* 0AE900 7F079DD0 00000000 */ nop /* 0AE904 7F079DD4 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) /* 0AE908 7F079DD8 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) @@ -2151,8 +2202,8 @@ variable_body_head: /* 0AEAB8 7F079F88 8DEF6494 */ lw $t7, %lo(g_CameraMode)($t7) /* 0AEABC 7F079F8C 24010003 */ li $at, 3 /* 0AEAC0 7F079F90 15E10003 */ bne $t7, $at, .L7F079FA0 -/* 0AEAC4 7F079F94 3C0B8008 */ lui $t3, %hi(starting_right_weapon) -/* 0AEAC8 7F079F98 8D6B99E0 */ lw $t3, %lo(starting_right_weapon)($t3) +/* 0AEAC4 7F079F94 3C0B8008 */ lui $t3, %hi(starting_weapon) +/* 0AEAC8 7F079F98 8D6B99E0 */ lw $t3, %lo(starting_weapon)($t3) /* 0AEACC 7F079F9C AFAB0048 */ sw $t3, 0x48($sp) .L7F079FA0: /* 0AEAD0 7F079FA0 0FC26919 */ jal getPlayerCount @@ -2530,6 +2581,7 @@ glabel jpt_bondcuff .word cuff_6_moore .word cuff_7_dalton .word cuff_8_variable_bond_head +.size jpt_bondcuff, . - jpt_bondcuff /*D:80055008*/ glabel jpt_bondhead @@ -2603,7 +2655,7 @@ glabel solo_char_load /* 0AEF20 7F07A3B0 24010001 */ li $at, 1 /* 0AEF24 7F07A3B4 14410066 */ bne $v0, $at, .Ljp7F07A550 /* 0AEF28 7F07A3B8 00000000 */ nop -/* 0AEF2C 7F07A3BC 0FC075C4 */ jal getSelectedFolderBond +/* 0AEF2C 7F07A3BC 0FC075C4 */ jal fileGetBondForCurrentFolder /* 0AEF30 7F07A3C0 00000000 */ nop /* 0AEF34 7F07A3C4 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8008 /* 0AEF38 7F07A3C8 8DEFA120 */ lw $t7, %lo(g_CurrentPlayer)($t7) @@ -2743,8 +2795,8 @@ variable_body_head: /* 0AF0E8 7F07A578 8DEF64D4 */ lw $t7, %lo(g_CameraMode)($t7) /* 0AF0EC 7F07A57C 24010003 */ li $at, 3 /* 0AF0F0 7F07A580 15E10003 */ bne $t7, $at, .Ljp7F07A590 -/* 0AF0F4 7F07A584 3C0B8008 */ lui $t3, %hi(starting_right_weapon) # $t3, 0x8008 -/* 0AF0F8 7F07A588 8D6B9A20 */ lw $t3, %lo(starting_right_weapon)($t3) +/* 0AF0F4 7F07A584 3C0B8008 */ lui $t3, %hi(starting_weapon) # $t3, 0x8008 +/* 0AF0F8 7F07A588 8D6B9A20 */ lw $t3, %lo(starting_weapon)($t3) /* 0AF0FC 7F07A58C AFAB0048 */ sw $t3, 0x48($sp) .Ljp7F07A590: /* 0AF100 7F07A590 0FC26C01 */ jal getPlayerCount @@ -3135,6 +3187,7 @@ glabel jpt_bondcuff .word cuff_6_moore .word cuff_7_dalton .word cuff_8_variable_bond_head +.size jpt_bondcuff, . - jpt_bondcuff /*D:80055008*/ glabel jpt_bondhead @@ -3208,7 +3261,7 @@ glabel solo_char_load /* 0AC830 7F079E40 24010001 */ li $at, 1 /* 0AC834 7F079E44 14410066 */ bne $v0, $at, .L7F079FE0 /* 0AC838 7F079E48 00000000 */ nop -/* 0AC83C 7F079E4C 0FC074F0 */ jal getSelectedFolderBond +/* 0AC83C 7F079E4C 0FC074F0 */ jal fileGetBondForCurrentFolder /* 0AC840 7F079E50 00000000 */ nop /* 0AC844 7F079E54 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 /* 0AC848 7F079E58 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) @@ -3350,8 +3403,8 @@ variable_body_head: /* 0AC9F8 7F07A008 8DEF19E4 */ lw $t7, %lo(g_CameraMode)($t7) /* 0AC9FC 7F07A00C 24010003 */ li $at, 3 /* 0ACA00 7F07A010 15E10003 */ bne $t7, $at, .L7F07A020 -/* 0ACA04 7F07A014 3C0B8007 */ lui $t3, %hi(starting_right_weapon) # $t3, 0x8007 -/* 0ACA08 7F07A018 8D6B84C0 */ lw $t3, %lo(starting_right_weapon)($t3) +/* 0ACA04 7F07A014 3C0B8007 */ lui $t3, %hi(starting_weapon) # $t3, 0x8007 +/* 0ACA08 7F07A018 8D6B84C0 */ lw $t3, %lo(starting_weapon)($t3) /* 0ACA0C 7F07A01C AFAB0048 */ sw $t3, 0x48($sp) .L7F07A020: /* 0ACA10 7F07A020 0FC26669 */ jal getPlayerCount @@ -3714,7 +3767,7 @@ void maybe_solo_intro_camera_handler(void) -u32 get_camera_mode(void) { +u32 bondviewGetCameraMode(void) { // Node 0 return g_CameraMode; } @@ -3725,7 +3778,7 @@ u32 get_camera_mode(void) { #ifdef NONMATCHING -void sub_GAME_7F07A534(void) { +void pickDeathCameraAngles(void) { } #else @@ -3742,7 +3795,7 @@ glabel D_8005503C glabel D_80055040 .word 0x40c90fdb /*6.2831855*/ .text -glabel sub_GAME_7F07A534 +glabel pickDeathCameraAngles /* 0AF064 7F07A534 27BDFF20 */ addiu $sp, $sp, -0xe0 /* 0AF068 7F07A538 3C018008 */ lui $at, %hi(dword_CODE_bss_800799F4) /* 0AF06C 7F07A53C AC2499F4 */ sw $a0, %lo(dword_CODE_bss_800799F4)($at) @@ -4052,811 +4105,252 @@ glabel sub_GAME_7F07A534 - -#ifdef NONMATCHING -void set_camera_mode(s32 arg0) +// Address 0x7F07A9B8 NTSC. +void bondviewSetCameraMode(s32 arg0) { - f32 sp78; - void *sp64; - f32 sp60; - f32 sp5C; - f32 sp58; - f32 sp50; - f32 sp4C; - f32 sp48; - void *sp38; - f32 temp_f12; - s32 temp_s0; - s32 temp_v0; - s32 temp_v0_4; - void *temp_a0; - void *temp_a0_2; - void *temp_t8; - void *temp_t9; - void *temp_t9_2; - void *temp_v0_10; - void *temp_v0_11; - void *temp_v0_12; - void *temp_v0_2; - void *temp_v0_3; - void *temp_v0_5; - void *temp_v0_6; - void *temp_v0_7; - void *temp_v0_8; - void *temp_v0_9; - void *temp_v1; - void *phi_t8; - void *phi_t9; - s32 phi_v0; - void *phi_a2; - s32 phi_v1; - f32 phi_f0; - s32 phi_s0; + s32 padding; + s32 padding2; - g_CameraMode = arg0; + g_CameraMode = arg0; g_CameraAfterCinema = 0; - temp_v0 = g_CameraMode; - if (temp_v0 == 1) + + if (g_CameraMode == CAMERAMODE_INTRO) { - if ((ptr_random06cam_entry != 0) && (get_recording_ramrom_flag() == 0) && (get_is_ramrom_flag() == 0)) + if ((ptr_random06cam_entry != NULL) && (get_recording_ramrom_flag() == 0) && (get_is_ramrom_flag() == 0)) { - D_800364A4 = 0.0f; - currentPlayerSetFadeColour(0, 0, 0, 0x3F800000); - currentPlayerSetFadeFrac(0x42700000, 0); - load_enviroment(bossGetStageNum(), 1); - pPlayer->unk34 = 0; - return; + camera_transition_timer = 0.0f; + currentPlayerSetFadeColour(0, 0, 0, 1.0f); + currentPlayerSetFadeFrac(60.0f, 0.0f); + fogLoadLevelEnvironment(bossGetStageNum(), 1); + g_CurrentPlayer->room_pointer = NULL; + } + else + { + bondviewSetCameraMode(CAMERAMODE_SWIRL); } - set_camera_mode(3); - return; } - if (temp_v0 == 2) + else if (g_CameraMode == CAMERAMODE_FADESWIRL) { - currentPlayerSetFadeColour(0, 0, 0, 0); - currentPlayerSetFadeFrac(0x42700000, 0x3F800000); - return; + currentPlayerSetFadeColour(0, 0, 0, 0.0f); + currentPlayerSetFadeFrac(60.0f, 1.0f); } - if (temp_v0 == 9) + else if (g_CameraMode == CAMERAMODE_MP) { g_MpSwirlRotateSpeed = 0.0f; g_MpSwirlAngleDegrees = -90.0f; g_MpSwirlForwardSpeed = 0.0f; g_MpSwirlDistance = 80.0f; - load_enviroment(bossGetStageNum(0), 0); - return; + fogLoadLevelEnvironment(bossGetStageNum(), 0); } - if (temp_v0 == 3) + else if (g_CameraMode == CAMERAMODE_SWIRL) { - D_8003649C = 0; - currentPlayerSetFadeColour(0, 0, 0, 0x3F800000); - currentPlayerSetFadeFrac(0x42700000, 0); - load_enviroment(bossGetStageNum(), 0); + struct ModelAnimation *sp38; + f32 sp78; + f32 ftemp_3; + f32 ftemp_1; + struct ChrRecord *temp_v1; + + camera_fade_active = 0; + currentPlayerSetFadeColour(0, 0, 0, 1.0f); + currentPlayerSetFadeFrac(60.0f, 0.0f); + fogLoadLevelEnvironment(bossGetStageNum(), 0); + if ((g_IntroSwirl != 0) && (get_recording_ramrom_flag() == 0) && (get_is_ramrom_flag() == 0)) { - D_800364A4 = 0.0f; - D_800364A8 = 1; - currentPlayerStartChrFade(0.0f, 0x3F800000); + camera_transition_timer = 0.0f; + intro_camera_index = CAMERAMODE_INTRO; + currentPlayerStartChrFade(0.0f, 1.0f); solo_char_load(); - temp_v0_2 = (g_IntroAnimationIndex * 0x10) + &stage_intro_anim_table; - temp_f12 = temp_v0_2->unk8; - sp78 = temp_f12; - modelSetAnimation(pPlayer->unkD4, temp_v0_2->unk0 + ptr_animation_table, 0, temp_v0_2->unk4, temp_v0_2->unkC, 0.0f); - if (temp_f12 > 0.0f) + + // HACK: ptr_animation_table->data regalloc is backwards + sp38 = (struct ModelAnimation *)((s32)stage_intro_anim_table[g_IntroAnimationIndex].anonymous_0 + (s32)&ptr_animation_table->data); + sp78 = stage_intro_anim_table[g_IntroAnimationIndex].anonymous_2; + ftemp_1 = stage_intro_anim_table[g_IntroAnimationIndex].anonymous_1; + ftemp_3 = stage_intro_anim_table[g_IntroAnimationIndex].anonymous_3; + + modelSetAnimation( + g_CurrentPlayer->ptr_char_objectinstance, + sp38, + 0, + ftemp_1, + ftemp_3, + 0.0f); + + if (sp78 > 0.0f) { - modelSetAnimEndFrame(pPlayer->unkD4, temp_f12); + modelSetAnimEndFrame(g_CurrentPlayer->ptr_char_objectinstance, sp78); } - temp_v0_3 = pPlayer->unkA8->unk4; - temp_v0_3->unk7 = 0x17; - temp_v0_3->unk8 = 0; - pPlayer->unk34 = 0; - return; - } - set_camera_mode(4); - return; - } - if (temp_v0 == 4) - { - if (bossGetStageNum(0) == 0x36) - { - currentPlayerSetFadeColour(0, 0, 0, 0x3F800000); - currentPlayerSetFadeFrac(0, 0x3F800000); - } - else if (D_8003649C != 0) - { - currentPlayerSetFadeColour(0, 0, 0, 0x3F800000); - currentPlayerSetFadeFrac(0x42700000, 0); - } - if (getPlayerCount() >= 2) - { - load_enviroment(bossGetStageNum(), 0); - } - if (pPlayer->unk1C8 == 0) - { - currentPlayerEquipWeaponWrapper(1, starting_right_weapon.unk4); - currentPlayerEquipWeaponWrapper(0, starting_right_weapon.unk0); - } - stop_time_flag = 0; - return; - } - if (temp_v0 == 5) - { - D_800364A4 = 0.0f; - D_800364A8 = 1; - currentPlayerSetFadeColour(0, 0, 0, 0x3F800000); - currentPlayerSetFadeFrac(0x42700000, 0); - temp_v0_4 = g_ExplodeTankOnDeathFlag; - phi_v0 = temp_v0_4; - if ((temp_v0_4 != 0) && (g_PlayerTankProp != 0)) - { + + temp_v1 = g_CurrentPlayer->prop->chr; + temp_v1->actiontype = ACT_BONDINTRO; + temp_v1->sleep = 0; + g_CurrentPlayer->room_pointer = NULL; } else { + bondviewSetCameraMode(CAMERAMODE_FP); + } + } + else if (g_CameraMode == CAMERAMODE_FP) + { + if (bossGetStageNum() == LEVELID_CUBA) + { + currentPlayerSetFadeColour(0, 0, 0, 1.0f); + currentPlayerSetFadeFrac(0.0f, 1.0f); + } + else if (camera_fade_active != 0) + { + currentPlayerSetFadeColour(0, 0, 0, 1.0f); + currentPlayerSetFadeFrac(60.0f, 0.0f); + } + + if (getPlayerCount() >= 2) + { + fogLoadLevelEnvironment(bossGetStageNum(), 0); + } + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0) + { + currentPlayerEquipWeaponWrapper(GUNLEFT, starting_weapon[GUNLEFT]); + currentPlayerEquipWeaponWrapper(GUNRIGHT, starting_weapon[GUNRIGHT]); + } + + stop_time_flag = 0; + } + else if (g_CameraMode == CAMERAMODE_DEATH_CAM_SP) + { + f32 var_f0; + PropRecord *sp64; + struct coord3d sp58; + StandTile *var_v1; + struct coord3d sp48; + PropRecord *var_a2; + struct ChrRecord *temp_v1_2; + + camera_transition_timer = 0.0f; + intro_camera_index = CAMERAMODE_INTRO; + currentPlayerSetFadeColour(0, 0, 0, 1.0f); + currentPlayerSetFadeFrac(60.0f, 0.0f); + + if (g_ExplodeTankOnDeathFlag && (g_PlayerTankProp != NULL)) + { + // removed + } + else + { + // This branch restarts Bond's death animation for his death replay in_tank_flag = 0; - temp_t9 = pPlayer; - phi_t8 = temp_t9; - phi_t9 = temp_t9; - do - { - temp_t8 = phi_t8 + 0xC; - temp_t9_2 = phi_t9 + 0xC; - temp_t9_2->unk47C = phi_t8->unk434; - temp_t9_2->unk480 = temp_t8->unk42C; - temp_t9_2->unk484 = temp_t8->unk430; - phi_t8 = temp_t8; - phi_t9 = temp_t9_2; - } while (temp_t8 != (temp_t9 + 0x54)); - temp_v0_5 = pPlayer; - temp_v0_5->unk148 = temp_v0_5->unk414; - temp_v0_6 = pPlayer; - temp_v0_6->unk158 = temp_v0_6->unk418; - temp_v0_7 = pPlayer; - temp_v0_7->unkA8->unk8 = temp_v0_7->unk48C; - temp_v0_8 = pPlayer; - temp_v0_8->unkA8->unkC = temp_v0_8->unk490; - temp_v0_9 = pPlayer; - temp_v0_9->unkA8->unk10 = temp_v0_9->unk494; - temp_v0_10 = pPlayer; - temp_v0_10->unkA8->unk14 = temp_v0_10->unk488; + + // struct copy + g_CurrentPlayer->field_488 = g_CurrentPlayer->previous_collision_info; + + g_CurrentPlayer->vv_theta = g_CurrentPlayer->thetadie; + g_CurrentPlayer->vv_verta = g_CurrentPlayer->vertadie; + g_CurrentPlayer->prop->pos.f[0] = g_CurrentPlayer->field_488.collision_position.f[0]; + g_CurrentPlayer->prop->pos.f[1] = g_CurrentPlayer->field_488.collision_position.f[1]; + g_CurrentPlayer->prop->pos.f[2] = g_CurrentPlayer->field_488.collision_position.f[2]; + g_CurrentPlayer->prop->stan = g_CurrentPlayer->field_488.current_tile_ptr; + bondviewApplyVertaTheta(); bondviewMoveAnimationTick(0, 0, 0); bondviewUpdatePlayerCollisionPositionFields(); - currentPlayerStartChrFade(0.0f, 0x3F800000); + currentPlayerStartChrFade(0.0f, 1.0f); solo_char_load(); - sp38 = sub_GAME_7F06F5AC(pPlayer + 0x598); - modelSetAnimation(pPlayer->unkD4, sp38, objecthandlerGetModelGunhand(pPlayer + 0x598), 0.0f, 0.5f, 0.0f); - temp_v1 = pPlayer->unkA8->unk4; - temp_v1->unk7 = 0x18; - temp_v1->unk8 = 0; - temp_v1->unk14 = temp_v1->unk14 | 1; - temp_v0_11 = pPlayer; - setsuboffset(temp_v0_11->unkD4, temp_v0_11->unkA8 + 8); - setsubroty(pPlayer->unkD4, get_curplay_horizontal_rotation_in_degrees()); - phi_v0 = g_ExplodeTankOnDeathFlag; + + modelSetAnimation( + g_CurrentPlayer->ptr_char_objectinstance, + objecthandlerGetModelAnim((Model *) &g_CurrentPlayer->model), + objecthandlerGetModelGunhand(&g_CurrentPlayer->model), + 0.0f, + 0.5f, + 0.0f); + + temp_v1_2 = g_CurrentPlayer->prop->chr; + temp_v1_2->actiontype = ACT_BONDDIE; + temp_v1_2->sleep = 0; + temp_v1_2->chrflags |= CHRFLAG_INIT; + + setsuboffset(g_CurrentPlayer->ptr_char_objectinstance, &g_CurrentPlayer->prop->pos); + var_f0 = get_curplay_horizontal_rotation_in_degrees(); + setsubroty(g_CurrentPlayer->ptr_char_objectinstance, var_f0); } - if ((phi_v0 != 0) && (temp_a0 = g_PlayerTankProp, (temp_a0 != 0))) + + if (g_ExplodeTankOnDeathFlag && (g_PlayerTankProp != NULL)) { - sp64 = temp_a0; - sp58 = temp_a0->unk8; - sp5C = temp_a0->unkC; - sp60 = temp_a0->unk10; - sp48 = temp_a0->unk8; - sp4C = temp_a0->unkC; - sp50 = temp_a0->unk10; - phi_a2 = temp_a0; - phi_v1 = temp_a0->unk14; - phi_f0 = 500.0f; + sp64 = g_PlayerTankProp; + var_f0 = 500.0f; // distance to place the camera + sp58.f[0] = g_PlayerTankProp->pos.f[0]; + sp58.f[1] = g_PlayerTankProp->pos.f[1]; + sp58.f[2] = g_PlayerTankProp->pos.f[2]; + var_a2 = g_PlayerTankProp; + sp48.f[0] = g_PlayerTankProp->pos.f[0]; + sp48.f[1] = g_PlayerTankProp->pos.f[1]; + sp48.f[2] = g_PlayerTankProp->pos.f[2]; + var_v1 = g_PlayerTankProp->stan; } else { - temp_v0_12 = pPlayer; - sp64 = temp_v0_12->unkA8; - sp58 = temp_v0_12->unk3C4; - sp5C = temp_v0_12->unk3C8; - sp60 = temp_v0_12->unk3CC; - sp48 = temp_v0_12->unk48C; - sp4C = temp_v0_12->unk490; - sp50 = temp_v0_12->unk494; - phi_a2 = temp_v0_12->unkA8; - phi_v1 = temp_v0_12->unk488; - phi_f0 = 200.0f; + var_f0 = 200.0f; // distance to place the camera + sp64 = g_CurrentPlayer->prop; + sp58.f[0] = g_CurrentPlayer->field_3C4; + sp58.f[1] = g_CurrentPlayer->field_3C8; + sp58.f[2] = g_CurrentPlayer->field_3CC; + var_a2 = g_CurrentPlayer->prop; + sp48.f[0] = g_CurrentPlayer->field_488.collision_position.f[0]; + sp48.f[1] = g_CurrentPlayer->field_488.collision_position.f[1]; + sp48.f[2] = g_CurrentPlayer->field_488.collision_position.f[2]; + var_v1 = g_CurrentPlayer->field_488.current_tile_ptr; } - if (sub_GAME_7F07A534(sp64, &sp58, phi_a2, &sp48, phi_v1, phi_f0) != 0) + + if (pickDeathCameraAngles(sp64, &sp58, var_a2, &sp48, var_v1, var_f0) != 0) { - if (D_80036510 == CAMERAMODE_NONE) + if (camera_mode == 0) { musicTrack1Play(M_INTROSWOOSH); - sndSetScalerApplyVolumeAllSfxSlot(0x3F000000); + sndSetScalerApplyVolumeAllSfxSlot(0.5f); } - if ((g_ExplodeTankOnDeathFlag != 0) && (g_PlayerTankProp != 0)) + + if ((g_ExplodeTankOnDeathFlag != 0) && (g_PlayerTankProp != NULL)) { - temp_a0_2 = g_PlayerTankProp; - explosionCreate(temp_a0_2, temp_a0_2 + 8, temp_a0_2->unk14, 0xD, 0, get_cur_playernum(), temp_a0_2 + 0x2C, 0); - return; + explosionCreate(g_PlayerTankProp, &g_PlayerTankProp->pos, g_PlayerTankProp->stan, 0xD, 0, get_cur_playernum(), g_PlayerTankProp->rooms, 0); } - // Duplicate return node #56. Try simplifying control flow for better match - return; } - bossRunTitleStage(); - return; - } - if (temp_v0 == 6) - { - currentPlayerSetFadeColour(0, 0, 0, 0); - currentPlayerSetFadeFrac(0x42700000, 0x3F800000); - return; - } - if (temp_v0 == 7) - { - solo_char_load(0); - pPlayer->unk34 = 0; - return; - } - if (temp_v0 == 8) - { - maybe_solo_intro_camera_handler(0); - g_CameraMode = CAMERAMODE_FP; - return; - } - if (temp_v0 == 0xA) - { - phi_s0 = 0; - if (getPlayerCount(0) > 0) + else { - do - { - set_cur_player(phi_s0); - currentPlayerSetFadeColour(0, 0, 0, 0); - currentPlayerSetFadeFrac(0x42700000, 0x3F800000); - temp_s0 = phi_s0 + 1; - phi_s0 = temp_s0; - } while (temp_s0 < getPlayerCount()); + // pickDeathCameraAngles has returned 0. This happens when no possible angles were found + // to place the camera at the requested distance or when the three death replays are finished. + bossRunTitleStage(); } + } + else if (g_CameraMode == CAMERAMODE_DEATH_CAM_MP) + { + currentPlayerSetFadeColour(0, 0, 0, 0.0f); + currentPlayerSetFadeFrac(60.0f, 1.0f); + } + else if (g_CameraMode == CAMERAMODE_POSEND) + { + solo_char_load(); + g_CurrentPlayer->room_pointer = NULL; + } + else if (g_CameraMode == CAMERAMODE_FP_NOINPUT) + { + maybe_solo_intro_camera_handler(); + g_CameraMode = CAMERAMODE_FP; + } + else if (g_CameraMode == CAMERAMODE_FADE_TO_TITLE) + { + s32 var_s0; + + for (var_s0 = 0; var_s0 < getPlayerCount(); var_s0++) + { + set_cur_player(var_s0); + currentPlayerSetFadeColour(0, 0, 0, 0.0f); + currentPlayerSetFadeFrac(60.0f, 1.0f); + } + set_cur_player(0); } } -#else -GLOBAL_ASM( -.text -glabel set_camera_mode -/* 0AF4E8 7F07A9B8 27BDFF78 */ addiu $sp, $sp, -0x88 -/* 0AF4EC 7F07A9BC AFB00028 */ sw $s0, 0x28($sp) -/* 0AF4F0 7F07A9C0 3C108003 */ lui $s0, %hi(g_CameraMode) -/* 0AF4F4 7F07A9C4 26106494 */ addiu $s0, %lo(g_CameraMode) # addiu $s0, $s0, 0x6494 -/* 0AF4F8 7F07A9C8 AE040000 */ sw $a0, ($s0) -/* 0AF4FC 7F07A9CC 3C018003 */ lui $at, %hi(g_CameraAfterCinema) -/* 0AF500 7F07A9D0 AC206498 */ sw $zero, %lo(g_CameraAfterCinema)($at) -/* 0AF504 7F07A9D4 8E020000 */ lw $v0, ($s0) -/* 0AF508 7F07A9D8 24030001 */ li $v1, 1 -/* 0AF50C 7F07A9DC AFBF002C */ sw $ra, 0x2c($sp) -/* 0AF510 7F07A9E0 14620027 */ bne $v1, $v0, .L7F07AA80 -/* 0AF514 7F07A9E4 24010002 */ li $at, 2 -/* 0AF518 7F07A9E8 3C0E8003 */ lui $t6, %hi(ptr_random06cam_entry) -/* 0AF51C 7F07A9EC 8DCE64C0 */ lw $t6, %lo(ptr_random06cam_entry)($t6) -/* 0AF520 7F07A9F0 11C0001F */ beqz $t6, .L7F07AA70 -/* 0AF524 7F07A9F4 00000000 */ nop -/* 0AF528 7F07A9F8 0FC2FF26 */ jal get_recording_ramrom_flag -/* 0AF52C 7F07A9FC 00000000 */ nop -/* 0AF530 7F07AA00 1440001B */ bnez $v0, .L7F07AA70 -/* 0AF534 7F07AA04 00000000 */ nop -/* 0AF538 7F07AA08 0FC2FF23 */ jal get_is_ramrom_flag -/* 0AF53C 7F07AA0C 00000000 */ nop -/* 0AF540 7F07AA10 14400017 */ bnez $v0, .L7F07AA70 -/* 0AF544 7F07AA14 3C018003 */ lui $at, %hi(D_800364A4) -/* 0AF548 7F07AA18 44802000 */ mtc1 $zero, $f4 -/* 0AF54C 7F07AA1C 00002025 */ move $a0, $zero -/* 0AF550 7F07AA20 00002825 */ move $a1, $zero -/* 0AF554 7F07AA24 00003025 */ move $a2, $zero -/* 0AF558 7F07AA28 3C073F80 */ lui $a3, 0x3f80 -/* 0AF55C 7F07AA2C 0FC201EC */ jal currentPlayerSetFadeColour -/* 0AF560 7F07AA30 E42464A4 */ swc1 $f4, %lo(D_800364A4)($at) -/* 0AF564 7F07AA34 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0AF568 7F07AA38 44816000 */ mtc1 $at, $f12 -/* 0AF56C 7F07AA3C 44807000 */ mtc1 $zero, $f14 -/* 0AF570 7F07AA40 0FC20216 */ jal currentPlayerSetFadeFrac -/* 0AF574 7F07AA44 00000000 */ nop -/* 0AF578 7F07AA48 0C001A57 */ jal bossGetStageNum -/* 0AF57C 7F07AA4C 00000000 */ nop -/* 0AF580 7F07AA50 00402025 */ move $a0, $v0 -/* 0AF584 7F07AA54 0FC2EA99 */ jal fogLoadLevelEnvironment -/* 0AF588 7F07AA58 24050001 */ li $a1, 1 -/* 0AF58C 7F07AA5C 3C108008 */ lui $s0, %hi(g_CurrentPlayer) -/* 0AF590 7F07AA60 2610A0B0 */ addiu $s0, %lo(g_CurrentPlayer) # addiu $s0, $s0, -0x5f50 -/* 0AF594 7F07AA64 8E0F0000 */ lw $t7, ($s0) -/* 0AF598 7F07AA68 100001C9 */ b .L7F07B190 -/* 0AF59C 7F07AA6C ADE00034 */ sw $zero, 0x34($t7) -.L7F07AA70: -/* 0AF5A0 7F07AA70 0FC1EA6E */ jal set_camera_mode -/* 0AF5A4 7F07AA74 24040003 */ li $a0, 3 -/* 0AF5A8 7F07AA78 100001C6 */ b .L7F07B194 -/* 0AF5AC 7F07AA7C 8FBF002C */ lw $ra, 0x2c($sp) -.L7F07AA80: -/* 0AF5B0 7F07AA80 1441000D */ bne $v0, $at, .L7F07AAB8 -/* 0AF5B4 7F07AA84 00002025 */ move $a0, $zero -/* 0AF5B8 7F07AA88 00002825 */ move $a1, $zero -/* 0AF5BC 7F07AA8C 00003025 */ move $a2, $zero -/* 0AF5C0 7F07AA90 0FC201EC */ jal currentPlayerSetFadeColour -/* 0AF5C4 7F07AA94 24070000 */ li $a3, 0 -/* 0AF5C8 7F07AA98 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0AF5CC 7F07AA9C 44816000 */ mtc1 $at, $f12 -/* 0AF5D0 7F07AAA0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AF5D4 7F07AAA4 44817000 */ mtc1 $at, $f14 -/* 0AF5D8 7F07AAA8 0FC20216 */ jal currentPlayerSetFadeFrac -/* 0AF5DC 7F07AAAC 00000000 */ nop -/* 0AF5E0 7F07AAB0 100001B8 */ b .L7F07B194 -/* 0AF5E4 7F07AAB4 8FBF002C */ lw $ra, 0x2c($sp) -.L7F07AAB8: -/* 0AF5E8 7F07AAB8 24010009 */ li $at, 9 -/* 0AF5EC 7F07AABC 54410015 */ bnel $v0, $at, .L7F07AB14 -/* 0AF5F0 7F07AAC0 24010003 */ li $at, 3 -/* 0AF5F4 7F07AAC4 44800000 */ mtc1 $zero, $f0 -/* 0AF5F8 7F07AAC8 3C018008 */ lui $at, %hi(g_MpSwirlRotateSpeed) -/* 0AF5FC 7F07AACC E4209E04 */ swc1 $f0, %lo(g_MpSwirlRotateSpeed)($at) -/* 0AF600 7F07AAD0 3C01C2B4 */ li $at, 0xC2B40000 # -90.000000 -/* 0AF604 7F07AAD4 44813000 */ mtc1 $at, $f6 -/* 0AF608 7F07AAD8 3C018008 */ lui $at, %hi(g_MpSwirlAngleDegrees) -/* 0AF60C 7F07AADC E4269E08 */ swc1 $f6, %lo(g_MpSwirlAngleDegrees)($at) -/* 0AF610 7F07AAE0 3C018008 */ lui $at, %hi(g_MpSwirlForwardSpeed) -/* 0AF614 7F07AAE4 E4209E0C */ swc1 $f0, %lo(g_MpSwirlForwardSpeed)($at) -/* 0AF618 7F07AAE8 3C0142A0 */ li $at, 0x42A00000 # 80.000000 -/* 0AF61C 7F07AAEC 44814000 */ mtc1 $at, $f8 -/* 0AF620 7F07AAF0 3C018008 */ lui $at, %hi(g_MpSwirlDistance) -/* 0AF624 7F07AAF4 0C001A57 */ jal bossGetStageNum -/* 0AF628 7F07AAF8 E4289E10 */ swc1 $f8, %lo(g_MpSwirlDistance)($at) -/* 0AF62C 7F07AAFC 00402025 */ move $a0, $v0 -/* 0AF630 7F07AB00 0FC2EA99 */ jal fogLoadLevelEnvironment -/* 0AF634 7F07AB04 00002825 */ move $a1, $zero -/* 0AF638 7F07AB08 100001A2 */ b .L7F07B194 -/* 0AF63C 7F07AB0C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0AF640 7F07AB10 24010003 */ li $at, 3 -.L7F07AB14: -/* 0AF644 7F07AB14 14410059 */ bne $v0, $at, .L7F07AC7C -/* 0AF648 7F07AB18 00002025 */ move $a0, $zero -/* 0AF64C 7F07AB1C 3C018003 */ lui $at, %hi(D_8003649C) -/* 0AF650 7F07AB20 AC20649C */ sw $zero, %lo(D_8003649C)($at) -/* 0AF654 7F07AB24 00002825 */ move $a1, $zero -/* 0AF658 7F07AB28 00003025 */ move $a2, $zero -/* 0AF65C 7F07AB2C 0FC201EC */ jal currentPlayerSetFadeColour -/* 0AF660 7F07AB30 3C073F80 */ lui $a3, 0x3f80 -/* 0AF664 7F07AB34 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0AF668 7F07AB38 44816000 */ mtc1 $at, $f12 -/* 0AF66C 7F07AB3C 44807000 */ mtc1 $zero, $f14 -/* 0AF670 7F07AB40 0FC20216 */ jal currentPlayerSetFadeFrac -/* 0AF674 7F07AB44 00000000 */ nop -/* 0AF678 7F07AB48 0C001A57 */ jal bossGetStageNum -/* 0AF67C 7F07AB4C 00000000 */ nop -/* 0AF680 7F07AB50 00402025 */ move $a0, $v0 -/* 0AF684 7F07AB54 0FC2EA99 */ jal fogLoadLevelEnvironment -/* 0AF688 7F07AB58 00002825 */ move $a1, $zero -/* 0AF68C 7F07AB5C 3C188003 */ lui $t8, %hi(g_IntroSwirl) -/* 0AF690 7F07AB60 8F1864AC */ lw $t8, %lo(g_IntroSwirl)($t8) -/* 0AF694 7F07AB64 13000041 */ beqz $t8, .L7F07AC6C -/* 0AF698 7F07AB68 00000000 */ nop -/* 0AF69C 7F07AB6C 0FC2FF26 */ jal get_recording_ramrom_flag -/* 0AF6A0 7F07AB70 00000000 */ nop -/* 0AF6A4 7F07AB74 1440003D */ bnez $v0, .L7F07AC6C -/* 0AF6A8 7F07AB78 00000000 */ nop -/* 0AF6AC 7F07AB7C 0FC2FF23 */ jal get_is_ramrom_flag -/* 0AF6B0 7F07AB80 00000000 */ nop -/* 0AF6B4 7F07AB84 14400039 */ bnez $v0, .L7F07AC6C -/* 0AF6B8 7F07AB88 00000000 */ nop -/* 0AF6BC 7F07AB8C 44806000 */ mtc1 $zero, $f12 -/* 0AF6C0 7F07AB90 3C018003 */ lui $at, %hi(D_800364A4) -/* 0AF6C4 7F07AB94 24190001 */ li $t9, 1 -/* 0AF6C8 7F07AB98 E42C64A4 */ swc1 $f12, %lo(D_800364A4)($at) -/* 0AF6CC 7F07AB9C 3C018003 */ lui $at, %hi(D_800364A8) -/* 0AF6D0 7F07ABA0 AC3964A8 */ sw $t9, %lo(D_800364A8)($at) -/* 0AF6D4 7F07ABA4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AF6D8 7F07ABA8 44817000 */ mtc1 $at, $f14 -/* 0AF6DC 7F07ABAC 0FC20284 */ jal currentPlayerStartChrFade -/* 0AF6E0 7F07ABB0 00000000 */ nop -/* 0AF6E4 7F07ABB4 0FC1E73C */ jal solo_char_load -/* 0AF6E8 7F07ABB8 00000000 */ nop -/* 0AF6EC 7F07ABBC 3C088003 */ lui $t0, %hi(g_IntroAnimationIndex) -/* 0AF6F0 7F07ABC0 8D086514 */ lw $t0, %lo(g_IntroAnimationIndex)($t0) -/* 0AF6F4 7F07ABC4 3C0A8003 */ lui $t2, %hi(stage_intro_anim_table) -/* 0AF6F8 7F07ABC8 3C108008 */ lui $s0, %hi(g_CurrentPlayer) -/* 0AF6FC 7F07ABCC 254A6518 */ addiu $t2, %lo(stage_intro_anim_table) # addiu $t2, $t2, 0x6518 -/* 0AF700 7F07ABD0 00084900 */ sll $t1, $t0, 4 -/* 0AF704 7F07ABD4 2610A0B0 */ addiu $s0, %lo(g_CurrentPlayer) # addiu $s0, $s0, -0x5f50 -/* 0AF708 7F07ABD8 012A1021 */ addu $v0, $t1, $t2 -/* 0AF70C 7F07ABDC 8E0D0000 */ lw $t5, ($s0) -/* 0AF710 7F07ABE0 C4400004 */ lwc1 $f0, 4($v0) -/* 0AF714 7F07ABE4 3C0C8007 */ lui $t4, %hi(ptr_animation_table) -/* 0AF718 7F07ABE8 8D8C9538 */ lw $t4, %lo(ptr_animation_table)($t4) -/* 0AF71C 7F07ABEC 8C4B0000 */ lw $t3, ($v0) -/* 0AF720 7F07ABF0 C44C0008 */ lwc1 $f12, 8($v0) -/* 0AF724 7F07ABF4 C442000C */ lwc1 $f2, 0xc($v0) -/* 0AF728 7F07ABF8 44805000 */ mtc1 $zero, $f10 -/* 0AF72C 7F07ABFC 8DA400D4 */ lw $a0, 0xd4($t5) -/* 0AF730 7F07AC00 44070000 */ mfc1 $a3, $f0 -/* 0AF734 7F07AC04 00003025 */ move $a2, $zero -/* 0AF738 7F07AC08 016C2821 */ addu $a1, $t3, $t4 -/* 0AF73C 7F07AC0C E7AC0078 */ swc1 $f12, 0x78($sp) -/* 0AF740 7F07AC10 E7A20010 */ swc1 $f2, 0x10($sp) -/* 0AF744 7F07AC14 0FC1BF2A */ jal modelSetAnimation -/* 0AF748 7F07AC18 E7AA0014 */ swc1 $f10, 0x14($sp) -/* 0AF74C 7F07AC1C C7AC0078 */ lwc1 $f12, 0x78($sp) -/* 0AF750 7F07AC20 44808000 */ mtc1 $zero, $f16 -/* 0AF754 7F07AC24 00000000 */ nop -/* 0AF758 7F07AC28 460C803C */ c.lt.s $f16, $f12 -/* 0AF75C 7F07AC2C 00000000 */ nop -/* 0AF760 7F07AC30 45020006 */ bc1fl .L7F07AC4C -/* 0AF764 7F07AC34 8E0F0000 */ lw $t7, ($s0) -/* 0AF768 7F07AC38 8E0E0000 */ lw $t6, ($s0) -/* 0AF76C 7F07AC3C 44056000 */ mfc1 $a1, $f12 -/* 0AF770 7F07AC40 0FC1BF7A */ jal modelSetAnimEndFrame -/* 0AF774 7F07AC44 8DC400D4 */ lw $a0, 0xd4($t6) -/* 0AF778 7F07AC48 8E0F0000 */ lw $t7, ($s0) -.L7F07AC4C: -/* 0AF77C 7F07AC4C 24190017 */ li $t9, 23 -/* 0AF780 7F07AC50 8DF800A8 */ lw $t8, 0xa8($t7) -/* 0AF784 7F07AC54 8F020004 */ lw $v0, 4($t8) -/* 0AF788 7F07AC58 A0590007 */ sb $t9, 7($v0) -/* 0AF78C 7F07AC5C A0400008 */ sb $zero, 8($v0) -/* 0AF790 7F07AC60 8E080000 */ lw $t0, ($s0) -/* 0AF794 7F07AC64 1000014A */ b .L7F07B190 -/* 0AF798 7F07AC68 AD000034 */ sw $zero, 0x34($t0) -.L7F07AC6C: -/* 0AF79C 7F07AC6C 0FC1EA6E */ jal set_camera_mode -/* 0AF7A0 7F07AC70 24040004 */ li $a0, 4 -/* 0AF7A4 7F07AC74 10000147 */ b .L7F07B194 -/* 0AF7A8 7F07AC78 8FBF002C */ lw $ra, 0x2c($sp) -.L7F07AC7C: -/* 0AF7AC 7F07AC7C 24010004 */ li $at, 4 -/* 0AF7B0 7F07AC80 5441003A */ bnel $v0, $at, .L7F07AD6C -/* 0AF7B4 7F07AC84 24010005 */ li $at, 5 -/* 0AF7B8 7F07AC88 0C001A57 */ jal bossGetStageNum -/* 0AF7BC 7F07AC8C 00000000 */ nop -/* 0AF7C0 7F07AC90 24010036 */ li $at, 54 -/* 0AF7C4 7F07AC94 1441000D */ bne $v0, $at, .L7F07ACCC -/* 0AF7C8 7F07AC98 3C098003 */ lui $t1, %hi(D_8003649C) -/* 0AF7CC 7F07AC9C 00002025 */ move $a0, $zero -/* 0AF7D0 7F07ACA0 00002825 */ move $a1, $zero -/* 0AF7D4 7F07ACA4 00003025 */ move $a2, $zero -/* 0AF7D8 7F07ACA8 0FC201EC */ jal currentPlayerSetFadeColour -/* 0AF7DC 7F07ACAC 3C073F80 */ lui $a3, 0x3f80 -/* 0AF7E0 7F07ACB0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AF7E4 7F07ACB4 44817000 */ mtc1 $at, $f14 -/* 0AF7E8 7F07ACB8 44806000 */ mtc1 $zero, $f12 -/* 0AF7EC 7F07ACBC 0FC20216 */ jal currentPlayerSetFadeFrac -/* 0AF7F0 7F07ACC0 00000000 */ nop -/* 0AF7F4 7F07ACC4 1000000D */ b .L7F07ACFC -/* 0AF7F8 7F07ACC8 00000000 */ nop -.L7F07ACCC: -/* 0AF7FC 7F07ACCC 8D29649C */ lw $t1, %lo(D_8003649C)($t1) -/* 0AF800 7F07ACD0 00002025 */ move $a0, $zero -/* 0AF804 7F07ACD4 00002825 */ move $a1, $zero -/* 0AF808 7F07ACD8 11200008 */ beqz $t1, .L7F07ACFC -/* 0AF80C 7F07ACDC 00003025 */ move $a2, $zero -/* 0AF810 7F07ACE0 0FC201EC */ jal currentPlayerSetFadeColour -/* 0AF814 7F07ACE4 3C073F80 */ lui $a3, 0x3f80 -/* 0AF818 7F07ACE8 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0AF81C 7F07ACEC 44816000 */ mtc1 $at, $f12 -/* 0AF820 7F07ACF0 44807000 */ mtc1 $zero, $f14 -/* 0AF824 7F07ACF4 0FC20216 */ jal currentPlayerSetFadeFrac -/* 0AF828 7F07ACF8 00000000 */ nop -.L7F07ACFC: -/* 0AF82C 7F07ACFC 0FC26919 */ jal getPlayerCount -/* 0AF830 7F07AD00 00000000 */ nop -/* 0AF834 7F07AD04 28410002 */ slti $at, $v0, 2 -/* 0AF838 7F07AD08 14200006 */ bnez $at, .L7F07AD24 -/* 0AF83C 7F07AD0C 00000000 */ nop -/* 0AF840 7F07AD10 0C001A57 */ jal bossGetStageNum -/* 0AF844 7F07AD14 00000000 */ nop -/* 0AF848 7F07AD18 00402025 */ move $a0, $v0 -/* 0AF84C 7F07AD1C 0FC2EA99 */ jal fogLoadLevelEnvironment -/* 0AF850 7F07AD20 00002825 */ move $a1, $zero -.L7F07AD24: -/* 0AF854 7F07AD24 3C108008 */ lui $s0, %hi(g_CurrentPlayer) -/* 0AF858 7F07AD28 2610A0B0 */ addiu $s0, %lo(g_CurrentPlayer) # addiu $s0, $s0, -0x5f50 -/* 0AF85C 7F07AD2C 8E0A0000 */ lw $t2, ($s0) -/* 0AF860 7F07AD30 3C108008 */ lui $s0, %hi(starting_right_weapon) -/* 0AF864 7F07AD34 261099E0 */ addiu $s0, %lo(starting_right_weapon) # addiu $s0, $s0, -0x6620 -/* 0AF868 7F07AD38 8D4B01C8 */ lw $t3, 0x1c8($t2) -/* 0AF86C 7F07AD3C 24040001 */ li $a0, 1 -/* 0AF870 7F07AD40 15600006 */ bnez $t3, .L7F07AD5C -/* 0AF874 7F07AD44 00000000 */ nop -/* 0AF878 7F07AD48 0FC17645 */ jal currentPlayerEquipWeaponWrapper -/* 0AF87C 7F07AD4C 8E050004 */ lw $a1, 4($s0) -/* 0AF880 7F07AD50 00002025 */ move $a0, $zero -/* 0AF884 7F07AD54 0FC17645 */ jal currentPlayerEquipWeaponWrapper -/* 0AF888 7F07AD58 8E050000 */ lw $a1, ($s0) -.L7F07AD5C: -/* 0AF88C 7F07AD5C 3C018003 */ lui $at, %hi(stop_time_flag) -/* 0AF890 7F07AD60 1000010B */ b .L7F07B190 -/* 0AF894 7F07AD64 AC2064A0 */ sw $zero, %lo(stop_time_flag)($at) -/* 0AF898 7F07AD68 24010005 */ li $at, 5 -.L7F07AD6C: -/* 0AF89C 7F07AD6C 144100CC */ bne $v0, $at, .L7F07B0A0 -/* 0AF8A0 7F07AD70 00002025 */ move $a0, $zero -/* 0AF8A4 7F07AD74 44809000 */ mtc1 $zero, $f18 -/* 0AF8A8 7F07AD78 3C018003 */ lui $at, %hi(D_800364A4) -/* 0AF8AC 7F07AD7C 00002825 */ move $a1, $zero -/* 0AF8B0 7F07AD80 E43264A4 */ swc1 $f18, %lo(D_800364A4)($at) -/* 0AF8B4 7F07AD84 3C018003 */ lui $at, %hi(D_800364A8) -/* 0AF8B8 7F07AD88 AC2364A8 */ sw $v1, %lo(D_800364A8)($at) -/* 0AF8BC 7F07AD8C 00003025 */ move $a2, $zero -/* 0AF8C0 7F07AD90 0FC201EC */ jal currentPlayerSetFadeColour -/* 0AF8C4 7F07AD94 3C073F80 */ lui $a3, 0x3f80 -/* 0AF8C8 7F07AD98 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0AF8CC 7F07AD9C 44816000 */ mtc1 $at, $f12 -/* 0AF8D0 7F07ADA0 44807000 */ mtc1 $zero, $f14 -/* 0AF8D4 7F07ADA4 0FC20216 */ jal currentPlayerSetFadeFrac -/* 0AF8D8 7F07ADA8 00000000 */ nop -/* 0AF8DC 7F07ADAC 3C028003 */ lui $v0, %hi(g_ExplodeTankOnDeathFlag) -/* 0AF8E0 7F07ADB0 8C42648C */ lw $v0, %lo(g_ExplodeTankOnDeathFlag)($v0) -/* 0AF8E4 7F07ADB4 3C108008 */ lui $s0, %hi(g_CurrentPlayer) -/* 0AF8E8 7F07ADB8 3C0C8003 */ lui $t4, %hi(g_PlayerTankProp) -/* 0AF8EC 7F07ADBC 10400007 */ beqz $v0, .L7F07ADDC -/* 0AF8F0 7F07ADC0 2610A0B0 */ addiu $s0, %lo(g_CurrentPlayer) # addiu $s0, $s0, -0x5f50 -/* 0AF8F4 7F07ADC4 8D8C6450 */ lw $t4, %lo(g_PlayerTankProp)($t4) -/* 0AF8F8 7F07ADC8 11800004 */ beqz $t4, .L7F07ADDC -/* 0AF8FC 7F07ADCC 00000000 */ nop -/* 0AF900 7F07ADD0 3C108008 */ lui $s0, %hi(g_CurrentPlayer) -/* 0AF904 7F07ADD4 1000005C */ b .L7F07AF48 -/* 0AF908 7F07ADD8 2610A0B0 */ addiu $s0, %lo(g_CurrentPlayer) # addiu $s0, $s0, -0x5f50 -.L7F07ADDC: -/* 0AF90C 7F07ADDC 3C018003 */ lui $at, %hi(in_tank_flag) -/* 0AF910 7F07ADE0 AC206448 */ sw $zero, %lo(in_tank_flag)($at) -/* 0AF914 7F07ADE4 8E190000 */ lw $t9, ($s0) -/* 0AF918 7F07ADE8 0320C025 */ move $t8, $t9 -/* 0AF91C 7F07ADEC 272F0054 */ addiu $t7, $t9, 0x54 -.L7F07ADF0: -/* 0AF920 7F07ADF0 8F010434 */ lw $at, 0x434($t8) -/* 0AF924 7F07ADF4 2718000C */ addiu $t8, $t8, 0xc -/* 0AF928 7F07ADF8 2739000C */ addiu $t9, $t9, 0xc -/* 0AF92C 7F07ADFC AF21047C */ sw $at, 0x47c($t9) -/* 0AF930 7F07AE00 8F01042C */ lw $at, 0x42c($t8) -/* 0AF934 7F07AE04 AF210480 */ sw $at, 0x480($t9) -/* 0AF938 7F07AE08 8F010430 */ lw $at, 0x430($t8) -/* 0AF93C 7F07AE0C 170FFFF8 */ bne $t8, $t7, .L7F07ADF0 -/* 0AF940 7F07AE10 AF210484 */ sw $at, 0x484($t9) -/* 0AF944 7F07AE14 8E020000 */ lw $v0, ($s0) -/* 0AF948 7F07AE18 C4440414 */ lwc1 $f4, 0x414($v0) -/* 0AF94C 7F07AE1C E4440148 */ swc1 $f4, 0x148($v0) -/* 0AF950 7F07AE20 8E020000 */ lw $v0, ($s0) -/* 0AF954 7F07AE24 C4460418 */ lwc1 $f6, 0x418($v0) -/* 0AF958 7F07AE28 E4460158 */ swc1 $f6, 0x158($v0) -/* 0AF95C 7F07AE2C 8E020000 */ lw $v0, ($s0) -/* 0AF960 7F07AE30 C448048C */ lwc1 $f8, 0x48c($v0) -/* 0AF964 7F07AE34 8C4800A8 */ lw $t0, 0xa8($v0) -/* 0AF968 7F07AE38 E5080008 */ swc1 $f8, 8($t0) -/* 0AF96C 7F07AE3C 8E020000 */ lw $v0, ($s0) -/* 0AF970 7F07AE40 C44A0490 */ lwc1 $f10, 0x490($v0) -/* 0AF974 7F07AE44 8C4900A8 */ lw $t1, 0xa8($v0) -/* 0AF978 7F07AE48 E52A000C */ swc1 $f10, 0xc($t1) -/* 0AF97C 7F07AE4C 8E020000 */ lw $v0, ($s0) -/* 0AF980 7F07AE50 C4500494 */ lwc1 $f16, 0x494($v0) -/* 0AF984 7F07AE54 8C4A00A8 */ lw $t2, 0xa8($v0) -/* 0AF988 7F07AE58 E5500010 */ swc1 $f16, 0x10($t2) -/* 0AF98C 7F07AE5C 8E020000 */ lw $v0, ($s0) -/* 0AF990 7F07AE60 8C4B0488 */ lw $t3, 0x488($v0) -/* 0AF994 7F07AE64 8C4C00A8 */ lw $t4, 0xa8($v0) -/* 0AF998 7F07AE68 0FC205E4 */ jal bondviewApplyVertaTheta -/* 0AF99C 7F07AE6C AD8B0014 */ sw $t3, 0x14($t4) -/* 0AF9A0 7F07AE70 44806000 */ mtc1 $zero, $f12 -/* 0AF9A4 7F07AE74 00000000 */ nop -/* 0AF9A8 7F07AE78 44066000 */ mfc1 $a2, $f12 -/* 0AF9AC 7F07AE7C 0FC202CD */ jal bondviewMoveAnimationTick -/* 0AF9B0 7F07AE80 46006386 */ mov.s $f14, $f12 -/* 0AF9B4 7F07AE84 0FC2051E */ jal bondviewUpdatePlayerCollisionPositionFields -/* 0AF9B8 7F07AE88 00000000 */ nop -/* 0AF9BC 7F07AE8C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AF9C0 7F07AE90 44817000 */ mtc1 $at, $f14 -/* 0AF9C4 7F07AE94 44806000 */ mtc1 $zero, $f12 -/* 0AF9C8 7F07AE98 0FC20284 */ jal currentPlayerStartChrFade -/* 0AF9CC 7F07AE9C 00000000 */ nop -/* 0AF9D0 7F07AEA0 0FC1E73C */ jal solo_char_load -/* 0AF9D4 7F07AEA4 00000000 */ nop -/* 0AF9D8 7F07AEA8 8E040000 */ lw $a0, ($s0) -/* 0AF9DC 7F07AEAC 0FC1BD6B */ jal objecthandlerGetModelAnim -/* 0AF9E0 7F07AEB0 24840598 */ addiu $a0, $a0, 0x598 -/* 0AF9E4 7F07AEB4 8E040000 */ lw $a0, ($s0) -/* 0AF9E8 7F07AEB8 AFA20038 */ sw $v0, 0x38($sp) -/* 0AF9EC 7F07AEBC 0FC1BD6D */ jal objecthandlerGetModelGunhand -/* 0AF9F0 7F07AEC0 24840598 */ addiu $a0, $a0, 0x598 -/* 0AF9F4 7F07AEC4 44800000 */ mtc1 $zero, $f0 -/* 0AF9F8 7F07AEC8 8E0E0000 */ lw $t6, ($s0) -/* 0AF9FC 7F07AECC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0AFA00 7F07AED0 44819000 */ mtc1 $at, $f18 -/* 0AFA04 7F07AED4 8DC400D4 */ lw $a0, 0xd4($t6) -/* 0AFA08 7F07AED8 44070000 */ mfc1 $a3, $f0 -/* 0AFA0C 7F07AEDC 8FA50038 */ lw $a1, 0x38($sp) -/* 0AFA10 7F07AEE0 00403025 */ move $a2, $v0 -/* 0AFA14 7F07AEE4 E7A00014 */ swc1 $f0, 0x14($sp) -/* 0AFA18 7F07AEE8 0FC1BF2A */ jal modelSetAnimation -/* 0AFA1C 7F07AEEC E7B20010 */ swc1 $f18, 0x10($sp) -/* 0AFA20 7F07AEF0 8E0D0000 */ lw $t5, ($s0) -/* 0AFA24 7F07AEF4 24180018 */ li $t8, 24 -/* 0AFA28 7F07AEF8 8DAF00A8 */ lw $t7, 0xa8($t5) -/* 0AFA2C 7F07AEFC 8DE30004 */ lw $v1, 4($t7) -/* 0AFA30 7F07AF00 8C790014 */ lw $t9, 0x14($v1) -/* 0AFA34 7F07AF04 A0780007 */ sb $t8, 7($v1) -/* 0AFA38 7F07AF08 A0600008 */ sb $zero, 8($v1) -/* 0AFA3C 7F07AF0C 37280001 */ ori $t0, $t9, 1 -/* 0AFA40 7F07AF10 AC680014 */ sw $t0, 0x14($v1) -/* 0AFA44 7F07AF14 8E020000 */ lw $v0, ($s0) -/* 0AFA48 7F07AF18 8C4500A8 */ lw $a1, 0xa8($v0) -/* 0AFA4C 7F07AF1C 8C4400D4 */ lw $a0, 0xd4($v0) -/* 0AFA50 7F07AF20 0FC1B303 */ jal setsuboffset -/* 0AFA54 7F07AF24 24A50008 */ addiu $a1, $a1, 8 -/* 0AFA58 7F07AF28 0FC227B9 */ jal get_curplay_horizontal_rotation_in_degrees -/* 0AFA5C 7F07AF2C 00000000 */ nop -/* 0AFA60 7F07AF30 8E090000 */ lw $t1, ($s0) -/* 0AFA64 7F07AF34 44050000 */ mfc1 $a1, $f0 -/* 0AFA68 7F07AF38 0FC1B34F */ jal setsubroty -/* 0AFA6C 7F07AF3C 8D2400D4 */ lw $a0, 0xd4($t1) -/* 0AFA70 7F07AF40 3C028003 */ lui $v0, %hi(g_ExplodeTankOnDeathFlag) -/* 0AFA74 7F07AF44 8C42648C */ lw $v0, %lo(g_ExplodeTankOnDeathFlag)($v0) -.L7F07AF48: -/* 0AFA78 7F07AF48 10400017 */ beqz $v0, .L7F07AFA8 -/* 0AFA7C 7F07AF4C 27A50058 */ addiu $a1, $sp, 0x58 -/* 0AFA80 7F07AF50 3C048003 */ lui $a0, %hi(g_PlayerTankProp) -/* 0AFA84 7F07AF54 8C846450 */ lw $a0, %lo(g_PlayerTankProp)($a0) -/* 0AFA88 7F07AF58 50800014 */ beql $a0, $zero, .L7F07AFAC -/* 0AFA8C 7F07AF5C 8E020000 */ lw $v0, ($s0) -/* 0AFA90 7F07AF60 AFA40064 */ sw $a0, 0x64($sp) -/* 0AFA94 7F07AF64 C4840008 */ lwc1 $f4, 8($a0) -/* 0AFA98 7F07AF68 3C0143FA */ li $at, 0x43FA0000 # 500.000000 -/* 0AFA9C 7F07AF6C 44810000 */ mtc1 $at, $f0 -/* 0AFAA0 7F07AF70 E7A40058 */ swc1 $f4, 0x58($sp) -/* 0AFAA4 7F07AF74 C486000C */ lwc1 $f6, 0xc($a0) -/* 0AFAA8 7F07AF78 00803025 */ move $a2, $a0 -/* 0AFAAC 7F07AF7C E7A6005C */ swc1 $f6, 0x5c($sp) -/* 0AFAB0 7F07AF80 C4880010 */ lwc1 $f8, 0x10($a0) -/* 0AFAB4 7F07AF84 E7A80060 */ swc1 $f8, 0x60($sp) -/* 0AFAB8 7F07AF88 C48A0008 */ lwc1 $f10, 8($a0) -/* 0AFABC 7F07AF8C E7AA0048 */ swc1 $f10, 0x48($sp) -/* 0AFAC0 7F07AF90 C490000C */ lwc1 $f16, 0xc($a0) -/* 0AFAC4 7F07AF94 E7B0004C */ swc1 $f16, 0x4c($sp) -/* 0AFAC8 7F07AF98 C4920010 */ lwc1 $f18, 0x10($a0) -/* 0AFACC 7F07AF9C E7B20050 */ swc1 $f18, 0x50($sp) -/* 0AFAD0 7F07AFA0 10000014 */ b .L7F07AFF4 -/* 0AFAD4 7F07AFA4 8C830014 */ lw $v1, 0x14($a0) -.L7F07AFA8: -/* 0AFAD8 7F07AFA8 8E020000 */ lw $v0, ($s0) -.L7F07AFAC: -/* 0AFADC 7F07AFAC 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 0AFAE0 7F07AFB0 44810000 */ mtc1 $at, $f0 -/* 0AFAE4 7F07AFB4 8C4A00A8 */ lw $t2, 0xa8($v0) -/* 0AFAE8 7F07AFB8 AFAA0064 */ sw $t2, 0x64($sp) -/* 0AFAEC 7F07AFBC C44403C4 */ lwc1 $f4, 0x3c4($v0) -/* 0AFAF0 7F07AFC0 E7A40058 */ swc1 $f4, 0x58($sp) -/* 0AFAF4 7F07AFC4 C44603C8 */ lwc1 $f6, 0x3c8($v0) -/* 0AFAF8 7F07AFC8 E7A6005C */ swc1 $f6, 0x5c($sp) -/* 0AFAFC 7F07AFCC C44803CC */ lwc1 $f8, 0x3cc($v0) -/* 0AFB00 7F07AFD0 E7A80060 */ swc1 $f8, 0x60($sp) -/* 0AFB04 7F07AFD4 C44A048C */ lwc1 $f10, 0x48c($v0) -/* 0AFB08 7F07AFD8 8C4600A8 */ lw $a2, 0xa8($v0) -/* 0AFB0C 7F07AFDC E7AA0048 */ swc1 $f10, 0x48($sp) -/* 0AFB10 7F07AFE0 C4500490 */ lwc1 $f16, 0x490($v0) -/* 0AFB14 7F07AFE4 E7B0004C */ swc1 $f16, 0x4c($sp) -/* 0AFB18 7F07AFE8 C4520494 */ lwc1 $f18, 0x494($v0) -/* 0AFB1C 7F07AFEC E7B20050 */ swc1 $f18, 0x50($sp) -/* 0AFB20 7F07AFF0 8C430488 */ lw $v1, 0x488($v0) -.L7F07AFF4: -/* 0AFB24 7F07AFF4 8FA40064 */ lw $a0, 0x64($sp) -/* 0AFB28 7F07AFF8 27A70048 */ addiu $a3, $sp, 0x48 -/* 0AFB2C 7F07AFFC AFA30010 */ sw $v1, 0x10($sp) -/* 0AFB30 7F07B000 0FC1E94D */ jal sub_GAME_7F07A534 -/* 0AFB34 7F07B004 E7A00014 */ swc1 $f0, 0x14($sp) -/* 0AFB38 7F07B008 10400021 */ beqz $v0, .L7F07B090 -/* 0AFB3C 7F07B00C 3C0B8003 */ lui $t3, %hi(D_80036510) -/* 0AFB40 7F07B010 8D6B6510 */ lw $t3, %lo(D_80036510)($t3) -/* 0AFB44 7F07B014 15600007 */ bnez $t3, .L7F07B034 -/* 0AFB48 7F07B018 00000000 */ nop -/* 0AFB4C 7F07B01C 0C001B9F */ jal musicTrack1Play -/* 0AFB50 7F07B020 2404002C */ li $a0, 44 -/* 0AFB54 7F07B024 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0AFB58 7F07B028 44816000 */ mtc1 $at, $f12 -/* 0AFB5C 7F07B02C 0C00248E */ jal sndSetScalerApplyVolumeAllSfxSlot -/* 0AFB60 7F07B030 00000000 */ nop -.L7F07B034: -/* 0AFB64 7F07B034 3C0C8003 */ lui $t4, %hi(g_ExplodeTankOnDeathFlag) -/* 0AFB68 7F07B038 8D8C648C */ lw $t4, %lo(g_ExplodeTankOnDeathFlag)($t4) -/* 0AFB6C 7F07B03C 3C0E8003 */ lui $t6, %hi(g_PlayerTankProp) -/* 0AFB70 7F07B040 51800054 */ beql $t4, $zero, .L7F07B194 -/* 0AFB74 7F07B044 8FBF002C */ lw $ra, 0x2c($sp) -/* 0AFB78 7F07B048 8DCE6450 */ lw $t6, %lo(g_PlayerTankProp)($t6) -/* 0AFB7C 7F07B04C 51C00051 */ beql $t6, $zero, .L7F07B194 -/* 0AFB80 7F07B050 8FBF002C */ lw $ra, 0x2c($sp) -/* 0AFB84 7F07B054 0FC26C54 */ jal get_cur_playernum -/* 0AFB88 7F07B058 00000000 */ nop -/* 0AFB8C 7F07B05C 3C048003 */ lui $a0, %hi(g_PlayerTankProp) -/* 0AFB90 7F07B060 8C846450 */ lw $a0, %lo(g_PlayerTankProp)($a0) -/* 0AFB94 7F07B064 2407000D */ li $a3, 13 -/* 0AFB98 7F07B068 8C860014 */ lw $a2, 0x14($a0) -/* 0AFB9C 7F07B06C 248D002C */ addiu $t5, $a0, 0x2c -/* 0AFBA0 7F07B070 AFAD0018 */ sw $t5, 0x18($sp) -/* 0AFBA4 7F07B074 AFA0001C */ sw $zero, 0x1c($sp) -/* 0AFBA8 7F07B078 AFA20014 */ sw $v0, 0x14($sp) -/* 0AFBAC 7F07B07C AFA00010 */ sw $zero, 0x10($sp) -/* 0AFBB0 7F07B080 0FC27094 */ jal explosionCreate -/* 0AFBB4 7F07B084 24850008 */ addiu $a1, $a0, 8 -/* 0AFBB8 7F07B088 10000042 */ b .L7F07B194 -/* 0AFBBC 7F07B08C 8FBF002C */ lw $ra, 0x2c($sp) -.L7F07B090: -/* 0AFBC0 7F07B090 0C001A4C */ jal bossRunTitleStage -/* 0AFBC4 7F07B094 00000000 */ nop -/* 0AFBC8 7F07B098 1000003E */ b .L7F07B194 -/* 0AFBCC 7F07B09C 8FBF002C */ lw $ra, 0x2c($sp) -.L7F07B0A0: -/* 0AFBD0 7F07B0A0 24010006 */ li $at, 6 -/* 0AFBD4 7F07B0A4 1441000D */ bne $v0, $at, .L7F07B0DC -/* 0AFBD8 7F07B0A8 00002025 */ move $a0, $zero -/* 0AFBDC 7F07B0AC 00002825 */ move $a1, $zero -/* 0AFBE0 7F07B0B0 00003025 */ move $a2, $zero -/* 0AFBE4 7F07B0B4 0FC201EC */ jal currentPlayerSetFadeColour -/* 0AFBE8 7F07B0B8 24070000 */ li $a3, 0 -/* 0AFBEC 7F07B0BC 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0AFBF0 7F07B0C0 44816000 */ mtc1 $at, $f12 -/* 0AFBF4 7F07B0C4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AFBF8 7F07B0C8 44817000 */ mtc1 $at, $f14 -/* 0AFBFC 7F07B0CC 0FC20216 */ jal currentPlayerSetFadeFrac -/* 0AFC00 7F07B0D0 00000000 */ nop -/* 0AFC04 7F07B0D4 1000002F */ b .L7F07B194 -/* 0AFC08 7F07B0D8 8FBF002C */ lw $ra, 0x2c($sp) -.L7F07B0DC: -/* 0AFC0C 7F07B0DC 24010007 */ li $at, 7 -/* 0AFC10 7F07B0E0 54410009 */ bnel $v0, $at, .L7F07B108 -/* 0AFC14 7F07B0E4 24010008 */ li $at, 8 -/* 0AFC18 7F07B0E8 0FC1E73C */ jal solo_char_load -/* 0AFC1C 7F07B0EC 00000000 */ nop -/* 0AFC20 7F07B0F0 3C108008 */ lui $s0, %hi(g_CurrentPlayer) -/* 0AFC24 7F07B0F4 2610A0B0 */ addiu $s0, %lo(g_CurrentPlayer) # addiu $s0, $s0, -0x5f50 -/* 0AFC28 7F07B0F8 8E0F0000 */ lw $t7, ($s0) -/* 0AFC2C 7F07B0FC 10000024 */ b .L7F07B190 -/* 0AFC30 7F07B100 ADE00034 */ sw $zero, 0x34($t7) -/* 0AFC34 7F07B104 24010008 */ li $at, 8 -.L7F07B108: -/* 0AFC38 7F07B108 54410007 */ bnel $v0, $at, .L7F07B128 -/* 0AFC3C 7F07B10C 2401000A */ li $at, 10 -/* 0AFC40 7F07B110 0FC1E928 */ jal maybe_solo_intro_camera_handler -/* 0AFC44 7F07B114 00000000 */ nop -/* 0AFC48 7F07B118 24180004 */ li $t8, 4 -/* 0AFC4C 7F07B11C 1000001C */ b .L7F07B190 -/* 0AFC50 7F07B120 AE180000 */ sw $t8, ($s0) -/* 0AFC54 7F07B124 2401000A */ li $at, 10 -.L7F07B128: -/* 0AFC58 7F07B128 5441001A */ bnel $v0, $at, .L7F07B194 -/* 0AFC5C 7F07B12C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0AFC60 7F07B130 0FC26919 */ jal getPlayerCount -/* 0AFC64 7F07B134 00008025 */ move $s0, $zero -/* 0AFC68 7F07B138 18400013 */ blez $v0, .L7F07B188 -/* 0AFC6C 7F07B13C 00000000 */ nop -.L7F07B140: -/* 0AFC70 7F07B140 0FC26C43 */ jal set_cur_player -/* 0AFC74 7F07B144 02002025 */ move $a0, $s0 -/* 0AFC78 7F07B148 00002025 */ move $a0, $zero -/* 0AFC7C 7F07B14C 00002825 */ move $a1, $zero -/* 0AFC80 7F07B150 00003025 */ move $a2, $zero -/* 0AFC84 7F07B154 0FC201EC */ jal currentPlayerSetFadeColour -/* 0AFC88 7F07B158 24070000 */ li $a3, 0 -/* 0AFC8C 7F07B15C 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0AFC90 7F07B160 44816000 */ mtc1 $at, $f12 -/* 0AFC94 7F07B164 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0AFC98 7F07B168 44817000 */ mtc1 $at, $f14 -/* 0AFC9C 7F07B16C 0FC20216 */ jal currentPlayerSetFadeFrac -/* 0AFCA0 7F07B170 00000000 */ nop -/* 0AFCA4 7F07B174 0FC26919 */ jal getPlayerCount -/* 0AFCA8 7F07B178 26100001 */ addiu $s0, $s0, 1 -/* 0AFCAC 7F07B17C 0202082A */ slt $at, $s0, $v0 -/* 0AFCB0 7F07B180 1420FFEF */ bnez $at, .L7F07B140 -/* 0AFCB4 7F07B184 00000000 */ nop -.L7F07B188: -/* 0AFCB8 7F07B188 0FC26C43 */ jal set_cur_player -/* 0AFCBC 7F07B18C 00002025 */ move $a0, $zero -.L7F07B190: -/* 0AFCC0 7F07B190 8FBF002C */ lw $ra, 0x2c($sp) -.L7F07B194: -/* 0AFCC4 7F07B194 8FB00028 */ lw $s0, 0x28($sp) -/* 0AFCC8 7F07B198 27BD0088 */ addiu $sp, $sp, 0x88 -/* 0AFCCC 7F07B19C 03E00008 */ jr $ra -/* 0AFCD0 7F07B1A0 00000000 */ nop -) -#endif - - @@ -4878,7 +4372,7 @@ glabel sub_GAME_7F07B1A4 /* 0AFCF0 7F07B1C0 24010001 */ li $at, 1 /* 0AFCF4 7F07B1C4 14410005 */ bne $v0, $at, .L7F07B1DC /* 0AFCF8 7F07B1C8 AFBF0014 */ sw $ra, 0x14($sp) -/* 0AFCFC 7F07B1CC 0FC1EA6E */ jal set_camera_mode +/* 0AFCFC 7F07B1CC 0FC1EA6E */ jal bondviewSetCameraMode /* 0AFD00 7F07B1D0 24040002 */ li $a0, 2 /* 0AFD04 7F07B1D4 1000002F */ b .L7F07B294 /* 0AFD08 7F07B1D8 8FBF0014 */ lw $ra, 0x14($sp) @@ -4888,7 +4382,7 @@ glabel sub_GAME_7F07B1A4 /* 0AFD14 7F07B1E4 24010009 */ li $at, 9 /* 0AFD18 7F07B1E8 0FC228CC */ jal bondviewResetIntroCameraMessageDialogs /* 0AFD1C 7F07B1EC 00000000 */ nop -/* 0AFD20 7F07B1F0 0FC1EA6E */ jal set_camera_mode +/* 0AFD20 7F07B1F0 0FC1EA6E */ jal bondviewSetCameraMode /* 0AFD24 7F07B1F4 24040003 */ li $a0, 3 /* 0AFD28 7F07B1F8 10000026 */ b .L7F07B294 /* 0AFD2C 7F07B1FC 8FBF0014 */ lw $ra, 0x14($sp) @@ -4905,7 +4399,7 @@ glabel sub_GAME_7F07B1A4 /* 0AFD54 7F07B224 44806000 */ mtc1 $zero, $f12 /* 0AFD58 7F07B228 0FC20284 */ jal currentPlayerStartChrFade /* 0AFD5C 7F07B22C 00000000 */ nop -/* 0AFD60 7F07B230 0FC1EA6E */ jal set_camera_mode +/* 0AFD60 7F07B230 0FC1EA6E */ jal bondviewSetCameraMode /* 0AFD64 7F07B234 24040004 */ li $a0, 4 /* 0AFD68 7F07B238 10000016 */ b .L7F07B294 /* 0AFD6C 7F07B23C 8FBF0014 */ lw $ra, 0x14($sp) @@ -4915,21 +4409,21 @@ glabel sub_GAME_7F07B1A4 /* 0AFD78 7F07B248 24010005 */ li $at, 5 /* 0AFD7C 7F07B24C 54410006 */ bnel $v0, $at, .L7F07B268 /* 0AFD80 7F07B250 24010006 */ li $at, 6 -/* 0AFD84 7F07B254 0FC1EA6E */ jal set_camera_mode +/* 0AFD84 7F07B254 0FC1EA6E */ jal bondviewSetCameraMode /* 0AFD88 7F07B258 24040006 */ li $a0, 6 /* 0AFD8C 7F07B25C 1000000D */ b .L7F07B294 /* 0AFD90 7F07B260 8FBF0014 */ lw $ra, 0x14($sp) /* 0AFD94 7F07B264 24010006 */ li $at, 6 .L7F07B268: /* 0AFD98 7F07B268 14410009 */ bne $v0, $at, .L7F07B290 -/* 0AFD9C 7F07B26C 3C028003 */ lui $v0, %hi(D_80036510) -/* 0AFDA0 7F07B270 24426510 */ addiu $v0, %lo(D_80036510) # addiu $v0, $v0, 0x6510 +/* 0AFD9C 7F07B26C 3C028003 */ lui $v0, %hi(camera_mode) +/* 0AFDA0 7F07B270 24426510 */ addiu $v0, %lo(camera_mode) # addiu $v0, $v0, 0x6510 /* 0AFDA4 7F07B274 8C4E0000 */ lw $t6, ($v0) /* 0AFDA8 7F07B278 25CF0001 */ addiu $t7, $t6, 1 /* 0AFDAC 7F07B27C 29E10003 */ slti $at, $t7, 3 /* 0AFDB0 7F07B280 10200003 */ beqz $at, .L7F07B290 /* 0AFDB4 7F07B284 AC4F0000 */ sw $t7, ($v0) -/* 0AFDB8 7F07B288 0FC1EA6E */ jal set_camera_mode +/* 0AFDB8 7F07B288 0FC1EA6E */ jal bondviewSetCameraMode /* 0AFDBC 7F07B28C 24040005 */ li $a0, 5 .L7F07B290: /* 0AFDC0 7F07B290 8FBF0014 */ lw $ra, 0x14($sp) @@ -5167,12 +4661,12 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, f32 zero = 0.0f; void *p; struct PadRecord *setupPad; - + if ((g_CameraMode == CAMERAMODE_INTRO) || (g_CameraMode == CAMERAMODE_FADESWIRL)) { if (g_CameraMode == CAMERAMODE_INTRO) { - if ((D_800364A4 < 120.0f) && ((D_800364A4 + g_GlobalTimerDelta) >= 120.0f)) + if ((camera_transition_timer < 120.0f) && ((camera_transition_timer + g_GlobalTimerDelta) >= 120.0f)) { #if defined(VERSION_US) setFontTables(ptrFontZurichBoldChars, ptrFontZurichBold); @@ -5184,7 +4678,7 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, if (ptr_random06cam_entry->lang20.lang_ptr != NULL) { - if ((D_800364A4 < 300.0f) && ((D_800364A4 + g_GlobalTimerDelta) >= 300.0f)) + if ((camera_transition_timer < 300.0f) && ((camera_transition_timer + g_GlobalTimerDelta) >= 300.0f)) { #if defined(VERSION_US) hudmsgBottomShow(ptr_random06cam_entry->lang20.lang_ptr); @@ -5192,18 +4686,18 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, hudmsgBottomShow(ptr_random06cam_entry->lang20.lang_ptr, ptrFontZurichBoldChars, ptrFontZurichBold); #endif } - - if (D_800364A4 > 480.0f) + + if (camera_transition_timer > 480.0f) { g_CameraAfterCinema = CAMERAMODE_INTRO; } } - else if (D_800364A4 > 300.0f) + else if (camera_transition_timer > 300.0f) { g_CameraAfterCinema = CAMERAMODE_INTRO; } - D_800364A4 += g_GlobalTimerDelta; + camera_transition_timer += g_GlobalTimerDelta; if ((lvlGetControlsLockedFlag() == 0) && (buttons & ~oldbuttons & (CONT_A | B_BUTTON | Z_TRIG | START_BUTTON | CONT_R | CONT_L))) @@ -5223,11 +4717,11 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, pos2->f[0] = pos->f[0] + (cosf(ptr_random06cam_entry->unk14.fval) * sinf(ptr_random06cam_entry->unk10.fval)); pos2->f[1] = pos->f[1] + sinf(ptr_random06cam_entry->unk14.fval); pos2->f[2] = pos->f[2] - (cosf(ptr_random06cam_entry->unk14.fval) * cosf(ptr_random06cam_entry->unk10.fval)); - + p = &g_CurrentSetup.pads[ptr_random06cam_entry->unk18]; setupPad = p; *stan = setupPad->stan; - + arg6->f[0] = setupPad->pos.f[0]; arg6->f[1] = setupPad->pos.f[1]; arg6->f[2] = setupPad->pos.f[2]; @@ -5247,12 +4741,12 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, { g_MpSwirlRotateSpeed += 0.1f; } - + if (g_MpSwirlAngleDegrees > 110.0f) { g_MpSwirlRotateSpeed -= 0.1f; } - + g_MpSwirlAngleDegrees += g_MpSwirlRotateSpeed; } #if defined(VERSION_EU) @@ -5263,7 +4757,7 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, { g_MpSwirlAngleDegrees = 180.0f; } - + if (g_MpSwirlAngleDegrees > 80.0f) { if (g_MpSwirlDistance > 60.0f) @@ -5274,9 +4768,9 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, { g_MpSwirlForwardSpeed += 0.015f; } - + g_MpSwirlDistance += g_MpSwirlForwardSpeed; - + if (g_MpSwirlDistance < 1.0f) { g_MpSwirlDistance = 1.0f; @@ -5286,7 +4780,7 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, } sp38 = ((g_MpSwirlAngleDegrees - g_CurrentPlayer->vv_theta) * M_PI_F) / 180.0f; - + pos->f[0] = g_CurrentPlayer->field_488.pos.f[0] + (sinf(sp38) * g_MpSwirlDistance); pos->f[1] = g_CurrentPlayer->field_488.pos.f[1] + (g_MpSwirlDistance * 0.08f); pos->f[2] = g_CurrentPlayer->field_488.pos.f[2] + (cosf(sp38) * g_MpSwirlDistance); @@ -5294,9 +4788,9 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, pos2->f[0] = g_CurrentPlayer->field_488.pos.f[0]; pos2->f[1] = g_CurrentPlayer->field_488.pos.f[1]; pos2->f[2] = g_CurrentPlayer->field_488.pos.f[2]; - + *stan = g_CurrentPlayer->prop->stan; - + arg6->f[0] = g_CurrentPlayer->field_488.pos.f[0]; arg6->f[1] = g_CurrentPlayer->field_488.pos.f[1] + (g_MpSwirlDistance * 0.08f); arg6->f[2] = g_CurrentPlayer->field_488.pos.f[2]; @@ -5315,26 +4809,26 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, } else if (g_CameraMode == CAMERAMODE_SWIRL) { - D_800364A4 += g_GlobalTimerDelta; - - while (g_IntroSwirl[D_800364A8].unk18.fval <= D_800364A4) + camera_transition_timer += g_GlobalTimerDelta; + + while (g_IntroSwirl[intro_camera_index].unk18.fval <= camera_transition_timer) { - if (!(g_IntroSwirl[D_800364A8 + 3].unk04 & 1)) + if (!(g_IntroSwirl[intro_camera_index + 3].unk04 & 1)) { - D_800364A4 -= g_IntroSwirl[D_800364A8].unk18.fval; - D_800364A8++; + camera_transition_timer -= g_IntroSwirl[intro_camera_index].unk18.fval; + intro_camera_index++; } else { - D_800364A4 = g_IntroSwirl[D_800364A8].unk18.fval; + camera_transition_timer = g_IntroSwirl[intro_camera_index].unk18.fval; g_CameraAfterCinema = CAMERAMODE_INTRO; break; } } - - sp30 += (g_IntroSwirl[D_800364A8].unk18.fval - D_800364A4); - for (i = D_800364A8 + 1; !(g_IntroSwirl[i+2].unk04 & 1); i++) + sp30 += (g_IntroSwirl[intro_camera_index].unk18.fval - camera_transition_timer); + + for (i = intro_camera_index + 1; !(g_IntroSwirl[i+2].unk04 & 1); i++) { sp30 += g_IntroSwirl[i].unk18.fval; } @@ -5344,7 +4838,7 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, currentPlayerStartChrFade(30.0f, 0.0f); } - if (D_8003649C != 0) + if (camera_fade_active != 0) { if (currentPlayerIsFadeComplete() != 0) { @@ -5352,14 +4846,14 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, } } - if ((sp30 > 60.0f) && (D_8003649C == 0)) + if ((sp30 > 60.0f) && (camera_fade_active == 0)) { - if ((lvlGetControlsLockedFlag() == 0) + if ((lvlGetControlsLockedFlag() == 0) && (buttons & ~oldbuttons & (A_BUTTON | B_BUTTON | Z_TRIG | START_BUTTON | L_TRIG | R_TRIG))) { - D_8003649C = 1; + camera_fade_active = 1; currentPlayerSetFadeColour(0, 0, 0, g_CurrentPlayer->colourscreenfrac); - + if (currentPlayerIsFadeComplete() != 0) { currentPlayerSetFadeFrac(60.0f, 1.0f); @@ -5371,14 +4865,14 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, } } - sub_GAME_7F07B2A0(D_800364A8, D_800364A4, pos, pos2); + sub_GAME_7F07B2A0(intro_camera_index, camera_transition_timer, pos, pos2); - if (g_IntroSwirl[D_800364A8].unk1C >= 0) + if (g_IntroSwirl[intro_camera_index].unk1C >= 0) { - p = &g_CurrentSetup.pads[g_IntroSwirl[D_800364A8].unk1C]; + p = &g_CurrentSetup.pads[g_IntroSwirl[intro_camera_index].unk1C]; setupPad = p; *stan = setupPad->stan; - + arg6->f[0] = setupPad->pos.f[0]; arg6->f[1] = setupPad->pos.f[1]; arg6->f[2] = setupPad->pos.f[2]; @@ -5391,12 +4885,12 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, arg6->f[2] = g_CurrentPlayer->field_488.collision_position.f[2]; } } - else if ((g_CameraMode == CAMERAMODE_DEATH_CAM_FIRST) || (g_CameraMode == CAMERAMODE_DEATH_CAM_SECOND)) + else if ((g_CameraMode == CAMERAMODE_DEATH_CAM_SP) || (g_CameraMode == CAMERAMODE_DEATH_CAM_MP)) { - if (g_CameraMode == CAMERAMODE_DEATH_CAM_FIRST) + if (g_CameraMode == CAMERAMODE_DEATH_CAM_SP) { - D_800364A4 += g_GlobalTimerDelta; - + camera_transition_timer += g_GlobalTimerDelta; + if (g_CurrentPlayer->ptr_char_objectinstance != NULL) { if (objecthandlerGetModelField28((Model *) g_CurrentPlayer->ptr_char_objectinstance) @@ -5405,42 +4899,42 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, g_CameraAfterCinema = CAMERAMODE_INTRO; } } - else if (D_800364A4 >= 180.0f) + else if (camera_transition_timer >= 180.0f) { g_CameraAfterCinema = CAMERAMODE_INTRO; } - + if ((buttons & ~oldbuttons & (CONT_A | B_BUTTON | Z_TRIG | START_BUTTON)) - && (g_CurrentPlayer->bonddead != 0) - && (g_CurrentPlayer->redbloodfinished != 0) - && (g_CurrentPlayer->deathanimfinished != 0)) + && (g_CurrentPlayer->bonddead) + && (g_CurrentPlayer->redbloodfinished) + && (g_CurrentPlayer->deathanimfinished)) { g_CameraAfterCinema = CAMERAMODE_INTRO; - D_80036510 = CAMERAMODE_FADESWIRL; + camera_mode = CAMERAMODE_FADESWIRL; } } - else if (g_CameraMode == CAMERAMODE_DEATH_CAM_SECOND) + else if (g_CameraMode == CAMERAMODE_DEATH_CAM_MP) { - D_800364A4 += g_GlobalTimerDelta; - + camera_transition_timer += g_GlobalTimerDelta; + if (g_CurrentPlayer->colourfadetimemax60 < 0.0f) { g_CameraAfterCinema = CAMERAMODE_INTRO; } - + if ((buttons & ~oldbuttons & (CONT_A | B_BUTTON | Z_TRIG | START_BUTTON)) - && (g_CurrentPlayer->bonddead != 0) - && (g_CurrentPlayer->redbloodfinished != 0) - && (g_CurrentPlayer->deathanimfinished != 0)) + && (g_CurrentPlayer->bonddead) + && (g_CurrentPlayer->redbloodfinished) + && (g_CurrentPlayer->deathanimfinished)) { - D_80036510 = CAMERAMODE_FADESWIRL; + camera_mode = CAMERAMODE_FADESWIRL; } } pos->f[0] = flt_CODE_bss_800799E8.f[0]; pos->f[1] = flt_CODE_bss_800799E8.f[1]; pos->f[2] = flt_CODE_bss_800799E8.f[2]; - + if (dword_CODE_bss_800799F4 == g_CurrentPlayer->prop) { pos2->f[0] = g_CurrentPlayer->field_3C4; @@ -5453,9 +4947,9 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, pos2->f[1] = dword_CODE_bss_800799F4->pos.f[1]; pos2->f[2] = dword_CODE_bss_800799F4->pos.f[2]; } - + *stan = g_CurrentPlayer->field_488.current_tile_ptr; - + arg6->f[0] = g_CurrentPlayer->field_488.collision_position.f[0]; arg6->f[1] = g_CurrentPlayer->field_488.collision_position.f[1]; arg6->f[2] = g_CurrentPlayer->field_488.collision_position.f[2]; @@ -5467,20 +4961,20 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, pos->f[0] = dword_CODE_bss_800799F8->pos.f[0]; pos->f[1] = dword_CODE_bss_800799F8->pos.f[1]; pos->f[2] = dword_CODE_bss_800799F8->pos.f[2]; - + pos2->f[0] = g_CurrentPlayer->field_3C4; pos2->f[1] = g_CurrentPlayer->field_3C8; pos2->f[2] = g_CurrentPlayer->field_3CC; - + *stan = dword_CODE_bss_800799F8->stan; - + arg6->f[0] = dword_CODE_bss_800799F8->pos.f[0]; arg6->f[1] = dword_CODE_bss_800799F8->pos.f[1]; arg6->f[2] = dword_CODE_bss_800799F8->pos.f[2]; - + return; } - + if (gBondViewCutscene != NULL) { if (isNotBoundPad(gBondViewCutscene->pad)) @@ -5491,18 +4985,18 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, { p = &g_CurrentSetup.boundpads[getBoundPadNum(gBondViewCutscene->pad)]; } - + pos->f[0] = gBondViewCutscene->pos.f[0]; pos->f[1] = gBondViewCutscene->pos.f[1]; pos->f[2] = gBondViewCutscene->pos.f[2]; - + setupPad = p; *stan = setupPad->stan; - + arg6->f[0] = setupPad->pos.f[0]; arg6->f[1] = setupPad->pos.f[1]; arg6->f[2] = setupPad->pos.f[2]; - + if (dword_CODE_bss_80079A18 == CAMERAMODE_INTRO) { pos2->f[0] = g_CurrentPlayer->field_3C4; @@ -5515,7 +5009,7 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, pos2->f[1] = pos->f[1] + sinf(gBondViewCutscene->verta); pos2->f[2] = pos->f[2] - (cosf(gBondViewCutscene->verta) * cosf(gBondViewCutscene->theta)); } - + return; } @@ -5527,9 +5021,9 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, { setupPad = (struct PadRecord*)&g_CurrentSetup.boundpads[getBoundPadNum(dword_CODE_bss_80079A14)]; } - + *stan = setupPad->stan; - + arg6->f[0] = setupPad->pos.f[0]; arg6->f[1] = setupPad->pos.f[1]; arg6->f[2] = setupPad->pos.f[2]; @@ -5537,18 +5031,18 @@ void bondviewFrozenCameraTick(u16 buttons, u16 oldbuttons, struct coord3d *pos, pos2->f[0] = setupPad->pos.f[0] + cosf(flt_CODE_bss_80079A00) * 0.0f; pos2->f[1] = setupPad->pos.f[1] + flt_CODE_bss_80079A10; pos2->f[2] = setupPad->pos.f[2] + sinf(flt_CODE_bss_80079A00) * 0.0f; - + pos->f[0] = setupPad->pos.f[0] + (sinf(flt_CODE_bss_80079A00) * flt_CODE_bss_80079A08) + cosf(flt_CODE_bss_80079A00) * 0.0f; pos->f[1] = setupPad->pos.f[1] + flt_CODE_bss_80079A10 + flt_CODE_bss_80079A0C; pos->f[2] = setupPad->pos.f[2] + (cosf(flt_CODE_bss_80079A00) * flt_CODE_bss_80079A08) + sinf(flt_CODE_bss_80079A00) * 0.0f; flt_CODE_bss_80079A00 += flt_CODE_bss_80079A04 * g_GlobalTimerDelta; - + while (flt_CODE_bss_80079A00 >= M_TAU_F) { flt_CODE_bss_80079A00 -= M_TAU_F; } - + while (flt_CODE_bss_80079A00 < 0.0f) { flt_CODE_bss_80079A00 += M_TAU_F; @@ -5617,7 +5111,7 @@ s32 get_BONDdata_is_aiming(void) { /** * Updates autoyaimtime60 by g_ClockTimer. * Will update player->autoaimy if new autoyaimtime60 < 0 or autoaim_target != g_CurrentPlayer->autoaim_target_y. - * + * * Address 0x7F07C5F0. */ void bondviewUpdateYAutoAimTime(struct PropRecord *autoaim_target, f32 auto_aim_y) @@ -5685,7 +5179,7 @@ int redirect_get_BONDdata_autoaim_x(void) { /** * Updates autoxaimtime60 by g_ClockTimer. * Will update player->autoaimx if new autoxaimtime60 < 0 or autoaim_target_x != g_CurrentPlayer->autoaim_target_x. - * + * * Address 0x7F07C6C8. */ void bondviewUpdateXAutoAimTime(struct PropRecord *autoaim_target, f32 auto_aim_x) @@ -5760,7 +5254,7 @@ void bondviewTankModelRotationRelated(void) { if (g_PlayerTankProp != NULL) { obj = g_PlayerTankProp->obj; - + /// TODO: Fix Model struct Data type. temp_v0 = obj->model->obj->Switches; sp68 = (struct coord3d *)temp_v0[2]->Data; @@ -5792,19 +5286,23 @@ void bondviewGetTankCollisionBounds(struct rect4f *tank_collision_bounds, struct f32 sp34; struct ModelRoData_BoundingBoxRecord *bbox; + #ifdef DEBUG + assert(bondonprop2); + #endif + sp4C = g_PlayerTankProp->obj; bbox = chrobjGetBboxFromObjectRecord(sp4C); sp44 = bbox->Bounds.xmin - g_TankModelPositionOffset.f[0]; sp40 = bbox->Bounds.xmax - g_TankModelPositionOffset.f[0]; - + sp3C = bbox->Bounds.zmin - g_TankModelPositionOffset.f[2]; sp38 = bbox->Bounds.zmax - g_TankModelPositionOffset.f[2]; sp34 = sp4C->model->scale * cosf(tank_orientation_angle); sp48 = sp4C->model->scale * sinf(tank_orientation_angle); - + tank_collision_bounds->points[0].f[0] = collision_position->f[0] + (-sp3C * sp48) + (sp44 * sp34); tank_collision_bounds->points[0].f[1] = collision_position->f[2] + (sp3C * sp34) + (sp44 * sp48); @@ -5813,7 +5311,7 @@ void bondviewGetTankCollisionBounds(struct rect4f *tank_collision_bounds, struct tank_collision_bounds->points[2].f[0] = collision_position->f[0] + (-sp38 * sp48) + (sp40 * sp34); tank_collision_bounds->points[2].f[1] = collision_position->f[2] + (sp38 * sp34) + (sp40 * sp48); - + tank_collision_bounds->points[3].f[0] = collision_position->f[0] + (-sp38 * sp48) + (sp44 * sp34); tank_collision_bounds->points[3].f[1] = collision_position->f[2] + (sp38 * sp34) + (sp44 * sp48); } @@ -5823,11 +5321,11 @@ void bondviewGetTankCollisionBounds(struct rect4f *tank_collision_bounds, struct /** * Address 0x7F07CA2C. */ -s32 bondviewTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, s32 objFlags, struct coord3d *coord_p, struct coord3d *coord_dest) +s32 bondviewTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, s32 cdtypes, struct coord3d *coord_p, struct coord3d *coord_dest) { s32 temp_v0; - temp_v0 = stanTestLineUnobstructed(pTile, p_x, p_z, dest_x, dest_z, objFlags, 0.0f, 1.0f, 0.0f, 1.0f); + temp_v0 = stanTestLineUnobstructed(pTile, p_x, p_z, dest_x, dest_z, cdtypes, 0.0f, 1.0f, 0.0f, 1.0f); if ((temp_v0 == 0) && (coord_p != NULL)) { coord_p->f[0] = p_x; @@ -5855,7 +5353,7 @@ s32 bondviewTankCollisionStatus(struct coord3d *collision_position, StandTile *a struct rect4f tank_collision_bounds; s32 sp94; f32 temp_f0; - + Model *sp8C; ModelNode **switches; @@ -5869,17 +5367,17 @@ s32 bondviewTankCollisionStatus(struct coord3d *collision_position, StandTile *a sp94 = 0; bondviewGetTankCollisionBounds(&tank_collision_bounds, collision_position, tank_orientation_angle); - + if (g_PlayerTankProp != NULL) { sub_GAME_7F03D058(g_PlayerTankProp, 0); } - if ((bondviewTestLineUnobstructed(&spBC, collision_position->f[0], collision_position->f[2], tank_collision_bounds.points[0].f[0], tank_collision_bounds.points[0].f[1], 0x213, arg3, arg4) != 0) - && (bondviewTestLineUnobstructed(&spBC, tank_collision_bounds.points[0].f[0], tank_collision_bounds.points[0].f[1], tank_collision_bounds.points[1].f[0], tank_collision_bounds.points[1].f[1], 0x213, arg3, arg4) != 0) - && (bondviewTestLineUnobstructed(&spBC, tank_collision_bounds.points[1].f[0], tank_collision_bounds.points[1].f[1], tank_collision_bounds.points[2].f[0], tank_collision_bounds.points[2].f[1], 0x213, arg3, arg4) != 0) - && (bondviewTestLineUnobstructed(&spBC, tank_collision_bounds.points[2].f[0], tank_collision_bounds.points[2].f[1], tank_collision_bounds.points[3].f[0], tank_collision_bounds.points[3].f[1], 0x213, arg3, arg4) != 0) - && (bondviewTestLineUnobstructed(&spBC, tank_collision_bounds.points[3].f[0], tank_collision_bounds.points[3].f[1], tank_collision_bounds.points[0].f[0], tank_collision_bounds.points[0].f[1], 0x213, arg3, arg4) != 0)) + if ((bondviewTestLineUnobstructed(&spBC, collision_position->f[0], collision_position->f[2], tank_collision_bounds.points[0].f[0], tank_collision_bounds.points[0].f[1], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER | CDTYPE_OBJSIMMUNETOEXPLOSIONS, arg3, arg4) != 0) + && (bondviewTestLineUnobstructed(&spBC, tank_collision_bounds.points[0].f[0], tank_collision_bounds.points[0].f[1], tank_collision_bounds.points[1].f[0], tank_collision_bounds.points[1].f[1], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER | CDTYPE_OBJSIMMUNETOEXPLOSIONS, arg3, arg4) != 0) + && (bondviewTestLineUnobstructed(&spBC, tank_collision_bounds.points[1].f[0], tank_collision_bounds.points[1].f[1], tank_collision_bounds.points[2].f[0], tank_collision_bounds.points[2].f[1], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER | CDTYPE_OBJSIMMUNETOEXPLOSIONS, arg3, arg4) != 0) + && (bondviewTestLineUnobstructed(&spBC, tank_collision_bounds.points[2].f[0], tank_collision_bounds.points[2].f[1], tank_collision_bounds.points[3].f[0], tank_collision_bounds.points[3].f[1], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER | CDTYPE_OBJSIMMUNETOEXPLOSIONS, arg3, arg4) != 0) + && (bondviewTestLineUnobstructed(&spBC, tank_collision_bounds.points[3].f[0], tank_collision_bounds.points[3].f[1], tank_collision_bounds.points[0].f[0], tank_collision_bounds.points[0].f[1], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER | CDTYPE_OBJSIMMUNETOEXPLOSIONS, arg3, arg4) != 0)) { sp94 = 1; @@ -5919,8 +5417,8 @@ s32 bondviewTankCollisionStatus(struct coord3d *collision_position, StandTile *a sp74.f[2] += collision_position->f[2]; spBC = arg1; - - if (bondviewTestLineUnobstructed(&spBC, collision_position->f[0], collision_position->f[2], sp74.f[0], sp74.f[2], 0x213, arg3, arg4) == 0) + + if (bondviewTestLineUnobstructed(&spBC, collision_position->f[0], collision_position->f[2], sp74.f[0], sp74.f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER | CDTYPE_OBJSIMMUNETOEXPLOSIONS, arg3, arg4) == 0) { sp94 = 0; } @@ -5965,7 +5463,7 @@ s32 sub_GAME_7F07CDD4(struct coord3d *arg0, f32 arg1, StandTile **arg2) stanTestLineUnobstructed( &sp3C, g_CurrentPlayer->field_488.collision_position.f[0], - g_CurrentPlayer->field_488.collision_position.f[2], + g_CurrentPlayer->field_488.collision_position.f[2], arg0->f[0], arg0->f[2], 0, @@ -6012,7 +5510,7 @@ struct PropRecord *get_ptr_for_players_tank(void) /** * Sets paraameter position based on global variables g_TankOrientationAngle, g_TankTurretOrientationAngleRad, g_TankTurretVerticalAngle. - * + * * Address 0x7F07CEB0. */ void bondviewSet3dCoord7F07CEB0(coord3d *arg0) @@ -6043,9 +5541,9 @@ void bondviewSet3dCoord7F07CEB0(coord3d *arg0) /** * Unreferenced. - * + * * Returns global variable g_TankTurretVerticalAngle, which is in radians. - * + * * Address 0x7F07CF80. */ f32 bondviewGet8003646CRad(void) @@ -6062,7 +5560,7 @@ s32 bondviewTryMoveToStan(struct coord3d *arg0, StandTile **stan) { s32 sp94; StandTile *sp90; - s32 sp8C; + s32 cdtypes; f32 height; f32 always_30; f32 collision_radius; @@ -6081,13 +5579,13 @@ s32 bondviewTryMoveToStan(struct coord3d *arg0, StandTile **stan) { sp90 = g_CurrentPlayer->field_488.current_tile_ptr; - if (obj_collision_flag != 0) + if (obj_collision_flag) { - sp8C = 0x1F; + cdtypes = CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER; } else { - sp8C = 0; + cdtypes = 0; } bondviewGetCollisionRadius(g_CurrentPlayer->prop, &collision_radius, &height, &always_30); @@ -6099,10 +5597,10 @@ s32 bondviewTryMoveToStan(struct coord3d *arg0, StandTile **stan) sub_GAME_7F03D058(g_CurrentPlayer->prop, 0); sp7C = stanTileDistanceRelated(&sp90, arg0->f[0], arg0->f[2], collision_radius, &sp3C); - + if (stanGetLocusField0(&sp3C) != 0) { - g_CurrentPlayer->autocrouchpos = 0; + g_CurrentPlayer->autocrouchpos = CROUCH_SQUAT; } if ((stanTestLineUnobstructed( @@ -6111,12 +5609,12 @@ s32 bondviewTryMoveToStan(struct coord3d *arg0, StandTile **stan) g_CurrentPlayer->field_488.collision_position.f[2], arg0->f[0], arg0->f[2], - sp8C, + cdtypes, height, always_30, 0.0f, 1.0f) != 0) - && stanTestVolume(&sp90, arg0->f[0], arg0->f[2], collision_radius, sp8C, height, always_30) < 0) + && stanTestVolume(&sp90, arg0->f[0], arg0->f[2], collision_radius, cdtypes, height, always_30) < 0) { if (g_CurrentPlayer->ducking_height_offset == FULL_CROUCH_OFFSET || sp7C < 0) { @@ -6127,7 +5625,7 @@ s32 bondviewTryMoveToStan(struct coord3d *arg0, StandTile **stan) else { *stan = sp90; - sp94 = 1; + sp94 = 1; } } else @@ -6166,13 +5664,13 @@ block_20: /** * Calculates collision with current player. - * + * * @param next_pos: 3d coordinate to attempt to move to. * @param collision_pt0: Out parameter. Will set {x,0,z} position of first point (from line edge) if Bond is in collision, otherwise {0}. * @param collision_pt1: Out parameter. Will set {x,0,z} position of second point (from line edge) if Bond is in collision, otherwise ... Bond's look angle? - * + * * @return 1 if able to update stan and collision position, zero otherwise. - * + * * Address 0x7F07D234. */ s32 bondviewTrySimpleMovePlayerCollision(coord3d *next_pos, coord3d *collision_pt0, coord3d *collision_pt1) @@ -6200,16 +5698,16 @@ s32 bondviewTrySimpleMovePlayerCollision(coord3d *next_pos, coord3d *collision_p /** * This is a fallback method used when bondviewTrySimpleMovePlayerCollision fails. * Instead of moving to the full coordinate specified by `next_pos`, it will - * scale the position using `unkGeometry7F0B33DC` and try to move to that position. - * + * scale the position using `calculateNormalizedLineIntersection` and try to move to that position. + * * @param next_pos: 3d coordinate to attempt to move to. * @param collision1_pt0: Prior collision point 0. * @param collision1_pt1: Prior collision point 1. * @param collision2_pt0: Out parameter. Will set {x,0,z} position of first point (from line edge) if Bond is in collision, otherwise {0}. * @param collision2_pt1: Out parameter. Will set {x,0,z} position of second point (from line edge) if Bond is in collision, otherwise ... Bond's look angle? - * + * * @return 1 if able to update stan and collision position, zero if still unable to move by failing on the same collision edge, -1 otherwise (still unable to move). - * + * * US address 7F07D2B4. * Perfect Dark, see bondwalk.c bwalk0f0c47d0, bondbike.c bbike0f0d36d4. */ @@ -6231,41 +5729,41 @@ s32 bondviewTryFractionMovePlayerCollision( struct coord2d sp38; f32 temp_f0; f32 collision_radius; - + bondviewGetCollisionRadius(g_CurrentPlayer->prop, &collision_radius, &height, &always_30); - + delta_pos.f[0] = next_pos->f[0] - g_CurrentPlayer->field_488.collision_position.f[0]; delta_pos.f[2] = next_pos->f[2] - g_CurrentPlayer->field_488.collision_position.f[2]; - + sp50.f[0] = collision_radius; sp50.f[1] = g_CurrentPlayer->field_488.collision_position.f[0]; sp50.f[2] = g_CurrentPlayer->field_488.collision_position.f[2]; - + sp48.f[0] = collision1_pt0->f[0]; sp48.f[1] = collision1_pt0->f[2]; - + sp40.f[0] = collision1_pt1->f[0]; sp40.f[1] = collision1_pt1->f[2]; - + sp38.f[0] = delta_pos.f[0]; sp38.f[1] = delta_pos.f[2]; - - temp_f0 = unkGeometry7F0B33DC(&sp50, &sp48, &sp40, &sp38); - + + temp_f0 = calculateNormalizedLineIntersection(&sp50, &sp48, &sp40, &sp38); + try_next_pos.f[0] = g_CurrentPlayer->field_488.collision_position.f[0] + (delta_pos.f[0] * temp_f0 * 0.25f); try_next_pos.f[2] = g_CurrentPlayer->field_488.collision_position.f[2] + (delta_pos.f[2] * temp_f0 * 0.25f); - + if (bondviewTryMoveToStan(&try_next_pos, &stan) != 0) { g_CurrentPlayer->field_488.current_tile_ptr = stan; g_CurrentPlayer->field_488.collision_position.f[0] = try_next_pos.f[0]; g_CurrentPlayer->field_488.collision_position.f[2] = try_next_pos.f[2]; - + return 1; } - + getCollisionEdge_maybe(collision2_pt0, collision2_pt1); - + if (collision2_pt0->f[0] != collision1_pt0->f[0] || collision2_pt0->f[1] != collision1_pt0->f[1] || collision2_pt0->f[2] != collision1_pt0->f[2] @@ -6275,7 +5773,7 @@ s32 bondviewTryFractionMovePlayerCollision( { return 0; } - + return -1; } @@ -6286,13 +5784,13 @@ s32 bondviewTryFractionMovePlayerCollision( * This is a fallback method used when bondviewTrySimpleMovePlayerCollision fails. * Instead of moving to the full coordinate specified by `next_pos`, it will * attempt to move along the collision edge. - * + * * @param prior_next_pos: Prior 3d coordinate that Bond failed to move to. * @param collision1_pt0: Prior collision point 0. * @param collision1_pt1: Prior collision point 1. - * + * * @return -1 if either x or z coordinates are the same for the collision points, 1 if able to update stan and collision position, zero otherwise. - * + * * US address 7F07D4C0. */ s32 bondviewTryEdgeMovePlayerCollision(struct coord3d *prior_next_pos, struct coord3d *collision_pt0, struct coord3d *collision_pt1) @@ -6331,7 +5829,7 @@ s32 bondviewTryEdgeMovePlayerCollision(struct coord3d *prior_next_pos, struct co g_CurrentPlayer->field_488.current_tile_ptr = stan; g_CurrentPlayer->field_488.collision_position.f[0] = try_next_pos.f[0]; g_CurrentPlayer->field_488.collision_position.f[2] = try_next_pos.f[2]; - + return 1; } @@ -6348,15 +5846,15 @@ s32 bondviewTryEdgeMovePlayerCollision(struct coord3d *prior_next_pos, struct co * If Bond previously failed to move because of a collision, this will check * if Bond is near the end point of the collision edge. If within the collision * radius of Bond to the edge endpoint, then allow movement. - * + * * @param prior_next_pos: Prior 3d coordinate that Bond failed to move to. * @param collision1_pt0: Prior collision point 0. * @param collision1_pt1: Prior collision point 1. - * + * * @return 1 if able to update stan and collision position, zero otherwise. - * + * * US address 7F07D61C. - * + * * Perfect Dark bwalk0f0c4a5c. */ s32 bondviewTryEndHopPlayerCollision(struct coord3d *prior_next_pos, struct coord3d *collision_pt0, struct coord3d *collision_pt1) @@ -6371,7 +5869,7 @@ s32 bondviewTryEndHopPlayerCollision(struct coord3d *prior_next_pos, struct coor f32 collision_radius; bondviewGetCollisionRadius(g_CurrentPlayer->prop, &collision_radius, &height, &always_30); - + delta_pos.f[0] = prior_next_pos->f[0] - g_CurrentPlayer->field_488.collision_position.f[0]; delta_pos.f[2] = prior_next_pos->f[2] - g_CurrentPlayer->field_488.collision_position.f[2]; @@ -6384,24 +5882,24 @@ s32 bondviewTryEndHopPlayerCollision(struct coord3d *prior_next_pos, struct coor { sp50.f[0] = -(collision_pt0->f[2] - g_CurrentPlayer->field_488.collision_position.f[2]); sp50.f[2] = collision_pt0->f[0] - g_CurrentPlayer->field_488.collision_position.f[0]; - + tempf = (sp50.f[0] * sp50.f[0]) + (sp50.f[2] * sp50.f[2]); tempf = 1.0f / sqrtf(tempf); sp50.f[0] *= tempf; sp50.f[2] *= tempf; - + tempf = (delta_pos.f[0] * sp50.f[0]) + (delta_pos.f[2] * sp50.f[2]); sp50.f[0] *= tempf; sp50.f[2] *= tempf; try_next_pos.f[0] = g_CurrentPlayer->field_488.collision_position.f[0] + (sp50.f[0]); try_next_pos.f[2] = g_CurrentPlayer->field_488.collision_position.f[2] + (sp50.f[2]); - + if (bondviewTryMoveToStan(&try_next_pos, &stan)) { g_CurrentPlayer->field_488.current_tile_ptr = stan; g_CurrentPlayer->field_488.collision_position.f[0] = try_next_pos.f[0]; g_CurrentPlayer->field_488.collision_position.f[2] = try_next_pos.f[2]; - + return 1; } } @@ -6410,46 +5908,46 @@ s32 bondviewTryEndHopPlayerCollision(struct coord3d *prior_next_pos, struct coor { sp50.f[0] = collision_pt1->f[0] - prior_next_pos->f[0]; sp50.f[2] = collision_pt1->f[2] - prior_next_pos->f[2]; - + if (((sp50.f[0] * sp50.f[0]) + (sp50.f[2] * sp50.f[2])) <= (collision_radius * collision_radius)) { if (collision_pt1->f[0] != g_CurrentPlayer->field_488.collision_position.f[0] || collision_pt1->f[2] != g_CurrentPlayer->field_488.collision_position.f[2]) { sp50.f[0] = -(collision_pt1->f[2] - g_CurrentPlayer->field_488.collision_position.f[2]); sp50.f[2] = collision_pt1->f[0] - g_CurrentPlayer->field_488.collision_position.f[0]; - + tempf = (sp50.f[0] * sp50.f[0]) + (sp50.f[2] * sp50.f[2]); tempf = 1.0f / sqrtf(tempf); sp50.f[0] *= tempf; sp50.f[2] *= tempf; - + tempf = (delta_pos.f[0] * sp50.f[0]) + (delta_pos.f[2] * sp50.f[2]); sp50.f[0] *= tempf; sp50.f[2] *= tempf; try_next_pos.f[0] = g_CurrentPlayer->field_488.collision_position.f[0] + (sp50.f[0]); try_next_pos.f[2] = g_CurrentPlayer->field_488.collision_position.f[2] + (sp50.f[2]); - + if (bondviewTryMoveToStan(&try_next_pos, &stan)) { g_CurrentPlayer->field_488.current_tile_ptr = stan; g_CurrentPlayer->field_488.collision_position.f[0] = try_next_pos.f[0]; g_CurrentPlayer->field_488.collision_position.f[2] = try_next_pos.f[2]; - + return 1; } } } } - + return 0; } /** * Unreferenced. - * + * * Bitwise convert 32bit int to float. - * + * * Address 0x7F07D954. */ f32 bondviewBitconvertIntToFloat(s32 arg0) @@ -6467,10 +5965,10 @@ struct dummy_struct { /** * Sets Bond bondprevpos, attempts to move by `offset`. - * + * * @param offset: Attempt to move Bond by {x,0,z} amount. * @param allow_scoot: If movement causes collision, when set will allow Bond to scoot along the collision edge and to bump around corner edges. Otherwise, any collision will stop movement. - * + * * US address 7F07D960. * JP address 7F07DA34 (maybe). */ @@ -6508,7 +6006,7 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) g_BondCanEnterTank = 0; g_CurrentPlayer->autocrouchpos = CROUCH_STAND; - + if (g_WorldTankProp != NULL) { chraiGetCollisionBoundsWithoutY(g_WorldTankProp, &sp98, &sp94); @@ -6517,10 +6015,10 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) || (chrpropTestPointInPolygon(&g_CurrentPlayer->field_488.collision_position, sp98, sp94) != 0) || ((chrobjTestPointPolygonCollision(&g_CurrentPlayer->field_488.collision_position, g_CurrentPlayer->field_488.collision_radius, sp98, sp94) != 0))) { - + obj = g_WorldTankProp->obj; tank_objrecord = (struct TankRecord *)g_WorldTankProp->obj; - + /// TODO: replace with ModelNode structs farr5 = (f32*)obj->model->obj->Switches[5]->Data; farr6 = (f32*)obj->model->obj->Switches[6]->Data; @@ -6546,7 +6044,7 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) { return; } - + g_PlayerTankYOffset = temp_f2; } else @@ -6585,7 +6083,7 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) // zero if still unable to move by failing on the same collision edge // -1 otherwise (still unable to move). temp_v0_7 = bondviewTryFractionMovePlayerCollision(&next_pos, &collision1_pt0, &collision1_pt1, &collision2_pt0, &collision2_pt1); - + if ((temp_v0_7 > 0) || (temp_v0_7 < 0)) { if ((allow_scoot != 0) @@ -6598,7 +6096,7 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) else if (temp_v0_7 == 0) { bondviewTryFractionMovePlayerCollision(&next_pos, &collision2_pt0, &collision2_pt1, &collision3_pt0, &collision3_pt1); - + if ((allow_scoot != 0) && (bondviewTryEdgeMovePlayerCollision(&next_pos, &collision2_pt0, &collision2_pt1) <= 0) && (bondviewTryEdgeMovePlayerCollision(&next_pos, &collision1_pt0, &collision1_pt1) <= 0) @@ -6619,9 +6117,9 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) g_CurrentPlayer->field_488.collision_position.f[2]) == 0) { if(1); - + stan = g_CurrentPlayer->field_488.current_tile_ptr; - + for (tile_count=0; tile_count<5; tile_count++) { /// TODO: fix the horrible casts below. @@ -6654,7 +6152,7 @@ void bondviewCalcUpdatePlayerCollision(struct coord3d *offset, s32 allow_scoot) phi_a0_3++; } } - + if(1); if (stanTestPointWithinTileBoundsMaybe( @@ -6717,9 +6215,9 @@ void sub_GAME_7F07DEFC(void) /** * Pause angle related. - * + * * @param arg0: When set, pause_target_angle will be -40.0f, otherwise g_CurrentPlayer->vv_verta. - * + * * Address 0x7F07DF28. */ f32 bondviewPauseAngleRelated(s32 arg0) @@ -7041,9 +6539,9 @@ f32 bondviewGetWatchZoomFovy(void) { /** * Triggers watch zoom if new value. - * + * * @param zoominfovy: watch zoom fovy. - * + * * Address 0x7F07E46C. */ void bondviewTriggerWatchZoom(f32 zoominfovy) @@ -7064,7 +6562,7 @@ void bondviewTriggerWatchZoom(f32 zoominfovy) /** * Trigger watch zoom with default angle. - * + * * Address 0x7F07E504. */ void bondviewTriggerWatchZoomDefault(void) @@ -7096,7 +6594,7 @@ void bondviewZoomToWatchOnOpen(void) #else trigger_watch_zoom(5.9f, f); #endif - + } @@ -7140,7 +6638,7 @@ void bondviewUpdateWatchZoomIn(void) if ((g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x5) || (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xc)) { #if defined(BUGFIX_R1) - g_CurrentPlayer->zoomintime = g_CurrentPlayer->zoomintime + (f32) jpD_800484D0; + g_CurrentPlayer->zoomintime = g_CurrentPlayer->zoomintime + (f32) jpD_800484D0; #else g_CurrentPlayer->zoomintime = g_CurrentPlayer->zoomintime + (f32) speedgraphframes; #endif @@ -7160,7 +6658,7 @@ void bondviewUpdateWatchZoomIn(void) } g_CurrentPlayer->zoominfovy = - g_CurrentPlayer->zoominfovyold + + g_CurrentPlayer->zoominfovyold + ( (g_CurrentPlayer->zoomintime * (g_CurrentPlayer->zoominfovynew - g_CurrentPlayer->zoominfovyold) @@ -7449,7 +6947,7 @@ f32 bondviewGetPauseAnimationPercent(void) { return g_CurrentPlayer->pause_animation_counter / 20.0f; } - + if (g_CurrentPlayer->step_in_view_watch_animation == 3) { return 1.0f; @@ -7479,7 +6977,7 @@ void bondviewPlayerStopAudioForPause(void) s32 i; ObjectRecord *obj; PropRecord *prop; - + deactivate_alarm_sound_effect(); check_deactivate_gas_sound(); @@ -7504,14 +7002,14 @@ void bondviewPlayerStopAudioForPause(void) if (prop->type != PROP_TYPE_DOOR && prop->type == PROP_TYPE_OBJ) { obj = prop->obj; - + if (obj->type == PROPDEF_VEHICHLE) { VehichleRecord *vehicle = (VehichleRecord *)prop->obj; if (vehicle->Sound && sndGetPlayingState(vehicle->Sound) != AL_STOPPED) { sndDeactivate(vehicle->Sound); } - } + } else if (obj->type == PROPDEF_AIRCRAFT) { AircraftRecord *aircraft = (AircraftRecord *)prop->obj; @@ -7519,7 +7017,7 @@ void bondviewPlayerStopAudioForPause(void) sndDeactivate(aircraft->Sound); } } - + if(1); } } @@ -7568,15 +7066,15 @@ void bondviewWatchAnimationTick(void) #else sp38 = (sp34) ? WATCH_VAR_UPPER : WATCH_VAR_LOWER; #endif - - g_CurrentPlayer->field_1C4 += g_ClockTimer; - g_CurrentPlayer->watch_pause_time += 1; - g_CurrentPlayer->pausing_flag = 0; - if (g_CurrentPlayer->watch_animation_state == 1) + g_CurrentPlayer->timer_1C4 += g_ClockTimer; + g_CurrentPlayer->watch_pause_time += 1; + g_CurrentPlayer->pausing_flag = FALSE; + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x1) { - g_CurrentPlayer->pausing_flag = 0; - + g_CurrentPlayer->pausing_flag = FALSE; + if (g_CurrentPlayer->watch_pause_time == 1) { draw_item_in_hand(GUNLEFT, ITEM_SUIT_LF_HAND); @@ -7598,19 +7096,19 @@ void bondviewWatchAnimationTick(void) || ( (get_item_in_hand_or_watch_menu(0) == ITEM_UNARMED) && (Gun_hand_without_item(GUNRIGHT) != ITEM_UNARMED))) - && (g_CurrentPlayer->field_1C4 >= sp38)) + && (g_CurrentPlayer->timer_1C4 >= sp38)) { - g_CurrentPlayer->watch_animation_state = 2; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x2; g_CurrentPlayer->watch_pause_time = 1; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } } - - if (g_CurrentPlayer->watch_animation_state == 2) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x2) { - g_CurrentPlayer->pausing_flag = 0; - + g_CurrentPlayer->pausing_flag = FALSE; + if (g_CurrentPlayer->watch_pause_time == 1) { gunSetSightVisible(GUNAMMOREASON_DAMAGE, FALSE); @@ -7618,127 +7116,127 @@ void bondviewWatchAnimationTick(void) hudmsgsSetOff(PLAYERFLAG_LOCKCONTROLS); bondviewSetUpperTextDisplayFlag(PLAYERFLAG_LOCKCONTROLS); countdownTimerSetVisible(4, 0); - + if ((g_CurrentPlayer->field_218 == 0) || (g_CurrentPlayer->field_218 == 2) || (g_CurrentPlayer->field_218 == 3)) { sp20 = bondviewPauseAngleRelated(1); - + if (sp20 < 30.0f) { sp20 = 30.0f; } - + sub_GAME_7F07E010(sp20); } } - + if ((g_CurrentPlayer->field_214 - g_CurrentPlayer->field_210) < 30.0f) { - g_CurrentPlayer->watch_animation_state = 3; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x3; g_CurrentPlayer->watch_pause_time = 1; - g_CurrentPlayer->field_1C4 = 0; - + g_CurrentPlayer->timer_1C4 = 0; + sub_GAME_7F07E7CC(); } } - - if (g_CurrentPlayer->watch_animation_state == 3) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x3) { if (g_CurrentPlayer->watch_pause_time == 1) { sp30 = 40.0f; - + if ((g_CurrentPlayer->step_in_view_watch_animation != 0) && (g_CurrentPlayer->step_in_view_watch_animation != 3)) { sp30 = ((20.0f - g_CurrentPlayer->pause_watch_related_adjust) * 40.0f) / 20.0f; } - + if ((g_CurrentPlayer->field_218 == 0) || (g_CurrentPlayer->field_218 == 2) || (g_CurrentPlayer->field_218 == 3)) { sp2c = bondviewPauseAngleRelated(1); sp20 = sp30 - 10.0f; - + if (sp2c < sp20) { sp2c = sp20; } - + sub_GAME_7F07E010(sp2c); - + sp20 = sp2c + 10.0f; - + if (sp30 < sp20) { sp30 = sp20; } } - + bondviewSetPauseWatchRelated(sp30); } - + if ( ((g_CurrentPlayer->step_in_view_watch_animation != 0) && (g_CurrentPlayer->step_in_view_watch_animation != 3)) || sub_GAME_7F07E068() != 0 ) { - g_CurrentPlayer->pausing_flag = 1; + g_CurrentPlayer->pausing_flag = TRUE; } else { - g_CurrentPlayer->watch_animation_state = 4; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x4; g_CurrentPlayer->watch_pause_time = 1; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } - - if (g_CurrentPlayer->watch_animation_state == 4) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x4) { if ((g_CurrentPlayer->watch_pause_time == 1) && (g_CurrentPlayer->field_21C != 0)) { sndPlaySfx(g_musicSfxBufferPtr, 0xED, NULL); g_CurrentPlayer->field_21C = 0; } - + bondviewZoomToWatchOnOpen(); - + if (check_watch_page_transistion_running() != 0) { - g_CurrentPlayer->pausing_flag = 1; + g_CurrentPlayer->pausing_flag = TRUE; } else { - g_CurrentPlayer->watch_animation_state = 5; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x5; g_CurrentPlayer->watch_pause_time = 1; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; g_CurrentPlayer->field_21C = 1; } } - - if (g_CurrentPlayer->watch_animation_state == 5) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x5) { if (g_CurrentPlayer->watch_pause_time == 1) { sub_GAME_7F0C1310(); } - - g_CurrentPlayer->pausing_flag = 1; + + g_CurrentPlayer->pausing_flag = TRUE; } - - if (g_CurrentPlayer->watch_animation_state == 12) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xc) { - g_CurrentPlayer->pausing_flag = 1; - + g_CurrentPlayer->pausing_flag = TRUE; + if (g_CurrentPlayer->watch_pause_time >= 3) { - g_CurrentPlayer->watch_animation_state = 6; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x6; g_CurrentPlayer->watch_pause_time = 1; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; sndPlaySfx(g_musicSfxBufferPtr, 0xEE, NULL); } } - - if (g_CurrentPlayer->watch_animation_state == 6) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x6) { if (g_CurrentPlayer->watch_pause_time == 1) { @@ -7754,64 +7252,64 @@ void bondviewWatchAnimationTick(void) } if (check_watch_page_transistion_running()) { - g_CurrentPlayer->pausing_flag = 1; + g_CurrentPlayer->pausing_flag = TRUE; } else { - g_CurrentPlayer->watch_animation_state = 7; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x7; g_CurrentPlayer->watch_pause_time = 1; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; g_CurrentPlayer->field_21C = 1; } } - - if (g_CurrentPlayer->watch_animation_state == 7) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x7) { if (g_CurrentPlayer->watch_pause_time == 1) { sp28 = 40.0f; sp24 = bondviewPauseAngleRelated(0); - + if ((g_CurrentPlayer->step_in_view_watch_animation != 0) && (g_CurrentPlayer->step_in_view_watch_animation != 3)) { sp28 = (g_CurrentPlayer->pause_watch_related_adjust * 40.0f) / 20.0f; } - + sp20 = sp28 + 20.0f; - + if (sp24 < sp20) { sp24 = sp20; } - + sub_GAME_7F07E03C(sp24); bondviewSetPauseWatchRelatedAlt(sp28); } if ((g_CurrentPlayer->step_in_view_watch_animation != 0) && (g_CurrentPlayer->step_in_view_watch_animation != 3)) { - g_CurrentPlayer->pausing_flag = 1; + g_CurrentPlayer->pausing_flag = TRUE; } else { - g_CurrentPlayer->watch_animation_state = 8; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x8; g_CurrentPlayer->watch_pause_time = 1; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } - - if (g_CurrentPlayer->watch_animation_state == 8) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x8) { - g_CurrentPlayer->pausing_flag = 0; - + g_CurrentPlayer->pausing_flag = FALSE; + if (g_CurrentPlayer->watch_pause_time == 1) { - + if ((get_item_in_hand_or_watch_menu(GUNLEFT) != getCurrentPlayerWeaponId(GUNLEFT)) && (Gun_hand_without_item(GUNLEFT) != ITEM_UNARMED)) { draw_item_in_hand(GUNLEFT, getCurrentPlayerWeaponId(GUNLEFT)); } - + if (sp3c) { if ((get_item_in_hand_or_watch_menu(GUNRIGHT) != getCurrentPlayerWeaponId(GUNRIGHT)) && (Gun_hand_without_item(GUNRIGHT) != ITEM_UNARMED)) @@ -7823,36 +7321,36 @@ void bondviewWatchAnimationTick(void) else if (sub_GAME_7F07E068() == 0) { if ( - (get_item_in_hand_or_watch_menu(GUNLEFT) == getCurrentPlayerWeaponId(GUNLEFT)) - && (Gun_hand_without_item(GUNLEFT) != ITEM_UNARMED) + (get_item_in_hand_or_watch_menu(GUNLEFT) == getCurrentPlayerWeaponId(GUNLEFT)) + && (Gun_hand_without_item(GUNLEFT) != ITEM_UNARMED) && ( - (sp3c == 0) + (sp3c == 0) || (((get_item_in_hand_or_watch_menu(GUNRIGHT) == getCurrentPlayerWeaponId(GUNRIGHT))) && (Gun_hand_without_item(GUNRIGHT) != ITEM_UNARMED)))) { sub_GAME_7F05DAE4(1); - + if (sp3c) { sub_GAME_7F05DAE4(0); } - + gunSetSightVisible(GUNAMMOREASON_DAMAGE, TRUE); gunSetGunAmmoVisible(GUNSIGHTREASON_NOCONTROL, TRUE); hudmsgsSetOn(1); bondviewClearUpperTextDisplayFlag(1); countdownTimerSetVisible(4, 1); - - g_CurrentPlayer->watch_animation_state = 0; + + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x0; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } } - - if (g_CurrentPlayer->watch_animation_state == 9) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x9) { - g_CurrentPlayer->pausing_flag = 0; - + g_CurrentPlayer->pausing_flag = FALSE; + if ( (getCurrentPlayerWeaponId(GUNLEFT) != get_item_in_hand_or_watch_menu(GUNLEFT)) && (Gun_hand_without_item(GUNLEFT) != ITEM_UNARMED) @@ -7860,57 +7358,57 @@ void bondviewWatchAnimationTick(void) (sp3c == 0) || (((getCurrentPlayerWeaponId(GUNRIGHT) != get_item_in_hand_or_watch_menu(GUNRIGHT))) && (Gun_hand_without_item(GUNRIGHT) != ITEM_UNARMED)))) { - g_CurrentPlayer->watch_animation_state = 8; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x8; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } - - if (g_CurrentPlayer->watch_animation_state == 10) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xa) { - g_CurrentPlayer->pausing_flag = 0; - + g_CurrentPlayer->pausing_flag = FALSE; + if (g_CurrentPlayer->watch_pause_time == 1) { sub_GAME_7F07E03C(bondviewPauseAngleRelated(0)); } - + if ( - (getCurrentPlayerWeaponId(GUNLEFT) != get_item_in_hand_or_watch_menu(GUNLEFT)) - && (Gun_hand_without_item(GUNLEFT) != ITEM_UNARMED) + (getCurrentPlayerWeaponId(GUNLEFT) != get_item_in_hand_or_watch_menu(GUNLEFT)) + && (Gun_hand_without_item(GUNLEFT) != ITEM_UNARMED) && ( (sp3c == 0) || (((getCurrentPlayerWeaponId(GUNRIGHT) != get_item_in_hand_or_watch_menu(GUNRIGHT))) && (Gun_hand_without_item(GUNRIGHT) != ITEM_UNARMED)))) { - g_CurrentPlayer->watch_animation_state = 8; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x8; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } - - if (g_CurrentPlayer->watch_animation_state == 11) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xb) { - g_CurrentPlayer->pausing_flag = 0; + g_CurrentPlayer->pausing_flag = FALSE; if ( - (getCurrentPlayerWeaponId(GUNLEFT) == get_item_in_hand_or_watch_menu(GUNLEFT)) - && (Gun_hand_without_item(GUNLEFT) != ITEM_UNARMED) + (getCurrentPlayerWeaponId(GUNLEFT) == get_item_in_hand_or_watch_menu(GUNLEFT)) + && (Gun_hand_without_item(GUNLEFT) != ITEM_UNARMED) && ( - (sp3c == 0) + (sp3c == 0) || ( - ( (getCurrentPlayerWeaponId(GUNRIGHT) == get_item_in_hand_or_watch_menu(GUNRIGHT))) + ( (getCurrentPlayerWeaponId(GUNRIGHT) == get_item_in_hand_or_watch_menu(GUNRIGHT))) && (Gun_hand_without_item(GUNRIGHT) != ITEM_UNARMED)))) { - g_CurrentPlayer->watch_animation_state = 1; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x1; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } - - if (g_CurrentPlayer->watch_animation_state == 13) + + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xd) { - g_CurrentPlayer->pausing_flag = 0; - + g_CurrentPlayer->pausing_flag = FALSE; + if (Gun_hand_without_item(GUNLEFT) && Gun_hand_without_item(GUNRIGHT)) { @@ -7919,9 +7417,9 @@ void bondviewWatchAnimationTick(void) && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 7) && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 8)) { - g_CurrentPlayer->watch_animation_state = 1; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x1; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } } @@ -7931,12 +7429,12 @@ void bondviewWatchAnimationTick(void) bondviewUpdateWatchZoomIn(); } - if (g_CurrentPlayer->watch_animation_state == 5) + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x5) { lvlSetControlsLockedFlag(TRUE); sub_GAME_7F0A6A80(); } - else if (g_CurrentPlayer->watch_animation_state == 12) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xc) { lvlSetControlsLockedFlag(TRUE); } @@ -7952,7 +7450,7 @@ void bondviewWatchAnimationTick(void) void set_open_close_solo_watch_menu_to1(void) { - g_CurrentPlayer->open_close_solo_watch_menu = 1; + g_CurrentPlayer->open_close_solo_watch_menu = TRUE; } @@ -7971,7 +7469,7 @@ void trigger_solo_watch_menu(s32 arg0) struct WatchVertex *ptr_copy; int i; - if (g_CurrentPlayer->watch_animation_state == 0) + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0) { if (arg0 == 0) { @@ -7988,25 +7486,25 @@ void trigger_solo_watch_menu(s32 arg0) && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 7) && (g_CurrentPlayer->hands[1].when_detonating_mines_is_0 != 8)) { - g_CurrentPlayer->watch_animation_state = 1; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x1; } else { - g_CurrentPlayer->watch_animation_state = 0xD; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0xd; } - + g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; - + g_CurrentPlayer->timer_1C4 = 0; + sub_GAME_7F07DEFC(); bondviewTriggerWatchZoomDefault(); - sub_GAME_7F0A2F30(&g_CurrentPlayer->healthdamagetype, 0x2E, 1, get_BONDdata_watch_armor()); - sub_GAME_7F0A3330(&g_CurrentPlayer->watch_body_armor_bar_gdl, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->healthdamagetype), 0x2E); + sub_GAME_7F0A2F30(&g_CurrentPlayer->armor_display_values, 0x2E, 1, get_BONDdata_watch_armor()); + sub_GAME_7F0A3330(&g_CurrentPlayer->watch_body_armor_bar_gdl, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->armor_display_values), 0x2E); + + sub_GAME_7F0A2F30(&g_CurrentPlayer->health_display_values, 0x2E, -1, bondviewGetCurrentPlayerHealth()); + sub_GAME_7F0A3330(&g_CurrentPlayer->watch_health_bar_gdl, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->health_display_values), 0x2E); - sub_GAME_7F0A2F30(&g_CurrentPlayer->related_to_health_display, 0x2E, -1, bondviewGetCurrentPlayerHealth()); - sub_GAME_7F0A3330(&g_CurrentPlayer->watch_health_bar_gdl, OS_K0_TO_PHYSICAL(&g_CurrentPlayer->related_to_health_display), 0x2E); - sub_GAME_7F0A69A8(); /** @@ -8047,100 +7545,100 @@ void trigger_solo_watch_menu(s32 arg0) */ } } - else if (g_CurrentPlayer->watch_animation_state == 1) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x1) { - g_CurrentPlayer->watch_animation_state = 9; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x9; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } - else if (g_CurrentPlayer->watch_animation_state == 2) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x2) { - g_CurrentPlayer->watch_animation_state = 0xA; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0xa; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } - else if (g_CurrentPlayer->watch_animation_state == 3) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x3) { - g_CurrentPlayer->watch_animation_state = 7; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x7; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } - else if (g_CurrentPlayer->watch_animation_state == 4) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x4) { - g_CurrentPlayer->watch_animation_state = 6; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x6; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } - else if (g_CurrentPlayer->watch_animation_state == 5) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x5) { deleteCurrentSelectedFolder(); sub_GAME_7F0C1340(); - g_CurrentPlayer->watch_animation_state = 0xC; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0xc; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; - g_CurrentPlayer->open_close_solo_watch_menu = 0; + g_CurrentPlayer->timer_1C4 = 0; + g_CurrentPlayer->open_close_solo_watch_menu = FALSE; } - else if (g_CurrentPlayer->watch_animation_state == 12) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xc) { // removed } - else if (g_CurrentPlayer->watch_animation_state == 6) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x6) { if (arg0 == 0) { - g_CurrentPlayer->watch_animation_state = 4; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x4; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; sub_GAME_7F0A69A8(); } } - else if (g_CurrentPlayer->watch_animation_state == 7) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x7) { if (arg0 == 0) { - g_CurrentPlayer->watch_animation_state = 3; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x3; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; sub_GAME_7F0A69A8(); } } - else if (g_CurrentPlayer->watch_animation_state == 8) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x8) { if (arg0 == 0) { - g_CurrentPlayer->watch_animation_state = 0xB; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0xb; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; sub_GAME_7F0A69A8(); } } - else if (g_CurrentPlayer->watch_animation_state == 9) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x9) { if (arg0 == 0) { - g_CurrentPlayer->watch_animation_state = 1; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x1; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } - else if (g_CurrentPlayer->watch_animation_state == 10) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xa) { if (arg0 == 0) { - g_CurrentPlayer->watch_animation_state = 1; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x1; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } } - else if (g_CurrentPlayer->watch_animation_state == 11) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xb) { - g_CurrentPlayer->watch_animation_state = 8; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x8; g_CurrentPlayer->watch_pause_time = 0; - g_CurrentPlayer->field_1C4 = 0; + g_CurrentPlayer->timer_1C4 = 0; } - else if (g_CurrentPlayer->watch_animation_state == 13) + else if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0xd) { - g_CurrentPlayer->watch_animation_state = 0; + g_CurrentPlayer->watch_animation_state = WATCH_ANIMATION_0x0; } } @@ -8184,31 +7682,31 @@ void bondviewUpdateSpeedSideways(s32 arg0) { */ void bondviewUpdateSpeedForwards(s32 arg0) { if (arg0 == 1) { - g_CurrentPlayer->field_2A4C = (g_CurrentPlayer->field_2A4C + g_GlobalTimerDelta); - if (1.0f < g_CurrentPlayer->field_2A4C) { - g_CurrentPlayer->field_2A4C = 1.0f; + g_CurrentPlayer->speedgo = (g_CurrentPlayer->speedgo + g_GlobalTimerDelta); + if (1.0f < g_CurrentPlayer->speedgo) { + g_CurrentPlayer->speedgo = 1.0f; } } else { if (arg0 == -1) { - g_CurrentPlayer->field_2A4C = (g_CurrentPlayer->field_2A4C - g_GlobalTimerDelta); - if (g_CurrentPlayer->field_2A4C < -1.0f) { - g_CurrentPlayer->field_2A4C = -1.0f; + g_CurrentPlayer->speedgo = (g_CurrentPlayer->speedgo - g_GlobalTimerDelta); + if (g_CurrentPlayer->speedgo < -1.0f) { + g_CurrentPlayer->speedgo = -1.0f; } } else { - if (0.0f < g_CurrentPlayer->field_2A4C) { - g_CurrentPlayer->field_2A4C = (g_CurrentPlayer->field_2A4C - g_GlobalTimerDelta); - if (g_CurrentPlayer->field_2A4C < 0.0f) { - g_CurrentPlayer->field_2A4C = 0.0f; + if (0.0f < g_CurrentPlayer->speedgo) { + g_CurrentPlayer->speedgo = (g_CurrentPlayer->speedgo - g_GlobalTimerDelta); + if (g_CurrentPlayer->speedgo < 0.0f) { + g_CurrentPlayer->speedgo = 0.0f; } } else { - g_CurrentPlayer->field_2A4C = (g_CurrentPlayer->field_2A4C + g_GlobalTimerDelta); - if (0.0f < g_CurrentPlayer->field_2A4C) { - g_CurrentPlayer->field_2A4C = 0.0f; + g_CurrentPlayer->speedgo = (g_CurrentPlayer->speedgo + g_GlobalTimerDelta); + if (0.0f < g_CurrentPlayer->speedgo) { + g_CurrentPlayer->speedgo = 0.0f; } } } } - g_CurrentPlayer->speedforwards = g_CurrentPlayer->field_2A4C; + g_CurrentPlayer->speedforwards = g_CurrentPlayer->speedgo; } /** @@ -8235,7 +7733,7 @@ void bondviewCurrentPlayerUpdateSpeedVerta(f32 value) { f32 mult = viGetFovY() / FOV_Y_F; f32 limit = sub_GAME_7F07FF74(value); - + if (value > 0.0f) { if (g_CurrentPlayer->speedverta > 0.0f) @@ -8314,7 +7812,7 @@ void bondviewCurrentPlayerUpdateSpeedTheta(f32 value) { f32 mult = viGetFovY() / FOV_Y_F; f32 limit = sub_GAME_7F080228(value); - + if (value > 0.0f) { if (g_CurrentPlayer->speedtheta > 0.0f) @@ -8376,7 +7874,7 @@ Gfx *currentPlayerDrawFade(Gfx *gdl) { s32 r = g_CurrentPlayer->colourscreenred; s32 g = g_CurrentPlayer->colourscreengreen; s32 b = g_CurrentPlayer->colourscreenblue; - if ((camera_80036430 != 0) || (camera_80036434 != 0)) { + if ((cameraFrameCounter1 != 0) || (cameraFrameCounter2 != 0)) { frac = 1.0f; b = 0; g = 0; @@ -8528,19 +8026,19 @@ void bondviewMoveAnimationTick(f32 speed, f32 speedforwards, f32 speedsideways) } else { - if (g_CurrentPlayer->startnewbonddie != 0) + if (g_CurrentPlayer->startnewbonddie) { // HACK: ptr_animation_table dereference addition is backwards. // this should be: // ptr_animation_table->data[g_bondviewBondDeathAnimations[((u32) randomGetNext() % (u32) g_bondviewBondDeathAnimationsCount)]] bheadStartDeathAnimation((struct ModelAnimation *) ((s32)g_bondviewBondDeathAnimations[((u32) randomGetNext() % (u32) g_bondviewBondDeathAnimationsCount)] + (s32)&ptr_animation_table->data[0]), randomGetNext() & 1, 0.0f, 1.0f); - g_CurrentPlayer->startnewbonddie = 0; + g_CurrentPlayer->startnewbonddie = FALSE; } bheadSetSpeed(0.5f); speedsideways = 0.0f; } - + bheadUpdate(percent_speed, speedsideways); matrix_4x4_set_rotation_around_x((360.0f - g_CurrentPlayer->vv_verta360) * DegToRad1Fact(1), &sp8C); @@ -8552,7 +8050,7 @@ void bondviewMoveAnimationTick(f32 speed, f32 speedforwards, f32 speedsideways) g_CurrentPlayer->field_488.applied_view.f[0] = sp8C.m[2][0]; g_CurrentPlayer->field_488.applied_view.f[1] = sp8C.m[2][1]; g_CurrentPlayer->field_488.applied_view.f[2] = sp8C.m[2][2]; - + g_CurrentPlayer->field_488.applied_view2.f[0] = sp8C.m[1][0]; g_CurrentPlayer->field_488.applied_view2.f[1] = sp8C.m[1][1]; g_CurrentPlayer->field_488.applied_view2.f[2] = sp8C.m[1][2]; @@ -8573,7 +8071,7 @@ f32 bondviewYPositionRelated(StandTile *arg0, f32 arg1, f32 arg2) PropRecord *p = obj->prop; ret = stanGetPositionYValue(p->stan, p->pos.x, p->pos.z); - + ret += g_PlayerTankYOffset; } else @@ -8640,7 +8138,7 @@ void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset) g_CurrentPlayer->field_488.current_tile_ptr, g_CurrentPlayer->field_488.collision_position.f[0], g_CurrentPlayer->field_488.collision_position.f[2]); - + if (g_CurrentPlayer->stanHeight < temp_f0) { g_CurrentPlayer->stanHeight = temp_f0; @@ -8651,7 +8149,7 @@ void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset) stan = g_CurrentPlayer->field_488.current_tile_ptr; bondviewGetCollisionRadius(g_CurrentPlayer->prop, &collision_radius, &height, &always_30); - + sp64 = bondviewYPositionRelated( g_CurrentPlayer->field_488.current_tile_ptr, g_CurrentPlayer->field_488.collision_position.f[0], @@ -8670,7 +8168,7 @@ void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset) sp64 = g_CurrentPlayer->stanHeight; } } - + g_CurrentPlayer->stanHeight = sp64; } @@ -8700,7 +8198,7 @@ void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset) { new_field_7c = g_CurrentPlayer->field_7C; new_field_70 = g_CurrentPlayer->field_70; - + if ((get_debug_fast_bond_flag() != 0) && (g_ForceBondMoveOffset.f[0] == 0.0f) && (g_ForceBondMoveOffset.f[2] == 0.0f)) { sp40 = 1.388889f; @@ -8709,7 +8207,7 @@ void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset) { sp40 = 0.27777779f; } - + ftemp2 = new_field_7c - (g_GlobalTimerDelta * sp40); new_field_70 += (g_GlobalTimerDelta * (new_field_7c + ftemp2) * 0.5f); new_field_7c = ftemp2; @@ -8775,7 +8273,7 @@ void bondviewUpdatePlayerY(s32 use_stanHeight, f32 stanHeight_offset) if (g_CurrentPlayer->vertical_bounce_adjust < 0.0f) { g_CurrentPlayer->vertical_bounce_adjust -= CLIPPING_FIELD90_VALUE; - + if (0.0f <= g_CurrentPlayer->vertical_bounce_adjust) { g_CurrentPlayer->vertical_bounce_adjust = 0.0f; @@ -8806,25 +8304,25 @@ void bondviewUpdatePlayerCollisionPositionFields(void) g_CurrentPlayer->field_29BC = (g_CurrentPlayer->headpos.f[1] * g_playerPerm->player_perspective_height) + 7.0f; - phi_f0 = g_CurrentPlayer->field_29BC + + phi_f0 = g_CurrentPlayer->field_29BC + ((g_CurrentPlayer->field_88 + g_CurrentPlayer->ducking_height_offset) * g_playerPerm->player_perspective_height); - + if (phi_f0 < 30.0f) { phi_f0 = 30.0f; } g_CurrentPlayer->field_488.collision_position.f[1] = g_CurrentPlayer->field_70 + phi_f0; - - if (((g_CameraMode != CAMERAMODE_DEATH_CAM_FIRST) && (g_CameraMode != CAMERAMODE_DEATH_CAM_SECOND) && (g_CameraMode != CAMERAMODE_POSEND)) + + if (((g_CameraMode != CAMERAMODE_DEATH_CAM_SP) && (g_CameraMode != CAMERAMODE_DEATH_CAM_MP) && (g_CameraMode != CAMERAMODE_POSEND)) || (g_CurrentPlayer->ptr_char_objectinstance == 0)) { g_CurrentPlayer->field_488.pos.f[0] = g_CurrentPlayer->field_488.collision_position.f[0]; g_CurrentPlayer->field_488.pos.f[1] = g_CurrentPlayer->field_488.collision_position.f[1]; g_CurrentPlayer->field_488.pos.f[2] = g_CurrentPlayer->field_488.collision_position.f[2]; } - - if (g_CurrentPlayer->bonddead != 0) + + if (g_CurrentPlayer->bonddead != FALSE) { if (g_CurrentPlayer->field_29C0 > 0.0f) { @@ -8852,25 +8350,25 @@ void bondviewUpdatePlayerCollisionPositionFields(void) g_CurrentPlayer->field_488.collision_position.f[2], g_CurrentPlayer->field_488.pos.f[0], g_CurrentPlayer->field_488.pos.f[2]); - + stanlinelog_flag = sp28; - + g_CurrentPlayer->field_488.current_tile_ptr_for_portals = sp2C; - + g_CurrentPlayer->field_488.pos3.f[0] = g_CurrentPlayer->field_488.pos.f[0]; g_CurrentPlayer->field_488.pos3.f[2] = g_CurrentPlayer->field_488.pos.f[2]; - + g_CurrentPlayer->field_488.pos3.f[1] = bondviewYPositionRelated( g_CurrentPlayer->field_488.current_tile_ptr_for_portals, g_CurrentPlayer->field_488.pos.f[0], g_CurrentPlayer->field_488.pos.f[2]); - + g_CurrentPlayer->prop->stan = g_CurrentPlayer->field_488.current_tile_ptr; - + g_CurrentPlayer->prop->pos.f[0] = g_CurrentPlayer->field_488.collision_position.f[0]; g_CurrentPlayer->prop->pos.f[1] = g_CurrentPlayer->field_488.collision_position.f[1]; g_CurrentPlayer->prop->pos.f[2] = g_CurrentPlayer->field_488.collision_position.f[2]; - + #if defined(VERSION_EU) #define S7F081478_FACTOR_1 0.881200015545f #else @@ -8901,7 +8399,7 @@ void bondviewUpdatePlayerCollisionPositionFields(void) * Fixes vv_verta within -90 and +90. * Updates vv_costheta, vv_sintheta, vv_verta360, vv_cosverta, vv_sinverta, field_488.theta_transform. * Address 0x7F081790. - * + * * Perfect Dark function bmoveUpdateVerta. */ void bondviewApplyVertaTheta(void) @@ -8955,12 +8453,12 @@ void bondviewApplyVertaTheta(void) void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { struct MoveData moveData; // sp120 - + s8 player_joyGetStickX; // sp11F s8 player_joyGetStickY; // sp11E u16 player_joyGetButtons; // sp11C u16 copy_prev_buttons_pressed; // sp11A - s32 tmpc2stickx; + s32 adjustedStickX; s32 tmpc2sticky; s32 sp10C; s32 sp108; @@ -9019,7 +8517,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.speedVertaDown = 0; moveData.speedVertaUp = 0; moveData.aimTurnLeftSpeed = 0; - moveData.aimTurnRightSpeed = 0; + moveData.aimTurnRightSpeed = 0; moveData.weaponBackOffset = 0; moveData.weaponForwardOffset = 0; moveData.aiming = 0; @@ -9053,20 +8551,20 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.controlStickXRaw = (s32)stick_x; moveData.controlStickYRaw = (s32)stick_y; - - moveData.analogTurn = moveData.controlStickXSafe; + + moveData.analogTurn = moveData.controlStickXSafe; moveData.analogPitch = moveData.controlStickYSafe; moveData.analogStrafe = moveData.controlStickXSafe; moveData.analogWalk = moveData.controlStickYSafe; - if (g_CurrentPlayer->bonddead == 0 + if (g_CurrentPlayer->bonddead == FALSE && g_bondviewForceDisarm <= 0 && ( - (g_CurrentPlayer->watch_animation_state != 5 + (g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0x5 && ((buttons & ~oldbuttons) & START_BUTTON) - ) + ) || - (g_CurrentPlayer->watch_animation_state == 5 + (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x5 && g_CurrentPlayer->open_close_solo_watch_menu) ) && (getPlayerCount() == 1)) @@ -9074,8 +8572,8 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) trigger_solo_watch_menu(0); } - if (g_CurrentPlayer->watch_animation_state == 0 - && g_CurrentPlayer->bonddead == 0 + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0 + && g_CurrentPlayer->bonddead == FALSE && ( getPlayerCount() == 1 || ( @@ -9093,20 +8591,20 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) player_joyGetButtons = joyGetButtons(get_cur_playernum() + getPlayerCount() , (u32)ANY_BUTTON); copy_prev_buttons_pressed = g_CurrentPlayer->prev_buttons_pressed; - + if (player_joyGetStickX < -5) { - tmpc2stickx = player_joyGetStickX + 5; + adjustedStickX = player_joyGetStickX + 5; } else if (player_joyGetStickX > 5) { - tmpc2stickx = player_joyGetStickX - 5; + adjustedStickX = player_joyGetStickX - 5; } else { - tmpc2stickx = 0; + adjustedStickX = 0; } - + if (player_joyGetStickY < -5) { tmpc2sticky = player_joyGetStickY + 5; @@ -9123,20 +8621,20 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) /* 2.1 and 2.3 */ if (cur_player_get_control_type() == CONTROLLER_CONFIG_PLENTY || (cur_player_get_control_type() == CONTROLLER_CONFIG_DOMINO)) { - moveData.analogStrafe = tmpc2stickx; + moveData.analogStrafe = adjustedStickX; moveData.analogPitch = tmpc2sticky; } else { if (in_tank_flag == 1 && !g_CurrentPlayer->insightaimmode) { - moveData.analogTurn = tmpc2stickx; + moveData.analogTurn = adjustedStickX; } else { - moveData.analogStrafe = tmpc2stickx; + moveData.analogStrafe = adjustedStickX; } - + moveData.analogWalk = tmpc2sticky; } @@ -9169,7 +8667,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.canSwivelGun = !g_CurrentPlayer->insightaimmode; moveData.canAutoAim = !g_CurrentPlayer->insightaimmode; - + moveData.canManualAim = g_CurrentPlayer->insightaimmode; moveData.btap = ( @@ -9177,7 +8675,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) || ((((player_joyGetButtons & ~copy_prev_buttons_pressed) & B_BUTTON)) != 0) ); - + moveData.canLookAhead = !g_CurrentPlayer->insightaimmode; moveData.canTurnTank = 1; moveData.canNaturalTurn = !g_CurrentPlayer->insightaimmode; @@ -9209,7 +8707,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) //moveData.speedVertaUp = 0; } - + if (g_CurrentPlayer->insightaimmode && (stick_x < -60)) { moveData.aimTurnLeftSpeed = (f32) (-60 - stick_x) / FLOAT_TEN_B; @@ -9222,7 +8720,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { //moveData.aimTurnLeftSpeed = 0; } - + if (g_CurrentPlayer->insightaimmode && (stick_x > 60) ) { moveData.aimTurnRightSpeed = (f32) (stick_x - 60) / FLOAT_TEN_B; @@ -9235,14 +8733,14 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { //moveData.aimTurnRightSpeed = 0; } - + moveData.weaponBackOffset = ( ((buttons & A_BUTTON) != 0) || ((player_joyGetButtons & A_BUTTON) != 0) ) && (sp108); - + moveData.weaponForwardOffset = ( ( (((buttons & ~oldbuttons) & A_BUTTON) != 0) @@ -9253,7 +8751,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.aiming = g_CurrentPlayer->insightaimmode; moveData.zooming = g_CurrentPlayer->insightaimmode; - + if ((bondwalkItemCheckBitflags(getCurrentPlayerWeaponId(GUNRIGHT), WEAPONSTATBITFLAG_DISABLE_CROUCH)) && g_CurrentPlayer->insightaimmode) { @@ -9264,10 +8762,10 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { moveData.zoomOutFovPersec = 1.0f; } - + moveData.zoomOutFovPersec *= 2.0f; } - + if (tmpc2sticky > 0) { moveData.zoomInFovPersec = (f32) tmpc2sticky / 70.0f; @@ -9275,11 +8773,11 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { moveData.zoomInFovPersec = 1.0f; } - + moveData.zoomInFovPersec *= 2.0f; } } - + moveData.crouchDown = (bondwalkItemCheckBitflags(getCurrentPlayerWeaponId(GUNRIGHT), WEAPONSTATBITFLAG_DISABLE_CROUCH) == 0) && (g_CurrentPlayer->insightaimmode) && (player_joyGetStickY < -30); @@ -9300,13 +8798,13 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.weaponForwardOffset = 0; moveData.btap = 0; } - + if (in_tank_flag == 1 && g_CurrentPlayer->insightaimmode) { if (getCurrentPlayerWeaponId(GUNRIGHT) == ITEM_TANKSHELLS) { moveData.controlStickXRaw = 0; - + if (moveData.analogStrafe == 0) { moveData.analogStrafe = moveData.analogTurn; @@ -9318,20 +8816,20 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { moveData.tankTurnLeftSpeed = moveData.aimTurnLeftSpeed; } - + if (moveData.aimTurnRightSpeed > 0) { moveData.tankTurnRightSpeed = moveData.aimTurnRightSpeed; } } - + moveData.aimTurnLeftSpeed = 0; moveData.aimTurnRightSpeed = 0; } } moveData.triggerOn = (sp10C) - && (g_CurrentPlayer->watch_animation_state == 0) + && (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0) && ((buttons & A_BUTTON) == 0) && ((player_joyGetButtons & A_BUTTON) == 0); @@ -9395,7 +8893,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.tankTurnLeftSpeed = 1.0f; } } - + if ((buttons & (R_JPAD | R_CBUTTONS)) != 0) { if (!g_CurrentPlayer->insightaimmode) @@ -9417,12 +8915,12 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.digitalStepForward = (!g_CurrentPlayer->insightaimmode) && ((buttons & (U_JPAD | U_CBUTTONS)) ); - + moveData.digitalStepBack = (!g_CurrentPlayer->insightaimmode) && ((buttons & (D_JPAD | D_CBUTTONS))); moveData.canNaturalPitch = !g_CurrentPlayer->insightaimmode; - + if (in_tank_flag == 1) { moveData.canTurnTank = !g_CurrentPlayer->insightaimmode; @@ -9443,7 +8941,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { moveData.tankTurnLeftSpeed = 0; } - + if ((buttons & (s32)(R_JPAD | R_CBUTTONS)) != 0) { moveData.tankTurnRightSpeed = 1.0f; @@ -9453,28 +8951,28 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { moveData.tankTurnRightSpeed = 0; } - + moveData.digitalStepLeft = (!g_CurrentPlayer->insightaimmode) && ((buttons & (s32)(L_JPAD | L_CBUTTONS)) ); - + moveData.digitalStepRight = (!g_CurrentPlayer->insightaimmode) && ((buttons & (s32)(R_JPAD | R_CBUTTONS))); - + moveData.canLookAhead = !g_CurrentPlayer->insightaimmode; if ((!g_CurrentPlayer->insightaimmode) && (buttons & (U_JPAD | U_CBUTTONS)) ) { moveData.speedVertaDown = 1.0f; } - + if ((!g_CurrentPlayer->insightaimmode) && (buttons & (D_JPAD | D_CBUTTONS))) { moveData.speedVertaUp = 1.0f; } - + moveData.canNaturalTurn = !g_CurrentPlayer->insightaimmode; } - + if ((g_CurrentPlayer->insightaimmode) && (stick_y > 60)) { moveData.speedVertaDown = (f32) (stick_y - 60) / FLOAT_TEN_B; @@ -9491,7 +8989,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.speedVertaUp = 1.0f; } } - + if ((g_CurrentPlayer->insightaimmode) && (stick_x < -60)) { moveData.aimTurnLeftSpeed = (f32) (-60 - stick_x) / FLOAT_TEN_B; @@ -9500,7 +8998,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) moveData.aimTurnLeftSpeed = 1.0f; } } - + if ((g_CurrentPlayer->insightaimmode) && (stick_x > 60)) { moveData.aimTurnRightSpeed = (f32) (stick_x - 60) / FLOAT_TEN_B; @@ -9515,13 +9013,13 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) && (((buttons & ~oldbuttons) & shootButtons) != 0) ; - - moveData.weaponForwardOffset = + + moveData.weaponForwardOffset = (((buttons & ~oldbuttons) & invButtons) != 0) && ((buttons & shootButtons) == 0) ; - + moveData.aiming = g_CurrentPlayer->insightaimmode; moveData.zooming = g_CurrentPlayer->insightaimmode; @@ -9534,17 +9032,17 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { moveData.zoomOutFovPersec = 1.0f; } - + if ((buttons & (U_JPAD | U_CBUTTONS)) != 0) { moveData.zoomInFovPersec = 1.0f; } } - + moveData.crouchDown = (bondwalkItemCheckBitflags(getCurrentPlayerWeaponId(GUNRIGHT), WEAPONSTATBITFLAG_DISABLE_CROUCH) == 0) && (g_CurrentPlayer->insightaimmode) && ((buttons & (D_JPAD | D_CBUTTONS))); - + moveData.crouchUp = (bondwalkItemCheckBitflags(getCurrentPlayerWeaponId(GUNRIGHT), WEAPONSTATBITFLAG_DISABLE_CROUCH) == 0) && (g_CurrentPlayer->insightaimmode) && ((~buttons & (U_JPAD | U_CBUTTONS))); @@ -9556,7 +9054,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) && ((buttons & (R_JPAD | R_CBUTTONS))); if ( - ((((buttons & invButtons) != 0) && (((buttons & ~oldbuttons) & B_BUTTON) != 0)) + ((((buttons & invButtons) != 0) && (((buttons & ~oldbuttons) & B_BUTTON) != 0)) || ((buttons & B_BUTTON) && (((buttons & ~oldbuttons) & invButtons) != 0))) && (getCurrentPlayerWeaponId(GUNRIGHT) == ITEM_REMOTEMINE)) { @@ -9579,7 +9077,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { moveData.tankTurnLeftSpeed = moveData.aimTurnLeftSpeed; } - + if (moveData.aimTurnRightSpeed > 0) { moveData.tankTurnRightSpeed = moveData.aimTurnRightSpeed; @@ -9593,7 +9091,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } moveData.triggerOn = ((buttons & shootButtons) != 0) - && (g_CurrentPlayer->watch_animation_state == 0) + && (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0) && ((buttons & invButtons) == 0); /* 1.2 and 1.4 */ @@ -9613,16 +9111,16 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { spF4 = (struct TankRecord *)g_PlayerTankProp->obj; spF4->unkD8 = get_ammo_count_for_weapon(ITEM_TANKSHELLS); - + add_ammo_to_weapon(ITEM_TANKSHELLS, 0); bondinvRemoveItemByID(ITEM_TANKSHELLS); - + if (getCurrentPlayerWeaponId(GUNRIGHT) == ITEM_TANKSHELLS) { spF4->unkD8 += get_ammo_in_hands_magazine(GUNRIGHT); autoadvance_on_deplete_all_ammo(); } - + spF4->is_firing_tank = 0; in_tank_flag = 0; g_CurrentPlayer->speedsideways = 0; @@ -9633,8 +9131,8 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->bondshotspeed.f[i_0] = 0; } - - g_CurrentPlayer->crouchpos = 2; + + g_CurrentPlayer->crouchpos = CROUCH_STAND; } /* If Bond is standing on the tank and pressed B, enter the tank. */ else if (g_PlayerTankProp != NULL @@ -9643,7 +9141,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) && g_BondCanEnterTank) { spEC = (struct TankRecord *)g_PlayerTankProp->obj; - + bondinvAddInvItem(ITEM_TANKSHELLS); add_ammo_to_weapon(ITEM_TANKSHELLS, spEC->unkD8); spEC->unkD8 = 0; @@ -9651,8 +9149,8 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_TankTurretVerticalAngleRelated = g_TankTurretVerticalAngle / TANK_VERT_ANGLE_FACTOR; g_TankTurretAngle = spEC->turret_orientation_angle; g_TankTurretOrientationAngleRad = spEC->turret_orientation_angle; - D_80036478 = g_TankTurretOrientationAngleRad / TANK_VERT_ANGLE_RAD_FACTOR; - D_8003647C = 0; + g_TankTurretOrientationAngleDeg = g_TankTurretOrientationAngleRad / TANK_VERT_ANGLE_RAD_FACTOR; + tank_turret_turn_speed = 0; g_TankOrientationAngle = spEC->tank_orientation_angle; g_TankTurnSpeed = 0; in_tank_flag = 1; @@ -9660,7 +9158,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_CurrentPlayer->speedsideways = 0; g_CurrentPlayer->speedforwards = 0; g_CurrentPlayer->speedtheta = 0; - g_CurrentPlayer->crouchpos = 1; + g_CurrentPlayer->crouchpos = CROUCH_HALF; g_TankEnteringSitHeight = 0; g_TankEnteringSitHeightRemain = 1.0f; g_TankEnterBondHorizAngleDeg = g_CurrentPlayer->vv_theta; @@ -9669,7 +9167,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_EnterTankCoord.f[1] = g_CurrentPlayer->field_488.collision_position.f[1]; g_EnterTankCoord.f[2] = g_CurrentPlayer->field_488.collision_position.f[2]; g_TankDamagePenaltyTicks = 0; - + bondviewTankModelRotationRelated(); } else @@ -9681,7 +9179,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if (moveData.invertPitch == 0) { f32 ftemp_nostack_spE8; - + moveData.controlStickYRaw = (s32) -stick_y; moveData.analogPitch = -moveData.analogPitch; ftemp_nostack_spE8 = moveData.speedVertaDown; @@ -9701,33 +9199,33 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) || get_hands_firing_status(GUNLEFT))) { noiseRadius = 0; - + if (get_hands_firing_status(GUNRIGHT) && getCurrentPlayerNoise(GUNRIGHT) > noiseRadius) { noiseRadius = getCurrentPlayerNoise(GUNRIGHT); } - + if (get_hands_firing_status(GUNLEFT) && noiseRadius < getCurrentPlayerNoise(GUNLEFT)) { noiseRadius = getCurrentPlayerNoise(GUNLEFT); } - + chrCheckGuardsHeardSound(noiseRadius); } gunSetSightVisible(GUNSIGHTREASON_NOTAIMING, moveData.aiming); - + if (moveData.zoomOutFovPersec > 0) { camera_sniper_zoom_out(moveData.zoomOutFovPersec); } - + if (moveData.zoomInFovPersec > 0) { camera_sniper_zoom_in(moveData.zoomInFovPersec); } - if (g_CurrentPlayer->watch_animation_state == 0) + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0) { ftemp_nostack_spE0 = 60.0f; @@ -9740,11 +9238,11 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) ftemp_nostack_spE0 = 60.0f; } } - + bondviewTriggerWatchZoom(ftemp_nostack_spE0); bondviewUpdateWatchZoomIn(); } - + if (in_tank_flag == 1) { g_TankTurretTurn = 0; @@ -9762,26 +9260,26 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) else if (moveData.canTurnTank) { targetSpeed = (f32) moveData.analogStrafe / 70.0f; - + if (targetSpeed > 1.0f) { targetSpeed = 1.0f; } - + if (targetSpeed < -1.0f) { targetSpeed = -1.0f; } - + g_TankTurretTurn += DegToRad1Fact(1) * targetSpeed * g_GlobalTimerDelta; } - + if (!g_CurrentPlayer->insightaimmode) { ftemp_nostack_spD8 = 0; targetSpeed = 1.0f; ftemp_nostack_spE8 = 1.0f; - + if (moveData.canLookAhead) { ftemp_nostack_spD8 = (f32) moveData.analogWalk / 70.0f; @@ -9794,7 +9292,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { ftemp_nostack_spD8 = -1.0f; } - + if (ftemp_nostack_spD8 > 1.0f) { ftemp_nostack_spD8 = 1.0f; @@ -9803,7 +9301,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { ftemp_nostack_spD8 = -1.0f; } - + unadjustedTargetSpeed = ftemp_nostack_spD8 * TANK_MAX_SPEED; targetSpeed = unadjustedTargetSpeed; @@ -9821,7 +9319,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) unadjustedTargetSpeed = ((((((targetSpeed - g_CurrentPlayer->speedforwards) / 4.0f) / TANK_MAX_SPEED) + 0.5f) * ftemp_nostack_spE8 * FLOAT_TEN_A) / 60.0f); g_CurrentPlayer->speedforwards += (unadjustedTargetSpeed) * g_GlobalTimerDelta; - + if (targetSpeed < g_CurrentPlayer->speedforwards) { g_CurrentPlayer->speedforwards = targetSpeed; @@ -9832,7 +9330,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) unadjustedTargetSpeed = ((((((g_CurrentPlayer->speedforwards - targetSpeed) / 4.0f) / TANK_MAX_SPEED) + 0.5f) * ftemp_nostack_spE8 * -FLOAT_TEN_A) / 60.0f); g_CurrentPlayer->speedforwards += (unadjustedTargetSpeed) * g_GlobalTimerDelta; - + if (g_CurrentPlayer->speedforwards < targetSpeed) { g_CurrentPlayer->speedforwards = targetSpeed; @@ -9856,12 +9354,12 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { bondviewUpdateSpeedSideways(0); } - + if (moveData.canTurnTank) // ?? not sure why this tank property is used here. Is the name wrong? { g_CurrentPlayer->speedsideways = (f32) moveData.analogStrafe / 70.0f; } - + if (moveData.digitalStepForward) { bondviewUpdateSpeedForwards(1); @@ -9875,11 +9373,11 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { bondviewUpdateSpeedForwards(0); } - + if (moveData.canLookAhead) { g_CurrentPlayer->speedforwards = (f32) moveData.analogWalk / 70.0f; - + if (moveData.analogWalk > 60) { g_CurrentPlayer->speedmaxtime60 += g_ClockTimer; @@ -9894,7 +9392,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->speedforwards = 1; } - + if (g_CurrentPlayer->speedforwards < -1.0f) { g_CurrentPlayer->speedforwards = -1.0f; @@ -9904,20 +9402,20 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->speedsideways = 1; } - + if (g_CurrentPlayer->speedsideways < -1) { g_CurrentPlayer->speedsideways = -1; } - + g_CurrentPlayer->speedforwards *= 1.08f; g_CurrentPlayer->speedforwards *= g_CurrentPlayer->speedboost; - + if ((moveData.canLookAhead == 0) && (moveData.digitalStepForward == 0)) { g_CurrentPlayer->speedmaxtime60 = 0; } - + if (moveData.rLeanLeft) { currentPlayerSetSwayTarget(-1); @@ -9930,7 +9428,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { currentPlayerSetSwayTarget(0); } - + if (moveData.crouchDown) { currentPlayerAdjustCrouchPos(-2); @@ -9947,7 +9445,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->speedboost += (SPEED_TICK_ADJUST * g_GlobalTimerDelta); } - + if (g_CurrentPlayer->speedboost > SPEED_RUN_MAX) { g_CurrentPlayer->speedboost = SPEED_RUN_MAX; @@ -9959,32 +9457,32 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->speedboost -= (SPEED_TICK_ADJUST * g_GlobalTimerDelta); } - + if (g_CurrentPlayer->speedboost < SPEED_REGULAR_MAX) { g_CurrentPlayer->speedboost = SPEED_REGULAR_MAX; } } - if (g_CurrentPlayer->watch_animation_state == 0) + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0) { spC4 = -4.0f; - + if (g_CurrentPlayer->lookaheadcentreenabled) { spC0 = g_CurrentPlayer->field_488.current_tile_ptr; spBC = 300.0f; - + // prop, f32 *collision_radius, f32 *height, f32 *always_30 bondviewGetCollisionRadius(g_CurrentPlayer->prop, &spA0.f[0], &spA0.f[2], &spA0.f[1]); - + spAC.f[0] = g_CurrentPlayer->field_488.collision_position.f[0] + (g_CurrentPlayer->field_488.theta_transform.f[0] * 300.0f); spAC.f[1] = g_CurrentPlayer->field_488.collision_position.f[1]; spAC.f[2] = g_CurrentPlayer->field_488.collision_position.f[2] + (g_CurrentPlayer->field_488.theta_transform.f[2] * 300.0f); - + sub_GAME_7F0B1CC4(); - - if (stanTestLineUnobstructed(&spC0, g_CurrentPlayer->field_488.collision_position.f[0], g_CurrentPlayer->field_488.collision_position.f[2], spAC.f[0], spAC.f[2], 0x1000, spA0.f[2], spA0.f[1], 0, 1.0f)) + + if (stanTestLineUnobstructed(&spC0, g_CurrentPlayer->field_488.collision_position.f[0], g_CurrentPlayer->field_488.collision_position.f[2], spAC.f[0], spAC.f[2], CDTYPE_CLOSEDDOORS, spA0.f[2], spA0.f[1], 0, 1.0f)) { spAC.f[1] = bondviewYPositionRelated(spC0, spAC.f[0], spAC.f[2]); } @@ -10000,7 +9498,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if (spBC > 0) { ftemp_nostack_spC8 = spAC.f[1] - g_CurrentPlayer->stanHeight; - + if ((ftemp_nostack_spC8 > -300.0f) && (ftemp_nostack_spC8 < 500.0f)) { spC4 = ((atan2f(ftemp_nostack_spC8, spBC) * 360.0f) / M_TAU_F) + -4.0f; @@ -10020,7 +9518,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if ((g_CurrentPlayer->movecentrerelease) && (moveData.analogWalk < 40) && (moveData.analogWalk > -40)) { - g_CurrentPlayer->movecentrerelease = 0; + g_CurrentPlayer->movecentrerelease = FALSE; } if (in_tank_flag == 0) @@ -10029,25 +9527,25 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->field_104 = 0; g_CurrentPlayer->field_10C = 1; - g_CurrentPlayer->automovecentre = 0; + g_CurrentPlayer->automovecentre = FALSE; } else { if (moveData.disableLookAhead) { - g_CurrentPlayer->automovecentre = 0; + g_CurrentPlayer->automovecentre = FALSE; } else if (g_CurrentPlayer->automovecentreenabled) { if ((moveData.canLookAhead) && ((moveData.analogWalk > 60) || (moveData.analogWalk < -60))) { - g_CurrentPlayer->automovecentre = 1; + g_CurrentPlayer->automovecentre = TRUE; } - + if (( g_CurrentPlayer->automovecentre) && (( ((spC4 + 5.0f) < g_CurrentPlayer->vv_verta)) || (g_CurrentPlayer->vv_verta < (spC4 + -FLOAT_TEN_A))) - && (g_CurrentPlayer->movecentrerelease == 0)) + && (g_CurrentPlayer->movecentrerelease == FALSE)) { g_CurrentPlayer->field_104 = 1; } @@ -10060,11 +9558,11 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) || (moveData.analogWalk < -60) ) && ( ( ((spC4 + 5.0f) < g_CurrentPlayer->vv_verta)) || (g_CurrentPlayer->vv_verta < (spC4 + -FLOAT_TEN_A)) - ) && (g_CurrentPlayer->movecentrerelease == 0)) + ) && (g_CurrentPlayer->movecentrerelease == FALSE)) { g_CurrentPlayer->field_104 = 1; } - + g_CurrentPlayer->field_10C = 0; } } @@ -10074,7 +9572,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if (in_tank_flag == 0) { ftemp_nostack_spB8 = (g_CurrentPlayer->speedverta * g_CurrentPlayer->speedverta * 0.5f) / 0.05f; - + if ((spC4 + ftemp_nostack_spB8) < g_CurrentPlayer->vv_verta) { bondviewCurrentPlayerUpdateSpeedVerta(1.0f); @@ -10087,9 +9585,9 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { bondviewCurrentPlayerUpdateSpeedVerta(0); } - + ftemp_nostack_spB8 = g_CurrentPlayer->vv_verta + (2.0f * (g_CurrentPlayer->speedverta * g_GlobalTimerDelta)); - + if ((spC4 < g_CurrentPlayer->vv_verta) && (spC4 < ftemp_nostack_spB8)) { g_CurrentPlayer->vv_verta = ftemp_nostack_spB8; @@ -10102,7 +9600,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->vv_verta = spC4; g_CurrentPlayer->speedverta = 0; - + if (g_CurrentPlayer->field_10C == 0) { g_CurrentPlayer->field_104 = 0; @@ -10116,7 +9614,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { ftemp_nostack_sp98 = viGetFovY() / 60.0f; ftemp_nostack_sp94 = (f32) moveData.analogPitch / 70.0f; - + if (ftemp_nostack_sp94 > 1) { ftemp_nostack_sp94 = 1; @@ -10125,7 +9623,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { ftemp_nostack_sp94 = -1; } - + if (ftemp_nostack_sp94 >= 0) { ftemp_nostack_sp94 *= ftemp_nostack_sp94; @@ -10134,34 +9632,34 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { ftemp_nostack_sp94 *= -ftemp_nostack_sp94; } - + g_CurrentPlayer->speedverta = -ftemp_nostack_sp94 * ftemp_nostack_sp98; } else if (moveData.speedVertaDown > 0) { bondviewCurrentPlayerUpdateSpeedVerta(moveData.speedVertaDown); - + if ((moveData.canLookAhead) && ((moveData.analogWalk > 60) || (moveData.analogWalk < 60))) { - g_CurrentPlayer->movecentrerelease = 1; + g_CurrentPlayer->movecentrerelease = TRUE; } } else if (moveData.speedVertaUp > 0) { bondviewCurrentPlayerUpdateSpeedVerta(-moveData.speedVertaUp); - + if ((moveData.canLookAhead) && ((moveData.analogWalk > 60) || (moveData.analogWalk < 60))) { - g_CurrentPlayer->movecentrerelease = 1; + g_CurrentPlayer->movecentrerelease = TRUE; } } else { bondviewCurrentPlayerUpdateSpeedVerta(0); } - + g_CurrentPlayer->vv_verta += g_CurrentPlayer->speedverta * g_GlobalTimerDelta * 3.5f; - + if ((in_tank_flag == 1) && (g_EnterTankAudioState == TANK_RUN_STATE_RUNNING) && (g_CurrentPlayer->vv_verta < -20.0f)) { g_CurrentPlayer->vv_verta = -20.0f; @@ -10173,7 +9671,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { ftemp_nostack_sp8C = viGetFovY(); ftemp_nostack_sp84 = (f32) moveData.analogTurn / 70.0f; - + if (ftemp_nostack_sp84 > 1) { ftemp_nostack_sp84 = 1; @@ -10182,7 +9680,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { ftemp_nostack_sp84 = -1; } - + if (ftemp_nostack_sp84 >= 0) { ftemp_nostack_sp84 *= ftemp_nostack_sp84; @@ -10248,7 +9746,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } canCycleWeapons = 1; - + if ((getPlayerCount() >= 2) && (get_scenario() == 2) && (bondinvIsAliveWithFlag())) { canCycleWeapons = 0; @@ -10269,17 +9767,17 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if (moveData.canSwivelGun) { - g_CurrentPlayer->controldef = 0; + g_CurrentPlayer->controldef = CONTROLLER_CONFIG_HONEY; } else if (moveData.canManualAim) { - g_CurrentPlayer->controldef = 2; + g_CurrentPlayer->controldef = CONTROLLER_CONFIG_KISSY; } - if (g_CurrentPlayer->controldef == 0) + if (g_CurrentPlayer->controldef == CONTROLLER_CONFIG_HONEY) { gunSetAimType(0); - + if (moveData.canAutoAim && redirect_get_BONDdata_autoaim_x() && g_CurrentPlayer->autoaim_target_x @@ -10306,7 +9804,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) sub_GAME_7F067F58(sp70, ftemp_nostack_sp78, MAX_AIMLOCK_SPEED_DEFAULT); } - else if (g_CurrentPlayer->controldef == 2) + else if (g_CurrentPlayer->controldef == CONTROLLER_CONFIG_KISSY) { gunSetAimType(0); sub_GAME_7F067FBC(((f32) moveData.controlStickXRaw * 0.65f) / 80.0f, ((f32) moveData.controlStickYRaw * 0.65f) / 80.0f); @@ -10318,7 +9816,7 @@ void bondviewProcessInput(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) /** * Perfect Dark playerTickDamageAndHealth - * + * * NTSC address 7F083FC8. * NTSC-J address 7F0845D8. * EU address 7F08406C. @@ -10338,7 +9836,7 @@ void bondviewPlayerTickDamageAndHealth(void) countdownTimerSetVisible(8, 0); g_CurrentPlayer->damagetype = (s32)(bondviewGetCurrentPlayerHealth() * 8.0f); - + if (g_CurrentPlayer->damagetype >= 8) { g_CurrentPlayer->damagetype = 7; @@ -10354,7 +9852,7 @@ void bondviewPlayerTickDamageAndHealth(void) #ifdef VERSION_US if ( - (g_DamageTypes[g_CurrentPlayer->damagetype].field_0x8 >= g_CurrentPlayer->damageshowtime) + (g_DamageTypes[g_CurrentPlayer->damagetype].field_0x8 >= g_CurrentPlayer->damageshowtime) || (g_DamageTypes[g_CurrentPlayer->damagetype].flashEndFrame >= g_CurrentPlayer->damageshowtime)) { if (!g_CurrentPlayer->bonddead) @@ -10362,7 +9860,7 @@ void bondviewPlayerTickDamageAndHealth(void) #else if (!g_CurrentPlayer->bonddead && ( - (g_DamageTypes[g_CurrentPlayer->damagetype].field_0x8 >= g_CurrentPlayer->damageshowtime) + (g_DamageTypes[g_CurrentPlayer->damagetype].field_0x8 >= g_CurrentPlayer->damageshowtime) || (g_DamageTypes[g_CurrentPlayer->damagetype].flashEndFrame >= g_CurrentPlayer->damageshowtime))) { #endif @@ -10379,7 +9877,7 @@ void bondviewPlayerTickDamageAndHealth(void) f32 totalframes; f32 flashfullframe; #endif - + flashdoneframes = g_CurrentPlayer->damageshowtime - g_DamageTypes[g_CurrentPlayer->damagetype].flashStartFrame; flashfullframe = g_DamageTypes[g_CurrentPlayer->damagetype].flashFullFrame; totalframes = g_DamageTypes[g_CurrentPlayer->damagetype].flashEndFrame - g_DamageTypes[g_CurrentPlayer->damagetype].flashStartFrame; @@ -10403,7 +9901,7 @@ void bondviewPlayerTickDamageAndHealth(void) } #endif - if (g_CurrentPlayer->watch_animation_state == 0) + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x0) { #if defined(VERSION_US) g_CurrentPlayer->damageshowtime += g_ClockTimer; @@ -10424,7 +9922,7 @@ void bondviewPlayerTickDamageAndHealth(void) { g_CurrentPlayer->damageshowtime = -1; currentPlayerSetFadeColour(0xFF, 0xFF, 0xFF, 0); - + if (!g_CurrentPlayer->bonddead) { gunSetGunAmmoVisible(GUNAMMOREASON_DAMAGE, TRUE); @@ -10443,7 +9941,7 @@ void bondviewPlayerTickDamageAndHealth(void) if (g_CurrentPlayer->healthshowtime == 0) { g_CurrentPlayer->healthDamageType = (s32)(bondviewGetCurrentPlayerHealth() * 8.0f); - + if (g_CurrentPlayer->healthDamageType >= 8) { g_CurrentPlayer->healthDamageType = 7; @@ -10459,7 +9957,7 @@ void bondviewPlayerTickDamageAndHealth(void) if (!g_CurrentPlayer->bonddead) { - if ((g_CurrentPlayer->healthshowtime >= g_HealthDamageTypes[g_CurrentPlayer->healthDamageType].updateStartFrame) + if ((g_CurrentPlayer->healthshowtime >= g_HealthDamageTypes[g_CurrentPlayer->healthDamageType].updateStartFrame) && (g_HealthDamageTypes[g_CurrentPlayer->healthDamageType].updateEndFrame >= g_CurrentPlayer->healthshowtime)) { g_CurrentPlayer->apparenthealth = g_CurrentPlayer->oldhealth; @@ -10483,7 +9981,7 @@ void bondviewPlayerTickDamageAndHealth(void) } else { - g_CurrentPlayer->healthshowtime = -1; + g_CurrentPlayer->healthshowtime = -1; } } else @@ -10534,23 +10032,23 @@ void bondviewPlayerTickExplode(void) /** * NTSC Address 0x7F084648. * NTSC-J address 0x7F084CF8. - * + * * Met by Saint Jon The Archangel in the writhing pits of hell, the beast was * pinned, prone on the floor. He had taken many forms throughout the ages. * From the creator of man to the far reaches of the universe, his perpetual * reincarnations reigned throughout space and time... until now. His form was * weak, the opposition strong. The time for atonement had finally come. - * + * * Battered, torn, exposed, the beast slacked his gaping maw. - * + * * "I'm sorry, Jon" he whispered. - * + * * The archangel raised his flaming blade. - * + * * "You are forgiven, Garfield" - * + * * And the beast exhaled his last. - * + * * 10 months of off and on work to match. * Thanks Trevor. * - Ben Burns @@ -10600,7 +10098,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) bondviewPlayerStopAudioForPause(); } - if (g_CurrentPlayer->watch_animation_state) + if (g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0x0) { bondviewWatchAnimationTick(); } @@ -10626,12 +10124,12 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) // boost sideways f32 shotboost_sideways; // sp388 f32 shotboost_norm; // sp384 - + // Assigning these two variables is done in Perfect Dark bmove0f0cba88. - shotboost_forward = + shotboost_forward = (-g_CurrentPlayer->bondshotspeed.f[0] * g_CurrentPlayer->vv_sintheta) + (g_CurrentPlayer->bondshotspeed.f[2] * g_CurrentPlayer->vv_costheta); - shotboost_sideways = + shotboost_sideways = (-g_CurrentPlayer->bondshotspeed.f[0] * g_CurrentPlayer->vv_costheta) - (g_CurrentPlayer->bondshotspeed.f[2] * g_CurrentPlayer->vv_sintheta); @@ -10651,7 +10149,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->bondshotspeed.f[i] -= ((0.06666667f * g_GlobalTimerDelta * g_CurrentPlayer->bondshotspeed.f[i]) / shotboost_norm); - + if (g_CurrentPlayer->bondshotspeed.f[i] < 0.0f) { g_CurrentPlayer->bondshotspeed.f[i] = 0.0f; @@ -10661,7 +10159,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->bondshotspeed.f[i] -= ((0.06666667f * g_GlobalTimerDelta * g_CurrentPlayer->bondshotspeed.f[i]) / shotboost_norm); - + if (g_CurrentPlayer->bondshotspeed.f[i] > 0.0f) { g_CurrentPlayer->bondshotspeed.f[i] = 0.0f; @@ -10690,15 +10188,15 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) struct coord3d tank_collision_pt2; f32 tank_collision_dx; f32 tank_collision_dz; - + tankChangeInAngle = DegToRad1Fact(g_CurrentPlayer->speedtheta * g_GlobalTimerDelta) * 3.5f; curTankAngleRad = g_TankOrientationAngle + tankChangeInAngle; - + if (curTankAngleRad >= M_TAU_F) { curTankAngleRad -= M_TAU_F; } - + if (curTankAngleRad < 0.0f) { curTankAngleRad += M_TAU_F; @@ -10727,12 +10225,12 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) f32 sp30C; f32 sp308; f32 sp304; - + sp31C = -1; //sp31C: scope within this block, used throughout sp304 = -1; //sp304: scope within this block, used throughout getCollisionEdge_maybe(&tank_collision_pt1, &tank_collision_pt2); - + tank_collision_dx = (tank_collision_pt2.f[0] - tank_collision_pt1.f[0]); tank_collision_dz = (tank_collision_pt2.f[2] - tank_collision_pt1.f[2]); @@ -10749,7 +10247,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) sp210 = ((g_CurrentPlayer->field_488.collision_position.f[0] - check_collision_p2.f[0]) * sp324) + ((g_CurrentPlayer->field_488.collision_position.f[2] - check_collision_p2.f[2]) * sp320); - + if (sp210 < 0.0f) { sp210 = -sp210; @@ -10758,7 +10256,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } // sp20C: very short lived variable - sp20C = + sp20C = ((g_CurrentPlayer->field_488.collision_position.f[0] - tank_collision_pt1.f[0]) * sp324) + ((g_CurrentPlayer->field_488.collision_position.f[2] - tank_collision_pt1.f[2]) * sp320); @@ -10766,7 +10264,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { sp31C = sp210 - sp20C; } - + tank_collision_dx = check_collision_p2.f[0] - check_collision_p1.f[0]; tank_collision_dz = check_collision_p2.f[2] - check_collision_p1.f[2]; @@ -10780,7 +10278,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) sp308 = -tank_collision_dx; // sp1F8 -> sp210: short lived variable - sp210 = + sp210 = ((g_CurrentPlayer->field_488.collision_position.f[0] - check_collision_p2.f[0]) * sp30C) + ((g_CurrentPlayer->field_488.collision_position.f[2] - check_collision_p2.f[2]) * sp308); @@ -10799,7 +10297,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) sp1E4 = ((g_CurrentPlayer->field_488.collision_position.f[0] - tank_collision_pt2.f[0]) * sp30C) + ((g_CurrentPlayer->field_488.collision_position.f[2] - tank_collision_pt2.f[2]) * sp308); - + if (sp1E4 < sp1FC) { sp1FC = sp1E4; @@ -10809,21 +10307,21 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { sp304 = sp210 - sp1FC; } - + if ((sp304 >= 0.0f) && ((sp304 < sp31C) || (sp31C < 0.0f))) { sp324 = sp30C; sp320 = sp308; sp31C = sp304; } - + if (sp31C >= 0.0f) { move_offset.f[0] = sp31C * sp324 * 1.01f; move_offset.f[2] = sp31C * sp320 * 1.01f; - + bondviewCalcUpdatePlayerCollision(&move_offset, 1); - + move_offset.f[0] = 0.0f; move_offset.f[2] = 0.0f; @@ -10860,12 +10358,12 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } ftemp = (DegToRad1Fact(g_CurrentPlayer->speedtheta * 3.5f) * 4.0f) + g_TankTurretAngle; - + if (ftemp < 0.0f) { ftemp += M_TAU_F; } - + if (ftemp >= M_TAU_F) { ftemp -= M_TAU_F; @@ -10882,30 +10380,30 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) for (i_1=0; i_1= M_TAU_F) { g_TankTurretOrientationAngleRad -= M_TAU_F; - D_80036478 = g_TankTurretOrientationAngleRad / (1.0f - TANKUPDATEROTATION_SCALE); + g_TankTurretOrientationAngleDeg = g_TankTurretOrientationAngleRad / (1.0f - TANKUPDATEROTATION_SCALE); } - + if (g_TankTurretOrientationAngleRad < 0.0f) { g_TankTurretOrientationAngleRad += M_TAU_F; - D_80036478 = g_TankTurretOrientationAngleRad / (1.0f - TANKUPDATEROTATION_SCALE); + g_TankTurretOrientationAngleDeg = g_TankTurretOrientationAngleRad / (1.0f - TANKUPDATEROTATION_SCALE); } - + if (bondviewCallTankCollisionStatus( &g_CurrentPlayer->field_488.collision_position, g_CurrentPlayer->field_488.current_tile_ptr, g_TankOrientationAngle) == 0) { g_TankTurretOrientationAngleRad = sp354; - D_80036478 = g_TankTurretOrientationAngleRad / (1.0f - TANKUPDATEROTATION_SCALE); + g_TankTurretOrientationAngleDeg = g_TankTurretOrientationAngleRad / (1.0f - TANKUPDATEROTATION_SCALE); g_TankTurretAngle = sp354; } @@ -10916,9 +10414,9 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) struct coord3d tank_move_offset; Mtxf sp2B4; f32 stack_padding_4; - + temp_tank = (struct TankRecord *)g_PlayerTankProp->obj; - + tank_move_offset.f[1] = 0.0f; tank_move_offset.f[0] = g_TankModelPositionOffset.f[0]; tank_move_offset.f[2] = g_TankModelPositionOffset.f[2]; @@ -10926,9 +10424,9 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) matrix_4x4_set_rotation_around_y(tankChangeInAngle, &sp2B4); mtx4RotateVecInPlace(&sp2B4, &tank_move_offset); bondviewTankModelRotationRelated(); - + if (0) { } - + tank_move_offset.f[1] = 0.0f; tank_move_offset.f[0] = g_TankModelPositionOffset.f[0] - tank_move_offset.f[0]; tank_move_offset.f[2] = g_TankModelPositionOffset.f[2] - tank_move_offset.f[2]; @@ -10942,11 +10440,11 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if (g_ClockTimer > 0) { for (i=0; ivv_theta = ( g_TankOrientationAngle + @@ -10987,7 +10485,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { f32 sp2AC; f32 stack_padding_15; - + sp2AC = 0.0f; if (currentPlayerGetCrouchPos() == CROUCH_SQUAT) { @@ -11013,7 +10511,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) CHR_OBJ_ACCEL_SPEED_FACTOR, CHR_OBJ_MAXSPEED); } - + if (sp2AC == g_CurrentPlayer->ducking_height_offset) { g_CurrentPlayer->field_A4 = 0.0f; @@ -11051,12 +10549,12 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) tank_obj = g_PlayerTankProp->obj; matrix_4x4_set_rotation_around_y(M_TAU_F - g_TankOrientationAngle, &sp268); matrix_scalar_multiply(tank_obj->model->scale, &sp268); - + sp25C.f[0] = g_TankModelPositionOffset.f[0]; sp25C.f[1] = g_TankModelPositionOffset.f[1]; sp25C.f[2] = g_TankModelPositionOffset.f[2]; mtx4RotateVecInPlace(&sp268, (f32*)&sp25C); - + sp25C.f[0] += tank_obj->runtime_pos.f[0]; sp25C.f[1] += tank_obj->runtime_pos.f[1]; sp25C.f[2] += tank_obj->runtime_pos.f[2]; @@ -11076,9 +10574,9 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_TankEnteringSitHeightRemain = (cosf(g_TankEnteringSitHeight * M_TAU_F * 0.5f) + 1.0f) * 0.5f; - g_CurrentPlayer->vv_verta = - (g_TankEnteringSitHeightRemain * g_TankEnterBondVertAngleDeg) - + ((1.0f - g_TankEnteringSitHeightRemain) * sp254); + g_CurrentPlayer->vv_verta = + (g_TankEnteringSitHeightRemain * g_TankEnterBondVertAngleDeg) + + ((1.0f - g_TankEnteringSitHeightRemain) * sp254); ftemp_5 = sp258 - g_TankEnterBondHorizAngleDeg; if (ftemp_5 > 180.0f) @@ -11092,7 +10590,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_CurrentPlayer->vv_theta = (g_TankEnteringSitHeightRemain * g_TankEnterBondHorizAngleDeg) - + ((1.0f - g_TankEnteringSitHeightRemain) * sp258); + + ((1.0f - g_TankEnteringSitHeightRemain) * sp258); if (g_CurrentPlayer->vv_theta >= 360.0f) { @@ -11105,9 +10603,9 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } move_offset.f[0] = ( - (g_TankEnteringSitHeightRemain * g_EnterTankCoord.f[0]) + + (g_TankEnteringSitHeightRemain * g_EnterTankCoord.f[0]) + ((1.0f - g_TankEnteringSitHeightRemain) * sp25C.f[0]) - ) - + ) - g_CurrentPlayer->field_488.collision_position.f[0]; move_offset.f[1] = 0.0f; @@ -11115,7 +10613,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) move_offset.f[2] = ( (g_TankEnteringSitHeightRemain * g_EnterTankCoord.f[2]) + ((1.0f - g_TankEnteringSitHeightRemain) * sp25C.f[2]) - ) - + ) - g_CurrentPlayer->field_488.collision_position.f[2]; } @@ -11142,7 +10640,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { sndPlaySfx(g_musicSfxBufferPtr, TRUCK_START_SFX, &g_TankSfxState[0]); } - + sndCreatePostEvent(g_TankSfxState[0], 8, 0x61A8); g_TankEngineSfxVolume = 0x61A8; } @@ -11156,10 +10654,10 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) f32 tank_scaled_speedforwards; f32 tank_scaled_speedtheta; f32 tank_vertical_angle; - + tank_scaled_speedforwards = g_CurrentPlayer->speedforwards / TANK_MAX_SPEED; tank_scaled_speedtheta = g_CurrentPlayer->speedtheta / 0.3f; - + if (tank_scaled_speedforwards < 0.0f) { tank_scaled_speedforwards = -tank_scaled_speedforwards; @@ -11181,7 +10679,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { tank_engine_utilization_percent = 1.0f; } - + if (g_TankSfxState[1] == NULL) { if (lvlGetControlsLockedFlag() == 0) @@ -11203,7 +10701,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { phi_a2 = (s32) ((((tank_engine_utilization_percent - 0.15f) * 12767.0f) / 0.75f) + 20000.0f); } - + sndCreatePostEvent(g_TankSfxState[1], 8, phi_a2); } } @@ -11265,7 +10763,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_TankTurretVerticalAngle = g_TankTurretVerticalAngleRelated * (1.0f - TANKTURRETVERTICALANGLERELATED_SCALE); } - + } g_CurrentPlayer->bondbreathing -= (0.750f * g_GlobalTimerDelta) / 2700.0f; @@ -11274,14 +10772,14 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->bondbreathing = 0.0f; } - + bondviewMoveAnimationTick(0.0f, 0.0f, 0.0f); move_offset.f[0] += g_CurrentPlayer->speedforwards * sinf(M_TAU_F - g_TankOrientationAngle) * g_GlobalTimerDelta; move_offset.f[2] += g_CurrentPlayer->speedforwards * cosf(M_TAU_F - g_TankOrientationAngle) * g_GlobalTimerDelta; bondviewCalcUpdatePlayerCollision(&move_offset, 1); - + if ((g_EnterTankAudioState == TANK_RUN_STATE_RUNNING) && (g_ClockTimer > 0)) { f32 calc_x; @@ -11298,16 +10796,16 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) #endif } #endif - + calc_x = (g_CurrentPlayer->field_488.collision_position.f[0] - g_CurrentPlayer->bondprevpos.f[0]) / g_GlobalTimerDelta; calc_z = (g_CurrentPlayer->field_488.collision_position.f[2] - g_CurrentPlayer->bondprevpos.f[2]) / g_GlobalTimerDelta; calc_speedforwards = sqrtf((calc_x * calc_x) + (calc_z * calc_z)); - + if (g_CurrentPlayer->speedforwards < 0.0f) { calc_speedforwards = -calc_speedforwards; } - + g_CurrentPlayer->speedforwards = calc_speedforwards; } } @@ -11375,19 +10873,19 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } - ftemp_7 = (g_BondMoveAnimationSetup[1].unk0C * 0.5f * g_GlobalTimerDelta); + ftemp_7 = (g_BondMoveAnimationSetup[1].speedMultiplier * 0.5f * g_GlobalTimerDelta); sp3A0 = g_CurrentPlayer->speedsideways * ftemp_7; /* The following is similar to a block of Perfect Dark bwalk0f0c69b8. */ - + ftemp_26 = -g_CurrentPlayer->swaytarget * g_CurrentPlayer->field_488.theta_transform.f[2]; ftemp_11 = g_CurrentPlayer->swaytarget * g_CurrentPlayer->field_488.theta_transform.f[0]; - + sp220 = (ftemp_26) - g_CurrentPlayer->swayoffset0; sp21C = (ftemp_11) - g_CurrentPlayer->swayoffset2; - + dist = (sp220 * sp220) + (sp21C * sp21C); if (dist >= 100.0f) @@ -11414,7 +10912,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) } maxspeed = speedforwards; - + #if defined(VERSION_EU) if (maxspeed < speedsideways && 1) #else @@ -11441,7 +10939,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->bondbreathing -= (0.750f - maxspeed) * g_GlobalTimerDelta / 2700.0f; } - + if (g_CurrentPlayer->bondbreathing < 0.0f) { g_CurrentPlayer->bondbreathing = 0.0f; @@ -11450,48 +10948,48 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { g_CurrentPlayer->bondbreathing = 1.0f; } - + // perfect dark call: bmove0f0cc654 bondviewMoveAnimationTick(maxspeed, g_CurrentPlayer->speedforwards, sp3A0); headpos_x = g_CurrentPlayer->headpos.f[0]; headpos_z = g_CurrentPlayer->headpos.f[2]; - move_offset.f[0] += + move_offset.f[0] += ( (headpos_z * g_CurrentPlayer->field_488.theta_transform.f[0]) - (headpos_x * g_CurrentPlayer->field_488.theta_transform.f[2]) ) * g_GlobalTimerDelta; - move_offset.f[2] += + move_offset.f[2] += ( (headpos_z * g_CurrentPlayer->field_488.theta_transform.f[2]) + (headpos_x * g_CurrentPlayer->field_488.theta_transform.f[0]) ) * g_GlobalTimerDelta; - + move_offset.f[0] += sp220; move_offset.f[2] += sp21C; start_collision_pos_x = g_CurrentPlayer->field_488.collision_position.f[0]; start_collision_pos_z = g_CurrentPlayer->field_488.collision_position.f[2]; sp200 = g_CurrentPlayer->field_488.current_tile_ptr; - + if (get_debug_fast_bond_flag()) { - move_offset.f[0] += + move_offset.f[0] += ( (g_CurrentPlayer->field_488.theta_transform.f[0] * g_CurrentPlayer->speedforwards) - (g_CurrentPlayer->field_488.theta_transform.f[2] * g_CurrentPlayer->speedsideways) ) * g_GlobalTimerDelta * 10.0f; - move_offset.f[2] += + move_offset.f[2] += ( (g_CurrentPlayer->field_488.theta_transform.f[2] * g_CurrentPlayer->speedforwards) + (g_CurrentPlayer->field_488.theta_transform.f[0] * g_CurrentPlayer->speedsideways) ) * g_GlobalTimerDelta * 10.0f; } - + bondviewCalcUpdatePlayerCollision(&move_offset, (g_CurrentPlayer->swaytarget == 0.0f)); stanTileDistanceRelated( @@ -11500,7 +10998,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) start_collision_pos_z, g_CurrentPlayer->field_488.collision_radius * 1.16f, &curLocus); - + /* almost never true */ if (stanGetLocusCount(&curLocus) != 0) { @@ -11526,7 +11024,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_CurrentPlayer->field_488.collision_position.f[2], g_CurrentPlayer->field_488.collision_radius, &curLocus); - + /* almost always true */ if (stanGetLocusCount(&curLocus) == 0) { @@ -11537,7 +11035,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_CurrentPlayer->field_488.collision_radius * 0.990099f, &curLocus); } - + /* almost never true */ if (stanGetLocusCount(&curLocus)) { @@ -11551,23 +11049,23 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) f32 sp250; f32 sp310; f32 sp314; - + sp168 = bondCollision.bondCollision.f[0] - bondCollision.sp190.f[0]; sp16C = bondCollision.sp190.f[2] - bondCollision.bondCollision.f[2]; nd = sqrtf((sp16C * sp16C) + (sp168 * sp168)); - + sp168 = sp168 / nd; sp16C = sp16C / nd; sp164 = ((start_collision_pos_x - bondCollision.bondCollision.f[0]) * sp16C) + ((start_collision_pos_z - bondCollision.bondCollision.f[2]) * sp168); - - sp2B0 = + + sp2B0 = (((start_collision_pos_x + move_offset.f[0]) - bondCollision.bondCollision.f[0]) * sp16C) + (((start_collision_pos_z + move_offset.f[2]) - bondCollision.bondCollision.f[2]) * sp168); - + if ((sp164 * sp2B0) <= 0.0f) { shorten = 0.0f; @@ -11602,7 +11100,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) if (sp2A8 > 0.0f) { f32 sp318; - + sp318 = (1.0f - shorten) * sp2A8; sp390 = sp318 * 0.25f; @@ -11631,7 +11129,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) g_CurrentPlayer->field_488.collision_position.f[0] = start_collision_pos_x; g_CurrentPlayer->field_488.collision_position.f[2] = start_collision_pos_z; g_CurrentPlayer->field_488.current_tile_ptr = sp200; - + bondviewCalcUpdatePlayerCollision(&move_offset, (g_CurrentPlayer->swaytarget == 0.0f)); } } @@ -11653,17 +11151,17 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) f32 breathing; f32 sp14C_temp; f32 weapon_speed_verta; - + sp14C_temp = g_CurrentPlayer->speedtheta; weapon_speed_verta = (g_CurrentPlayer->speedverta / 0.7f) + (g_CurrentPlayer->field_A4 / CHR_OBJ_MAXSPEED); - + /* Following matches the end of Perfect Dark bwalk0f0c69b8 */ - breathing = bheadGetBreathingValue(); - + breathing = bheadGetBreathingValue(); + if (weapon_speed_verta > 1.0f) { weapon_speed_verta = 1.0f; @@ -11672,12 +11170,12 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { weapon_speed_verta = -1.0f; } - + if (g_CurrentPlayer->headanim == 1) { breathing *= 1.2f; } - + // Perfect Dark call bgun0f09d8dc gunSetBondWeaponSway(breathing, maxspeed, weapon_speed_verta, sp14C_temp); @@ -11701,20 +11199,20 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) struct ModelNode_BoundingBoxRecord *sp130; Mtxf spF0; struct coord3d spE4; - s32 stack_padding_13; - s32 i_4; - s32 stemp; - void *stack_padding_8; + s32 stack_padding_13; + s32 i_4; + s32 stemp; + void *stack_padding_8; struct rect4f spB4_tank_collision_bounds; // roomids s32 sp94[8]; s32 stanlineret; s16 *lookup_index; - + sp140_tank_as_TankRecord = ((struct TankRecord *)g_PlayerTankProp->obj); sp138_tank_as_ObjectRecord = (struct ObjectRecord*)g_PlayerTankProp->obj; sp130 = (struct ModelNode_BoundingBoxRecord *)((struct ModelNode *)sp138_tank_as_ObjectRecord->model->obj->Switches)->Child->Data; - + sp140_tank_as_TankRecord->is_firing_tank = (getCurrentPlayerWeaponId(GUNRIGHT) == ITEM_TANKSHELLS) && get_hands_firing_status(GUNRIGHT); @@ -11728,7 +11226,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) spE4.f[0] = -g_TankModelPositionOffset.f[0]; spE4.f[1] = -g_TankModelPositionOffset.f[1]; spE4.f[2] = -g_TankModelPositionOffset.f[2]; - + mtx4RotateVecInPlace(&spF0, &spE4); spE4.f[0] += g_CurrentPlayer->field_488.collision_position.f[0]; @@ -11752,14 +11250,14 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) { sp140_tank_as_TankRecord->unkD0 = (sp140_tank_as_TankRecord->unkD0 * TANK_UNKD0_SCALE) + sp140_tank_as_TankRecord->stan_y; } - + ftemp_12 = (sp140_tank_as_TankRecord->unkD0 * (1.0f - TANK_UNKD0_SCALE)); spE4.f[1] = ftemp_12 - (chrpropBBOXGetYmin(sp130) * sp138_tank_as_ObjectRecord->model->scale) + 4.0f; matrix_4x4_copy(&spF0, &sp138_tank_as_ObjectRecord->mtx); - + sp138_tank_as_ObjectRecord->runtime_pos.f[0] = sp138_tank_as_ObjectRecord->prop->pos.f[0] = spE4.f[0]; sp138_tank_as_ObjectRecord->runtime_pos.f[1] = sp138_tank_as_ObjectRecord->prop->pos.f[1] = spE4.f[1]; sp138_tank_as_ObjectRecord->runtime_pos.f[2] = sp138_tank_as_ObjectRecord->prop->pos.f[2] = spE4.f[2]; @@ -11768,7 +11266,7 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) chrobjCollisionRelated(sp138_tank_as_ObjectRecord); bondviewGetTankCollisionBounds(&spB4_tank_collision_bounds, &g_CurrentPlayer->field_488.collision_position, g_TankOrientationAngle); chraiGetPropRoomIds(sp138_tank_as_ObjectRecord->prop, &sp94); - + // update num_obj_position_data_entries roomGetProps(&sp94); @@ -11786,11 +11284,11 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) struct coord3d sp70; struct ChrRecord *sp6C; f32 stack_padding_28; - + sp7C = 1; sp6C = prop->chr; chrpropGetCollisionBounds(prop, &sp80_collision_radius, &sp88_collision_bound_height, &sp84_collision_bound_z); - + if (chrpropTestPointInPolygon(&prop->pos, &spB4_tank_collision_bounds, 4)) { sp7C = 0; @@ -11827,17 +11325,17 @@ void MoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) sp70.f[0] = sp138_tank_as_ObjectRecord->runtime_pos.f[0]; sp70.f[1] = prop->pos.f[1]; sp70.f[2] = sp138_tank_as_ObjectRecord->runtime_pos.f[2]; - + chrlvExplosionDamage(prop->chr, &sp70, 3.0f, 1); - } + } } else if (prop->type == PROP_TYPE_OBJ) { struct rect4f *sp64; s32 sp60; - + chraiGetCollisionBoundsWithoutY(prop, &sp64, &sp60); - if ((sp60 > 0) && sub_GAME_7F0446B8(sp64, sp60, &spB4_tank_collision_bounds, 4)) + if ((sp60 > 0) && chrobjTestPolygonsTouchingOrOverlap2D(sp64, sp60, &spB4_tank_collision_bounds, 4)) { // Explode destroyable props when the tank touches them maybe_detonate_object_and_its_children(prop, 10000.0f, &prop->obj->runtime_pos, 0x20, get_cur_playernum()); @@ -11884,32 +11382,32 @@ void bondviewFrozenMoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) property_pos2 = g_DefaultFrozenPlayerPos2; property_offset = g_DefaultFrozenPlayerOffset; offset = g_DefaultFrozenMoveOffset; - + bondviewPlayerTickDamageAndHealth(); bondviewPlayerTickExplode(); bondviewProcessInput(0, 0, 0, 0); bondviewApplyVertaTheta(); bondviewMoveAnimationTick(0, 0, 0); - + if ((g_ForceBondMoveOffset.f[0] != 0.0f) || (g_ForceBondMoveOffset.f[2] != 0.0f)) { offset.f[0] += g_ForceBondMoveOffset.f[0] * g_GlobalTimerDelta; offset.f[2] += g_ForceBondMoveOffset.f[2] * g_GlobalTimerDelta; } - + offset.f[0] += ((g_CurrentPlayer->headpos.f[2] * g_CurrentPlayer->field_488.theta_transform.f[0]) - (g_CurrentPlayer->headpos.f[0] * g_CurrentPlayer->field_488.theta_transform.f[2])) * g_GlobalTimerDelta; offset.f[2] += ((g_CurrentPlayer->headpos.f[2] * g_CurrentPlayer->field_488.theta_transform.f[2]) + (g_CurrentPlayer->headpos.f[0] * g_CurrentPlayer->field_488.theta_transform.f[0])) * g_GlobalTimerDelta; - + bondviewCalcUpdatePlayerCollision(&offset, 1); bondviewUpdatePlayerY(0, 0.0f); bondviewUpdatePlayerCollisionPositionFields(); - - if ((g_CameraMode == CAMERAMODE_FP_NOINPUT) || (g_CameraMode == CAMERAMODE_FP) || (g_CameraMode == CAMERAMODE_UNK10)) + + if ((g_CameraMode == CAMERAMODE_FP_NOINPUT) || (g_CameraMode == CAMERAMODE_FP) || (g_CameraMode == CAMERAMODE_FADE_TO_TITLE)) { currentPlayerSetField00(0); return; } - + bondviewFrozenCameraTick(buttons, oldbuttons, &property_pos, &property_pos2, &property_offset, &room_pointer_tile, &stan_walk_start); currentPlayerSetField00(1); bondviewSetCurrentPlayerPosition(&property_pos, &property_pos2, &property_offset, room_pointer_tile, &stan_walk_start); @@ -11919,7 +11417,7 @@ void bondviewFrozenMoveBond(s8 stick_x, s8 stick_y, u16 buttons, u16 oldbuttons) s16 getWidth320or440(void) { - if (camera_8003642C != 0) + if (cameraBufferToggle != 0) { return SCREEN_WIDTH_440; } @@ -11929,7 +11427,7 @@ s16 getWidth320or440(void) s16 getHeight330or240(void) { - if (camera_8003642C != 0) + if (cameraBufferToggle != 0) { return SCREEN_HEIGHT_330; } @@ -11944,7 +11442,7 @@ s16 bondviewGetCurrentPlayerViewportWidth(void) return VIEWPORT_WIDTH_4P; } - if (camera_8003642C != 0) + if (cameraBufferToggle != 0) { return SCREEN_WIDTH_440; } @@ -11990,7 +11488,7 @@ s16 bondviewGetCurrentPlayerViewportHeight(void) return VIEWPORT_HEIGHT_4P; } - if (camera_8003642C != 0) + if (cameraBufferToggle != 0) { if (cur_player_get_screen_setting() == SCREEN_SIZE_WIDESCREEN) { @@ -12059,7 +11557,7 @@ s16 bondviewGetCurrentPlayerViewportUly(void) return VIEWPORT_ULY_4P_PLAYER_34; } - if (camera_8003642C != 0) + if (cameraBufferToggle != 0) { if (cur_player_get_screen_setting() == SCREEN_SIZE_WIDESCREEN) { @@ -12101,12 +11599,12 @@ s16 bondviewGetCurrentPlayerViewportUly(void) * Arguments are passed into MoveBond or bondviewFrozenMoveBond. * Checks if necessary to call bossReturnTitleStage. * Set player->buttons_pressed to arg2. - * + * * Address 0x7F086F9C (VERSION_US). * Address 0x7F0870BC (VERSION_EU). * Address 0x7F087668 (VERSION_JP). */ -void bondviewMovePlayerUpdateViewport(s8 arg0, s8 arg1, u16 arg2) +void bondviewMovePlayerUpdateViewport(s8 stick_x, s8 stick_y, u16 buttons) { #ifdef VERSION_EU f32 faspect; @@ -12120,35 +11618,35 @@ void bondviewMovePlayerUpdateViewport(s8 arg0, s8 arg1, u16 arg2) // the fov.... viSetFovY(FOV_Y_F); - if (camera_80036430 != 0) + if (cameraFrameCounter1 != 0) { - if ((camera_80036430 >= 4) && (resolution != 0) && (viGetFrameBuf2() == (u8*)(cfb_16[1]))) + if ((cameraFrameCounter1 >= 4) && (resolution != 0) && (viGetFrameBuf2() == (u8*)(cfb_16[1]))) { - camera_8003642C = 1; - camera_80036430 = 0; + cameraBufferToggle = 1; + cameraFrameCounter1 = 0; } else { - camera_80036430 += 1; + cameraFrameCounter1 += 1; } } else { - if (camera_80036434 != 0) + if (cameraFrameCounter2 != 0) { - if ((camera_80036434 >= 4) && (viGetFrameBuf2() == (u8*)(cfb_16[0]))) + if ((cameraFrameCounter2 >= 4) && (viGetFrameBuf2() == (u8*)(cfb_16[0]))) { - camera_8003642C = 0; - camera_80036434 = 0; + cameraBufferToggle = 0; + cameraFrameCounter2 = 0; } else { - camera_80036434 += 1; + cameraFrameCounter2 += 1; } } } - if ((camera_8003642C != 0) && (viGetFrameBuf2() == (u8*)(cfb_16[1]))) + if ((cameraBufferToggle != 0) && (viGetFrameBuf2() == (u8*)(cfb_16[1]))) { viSetFrameBuf2((u8 *) resolution); } @@ -12162,12 +11660,12 @@ void bondviewMovePlayerUpdateViewport(s8 arg0, s8 arg1, u16 arg2) { faspect = (f32) bondviewGetCurrentPlayerViewportWidth() / (f32) bondviewGetCurrentPlayerViewportHeight(); } - - if (camera_8003642C == 0) + + if (cameraBufferToggle == 0) { faspect *= EU_CAMERA_8003642C_ASPECT; } - + set_cur_player_aspect(faspect); viSetAspect(faspect); @@ -12208,30 +11706,30 @@ void bondviewMovePlayerUpdateViewport(s8 arg0, s8 arg1, u16 arg2) if (1); #endif - if ((g_CameraMode == CAMERAMODE_NONE) || ((g_CameraMode == CAMERAMODE_FP) && (D_800364B0 != 0)) || (g_CameraMode == CAMERAMODE_UNK10)) + if ((g_CameraMode == CAMERAMODE_NONE) || ((g_CameraMode == CAMERAMODE_FP) && (is_timer_active != 0)) || (g_CameraMode == CAMERAMODE_FADE_TO_TITLE)) { if (get_cur_playernum() == 0) { mission_timer += g_ClockTimer; } - MoveBond(arg0, arg1, arg2, (u16) g_CurrentPlayer->buttons_pressed); + MoveBond(stick_x, stick_y, buttons, (u16) g_CurrentPlayer->buttons_pressed); } else { - bondviewFrozenMoveBond(arg0, arg1, arg2, (u16) g_CurrentPlayer->buttons_pressed); + bondviewFrozenMoveBond(stick_x, stick_y, buttons, (u16) g_CurrentPlayer->buttons_pressed); } - + #if defined(BUGFIX_R1) watch_time_0 += jpD_800484D0; #else // VERSION_US watch_time_0 += speedgraphframes; #endif - + if (stop_time_flag != 0) { - if ((lvlGetControlsLockedFlag() == 0) && ((arg2 & ~(g_CurrentPlayer->buttons_pressed) & (CONT_A | B_BUTTON | Z_TRIG | START_BUTTON | CONT_R | CONT_L)))) + if ((lvlGetControlsLockedFlag() == 0) && ((buttons & ~(g_CurrentPlayer->buttons_pressed) & (CONT_A | B_BUTTON | Z_TRIG | START_BUTTON | CONT_R | CONT_L)))) { stop_time_flag = 2; @@ -12257,15 +11755,15 @@ void bondviewMovePlayerUpdateViewport(s8 arg0, s8 arg1, u16 arg2) bossReturnTitleStage(); } } - + if (g_CameraAfterCinema) { sub_GAME_7F07B1A4(); } - + if (g_CurrentPlayer->bonddead) { - if (g_CurrentPlayer->redbloodfinished == 0) + if (g_CurrentPlayer->redbloodfinished == FALSE) { currentPlayerEquipWeaponWrapper(GUNLEFT, 0); currentPlayerEquipWeaponWrapper(GUNRIGHT, 0); @@ -12276,18 +11774,18 @@ void bondviewMovePlayerUpdateViewport(s8 arg0, s8 arg1, u16 arg2) }; } - if (g_CurrentPlayer->redbloodfinished && g_CurrentPlayer->deathanimfinished && (D_80036510 >= CAMERAMODE_SWIRL)) + if (g_CurrentPlayer->redbloodfinished && g_CurrentPlayer->deathanimfinished && (camera_mode >= CAMERAMODE_SWIRL)) { bossRunTitleStage(); } } - if ((g_CameraMode == CAMERAMODE_UNK10) && currentPlayerIsFadeComplete()) + if ((g_CameraMode == CAMERAMODE_FADE_TO_TITLE) && currentPlayerIsFadeComplete()) { bossRunTitleStage(); } - g_CurrentPlayer->buttons_pressed = arg2; + g_CurrentPlayer->buttons_pressed = buttons; } @@ -12296,11 +11794,11 @@ void bondviewMovePlayerUpdateViewport(s8 arg0, s8 arg1, u16 arg2) */ void bondviewUpdateCurrentRoomPosition(s32 arg0) { - sub_GAME_7F0BCA34(arg0, &g_CurrentPlayer->current_model_pos); + getRoomPositionScaledByIndex(arg0, &g_CurrentPlayer->current_model_pos); g_CurrentPlayer->current_room_pos.f[0] = g_CurrentPlayer->current_model_pos.f[0] * get_room_data_float1(); g_CurrentPlayer->current_room_pos.f[1] = g_CurrentPlayer->current_model_pos.f[1] * get_room_data_float1(); g_CurrentPlayer->current_room_pos.f[2] = g_CurrentPlayer->current_model_pos.f[2] * get_room_data_float1(); - sub_GAME_7F0BC624(arg0); + setPlayerRoomField(arg0); } @@ -12448,11 +11946,11 @@ s32 sub_GAME_7F087A08(s32 arg0) { temp_a1 = (temp_v1 + 0x38); sp4C.unk4 = (?32) D_80036830.unk4; sp4C.unk8 = (?32) D_80036830.unk8; - if (g_CurrentPlayer->bonddead == 0) + if (g_CurrentPlayer->bonddead == FALSE) { // Node 3 sp58 = temp_v1; - sub_GAME_7F09C7C4(temp_a0, temp_a1, &sp4C); + explosionScreenShake(temp_a0, temp_a1, &sp4C); } else { @@ -12560,7 +12058,7 @@ glabel sub_GAME_7F087A08 /* 0BC5EC 7F087ABC 8C4900D8 */ lw $t1, 0xd8($v0) /* 0BC5F0 7F087AC0 55200006 */ bnezl $t1, .L7F087ADC /* 0BC5F4 7F087AC4 44806000 */ mtc1 $zero, $f12 -/* 0BC5F8 7F087AC8 0FC271F1 */ jal sub_GAME_7F09C7C4 +/* 0BC5F8 7F087AC8 0FC271F1 */ jal explosionScreenShake /* 0BC5FC 7F087ACC AFA30058 */ sw $v1, 0x58($sp) /* 0BC600 7F087AD0 10000005 */ b .L7F087AE8 /* 0BC604 7F087AD4 8FA30058 */ lw $v1, 0x58($sp) @@ -12753,7 +12251,7 @@ glabel sub_GAME_7F087A08 /* 0BA60C 7F087C1C 8C4900D8 */ lw $t1, 0xd8($v0) /* 0BA610 7F087C20 55200006 */ bnezl $t1, .L7F087C3C /* 0BA614 7F087C24 44806000 */ mtc1 $zero, $f12 -/* 0BA618 7F087C28 0FC26F36 */ jal sub_GAME_7F09C7C4 +/* 0BA618 7F087C28 0FC26F36 */ jal explosionScreenShake /* 0BA61C 7F087C2C AFA30058 */ sw $v1, 0x58($sp) /* 0BA620 7F087C30 10000005 */ b .L7F087C48 /* 0BA624 7F087C34 8FA30058 */ lw $v1, 0x58($sp) @@ -12884,7 +12382,7 @@ s32 seems_to_load_cuff_microcode(s32 arg0, void *arg1, s32 arg2) { s32 phi_return; // Node 0 - sp40 = getSelectedFolderBond(); + sp40 = fileGetBondForCurrentFolder(); temp_a3 = (arg2 * 4); temp_a0 = (arg1->unk8 + temp_a3); phi_a0 = temp_a0; @@ -13013,7 +12511,7 @@ glabel seems_to_load_cuff_microcode /* 0BC748 7F087C18 AFBF0014 */ sw $ra, 0x14($sp) /* 0BC74C 7F087C1C AFA40048 */ sw $a0, 0x48($sp) /* 0BC750 7F087C20 AFA5004C */ sw $a1, 0x4c($sp) -/* 0BC754 7F087C24 0FC0755B */ jal getSelectedFolderBond +/* 0BC754 7F087C24 0FC0755B */ jal fileGetBondForCurrentFolder /* 0BC758 7F087C28 AFA60050 */ sw $a2, 0x50($sp) /* 0BC75C 7F087C2C 8FAE004C */ lw $t6, 0x4c($sp) /* 0BC760 7F087C30 8FA30050 */ lw $v1, 0x50($sp) @@ -14361,9 +13859,9 @@ glabel sub_GAME_7F087E74 /* 0BABB0 7F0881C0 460A2202 */ mul.s $f8, $f4, $f10 /* 0BABB4 7F0881C4 44054000 */ mfc1 $a1, $f8 /* 0BABB8 7F0881C8 0FC1625E */ jal matrix_4x4_set_position_and_rotation_around_y -/* 0BABBC 7F0881CC 00000000 */ nop +/* 0BABBC 7F0881CC 00000000 */ nop /* 0BABC0 7F0881D0 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 0BABC4 7F0881D4 00000000 */ nop +/* 0BABC4 7F0881D4 00000000 */ nop /* 0BABC8 7F0881D8 00402025 */ move $a0, $v0 /* 0BABCC 7F0881DC 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place /* 0BABD0 7F0881E0 27A50178 */ addiu $a1, $sp, 0x178 @@ -14406,7 +13904,7 @@ glabel sub_GAME_7F087E74 /* 0BAC64 7F088274 C44A0258 */ lwc1 $f10, 0x258($v0) /* 0BAC68 7F088278 46085383 */ div.s $f14, $f10, $f8 /* 0BAC6C 7F08827C 460E003C */ c.lt.s $f0, $f14 -/* 0BAC70 7F088280 00000000 */ nop +/* 0BAC70 7F088280 00000000 */ nop /* 0BAC74 7F088284 45020003 */ bc1fl .L7F088294 /* 0BAC78 7F088288 C4660000 */ lwc1 $f6, ($v1) /* 0BAC7C 7F08828C 46000386 */ mov.s $f14, $f0 @@ -14506,14 +14004,14 @@ glabel sub_GAME_7F087E74 /* 0BADF0 7F088400 00006812 */ mflo $t5 /* 0BADF4 7F088404 468042A0 */ cvt.s.w $f10, $f8 /* 0BADF8 7F088408 14600002 */ bnez $v1, .L7F088414 -/* 0BADFC 7F08840C 00000000 */ nop +/* 0BADFC 7F08840C 00000000 */ nop /* 0BAE00 7F088410 0007000D */ break 7 .L7F088414: /* 0BAE04 7F088414 2401FFFF */ li $at, -1 /* 0BAE08 7F088418 14610004 */ bne $v1, $at, .L7F08842C /* 0BAE0C 7F08841C 3C018000 */ lui $at, 0x8000 /* 0BAE10 7F088420 14810002 */ bne $a0, $at, .L7F08842C -/* 0BAE14 7F088424 00000000 */ nop +/* 0BAE14 7F088424 00000000 */ nop /* 0BAE18 7F088428 0006000D */ break 6 .L7F08842C: /* 0BAE1C 7F08842C 01A3001A */ div $zero, $t5, $v1 @@ -14523,14 +14021,14 @@ glabel sub_GAME_7F087E74 /* 0BAE2C 7F08843C 00007810 */ mfhi $t7 /* 0BAE30 7F088440 46065103 */ div.s $f4, $f10, $f6 /* 0BAE34 7F088444 14600002 */ bnez $v1, .L7F088450 -/* 0BAE38 7F088448 00000000 */ nop +/* 0BAE38 7F088448 00000000 */ nop /* 0BAE3C 7F08844C 0007000D */ break 7 .L7F088450: /* 0BAE40 7F088450 2401FFFF */ li $at, -1 /* 0BAE44 7F088454 14610004 */ bne $v1, $at, .L7F088468 /* 0BAE48 7F088458 3C018000 */ li $at, 0x80000000 # -0.000000 /* 0BAE4C 7F08845C 14410002 */ bne $v0, $at, .L7F088468 -/* 0BAE50 7F088460 00000000 */ nop +/* 0BAE50 7F088460 00000000 */ nop /* 0BAE54 7F088464 0006000D */ break 6 .L7F088468: /* 0BAE58 7F088468 3C014270 */ li $at, 0x42700000 # 60.000000 @@ -14548,14 +14046,14 @@ glabel sub_GAME_7F087E74 /* 0BAE88 7F088498 4610903C */ c.lt.s $f18, $f16 /* 0BAE8C 7F08849C 46009306 */ mov.s $f12, $f18 /* 0BAE90 7F0884A0 14600002 */ bnez $v1, .L7F0884AC -/* 0BAE94 7F0884A4 00000000 */ nop +/* 0BAE94 7F0884A4 00000000 */ nop /* 0BAE98 7F0884A8 0007000D */ break 7 .L7F0884AC: /* 0BAE9C 7F0884AC 2401FFFF */ li $at, -1 /* 0BAEA0 7F0884B0 14610004 */ bne $v1, $at, .L7F0884C4 /* 0BAEA4 7F0884B4 3C018000 */ li $at, 0x80000000 # -0.000000 /* 0BAEA8 7F0884B8 15A10002 */ bne $t5, $at, .L7F0884C4 -/* 0BAEAC 7F0884BC 00000000 */ nop +/* 0BAEAC 7F0884BC 00000000 */ nop /* 0BAEB0 7F0884C0 0006000D */ break 6 .L7F0884C4: /* 0BAEB4 7F0884C4 3C014270 */ li $at, 0x42700000 # 60.000000 @@ -14594,29 +14092,29 @@ glabel sub_GAME_7F087E74 /* 0BAF38 7F088548 46026300 */ add.s $f12, $f12, $f2 .L7F08854C: /* 0BAF3C 7F08854C 4610603C */ c.lt.s $f12, $f16 -/* 0BAF40 7F088550 00000000 */ nop +/* 0BAF40 7F088550 00000000 */ nop /* 0BAF44 7F088554 4503FFFD */ bc1tl .L7F08854C /* 0BAF48 7F088558 46026300 */ add.s $f12, $f12, $f2 .L7F08855C: /* 0BAF4C 7F08855C 4610503C */ c.lt.s $f10, $f16 -/* 0BAF50 7F088560 00000000 */ nop +/* 0BAF50 7F088560 00000000 */ nop /* 0BAF54 7F088564 45020007 */ bc1fl .L7F088584 /* 0BAF58 7F088568 4610303C */ c.lt.s $f6, $f16 /* 0BAF5C 7F08856C 46027380 */ add.s $f14, $f14, $f2 .L7F088570: /* 0BAF60 7F088570 4610703C */ c.lt.s $f14, $f16 -/* 0BAF64 7F088574 00000000 */ nop +/* 0BAF64 7F088574 00000000 */ nop /* 0BAF68 7F088578 4503FFFD */ bc1tl .L7F088570 /* 0BAF6C 7F08857C 46027380 */ add.s $f14, $f14, $f2 /* 0BAF70 7F088580 4610303C */ c.lt.s $f6, $f16 .L7F088584: -/* 0BAF74 7F088584 00000000 */ nop +/* 0BAF74 7F088584 00000000 */ nop /* 0BAF78 7F088588 45020007 */ bc1fl .L7F0885A8 /* 0BAF7C 7F08858C 8F380008 */ lw $t8, 8($t9) /* 0BAF80 7F088590 46020000 */ add.s $f0, $f0, $f2 .L7F088594: /* 0BAF84 7F088594 4610003C */ c.lt.s $f0, $f16 -/* 0BAF88 7F088598 00000000 */ nop +/* 0BAF88 7F088598 00000000 */ nop /* 0BAF8C 7F08859C 4503FFFD */ bc1tl .L7F088594 /* 0BAF90 7F0885A0 46020000 */ add.s $f0, $f0, $f2 /* 0BAF94 7F0885A4 8F380008 */ lw $t8, 8($t9) @@ -14709,12 +14207,12 @@ glabel sub_GAME_7F087E74 /* 0BB0E0 7F0886F0 0FC16144 */ jal matrix_4x4_multiply_in_place /* 0BB0E4 7F0886F4 27A5004C */ addiu $a1, $sp, 0x4c /* 0BB0E8 7F0886F8 0FC16443 */ jal matrix_4x4_7F058C64 -/* 0BB0EC 7F0886FC 00000000 */ nop +/* 0BB0EC 7F0886FC 00000000 */ nop /* 0BB0F0 7F088700 27A4004C */ addiu $a0, $sp, 0x4c /* 0BB0F4 7F088704 0FC16451 */ jal matrix_4x4_f32_to_s32 /* 0BB0F8 7F088708 8FA50048 */ lw $a1, 0x48($sp) /* 0BB0FC 7F08870C 0FC1644C */ jal matrix_4x4_7F058C88 -/* 0BB100 7F088710 00000000 */ nop +/* 0BB100 7F088710 00000000 */ nop /* 0BB104 7F088714 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 /* 0BB108 7F088718 8D8C8BC0 */ lw $t4, %lo(g_CurrentPlayer)($t4) /* 0BB10C 7F08871C 8FA401F8 */ lw $a0, 0x1f8($sp) @@ -14722,7 +14220,7 @@ glabel sub_GAME_7F087E74 /* 0BB114 7F088724 38660005 */ xori $a2, $v1, 5 /* 0BB118 7F088728 2CC60001 */ sltiu $a2, $a2, 1 /* 0BB11C 7F08872C 14C00003 */ bnez $a2, .L7F08873C -/* 0BB120 7F088730 00000000 */ nop +/* 0BB120 7F088730 00000000 */ nop /* 0BB124 7F088734 3866000C */ xori $a2, $v1, 0xc /* 0BB128 7F088738 2CC60001 */ sltiu $a2, $a2, 1 .L7F08873C: @@ -14737,14 +14235,14 @@ glabel sub_GAME_7F087E74 /* 0BB14C 7F08875C 0FC2300F */ jal bondviewTransformManyPosToViewMatrix /* 0BB150 7F088760 85E5000E */ lh $a1, 0xe($t7) /* 0BB154 7F088764 0FC1644C */ jal matrix_4x4_7F058C88 -/* 0BB158 7F088768 00000000 */ nop +/* 0BB158 7F088768 00000000 */ nop .L7F08876C: /* 0BB15C 7F08876C 8FBF002C */ lw $ra, 0x2c($sp) .L7F088770: /* 0BB160 7F088770 8FA201F8 */ lw $v0, 0x1f8($sp) /* 0BB164 7F088774 27BD01F8 */ addiu $sp, $sp, 0x1f8 /* 0BB168 7F088778 03E00008 */ jr $ra -/* 0BB16C 7F08877C 00000000 */ nop +/* 0BB16C 7F08877C 00000000 */ nop ) #endif @@ -15048,7 +14546,7 @@ glabel sub_GAME_7F088618 /* 0BB1F0 7F088800 0FC28A1C */ jal sub_GAME_7F0A3330 /* 0BB1F4 7F088804 26242120 */ addiu $a0, $s1, 0x2120 /* 0BB1F8 7F088808 0FC2F2A4 */ jal dynAllocateMatrix -/* 0BB1FC 7F08880C 00000000 */ nop +/* 0BB1FC 7F08880C 00000000 */ nop /* 0BB200 7F088810 0FC2F2A4 */ jal dynAllocateMatrix /* 0BB204 7F088814 AFA200BC */ sw $v0, 0xbc($sp) /* 0BB208 7F088818 3C018003 */ lui $at, %hi(D_800364CC) # $at, 0x8003 @@ -15226,6 +14724,7 @@ glabel jpt_mpspawntype .word mp_spawntype_intro_anim .word mp_spawntype_handcuff .word mp_spawntype_intro_camera +.size jpt_mpspawntype, . - jpt_mpspawntype glabel D_800552AC .word 0xb8d1b717 /*-0.000099999997*/ @@ -15525,6 +15024,7 @@ glabel jpt_mpspawntype .word mp_spawntype_intro_anim .word mp_spawntype_handcuff .word mp_spawntype_intro_camera +.size jpt_mpspawntype, . - jpt_mpspawntype glabel D_800552AC .word 0xb8d1b717 /*-0.000099999997*/ @@ -15547,7 +15047,7 @@ glabel mp_respawn_handler /* 0BB478 7F088A88 0FC1E51B */ jal init_player_BONDdata /* 0BB47C 7F088A8C 8E104C48 */ lw $s0, %lo(g_CurrentSetup+8)($s0) /* 0BB480 7F088A90 0FC1E64E */ jal bondviewPlayerSpawnRelated -/* 0BB484 7F088A94 00000000 */ nop +/* 0BB484 7F088A94 00000000 */ nop /* 0BB488 7F088A98 3C118007 */ lui $s1, %hi(g_CurrentPlayer) # $s1, 0x8007 /* 0BB48C 7F088A9C 26318BC0 */ addiu $s1, %lo(g_CurrentPlayer) # addiu $s1, $s1, -0x7440 /* 0BB490 7F088AA0 8E290000 */ lw $t1, ($s1) @@ -15574,7 +15074,7 @@ glabel mp_respawn_handler /* 0BB4E4 7F088AF4 0FC22ADC */ jal bondviewClearUpperTextDisplayFlag /* 0BB4E8 7F088AF8 2404FFFF */ li $a0, -1 /* 0BB4EC 7F088AFC 0FC26669 */ jal getPlayerCount -/* 0BB4F0 7F088B00 00000000 */ nop +/* 0BB4F0 7F088B00 00000000 */ nop /* 0BB4F4 7F088B04 28410002 */ slti $at, $v0, 2 /* 0BB4F8 7F088B08 14200008 */ bnez $at, .L7F088B2C /* 0BB4FC 7F088B0C 3C098007 */ lui $t1, %hi(startpadcount) # $t1, 0x8007 @@ -15582,7 +15082,7 @@ glabel mp_respawn_handler /* 0BB504 7F088B14 59200006 */ blezl $t1, .L7F088B30 /* 0BB508 7F088B18 00001825 */ move $v1, $zero /* 0BB50C 7F088B1C 0FC1E45C */ jal bondviewGetRandomSpawnPadIndex -/* 0BB510 7F088B20 00000000 */ nop +/* 0BB510 7F088B20 00000000 */ nop /* 0BB514 7F088B24 10000002 */ b .L7F088B30 /* 0BB518 7F088B28 00401825 */ move $v1, $v0 .L7F088B2C: @@ -15616,7 +15116,7 @@ glabel mp_respawn_handler /* 0BB584 7F088B94 468084A0 */ cvt.s.w $f18, $f16 /* 0BB588 7F088B98 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 0BB58C 7F088B9C 44812000 */ mtc1 $at, $f4 -/* 0BB590 7F088BA0 00000000 */ nop +/* 0BB590 7F088BA0 00000000 */ nop /* 0BB594 7F088BA4 46049480 */ add.s $f18, $f18, $f4 .L7F088BA8: /* 0BB598 7F088BA8 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -15628,7 +15128,7 @@ glabel mp_respawn_handler /* 0BB5B0 7F088BC0 3C018005 */ lui $at, %hi(D_80055288) # $at, 0x8005 /* 0BB5B4 7F088BC4 27A5004C */ addiu $a1, $sp, 0x4c /* 0BB5B8 7F088BC8 460C4002 */ mul.s $f0, $f8, $f12 -/* 0BB5BC 7F088BCC 00000000 */ nop +/* 0BB5BC 7F088BCC 00000000 */ nop /* 0BB5C0 7F088BD0 460A0402 */ mul.s $f16, $f0, $f10 /* 0BB5C4 7F088BD4 E7A00048 */ swc1 $f0, 0x48($sp) /* 0BB5C8 7F088BD8 460C8103 */ div.s $f4, $f16, $f12 @@ -15726,19 +15226,19 @@ glabel mp_respawn_handler /* 0BB730 7F088D40 00290821 */ addu $at, $at, $t1 /* 0BB734 7F088D44 8C29AE64 */ lw $t1, %lo(jpt_mpspawntype)($at) /* 0BB738 7F088D48 01200008 */ jr $t1 -/* 0BB73C 7F088D4C 00000000 */ nop +/* 0BB73C 7F088D4C 00000000 */ nop mp_spawntype_spawn: /* 0BB740 7F088D50 10000024 */ b .L7F088DE4 /* 0BB744 7F088D54 2610000C */ addiu $s0, $s0, 0xc mp_spawntype_weapon: /* 0BB748 7F088D58 0FC2FFA8 */ jal check_ramrom_flags -/* 0BB74C 7F088D5C 00000000 */ nop +/* 0BB74C 7F088D5C 00000000 */ nop /* 0BB750 7F088D60 8E0A000C */ lw $t2, 0xc($s0) /* 0BB754 7F088D64 144A000A */ bne $v0, $t2, .L7F088D90 -/* 0BB758 7F088D68 00000000 */ nop +/* 0BB758 7F088D68 00000000 */ nop /* 0BB75C 7F088D6C 8E050008 */ lw $a1, 8($s0) /* 0BB760 7F088D70 04A00005 */ bltz $a1, .L7F088D88 -/* 0BB764 7F088D74 00000000 */ nop +/* 0BB764 7F088D74 00000000 */ nop /* 0BB768 7F088D78 0FC23221 */ jal bondinvAddDoublesInvItem /* 0BB76C 7F088D7C 8E040004 */ lw $a0, 4($s0) /* 0BB770 7F088D80 10000018 */ b .L7F088DE4 @@ -15751,10 +15251,10 @@ mp_spawntype_weapon: /* 0BB784 7F088D94 26100010 */ addiu $s0, $s0, 0x10 mp_spawntype_ammo: /* 0BB788 7F088D98 0FC2FFA8 */ jal check_ramrom_flags -/* 0BB78C 7F088D9C 00000000 */ nop +/* 0BB78C 7F088D9C 00000000 */ nop /* 0BB790 7F088DA0 8E0B000C */ lw $t3, 0xc($s0) /* 0BB794 7F088DA4 144B0004 */ bne $v0, $t3, .L7F088DB8 -/* 0BB798 7F088DA8 00000000 */ nop +/* 0BB798 7F088DA8 00000000 */ nop /* 0BB79C 7F088DAC 8E040004 */ lw $a0, 4($s0) /* 0BB7A0 7F088DB0 0FC1A631 */ jal give_cur_player_ammo /* 0BB7A4 7F088DB4 8E050008 */ lw $a1, 8($s0) @@ -15834,14 +15334,14 @@ glabel sub_GAME_7F088CD8 /* 0BD838 7F088D08 AFB00038 */ sw $s0, 0x38($sp) /* 0BD83C 7F088D0C 24010036 */ li $at, 54 /* 0BD840 7F088D10 14410130 */ bne $v0, $at, .L7F0891D4 -/* 0BD844 7F088D14 3C108003 */ lui $s0, %hi(D_8003643C) -/* 0BD848 7F088D18 2610643C */ addiu $s0, %lo(D_8003643C) # addiu $s0, $s0, 0x643c +/* 0BD844 7F088D14 3C108003 */ lui $s0, %hi(credits_state) +/* 0BD848 7F088D18 2610643C */ addiu $s0, %lo(credits_state) # addiu $s0, $s0, 0x643c /* 0BD84C 7F088D1C 8E0E0000 */ lw $t6, ($s0) /* 0BD850 7F088D20 24010001 */ li $at, 1 -/* 0BD854 7F088D24 3C0F8003 */ lui $t7, %hi(D_80036440) +/* 0BD854 7F088D24 3C0F8003 */ lui $t7, %hi(credits_pointer) /* 0BD858 7F088D28 55C1012B */ bnel $t6, $at, .L7F0891D8 /* 0BD85C 7F088D2C 8FBF005C */ lw $ra, 0x5c($sp) -/* 0BD860 7F088D30 8DEF6440 */ lw $t7, %lo(D_80036440)($t7) +/* 0BD860 7F088D30 8DEF6440 */ lw $t7, %lo(credits_pointer)($t7) /* 0BD864 7F088D34 3C028003 */ lui $v0, %hi(camera_80036438) /* 0BD868 7F088D38 24426438 */ addiu $v0, %lo(camera_80036438) # addiu $v0, $v0, 0x6438 /* 0BD86C 7F088D3C 11E00125 */ beqz $t7, .L7F0891D4 @@ -15858,7 +15358,7 @@ glabel sub_GAME_7F088CD8 /* 0BD898 7F088D68 0C00112B */ jal viGetViewHeight /* 0BD89C 7F088D6C 0040A825 */ move $s5, $v0 /* 0BD8A0 7F088D70 8FAA00B4 */ lw $t2, 0xb4($sp) -/* 0BD8A4 7F088D74 3C048003 */ lui $a0, %hi(D_80036440) +/* 0BD8A4 7F088D74 3C048003 */ lui $a0, %hi(credits_pointer) /* 0BD8A8 7F088D78 01421823 */ subu $v1, $t2, $v0 /* 0BD8AC 7F088D7C 04610003 */ bgez $v1, .L7F088D8C /* 0BD8B0 7F088D80 00035903 */ sra $t3, $v1, 4 @@ -15879,7 +15379,7 @@ glabel sub_GAME_7F088CD8 .L7F088DB4: /* 0BD8E4 7F088DB4 18C00024 */ blez $a2, .L7F088E48 /* 0BD8E8 7F088DB8 00009825 */ move $s3, $zero -/* 0BD8EC 7F088DBC 8C846440 */ lw $a0, %lo(D_80036440)($a0) +/* 0BD8EC 7F088DBC 8C846440 */ lw $a0, %lo(credits_pointer)($a0) .L7F088DC0: /* 0BD8F0 7F088DC0 94820000 */ lhu $v0, ($a0) /* 0BD8F4 7F088DC4 24015011 */ li $at, 20497 @@ -15929,8 +15429,8 @@ glabel sub_GAME_7F088CD8 /* 0BD988 7F088E58 102000DB */ beqz $at, .L7F0891C8 /* 0BD98C 7F088E5C 00000000 */ nop /* 0BD990 7F088E60 00C50019 */ multu $a2, $a1 -/* 0BD994 7F088E64 3C038003 */ lui $v1, %hi(D_80036440) -/* 0BD998 7F088E68 8C636440 */ lw $v1, %lo(D_80036440)($v1) +/* 0BD994 7F088E64 3C038003 */ lui $v1, %hi(credits_pointer) +/* 0BD998 7F088E68 8C636440 */ lw $v1, %lo(credits_pointer)($v1) /* 0BD99C 7F088E6C 0000A012 */ mflo $s4 /* 0BD9A0 7F088E70 00742021 */ addu $a0, $v1, $s4 /* 0BD9A4 7F088E74 94820000 */ lhu $v0, ($a0) @@ -15950,8 +15450,8 @@ glabel sub_GAME_7F088CD8 /* 0BD9D8 7F088EA8 00402025 */ move $a0, $v0 /* 0BD9DC 7F088EAC 0FC30776 */ jal langGet /* 0BD9E0 7F088EB0 00138900 */ sll $s1, $s3, 4 -/* 0BD9E4 7F088EB4 3C0A8003 */ lui $t2, %hi(D_80036440) -/* 0BD9E8 7F088EB8 8D4A6440 */ lw $t2, %lo(D_80036440)($t2) +/* 0BD9E4 7F088EB4 3C0A8003 */ lui $t2, %hi(credits_pointer) +/* 0BD9E8 7F088EB8 8D4A6440 */ lw $t2, %lo(credits_pointer)($t2) /* 0BD9EC 7F088EBC 00409025 */ move $s2, $v0 /* 0BD9F0 7F088EC0 01542021 */ addu $a0, $t2, $s4 /* 0BD9F4 7F088EC4 84830004 */ lh $v1, 4($a0) @@ -16041,8 +15541,8 @@ glabel sub_GAME_7F088CD8 /* 0BDB30 7F089000 AFB90014 */ sw $t9, 0x14($sp) /* 0BDB34 7F089004 0FC2B6AF */ jal textRender /* 0BDB38 7F089008 AFB80010 */ sw $t8, 0x10($sp) -/* 0BDB3C 7F08900C 3C0B8003 */ lui $t3, %hi(D_80036440) -/* 0BDB40 7F089010 8D6B6440 */ lw $t3, %lo(D_80036440)($t3) +/* 0BDB3C 7F08900C 3C0B8003 */ lui $t3, %hi(credits_pointer) +/* 0BDB40 7F089010 8D6B6440 */ lw $t3, %lo(credits_pointer)($t3) /* 0BDB44 7F089014 0040A825 */ move $s5, $v0 /* 0BDB48 7F089018 01742021 */ addu $a0, $t3, $s4 .L7F08901C: @@ -16052,8 +15552,8 @@ glabel sub_GAME_7F088CD8 /* 0BDB58 7F089028 00A02025 */ move $a0, $a1 /* 0BDB5C 7F08902C 0FC30776 */ jal langGet /* 0BDB60 7F089030 00138900 */ sll $s1, $s3, 4 -/* 0BDB64 7F089034 3C0A8003 */ lui $t2, %hi(D_80036440) -/* 0BDB68 7F089038 8D4A6440 */ lw $t2, %lo(D_80036440)($t2) +/* 0BDB64 7F089034 3C0A8003 */ lui $t2, %hi(credits_pointer) +/* 0BDB68 7F089038 8D4A6440 */ lw $t2, %lo(credits_pointer)($t2) /* 0BDB6C 7F08903C 00409025 */ move $s2, $v0 /* 0BDB70 7F089040 01542021 */ addu $a0, $t2, $s4 /* 0BDB74 7F089044 84830008 */ lh $v1, 8($a0) @@ -16150,8 +15650,8 @@ glabel sub_GAME_7F088CD8 /* 0BDCC8 7F089198 2694000C */ addiu $s4, $s4, 0xc /* 0BDCCC 7F08919C 026B082A */ slt $at, $s3, $t3 /* 0BDCD0 7F0891A0 10200009 */ beqz $at, .L7F0891C8 -/* 0BDCD4 7F0891A4 3C0A8003 */ lui $t2, %hi(D_80036440) -/* 0BDCD8 7F0891A8 8D4A6440 */ lw $t2, %lo(D_80036440)($t2) +/* 0BDCD4 7F0891A4 3C0A8003 */ lui $t2, %hi(credits_pointer) +/* 0BDCD8 7F0891A8 8D4A6440 */ lw $t2, %lo(credits_pointer)($t2) /* 0BDCDC 7F0891AC 01542021 */ addu $a0, $t2, $s4 /* 0BDCE0 7F0891B0 94820000 */ lhu $v0, ($a0) /* 0BDCE4 7F0891B4 1440FF38 */ bnez $v0, .L7F088E98 @@ -16443,7 +15943,7 @@ glabel maybe_mp_interface /* 0BE0D4 7F0895A4 24010001 */ li $at, 1 /* 0BE0D8 7F0895A8 14410005 */ bne $v0, $at, .L7F0895C0 /* 0BE0DC 7F0895AC 00000000 */ nop -/* 0BE0E0 7F0895B0 0FC1EA6E */ jal set_camera_mode +/* 0BE0E0 7F0895B0 0FC1EA6E */ jal bondviewSetCameraMode /* 0BE0E4 7F0895B4 24040005 */ li $a0, 5 /* 0BE0E8 7F0895B8 10000027 */ b .L7F089658 /* 0BE0EC 7F0895BC 00000000 */ nop @@ -16532,9 +16032,9 @@ glabel maybe_mp_interface /* 0BBD74 7F089384 8DCF0000 */ lw $t7, ($t6) /* 0BBD78 7F089388 24010001 */ li $at, 1 /* 0BBD7C 7F08938C 15E10014 */ bne $t7, $at, .L7F0893E0 -/* 0BBD80 7F089390 00000000 */ nop +/* 0BBD80 7F089390 00000000 */ nop /* 0BBD84 7F089394 0FC229C0 */ jal bondviewIntroCameraTextTick -/* 0BBD88 7F089398 00000000 */ nop +/* 0BBD88 7F089398 00000000 */ nop /* 0BBD8C 7F08939C 0FC22A06 */ jal sub_GAME_7F08A5FC /* 0BBD90 7F0893A0 8FA40058 */ lw $a0, 0x58($sp) /* 0BBD94 7F0893A4 0FC22B10 */ jal bondviewUpperTextWindowTimerTick @@ -16554,7 +16054,7 @@ glabel maybe_mp_interface /* 0BBDCC 7F0893DC 8FBF001C */ lw $ra, 0x1c($sp) .L7F0893E0: /* 0BBDD0 7F0893E0 0FC18779 */ jal bondwalkFireBothHands -/* 0BBDD4 7F0893E4 00000000 */ nop +/* 0BBDD4 7F0893E4 00000000 */ nop /* 0BBDD8 7F0893E8 0FC1A608 */ jal sub_GAME_7F06908C /* 0BBDDC 7F0893EC 27A40058 */ addiu $a0, $sp, 0x58 /* 0BBDE0 7F0893F0 0FC18C2A */ jal sub_GAME_7F062BE4 @@ -16566,9 +16066,9 @@ glabel maybe_mp_interface /* 0BBDF8 7F089408 AFA20058 */ sw $v0, 0x58($sp) /* 0BBDFC 7F08940C 8F1929BC */ lw $t9, 0x29bc($t8) /* 0BBE00 7F089410 1320001F */ beqz $t9, .L7F089490 -/* 0BBE04 7F089414 00000000 */ nop +/* 0BBE04 7F089414 00000000 */ nop /* 0BBE08 7F089418 0C000FD9 */ jal viGetViewLeft -/* 0BBE0C 7F08941C 00000000 */ nop +/* 0BBE0C 7F08941C 00000000 */ nop /* 0BBE10 7F089420 0C000FDD */ jal viGetViewTop /* 0BBE14 7F089424 AFA20054 */ sw $v0, 0x54($sp) /* 0BBE18 7F089428 0C000FD9 */ jal viGetViewLeft @@ -16599,22 +16099,22 @@ glabel maybe_mp_interface /* 0BBE7C 7F08948C AFA20058 */ sw $v0, 0x58($sp) .L7F089490: /* 0BBE80 7F089490 0FC2281C */ jal bondviewGetIfCurrentPlayerHealthShowTime -/* 0BBE84 7F089494 00000000 */ nop +/* 0BBE84 7F089494 00000000 */ nop /* 0BBE88 7F089498 10400009 */ beqz $v0, .L7F0894C0 /* 0BBE8C 7F08949C 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 /* 0BBE90 7F0894A0 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) /* 0BBE94 7F0894A4 8DCF01C8 */ lw $t7, 0x1c8($t6) /* 0BBE98 7F0894A8 15E00005 */ bnez $t7, .L7F0894C0 -/* 0BBE9C 7F0894AC 00000000 */ nop +/* 0BBE9C 7F0894AC 00000000 */ nop /* 0BBEA0 7F0894B0 0FC221E0 */ jal sub_GAME_7F088618 /* 0BBEA4 7F0894B4 8FA40058 */ lw $a0, 0x58($sp) /* 0BBEA8 7F0894B8 10000017 */ b .L7F089518 /* 0BBEAC 7F0894BC AFA20058 */ sw $v0, 0x58($sp) .L7F0894C0: /* 0BBEB0 7F0894C0 0FC31557 */ jal sub_GAME_7F0C6048 -/* 0BBEB4 7F0894C4 00000000 */ nop +/* 0BBEB4 7F0894C4 00000000 */ nop /* 0BBEB8 7F0894C8 10400013 */ beqz $v0, .L7F089518 -/* 0BBEBC 7F0894CC 00000000 */ nop +/* 0BBEBC 7F0894CC 00000000 */ nop /* 0BBEC0 7F0894D0 0FC221E0 */ jal sub_GAME_7F088618 /* 0BBEC4 7F0894D4 8FA40058 */ lw $a0, 0x58($sp) /* 0BBEC8 7F0894D8 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 @@ -16623,7 +16123,7 @@ glabel maybe_mp_interface /* 0BBED4 7F0894E4 3C188004 */ lui $t8, %hi(g_ClockTimer) # $t8, 0x8004 /* 0BBED8 7F0894E8 8C6429F8 */ lw $a0, 0x29f8($v1) /* 0BBEDC 7F0894EC 18800007 */ blez $a0, .L7F08950C -/* 0BBEE0 7F0894F0 00000000 */ nop +/* 0BBEE0 7F0894F0 00000000 */ nop /* 0BBEE4 7F0894F4 8F180FF4 */ lw $t8, %lo(g_ClockTimer)($t8) /* 0BBEE8 7F0894F8 0098C823 */ subu $t9, $a0, $t8 /* 0BBEEC 7F0894FC AC7929F8 */ sw $t9, 0x29f8($v1) @@ -16632,26 +16132,26 @@ glabel maybe_mp_interface /* 0BBEF8 7F089508 8C6429F8 */ lw $a0, 0x29f8($v1) .L7F08950C: /* 0BBEFC 7F08950C 04810002 */ bgez $a0, .L7F089518 -/* 0BBF00 7F089510 00000000 */ nop +/* 0BBF00 7F089510 00000000 */ nop /* 0BBF04 7F089514 AC6029F8 */ sw $zero, 0x29f8($v1) .L7F089518: /* 0BBF08 7F089518 0FC26669 */ jal getPlayerCount -/* 0BBF0C 7F08951C 00000000 */ nop +/* 0BBF0C 7F08951C 00000000 */ nop /* 0BBF10 7F089520 24010001 */ li $at, 1 /* 0BBF14 7F089524 14410003 */ bne $v0, $at, .L7F089534 -/* 0BBF18 7F089528 00000000 */ nop +/* 0BBF18 7F089528 00000000 */ nop /* 0BBF1C 7F08952C 0FC15E0C */ jal display_objective_status_text_on_status_change -/* 0BBF20 7F089530 00000000 */ nop +/* 0BBF20 7F089530 00000000 */ nop .L7F089534: /* 0BBF24 7F089534 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 /* 0BBF28 7F089538 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) /* 0BBF2C 7F08953C 8C6200D8 */ lw $v0, 0xd8($v1) /* 0BBF30 7F089540 1040009F */ beqz $v0, .L7F0897C0 -/* 0BBF34 7F089544 00000000 */ nop +/* 0BBF34 7F089544 00000000 */ nop /* 0BBF38 7F089548 8C680428 */ lw $t0, 0x428($v1) /* 0BBF3C 7F08954C 24010001 */ li $at, 1 /* 0BBF40 7F089550 15000045 */ bnez $t0, .L7F089668 -/* 0BBF44 7F089554 00000000 */ nop +/* 0BBF44 7F089554 00000000 */ nop /* 0BBF48 7F089558 14410004 */ bne $v0, $at, .L7F08956C /* 0BBF4C 7F08955C 00002025 */ move $a0, $zero /* 0BBF50 7F089560 24090002 */ li $t1, 2 @@ -16663,16 +16163,16 @@ glabel maybe_mp_interface /* 0BBF64 7F089574 0FC07039 */ jal die_blood_image_routine /* 0BBF68 7F089578 00002025 */ move $a0, $zero /* 0BBF6C 7F08957C 0FC26669 */ jal getPlayerCount -/* 0BBF70 7F089580 00000000 */ nop +/* 0BBF70 7F089580 00000000 */ nop /* 0BBF74 7F089584 24010001 */ li $at, 1 /* 0BBF78 7F089588 14410013 */ bne $v0, $at, .L7F0895D8 -/* 0BBF7C 7F08958C 00000000 */ nop +/* 0BBF7C 7F08958C 00000000 */ nop /* 0BBF80 7F089590 0FC3028E */ jal musicStopSlot /* 0BBF84 7F089594 2404FFFF */ li $a0, -1 /* 0BBF88 7F089598 0FC3003F */ jal set_missionstate /* 0BBF8C 7F08959C 00002025 */ move $a0, $zero /* 0BBF90 7F0895A0 0FC3002C */ jal sub_GAME_7F0C0BF0 -/* 0BBF94 7F0895A4 00000000 */ nop +/* 0BBF94 7F0895A4 00000000 */ nop /* 0BBF98 7F0895A8 0C001927 */ jal musicTrack1ApplySeqpVol /* 0BBF9C 7F0895AC 3044FFFF */ andi $a0, $v0, 0xffff /* 0BBFA0 7F0895B0 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) # $at, 0x8002 @@ -16684,7 +16184,7 @@ glabel maybe_mp_interface /* 0BBFB8 7F0895C8 0C0018B7 */ jal musicTrack1Play /* 0BBFBC 7F0895CC 2404001B */ li $a0, 27 /* 0BBFC0 7F0895D0 10000003 */ b .L7F0895E0 -/* 0BBFC4 7F0895D4 00000000 */ nop +/* 0BBFC4 7F0895D4 00000000 */ nop .L7F0895D8: /* 0BBFC8 7F0895D8 0FC3003F */ jal set_missionstate /* 0BBFCC 7F0895DC 24040006 */ li $a0, 6 @@ -16710,12 +16210,12 @@ glabel maybe_mp_interface /* 0BC010 7F089620 8D8C0FF4 */ lw $t4, %lo(g_ClockTimer)($t4) /* 0BC014 7F089624 24040002 */ li $a0, 2 /* 0BC018 7F089628 19800003 */ blez $t4, .L7F089638 -/* 0BC01C 7F08962C 00000000 */ nop +/* 0BC01C 7F08962C 00000000 */ nop /* 0BC020 7F089630 10000001 */ b .L7F089638 /* 0BC024 7F089634 24040001 */ li $a0, 1 .L7F089638: /* 0BC028 7F089638 0FC07039 */ jal die_blood_image_routine -/* 0BC02C 7F08963C 00000000 */ nop +/* 0BC02C 7F08963C 00000000 */ nop /* 0BC030 7F089640 10400004 */ beqz $v0, .L7F089654 /* 0BC034 7F089644 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 /* 0BC038 7F089648 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) @@ -16738,13 +16238,13 @@ glabel maybe_mp_interface /* 0BC074 7F089684 C7A40024 */ lwc1 $f4, 0x24($sp) /* 0BC078 7F089688 3C038007 */ lui $v1, %hi(g_CurrentPlayer) # $v1, 0x8007 /* 0BC07C 7F08968C 4604003E */ c.le.s $f0, $f4 -/* 0BC080 7F089690 00000000 */ nop +/* 0BC080 7F089690 00000000 */ nop /* 0BC084 7F089694 4500004A */ bc1f .L7F0897C0 -/* 0BC088 7F089698 00000000 */ nop +/* 0BC088 7F089698 00000000 */ nop /* 0BC08C 7F08969C 8C638BC0 */ lw $v1, %lo(g_CurrentPlayer)($v1) /* 0BC090 7F0896A0 8C6F0424 */ lw $t7, 0x424($v1) /* 0BC094 7F0896A4 11E00046 */ beqz $t7, .L7F0897C0 -/* 0BC098 7F0896A8 00000000 */ nop +/* 0BC098 7F0896A8 00000000 */ nop /* 0BC09C 7F0896AC 8C780428 */ lw $t8, 0x428($v1) /* 0BC0A0 7F0896B0 24190001 */ li $t9, 1 /* 0BC0A4 7F0896B4 3C014270 */ li $at, 0x42700000 # 60.000000 @@ -16762,24 +16262,24 @@ glabel maybe_mp_interface /* 0BC0D4 7F0896E4 44816000 */ mtc1 $at, $f12 /* 0BC0D8 7F0896E8 44807000 */ mtc1 $zero, $f14 /* 0BC0DC 7F0896EC 0FC202AD */ jal currentPlayerStartChrFade -/* 0BC0E0 7F0896F0 00000000 */ nop +/* 0BC0E0 7F0896F0 00000000 */ nop .L7F0896F4: /* 0BC0E4 7F0896F4 0FC2024C */ jal currentPlayerIsFadeComplete -/* 0BC0E8 7F0896F8 00000000 */ nop +/* 0BC0E8 7F0896F8 00000000 */ nop /* 0BC0EC 7F0896FC 10400030 */ beqz $v0, .L7F0897C0 -/* 0BC0F0 7F089700 00000000 */ nop +/* 0BC0F0 7F089700 00000000 */ nop /* 0BC0F4 7F089704 0FC26669 */ jal getPlayerCount -/* 0BC0F8 7F089708 00000000 */ nop +/* 0BC0F8 7F089708 00000000 */ nop /* 0BC0FC 7F08970C 24010001 */ li $at, 1 /* 0BC100 7F089710 14410005 */ bne $v0, $at, .L7F089728 -/* 0BC104 7F089714 00000000 */ nop -/* 0BC108 7F089718 0FC1EA94 */ jal set_camera_mode +/* 0BC104 7F089714 00000000 */ nop +/* 0BC108 7F089718 0FC1EA94 */ jal bondviewSetCameraMode /* 0BC10C 7F08971C 24040005 */ li $a0, 5 /* 0BC110 7F089720 10000027 */ b .L7F0897C0 -/* 0BC114 7F089724 00000000 */ nop +/* 0BC114 7F089724 00000000 */ nop .L7F089728: /* 0BC118 7F089728 0FC051B2 */ jal get_scenario -/* 0BC11C 7F08972C 00000000 */ nop +/* 0BC11C 7F08972C 00000000 */ nop /* 0BC120 7F089730 0FC269A4 */ jal get_cur_playernum /* 0BC124 7F089734 AFA20040 */ sw $v0, 0x40($sp) /* 0BC128 7F089738 0FC26669 */ jal getPlayerCount @@ -16806,22 +16306,22 @@ glabel maybe_mp_interface /* 0BC174 7F089784 15810003 */ bne $t4, $at, .L7F089794 /* 0BC178 7F089788 28810002 */ slti $at, $a0, 2 /* 0BC17C 7F08978C 1020000C */ beqz $at, .L7F0897C0 -/* 0BC180 7F089790 00000000 */ nop +/* 0BC180 7F089790 00000000 */ nop .L7F089794: /* 0BC184 7F089794 0FC269A4 */ jal get_cur_playernum -/* 0BC188 7F089798 00000000 */ nop +/* 0BC188 7F089798 00000000 */ nop /* 0BC18C 7F08979C 00022600 */ sll $a0, $v0, 0x18 /* 0BC190 7F0897A0 00046E03 */ sra $t5, $a0, 0x18 /* 0BC194 7F0897A4 01A02025 */ move $a0, $t5 /* 0BC198 7F0897A8 0C002C20 */ jal joyGetButtons /* 0BC19C 7F0897AC 3405B000 */ li $a1, 45056 /* 0BC1A0 7F0897B0 10400003 */ beqz $v0, .L7F0897C0 -/* 0BC1A4 7F0897B4 00000000 */ nop +/* 0BC1A4 7F0897B4 00000000 */ nop /* 0BC1A8 7F0897B8 0FC22294 */ jal mp_respawn_handler -/* 0BC1AC 7F0897BC 00000000 */ nop +/* 0BC1AC 7F0897BC 00000000 */ nop .L7F0897C0: /* 0BC1B0 7F0897C0 0FC229C0 */ jal bondviewIntroCameraTextTick -/* 0BC1B4 7F0897C4 00000000 */ nop +/* 0BC1B4 7F0897C4 00000000 */ nop /* 0BC1B8 7F0897C8 0FC22A06 */ jal sub_GAME_7F08A5FC /* 0BC1BC 7F0897CC 8FA40058 */ lw $a0, 0x58($sp) /* 0BC1C0 7F0897D0 0FC22B10 */ jal bondviewUpperTextWindowTimerTick @@ -16846,7 +16346,7 @@ glabel maybe_mp_interface .L7F08981C: /* 0BC20C 7F08981C 27BD0058 */ addiu $sp, $sp, 0x58 /* 0BC210 7F089820 03E00008 */ jr $ra -/* 0BC214 7F089824 00000000 */ nop +/* 0BC214 7F089824 00000000 */ nop ) #endif #endif @@ -16936,9 +16436,9 @@ PropRecord* get_curplayer_positiondata(void) { */ void bondviewKillCurrentPlayer(void) { - if ((g_CurrentPlayer->bondinvincible == 0) && (g_CurrentPlayer->bonddead == 0)) + if ((g_CurrentPlayer->bondinvincible == 0) && (g_CurrentPlayer->bonddead == FALSE)) { - if (g_CurrentPlayer->watch_animation_state != 0) + if (g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0x0) { trigger_solo_watch_menu(1); } @@ -16973,7 +16473,7 @@ void bondviewKillCurrentPlayer(void) /** * Unreferenced. - * + * * Address 0x7F0898E8. */ s32 sub_GAME_7F0898E8(void) @@ -16984,1145 +16484,187 @@ s32 sub_GAME_7F0898E8(void) +/** + * @param damage_amount: damage amount + * @param vectorx: damage source x coordinate + * @param vectorz: damage source y coordinate + * @param playerid: player index of player causing the damage + * @param arg4: boolean, does the damage apply to body armor (e.g. false when gas) + * + * Address US 7F08991C. + * Address EU 7F089A84. + * Address JP 7F089FF0. + */ +void record_damage_kills(f32 damage_amount, f32 vectorx, f32 vectorz, s32 playerid, s32 affects_armor) { + f32 damage_dealt = g_playerPerm->handicap * damage_amount; + s32 cur_player_num; + f32 angle; + s32 padding; + s32 sp2C; + s32 sp28; + if (g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0x0) + { + sub_GAME_7F0A2F30(g_CurrentPlayer->armor_display_values, 0x2E, 1, get_BONDdata_watch_armor()); + sub_GAME_7F0A2F30(g_CurrentPlayer->health_display_values, 0x2E, -1, bondviewGetCurrentPlayerHealth()); + } -#ifdef NONMATCHING -void record_damage_kills(void) { + if (getPlayerCount() < 2 || (g_stopPlayFlag == 0 && g_gameOverFlag == 0)) + { + if (in_tank_flag == 1) + { + damage_dealt *= 0.25f; + } -} + if (g_CurrentPlayer->bonddead == FALSE && g_CurrentPlayer->bondinvincible == FALSE) + { + joyRumblePakStart(get_cur_playernum(), 0.25); + if (cur_player_get_control_type() >= 4) + { + // rumble second controller in 2.x + joyRumblePakStart(get_cur_playernum() + getPlayerCount(), 0.25); + } + } + + if (getPlayerCount() >= 2 && get_scenario() == SCENARIO_LTK) + { + // the damage dealt is always equivalent to how much health and armor the player has + // the result of this is to always kill the player regardless of how much damage he can sustain + damage_dealt = (g_CurrentPlayer->bondhealth * g_CurrentPlayer->actual_health) + (g_CurrentPlayer->bondarmour * g_CurrentPlayer->actual_armor); + } + + if (g_CurrentPlayer->bondinvincible == FALSE && g_CurrentPlayer->bonddead == FALSE && g_PlayerInvincible == FALSE && + (g_CurrentPlayer->damageshowtime < 0 || (getPlayerCount() >= 2 && g_CurrentPlayer->damageshowtime == 0))) + { + if (g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0x5 && g_CurrentPlayer->watch_animation_state != WATCH_ANIMATION_0xc) + { + g_CurrentPlayer->oldhealth = g_CurrentPlayer->bondhealth; + g_CurrentPlayer->oldarmour = g_CurrentPlayer->bondarmour; + + if (getPlayerCount() >= 2) + { + cur_player_num = get_cur_playernum(); + angle = g_playerPointers[cur_player_num]->vv_theta - (360.0f - ((atan2f(vectorx, vectorz) * 180.0f) / 3.1415927f)); + + if (angle < 0.0f) + { + angle = -angle; + } + + if (angle < 90.0f || angle > 270.0f) + { + // danger: if Bond could be damaged by toxic gas in multiplayer, playerid would be -1 + // thus causing an out of bounds access + g_playerPlayerData[playerid].damage_to_backside++; + } + } + + if (affects_armor && damage_dealt <= g_CurrentPlayer->bondarmour * g_CurrentPlayer->actual_armor) + { + g_CurrentPlayer->bondarmour = g_CurrentPlayer->bondarmour - (damage_dealt / g_CurrentPlayer->actual_armor); + } + else + { + if (affects_armor) + { + damage_dealt -= g_CurrentPlayer->bondarmour / g_CurrentPlayer->actual_armor; + g_CurrentPlayer->bondarmour = 0.0f; + g_CurrentPlayer->actual_armor = 1.0f; + } + + g_CurrentPlayer->bondhealth = g_CurrentPlayer->bondhealth - (damage_dealt / g_CurrentPlayer->actual_health); + + if (g_CurrentPlayer->bondhealth <= 0.0f) + { + if (getPlayerCount() >= 2) + { + sp2C = get_cur_playernum(); + sp28 = 0; + + if (get_scenario() == 3 && bondinvHasGoldenGun()) + { + sp28 = 1; + } + +#if defined(VERSION_EU) || defined(VERSION_JP) + drop_inventory(); +#endif + if (sp2C != playerid) + { +#if defined(VERSION_US) + drop_inventory(); +#endif + increment_num_deaths(); + } + + set_cur_player(playerid); + + if (sp2C == playerid) + { + increment_num_suicides_display_MP(); + } + else + { + increment_num_kills_display_text_in_MP(); + + if (sp28 != 0) + { + increment_num_times_killed_MwtGC(); + } + } + + set_cur_player(sp2C); + + if(1); + + g_playerPlayerData[playerid].kill_counts[sp2C]++; + } + + bondviewKillCurrentPlayer(); + } + } + +#if defined(VERSION_EU) || defined(VERSION_JP) + #define ZERO_7F08991C 0.0f #else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel pi_800552B0 -.word 0x40490fdb /*3.1415927*/ -.text -glabel record_damage_kills -/* 0BE44C 7F08991C 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0BE450 7F089920 3C0E8008 */ lui $t6, %hi(g_playerPerm) -/* 0BE454 7F089924 8DCEA0B4 */ lw $t6, %lo(g_playerPerm)($t6) -/* 0BE458 7F089928 AFBF0014 */ sw $ra, 0x14($sp) -/* 0BE45C 7F08992C E7AE0044 */ swc1 $f14, 0x44($sp) -/* 0BE460 7F089930 AFA60048 */ sw $a2, 0x48($sp) -/* 0BE464 7F089934 AFA7004C */ sw $a3, 0x4c($sp) -/* 0BE468 7F089938 C5C4005C */ lwc1 $f4, 0x5c($t6) -/* 0BE46C 7F08993C 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) -/* 0BE470 7F089940 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0BE474 7F089944 460C2182 */ mul.s $f6, $f4, $f12 -/* 0BE478 7F089948 E7A6003C */ swc1 $f6, 0x3c($sp) -/* 0BE47C 7F08994C 8DF801C8 */ lw $t8, 0x1c8($t7) -/* 0BE480 7F089950 13000013 */ beqz $t8, .L7F0899A0 -/* 0BE484 7F089954 00000000 */ nop -/* 0BE488 7F089958 0FC228BF */ jal get_BONDdata_watch_armor -/* 0BE48C 7F08995C 00000000 */ nop -/* 0BE490 7F089960 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0BE494 7F089964 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BE498 7F089968 44070000 */ mfc1 $a3, $f0 -/* 0BE49C 7F08996C 2405002E */ li $a1, 46 -/* 0BE4A0 7F089970 24060001 */ li $a2, 1 -/* 0BE4A4 7F089974 0FC28BCC */ jal sub_GAME_7F0A2F30 -/* 0BE4A8 7F089978 248412B8 */ addiu $a0, $a0, 0x12b8 -/* 0BE4AC 7F08997C 0FC228BB */ jal bondviewGetCurrentPlayerHealth -/* 0BE4B0 7F089980 00000000 */ nop -/* 0BE4B4 7F089984 3C048008 */ lui $a0, %hi(g_CurrentPlayer) -/* 0BE4B8 7F089988 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BE4BC 7F08998C 44070000 */ mfc1 $a3, $f0 -/* 0BE4C0 7F089990 2405002E */ li $a1, 46 -/* 0BE4C4 7F089994 2406FFFF */ li $a2, -1 -/* 0BE4C8 7F089998 0FC28BCC */ jal sub_GAME_7F0A2F30 -/* 0BE4CC 7F08999C 24841598 */ addiu $a0, $a0, 0x1598 -.L7F0899A0: -/* 0BE4D0 7F0899A0 0FC26919 */ jal getPlayerCount -/* 0BE4D4 7F0899A4 00000000 */ nop -/* 0BE4D8 7F0899A8 28410002 */ slti $at, $v0, 2 -/* 0BE4DC 7F0899AC 14200007 */ bnez $at, .L7F0899CC -/* 0BE4E0 7F0899B0 3C198009 */ lui $t9, %hi(g_stopPlayFlag) -/* 0BE4E4 7F0899B4 8F39C700 */ lw $t9, %lo(g_stopPlayFlag)($t9) -/* 0BE4E8 7F0899B8 3C088009 */ lui $t0, %hi(g_gameOverFlag) -/* 0BE4EC 7F0899BC 57200120 */ bnezl $t9, .L7F089E40 -/* 0BE4F0 7F0899C0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BE4F4 7F0899C4 8D08C704 */ lw $t0, %lo(g_gameOverFlag)($t0) -/* 0BE4F8 7F0899C8 1500011C */ bnez $t0, .L7F089E3C -.L7F0899CC: -/* 0BE4FC 7F0899CC 3C098003 */ lui $t1, %hi(in_tank_flag) -/* 0BE500 7F0899D0 8D296448 */ lw $t1, %lo(in_tank_flag)($t1) -/* 0BE504 7F0899D4 24010001 */ li $at, 1 -/* 0BE508 7F0899D8 C7A8003C */ lwc1 $f8, 0x3c($sp) -/* 0BE50C 7F0899DC 15210006 */ bne $t1, $at, .L7F0899F8 -/* 0BE510 7F0899E0 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE514 7F0899E4 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 0BE518 7F0899E8 44815000 */ mtc1 $at, $f10 -/* 0BE51C 7F0899EC 00000000 */ nop -/* 0BE520 7F0899F0 460A4402 */ mul.s $f16, $f8, $f10 -/* 0BE524 7F0899F4 E7B0003C */ swc1 $f16, 0x3c($sp) -.L7F0899F8: -/* 0BE528 7F0899F8 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BE52C 7F0899FC 8C4A00D8 */ lw $t2, 0xd8($v0) -/* 0BE530 7F089A00 15400016 */ bnez $t2, .L7F089A5C -/* 0BE534 7F089A04 00000000 */ nop -/* 0BE538 7F089A08 904B12B6 */ lbu $t3, 0x12b6($v0) -/* 0BE53C 7F089A0C 15600013 */ bnez $t3, .L7F089A5C -/* 0BE540 7F089A10 00000000 */ nop -/* 0BE544 7F089A14 0FC26C54 */ jal get_cur_playernum -/* 0BE548 7F089A18 00000000 */ nop -/* 0BE54C 7F089A1C 00402025 */ move $a0, $v0 -/* 0BE550 7F089A20 0C003215 */ jal joyRumblePakStart -/* 0BE554 7F089A24 3C053E80 */ lui $a1, 0x3e80 -/* 0BE558 7F089A28 0FC29370 */ jal cur_player_get_control_type -/* 0BE55C 7F089A2C 00000000 */ nop -/* 0BE560 7F089A30 28410004 */ slti $at, $v0, 4 -/* 0BE564 7F089A34 14200009 */ bnez $at, .L7F089A5C -/* 0BE568 7F089A38 00000000 */ nop -/* 0BE56C 7F089A3C 0FC26C54 */ jal get_cur_playernum -/* 0BE570 7F089A40 00000000 */ nop -/* 0BE574 7F089A44 0FC26919 */ jal getPlayerCount -/* 0BE578 7F089A48 AFA2001C */ sw $v0, 0x1c($sp) -/* 0BE57C 7F089A4C 8FAC001C */ lw $t4, 0x1c($sp) -/* 0BE580 7F089A50 3C053E80 */ lui $a1, 0x3e80 -/* 0BE584 7F089A54 0C003215 */ jal joyRumblePakStart -/* 0BE588 7F089A58 004C2021 */ addu $a0, $v0, $t4 -.L7F089A5C: -/* 0BE58C 7F089A5C 0FC26919 */ jal getPlayerCount -/* 0BE590 7F089A60 00000000 */ nop -/* 0BE594 7F089A64 28410002 */ slti $at, $v0, 2 -/* 0BE598 7F089A68 14200010 */ bnez $at, .L7F089AAC -/* 0BE59C 7F089A6C 00000000 */ nop -/* 0BE5A0 7F089A70 0FC051D6 */ jal get_scenario -/* 0BE5A4 7F089A74 00000000 */ nop -/* 0BE5A8 7F089A78 24010004 */ li $at, 4 -/* 0BE5AC 7F089A7C 1441000B */ bne $v0, $at, .L7F089AAC -/* 0BE5B0 7F089A80 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE5B4 7F089A84 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BE5B8 7F089A88 C45200DC */ lwc1 $f18, 0xdc($v0) -/* 0BE5BC 7F089A8C C4442A3C */ lwc1 $f4, 0x2a3c($v0) -/* 0BE5C0 7F089A90 C44800E0 */ lwc1 $f8, 0xe0($v0) -/* 0BE5C4 7F089A94 C44A2A40 */ lwc1 $f10, 0x2a40($v0) -/* 0BE5C8 7F089A98 46049182 */ mul.s $f6, $f18, $f4 -/* 0BE5CC 7F089A9C 00000000 */ nop -/* 0BE5D0 7F089AA0 460A4402 */ mul.s $f16, $f8, $f10 -/* 0BE5D4 7F089AA4 46103480 */ add.s $f18, $f6, $f16 -/* 0BE5D8 7F089AA8 E7B2003C */ swc1 $f18, 0x3c($sp) -.L7F089AAC: -/* 0BE5DC 7F089AAC 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE5E0 7F089AB0 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BE5E4 7F089AB4 904D12B6 */ lbu $t5, 0x12b6($v0) -/* 0BE5E8 7F089AB8 55A000E1 */ bnezl $t5, .L7F089E40 -/* 0BE5EC 7F089ABC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BE5F0 7F089AC0 8C4E00D8 */ lw $t6, 0xd8($v0) -/* 0BE5F4 7F089AC4 3C0F8003 */ lui $t7, %hi(g_PlayerInvincible) -/* 0BE5F8 7F089AC8 55C000DD */ bnezl $t6, .L7F089E40 -/* 0BE5FC 7F089ACC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BE600 7F089AD0 8DEF64B4 */ lw $t7, %lo(g_PlayerInvincible)($t7) -/* 0BE604 7F089AD4 55E000DA */ bnezl $t7, .L7F089E40 -/* 0BE608 7F089AD8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BE60C 7F089ADC 8C5800F4 */ lw $t8, 0xf4($v0) -/* 0BE610 7F089AE0 0702000B */ bltzl $t8, .L7F089B10 -/* 0BE614 7F089AE4 8C4301C8 */ lw $v1, 0x1c8($v0) -/* 0BE618 7F089AE8 0FC26919 */ jal getPlayerCount -/* 0BE61C 7F089AEC 00000000 */ nop -/* 0BE620 7F089AF0 28410002 */ slti $at, $v0, 2 -/* 0BE624 7F089AF4 142000D1 */ bnez $at, .L7F089E3C -/* 0BE628 7F089AF8 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE62C 7F089AFC 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BE630 7F089B00 8C5900F4 */ lw $t9, 0xf4($v0) -/* 0BE634 7F089B04 572000CE */ bnezl $t9, .L7F089E40 -/* 0BE638 7F089B08 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BE63C 7F089B0C 8C4301C8 */ lw $v1, 0x1c8($v0) -.L7F089B10: -/* 0BE640 7F089B10 24010005 */ li $at, 5 -/* 0BE644 7F089B14 106100C9 */ beq $v1, $at, .L7F089E3C -/* 0BE648 7F089B18 2401000C */ li $at, 12 -/* 0BE64C 7F089B1C 506100C8 */ beql $v1, $at, .L7F089E40 -/* 0BE650 7F089B20 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BE654 7F089B24 C44400DC */ lwc1 $f4, 0xdc($v0) -/* 0BE658 7F089B28 E44400E4 */ swc1 $f4, 0xe4($v0) -/* 0BE65C 7F089B2C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE660 7F089B30 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BE664 7F089B34 C44800E0 */ lwc1 $f8, 0xe0($v0) -/* 0BE668 7F089B38 0FC26919 */ jal getPlayerCount -/* 0BE66C 7F089B3C E44800E8 */ swc1 $f8, 0xe8($v0) -/* 0BE670 7F089B40 28410002 */ slti $at, $v0, 2 -/* 0BE674 7F089B44 54200035 */ bnezl $at, .L7F089C1C -/* 0BE678 7F089B48 8FA30050 */ lw $v1, 0x50($sp) -/* 0BE67C 7F089B4C 0FC26C54 */ jal get_cur_playernum -/* 0BE680 7F089B50 00000000 */ nop -/* 0BE684 7F089B54 AFA20038 */ sw $v0, 0x38($sp) -/* 0BE688 7F089B58 C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 0BE68C 7F089B5C 0FC16A8C */ jal atan2f -/* 0BE690 7F089B60 C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 0BE694 7F089B64 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0BE698 7F089B68 44815000 */ mtc1 $at, $f10 -/* 0BE69C 7F089B6C 3C018005 */ lui $at, %hi(pi_800552B0) -/* 0BE6A0 7F089B70 C43052B0 */ lwc1 $f16, %lo(pi_800552B0)($at) -/* 0BE6A4 7F089B74 460A0182 */ mul.s $f6, $f0, $f10 -/* 0BE6A8 7F089B78 8FA80038 */ lw $t0, 0x38($sp) -/* 0BE6AC 7F089B7C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BE6B0 7F089B80 3C0A8008 */ lui $t2, %hi(g_playerPointers) -/* 0BE6B4 7F089B84 00084880 */ sll $t1, $t0, 2 -/* 0BE6B8 7F089B88 44812000 */ mtc1 $at, $f4 -/* 0BE6BC 7F089B8C 01495021 */ addu $t2, $t2, $t1 -/* 0BE6C0 7F089B90 46103483 */ div.s $f18, $f6, $f16 -/* 0BE6C4 7F089B94 8D4A9EE0 */ lw $t2, %lo(g_playerPointers)($t2) -/* 0BE6C8 7F089B98 44806000 */ mtc1 $zero, $f12 -/* 0BE6CC 7F089B9C 8FAB004C */ lw $t3, 0x4c($sp) -/* 0BE6D0 7F089BA0 C54A0148 */ lwc1 $f10, 0x148($t2) -/* 0BE6D4 7F089BA4 3C0142B4 */ li $at, 0x42B40000 # 90.000000 -/* 0BE6D8 7F089BA8 000B60C0 */ sll $t4, $t3, 3 -/* 0BE6DC 7F089BAC 3C0D8008 */ lui $t5, %hi(g_playerPlayerData) -/* 0BE6E0 7F089BB0 018B6023 */ subu $t4, $t4, $t3 -/* 0BE6E4 7F089BB4 44813000 */ mtc1 $at, $f6 -/* 0BE6E8 7F089BB8 000C6100 */ sll $t4, $t4, 4 -/* 0BE6EC 7F089BBC 25AD9EF0 */ addiu $t5, %lo(g_playerPlayerData) # addiu $t5, $t5, -0x6110 -/* 0BE6F0 7F089BC0 3C014387 */ li $at, 0x43870000 # 270.000000 -/* 0BE6F4 7F089BC4 018D1021 */ addu $v0, $t4, $t5 -/* 0BE6F8 7F089BC8 46122201 */ sub.s $f8, $f4, $f18 -/* 0BE6FC 7F089BCC 46085081 */ sub.s $f2, $f10, $f8 -/* 0BE700 7F089BD0 460C103C */ c.lt.s $f2, $f12 -/* 0BE704 7F089BD4 00000000 */ nop -/* 0BE708 7F089BD8 45020003 */ bc1fl .L7F089BE8 -/* 0BE70C 7F089BDC 4606103C */ c.lt.s $f2, $f6 -/* 0BE710 7F089BE0 46001087 */ neg.s $f2, $f2 -/* 0BE714 7F089BE4 4606103C */ c.lt.s $f2, $f6 -.L7F089BE8: -/* 0BE718 7F089BE8 00000000 */ nop -/* 0BE71C 7F089BEC 45030008 */ bc1tl .L7F089C10 -/* 0BE720 7F089BF0 8C4E003C */ lw $t6, 0x3c($v0) -/* 0BE724 7F089BF4 44818000 */ mtc1 $at, $f16 -/* 0BE728 7F089BF8 00000000 */ nop -/* 0BE72C 7F089BFC 4602803C */ c.lt.s $f16, $f2 -/* 0BE730 7F089C00 00000000 */ nop -/* 0BE734 7F089C04 45020005 */ bc1fl .L7F089C1C -/* 0BE738 7F089C08 8FA30050 */ lw $v1, 0x50($sp) -/* 0BE73C 7F089C0C 8C4E003C */ lw $t6, 0x3c($v0) -.L7F089C10: -/* 0BE740 7F089C10 25CF0001 */ addiu $t7, $t6, 1 -/* 0BE744 7F089C14 AC4F003C */ sw $t7, 0x3c($v0) -/* 0BE748 7F089C18 8FA30050 */ lw $v1, 0x50($sp) -.L7F089C1C: -/* 0BE74C 7F089C1C 44806000 */ mtc1 $zero, $f12 -/* 0BE750 7F089C20 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE754 7F089C24 10600010 */ beqz $v1, .L7F089C68 -/* 0BE758 7F089C28 00000000 */ nop -/* 0BE75C 7F089C2C 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BE760 7F089C30 C7B2003C */ lwc1 $f18, 0x3c($sp) -/* 0BE764 7F089C34 C44000E0 */ lwc1 $f0, 0xe0($v0) -/* 0BE768 7F089C38 C4422A40 */ lwc1 $f2, 0x2a40($v0) -/* 0BE76C 7F089C3C 46020102 */ mul.s $f4, $f0, $f2 -/* 0BE770 7F089C40 4604903E */ c.le.s $f18, $f4 -/* 0BE774 7F089C44 00000000 */ nop -/* 0BE778 7F089C48 45000007 */ bc1f .L7F089C68 -/* 0BE77C 7F089C4C 00000000 */ nop -/* 0BE780 7F089C50 46029283 */ div.s $f10, $f18, $f2 -/* 0BE784 7F089C54 460A0201 */ sub.s $f8, $f0, $f10 -/* 0BE788 7F089C58 E44800E0 */ swc1 $f8, 0xe0($v0) -/* 0BE78C 7F089C5C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE790 7F089C60 1000005D */ b .L7F089DD8 -/* 0BE794 7F089C64 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.L7F089C68: -/* 0BE798 7F089C68 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE79C 7F089C6C 1060000F */ beqz $v1, .L7F089CAC -/* 0BE7A0 7F089C70 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BE7A4 7F089C74 C44600E0 */ lwc1 $f6, 0xe0($v0) -/* 0BE7A8 7F089C78 C4502A40 */ lwc1 $f16, 0x2a40($v0) -/* 0BE7AC 7F089C7C C7B2003C */ lwc1 $f18, 0x3c($sp) -/* 0BE7B0 7F089C80 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BE7B4 7F089C84 46103103 */ div.s $f4, $f6, $f16 -/* 0BE7B8 7F089C88 3C188008 */ lui $t8, %hi(g_CurrentPlayer) -/* 0BE7BC 7F089C8C 44814000 */ mtc1 $at, $f8 -/* 0BE7C0 7F089C90 46049281 */ sub.s $f10, $f18, $f4 -/* 0BE7C4 7F089C94 E7AA003C */ swc1 $f10, 0x3c($sp) -/* 0BE7C8 7F089C98 E44C00E0 */ swc1 $f12, 0xe0($v0) -/* 0BE7CC 7F089C9C 8F18A0B0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0BE7D0 7F089CA0 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE7D4 7F089CA4 E7082A40 */ swc1 $f8, 0x2a40($t8) -/* 0BE7D8 7F089CA8 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.L7F089CAC: -/* 0BE7DC 7F089CAC C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0BE7E0 7F089CB0 C4502A3C */ lwc1 $f16, 0x2a3c($v0) -/* 0BE7E4 7F089CB4 C44400DC */ lwc1 $f4, 0xdc($v0) -/* 0BE7E8 7F089CB8 46103483 */ div.s $f18, $f6, $f16 -/* 0BE7EC 7F089CBC 46122281 */ sub.s $f10, $f4, $f18 -/* 0BE7F0 7F089CC0 E44A00DC */ swc1 $f10, 0xdc($v0) -/* 0BE7F4 7F089CC4 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE7F8 7F089CC8 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BE7FC 7F089CCC C44800DC */ lwc1 $f8, 0xdc($v0) -/* 0BE800 7F089CD0 460C403E */ c.le.s $f8, $f12 -/* 0BE804 7F089CD4 00000000 */ nop -/* 0BE808 7F089CD8 45020040 */ bc1fl .L7F089DDC -/* 0BE80C 7F089CDC 8C4B00F4 */ lw $t3, 0xf4($v0) -/* 0BE810 7F089CE0 0FC26919 */ jal getPlayerCount -/* 0BE814 7F089CE4 00000000 */ nop -/* 0BE818 7F089CE8 28410002 */ slti $at, $v0, 2 -/* 0BE81C 7F089CEC 14200036 */ bnez $at, .L7F089DC8 -/* 0BE820 7F089CF0 00000000 */ nop -/* 0BE824 7F089CF4 0FC26C54 */ jal get_cur_playernum -/* 0BE828 7F089CF8 00000000 */ nop -/* 0BE82C 7F089CFC AFA2002C */ sw $v0, 0x2c($sp) -/* 0BE830 7F089D00 0FC051D6 */ jal get_scenario -/* 0BE834 7F089D04 AFA00028 */ sw $zero, 0x28($sp) -/* 0BE838 7F089D08 24010003 */ li $at, 3 -/* 0BE83C 7F089D0C 54410007 */ bnel $v0, $at, .L7F089D2C -/* 0BE840 7F089D10 8FA8002C */ lw $t0, 0x2c($sp) -/* 0BE844 7F089D14 0FC233F0 */ jal bondinvHasGoldenGun -/* 0BE848 7F089D18 00000000 */ nop -/* 0BE84C 7F089D1C 10400002 */ beqz $v0, .L7F089D28 -/* 0BE850 7F089D20 24190001 */ li $t9, 1 -/* 0BE854 7F089D24 AFB90028 */ sw $t9, 0x28($sp) -.L7F089D28: -/* 0BE858 7F089D28 8FA8002C */ lw $t0, 0x2c($sp) -.L7F089D2C: -/* 0BE85C 7F089D2C 8FA9004C */ lw $t1, 0x4c($sp) -/* 0BE860 7F089D30 11090005 */ beq $t0, $t1, .L7F089D48 -/* 0BE864 7F089D34 00000000 */ nop -/* 0BE868 7F089D38 0FC159DF */ jal drop_inventory -/* 0BE86C 7F089D3C 00000000 */ nop -/* 0BE870 7F089D40 0FC1AA57 */ jal increment_num_deaths -/* 0BE874 7F089D44 00000000 */ nop -.L7F089D48: -/* 0BE878 7F089D48 0FC26C43 */ jal set_cur_player -/* 0BE87C 7F089D4C 8FA4004C */ lw $a0, 0x4c($sp) -/* 0BE880 7F089D50 8FAA002C */ lw $t2, 0x2c($sp) -/* 0BE884 7F089D54 8FAB004C */ lw $t3, 0x4c($sp) -/* 0BE888 7F089D58 154B0005 */ bne $t2, $t3, .L7F089D70 -/* 0BE88C 7F089D5C 00000000 */ nop -/* 0BE890 7F089D60 0FC1AA86 */ jal increment_num_suicides_display_MP -/* 0BE894 7F089D64 00000000 */ nop -/* 0BE898 7F089D68 10000008 */ b .L7F089D8C -/* 0BE89C 7F089D6C 00000000 */ nop -.L7F089D70: -/* 0BE8A0 7F089D70 0FC1A9E0 */ jal increment_num_kills_display_text_in_MP -/* 0BE8A4 7F089D74 00000000 */ nop -/* 0BE8A8 7F089D78 8FAC0028 */ lw $t4, 0x28($sp) -/* 0BE8AC 7F089D7C 11800003 */ beqz $t4, .L7F089D8C -/* 0BE8B0 7F089D80 00000000 */ nop -/* 0BE8B4 7F089D84 0FC1AA4D */ jal increment_num_times_killed_MwtGC -/* 0BE8B8 7F089D88 00000000 */ nop -.L7F089D8C: -/* 0BE8BC 7F089D8C 0FC26C43 */ jal set_cur_player -/* 0BE8C0 7F089D90 8FA4002C */ lw $a0, 0x2c($sp) -/* 0BE8C4 7F089D94 8FAD004C */ lw $t5, 0x4c($sp) -/* 0BE8C8 7F089D98 8FAF002C */ lw $t7, 0x2c($sp) -/* 0BE8CC 7F089D9C 3C088008 */ lui $t0, %hi(g_playerPlayerData) -/* 0BE8D0 7F089DA0 000D70C0 */ sll $t6, $t5, 3 -/* 0BE8D4 7F089DA4 01CD7023 */ subu $t6, $t6, $t5 -/* 0BE8D8 7F089DA8 000E7100 */ sll $t6, $t6, 4 -/* 0BE8DC 7F089DAC 000FC080 */ sll $t8, $t7, 2 -/* 0BE8E0 7F089DB0 01D8C821 */ addu $t9, $t6, $t8 -/* 0BE8E4 7F089DB4 25089EF0 */ addiu $t0, %lo(g_playerPlayerData) # addiu $t0, $t0, -0x6110 -/* 0BE8E8 7F089DB8 03281021 */ addu $v0, $t9, $t0 -/* 0BE8EC 7F089DBC 8C490024 */ lw $t1, 0x24($v0) -/* 0BE8F0 7F089DC0 252A0001 */ addiu $t2, $t1, 1 -/* 0BE8F4 7F089DC4 AC4A0024 */ sw $t2, 0x24($v0) -.L7F089DC8: -/* 0BE8F8 7F089DC8 0FC225EA */ jal bondviewKillCurrentPlayer -/* 0BE8FC 7F089DCC 00000000 */ nop -/* 0BE900 7F089DD0 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE904 7F089DD4 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.L7F089DD8: -/* 0BE908 7F089DD8 8C4B00F4 */ lw $t3, 0xf4($v0) -.L7F089DDC: -/* 0BE90C 7F089DDC C7A60044 */ lwc1 $f6, 0x44($sp) -/* 0BE910 7F089DE0 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) -/* 0BE914 7F089DE4 0561000E */ bgez $t3, .L7F089E20 -/* 0BE918 7F089DE8 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 0BE91C 7F089DEC 46063400 */ add.s $f16, $f6, $f6 -/* 0BE920 7F089DF0 C4440180 */ lwc1 $f4, 0x180($v0) -/* 0BE924 7F089DF4 46102480 */ add.s $f18, $f4, $f16 -/* 0BE928 7F089DF8 E4520180 */ swc1 $f18, 0x180($v0) -/* 0BE92C 7F089DFC C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0BE930 7F089E00 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE934 7F089E04 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BE938 7F089E08 460A5200 */ add.s $f8, $f10, $f10 -/* 0BE93C 7F089E0C C4460188 */ lwc1 $f6, 0x188($v0) -/* 0BE940 7F089E10 46083100 */ add.s $f4, $f6, $f8 -/* 0BE944 7F089E14 E4440188 */ swc1 $f4, 0x188($v0) -/* 0BE948 7F089E18 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0BE94C 7F089E1C 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.L7F089E20: -/* 0BE950 7F089E20 AC4000F4 */ sw $zero, 0xf4($v0) -/* 0BE954 7F089E24 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) -/* 0BE958 7F089E28 24050044 */ li $a1, 68 -/* 0BE95C 7F089E2C 00003025 */ move $a2, $zero -/* 0BE960 7F089E30 AD8000F8 */ sw $zero, 0xf8($t4) -/* 0BE964 7F089E34 0C002382 */ jal sndPlaySfx -/* 0BE968 7F089E38 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -.L7F089E3C: -/* 0BE96C 7F089E3C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F089E40: -/* 0BE970 7F089E40 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0BE974 7F089E44 03E00008 */ jr $ra -/* 0BE978 7F089E48 00000000 */ nop -) + #define ZERO_7F08991C 0 #endif + if (g_CurrentPlayer->damageshowtime < ZERO_7F08991C) + { + g_CurrentPlayer->bondshotspeed.x = g_CurrentPlayer->bondshotspeed.x + 2.0f * vectorx; + g_CurrentPlayer->bondshotspeed.z = g_CurrentPlayer->bondshotspeed.z + 2.0f * vectorz; + } -#ifdef VERSION_JP -GLOBAL_ASM( -.late_rodata -glabel pi_800552B0 -.word 0x40490fdb /*3.1415927*/ -.text -glabel record_damage_kills -/* 0BEB60 7F089FF0 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0BEB64 7F089FF4 3C0E8008 */ lui $t6, %hi(g_playerPerm) # $t6, 0x8008 -/* 0BEB68 7F089FF8 8DCEA124 */ lw $t6, %lo(g_playerPerm)($t6) -/* 0BEB6C 7F089FFC AFBF0014 */ sw $ra, 0x14($sp) -/* 0BEB70 7F08A000 E7AE0044 */ swc1 $f14, 0x44($sp) -/* 0BEB74 7F08A004 AFA60048 */ sw $a2, 0x48($sp) -/* 0BEB78 7F08A008 AFA7004C */ sw $a3, 0x4c($sp) -/* 0BEB7C 7F08A00C C5C4005C */ lwc1 $f4, 0x5c($t6) -/* 0BEB80 7F08A010 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8008 -/* 0BEB84 7F08A014 8DEFA120 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0BEB88 7F08A018 460C2182 */ mul.s $f6, $f4, $f12 -/* 0BEB8C 7F08A01C E7A6003C */ swc1 $f6, 0x3c($sp) -/* 0BEB90 7F08A020 8DF801C8 */ lw $t8, 0x1c8($t7) -/* 0BEB94 7F08A024 13000013 */ beqz $t8, .Ljp7F08A074 -/* 0BEB98 7F08A028 00000000 */ nop -/* 0BEB9C 7F08A02C 0FC22A8D */ jal get_BONDdata_watch_armor -/* 0BEBA0 7F08A030 00000000 */ nop -/* 0BEBA4 7F08A034 3C048008 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8008 -/* 0BEBA8 7F08A038 8C84A120 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BEBAC 7F08A03C 44070000 */ mfc1 $a3, $f0 -/* 0BEBB0 7F08A040 2405002E */ li $a1, 46 -/* 0BEBB4 7F08A044 24060001 */ li $a2, 1 -/* 0BEBB8 7F08A048 0FC28EB4 */ jal sub_GAME_7F0A2F30 -/* 0BEBBC 7F08A04C 248412B8 */ addiu $a0, $a0, 0x12b8 -/* 0BEBC0 7F08A050 0FC22A89 */ jal bondviewGetCurrentPlayerHealth -/* 0BEBC4 7F08A054 00000000 */ nop -/* 0BEBC8 7F08A058 3C048008 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8008 -/* 0BEBCC 7F08A05C 8C84A120 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BEBD0 7F08A060 44070000 */ mfc1 $a3, $f0 -/* 0BEBD4 7F08A064 2405002E */ li $a1, 46 -/* 0BEBD8 7F08A068 2406FFFF */ li $a2, -1 -/* 0BEBDC 7F08A06C 0FC28EB4 */ jal sub_GAME_7F0A2F30 -/* 0BEBE0 7F08A070 24841598 */ addiu $a0, $a0, 0x1598 -.Ljp7F08A074: -/* 0BEBE4 7F08A074 0FC26C01 */ jal getPlayerCount -/* 0BEBE8 7F08A078 00000000 */ nop -/* 0BEBEC 7F08A07C 28410002 */ slti $at, $v0, 2 -/* 0BEBF0 7F08A080 14200007 */ bnez $at, .Ljp7F08A0A0 -/* 0BEBF4 7F08A084 3C198009 */ lui $t9, %hi(g_stopPlayFlag) # $t9, 0x8009 -/* 0BEBF8 7F08A088 8F39C770 */ lw $t9, %lo(g_stopPlayFlag)($t9) -/* 0BEBFC 7F08A08C 3C088009 */ lui $t0, %hi(g_gameOverFlag) # $t0, 0x8009 -/* 0BEC00 7F08A090 5720012D */ bnezl $t9, .Ljp7F08A548 -/* 0BEC04 7F08A094 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BEC08 7F08A098 8D08C774 */ lw $t0, %lo(g_gameOverFlag)($t0) -/* 0BEC0C 7F08A09C 15000129 */ bnez $t0, .Ljp7F08A544 -.Ljp7F08A0A0: -/* 0BEC10 7F08A0A0 3C098003 */ lui $t1, %hi(in_tank_flag) # $t1, 0x8003 -/* 0BEC14 7F08A0A4 8D296488 */ lw $t1, %lo(in_tank_flag)($t1) -/* 0BEC18 7F08A0A8 24010001 */ li $at, 1 -/* 0BEC1C 7F08A0AC C7A8003C */ lwc1 $f8, 0x3c($sp) -/* 0BEC20 7F08A0B0 15210006 */ bne $t1, $at, .Ljp7F08A0CC -/* 0BEC24 7F08A0B4 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BEC28 7F08A0B8 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 0BEC2C 7F08A0BC 44815000 */ mtc1 $at, $f10 -/* 0BEC30 7F08A0C0 00000000 */ nop -/* 0BEC34 7F08A0C4 460A4402 */ mul.s $f16, $f8, $f10 -/* 0BEC38 7F08A0C8 E7B0003C */ swc1 $f16, 0x3c($sp) -.Ljp7F08A0CC: -/* 0BEC3C 7F08A0CC 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BEC40 7F08A0D0 8C4A00D8 */ lw $t2, 0xd8($v0) -/* 0BEC44 7F08A0D4 15400016 */ bnez $t2, .Ljp7F08A130 -/* 0BEC48 7F08A0D8 00000000 */ nop -/* 0BEC4C 7F08A0DC 904B12B6 */ lbu $t3, 0x12b6($v0) -/* 0BEC50 7F08A0E0 15600013 */ bnez $t3, .Ljp7F08A130 -/* 0BEC54 7F08A0E4 00000000 */ nop -/* 0BEC58 7F08A0E8 0FC26F3C */ jal get_cur_playernum -/* 0BEC5C 7F08A0EC 00000000 */ nop -/* 0BEC60 7F08A0F0 00402025 */ move $a0, $v0 -/* 0BEC64 7F08A0F4 0C00322E */ jal joyRumblePakStart -/* 0BEC68 7F08A0F8 3C053E80 */ lui $a1, 0x3e80 -/* 0BEC6C 7F08A0FC 0FC29658 */ jal cur_player_get_control_type -/* 0BEC70 7F08A100 00000000 */ nop -/* 0BEC74 7F08A104 28410004 */ slti $at, $v0, 4 -/* 0BEC78 7F08A108 14200009 */ bnez $at, .Ljp7F08A130 -/* 0BEC7C 7F08A10C 00000000 */ nop -/* 0BEC80 7F08A110 0FC26F3C */ jal get_cur_playernum -/* 0BEC84 7F08A114 00000000 */ nop -/* 0BEC88 7F08A118 0FC26C01 */ jal getPlayerCount -/* 0BEC8C 7F08A11C AFA2001C */ sw $v0, 0x1c($sp) -/* 0BEC90 7F08A120 8FAC001C */ lw $t4, 0x1c($sp) -/* 0BEC94 7F08A124 3C053E80 */ lui $a1, 0x3e80 -/* 0BEC98 7F08A128 0C00322E */ jal joyRumblePakStart -/* 0BEC9C 7F08A12C 004C2021 */ addu $a0, $v0, $t4 -.Ljp7F08A130: -/* 0BECA0 7F08A130 0FC26C01 */ jal getPlayerCount -/* 0BECA4 7F08A134 00000000 */ nop -/* 0BECA8 7F08A138 28410002 */ slti $at, $v0, 2 -/* 0BECAC 7F08A13C 14200010 */ bnez $at, .Ljp7F08A180 -/* 0BECB0 7F08A140 00000000 */ nop -/* 0BECB4 7F08A144 0FC05202 */ jal get_scenario -/* 0BECB8 7F08A148 00000000 */ nop -/* 0BECBC 7F08A14C 24010004 */ li $at, 4 -/* 0BECC0 7F08A150 1441000B */ bne $v0, $at, .Ljp7F08A180 -/* 0BECC4 7F08A154 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BECC8 7F08A158 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BECCC 7F08A15C C45200DC */ lwc1 $f18, 0xdc($v0) -/* 0BECD0 7F08A160 C4442A3C */ lwc1 $f4, 0x2a3c($v0) -/* 0BECD4 7F08A164 C44800E0 */ lwc1 $f8, 0xe0($v0) -/* 0BECD8 7F08A168 C44A2A40 */ lwc1 $f10, 0x2a40($v0) -/* 0BECDC 7F08A16C 46049182 */ mul.s $f6, $f18, $f4 -/* 0BECE0 7F08A170 00000000 */ nop -/* 0BECE4 7F08A174 460A4402 */ mul.s $f16, $f8, $f10 -/* 0BECE8 7F08A178 46103480 */ add.s $f18, $f6, $f16 -/* 0BECEC 7F08A17C E7B2003C */ swc1 $f18, 0x3c($sp) -.Ljp7F08A180: -/* 0BECF0 7F08A180 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BECF4 7F08A184 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BECF8 7F08A188 904D12B6 */ lbu $t5, 0x12b6($v0) -/* 0BECFC 7F08A18C 55A000EE */ bnezl $t5, .Ljp7F08A548 -/* 0BED00 7F08A190 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BED04 7F08A194 8C4E00D8 */ lw $t6, 0xd8($v0) -/* 0BED08 7F08A198 3C0F8003 */ lui $t7, %hi(g_PlayerInvincible) # $t7, 0x8003 -/* 0BED0C 7F08A19C 55C000EA */ bnezl $t6, .Ljp7F08A548 -/* 0BED10 7F08A1A0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BED14 7F08A1A4 8DEF64F4 */ lw $t7, %lo(g_PlayerInvincible)($t7) -/* 0BED18 7F08A1A8 55E000E7 */ bnezl $t7, .Ljp7F08A548 -/* 0BED1C 7F08A1AC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BED20 7F08A1B0 C44400F4 */ lwc1 $f4, 0xf4($v0) -/* 0BED24 7F08A1B4 44804000 */ mtc1 $zero, $f8 -/* 0BED28 7F08A1B8 00000000 */ nop -/* 0BED2C 7F08A1BC 4608203C */ c.lt.s $f4, $f8 -/* 0BED30 7F08A1C0 00000000 */ nop -/* 0BED34 7F08A1C4 4503000E */ bc1tl .Ljp7F08A200 -/* 0BED38 7F08A1C8 8C4301C8 */ lw $v1, 0x1c8($v0) -/* 0BED3C 7F08A1CC 0FC26C01 */ jal getPlayerCount -/* 0BED40 7F08A1D0 00000000 */ nop -/* 0BED44 7F08A1D4 28410002 */ slti $at, $v0, 2 -/* 0BED48 7F08A1D8 142000DA */ bnez $at, .Ljp7F08A544 -/* 0BED4C 7F08A1DC 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BED50 7F08A1E0 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BED54 7F08A1E4 44805000 */ mtc1 $zero, $f10 -/* 0BED58 7F08A1E8 C44600F4 */ lwc1 $f6, 0xf4($v0) -/* 0BED5C 7F08A1EC 46065032 */ c.eq.s $f10, $f6 -/* 0BED60 7F08A1F0 00000000 */ nop -/* 0BED64 7F08A1F4 450200D4 */ bc1fl .Ljp7F08A548 -/* 0BED68 7F08A1F8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BED6C 7F08A1FC 8C4301C8 */ lw $v1, 0x1c8($v0) -.Ljp7F08A200: -/* 0BED70 7F08A200 24010005 */ li $at, 5 -/* 0BED74 7F08A204 106100CF */ beq $v1, $at, .Ljp7F08A544 -/* 0BED78 7F08A208 2401000C */ li $at, 12 -/* 0BED7C 7F08A20C 506100CE */ beql $v1, $at, .Ljp7F08A548 -/* 0BED80 7F08A210 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BED84 7F08A214 C45000DC */ lwc1 $f16, 0xdc($v0) -/* 0BED88 7F08A218 E45000E4 */ swc1 $f16, 0xe4($v0) -/* 0BED8C 7F08A21C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BED90 7F08A220 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BED94 7F08A224 C45200E0 */ lwc1 $f18, 0xe0($v0) -/* 0BED98 7F08A228 0FC26C01 */ jal getPlayerCount -/* 0BED9C 7F08A22C E45200E8 */ swc1 $f18, 0xe8($v0) -/* 0BEDA0 7F08A230 28410002 */ slti $at, $v0, 2 -/* 0BEDA4 7F08A234 54200035 */ bnezl $at, .Ljp7F08A30C -/* 0BEDA8 7F08A238 8FA30050 */ lw $v1, 0x50($sp) -/* 0BEDAC 7F08A23C 0FC26F3C */ jal get_cur_playernum -/* 0BEDB0 7F08A240 00000000 */ nop -/* 0BEDB4 7F08A244 AFA20038 */ sw $v0, 0x38($sp) -/* 0BEDB8 7F08A248 C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 0BEDBC 7F08A24C 0FC16BD4 */ jal atan2f -/* 0BEDC0 7F08A250 C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 0BEDC4 7F08A254 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0BEDC8 7F08A258 44812000 */ mtc1 $at, $f4 -/* 0BEDCC 7F08A25C 3C018005 */ lui $at, %hi(pi_800552B0) # $at, 0x8005 -/* 0BEDD0 7F08A260 C42A52E0 */ lwc1 $f10, %lo(pi_800552B0)($at) -/* 0BEDD4 7F08A264 46040202 */ mul.s $f8, $f0, $f4 -/* 0BEDD8 7F08A268 8FB80038 */ lw $t8, 0x38($sp) -/* 0BEDDC 7F08A26C 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BEDE0 7F08A270 3C088008 */ lui $t0, %hi(g_playerPointers) -/* 0BEDE4 7F08A274 0018C880 */ sll $t9, $t8, 2 -/* 0BEDE8 7F08A278 44818000 */ mtc1 $at, $f16 -/* 0BEDEC 7F08A27C 01194021 */ addu $t0, $t0, $t9 -/* 0BEDF0 7F08A280 460A4183 */ div.s $f6, $f8, $f10 -/* 0BEDF4 7F08A284 8D089F50 */ lw $t0, %lo(g_playerPointers)($t0) -/* 0BEDF8 7F08A288 44806000 */ mtc1 $zero, $f12 -/* 0BEDFC 7F08A28C 8FA9004C */ lw $t1, 0x4c($sp) -/* 0BEE00 7F08A290 C5040148 */ lwc1 $f4, 0x148($t0) -/* 0BEE04 7F08A294 3C0142B4 */ li $at, 0x42B40000 # 90.000000 -/* 0BEE08 7F08A298 000950C0 */ sll $t2, $t1, 3 -/* 0BEE0C 7F08A29C 3C0B8008 */ lui $t3, %hi(g_playerPlayerData) # $t3, 0x8008 -/* 0BEE10 7F08A2A0 01495023 */ subu $t2, $t2, $t1 -/* 0BEE14 7F08A2A4 44814000 */ mtc1 $at, $f8 -/* 0BEE18 7F08A2A8 000A5100 */ sll $t2, $t2, 4 -/* 0BEE1C 7F08A2AC 256B9F60 */ addiu $t3, %lo(g_playerPlayerData) # addiu $t3, $t3, -0x60a0 -/* 0BEE20 7F08A2B0 3C014387 */ li $at, 0x43870000 # 270.000000 -/* 0BEE24 7F08A2B4 014B1021 */ addu $v0, $t2, $t3 -/* 0BEE28 7F08A2B8 46068481 */ sub.s $f18, $f16, $f6 -/* 0BEE2C 7F08A2BC 46122081 */ sub.s $f2, $f4, $f18 -/* 0BEE30 7F08A2C0 460C103C */ c.lt.s $f2, $f12 -/* 0BEE34 7F08A2C4 00000000 */ nop -/* 0BEE38 7F08A2C8 45020003 */ bc1fl .Ljp7F08A2D8 -/* 0BEE3C 7F08A2CC 4608103C */ c.lt.s $f2, $f8 -/* 0BEE40 7F08A2D0 46001087 */ neg.s $f2, $f2 -/* 0BEE44 7F08A2D4 4608103C */ c.lt.s $f2, $f8 -.Ljp7F08A2D8: -/* 0BEE48 7F08A2D8 00000000 */ nop -/* 0BEE4C 7F08A2DC 45030008 */ bc1tl .Ljp7F08A300 -/* 0BEE50 7F08A2E0 8C4C003C */ lw $t4, 0x3c($v0) -/* 0BEE54 7F08A2E4 44815000 */ mtc1 $at, $f10 -/* 0BEE58 7F08A2E8 00000000 */ nop -/* 0BEE5C 7F08A2EC 4602503C */ c.lt.s $f10, $f2 -/* 0BEE60 7F08A2F0 00000000 */ nop -/* 0BEE64 7F08A2F4 45020005 */ bc1fl .Ljp7F08A30C -/* 0BEE68 7F08A2F8 8FA30050 */ lw $v1, 0x50($sp) -/* 0BEE6C 7F08A2FC 8C4C003C */ lw $t4, 0x3c($v0) -.Ljp7F08A300: -/* 0BEE70 7F08A300 258D0001 */ addiu $t5, $t4, 1 -/* 0BEE74 7F08A304 AC4D003C */ sw $t5, 0x3c($v0) -/* 0BEE78 7F08A308 8FA30050 */ lw $v1, 0x50($sp) -.Ljp7F08A30C: -/* 0BEE7C 7F08A30C 44806000 */ mtc1 $zero, $f12 -/* 0BEE80 7F08A310 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BEE84 7F08A314 10600010 */ beqz $v1, .Ljp7F08A358 -/* 0BEE88 7F08A318 00000000 */ nop -/* 0BEE8C 7F08A31C 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BEE90 7F08A320 C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0BEE94 7F08A324 C44000E0 */ lwc1 $f0, 0xe0($v0) -/* 0BEE98 7F08A328 C4422A40 */ lwc1 $f2, 0x2a40($v0) -/* 0BEE9C 7F08A32C 46020402 */ mul.s $f16, $f0, $f2 -/* 0BEEA0 7F08A330 4610303E */ c.le.s $f6, $f16 -/* 0BEEA4 7F08A334 00000000 */ nop -/* 0BEEA8 7F08A338 45000007 */ bc1f .Ljp7F08A358 -/* 0BEEAC 7F08A33C 00000000 */ nop -/* 0BEEB0 7F08A340 46023103 */ div.s $f4, $f6, $f2 -/* 0BEEB4 7F08A344 46040481 */ sub.s $f18, $f0, $f4 -/* 0BEEB8 7F08A348 E45200E0 */ swc1 $f18, 0xe0($v0) -/* 0BEEBC 7F08A34C 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BEEC0 7F08A350 1000005E */ b .Ljp7F08A4CC -/* 0BEEC4 7F08A354 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.Ljp7F08A358: -/* 0BEEC8 7F08A358 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BEECC 7F08A35C 1060000F */ beqz $v1, .Ljp7F08A39C -/* 0BEED0 7F08A360 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BEED4 7F08A364 C44800E0 */ lwc1 $f8, 0xe0($v0) -/* 0BEED8 7F08A368 C44A2A40 */ lwc1 $f10, 0x2a40($v0) -/* 0BEEDC 7F08A36C C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0BEEE0 7F08A370 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BEEE4 7F08A374 460A4403 */ div.s $f16, $f8, $f10 -/* 0BEEE8 7F08A378 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8008 -/* 0BEEEC 7F08A37C 44819000 */ mtc1 $at, $f18 -/* 0BEEF0 7F08A380 46103101 */ sub.s $f4, $f6, $f16 -/* 0BEEF4 7F08A384 E7A4003C */ swc1 $f4, 0x3c($sp) -/* 0BEEF8 7F08A388 E44C00E0 */ swc1 $f12, 0xe0($v0) -/* 0BEEFC 7F08A38C 8DCEA120 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BEF00 7F08A390 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BEF04 7F08A394 E5D22A40 */ swc1 $f18, 0x2a40($t6) -/* 0BEF08 7F08A398 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.Ljp7F08A39C: -/* 0BEF0C 7F08A39C C7A8003C */ lwc1 $f8, 0x3c($sp) -/* 0BEF10 7F08A3A0 C44A2A3C */ lwc1 $f10, 0x2a3c($v0) -/* 0BEF14 7F08A3A4 C45000DC */ lwc1 $f16, 0xdc($v0) -/* 0BEF18 7F08A3A8 460A4183 */ div.s $f6, $f8, $f10 -/* 0BEF1C 7F08A3AC 46068101 */ sub.s $f4, $f16, $f6 -/* 0BEF20 7F08A3B0 E44400DC */ swc1 $f4, 0xdc($v0) -/* 0BEF24 7F08A3B4 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BEF28 7F08A3B8 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BEF2C 7F08A3BC C45200DC */ lwc1 $f18, 0xdc($v0) -/* 0BEF30 7F08A3C0 460C903E */ c.le.s $f18, $f12 -/* 0BEF34 7F08A3C4 00000000 */ nop -/* 0BEF38 7F08A3C8 45020041 */ bc1fl .Ljp7F08A4D0 -/* 0BEF3C 7F08A3CC C44800F4 */ lwc1 $f8, 0xf4($v0) -/* 0BEF40 7F08A3D0 0FC26C01 */ jal getPlayerCount -/* 0BEF44 7F08A3D4 00000000 */ nop -/* 0BEF48 7F08A3D8 28410002 */ slti $at, $v0, 2 -/* 0BEF4C 7F08A3DC 14200036 */ bnez $at, .Ljp7F08A4B8 -/* 0BEF50 7F08A3E0 00000000 */ nop -/* 0BEF54 7F08A3E4 0FC26F3C */ jal get_cur_playernum -/* 0BEF58 7F08A3E8 00000000 */ nop -/* 0BEF5C 7F08A3EC AFA2002C */ sw $v0, 0x2c($sp) -/* 0BEF60 7F08A3F0 0FC05202 */ jal get_scenario -/* 0BEF64 7F08A3F4 AFA00028 */ sw $zero, 0x28($sp) -/* 0BEF68 7F08A3F8 24010003 */ li $at, 3 -/* 0BEF6C 7F08A3FC 14410006 */ bne $v0, $at, .Ljp7F08A418 -/* 0BEF70 7F08A400 00000000 */ nop -/* 0BEF74 7F08A404 0FC23649 */ jal bondinvHasGoldenGun -/* 0BEF78 7F08A408 00000000 */ nop -/* 0BEF7C 7F08A40C 10400002 */ beqz $v0, .Ljp7F08A418 -/* 0BEF80 7F08A410 240F0001 */ li $t7, 1 -/* 0BEF84 7F08A414 AFAF0028 */ sw $t7, 0x28($sp) -.Ljp7F08A418: -/* 0BEF88 7F08A418 0FC15B1E */ jal drop_inventory -/* 0BEF8C 7F08A41C 00000000 */ nop -/* 0BEF90 7F08A420 8FB8002C */ lw $t8, 0x2c($sp) -/* 0BEF94 7F08A424 8FB9004C */ lw $t9, 0x4c($sp) -/* 0BEF98 7F08A428 13190003 */ beq $t8, $t9, .Ljp7F08A438 -/* 0BEF9C 7F08A42C 00000000 */ nop -/* 0BEFA0 7F08A430 0FC1ABD2 */ jal increment_num_deaths -/* 0BEFA4 7F08A434 00000000 */ nop -.Ljp7F08A438: -/* 0BEFA8 7F08A438 0FC26F2B */ jal set_cur_player -/* 0BEFAC 7F08A43C 8FA4004C */ lw $a0, 0x4c($sp) -/* 0BEFB0 7F08A440 8FA8002C */ lw $t0, 0x2c($sp) -/* 0BEFB4 7F08A444 8FA9004C */ lw $t1, 0x4c($sp) -/* 0BEFB8 7F08A448 15090005 */ bne $t0, $t1, .Ljp7F08A460 -/* 0BEFBC 7F08A44C 00000000 */ nop -/* 0BEFC0 7F08A450 0FC1AC01 */ jal increment_num_suicides_display_MP -/* 0BEFC4 7F08A454 00000000 */ nop -/* 0BEFC8 7F08A458 10000008 */ b .Ljp7F08A47C -/* 0BEFCC 7F08A45C 00000000 */ nop -.Ljp7F08A460: -/* 0BEFD0 7F08A460 0FC1AB5B */ jal increment_num_kills_display_text_in_MP -/* 0BEFD4 7F08A464 00000000 */ nop -/* 0BEFD8 7F08A468 8FAA0028 */ lw $t2, 0x28($sp) -/* 0BEFDC 7F08A46C 11400003 */ beqz $t2, .Ljp7F08A47C -/* 0BEFE0 7F08A470 00000000 */ nop -/* 0BEFE4 7F08A474 0FC1ABC8 */ jal increment_num_times_killed_MwtGC -/* 0BEFE8 7F08A478 00000000 */ nop -.Ljp7F08A47C: -/* 0BEFEC 7F08A47C 0FC26F2B */ jal set_cur_player -/* 0BEFF0 7F08A480 8FA4002C */ lw $a0, 0x2c($sp) -/* 0BEFF4 7F08A484 8FAB004C */ lw $t3, 0x4c($sp) -/* 0BEFF8 7F08A488 8FAD002C */ lw $t5, 0x2c($sp) -/* 0BEFFC 7F08A48C 3C188008 */ lui $t8, %hi(g_playerPlayerData) # $t8, 0x8008 -/* 0BF000 7F08A490 000B60C0 */ sll $t4, $t3, 3 -/* 0BF004 7F08A494 018B6023 */ subu $t4, $t4, $t3 -/* 0BF008 7F08A498 000C6100 */ sll $t4, $t4, 4 -/* 0BF00C 7F08A49C 000D7080 */ sll $t6, $t5, 2 -/* 0BF010 7F08A4A0 018E7821 */ addu $t7, $t4, $t6 -/* 0BF014 7F08A4A4 27189F60 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x60a0 -/* 0BF018 7F08A4A8 01F81021 */ addu $v0, $t7, $t8 -/* 0BF01C 7F08A4AC 8C590024 */ lw $t9, 0x24($v0) -/* 0BF020 7F08A4B0 27280001 */ addiu $t0, $t9, 1 -/* 0BF024 7F08A4B4 AC480024 */ sw $t0, 0x24($v0) -.Ljp7F08A4B8: -/* 0BF028 7F08A4B8 0FC2279F */ jal bondviewKillCurrentPlayer -/* 0BF02C 7F08A4BC 00000000 */ nop -/* 0BF030 7F08A4C0 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BF034 7F08A4C4 44806000 */ mtc1 $zero, $f12 -/* 0BF038 7F08A4C8 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.Ljp7F08A4CC: -/* 0BF03C 7F08A4CC C44800F4 */ lwc1 $f8, 0xf4($v0) -.Ljp7F08A4D0: -/* 0BF040 7F08A4D0 C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 0BF044 7F08A4D4 3C098008 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8008 -/* 0BF048 7F08A4D8 460C403C */ c.lt.s $f8, $f12 -/* 0BF04C 7F08A4DC 00000000 */ nop -/* 0BF050 7F08A4E0 4502000F */ bc1fl .Ljp7F08A520 -/* 0BF054 7F08A4E4 E44C00F4 */ swc1 $f12, 0xf4($v0) -/* 0BF058 7F08A4E8 460A5400 */ add.s $f16, $f10, $f10 -/* 0BF05C 7F08A4EC C4460180 */ lwc1 $f6, 0x180($v0) -/* 0BF060 7F08A4F0 46103100 */ add.s $f4, $f6, $f16 -/* 0BF064 7F08A4F4 E4440180 */ swc1 $f4, 0x180($v0) -/* 0BF068 7F08A4F8 C7B20048 */ lwc1 $f18, 0x48($sp) -/* 0BF06C 7F08A4FC 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BF070 7F08A500 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BF074 7F08A504 46129200 */ add.s $f8, $f18, $f18 -/* 0BF078 7F08A508 C44A0188 */ lwc1 $f10, 0x188($v0) -/* 0BF07C 7F08A50C 46085180 */ add.s $f6, $f10, $f8 -/* 0BF080 7F08A510 E4460188 */ swc1 $f6, 0x188($v0) -/* 0BF084 7F08A514 3C028008 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8008 -/* 0BF088 7F08A518 8C42A120 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BF08C 7F08A51C E44C00F4 */ swc1 $f12, 0xf4($v0) -.Ljp7F08A520: -/* 0BF090 7F08A520 8D29A120 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0BF094 7F08A524 0FC3021B */ jal lvlGetControlsLockedFlag -/* 0BF098 7F08A528 E52C00F8 */ swc1 $f12, 0xf8($t1) -/* 0BF09C 7F08A52C 14400005 */ bnez $v0, .Ljp7F08A544 -/* 0BF0A0 7F08A530 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 0BF0A4 7F08A534 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0BF0A8 7F08A538 24050044 */ li $a1, 68 -/* 0BF0AC 7F08A53C 0C002386 */ jal sndPlaySfx -/* 0BF0B0 7F08A540 00003025 */ move $a2, $zero -.Ljp7F08A544: -/* 0BF0B4 7F08A544 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F08A548: -/* 0BF0B8 7F08A548 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0BF0BC 7F08A54C 03E00008 */ jr $ra -/* 0BF0C0 7F08A550 00000000 */ nop -) -#endif - -#if defined(VERSION_EU) -GLOBAL_ASM( -.late_rodata -glabel pi_800552B0 -.word 0x40490fdb /*3.1415927*/ -.text -glabel record_damage_kills -/* 0BC474 7F089A84 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0BC478 7F089A88 3C0E8007 */ lui $t6, %hi(g_playerPerm) # $t6, 0x8007 -/* 0BC47C 7F089A8C 8DCE8BC4 */ lw $t6, %lo(g_playerPerm)($t6) -/* 0BC480 7F089A90 AFBF0014 */ sw $ra, 0x14($sp) -/* 0BC484 7F089A94 E7AE0044 */ swc1 $f14, 0x44($sp) -/* 0BC488 7F089A98 AFA60048 */ sw $a2, 0x48($sp) -/* 0BC48C 7F089A9C AFA7004C */ sw $a3, 0x4c($sp) -/* 0BC490 7F089AA0 C5C4005C */ lwc1 $f4, 0x5c($t6) -/* 0BC494 7F089AA4 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 -/* 0BC498 7F089AA8 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) -/* 0BC49C 7F089AAC 460C2182 */ mul.s $f6, $f4, $f12 -/* 0BC4A0 7F089AB0 E7A6003C */ swc1 $f6, 0x3c($sp) -/* 0BC4A4 7F089AB4 8DF801C8 */ lw $t8, 0x1c8($t7) -/* 0BC4A8 7F089AB8 13000013 */ beqz $t8, .L7F089B08 -/* 0BC4AC 7F089ABC 00000000 */ nop -/* 0BC4B0 7F089AC0 0FC22932 */ jal get_BONDdata_watch_armor -/* 0BC4B4 7F089AC4 00000000 */ nop -/* 0BC4B8 7F089AC8 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 0BC4BC 7F089ACC 8C848BC0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BC4C0 7F089AD0 44070000 */ mfc1 $a3, $f0 -/* 0BC4C4 7F089AD4 2405002E */ li $a1, 46 -/* 0BC4C8 7F089AD8 24060001 */ li $a2, 1 -/* 0BC4CC 7F089ADC 0FC2891C */ jal sub_GAME_7F0A2F30 -/* 0BC4D0 7F089AE0 248412B0 */ addiu $a0, $a0, 0x12b0 -/* 0BC4D4 7F089AE4 0FC2292E */ jal bondviewGetCurrentPlayerHealth -/* 0BC4D8 7F089AE8 00000000 */ nop -/* 0BC4DC 7F089AEC 3C048007 */ lui $a0, %hi(g_CurrentPlayer) # $a0, 0x8007 -/* 0BC4E0 7F089AF0 8C848BC0 */ lw $a0, %lo(g_CurrentPlayer)($a0) -/* 0BC4E4 7F089AF4 44070000 */ mfc1 $a3, $f0 -/* 0BC4E8 7F089AF8 2405002E */ li $a1, 46 -/* 0BC4EC 7F089AFC 2406FFFF */ li $a2, -1 -/* 0BC4F0 7F089B00 0FC2891C */ jal sub_GAME_7F0A2F30 -/* 0BC4F4 7F089B04 24841590 */ addiu $a0, $a0, 0x1590 -.L7F089B08: -/* 0BC4F8 7F089B08 0FC26669 */ jal getPlayerCount -/* 0BC4FC 7F089B0C 00000000 */ nop -/* 0BC500 7F089B10 28410002 */ slti $at, $v0, 2 -/* 0BC504 7F089B14 14200007 */ bnez $at, .L7F089B34 -/* 0BC508 7F089B18 3C198007 */ lui $t9, %hi(g_stopPlayFlag) # $t9, 0x8007 -/* 0BC50C 7F089B1C 8F393AE0 */ lw $t9, %lo(g_stopPlayFlag)($t9) -/* 0BC510 7F089B20 3C088007 */ lui $t0, %hi(g_gameOverFlag) # $t0, 0x8007 -/* 0BC514 7F089B24 5720012D */ bnezl $t9, .L7F089FDC -/* 0BC518 7F089B28 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BC51C 7F089B2C 8D083AE4 */ lw $t0, %lo(g_gameOverFlag)($t0) -/* 0BC520 7F089B30 15000129 */ bnez $t0, .L7F089FD8 -.L7F089B34: -/* 0BC524 7F089B34 3C098003 */ lui $t1, %hi(in_tank_flag) # $t1, 0x8003 -/* 0BC528 7F089B38 8D291998 */ lw $t1, %lo(in_tank_flag)($t1) -/* 0BC52C 7F089B3C 24010001 */ li $at, 1 -/* 0BC530 7F089B40 C7A8003C */ lwc1 $f8, 0x3c($sp) -/* 0BC534 7F089B44 15210006 */ bne $t1, $at, .L7F089B60 -/* 0BC538 7F089B48 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC53C 7F089B4C 3C013E80 */ li $at, 0x3E800000 # 0.250000 -/* 0BC540 7F089B50 44815000 */ mtc1 $at, $f10 -/* 0BC544 7F089B54 00000000 */ nop -/* 0BC548 7F089B58 460A4402 */ mul.s $f16, $f8, $f10 -/* 0BC54C 7F089B5C E7B0003C */ swc1 $f16, 0x3c($sp) -.L7F089B60: -/* 0BC550 7F089B60 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC554 7F089B64 8C4A00D8 */ lw $t2, 0xd8($v0) -/* 0BC558 7F089B68 15400016 */ bnez $t2, .L7F089BC4 -/* 0BC55C 7F089B6C 00000000 */ nop -/* 0BC560 7F089B70 904B12AE */ lbu $t3, 0x12ae($v0) -/* 0BC564 7F089B74 15600013 */ bnez $t3, .L7F089BC4 -/* 0BC568 7F089B78 00000000 */ nop -/* 0BC56C 7F089B7C 0FC269A4 */ jal get_cur_playernum -/* 0BC570 7F089B80 00000000 */ nop -/* 0BC574 7F089B84 00402025 */ move $a0, $v0 -/* 0BC578 7F089B88 0C002D72 */ jal joyRumblePakStart -/* 0BC57C 7F089B8C 3C053E80 */ lui $a1, 0x3e80 -/* 0BC580 7F089B90 0FC29038 */ jal cur_player_get_control_type -/* 0BC584 7F089B94 00000000 */ nop -/* 0BC588 7F089B98 28410004 */ slti $at, $v0, 4 -/* 0BC58C 7F089B9C 14200009 */ bnez $at, .L7F089BC4 -/* 0BC590 7F089BA0 00000000 */ nop -/* 0BC594 7F089BA4 0FC269A4 */ jal get_cur_playernum -/* 0BC598 7F089BA8 00000000 */ nop -/* 0BC59C 7F089BAC 0FC26669 */ jal getPlayerCount -/* 0BC5A0 7F089BB0 AFA2001C */ sw $v0, 0x1c($sp) -/* 0BC5A4 7F089BB4 8FAC001C */ lw $t4, 0x1c($sp) -/* 0BC5A8 7F089BB8 3C053E80 */ lui $a1, 0x3e80 -/* 0BC5AC 7F089BBC 0C002D72 */ jal joyRumblePakStart -/* 0BC5B0 7F089BC0 004C2021 */ addu $a0, $v0, $t4 -.L7F089BC4: -/* 0BC5B4 7F089BC4 0FC26669 */ jal getPlayerCount -/* 0BC5B8 7F089BC8 00000000 */ nop -/* 0BC5BC 7F089BCC 28410002 */ slti $at, $v0, 2 -/* 0BC5C0 7F089BD0 14200010 */ bnez $at, .L7F089C14 -/* 0BC5C4 7F089BD4 00000000 */ nop -/* 0BC5C8 7F089BD8 0FC051B2 */ jal get_scenario -/* 0BC5CC 7F089BDC 00000000 */ nop -/* 0BC5D0 7F089BE0 24010004 */ li $at, 4 -/* 0BC5D4 7F089BE4 1441000B */ bne $v0, $at, .L7F089C14 -/* 0BC5D8 7F089BE8 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC5DC 7F089BEC 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC5E0 7F089BF0 C45200DC */ lwc1 $f18, 0xdc($v0) -/* 0BC5E4 7F089BF4 C4442A34 */ lwc1 $f4, 0x2a34($v0) -/* 0BC5E8 7F089BF8 C44800E0 */ lwc1 $f8, 0xe0($v0) -/* 0BC5EC 7F089BFC C44A2A38 */ lwc1 $f10, 0x2a38($v0) -/* 0BC5F0 7F089C00 46049182 */ mul.s $f6, $f18, $f4 -/* 0BC5F4 7F089C04 00000000 */ nop -/* 0BC5F8 7F089C08 460A4402 */ mul.s $f16, $f8, $f10 -/* 0BC5FC 7F089C0C 46103480 */ add.s $f18, $f6, $f16 -/* 0BC600 7F089C10 E7B2003C */ swc1 $f18, 0x3c($sp) -.L7F089C14: -/* 0BC604 7F089C14 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC608 7F089C18 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC60C 7F089C1C 904D12AE */ lbu $t5, 0x12ae($v0) -/* 0BC610 7F089C20 55A000EE */ bnezl $t5, .L7F089FDC -/* 0BC614 7F089C24 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BC618 7F089C28 8C4E00D8 */ lw $t6, 0xd8($v0) -/* 0BC61C 7F089C2C 3C0F8003 */ lui $t7, %hi(g_PlayerInvincible) # $t7, 0x8003 -/* 0BC620 7F089C30 55C000EA */ bnezl $t6, .L7F089FDC -/* 0BC624 7F089C34 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BC628 7F089C38 8DEF1A04 */ lw $t7, %lo(g_PlayerInvincible)($t7) -/* 0BC62C 7F089C3C 55E000E7 */ bnezl $t7, .L7F089FDC -/* 0BC630 7F089C40 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BC634 7F089C44 C44400F4 */ lwc1 $f4, 0xf4($v0) -/* 0BC638 7F089C48 44804000 */ mtc1 $zero, $f8 -/* 0BC63C 7F089C4C 00000000 */ nop -/* 0BC640 7F089C50 4608203C */ c.lt.s $f4, $f8 -/* 0BC644 7F089C54 00000000 */ nop -/* 0BC648 7F089C58 4503000E */ bc1tl .L7F089C94 -/* 0BC64C 7F089C5C 8C4301C8 */ lw $v1, 0x1c8($v0) -/* 0BC650 7F089C60 0FC26669 */ jal getPlayerCount -/* 0BC654 7F089C64 00000000 */ nop -/* 0BC658 7F089C68 28410002 */ slti $at, $v0, 2 -/* 0BC65C 7F089C6C 142000DA */ bnez $at, .L7F089FD8 -/* 0BC660 7F089C70 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC664 7F089C74 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC668 7F089C78 44805000 */ mtc1 $zero, $f10 -/* 0BC66C 7F089C7C C44600F4 */ lwc1 $f6, 0xf4($v0) -/* 0BC670 7F089C80 46065032 */ c.eq.s $f10, $f6 -/* 0BC674 7F089C84 00000000 */ nop -/* 0BC678 7F089C88 450200D4 */ bc1fl .L7F089FDC -/* 0BC67C 7F089C8C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BC680 7F089C90 8C4301C8 */ lw $v1, 0x1c8($v0) -.L7F089C94: -/* 0BC684 7F089C94 24010005 */ li $at, 5 -/* 0BC688 7F089C98 106100CF */ beq $v1, $at, .L7F089FD8 -/* 0BC68C 7F089C9C 2401000C */ li $at, 12 -/* 0BC690 7F089CA0 506100CE */ beql $v1, $at, .L7F089FDC -/* 0BC694 7F089CA4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0BC698 7F089CA8 C45000DC */ lwc1 $f16, 0xdc($v0) -/* 0BC69C 7F089CAC E45000E4 */ swc1 $f16, 0xe4($v0) -/* 0BC6A0 7F089CB0 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC6A4 7F089CB4 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC6A8 7F089CB8 C45200E0 */ lwc1 $f18, 0xe0($v0) -/* 0BC6AC 7F089CBC 0FC26669 */ jal getPlayerCount -/* 0BC6B0 7F089CC0 E45200E8 */ swc1 $f18, 0xe8($v0) -/* 0BC6B4 7F089CC4 28410002 */ slti $at, $v0, 2 -/* 0BC6B8 7F089CC8 54200035 */ bnezl $at, .L7F089DA0 -/* 0BC6BC 7F089CCC 8FA30050 */ lw $v1, 0x50($sp) -/* 0BC6C0 7F089CD0 0FC269A4 */ jal get_cur_playernum -/* 0BC6C4 7F089CD4 00000000 */ nop -/* 0BC6C8 7F089CD8 AFA20038 */ sw $v0, 0x38($sp) -/* 0BC6CC 7F089CDC C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 0BC6D0 7F089CE0 0FC16BB8 */ jal atan2f -/* 0BC6D4 7F089CE4 C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 0BC6D8 7F089CE8 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0BC6DC 7F089CEC 44812000 */ mtc1 $at, $f4 -/* 0BC6E0 7F089CF0 3C018005 */ lui $at, %hi(pi_800552B0) # $at, 0x8005 -/* 0BC6E4 7F089CF4 C42AAE84 */ lwc1 $f10, %lo(pi_800552B0)($at) -/* 0BC6E8 7F089CF8 46040202 */ mul.s $f8, $f0, $f4 -/* 0BC6EC 7F089CFC 8FB80038 */ lw $t8, 0x38($sp) -/* 0BC6F0 7F089D00 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0BC6F4 7F089D04 3C088007 */ lui $t0, 0x8007 -/* 0BC6F8 7F089D08 0018C880 */ sll $t9, $t8, 2 -/* 0BC6FC 7F089D0C 44818000 */ mtc1 $at, $f16 -/* 0BC700 7F089D10 01194021 */ addu $t0, $t0, $t9 -/* 0BC704 7F089D14 460A4183 */ div.s $f6, $f8, $f10 -/* 0BC708 7F089D18 8D0889F0 */ lw $t0, -0x7610($t0) -/* 0BC70C 7F089D1C 44806000 */ mtc1 $zero, $f12 -/* 0BC710 7F089D20 8FA9004C */ lw $t1, 0x4c($sp) -/* 0BC714 7F089D24 C5040148 */ lwc1 $f4, 0x148($t0) -/* 0BC718 7F089D28 3C0142B4 */ li $at, 0x42B40000 # 90.000000 -/* 0BC71C 7F089D2C 000950C0 */ sll $t2, $t1, 3 -/* 0BC720 7F089D30 3C0B8007 */ lui $t3, %hi(g_playerPlayerData) # $t3, 0x8007 -/* 0BC724 7F089D34 01495023 */ subu $t2, $t2, $t1 -/* 0BC728 7F089D38 44814000 */ mtc1 $at, $f8 -/* 0BC72C 7F089D3C 000A5100 */ sll $t2, $t2, 4 -/* 0BC730 7F089D40 256B8A00 */ addiu $t3, %lo(g_playerPlayerData) # addiu $t3, $t3, -0x7600 -/* 0BC734 7F089D44 3C014387 */ li $at, 0x43870000 # 270.000000 -/* 0BC738 7F089D48 014B1021 */ addu $v0, $t2, $t3 -/* 0BC73C 7F089D4C 46068481 */ sub.s $f18, $f16, $f6 -/* 0BC740 7F089D50 46122081 */ sub.s $f2, $f4, $f18 -/* 0BC744 7F089D54 460C103C */ c.lt.s $f2, $f12 -/* 0BC748 7F089D58 00000000 */ nop -/* 0BC74C 7F089D5C 45020003 */ bc1fl .L7F089D6C -/* 0BC750 7F089D60 4608103C */ c.lt.s $f2, $f8 -/* 0BC754 7F089D64 46001087 */ neg.s $f2, $f2 -/* 0BC758 7F089D68 4608103C */ c.lt.s $f2, $f8 -.L7F089D6C: -/* 0BC75C 7F089D6C 00000000 */ nop -/* 0BC760 7F089D70 45030008 */ bc1tl .L7F089D94 -/* 0BC764 7F089D74 8C4C003C */ lw $t4, 0x3c($v0) -/* 0BC768 7F089D78 44815000 */ mtc1 $at, $f10 -/* 0BC76C 7F089D7C 00000000 */ nop -/* 0BC770 7F089D80 4602503C */ c.lt.s $f10, $f2 -/* 0BC774 7F089D84 00000000 */ nop -/* 0BC778 7F089D88 45020005 */ bc1fl .L7F089DA0 -/* 0BC77C 7F089D8C 8FA30050 */ lw $v1, 0x50($sp) -/* 0BC780 7F089D90 8C4C003C */ lw $t4, 0x3c($v0) -.L7F089D94: -/* 0BC784 7F089D94 258D0001 */ addiu $t5, $t4, 1 -/* 0BC788 7F089D98 AC4D003C */ sw $t5, 0x3c($v0) -/* 0BC78C 7F089D9C 8FA30050 */ lw $v1, 0x50($sp) -.L7F089DA0: -/* 0BC790 7F089DA0 44806000 */ mtc1 $zero, $f12 -/* 0BC794 7F089DA4 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC798 7F089DA8 10600010 */ beqz $v1, .L7F089DEC -/* 0BC79C 7F089DAC 00000000 */ nop -/* 0BC7A0 7F089DB0 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC7A4 7F089DB4 C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0BC7A8 7F089DB8 C44000E0 */ lwc1 $f0, 0xe0($v0) -/* 0BC7AC 7F089DBC C4422A38 */ lwc1 $f2, 0x2a38($v0) -/* 0BC7B0 7F089DC0 46020402 */ mul.s $f16, $f0, $f2 -/* 0BC7B4 7F089DC4 4610303E */ c.le.s $f6, $f16 -/* 0BC7B8 7F089DC8 00000000 */ nop -/* 0BC7BC 7F089DCC 45000007 */ bc1f .L7F089DEC -/* 0BC7C0 7F089DD0 00000000 */ nop -/* 0BC7C4 7F089DD4 46023103 */ div.s $f4, $f6, $f2 -/* 0BC7C8 7F089DD8 46040481 */ sub.s $f18, $f0, $f4 -/* 0BC7CC 7F089DDC E45200E0 */ swc1 $f18, 0xe0($v0) -/* 0BC7D0 7F089DE0 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC7D4 7F089DE4 1000005E */ b .L7F089F60 -/* 0BC7D8 7F089DE8 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.L7F089DEC: -/* 0BC7DC 7F089DEC 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC7E0 7F089DF0 1060000F */ beqz $v1, .L7F089E30 -/* 0BC7E4 7F089DF4 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC7E8 7F089DF8 C44800E0 */ lwc1 $f8, 0xe0($v0) -/* 0BC7EC 7F089DFC C44A2A38 */ lwc1 $f10, 0x2a38($v0) -/* 0BC7F0 7F089E00 C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0BC7F4 7F089E04 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0BC7F8 7F089E08 460A4403 */ div.s $f16, $f8, $f10 -/* 0BC7FC 7F089E0C 3C0E8007 */ lui $t6, %hi(g_CurrentPlayer) # $t6, 0x8007 -/* 0BC800 7F089E10 44819000 */ mtc1 $at, $f18 -/* 0BC804 7F089E14 46103101 */ sub.s $f4, $f6, $f16 -/* 0BC808 7F089E18 E7A4003C */ swc1 $f4, 0x3c($sp) -/* 0BC80C 7F089E1C E44C00E0 */ swc1 $f12, 0xe0($v0) -/* 0BC810 7F089E20 8DCE8BC0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 0BC814 7F089E24 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC818 7F089E28 E5D22A38 */ swc1 $f18, 0x2a38($t6) -/* 0BC81C 7F089E2C 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.L7F089E30: -/* 0BC820 7F089E30 C7A8003C */ lwc1 $f8, 0x3c($sp) -/* 0BC824 7F089E34 C44A2A34 */ lwc1 $f10, 0x2a34($v0) -/* 0BC828 7F089E38 C45000DC */ lwc1 $f16, 0xdc($v0) -/* 0BC82C 7F089E3C 460A4183 */ div.s $f6, $f8, $f10 -/* 0BC830 7F089E40 46068101 */ sub.s $f4, $f16, $f6 -/* 0BC834 7F089E44 E44400DC */ swc1 $f4, 0xdc($v0) -/* 0BC838 7F089E48 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC83C 7F089E4C 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC840 7F089E50 C45200DC */ lwc1 $f18, 0xdc($v0) -/* 0BC844 7F089E54 460C903E */ c.le.s $f18, $f12 -/* 0BC848 7F089E58 00000000 */ nop -/* 0BC84C 7F089E5C 45020041 */ bc1fl .L7F089F64 -/* 0BC850 7F089E60 C44800F4 */ lwc1 $f8, 0xf4($v0) -/* 0BC854 7F089E64 0FC26669 */ jal getPlayerCount -/* 0BC858 7F089E68 00000000 */ nop -/* 0BC85C 7F089E6C 28410002 */ slti $at, $v0, 2 -/* 0BC860 7F089E70 14200036 */ bnez $at, .L7F089F4C -/* 0BC864 7F089E74 00000000 */ nop -/* 0BC868 7F089E78 0FC269A4 */ jal get_cur_playernum -/* 0BC86C 7F089E7C 00000000 */ nop -/* 0BC870 7F089E80 AFA2002C */ sw $v0, 0x2c($sp) -/* 0BC874 7F089E84 0FC051B2 */ jal get_scenario -/* 0BC878 7F089E88 AFA00028 */ sw $zero, 0x28($sp) -/* 0BC87C 7F089E8C 24010003 */ li $at, 3 -/* 0BC880 7F089E90 14410006 */ bne $v0, $at, .L7F089EAC -/* 0BC884 7F089E94 00000000 */ nop -/* 0BC888 7F089E98 0FC234E9 */ jal bondinvHasGoldenGun -/* 0BC88C 7F089E9C 00000000 */ nop -/* 0BC890 7F089EA0 10400002 */ beqz $v0, .L7F089EAC -/* 0BC894 7F089EA4 240F0001 */ li $t7, 1 -/* 0BC898 7F089EA8 AFAF0028 */ sw $t7, 0x28($sp) -.L7F089EAC: -/* 0BC89C 7F089EAC 0FC15A97 */ jal drop_inventory -/* 0BC8A0 7F089EB0 00000000 */ nop -/* 0BC8A4 7F089EB4 8FB8002C */ lw $t8, 0x2c($sp) -/* 0BC8A8 7F089EB8 8FB9004C */ lw $t9, 0x4c($sp) -/* 0BC8AC 7F089EBC 13190003 */ beq $t8, $t9, .L7F089ECC -/* 0BC8B0 7F089EC0 00000000 */ nop -/* 0BC8B4 7F089EC4 0FC1AC41 */ jal increment_num_deaths -/* 0BC8B8 7F089EC8 00000000 */ nop -.L7F089ECC: -/* 0BC8BC 7F089ECC 0FC26993 */ jal set_cur_player -/* 0BC8C0 7F089ED0 8FA4004C */ lw $a0, 0x4c($sp) -/* 0BC8C4 7F089ED4 8FA8002C */ lw $t0, 0x2c($sp) -/* 0BC8C8 7F089ED8 8FA9004C */ lw $t1, 0x4c($sp) -/* 0BC8CC 7F089EDC 15090005 */ bne $t0, $t1, .L7F089EF4 -/* 0BC8D0 7F089EE0 00000000 */ nop -/* 0BC8D4 7F089EE4 0FC1AC70 */ jal increment_num_suicides_display_MP -/* 0BC8D8 7F089EE8 00000000 */ nop -/* 0BC8DC 7F089EEC 10000008 */ b .L7F089F10 -/* 0BC8E0 7F089EF0 00000000 */ nop -.L7F089EF4: -/* 0BC8E4 7F089EF4 0FC1ABCA */ jal increment_num_kills_display_text_in_MP -/* 0BC8E8 7F089EF8 00000000 */ nop -/* 0BC8EC 7F089EFC 8FAA0028 */ lw $t2, 0x28($sp) -/* 0BC8F0 7F089F00 11400003 */ beqz $t2, .L7F089F10 -/* 0BC8F4 7F089F04 00000000 */ nop -/* 0BC8F8 7F089F08 0FC1AC37 */ jal increment_num_times_killed_MwtGC -/* 0BC8FC 7F089F0C 00000000 */ nop -.L7F089F10: -/* 0BC900 7F089F10 0FC26993 */ jal set_cur_player -/* 0BC904 7F089F14 8FA4002C */ lw $a0, 0x2c($sp) -/* 0BC908 7F089F18 8FAB004C */ lw $t3, 0x4c($sp) -/* 0BC90C 7F089F1C 8FAD002C */ lw $t5, 0x2c($sp) -/* 0BC910 7F089F20 3C188007 */ lui $t8, %hi(g_playerPlayerData) # $t8, 0x8007 -/* 0BC914 7F089F24 000B60C0 */ sll $t4, $t3, 3 -/* 0BC918 7F089F28 018B6023 */ subu $t4, $t4, $t3 -/* 0BC91C 7F089F2C 000C6100 */ sll $t4, $t4, 4 -/* 0BC920 7F089F30 000D7080 */ sll $t6, $t5, 2 -/* 0BC924 7F089F34 018E7821 */ addu $t7, $t4, $t6 -/* 0BC928 7F089F38 27188A00 */ addiu $t8, %lo(g_playerPlayerData) # addiu $t8, $t8, -0x7600 -/* 0BC92C 7F089F3C 01F81021 */ addu $v0, $t7, $t8 -/* 0BC930 7F089F40 8C590024 */ lw $t9, 0x24($v0) -/* 0BC934 7F089F44 27280001 */ addiu $t0, $t9, 1 -/* 0BC938 7F089F48 AC480024 */ sw $t0, 0x24($v0) -.L7F089F4C: -/* 0BC93C 7F089F4C 0FC22644 */ jal bondviewKillCurrentPlayer -/* 0BC940 7F089F50 00000000 */ nop -/* 0BC944 7F089F54 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC948 7F089F58 44806000 */ mtc1 $zero, $f12 -/* 0BC94C 7F089F5C 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -.L7F089F60: -/* 0BC950 7F089F60 C44800F4 */ lwc1 $f8, 0xf4($v0) -.L7F089F64: -/* 0BC954 7F089F64 C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 0BC958 7F089F68 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 -/* 0BC95C 7F089F6C 460C403C */ c.lt.s $f8, $f12 -/* 0BC960 7F089F70 00000000 */ nop -/* 0BC964 7F089F74 4502000F */ bc1fl .L7F089FB4 -/* 0BC968 7F089F78 E44C00F4 */ swc1 $f12, 0xf4($v0) -/* 0BC96C 7F089F7C 460A5400 */ add.s $f16, $f10, $f10 -/* 0BC970 7F089F80 C4460180 */ lwc1 $f6, 0x180($v0) -/* 0BC974 7F089F84 46103100 */ add.s $f4, $f6, $f16 -/* 0BC978 7F089F88 E4440180 */ swc1 $f4, 0x180($v0) -/* 0BC97C 7F089F8C C7B20048 */ lwc1 $f18, 0x48($sp) -/* 0BC980 7F089F90 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC984 7F089F94 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC988 7F089F98 46129200 */ add.s $f8, $f18, $f18 -/* 0BC98C 7F089F9C C44A0188 */ lwc1 $f10, 0x188($v0) -/* 0BC990 7F089FA0 46085180 */ add.s $f6, $f10, $f8 -/* 0BC994 7F089FA4 E4460188 */ swc1 $f6, 0x188($v0) -/* 0BC998 7F089FA8 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0BC99C 7F089FAC 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0BC9A0 7F089FB0 E44C00F4 */ swc1 $f12, 0xf4($v0) -.L7F089FB4: -/* 0BC9A4 7F089FB4 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) -/* 0BC9A8 7F089FB8 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 0BC9AC 7F089FBC E52C00F8 */ swc1 $f12, 0xf8($t1) -/* 0BC9B0 7F089FC0 14400005 */ bnez $v0, .L7F089FD8 -/* 0BC9B4 7F089FC4 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 -/* 0BC9B8 7F089FC8 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0BC9BC 7F089FCC 24050044 */ li $a1, 68 -/* 0BC9C0 7F089FD0 0C00209A */ jal sndPlaySfx -/* 0BC9C4 7F089FD4 00003025 */ move $a2, $zero -.L7F089FD8: -/* 0BC9C8 7F089FD8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F089FDC: -/* 0BC9CC 7F089FDC 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0BC9D0 7F089FE0 03E00008 */ jr $ra -/* 0BC9D4 7F089FE4 00000000 */ nop -) -#endif - - - + g_CurrentPlayer->damageshowtime = ZERO_7F08991C; + g_CurrentPlayer->healthshowtime = ZERO_7F08991C; + +#undef ZERO_7F08991C + +#if defined(VERSION_EU) || defined(VERSION_JP) + if (!lvlGetControlsLockedFlag()) + { + sndPlaySfx(g_musicSfxBufferPtr, 0x44, 0); + } +#else + sndPlaySfx(g_musicSfxBufferPtr, 0x44, 0); #endif + } + } + } +} /** - * @param arg0: unknown - * @param rad: value in radians - * @param arg2: unknown - * @param arg3: unknown - * + * @param damage_amount: damage amount + * @param rad: damage source angle + * @param player_id: player index of player causing the damage + * @param affects_armor: boolean, does the damage apply to body armor (e.g. false when gas) + * * Address 0x7F089E4C. */ -void bondviewCallRecordDamageKills(f32 arg0, f32 rad, s32 arg2, s32 arg3) +void bondviewCallRecordDamageKills(f32 damage_amount, f32 angle, s32 playerid, s32 affects_armor) { - record_damage_kills(arg0, sinf(rad), cosf(rad), arg2, arg3); + record_damage_kills(damage_amount, sinf(angle), cosf(angle), playerid, affects_armor); } @@ -18311,7 +16853,7 @@ void bondviewGetPropHeightRelatedValues(PropRecord *arg0, struct rect4f **field_ temp_v0 = getPlayerPointerIndex(arg0); if (g_playerPointers[temp_v0]->field_AC != 0) { - if (getPlayerCount() == 1 || g_playerPointers[temp_v0]->bonddead == 0) + if (getPlayerCount() == 1 || g_playerPointers[temp_v0]->bonddead == FALSE) { if (g_playerPointers[temp_v0]->unknown != 1) { @@ -18363,7 +16905,7 @@ void bondviewUpdatePlayerCollisionBounds(void) * @param width: out parameter, will be set to field_488.collision_radius * @param height: out parameter, will be set to character height - 30 * @param always_30: out parameter, will be set to 30 - * + * * Address 0x7F08A274. */ void bondviewGetCollisionRadius(PropRecord* arg0, f32 *collision_radius, f32 *height, f32 *always_30) @@ -18416,7 +16958,7 @@ void bondviewAddCurrentPlayerArmor(f32 arg0) */ void bondviewResetIntroCameraMessageDialogs(void) { - g_CurrentPlayer->hudmessoff = 0; + g_CurrentPlayer->hudmessoff = FALSE; g_CurrentPlayer->bondmesscnt = -1; display_statusbar = 0; status_bar_text_buffer_index = 0; @@ -18496,22 +17038,26 @@ void hudmsgBottomShow(char *string) { s32 abs_index; s32 index; + #ifdef DEBUG + assert(font); + assert(wcslen(mess)<=MAXMESSAGELEN); + #endif if (getPlayerCount() == 1) { if (display_statusbar < 5) { abs_index = status_bar_text_buffer_index + display_statusbar; index = abs_index % 5; - strncpy(stringbuffer_lowerleft[index], string, 0x64U); + strncpy(stringbuffer_lowerleft[index], string, MAXMESSAGELEN); display_statusbar++; - stringbuffer_lowerleft[index][0x64] = 0; + stringbuffer_lowerleft[index][MAXMESSAGELEN] = 0; } } else { index = get_cur_playernum(); - strncpy(stringbuffer_lowerleft[index], string, 0x64U); - stringbuffer_lowerleft[index][0x64] = 0; + strncpy(stringbuffer_lowerleft[index], string, MAXMESSAGELEN); + stringbuffer_lowerleft[index][MAXMESSAGELEN] = 0; g_CurrentPlayer->bondmesscnt = 0x78; } } @@ -18532,7 +17078,7 @@ void jp_hudmsgBottomShow(char *string) */ void bondviewIntroCameraTextTick(void) { - if ((g_CurrentPlayer->hudmessoff == 0) && (g_CurrentPlayer->mpmenuon == 0)) + if ((g_CurrentPlayer->hudmessoff == FALSE) && (g_CurrentPlayer->mpmenuon == FALSE)) { if (g_CurrentPlayer->bondmesscnt >= 0) { @@ -18576,7 +17122,7 @@ Gfx* sub_GAME_7F08A5FC(Gfx* arg0) s32 view_top_offset; s32 view_left_offset; - if ((g_CurrentPlayer->hudmessoff == 0) && (g_CurrentPlayer->bondmesscnt >= 0) && (g_CurrentPlayer->mpmenuon == 0)) + if ((g_CurrentPlayer->hudmessoff == FALSE) && (g_CurrentPlayer->bondmesscnt >= 0) && (g_CurrentPlayer->mpmenuon == FALSE)) { var_v1 = 0; if (getPlayerCount() == 1) @@ -18676,7 +17222,9 @@ void bondviewSetUpperTextDisplayFlag(PLAYERFLAG flag) void hudmsgTopShow(char* string) { s32 index; - + #ifdef DEBUG + assert(wcslen(mess)<=MAXTALKMESSLEN); + #endif if (display_upper_text_window >= 2) { return; } index = (upper_text_buffer_index + display_upper_text_window) % 2; @@ -18697,7 +17245,7 @@ void hudmsgTopShow(char* string) */ void bondviewUpperTextWindowTimerTick(void) { - if ((g_UpperTextDisplayFlag == 0) && (g_CurrentPlayer->mpmenuon == 0)) + if ((g_UpperTextDisplayFlag == FALSE) && (g_CurrentPlayer->mpmenuon == FALSE)) { if (upper_text_window_timer >= 0) { @@ -18800,8 +17348,8 @@ glabel sub_GAME_7F08AAE8 /* 0BF6E4 7F08ABB4 AFA00014 */ sw $zero, 0x14($sp) /* 0BF6E8 7F08ABB8 0FC2BA63 */ jal textMeasure /* 0BF6EC 7F08ABBC AFAE0010 */ sw $t6, 0x10($sp) -/* 0BF6F0 7F08ABC0 3C0F8003 */ lui $t7, %hi(camera_8003642C) -/* 0BF6F4 7F08ABC4 8DEF642C */ lw $t7, %lo(camera_8003642C)($t7) +/* 0BF6F0 7F08ABC0 3C0F8003 */ lui $t7, %hi(cameraBufferToggle) +/* 0BF6F4 7F08ABC4 8DEF642C */ lw $t7, %lo(cameraBufferToggle)($t7) /* 0BF6F8 7F08ABC8 11E0001B */ beqz $t7, .L7F08AC38 /* 0BF6FC 7F08ABCC 00000000 */ nop /* 0BF700 7F08ABD0 0C001145 */ jal viGetViewLeft @@ -19202,8 +17750,8 @@ glabel sub_GAME_7F08AAE8 /* 0BFF00 7F08B390 AFA00014 */ sw $zero, 0x14($sp) /* 0BFF04 7F08B394 0FC2BD4F */ jal textMeasure /* 0BFF08 7F08B398 AFAE0010 */ sw $t6, 0x10($sp) -/* 0BFF0C 7F08B39C 3C0F8003 */ lui $t7, %hi(camera_8003642C) # $t7, 0x8003 -/* 0BFF10 7F08B3A0 8DEF646C */ lw $t7, %lo(camera_8003642C)($t7) +/* 0BFF0C 7F08B39C 3C0F8003 */ lui $t7, %hi(cameraBufferToggle) # $t7, 0x8003 +/* 0BFF10 7F08B3A0 8DEF646C */ lw $t7, %lo(cameraBufferToggle)($t7) /* 0BFF14 7F08B3A4 11E0001B */ beqz $t7, .Ljp7F08B414 /* 0BFF18 7F08B3A8 00000000 */ nop /* 0BFF1C 7F08B3AC 0C001145 */ jal viGetViewLeft @@ -19607,7 +18155,7 @@ glabel sub_GAME_7F08AAE8 /* 0BD740 7F08AD50 8DEF1DF8 */ lw $t7, %lo(upper_text_window_timer)($t7) /* 0BD744 7F08AD54 3C188003 */ lui $t8, %hi(upper_text_buffer_index) # $t8, 0x8003 /* 0BD748 7F08AD58 05E000AD */ bltz $t7, .L7F08B010 -/* 0BD74C 7F08AD5C 00000000 */ nop +/* 0BD74C 7F08AD5C 00000000 */ nop /* 0BD750 7F08AD60 8F181DF0 */ lw $t8, %lo(upper_text_buffer_index)($t8) /* 0BD754 7F08AD64 3C088007 */ lui $t0, %hi(dword_CODE_bss_80079DC8) /* 0BD758 7F08AD68 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 @@ -19620,13 +18168,13 @@ glabel sub_GAME_7F08AAE8 /* 0BD774 7F08AD84 01194021 */ addu $t0, $t0, $t9 /* 0BD778 7F08AD88 910887A8 */ lbu $t0, %lo(dword_CODE_bss_80079DC8)($t0) /* 0BD77C 7F08AD8C 110000A0 */ beqz $t0, .L7F08B010 -/* 0BD780 7F08AD90 00000000 */ nop +/* 0BD780 7F08AD90 00000000 */ nop /* 0BD784 7F08AD94 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) /* 0BD788 7F08AD98 8D2A29BC */ lw $t2, 0x29bc($t1) /* 0BD78C 7F08AD9C 1540009C */ bnez $t2, .L7F08B010 -/* 0BD790 7F08ADA0 00000000 */ nop +/* 0BD790 7F08ADA0 00000000 */ nop /* 0BD794 7F08ADA4 0FC2B016 */ jal microcode_constructor -/* 0BD798 7F08ADA8 00000000 */ nop +/* 0BD798 7F08ADA8 00000000 */ nop /* 0BD79C 7F08ADAC 3C0B8003 */ lui $t3, %hi(upper_text_buffer_index) # $t3, 0x8003 /* 0BD7A0 7F08ADB0 8D6B1DF0 */ lw $t3, %lo(upper_text_buffer_index)($t3) /* 0BD7A4 7F08ADB4 3C0E8004 */ lui $t6, %hi(ptrFontZurichBold) # $t6, 0x8004 @@ -19650,12 +18198,12 @@ glabel sub_GAME_7F08AAE8 /* 0BD7EC 7F08ADFC AFA00014 */ sw $zero, 0x14($sp) /* 0BD7F0 7F08AE00 0FC2B713 */ jal textMeasure /* 0BD7F4 7F08AE04 AFAE0010 */ sw $t6, 0x10($sp) -/* 0BD7F8 7F08AE08 3C0F8003 */ lui $t7, %hi(camera_8003642C) # $t7, 0x8003 -/* 0BD7FC 7F08AE0C 8DEF197C */ lw $t7, %lo(camera_8003642C)($t7) +/* 0BD7F8 7F08AE08 3C0F8003 */ lui $t7, %hi(cameraBufferToggle) # $t7, 0x8003 +/* 0BD7FC 7F08AE0C 8DEF197C */ lw $t7, %lo(cameraBufferToggle)($t7) /* 0BD800 7F08AE10 11E0001B */ beqz $t7, .L7F08AE80 -/* 0BD804 7F08AE14 00000000 */ nop +/* 0BD804 7F08AE14 00000000 */ nop /* 0BD808 7F08AE18 0C000FD9 */ jal viGetViewLeft -/* 0BD80C 7F08AE1C 00000000 */ nop +/* 0BD80C 7F08AE1C 00000000 */ nop /* 0BD810 7F08AE20 24580046 */ addiu $t8, $v0, 0x46 /* 0BD814 7F08AE24 0C000FDD */ jal viGetViewTop /* 0BD818 7F08AE28 AFB800E4 */ sw $t8, 0xe4($sp) @@ -19664,19 +18212,19 @@ glabel sub_GAME_7F08AAE8 /* 0BD824 7F08AE34 2404000B */ li $a0, 11 /* 0BD828 7F08AE38 0064001A */ div $zero, $v1, $a0 /* 0BD82C 7F08AE3C 14800002 */ bnez $a0, .L7F08AE48 -/* 0BD830 7F08AE40 00000000 */ nop +/* 0BD830 7F08AE40 00000000 */ nop /* 0BD834 7F08AE44 0007000D */ break 7 .L7F08AE48: /* 0BD838 7F08AE48 2401FFFF */ li $at, -1 /* 0BD83C 7F08AE4C 14810004 */ bne $a0, $at, .L7F08AE60 /* 0BD840 7F08AE50 3C018000 */ lui $at, 0x8000 /* 0BD844 7F08AE54 14610002 */ bne $v1, $at, .L7F08AE60 -/* 0BD848 7F08AE58 00000000 */ nop +/* 0BD848 7F08AE58 00000000 */ nop /* 0BD84C 7F08AE5C 0006000D */ break 6 .L7F08AE60: /* 0BD850 7F08AE60 00001812 */ mflo $v1 -/* 0BD854 7F08AE64 00000000 */ nop -/* 0BD858 7F08AE68 00000000 */ nop +/* 0BD854 7F08AE64 00000000 */ nop +/* 0BD858 7F08AE68 00000000 */ nop /* 0BD85C 7F08AE6C 00640019 */ multu $v1, $a0 /* 0BD860 7F08AE70 00001812 */ mflo $v1 /* 0BD864 7F08AE74 2463FFFE */ addiu $v1, $v1, -2 @@ -19684,7 +18232,7 @@ glabel sub_GAME_7F08AAE8 /* 0BD86C 7F08AE7C 8FA800D8 */ lw $t0, 0xd8($sp) .L7F08AE80: /* 0BD870 7F08AE80 0C000FD9 */ jal viGetViewLeft -/* 0BD874 7F08AE84 00000000 */ nop +/* 0BD874 7F08AE84 00000000 */ nop /* 0BD878 7F08AE88 2459001E */ addiu $t9, $v0, 0x1e /* 0BD87C 7F08AE8C 0C000FDD */ jal viGetViewTop /* 0BD880 7F08AE90 AFB900E4 */ sw $t9, 0xe4($sp) @@ -19709,9 +18257,9 @@ glabel sub_GAME_7F08AAE8 /* 0BD8C8 7F08AED8 8D8C1150 */ lw $t4, %lo(j_text_trigger)($t4) /* 0BD8CC 7F08AEDC 00408025 */ move $s0, $v0 /* 0BD8D0 7F08AEE0 11800026 */ beqz $t4, .L7F08AF7C -/* 0BD8D4 7F08AEE4 00000000 */ nop +/* 0BD8D4 7F08AEE4 00000000 */ nop /* 0BD8D8 7F08AEE8 0C000F9B */ jal viGetX -/* 0BD8DC 7F08AEEC 00000000 */ nop +/* 0BD8DC 7F08AEEC 00000000 */ nop /* 0BD8E0 7F08AEF0 0C000F9F */ jal viGetY /* 0BD8E4 7F08AEF4 A7A20048 */ sh $v0, 0x48($sp) /* 0BD8E8 7F08AEF8 3C0D8003 */ lui $t5, %hi(upper_text_buffer_index) # $t5, 0x8003 @@ -19749,7 +18297,7 @@ glabel sub_GAME_7F08AAE8 /* 0BD968 7F08AF78 00408025 */ move $s0, $v0 .L7F08AF7C: /* 0BD96C 7F08AF7C 0C000F9B */ jal viGetX -/* 0BD970 7F08AF80 00000000 */ nop +/* 0BD970 7F08AF80 00000000 */ nop /* 0BD974 7F08AF84 0C000F9F */ jal viGetY /* 0BD978 7F08AF88 A7A20048 */ sh $v0, 0x48($sp) /* 0BD97C 7F08AF8C 3C0B8003 */ lui $t3, %hi(upper_text_buffer_index) # $t3, 0x8003 @@ -19788,7 +18336,7 @@ glabel sub_GAME_7F08AAE8 /* 0BD9FC 7F08B00C 00408025 */ move $s0, $v0 .L7F08B010: /* 0BDA00 7F08B010 0FC2410E */ jal get_debug_testingmanpos_flag -/* 0BDA04 7F08B014 00000000 */ nop +/* 0BDA04 7F08B014 00000000 */ nop /* 0BDA08 7F08B018 104000ED */ beqz $v0, .L7F08B3D0 /* 0BDA0C 7F08B01C 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 /* 0BDA10 7F08B020 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) @@ -19808,7 +18356,7 @@ glabel sub_GAME_7F08AAE8 /* 0BDA48 7F08B058 46083283 */ div.s $f10, $f6, $f8 /* 0BDA4C 7F08B05C 4600540D */ trunc.w.s $f16, $f10 /* 0BDA50 7F08B060 44098000 */ mfc1 $t1, $f16 -/* 0BDA54 7F08B064 00000000 */ nop +/* 0BDA54 7F08B064 00000000 */ nop /* 0BDA58 7F08B068 AFA90068 */ sw $t1, 0x68($sp) /* 0BDA5C 7F08B06C 8D610000 */ lw $at, ($t3) /* 0BDA60 7F08B070 8D6E0004 */ lw $t6, 4($t3) @@ -19843,7 +18391,7 @@ glabel sub_GAME_7F08AAE8 /* 0BDAD4 7F08B0E4 44072000 */ mfc1 $a3, $f4 /* 0BDAD8 7F08B0E8 44062800 */ mfc1 $a2, $f5 /* 0BDADC 7F08B0EC 0C00283D */ jal sprintf -/* 0BDAE0 7F08B0F0 00000000 */ nop +/* 0BDAE0 7F08B0F0 00000000 */ nop /* 0BDAE4 7F08B0F4 3C088007 */ lui $t0, %hi(g_CurrentPlayer) # $t0, 0x8007 /* 0BDAE8 7F08B0F8 8D088BC0 */ lw $t0, %lo(g_CurrentPlayer)($t0) /* 0BDAEC 7F08B0FC 3C058005 */ lui $a1, %hi(aY4_0f) # $a1, 0x8005 @@ -19854,7 +18402,7 @@ glabel sub_GAME_7F08AAE8 /* 0BDB00 7F08B110 44074000 */ mfc1 $a3, $f8 /* 0BDB04 7F08B114 44064800 */ mfc1 $a2, $f9 /* 0BDB08 7F08B118 0C00283D */ jal sprintf -/* 0BDB0C 7F08B11C 00000000 */ nop +/* 0BDB0C 7F08B11C 00000000 */ nop /* 0BDB10 7F08B120 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 /* 0BDB14 7F08B124 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) /* 0BDB18 7F08B128 3C058005 */ lui $a1, %hi(aZ4_0f) # $a1, 0x8005 @@ -19865,7 +18413,7 @@ glabel sub_GAME_7F08AAE8 /* 0BDB2C 7F08B13C 44078000 */ mfc1 $a3, $f16 /* 0BDB30 7F08B140 44068800 */ mfc1 $a2, $f17 /* 0BDB34 7F08B144 0C00283D */ jal sprintf -/* 0BDB38 7F08B148 00000000 */ nop +/* 0BDB38 7F08B148 00000000 */ nop /* 0BDB3C 7F08B14C 8FA70068 */ lw $a3, 0x68($sp) /* 0BDB40 7F08B150 2401002D */ li $at, 45 /* 0BDB44 7F08B154 3C058005 */ lui $a1, %hi(aS3d) # $a1, 0x8005 @@ -19880,7 +18428,7 @@ glabel sub_GAME_7F08AAE8 /* 0BDB68 7F08B178 0C00283D */ jal sprintf /* 0BDB6C 7F08B17C 27A40084 */ addiu $a0, $sp, 0x84 /* 0BDB70 7F08B180 0C000FD9 */ jal viGetViewLeft -/* 0BDB74 7F08B184 00000000 */ nop +/* 0BDB74 7F08B184 00000000 */ nop /* 0BDB78 7F08B188 244E0011 */ addiu $t6, $v0, 0x11 /* 0BDB7C 7F08B18C 0C000FDD */ jal viGetViewTop /* 0BDB80 7F08B190 AFAE0080 */ sw $t6, 0x80($sp) @@ -20043,7 +18591,10 @@ glabel sub_GAME_7F08AAE8 #ifdef NONMATCHING -void sub_GAME_7F08B0F0(void) { +/* +* Address: 0x7F08B0F0 +*/ +void playerTickBeams(void) { } #else @@ -20062,7 +18613,7 @@ glabel D_800552CC glabel D_800552D0 .word 0x40c90fdb /*6.2831855*/ .text -glabel sub_GAME_7F08B0F0 +glabel playerTickBeams /* 0BFC20 7F08B0F0 27BDFF08 */ addiu $sp, $sp, -0xf8 /* 0BFC24 7F08B0F4 AFBF0024 */ sw $ra, 0x24($sp) /* 0BFC28 7F08B0F8 AFB10020 */ sw $s1, 0x20($sp) @@ -20109,7 +18660,7 @@ glabel sub_GAME_7F08B0F0 /* 0BFCC4 7F08B194 8E390000 */ lw $t9, ($s1) .L7F08B198: /* 0BFCC8 7F08B198 AF2000AC */ sw $zero, 0xac($t9) -/* 0BFCCC 7F08B19C 0FC083BC */ jal sub_GAME_7F020EF0 +/* 0BFCCC 7F08B19C 0FC083BC */ jal chrTickBeams /* 0BFCD0 7F08B1A0 8FA400F8 */ lw $a0, 0xf8($sp) /* 0BFCD4 7F08B1A4 8E2A0000 */ lw $t2, ($s1) /* 0BFCD8 7F08B1A8 AFA200E8 */ sw $v0, 0xe8($sp) @@ -20791,7 +19342,7 @@ glabel sub_GAME_7F08B0F0 /* 0C0688 7F08BB58 24050001 */ li $a1, 1 /* 0C068C 7F08BB5C 0FC0B446 */ jal chrSetFiring /* 0C0690 7F08BB60 81C60C25 */ lb $a2, 0xc25($t6) -/* 0C0694 7F08BB64 0FC083BC */ jal sub_GAME_7F020EF0 +/* 0C0694 7F08BB64 0FC083BC */ jal chrTickBeams /* 0C0698 7F08BB68 8FA400F8 */ lw $a0, 0xf8($sp) /* 0C069C 7F08BB6C AFA200A0 */ sw $v0, 0xa0($sp) /* 0C06A0 7F08BB70 00003825 */ move $a3, $zero @@ -20900,7 +19451,7 @@ glabel D_8004AEA4 .word 0x40c90fdb .text -glabel sub_GAME_7F08B0F0 +glabel playerTickBeams /* 0BDDD4 7F08B3E4 27BDFF08 */ addiu $sp, $sp, -0xf8 /* 0BDDD8 7F08B3E8 AFBF0024 */ sw $ra, 0x24($sp) /* 0BDDDC 7F08B3EC AFB10020 */ sw $s1, 0x20($sp) @@ -20913,7 +19464,7 @@ glabel sub_GAME_7F08B0F0 /* 0BDDF8 7F08B408 11E0000B */ beqz $t7, .L7F08B438 /* 0BDDFC 7F08B40C AFAF00F0 */ sw $t7, 0xf0($sp) /* 0BDE00 7F08B410 0FC269A4 */ jal get_cur_playernum -/* 0BDE04 7F08B414 00000000 */ nop +/* 0BDE04 7F08B414 00000000 */ nop /* 0BDE08 7F08B418 0FC26A86 */ jal sub_GAME_7F09B4D8 /* 0BDE0C 7F08B41C 00402025 */ move $a0, $v0 /* 0BDE10 7F08B420 54400006 */ bnezl $v0, .L7F08B43C @@ -20936,7 +19487,7 @@ glabel sub_GAME_7F08B0F0 /* 0BDE4C 7F08B45C 51C00048 */ beql $t6, $zero, .L7F08B580 /* 0BDE50 7F08B460 8FAF00F0 */ lw $t7, 0xf0($sp) /* 0BDE54 7F08B464 0FC240F8 */ jal get_debug_render_raster -/* 0BDE58 7F08B468 00000000 */ nop +/* 0BDE58 7F08B468 00000000 */ nop /* 0BDE5C 7F08B46C 50400007 */ beql $v0, $zero, .L7F08B48C /* 0BDE60 7F08B470 8E390000 */ lw $t9, ($s1) /* 0BDE64 7F08B474 8E2F0000 */ lw $t7, ($s1) @@ -20947,7 +19498,7 @@ glabel sub_GAME_7F08B0F0 /* 0BDE78 7F08B488 8E390000 */ lw $t9, ($s1) .L7F08B48C: /* 0BDE7C 7F08B48C AF2000AC */ sw $zero, 0xac($t9) -/* 0BDE80 7F08B490 0FC0839A */ jal sub_GAME_7F020EF0 +/* 0BDE80 7F08B490 0FC0839A */ jal chrTickBeams /* 0BDE84 7F08B494 8FA400F8 */ lw $a0, 0xf8($sp) /* 0BDE88 7F08B498 8E2A0000 */ lw $t2, ($s1) /* 0BDE8C 7F08B49C AFA200E8 */ sw $v0, 0xe8($sp) @@ -20975,7 +19526,7 @@ glabel sub_GAME_7F08B0F0 /* 0BDEE4 7F08B4F4 93190001 */ lbu $t9, 1($t8) /* 0BDEE8 7F08B4F8 33290002 */ andi $t1, $t9, 2 /* 0BDEEC 7F08B4FC 1120001D */ beqz $t1, .L7F08B574 -/* 0BDEF0 7F08B500 00000000 */ nop +/* 0BDEF0 7F08B500 00000000 */ nop /* 0BDEF4 7F08B504 8E2A0000 */ lw $t2, ($s1) /* 0BDEF8 7F08B508 8D4B00D4 */ lw $t3, 0xd4($t2) /* 0BDEFC 7F08B50C 0FC1E131 */ jal currentPlayerGetMatrix10D4 @@ -21021,12 +19572,12 @@ glabel sub_GAME_7F08B0F0 /* 0BDF90 7F08B5A0 51600279 */ beql $t3, $zero, .L7F08BF88 /* 0BDF94 7F08B5A4 8FAA00F8 */ lw $t2, 0xf8($sp) /* 0BDF98 7F08B5A8 0FC26669 */ jal getPlayerCount -/* 0BDF9C 7F08B5AC 00000000 */ nop +/* 0BDF9C 7F08B5AC 00000000 */ nop /* 0BDFA0 7F08B5B0 28410002 */ slti $at, $v0, 2 /* 0BDFA4 7F08B5B4 54200274 */ bnezl $at, .L7F08BF88 /* 0BDFA8 7F08B5B8 8FAA00F8 */ lw $t2, 0xf8($sp) /* 0BDFAC 7F08B5BC 0FC269A4 */ jal get_cur_playernum -/* 0BDFB0 7F08B5C0 00000000 */ nop +/* 0BDFB0 7F08B5C0 00000000 */ nop /* 0BDFB4 7F08B5C4 8FAC00F4 */ lw $t4, 0xf4($sp) /* 0BDFB8 7F08B5C8 3C01BF80 */ li $at, 0xBF800000 # -1.000000 /* 0BDFBC 7F08B5CC 24050001 */ li $a1, 1 @@ -21103,7 +19654,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE0C8 7F08B6D8 0044082B */ sltu $at, $v0, $a0 /* 0BE0CC 7F08B6DC 01435821 */ addu $t3, $t2, $v1 /* 0BE0D0 7F08B6E0 14CB0002 */ bne $a2, $t3, .L7F08B6EC -/* 0BE0D4 7F08B6E4 00000000 */ nop +/* 0BE0D4 7F08B6E4 00000000 */ nop /* 0BE0D8 7F08B6E8 24050001 */ li $a1, 1 .L7F08B6EC: /* 0BE0DC 7F08B6EC 5420FFF9 */ bnezl $at, .L7F08B6D4 @@ -21135,28 +19686,28 @@ glabel sub_GAME_7F08B0F0 /* 0BE13C 7F08B74C 44816000 */ mtc1 $at, $f12 /* 0BE140 7F08B750 C7A20094 */ lwc1 $f2, 0x94($sp) /* 0BE144 7F08B754 15800002 */ bnez $t4, .L7F08B760 -/* 0BE148 7F08B758 00000000 */ nop +/* 0BE148 7F08B758 00000000 */ nop /* 0BE14C 7F08B75C 0007000D */ break 7 .L7F08B760: /* 0BE150 7F08B760 8D06127C */ lw $a2, 0x127c($t0) .L7F08B764: /* 0BE154 7F08B764 44807000 */ mtc1 $zero, $f14 -/* 0BE158 7F08B768 00000000 */ nop +/* 0BE158 7F08B768 00000000 */ nop /* 0BE15C 7F08B76C E7AE008C */ swc1 $f14, 0x8c($sp) /* 0BE160 7F08B770 100000F6 */ b .L7F08BB4C /* 0BE164 7F08B774 E7AE0088 */ swc1 $f14, 0x88($sp) .L7F08B778: /* 0BE168 7F08B778 12000005 */ beqz $s0, .L7F08B790 -/* 0BE16C 7F08B77C 00000000 */ nop +/* 0BE16C 7F08B77C 00000000 */ nop /* 0BE170 7F08B780 10A00003 */ beqz $a1, .L7F08B790 -/* 0BE174 7F08B784 00000000 */ nop +/* 0BE174 7F08B784 00000000 */ nop /* 0BE178 7F08B788 1000002E */ b .L7F08B844 /* 0BE17C 7F08B78C 24100003 */ li $s0, 3 .L7F08B790: /* 0BE180 7F08B790 16000005 */ bnez $s0, .L7F08B7A8 -/* 0BE184 7F08B794 00000000 */ nop +/* 0BE184 7F08B794 00000000 */ nop /* 0BE188 7F08B798 14A00003 */ bnez $a1, .L7F08B7A8 -/* 0BE18C 7F08B79C 00000000 */ nop +/* 0BE18C 7F08B79C 00000000 */ nop /* 0BE190 7F08B7A0 10000028 */ b .L7F08B844 /* 0BE194 7F08B7A4 24100002 */ li $s0, 2 .L7F08B7A8: @@ -21173,7 +19724,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE1BC 7F08B7CC 8FA20058 */ lw $v0, 0x58($sp) /* 0BE1C0 7F08B7D0 24050200 */ li $a1, 512 /* 0BE1C4 7F08B7D4 10400008 */ beqz $v0, .L7F08B7F8 -/* 0BE1C8 7F08B7D8 00000000 */ nop +/* 0BE1C8 7F08B7D8 00000000 */ nop /* 0BE1CC 7F08B7DC 80440080 */ lb $a0, 0x80($v0) /* 0BE1D0 7F08B7E0 0FC1795B */ jal bondwalkItemCheckBitflags /* 0BE1D4 7F08B7E4 AFA3005C */ sw $v1, 0x5c($sp) @@ -21244,7 +19795,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE2C0 7F08B8D0 45020087 */ bc1fl .L7F08BAF0 /* 0BE2C4 7F08B8D4 00107900 */ sll $t7, $s0, 4 /* 0BE2C8 7F08B8D8 44815000 */ mtc1 $at, $f10 -/* 0BE2CC 7F08B8DC 00000000 */ nop +/* 0BE2CC 7F08B8DC 00000000 */ nop /* 0BE2D0 7F08B8E0 460A0480 */ add.s $f18, $f0, $f10 /* 0BE2D4 7F08B8E4 E5121278 */ swc1 $f18, 0x1278($t0) /* 0BE2D8 7F08B8E8 10000080 */ b .L7F08BAEC @@ -21270,7 +19821,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE324 7F08B934 4502006E */ bc1fl .L7F08BAF0 /* 0BE328 7F08B938 00107900 */ sll $t7, $s0, 4 /* 0BE32C 7F08B93C 44813000 */ mtc1 $at, $f6 -/* 0BE330 7F08B940 00000000 */ nop +/* 0BE330 7F08B940 00000000 */ nop /* 0BE334 7F08B944 46060201 */ sub.s $f8, $f0, $f6 /* 0BE338 7F08B948 E5081278 */ swc1 $f8, 0x1278($t0) /* 0BE33C 7F08B94C 10000067 */ b .L7F08BAEC @@ -21280,7 +19831,7 @@ glabel sub_GAME_7F08B0F0 .L7F08B958: /* 0BE348 7F08B958 3C018005 */ lui $at, %hi(D_8004AE94) # $at, 0x8005 /* 0BE34C 7F08B95C 460E103C */ c.lt.s $f2, $f14 -/* 0BE350 7F08B960 00000000 */ nop +/* 0BE350 7F08B960 00000000 */ nop /* 0BE354 7F08B964 45020003 */ bc1fl .L7F08B974 /* 0BE358 7F08B968 C5000174 */ lwc1 $f0, 0x174($t0) /* 0BE35C 7F08B96C 46001087 */ neg.s $f2, $f2 @@ -21289,13 +19840,13 @@ glabel sub_GAME_7F08B0F0 /* 0BE364 7F08B974 C42AAE94 */ lwc1 $f10, %lo(D_8004AE94)($at) /* 0BE368 7F08B978 3C018005 */ lui $at, %hi(D_8004AE9C) /* 0BE36C 7F08B97C 460A003C */ c.lt.s $f0, $f10 -/* 0BE370 7F08B980 00000000 */ nop +/* 0BE370 7F08B980 00000000 */ nop /* 0BE374 7F08B984 4500001D */ bc1f .L7F08B9FC -/* 0BE378 7F08B988 00000000 */ nop +/* 0BE378 7F08B988 00000000 */ nop /* 0BE37C 7F08B98C 46001087 */ neg.s $f2, $f2 /* 0BE380 7F08B990 3C018005 */ lui $at, %hi(D_8004AE9C) # $at, 0x8005 /* 0BE384 7F08B994 4602003C */ c.lt.s $f0, $f2 -/* 0BE388 7F08B998 00000000 */ nop +/* 0BE388 7F08B998 00000000 */ nop /* 0BE38C 7F08B99C 45020003 */ bc1fl .L7F08B9AC /* 0BE390 7F08B9A0 8D0D04E8 */ lw $t5, 0x4e8($t0) /* 0BE394 7F08B9A4 46000086 */ mov.s $f2, $f0 @@ -21306,16 +19857,16 @@ glabel sub_GAME_7F08B0F0 /* 0BE3A4 7F08B9B4 C432AE98 */ lwc1 $f18, %lo(D_8004AE98)($at) /* 0BE3A8 7F08B9B8 24040002 */ li $a0, 2 /* 0BE3AC 7F08B9BC 4600903C */ c.lt.s $f18, $f0 -/* 0BE3B0 7F08B9C0 00000000 */ nop +/* 0BE3B0 7F08B9C0 00000000 */ nop /* 0BE3B4 7F08B9C4 4500000B */ bc1f .L7F08B9F4 -/* 0BE3B8 7F08B9C8 00000000 */ nop +/* 0BE3B8 7F08B9C8 00000000 */ nop /* 0BE3BC 7F08B9CC 46021300 */ add.s $f12, $f2, $f2 .L7F08B9D0: /* 0BE3C0 7F08B9D0 3C01BF80 */ li $at, 0xBF800000 # -1.000000 /* 0BE3C4 7F08B9D4 44818000 */ mtc1 $at, $f16 /* 0BE3C8 7F08B9D8 24040001 */ li $a0, 1 /* 0BE3CC 7F08B9DC 4610603C */ c.lt.s $f12, $f16 -/* 0BE3D0 7F08B9E0 00000000 */ nop +/* 0BE3D0 7F08B9E0 00000000 */ nop /* 0BE3D4 7F08B9E4 4502002D */ bc1fl .L7F08BA9C /* 0BE3D8 7F08B9E8 C5001278 */ lwc1 $f0, 0x1278($t0) /* 0BE3DC 7F08B9EC 1000002A */ b .L7F08BA98 @@ -21326,7 +19877,7 @@ glabel sub_GAME_7F08B0F0 .L7F08B9FC: /* 0BE3EC 7F08B9FC C42CAE9C */ lwc1 $f12, %lo(D_8004AE9C)($at) /* 0BE3F0 7F08BA00 4600603C */ c.lt.s $f12, $f0 -/* 0BE3F4 7F08BA04 00000000 */ nop +/* 0BE3F4 7F08BA04 00000000 */ nop /* 0BE3F8 7F08BA08 45030006 */ bc1tl .L7F08BA24 /* 0BE3FC 7F08BA0C 4600103C */ c.lt.s $f2, $f0 /* 0BE400 7F08BA10 4602603C */ c.lt.s $f12, $f2 @@ -21346,9 +19897,9 @@ glabel sub_GAME_7F08B0F0 /* 0BE430 7F08BA40 C424AEA0 */ lwc1 $f4, %lo(D_8004AEA0)($at) /* 0BE434 7F08BA44 24040002 */ li $a0, 2 /* 0BE438 7F08BA48 4604003C */ c.lt.s $f0, $f4 -/* 0BE43C 7F08BA4C 00000000 */ nop +/* 0BE43C 7F08BA4C 00000000 */ nop /* 0BE440 7F08BA50 4500000D */ bc1f .L7F08BA88 -/* 0BE444 7F08BA54 00000000 */ nop +/* 0BE444 7F08BA54 00000000 */ nop /* 0BE448 7F08BA58 46021300 */ add.s $f12, $f2, $f2 .L7F08BA5C: /* 0BE44C 7F08BA5C 3C013F80 */ li $at, 0x3F800000 # 1.000000 @@ -21356,7 +19907,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE454 7F08BA64 24040001 */ li $a0, 1 /* 0BE458 7F08BA68 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0BE45C 7F08BA6C 460C303C */ c.lt.s $f6, $f12 -/* 0BE460 7F08BA70 00000000 */ nop +/* 0BE460 7F08BA70 00000000 */ nop /* 0BE464 7F08BA74 45020009 */ bc1fl .L7F08BA9C /* 0BE468 7F08BA78 C5001278 */ lwc1 $f0, 0x1278($t0) /* 0BE46C 7F08BA7C 44816000 */ mtc1 $at, $f12 @@ -21373,11 +19924,11 @@ glabel sub_GAME_7F08B0F0 .L7F08BA9C: /* 0BE48C 7F08BA9C 3C014170 */ li $at, 0x41700000 # 15.000000 /* 0BE490 7F08BAA0 4600703C */ c.lt.s $f14, $f0 -/* 0BE494 7F08BAA4 00000000 */ nop +/* 0BE494 7F08BAA4 00000000 */ nop /* 0BE498 7F08BAA8 45020008 */ bc1fl .L7F08BACC /* 0BE49C 7F08BAAC 460E003C */ c.lt.s $f0, $f14 /* 0BE4A0 7F08BAB0 44814000 */ mtc1 $at, $f8 -/* 0BE4A4 7F08BAB4 00000000 */ nop +/* 0BE4A4 7F08BAB4 00000000 */ nop /* 0BE4A8 7F08BAB8 46080281 */ sub.s $f10, $f0, $f8 /* 0BE4AC 7F08BABC E50A1278 */ swc1 $f10, 0x1278($t0) /* 0BE4B0 7F08BAC0 8E280000 */ lw $t0, ($s1) @@ -21388,7 +19939,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE4C0 7F08BAD0 45020007 */ bc1fl .L7F08BAF0 /* 0BE4C4 7F08BAD4 00107900 */ sll $t7, $s0, 4 /* 0BE4C8 7F08BAD8 44819000 */ mtc1 $at, $f18 -/* 0BE4CC 7F08BADC 00000000 */ nop +/* 0BE4CC 7F08BADC 00000000 */ nop /* 0BE4D0 7F08BAE0 46120100 */ add.s $f4, $f0, $f18 /* 0BE4D4 7F08BAE4 E5041278 */ swc1 $f4, 0x1278($t0) /* 0BE4D8 7F08BAE8 8E280000 */ lw $t0, ($s1) @@ -21445,20 +19996,20 @@ glabel sub_GAME_7F08B0F0 /* 0BE58C 7F08BB9C 24020001 */ li $v0, 1 /* 0BE590 7F08BBA0 C48A0090 */ lwc1 $f10, 0x90($a0) /* 0BE594 7F08BBA4 460A1032 */ c.eq.s $f2, $f10 -/* 0BE598 7F08BBA8 00000000 */ nop +/* 0BE598 7F08BBA8 00000000 */ nop /* 0BE59C 7F08BBAC 45030003 */ bc1tl .L7F08BBBC /* 0BE5A0 7F08BBB0 460E103C */ c.lt.s $f2, $f14 /* 0BE5A4 7F08BBB4 24020001 */ li $v0, 1 .L7F08BBB8: /* 0BE5A8 7F08BBB8 460E103C */ c.lt.s $f2, $f14 .L7F08BBBC: -/* 0BE5AC 7F08BBBC 00000000 */ nop +/* 0BE5AC 7F08BBBC 00000000 */ nop /* 0BE5B0 7F08BBC0 45000006 */ bc1f .L7F08BBDC -/* 0BE5B4 7F08BBC4 00000000 */ nop +/* 0BE5B4 7F08BBC4 00000000 */ nop /* 0BE5B8 7F08BBC8 8D1900D4 */ lw $t9, 0xd4($t0) /* 0BE5BC 7F08BBCC 832A0026 */ lb $t2, 0x26($t9) /* 0BE5C0 7F08BBD0 11400002 */ beqz $t2, .L7F08BBDC -/* 0BE5C4 7F08BBD4 00000000 */ nop +/* 0BE5C4 7F08BBD4 00000000 */ nop /* 0BE5C8 7F08BBD8 24020001 */ li $v0, 1 .L7F08BBDC: /* 0BE5CC 7F08BBDC 50400035 */ beql $v0, $zero, .L7F08BCB4 @@ -21500,11 +20051,11 @@ glabel sub_GAME_7F08B0F0 /* 0BE658 7F08BC68 0FC1BFDB */ jal modelSetAnimLooping /* 0BE65C 7F08BC6C 8DE400D4 */ lw $a0, 0xd4($t7) /* 0BE660 7F08BC70 44807000 */ mtc1 $zero, $f14 -/* 0BE664 7F08BC74 00000000 */ nop +/* 0BE664 7F08BC74 00000000 */ nop .L7F08BC78: /* 0BE668 7F08BC78 C7A40090 */ lwc1 $f4, 0x90($sp) /* 0BE66C 7F08BC7C 4604703E */ c.le.s $f14, $f4 -/* 0BE670 7F08BC80 00000000 */ nop +/* 0BE670 7F08BC80 00000000 */ nop /* 0BE674 7F08BC84 45020008 */ bc1fl .L7F08BCA8 /* 0BE678 7F08BC88 8E290000 */ lw $t1, ($s1) /* 0BE67C 7F08BC8C 8E380000 */ lw $t8, ($s1) @@ -21512,7 +20063,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE684 7F08BC94 0FC1BFE2 */ jal modelSetAnimEndFrame /* 0BE688 7F08BC98 8F0400D4 */ lw $a0, 0xd4($t8) /* 0BE68C 7F08BC9C 44807000 */ mtc1 $zero, $f14 -/* 0BE690 7F08BCA0 00000000 */ nop +/* 0BE690 7F08BCA0 00000000 */ nop /* 0BE694 7F08BCA4 8E290000 */ lw $t1, ($s1) .L7F08BCA8: /* 0BE698 7F08BCA8 10000011 */ b .L7F08BCF0 @@ -21520,7 +20071,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE6A0 7F08BCB0 C5061280 */ lwc1 $f6, 0x1280($t0) .L7F08BCB4: /* 0BE6A4 7F08BCB4 46066032 */ c.eq.s $f12, $f6 -/* 0BE6A8 7F08BCB8 00000000 */ nop +/* 0BE6A8 7F08BCB8 00000000 */ nop /* 0BE6AC 7F08BCBC 4503000D */ bc1tl .L7F08BCF4 /* 0BE6B0 7F08BCC0 8FAB009C */ lw $t3, 0x9c($sp) /* 0BE6B4 7F08BCC4 8D0400D4 */ lw $a0, 0xd4($t0) @@ -21611,7 +20162,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE7F4 7F08BE04 46003103 */ div.s $f4, $f6, $f0 /* 0BE7F8 7F08BE08 44052000 */ mfc1 $a1, $f4 /* 0BE7FC 7F08BE0C 0FC1B49D */ jal setsubroty -/* 0BE800 7F08BE10 00000000 */ nop +/* 0BE800 7F08BE10 00000000 */ nop /* 0BE804 7F08BE14 8FA400F0 */ lw $a0, 0xf0($sp) /* 0BE808 7F08BE18 240A0019 */ li $t2, 25 /* 0BE80C 7F08BE1C 00002825 */ move $a1, $zero @@ -21629,7 +20180,7 @@ glabel sub_GAME_7F08B0F0 /* 0BE83C 7F08BE4C 24050001 */ li $a1, 1 /* 0BE840 7F08BE50 0FC0B453 */ jal chrSetFiring /* 0BE844 7F08BE54 81C60C1D */ lb $a2, 0xc1d($t6) -/* 0BE848 7F08BE58 0FC0839A */ jal sub_GAME_7F020EF0 +/* 0BE848 7F08BE58 0FC0839A */ jal chrTickBeams /* 0BE84C 7F08BE5C 8FA400F8 */ lw $a0, 0xf8($sp) /* 0BE850 7F08BE60 AFA200A0 */ sw $v0, 0xa0($sp) /* 0BE854 7F08BE64 00003825 */ move $a3, $zero @@ -21778,7 +20329,7 @@ Gfx* bondviewGfxPlayerField5cMatrix(Gfx* gdl) /** * Unreferenced. - * + * * Address 0x7F08BD18. */ void bondviewTransformPosToViewMatrix(RenderPosView *arg0) @@ -21793,9 +20344,9 @@ void bondviewTransformPosToViewMatrix(RenderPosView *arg0) /** * Address 0x7F08BD48. - * + * * Notes: Similar to sub_GAME_7F08BE2C. - * + * */ void bondviewTransformManyPosToViewMatrix(RenderPosView * arg0, s32 arg1) { @@ -21821,7 +20372,7 @@ void bondviewTransformManyPosToViewMatrix(RenderPosView * arg0, s32 arg1) /** * Unreferenced. - * + * * Address 0x7F08BDC4. */ void sub_GAME_7F08BDC4(Mtxf *arg0) @@ -21836,6 +20387,11 @@ void sub_GAME_7F08BDC4(Mtxf *arg0) } +/** + * Unreferenced. + * + * Address 0x7F08BE2C. + */ void sub_GAME_7F08BE2C(Mtxf *matrices, s32 count) { Mtxf copy; diff --git a/src/game/bondview.h b/src/game/bondview.h index c01296c..822b315 100644 --- a/src/game/bondview.h +++ b/src/game/bondview.h @@ -27,7 +27,7 @@ typedef struct invitem_dual /** unknown struct, used in `strut player`. * We know this is a struct from the compiler auto-generated * code to copy structs in bondview.c bondviewKillCurrentPlayer. - * + * * sizeof == 84 (0x54) */ struct collision434 { @@ -45,8 +45,8 @@ struct collision434 { /** * This affects Bond's movement, but not the viewport. * This does not affect boost direction. - * - * f[0]: forward component (sin theta) in radians + * + * f[0]: forward component (sin theta) in radians * f[1]: zero * f[2]: sideways component (cos theta) in radians. * Offset 0x10. @@ -142,18 +142,18 @@ struct hand s32 field_938; s32 field_93C; s32 field_940; - s32 field_944; + f32 field_944; s32 field_948; - s32 field_94C; + f32 field_94C; s32 field_950; s32 field_954; s32 field_958; s32 field_95C; s32 field_960; s32 field_964; - s32 field_968; + f32 field_968; s32 field_96C; - s32 field_970; + f32 field_970; s32 field_974; coord3d blendpos[4]; coord3d blendlook[4]; @@ -203,7 +203,7 @@ struct hand // offset 0xad8 Mtxf throw_item_pos_related; - + s32 field_B18; s32 field_B1C; s32 field_B20; @@ -286,10 +286,10 @@ typedef struct textoverride { /*0x00*/ u32 unk1; /*0x04*/ s32 objoffset; /*0x08*/ s32 weapon; - /*0x0c*/ u32 unk4; - /*0x10*/ u32 unk5; - /*0x14*/ u32 unk6; - /*0x18*/ u32 unk7; + /*0x0c*/ u32 titletext1; //1st title + /*0x10*/ u32 titletext2;//2nd title + /*0x14*/ u32 shorttext; + /*0x18*/ u32 longtext; //longname /*0x1c*/ u32 pickuptext; /*0x20*/ struct textoverride *next; /*0x24*/ struct ObjectRecord *obj; @@ -381,7 +381,7 @@ struct player * Offset 0x007c. */ /* 0x007c */ f32 field_7C; - + /* 0x0080 */ f32 field_80; /** @@ -406,13 +406,13 @@ struct player * Collision / clipping related. * When Bond falls off a ladder or similar, will "overshoot" vertical default. * Current offset is stored in this field. - * + * * Offset 0x0090. */ /* 0x0090 */ f32 vertical_bounce_adjust; /* 0x0094 */ s32 field_94; /* 0x0098 */ f32 field_98; - + /** * Flag: 0, 1, 2 */ @@ -437,7 +437,7 @@ struct player struct rect4f collision_bounds; /* 0x00d0 */ s32 field_D0; - /* 0x00d4 */ s32 *ptr_char_objectinstance; + /* 0x00d4 */ struct Model *ptr_char_objectinstance; //canonically bondsub /* 0x00d8 */ s32 bonddead; /* 0x00dc */ f32 bondhealth; /* 0x00e0 */ f32 bondarmour; @@ -458,7 +458,7 @@ struct player * 0x00f4 **/ f32 damageshowtime; - + /** * When a non-negative integer: * - Show health and body armor overlay if Bond isn't dead. @@ -501,25 +501,25 @@ struct player /* 0x0144 */ s32 autoxaimtime60; /* 0x0148 */ f32 vv_theta; /* 0x014c */ f32 speedtheta; - + /** * Computed value from vv_theta, used to calculate boost direction. * 0x0150 **/ f32 vv_costheta; - + /** * Computed value from vv_theta, used to calculate boost direction. * 0x0154 **/ f32 vv_sintheta; - + /** * Vertical look angle. * 0x0158 **/ f32 vv_verta; - + /** * Vertical look angle. Computed value from vv_verta, should always be between 0 and 360 degrees. * 0x015c @@ -527,13 +527,13 @@ struct player f32 vv_verta360; /* 0x0160 */ f32 speedverta; - + /** * Computed value from vv_verta360, but otherwise unused? * 0x0164 **/ f32 vv_cosverta; - + /** * Computed value from vv_verta360, but otherwise unused? * 0x0168 @@ -555,7 +555,7 @@ struct player * How long Bond has been running */ /* 0x017c */ s32 speedmaxtime60; - + coord3d bondshotspeed; //0x180 // offset 0x18c @@ -572,7 +572,7 @@ struct player // offset 0x19c f32 bondbreathing; - + s32 field_1A0; s32 field_1A4; s32 field_1A8; @@ -589,8 +589,8 @@ struct player */ s32 watch_pause_time; - s32 field_1C4; - s32 watch_animation_state; + /* 0x01c4 */ s32 timer_1C4; + /* 0x01c8 */ s32 watch_animation_state; /** * 1 = level is active @@ -638,7 +638,7 @@ struct player * Offset 0x022c. */ f32 pause_watch_related_scaled; - + s32 something_with_watch_object_instance; s32 field_234; @@ -779,10 +779,10 @@ struct player * Offset 0x408. */ coord3d bondprevpos; //0x408 - + f32 thetadie; //0x414 f32 vertadie; //0x418 - s32 bondtype; + s32 bondtype; s32 startnewbonddie; //0x420 /** @@ -796,7 +796,7 @@ struct player * Offset 0x428. */ s32 deathanimfinished; - s32 field_42c; + s32 field_42c; s32 controldef; //0x430 struct collision434 previous_collision_info; @@ -848,11 +848,11 @@ struct player s32 field_5B0; s32 field_5B4; s32 field_5B8; - s8 field_5BC; + s8 animFlipFlag; s8 field_5BD; s8 field_5BE; s8 field_5BF; - + f32 field_5C0; s32 field_5C4; @@ -946,16 +946,16 @@ struct player * Offset 0x7f6. */ s16 viewtop; - + s32 hand_invisible[2]; /* 0x7f8*/ ITEM_IDS hand_item[2]; /* 0x800 */ ModelFileHeader *ptr_hand_weapon_buffer[2]; /* 0x808 */ - + /** * Offset 0x810. */ ModelFileHeader copy_of_body_obj_header[2]; - + struct texpool item_related[2]; /* 0x850 */ /** @@ -972,7 +972,7 @@ struct player * Offset 0xfcc. */ s32 field_FCC; - + // Seems to be copy of field_FCC s32 field_FD0; @@ -1010,7 +1010,7 @@ struct player f32 field_1080; f32 sniper_zoom; f32 camera_zoom; - s32 field_108C; + s32 curRoomIndex; /** * Offset 0x1090. @@ -1118,7 +1118,7 @@ struct player * Used during level. * 0x2: no crosshair * 0x0: cross hair shown on screen. - * + * * Offset 0x1128. */ s32 gunsightmode; @@ -1163,378 +1163,12 @@ struct player /** * Offset 0x12b4. */ - u8 something_with_cheat_text; - u8 can_display_cheat_text; - u8 bondinvincible; - u8 field_12B7; - s32 healthdamagetype; - s32 field_12BC; - s32 field_12C0; - s32 field_12C4; - s32 field_12C8; - s32 field_12CC; - s32 field_12D0; - s32 field_12D4; - s32 field_12D8; - s32 field_12DC; - s32 field_12E0; - s32 field_12E4; - s32 field_12E8; - s32 field_12EC; - s32 field_12F0; - s32 field_12F4; - s32 field_12F8; - s32 field_12FC; - s32 field_1300; - s32 field_1304; - s32 field_1308; - s32 field_130C; - s32 field_1310; - s32 field_1314; - s32 field_1318; - s32 field_131C; - s32 field_1320; - s32 field_1324; - s32 field_1328; - s32 field_132C; - s32 field_1330; - s32 field_1334; - s32 field_1338; - s32 field_133C; - s32 field_1340; - s32 field_1344; - s32 field_1348; - s32 field_134C; - s32 field_1350; - s32 field_1354; - s32 field_1358; - s32 field_135C; - s32 field_1360; - s32 field_1364; - s32 field_1368; - s32 field_136C; - s32 field_1370; - s32 field_1374; - s32 field_1378; - s32 field_137C; - s32 field_1380; - s32 field_1384; - s32 field_1388; - s32 field_138C; - s32 field_1390; - s32 field_1394; - s32 field_1398; - s32 field_139C; - s32 field_13A0; - s32 field_13A4; - s32 field_13A8; - s32 field_13AC; - s32 field_13B0; - s32 field_13B4; - s32 field_13B8; - s32 field_13BC; - s32 field_13C0; - s32 field_13C4; - s32 field_13C8; - s32 field_13CC; - s32 field_13D0; - s32 field_13D4; - s32 field_13D8; - s32 field_13DC; - s32 field_13E0; - s32 field_13E4; - s32 field_13E8; - s32 field_13EC; - s32 field_13F0; - s32 field_13F4; - s32 field_13F8; - s32 field_13FC; - s32 field_1400; - s32 field_1404; - s32 field_1408; - s32 field_140C; - s32 field_1410; - s32 field_1414; - s32 field_1418; - s32 field_141C; - s32 field_1420; - s32 field_1424; - s32 field_1428; - s32 field_142C; - s32 field_1430; - s32 field_1434; - s32 field_1438; - s32 field_143C; - s32 field_1440; - s32 field_1444; - s32 field_1448; - s32 field_144C; - s32 field_1450; - s32 field_1454; - s32 field_1458; - s32 field_145C; - s32 field_1460; - s32 field_1464; - s32 field_1468; - s32 field_146C; - s32 field_1470; - s32 field_1474; - s32 field_1478; - s32 field_147C; - s32 field_1480; - s32 field_1484; - s32 field_1488; - s32 field_148C; - s32 field_1490; - s32 field_1494; - s32 field_1498; - s32 field_149C; - s32 field_14A0; - s32 field_14A4; - s32 field_14A8; - s32 field_14AC; - s32 field_14B0; - s32 field_14B4; - s32 field_14B8; - s32 field_14BC; - s32 field_14C0; - s32 field_14C4; - s32 field_14C8; - s32 field_14CC; - s32 field_14D0; - s32 field_14D4; - s32 field_14D8; - s32 field_14DC; - s32 field_14E0; - s32 field_14E4; - s32 field_14E8; - s32 field_14EC; - s32 field_14F0; - s32 field_14F4; - s32 field_14F8; - s32 field_14FC; - s32 field_1500; - s32 field_1504; - s32 field_1508; - s32 field_150C; - s32 field_1510; - s32 field_1514; - s32 field_1518; - s32 field_151C; - s32 field_1520; - s32 field_1524; - s32 field_1528; - s32 field_152C; - s32 field_1530; - s32 field_1534; - s32 field_1538; - s32 field_153C; - s32 field_1540; - s32 field_1544; - s32 field_1548; - s32 field_154C; - s32 field_1550; - s32 field_1554; - s32 field_1558; - s32 field_155C; - s32 field_1560; - s32 field_1564; - s32 field_1568; - s32 field_156C; - s32 field_1570; - s32 field_1574; - s32 field_1578; - s32 field_157C; - s32 field_1580; - s32 field_1584; - s32 field_1588; - s32 field_158C; - s32 field_1590; - s32 field_1594; - s32 related_to_health_display; - s32 field_159C; - s32 field_15A0; - s32 field_15A4; - s32 field_15A8; - s32 field_15AC; - s32 field_15B0; - s32 field_15B4; - s32 field_15B8; - s32 field_15BC; - s32 field_15C0; - s32 field_15C4; - s32 field_15C8; - s32 field_15CC; - s32 field_15D0; - s32 field_15D4; - s32 field_15D8; - s32 field_15DC; - s32 field_15E0; - s32 field_15E4; - s32 field_15E8; - s32 field_15EC; - s32 field_15F0; - s32 field_15F4; - s32 field_15F8; - s32 field_15FC; - s32 field_1600; - s32 field_1604; - s32 field_1608; - s32 field_160C; - s32 field_1610; - s32 field_1614; - s32 field_1618; - s32 field_161C; - s32 field_1620; - s32 field_1624; - s32 field_1628; - s32 field_162C; - s32 field_1630; - s32 field_1634; - s32 field_1638; - s32 field_163C; - s32 field_1640; - s32 field_1644; - s32 field_1648; - s32 field_164C; - s32 field_1650; - s32 field_1654; - s32 field_1658; - s32 field_165C; - s32 field_1660; - s32 field_1664; - s32 field_1668; - s32 field_166C; - s32 field_1670; - s32 field_1674; - s32 field_1678; - s32 field_167C; - s32 field_1680; - s32 field_1684; - s32 field_1688; - s32 field_168C; - s32 field_1690; - s32 field_1694; - s32 field_1698; - s32 field_169C; - s32 field_16A0; - s32 field_16A4; - s32 field_16A8; - s32 field_16AC; - s32 field_16B0; - s32 field_16B4; - s32 field_16B8; - s32 field_16BC; - s32 field_16C0; - s32 field_16C4; - s32 field_16C8; - s32 field_16CC; - s32 field_16D0; - s32 field_16D4; - s32 field_16D8; - s32 field_16DC; - s32 field_16E0; - s32 field_16E4; - s32 field_16E8; - s32 field_16EC; - s32 field_16F0; - s32 field_16F4; - s32 field_16F8; - s32 field_16FC; - s32 field_1700; - s32 field_1704; - s32 field_1708; - s32 field_170C; - s32 field_1710; - s32 field_1714; - s32 field_1718; - s32 field_171C; - s32 field_1720; - s32 field_1724; - s32 field_1728; - s32 field_172C; - s32 field_1730; - s32 field_1734; - s32 field_1738; - s32 field_173C; - s32 field_1740; - s32 field_1744; - s32 field_1748; - s32 field_174C; - s32 field_1750; - s32 field_1754; - s32 field_1758; - s32 field_175C; - s32 field_1760; - s32 field_1764; - s32 field_1768; - s32 field_176C; - s32 field_1770; - s32 field_1774; - s32 field_1778; - s32 field_177C; - s32 field_1780; - s32 field_1784; - s32 field_1788; - s32 field_178C; - s32 field_1790; - s32 field_1794; - s32 field_1798; - s32 field_179C; - s32 field_17A0; - s32 field_17A4; - s32 field_17A8; - s32 field_17AC; - s32 field_17B0; - s32 field_17B4; - s32 field_17B8; - s32 field_17BC; - s32 field_17C0; - s32 field_17C4; - s32 field_17C8; - s32 field_17CC; - s32 field_17D0; - s32 field_17D4; - s32 field_17D8; - s32 field_17DC; - s32 field_17E0; - s32 field_17E4; - s32 field_17E8; - s32 field_17EC; - s32 field_17F0; - s32 field_17F4; - s32 field_17F8; - s32 field_17FC; - s32 field_1800; - s32 field_1804; - s32 field_1808; - s32 field_180C; - s32 field_1810; - s32 field_1814; - s32 field_1818; - s32 field_181C; - s32 field_1820; - s32 field_1824; - s32 field_1828; - s32 field_182C; - s32 field_1830; - s32 field_1834; - s32 field_1838; - s32 field_183C; - s32 field_1840; - s32 field_1844; - s32 field_1848; - s32 field_184C; - s32 field_1850; - s32 field_1854; - s32 field_1858; - s32 field_185C; - s32 field_1860; - s32 field_1864; - s32 field_1868; - s32 field_186C; - s32 field_1870; - s32 field_1874; + /* 0x12B4 */ u8 something_with_cheat_text; + /* 0x12B5 */ u8 can_display_cheat_text; + /* 0x12B6 */ u8 bondinvincible; + /* 0x12B7 */ u8 field_12B7; + /* 0x12B8 */ struct damage_display_parent armor_display_values[23]; + /* 0x1598 */ struct damage_display_parent health_display_values[23]; /** * Offset 0x1878 @@ -1546,12 +1180,12 @@ struct player * Offset 0x19b8. */ struct WatchRectangle buffer_for_watch_static_vertices[1]; - + /** * Offset 0x19f8 */ s32 watch_body_armor_bar_gdl; // used in watch - + s32 field_19FC; s32 field_1A00; s32 field_1A04; @@ -2481,7 +2115,7 @@ struct player * Offset 0x2858 */ Gfx buffer_for_watch_greenbackdrop_DL[WATCH_NUMBER_SCREENS]; - + s32 field_2880; s32 field_2884; s32 field_2888; @@ -2552,7 +2186,7 @@ struct player s32 field_298C; s32 field_2990; s32 field_2994; - + /** * Watch static, not "static DL". * Offset 0x2998 @@ -2598,7 +2232,7 @@ struct player /** * Current tile pointer -> room. - * + * * Offset 0x2a04. */ s16 field_2A04; @@ -2610,10 +2244,10 @@ struct player s32 field_2A30; s32 field_2A34; s32 cur_item_weapon_getname; - f32 actual_health; - f32 actual_armor; + /* 0x2a3c */ f32 actual_health; + /* 0x2a40 */ f32 actual_armor; ITEM_IDS field_2A44[2]; - f32 field_2A4C; + f32 speedgo; s32 lock_hand_model[2]; s32 cur_player_control_type_0; s32 cur_player_control_type_1; @@ -2710,17 +2344,17 @@ extern s32 g_bondviewForceDisarm; //D:80036428 extern s32 resolution; //D:8003642C -extern s32 camera_8003642C; +extern s32 cameraBufferToggle; //D:80036430 -extern s32 camera_80036430; +extern s32 cameraFrameCounter1; //D:80036434 -extern s32 camera_80036434; +extern s32 cameraFrameCounter2; //D:80036438 extern s32 camera_80036438; //D:8003643C -extern s32 D_8003643C; +extern s32 credits_state; //D:80036440 -extern CreditsEntry *D_80036440; +extern CreditsEntry *credits_pointer; //D:80036444 extern s32 g_SurroundBondWithExplosionsFlag; //D:80036448 @@ -2745,7 +2379,7 @@ extern f32 g_TankTurnSpeed; //D:80036464 extern f32 g_TankOrientationAngle; //D:80036468 -extern f32 D_80036468; +extern f32 tank_turret_unused_angle; //D:8003646C extern f32 g_TankTurretVerticalAngle; //D:80036470 @@ -2753,9 +2387,9 @@ extern f32 g_TankTurretVerticalAngleRelated; //D:80036474 extern f32 g_TankTurretOrientationAngleRad; //D:80036478 -extern f32 D_80036478; +extern f32 g_TankTurretOrientationAngleDeg; //D:8003647C -extern f32 D_8003647C; +extern f32 tank_turret_turn_speed; //D:80036480 extern s32 g_BondCanEnterTank; //D:80036484 @@ -2771,17 +2405,17 @@ extern enum CAMERAMODE g_CameraMode; //D:80036498 extern enum CAMERAMODE g_CameraAfterCinema; //D:8003649C -extern s32 D_8003649C; +extern s32 camera_fade_active; //D:800364A0 extern s32 stop_time_flag; //D:800364A4 -extern f32 D_800364A4; +extern f32 camera_transition_timer; //D:800364A8 -extern s32 D_800364A8; +extern s32 intro_camera_index; //D:800364AC extern struct SetupIntroSwirl *g_IntroSwirl; //D:800364B0 -extern s32 D_800364B0; +extern s32 is_timer_active; //D:800364B4 extern s32 g_PlayerInvincible; //D:800364B8 @@ -2806,7 +2440,7 @@ extern s32 g_bondviewBondDeathAnimations[]; //D:8003650C extern s32 g_bondviewBondDeathAnimationsCount; //D:80036510 -extern enum CAMERAMODE D_80036510; +extern enum CAMERAMODE camera_mode; //D:80036514 extern s32 g_IntroAnimationIndex; /* @@ -2921,7 +2555,7 @@ extern s32 D_80036834; //D:80036838 extern s32 D_80036838; //D:8003683C -extern struct unk_joint_list D_8003683C; +extern ModelRenderData D_8003683C; //D:8003687C extern s32 D_8003687C; @@ -2999,8 +2633,8 @@ extern s32 watch_time_0; #endif extern f32 watch_transition_time; -extern s32 starting_right_weapon; -extern s32 starting_left_weapon; +// ITEM_IDS +extern ITEM_IDS starting_weapon[2]; extern PadRecord *g_Startpad[]; extern s32 startpadcount; extern StandTilePoint *dword_CODE_bss_80079DA0; @@ -3010,7 +2644,7 @@ extern StandTilePoint *dword_CODE_bss_80079DA4; extern s32 dword_CODE_bss_80079DA8[]; -u32 get_camera_mode(void); +u32 bondviewGetCameraMode(void); void bondviewTriggerWatchZoom(f32 zoominfovy); @@ -3059,7 +2693,7 @@ s32 bond_pressed_reload_activate(void); Gfx* write_stan_tiles_in_yellow(Gfx *arg0); Gfx * maybe_mp_interface(Gfx *arg0); Gfx * bondviewRemoved7F08BCB8(Gfx *arg0); -s32 sub_GAME_7F078A58(coord3d *vec_scale, f32 norm_scale); +s32 camIsPosInScreen(coord3d *vec_scale, f32 norm_scale); s32 getMissiontimer(void); void solo_char_load(void); void bondviewUpdateYAutoAimTime(struct PropRecord *autoaim_target, f32 auto_aim_y); @@ -3099,7 +2733,7 @@ void bondviewSetVisibleToGuardsFlag(s32 param_1); Mtxf *currentPlayerGetMatrix10EC(void); f32 get_curplay_horizontal_rotation_in_degrees(void); Mtxf *camGetWorldToScreenMtxf(void); -void sub_GAME_7F077EEC(struct coord2d *in, coord3d *out, f32 value); +void transformAndNormalizeByLength2Dto3D(struct coord2d *in, coord3d *out, f32 value); s32 camIsPosInScreenBox(coord3d *, f32, struct bbox2d *); void bondviewTransformManyPosToViewMatrix(RenderPosView *arg0, s32 arg1); @@ -3112,7 +2746,7 @@ f32 bondviewGetBondBreathing(void); void bondviewClearUpperTextDisplayFlag(int param_1); void bondviewSetUpperTextDisplayFlag(PLAYERFLAG flag); -void set_camera_mode(s32 arg0); +void bondviewSetCameraMode(s32 arg0); bool isBondInTank(void); void hudmsgTopShow(char* string); void SurroundWithExplosions(int delay); @@ -3127,6 +2761,7 @@ void bondviewResetUpperTextDisplay(void); Mtxf *currentPlayerGetProjectionMatrixF(void); int redirect_get_BONDdata_autoaim_x(void); int redirect_get_BONDdata_autoaim_y(void); -void sub_GAME_7F077FF4(coord3d *in, coord3d *out); +void transform3Dto2DCoords(coord3d *in, coord2d *out); +void maybe_solo_intro_camera_handler(void); #endif diff --git a/src/game/bondview_r.c b/src/game/bondview_r.c index 5aa0a6b..0db2048 100644 --- a/src/game/bondview_r.c +++ b/src/game/bondview_r.c @@ -20,7 +20,7 @@ /** * Address 0x8002A780. */ -struct coord3d D_8002A780 = { 0 }; +struct coord3d default_start_position = { 0 }; u32 weaponLoadProjectileModels(ITEM_IDS modelid) { @@ -107,28 +107,28 @@ void bondviewLoadSetupIntroSection(void) // done with declarations - start_pos = D_8002A780; + start_pos = default_start_position; intro_record = (struct SetupIntroEmpty *)g_CurrentSetup.intro; g_isBondKIA = 0; g_bondviewForceDisarm = 0; resolution = 0; - camera_8003642C = 0; - camera_80036430 = 0; + cameraBufferToggle = 0; + cameraFrameCounter1 = 0; set_starting_weapon = 0; - camera_80036434 = 0; + cameraFrameCounter2 = 0; start_look_angle = FLOAT_INIT; if (bossGetStageNum() == LEVELID_CUBA) { - resolution = (s32)mempAllocBytesInBank(0x46EA0, 4); + resolution = (s32)mempAllocBytesInBank(0x46EA0, MEMPOOL_STAGE); resolution = (resolution + 0x3f) & ~0x3F; - camera_80036430 = 1; + cameraFrameCounter1 = 1; } camera_80036438 = 0; - D_8003643C = 0; - D_80036440 = NULL; + credits_state = 0; + credits_pointer = NULL; g_ForceBondMoveOffset.f[0] = FLOAT_INIT; g_ForceBondMoveOffset.f[1] = FLOAT_INIT; g_ForceBondMoveOffset.f[2] = FLOAT_INIT; @@ -142,24 +142,24 @@ void bondviewLoadSetupIntroSection(void) g_TankSfxState[1] = NULL; g_TankTurnSpeed = FLOAT_INIT; g_TankOrientationAngle = FLOAT_INIT; - D_80036468 = FLOAT_INIT; + tank_turret_unused_angle = FLOAT_INIT; g_TankTurretVerticalAngle = FLOAT_INIT; g_TankTurretVerticalAngleRelated = FLOAT_INIT; g_TankTurretOrientationAngleRad = FLOAT_INIT; - D_80036478 = FLOAT_INIT; - D_8003647C = FLOAT_INIT; + g_TankTurretOrientationAngleDeg = FLOAT_INIT; + tank_turret_turn_speed = FLOAT_INIT; g_BondCanEnterTank = 0; g_TankTurretAngle = FLOAT_INIT; g_TankTurretTurn = FLOAT_INIT; g_ExplodeTankOnDeathFlag = 0; - D_800364B0 = 1; + is_timer_active = 1; g_PlayerInvincible = 0; g_CameraMode = 0; g_CameraAfterCinema = 0; - D_8003649C = 0; + camera_fade_active = 0; stop_time_flag = 0; - D_800364A4 = FLOAT_INIT; - D_800364A8 = 1; + camera_transition_timer = FLOAT_INIT; + intro_camera_index = CAMERAMODE_INTRO; g_IntroSwirl = NULL; ptr_random06cam_entry = NULL; g_CurrentSetupIntroCamera = NULL; @@ -168,8 +168,8 @@ void bondviewLoadSetupIntroSection(void) watch_time_0 = 0; g_IntroAnimationIndex = 0; watch_transition_time = 0.9090909f; - starting_left_weapon = ITEM_UNARMED; - starting_right_weapon = ITEM_UNARMED; + starting_weapon[GUNLEFT] = ITEM_UNARMED; + starting_weapon[GUNRIGHT] = ITEM_UNARMED; if (intro_record != NULL) { @@ -210,7 +210,7 @@ void bondviewLoadSetupIntroSection(void) if (set_starting_weapon == 0) { - starting_right_weapon = intro_item->item_right; + starting_weapon[GUNRIGHT] = intro_item->item_right; if(intro_item->item_left); @@ -218,7 +218,7 @@ void bondviewLoadSetupIntroSection(void) if (intro_item->item_left >= 0) { - starting_left_weapon = intro_item->item_left; + starting_weapon[GUNLEFT] = intro_item->item_left; } } } @@ -327,7 +327,7 @@ void bondviewLoadSetupIntroSection(void) // hack: bad address math credits = (CreditsEntry*)((s32)g_ptrStageSetupFile + (s32)intro_credits->unk04); - D_80036440 = credits; + credits_pointer = credits; // what is the point of this? while (credits->TextId1 != 0 || credits->TextId2 != 0) @@ -341,6 +341,9 @@ void bondviewLoadSetupIntroSection(void) default: { + #ifdef DEBUG + ossyncprintf("unknown bondstart type %d!\n",intro_record->type); + #endif intro_record = (struct SetupIntroEmpty*)((s32)intro_record + sizeof(struct SetupIntroEmpty)); } break; @@ -364,7 +367,7 @@ void bondviewLoadSetupIntroSection(void) if (set_starting_weapon == 0) { - starting_right_weapon = ITEM_FIST; + starting_weapon[GUNRIGHT] = ITEM_FIST; } g_CurrentPlayer->field_78 = FLOAT_INIT; @@ -427,7 +430,7 @@ void bondviewLoadSetupIntroSection(void) bondviewResetIntroCameraMessageDialogs(); bondviewResetUpperTextDisplay(); - g_CurrentPlayer->prop = propAllocate(); + g_CurrentPlayer->prop = chrpropAllocate(); g_CurrentPlayer->prop->obj = NULL; g_CurrentPlayer->prop->type = PROP_TYPE_VIEWER; @@ -450,11 +453,11 @@ void bondviewLoadSetupIntroSection(void) if (getPlayerCount() == 1) { - set_camera_mode(CAMERAMODE_INTRO); + bondviewSetCameraMode(CAMERAMODE_INTRO); } else { - set_camera_mode(CAMERAMODE_MP); + bondviewSetCameraMode(CAMERAMODE_MP); } g_bondviewBondDeathAnimationsCount = 0; @@ -463,8 +466,8 @@ void bondviewLoadSetupIntroSection(void) g_bondviewBondDeathAnimationsCount++; } - g_CurrentPlayer->startnewbonddie = 1; - g_CurrentPlayer->redbloodfinished = 0; - g_CurrentPlayer->deathanimfinished = 0; - D_80036510 = CAMERAMODE_NONE; + g_CurrentPlayer->startnewbonddie = TRUE; + g_CurrentPlayer->redbloodfinished = FALSE; + g_CurrentPlayer->deathanimfinished = FALSE; + camera_mode = CAMERAMODE_NONE; } diff --git a/src/game/bondview_r.h b/src/game/bondview_r.h index 4ab2602..ec63426 100644 --- a/src/game/bondview_r.h +++ b/src/game/bondview_r.h @@ -2,7 +2,9 @@ #define _BONDVIEW_R_H_ #include +#include void bondviewLoadSetupIntroSection(void); +u32 weaponLoadProjectileModels(ITEM_IDS modelid); #endif diff --git a/src/game/bondwalk2.c b/src/game/bondwalk2.c index d988fcc..3debc2d 100644 --- a/src/game/bondwalk2.c +++ b/src/game/bondwalk2.c @@ -1,9 +1,21 @@ #include - -void sub_GAME_7F06ABB0(Gfx **gdlptr, f32 *arg1, f32 *arg2, s32 width, s32 height, s32 arg5, s32 arg6, s32 arg7) +/** + * Draws a textured rectangle on the screen. + * + * @param gdlptr Pointer to the display list. + * @param position Position coordinates (center) of the rectangle. + * @param size Size (half-width and half-height) of the rectangle. + * @param width Texture width. + * @param height Texture height. + * @param flipXY Flip X and Y flag. + * @param flipX Flip X-axis flag. + * @param flipY Flip Y-axis flag. + */ +void draw_textured_rectangle(Gfx **gdlptr, f32 *position, f32 *size, s32 width, s32 height, s32 flipXY, s32 flipX, s32 flipY) { - if (arg2[0] > 0.0f && arg2[1] > 0.0f) + // Only proceed if the size values are positive + if (size[0] > 0.0f && size[1] > 0.0f) { Gfx *gdl = *gdlptr; s32 xl; @@ -15,18 +27,22 @@ void sub_GAME_7F06ABB0(Gfx **gdlptr, f32 *arg1, f32 *arg2, s32 width, s32 height s32 dsdx; s32 dtdy; + // Disable texture perspective correction gDPSetTexturePersp(gdl++, G_TP_NONE); - xl = (arg1[0] - arg2[0]) * 4.0f; - yl = (arg1[1] - arg2[1]) * 4.0f; - xh = (arg1[0] + arg2[0]) * 4.0f; - yh = (arg1[1] + arg2[1]) * 4.0f; + // Compute rectangle coordinates + xl = (position[0] - size[0]) * 4.0f; + yl = (position[1] - size[1]) * 4.0f; + xh = (position[0] + size[0]) * 4.0f; + yh = (position[1] + size[1]) * 4.0f; + // Proceed if the rectangle is within screen bounds if (xh >= 0 && yh >= 0) { + // Handle X coordinate adjustment if (xl < 0) { - if (arg5) + if (flipXY) { t += ((-xl * height) << 5) / (xh - xl); } @@ -38,9 +54,10 @@ void sub_GAME_7F06ABB0(Gfx **gdlptr, f32 *arg1, f32 *arg2, s32 width, s32 height xl = 0; } + // Handle Y coordinate adjustment if (yl < 0) { - if (arg5) + if (flipXY) { s += ((-yl * width) << 5) / (yh - yl); } @@ -52,30 +69,34 @@ void sub_GAME_7F06ABB0(Gfx **gdlptr, f32 *arg1, f32 *arg2, s32 width, s32 height yl = 0; } - if (arg5) + // Calculate texture scaling based on flipXY flag + if (flipXY) { - dsdx = width / (2.0f * arg2[1]) * 1024.0f; - dtdy = height / (2.0f * arg2[0]) * 1024.0f; + dsdx = width / (2.0f * size[1]) * 1024.0f; + dtdy = height / (2.0f * size[0]) * 1024.0f; } else { - dsdx = width / (2.0f * arg2[0]) * 1024.0f; - dtdy = height / (2.0f * arg2[1]) * 1024.0f; + dsdx = width / (2.0f * size[0]) * 1024.0f; + dtdy = height / (2.0f * size[1]) * 1024.0f; } - - if (arg6) + + // Flip texture horizontally if needed + if (flipX) { dsdx = 0x10000 - dsdx; s = ((width - 1) << 5) - s; } - if (arg7) + // Flip texture vertically if needed + if (flipY) { dtdy = 0x10000 - dtdy; t = ((height - 1) << 5) - t; } - if (arg5) + // Draw the textured rectangle with optional flipping + if (flipXY) { gSPTextureRectangleFlip(gdl++, xl, yl, xh, yh, G_TX_RENDERTILE, s, t, dsdx, dtdy); } @@ -85,36 +106,57 @@ void sub_GAME_7F06ABB0(Gfx **gdlptr, f32 *arg1, f32 *arg2, s32 width, s32 height } } + // Re-enable texture perspective correction gDPSetTexturePersp(gdl++, G_TP_PERSP); *gdlptr = gdl; } } +#define G_CC_MODULATEIA_ENV COMBINED, 0, ENVIRONMENT, 0, COMBINED, 0, ENVIRONMENT, 0 -void display_image_at_on_screen_coord(Gfx **gdlptr, f32 *arg1, f32 *arg2, s32 twidth, u32 theight, u32 arg5, u32 arg6, u32 arg7, u32 r, u32 g, u32 b, u32 alpha, u32 arg12, u32 arg13) +/** + * Displays an image at a specific on-screen position with color tinting and optional texture flips. + * + * @param gdl Pointer to the display list. + * @param position Position of the image. + * @param size Size (half-width and half-height) of the image. + * @param twidth Texture width. + * @param theight Texture height. + * @param flipXY Flip X and Y flag. + * @param flipX Flip X-axis flag. + * @param flipY Flip Y-axis flag. + * @param r Red tint value. + * @param g Green tint value. + * @param b Blue tint value. + * @param alpha Alpha (transparency) value. + * @param mipmapped_texture Mipmapped rendering mode flag. + * @param highlight_mode Highlight rendering mode flag. + */ +void display_image_at_position(Gfx **gdlptr, f32 *position, f32 *size, s32 twidth, u32 theight, u32 flipXY, u32 flipX, u32 flipY, u32 r, u32 g, u32 b, u32 alpha, u32 mipmapped_texture, u32 highlight_mode) { - if (arg2[0] > 0.0f && arg2[1] > 0.0f) + + if (size[0] > 0.0f && size[1] > 0.0f) { Gfx *gdl = *gdlptr; gDPSetEnvColor(gdl++, r, g, b, alpha); - if (arg12) + if (mipmapped_texture) { - gDPSetCombineLERP(gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, 0, ENVIRONMENT, 0, COMBINED, 0, ENVIRONMENT, 0); + gDPSetCombineMode(gdl++, G_CC_TRILERP, G_CC_MODULATEIA_ENV); } - else if (arg13) - { - gDPSetCombineLERP(gdl++, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0, 0, 0, 0, COMBINED, 0, 0, 0, COMBINED); + else if (highlight_mode) + { + gDPSetCombineMode(gdl++, G_CC_FADEA, G_CC_PASS2); } else { - gDPSetCombineLERP(gdl++, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0); + gDPSetCombineMode(gdl++, G_CC_FADEA, G_CC_FADEA); } *gdlptr = gdl; - sub_GAME_7F06ABB0(gdlptr, arg1, arg2, twidth, theight, arg5, arg6, arg7); + draw_textured_rectangle(gdlptr, position, size, twidth, theight, flipXY, flipX, flipY); } } diff --git a/src/game/bondwalk2.h b/src/game/bondwalk2.h index cd9ea52..71e949a 100644 --- a/src/game/bondwalk2.h +++ b/src/game/bondwalk2.h @@ -3,6 +3,6 @@ #include #include "bondview.h" -void display_image_at_on_screen_coord(Gfx **DL, f32 *xypos, f32 *halfedxy, s32 width, s32 height, s32 rotateleft90, s32 fliph, s32 flipv, s32 red, s32 green, s32 blue, s32 alpha, s32 format, s32 param_14); +void display_image_at_position(Gfx **DL, f32 *xypos, f32 *halfedxy, s32 width, s32 height, s32 rotateleft90, s32 fliph, s32 flipv, s32 red, s32 green, s32 blue, s32 alpha, s32 format, s32 param_14); #endif diff --git a/src/game/cheat_buttons.c b/src/game/cheat_buttons.c index 850ad27..02bc628 100644 --- a/src/game/cheat_buttons.c +++ b/src/game/cheat_buttons.c @@ -22,10 +22,6 @@ //#include "chraicommands.h" /* needed for ai list commands, remove when moving global ai lists to chraicommands/chrai */ // bss -// This shows up a lot but not quite sure what it represents. -#define CHEAT_20 20 - - u8 g_CheatPlayerTextRelated[CHEAT_INVALID + 1]; @@ -33,7 +29,7 @@ u8 g_CheatPlayerTextRelated[CHEAT_INVALID + 1]; //D:8003F430 u16 mBtnCheatExtraMPChars[] = { - L_TRIG | R_TRIG | L_CBUTTONS , + L_TRIG | R_TRIG | L_CBUTTONS , L_TRIG | U_CBUTTONS , L_TRIG | R_TRIG | L_JPAD, L_TRIG | R_JPAD, @@ -56,7 +52,7 @@ u16 mBtnCheatInvincibility[] = { L_TRIG | R_JPAD, R_TRIG | D_JPAD, L_TRIG | L_JPAD, - L_TRIG | R_TRIG | R_CBUTTONS + L_TRIG | R_TRIG | R_CBUTTONS }; //D:8003F458 @@ -70,7 +66,7 @@ u16 mBtnCheatAllGuns[] = { R_TRIG | L_CBUTTONS , L_TRIG | R_TRIG | R_CBUTTONS , R_TRIG | U_JPAD, - L_TRIG | L_CBUTTONS + L_TRIG | L_CBUTTONS }; //D:8003F46C @@ -112,7 +108,7 @@ u16 mBtnCheatDeactivateInvincibilityMulti[] = { L_TRIG | L_CBUTTONS , L_TRIG | R_TRIG | R_CBUTTONS , L_TRIG | D_JPAD, - L_TRIG | U_CBUTTONS + L_TRIG | U_CBUTTONS }; //D:8003F4A8 u16 mBtnCheatLineMode[] = { @@ -125,7 +121,7 @@ u16 mBtnCheatLineMode[] = { L_TRIG | D_JPAD, L_TRIG | R_JPAD, R_TRIG | L_CBUTTONS , - R_TRIG | U_CBUTTONS + R_TRIG | U_CBUTTONS }; //D:8003F4BC @@ -142,7 +138,7 @@ u16 mBtnCheatInvisibility[] = { R_TRIG | R_JPAD }; //D:8003F4D0 -u16 mBtnCheatInvisibilityMulti[] = { +u16 mBtnCheatBondPhase[] = { L_TRIG | U_CBUTTONS , L_TRIG | R_TRIG | L_CBUTTONS , R_TRIG | U_JPAD, @@ -152,7 +148,7 @@ u16 mBtnCheatInvisibilityMulti[] = { L_TRIG | R_TRIG | L_CBUTTONS , L_TRIG | R_CBUTTONS , L_TRIG | U_JPAD, - L_TRIG | R_TRIG | D_CBUTTONS + L_TRIG | R_TRIG | D_CBUTTONS }; //D:8003F4E4 u16 mBtnCheatDam[] = { @@ -165,7 +161,7 @@ u16 mBtnCheatDam[] = { R_TRIG | R_CBUTTONS , L_TRIG | R_JPAD, L_TRIG | R_TRIG | R_JPAD, - R_TRIG | D_CBUTTONS + R_TRIG | D_CBUTTONS }; //D:8003F4F8 u16 mBtnCheatFacility[] = { @@ -191,7 +187,7 @@ u16 mBtnCheatRunway[] = { R_TRIG | R_CBUTTONS , R_TRIG | R_JPAD, L_TRIG | D_JPAD, - R_TRIG | L_CBUTTONS + R_TRIG | L_CBUTTONS }; //D:8003F520 u16 mBtnCheatSurface[] = { @@ -230,7 +226,7 @@ u16 mBtnCheatSilo[] = { L_TRIG | U_CBUTTONS , R_TRIG | R_JPAD, R_TRIG | R_JPAD, - R_TRIG | R_CBUTTONS + R_TRIG | R_CBUTTONS }; //D:8003F55C u16 mBtnCheatFrigate[] = { @@ -256,7 +252,7 @@ u16 mBtnCheatSurface2[] = { L_TRIG | R_TRIG | U_CBUTTONS , L_TRIG | U_CBUTTONS , L_TRIG | R_TRIG | D_JPAD, - L_TRIG | R_CBUTTONS + L_TRIG | R_CBUTTONS }; //D:8003F584 u16 mBtnCheatBunker2[] = { @@ -269,7 +265,7 @@ u16 mBtnCheatBunker2[] = { R_TRIG | R_JPAD, L_TRIG | U_CBUTTONS , L_TRIG | L_JPAD, - L_TRIG | D_CBUTTONS + L_TRIG | D_CBUTTONS }; //D:8003F598 u16 mBtnCheatStatue[] = { @@ -295,7 +291,7 @@ u16 mBtnCheatArchives[] = { L_TRIG | R_TRIG | R_JPAD, L_TRIG | R_TRIG | D_CBUTTONS , L_TRIG | U_JPAD, - R_TRIG | D_CBUTTONS + R_TRIG | D_CBUTTONS }; //D:8003F5C0 u16 mBtnCheatStreets[] = { @@ -334,7 +330,7 @@ u16 mBtnCheatTrain[] = { L_TRIG | L_JPAD, L_TRIG | R_TRIG | L_CBUTTONS , L_TRIG | U_JPAD, - L_TRIG | U_CBUTTONS + L_TRIG | U_CBUTTONS }; //D:8003F5FC u16 mBtnCheatJungle[] = { @@ -360,7 +356,7 @@ u16 mBtnCheatControl[] = { R_TRIG | L_JPAD, R_TRIG | U_CBUTTONS , R_TRIG | L_JPAD, - L_TRIG | R_TRIG | U_CBUTTONS + L_TRIG | R_TRIG | U_CBUTTONS }; //D:8003F624 u16 mBtnCheatCaverns[] = { @@ -373,7 +369,7 @@ u16 mBtnCheatCaverns[] = { R_TRIG | U_JPAD, L_TRIG | L_CBUTTONS , L_TRIG | U_JPAD, - R_TRIG | L_CBUTTONS + R_TRIG | L_CBUTTONS }; //D:8003F638 u16 mBtnCheatCradle[] = { @@ -399,7 +395,7 @@ u16 mBtnCheatAztek[] = { L_TRIG | L_JPAD, L_TRIG | R_TRIG | U_CBUTTONS , L_TRIG | R_TRIG | R_JPAD, - L_TRIG | L_CBUTTONS + L_TRIG | L_CBUTTONS }; //D:8003F660 u16 mBtnCheatEgypt[] = { @@ -429,7 +425,7 @@ u16 mBtnCheatPaintballMod[] = { L_TRIG | D_CBUTTONS , L_TRIG | R_TRIG | D_CBUTTONS , L_TRIG | R_TRIG | U_JPAD, - L_TRIG | D_CBUTTONS + L_TRIG | D_CBUTTONS }; //D:8003F690 u16 mBtnCheatInvincible2[] = { @@ -442,7 +438,7 @@ u16 mBtnCheatInvincible2[] = { L_TRIG | L_CBUTTONS , L_TRIG | R_TRIG | L_JPAD, L_TRIG | R_TRIG | R_JPAD, - L_TRIG | L_CBUTTONS + L_TRIG | L_CBUTTONS }; //D:8003F6A4 u16 mBtnCheatDKMode[] = { @@ -455,7 +451,7 @@ u16 mBtnCheatDKMode[] = { U_JPAD, L_TRIG | R_TRIG | D_CBUTTONS , L_TRIG | R_TRIG | D_JPAD, - L_TRIG | R_TRIG | L_CBUTTONS + L_TRIG | R_TRIG | L_CBUTTONS }; //D:8003F6B8 u16 mBtnCheat2xGL[] = { @@ -468,7 +464,7 @@ u16 mBtnCheat2xGL[] = { L_JPAD, D_JPAD, U_JPAD, - R_TRIG | D_CBUTTONS + R_TRIG | D_CBUTTONS }; //D:8003F6CC u16 mBtnCheat2xRL[] = { @@ -481,7 +477,7 @@ u16 mBtnCheat2xRL[] = { L_TRIG | L_CBUTTONS , R_TRIG | U_JPAD, R_TRIG | D_JPAD, - R_TRIG | L_CBUTTONS + R_TRIG | L_CBUTTONS }; //D:8003F6E0 u16 mBtnCheatTurboMode[] = { @@ -533,7 +529,7 @@ u16 mBtnCheat2xTKnives[] = { L_TRIG | R_TRIG | L_CBUTTONS , R_TRIG | D_JPAD, R_TRIG | L_JPAD, - R_TRIG | L_CBUTTONS + R_TRIG | L_CBUTTONS }; //D:8003F730 u16 mBtnCheatFastAnimation[] = { @@ -611,7 +607,7 @@ u16 mBtnCheat2xHKnives[] = { L_TRIG | D_JPAD, R_TRIG | L_JPAD, L_TRIG | R_JPAD, - L_TRIG | L_CBUTTONS + L_TRIG | L_CBUTTONS }; //D:8003F7A8 u16 mBtnCheatInfinitAmmo[] = { @@ -650,7 +646,7 @@ u16 mBtnCheatGoldPPK[] = { L_TRIG | R_TRIG | R_JPAD, L_TRIG | L_JPAD, D_JPAD, - L_TRIG | D_CBUTTONS + L_TRIG | D_CBUTTONS }; //D:8003F7E4 u16 mBtnCheat2xLaser[] = { @@ -684,40 +680,40 @@ u16 mBtnCheatUnlockAllGuns[] = { * Address 0x8003F80C. */ CheatInfo g_CheatInfo[] = { - { CHEAT_EXTRA_MP_CHARS, 0xA, 0, 0, mBtnCheatExtraMPChars, 0, 0, /* 0x31 */ CHEAT_MASK_GLOBAL | CHEAT_MASK_16 | CHEAT_MASK_MENUS}, - { CHEAT_INVINCIBILITY, 0xA, 0, 0, mBtnCheatInvincibility, TEXT(LMISC, MISC_STR_00), 0, /* 0x06 */ CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_ALLGUNS, 0xA, 0, 0, mBtnCheatAllGuns, TEXT(LMISC, MISC_STR_01), 0, /* 0x02 */ CHEAT_MASK_SPGAME}, - { CHEAT_MAXAMMO, 0xA, 0, 0, mBtnCheatMaxAmmo, 0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_DEBUG_RETURN_SAVED_RA, 0xA, 0, 0, mBtnCheatInvalid, 0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - {CHEAT_DEACTIVATE_INVINCIBILITY, 0xA, 0, 0, mBtnCheatDeactivateInvincibilityMulti, 0, 0, /* 0x34 */ CHEAT_MASK_GLOBAL | CHEAT_MASK_16 | CHEAT_MASK_MPGAME}, - { CHEAT_LINEMODE, 0xA, 0, 0, mBtnCheatLineMode, TEXT(LMISC, MISC_STR_37), 0, /* 0x66 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_2X_HEALTH, 0, 0, 0, 0, 0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_2X_ARMOR, 0, 0, 0, 0, 0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_INVISIBILITY, 0xA, 0, 0, mBtnCheatInvisibility, TEXT(LMISC, MISC_STR_04), 0, /* 0x62 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_SPGAME}, - { CHEAT_INFINITE_AMMO, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_06), 0, /* 0x66 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_DK_MODE, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_07), 0, /* 0x26 */ CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_EXTRA_WEAPONS, 0, 0, 0, 0, 0, 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_TINY_BOND, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_08), 0, /* 0x02 */ CHEAT_MASK_SPGAME}, - { CHEAT_PAINTBALL, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_38), 0, /* 0x66 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_10X_HEALTH, 0, 0, 0, 0, 0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_MAGNUM, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_0A), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_LASER, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_0B), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_GOLDEN_GUN, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_0C), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_SILVER_PP7, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_0D), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_GOLD_PP7, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_0E), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_INVISIBILITY_MP, 0xA, 0, 0, mBtnCheatInvisibilityMulti, 0, 0, /* 0x12 */ CHEAT_MASK_MPGAME}, - { CHEAT_NO_RADAR_MP, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_43), 0, /* 0x64 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME}, - { CHEAT_TURBO_MODE, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_40), 0, /* 0x66 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, - { CHEAT_DEBUG_POS, 0, 0, 0, 0, 0, 0, /* 0x20 */ CHEAT_MASK_GLOBAL}, - { CHEAT_FAST_ANIMATION, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_41), 0, /* 0x72 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_SLOW_ANIMATION, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_42), 0, /* 0x72 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_ENEMY_ROCKETS, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_39), 0, /* 0x01 */ CHEAT_MASK_MENUS}, - { CHEAT_2X_ROCKET_LAUNCHER, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_3A), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_2X_GRENADE_LAUNCHER, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_3B), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_2X_RCP90, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_3C), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_2X_THROWING_KNIFE, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_3D), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_2X_HUNTING_KNIFE, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_3E), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, - { CHEAT_2X_LASER, 0, 0, 0, 0, TEXT(LMISC, MISC_STR_3F), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_EXTRA_MP_CHARS, 0xA, 0, 0, mBtnCheatExtraMPChars, 0, 0, /* 0x31 */ CHEAT_MASK_GLOBAL | CHEAT_MASK_16 | CHEAT_MASK_MENUS}, + { CHEAT_INVINCIBILITY, 0xA, 0, 0, mBtnCheatInvincibility, getStringID(LMISC, MISC_STR_00_INVINCIBLE ), 0, /* 0x06 */ CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_ALLGUNS, 0xA, 0, 0, mBtnCheatAllGuns, getStringID(LMISC, MISC_STR_01_ALLGUNS ), 0, /* 0x02 */ CHEAT_MASK_SPGAME}, + { CHEAT_MAXAMMO, 0xA, 0, 0, mBtnCheatMaxAmmo, 0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_DEBUG_UNK5, 0xA, 0, 0, mBtnCheatInvalid, /*getStringID(LMISC, MISC_STR_UNK5 )*/0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + {CHEAT_DEACTIVATE_INVINCIBILITY, 0xA, 0, 0, mBtnCheatDeactivateInvincibilityMulti, 0, 0, /* 0x34 */ CHEAT_MASK_GLOBAL | CHEAT_MASK_16 | CHEAT_MASK_MPGAME}, + { CHEAT_LINEMODE, 0xA, 0, 0, mBtnCheatLineMode, getStringID(LMISC, MISC_STR_37_LINEMODE ), 0, /* 0x66 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_2X_HEALTH, 0, 0, 0, 0, 0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_2X_ARMOR, 0, 0, 0, 0, 0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_INVISIBILITY, 0xA, 0, 0, mBtnCheatInvisibility, getStringID(LMISC, MISC_STR_04_BONDINVISIBLE ), 0, /* 0x62 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_SPGAME}, + { CHEAT_INFINITE_AMMO, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_06_INFINITAMMO ), 0, /* 0x66 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_DK_MODE, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_07_DKMODE ), 0, /* 0x26 */ CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_EXTRA_WEAPONS, 0, 0, 0, 0, 0, 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_TINY_BOND, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_08_TINYBOND ), 0, /* 0x02 */ CHEAT_MASK_SPGAME}, + { CHEAT_PAINTBALL, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_38_PAINTBALLMODE ), 0, /* 0x66 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_10X_HEALTH, 0, 0, 0, 0, 0, 0, /* 0x16 */ CHEAT_MASK_16 | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_MAGNUM, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_0A_MAGNUM ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_LASER, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_0B_LASER ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_GOLDEN_GUN, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_0C_GOLDENGUN ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_SILVER_PP7, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_0D_SILVERPPK ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_GOLD_PP7, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_0E_GOLDPPK ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_BONDPHASE, 0xA, 0, 0, mBtnCheatBondPhase, 0, 0, /* 0x12 */ CHEAT_MASK_MPGAME}, + { CHEAT_NO_RADAR_MP, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_43_NORADAR ), 0, /* 0x64 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME}, + { CHEAT_TURBO_MODE, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_40_TURBOMODE ), 0, /* 0x66 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_MPGAME | CHEAT_MASK_SPGAME}, + { CHEAT_DEBUG_POS, 0, 0, 0, 0, 0, 0, /* 0x20 */ CHEAT_MASK_GLOBAL}, + { CHEAT_FAST_ANIMATION, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_41_FASTANIMATION ), 0, /* 0x72 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_SLOW_ANIMATION, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_42_SLOWANIMATION ), 0, /* 0x72 */ CHEAT_MASK_TOGGLE | CHEAT_MASK_GLOBAL | CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_ENEMY_ROCKETS, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_39_ENEMYROCKETS ), 0, /* 0x01 */ CHEAT_MASK_MENUS}, + { CHEAT_2X_ROCKET_LAUNCHER, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_3A_2XROCKETLAUNCHER ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_2X_GRENADE_LAUNCHER, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_3B_2XGRENADELAUNCHER), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_2X_RCP90, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_3C_2XFNP90 ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_2X_THROWING_KNIFE, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_3D_2XTHROWINGKNIFE ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_2X_HUNTING_KNIFE, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_3E_2XHUNTINGKNIFE ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, + { CHEAT_2X_LASER, 0, 0, 0, 0, getStringID(LMISC, MISC_STR_3F_2XLASER ), 0, /* 0x12 */ CHEAT_MASK_16 | CHEAT_MASK_SPGAME}, { CHEAT_UNLOCK_PAINTBALL, 0xA, 0, 0, mBtnCheatPaintballMod, 0, 0, /* 0x11 */ CHEAT_MASK_16 | CHEAT_MASK_MENUS}, //at cheat menu { CHEAT_UNLOCK_INVINCIBLE, 0xA, 0, 0, mBtnCheatInvincible2, 0, 0, /* 0x11 */ CHEAT_MASK_16 | CHEAT_MASK_MENUS}, //at cheat menu @@ -814,7 +810,7 @@ void cheatButtonActivateRelated(void) s32 id_index; s32 find_index; bool isDone = FALSE; - + if (lvlGetCurrentStageToLoad() == LEVELID_TITLE) { bitmask = CHEAT_MASK_MENUS; @@ -878,10 +874,10 @@ void cheat_buttons_mp_related(void) jgb_trig = (jgb & (L_TRIG | R_TRIG)); jgb &= ~(jgb_trig); jgbptf &= ~(jgb_trig); - - + + if (jgbptf != 0) - { + { if ((cheatButtonCountBitsSet(jgbptf) == 1) && ((cheatButtonCountBitsSet(jgb) == 1))) { g_CurrentPlayer->cheat_display_text_related[g_CurrentPlayer->something_with_cheat_text] = jgbptf | jgb_trig; @@ -891,13 +887,13 @@ void cheat_buttons_mp_related(void) { g_CurrentPlayer->can_display_cheat_text += 1; } - } + } else { g_CurrentPlayer->can_display_cheat_text = 0; } } - + cheatButtonActivateRelated(); } @@ -923,7 +919,7 @@ bool cheatIsEnemyRockets(CHEAT_ID id) /** * true if param is MP cheat - * + * * Address 0x7F091A78. */ bool cheatCheckIfMPCheat(CHEAT_ID cheat_id) @@ -993,7 +989,7 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) s32 mask; s32 current_player_number; s32 player_count; - + mask = g_CheatInfo[cheat_id - 1].maskfield; current_player_number = get_cur_playernum(); player_count = getPlayerCount(); @@ -1019,7 +1015,7 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) case CHEAT_INVINCIBILITY: if (!get_bondata_invincible_flag()) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x0F))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_0F_INVINCIBILITYON_LF))); set_bondata_invincible_flag(TRUE); return; } @@ -1028,14 +1024,14 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) case CHEAT_ALLGUNS: if (!bondinvGetAllGunsFlag()) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x10))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_10_ALLGUNSON_LF))); bondinvSetAllGunsFlag(TRUE); return; } return; case CHEAT_MAXAMMO: - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x11))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_11_MAXIMUMAMMO_LF))); set_max_ammo_for_cur_player(); return; @@ -1079,7 +1075,7 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) case CHEAT_2X_HEALTH: if ((g_CurrentPlayer->actual_health == 1.0f) || (g_CurrentPlayer->bondhealth < 1.0f)) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x12))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_12_SUPER2XHEALTH_LF))); g_CurrentPlayer->bondhealth = 1.0f; g_CurrentPlayer->actual_health = 2.0f; } @@ -1088,7 +1084,7 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) case CHEAT_2X_ARMOR: if ((g_CurrentPlayer->actual_armor == 1.0f) || (g_CurrentPlayer->bondarmour < 1.0f)) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x13))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_13_SUPER2XARMOUR_LF))); #if defined(BUGFIX_R1) if(TRUE) { @@ -1103,21 +1099,21 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) case CHEAT_INVISIBILITY: if (bondviewGetVisibleToGuardsFlag()) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x14))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_14_INVISIBILITYON_LF))); bondviewSetVisibleToGuardsFlag(FALSE); return; } return; case CHEAT_INFINITE_AMMO: - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x16))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_16_INFINITEAMMOON_LF))); /** * Note: the lvlRender in lvl.c checks if infinite ammo is on then calls set_max_ammo_for_cur_player */ return; case CHEAT_DK_MODE: - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x17))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_17_DKMODEON_LF))); cheatButtonSetDkMode(TRUE); return; @@ -1138,7 +1134,7 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) if (vvv > 0) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x18))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_18_EXTRAWEAPONS_LF))); } return; } @@ -1147,7 +1143,7 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) case CHEAT_TINY_BOND: if ((player_count == 1) && (g_playerPerm->player_perspective_height == 1.0f)) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x19))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_19_TINYBONDON_LF))); g_playerPerm->player_perspective_height = 0.5f; if (g_CurrentPlayer->ptr_char_objectinstance != NULL) @@ -1159,13 +1155,13 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) return; case CHEAT_PAINTBALL: - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x1A))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_1A_PAINTBALMODEON_LF))); return; case CHEAT_10X_HEALTH: if ((g_CurrentPlayer->actual_health == 1.0f) || (g_CurrentPlayer->bondhealth < 1.0f)) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x1B))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_1B_SUPER10XHEALTH_LF))); #if defined(BUGFIX_R1) if(TRUE) { @@ -1222,19 +1218,23 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) } return; - case CHEAT_INVISIBILITY_MP: /* unknown */ + case CHEAT_BONDPHASE: currentPlayerStartChrFade(300.0f, 0.05f); return; case CHEAT_TURBO_MODE: if (!get_debug_fast_bond_flag()) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x1D))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_1D_FASTMODEON_LF))); set_debug_fast_bond_flag(TRUE); return; } return; - + /* easter egg leftover, original usage of string mentioned in an interview + case CHEAT_NO_RADAR_MP: + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_1C_HAPPYNOWKARL_LF))); + return; + //*/ case CHEAT_DEBUG_POS: if (!get_debug_testingmanpos_flag()) { @@ -1246,7 +1246,7 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) case CHEAT_FAST_ANIMATION: if (getAnimationRate() < 4.0f) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x34))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_34_FASTMOTION_LF))); setAnimationRate(4.0f); return; } @@ -1255,7 +1255,7 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) case CHEAT_SLOW_ANIMATION: if (getAnimationRate() > 0.25f) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x32))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_32_SLOWMOTION_LF))); setAnimationRate(0.25); return; } @@ -1364,13 +1364,13 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) s32 val = cheat_id - CHEAT_UNLOCK_PAINTBALL; if ((selected_folder_num >= 0) && (selected_folder_num < 4)) { - sub_GAME_7F01E760(selected_folder_num, val); + fileSaveFolderUnlockCheat(selected_folder_num, val); sndPlaySfx(g_musicSfxBufferPtr, CAMERA_BEEP1_SFX, 0); return; } } return; - + case CHEAT_UNLOCK_DAM: /* fall through */ case CHEAT_UNLOCK_FACILITY: case CHEAT_UNLOCK_RUNWAY: @@ -1398,7 +1398,7 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) if (selected_folder_num >= 0 && selected_folder_num < 4) { unlock_count = 0; - stagenum = 0; + stagenum = 0; for (; stagenum < max; stagenum++) { if (fileIsStageUnlockedAtDifficulty(selected_folder_num, stagenum, DIFFICULTY_AGENT) == 3) @@ -1414,10 +1414,10 @@ void cheatButtonHandleCheatsTurnedOn(CHEAT_ID cheat_id) } } } - return; - + return; + default: - return; + return; } } @@ -1453,16 +1453,16 @@ void cheatButtonHandleCheatsTurnedOff(CHEAT_ID cheat_id) case CHEAT_INVINCIBILITY: if (get_bondata_invincible_flag()) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x1e))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_1E_INVINCIBILITYOFF_LF))); set_bondata_invincible_flag(FALSE); return; } return; - + case CHEAT_ALLGUNS: if (bondinvGetAllGunsFlag()) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x1F))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_1F_ALLGUNSOFF_LF))); bondinvSetAllGunsFlag(FALSE); return; } @@ -1475,25 +1475,25 @@ void cheatButtonHandleCheatsTurnedOff(CHEAT_ID cheat_id) case CHEAT_INVISIBILITY: if (!bondviewGetVisibleToGuardsFlag()) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x20))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_20_INVISIBILITYOFF_LF))); bondviewSetVisibleToGuardsFlag(TRUE); return; } return; case CHEAT_INFINITE_AMMO: - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x22))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_22_INFINITEAMMOOFF_LF))); return; - + case CHEAT_DK_MODE: - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x23))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_23_DKMODEOFF_LF))); cheatButtonSetDkMode(FALSE); return; case CHEAT_TINY_BOND: if ((player_count == 1) && (g_playerPerm->player_perspective_height != 1.0f)) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x24))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_24_TINYBONDOFF_LF))); g_playerPerm->player_perspective_height = 1.0f; if (g_CurrentPlayer->ptr_char_objectinstance) { @@ -1504,17 +1504,17 @@ void cheatButtonHandleCheatsTurnedOff(CHEAT_ID cheat_id) return; case CHEAT_PAINTBALL: - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x25))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_25_PAINTBALLMODEOFF_LF))); return; - case CHEAT_INVISIBILITY_MP: /* multiplayer? but the function call is for "fade"? */ + case CHEAT_BONDPHASE: currentPlayerStartChrFade(300.0f, 1.0f); return; case CHEAT_TURBO_MODE: if (get_debug_fast_bond_flag()) { - HUDMESSAGEBOTTOM((char *)langGet(TEXT(LMISC, 0x27))); + HUDMESSAGEBOTTOM((char *)langGet(getStringID(LMISC, MISC_STR_27_FASTMODEOFF_LF))); set_debug_fast_bond_flag(FALSE); return; } @@ -1527,10 +1527,10 @@ void cheatButtonHandleCheatsTurnedOff(CHEAT_ID cheat_id) } return; - + case CHEAT_EXTRA_MP_CHARS: case CHEAT_MAXAMMO: - case CHEAT_DEBUG_RETURN_SAVED_RA: + case CHEAT_DEBUG_UNK5: case CHEAT_DEACTIVATE_INVINCIBILITY: case CHEAT_2X_HEALTH: case CHEAT_2X_ARMOR: @@ -1591,11 +1591,11 @@ void cheatButtonHandleCheatsTurnedOff(CHEAT_ID cheat_id) case CHEAT_UNLOCK_CRADLE: case CHEAT_UNLOCK_AZTEK: case CHEAT_UNLOCK_EGYPT: - + default: break; } - + } @@ -1639,16 +1639,16 @@ void cheatDisableAllCheats(void) */ char *cheatGetMenuTextPointer(CHEAT_ID cheat_id) { - u16 temp_v0; + u16 strID; - temp_v0 = g_CheatInfo[cheat_id - 1].text_bank_id; + strID = g_CheatInfo[cheat_id - 1].text_bank_id; - if (temp_v0 != 0) + if (strID != 0) { - return langGet((s32) temp_v0); + return langGet((s32) strID); } - return langGet(TEXT(LMISC, MISC_STR_28)); + return langGet(getStringID(LMISC, MISC_STR_28_NONAME)); } @@ -1669,13 +1669,13 @@ bool cheatIsActive(CHEAT_ID cheat) */ void cheatButtonSetDkMode(CHEAT_ID cheat_id) { - s32 g_NumChrSlots; + s32 numslots; s32 i; f32 scale; Model *model; ChrRecord* guard = g_ChrSlots; - g_NumChrSlots = get_numguards(); + numslots = get_numguards(); if (cheat_id) { @@ -1686,7 +1686,7 @@ void cheatButtonSetDkMode(CHEAT_ID cheat_id) scale = 1.25f; } - for (i=0; i +// This shows up a lot but not quite sure what it represents. +#define CHEAT_20 20 + enum CHEAT_MASK { CHEAT_MASK_0 = 0, diff --git a/src/game/chr.c b/src/game/chr.c index e876e7a..4fb5bb0 100644 --- a/src/game/chr.c +++ b/src/game/chr.c @@ -13,6 +13,8 @@ #include "chrlv.h" #include "chrobjdata.h" #include "chrobjhandler.h" +#include "explosions.h" +#include "file.h" #include "gun.h" #include "initanitable.h" #include "lvl.h" @@ -70,18 +72,48 @@ s32 show_patrols_flag = FALSE; s32 player1_guardID = 5000; ChrRecord *g_ChrSlots = 0; s32 g_NumChrSlots = 0; -struct unk_joint_list D_8002CC6C = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; + ModelRenderData D_8002CC6C = {NULL, + TRUE, + 0x00000003, + NULL, + NULL, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; s32 D_8002CCAC = 0; s32 D_8002CCB0 = 0; s32 D_8002CCB4 = 0; - rgba_u8 D_8002CCB8 = { 0x5a, 0, 0, 0}; + rgba_u8 gBloodColour = { 0x5a, 0, 0, 0}; /** * Address 0x8002CCBC. */ -struct unk_joint_list D_8002CCBC = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData D_8002CCBC = {NULL, + TRUE, + 0x00000003, + NULL, + NULL, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; //s32 D_8002CCF8 = 0; s32 D_8002CCFC = 0; u32 num_bodies = 0; @@ -920,64 +952,64 @@ struct weapon_firing_animation_table D_80030078[] = { // sizeof(struct weapon_firing_animation_table) = 0x48 = 72. // address 0xD_80030078. Index 0, = D_80030078 + 0. {0x1334, 76.0, 0.0, 0.0, 20.0, -1.0, 98.0, 161.0, -1.0, -1.0, 93.0, 161.0, 0.87266463, -0.52359879, 0.69813174, -0.69813174, 1.7, 2.0}, - + // address 0x800300C0. Index 1, = D_80030078 + 72. {0x1578, 58.0, 0.0, 0.0, 10.0, -1.0, 77.0, 104.0, -1.0, -1.0, 72.0, 104.0, 0.87266463, -0.34906587, 0.61086529, -0.69813174, 1.55, 1.5}, - + // address 0x80030108. Index 2, = D_80030078 + 144. {0x17B4, 61.0, 0.0, 0.0, 10.0, -1.0, 83.0, 128.0, -1.0, -1.0, 78.0, 128.0, 0.87266463, -0.52359879, 0.87266463, -0.52359879, 1.2, 1.3}, - + // address 0x80030150. Index 3, = D_80030078 + 216. {0x3FA0, 63.0, 0.0, 0.0, 10.0, -1.0, 73.0, 114.0, -1.0, -1.0, 68.0, 114.0, 0.87266463, -0.52359879, 0.61086529, -0.61086529, 1.65, 1.5}, - + // address 0x80030198. Index 4, = D_80030078 + 288. {0x1334, 76.0, 0.0, 0.0, 20.0, 76.0, 98.0, 161.0, -1.0, -1.0, 93.0, 161.0, 0.87266463, -0.52359879, 0.69813174, -0.69813174, 1.7, 2.0}, - + // address 0x800301E0. Index 5, = D_80030078 + 360. {0x1578, 58.0, 0.0, 0.0, 10.0, 63.0, 77.0, 104.0, -1.0, -1.0, 72.0, 104.0, 0.87266463, -0.34906587, 0.61086529, -0.69813174, 1.55, 1.5}, - + // address 0x80030228. Index 6, = D_80030078 + 432. {0x17B4, 61.0, 0.0, 0.0, 10.0, 56.0, 83.0, 128.0, -1.0, -1.0, 78.0, 128.0, 0.87266463, -0.52359879, 0.87266463, -0.52359879, 1.2, 1.3}, - + // address 0x80030270. Index 7, = D_80030078 + 504. {0x3FA0, 63.0, 0.0, 0.0, 10.0, 50.0, 73.0, 114.0, -1.0, -1.0, 68.0, 114.0, 0.87266463, -0.52359879, 0.61086529, -0.61086529, 1.65, 1.5}, - + // address 0x800302B8. Index 8, = D_80030078 + 576. {0x6554, 0.0, 0.0, 0.0, 7.0, 64.0, 19.0, 51.0, 24.0, 46.0, 14.0, 58.0, 0.87266463, -0.69813174, 0.52359879, -0.78539819, 0.0, 0.0}, - + // address 0x80030300. Index 9, = D_80030078 + 648. {0x6A18, 0.0, 0.0, 1.5707964, 14.0, 76.0, 26.0, 31.0, 31.0, 38.0, 15.0, 49.0, 0.87266463, -0.69813174, 0.52359879, -1.0471976, 0.0, 0.0}, - + // address 0x80030348. Index 10, = D_80030078 + 720. {0x6D50, 26.0, 0.0, 0.0, 25.0, 89.0, 41.0, 63.0, 41.0, 51.0, 21.0, 80.0, 0.87266463, -0.69813174, 0.34906587, -1.134464, 0.0, 0.0}, - + // address 0x80030390. Index 11, = D_80030078 + 792. {0x7304, 18.0, 0.0, 1.5707964, 11.0, 78.0, 33.0, 52.0, 35.0, 45.0, 15.0, 66.0, 0.87266463, -0.087266468, 0.69813174, -0.78539819, 1.5, 1.0}, - + // address 0x800303D8. Index 12, = D_80030078 + 864. {0x8E1C, 26.0, 0.0, 0.0, 7.0, 92.0, 28.0, 68.0, -1.0, -1.0, 11.0, 73.0, 0.87266463, -0.69813174, 0.69813174, -0.69813174, 0.0, 0.0}, - + // address 0x80030420. Index 13, = D_80030078 + 936. {0x8F2C, 26.0, 0.0, 1.5707964, 9.0, 112.0, 38.0, 87.0, -1.0, -1.0, 19.0, 98.0, 0.87266463, -0.69813174, 0.43633232, -0.43633232, 0.0, 0.0}, - + // address 0x80030468. Index 14, = D_80030078 + 1008. {0x8698, 22.0, 0.0, 0.0, 10.0, 11.0, 34.0, 87.0, -1.0, -1.0, 17.0, 104.0, 0.87266463, -0.69813174, 0.61086529, -0.78539819, 0.0, 0.0}, - + // address 0x800304B0. Index 15, = D_80030078 + 1080. {0x8800, 28.0, 0.0, 1.5707964, 15.0, 108.0, 34.0, 73.0, -1.0, -1.0, 17.0, 93.0, 0.87266463, -0.69813174, 0.52359879, -0.78539819, 0.0, 0.0}, - + // address 0x800304F8. Index 16, = D_80030078 + 1152. {0x8E1C, 26.0, 0.0, 0.0, 7.0, 92.0, 28.0, 68.0, -1.0, -1.0, 11.0, 73.0, 0.87266463, -0.69813174, 0.69813174, -0.69813174, 0.0, 0.0}, - + // address 0x80030540. Index 17, = D_80030078 + 1224. {0x9194, 25.0, 0.0, 1.5707964, 10.0, 112.0, 32.0, 86.0, -1.0, -1.0, 19.0, 97.0, 0.87266463, -0.69813174, 0.43633232, -0.43633232, 0.0, 0.0}, - + // address 0x80030588. Index 18, = D_80030078 + 1296. {0x8AAC, 25.0, 0.0, 0.0, 9.0, 92.0, 33.0, 62.0, -1.0, -1.0, 18.0, 69.0, 0.87266463, -0.69813174, 0.61086529, -0.78539819, 0.0, 0.0}, - + // address 0x800305D0. Index 19, = D_80030078 + 1368. {0x8BF0, 19.0, 0.0, 1.5707964, 3.0, 95.0, 30.0, 64.0, -1.0, -1.0, 14.0, 71.0, 0.87266463, -0.69813174, 0.52359879, -0.78539819, 1.5, 1.0}, - + // address 0x80030618. Index 20, = D_80030078 + 1440. {0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0} }; @@ -985,34 +1017,34 @@ struct weapon_firing_animation_table D_80030078[] = { struct weapon_firing_animation_table D_80030660[] = { // address 0x80030660. Index 0, = D_80030660 + 0. {0x4574, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 1.4, 1.3}, - + // address 0x800306A8. Index 1, = D_80030660 + 72. {0x45CC, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 1.1, 1.2}, // address 0x800306F0. Index 2, = D_80030660 + 144. {0x74A4, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 0.0, 0.0}, - + // address 0x80030738. Index 3, = D_80030660 + 216. {0x75EC, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 0.0, 0.0}, - + // address 0x80030780. Index 4, = D_80030660 + 288. {0x8274, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 0.0, 0.0}, - + // address 0x800307C8. Index 5, = D_80030660 + 360. {0x8340, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 0.0, 0.0}, - + // address 0x80030810. Index 6, = D_80030660 + 432. {0x82E0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 0.0, 0.0}, - + // address 0x80030858. Index 7, = D_80030660 + 504. {0x83A4, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 0.0, 0.0}, - + // address 0x800308A0. Index 8, = D_80030660 + 576. {0x76B8, 0.0, 0.0, 1.5707964, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 0.0, 0.0}, - + // address 0x800308E8. Index 9, = D_80030660 + 648. {0x7650, 0.0, 0.0, 4.712389, 0.0, -1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 0.87266463, -0.52359879, 0.52359879, -0.52359879, 0.0, 0.0}, - + // address 0x80030930. Index 10, = D_80030660 + 720. {0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0} }; @@ -1021,14 +1053,14 @@ s32 objectiveregisters1 = 0; /** * List of characters updated every tick. - * + * * Address 0x8003097C. */ ChrRecord* g_ActiveChrs = 0; /** * Number of items in g_ActiveChrs. - * + * * Adress 0x0x80030980. */ s32 g_ActiveChrsCount = 0; @@ -1162,7 +1194,7 @@ s32 get_show_patrols_flag(void) /** * Unreferenced. - * + * * Address 0x7F01F574. */ f32 chrUnusedYPositionRelated(PropRecord *arg0) @@ -1223,7 +1255,7 @@ glabel sub_GAME_7F01F614 /* 054184 7F01F654 0FC07D7A */ jal chrSetMoving /* 054188 7F01F658 00002825 */ move $a1, $zero /* 05418C 7F01F65C 0FC2C731 */ jal sub_GAME_7F0B1CC4 -/* 054190 7F01F660 00000000 */ nop +/* 054190 7F01F660 00000000 */ nop /* 054194 7F01F664 C6240008 */ lwc1 $f4, 8($s1) /* 054198 7F01F668 8E050000 */ lw $a1, ($s0) /* 05419C 7F01F66C 8E060008 */ lw $a2, 8($s0) @@ -1259,7 +1291,7 @@ glabel sub_GAME_7F01F614 /* 054214 7F01F6E4 11000005 */ beqz $t0, .L7F01F6FC /* 054218 7F01F6E8 8FA90098 */ lw $t1, 0x98($sp) /* 05421C 7F01F6EC A1200009 */ sb $zero, 9($t1) -/* 054220 7F01F6F0 3C0A8005 */ lui $t2, %hi(g_GlobalTimer) +/* 054220 7F01F6F0 3C0A8005 */ lui $t2, %hi(g_GlobalTimer) /* 054224 7F01F6F4 8D4A837C */ lw $t2, %lo(g_GlobalTimer)($t2) /* 054228 7F01F6F8 AD2A00CC */ sw $t2, 0xcc($t1) .L7F01F6FC: @@ -1288,7 +1320,7 @@ glabel sub_GAME_7F01F614 /* 054280 7F01F750 45000005 */ bc1f .L7F01F768 /* 054284 7F01F754 E7A40068 */ swc1 $f4, 0x68($sp) /* 054288 7F01F758 46105032 */ c.eq.s $f10, $f16 -/* 05428C 7F01F75C 00000000 */ nop +/* 05428C 7F01F75C 00000000 */ nop /* 054290 7F01F760 45030028 */ bc1tl .L7F01F804 /* 054294 7F01F764 8FAE004C */ lw $t6, 0x4c($sp) .L7F01F768: @@ -1390,18 +1422,18 @@ glabel sub_GAME_7F01F614 /* 05440C 7F01F8DC C7B0006C */ lwc1 $f16, 0x6c($sp) /* 054410 7F01F8E0 46069280 */ add.s $f10, $f18, $f6 /* 054414 7F01F8E4 4600503E */ c.le.s $f10, $f0 -/* 054418 7F01F8E8 00000000 */ nop +/* 054418 7F01F8E8 00000000 */ nop /* 05441C 7F01F8EC 45020058 */ bc1fl .L7F01FA50 /* 054420 7F01F8F0 C6260000 */ lwc1 $f6, ($s1) /* 054424 7F01F8F4 C6100000 */ lwc1 $f16, ($s0) /* 054428 7F01F8F8 C7A60080 */ lwc1 $f6, 0x80($sp) /* 05442C 7F01F8FC 46104032 */ c.eq.s $f8, $f16 -/* 054430 7F01F900 00000000 */ nop +/* 054430 7F01F900 00000000 */ nop /* 054434 7F01F904 45020007 */ bc1fl .L7F01F924 /* 054438 7F01F908 C60A0008 */ lwc1 $f10, 8($s0) /* 05443C 7F01F90C C6120008 */ lwc1 $f18, 8($s0) /* 054440 7F01F910 46122032 */ c.eq.s $f4, $f18 -/* 054444 7F01F914 00000000 */ nop +/* 054444 7F01F914 00000000 */ nop /* 054448 7F01F918 450300B0 */ bc1tl .L7F01FBDC /* 05444C 7F01F91C 8FA40098 */ lw $a0, 0x98($sp) /* 054450 7F01F920 C60A0008 */ lwc1 $f10, 8($s0) @@ -1492,18 +1524,18 @@ glabel sub_GAME_7F01F614 /* 05459C 7F01FA6C 46042482 */ mul.s $f18, $f4, $f4 /* 0545A0 7F01FA70 46123280 */ add.s $f10, $f6, $f18 /* 0545A4 7F01FA74 4600503E */ c.le.s $f10, $f0 -/* 0545A8 7F01FA78 00000000 */ nop +/* 0545A8 7F01FA78 00000000 */ nop /* 0545AC 7F01FA7C 45020057 */ bc1fl .L7F01FBDC /* 0545B0 7F01FA80 8FA40098 */ lw $a0, 0x98($sp) /* 0545B4 7F01FA84 C6040000 */ lwc1 $f4, ($s0) /* 0545B8 7F01FA88 C7B20074 */ lwc1 $f18, 0x74($sp) /* 0545BC 7F01FA8C 46048032 */ c.eq.s $f16, $f4 -/* 0545C0 7F01FA90 00000000 */ nop +/* 0545C0 7F01FA90 00000000 */ nop /* 0545C4 7F01FA94 45020007 */ bc1fl .L7F01FAB4 /* 0545C8 7F01FA98 C60A0008 */ lwc1 $f10, 8($s0) /* 0545CC 7F01FA9C C6060008 */ lwc1 $f6, 8($s0) /* 0545D0 7F01FAA0 46064032 */ c.eq.s $f8, $f6 -/* 0545D4 7F01FAA4 00000000 */ nop +/* 0545D4 7F01FAA4 00000000 */ nop /* 0545D8 7F01FAA8 4503004C */ bc1tl .L7F01FBDC /* 0545DC 7F01FAAC 8FA40098 */ lw $a0, 0x98($sp) /* 0545E0 7F01FAB0 C60A0008 */ lwc1 $f10, 8($s0) @@ -1697,14 +1729,14 @@ glabel sub_GAME_7F01FC10 /* 054784 7F01FC54 82190007 */ lb $t9, 7($s0) /* 054788 7F01FC58 24010004 */ li $at, 4 /* 05478C 7F01FC5C 1721002C */ bne $t9, $at, .L7F01FD10 -/* 054790 7F01FC60 00000000 */ nop +/* 054790 7F01FC60 00000000 */ nop /* 054794 7F01FC64 C6020038 */ lwc1 $f2, 0x38($s0) /* 054798 7F01FC68 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) /* 05479C 7F01FC6C 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 /* 0547A0 7F01FC70 4602603C */ c.lt.s $f12, $f2 -/* 0547A4 7F01FC74 00000000 */ nop +/* 0547A4 7F01FC74 00000000 */ nop /* 0547A8 7F01FC78 45000025 */ bc1f .L7F01FD10 -/* 0547AC 7F01FC7C 00000000 */ nop +/* 0547AC 7F01FC7C 00000000 */ nop /* 0547B0 7F01FC80 C48400A4 */ lwc1 $f4, 0xa4($a0) /* 0547B4 7F01FC84 C4460000 */ lwc1 $f6, ($v0) /* 0547B8 7F01FC88 C60A003C */ lwc1 $f10, 0x3c($s0) @@ -1737,9 +1769,9 @@ glabel sub_GAME_7F01FC10 /* 054824 7F01FCF4 E606003C */ swc1 $f6, 0x3c($s0) /* 054828 7F01FCF8 C60A003C */ lwc1 $f10, 0x3c($s0) /* 05482C 7F01FCFC 460A403C */ c.lt.s $f8, $f10 -/* 054830 7F01FD00 00000000 */ nop +/* 054830 7F01FD00 00000000 */ nop /* 054834 7F01FD04 45000002 */ bc1f .L7F01FD10 -/* 054838 7F01FD08 00000000 */ nop +/* 054838 7F01FD08 00000000 */ nop /* 05483C 7F01FD0C E60C0038 */ swc1 $f12, 0x38($s0) .L7F01FD10: /* 054840 7F01FD10 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) @@ -1814,11 +1846,11 @@ glabel sub_GAME_7F01FC10 /* 05494C 7F01FE1C 46086032 */ c.eq.s $f12, $f8 /* 054950 7F01FE20 3C068005 */ lui $a2, %hi(g_GlobalTimerDelta) /* 054954 7F01FE24 45000007 */ bc1f .L7F01FE44 -/* 054958 7F01FE28 00000000 */ nop +/* 054958 7F01FE28 00000000 */ nop /* 05495C 7F01FE2C C60200AC */ lwc1 $f2, 0xac($s0) /* 054960 7F01FE30 C60000A8 */ lwc1 $f0, 0xa8($s0) /* 054964 7F01FE34 4600103C */ c.lt.s $f2, $f0 -/* 054968 7F01FE38 00000000 */ nop +/* 054968 7F01FE38 00000000 */ nop /* 05496C 7F01FE3C 45020013 */ bc1fl .L7F01FE8C /* 054970 7F01FE40 4602003E */ c.le.s $f0, $f2 .L7F01FE44: @@ -1849,7 +1881,7 @@ glabel sub_GAME_7F01FC10 /* 0549D0 7F01FEA0 00001025 */ move $v0, $zero /* 0549D4 7F01FEA4 3C018005 */ lui $at, %hi(D_80051D18) /* 0549D8 7F01FEA8 19600011 */ blez $t3, .L7F01FEF0 -/* 0549DC 7F01FEAC 00000000 */ nop +/* 0549DC 7F01FEAC 00000000 */ nop /* 0549E0 7F01FEB0 C4201D18 */ lwc1 $f0, %lo(D_80051D18)($at) /* 0549E4 7F01FEB4 C61200A4 */ lwc1 $f18, 0xa4($s0) .L7F01FEB8: @@ -1877,21 +1909,21 @@ glabel sub_GAME_7F01FC10 /* 054A38 7F01FF08 3C018005 */ lui $at, %hi(D_80051D24) /* 054A3C 7F01FF0C 460A4102 */ mul.s $f4, $f8, $f10 /* 054A40 7F01FF10 4602003C */ c.lt.s $f0, $f2 -/* 054A44 7F01FF14 00000000 */ nop +/* 054A44 7F01FF14 00000000 */ nop /* 054A48 7F01FF18 45000011 */ bc1f .L7F01FF60 /* 054A4C 7F01FF1C E60400A8 */ swc1 $f4, 0xa8($s0) /* 054A50 7F01FF20 C4301D24 */ lwc1 $f16, %lo(D_80051D24)($at) /* 054A54 7F01FF24 4600803C */ c.lt.s $f16, $f0 -/* 054A58 7F01FF28 00000000 */ nop +/* 054A58 7F01FF28 00000000 */ nop /* 054A5C 7F01FF2C 4502000D */ bc1fl .L7F01FF64 /* 054A60 7F01FF30 C60600A8 */ lwc1 $f6, 0xa8($s0) /* 054A64 7F01FF34 C60000B8 */ lwc1 $f0, 0xb8($s0) /* 054A68 7F01FF38 4602003C */ c.lt.s $f0, $f2 -/* 054A6C 7F01FF3C 00000000 */ nop +/* 054A6C 7F01FF3C 00000000 */ nop /* 054A70 7F01FF40 45020008 */ bc1fl .L7F01FF64 /* 054A74 7F01FF44 C60600A8 */ lwc1 $f6, 0xa8($s0) /* 054A78 7F01FF48 4600803C */ c.lt.s $f16, $f0 -/* 054A7C 7F01FF4C 00000000 */ nop +/* 054A7C 7F01FF4C 00000000 */ nop /* 054A80 7F01FF50 45020004 */ bc1fl .L7F01FF64 /* 054A84 7F01FF54 C60600A8 */ lwc1 $f6, 0xa8($s0) /* 054A88 7F01FF58 E60C00B8 */ swc1 $f12, 0xb8($s0) @@ -2020,14 +2052,14 @@ glabel sub_GAME_7F01FC10 /* 054784 7F01FC54 82190007 */ lb $t9, 7($s0) /* 054788 7F01FC58 24010004 */ li $at, 4 /* 05478C 7F01FC5C 1721002C */ bne $t9, $at, .L7F01FD10 -/* 054790 7F01FC60 00000000 */ nop +/* 054790 7F01FC60 00000000 */ nop /* 054794 7F01FC64 C6020038 */ lwc1 $f2, 0x38($s0) /* 054798 7F01FC68 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) /* 05479C 7F01FC6C 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 /* 0547A0 7F01FC70 4602603C */ c.lt.s $f12, $f2 -/* 0547A4 7F01FC74 00000000 */ nop +/* 0547A4 7F01FC74 00000000 */ nop /* 0547A8 7F01FC78 45000025 */ bc1f .L7F01FD10 -/* 0547AC 7F01FC7C 00000000 */ nop +/* 0547AC 7F01FC7C 00000000 */ nop /* 0547B0 7F01FC80 C48400A4 */ lwc1 $f4, 0xa4($a0) /* 0547B4 7F01FC84 C4460000 */ lwc1 $f6, ($v0) /* 0547B8 7F01FC88 C60A003C */ lwc1 $f10, 0x3c($s0) @@ -2060,9 +2092,9 @@ glabel sub_GAME_7F01FC10 /* 054824 7F01FCF4 E606003C */ swc1 $f6, 0x3c($s0) /* 054828 7F01FCF8 C60A003C */ lwc1 $f10, 0x3c($s0) /* 05482C 7F01FCFC 460A403C */ c.lt.s $f8, $f10 -/* 054830 7F01FD00 00000000 */ nop +/* 054830 7F01FD00 00000000 */ nop /* 054834 7F01FD04 45000002 */ bc1f .L7F01FD10 -/* 054838 7F01FD08 00000000 */ nop +/* 054838 7F01FD08 00000000 */ nop /* 05483C 7F01FD0C E60C0038 */ swc1 $f12, 0x38($s0) .L7F01FD10: /* 054840 7F01FD10 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) @@ -2137,11 +2169,11 @@ glabel sub_GAME_7F01FC10 /* 05494C 7F01FE1C 46086032 */ c.eq.s $f12, $f8 /* 054950 7F01FE20 3C068005 */ lui $a2, %hi(g_GlobalTimerDelta) /* 054954 7F01FE24 45000007 */ bc1f .L7F01FE44 -/* 054958 7F01FE28 00000000 */ nop +/* 054958 7F01FE28 00000000 */ nop /* 05495C 7F01FE2C C60200AC */ lwc1 $f2, 0xac($s0) /* 054960 7F01FE30 C60000A8 */ lwc1 $f0, 0xa8($s0) /* 054964 7F01FE34 4600103C */ c.lt.s $f2, $f0 -/* 054968 7F01FE38 00000000 */ nop +/* 054968 7F01FE38 00000000 */ nop /* 05496C 7F01FE3C 45020013 */ bc1fl .L7F01FE8C /* 054970 7F01FE40 4602003E */ c.le.s $f0, $f2 .L7F01FE44: @@ -2172,7 +2204,7 @@ glabel sub_GAME_7F01FC10 /* 0549D0 7F01FEA0 00001025 */ move $v0, $zero /* 0549D4 7F01FEA4 3C018005 */ lui $at, %hi(D_80051D18) /* 0549D8 7F01FEA8 19600011 */ blez $t3, .L7F01FEF0 -/* 0549DC 7F01FEAC 00000000 */ nop +/* 0549DC 7F01FEAC 00000000 */ nop /* 0549E0 7F01FEB0 C4201D18 */ lwc1 $f0, %lo(D_80051D18)($at) /* 0549E4 7F01FEB4 C61200A4 */ lwc1 $f18, 0xa4($s0) .L7F01FEB8: @@ -2200,21 +2232,21 @@ glabel sub_GAME_7F01FC10 /* 054A38 7F01FF08 3C018005 */ lui $at, %hi(D_80051D24) /* 054A3C 7F01FF0C 460A4102 */ mul.s $f4, $f8, $f10 /* 054A40 7F01FF10 4602003C */ c.lt.s $f0, $f2 -/* 054A44 7F01FF14 00000000 */ nop +/* 054A44 7F01FF14 00000000 */ nop /* 054A48 7F01FF18 45000011 */ bc1f .L7F01FF60 /* 054A4C 7F01FF1C E60400A8 */ swc1 $f4, 0xa8($s0) /* 054A50 7F01FF20 C4301D24 */ lwc1 $f16, %lo(D_80051D24)($at) /* 054A54 7F01FF24 4600803C */ c.lt.s $f16, $f0 -/* 054A58 7F01FF28 00000000 */ nop +/* 054A58 7F01FF28 00000000 */ nop /* 054A5C 7F01FF2C 4502000D */ bc1fl .L7F01FF64 /* 054A60 7F01FF30 C60600A8 */ lwc1 $f6, 0xa8($s0) /* 054A64 7F01FF34 C60000B8 */ lwc1 $f0, 0xb8($s0) /* 054A68 7F01FF38 4602003C */ c.lt.s $f0, $f2 -/* 054A6C 7F01FF3C 00000000 */ nop +/* 054A6C 7F01FF3C 00000000 */ nop /* 054A70 7F01FF40 45020008 */ bc1fl .L7F01FF64 /* 054A74 7F01FF44 C60600A8 */ lwc1 $f6, 0xa8($s0) /* 054A78 7F01FF48 4600803C */ c.lt.s $f16, $f0 -/* 054A7C 7F01FF4C 00000000 */ nop +/* 054A7C 7F01FF4C 00000000 */ nop /* 054A80 7F01FF50 45020004 */ bc1fl .L7F01FF64 /* 054A84 7F01FF54 C60600A8 */ lwc1 $f6, 0xa8($s0) /* 054A88 7F01FF58 E60C00B8 */ swc1 $f12, 0xb8($s0) @@ -2288,14 +2320,14 @@ glabel sub_GAME_7F01FC10 /* 054784 7F01FC54 82190007 */ lb $t9, 7($s0) /* 054788 7F01FC58 24010004 */ li $at, 4 /* 05478C 7F01FC5C 1721002C */ bne $t9, $at, .L7F01FD10 -/* 054790 7F01FC60 00000000 */ nop +/* 054790 7F01FC60 00000000 */ nop /* 054794 7F01FC64 C6020038 */ lwc1 $f2, 0x38($s0) /* 054798 7F01FC68 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) /* 05479C 7F01FC6C 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 /* 0547A0 7F01FC70 4602603C */ c.lt.s $f12, $f2 -/* 0547A4 7F01FC74 00000000 */ nop +/* 0547A4 7F01FC74 00000000 */ nop /* 0547A8 7F01FC78 45000025 */ bc1f .L7F01FD10 -/* 0547AC 7F01FC7C 00000000 */ nop +/* 0547AC 7F01FC7C 00000000 */ nop /* 0547B0 7F01FC80 C48400A4 */ lwc1 $f4, 0xa4($a0) /* 0547B4 7F01FC84 C4460000 */ lwc1 $f6, ($v0) /* 0547B8 7F01FC88 C60A003C */ lwc1 $f10, 0x3c($s0) @@ -2328,9 +2360,9 @@ glabel sub_GAME_7F01FC10 /* 054824 7F01FCF4 E606003C */ swc1 $f6, 0x3c($s0) /* 054828 7F01FCF8 C60A003C */ lwc1 $f10, 0x3c($s0) /* 05482C 7F01FCFC 460A403C */ c.lt.s $f8, $f10 -/* 054830 7F01FD00 00000000 */ nop +/* 054830 7F01FD00 00000000 */ nop /* 054834 7F01FD04 45000002 */ bc1f .L7F01FD10 -/* 054838 7F01FD08 00000000 */ nop +/* 054838 7F01FD08 00000000 */ nop /* 05483C 7F01FD0C E60C0038 */ swc1 $f12, 0x38($s0) .L7F01FD10: /* 054840 7F01FD10 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) @@ -2405,11 +2437,11 @@ glabel sub_GAME_7F01FC10 /* 05494C 7F01FE1C 46086032 */ c.eq.s $f12, $f8 /* 054950 7F01FE20 3C068005 */ lui $a2, %hi(g_GlobalTimerDelta) /* 054954 7F01FE24 45000007 */ bc1f .L7F01FE44 -/* 054958 7F01FE28 00000000 */ nop +/* 054958 7F01FE28 00000000 */ nop /* 05495C 7F01FE2C C60200AC */ lwc1 $f2, 0xac($s0) /* 054960 7F01FE30 C60000A8 */ lwc1 $f0, 0xa8($s0) /* 054964 7F01FE34 4600103C */ c.lt.s $f2, $f0 -/* 054968 7F01FE38 00000000 */ nop +/* 054968 7F01FE38 00000000 */ nop /* 05496C 7F01FE3C 45020013 */ bc1fl .L7F01FE8C /* 054970 7F01FE40 4602003E */ c.le.s $f0, $f2 .L7F01FE44: @@ -2440,7 +2472,7 @@ glabel sub_GAME_7F01FC10 /* 0549D0 7F01FEA0 00001025 */ move $v0, $zero /* 0549D4 7F01FEA4 3C018005 */ lui $at, %hi(D_80051D18) /* 0549D8 7F01FEA8 19600011 */ blez $t3, .L7F01FEF0 -/* 0549DC 7F01FEAC 00000000 */ nop +/* 0549DC 7F01FEAC 00000000 */ nop /* 0549E0 7F01FEB0 C4201D18 */ lwc1 $f0, %lo(D_80051D18)($at) /* 0549E4 7F01FEB4 C61200A4 */ lwc1 $f18, 0xa4($s0) .L7F01FEB8: @@ -2468,21 +2500,21 @@ glabel sub_GAME_7F01FC10 /* 054A38 7F01FF08 3C018005 */ lui $at, %hi(D_80051D24) /* 054A3C 7F01FF0C 460A4102 */ mul.s $f4, $f8, $f10 /* 054A40 7F01FF10 4602003C */ c.lt.s $f0, $f2 -/* 054A44 7F01FF14 00000000 */ nop +/* 054A44 7F01FF14 00000000 */ nop /* 054A48 7F01FF18 45000011 */ bc1f .L7F01FF60 /* 054A4C 7F01FF1C E60400A8 */ swc1 $f4, 0xa8($s0) /* 054A50 7F01FF20 C4301D24 */ lwc1 $f16, %lo(D_80051D24)($at) /* 054A54 7F01FF24 4600803C */ c.lt.s $f16, $f0 -/* 054A58 7F01FF28 00000000 */ nop +/* 054A58 7F01FF28 00000000 */ nop /* 054A5C 7F01FF2C 4502000D */ bc1fl .L7F01FF64 /* 054A60 7F01FF30 C60600A8 */ lwc1 $f6, 0xa8($s0) /* 054A64 7F01FF34 C60000B8 */ lwc1 $f0, 0xb8($s0) /* 054A68 7F01FF38 4602003C */ c.lt.s $f0, $f2 -/* 054A6C 7F01FF3C 00000000 */ nop +/* 054A6C 7F01FF3C 00000000 */ nop /* 054A70 7F01FF40 45020008 */ bc1fl .L7F01FF64 /* 054A74 7F01FF44 C60600A8 */ lwc1 $f6, 0xa8($s0) /* 054A78 7F01FF48 4600803C */ c.lt.s $f16, $f0 -/* 054A7C 7F01FF4C 00000000 */ nop +/* 054A7C 7F01FF4C 00000000 */ nop /* 054A80 7F01FF50 45020004 */ bc1fl .L7F01FF64 /* 054A84 7F01FF54 C60600A8 */ lwc1 $f6, 0xa8($s0) /* 054A88 7F01FF58 E60C00B8 */ swc1 $f12, 0xb8($s0) @@ -2565,421 +2597,137 @@ f32 chrGetArmor(ChrRecord *chr) return 0; } -#ifdef NONMATCHING -void init_GUARDdata_with_set_values(void) { +PropRecord *init_GUARDdata_with_set_values(PropRecord *arg0, Model *arg1, struct coord3d *arg2, f32 arg3, StandTile *arg4, struct AIListRecord *arg5) +{ + ChrRecord *var_s0; + s32 var_v0; + var_s0 = NULL; + var_v0 = 0; + + for (var_v0 = 0; var_v0 < g_NumChrSlots; var_v0++) + { + if (g_ChrSlots[var_v0].model == NULL) + { + var_s0 = &g_ChrSlots[var_v0]; + break; + } + } + + arg0->type = PROP_TYPE_CHR; + arg0->chr = var_s0; + arg0->pos.f[0] = arg2->f[0]; + arg0->pos.f[1] = arg2->f[1]; + arg0->pos.f[2] = arg2->f[2]; + arg0->stan = arg4; + + sub_GAME_7F06FF5C(arg1, (s32) sub_GAME_7F01FC10); + + arg1->unk00 = 0xA; + arg1->chr = var_s0; + + setsuboffset(arg1, arg2); + setsubroty(arg1, arg3); + + #if defined(VERSION_EU) + modelSetAnimPlaySpeed(arg1, animation_rate * 1.2f, 0.0f); + #else + modelSetAnimPlaySpeed(arg1, animation_rate, 0.0f); + #endif + + var_s0->chrnum = (s16) player1_guardID; + player1_guardID += 1; + var_s0->headnum = 0; + var_s0->bodynum = 0; + var_s0->prop = arg0; + var_s0->model = arg1; + var_s0->field_20 = NULL; + var_s0->numarghs = 0; + var_s0->lastwalk60 = 0; + var_s0->invalidmove = 0; + var_s0->lastmoveok60 = g_GlobalTimer; + var_s0->lastseetarget60 = 0; + var_s0->lastknowntargetpos.f[0] = 0.0f; + var_s0->lastknowntargetpos.f[1] = 0.0f; + var_s0->lastknowntargetpos.f[2] = 0.0f; + var_s0->targetTile = NULL; + var_s0->seen_bond_time = 0; + var_s0->lastheartarget60 = 0; + var_s0->numclosearghs = 0; + var_s0->shotbondsum = 0.0f; + var_s0->damage = 0.0f; + var_s0->visionrange = 250.0f; + var_s0->hearingscale = 1.0f; + + var_s0->maxdamage = get_007_health_mod() * 4.0f; + set_color_shading_from_tile(arg0, &var_s0->nextcol); + + var_s0->shadecol.rgba[0] = var_s0->nextcol.rgba[0]; + var_s0->shadecol.rgba[1] = var_s0->nextcol.rgba[1]; + var_s0->shadecol.rgba[2] = var_s0->nextcol.rgba[2]; + var_s0->shadecol.rgba[3] = var_s0->nextcol.rgba[3]; + var_s0->fadealpha = 0xFF; + var_s0->weapons_held[2] = NULL; + var_s0->fireslot_word = 0; + var_s0->ptr_SEbuffer3 = NULL; + var_s0->ptr_SEbuffer4 = NULL; + var_s0->field_178[0] = 0; + var_s0->field_178[1] = 0; + var_s0->chrflags = CHRFLAG_INIT; + var_s0->hidden = CHRHIDDEN_NONE; + var_s0->sumground = 0.0f; + var_s0->manground = 0.0f; + var_s0->ground = 0.0f; + var_s0->fallspeed.f[0] = 0.0f; + var_s0->fallspeed.f[1] = 0.0f; + var_s0->fallspeed.f[2] = 0.0f; + var_s0->prevpos.f[0] = arg2->f[0]; + var_s0->prevpos.f[1] = arg2->f[1]; + var_s0->prevpos.f[2] = arg2->f[2]; + var_s0->actiontype = 0; + var_s0->sleep = 0; + var_s0->ailist = (AIRecord *) arg5; + var_s0->aioffset = 0; + var_s0->aireturnlist = -1; + var_s0->morale = 0; + var_s0->alertness = 0; + var_s0->flags2 = 0; + var_s0->random = 0; + var_s0->timer60 = 0; + var_s0->padpreset1 = -1; + var_s0->chrseeshot = -1; + var_s0->chrseedie = -1; + var_s0->chrpreset1 = -1; + var_s0->unk180[0].unk00 = -1; + var_s0->unk180[1].unk00 = -1; + var_s0->firecount[0] = 0; + var_s0->firecount[1] = 0; + var_s0->grenadeprob = 0; + var_s0->accuracyrating = 0; + var_s0->speedrating = 0; + var_s0->arghrating = 0; + var_s0->flinchcnt = -1; + var_s0->aimuplshoulder = 0.0f; + var_s0->aimuprshoulder = 0.0f; + var_s0->aimupback = 0.0f; + var_s0->aimsideback = 0.0f; + var_s0->aimendlshoulder = 0.0f; + var_s0->aimendrshoulder = 0.0f; + var_s0->aimendback = 0.0f; + var_s0->aimendsideback = 0.0f; + var_s0->aimendcount = 0; + var_s0->weapons_held[0] = NULL; + var_s0->weapons_held[1] = NULL; + var_s0->handle_positiondata_hat = NULL; + var_s0->chrwidth = 20.0f; + var_s0->chrheight = 185.0f; + + sub_GAME_7F01FC10(arg1, &arg0->pos, &arg0->pos, &var_s0->ground); + chrPositionRelated7F020D94(var_s0); + + return arg0; } -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.text -glabel init_GUARDdata_with_set_values -/* 054BEC 7F0200BC 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 054BF0 7F0200C0 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 054BF4 7F0200C4 4487A000 */ mtc1 $a3, $f20 -/* 054BF8 7F0200C8 3C078003 */ lui $a3, %hi(g_NumChrSlots) -/* 054BFC 7F0200CC 8CE7CC68 */ lw $a3, %lo(g_NumChrSlots)($a3) -/* 054C00 7F0200D0 AFB30028 */ sw $s3, 0x28($sp) -/* 054C04 7F0200D4 AFB20024 */ sw $s2, 0x24($sp) -/* 054C08 7F0200D8 AFB10020 */ sw $s1, 0x20($sp) -/* 054C0C 7F0200DC AFB0001C */ sw $s0, 0x1c($sp) -/* 054C10 7F0200E0 00808825 */ move $s1, $a0 -/* 054C14 7F0200E4 00A09025 */ move $s2, $a1 -/* 054C18 7F0200E8 00C09825 */ move $s3, $a2 -/* 054C1C 7F0200EC AFBF002C */ sw $ra, 0x2c($sp) -/* 054C20 7F0200F0 00008025 */ move $s0, $zero -/* 054C24 7F0200F4 18E0000E */ blez $a3, .L7F020130 -/* 054C28 7F0200F8 00001025 */ move $v0, $zero -/* 054C2C 7F0200FC 3C058003 */ lui $a1, %hi(g_ChrSlots) -/* 054C30 7F020100 8CA5CC64 */ lw $a1, %lo(g_ChrSlots)($a1) -/* 054C34 7F020104 00002025 */ move $a0, $zero -/* 054C38 7F020108 00A01825 */ move $v1, $a1 -.L7F02010C: -/* 054C3C 7F02010C 8C6E001C */ lw $t6, 0x1c($v1) -/* 054C40 7F020110 24420001 */ addiu $v0, $v0, 1 -/* 054C44 7F020114 0047082A */ slt $at, $v0, $a3 -/* 054C48 7F020118 15C00003 */ bnez $t6, .L7F020128 -/* 054C4C 7F02011C 246301DC */ addiu $v1, $v1, 0x1dc -/* 054C50 7F020120 10000003 */ b .L7F020130 -/* 054C54 7F020124 00858021 */ addu $s0, $a0, $a1 -.L7F020128: -/* 054C58 7F020128 1420FFF8 */ bnez $at, .L7F02010C -/* 054C5C 7F02012C 248401DC */ addiu $a0, $a0, 0x1dc -.L7F020130: -/* 054C60 7F020130 240F0003 */ li $t7, 3 -/* 054C64 7F020134 A22F0000 */ sb $t7, ($s1) -/* 054C68 7F020138 AE300004 */ sw $s0, 4($s1) -/* 054C6C 7F02013C C6640000 */ lwc1 $f4, ($s3) -/* 054C70 7F020140 3C057F02 */ lui $a1, %hi(sub_GAME_7F01FC10) # $a1, 0x7f02 -/* 054C74 7F020144 24A5FC10 */ addiu $a1, %lo(sub_GAME_7F01FC10) # addiu $a1, $a1, -0x3f0 -/* 054C78 7F020148 E6240008 */ swc1 $f4, 8($s1) -/* 054C7C 7F02014C C6660004 */ lwc1 $f6, 4($s3) -/* 054C80 7F020150 02402025 */ move $a0, $s2 -/* 054C84 7F020154 E626000C */ swc1 $f6, 0xc($s1) -/* 054C88 7F020158 C6680008 */ lwc1 $f8, 8($s3) -/* 054C8C 7F02015C E6280010 */ swc1 $f8, 0x10($s1) -/* 054C90 7F020160 8FB80040 */ lw $t8, 0x40($sp) -/* 054C94 7F020164 0FC1BFD7 */ jal sub_GAME_7F06FF5C -/* 054C98 7F020168 AE380014 */ sw $t8, 0x14($s1) -/* 054C9C 7F02016C 2419000A */ li $t9, 10 -/* 054CA0 7F020170 A6590000 */ sh $t9, ($s2) -/* 054CA4 7F020174 AE500004 */ sw $s0, 4($s2) -/* 054CA8 7F020178 02402025 */ move $a0, $s2 -/* 054CAC 7F02017C 0FC1B303 */ jal setsuboffset -/* 054CB0 7F020180 02602825 */ move $a1, $s3 -/* 054CB4 7F020184 4405A000 */ mfc1 $a1, $f20 -/* 054CB8 7F020188 0FC1B34F */ jal setsubroty -/* 054CBC 7F02018C 02402025 */ move $a0, $s2 -/* 054CC0 7F020190 4480A000 */ mtc1 $zero, $f20 -/* 054CC4 7F020194 3C058003 */ lui $a1, %hi(animation_rate) -/* 054CC8 7F020198 8CA5C900 */ lw $a1, %lo(animation_rate)($a1) -/* 054CCC 7F02019C 4406A000 */ mfc1 $a2, $f20 -/* 054CD0 7F0201A0 0FC1BFC6 */ jal modelSetAnimPlaySpeed -/* 054CD4 7F0201A4 02402025 */ move $a0, $s2 -/* 054CD8 7F0201A8 3C028003 */ lui $v0, %hi(player1_guardID) -/* 054CDC 7F0201AC 2442CC60 */ addiu $v0, %lo(player1_guardID) # addiu $v0, $v0, -0x33a0 -/* 054CE0 7F0201B0 8C480000 */ lw $t0, ($v0) -/* 054CE4 7F0201B4 3C0B8005 */ lui $t3, %hi(g_GlobalTimer) -/* 054CE8 7F0201B8 3C01437A */ li $at, 0x437A0000 # 250.000000 -/* 054CEC 7F0201BC A6080000 */ sh $t0, ($s0) -/* 054CF0 7F0201C0 8C490000 */ lw $t1, ($v0) -/* 054CF4 7F0201C4 44815000 */ mtc1 $at, $f10 -/* 054CF8 7F0201C8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 054CFC 7F0201CC 252A0001 */ addiu $t2, $t1, 1 -/* 054D00 7F0201D0 AC4A0000 */ sw $t2, ($v0) -/* 054D04 7F0201D4 A2000006 */ sb $zero, 6($s0) -/* 054D08 7F0201D8 A200000F */ sb $zero, 0xf($s0) -/* 054D0C 7F0201DC AE110018 */ sw $s1, 0x18($s0) -/* 054D10 7F0201E0 AE12001C */ sw $s2, 0x1c($s0) -/* 054D14 7F0201E4 AE000020 */ sw $zero, 0x20($s0) -/* 054D18 7F0201E8 A200000B */ sb $zero, 0xb($s0) -/* 054D1C 7F0201EC AE0000C8 */ sw $zero, 0xc8($s0) -/* 054D20 7F0201F0 A2000009 */ sb $zero, 9($s0) -/* 054D24 7F0201F4 8D6B837C */ lw $t3, %lo(g_GlobalTimer)($t3) -/* 054D28 7F0201F8 44818000 */ mtc1 $at, $f16 -/* 054D2C 7F0201FC AE0000D4 */ sw $zero, 0xd4($s0) -/* 054D30 7F020200 E61400D8 */ swc1 $f20, 0xd8($s0) -/* 054D34 7F020204 E61400DC */ swc1 $f20, 0xdc($s0) -/* 054D38 7F020208 E61400E0 */ swc1 $f20, 0xe0($s0) -/* 054D3C 7F02020C AE0000E4 */ sw $zero, 0xe4($s0) -/* 054D40 7F020210 AE0000E8 */ sw $zero, 0xe8($s0) -/* 054D44 7F020214 AE0000F0 */ sw $zero, 0xf0($s0) -/* 054D48 7F020218 A200000A */ sb $zero, 0xa($s0) -/* 054D4C 7F02021C E614013C */ swc1 $f20, 0x13c($s0) -/* 054D50 7F020220 E61400FC */ swc1 $f20, 0xfc($s0) -/* 054D54 7F020224 E60A00D0 */ swc1 $f10, 0xd0($s0) -/* 054D58 7F020228 AE0B00CC */ sw $t3, 0xcc($s0) -/* 054D5C 7F02022C 0FC074BA */ jal get_007_health_mod -/* 054D60 7F020230 E61000EC */ swc1 $f16, 0xec($s0) -/* 054D64 7F020234 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 054D68 7F020238 44819000 */ mtc1 $at, $f18 -/* 054D6C 7F02023C 02202025 */ move $a0, $s1 -/* 054D70 7F020240 260500F8 */ addiu $a1, $s0, 0xf8 -/* 054D74 7F020244 46120102 */ mul.s $f4, $f0, $f18 -/* 054D78 7F020248 0FC10027 */ jal set_color_shading_from_tile -/* 054D7C 7F02024C E6040100 */ swc1 $f4, 0x100($s0) -/* 054D80 7F020250 920C00F8 */ lbu $t4, 0xf8($s0) -/* 054D84 7F020254 920D00F9 */ lbu $t5, 0xf9($s0) -/* 054D88 7F020258 920E00FA */ lbu $t6, 0xfa($s0) -/* 054D8C 7F02025C 920F00FB */ lbu $t7, 0xfb($s0) -/* 054D90 7F020260 241800FF */ li $t8, 255 -/* 054D94 7F020264 24190001 */ li $t9, 1 -/* 054D98 7F020268 A218000C */ sb $t8, 0xc($s0) -/* 054D9C 7F02026C AE000168 */ sw $zero, 0x168($s0) -/* 054DA0 7F020270 AE00016C */ sw $zero, 0x16c($s0) -/* 054DA4 7F020274 AE000170 */ sw $zero, 0x170($s0) -/* 054DA8 7F020278 AE000174 */ sw $zero, 0x174($s0) -/* 054DAC 7F02027C AE000178 */ sw $zero, 0x178($s0) -/* 054DB0 7F020280 AE00017C */ sw $zero, 0x17c($s0) -/* 054DB4 7F020284 AE190014 */ sw $t9, 0x14($s0) -/* 054DB8 7F020288 A6000012 */ sh $zero, 0x12($s0) -/* 054DBC 7F02028C E61400A4 */ swc1 $f20, 0xa4($s0) -/* 054DC0 7F020290 E61400A8 */ swc1 $f20, 0xa8($s0) -/* 054DC4 7F020294 E61400AC */ swc1 $f20, 0xac($s0) -/* 054DC8 7F020298 E61400B0 */ swc1 $f20, 0xb0($s0) -/* 054DCC 7F02029C E61400B4 */ swc1 $f20, 0xb4($s0) -/* 054DD0 7F0202A0 E61400B8 */ swc1 $f20, 0xb8($s0) -/* 054DD4 7F0202A4 A20C00F4 */ sb $t4, 0xf4($s0) -/* 054DD8 7F0202A8 A20D00F5 */ sb $t5, 0xf5($s0) -/* 054DDC 7F0202AC A20E00F6 */ sb $t6, 0xf6($s0) -/* 054DE0 7F0202B0 A20F00F7 */ sb $t7, 0xf7($s0) -/* 054DE4 7F0202B4 C6660000 */ lwc1 $f6, ($s3) -/* 054DE8 7F0202B8 2402FFFF */ li $v0, -1 -/* 054DEC 7F0202BC 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 054DF0 7F0202C0 E60600BC */ swc1 $f6, 0xbc($s0) -/* 054DF4 7F0202C4 C6680004 */ lwc1 $f8, 4($s3) -/* 054DF8 7F0202C8 44818000 */ mtc1 $at, $f16 -/* 054DFC 7F0202CC 3C014339 */ li $at, 0x43390000 # 185.000000 -/* 054E00 7F0202D0 E60800C0 */ swc1 $f8, 0xc0($s0) -/* 054E04 7F0202D4 C66A0008 */ lwc1 $f10, 8($s3) -/* 054E08 7F0202D8 A2000007 */ sb $zero, 7($s0) -/* 054E0C 7F0202DC A2000008 */ sb $zero, 8($s0) -/* 054E10 7F0202E0 E60A00C4 */ swc1 $f10, 0xc4($s0) -/* 054E14 7F0202E4 8FA80044 */ lw $t0, 0x44($sp) -/* 054E18 7F0202E8 44819000 */ mtc1 $at, $f18 -/* 054E1C 7F0202EC 26250008 */ addiu $a1, $s1, 8 -/* 054E20 7F0202F0 A6000108 */ sh $zero, 0x108($s0) -/* 054E24 7F0202F4 A602010A */ sh $v0, 0x10a($s0) -/* 054E28 7F0202F8 A200010C */ sb $zero, 0x10c($s0) -/* 054E2C 7F0202FC A200010D */ sb $zero, 0x10d($s0) -/* 054E30 7F020300 A200010E */ sb $zero, 0x10e($s0) -/* 054E34 7F020304 A200010F */ sb $zero, 0x10f($s0) -/* 054E38 7F020308 AE000110 */ sw $zero, 0x110($s0) -/* 054E3C 7F02030C A6020114 */ sh $v0, 0x114($s0) -/* 054E40 7F020310 A6020118 */ sh $v0, 0x118($s0) -/* 054E44 7F020314 A602011A */ sh $v0, 0x11a($s0) -/* 054E48 7F020318 A6020116 */ sh $v0, 0x116($s0) -/* 054E4C 7F02031C A2020180 */ sb $v0, 0x180($s0) -/* 054E50 7F020320 A20201AC */ sb $v0, 0x1ac($s0) -/* 054E54 7F020324 A2000004 */ sb $zero, 4($s0) -/* 054E58 7F020328 A2000005 */ sb $zero, 5($s0) -/* 054E5C 7F02032C A2000010 */ sb $zero, 0x10($s0) -/* 054E60 7F020330 A2000002 */ sb $zero, 2($s0) -/* 054E64 7F020334 A2000003 */ sb $zero, 3($s0) -/* 054E68 7F020338 A200000D */ sb $zero, 0xd($s0) -/* 054E6C 7F02033C A2020011 */ sb $v0, 0x11($s0) -/* 054E70 7F020340 E6140140 */ swc1 $f20, 0x140($s0) -/* 054E74 7F020344 E6140144 */ swc1 $f20, 0x144($s0) -/* 054E78 7F020348 E6140148 */ swc1 $f20, 0x148($s0) -/* 054E7C 7F02034C E614014C */ swc1 $f20, 0x14c($s0) -/* 054E80 7F020350 E6140150 */ swc1 $f20, 0x150($s0) -/* 054E84 7F020354 E6140154 */ swc1 $f20, 0x154($s0) -/* 054E88 7F020358 E6140158 */ swc1 $f20, 0x158($s0) -/* 054E8C 7F02035C E614015C */ swc1 $f20, 0x15c($s0) -/* 054E90 7F020360 A200000E */ sb $zero, 0xe($s0) -/* 054E94 7F020364 AE000160 */ sw $zero, 0x160($s0) -/* 054E98 7F020368 AE000164 */ sw $zero, 0x164($s0) -/* 054E9C 7F02036C AE0001D8 */ sw $zero, 0x1d8($s0) -/* 054EA0 7F020370 00A03025 */ move $a2, $a1 -/* 054EA4 7F020374 02402025 */ move $a0, $s2 -/* 054EA8 7F020378 260700AC */ addiu $a3, $s0, 0xac -/* 054EAC 7F02037C E6100024 */ swc1 $f16, 0x24($s0) -/* 054EB0 7F020380 AE080104 */ sw $t0, 0x104($s0) -/* 054EB4 7F020384 0FC07F04 */ jal sub_GAME_7F01FC10 -/* 054EB8 7F020388 E6120028 */ swc1 $f18, 0x28($s0) -/* 054EBC 7F02038C 0FC08365 */ jal chrPositionRelated7F020D94 -/* 054EC0 7F020390 02002025 */ move $a0, $s0 -/* 054EC4 7F020394 8FBF002C */ lw $ra, 0x2c($sp) -/* 054EC8 7F020398 02201025 */ move $v0, $s1 -/* 054ECC 7F02039C 8FB10020 */ lw $s1, 0x20($sp) -/* 054ED0 7F0203A0 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 054ED4 7F0203A4 8FB0001C */ lw $s0, 0x1c($sp) -/* 054ED8 7F0203A8 8FB20024 */ lw $s2, 0x24($sp) -/* 054EDC 7F0203AC 8FB30028 */ lw $s3, 0x28($sp) -/* 054EE0 7F0203B0 03E00008 */ jr $ra -/* 054EE4 7F0203B4 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_80047E48 -.word 0x3f99999a /*1.2*/ -.text -glabel init_GUARDdata_with_set_values -/* 05290C 7F01FF1C 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 052910 7F01FF20 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 052914 7F01FF24 4487A000 */ mtc1 $a3, $f20 -/* 052918 7F01FF28 3C078003 */ lui $a3, %hi(g_NumChrSlots) # $a3, 0x8003 -/* 05291C 7F01FF2C 8CE781B8 */ lw $a3, %lo(g_NumChrSlots)($a3) -/* 052920 7F01FF30 AFB30028 */ sw $s3, 0x28($sp) -/* 052924 7F01FF34 AFB20024 */ sw $s2, 0x24($sp) -/* 052928 7F01FF38 AFB10020 */ sw $s1, 0x20($sp) -/* 05292C 7F01FF3C AFB0001C */ sw $s0, 0x1c($sp) -/* 052930 7F01FF40 00808825 */ move $s1, $a0 -/* 052934 7F01FF44 00A09025 */ move $s2, $a1 -/* 052938 7F01FF48 00C09825 */ move $s3, $a2 -/* 05293C 7F01FF4C AFBF002C */ sw $ra, 0x2c($sp) -/* 052940 7F01FF50 00008025 */ move $s0, $zero -/* 052944 7F01FF54 18E0000E */ blez $a3, .L7F01FF90 -/* 052948 7F01FF58 00001025 */ move $v0, $zero -/* 05294C 7F01FF5C 3C058003 */ lui $a1, %hi(g_ChrSlots) # $a1, 0x8003 -/* 052950 7F01FF60 8CA581B4 */ lw $a1, %lo(g_ChrSlots)($a1) -/* 052954 7F01FF64 00002025 */ move $a0, $zero -/* 052958 7F01FF68 00A01825 */ move $v1, $a1 -.L7F01FF6C: -/* 05295C 7F01FF6C 8C6E001C */ lw $t6, 0x1c($v1) -/* 052960 7F01FF70 24420001 */ addiu $v0, $v0, 1 -/* 052964 7F01FF74 0047082A */ slt $at, $v0, $a3 -/* 052968 7F01FF78 15C00003 */ bnez $t6, .L7F01FF88 -/* 05296C 7F01FF7C 246301DC */ addiu $v1, $v1, 0x1dc -/* 052970 7F01FF80 10000003 */ b .L7F01FF90 -/* 052974 7F01FF84 00858021 */ addu $s0, $a0, $a1 -.L7F01FF88: -/* 052978 7F01FF88 1420FFF8 */ bnez $at, .L7F01FF6C -/* 05297C 7F01FF8C 248401DC */ addiu $a0, $a0, 0x1dc -.L7F01FF90: -/* 052980 7F01FF90 240F0003 */ li $t7, 3 -/* 052984 7F01FF94 A22F0000 */ sb $t7, ($s1) -/* 052988 7F01FF98 AE300004 */ sw $s0, 4($s1) -/* 05298C 7F01FF9C C6640000 */ lwc1 $f4, ($s3) -/* 052990 7F01FFA0 3C057F02 */ lui $a1, %hi(sub_GAME_7F01FC10) # $a1, 0x7f02 -/* 052994 7F01FFA4 24A5FA70 */ addiu $a1, %lo(sub_GAME_7F01FC10) # addiu $a1, $a1, -0x590 -/* 052998 7F01FFA8 E6240008 */ swc1 $f4, 8($s1) -/* 05299C 7F01FFAC C6660004 */ lwc1 $f6, 4($s3) -/* 0529A0 7F01FFB0 02402025 */ move $a0, $s2 -/* 0529A4 7F01FFB4 E626000C */ swc1 $f6, 0xc($s1) -/* 0529A8 7F01FFB8 C6680008 */ lwc1 $f8, 8($s3) -/* 0529AC 7F01FFBC E6280010 */ swc1 $f8, 0x10($s1) -/* 0529B0 7F01FFC0 8FB80040 */ lw $t8, 0x40($sp) -/* 0529B4 7F01FFC4 0FC1C03F */ jal sub_GAME_7F06FF5C -/* 0529B8 7F01FFC8 AE380014 */ sw $t8, 0x14($s1) -/* 0529BC 7F01FFCC 2419000A */ li $t9, 10 -/* 0529C0 7F01FFD0 A6590000 */ sh $t9, ($s2) -/* 0529C4 7F01FFD4 AE500004 */ sw $s0, 4($s2) -/* 0529C8 7F01FFD8 02402025 */ move $a0, $s2 -/* 0529CC 7F01FFDC 0FC1B480 */ jal setsuboffset -/* 0529D0 7F01FFE0 02602825 */ move $a1, $s3 -/* 0529D4 7F01FFE4 4405A000 */ mfc1 $a1, $f20 -/* 0529D8 7F01FFE8 0FC1B49D */ jal setsubroty -/* 0529DC 7F01FFEC 02402025 */ move $a0, $s2 -/* 0529E0 7F01FFF0 3C018002 */ lui $at, %hi(animation_rate) # $at, 0x8002 -/* 0529E4 7F01FFF4 C42A7E50 */ lwc1 $f10, %lo(animation_rate)($at) -/* 0529E8 7F01FFF8 3C018004 */ lui $at, %hi(D_80047E48) # $at, 0x8004 -/* 0529EC 7F01FFFC C4307E48 */ lwc1 $f16, %lo(D_80047E48)($at) -/* 0529F0 7F020000 4480A000 */ mtc1 $zero, $f20 -/* 0529F4 7F020004 02402025 */ move $a0, $s2 -/* 0529F8 7F020008 46105482 */ mul.s $f18, $f10, $f16 -/* 0529FC 7F02000C 4406A000 */ mfc1 $a2, $f20 -/* 052A00 7F020010 44059000 */ mfc1 $a1, $f18 -/* 052A04 7F020014 0FC1C02E */ jal modelSetAnimPlaySpeed -/* 052A08 7F020018 00000000 */ nop -/* 052A0C 7F02001C 3C028003 */ lui $v0, %hi(player1_guardID) # $v0, 0x8003 -/* 052A10 7F020020 244281B0 */ addiu $v0, %lo(player1_guardID) # addiu $v0, $v0, -0x7e50 -/* 052A14 7F020024 8C480000 */ lw $t0, ($v0) -/* 052A18 7F020028 3C0B8004 */ lui $t3, %hi(g_GlobalTimer) # $t3, 0x8004 -/* 052A1C 7F02002C 3C01437A */ li $at, 0x437A0000 # 250.000000 -/* 052A20 7F020030 A6080000 */ sh $t0, ($s0) -/* 052A24 7F020034 8C490000 */ lw $t1, ($v0) -/* 052A28 7F020038 44812000 */ mtc1 $at, $f4 -/* 052A2C 7F02003C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 052A30 7F020040 252A0001 */ addiu $t2, $t1, 1 -/* 052A34 7F020044 AC4A0000 */ sw $t2, ($v0) -/* 052A38 7F020048 A2000006 */ sb $zero, 6($s0) -/* 052A3C 7F02004C A200000F */ sb $zero, 0xf($s0) -/* 052A40 7F020050 AE110018 */ sw $s1, 0x18($s0) -/* 052A44 7F020054 AE12001C */ sw $s2, 0x1c($s0) -/* 052A48 7F020058 AE000020 */ sw $zero, 0x20($s0) -/* 052A4C 7F02005C A200000B */ sb $zero, 0xb($s0) -/* 052A50 7F020060 AE0000C8 */ sw $zero, 0xc8($s0) -/* 052A54 7F020064 A2000009 */ sb $zero, 9($s0) -/* 052A58 7F020068 8D6B0FFC */ lw $t3, %lo(g_GlobalTimer)($t3) -/* 052A5C 7F02006C 44813000 */ mtc1 $at, $f6 -/* 052A60 7F020070 AE0000D4 */ sw $zero, 0xd4($s0) -/* 052A64 7F020074 E61400D8 */ swc1 $f20, 0xd8($s0) -/* 052A68 7F020078 E61400DC */ swc1 $f20, 0xdc($s0) -/* 052A6C 7F02007C E61400E0 */ swc1 $f20, 0xe0($s0) -/* 052A70 7F020080 AE0000E4 */ sw $zero, 0xe4($s0) -/* 052A74 7F020084 AE0000E8 */ sw $zero, 0xe8($s0) -/* 052A78 7F020088 AE0000F0 */ sw $zero, 0xf0($s0) -/* 052A7C 7F02008C A200000A */ sb $zero, 0xa($s0) -/* 052A80 7F020090 E614013C */ swc1 $f20, 0x13c($s0) -/* 052A84 7F020094 E61400FC */ swc1 $f20, 0xfc($s0) -/* 052A88 7F020098 E60400D0 */ swc1 $f4, 0xd0($s0) -/* 052A8C 7F02009C AE0B00CC */ sw $t3, 0xcc($s0) -/* 052A90 7F0200A0 0FC07452 */ jal get_007_health_mod -/* 052A94 7F0200A4 E60600EC */ swc1 $f6, 0xec($s0) -/* 052A98 7F0200A8 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 052A9C 7F0200AC 44814000 */ mtc1 $at, $f8 -/* 052AA0 7F0200B0 02202025 */ move $a0, $s1 -/* 052AA4 7F0200B4 260500F8 */ addiu $a1, $s0, 0xf8 -/* 052AA8 7F0200B8 46080282 */ mul.s $f10, $f0, $f8 -/* 052AAC 7F0200BC 0FC10057 */ jal set_color_shading_from_tile -/* 052AB0 7F0200C0 E60A0100 */ swc1 $f10, 0x100($s0) -/* 052AB4 7F0200C4 920C00F8 */ lbu $t4, 0xf8($s0) -/* 052AB8 7F0200C8 920D00F9 */ lbu $t5, 0xf9($s0) -/* 052ABC 7F0200CC 920E00FA */ lbu $t6, 0xfa($s0) -/* 052AC0 7F0200D0 920F00FB */ lbu $t7, 0xfb($s0) -/* 052AC4 7F0200D4 241800FF */ li $t8, 255 -/* 052AC8 7F0200D8 24190001 */ li $t9, 1 -/* 052ACC 7F0200DC A218000C */ sb $t8, 0xc($s0) -/* 052AD0 7F0200E0 AE000168 */ sw $zero, 0x168($s0) -/* 052AD4 7F0200E4 AE00016C */ sw $zero, 0x16c($s0) -/* 052AD8 7F0200E8 AE000170 */ sw $zero, 0x170($s0) -/* 052ADC 7F0200EC AE000174 */ sw $zero, 0x174($s0) -/* 052AE0 7F0200F0 AE000178 */ sw $zero, 0x178($s0) -/* 052AE4 7F0200F4 AE00017C */ sw $zero, 0x17c($s0) -/* 052AE8 7F0200F8 AE190014 */ sw $t9, 0x14($s0) -/* 052AEC 7F0200FC A6000012 */ sh $zero, 0x12($s0) -/* 052AF0 7F020100 E61400A4 */ swc1 $f20, 0xa4($s0) -/* 052AF4 7F020104 E61400A8 */ swc1 $f20, 0xa8($s0) -/* 052AF8 7F020108 E61400AC */ swc1 $f20, 0xac($s0) -/* 052AFC 7F02010C E61400B0 */ swc1 $f20, 0xb0($s0) -/* 052B00 7F020110 E61400B4 */ swc1 $f20, 0xb4($s0) -/* 052B04 7F020114 E61400B8 */ swc1 $f20, 0xb8($s0) -/* 052B08 7F020118 A20C00F4 */ sb $t4, 0xf4($s0) -/* 052B0C 7F02011C A20D00F5 */ sb $t5, 0xf5($s0) -/* 052B10 7F020120 A20E00F6 */ sb $t6, 0xf6($s0) -/* 052B14 7F020124 A20F00F7 */ sb $t7, 0xf7($s0) -/* 052B18 7F020128 C6700000 */ lwc1 $f16, ($s3) -/* 052B1C 7F02012C 2402FFFF */ li $v0, -1 -/* 052B20 7F020130 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 052B24 7F020134 E61000BC */ swc1 $f16, 0xbc($s0) -/* 052B28 7F020138 C6720004 */ lwc1 $f18, 4($s3) -/* 052B2C 7F02013C 44813000 */ mtc1 $at, $f6 -/* 052B30 7F020140 3C014339 */ li $at, 0x43390000 # 185.000000 -/* 052B34 7F020144 E61200C0 */ swc1 $f18, 0xc0($s0) -/* 052B38 7F020148 C6640008 */ lwc1 $f4, 8($s3) -/* 052B3C 7F02014C A2000007 */ sb $zero, 7($s0) -/* 052B40 7F020150 A2000008 */ sb $zero, 8($s0) -/* 052B44 7F020154 E60400C4 */ swc1 $f4, 0xc4($s0) -/* 052B48 7F020158 8FA80044 */ lw $t0, 0x44($sp) -/* 052B4C 7F02015C 44814000 */ mtc1 $at, $f8 -/* 052B50 7F020160 26250008 */ addiu $a1, $s1, 8 -/* 052B54 7F020164 A6000108 */ sh $zero, 0x108($s0) -/* 052B58 7F020168 A602010A */ sh $v0, 0x10a($s0) -/* 052B5C 7F02016C A200010C */ sb $zero, 0x10c($s0) -/* 052B60 7F020170 A200010D */ sb $zero, 0x10d($s0) -/* 052B64 7F020174 A200010E */ sb $zero, 0x10e($s0) -/* 052B68 7F020178 A200010F */ sb $zero, 0x10f($s0) -/* 052B6C 7F02017C AE000110 */ sw $zero, 0x110($s0) -/* 052B70 7F020180 A6020114 */ sh $v0, 0x114($s0) -/* 052B74 7F020184 A6020118 */ sh $v0, 0x118($s0) -/* 052B78 7F020188 A602011A */ sh $v0, 0x11a($s0) -/* 052B7C 7F02018C A6020116 */ sh $v0, 0x116($s0) -/* 052B80 7F020190 A2020180 */ sb $v0, 0x180($s0) -/* 052B84 7F020194 A20201AC */ sb $v0, 0x1ac($s0) -/* 052B88 7F020198 A2000004 */ sb $zero, 4($s0) -/* 052B8C 7F02019C A2000005 */ sb $zero, 5($s0) -/* 052B90 7F0201A0 A2000010 */ sb $zero, 0x10($s0) -/* 052B94 7F0201A4 A2000002 */ sb $zero, 2($s0) -/* 052B98 7F0201A8 A2000003 */ sb $zero, 3($s0) -/* 052B9C 7F0201AC A200000D */ sb $zero, 0xd($s0) -/* 052BA0 7F0201B0 A2020011 */ sb $v0, 0x11($s0) -/* 052BA4 7F0201B4 E6140140 */ swc1 $f20, 0x140($s0) -/* 052BA8 7F0201B8 E6140144 */ swc1 $f20, 0x144($s0) -/* 052BAC 7F0201BC E6140148 */ swc1 $f20, 0x148($s0) -/* 052BB0 7F0201C0 E614014C */ swc1 $f20, 0x14c($s0) -/* 052BB4 7F0201C4 E6140150 */ swc1 $f20, 0x150($s0) -/* 052BB8 7F0201C8 E6140154 */ swc1 $f20, 0x154($s0) -/* 052BBC 7F0201CC E6140158 */ swc1 $f20, 0x158($s0) -/* 052BC0 7F0201D0 E614015C */ swc1 $f20, 0x15c($s0) -/* 052BC4 7F0201D4 A200000E */ sb $zero, 0xe($s0) -/* 052BC8 7F0201D8 AE000160 */ sw $zero, 0x160($s0) -/* 052BCC 7F0201DC AE000164 */ sw $zero, 0x164($s0) -/* 052BD0 7F0201E0 AE0001D8 */ sw $zero, 0x1d8($s0) -/* 052BD4 7F0201E4 00A03025 */ move $a2, $a1 -/* 052BD8 7F0201E8 02402025 */ move $a0, $s2 -/* 052BDC 7F0201EC 260700AC */ addiu $a3, $s0, 0xac -/* 052BE0 7F0201F0 E6060024 */ swc1 $f6, 0x24($s0) -/* 052BE4 7F0201F4 AE080104 */ sw $t0, 0x104($s0) -/* 052BE8 7F0201F8 0FC07E9C */ jal sub_GAME_7F01FC10 -/* 052BEC 7F0201FC E6080028 */ swc1 $f8, 0x28($s0) -/* 052BF0 7F020200 0FC08343 */ jal chrPositionRelated7F020D94 -/* 052BF4 7F020204 02002025 */ move $a0, $s0 -/* 052BF8 7F020208 8FBF002C */ lw $ra, 0x2c($sp) -/* 052BFC 7F02020C 02201025 */ move $v0, $s1 -/* 052C00 7F020210 8FB10020 */ lw $s1, 0x20($sp) -/* 052C04 7F020214 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 052C08 7F020218 8FB0001C */ lw $s0, 0x1c($sp) -/* 052C0C 7F02021C 8FB20024 */ lw $s2, 0x24($sp) -/* 052C10 7F020220 8FB30028 */ lw $s3, 0x28($sp) -/* 052C14 7F020224 03E00008 */ jr $ra -/* 052C18 7F020228 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif -#endif @@ -2991,7 +2739,7 @@ PropRecord * chrAllocate( Model * arg0, coord3d * arg1, f32 arg2, StandTile * a PropRecord * ret; s32 phi_a0; - ret = propAllocate(); + ret = chrpropAllocate(); if (ret != 0) { @@ -3007,13 +2755,13 @@ PropRecord * chrAllocate( Model * arg0, coord3d * arg1, f32 arg2, StandTile * a #ifdef NONMATCHING /** * Address 0x7F020414. - * + * * decomp status: * - compiles: yes * - stack resize: ok * - identical instructions: fail * - identical registers: fail - * + * * notes: something isn't right around the area the nextSibling pointer is iterated. */ void disable_sounds_attached_to_player_then_something(PropRecord *prop) @@ -3021,7 +2769,7 @@ void disable_sounds_attached_to_player_then_something(PropRecord *prop) PropRecord *p; ChrRecord *chr; struct object_standard *model; - + chr = prop->chr; model = chr->model; @@ -3092,7 +2840,7 @@ glabel disable_sounds_attached_to_player_then_something /* 054F90 7F020460 50800008 */ beql $a0, $zero, .L7F020484 /* 054F94 7F020464 8E440170 */ lw $a0, 0x170($s2) /* 054F98 7F020468 0C00237C */ jal sndGetPlayingState -/* 054F9C 7F02046C 00000000 */ nop +/* 054F9C 7F02046C 00000000 */ nop /* 054FA0 7F020470 50400004 */ beql $v0, $zero, .L7F020484 /* 054FA4 7F020474 8E440170 */ lw $a0, 0x170($s2) /* 054FA8 7F020478 0C002408 */ jal sndDeactivate @@ -3102,7 +2850,7 @@ glabel disable_sounds_attached_to_player_then_something /* 054FB4 7F020484 50800008 */ beql $a0, $zero, .L7F0204A8 /* 054FB8 7F020488 8E440174 */ lw $a0, 0x174($s2) /* 054FBC 7F02048C 0C00237C */ jal sndGetPlayingState -/* 054FC0 7F020490 00000000 */ nop +/* 054FC0 7F020490 00000000 */ nop /* 054FC4 7F020494 50400004 */ beql $v0, $zero, .L7F0204A8 /* 054FC8 7F020498 8E440174 */ lw $a0, 0x174($s2) /* 054FCC 7F02049C 0C002408 */ jal sndDeactivate @@ -3110,11 +2858,11 @@ glabel disable_sounds_attached_to_player_then_something /* 054FD4 7F0204A4 8E440174 */ lw $a0, 0x174($s2) .L7F0204A8: /* 054FD8 7F0204A8 10800007 */ beqz $a0, .L7F0204C8 -/* 054FDC 7F0204AC 00000000 */ nop +/* 054FDC 7F0204AC 00000000 */ nop /* 054FE0 7F0204B0 0C00237C */ jal sndGetPlayingState -/* 054FE4 7F0204B4 00000000 */ nop +/* 054FE4 7F0204B4 00000000 */ nop /* 054FE8 7F0204B8 10400003 */ beqz $v0, .L7F0204C8 -/* 054FEC 7F0204BC 00000000 */ nop +/* 054FEC 7F0204BC 00000000 */ nop /* 054FF0 7F0204C0 0C002408 */ jal sndDeactivate /* 054FF4 7F0204C4 8E440174 */ lw $a0, 0x174($s2) .L7F0204C8: @@ -3124,7 +2872,7 @@ glabel disable_sounds_attached_to_player_then_something /* 055004 7F0204D4 02002025 */ move $a0, $s0 /* 055008 7F0204D8 8E040020 */ lw $a0, 0x20($s0) /* 05500C 7F0204DC 10800009 */ beqz $a0, .L7F020504 -/* 055010 7F0204E0 00000000 */ nop +/* 055010 7F0204E0 00000000 */ nop .L7F0204E4: /* 055014 7F0204E4 8C910004 */ lw $s1, 4($a0) /* 055018 7F0204E8 0FC13011 */ jal objDetach @@ -3143,7 +2891,7 @@ glabel disable_sounds_attached_to_player_then_something /* 055048 7F020518 10800003 */ beqz $a0, .L7F020528 /* 05504C 7F02051C A64F0000 */ sh $t7, ($s2) /* 055050 7F020520 0FC1AC92 */ jal sub_GAME_7F06B248 -/* 055054 7F020524 00000000 */ nop +/* 055054 7F020524 00000000 */ nop .L7F020528: /* 055058 7F020528 8FBF0024 */ lw $ra, 0x24($sp) /* 05505C 7F02052C 8FB00018 */ lw $s0, 0x18($sp) @@ -3204,7 +2952,7 @@ void chrUpdateAimProperties( ChrRecord *self) #else mult = g_GlobalTimerDelta / (f32) self->aimendcount; #endif - + if (mult > 1.0f) { mult = 1.0f; @@ -3238,22 +2986,22 @@ void chrSetHiddenToRandom(ChrRecord *self) if ((s32) self->flinchcnt < 0) { self->flinchcnt = 1; - self->hidden &= 0xFFF; - + self->hidden &= ~CHRHIDDEN_RAND_FLINCH_MASK; + // roll for bits 12,13. // rand -> value // 2 => nothing // 0 => set bit 12 // 1 => set bit 13 rand = randomGetNext() % 3U; - + if (rand == 0) { - self->hidden |= CHRHIDDEN_1000; + self->hidden |= CHRHIDDEN_RAND_FLINCH_1; } else if (rand == 1) { - self->hidden |= CHRHIDDEN_2000; + self->hidden |= CHRHIDDEN_RAND_FLINCH_2; } // roll for bits 14,15. @@ -3262,14 +3010,14 @@ void chrSetHiddenToRandom(ChrRecord *self) // 0 => set bit 14 // 1 => set bit 15 rand = randomGetNext() % 3U; - + if (rand == 0) { - self->hidden |= CHRHIDDEN_4000; + self->hidden |= CHRHIDDEN_RAND_FLINCH_4; } else if (rand == 1) { - self->hidden |= CHRHIDDEN_8000; + self->hidden |= CHRHIDDEN_RAND_FLINCH_8; } } } @@ -3317,7 +3065,7 @@ glabel sub_GAME_7F020794 /* 0552DC 7F0207AC 3C018005 */ lui $at, %hi(D_80051D2C) /* 0552E0 7F0207B0 468020A0 */ cvt.s.w $f2, $f4 /* 0552E4 7F0207B4 4600103C */ c.lt.s $f2, $f0 -/* 0552E8 7F0207B8 00000000 */ nop +/* 0552E8 7F0207B8 00000000 */ nop /* 0552EC 7F0207BC 4502000D */ bc1fl .L7F0207F4 /* 0552F0 7F0207C0 46001481 */ sub.s $f18, $f2, $f0 /* 0552F4 7F0207C4 3C018005 */ lui $at, %hi(D_80051D28) @@ -3325,7 +3073,7 @@ glabel sub_GAME_7F020794 /* 0552FC 7F0207CC 3C013E80 */ li $at, 0x3E800000 # 0.250000 /* 055300 7F0207D0 44815000 */ mtc1 $at, $f10 /* 055304 7F0207D4 46061202 */ mul.s $f8, $f2, $f6 -/* 055308 7F0207D8 00000000 */ nop +/* 055308 7F0207D8 00000000 */ nop /* 05530C 7F0207DC 460A4402 */ mul.s $f16, $f8, $f10 /* 055310 7F0207E0 0FC15FAB */ jal sinf /* 055314 7F0207E4 46008303 */ div.s $f12, $f16, $f0 @@ -3344,14 +3092,14 @@ glabel sub_GAME_7F020794 /* 055344 7F020814 46105303 */ div.s $f12, $f10, $f16 /* 055348 7F020818 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 05534C 7F02081C 44819000 */ mtc1 $at, $f18 -/* 055350 7F020820 00000000 */ nop +/* 055350 7F020820 00000000 */ nop /* 055354 7F020824 46009081 */ sub.s $f2, $f18, $f0 .L7F020828: /* 055358 7F020828 8FBF0014 */ lw $ra, 0x14($sp) /* 05535C 7F02082C 27BD0018 */ addiu $sp, $sp, 0x18 /* 055360 7F020830 46001006 */ mov.s $f0, $f2 /* 055364 7F020834 03E00008 */ jr $ra -/* 055368 7F020838 00000000 */ nop +/* 055368 7F020838 00000000 */ nop ) #endif @@ -3374,7 +3122,7 @@ glabel sub_GAME_7F020794 /* 05302C 7F02063C 3C018004 */ lui $at, %hi(D_80051D2C) /* 053030 7F020640 468020A0 */ cvt.s.w $f2, $f4 /* 053034 7F020644 4600103C */ c.lt.s $f2, $f0 -/* 053038 7F020648 00000000 */ nop +/* 053038 7F020648 00000000 */ nop /* 05303C 7F02064C 4502000D */ bc1fl .L7F020684 /* 053040 7F020650 46001481 */ sub.s $f18, $f2, $f0 /* 053044 7F020654 3C018004 */ lui $at, %hi(D_80051D28) # $at, 0x8004 @@ -3382,7 +3130,7 @@ glabel sub_GAME_7F020794 /* 05304C 7F02065C 3C013E80 */ li $at, 0x3E800000 # 0.250000 /* 053050 7F020660 44815000 */ mtc1 $at, $f10 /* 053054 7F020664 46061202 */ mul.s $f8, $f2, $f6 -/* 053058 7F020668 00000000 */ nop +/* 053058 7F020668 00000000 */ nop /* 05305C 7F02066C 460A4402 */ mul.s $f16, $f8, $f10 /* 053060 7F020670 0FC1606B */ jal sinf /* 053064 7F020674 46008303 */ div.s $f12, $f16, $f0 @@ -3401,14 +3149,14 @@ glabel sub_GAME_7F020794 /* 053094 7F0206A4 46105303 */ div.s $f12, $f10, $f16 /* 053098 7F0206A8 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 05309C 7F0206AC 44819000 */ mtc1 $at, $f18 -/* 0530A0 7F0206B0 00000000 */ nop +/* 0530A0 7F0206B0 00000000 */ nop /* 0530A4 7F0206B4 46009081 */ sub.s $f2, $f18, $f0 .L7F0206B8: /* 0530A8 7F0206B8 8FBF0014 */ lw $ra, 0x14($sp) /* 0530AC 7F0206BC 27BD0018 */ addiu $sp, $sp, 0x18 /* 0530B0 7F0206C0 46001006 */ mov.s $f0, $f2 /* 0530B4 7F0206C4 03E00008 */ jr $ra -/* 0530B8 7F0206C8 00000000 */ nop +/* 0530B8 7F0206C8 00000000 */ nop ) #endif #endif @@ -3421,24 +3169,24 @@ s32 not_in_us_7F0209EC(s32 bodynum, s32 headnum) return 1; } - if ((bodynum != BODY_Boris) && - (bodynum != BODY_Ourumov) && - (bodynum != BODY_Trevelyan_Janus) && - (bodynum != BODY_Trevelyan_006) && - (bodynum != BODY_Valentin_) && - (bodynum != BODY_Xenia) && - (bodynum != BODY_Baron_Samedi) && - (bodynum != BODY_Jaws) && - (bodynum != BODY_Mayday) && - (bodynum != BODY_Oddjob) && - (bodynum != BODY_Natalya_Skirt) && - (bodynum != BODY_Natalya_Jungle_Fatigues) && - - (headnum != BODY_Male_Pierce_Bond_1) && - (headnum != BODY_Male_Pierce_Bond_2) && - (headnum != BODY_Male_Pierce_Bond_3) && - (headnum != BODY_Male_Pierce_Bond_Parka) && - (headnum != BODY_Male_Pierce_Bond_Tuxedo) && + if ((bodynum != BODY_Boris) && + (bodynum != BODY_Ourumov) && + (bodynum != BODY_Trevelyan_Janus) && + (bodynum != BODY_Trevelyan_006) && + (bodynum != BODY_Valentin_) && + (bodynum != BODY_Xenia) && + (bodynum != BODY_Baron_Samedi) && + (bodynum != BODY_Jaws) && + (bodynum != BODY_Mayday) && + (bodynum != BODY_Oddjob) && + (bodynum != BODY_Natalya_Skirt) && + (bodynum != BODY_Natalya_Jungle_Fatigues) && + + (headnum != BODY_Male_Pierce_Bond_1) && + (headnum != BODY_Male_Pierce_Bond_2) && + (headnum != BODY_Male_Pierce_Bond_3) && + (headnum != BODY_Male_Pierce_Bond_Parka) && + (headnum != BODY_Male_Pierce_Bond_Tuxedo) && (headnum != BODY_Male_Mishkin)) { return 1; @@ -3487,7 +3235,7 @@ glabel sub_GAME_7F02083C .L7F020890: /* 0553C0 7F020890 3C014020 */ li $at, 0x40200000 # 2.500000 /* 0553C4 7F020894 44814000 */ mtc1 $at, $f8 -/* 0553C8 7F020898 00000000 */ nop +/* 0553C8 7F020898 00000000 */ nop /* 0553CC 7F02089C E7A80094 */ swc1 $f8, 0x94($sp) .L7F0208A0: /* 0553D0 7F0208A0 24030002 */ li $v1, 2 @@ -3503,7 +3251,7 @@ glabel sub_GAME_7F02083C /* 0553F4 7F0208C4 44809000 */ mtc1 $zero, $f18 .L7F0208C8: /* 0553F8 7F0208C8 24070001 */ li $a3, 1 -/* 0553FC 7F0208CC 3C0E8007 */ lui $t6, %hi(dword_CODE_bss_80069B60) +/* 0553FC 7F0208CC 3C0E8007 */ lui $t6, %hi(dword_CODE_bss_80069B60) /* 055400 7F0208D0 46009386 */ mov.s $f14, $f18 /* 055404 7F0208D4 46009306 */ mov.s $f12, $f18 /* 055408 7F0208D8 14C50004 */ bne $a2, $a1, .L7F0208EC @@ -3513,7 +3261,7 @@ glabel sub_GAME_7F02083C /* 055418 7F0208E8 C5CE0144 */ lwc1 $f14, 0x144($t6) .L7F0208EC: /* 05541C 7F0208EC 14C30004 */ bne $a2, $v1, .L7F020900 -/* 055420 7F0208F0 3C0F8007 */ lui $t7, %hi(dword_CODE_bss_80069B60) +/* 055420 7F0208F0 3C0F8007 */ lui $t7, %hi(dword_CODE_bss_80069B60) /* 055424 7F0208F4 8DEF9B60 */ lw $t7, %lo(dword_CODE_bss_80069B60)($t7) /* 055428 7F0208F8 1000003E */ b .L7F0209F4 /* 05542C 7F0208FC C5EE0140 */ lwc1 $f14, 0x140($t7) @@ -3526,20 +3274,20 @@ glabel sub_GAME_7F02083C /* 055444 7F020914 C48E0148 */ lwc1 $f14, 0x148($a0) /* 055448 7F020918 33190400 */ andi $t9, $t8, 0x400 /* 05544C 7F02091C 13200013 */ beqz $t9, .L7F02096C -/* 055450 7F020920 00000000 */ nop +/* 055450 7F020920 00000000 */ nop /* 055454 7F020924 C4201D30 */ lwc1 $f0, %lo(D_80051D30)($at) /* 055458 7F020928 3C018005 */ lui $at, %hi(D_80051D34) /* 05545C 7F02092C 460E003C */ c.lt.s $f0, $f14 -/* 055460 7F020930 00000000 */ nop +/* 055460 7F020930 00000000 */ nop /* 055464 7F020934 45000003 */ bc1f .L7F020944 -/* 055468 7F020938 00000000 */ nop +/* 055468 7F020938 00000000 */ nop /* 05546C 7F02093C 1000000B */ b .L7F02096C /* 055470 7F020940 46007381 */ sub.s $f14, $f14, $f0 .L7F020944: /* 055474 7F020944 C4201D34 */ lwc1 $f0, %lo(D_80051D34)($at) /* 055478 7F020948 3C018005 */ lui $at, %hi(D_80051D38) /* 05547C 7F02094C 4600703C */ c.lt.s $f14, $f0 -/* 055480 7F020950 00000000 */ nop +/* 055480 7F020950 00000000 */ nop /* 055484 7F020954 45020005 */ bc1fl .L7F02096C /* 055488 7F020958 46009386 */ mov.s $f14, $f18 /* 05548C 7F02095C C42A1D38 */ lwc1 $f10, %lo(D_80051D38)($at) @@ -3563,17 +3311,17 @@ glabel sub_GAME_7F02083C /* 0554CC 7F02099C C4201D3C */ lwc1 $f0, %lo(D_80051D3C)($at) /* 0554D0 7F0209A0 3C018005 */ lui $at, %hi(D_80051D40) /* 0554D4 7F0209A4 460E003C */ c.lt.s $f0, $f14 -/* 0554D8 7F0209A8 00000000 */ nop +/* 0554D8 7F0209A8 00000000 */ nop /* 0554DC 7F0209AC 45000003 */ bc1f .L7F0209BC -/* 0554E0 7F0209B0 00000000 */ nop +/* 0554E0 7F0209B0 00000000 */ nop /* 0554E4 7F0209B4 1000000F */ b .L7F0209F4 /* 0554E8 7F0209B8 46000386 */ mov.s $f14, $f0 .L7F0209BC: /* 0554EC 7F0209BC C4201D40 */ lwc1 $f0, %lo(D_80051D40)($at) /* 0554F0 7F0209C0 4600703C */ c.lt.s $f14, $f0 -/* 0554F4 7F0209C4 00000000 */ nop +/* 0554F4 7F0209C4 00000000 */ nop /* 0554F8 7F0209C8 4500000A */ bc1f .L7F0209F4 -/* 0554FC 7F0209CC 00000000 */ nop +/* 0554FC 7F0209CC 00000000 */ nop /* 055500 7F0209D0 10000008 */ b .L7F0209F4 /* 055504 7F0209D4 46000386 */ mov.s $f14, $f0 /* 055508 7F0209D8 8C89001C */ lw $t1, 0x1c($a0) @@ -3593,7 +3341,7 @@ glabel sub_GAME_7F02083C /* 055538 7F020A08 50C50004 */ beql $a2, $a1, .L7F020A1C /* 05553C 7F020A0C E7AC008C */ swc1 $f12, 0x8c($sp) /* 055540 7F020A10 14C3001D */ bne $a2, $v1, .L7F020A88 -/* 055544 7F020A14 00000000 */ nop +/* 055544 7F020A14 00000000 */ nop /* 055548 7F020A18 E7AC008C */ swc1 $f12, 0x8c($sp) .L7F020A1C: /* 05554C 7F020A1C 0FC081E5 */ jal sub_GAME_7F020794 @@ -3656,11 +3404,11 @@ glabel sub_GAME_7F02083C /* 055628 7F020AF8 46026300 */ add.s $f12, $f12, $f2 .L7F020AFC: /* 05562C 7F020AFC 11E00002 */ beqz $t7, .L7F020B08 -/* 055630 7F020B00 00000000 */ nop +/* 055630 7F020B00 00000000 */ nop /* 055634 7F020B04 46026301 */ sub.s $f12, $f12, $f2 .L7F020B08: /* 055638 7F020B08 13000009 */ beqz $t8, .L7F020B30 -/* 05563C 7F020B0C 00000000 */ nop +/* 05563C 7F020B0C 00000000 */ nop /* 055640 7F020B10 44813000 */ mtc1 $at, $f6 /* 055644 7F020B14 3C0143B4 */ li $at, 0x43B40000 # 360.000000 /* 055648 7F020B18 44815000 */ mtc1 $at, $f10 @@ -3682,7 +3430,7 @@ glabel sub_GAME_7F02083C .L7F020B54: /* 055684 7F020B54 46127032 */ c.eq.s $f14, $f18 .L7F020B58: -/* 055688 7F020B58 00000000 */ nop +/* 055688 7F020B58 00000000 */ nop /* 05568C 7F020B5C 45020011 */ bc1fl .L7F020BA4 /* 055690 7F020B60 E7AC008C */ swc1 $f12, 0x8c($sp) /* 055694 7F020B64 46126032 */ c.eq.s $f12, $f18 @@ -3695,9 +3443,9 @@ glabel sub_GAME_7F02083C /* 0556B0 7F020B80 45020008 */ bc1fl .L7F020BA4 /* 0556B4 7F020B84 E7AC008C */ swc1 $f12, 0x8c($sp) /* 0556B8 7F020B88 44813000 */ mtc1 $at, $f6 -/* 0556BC 7F020B8C 00000000 */ nop +/* 0556BC 7F020B8C 00000000 */ nop /* 0556C0 7F020B90 46062032 */ c.eq.s $f4, $f6 -/* 0556C4 7F020B94 00000000 */ nop +/* 0556C4 7F020B94 00000000 */ nop /* 0556C8 7F020B98 4503007B */ bc1tl .L7F020D88 /* 0556CC 7F020B9C 8FBF0014 */ lw $ra, 0x14($sp) /* 0556D0 7F020BA0 E7AC008C */ swc1 $f12, 0x8c($sp) @@ -3711,7 +3459,7 @@ glabel sub_GAME_7F02083C /* 0556EC 7F020BBC 4612703C */ c.lt.s $f14, $f18 /* 0556F0 7F020BC0 3C018005 */ lui $at, %hi(D_80051D4C) /* 0556F4 7F020BC4 45000003 */ bc1f .L7F020BD4 -/* 0556F8 7F020BC8 00000000 */ nop +/* 0556F8 7F020BC8 00000000 */ nop /* 0556FC 7F020BCC 10000003 */ b .L7F020BDC /* 055700 7F020BD0 46007387 */ neg.s $f14, $f14 .L7F020BD4: @@ -3749,17 +3497,17 @@ glabel sub_GAME_7F02083C /* 055778 7F020C48 E4520038 */ swc1 $f18, 0x38($v0) /* 05577C 7F020C4C C7AA0088 */ lwc1 $f10, 0x88($sp) /* 055780 7F020C50 46125032 */ c.eq.s $f10, $f18 -/* 055784 7F020C54 00000000 */ nop +/* 055784 7F020C54 00000000 */ nop /* 055788 7F020C58 45010030 */ bc1t .L7F020D1C -/* 05578C 7F020C5C 00000000 */ nop +/* 05578C 7F020C5C 00000000 */ nop .L7F020C60: /* 055790 7F020C60 C7A40070 */ lwc1 $f4, 0x70($sp) /* 055794 7F020C64 3C018005 */ lui $at, %hi(D_80051D54) /* 055798 7F020C68 46046301 */ sub.s $f12, $f12, $f4 /* 05579C 7F020C6C 4612603C */ c.lt.s $f12, $f18 -/* 0557A0 7F020C70 00000000 */ nop +/* 0557A0 7F020C70 00000000 */ nop /* 0557A4 7F020C74 45000003 */ bc1f .L7F020C84 -/* 0557A8 7F020C78 00000000 */ nop +/* 0557A8 7F020C78 00000000 */ nop /* 0557AC 7F020C7C C4261D54 */ lwc1 $f6, %lo(D_80051D54)($at) /* 0557B0 7F020C80 46066300 */ add.s $f12, $f12, $f6 .L7F020C84: @@ -3772,7 +3520,7 @@ glabel sub_GAME_7F02083C /* 0557CC 7F020C9C 44809000 */ mtc1 $zero, $f18 /* 0557D0 7F020CA0 27A50030 */ addiu $a1, $sp, 0x30 /* 0557D4 7F020CA4 46127032 */ c.eq.s $f14, $f18 -/* 0557D8 7F020CA8 00000000 */ nop +/* 0557D8 7F020CA8 00000000 */ nop /* 0557DC 7F020CAC 45030009 */ bc1tl .L7F020CD4 /* 0557E0 7F020CB0 C7A80088 */ lwc1 $f8, 0x88($sp) /* 0557E4 7F020CB4 0FC1615C */ jal matrix_4x4_set_rotation_around_x @@ -3781,12 +3529,12 @@ glabel sub_GAME_7F02083C /* 0557F0 7F020CC0 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place /* 0557F4 7F020CC4 8FA5009C */ lw $a1, 0x9c($sp) /* 0557F8 7F020CC8 44809000 */ mtc1 $zero, $f18 -/* 0557FC 7F020CCC 00000000 */ nop +/* 0557FC 7F020CCC 00000000 */ nop /* 055800 7F020CD0 C7A80088 */ lwc1 $f8, 0x88($sp) .L7F020CD4: /* 055804 7F020CD4 27A50030 */ addiu $a1, $sp, 0x30 /* 055808 7F020CD8 46124032 */ c.eq.s $f8, $f18 -/* 05580C 7F020CDC 00000000 */ nop +/* 05580C 7F020CDC 00000000 */ nop /* 055810 7F020CE0 45030007 */ bc1tl .L7F020D00 /* 055814 7F020CE4 C7AC0070 */ lwc1 $f12, 0x70($sp) /* 055818 7F020CE8 0FC161A2 */ jal matrix_4x4_set_rotation_around_z @@ -3815,7 +3563,7 @@ glabel sub_GAME_7F02083C /* 055868 7F020D38 C7AA0094 */ lwc1 $f10, 0x94($sp) /* 05586C 7F020D3C 8FA5009C */ lw $a1, 0x9c($sp) /* 055870 7F020D40 46045032 */ c.eq.s $f10, $f4 -/* 055874 7F020D44 00000000 */ nop +/* 055874 7F020D44 00000000 */ nop /* 055878 7F020D48 45030004 */ bc1tl .L7F020D5C /* 05587C 7F020D4C C7A60074 */ lwc1 $f6, 0x74($sp) /* 055880 7F020D50 0FC1629F */ jal matrix_scalar_multiply @@ -3836,7 +3584,7 @@ glabel sub_GAME_7F02083C .L7F020D88: /* 0558B8 7F020D88 27BD0098 */ addiu $sp, $sp, 0x98 /* 0558BC 7F020D8C 03E00008 */ jr $ra -/* 0558C0 7F020D90 00000000 */ nop +/* 0558C0 7F020D90 00000000 */ nop ) #endif @@ -3883,7 +3631,7 @@ glabel sub_GAME_7F02083C /* 0556A4 7F020B34 07020005 */ bltzl $t8, .L7F020B4C /* 0556A8 7F020B38 24030002 */ li $v1, 2 /* 0556AC 7F020B3C 44814000 */ mtc1 $at, $f8 -/* 0556B0 7F020B40 00000000 */ nop +/* 0556B0 7F020B40 00000000 */ nop /* 0556B4 7F020B44 E7A80094 */ swc1 $f8, 0x94($sp) .L7F020B48: /* 0556B8 7F020B48 24030002 */ li $v1, 2 @@ -3910,31 +3658,31 @@ glabel sub_GAME_7F02083C /* 055700 7F020B90 C4CE0144 */ lwc1 $f14, 0x144($a2) .L7F020B94: /* 055704 7F020B94 14E30003 */ bne $a3, $v1, .L7F020BA4 -/* 055708 7F020B98 00000000 */ nop +/* 055708 7F020B98 00000000 */ nop /* 05570C 7F020B9C 1000003C */ b .L7F020C90 /* 055710 7F020BA0 C4CE0140 */ lwc1 $f14, 0x140($a2) .L7F020BA4: /* 055714 7F020BA4 14E4001B */ bne $a3, $a0, .L7F020C14 -/* 055718 7F020BA8 00000000 */ nop +/* 055718 7F020BA8 00000000 */ nop /* 05571C 7F020BAC 94D90012 */ lhu $t9, 0x12($a2) /* 055720 7F020BB0 C4CE0148 */ lwc1 $f14, 0x148($a2) /* 055724 7F020BB4 3C018005 */ lui $at, %hi(D_80051D30) # $at, 0x8005 /* 055728 7F020BB8 33280400 */ andi $t0, $t9, 0x400 /* 05572C 7F020BBC 11000013 */ beqz $t0, .L7F020C0C -/* 055730 7F020BC0 00000000 */ nop +/* 055730 7F020BC0 00000000 */ nop /* 055734 7F020BC4 C4201D60 */ lwc1 $f0, %lo(D_80051D30)($at) /* 055738 7F020BC8 3C018005 */ lui $at, %hi(D_80051D34) # $at, 0x8005 /* 05573C 7F020BCC 460E003C */ c.lt.s $f0, $f14 -/* 055740 7F020BD0 00000000 */ nop +/* 055740 7F020BD0 00000000 */ nop /* 055744 7F020BD4 45000003 */ bc1f .L7F020BE4 -/* 055748 7F020BD8 00000000 */ nop +/* 055748 7F020BD8 00000000 */ nop /* 05574C 7F020BDC 1000000B */ b .L7F020C0C /* 055750 7F020BE0 46007381 */ sub.s $f14, $f14, $f0 .L7F020BE4: /* 055754 7F020BE4 C4201D64 */ lwc1 $f0, %lo(D_80051D34)($at) /* 055758 7F020BE8 3C018005 */ lui $at, %hi(D_80051D38) # $at, 0x8005 /* 05575C 7F020BEC 4600703C */ c.lt.s $f14, $f0 -/* 055760 7F020BF0 00000000 */ nop +/* 055760 7F020BF0 00000000 */ nop /* 055764 7F020BF4 45020005 */ bc1fl .L7F020C0C /* 055768 7F020BF8 46009386 */ mov.s $f14, $f18 /* 05576C 7F020BFC C42A1D68 */ lwc1 $f10, %lo(D_80051D38)($at) @@ -3957,15 +3705,15 @@ glabel sub_GAME_7F02083C /* 0557A8 7F020C38 C4201D6C */ lwc1 $f0, %lo(D_80051D3C)($at) /* 0557AC 7F020C3C 3C018005 */ lui $at, %hi(D_80051D40) # $at, 0x8005 /* 0557B0 7F020C40 460E003C */ c.lt.s $f0, $f14 -/* 0557B4 7F020C44 00000000 */ nop +/* 0557B4 7F020C44 00000000 */ nop /* 0557B8 7F020C48 45000003 */ bc1f .L7F020C58 -/* 0557BC 7F020C4C 00000000 */ nop +/* 0557BC 7F020C4C 00000000 */ nop /* 0557C0 7F020C50 1000000F */ b .L7F020C90 /* 0557C4 7F020C54 46000386 */ mov.s $f14, $f0 .L7F020C58: /* 0557C8 7F020C58 C4201D70 */ lwc1 $f0, %lo(D_80051D40)($at) /* 0557CC 7F020C5C 4600703C */ c.lt.s $f14, $f0 -/* 0557D0 7F020C60 00000000 */ nop +/* 0557D0 7F020C60 00000000 */ nop /* 0557D4 7F020C64 4502000B */ bc1fl .L7F020C94 /* 0557D8 7F020C68 80CC0011 */ lb $t4, 0x11($a2) /* 0557DC 7F020C6C 10000008 */ b .L7F020C90 @@ -3986,7 +3734,7 @@ glabel sub_GAME_7F02083C /* 05580C 7F020C9C 50E50004 */ beql $a3, $a1, .L7F020CB0 /* 055810 7F020CA0 00C02025 */ move $a0, $a2 /* 055814 7F020CA4 14E3001E */ bne $a3, $v1, .L7F020D20 -/* 055818 7F020CA8 00000000 */ nop +/* 055818 7F020CA8 00000000 */ nop /* 05581C 7F020CAC 00C02025 */ move $a0, $a2 .L7F020CB0: /* 055820 7F020CB0 E7AC008C */ swc1 $f12, 0x8c($sp) @@ -4050,11 +3798,11 @@ glabel sub_GAME_7F02083C /* 055900 7F020D90 46026300 */ add.s $f12, $f12, $f2 .L7F020D94: /* 055904 7F020D94 13000002 */ beqz $t8, .L7F020DA0 -/* 055908 7F020D98 00000000 */ nop +/* 055908 7F020D98 00000000 */ nop /* 05590C 7F020D9C 46026301 */ sub.s $f12, $f12, $f2 .L7F020DA0: /* 055910 7F020DA0 13200009 */ beqz $t9, .L7F020DC8 -/* 055914 7F020DA4 00000000 */ nop +/* 055914 7F020DA4 00000000 */ nop /* 055918 7F020DA8 44813000 */ mtc1 $at, $f6 /* 05591C 7F020DAC 3C0143B4 */ li $at, 0x43B40000 # 360.000000 /* 055920 7F020DB0 44815000 */ mtc1 $at, $f10 @@ -4089,9 +3837,9 @@ glabel sub_GAME_7F02083C /* 055988 7F020E18 45020008 */ bc1fl .L7F020E3C /* 05598C 7F020E1C E7AC008C */ swc1 $f12, 0x8c($sp) /* 055990 7F020E20 44813000 */ mtc1 $at, $f6 -/* 055994 7F020E24 00000000 */ nop +/* 055994 7F020E24 00000000 */ nop /* 055998 7F020E28 46062032 */ c.eq.s $f4, $f6 -/* 05599C 7F020E2C 00000000 */ nop +/* 05599C 7F020E2C 00000000 */ nop /* 0559A0 7F020E30 4503007B */ bc1tl .L7F021020 /* 0559A4 7F020E34 8FBF0014 */ lw $ra, 0x14($sp) /* 0559A8 7F020E38 E7AC008C */ swc1 $f12, 0x8c($sp) @@ -4105,7 +3853,7 @@ glabel sub_GAME_7F02083C /* 0559C4 7F020E54 4612703C */ c.lt.s $f14, $f18 /* 0559C8 7F020E58 3C018005 */ lui $at, %hi(D_80051D4C) # $at, 0x8005 /* 0559CC 7F020E5C 45000003 */ bc1f .L7F020E6C -/* 0559D0 7F020E60 00000000 */ nop +/* 0559D0 7F020E60 00000000 */ nop /* 0559D4 7F020E64 10000003 */ b .L7F020E74 /* 0559D8 7F020E68 46007387 */ neg.s $f14, $f14 .L7F020E6C: @@ -4143,17 +3891,17 @@ glabel sub_GAME_7F02083C /* 055A50 7F020EE0 E4520038 */ swc1 $f18, 0x38($v0) /* 055A54 7F020EE4 C7AA0088 */ lwc1 $f10, 0x88($sp) /* 055A58 7F020EE8 46125032 */ c.eq.s $f10, $f18 -/* 055A5C 7F020EEC 00000000 */ nop +/* 055A5C 7F020EEC 00000000 */ nop /* 055A60 7F020EF0 45010030 */ bc1t .L7F020FB4 -/* 055A64 7F020EF4 00000000 */ nop +/* 055A64 7F020EF4 00000000 */ nop .L7F020EF8: /* 055A68 7F020EF8 C7A40070 */ lwc1 $f4, 0x70($sp) /* 055A6C 7F020EFC 3C018005 */ lui $at, %hi(D_80051D54) # $at, 0x8005 /* 055A70 7F020F00 46046301 */ sub.s $f12, $f12, $f4 /* 055A74 7F020F04 4612603C */ c.lt.s $f12, $f18 -/* 055A78 7F020F08 00000000 */ nop +/* 055A78 7F020F08 00000000 */ nop /* 055A7C 7F020F0C 45000003 */ bc1f .L7F020F1C -/* 055A80 7F020F10 00000000 */ nop +/* 055A80 7F020F10 00000000 */ nop /* 055A84 7F020F14 C4261D84 */ lwc1 $f6, %lo(D_80051D54)($at) /* 055A88 7F020F18 46066300 */ add.s $f12, $f12, $f6 .L7F020F1C: @@ -4166,7 +3914,7 @@ glabel sub_GAME_7F02083C /* 055AA4 7F020F34 44809000 */ mtc1 $zero, $f18 /* 055AA8 7F020F38 27A50030 */ addiu $a1, $sp, 0x30 /* 055AAC 7F020F3C 46127032 */ c.eq.s $f14, $f18 -/* 055AB0 7F020F40 00000000 */ nop +/* 055AB0 7F020F40 00000000 */ nop /* 055AB4 7F020F44 45030009 */ bc1tl .L7F020F6C /* 055AB8 7F020F48 C7A80088 */ lwc1 $f8, 0x88($sp) /* 055ABC 7F020F4C 0FC162A4 */ jal matrix_4x4_set_rotation_around_x @@ -4175,12 +3923,12 @@ glabel sub_GAME_7F02083C /* 055AC8 7F020F58 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place /* 055ACC 7F020F5C 8FA5009C */ lw $a1, 0x9c($sp) /* 055AD0 7F020F60 44809000 */ mtc1 $zero, $f18 -/* 055AD4 7F020F64 00000000 */ nop +/* 055AD4 7F020F64 00000000 */ nop /* 055AD8 7F020F68 C7A80088 */ lwc1 $f8, 0x88($sp) .L7F020F6C: /* 055ADC 7F020F6C 27A50030 */ addiu $a1, $sp, 0x30 /* 055AE0 7F020F70 46124032 */ c.eq.s $f8, $f18 -/* 055AE4 7F020F74 00000000 */ nop +/* 055AE4 7F020F74 00000000 */ nop /* 055AE8 7F020F78 45030007 */ bc1tl .L7F020F98 /* 055AEC 7F020F7C C7AC0070 */ lwc1 $f12, 0x70($sp) /* 055AF0 7F020F80 0FC162EA */ jal matrix_4x4_set_rotation_around_z @@ -4209,7 +3957,7 @@ glabel sub_GAME_7F02083C /* 055B40 7F020FD0 C7AA0094 */ lwc1 $f10, 0x94($sp) /* 055B44 7F020FD4 8FA5009C */ lw $a1, 0x9c($sp) /* 055B48 7F020FD8 46045032 */ c.eq.s $f10, $f4 -/* 055B4C 7F020FDC 00000000 */ nop +/* 055B4C 7F020FDC 00000000 */ nop /* 055B50 7F020FE0 45030004 */ bc1tl .L7F020FF4 /* 055B54 7F020FE4 C7A60074 */ lwc1 $f6, 0x74($sp) /* 055B58 7F020FE8 0FC163E7 */ jal matrix_scalar_multiply @@ -4230,8 +3978,8 @@ glabel sub_GAME_7F02083C .L7F021020: /* 055B90 7F021020 27BD0098 */ addiu $sp, $sp, 0x98 /* 055B94 7F021024 03E00008 */ jr $ra -/* 055B98 7F021028 00000000 */ nop - +/* 055B98 7F021028 00000000 */ nop + ) #endif @@ -4292,17 +4040,28 @@ void chrPositionRelated7F020E40(ChrRecord *chr, s32 arg1) #ifdef NONMATCHING -void sub_GAME_7F020EF0(void) { - +/* +* Address: +* US: 0x7F020EF0 +* JP: 0x7F021188 +* EU: 0x7F020E68 +*/ +void chrTickBeams(void) { + #ifdef DEBUG + osSyncPrintf("anim=%d frame=%f backy=%f\n", DAT_83bcf9d8, *(local_e8 + 0x28), (*(psVar2 + 0xa6) * 360.0) / 6.283185); + #endif + #ifdef DEBUG + osSyncPrintf("\nVISIBLE MAGIC MODE!!!!\n\n"); + #endif } #else #ifdef VERSION_US GLOBAL_ASM( .text -glabel sub_GAME_7F020EF0 +glabel chrTickBeams /* 055A20 7F020EF0 27BDFEA8 */ addiu $sp, $sp, -0x158 -/* 055A24 7F020EF4 3C0F8003 */ lui $t7, %hi(D_8002CC6C) +/* 055A24 7F020EF4 3C0F8003 */ lui $t7, %hi(D_8002CC6C) /* 055A28 7F020EF8 25EFCC6C */ addiu $t7, %lo(D_8002CC6C) # addiu $t7, $t7, -0x3394 /* 055A2C 7F020EFC AFBF0024 */ sw $ra, 0x24($sp) /* 055A30 7F020F00 AFB00020 */ sw $s0, 0x20($sp) @@ -4320,12 +4079,12 @@ glabel sub_GAME_7F020EF0 /* 055A5C 7F020F2C 15E8FFF8 */ bne $t7, $t0, .L7F020F10 /* 055A60 7F020F30 ADC1FFFC */ sw $at, -4($t6) /* 055A64 7F020F34 8DE10000 */ lw $at, ($t7) -/* 055A68 7F020F38 3C0C8005 */ lui $t4, %hi(g_ClockTimer) +/* 055A68 7F020F38 3C0C8005 */ lui $t4, %hi(g_ClockTimer) /* 055A6C 7F020F3C 240B0001 */ li $t3, 1 /* 055A70 7F020F40 ADC10000 */ sw $at, ($t6) /* 055A74 7F020F44 8FA90158 */ lw $t1, 0x158($sp) /* 055A78 7F020F48 8D8C8374 */ lw $t4, %lo(g_ClockTimer)($t4) -/* 055A7C 7F020F4C 3C188003 */ lui $t8, %hi(D_8002C904) +/* 055A7C 7F020F4C 3C188003 */ lui $t8, %hi(D_8002C904) /* 055A80 7F020F50 8D300004 */ lw $s0, 4($t1) /* 055A84 7F020F54 8E0A001C */ lw $t2, 0x1c($s0) /* 055A88 7F020F58 AFAB0108 */ sw $t3, 0x108($sp) @@ -4339,9 +4098,9 @@ glabel sub_GAME_7F020EF0 /* 055AA8 7F020F78 96180012 */ lhu $t8, 0x12($s0) .L7F020F7C: /* 055AAC 7F020F7C 8F18C904 */ lw $t8, %lo(D_8002C904)($t8) -/* 055AB0 7F020F80 3C088003 */ lui $t0, %hi(g_AnimationTablePointerCountRelated) +/* 055AB0 7F020F80 3C088003 */ lui $t0, %hi(g_AnimationTablePointerCountRelated) /* 055AB4 7F020F84 1300001E */ beqz $t8, .L7F021000 -/* 055AB8 7F020F88 00000000 */ nop +/* 055AB8 7F020F88 00000000 */ nop /* 055ABC 7F020F8C 8D08C908 */ lw $t0, %lo(g_AnimationTablePointerCountRelated)($t0) /* 055AC0 7F020F90 3C0E8003 */ lui $t6, %hi(animation_table_ptrs1) /* 055AC4 7F020F94 24010001 */ li $at, 1 @@ -4349,10 +4108,10 @@ glabel sub_GAME_7F020EF0 /* 055ACC 7F020F9C 01CF7021 */ addu $t6, $t6, $t7 /* 055AD0 7F020FA0 8DCE9D6C */ lw $t6, %lo(animation_table_ptrs1)($t6) /* 055AD4 7F020FA4 11C1001D */ beq $t6, $at, .L7F02101C -/* 055AD8 7F020FA8 00000000 */ nop +/* 055AD8 7F020FA8 00000000 */ nop /* 055ADC 7F020FAC 0FC1BD6B */ jal objecthandlerGetModelAnim /* 055AE0 7F020FB0 8FA40110 */ lw $a0, 0x110($sp) -/* 055AE4 7F020FB4 3C098003 */ lui $t1, %hi(g_AnimationTablePointerCountRelated) +/* 055AE4 7F020FB4 3C098003 */ lui $t1, %hi(g_AnimationTablePointerCountRelated) /* 055AE8 7F020FB8 8D29C908 */ lw $t1, %lo(g_AnimationTablePointerCountRelated)($t1) /* 055AEC 7F020FBC 3C058003 */ lui $a1, %hi(animation_table_ptrs1) /* 055AF0 7F020FC0 8FA40110 */ lw $a0, 0x110($sp) @@ -4361,7 +4120,7 @@ glabel sub_GAME_7F020EF0 /* 055AFC 7F020FCC 8CA59D6C */ lw $a1, %lo(animation_table_ptrs1)($a1) /* 055B00 7F020FD0 00003025 */ move $a2, $zero /* 055B04 7F020FD4 10450011 */ beq $v0, $a1, .L7F02101C -/* 055B08 7F020FD8 00000000 */ nop +/* 055B08 7F020FD8 00000000 */ nop /* 055B0C 7F020FDC 44800000 */ mtc1 $zero, $f0 /* 055B10 7F020FE0 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 055B14 7F020FE4 44812000 */ mtc1 $at, $f4 @@ -4370,19 +4129,19 @@ glabel sub_GAME_7F020EF0 /* 055B20 7F020FF0 0FC1BF2A */ jal modelSetAnimation /* 055B24 7F020FF4 E7A40010 */ swc1 $f4, 0x10($sp) /* 055B28 7F020FF8 10000008 */ b .L7F02101C -/* 055B2C 7F020FFC 00000000 */ nop +/* 055B2C 7F020FFC 00000000 */ nop .L7F021000: /* 055B30 7F021000 0FC0C9AF */ jal chrlvActionTick /* 055B34 7F021004 02002025 */ move $a0, $s0 /* 055B38 7F021008 8E0B001C */ lw $t3, 0x1c($s0) /* 055B3C 7F02100C 15600003 */ bnez $t3, .L7F02101C -/* 055B40 7F021010 00000000 */ nop +/* 055B40 7F021010 00000000 */ nop /* 055B44 7F021014 100002BD */ b .L7F021B0C /* 055B48 7F021018 24020001 */ li $v0, 1 .L7F02101C: -/* 055B4C 7F02101C 3C0C8003 */ lui $t4, %hi(D_8002C90C) +/* 055B4C 7F02101C 3C0C8003 */ lui $t4, %hi(D_8002C90C) /* 055B50 7F021020 8D8CC90C */ lw $t4, %lo(D_8002C90C)($t4) -/* 055B54 7F021024 3C0D8003 */ lui $t5, %hi(D_8002C910) +/* 055B54 7F021024 3C0D8003 */ lui $t5, %hi(D_8002C910) /* 055B58 7F021028 51800008 */ beql $t4, $zero, .L7F02104C /* 055B5C 7F02102C 96180012 */ lhu $t8, 0x12($s0) /* 055B60 7F021030 8DADC910 */ lw $t5, %lo(D_8002C910)($t5) @@ -4457,19 +4216,19 @@ glabel sub_GAME_7F020EF0 /* 055C58 7F021128 24010003 */ li $at, 3 /* 055C5C 7F02112C 02002025 */ move $a0, $s0 /* 055C60 7F021130 1521000D */ bne $t1, $at, .L7F021168 -/* 055C64 7F021134 00000000 */ nop +/* 055C64 7F021134 00000000 */ nop /* 055C68 7F021138 8E0A002C */ lw $t2, 0x2c($s0) /* 055C6C 7F02113C 1540000A */ bnez $t2, .L7F021168 -/* 055C70 7F021140 00000000 */ nop +/* 055C70 7F021140 00000000 */ nop /* 055C74 7F021144 8E0B003C */ lw $t3, 0x3c($s0) /* 055C78 7F021148 8FA50104 */ lw $a1, 0x104($sp) /* 055C7C 7F02114C 00003025 */ move $a2, $zero /* 055C80 7F021150 11600005 */ beqz $t3, .L7F021168 -/* 055C84 7F021154 00000000 */ nop +/* 055C84 7F021154 00000000 */ nop /* 055C88 7F021158 0FC1C2BB */ jal modelTickAnimQuarterSpeed /* 055C8C 7F02115C 8FA40110 */ lw $a0, 0x110($sp) /* 055C90 7F021160 10000003 */ b .L7F021170 -/* 055C94 7F021164 00000000 */ nop +/* 055C94 7F021164 00000000 */ nop .L7F021168: /* 055C98 7F021168 0FC08390 */ jal chrPositionRelated7F020E40 /* 055C9C 7F02116C 8FA50104 */ lw $a1, 0x104($sp) @@ -4481,7 +4240,7 @@ glabel sub_GAME_7F020EF0 /* 055CAC 7F02117C 2406000E */ li $a2, 14 /* 055CB0 7F021180 2401000F */ li $at, 15 /* 055CB4 7F021184 10C30003 */ beq $a2, $v1, .L7F021194 -/* 055CB8 7F021188 00000000 */ nop +/* 055CB8 7F021188 00000000 */ nop /* 055CBC 7F02118C 54610041 */ bnel $v1, $at, .L7F021294 /* 055CC0 7F021190 24010003 */ li $at, 3 .L7F021194: @@ -4497,7 +4256,7 @@ glabel sub_GAME_7F020EF0 /* 055CE4 7F0211B4 820C005C */ lb $t4, 0x5c($s0) /* 055CE8 7F0211B8 24010006 */ li $at, 6 /* 055CEC 7F0211BC 1581001A */ bne $t4, $at, .L7F021228 -/* 055CF0 7F0211C0 00000000 */ nop +/* 055CF0 7F0211C0 00000000 */ nop .L7F0211C4: /* 055CF4 7F0211C4 0FC1B403 */ jal getinstsize /* 055CF8 7F0211C8 8FA40110 */ lw $a0, 0x110($sp) @@ -4523,7 +4282,7 @@ glabel sub_GAME_7F020EF0 /* 055D48 7F021218 0FC08365 */ jal chrPositionRelated7F020D94 /* 055D4C 7F02121C 02002025 */ move $a0, $s0 /* 055D50 7F021220 10000019 */ b .L7F021288 -/* 055D54 7F021224 00000000 */ nop +/* 055D54 7F021224 00000000 */ nop .L7F021228: /* 055D58 7F021228 0FC08390 */ jal chrPositionRelated7F020E40 /* 055D5C 7F02122C 8FA50104 */ lw $a1, 0x104($sp) @@ -4538,7 +4297,7 @@ glabel sub_GAME_7F020EF0 /* 055D80 7F021250 AFA2010C */ sw $v0, 0x10c($sp) /* 055D84 7F021254 82030007 */ lb $v1, 7($s0) /* 055D88 7F021258 2401000E */ li $at, 14 -/* 055D8C 7F02125C 3C088005 */ lui $t0, %hi(g_GlobalTimer) +/* 055D8C 7F02125C 3C088005 */ lui $t0, %hi(g_GlobalTimer) /* 055D90 7F021260 54610005 */ bnel $v1, $at, .L7F021278 /* 055D94 7F021264 2401000F */ li $at, 15 /* 055D98 7F021268 8D08837C */ lw $t0, %lo(g_GlobalTimer)($t0) @@ -4547,7 +4306,7 @@ glabel sub_GAME_7F020EF0 /* 055DA4 7F021274 2401000F */ li $at, 15 .L7F021278: /* 055DA8 7F021278 14610003 */ bne $v1, $at, .L7F021288 -/* 055DAC 7F02127C 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) +/* 055DAC 7F02127C 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) /* 055DB0 7F021280 8DEF837C */ lw $t7, %lo(g_GlobalTimer)($t7) /* 055DB4 7F021284 AE0F009C */ sw $t7, 0x9c($s0) .L7F021288: @@ -4576,7 +4335,7 @@ glabel sub_GAME_7F020EF0 /* 055E0C 7F0212DC 0FC08390 */ jal chrPositionRelated7F020E40 /* 055E10 7F0212E0 8FA50104 */ lw $a1, 0x104($sp) /* 055E14 7F0212E4 10000005 */ b .L7F0212FC -/* 055E18 7F0212E8 00000000 */ nop +/* 055E18 7F0212E8 00000000 */ nop .L7F0212EC: /* 055E1C 7F0212EC 8FA40110 */ lw $a0, 0x110($sp) .L7F0212F0: @@ -4608,13 +4367,13 @@ glabel sub_GAME_7F020EF0 /* 055E78 7F021348 0FC08390 */ jal chrPositionRelated7F020E40 /* 055E7C 7F02134C 8FA50104 */ lw $a1, 0x104($sp) /* 055E80 7F021350 10000008 */ b .L7F021374 -/* 055E84 7F021354 00000000 */ nop +/* 055E84 7F021354 00000000 */ nop .L7F021358: /* 055E88 7F021358 8F380054 */ lw $t8, 0x54($t9) /* 055E8C 7F02135C 03202025 */ move $a0, $t9 /* 055E90 7F021360 8FA50104 */ lw $a1, 0x104($sp) /* 055E94 7F021364 13000003 */ beqz $t8, .L7F021374 -/* 055E98 7F021368 00000000 */ nop +/* 055E98 7F021368 00000000 */ nop /* 055E9C 7F02136C 0FC1C2BB */ jal modelTickAnimQuarterSpeed /* 055EA0 7F021370 00003025 */ move $a2, $zero .L7F021374: @@ -4628,7 +4387,7 @@ glabel sub_GAME_7F020EF0 /* 055EBC 7F02138C 0FC1C2BB */ jal modelTickAnimQuarterSpeed /* 055EC0 7F021390 00003025 */ move $a2, $zero /* 055EC4 7F021394 10000003 */ b .L7F0213A4 -/* 055EC8 7F021398 00000000 */ nop +/* 055EC8 7F021398 00000000 */ nop .L7F02139C: /* 055ECC 7F02139C 0FC08390 */ jal chrPositionRelated7F020E40 /* 055ED0 7F0213A0 8FA50104 */ lw $a1, 0x104($sp) @@ -4653,7 +4412,7 @@ glabel sub_GAME_7F020EF0 /* 055F14 7F0213E4 914B0000 */ lbu $t3, ($t2) /* 055F18 7F0213E8 24010006 */ li $at, 6 /* 055F1C 7F0213EC 15610004 */ bne $t3, $at, .L7F021400 -/* 055F20 7F0213F0 00000000 */ nop +/* 055F20 7F0213F0 00000000 */ nop .L7F0213F4: /* 055F24 7F0213F4 960D0012 */ lhu $t5, 0x12($s0) .L7F0213F8: @@ -4666,7 +4425,7 @@ glabel sub_GAME_7F020EF0 /* 055F3C 7F02140C 50800005 */ beql $a0, $zero, .L7F021424 /* 055F40 7F021410 8FB8010C */ lw $t8, 0x10c($sp) /* 055F44 7F021414 0FC1AC92 */ jal sub_GAME_7F06B248 -/* 055F48 7F021418 00000000 */ nop +/* 055F48 7F021418 00000000 */ nop /* 055F4C 7F02141C AE000020 */ sw $zero, 0x20($s0) /* 055F50 7F021420 8FB8010C */ lw $t8, 0x10c($sp) .L7F021424: @@ -4688,7 +4447,7 @@ glabel sub_GAME_7F020EF0 /* 055F90 7F021460 3C013EA0 */ li $at, 0x3EA00000 # 0.312500 /* 055F94 7F021464 44816000 */ mtc1 $at, $f12 /* 055F98 7F021468 0FC1B103 */ jal modelSetDistanceScale -/* 055F9C 7F02146C 00000000 */ nop +/* 055F9C 7F02146C 00000000 */ nop .L7F021470: /* 055FA0 7F021470 3C0A7F02 */ lui $t2, %hi(sub_GAME_7F02083C) # $t2, 0x7f02 /* 055FA4 7F021474 254A083C */ addiu $t2, %lo(sub_GAME_7F02083C) # addiu $t2, $t2, 0x83c @@ -4710,7 +4469,7 @@ glabel sub_GAME_7F020EF0 /* 055FE4 7F0214B4 AFA20128 */ sw $v0, 0x128($sp) /* 055FE8 7F0214B8 80640011 */ lb $a0, 0x11($v1) /* 055FEC 7F0214BC 0480000B */ bltz $a0, .L7F0214EC -/* 055FF0 7F0214C0 3C188005 */ lui $t8, %hi(g_ClockTimer) +/* 055FF0 7F0214C0 3C188005 */ lui $t8, %hi(g_ClockTimer) /* 055FF4 7F0214C4 8F188374 */ lw $t8, %lo(g_ClockTimer)($t8) /* 055FF8 7F0214C8 240FFFFF */ li $t7, -1 /* 055FFC 7F0214CC 0098C821 */ addu $t9, $a0, $t8 @@ -4731,7 +4490,7 @@ glabel sub_GAME_7F020EF0 /* 056030 7F021500 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 056034 7F021504 44816000 */ mtc1 $at, $f12 /* 056038 7F021508 0FC1B103 */ jal modelSetDistanceScale -/* 05603C 7F02150C 00000000 */ nop +/* 05603C 7F02150C 00000000 */ nop /* 056040 7F021510 260400F4 */ addiu $a0, $s0, 0xf4 /* 056044 7F021514 0FC100C4 */ jal update_color_shading /* 056048 7F021518 8FA50030 */ lw $a1, 0x30($sp) @@ -4782,7 +4541,7 @@ glabel sub_GAME_7F020EF0 /* 0560FC 7F0215CC 142000F2 */ bnez $at, .L7F021998 /* 056100 7F0215D0 28410046 */ slti $at, $v0, 0x46 /* 056104 7F0215D4 102000F0 */ beqz $at, .L7F021998 -/* 056108 7F0215D8 3C198003 */ lui $t9, %hi(D_8002CCAC) +/* 056108 7F0215D8 3C198003 */ lui $t9, %hi(D_8002CCAC) /* 05610C 7F0215DC 2739CCAC */ addiu $t9, %lo(D_8002CCAC) # addiu $t9, $t9, -0x3354 /* 056110 7F0215E0 8F210000 */ lw $at, ($t9) /* 056114 7F0215E4 27B800F0 */ addiu $t8, $sp, 0xf0 @@ -4802,7 +4561,7 @@ glabel sub_GAME_7F020EF0 /* 05614C 7F02161C 01C47021 */ addu $t6, $t6, $a0 /* 056150 7F021620 000E7100 */ sll $t6, $t6, 4 /* 056154 7F021624 000948C0 */ sll $t1, $t1, 3 -/* 056158 7F021628 3C0B8004 */ lui $t3, %hi(headHat_array_8003E464) +/* 056158 7F021628 3C0B8004 */ lui $t3, %hi(headHat_array_8003E464) /* 05615C 7F02162C 256BE464 */ addiu $t3, %lo(headHat_array_8003E464) # addiu $t3, $t3, -0x1b9c /* 056160 7F021630 01C95021 */ addu $t2, $t6, $t1 /* 056164 7F021634 014B1821 */ addu $v1, $t2, $t3 @@ -5041,7 +4800,7 @@ glabel sub_GAME_7F020EF0 /* 0564D0 7F0219A0 8FA500FC */ lw $a1, 0xfc($sp) /* 0564D4 7F0219A4 31EE0001 */ andi $t6, $t7, 1 /* 0564D8 7F0219A8 11C00005 */ beqz $t6, .L7F0219C0 -/* 0564DC 7F0219AC 00000000 */ nop +/* 0564DC 7F0219AC 00000000 */ nop /* 0564E0 7F0219B0 8D2A0064 */ lw $t2, 0x64($t1) /* 0564E4 7F0219B4 314B0080 */ andi $t3, $t2, 0x80 /* 0564E8 7F0219B8 55600005 */ bnezl $t3, .L7F0219D0 @@ -5056,16 +4815,16 @@ glabel sub_GAME_7F020EF0 /* 056504 7F0219D4 8D880008 */ lw $t0, 8($t4) /* 056508 7F0219D8 8D050010 */ lw $a1, 0x10($t0) /* 05650C 7F0219DC 10A0000E */ beqz $a1, .L7F021A18 -/* 056510 7F0219E0 00000000 */ nop +/* 056510 7F0219E0 00000000 */ nop /* 056514 7F0219E4 0FC1B1E7 */ jal modelGetNodeRwData /* 056518 7F0219E8 01A02025 */ move $a0, $t5 /* 05651C 7F0219EC 8C430000 */ lw $v1, ($v0) /* 056520 7F0219F0 10600009 */ beqz $v1, .L7F021A18 -/* 056524 7F0219F4 00000000 */ nop +/* 056524 7F0219F4 00000000 */ nop /* 056528 7F0219F8 8C780008 */ lw $t8, 8($v1) /* 05652C 7F0219FC 8F050004 */ lw $a1, 4($t8) /* 056530 7F021A00 10A00005 */ beqz $a1, .L7F021A18 -/* 056534 7F021A04 00000000 */ nop +/* 056534 7F021A04 00000000 */ nop /* 056538 7F021A08 0FC1B1E7 */ jal modelGetNodeRwData /* 05653C 7F021A0C 8FA40110 */ lw $a0, 0x110($sp) /* 056540 7F021A10 8FB90108 */ lw $t9, 0x108($sp) @@ -5121,7 +4880,7 @@ glabel sub_GAME_7F020EF0 /* 0565F0 7F021AC0 8FAD0158 */ lw $t5, 0x158($sp) /* 0565F4 7F021AC4 304C0001 */ andi $t4, $v0, 1 /* 0565F8 7F021AC8 1180000D */ beqz $t4, .L7F021B00 -/* 0565FC 7F021ACC 00000000 */ nop +/* 0565FC 7F021ACC 00000000 */ nop /* 056600 7F021AD0 8DA40020 */ lw $a0, 0x20($t5) /* 056604 7F021AD4 50800009 */ beql $a0, $zero, .L7F021AFC /* 056608 7F021AD8 3058FFFE */ andi $t8, $v0, 0xfffe @@ -5145,14 +4904,14 @@ glabel sub_GAME_7F020EF0 /* 056640 7F021B10 8FB00020 */ lw $s0, 0x20($sp) /* 056644 7F021B14 27BD0158 */ addiu $sp, $sp, 0x158 /* 056648 7F021B18 03E00008 */ jr $ra -/* 05664C 7F021B1C 00000000 */ nop +/* 05664C 7F021B1C 00000000 */ nop ) #endif #ifdef VERSION_JP GLOBAL_ASM( .text -glabel sub_GAME_7F020EF0 +glabel chrTickBeams /* 055CF8 7F021188 27BDFEA8 */ addiu $sp, $sp, -0x158 /* 055CFC 7F02118C 3C0F8003 */ lui $t7, %hi(D_8002CC6C) # $t7, 0x8003 /* 055D00 7F021190 25EFCCAC */ addiu $t7, %lo(D_8002CC6C) # addiu $t7, $t7, -0x3354 @@ -5193,7 +4952,7 @@ glabel sub_GAME_7F020EF0 /* 055D84 7F021214 8F18C944 */ lw $t8, %lo(D_8002C904)($t8) /* 055D88 7F021218 3C088003 */ lui $t0, %hi(g_AnimationTablePointerCountRelated) # $t0, 0x8003 /* 055D8C 7F02121C 1300001E */ beqz $t8, .Ljp7F021298 -/* 055D90 7F021220 00000000 */ nop +/* 055D90 7F021220 00000000 */ nop /* 055D94 7F021224 8D08C948 */ lw $t0, %lo(g_AnimationTablePointerCountRelated)($t0) /* 055D98 7F021228 3C0E8003 */ lui $t6, %hi(animation_table_ptrs1) /* 055D9C 7F02122C 24010001 */ li $at, 1 @@ -5201,7 +4960,7 @@ glabel sub_GAME_7F020EF0 /* 055DA4 7F021234 01CF7021 */ addu $t6, $t6, $t7 /* 055DA8 7F021238 8DCE9DAC */ lw $t6, %lo(animation_table_ptrs1)($t6) /* 055DAC 7F02123C 11C1001D */ beq $t6, $at, .Ljp7F0212B4 -/* 055DB0 7F021240 00000000 */ nop +/* 055DB0 7F021240 00000000 */ nop /* 055DB4 7F021244 0FC1BEE7 */ jal objecthandlerGetModelAnim /* 055DB8 7F021248 8FA40110 */ lw $a0, 0x110($sp) /* 055DBC 7F02124C 3C098003 */ lui $t1, %hi(g_AnimationTablePointerCountRelated) # $t1, 0x8003 @@ -5213,7 +4972,7 @@ glabel sub_GAME_7F020EF0 /* 055DD4 7F021264 8CA59DAC */ lw $a1, %lo(animation_table_ptrs1)($a1) /* 055DD8 7F021268 00003025 */ move $a2, $zero /* 055DDC 7F02126C 10450011 */ beq $v0, $a1, .Ljp7F0212B4 -/* 055DE0 7F021270 00000000 */ nop +/* 055DE0 7F021270 00000000 */ nop /* 055DE4 7F021274 44800000 */ mtc1 $zero, $f0 /* 055DE8 7F021278 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 055DEC 7F02127C 44812000 */ mtc1 $at, $f4 @@ -5222,13 +4981,13 @@ glabel sub_GAME_7F020EF0 /* 055DF8 7F021288 0FC1C0A6 */ jal modelSetAnimation /* 055DFC 7F02128C E7A40010 */ swc1 $f4, 0x10($sp) /* 055E00 7F021290 10000008 */ b .Ljp7F0212B4 -/* 055E04 7F021294 00000000 */ nop +/* 055E04 7F021294 00000000 */ nop .Ljp7F021298: /* 055E08 7F021298 0FC0CA6F */ jal chrlvActionTick /* 055E0C 7F02129C 02002025 */ move $a0, $s0 /* 055E10 7F0212A0 8E0B001C */ lw $t3, 0x1c($s0) /* 055E14 7F0212A4 15600003 */ bnez $t3, .Ljp7F0212B4 -/* 055E18 7F0212A8 00000000 */ nop +/* 055E18 7F0212A8 00000000 */ nop /* 055E1C 7F0212AC 100002D1 */ b .Ljp7F021DF4 /* 055E20 7F0212B0 24020001 */ li $v0, 1 .Ljp7F0212B4: @@ -5309,19 +5068,19 @@ glabel sub_GAME_7F020EF0 /* 055F30 7F0213C0 24010003 */ li $at, 3 /* 055F34 7F0213C4 02002025 */ move $a0, $s0 /* 055F38 7F0213C8 1521000D */ bne $t1, $at, .Ljp7F021400 -/* 055F3C 7F0213CC 00000000 */ nop +/* 055F3C 7F0213CC 00000000 */ nop /* 055F40 7F0213D0 8E0A002C */ lw $t2, 0x2c($s0) /* 055F44 7F0213D4 1540000A */ bnez $t2, .Ljp7F021400 -/* 055F48 7F0213D8 00000000 */ nop +/* 055F48 7F0213D8 00000000 */ nop /* 055F4C 7F0213DC 8E0B003C */ lw $t3, 0x3c($s0) /* 055F50 7F0213E0 8FA50104 */ lw $a1, 0x104($sp) /* 055F54 7F0213E4 00003025 */ move $a2, $zero /* 055F58 7F0213E8 11600005 */ beqz $t3, .Ljp7F021400 -/* 055F5C 7F0213EC 00000000 */ nop +/* 055F5C 7F0213EC 00000000 */ nop /* 055F60 7F0213F0 0FC1C437 */ jal modelTickAnimQuarterSpeed /* 055F64 7F0213F4 8FA40110 */ lw $a0, 0x110($sp) /* 055F68 7F0213F8 10000003 */ b .Ljp7F021408 -/* 055F6C 7F0213FC 00000000 */ nop +/* 055F6C 7F0213FC 00000000 */ nop .Ljp7F021400: /* 055F70 7F021400 0FC08436 */ jal chrPositionRelated7F020E40 /* 055F74 7F021404 8FA50104 */ lw $a1, 0x104($sp) @@ -5333,7 +5092,7 @@ glabel sub_GAME_7F020EF0 /* 055F84 7F021414 2406000E */ li $a2, 14 /* 055F88 7F021418 2401000F */ li $at, 15 /* 055F8C 7F02141C 10C30003 */ beq $a2, $v1, .Ljp7F02142C -/* 055F90 7F021420 00000000 */ nop +/* 055F90 7F021420 00000000 */ nop /* 055F94 7F021424 54610041 */ bnel $v1, $at, .Ljp7F02152C /* 055F98 7F021428 24010003 */ li $at, 3 .Ljp7F02142C: @@ -5349,7 +5108,7 @@ glabel sub_GAME_7F020EF0 /* 055FBC 7F02144C 820C005C */ lb $t4, 0x5c($s0) /* 055FC0 7F021450 24010006 */ li $at, 6 /* 055FC4 7F021454 1581001A */ bne $t4, $at, .Ljp7F0214C0 -/* 055FC8 7F021458 00000000 */ nop +/* 055FC8 7F021458 00000000 */ nop .Ljp7F02145C: /* 055FCC 7F02145C 0FC1B57F */ jal getinstsize /* 055FD0 7F021460 8FA40110 */ lw $a0, 0x110($sp) @@ -5375,7 +5134,7 @@ glabel sub_GAME_7F020EF0 /* 056020 7F0214B0 0FC0840B */ jal chrPositionRelated7F020D94 /* 056024 7F0214B4 02002025 */ move $a0, $s0 /* 056028 7F0214B8 10000019 */ b .Ljp7F021520 -/* 05602C 7F0214BC 00000000 */ nop +/* 05602C 7F0214BC 00000000 */ nop .Ljp7F0214C0: /* 056030 7F0214C0 0FC08436 */ jal chrPositionRelated7F020E40 /* 056034 7F0214C4 8FA50104 */ lw $a1, 0x104($sp) @@ -5428,7 +5187,7 @@ glabel sub_GAME_7F020EF0 /* 0560E4 7F021574 0FC08436 */ jal chrPositionRelated7F020E40 /* 0560E8 7F021578 8FA50104 */ lw $a1, 0x104($sp) /* 0560EC 7F02157C 10000005 */ b .Ljp7F021594 -/* 0560F0 7F021580 00000000 */ nop +/* 0560F0 7F021580 00000000 */ nop .Ljp7F021584: /* 0560F4 7F021584 8FA40110 */ lw $a0, 0x110($sp) .Ljp7F021588: @@ -5460,13 +5219,13 @@ glabel sub_GAME_7F020EF0 /* 056150 7F0215E0 0FC08436 */ jal chrPositionRelated7F020E40 /* 056154 7F0215E4 8FA50104 */ lw $a1, 0x104($sp) /* 056158 7F0215E8 10000008 */ b .Ljp7F02160C -/* 05615C 7F0215EC 00000000 */ nop +/* 05615C 7F0215EC 00000000 */ nop .Ljp7F0215F0: /* 056160 7F0215F0 8F380054 */ lw $t8, 0x54($t9) /* 056164 7F0215F4 03202025 */ move $a0, $t9 /* 056168 7F0215F8 8FA50104 */ lw $a1, 0x104($sp) /* 05616C 7F0215FC 13000003 */ beqz $t8, .Ljp7F02160C -/* 056170 7F021600 00000000 */ nop +/* 056170 7F021600 00000000 */ nop /* 056174 7F021604 0FC1C437 */ jal modelTickAnimQuarterSpeed /* 056178 7F021608 00003025 */ move $a2, $zero .Ljp7F02160C: @@ -5480,7 +5239,7 @@ glabel sub_GAME_7F020EF0 /* 056194 7F021624 0FC1C437 */ jal modelTickAnimQuarterSpeed /* 056198 7F021628 00003025 */ move $a2, $zero /* 05619C 7F02162C 10000003 */ b .Ljp7F02163C -/* 0561A0 7F021630 00000000 */ nop +/* 0561A0 7F021630 00000000 */ nop .Ljp7F021634: /* 0561A4 7F021634 0FC08436 */ jal chrPositionRelated7F020E40 /* 0561A8 7F021638 8FA50104 */ lw $a1, 0x104($sp) @@ -5505,7 +5264,7 @@ glabel sub_GAME_7F020EF0 /* 0561EC 7F02167C 914B0000 */ lbu $t3, ($t2) /* 0561F0 7F021680 24010006 */ li $at, 6 /* 0561F4 7F021684 15610004 */ bne $t3, $at, .Ljp7F021698 -/* 0561F8 7F021688 00000000 */ nop +/* 0561F8 7F021688 00000000 */ nop .Ljp7F02168C: /* 0561FC 7F02168C 960D0012 */ lhu $t5, 0x12($s0) .Ljp7F021690: @@ -5518,7 +5277,7 @@ glabel sub_GAME_7F020EF0 /* 056214 7F0216A4 50800005 */ beql $a0, $zero, .Ljp7F0216BC /* 056218 7F0216A8 8FB8010C */ lw $t8, 0x10c($sp) /* 05621C 7F0216AC 0FC1AE0E */ jal sub_GAME_7F06B248 -/* 056220 7F0216B0 00000000 */ nop +/* 056220 7F0216B0 00000000 */ nop /* 056224 7F0216B4 AE000020 */ sw $zero, 0x20($s0) /* 056228 7F0216B8 8FB8010C */ lw $t8, 0x10c($sp) .Ljp7F0216BC: @@ -5537,7 +5296,7 @@ glabel sub_GAME_7F020EF0 /* 05625C 7F0216EC 0FC24CCF */ jal cheatIsActive /* 056260 7F0216F0 AE090014 */ sw $t1, 0x14($s0) /* 056264 7F0216F4 10400018 */ beqz $v0, .Ljp7F021758 -/* 056268 7F0216F8 00000000 */ nop +/* 056268 7F0216F8 00000000 */ nop /* 05626C 7F0216FC 8204000F */ lb $a0, 0xf($s0) /* 056270 7F021700 0FC0827B */ jal not_in_us_7F0209EC /* 056274 7F021704 82050006 */ lb $a1, 6($s0) @@ -5545,7 +5304,7 @@ glabel sub_GAME_7F020EF0 /* 05627C 7F02170C 3C013EA0 */ li $at, 0x3EA00000 # 0.312500 /* 056280 7F021710 44816000 */ mtc1 $at, $f12 /* 056284 7F021714 0FC1B27F */ jal modelSetDistanceScale -/* 056288 7F021718 00000000 */ nop +/* 056288 7F021718 00000000 */ nop /* 05628C 7F02171C 8E020014 */ lw $v0, 0x14($s0) /* 056290 7F021720 3C01EFFF */ lui $at, (0xEFFFFFFF >> 16) # lui $at, 0xefff /* 056294 7F021724 3421FFFF */ ori $at, (0xEFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff @@ -5560,7 +5319,7 @@ glabel sub_GAME_7F020EF0 /* 0562B8 7F021748 46083283 */ div.s $f10, $f6, $f8 /* 0562BC 7F02174C 44055000 */ mfc1 $a1, $f10 /* 0562C0 7F021750 0FC1B51A */ jal modelSetScale -/* 0562C4 7F021754 00000000 */ nop +/* 0562C4 7F021754 00000000 */ nop .Ljp7F021758: /* 0562C8 7F021758 3C0D7F02 */ lui $t5, %hi(sub_GAME_7F02083C) # $t5, 0x7f02 /* 0562CC 7F02175C 25AD0AAC */ addiu $t5, %lo(sub_GAME_7F02083C) # addiu $t5, $t5, 0xaac @@ -5603,7 +5362,7 @@ glabel sub_GAME_7F020EF0 /* 056358 7F0217E8 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 05635C 7F0217EC 44816000 */ mtc1 $at, $f12 /* 056360 7F0217F0 0FC1B27F */ jal modelSetDistanceScale -/* 056364 7F0217F4 00000000 */ nop +/* 056364 7F0217F4 00000000 */ nop /* 056368 7F0217F8 260400F4 */ addiu $a0, $s0, 0xf4 /* 05636C 7F0217FC 0FC10184 */ jal update_color_shading /* 056370 7F021800 8FA5002C */ lw $a1, 0x2c($sp) @@ -5913,7 +5672,7 @@ glabel sub_GAME_7F020EF0 /* 0567F8 7F021C88 8FA500FC */ lw $a1, 0xfc($sp) /* 0567FC 7F021C8C 312A0001 */ andi $t2, $t1, 1 /* 056800 7F021C90 11400005 */ beqz $t2, .Ljp7F021CA8 -/* 056804 7F021C94 00000000 */ nop +/* 056804 7F021C94 00000000 */ nop /* 056808 7F021C98 8D6D0064 */ lw $t5, 0x64($t3) /* 05680C 7F021C9C 31AC0080 */ andi $t4, $t5, 0x80 /* 056810 7F021CA0 55800005 */ bnezl $t4, .Ljp7F021CB8 @@ -5928,16 +5687,16 @@ glabel sub_GAME_7F020EF0 /* 05682C 7F021CBC 8F2E0008 */ lw $t6, 8($t9) /* 056830 7F021CC0 8DC50010 */ lw $a1, 0x10($t6) /* 056834 7F021CC4 10A0000E */ beqz $a1, .Ljp7F021D00 -/* 056838 7F021CC8 00000000 */ nop +/* 056838 7F021CC8 00000000 */ nop /* 05683C 7F021CCC 0FC1B363 */ jal modelGetNodeRwData /* 056840 7F021CD0 03002025 */ move $a0, $t8 /* 056844 7F021CD4 8C430000 */ lw $v1, ($v0) /* 056848 7F021CD8 10600009 */ beqz $v1, .Ljp7F021D00 -/* 05684C 7F021CDC 00000000 */ nop +/* 05684C 7F021CDC 00000000 */ nop /* 056850 7F021CE0 8C680008 */ lw $t0, 8($v1) /* 056854 7F021CE4 8D050004 */ lw $a1, 4($t0) /* 056858 7F021CE8 10A00005 */ beqz $a1, .Ljp7F021D00 -/* 05685C 7F021CEC 00000000 */ nop +/* 05685C 7F021CEC 00000000 */ nop /* 056860 7F021CF0 0FC1B363 */ jal modelGetNodeRwData /* 056864 7F021CF4 8FA40110 */ lw $a0, 0x110($sp) /* 056868 7F021CF8 8FAF0108 */ lw $t7, 0x108($sp) @@ -5993,7 +5752,7 @@ glabel sub_GAME_7F020EF0 /* 056918 7F021DA8 8FB80158 */ lw $t8, 0x158($sp) /* 05691C 7F021DAC 30590001 */ andi $t9, $v0, 1 /* 056920 7F021DB0 1320000D */ beqz $t9, .Ljp7F021DE8 -/* 056924 7F021DB4 00000000 */ nop +/* 056924 7F021DB4 00000000 */ nop /* 056928 7F021DB8 8F040020 */ lw $a0, 0x20($t8) /* 05692C 7F021DBC 50800009 */ beql $a0, $zero, .Ljp7F021DE4 /* 056930 7F021DC0 3048FFFE */ andi $t0, $v0, 0xfffe @@ -6017,8 +5776,8 @@ glabel sub_GAME_7F020EF0 /* 056968 7F021DF8 8FB00020 */ lw $s0, 0x20($sp) /* 05696C 7F021DFC 27BD0158 */ addiu $sp, $sp, 0x158 /* 056970 7F021E00 03E00008 */ jr $ra -/* 056974 7F021E04 00000000 */ nop - +/* 056974 7F021E04 00000000 */ nop + ) #endif @@ -6078,7 +5837,7 @@ glabel D_80051D84 glabel D_80051D88 .word 0x41aa6666 /*21.299999*/ .text -glabel sub_GAME_7F020EF0 +glabel chrTickBeams /* 053858 7F020E68 27BDFEA8 */ addiu $sp, $sp, -0x158 /* 05385C 7F020E6C 3C0F8003 */ lui $t7, %hi(D_8002CC6C) # $t7, 0x8003 /* 053860 7F020E70 25EF81BC */ addiu $t7, %lo(D_8002CC6C) # addiu $t7, $t7, -0x7e44 @@ -6119,7 +5878,7 @@ glabel sub_GAME_7F020EF0 /* 0538E4 7F020EF4 8F187E54 */ lw $t8, %lo(D_8002C904)($t8) /* 0538E8 7F020EF8 3C088002 */ lui $t0, %hi(g_AnimationTablePointerCountRelated) # $t0, 0x8002 /* 0538EC 7F020EFC 1300001E */ beqz $t8, .L7F020F78 -/* 0538F0 7F020F00 00000000 */ nop +/* 0538F0 7F020F00 00000000 */ nop /* 0538F4 7F020F04 8D087E58 */ lw $t0, %lo(g_AnimationTablePointerCountRelated)($t0) /* 0538F8 7F020F08 3C0E8002 */ lui $t6, %hi(animation_table_ptrs1) /* 0538FC 7F020F0C 24010001 */ li $at, 1 @@ -6127,7 +5886,7 @@ glabel sub_GAME_7F020EF0 /* 053904 7F020F14 01CF7021 */ addu $t6, $t6, $t7 /* 053908 7F020F18 8DCE52BC */ lw $t6, %lo(animation_table_ptrs1)($t6) /* 05390C 7F020F1C 11C1001D */ beq $t6, $at, .L7F020F94 -/* 053910 7F020F20 00000000 */ nop +/* 053910 7F020F20 00000000 */ nop /* 053914 7F020F24 0FC1BDD3 */ jal objecthandlerGetModelAnim /* 053918 7F020F28 8FA40110 */ lw $a0, 0x110($sp) /* 05391C 7F020F2C 3C098002 */ lui $t1, %hi(g_AnimationTablePointerCountRelated) # $t1, 0x8002 @@ -6139,7 +5898,7 @@ glabel sub_GAME_7F020EF0 /* 053934 7F020F44 8CA552BC */ lw $a1, %lo(animation_table_ptrs1)($a1) /* 053938 7F020F48 00003025 */ move $a2, $zero /* 05393C 7F020F4C 10450011 */ beq $v0, $a1, .L7F020F94 -/* 053940 7F020F50 00000000 */ nop +/* 053940 7F020F50 00000000 */ nop /* 053944 7F020F54 44800000 */ mtc1 $zero, $f0 /* 053948 7F020F58 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 05394C 7F020F5C 44812000 */ mtc1 $at, $f4 @@ -6148,13 +5907,13 @@ glabel sub_GAME_7F020EF0 /* 053958 7F020F68 0FC1BF92 */ jal modelSetAnimation /* 05395C 7F020F6C E7A40010 */ swc1 $f4, 0x10($sp) /* 053960 7F020F70 10000008 */ b .L7F020F94 -/* 053964 7F020F74 00000000 */ nop +/* 053964 7F020F74 00000000 */ nop .L7F020F78: /* 053968 7F020F78 0FC0C9C0 */ jal chrlvActionTick /* 05396C 7F020F7C 02002025 */ move $a0, $s0 /* 053970 7F020F80 8E0B001C */ lw $t3, 0x1c($s0) /* 053974 7F020F84 15600003 */ bnez $t3, .L7F020F94 -/* 053978 7F020F88 00000000 */ nop +/* 053978 7F020F88 00000000 */ nop /* 05397C 7F020F8C 100002D1 */ b .L7F021AD4 /* 053980 7F020F90 24020001 */ li $v0, 1 .L7F020F94: @@ -6235,19 +5994,19 @@ glabel sub_GAME_7F020EF0 /* 053A90 7F0210A0 24010003 */ li $at, 3 /* 053A94 7F0210A4 02002025 */ move $a0, $s0 /* 053A98 7F0210A8 1521000D */ bne $t1, $at, .L7F0210E0 -/* 053A9C 7F0210AC 00000000 */ nop +/* 053A9C 7F0210AC 00000000 */ nop /* 053AA0 7F0210B0 8E0A002C */ lw $t2, 0x2c($s0) /* 053AA4 7F0210B4 1540000A */ bnez $t2, .L7F0210E0 -/* 053AA8 7F0210B8 00000000 */ nop +/* 053AA8 7F0210B8 00000000 */ nop /* 053AAC 7F0210BC 8E0B003C */ lw $t3, 0x3c($s0) /* 053AB0 7F0210C0 8FA50104 */ lw $a1, 0x104($sp) /* 053AB4 7F0210C4 00003025 */ move $a2, $zero /* 053AB8 7F0210C8 11600005 */ beqz $t3, .L7F0210E0 -/* 053ABC 7F0210CC 00000000 */ nop +/* 053ABC 7F0210CC 00000000 */ nop /* 053AC0 7F0210D0 0FC1C323 */ jal modelTickAnimQuarterSpeed /* 053AC4 7F0210D4 8FA40110 */ lw $a0, 0x110($sp) /* 053AC8 7F0210D8 10000003 */ b .L7F0210E8 -/* 053ACC 7F0210DC 00000000 */ nop +/* 053ACC 7F0210DC 00000000 */ nop .L7F0210E0: /* 053AD0 7F0210E0 0FC0836E */ jal chrPositionRelated7F020E40 /* 053AD4 7F0210E4 8FA50104 */ lw $a1, 0x104($sp) @@ -6259,7 +6018,7 @@ glabel sub_GAME_7F020EF0 /* 053AE4 7F0210F4 2406000E */ li $a2, 14 /* 053AE8 7F0210F8 2401000F */ li $at, 15 /* 053AEC 7F0210FC 10C30003 */ beq $a2, $v1, .L7F02110C -/* 053AF0 7F021100 00000000 */ nop +/* 053AF0 7F021100 00000000 */ nop /* 053AF4 7F021104 54610041 */ bnel $v1, $at, .L7F02120C /* 053AF8 7F021108 24010003 */ li $at, 3 .L7F02110C: @@ -6275,7 +6034,7 @@ glabel sub_GAME_7F020EF0 /* 053B1C 7F02112C 820C005C */ lb $t4, 0x5c($s0) /* 053B20 7F021130 24010006 */ li $at, 6 /* 053B24 7F021134 1581001A */ bne $t4, $at, .L7F0211A0 -/* 053B28 7F021138 00000000 */ nop +/* 053B28 7F021138 00000000 */ nop .L7F02113C: /* 053B2C 7F02113C 0FC1B525 */ jal getinstsize /* 053B30 7F021140 8FA40110 */ lw $a0, 0x110($sp) @@ -6301,7 +6060,7 @@ glabel sub_GAME_7F020EF0 /* 053B80 7F021190 0FC08343 */ jal chrPositionRelated7F020D94 /* 053B84 7F021194 02002025 */ move $a0, $s0 /* 053B88 7F021198 10000019 */ b .L7F021200 -/* 053B8C 7F02119C 00000000 */ nop +/* 053B8C 7F02119C 00000000 */ nop .L7F0211A0: /* 053B90 7F0211A0 0FC0836E */ jal chrPositionRelated7F020E40 /* 053B94 7F0211A4 8FA50104 */ lw $a1, 0x104($sp) @@ -6354,7 +6113,7 @@ glabel sub_GAME_7F020EF0 /* 053C44 7F021254 0FC0836E */ jal chrPositionRelated7F020E40 /* 053C48 7F021258 8FA50104 */ lw $a1, 0x104($sp) /* 053C4C 7F02125C 10000005 */ b .L7F021274 -/* 053C50 7F021260 00000000 */ nop +/* 053C50 7F021260 00000000 */ nop .L7F021264: /* 053C54 7F021264 8FA40110 */ lw $a0, 0x110($sp) .L7F021268: @@ -6386,13 +6145,13 @@ glabel sub_GAME_7F020EF0 /* 053CB0 7F0212C0 0FC0836E */ jal chrPositionRelated7F020E40 /* 053CB4 7F0212C4 8FA50104 */ lw $a1, 0x104($sp) /* 053CB8 7F0212C8 10000008 */ b .L7F0212EC -/* 053CBC 7F0212CC 00000000 */ nop +/* 053CBC 7F0212CC 00000000 */ nop .L7F0212D0: /* 053CC0 7F0212D0 8F380054 */ lw $t8, 0x54($t9) /* 053CC4 7F0212D4 03202025 */ move $a0, $t9 /* 053CC8 7F0212D8 8FA50104 */ lw $a1, 0x104($sp) /* 053CCC 7F0212DC 13000003 */ beqz $t8, .L7F0212EC -/* 053CD0 7F0212E0 00000000 */ nop +/* 053CD0 7F0212E0 00000000 */ nop /* 053CD4 7F0212E4 0FC1C323 */ jal modelTickAnimQuarterSpeed /* 053CD8 7F0212E8 00003025 */ move $a2, $zero .L7F0212EC: @@ -6406,7 +6165,7 @@ glabel sub_GAME_7F020EF0 /* 053CF4 7F021304 0FC1C323 */ jal modelTickAnimQuarterSpeed /* 053CF8 7F021308 00003025 */ move $a2, $zero /* 053CFC 7F02130C 10000003 */ b .L7F02131C -/* 053D00 7F021310 00000000 */ nop +/* 053D00 7F021310 00000000 */ nop .L7F021314: /* 053D04 7F021314 0FC0836E */ jal chrPositionRelated7F020E40 /* 053D08 7F021318 8FA50104 */ lw $a1, 0x104($sp) @@ -6431,7 +6190,7 @@ glabel sub_GAME_7F020EF0 /* 053D4C 7F02135C 914B0000 */ lbu $t3, ($t2) /* 053D50 7F021360 24010006 */ li $at, 6 /* 053D54 7F021364 15610004 */ bne $t3, $at, .L7F021378 -/* 053D58 7F021368 00000000 */ nop +/* 053D58 7F021368 00000000 */ nop .L7F02136C: /* 053D5C 7F02136C 960D0012 */ lhu $t5, 0x12($s0) .L7F021370: @@ -6444,7 +6203,7 @@ glabel sub_GAME_7F020EF0 /* 053D74 7F021384 50800005 */ beql $a0, $zero, .L7F02139C /* 053D78 7F021388 8FB8010C */ lw $t8, 0x10c($sp) /* 053D7C 7F02138C 0FC1AE7E */ jal sub_GAME_7F06B248 -/* 053D80 7F021390 00000000 */ nop +/* 053D80 7F021390 00000000 */ nop /* 053D84 7F021394 AE000020 */ sw $zero, 0x20($s0) /* 053D88 7F021398 8FB8010C */ lw $t8, 0x10c($sp) .L7F02139C: @@ -6463,7 +6222,7 @@ glabel sub_GAME_7F020EF0 /* 053DBC 7F0213CC 0FC24737 */ jal cheatIsActive /* 053DC0 7F0213D0 AE090014 */ sw $t1, 0x14($s0) /* 053DC4 7F0213D4 10400018 */ beqz $v0, .L7F021438 -/* 053DC8 7F0213D8 00000000 */ nop +/* 053DC8 7F0213D8 00000000 */ nop /* 053DCC 7F0213DC 8204000F */ lb $a0, 0xf($s0) /* 053DD0 7F0213E0 0FC081B3 */ jal not_in_us_7F0209EC /* 053DD4 7F0213E4 82050006 */ lb $a1, 6($s0) @@ -6471,7 +6230,7 @@ glabel sub_GAME_7F020EF0 /* 053DDC 7F0213EC 3C013EA0 */ li $at, 0x3EA00000 # 0.312500 /* 053DE0 7F0213F0 44816000 */ mtc1 $at, $f12 /* 053DE4 7F0213F4 0FC1B2D3 */ jal modelSetDistanceScale -/* 053DE8 7F0213F8 00000000 */ nop +/* 053DE8 7F0213F8 00000000 */ nop /* 053DEC 7F0213FC 8E020014 */ lw $v0, 0x14($s0) /* 053DF0 7F021400 3C01EFFF */ lui $at, (0xEFFFFFFF >> 16) # lui $at, 0xefff /* 053DF4 7F021404 3421FFFF */ ori $at, (0xEFFFFFFF & 0xFFFF) # ori $at, $at, 0xffff @@ -6486,7 +6245,7 @@ glabel sub_GAME_7F020EF0 /* 053E18 7F021428 46083283 */ div.s $f10, $f6, $f8 /* 053E1C 7F02142C 44055000 */ mfc1 $a1, $f10 /* 053E20 7F021430 0FC1B4CF */ jal modelSetScale -/* 053E24 7F021434 00000000 */ nop +/* 053E24 7F021434 00000000 */ nop .L7F021438: /* 053E28 7F021438 3C0D7F02 */ lui $t5, %hi(sub_GAME_7F02083C) # $t5, 0x7f02 /* 053E2C 7F02143C 25AD078C */ addiu $t5, %lo(sub_GAME_7F02083C) # addiu $t5, $t5, 0x78c @@ -6529,7 +6288,7 @@ glabel sub_GAME_7F020EF0 /* 053EB8 7F0214C8 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 053EBC 7F0214CC 44816000 */ mtc1 $at, $f12 /* 053EC0 7F0214D0 0FC1B2D3 */ jal modelSetDistanceScale -/* 053EC4 7F0214D4 00000000 */ nop +/* 053EC4 7F0214D4 00000000 */ nop /* 053EC8 7F0214D8 260400F4 */ addiu $a0, $s0, 0xf4 /* 053ECC 7F0214DC 0FC100F4 */ jal update_color_shading /* 053ED0 7F0214E0 8FA5002C */ lw $a1, 0x2c($sp) @@ -6839,7 +6598,7 @@ glabel sub_GAME_7F020EF0 /* 054358 7F021968 8FA500FC */ lw $a1, 0xfc($sp) /* 05435C 7F02196C 312A0001 */ andi $t2, $t1, 1 /* 054360 7F021970 11400005 */ beqz $t2, .L7F021988 -/* 054364 7F021974 00000000 */ nop +/* 054364 7F021974 00000000 */ nop /* 054368 7F021978 8D6D0064 */ lw $t5, 0x64($t3) /* 05436C 7F02197C 31AC0080 */ andi $t4, $t5, 0x80 /* 054370 7F021980 55800005 */ bnezl $t4, .L7F021998 @@ -6854,16 +6613,16 @@ glabel sub_GAME_7F020EF0 /* 05438C 7F02199C 8F2E0008 */ lw $t6, 8($t9) /* 054390 7F0219A0 8DC50010 */ lw $a1, 0x10($t6) /* 054394 7F0219A4 10A0000E */ beqz $a1, .L7F0219E0 -/* 054398 7F0219A8 00000000 */ nop +/* 054398 7F0219A8 00000000 */ nop /* 05439C 7F0219AC 0FC1B3A3 */ jal modelGetNodeRwData /* 0543A0 7F0219B0 03002025 */ move $a0, $t8 /* 0543A4 7F0219B4 8C430000 */ lw $v1, ($v0) /* 0543A8 7F0219B8 10600009 */ beqz $v1, .L7F0219E0 -/* 0543AC 7F0219BC 00000000 */ nop +/* 0543AC 7F0219BC 00000000 */ nop /* 0543B0 7F0219C0 8C680008 */ lw $t0, 8($v1) /* 0543B4 7F0219C4 8D050004 */ lw $a1, 4($t0) /* 0543B8 7F0219C8 10A00005 */ beqz $a1, .L7F0219E0 -/* 0543BC 7F0219CC 00000000 */ nop +/* 0543BC 7F0219CC 00000000 */ nop /* 0543C0 7F0219D0 0FC1B3A3 */ jal modelGetNodeRwData /* 0543C4 7F0219D4 8FA40110 */ lw $a0, 0x110($sp) /* 0543C8 7F0219D8 8FAF0108 */ lw $t7, 0x108($sp) @@ -6919,7 +6678,7 @@ glabel sub_GAME_7F020EF0 /* 054478 7F021A88 8FB80158 */ lw $t8, 0x158($sp) /* 05447C 7F021A8C 30590001 */ andi $t9, $v0, 1 /* 054480 7F021A90 1320000D */ beqz $t9, .L7F021AC8 -/* 054484 7F021A94 00000000 */ nop +/* 054484 7F021A94 00000000 */ nop /* 054488 7F021A98 8F040020 */ lw $a0, 0x20($t8) /* 05448C 7F021A9C 50800009 */ beql $a0, $zero, .L7F021AC4 /* 054490 7F021AA0 3048FFFE */ andi $t0, $v0, 0xfffe @@ -6943,7 +6702,7 @@ glabel sub_GAME_7F020EF0 /* 0544C8 7F021AD8 8FB00020 */ lw $s0, 0x20($sp) /* 0544CC 7F021ADC 27BD0158 */ addiu $sp, $sp, 0x158 /* 0544D0 7F021AE0 03E00008 */ jr $ra -/* 0544D4 7F021AE4 00000000 */ nop +/* 0544D4 7F021AE4 00000000 */ nop ) #endif @@ -6954,7 +6713,7 @@ glabel sub_GAME_7F020EF0 /** * Address 0x7F021B20. */ -void chrDropItems(ChrRecord *self) +void chrDropItems(ChrRecord *self) { PropRecord *childprop = self->prop->child; while (childprop) @@ -6979,35 +6738,35 @@ void chrDropItems(ChrRecord *self) /** * Unreferenced. - * - * Sets D_8002CCB8 3 bytes from paramter. - * - * @param arg0: u8[3]. - * + * + * Sets gBloodColour 3 bytes from paramter. + * + * @param colour: rgba_u8. + * * Address 0x7F021BB4. */ -void chrSetD_8002CCB8(rgba_u8 *arg0) +void chrSetgBloodColour(rgba_u8 *colour) { - D_8002CCB8.r = arg0->r; - D_8002CCB8.g = arg0->g; - D_8002CCB8.b = arg0->b; + gBloodColour.r = colour->r; + gBloodColour.g = colour->g; + gBloodColour.b = colour->b; } /** * Unreferenced. - * - * Gets D_8002CCB8 3 bytes and sets them into parameter. - * - * @param arg0: u8[3]. - * + * + * Gets gBloodColour 3 bytes and sets them into parameter. + * + * @param colour: rgba_u8. + * * Address 0x7F021BD8. */ -void chrGetD_8002CCB8(rgba_u8 *arg0) +void chrGetgBloodColour(rgba_u8 *colour) { - arg0->r = D_8002CCB8.r; - arg0->g = D_8002CCB8.g; - arg0->b = D_8002CCB8.b; + colour->r = gBloodColour.r; + colour->g = gBloodColour.g; + colour->b = gBloodColour.b; } @@ -7022,11 +6781,11 @@ Gfx *chrRenderProp(PropRecord *prop, Gfx *gdl, s32 withalpha) struct rgba_f32 spC0; // 192 s32 spBC; // 188 s32 spB8; // 184 - s32 spB4; // 180 + s32 chrfadealpha; // 180 rgba_u8 temp_v1_2; - struct unk_joint_list jlist; // 112 + ModelRenderData mrData; // 112 struct view4f sp60; // -?? 96 - struct rgba_s32 sp50; + struct rgba_s32 chrShade; s32 sp4C; // 76 PropRecord *prop_held_right; // 72 PropRecord *prop_held_left; // 68 @@ -7039,15 +6798,15 @@ Gfx *chrRenderProp(PropRecord *prop, Gfx *gdl, s32 withalpha) chr = prop->chr; chrmodel = chr->model; - spB4 = (s32) chr->fadealpha; + chrfadealpha = (s32) chr->fadealpha; - if ((chr->chrflags << 5) >= 0) //CHRFLAG_04000000 + if (!(chr->chrflags & CHRFLAG_04000000)) { - f32 f = chrobjFogVisRangeRelated(prop, getinstsize(chrmodel)); - spB4 = (s32) (f * (f32) spB4); + f32 f = chrobjFogVisRangeRelated(prop, getinstsize(chrmodel)); //0-1 + chrfadealpha = (s32) (f * (f32) chrfadealpha); } - if ((spB4 < 0xFF) || (chr->chrflags & CHRFLAG_00020000)) + if ((chrfadealpha < 0xFF) || (chr->chrflags & CHRFLAG_00020000)) { if (withalpha == 0) { @@ -7074,9 +6833,10 @@ Gfx *chrRenderProp(PropRecord *prop, Gfx *gdl, s32 withalpha) spBC = fogGetPropDistColor(prop, &spC0); if (spBC != 0) { - if (spB4 > 0) + if (chrfadealpha > 0) { - jlist = D_8002CCBC; + mrData = D_8002CCBC; + sp4C = 0x50; @@ -7102,7 +6862,7 @@ Gfx *chrRenderProp(PropRecord *prop, Gfx *gdl, s32 withalpha) held_hat_obj = prop_held_hat->obj; } - if ((sub_GAME_7F054A64(prop, &sp60) > 0) && ((chr->chrflags << 8) >= 0))//CHRFLAG_CULL_USING_HITBOX + if ((sub_GAME_7F054A64(prop, &sp60) > 0) && !(chr->chrflags & CHRFLAG_CULL_USING_HITBOX)) { gdl = bgScissorCurrentPlayerViewF(gdl, sp60.left, sp60.top, sp60.width, sp60.height); } @@ -7110,11 +6870,11 @@ Gfx *chrRenderProp(PropRecord *prop, Gfx *gdl, s32 withalpha) { gdl = bgScissorCurrentPlayerViewDefault(gdl); } - - jlist.unk08 = spB8; - jlist.unk04 = 1; - jlist.gdl = gdl; - + + mrData.flags = spB8; + mrData.zbufferenabled = TRUE; + mrData.gdl = gdl; + if ((chr->chrflags & CHRFLAG_NO_SHADOW) != 0) { sp4C = 0; @@ -7126,30 +6886,30 @@ Gfx *chrRenderProp(PropRecord *prop, Gfx *gdl, s32 withalpha) sub_GAME_7F073FC8(sp4C); - sp50.r = chr->shadecol.r; - sp50.g = chr->shadecol.g; - sp50.b = chr->shadecol.b; - sp50.a = chr->shadecol.a; + chrShade.r = chr->shadecol.r; + chrShade.g = chr->shadecol.g; + chrShade.b = chr->shadecol.b; + chrShade.a = chr->shadecol.a; - sub_GAME_7F040384(&sp50, spBC, &spC0); + sub_GAME_7F040384(&chrShade, spBC, &spC0); - jlist.unk34 = ((D_8002CCB8.rgba[0] << 0x18) | (D_8002CCB8.rgba[1] << 0x10)) | (D_8002CCB8.rgba[2] << 0x08); - jlist.unk38.word = (sp50.rgba[0] << 0x18) | (sp50.rgba[1] << 0x10) | (sp50.rgba[2] << 0x08) | (sp50.rgba[3] << 0x00); + mrData.envcolour.word = ((gBloodColour.rgba[0] << 0x18) | (gBloodColour.rgba[1] << 0x10)) | (gBloodColour.rgba[2] << 0x08); + mrData.fogcolour.word = (chrShade.rgba[0] << 0x18) | (chrShade.rgba[1] << 0x10) | (chrShade.rgba[2] << 0x08) | (chrShade.rgba[3] << 0x00); - if (spB4 < 0xFF) + if (chrfadealpha < 0xFF) { - jlist.unk30 = 8; - jlist.unk34 |= (u8)spB4; + mrData.PropType = 8; + mrData.envcolour.word |= (u8)chrfadealpha; } else { - jlist.unk30 = 7; + mrData.PropType = 7; } g_playerPerm->time_other_players_on_screen += 1; - drawjointlist(&jlist, chr->field_20); + drawjointlist(&mrData, chr->field_20); - gdl = jlist.gdl; + gdl = mrData.gdl; if ((held_right_obj != NULL) && (( held_right_obj->state & ((u8)(1 << withalpha) )) )) { @@ -7206,7 +6966,7 @@ void sub_GAME_7F022078(void) { GLOBAL_ASM( .text glabel sub_GAME_7F022078 -/* 056BA8 7F022078 3C0B8003 */ lui $t3, %hi(D_8002C914) +/* 056BA8 7F022078 3C0B8003 */ lui $t3, %hi(D_8002C914) /* 056BAC 7F02207C 256BC914 */ addiu $t3, %lo(D_8002C914) # addiu $t3, $t3, -0x36ec /* 056BB0 7F022080 8D6E0000 */ lw $t6, ($t3) /* 056BB4 7F022084 27BDFFB0 */ addiu $sp, $sp, -0x50 @@ -7231,7 +6991,7 @@ glabel sub_GAME_7F022078 /* 056BF8 7F0220C8 25080001 */ addiu $t0, $t0, 1 /* 056BFC 7F0220CC 2442002C */ addiu $v0, $v0, 0x2c /* 056C00 7F0220D0 1523FFF8 */ bne $t1, $v1, .L7F0220B4 -/* 056C04 7F0220D4 00000000 */ nop +/* 056C04 7F0220D4 00000000 */ nop .L7F0220D8: /* 056C08 7F0220D8 000AC080 */ sll $t8, $t2, 2 /* 056C0C 7F0220DC 030AC023 */ subu $t8, $t8, $t2 @@ -7300,7 +7060,7 @@ glabel sub_GAME_7F022078 /* 056CFC 7F0221CC 8FB00018 */ lw $s0, 0x18($sp) /* 056D00 7F0221D0 27BD0050 */ addiu $sp, $sp, 0x50 /* 056D04 7F0221D4 03E00008 */ jr $ra -/* 056D08 7F0221D8 00000000 */ nop +/* 056D08 7F0221D8 00000000 */ nop ) #endif @@ -7338,7 +7098,7 @@ glabel sub_GAME_7F0221DC /* 056D60 7F022230 C4E80004 */ lwc1 $f8, 4($a3) /* 056D64 7F022234 4600428D */ trunc.w.s $f10, $f8 /* 056D68 7F022238 44195000 */ mfc1 $t9, $f10 -/* 056D6C 7F02223C 00000000 */ nop +/* 056D6C 7F02223C 00000000 */ nop /* 056D70 7F022240 AFB900A8 */ sw $t9, 0xa8($sp) /* 056D74 7F022244 C4F00008 */ lwc1 $f16, 8($a3) /* 056D78 7F022248 4600848D */ trunc.w.s $f18, $f16 @@ -7365,7 +7125,7 @@ glabel sub_GAME_7F0221DC /* 056DC8 7F022298 00003025 */ move $a2, $zero /* 056DCC 7F02229C 8448000E */ lh $t0, 0xe($v0) /* 056DD0 7F0222A0 1900002D */ blez $t0, .L7F022358 -/* 056DD4 7F0222A4 00000000 */ nop +/* 056DD4 7F0222A4 00000000 */ nop /* 056DD8 7F0222A8 8C450010 */ lw $a1, 0x10($v0) .L7F0222AC: /* 056DDC 7F0222AC 8FAD00A4 */ lw $t5, 0xa4($sp) @@ -7379,12 +7139,12 @@ glabel sub_GAME_7F0221DC /* 056DFC 7F0222CC 84AA0004 */ lh $t2, 4($a1) /* 056E00 7F0222D0 032A2023 */ subu $a0, $t9, $t2 /* 056E04 7F0222D4 00005812 */ mflo $t3 -/* 056E08 7F0222D8 00000000 */ nop -/* 056E0C 7F0222DC 00000000 */ nop +/* 056E08 7F0222D8 00000000 */ nop +/* 056E0C 7F0222DC 00000000 */ nop /* 056E10 7F0222E0 00630019 */ multu $v1, $v1 /* 056E14 7F0222E4 00006012 */ mflo $t4 /* 056E18 7F0222E8 016C6821 */ addu $t5, $t3, $t4 -/* 056E1C 7F0222EC 00000000 */ nop +/* 056E1C 7F0222EC 00000000 */ nop /* 056E20 7F0222F0 00840019 */ multu $a0, $a0 /* 056E24 7F0222F4 00007012 */ mflo $t6 /* 056E28 7F0222F8 01AE3821 */ addu $a3, $t5, $t6 @@ -7400,7 +7160,7 @@ glabel sub_GAME_7F0221DC /* 056E4C 7F02231C 1420FFE3 */ bnez $at, .L7F0222AC /* 056E50 7F022320 24A50010 */ addiu $a1, $a1, 0x10 /* 056E54 7F022324 1000000C */ b .L7F022358 -/* 056E58 7F022328 00000000 */ nop +/* 056E58 7F022328 00000000 */ nop .L7F02232C: /* 056E5C 7F02232C 0FC1BA5C */ jal modelApplyDistanceRelations /* 056E60 7F022330 02002825 */ move $a1, $s0 @@ -7417,19 +7177,19 @@ glabel sub_GAME_7F0221DC /* 056E84 7F022354 8E090014 */ lw $t1, 0x14($s0) .L7F022358: /* 056E88 7F022358 11200009 */ beqz $t1, .L7F022380 -/* 056E8C 7F02235C 00000000 */ nop +/* 056E8C 7F02235C 00000000 */ nop /* 056E90 7F022360 12120005 */ beq $s0, $s2, .L7F022378 /* 056E94 7F022364 2401000A */ li $at, 10 /* 056E98 7F022368 12610005 */ beq $s3, $at, .L7F022380 /* 056E9C 7F02236C 24010011 */ li $at, 17 /* 056EA0 7F022370 12610003 */ beq $s3, $at, .L7F022380 -/* 056EA4 7F022374 00000000 */ nop +/* 056EA4 7F022374 00000000 */ nop .L7F022378: /* 056EA8 7F022378 1000000F */ b .L7F0223B8 /* 056EAC 7F02237C 01208025 */ move $s0, $t1 .L7F022380: /* 056EB0 7F022380 1200000D */ beqz $s0, .L7F0223B8 -/* 056EB4 7F022384 00000000 */ nop +/* 056EB4 7F022384 00000000 */ nop .L7F022388: /* 056EB8 7F022388 56120004 */ bnel $s0, $s2, .L7F02239C /* 056EBC 7F02238C 8E02000C */ lw $v0, 0xc($s0) @@ -7444,7 +7204,7 @@ glabel sub_GAME_7F0221DC /* 056EDC 7F0223AC 8E100008 */ lw $s0, 8($s0) .L7F0223B0: /* 056EE0 7F0223B0 1600FFF5 */ bnez $s0, .L7F022388 -/* 056EE4 7F0223B4 00000000 */ nop +/* 056EE4 7F0223B4 00000000 */ nop .L7F0223B8: /* 056EE8 7F0223B8 5600FFA8 */ bnezl $s0, .L7F02225C /* 056EEC 7F0223BC 96130000 */ lhu $s3, ($s0) @@ -7570,12 +7330,12 @@ glabel sub_GAME_7F0221DC .L7F02257C: /* 0570AC 7F02257C 8E8F0000 */ lw $t7, ($s4) /* 0570B0 7F022580 11CF0010 */ beq $t6, $t7, .L7F0225C4 -/* 0570B4 7F022584 00000000 */ nop +/* 0570B4 7F022584 00000000 */ nop /* 0570B8 7F022588 8E180010 */ lw $t8, 0x10($s0) /* 0570BC 7F02258C 0308C821 */ addu $t9, $t8, $t0 /* 0570C0 7F022590 87220006 */ lh $v0, 6($t9) /* 0570C4 7F022594 0440000B */ bltz $v0, .L7F0225C4 -/* 0570C8 7F022598 00000000 */ nop +/* 0570C8 7F022598 00000000 */ nop /* 0570CC 7F02259C 8E8A0000 */ lw $t2, ($s4) .L7F0225A0: /* 0570D0 7F0225A0 00025900 */ sll $t3, $v0, 4 @@ -7631,7 +7391,10 @@ glabel sub_GAME_7F0221DC #ifdef NONMATCHING void sub_GAME_7F022648(void) { - + //somewhere + #ifdef DEBUG + assert(hits && hits->HasHits()); + #endif } #else GLOBAL_ASM( @@ -7665,7 +7428,7 @@ glabel sub_GAME_7F022648 /* 0571DC 7F0226AC 46002181 */ sub.s $f6, $f4, $f0 /* 0571E0 7F0226B0 02002025 */ move $a0, $s0 /* 0571E4 7F0226B4 4608303C */ c.lt.s $f6, $f8 -/* 0571E8 7F0226B8 00000000 */ nop +/* 0571E8 7F0226B8 00000000 */ nop /* 0571EC 7F0226BC 450200AB */ bc1fl .L7F02296C /* 0571F0 7F0226C0 8FBF0044 */ lw $ra, 0x44($sp) /* 0571F4 7F0226C4 AFA000DC */ sw $zero, 0xdc($sp) @@ -7693,7 +7456,7 @@ glabel sub_GAME_7F022648 /* 057248 7F022718 460A0082 */ mul.s $f2, $f0, $f10 /* 05724C 7F02271C 8FA60050 */ lw $a2, 0x50($sp) /* 057250 7F022720 4602603C */ c.lt.s $f12, $f2 -/* 057254 7F022724 00000000 */ nop +/* 057254 7F022724 00000000 */ nop /* 057258 7F022728 45020003 */ bc1fl .L7F022738 /* 05725C 7F02272C 24A50004 */ addiu $a1, $a1, 4 /* 057260 7F022730 46001306 */ mov.s $f12, $f2 @@ -7711,7 +7474,7 @@ glabel sub_GAME_7F022648 /* 05728C 7F02275C 24C60030 */ addiu $a2, $a2, 0x30 /* 057290 7F022760 44070000 */ mfc1 $a3, $f0 /* 057294 7F022764 0FC1041D */ jal sub_GAME_7F041074 -/* 057298 7F022768 00000000 */ nop +/* 057298 7F022768 00000000 */ nop /* 05729C 7F02276C 10400003 */ beqz $v0, .L7F02277C /* 0572A0 7F022770 24080001 */ li $t0, 1 /* 0572A4 7F022774 AFA800D4 */ sw $t0, 0xd4($sp) @@ -7811,7 +7574,7 @@ glabel sub_GAME_7F022648 /* 05740C 7F0228DC 46069080 */ add.s $f2, $f18, $f6 /* 057410 7F0228E0 46001087 */ neg.s $f2, $f2 /* 057414 7F0228E4 460A103C */ c.lt.s $f2, $f10 -/* 057418 7F0228E8 00000000 */ nop +/* 057418 7F0228E8 00000000 */ nop /* 05741C 7F0228EC 4502000E */ bc1fl .L7F022928 /* 057420 7F0228F0 8FAC00D4 */ lw $t4, 0xd4($sp) /* 057424 7F0228F4 8FA800A0 */ lw $t0, 0xa0($sp) @@ -7835,7 +7598,7 @@ glabel sub_GAME_7F022648 /* 057468 7F022938 C5A80018 */ lwc1 $f8, 0x18($t5) /* 05746C 7F02293C 8FAE00EC */ lw $t6, 0xec($sp) /* 057470 7F022940 4610403E */ c.le.s $f8, $f16 -/* 057474 7F022944 00000000 */ nop +/* 057474 7F022944 00000000 */ nop /* 057478 7F022948 45020008 */ bc1fl .L7F02296C /* 05747C 7F02294C 8FBF0044 */ lw $ra, 0x44($sp) /* 057480 7F022950 8DCF0014 */ lw $t7, 0x14($t6) @@ -7917,9 +7680,9 @@ glabel sub_GAME_7F022980 /* 057578 7F022A48 46083081 */ sub.s $f2, $f6, $f8 /* 05757C 7F022A4C C7A600A0 */ lwc1 $f6, 0xa0($sp) /* 057580 7F022A50 46029102 */ mul.s $f4, $f18, $f2 -/* 057584 7F022A54 00000000 */ nop +/* 057584 7F022A54 00000000 */ nop /* 057588 7F022A58 46025402 */ mul.s $f16, $f10, $f2 -/* 05758C 7F022A5C 00000000 */ nop +/* 05758C 7F022A5C 00000000 */ nop /* 057590 7F022A60 46023202 */ mul.s $f8, $f6, $f2 /* 057594 7F022A64 E7A400A8 */ swc1 $f4, 0xa8($sp) /* 057598 7F022A68 E7B000AC */ swc1 $f16, 0xac($sp) @@ -8034,11 +7797,11 @@ glabel sub_GAME_7F022980 /* 057738 7F022C08 AFB00010 */ sw $s0, 0x10($sp) /* 05773C 7F022C0C 8E2A0040 */ lw $t2, 0x40($s1) /* 057740 7F022C10 17000002 */ bnez $t8, .L7F022C1C -/* 057744 7F022C14 00000000 */ nop +/* 057744 7F022C14 00000000 */ nop /* 057748 7F022C18 0007000D */ break 7 .L7F022C1C: /* 05774C 7F022C1C AFA00018 */ sw $zero, 0x18($sp) -/* 057750 7F022C20 0FC28423 */ jal sub_GAME_7F0A108C +/* 057750 7F022C20 0FC28423 */ jal explosionCreateBulletImpact /* 057754 7F022C24 AFAA0014 */ sw $t2, 0x14($sp) /* 057758 7F022C28 26520004 */ addiu $s2, $s2, 4 .L7F022C2C: @@ -8070,7 +7833,7 @@ glabel sub_GAME_7F022980 /* 0577B8 7F022C88 8DF00000 */ lw $s0, ($t7) .L7F022C8C: /* 0577BC 7F022C8C 0C002914 */ jal randomGetNext -/* 0577C0 7F022C90 00000000 */ nop +/* 0577C0 7F022C90 00000000 */ nop /* 0577C4 7F022C94 8618000A */ lh $t8, 0xa($s0) /* 0577C8 7F022C98 8E190004 */ lw $t9, 4($s0) /* 0577CC 7F022C9C 8ECA01D8 */ lw $t2, 0x1d8($s6) @@ -8081,14 +7844,14 @@ glabel sub_GAME_7F022980 /* 0577E0 7F022CB0 AFAA0010 */ sw $t2, 0x10($sp) /* 0577E4 7F022CB4 8E2B0040 */ lw $t3, 0x40($s1) /* 0577E8 7F022CB8 17000002 */ bnez $t8, .L7F022CC4 -/* 0577EC 7F022CBC 00000000 */ nop +/* 0577EC 7F022CBC 00000000 */ nop /* 0577F0 7F022CC0 0007000D */ break 7 .L7F022CC4: /* 0577F4 7F022CC4 AFA00018 */ sw $zero, 0x18($sp) /* 0577F8 7F022CC8 26240010 */ addiu $a0, $s1, 0x10 /* 0577FC 7F022CCC 2625001C */ addiu $a1, $s1, 0x1c /* 057800 7F022CD0 24070001 */ li $a3, 1 -/* 057804 7F022CD4 0FC28423 */ jal sub_GAME_7F0A108C +/* 057804 7F022CD4 0FC28423 */ jal explosionCreateBulletImpact /* 057808 7F022CD8 AFAB0014 */ sw $t3, 0x14($sp) /* 05780C 7F022CDC 10000045 */ b .L7F022DF4 /* 057810 7F022CE0 8FBF004C */ lw $ra, 0x4c($sp) @@ -8180,7 +7943,7 @@ glabel sub_GAME_7F022980 /** * Removed. - * + * * Address 0x7F022E1C. */ void chrRemoved7F022E1C(f32 arg0) @@ -8202,7 +7965,7 @@ void setanimationdebugflag(s32 param_1) * Decrements g_AnimationTablePointerCountRelated. * If less than zero, the variable will then be set to the * number of non-zero entries in animation_table_ptrs1. - * + * * Address 0x7F022E30. */ void chrDecrementAnimationTablePointerCount(void) @@ -8227,7 +7990,7 @@ void chrDecrementAnimationTablePointerCount(void) * Decrements g_AnimationTablePointerCountRelated. * If the entry in animation_table_ptrs1 at that index is zero * then the global variable will be set to zero. - * + * * Address 0x7F022E90. */ void chrIncrementAnimationTablePointerCount(void) @@ -8262,9 +8025,9 @@ void sub_GAME_7F022EE0(s32 param_1){ /** * Iterates all guards and checks if the noise is within the hearing scale distance. - * + * * @param noise: noise amount to check. - * + * * Address 0x7F022EEC. */ void chrCheckGuardsHeardSound(f32 noise) @@ -8288,7 +8051,7 @@ void chrCheckGuardsHeardSound(f32 noise) /** * Iterates g_ChrSlots. Returns the first object that (1) model * is not null and (2) chrnum matches index. - * + * * Address 0x7F022FC8. * chrFindByLiteralId */ @@ -8323,7 +8086,7 @@ PropRecord *chrGetEquippedWeaponProp(ChrRecord *self, GUNHAND hand) /** * Address 0x7F02303C. */ -PropRecord *chrGetEquippedWeaponPropWithCheck(ChrRecord *self, GUNHAND hand) +PropRecord *chrGetEquippedWeaponPropWithCheck(ChrRecord *self, GUNHAND hand) { PropRecord *gunprop = self->weapons_held[hand]; if (gunprop) @@ -8342,13 +8105,13 @@ PropRecord *chrGetEquippedWeaponPropWithCheck(ChrRecord *self, GUNHAND hand) /** * Updates character collision bounds based on chracter width. - * + * * @param arg0: prop * @param arg1: out parameter, will contain character collision_bounds. * @param arg2: out parameter, will contain 0 or 4 * @param y_out: out parameter, will be character ground + character height * @param ground: out parameter, will contain character ground - * + * * Address 0x7F02308C. */ void chrUpdateCollisionBounds(PropRecord *arg0, rect4f **arg1, s32 *arg2, f32 *y_out, f32 *ground) @@ -8360,8 +8123,8 @@ void chrUpdateCollisionBounds(PropRecord *arg0, rect4f **arg1, s32 *arg2, f32 *y if ( (chr->actiontype != ACT_DIE) && (chr->actiontype != ACT_DEAD) && - ((chr->chrflags & (CHRFLAG_00010000 | CHRFLAG_HIDDEN)) == 0) && - ((chr->hidden & 0x100) == 0) + ((chr->chrflags & (CHRFLAG_00010000 | CHRFLAG_HIDDEN)) == 0) && + ((chr->hidden & CHRHIDDEN_MOVING) == 0) ) { *arg2 = 4; @@ -8398,7 +8161,7 @@ void chrUpdateCollisionBounds(PropRecord *arg0, rect4f **arg1, s32 *arg2, f32 *y * @param width: out parameter, will be set to character width * @param height: out parameter, will be set to character height - 20 * @param always_20: out parameter, will be set to 20 - * + * * Address 0x7F023160. */ void chrGetChrWidthHeight(PropRecord *arg0, f32 *width, f32 *height, f32 *always_20) @@ -8427,7 +8190,7 @@ f32 chrGetChrGround(PropRecord *arg0) /** * Calculate auto aim position coordinates. - * + * * US address 7F023194. */ s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3) @@ -8443,13 +8206,13 @@ s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *ar struct Model *model; RenderPosView *model_render_pos_1; RenderPosView *model_render_pos_2; - + model = temp_v1->model; model_render_pos_1 = &model->render_pos[0]; model_render_pos_2 = &model->render_pos[1]; arg1->f[2] = model_render_pos_2->pos.m[3][2] + ((model_render_pos_1->pos.m[3][2] - model_render_pos_2->pos.m[3][2]) * 0.25f); - + if (arg1->f[2] < 0.0f) { arg1->f[0] = model_render_pos_2->pos.m[3][0] + ((model_render_pos_1->pos.m[3][0] - model_render_pos_2->pos.m[3][0]) * 0.25f); @@ -8457,12 +8220,12 @@ s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *ar arg3->y = 0.0f; arg3->x = 0.0f; - + arg2->x = 0.0f; arg2->y = 0.0f; - + sub_GAME_7F03F90C(model, &arg2->y, &arg2->x, &arg3->y, &arg3->x); - + return 1; } } diff --git a/src/game/chr.h b/src/game/chr.h index 24a7dc1..888481a 100644 --- a/src/game/chr.h +++ b/src/game/chr.h @@ -18,7 +18,7 @@ struct animation_something s32 field_10; s32 field_14; f32 field_18; - + struct struck_animation_table *field_1C; // maybe count of field_1C @@ -128,7 +128,7 @@ struct unk_joint_list { u32 unk28; u32 unk2C; - s32 unk30; + s32 PropType; s32 unk34; rgba_u8 unk38; s32 unk3C; @@ -232,11 +232,11 @@ extern s32 show_patrols_flag; extern s32 player1_guardID; extern ChrRecord *g_ChrSlots; extern s32 g_NumChrSlots; -extern struct unk_joint_list D_8002CC6C; +extern ModelRenderData D_8002CC6C; extern s32 D_8002CCAC; extern s32 D_8002CCB0; extern s32 D_8002CCB4; -extern rgba_u8 D_8002CCB8; +extern rgba_u8 gBloodColour; extern f32 D_80030984; extern f32 D_80030988; @@ -288,7 +288,7 @@ void chrPositionRelated7F020D94(ChrRecord *); void chrSetMoving(ChrRecord *guard,s32 param_2); f32 getAnimationRate(void); void setAnimationRate(f32); -PropRecord *init_GUARDdata_with_set_values(PropRecord *, Model *, coord3d *, f32 arg2, StandTile * arg3, s32 arg4); +PropRecord *init_GUARDdata_with_set_values(PropRecord *, Model *, coord3d *, f32 arg2, StandTile * arg3, struct AIListRecord *arg4); PropRecord *chrAllocate(struct Model * arg0, coord3d * arg1, f32 arg2, StandTile * arg3, s32 arg4); void chrSetHiddenToRandom(ChrRecord *arg0); void chrRemoved7F022E1C(f32 arg0); @@ -307,12 +307,12 @@ s32 get_numguards(void); Gfx *chrRenderProp(PropRecord *arg0, Gfx *arg1, s32 arg2); void chrAddHealth(ChrRecord *chr, f32 health); void chrSetMaxDamage(ChrRecord *chr, f32 maxdamage); -s32 sub_GAME_7F03DA50(struct PropRecord *arg0, s32 arg1); -s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3); +s32 propIsOfCdType(PropRecord* prop, s32 cdtypes); +s32 sub_GAME_7F023194(PropRecord *arg0, struct coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3); //tentative signature s32 sub_GAME_7F01FC10(Model *, coord3d *, coord3d *, f32 *); -void sub_GAME_7F0221DC(Model *arg0, s32 arg1, ModelNode *arg2, struct coord3d *arg3); +void sub_GAME_7F0221DC(Model *arg0, s32 arg1, ModelNode *arg2, struct coord3d *arg3); #ifdef BUGFIX_R1 s32 not_in_us_7F0209EC(s32 bodynum, s32 headnum); diff --git a/src/game/chr_b.c b/src/game/chr_b.c index 0ca3411..b8c95e4 100644 --- a/src/game/chr_b.c +++ b/src/game/chr_b.c @@ -76,11 +76,12 @@ struct Model *makeonebody(s32 body, s32 head, struct ModelFileHeader *bodyHeader { model = get_aircraft_obj_instance_controller(bodyHeader); } - + #ifdef DEBUG + assert(chrsub->inst.savesize>=bodyobj->savesize); //bodyHeader = chrsub, model = bodyobj + #endif #ifdef XBLADEBUG #error fix XBLADEBUG // - // if (*&pMStack0000003c->field_0x2 < pMStack00000024->numRecords) { // assertPrint_8291E690 // (".\\ported\\chrlv.cpp",0xc4, // "Assertion failed: chrsub->inst.savesize>=bodyobj->savesize"); diff --git a/src/game/chrai.c b/src/game/chrai.c index e8f45a1..6e385e5 100644 --- a/src/game/chrai.c +++ b/src/game/chrai.c @@ -40,7 +40,7 @@ //hack? used to match as called with 2 args, but decompiled code takes 1 -extern s32 objectiveGetStatus_WEAK(s32 objectiveNum, s32); +extern s32 objectiveGetStatus_WEAK(s32 objectiveNum, s32); //bss @@ -52,7 +52,7 @@ sfxRecord sfx_related[SFX_RELATED_LEN]; /** - * Play Audio in slot X from Prop or Pad + * Play Audio in slot X from Prop or Pad * @param slot: Where audio is loaded */ void audioPlayFromProp2(s32 slot) @@ -63,10 +63,10 @@ void audioPlayFromProp2(s32 slot) if ((sfx->state ) && (sndGetPlayingState(sfx->state) )) { - + if (sfx->pos ) { - sfx->Volume = sub_GAME_7F0539E4(sfx->pos); + sfx->Volume = sub_GAME_7F0539E4(sfx->pos); } else { @@ -104,7 +104,7 @@ void audioPlayFromProp2(s32 slot) /** - Play All Sounds in all slots + Play All Sounds in all slots */ void loop_set_sound_effect_all_slots(void) { @@ -121,7 +121,7 @@ void loop_set_sound_effect_all_slots(void) * @param slot: where to load sound * @param soundIndex: SFX_ID */ -void audioPlayFromProp(s32 slot, s16 soundIndex) +void audioPlayFromProp(s32 slot, s16 soundIndex) { sfxRecord *sfx = NULL; //always added to stack anyway, cleaner to use //"Existing ai sound number %d!\n" @@ -137,13 +137,19 @@ void audioPlayFromProp(s32 slot, s16 soundIndex) sfx->pos = NULL; sfx->Obj = NULL; } + #ifdef DEBUG + else + { + osSyncPrintf("Existing ai sound number %d!\n", slot); + } + #endif } sndPlaySfx(g_musicSfxBufferPtr, soundIndex, sfx); } /** - Stop All Sounds in all slots + Stop All Sounds in all slots */ void sub_GAME_7F0349BC(s32 slot) { @@ -157,12 +163,12 @@ void sub_GAME_7F0349BC(s32 slot) -/** +/** * Get AI Command Size in bytes * @param AIList: u8 Pointer to The AI list containing the command * @param offset: The offset (in bytes) to the command you want the size of * @return The number of bytes of AI command - * @canonical name + * @canonical name */ s32 chraiitemsize(u8 *AIList, s32 offset) { @@ -192,7 +198,7 @@ s32 chraiitemsize(u8 *AIList, s32 offset) case AI_Yield: return AI_Yield_LENGTH; case AI_EndList: - return AI_EndList_LENGTH; + return AI_EndList_LENGTH; case AI_SetChrAiList: return AI_SetChrAiList_LENGTH; case AI_SetReturnAiList: @@ -227,9 +233,9 @@ s32 chraiitemsize(u8 *AIList, s32 offset) return AI_TRYFireOrAimAtTarget_LENGTH; case AI_TRYFireOrAimAtTargetKneel: return AI_TRYFireOrAimAtTargetKneel_LENGTH; - case AI_IFImFiring: + case AI_IFImFiring: /* enum = 232 despite following enum = 21 in the list */ return AI_IFImFiring_LENGTH; - case AI_IFImFiringAndLockedForward: + case AI_IFImFiringAndLockedForward: /* enum = 231 despite being followed by enum = 22 in the list */ return AI_IFImFiringAndLockedForward_LENGTH; case AI_TRYFireOrAimAtTargetUpdate: return AI_TRYFireOrAimAtTargetUpdate_LENGTH; @@ -361,8 +367,8 @@ s32 chraiitemsize(u8 *AIList, s32 offset) return AI_IFBondInRoomWithPad_LENGTH; case AI_IFBondCollectedObject: return AI_IFBondCollectedObject_LENGTH; - case AI_IFItemIsStationaryWithinLevel: - return AI_IFItemIsStationaryWithinLevel_LENGTH; + case AI_IFKeyDropped: + return AI_IFKeyDropped_LENGTH; case AI_IFItemIsAttachedToObject: return AI_IFItemIsAttachedToObject_LENGTH; case AI_IFBondHasItemEquipped: @@ -604,7 +610,7 @@ s32 chraiitemsize(u8 *AIList, s32 offset) case AI_TvChangeScreenBank: return AI_TvChangeScreenBank_LENGTH; case AI_IFBondInTank: - return AI_IFBondInTank_LENGTH; + return AI_IFBondInTank_LENGTH; case AI_EndLevel: return AI_EndLevel_LENGTH; case AI_CameraReturnToBond: @@ -688,9 +694,9 @@ s32 chraiitemsize(u8 *AIList, s32 offset) case AI_ObjectRocketLaunch: return AI_ObjectRocketLaunch_LENGTH; case AI_PRINT: - { + { s32 pos = offset + 1; - while (AIList[pos] != 0) + while (AIList[pos] != 0) { ++pos; } @@ -706,11 +712,11 @@ s32 chraiitemsize(u8 *AIList, s32 offset) /** - * Get ID of AIList + * Get ID of AIList * @param AIList: Ailist to get ID of - * @return ID of AIList + * @return ID of AIList */ -s32 chraiGetAIListID(AIRecord *AIList, bool *isGlobalAIList) +s32 chraiGetAIListID(AIRecord *AIList, bool *isGlobalAIList) { s32 i; @@ -742,13 +748,13 @@ s32 chraiGetAIListID(AIRecord *AIList, bool *isGlobalAIList) -/** +/** * GoTo Label * @param AIlist: AIList containing label * @param LabelNum: Integer/enum ID to go to * @return Offset of label from beggining of AIList. */ -s32 chraiGoToLabel(AIRecord *AIList, s32 Offset, u8 LabelNum) +s32 chraiGoToLabel(AIRecord *AIList, s32 Offset, u8 LabelNum) { s32 listID; char *debAIListTypeString; @@ -766,7 +772,7 @@ s32 chraiGoToLabel(AIRecord *AIList, s32 Offset, u8 LabelNum) } else if (AIList[Offset].cmd == AI_EndList) { - // restart ai list PC if next label not found - causes infinit loop outside of debug + // restart ai list PC if next label not found - causes infinite loop outside of debug listID = chraiGetAIListID(AIList, &isGlobalAIList); # ifdef DEBUG if (isGlobalAIList) @@ -789,7 +795,7 @@ s32 chraiGoToLabel(AIRecord *AIList, s32 Offset, u8 LabelNum) -AIRecord *ailistFindById(s32 ID) +AIRecord *ailistFindById(s32 ID) { s32 i; @@ -833,7 +839,7 @@ PathRecord *pathFindById(s32 ID) { return &g_CurrentSetup.patrolpaths[i]; } - + } return NULL; @@ -887,7 +893,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) * ai(void) enery tune on (%d, %d, %d) * ai(void) enery tune off (%d) * - * Stack requires that each case declair its own AIRecord variable + * Stack requires that each case declare its own AIRecord variable * */ @@ -936,12 +942,12 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) for (;;) { /* - * GE uses long Switch/case while PD uses Bool functions and tests - * for TRUE/FALSE if(funcpointer[ai]) break; + * GE uses long Switch/case while PD uses Bool functions and tests + * for TRUE/FALSE if(funcpointer[ai]) break; */ switch ((AiListp + Offset)->cmd) { - //unfortunatly we cannot use the cmdbuilder in matching rom as the ordering is not sequential + //unfortunately we cannot use the cmdbuilder in matching rom as the ordering is not sequential #ifdef USECMDBUILDER #define _AI_DEBUG_ID(CMD, AI_NUMBER_OF_PARAMS, PARAM, DESC) #define _AI_CMD_POLYMORPH(C, N, P1, P2, D) @@ -996,8 +1002,24 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) } case AI_EndList: { - //Not an error to be here, same as yield except without pushing offset past it. - return; + //Not an error to be here, same as yield except without pushing offset past it. (just keeps looping) +# ifdef ENABLE_LOG +# ifdef IS_PD + listID = chraiGetAIListID(AIList, &isGlobalAIList); + if (isGlobalAIList) + { + debAIListTypeString = "global"; + } + else + { + debAIListTypeString = "local"; + } + osSyncPrintf("AI error: endlist reached %s list=%d!\n", debAIListTypeString, listID); +# endif + osSyncPrintf("AI error: endlist reached!\n"); +# endif + + return; } case AI_SetChrAiList: { @@ -1008,7 +1030,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) if (CHR_NUM == ((u8)CHR_SELF)) { - AiListp = ailistFindById(AI_LIST_ID); + AiListp = ailistFindById(AI_LIST_ID); Offset = 0; } else @@ -1643,12 +1665,12 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) case AI_RunToPadPreset: { /* PD uses GoTo Pad (speed) which seems better - switch (ai->val[0]) - { - case SPEED_WALK: + switch (ai->val[0]) + { + case SPEED_WALK: chrGoToPad(ChrEntityp, ChrEntityp->padpreset1, SPEED_WALK); - break; - case SPEED_RUN: + break; + case SPEED_RUN: etc... */ chrGoToPad(ChrEntityp, ChrEntityp->padpreset1, SPEED_RUN); @@ -1679,7 +1701,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) Offset += AI_StartPatrol_LENGTH; break; } - case AI_IFICanHearAlarm: + case AI_IFICanHearAlarm: { AIRecord *ai = AiListp + Offset; if (chrCanHearAlarm(ChrEntityp)) @@ -1852,8 +1874,8 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) case AI_IFMyRoomIsOnScreen: { AIRecord *ai = AiListp + Offset; - - if (getROOMID_Bitflags(getTileRoom(ChrEntityp->prop->stan))) //embedded func to match, must be s32 not u8 + + if (getROOMID_isRendered(getTileRoom(ChrEntityp->prop->stan))) //embedded func to match, must be s32 not u8 { Offset = chraiGoToLabel(AiListp, Offset, ai->val[0]); } @@ -2120,7 +2142,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) } else { -#ifdef DEBUG +#ifdef ENABLE_LOG osSyncPrintf("bond not in room\n"); #endif Offset += AI_IFBondInRoomWithPad_LENGTH; @@ -2141,7 +2163,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) } break; } - case AI_IFItemIsStationaryWithinLevel: + case AI_IFKeyDropped: { AIRecord *ai = AiListp + Offset; if (weaponFindThrown(ai->val[0])) @@ -2150,7 +2172,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) } else { - Offset += AI_IFItemIsStationaryWithinLevel_LENGTH; + Offset += AI_IFKeyDropped_LENGTH; } break; } @@ -2293,6 +2315,10 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) if (!objGetDestroyedLevel(obj)) { f32 damage = ((obj->damage - obj->maxdamage) + 1) / 250.0f; + /* + osSyncPrintf("ai_destroyobj 2 : (def->obj == PROP_ELVIS_SAUCER)\n"); + osSyncPrintf("Elvis BOOM\n"); + */ #ifdef ENABLE_LOG osSyncPrintf("ai_destroyobj 3 : adddamageobj\n"); #endif @@ -2410,7 +2436,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { matrix_scalar_multiply(obj->model->scale, &matrix); } - sub_GAME_7F04088C(obj, pad, &matrix, pad->stan, pad); + sub_GAME_7F04088C(obj, &pad->pos, &matrix, pad->stan, &pad->pos); setupUpdateObjectRoomPosition(obj); } Offset += AI_MoveObject_LENGTH; @@ -2452,20 +2478,20 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { if (door->openPosition <= 0) { - pass = (ai->val[1] & DOOR_STATE_CLOSED) != 0; + pass = (ai->val[1] & AI_DOOR_STATE_CLOSED) != 0; } else { - pass = (ai->val[1] & DOOR_STATE_OPEN) != 0; + pass = (ai->val[1] & AI_DOOR_STATE_OPEN) != 0; } } else if (door->openstate == DOORSTATE_OPENING || door->openstate == DOORSTATE_WAITING) { - pass = (ai->val[1] & DOOR_STATE_OPENING) != 0; + pass = (ai->val[1] & AI_DOOR_STATE_OPENING) != 0; } else if (door->openstate == DOORSTATE_CLOSING) { - pass = (ai->val[1] & DOOR_STATE_CLOSING) != 0; + pass = (ai->val[1] & AI_DOOR_STATE_CLOSING) != 0; } } if (pass) @@ -2550,10 +2576,10 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) u8 val; u8 label; } *ai = AiListp + Offset; - /* additional PD code for dificulty filtering + /* additional PD code for dificulty filtering == OBJECTIVE_COMPLETE && objectivelvlGetSelectedDifficultyBits(ai->val[0]) & (1 << lvlGetSelectedDifficulty())) * */ - if (objectiveGetCount() > ai->val && OBJECTIVESTATUS_COMPLETE == objectiveGetStatus_WEAK(ai->val * 1, ai->val )) + if (objectiveGetCount() > ai->val && OBJECTIVESTATUS_COMPLETE == objectiveGetStatus_WEAK(ai->val * 1, ai->val )) { Offset = chraiGoToLabel(AiListp, Offset, ai->label); } @@ -3322,8 +3348,17 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { #ifdef ENABLE_LOG AIRecord *ai = AiListp + Offset; - //PD = osSyncPrintf("AI_PRINT(void) [%d] %s\n", ai-val); osSyncPrintf("AI_PRINT: %s\n", ai->val); + #ifdef IS_PD + if (ChrEntityp) + { + osSyncPrintf("AI_PRINT(void) [%d] %s\n", ChrEntityp->chrnum, ai->val); + } + else if(VehichleEntityp) + { + osSyncPrintf("AI_PRINT(void) [hover vehicle] %s\n", ai->val); + } + #endif #endif Offset += chraiitemsize(AiListp, Offset); break; @@ -3510,7 +3545,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { AIRecord *ai = AiListp + Offset; s32 flags = CharArrayTo32(ai->val,3); - s32 model = CharArrayTo16(ai->val,0); + s32 model = CharArrayTo16(ai->val,0); PropRecord *prop = NULL; if (ChrEntityp && ChrEntityp->prop && ChrEntityp->model) @@ -3745,8 +3780,8 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { #ifdef VERSION_EU sfx_related[ai->slotID].sfxID = (sfxID * 50) / 60; -#else - sfx_related[ai->slotID].sfxID = sfxID; +#else + sfx_related[ai->slotID].sfxID = sfxID; #endif sfx_related[ai->slotID].Volume = vol; sfx_related[ai->slotID].pos = NULL; @@ -3779,8 +3814,8 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { #ifdef VERSION_EU sfx_related[ai->slotID].sfxID = (sfxID * 50) / 60; -#else - sfx_related[ai->slotID].sfxID = sfxID; +#else + sfx_related[ai->slotID].sfxID = sfxID; #endif sfx_related[ai->slotID].Volume = sub_GAME_7F0539B8(vol); sfx_related[ai->slotID].pos = NULL; @@ -3807,8 +3842,8 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { #ifdef VERSION_EU sfx_related[ai->slotID].sfxID = (sfxID * 50) / 60; -#else - sfx_related[ai->slotID].sfxID = sfxID; +#else + sfx_related[ai->slotID].sfxID = sfxID; #endif sfx_related[ai->slotID].pos = NULL; sfx_related[ai->slotID].Obj = obj; @@ -3921,7 +3956,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) case AI_IFCameraIsInIntro: { AIRecord *ai = AiListp + Offset; - if ((get_camera_mode() == 1) || (get_camera_mode() == 2)) + if ((bondviewGetCameraMode() == 1) || (bondviewGetCameraMode() == 2)) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[0]); } @@ -3934,7 +3969,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) case AI_IFCameraIsInBondSwirl: { AIRecord *ai = AiListp + Offset; - if (get_camera_mode() == 3) + if (bondviewGetCameraMode() == 3) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[0]); } @@ -3972,8 +4007,8 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { AIRecord *ai = AiListp + Offset; #ifdef ENABLE_LOG - osSyncPrintf("ai_ifbondintank\n"); -#endif + osSyncPrintf("ai_ifbondintank\n"); +#endif if (isBondInTank() == TRUE) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[0]); @@ -3987,11 +4022,11 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) case AI_EndLevel: // canonical name { /*"aiEndLevel" */ - if (camera_8003642C) + if (cameraBufferToggle) { - if (camera_80036434 == FALSE) + if (cameraFrameCounter2 == FALSE) { - camera_80036434 = TRUE; + cameraFrameCounter2 = TRUE; } } else @@ -4003,7 +4038,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) } case AI_CameraReturnToBond: { - set_camera_mode(CAMERAMODE_FP_NOINPUT); + bondviewSetCameraMode(CAMERAMODE_FP_NOINPUT); Offset += AI_CameraReturnToBond_LENGTH; break; } @@ -4019,7 +4054,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { dword_CODE_bss_800799F8 = (PadRecord *)&g_CurrentSetup.boundpads[getBoundPadNum(padnum)]; } - set_camera_mode(CAMERAMODE_POSEND); + bondviewSetCameraMode(CAMERAMODE_POSEND); Offset += AI_CameraLookAtBondFromPad_LENGTH; break; } @@ -4042,7 +4077,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) gBondViewCutscene = cdef; dword_CODE_bss_80079A18 = CharArrayTo16(ai->val,1); dword_CODE_bss_80079A1C = CharArrayTo16(ai->val,3); - set_camera_mode(CAMERAMODE_POSEND); + bondviewSetCameraMode(CAMERAMODE_POSEND); } } Offset += AI_CameraSwitch_LENGTH; @@ -4079,7 +4114,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) { countdownTimerSetVisible(16, FALSE); } - D_800364B0 = FALSE; + is_timer_active = FALSE; Offset += AI_BondDisableControl_LENGTH; break; } @@ -4093,7 +4128,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) hudmsgsSetOn(PLAYERFLAG_NOCONTROL); bondviewClearUpperTextDisplayFlag(2); countdownTimerSetVisible(16, TRUE); - D_800364B0 = TRUE; + is_timer_active = TRUE; Offset += AI_BondEnableControl_LENGTH; break; } @@ -4128,7 +4163,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) stan = pad->stan; sub_GAME_7F03D058(chr->prop, FALSE); - if (sub_GAME_7F033F48(&pos, &stan, FacingDirection, TRUE)) + if (chrAdjustPosForSpawn(&pos, &stan, FacingDirection, TRUE)) { { chr->prop->pos.x = pos.x; @@ -4232,9 +4267,9 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) door->openPosition = door->maxFrac; door->openedTime = g_GlobalTimer; door->openstate = DOORSTATE_STATIONARY; - sub_GAME_7F052B00(door); + door7F052B00(door); doorActivatePortal(door); // doorActivatePortal - sub_GAME_7F053B10(door); + door7F053B10(door); } Offset += AI_DoorOpenInstant_LENGTH; break; @@ -4402,20 +4437,20 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) flt_CODE_bss_80079A0C = camHeight; flt_CODE_bss_80079A10 = targetHeight; dword_CODE_bss_80079A14 = padnum; - set_camera_mode(CAMERAMODE_POSEND); + bondviewSetCameraMode(CAMERAMODE_POSEND); Offset += AI_CameraOrbitPad_LENGTH; break; } case AI_CreditsRoll: { - D_8003643C = TRUE; + credits_state = TRUE; Offset += AI_CreditsRoll_LENGTH; break; } case AI_IFCreditsHasCompleted: { AIRecord *ai = AiListp + Offset; - if (D_8003643C == 2) + if (credits_state == 2) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[0]); } @@ -4442,7 +4477,7 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) case AI_IFFolderActorIsEqual: { AIRecord *ai = AiListp + Offset; - if (getSelectedFolderBond() == (s8)ai->val[0]) + if (fileGetBondForCurrentFolder() == (s8)ai->val[0]) { Offset = chraiGoToLabel(AiListp, Offset, ai->val[1]); } @@ -4566,14 +4601,14 @@ void ai(PropDefHeaderRecord *Entityp, PROP_TYPE EntityType) #endif default: /* - * No Command found, advance ailist by 1. - * This is attempting to handle situations where the command - * type is invalid by passing over them and continuing - * execution. - * chraiitemsize returns 1 which is pointless really - * could have done it here without a jump + * No Command found, advance ailist by 1. + * This is attempting to handle situations where the command + * type is invalid by passing over them and continuing + * execution. + * chraiitemsize returns 1 which is pointless really + * could have done it here without a jump * - * Outcome:crash + * Outcome:crash */ { Offset += chraiitemsize(AiListp, Offset); diff --git a/src/game/chrai.h b/src/game/chrai.h index 1446e5e..d28f595 100644 --- a/src/game/chrai.h +++ b/src/game/chrai.h @@ -218,8 +218,8 @@ extern u32 monAnim00Bond[]; extern u32 monAnim34[]; extern u32 monAnim35Taser[]; extern WeaponObjRecord* temp_mine_table[30]; -extern f32 gas_damage_flag; -extern u32 gas_cutoff_flag; +extern f32 gasTimeToFullOpacity; +extern u32 gasDoesDamageFlag; extern f32 difficulty ; extern stagesetup g_CurrentSetup; extern s16 * ptr_list_object_lookup_indices; @@ -250,6 +250,7 @@ extern struct object_animation_controller g_UnknownAnimController; extern struct object_animation_controller g_TaserAnimController; extern stagesetup *g_ptrStageSetupFile; +extern char *setup_text_pointers[]; void alarmDeactivate(void); s32 chraiitemsize(u8 *AIList, s32 offset); @@ -262,11 +263,11 @@ void chraiCheckUseHeldItems(void); bool bond_interact_object(void); void sub_GAME_7F03D0D4(void); void chrpropRegisterRoom(PropRecord *, s16); -PropRecord* propAllocate(); +PropRecord* chrpropAllocate(void); +void chrpropReparent(PropRecord *newChild, PropRecord *host); void chrpropDeregisterRooms(PropRecord *); void sub_GAME_7F03E27C(PropRecord *, coord3d *, coord3d *, f32); void chrpropRegisterRooms(PropRecord *posData); - void chrpropActivate(PropRecord *); void chrpropEnable(PropRecord *); void chrpropActivateThisFrame(PropRecord *); @@ -280,6 +281,7 @@ void roomGetProps(s32 *roomids); ObjectRecord *scan_position_data_table_for_normal_object_at_preset(s32 arg0); Gfx *chrpropsRenderPass(Gfx *arg0, s32 roomid, s32 arg2); PropRecord *get_ptr_obj_pos_list_current_entry(void); +void propsDefragRoomProps(void); void chraiGetPropRoomIds(PropRecord *self, s32 *roomids); void chrpropFree(PropRecord *prop); void chrpropDisable(PropRecord *prop); @@ -287,7 +289,7 @@ f32 chrpropBBOXGetXmin(ModelRoData_BoundingBoxRecord *modelBoundingBox f32 chrpropBBOXGetYmin(ModelRoData_BoundingBoxRecord *modelBoundingBox); f32 chrpropBBOXGetYmax(ModelRoData_BoundingBoxRecord *modelBoundingBox); f32 chrpropBBOXGetZmin(ModelRoData_BoundingBoxRecord *modelBoundingBox); -ObjectRecord *sub_GAME_7F03FAB0(PadRecord *pad, s32 RoomID); +ObjectRecord *sub_GAME_7F03FAB0(struct coord3d *pos, s32 RoomID); void chraiGetCollisionBounds(PropRecord *arg0, struct rect4f **arg1, s32 *arg2, f32 *arg3, f32 *arg4); void chrpropGetCollisionBounds(PropRecord *arg0, f32 *arg1, f32 *arg2, f32 *arg3); f32 sub_GAME_7F03CFE8(PropRecord *arg0); @@ -298,5 +300,6 @@ f32 chrpropSumMatrixNegY(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1) f32 chrpropSumMatrixPosZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); f32 chrpropSumMatrixNegZ(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1); void sub_GAME_7F03F540(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf *arg1, struct rect4f* arg2, struct collision_data *arg3); -void sub_GAME_7F03F948(struct coord3d *arg0, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4); +void sub_GAME_7F03F948(struct coord3d *arg0, struct coord2d *arg1, struct coord2d *arg2, struct coord2d *arg3, struct coord2d *arg4); +void sub_GAME_7F03E6A0(PropRecord *prop); #endif diff --git a/src/game/chraidata.c b/src/game/chraidata.c index 2a53339..1e9f186 100644 --- a/src/game/chraidata.c +++ b/src/game/chraidata.c @@ -2,7 +2,7 @@ * chraidata.c * * Global AI Data to be used by any Setup. - * + * *========================================================================*/ /************************************************************************** * @@ -18,7 +18,7 @@ #pragma region Private Members -/*private enum, only accessable from within this file */ +/*private enum, only accessible from within this file */ static enum lbl { lblZero, @@ -58,7 +58,7 @@ static enum lbl Try aiming at bond, otherwise do nothing @return No Return - AI List can only be changed by a 3rd party via SetChrAiList */ -u8 m_AimAtBond[] = { +u8 m_AimAtBond[] = { TRYAimAtBond(lblLoop) YIELD_FOREVER(lblLoop) EndList() @@ -66,21 +66,21 @@ u8 m_AimAtBond[] = { /*D:8003707C */ /** - Dead or Removed AI. + Dead or Removed AI. Use when AI has no more to do (or use YIELD_FOREVER) @return No Return - AI List can only be changed by a 3rd party via SetChrAiList */ u8 m_DeadAI[] = { - /*AI_PRINT,'d','y','e','n','g','\0',*/ + /*PRINT("dyeng")*/ YIELD_FOREVER(lblDead) EndList() }; /*D:80037084 */ /** - Stand Guard and Kill Time or patrol (Not typicaly used for patrolling). - While killing time, play Idle animations - On detecting Bond, Send a clone OR Run to Bond and Attack. + Stand Guard and Kill Time or patrol (Not typicaly used for patrolling). + While killing time, play Idle animations + On detecting Bond, Send a clone OR Run to Bond and Attack. This AI List is used by nearly all guards either as default or as a result of detecting Bond or finishing their assigned behaivior. @return No Return - AI List can only be changed by a 3rd party via SetChrAiList @@ -91,48 +91,49 @@ u8 m_StandardGuard[] = { This is the only example available in Global AI where a script will return to itself - therefor the only example of CALL too. */ - #define THIS GAILIST_STANDARD_GUARD + #define THIS GAILIST_STANDARD_GUARD DO(lblLoop) IFImDyingOrDead(lblDead) /* guard died, safely end list */ IFImOnPatrolOrStopped(lblStoppedMoving) /* guard has stopped moving, safe to continue */ /*ELSE*/ CONTINUE(lblLoop) - - + + Label(lblStoppedMoving) /*Jump table*/ IFISeeBond(lblSeesBond) - IFIWasShotRecently(lblBuddyShot) - IFIHeardBondRecently(lblCloneContinue) - IFBondMissedMe(lblNearMiss) - IFISeeSomeoneShot(lblBuddyShot) - IFISeeSomeoneDie(lblBuddyShot) + IFIWasShotRecently(lblBuddyShot) + IFIHeardBondRecently(lblCloneContinue) + IFBondMissedMe(lblNearMiss) + IFISeeSomeoneShot(lblBuddyShot) + IFISeeSomeoneDie(lblBuddyShot) IFPlayingAnimation(lblNext) /*CONTNUE*/ IFNewRandomGreaterThan(1, lblNext) /* 1/255 chance of playing new animation else continue */ - /*Default*/ + /*Default*/ CALL( GAILIST_PLAY_IDLE_ANIMATION) /* play idle animation and return to list */ - - Label(lblNext) + + Label(lblNext) LOOP(lblLoop) - - + + Label(lblNearMiss) /* bond shot near guard */ IFNewRandomGreaterThan(127, lblSeesBond) /* 50% chance of playing looking around animation */ CALL( GAILIST_STARTLE_AND_RUN_TO_BOND) - + Label(lblSeesBond) /* guard sees bond */ CALL( GAILIST_ATTACK_BOND) - + Label(lblBuddyShot) /* guard saw someone shot/die or guard was shot themselves */ CALL( GAILIST_RUN_TO_BOND) - + Label(lblCloneContinue) /* guard heard bond, attempt to spawn clone (only if chr has clone flag) */ SetReturnAiList(THIS) // This command is useless JumpTo(GAILIST_TRY_CLONE_SEND_OR_RUN_TO_BOND) - + Label(lblDead) /* guard has died, end routine */ + /*PRINT("DIE INSCAN\n")*/ JumpTo( GAILIST_DEAD_AI) EndList() @@ -142,8 +143,8 @@ u8 m_StandardGuard[] = { /*D:800370DC */ /** - Play one random idle animation - @return to caller if called with CALL + Play one random idle animation + @return to caller if called with CALL -or- return to List set by SetReturnAiList - If not set will crash */ @@ -152,31 +153,31 @@ u8 m_IdleAnimations[] = { IFNewRandomGreaterThan(50, lblNext) /* generate annd compare random seed to see which animation to play */ PlayAnimation(ANIM_yawning, 0, 193, ANIM_IDLE_POSE_WHEN_COMPLETE | ANIM_PLAY_SFX, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ - + Label(lblNext) IFRandomGreaterThan(100, lblNext) PlayAnimation(ANIM_swatting_flies, 0, 294, ANIM_IDLE_POSE_WHEN_COMPLETE | ANIM_PLAY_SFX, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ - + Label(lblNext) IFRandomGreaterThan(150, lblNext) PlayAnimation(ANIM_scratching_leg, 0, 183, ANIM_IDLE_POSE_WHEN_COMPLETE | ANIM_PLAY_SFX, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ - + Label(lblNext) IFRandomGreaterThan(200, lblNext) PlayAnimation(ANIM_scratching_butt, 0, 123, ANIM_IDLE_POSE_WHEN_COMPLETE | ANIM_PLAY_SFX, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ - + Label(lblNext) IFRandomGreaterThan(250, lblNext) PlayAnimation(ANIM_adjusting_crotch, 0, 56, ANIM_IDLE_POSE_WHEN_COMPLETE | ANIM_PLAY_SFX, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ - + Label(lblNext) PlayAnimation(ANIM_sneeze, 0, 137, ANIM_IDLE_POSE_WHEN_COMPLETE | ANIM_PLAY_SFX, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ - + Label(lblDone) #else SWITCH(SetNewRandom(), @@ -192,7 +193,7 @@ u8 m_IdleAnimations[] = { IFRandomGreaterThan,100, PlayAnimation(ANIM_scratching_leg , 0, 183, ANIM_IDLE_POSE_WHEN_COMPLETE | ANIM_PLAY_SFX, ANIM_DEFAULT_INTERPOLATION) BREAK, - IFRandomGreaterThan,50, + IFRandomGreaterThan,50, PlayAnimation(ANIM_swatting_flies , 0, 294, ANIM_IDLE_POSE_WHEN_COMPLETE | ANIM_PLAY_SFX, ANIM_DEFAULT_INTERPOLATION) BREAK, /*DEFAULT*/,, @@ -207,7 +208,7 @@ u8 m_IdleAnimations[] = { /*D:8003713C */ /** Bash that Keyboard once with a random animation - @return to caller if called with CALL + @return to caller if called with CALL -or- return to List set by SetReturnAiList - If not set will crash */ @@ -216,17 +217,17 @@ u8 m_BashKeyboard[] = { IFNewRandomGreaterThan(60, lblNext) PlayAnimation(ANIM_keyboard_right_hand1, 0, 69, 0x00, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ - + Label(lblNext) IFRandomGreaterThan(120, lblNext) PlayAnimation(ANIM_keyboard_right_hand2, 0, 74, 0x00, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ - + Label(lblNext) IFRandomGreaterThan(180, lblNext) PlayAnimation(ANIM_keyboard_left_hand, 0, 79, 0x00, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ - + Label(lblNext) PlayAnimation(ANIM_keyboard_right_hand_tapping, 0, 89, 0x00, ANIM_DEFAULT_INTERPOLATION) GotoNext(lblDone) /* jump to end, we're done */ @@ -242,7 +243,7 @@ u8 m_BashKeyboard[] = { IFRandomGreaterThan,60, PlayAnimation(ANIM_keyboard_right_hand2, 0, 74, 0x00, ANIM_DEFAULT_INTERPOLATION) BREAK, - /*DEFAULT*/,, + /*DEFAULT*/,, PlayAnimation(ANIM_keyboard_right_hand1, 0, 69, 0x00, ANIM_DEFAULT_INTERPOLATION) BREAK, ) @@ -253,15 +254,15 @@ u8 m_BashKeyboard[] = { /*D:8003717C */ /** Stand Guard Statically (No Clones, No animations) or patrol. - On detecting Bond (sight/near-miss only), Act like a Standard Guard. + On detecting Bond (sight/near-miss only), Act like a Standard Guard. @return to Standard Guard */ -u8 m_SimpleGuardDeaf[] = { +u8 m_SimpleGuardDeaf[] = { DO(lblLoop) /* wait for guard to stop moving before branching to next logic */ IFImOnPatrolOrStopped(lblStoppedMoving) /*ELSE*/ CONTINUE(lblLoop) - + Label(lblStoppedMoving) IFISeeBond(lblSeesBond) IFIWasShotRecently(lblBuddyShot) @@ -269,15 +270,15 @@ u8 m_SimpleGuardDeaf[] = { IFISeeSomeoneShot(lblBuddyShot) IFISeeSomeoneDie(lblBuddyShot) LOOP(lblLoop) - - + + Label(lblNearMiss) /* bond shot near guard */ IFNewRandomGreaterThan(127, lblSeesBond) /* 50% chance of playing looking around animation */ JUMPTO_THEN_GUARD( GAILIST_STARTLE_AND_RUN_TO_BOND) - + Label(lblSeesBond) /* guard sees bond */ JUMPTO_THEN_GUARD( GAILIST_ATTACK_BOND) - + Label(lblBuddyShot) /* guard saw another guard shot/die or guard was shot */ JUMPTO_THEN_GUARD( GAILIST_RUN_TO_BOND) EndList() @@ -291,7 +292,7 @@ u8 m_SimpleGuardDeaf[] = { return to List set by SetReturnAiList - If not set will crash */ u8 m_AttackBond[] = { - #if 0 //Doesnt work any simpler + #if 0 //Doesnt work any simpler IFMyFlags2Has(FLAGS2_DONT_POINT_AT_BOND, lblNext) /* if guard already pointed at bond */ /*ELSE*/ IFNewRandomGreaterThan(32, lblNext) /* 12.5% chance of pointing to bond */ @@ -299,7 +300,7 @@ u8 m_AttackBond[] = { SetMyFlags2(FLAGS2_DONT_POINT_AT_BOND) /* don't point again, thank you object permanence */ Return() /* guard pointed at bond, return to list */ - Label(lblNext) + Label(lblNext) SetMyFlags2(FLAGS2_DONT_POINT_AT_BOND) /* I am awayer of Bond, set flag so we don't point at bond */ SWITCH(/*SetNewRandom()*/EMPTY, IFRandomGreaterThan,127, @@ -315,14 +316,14 @@ u8 m_AttackBond[] = { TRYSideRunning, IFNewRandomGreaterThan,10, TRYSidestepping, - IFNewRandomGreaterThan,10, + IFNewRandomGreaterThan,10, TRYSideHopping, /*DEFAULT*/,, TRYFiringRoll, ,, TRYThrowingGrenade /* attempt to throw grenade, depends on chr->grenadeprob value */ ) - #else + #else IFMyFlags2Has(FLAGS2_DONT_POINT_AT_BOND, lblNext) /* if guard already pointed at bond */ IFNewRandomGreaterThan(32, lblNext) /* 12.5% chance of pointing to bond */ PointAtBond() @@ -332,35 +333,35 @@ u8 m_AttackBond[] = { Label(lblNext) /*Not a switch*/ SetMyFlags2(FLAGS2_DONT_POINT_AT_BOND) /* I am awayer of Bond, set flag so we don't point at bond */ TRYThrowingGrenade(lblDone) /* attempt to throw grenade, depends on chr->grenadeprob value */ - + Label(lblNext) IFNewRandomGreaterThan(10, lblNext) TRYFiringRoll(lblDone) - + Label(lblNext) IFNewRandomGreaterThan(10, lblNext) TRYSideHopping(lblDone) - + Label(lblNext) IFNewRandomGreaterThan(25, lblNext) TRYSidestepping(lblDone) - + Label(lblNext) IFNewRandomGreaterThan(50, lblNext) TRYSideRunning(lblDone) - + Label(lblNext) IFNewRandomGreaterThan(64, lblNext) TRYFiringWalk(lblDone) /* infinite ammo death sentence ;) */ - + Label(lblNext) IFRandomGreaterThan(127, lblNext) TRYFiringRun(lblDone) - + Label(lblNext) IFNewRandomGreaterThan(127, lblKneel) TRYFireAtBond(lblDone) - + Label(lblKneel) TRYFireAtBondKneeling(lblDone) @@ -368,7 +369,7 @@ u8 m_AttackBond[] = { #endif Return() - EndList() + EndList() }; /*D:8003720C */ @@ -378,7 +379,7 @@ u8 m_AttackBond[] = { -or- return to List set by SetReturnAiList - If not set will crash */ -u8 m_RunToBond[] = { +u8 m_RunToBond[] = { SetMyFlags2(FLAGS2_DONT_POINT_AT_BOND) /* guard is aware of bond, so don't point at him when first spotted */ TRYRunToBond(lblLoop) /* goto loop if bond position is reachable */ Return() /* if guard can't reach bond, return to ai list (read TRYRunToBond command info) */ @@ -387,10 +388,10 @@ u8 m_RunToBond[] = { IFImOnPatrolOrStopped(lblStoppedMoving) IFISeeBond(lblSeesBond) /* executes every frame instead of "at ready" state */ LOOP(lblLoop) - + Label(lblSeesBond) JumpTo( GAILIST_ATTACK_BOND) - + Label(lblStoppedMoving) Return() EndList() @@ -398,19 +399,19 @@ u8 m_RunToBond[] = { /*D:80037224 */ /** - If Calling Chr NOT been seen, Send Clone after Bond, otherwise Act like a + If Calling Chr NOT been seen, Send Clone after Bond, otherwise Act like a Standard Guard @return to Standard Guard */ -u8 m_TryCloneSendOrRunToBond[] = { +u8 m_TryCloneSendOrRunToBond[] = { SetMyFlags2(FLAGS2_DONT_POINT_AT_BOND) /* I am aware of bond, so won't point at him */ - IFIveNotBeenSeen(lblCloneContinue) - JumpTo( GAILIST_RUN_TO_BOND) - + IFIveNotBeenSeen(lblCloneContinue) + JumpTo( GAILIST_RUN_TO_BOND) + Label(lblCloneContinue) IFMyCloneDoesNotExist(lblCloneContinue) /* Ive not been seen, test for clone existance */ JumpTo( GAILIST_STANDARD_GUARD) /* we only want 1 clone */ - + Label(lblCloneContinue) /* clone didnt exist, create one */ TRYCloningMe(GAILIST_STANDARD_CLONE, lblNext) /* Assign AI to clone */ JumpTo( GAILIST_RUN_TO_BOND) /* clone failed to spawn (not enough memory/guard doesn't have clone flag on), @@ -427,20 +428,20 @@ u8 m_TryCloneSendOrRunToBond[] = { Run to bond then act like a Standard Guard @return to Standard Guard */ -u8 m_StandardClone[] = { +u8 m_StandardClone[] = { JUMPTO_THEN_GUARD( GAILIST_RUN_TO_BOND) EndList() }; /*D:80037250 */ /** - Stand Guard Statically (No Clones, No animations) or patrol (Typical Use of this type). + Stand Guard Statically (No Clones, No animations) or patrol (Typical Use of this type). On detecting Bond, Act like a Standard Guard. @return to Standard Guard */ u8 m_SimpleGuard[] = { /* Simple Detection Loop */ - DO(lblLoop) + DO(lblLoop) IFISeeBond(lblSeesBond) IFIWasShotRecently(lblBuddyShot) IFIHeardBondRecently(lblBuddyShot) @@ -448,13 +449,13 @@ u8 m_SimpleGuard[] = { IFISeeSomeoneShot(lblBuddyShot) IFISeeSomeoneDie(lblBuddyShot) LOOP(lblLoop) - + Label(lblSeesBond) /* guard sees bond */ JUMPTO_THEN_GUARD( GAILIST_ATTACK_BOND) - + Label(lblBuddyShot) /* guard saw another guard shot/die or guard was shot */ JUMPTO_THEN_GUARD( GAILIST_RUN_TO_BOND) - + Label(lblCloneContinue) /* unused spawn clone reaction for hearing bond, likely made game too difficult/slow */ JUMPTO_THEN_GUARD( GAILIST_TRY_CLONE_SEND_OR_RUN_TO_BOND) EndList() @@ -462,53 +463,66 @@ u8 m_SimpleGuard[] = { /*D:80037280 */ /** - Stand Guard Statically (No Clones, No animations) or patrol. - On detecting Bond, Run to padpreset1 and activate alarm. + Stand Guard Statically (No Clones, No animations) or patrol. + On detecting Bond, Run to padpreset1 and activate alarm. Act like a Standard Guard thereafter @return to Standard Guard */ -u8 m_SimpleGuardAlarmRaiser[] = { - - DO(lblLoop) - IFImOnPatrolOrStopped(lblStoppedMoving) - /*ELSE*/ - CONTINUE(lblLoop) - - Label(lblStoppedMoving) - IFISeeBond(lblRunToObjective) - IFMyNumCloseArghsGreaterThan(0, lblNearMiss) - IFIHeardBondRecently(lblNearMiss) - IFISeeSomeoneShot(lblNearMiss) - IFISeeSomeoneDie(lblNearMiss) - LOOP(lblLoop) - +u8 m_SimpleGuardAlarmRaiser[] = { - Label(lblNearMiss) /* a guard in sight was killed/shot, heard bond or bond shot guard */ - IFMyNumArghsGreaterThan(0, lblRunToObjective) /* doesn't make sense why the guard would be mildly curious about getting shot */ - LookSurprised() - - DO(lblWaiting) /* wait for guard to stop moving before branching to next logic (triggered by look around animation) */ + DO(lblLoop) + IFImOnPatrolOrStopped(lblStoppedMoving) + /*ELSE*/ + CONTINUE(lblLoop) /* Only process this script if not already running */ + /******************** + StoppedMoving + *********************/ + Label(lblStoppedMoving) /* break loop if any condition is true */ + IFISeeBond(lblRunToObjective) + IFMyNumCloseArghsGreaterThan(0, lblNearMiss) + IFIHeardBondRecently(lblNearMiss) + IFISeeSomeoneShot(lblNearMiss) + IFISeeSomeoneDie(lblNearMiss) + LOOP(lblLoop) + + /************* + NearMiss + **************/ + Label(lblNearMiss) /* a guard in sight was killed/shot, heard bond or bond shot guard */ + IFMyNumArghsGreaterThan(0, lblRunToObjective) /* doesn't make sense why the guard would be mildly curious about getting shot */ + LookSurprised() + + DO(lblWaiting) /* wait for guard to stop moving before branching to next logic (triggered by look around animation) */ IFImOnPatrolOrStopped(lblRunToObjective) LOOP(lblWaiting) - + + /******** + RUN! + *********/ Label(lblRunToObjective) - RunToPad(PAD_PRESET1) - - DO(lblNext) /* wait for guard to stop moving (reached destination/guard was shot) */ + RunToPad(PAD_PRESET1) + + DO(lblNext) /* wait for guard to stop moving (reached destination/guard was shot) */ IFImOnPatrolOrStopped(lblDone) LOOP(lblNext) - + + /********* + DONE + **********/ Label(lblDone) - IFMyDistanceToPadGreaterThanMeter( 1, PAD_PRESET1, lblDone) /* if guard is more than 1 meter away from alarm, skip to attack ai list */ - TRYTriggeringAlarmAtPad(PAD_PRESET1, lblAlarmActivated) - GotoNext(lblDone) /* didn't activate alarm (alarm destroyed?) */ - - DO(lblAlarmActivated) /* wait for guard to finish activating alarm */ + IFMyDistanceToPadGreaterThanMeter( 1, PAD_PRESET1, lblDone) /* if guard is more than 1 meter away from alarm, skip to attack ai list */ + TRYTriggeringAlarmAtPad(PAD_PRESET1, lblAlarmActivated) + GotoNext(lblDone) /* didn't activate alarm (alarm destroyed?) */ + + DO(lblAlarmActivated) /* wait for guard to finish activating alarm */ IFImOnPatrolOrStopped(lblDone) LOOP(lblAlarmActivated) - + + /********* + DONE + **********/ Label(lblDone) - JUMPTO_THEN_GUARD( GAILIST_RUN_TO_BOND) + JUMPTO_THEN_GUARD( GAILIST_RUN_TO_BOND) /* Come Here!... Meh, Im just doing my job */ EndList() }; @@ -517,12 +531,12 @@ u8 m_SimpleGuardAlarmRaiser[] = { Startle character then Run To Bond @return to caller if called with CALL -or- return to List set by SetReturnAiList - If not set will crash */ -u8 m_StartleAndRunToBond[] = { +u8 m_StartleAndRunToBond[] = { LookSurprised() /* trigger animation */ DO(lblLoop) IFImOnPatrolOrStopped(lblDone) /* wait for chr to stop moving */ LOOP(lblLoop) - + Label(lblDone) /* chr stopped moving */ JumpTo( GAILIST_RUN_TO_BOND) EndList() @@ -533,35 +547,35 @@ u8 m_StartleAndRunToBond[] = { Persistently chase Bond and Attack (halt randomly) @return No Return - AI List can only be changed by a 3rd party via SetChrAiList */ -u8 m_RunToBondPersistent[] = { - +u8 m_RunToBondPersistent[] = { + /*DO*/ Label(lblRun) TRYRunToBond(lblRunning) /* goto loop if bond position is reachable */ - AI_PRINT,'n','o',' ','g','o','!','\n','\0', /* guard can't reach bond */ - + PRINT("no go!\n") /* guard can't reach bond */ + DO(lblRunning) IFICouldSeeBond(lblStoppedMoving) IFImOnPatrolOrStopped(lblDone) LOOP(lblRunning) - + DO(lblLoop) /*Check Hits and Stopped/Patrol State*/ IFMyNumArghsLessThan(6, lblCheckDistance2) /*ELSE*/IFMychrflagsHas(CHRFLAG_INVINCIBLE, lblInvincibleCheck) /*BREAK*/ - + Label(lblCheckDistance2) IFImOnPatrolOrStopped(lblStoppedMoving) /*// BUG - this causes guard to shuffle about uselessly if Bond & guard are within line of sight and over 20 meters */ IFMyDistanceToBondGreaterThanMeter(20, lblNext) /* if guard is further than 20 meters away from bond, break */ LOOP(lblLoop) - + Label(lblNext) CONTINUE(lblRun) - + Label(lblStoppedMoving) IFICouldSeeBond(lblNext) /*If Not invincible, do Attack loop*/ GotoNext(lblDone) /*Goto end of Attack Switch*/ - + Label(lblCheckDistance) Yield() IFMyDistanceToBondLessThanMeter(5, lblNext) /*BREAK*/ @@ -570,25 +584,25 @@ u8 m_RunToBondPersistent[] = { Label(lblNext) IFMychrflagsHas(CHRFLAG_INVINCIBLE, lblInvincibleCheck) /*Check Hits, Unset flags and Loop Attack Options*/ - + /*DO*/ Label(lblMaybeThrowGrenade) #if 0 IFNewRandomGreaterThan(10, lblNext) TRYThrowingGrenade(lblDone) /* depends on chr->grenadeprob value */ - + Label(lblNext) IFRandomGreaterThan(50, lblNext) TRYSidestepping(lblDone) - + Label(lblNext) IFRandomGreaterThan(60, lblNext) TRYFiringRoll(lblDone) - + Label(lblNext) IFRandomGreaterThan(80, lblNext) TRYFiringRoll(lblDone) - + Label(lblNext) IFRandomGreaterThan(100, lblNext) TRYFiringWalk(lblDone) @@ -614,12 +628,12 @@ u8 m_RunToBondPersistent[] = { IFRandomGreaterThan, 100, TRYFiringRun, IFRandomGreaterThan,80, - TRYFiringWalk, + TRYFiringWalk, IFRandomGreaterThan,60, TRYFiringRoll, IFRandomGreaterThan,50, TRYFiringRoll, - IFRandomGreaterThan,10, + IFRandomGreaterThan,10, TRYSidestepping, /*DEFAULT*/,, TRYThrowingGrenade, @@ -634,7 +648,7 @@ u8 m_RunToBondPersistent[] = { GotoNext(lblResetAndRunAgain) Label(lblNext) - Yield() + Yield() GotoFirst(lblLoop) /*Check Hits and Stopped/Patrol State*/ Label(lblResetAndRunAgain) @@ -648,7 +662,7 @@ u8 m_RunToBondPersistent[] = { Label(lblNext) Stop() - AI_PRINT,'w','a','i','t','\n','\0', + PRINT("wait\n") UnsetMyFlags2(FLAGS2_04) IFNewRandomGreaterThan(160, lblNext) SetMyFlags2(FLAGS2_04) @@ -660,7 +674,7 @@ u8 m_RunToBondPersistent[] = { IFICouldSeeBond(lblNext)/*BREAK*/ IFBondMissedMe(lblNext) /*BREAK*/ Yield() - IFMyTimerLessThanSeconds(10, lblWaiting) + IFMyTimerLessThanSeconds(10, lblWaiting) IFMyFlags2Has(FLAGS2_04, lblAlarmActivated) GotoFirst(lblRun) @@ -684,11 +698,11 @@ u8 m_RunToBondPersistent[] = { }; /*D : 800373D0 */ -/** +/** Wait for one second then return @return to caller if called with CALL -or- return to List set by SetReturnAiList - If not set will crash */ -u8 m_WaitOneSecond[] = { +u8 m_WaitOneSecond[] = { MyTimerStart() DO(lblRunning) IFMyTimerGreaterThanSeconds(1, lblNext) /* wait one second */ @@ -699,12 +713,12 @@ u8 m_WaitOneSecond[] = { EndList() }; -/*D:800373E0*/ +/*D:800373E0*/ /** Exit level and set BG AI to nothing @return No Return - AI is Dead */ -u8 m_EndLevel[] = { +u8 m_EndLevel[] = { EndLevel() JumpTo( GAILIST_DEAD_AI) EndList() @@ -716,7 +730,7 @@ u8 m_EndLevel[] = { Act like a Standard Guard thereafter @return to Standard Guard */ -u8 m_DrawPistolAndAttackBond[] = { +u8 m_DrawPistolAndAttackBond[] = { SetMySpeedRating(40) /* fast boi watch out! */ SetMyAccuracyRating(50) @@ -729,7 +743,7 @@ u8 m_DrawPistolAndAttackBond[] = { DO(lblRunning) IFMyTimerGreaterThanTicks(20, lblNext) /* wait 1/3 of a second */ LOOP(lblRunning) - + Label(lblNext) PlayAnimation(ANIM_fire_standing_draw_one_handed_weapon_fast, 0, @@ -765,7 +779,7 @@ u8 m_DrawPistolAndAttackBond[] = { Remove Calling chr and set AI to nothing @return No Return - AI is Dead */ -u8 m_RemoveSelf[] = { +u8 m_RemoveSelf[] = { RemoveMeInstantly() /* remove self */ JumpTo( GAILIST_DEAD_AI) EndList() @@ -775,7 +789,7 @@ u8 m_RemoveSelf[] = { /*D:8003744C */ /* global ai lists (glists) */ -AIListRecord g_GlobalAILists[] = { +AIListRecord g_GlobalAILists[] = { {m_AimAtBond , GAILIST_AIM_AT_BOND}, {m_DeadAI , GAILIST_DEAD_AI}, {m_StandardGuard , GAILIST_STANDARD_GUARD}, @@ -793,13 +807,12 @@ AIListRecord g_GlobalAILists[] = { {m_WaitOneSecond , GAILIST_WAIT_ONE_SECOND}, {m_EndLevel , GAILIST_END_LEVEL}, {m_DrawPistolAndAttackBond , GAILIST_DRAW_TT33_AND_ATTCK_BOND}, - {m_RemoveSelf , GAILIST_REMOVE_CHR} + {m_RemoveSelf , GAILIST_REMOVE_CHR}, + {NULL, 0} }; - -/*D:800374DC */ -u32 D_800374DC[] = {0,0}; -/*D:800374E4 */ + +/*D:800374E4 Also happens to be the same indices as levelID */ char *setup_text_pointers[] = { NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "UsetupsevbunkerZ", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,"UsetupsiloZ", @@ -813,4 +826,4 @@ char *setup_text_pointers[] = { }; - + diff --git a/src/game/chrlv.c b/src/game/chrlv.c index d53ff4a..6443286 100644 --- a/src/game/chrlv.c +++ b/src/game/chrlv.c @@ -57,7 +57,7 @@ void chrlvDeathStaggerAnimationRelated (ChrRecord *self); void chrlvAttackActionRelated (ChrRecord *self); f32 chrlvDistanceToChrRelated (ChrRecord *self, s32 arg1, s32 arg2); f32 get_distance_actor_to_position (ChrRecord *self, coord3d *arg1); -f32 chrlvPathingCollisionRelated (PropRecord *arg0, f32 arg1, f32 arg2, s32 objFlags, f32 unkHeight, f32 unkA); +f32 chrlvPathingCollisionRelated (PropRecord *arg0, f32 arg1, f32 arg2, s32 cdtypes, f32 unkHeight, f32 unkA); f32 chrlvPathingCollisionRelated7F0264B0 (PropRecord *arg0, f32 arg1, f32 arg2); void triggered_on_shot_hit (ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_animation_id, ITEM_IDS item); s32 chrlvAttackAnimationRelated7F026F30 (ChrRecord *self, f32 *result); @@ -126,12 +126,12 @@ void chrlvTickBondDieRemoved (ChrRecord *self); s32 chrlvApplySpeed (ChrRecord *self, coord3d *arg1, s32 arg2, f32 *speedPtr); void chrlvTickAttackWalk (ChrRecord *self); void chrlvTickRunPos (ChrRecord *self); -s32 sub_GAME_7F030128 (ChrRecord *self, coord3d *point, StandTile *arg2, coord3d *dest, StandTile * arg4, s32 objflags); -s32 sub_GAME_7F0301FC (ChrRecord *self, coord3d *point, StandTile *arg2, coord3d *dest, f32 arg4, s32 arg5); -s32 sub_GAME_7F0304AC (ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, StandTile *arg5, s32 arg6); +s32 sub_GAME_7F030128 (ChrRecord *self, coord3d *point, StandTile *arg2, coord3d *dest, StandTile * arg4, s32 cdtypes); +s32 sub_GAME_7F0301FC (ChrRecord *self, coord3d *point, StandTile *arg2, coord3d *dest, f32 arg4, s32 cdtypes); +s32 sub_GAME_7F0304AC (ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, StandTile *arg5, s32 cdtypes); void chrlvSwapIfDiffArg2Determinate (coord3d *arg0, coord3d *arg1, coord3d *arg2); -s32 sub_GAME_7F03081C (ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 arg6, f32 arg7, s32 arg8); -s32 sub_GAME_7F030D70 (ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 arg6, f32 arg7, s32 arg8); +s32 sub_GAME_7F03081C (ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 arg6, f32 arg7, s32 cdtypes); +s32 sub_GAME_7F030D70 (ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 arg6, f32 arg7, s32 cdtypes); void chrlvTravelTickMagic (ChrRecord *self, struct waydata *arg1, f32 arg2, coord3d *arg3, StandTile *arg4); void chrlvTravelTick (ChrRecord *, coord3d *, StandTile *, struct waydata *); void chrlvTickGoPos (ChrRecord *self); @@ -142,7 +142,7 @@ f32 get_distance_actor_to_position (ChrRecord *self, coord3d *pos); s32 chrResolveId (ChrRecord *self, s32 id); s32 sub_GAME_7F033780 (waypoint *arg0, coord3d *arg1, f32 angle); s32 chrlvFindPathNeighborRelated (coord3d *bondpos, StandTile *stan, f32 rot, u8 quadrant); -s32 sub_GAME_7F033EAC (coord3d *arg0, StandTile *arg1); +s32 chrIsPosOffScreen (coord3d *arg0, StandTile *arg1); PropRecord *chrSpawnAtCoord(s32 bodynum, s32 headnum, coord3d *pos, StandTile *stan, f32 angle, AIListRecord *ailist, s32 spawnflags); void chrlvInitActAttack (ChrRecord *self, struct anim_group_info ** arg1, s32 arg2, point2d *arg3, s32 attack_type, s32 arg5, s32 arg6); s32 chrlvPatrolCalculateStep (ChrRecord *self, bool *forward, s32 numsteps); @@ -179,10 +179,10 @@ Model * retrieve_header_for_body_and_head(s32 body, s32 head, u32 bitflags) ModelFileHeader *body_header; ModelFileHeader *head_header; s32 sunglasses; - + body_header = c_item_entries[body].header; head_header = NULL; - + sunglasses = 0; if ((bitflags & 1)) @@ -193,12 +193,12 @@ Model * retrieve_header_for_body_and_head(s32 body, s32 head, u32 bitflags) { sunglasses = (randomGetNext() & 1) == 0; } - + if ((head >= 0) && (c_item_entries[body].hasHead == 0)) { head_header = c_item_entries[head].header; } - + return setup_chr_instance(body, head, body_header, head_header, sunglasses); } @@ -254,25 +254,23 @@ s32 get_random_head(s32 id) */ void expand_09_characters(s32 stageid, GuardRecord *arg1, s32 arg2) { - PadRecord *pad; - s32 unused2; - StandTile *sp54; // 84 - s32 unused3; - ChrRecord *temp_v0_5; - PadRecord *sp48; // 72 - PropRecord *temp_v0_4; - ChrModelFileRecord *cmfr; + struct PadRecord *pad; + struct ChrRecord *temp_v0_5; + struct StandTile *sp54; // 84 + struct coord3d sp48; // 72 + struct PropRecord *temp_v0_4; + struct ChrModelFileRecord *cmfr; f32 sp3C; // 60 - Model *sp38; //56 + struct Model *sp38; //56 s32 bodyid; s32 headid; pad = &g_CurrentSetup.pads[arg1->PadID]; - if (sub_GAME_7F056850(pad, pad->stan, 20.0f, (PadRecord *)&sp48, &sp54) != 0) + if (sub_GAME_7F056850(&pad->pos, pad->stan, 20.0f, &sp48, &sp54) != 0) { headid = -1; - bodyid = (arg1->BodyID == 0xFFFF) + bodyid = (arg1->BodyID == 0xFFFF) ? get_current_random_body() : arg1->BodyID; @@ -289,8 +287,8 @@ void expand_09_characters(s32 stageid, GuardRecord *arg1, s32 arg2) if (sp38 != 0) { sp3C = atan2f(pad->look.f[0], pad->look.f[2]); - temp_v0_4 = chrAllocate(sp38, (PadRecord *)&sp48, sp3C, sp54, ailistFindById(arg1->AIListID)); - + temp_v0_4 = chrAllocate(sp38, &sp48, sp3C, sp54, ailistFindById(arg1->AIListID)); + if (temp_v0_4 != 0) { chrpropActivate(temp_v0_4); @@ -319,10 +317,14 @@ void expand_09_characters(s32 stageid, GuardRecord *arg1, s32 arg2) } } } + #ifdef DEBUG + else + { + osSyncPrintf("chr not reset! (prop num=%d chr num=%d stan=%s) ",arg2 + 1, arg1->chrnum, GetStanName(pad->stan)); + } + #endif } - - /** * Address 0x7F023910. * dont think this is right, shouldnt it check for gun flags not chr? @@ -490,7 +492,7 @@ void chrlvKneelingAnimationRelated(ChrRecord *self) self->act_stand.face_entityid = 0; self->act_stand.reaim = 0; self->act_stand.turning = 2; - self->act_stand.checkfacingwall = 0; + self->act_stand.checkfacingwall = 0; // bug/typo??: this is the only code like this not adjusted for VERSION_EU self->act_stand.wallcount = (randomGetNext() % 120) + 180; self->sleep = 0; @@ -553,7 +555,7 @@ void chrKneelChooseAnimation(ChrRecord *self) left = chrGetEquippedWeaponProp(self, GUNLEFT); right = chrGetEquippedWeaponProp(self, GUNRIGHT); chrStopFiring(self); - + if ((left && right) || (!left && !right) || weaponIsOneHanded(left) @@ -578,42 +580,42 @@ void chrKneelChooseAnimation(ChrRecord *self) /** * Address 0x7F023FE4. */ -void chrlvPerformAnimationForActor(ChrRecord *self, s32 arg1, s32 arg2, s32 arg3, u8 arg4, s32 arg5) +void chrlvPerformAnimationForActor(ChrRecord *self, s32 animID, s32 startframe, s32 endframe, u8 bitfield, s32 interpol_time60) { - f32 farg2 = (f32)arg2; + f32 startframef = (f32)startframe; f32 phi_f0; phi_f0 = 0.5f; - if ((arg4 & 0x80) != 0) + if ((bitfield & ANIM_REVERSE_LOOPING_ANIMATION) != 0) { phi_f0 = -0.5f; } chrStopFiring(self); - modelSetAnimation(self->model, (void *) animation_table_ptrs1[arg1], (arg4 & 1) != 0, farg2, phi_f0, (f32)arg5); + modelSetAnimation(self->model, (void *)animation_table_ptrs1[animID], (bitfield & ANIM_MIRROR) != 0, startframef, phi_f0, (f32)interpol_time60); - if (arg3 >= 0) + if (endframe >= 0) { - modelSetAnimEndFrame(self->model, (f32)arg3); + modelSetAnimEndFrame(self->model, (f32)endframe); } - if ((arg4 & 0x20) != 0) + if ((bitfield & 0x20) != 0) { sub_GAME_7F06CE84(self->model, self->model->unkb8 * 4.0f); } - self->chrflags &= 0xFDFFFFFF; + self->chrflags &= ~CHRFLAG_02000000; self->actiontype = ACT_ANIM; - self->act_anim.unk02c = (arg4 & 2) != 0; - self->act_anim.unk30 = (arg4 & 4) != 0; - self->act_anim.unk034 = (arg4 & 8) != 0; - self->act_anim.unk038 = (arg4 & 0x10) != 0; - self->act_anim.unk03c = (arg4 & 0x40) != 0; + self->act_anim.unk02c = (bitfield & ANIM_UNKNOWN) != 0; + self->act_anim.holdLastFrame = (bitfield & ANIM_LOOP_HOLD_LAST_FRAME) != 0; + self->act_anim.playSfx = (bitfield & ANIM_PLAY_SFX) != 0; + self->act_anim.idleOnEnd = (bitfield & ANIM_IDLE_POSE_WHEN_COMPLETE) != 0; + self->act_anim.noTranslate = (bitfield & ANIM_NO_TRANSLATION) != 0; - if (self->act_anim.unk038 != 0) + if (self->act_anim.idleOnEnd) { - self->sleep = (s8) arg5; + self->sleep = (s8) interpol_time60; } else { @@ -625,7 +627,7 @@ void chrlvPerformAnimationForActor(ChrRecord *self, s32 arg1, s32 arg2, s32 arg3 /** * Extend left hand = ACT_STARTALARM. - * + * * Address 0x7F024150. * PD: chrStartAlarmChooseAnimation */ @@ -1009,7 +1011,7 @@ void sub_GAME_7F024CF8(ChrRecord *self, coord3d *arg1) dx = self->prop->pos.f[0] - arg1->f[0]; dz = self->prop->pos.f[2] - arg1->f[2]; sq = sqrtf((dx * dx) + (dz * dz)); - + left = chrGetEquippedWeaponProp(self, GUNLEFT); right = chrGetEquippedWeaponProp(self, GUNRIGHT); @@ -1080,7 +1082,7 @@ void chrlvDeathStaggerAnimationRelated(ChrRecord *self) /** * Called from actor_fire_or_aim_at_target_update, where action type is ACT_ATTACK. - * + * * Address 0x7F024F8C. */ void chrlvAttackActionRelated(ChrRecord *self) @@ -1164,10 +1166,10 @@ f32 chrlvDistanceToChrRelated(ChrRecord *self, s32 arg1, s32 arg2) * @param arg1: address of array of firing animations (example: ptr_pistol_firing_animation_groups) * @param arg2: flag of some sort related to calculating distance * @param arg3: flags - * @param attack_type: + * @param attack_type: * @param arg5: chrlvDistanceToChrRelated arg2 * @param arg6: set self->act_attack.unk54 to this - * + * * Address 0x7F02516C. */ void chrlvInitActAttack(ChrRecord *self, struct anim_group_info **arg1, s32 arg2, point2d *arg3, s32 attack_type, s32 arg5, s32 arg6) @@ -1176,7 +1178,7 @@ void chrlvInitActAttack(ChrRecord *self, struct anim_group_info **arg1, s32 arg2 * Two unused stack variables, I tried to use them with the animation table * but couldn't get a match. */ - + // Model *self_model; // 140 s32 phi_s7; @@ -1226,7 +1228,7 @@ void chrlvInitActAttack(ChrRecord *self, struct anim_group_info **arg1, s32 arg2 (s32)arg1[anim_index]->table + (s32)((s32)next_anim * (s32)sizeof(struct weapon_firing_animation_table)) ); - if ((self->chrflags & 0x20) + if ((self->chrflags & CHRSTART_FORCENOBLOOD) && ((s32)panim_float->anonymous_0 == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_fire_hip])) { // should be: @@ -1825,7 +1827,7 @@ void chrlvInitActAttackRoll(ChrRecord *chr, GUNHAND side) chr->act_attackroll.unk44 = 0; chr->act_attackroll.attack_time = 0; chr->sleep = 0; - + modelSetAnimation( self_model, (struct ModelAnimation *) panim_float->anonymous_0, @@ -1833,7 +1835,7 @@ void chrlvInitActAttackRoll(ChrRecord *chr, GUNHAND side) panim_float->anonymous_4, chrlvGetGuard007SpeedRating(chr, 0.5f, 0.8f), 16.0f); - + if (sp78 == 0) { if (phi_s3 != 0) @@ -1863,40 +1865,40 @@ void chrlvInitActAttackRoll(ChrRecord *chr, GUNHAND side) /** * Line-line intersection, where arg0 and arg1 are two points on line1, and arg2 and arg3 are a point and a direction of line2. * 3d coord/vector are passed as arguments, but only the 2d (x,z) values are used to find the intersection. - * + * * @param line1_p1: first point to describe line1 * @param line1_p2: second point to describe line1 * @param line2_p3: first point to describe line2 * @param dir: vector giving direction of line2 * @param result: contains result - * + * * Address 0x7F026130. */ void chrlvLineLineIntersection(coord3d *line1_p1, coord3d *line1_p2, coord3d *line2_p3, coord3d *dir, coord3d *result) { /* - * Line1 = P1 + u * (P2 - P1) + * Line1 = P1 + u * (P2 - P1) * Line2 = P3 + v * D - * + * * Intersection is where Line1==Line2, or: * P1 + u * (P2 - P1) = P3 + v * D - * + * * u and v are unknown. - * + * * Isolate u: - * + * * u = (P3 + v*D - P1) / (P2 - P1) */ f32 denom; // solve for v. (much algebra follows, not shown) - + denom = (dir->f[2] * (line1_p2->f[0] - line1_p1->f[0])) - (dir->f[0] * (line1_p2->f[2] - line1_p1->f[2])); if (denom != 0.0f) { f32 v = ( - ((line1_p1->f[2] - line2_p3->f[2]) * (line1_p2->f[0] - line1_p1->f[0])) + ((line1_p1->f[2] - line2_p3->f[2]) * (line1_p2->f[0] - line1_p1->f[0])) + ((line2_p3->f[0] - line1_p1->f[0]) * (line1_p2->f[2] - line1_p1->f[2])) ) / denom; @@ -1928,13 +1930,13 @@ void chrlvLineLineIntersection(coord3d *line1_p1, coord3d *line1_p2, coord3d *li * Line-line intersection. * The first two points are retrieved from getCollisionEdge_maybe. * The arguments to the method supply the other line, described by a point and direction. - * + * * 3d coord/vector are passed as arguments, but only the 2d (x,z) values are used to find the intersection. - * + * * @param line2_p3: first point to describe line2 * @param dir: vector giving direction of line2 * @param result: out parameter, contains result. - * + * * Address 0x7F02624C. */ void chrlvStanLineDirIntersection(coord3d *line2_p3, coord3d *dir, coord3d *result) @@ -1952,7 +1954,7 @@ void chrlvStanLineDirIntersection(coord3d *line2_p3, coord3d *dir, coord3d *resu * @param arg0: * @param arg1: * @param result: out parameter, contains result. - * + * * Address 0x7F026298. */ void chrlvStanPointPointIntersection(coord3d *arg0, coord3d *arg1, coord3d *result) @@ -1965,7 +1967,7 @@ void chrlvStanPointPointIntersection(coord3d *arg0, coord3d *arg1, coord3d *resu // see comments in chrlvLineLineIntersection - v = ((arg1->f[0] * (sp2C.f[2] - arg0->f[2])) - (arg1->f[2] * (sp2C.f[0] - arg0->f[0]))) + v = ((arg1->f[0] * (sp2C.f[2] - arg0->f[2])) - (arg1->f[2] * (sp2C.f[0] - arg0->f[0]))) / ((arg1->f[2] * (sp20.f[0] - sp2C.f[0])) - (arg1->f[0] * (sp20.f[2] - sp2C.f[2]))); result->f[0] = sp2C.f[0] + ((sp20.f[0] - sp2C.f[0]) * v); @@ -1979,7 +1981,7 @@ void chrlvStanPointPointIntersection(coord3d *arg0, coord3d *arg1, coord3d *resu /** * Address 0x7F026364. */ -f32 chrlvPathingCollisionRelated(PropRecord *arg0, f32 arg1, f32 arg2, s32 objFlags, f32 unkHeight, f32 unkA) +f32 chrlvPathingCollisionRelated(PropRecord *arg0, f32 arg1, f32 arg2, s32 cdtypes, f32 unkHeight, f32 unkA) { coord3d sp5C; // sp92 f32 dest_x; // sp88 @@ -2001,7 +2003,7 @@ f32 chrlvPathingCollisionRelated(PropRecord *arg0, f32 arg1, f32 arg2, s32 objFl chrSetMoving(chr, 0); sub_GAME_7F0B1CC4(); - if (stanTestLineUnobstructed(&stan, arg0->pos.f[0], arg0->pos.f[2], dest_x, dest_z, objFlags, unkHeight, unkA, 0.0f, 1.0f) != 0) + if (stanTestLineUnobstructed(&stan, arg0->pos.f[0], arg0->pos.f[2], dest_x, dest_z, cdtypes, unkHeight, unkA, 0.0f, 1.0f) != 0) { ret = arg2; } @@ -2031,7 +2033,7 @@ f32 chrlvPathingCollisionRelated7F0264B0(PropRecord *arg0, f32 arg1, f32 arg2) f32 sp24; chrGetChrWidthHeight(arg0, &sp24, &sp2C, &sp28); - return chrlvPathingCollisionRelated(arg0, arg1, arg2, 0x1F, sp2C, sp28); + return chrlvPathingCollisionRelated(arg0, arg1, arg2, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, sp2C, sp28); } @@ -2043,7 +2045,7 @@ f32 chrlvPathingCollisionRelated7F0264B0(PropRecord *arg0, f32 arg1, f32 arg2) * @param arg2: * @param req_animation_id: Lookup by id property in D_8002C914 * @param item: argument to bondwalkItemGetForceOfImpact - * + * * Address 0x7F026508. */ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_animation_id, ITEM_IDS item) @@ -2150,7 +2152,7 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani { // removed } - + another_flag = 1; tr = (randomGetNext() % (u32)D_8002C914[animation_something_index].field_20); @@ -2195,7 +2197,7 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani chrDropItems(self); increment_num_kills_display_text_in_MP(); - + if (self->chrflags & CHRFLAG_COUNT_DEATH_AS_CIVILIAN) { inc_cur_civilian_casualties(); @@ -2234,7 +2236,7 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani { sp80 = &ptr_animation_table->data[(s32)&ANIM_DATA_hit_butt_short]; modelSetAnimationWithMerge(model, sp80, randomGetNext() & 1, 0.0f, 0.5f, 16.0f, flag1 == 0); - + if (sp54 < 2U) { modelSetAnimEndFrame(model, chrlvGetGuard007ArghRating(self, 37.0f, 8.0f)); @@ -2248,7 +2250,7 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani modelSetAnimEndFrame(model, chrlvGetGuard007ArghRating(self, (f32) (((u16*)sp80)[2] - 1), 8.0f)); } } - + another_flag = 1; } @@ -2264,7 +2266,7 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani another_flag = 1; something_ani = &D_8002C914[animation_something_index]; - + if (((s32)&D_8002C914[9] == (s32)something_ani) && (temp_left != NULL)) { animation_something_index = 10; @@ -2273,13 +2275,13 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani { animation_something_index = 13; } - + something_ani = &D_8002C914[animation_something_index]; tr = (randomGetNext() % (u32) something_ani->field_28); struck_ani = &something_ani->field_24[tr]; chrStopFiring(self); - + self->actiontype = ACT_ARGH; self->act_argh.notifychrindex = 0; self->act_argh.unk30 = g_GlobalTimer; @@ -2323,7 +2325,7 @@ void triggered_on_shot_hit(ChrRecord *self, coord3d *arg1, f32 arg2, s32 req_ani * @param self: * @param result: out parameter, will contain result * @returns status indicating if result is set - * + * * Address 0x7F026F30. */ s32 chrlvAttackAnimationRelated7F026F30(ChrRecord *self, f32 *result) @@ -2383,13 +2385,15 @@ s32 chrlvAttackAnimationRelated7F026F30(ChrRecord *self, f32 *result) /** * Address 0x7F027060. - * + * * decomp status: * - compiles: yes * - stack resize: ok * - identical instructions: fail * - identical registers: fail - * + * + * this file should be chraction.c and with at this point about 2000 lines above + * * notes: mystery section, seems to be missing something mips_to_c can't see. * male_guard_yelp_counter, female_guard_yelp_counter are static, need to be moved from chr.c * Also need to remove female_guard_yelps, male_guard_yelps from chr.c once this matches. @@ -2402,7 +2406,7 @@ void play_sound_for_shot_actor(ChrRecord *self) static s32 male_guard_yelp_counter = 0; static s32 female_guard_yelp_counter = 0; - if ((self->prop->type != PROP_TYPE_VIEWER) || (g_playerPointers[getPlayerPointerIndex(self->prop)]->bonddead == 0)) + if ((self->prop->type != PROP_TYPE_VIEWER) || (g_playerPointers[getPlayerPointerIndex(self->prop)]->bonddead == FALSE)) { /* * decomp issue: mystery section. @@ -2513,7 +2517,7 @@ glabel play_sound_for_shot_actor /* 05BC28 7F0270F8 01EE7821 */ addu $t7, $t7, $t6 /* 05BC2C 7F0270FC 91EFDE20 */ lbu $t7, %lo(c_item_entries+16)($t7) /* 05BC30 7F027100 11E00017 */ beqz $t7, .L7F027160 -/* 05BC34 7F027104 00000000 */ nop +/* 05BC34 7F027104 00000000 */ nop /* 05BC38 7F027108 10000015 */ b .L7F027160 /* 05BC3C 7F02710C 24030001 */ li $v1, 1 .L7F027110: @@ -2536,12 +2540,12 @@ glabel play_sound_for_shot_actor /* 05BC7C 7F02714C 01495021 */ addu $t2, $t2, $t1 /* 05BC80 7F027150 914ADE20 */ lbu $t2, %lo(c_item_entries+16)($t2) /* 05BC84 7F027154 11400002 */ beqz $t2, .L7F027160 -/* 05BC88 7F027158 00000000 */ nop +/* 05BC88 7F027158 00000000 */ nop /* 05BC8C 7F02715C 24030001 */ li $v1, 1 .L7F027160: /* 05BC90 7F027160 10600025 */ beqz $v1, .L7F0271F8 -/* 05BC94 7F027164 3C088003 */ lui $t0, %hi(female_guard_yelps) -/* 05BC98 7F027168 3C0B8003 */ lui $t3, %hi(male_guard_yelps) +/* 05BC94 7F027164 3C088003 */ lui $t0, %hi(female_guard_yelps) +/* 05BC98 7F027168 3C0B8003 */ lui $t3, %hi(male_guard_yelps) /* 05BC9C 7F02716C 27A20028 */ addiu $v0, $sp, 0x28 /* 05BCA0 7F027170 256B09F8 */ addiu $t3, %lo(male_guard_yelps) # addiu $t3, $t3, 0x9f8 /* 05BCA4 7F027174 256D0030 */ addiu $t5, $t3, 0x30 @@ -2557,7 +2561,7 @@ glabel play_sound_for_shot_actor /* 05BCC8 7F027198 156DFFF8 */ bne $t3, $t5, .L7F02717C /* 05BCCC 7F02719C ADC1FFFC */ sw $at, -4($t6) /* 05BCD0 7F0271A0 95610000 */ lhu $at, ($t3) -/* 05BCD4 7F0271A4 3C0F8003 */ lui $t7, %hi(male_guard_yelp_counter) +/* 05BCD4 7F0271A4 3C0F8003 */ lui $t7, %hi(male_guard_yelp_counter) /* 05BCD8 7F0271A8 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) /* 05BCDC 7F0271AC A5C10000 */ sh $at, ($t6) /* 05BCE0 7F0271B0 8DEF0A34 */ lw $t7, %lo(male_guard_yelp_counter)($t7) @@ -2582,7 +2586,7 @@ glabel play_sound_for_shot_actor /* 05BD28 7F0271F8 25080A2C */ addiu $t0, %lo(female_guard_yelps) # addiu $t0, $t0, 0xa2c /* 05BD2C 7F0271FC 8D010000 */ lw $at, ($t0) /* 05BD30 7F027200 27A20020 */ addiu $v0, $sp, 0x20 -/* 05BD34 7F027204 3C0D8003 */ lui $t5, %hi(female_guard_yelp_counter) +/* 05BD34 7F027204 3C0D8003 */ lui $t5, %hi(female_guard_yelp_counter) /* 05BD38 7F027208 AC410000 */ sw $at, ($v0) /* 05BD3C 7F02720C 95010004 */ lhu $at, 4($t0) /* 05BD40 7F027210 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) @@ -2613,7 +2617,7 @@ glabel play_sound_for_shot_actor .L7F027270: /* 05BDA0 7F027270 27BD0068 */ addiu $sp, $sp, 0x68 /* 05BDA4 7F027274 03E00008 */ jr $ra -/* 05BDA8 7F027278 00000000 */ nop +/* 05BDA8 7F027278 00000000 */ nop ) #endif @@ -2697,10 +2701,10 @@ bool handles_shot_actors(ChrRecord *self, s32 hitpart, coord3d *vector, s32 weap // If chr is dying or already dead then we're done if ((self->actiontype != ACT_DIE) && (self->actiontype != ACT_DEAD)) { - vec3d vec; - f32 angle; - f32 damageToCause; - s32 playerNum; + vec3d vec; + f32 angle; + f32 damageToCause; + s32 playerNum; damageToCause = bondwalkItemGetDestructionAmount(weaponid); @@ -2910,9 +2914,9 @@ s32 chrlvExplosionDamage(ChrRecord *self, coord3d *arg1, f32 damage, s32 arg3) sp38 = &D_8002E648[ explosion_animation_table[sp40].table[t] ]; - + chrStopFiring(self); - + self->actiontype = ACT_DIE; self->act_die.notifychrindex = 0; self->act_die.thudframe1 = sp38->anonymous_5; @@ -2927,7 +2931,7 @@ s32 chrlvExplosionDamage(ChrRecord *self, coord3d *arg1, f32 damage, s32 arg3) sp38->anonymous_3, sp38->anonymous_2, 8.0f); - + if (sp38->anonymous_6 >= 0.0f) { modelSetAnimEndFrame(self_model, sp38->anonymous_6); @@ -2949,13 +2953,13 @@ s32 chrlvExplosionDamage(ChrRecord *self, coord3d *arg1, f32 damage, s32 arg3) if ((self->weapons_held[GUNRIGHT] != NULL) && ((self->weapons_held[GUNRIGHT]->obj->flags & 0x2000) == 0)) { propobjSetDropped(self->weapons_held[GUNRIGHT], 1); - self->hidden |= 1; + self->hidden |= CHRHIDDEN_DROP_HELD_ITEMS; } if ((self->weapons_held[GUNLEFT] != NULL) && ((self->weapons_held[GUNLEFT]->obj->flags & 0x2000) == 0)) { propobjSetDropped(self->weapons_held[GUNLEFT], 1); - self->hidden |= 1; + self->hidden |= CHRHIDDEN_DROP_HELD_ITEMS; } return 1; @@ -3020,12 +3024,12 @@ glabel get_ptrpreset_in_table_matching_tile .L7F027C48: /* 05C778 7F027C48 24630010 */ addiu $v1, $v1, 0x10 /* 05C77C 7F027C4C 0481FFF5 */ bgez $a0, .L7F027C24 -/* 05C780 7F027C50 00000000 */ nop +/* 05C780 7F027C50 00000000 */ nop .L7F027C54: /* 05C784 7F027C54 00001025 */ move $v0, $zero .L7F027C58: /* 05C788 7F027C58 03E00008 */ jr $ra -/* 05C78C 7F027C5C 00000000 */ nop +/* 05C78C 7F027C5C 00000000 */ nop ) #endif @@ -3068,12 +3072,12 @@ waypoint *chrlvStanPathRelated(coord3d *arg0, StandTile *arg1) waypoint *ret = NULL; waypoint *wayp = NULL; s32 *n = NULL; - + tile = sub_GAME_7F0B2718(arg1, check_if_any_path_preset_lies_on_tile); if (tile != NULL) { ret = get_ptrpreset_in_table_matching_tile(tile); - + if (ret != NULL) { temp_f20 = chrlvPadPresetRelated(arg0, ret); @@ -3081,7 +3085,7 @@ waypoint *chrlvStanPathRelated(coord3d *arg0, StandTile *arg1) for (n = ret->neighbours; *n >= 0; n++) { wayp = &g_CurrentSetup.pathwaypoints[*n]; - + if (chrlvPadPresetRelated(arg0, wayp) < temp_f20) { ret = wayp; @@ -3116,7 +3120,7 @@ s32 chrlvStanRoomRelated(ChrRecord *self, coord3d *arg1, StandTile *tile) { for (i=0; i= temp_v0) { plot_course_for_actor(self, &self->act_gopos.targetpos, self->act_gopos.target, self->act_gopos.unk59); - + return; } @@ -3402,7 +3406,7 @@ void chrlvActGoposIncCurIndex(ChrRecord *self) * Returns the step index and populates *forward with true or false depending on * whether the chr will be traversing the path in the forward direction at that * point. - * + * * Address 0x7F028348. * * PD: chrPatrolCalculateStep @@ -3531,7 +3535,7 @@ glabel chrlvGetPatrolStepPad /** * Unknown return type. - * + * * Address 0x7F028474. */ PadRecord * chrlvGetNextPatrolStepPad(ChrRecord *self) @@ -3580,11 +3584,11 @@ s32 sub_GAME_7F028510(coord3d *arg0, StandTile *arg1) PropRecord *propss = (PropRecord *)&pos_data_entry; struct rect4f *prect4f; // 68 s32 sp40; - + roomids[0] = arg1->room; roomids[1] = -1; roomGetProps((s32*)&roomids); - + for (temp_s0 = ptr_list_object_lookup_indices; *temp_s0 >= 0; temp_s0++) { PropRecord *prop = &propss[*temp_s0]; @@ -3632,13 +3636,13 @@ void chrlvTravelTickMagic(ChrRecord *self, struct waydata *arg1, f32 arg2, coord self->invalidmove = 0; self->lastmoveok60 = g_GlobalTimer; arg1->segdistdone += arg2 * modelGetAbsAnimSpeed(self->model) * g_GlobalTimerDelta; - + if (arg1->segdisttotal <= arg1->segdistdone) { chrSetMoving(self, 0); - + if ( - (stanTestVolume(&arg4, arg3->f[0], arg3->f[2], self->chrwidth, 0x1F, 0.0f, 1.0f) < 0) + (stanTestVolume(&arg4, arg3->f[0], arg3->f[2], self->chrwidth, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, 0.0f, 1.0f) < 0) && sub_GAME_7F028510(arg3, arg4)) { self_prop = self->prop; @@ -3647,7 +3651,7 @@ void chrlvTravelTickMagic(ChrRecord *self, struct waydata *arg1, f32 arg2, coord self_prop->pos.f[1] = arg3->f[1]; self_prop->pos.f[2] = arg3->f[2]; self->chrflags |= CHRFLAG_INIT; - + setsuboffset(self->model, arg3); sub_GAME_7F01FC10(self->model, &self_prop->pos, &self_prop->pos, &self->ground); chrPositionRelated7F020D94(self); @@ -3660,7 +3664,7 @@ void chrlvTravelTickMagic(ChrRecord *self, struct waydata *arg1, f32 arg2, coord else if (self->actiontype == ACT_GOPOS) { curindex = self->act_gopos.curindex; - + if (self->act_gopos.waypoints[curindex] == NULL) { if (curindex > 0) @@ -3709,10 +3713,10 @@ void chrlvTravelTickMagic(ChrRecord *self, struct waydata *arg1, f32 arg2, coord * If action type is ACT_PATROL, computes distance between chr and target pad. * If action type is ACT_GOPOS, computes distance between chr and target position. * Otherwise result is chr->prop position. - * + * * @param self: * @param arg1: Out parameter. Contains result. - * + * * Address 0x7F028894. * PD: chrCalculatePosition. */ @@ -3744,7 +3748,7 @@ void chrlvGetPatrolPercentOrPosition(ChrRecord *self, coord3d *arg1) return; } - + if ((self->actiontype == ACT_GOPOS) && (self->act_gopos.waydata.mode == WAYMODE_MAGIC)) { chrlvActGoposRelated(self, &sp2C, &stan); @@ -3778,7 +3782,7 @@ void chrlvGetPatrolPercentOrPosition(ChrRecord *self, coord3d *arg1) * @param self: * @param arg1: sprinting animation when 2, running animation when 1, otherwise walking animation * @param arg2: - * + * * Address 0x7F028A5C. */ void get_sound_at_range(ChrRecord *self, s32 arg1, s32 arg2) @@ -3899,8 +3903,8 @@ s32 plot_course_for_actor(ChrRecord *self, coord3d *arg1, StandTile *stan, SPEED prop_waypoint = chrlvStanPathRelated(&prop->pos, prop->stan); target_waypoint = chrlvStanPathRelated(arg1, stan); - if ((prop_waypoint != NULL) - && (target_waypoint != NULL) + if ((prop_waypoint != NULL) + && (target_waypoint != NULL) && !(waypointFindRoute(prop_waypoint, target_waypoint, (waypoint **)&sp44, MAX_CHRWAYPOINTS) < 2) ) { @@ -4039,6 +4043,9 @@ void set_actor_on_path(ChrRecord *self, struct patrol_path *path) if (next_step < 0) { + #ifdef DEBUG + osSyncPrintf("Patrol first step not found for chr number %d\n",self->chrnum ); + #endif next_step = 0; } @@ -4086,8 +4093,8 @@ glabel set_actor_on_path /* 05DC48 7F029118 8C870018 */ lw $a3, 0x18($a0) /* 05DC4C 7F02911C 00003025 */ move $a2, $zero /* 05DC50 7F029120 05E0002C */ bltz $t7, .L7F0291D4 -/* 05DC54 7F029124 3C098007 */ lui $t1, %hi(g_CurrentSetup+0) -/* 05DC58 7F029128 3C0A8007 */ lui $t2, %hi(g_CurrentSetup+0x18) +/* 05DC54 7F029124 3C098007 */ lui $t1, %hi(g_CurrentSetup+0) +/* 05DC58 7F029128 3C0A8007 */ lui $t2, %hi(g_CurrentSetup+0x18) /* 05DC5C 7F02912C 3C018005 */ lui $at, %hi(D_80051DF8) /* 05DC60 7F029130 C42C1DF8 */ lwc1 $f12, %lo(D_80051DF8)($at) /* 05DC64 7F029134 8D4A5D18 */ lw $t2, %lo(g_CurrentSetup+0x18)($t2) @@ -4116,13 +4123,13 @@ glabel set_actor_on_path /* 05DCBC 7F02918C 46062001 */ sub.s $f0, $f4, $f6 /* 05DCC0 7F029190 460A4081 */ sub.s $f2, $f8, $f10 /* 05DCC4 7F029194 46000402 */ mul.s $f16, $f0, $f0 -/* 05DCC8 7F029198 00000000 */ nop +/* 05DCC8 7F029198 00000000 */ nop /* 05DCCC 7F02919C 46021482 */ mul.s $f18, $f2, $f2 /* 05DCD0 7F0291A0 46128100 */ add.s $f4, $f16, $f18 /* 05DCD4 7F0291A4 460C203C */ c.lt.s $f4, $f12 -/* 05DCD8 7F0291A8 00000000 */ nop +/* 05DCD8 7F0291A8 00000000 */ nop /* 05DCDC 7F0291AC 45000003 */ bc1f .L7F0291BC -/* 05DCE0 7F0291B0 00000000 */ nop +/* 05DCE0 7F0291B0 00000000 */ nop /* 05DCE4 7F0291B4 10000007 */ b .L7F0291D4 /* 05DCE8 7F0291B8 00C06025 */ move $t4, $a2 .L7F0291BC: @@ -4185,7 +4192,7 @@ glabel set_actor_on_path /* 05DDB8 7F029288 8FB00018 */ lw $s0, 0x18($sp) /* 05DDBC 7F02928C 27BD0028 */ addiu $sp, $sp, 0x28 /* 05DDC0 7F029290 03E00008 */ jr $ra -/* 05DDC4 7F029294 00000000 */ nop +/* 05DDC4 7F029294 00000000 */ nop ) #endif @@ -4231,10 +4238,10 @@ s32 chrlvAttackRelated7F0292A8(ChrRecord *self, coord3d *arg1, StandTile *arg2) if ((flags & 1) != 0) { bondviewUpdateGuardTankFlagsRelated(g_CurrentPlayer->prop, 0); - + if (bondviewGetVisibleToGuardsFlag() != 0) { - if ((stanTestLineUnobstructed(&stan, arg1->x, arg1->f[2], sp3C->x, sp3C->f[2], 0x11B, arg1->f[1], arg1->f[1], sp3C->f[1], sp3C->f[1]) != 0) && (stan == sp40)) + if ((stanTestLineUnobstructed(&stan, arg1->x, arg1->f[2], sp3C->x, sp3C->f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER | CDTYPE_AIOPAQUE, arg1->f[1], arg1->f[1], sp3C->f[1], sp3C->f[1]) != 0) && (stan == sp40)) { setSeenBondTimeToNow(self); ret = 1; @@ -4245,14 +4252,14 @@ s32 chrlvAttackRelated7F0292A8(ChrRecord *self, coord3d *arg1, StandTile *arg2) } else if ((flags & 4) != 0) { - if ((stanTestLineUnobstructed(&stan, arg1->x, arg1->f[2], sp3C->x, sp3C->f[2], 0x117, arg1->f[1], arg1->f[1], sp3C->f[1], sp3C->f[1]) != 0) && (stan == sp40)) + if ((stanTestLineUnobstructed(&stan, arg1->x, arg1->f[2], sp3C->x, sp3C->f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_PATHBLOCKER | CDTYPE_AIOPAQUE, arg1->f[1], arg1->f[1], sp3C->f[1], sp3C->f[1]) != 0) && (stan == sp40)) { ret = 1; } } else if ((flags & 8) != 0) { - if ((stanTestLineUnobstructed(&stan, arg1->x, arg1->f[2], sp3C->x, sp3C->f[2], 0x11F, arg1->f[1], arg1->f[1], sp3C->f[1], sp3C->f[1]) != 0) && (stan == sp40)) + if ((stanTestLineUnobstructed(&stan, arg1->x, arg1->f[2], sp3C->x, sp3C->f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER | CDTYPE_AIOPAQUE, arg1->f[1], arg1->f[1], sp3C->f[1], sp3C->f[1]) != 0) && (stan == sp40)) { ret = 1; } @@ -4289,7 +4296,7 @@ bool chrCanSeeBond(ChrRecord *self) mystan = myprop->stan; - if (stanTestLineUnobstructed(&mystan, myprop->pos.x, myprop->pos.z, bondprop->pos.x, bondprop->pos.z, 0x11B, myheight, myheight, 0.0f, 1.0f) && (mystan == bondprop->stan)) + if (stanTestLineUnobstructed(&mystan, myprop->pos.x, myprop->pos.z, bondprop->pos.x, bondprop->pos.z, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER | CDTYPE_AIOPAQUE, myheight, myheight, 0.0f, 1.0f) && (mystan == bondprop->stan)) { setSeenBondTimeToNow(self); pass = TRUE; @@ -4319,7 +4326,7 @@ bool check_if_position_in_same_room(ChrRecord *self, coord3d *pos, StandTile *st propstan = myprop->stan; - if (stanTestLineUnobstructed(&propstan, myprop->pos.x, myprop->pos.z, pos->x, pos->z, 0x113, myheight, myheight, 0.0f, 1.0f) && (propstan == stan)) + if (stanTestLineUnobstructed(&propstan, myprop->pos.x, myprop->pos.z, pos->x, pos->z, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER | CDTYPE_AIOPAQUE, myheight, myheight, 0.0f, 1.0f) && (propstan == stan)) { pass = TRUE; } @@ -4377,7 +4384,7 @@ s32 chrlvCurrentPlayerCall7F0B0E24(ChrRecord *self) bondviewUpdateGuardTankFlagsRelated(g_CurrentPlayer->prop, 0); bond_stan = bond_prop->stan; - + if ((stanTestLineUnobstructed( &bond_stan, bond_prop->pos.f[0], @@ -4436,8 +4443,8 @@ s32 chrlvCall7F0B0E24WithChrWidthHeight(PropRecord *arg0, coord3d *arg1, coord3d stan = arg0->stan; if ( - (stanTestLineUnobstructed(&stan, arg0->pos.f[0], arg0->pos.f[2], sp78, sp74, 0x1F, sp58, sp54, 0.0f, 1.0f) != 0) - && (stanTestLineUnobstructed(&stan, sp78, sp74, sp70, sp6C, 0x1F, sp58, sp54, 0.0f, 1.0f) != 0) + (stanTestLineUnobstructed(&stan, arg0->pos.f[0], arg0->pos.f[2], sp78, sp74, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER , sp58, sp54, 0.0f, 1.0f) != 0) + && (stanTestLineUnobstructed(&stan, sp78, sp74, sp70, sp6C, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER , sp58, sp54, 0.0f, 1.0f) != 0) ) { sp78 = arg0->pos.f[0] - chrz; @@ -4449,8 +4456,8 @@ s32 chrlvCall7F0B0E24WithChrWidthHeight(PropRecord *arg0, coord3d *arg1, coord3d stan = arg0->stan; if ( - (stanTestLineUnobstructed(&stan, arg0->pos.f[0], arg0->pos.f[2], sp78, sp74, 0x1F, sp58, sp54, 0.0f, 1.0f) != 0) - && (stanTestLineUnobstructed(&stan, sp78, sp74, sp70, sp6C, 0x1F, sp58, sp54, 0.0f, 1.0f) != 0) + (stanTestLineUnobstructed(&stan, arg0->pos.f[0], arg0->pos.f[2], sp78, sp74, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER , sp58, sp54, 0.0f, 1.0f) != 0) + && (stanTestLineUnobstructed(&stan, sp78, sp74, sp70, sp6C, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER , sp58, sp54, 0.0f, 1.0f) != 0) ) { ret = 1; @@ -4483,7 +4490,7 @@ s32 chrlvCall7F02982C(PropRecord *arg0, coord3d *arg1, f32 arg2) /** * Unreferenced. - * + * * Address 0x7F029AF0. */ s32 chrlvCall7F0B0E24Normalized(PropRecord *arg0, coord3d *arg1) @@ -4513,7 +4520,7 @@ s32 chrlvCall7F0B0E24Normalized(PropRecord *arg0, coord3d *arg1) /** * Same as chrlvAlertGuardToPlayerPosition, except without setting `hidden` flag 0x2. - * + * * Address 0x7F029BB0. */ void chrlvSetTargetToPlayer(ChrRecord *self) @@ -4533,7 +4540,7 @@ void chrlvSetTargetToPlayer(ChrRecord *self) /** * See also chrlvSetTargetToPlayer. - * + * * Address 0x7F029C00. */ void chrlvAlertGuardToPlayerPosition(ChrRecord *self) @@ -4561,9 +4568,10 @@ bool chrHasStoppedOrPatroling(ChrRecord *self) //chrHasStoppedOrPatroling } else if (self->actiontype == ACT_ANIM) { - if (self->act_anim.unk034 || - ((modelGetAnimSpeed(self->model) >= 0.0f) && objecthandlerGetModelField28(self->model) >= (sub_GAME_7F06F5C4(self->model))) || - ((modelGetAnimSpeed(self->model) < 0.0f) && (objecthandlerGetModelField28(self->model) <= 0.0f))) + if (self->act_anim.playSfx || + ((modelGetAnimSpeed(self->model) >= 0.0f) && objecthandlerGetModelField28(self->model) >= sub_GAME_7F06F5C4(self->model)) || + ((modelGetAnimSpeed(self->model) < 0.0f) && objecthandlerGetModelField28(self->model) <= 0.0f) + ) { return TRUE; } @@ -4584,15 +4592,15 @@ bool chrHasStoppedOrPatroling(ChrRecord *self) //chrHasStoppedOrPatroling */ bool chrCheckTargetInSight(ChrRecord *self) { - PropRecord *myprop; - PropRecord *bondprop; + PropRecord *myprop; + PropRecord *bondprop; f32 rrr; f32 vec2rd; - f32 myRadDirection; - coord3d vec; + f32 myRadDirection; + coord3d vec; f32 atn; - f32 radChangeToFaceBond; - bool pass; + f32 radChangeToFaceBond; + bool pass; u32 rt; s32 distance; @@ -4682,7 +4690,7 @@ bool chrCheckTargetInSight(ChrRecord *self) * @param self: * @param side: If GUNLEFT set result is (dz, -dx), otherwise (-dz, dx). * @param arg2: Out parameter. Contains result vector. - * + * * Address 0x7F02A044. */ void chrlvNormDistanceToPlayer(ChrRecord *self, GUNHAND side, vec3d *vec) @@ -4748,7 +4756,7 @@ s32 sub_GAME_7F02A0EC(ChrRecord *self, GUNHAND side, f32 distance) * @param self: * @param arg1: flag. If set result is (cos, -sin), otherwise (-cos, sin). * @param arg2: out parameter, contains coordinate result. - * + * * Address 0x7F02A15C. */ void chrlvModelRotyRelated(ChrRecord *self, s32 arg1, coord3d *arg2) @@ -4776,8 +4784,8 @@ void chrlvModelRotyRelated(ChrRecord *self, s32 arg1, coord3d *arg2) /** * chrIsClear - * @see sub_GAME_7F02A0EC - * + * @see sub_GAME_7F02A0EC + * * Address 0x7F02A1E8. */ s32 sub_GAME_7F02A1E8(ChrRecord *self, GUNHAND side, f32 distance) @@ -4803,7 +4811,7 @@ bool chrIsNotDeadOrShot(ChrRecord *self) { s8 currentaction = self->actiontype; - if ((currentaction == ACT_DIE) || (currentaction == ACT_DEAD) || (currentaction == ACT_PREARGH) + if ((currentaction == ACT_DIE) || (currentaction == ACT_DEAD) || (currentaction == ACT_PREARGH) || (currentaction == ACT_ARGH) && !(self->chrflags & CHRFLAG_00000200)) { return FALSE; @@ -4951,7 +4959,7 @@ bool actor_jogs_sideways(ChrRecord *self) myprop = self->prop; distToRun = ((u32)randomGetNext() * (1.0f / UINT_MAX) * 200.0f) + 200.0f; //random dist to run between 0 and 200 chrlvNormDistanceToPlayer(self, ((u32)randomGetNext() & 1) == 0, &TargetVector); //get vector to run on - + TargetCoord.x = (TargetVector.x * distToRun) + myprop->pos.x; TargetCoord.y = myprop->pos.y; TargetCoord.z = (TargetVector.z * distToRun) + myprop->pos.z; @@ -5224,6 +5232,12 @@ bool chrGoToPad(ChrRecord *self, s32 padid, SPEED speed) { return TRUE; } + #ifdef DEBUG + else + { + osSyncPrintf("could not go to pad %d!!!\n", padid); + } + #endif } else if (plot_course_for_actor(self, &pad->pos, stan, speed)) { @@ -5321,7 +5335,7 @@ void chrlvTickStand(ChrRecord *self) self->act_stand.reaim = 1; self->act_stand.turning = 1; - + if (((left != NULL) && (right != NULL)) || ((left == NULL) && (right == NULL)) || weaponIsOneHanded(left) @@ -5374,7 +5388,7 @@ void chrlvTickStand(ChrRecord *self) if (self->act_stand.checkfacingwall) { - if (self->chrflags & 0x80) + if (self->chrflags & CHRFLAG_00000080) { self->act_stand.checkfacingwall = 0; return; @@ -5389,7 +5403,7 @@ void chrlvTickStand(ChrRecord *self) for (i = 0; i < 8; i++) { temp_f0 += DegToRad(45); - + if (temp_f0 >= M_TAU_F) { temp_f0 -= M_TAU_F; @@ -5458,12 +5472,12 @@ void chrlvTickStand(ChrRecord *self) { i = sp44[index]; temp_f0 = ((f32)i * M_TAU_F * 0.125f) + subroty; - + if (temp_f0 >= M_TAU_F) { temp_f0 -= M_TAU_F; } - + check_set_actor_standing_still(self, 0x10, (s32) ((temp_f0 * M_U16_MAX_VALUE_F) / M_TAU_F)); } else @@ -5492,7 +5506,7 @@ void chrlvTickAnim(ChrRecord *self) if (self->act_init.padding[1] == 0) { f32 sp20 = objecthandlerGetModelField28(self->model); - + if (sub_GAME_7F06F5C4(self->model) <= sp20) { chrlvKneelingAnimationRelated(self); @@ -5502,14 +5516,15 @@ void chrlvTickAnim(ChrRecord *self) if ( ((s32)objecthandlerGetModelAnim(self->model) == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_sneeze]) && (objecthandlerGetModelField28(self->model) >= 42.0f) - && ((self->chrflags << 6) >= 0)) + && !(self->chrflags & CHRFLAG_02000000) + ) { if (((D_80048380 & 1) == 0) && (chrGetDistanceToBond(self) < 800.0f)) { chrobjSndCreatePostEventDefault(sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, 0x101, 0), &self->prop->pos); } - self->chrflags |= 0x2000000; + self->chrflags |= CHRFLAG_02000000; } if (((s32) self->sleep <= 0) && (self->act_init.padding[3] != 0)) @@ -5532,7 +5547,7 @@ void chrlvTickSurrender(ChrRecord *self) model = self->model; self->sleep = 0x10; - if (((s32)objecthandlerGetModelAnim(model) == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_surrendering_armed_drop_weapon]) + if (((s32)objecthandlerGetModelAnim(model) == (s32)&ptr_animation_table->data[(s32)&ANIM_DATA_surrendering_armed_drop_weapon]) && (objecthandlerGetModelField28(model) >= 80.0f)) { coord3d sp30 = D_80030A44; @@ -5583,7 +5598,7 @@ void chrlvTickDead(ChrRecord *self) /** * @param self: * @param flag: shot/die flag. 0 == shot, else die. - * + * * Address 0x7F02B800. */ void chrlvIterateGuardSeeShotDie(ChrRecord *self, s32 flag) @@ -5601,7 +5616,7 @@ void chrlvIterateGuardSeeShotDie(ChrRecord *self, s32 flag) numguards = get_numguards(); /* - * Maybe there's removed code in these if,elseif blocks? + * Maybe there's removed code in these if,elseif blocks? */ if (self->actiontype == ACT_ARGH) { @@ -5778,7 +5793,7 @@ void chrlvTickPreArgh(ChrRecord *self) * @see chrlvTickJumpout * @see chrlvTickTest * @see chrlvTickStartAlarm - * + * * Address 0x7F02BDA4. */ void chrlvTickSidestep(ChrRecord *self) @@ -5797,7 +5812,7 @@ void chrlvTickSidestep(ChrRecord *self) * @see chrlvTickSidestep * @see chrlvTickTest * @see chrlvTickStartAlarm - * + * * Address 0x7F02BE00. */ void chrlvTickJumpout(ChrRecord *self) @@ -5818,7 +5833,7 @@ void chrlvTickJumpout(ChrRecord *self) * @see chrlvTickSidestep * @see chrlvTickJumpout * @see chrlvTickStartAlarm - * + * * Address 0x7F02BE58. */ void chrlvTickTest(ChrRecord *self) @@ -5837,7 +5852,7 @@ void chrlvTickTest(ChrRecord *self) * @see chrlvTickSidestep * @see chrlvTickJumpout * @see chrlvTickTest - * + * * Address 0x7F02BEA8. */ void chrlvTickStartAlarm(ChrRecord *self) @@ -5887,13 +5902,13 @@ void chrlvTickSurprised(ChrRecord *self) #ifdef NONMATCHING /** * Address 0x7F02BFE4. - * + * * decomp status: * - compiles: yes * - stack resize: no * - identical instructions: fail * - identical registers: fail - * + * * notes: ChrRecord needs some changes, but not sure what to figure out the weird section below. */ void sub_GAME_7F02BFE4(ChrRecord *self, s32 arg1, s32 arg2) @@ -5949,7 +5964,7 @@ void sub_GAME_7F02BFE4(ChrRecord *self, s32 arg1, s32 arg2) // sndDeactivate(self->unk164[arg1]); // } // } - + // if (sp30 != 0) // { // phi_a2 = NULL; @@ -6004,7 +6019,7 @@ glabel sub_GAME_7F02BFE4 /* 060B6C 7F02C03C 24050001 */ li $a1, 1 /* 060B70 7F02C040 96180012 */ lhu $t8, 0x12($s0) /* 060B74 7F02C044 8FA80044 */ lw $t0, 0x44($sp) -/* 060B78 7F02C048 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) +/* 060B78 7F02C048 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) /* 060B7C 7F02C04C 33190080 */ andi $t9, $t8, 0x80 /* 060B80 7F02C050 1720000A */ bnez $t9, .L7F02C07C /* 060B84 7F02C054 00084880 */ sll $t1, $t0, 2 @@ -6013,7 +6028,7 @@ glabel sub_GAME_7F02BFE4 /* 060B90 7F02C060 8D8C837C */ lw $t4, %lo(g_GlobalTimer)($t4) /* 060B94 7F02C064 016C082A */ slt $at, $t3, $t4 /* 060B98 7F02C068 10200004 */ beqz $at, .L7F02C07C -/* 060B9C 7F02C06C 00000000 */ nop +/* 060B9C 7F02C06C 00000000 */ nop /* 060BA0 7F02C070 10000002 */ b .L7F02C07C /* 060BA4 7F02C074 24050001 */ li $a1, 1 /* 060BA8 7F02C078 24050001 */ li $a1, 1 @@ -6061,7 +6076,7 @@ glabel sub_GAME_7F02BFE4 .L7F02C10C: /* 060C3C 7F02C10C 8C79016C */ lw $t9, 0x16c($v1) /* 060C40 7F02C110 17200002 */ bnez $t9, .L7F02C11C -/* 060C44 7F02C114 00000000 */ nop +/* 060C44 7F02C114 00000000 */ nop /* 060C48 7F02C118 2466016C */ addiu $a2, $v1, 0x16c .L7F02C11C: /* 060C4C 7F02C11C 10C00017 */ beqz $a2, .L7F02C17C @@ -6079,7 +6094,7 @@ glabel sub_GAME_7F02BFE4 /* 060C7C 7F02C14C 8CC40000 */ lw $a0, ($a2) /* 060C80 7F02C150 0FC14E84 */ jal chrobjSndCreatePostEventDefault /* 060C84 7F02C154 24A50008 */ addiu $a1, $a1, 8 -/* 060C88 7F02C158 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) +/* 060C88 7F02C158 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) /* 060C8C 7F02C15C 8D8C837C */ lw $t4, %lo(g_GlobalTimer)($t4) /* 060C90 7F02C160 8FAD0028 */ lw $t5, 0x28($sp) /* 060C94 7F02C164 8FAF0024 */ lw $t7, 0x24($sp) @@ -6094,7 +6109,7 @@ glabel sub_GAME_7F02BFE4 /* 060CB0 7F02C180 8FB00018 */ lw $s0, 0x18($sp) /* 060CB4 7F02C184 27BD0040 */ addiu $sp, $sp, 0x40 /* 060CB8 7F02C188 03E00008 */ jr $ra -/* 060CBC 7F02C18C 00000000 */ nop +/* 060CBC 7F02C18C 00000000 */ nop ) #endif @@ -6242,7 +6257,7 @@ s32 chrlvSetSubroty(ChrRecord *self, s32 arg1, f32 arg2, f32 arg3, f32 arg4) else { roty -= temp_f14; - + if (roty < 0.0f) { roty += M_TAU_F; @@ -6269,7 +6284,7 @@ s32 chrlvSetSubroty(ChrRecord *self, s32 arg1, f32 arg2, f32 arg3, f32 arg4) * @param arg2: * @param arg3: * @param arg4: - * + * * Address 0x7F02C4C0. */ s32 chrlvUpdateAimendsideback(ChrRecord *self, struct weapon_firing_animation_table *arg1, s32 arg2, s32 arg3, f32 arg4) @@ -6283,7 +6298,7 @@ s32 chrlvUpdateAimendsideback(ChrRecord *self, struct weapon_firing_animation_ta f32 dy; // sp332 f32 dz; // sp328 f32 dxdydz_square; // sp324 - Model *self_model; + Model *self_model; PropRecord *self_prop; // sp316 s32 seen_bond_flag; // sp312 coord3d *current_player_pos; //sp308 @@ -6311,7 +6326,7 @@ s32 chrlvUpdateAimendsideback(ChrRecord *self, struct weapon_firing_animation_ta attack_type = self->act_stand.face_entitytype; entity_id = self->act_stand.face_entityid; } - + if ((attack_type & TARGET_FRONT_OF_CHR) == 0) { player_prop = get_curplayer_positiondata(); @@ -6343,7 +6358,7 @@ s32 chrlvUpdateAimendsideback(ChrRecord *self, struct weapon_firing_animation_ta if (attack_type & TARGET_BOND > 0) { ducking_height = bondviewGetPlayerDuckingHeightRelated(g_CurrentPlayer); - if ((self->chrflags & 0x20) != 0) + if ((self->chrflags & CHRSTART_FORCENOBLOOD) != 0) { if (((dx * dx) + (dy * dy) + (dz * dz)) < 160000.0f) { @@ -6429,11 +6444,11 @@ s32 chrlvUpdateAimendsideback(ChrRecord *self, struct weapon_firing_animation_ta Mtxf *temp_a0; struct ObjectRecord *obj; f32 t1; - + //////////////////////////////////////////// subroty = chrlvGetSubrotySideback(self); - + if (arg3) { weapon_prop = chrGetEquippedWeaponProp(self, GUNRIGHT); @@ -6449,7 +6464,7 @@ s32 chrlvUpdateAimendsideback(ChrRecord *self, struct weapon_firing_animation_ta obj = weapon_prop->obj; weapon_prop_model = obj->model; intersect_flag = 0; - + if (weapon_prop_model->obj->Switches[0]) { temp_a0 = modelFindNodeMtx(weapon_prop_model, weapon_prop_model->obj->Switches[0], 0); @@ -6587,7 +6602,7 @@ s32 chrlvUpdateAimendsideback(ChrRecord *self, struct weapon_firing_animation_ta /** * Calculates and sets chr aimendrshoulder, aimendlshoulder, and aimendback. * rshoulder defaults to 0.0f, lshoulder defaults to @param next. - * + * * @param self: * @param arg1: todo/fixme/hack: unsure of arg1 type. * @param same: When set, both shoulders will receive lshoulder value. Only @@ -6596,7 +6611,7 @@ s32 chrlvUpdateAimendsideback(ChrRecord *self, struct weapon_firing_animation_ta * and aimendlshoulder will get the rshoulder value. If both @param swap and * @param same is set they will both be set to lshoulder value. * @param next: Starting aimendlshoulder value. - * + * * Address 0x7F02D048. */ void chrlvUpdateAimendbackShoulders(ChrRecord *self, void *arg1, s32 same, s32 swap, f32 next) @@ -6693,7 +6708,7 @@ void chrSetFiring(ChrRecord *self, s32 hand, s32 firing) /** * Unreferenced. - * + * * Address 0x7F02D148. */ s32 sub_GAME_7F02D148(ChrRecord *self, s32 hand) @@ -6741,11 +6756,11 @@ void chrlvToggleHiddenRelated(ChrRecord *self, s32 hand, s32 arg2) } else if (hand == GUNLEFT) { - self->hidden &= 0xFFFB; // CHRHIDDEN_FIRE_WEAPON_LEFT + self->hidden &= ~CHRHIDDEN_FIRE_WEAPON_LEFT; // CHRHIDDEN_FIRE_WEAPON_LEFT } else { - self->hidden &= 0xFFF7; // CHRHIDDEN_FIRE_WEAPON_RIGHT + self->hidden &= ~CHRHIDDEN_FIRE_WEAPON_RIGHT; // CHRHIDDEN_FIRE_WEAPON_RIGHT } if (arg2 == 0) @@ -6792,7 +6807,7 @@ f32 chrlvGetAimLimitAngle(f32 sqdist) * @param arg1: out parameter. bool. Whether or not self has correct line of site to hit player. * @param arg2: out parameter. bool. True if damage done, false otherwise. * @param item: weapon doing damage - * + * * Address 0x7F02D2E4. */ void chrlvUpdateShotbondsum(ChrRecord *self, s32 *arg1, s32 *arg2, ITEM_IDS item) @@ -6819,12 +6834,12 @@ void chrlvUpdateShotbondsum(ChrRecord *self, s32 *arg1, s32 *arg2, ITEM_IDS item dx = player_prop->pos.f[0] - self_prop->pos.f[0]; dy = player_prop->pos.f[1] - self_prop->pos.f[1]; dz = player_prop->pos.f[2] - self_prop->pos.f[2]; - + atan = atan2f(dx, dz); subroty = chrlvGetSubrotySideback(self); phi_f2 = atan - subroty; dxdydz_square = (dx * dx) + (dy * dy) + (dz * dz); - + limit_angle = chrlvGetAimLimitAngle(dxdydz_square); if (phi_f2 < 0.0f) @@ -6920,7 +6935,7 @@ void chrlvUpdateShotbondsum(ChrRecord *self, s32 *arg1, s32 *arg2, ITEM_IDS item /** * Slight modification of a part of @see chrlvUpdateAimendsideback. - * + * * Address 0x7F02D630. */ s32 sub_GAME_7F02D630(ChrRecord *self, GUNHAND hand, coord3d *arg2) @@ -6934,7 +6949,7 @@ s32 sub_GAME_7F02D630(ChrRecord *self, GUNHAND hand, coord3d *arg2) f32 *spB8; Mtxf *temp_a0_2; // sp108 Mtxf sp68; // sp44 - + weapon_prop = chrGetEquippedWeaponProp(self, hand); ret = 0; @@ -7023,7 +7038,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) s32 sp44; s32 unused; f32 sp4C; - + self_prop = self->prop; weapon_prop = chrGetEquippedWeaponProp(self, hand); @@ -7049,7 +7064,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) { sp268 = 0; sp264 = 0; - + self->firecount[hand]++; if (bondwalkItemGetAutomaticFiringRate(prop_selfchr->act_attack.attack_item) < 0) @@ -7061,7 +7076,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) { sp268 = 1; - if ((((s32) self->firecount[hand] % (s32) (bondwalkItemGetAutomaticFiringRate(prop_selfchr->act_attack.attack_item) * 2)) == 0) + if ((((s32) self->firecount[hand] % (s32) (bondwalkItemGetAutomaticFiringRate(prop_selfchr->act_attack.attack_item) * 2)) == 0) || (prop_selfchr->act_attack.attack_item == ITEM_LASER)) { sp264 = 1; @@ -7098,7 +7113,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) } } - if (stanTestLineUnobstructed(&self_stan, self_prop->pos.x, self_prop->pos.f[2], sp240.f[0], sp240.f[2], 2, sp240.f[1] - self->ground, sp240.f[1] - self->ground, 0.0f, 1.0f) != 0) + if (stanTestLineUnobstructed(&self_stan, self_prop->pos.x, self_prop->pos.f[2], sp240.f[0], sp240.f[2], CDTYPE_DOORS, sp240.f[1] - self->ground, sp240.f[1] - self->ground, 0.0f, 1.0f) != 0) { sp238 = self_stan; } @@ -7113,22 +7128,22 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) sp234 = 0; sp230 = 0; sp22C = 1; - + sp21C = chrlvAttackRelated7F0292A8(self, &sp240, sp238); - + sp220.f[0] = cosf(sp24C) * sinf(subroty); sp220.f[1] = sinf(sp24C); sp220.f[2] = cosf(sp24C) * cosf(subroty); - + sp258.f[0] = sp240.f[0] + (sp220.f[0] * M_U16_MAX_VALUE_F); sp258.f[1] = sp240.f[1] + (sp220.f[1] * M_U16_MAX_VALUE_F); sp258.f[2] = sp240.f[2] + (sp220.f[2] * M_U16_MAX_VALUE_F); - + chrSetMoving(self, 0); sub_GAME_7F0B1CC4(); self_stan = sp238; - if (stanTestLineUnobstructed(&self_stan, sp240.f[0], sp240.f[2], sp258.f[0], sp258.f[2], 0x1B, sp240.f[1], sp240.f[1], sp258.f[1], sp258.f[1]) == 0) + if (stanTestLineUnobstructed(&self_stan, sp240.f[0], sp240.f[2], sp258.f[0], sp258.f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, sp240.f[1], sp240.f[1], sp258.f[1], sp258.f[1]) == 0) { chrlvStanLineDirIntersection(&sp240, &sp220, &sp258); sp254 = self_stan; @@ -7142,7 +7157,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) dx = sp258.f[0] - sp240.f[0]; dy = sp258.f[1] - sp240.f[1]; dz = sp258.f[2] - sp240.f[2]; - + sp20C = (dx * dx) + (dy * dy) + (dz * dz); if (prop_selfchr->act_attack.attack_item == ITEM_ROCKETLAUNCH) @@ -7156,7 +7171,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) matrix_4x4_set_rotation_around_x(sp24C, &sp16C); matrix_4x4_set_rotation_around_y(subroty, &sp12C); matrix_4x4_multiply_homogeneous_in_place(&sp12C, &sp16C); - + sp1AC.f[0] = sp220.f[0] * 1.111111f; sp1AC.f[1] = sp220.f[1] * 1.111111f; sp1AC.f[2] = sp220.f[2] * 1.111111f; @@ -7166,7 +7181,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) sp1BC.f[2] = sp1AC.f[2] * g_GlobalTimerDelta; sub_GAME_7F05EB0C((ObjectRecord *)sp208, &sp240, sp238, &sp16C, &sp1BC, &sp1C8, self_prop); - + if (sp208->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) { sp208->projectile->flags |= 0x80; @@ -7182,7 +7197,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) sp208->projectile->unk10.x = sp1AC.f[0]; sp208->projectile->unk10.y = sp1AC.f[1]; sp208->projectile->unk10.z = sp1AC.f[2]; - + if (sp208->projectile->sound1 == NULL) { sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, 1, (ALSoundState *)&sp208->projectile->sound1); @@ -7215,7 +7230,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) matrix_4x4_multiply_homogeneous_in_place(&sp5C, &sp9C); sp128->timer = CHRLV_DEFAULT_TIMER; sub_GAME_7F05EB0C((ObjectRecord *) sp128, &sp240, sp238, &sp9C, &spDC, &spE8, self_prop); - + if (sp128->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) { sp128->projectile->unk8C = 0.3f; @@ -7240,12 +7255,12 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) dx = (player_prop->pos.f[0] - sp240.f[0]) - (sp220.f[0] * 15.0f); dy = (player_prop->pos.f[1] - sp240.f[1]) - (sp220.f[1] * 15.0f); dz = (player_prop->pos.f[2] - sp240.f[2]) - (sp220.f[2] * 15.0f); - + if (((dx * dx) + (dy * dy) + (dz * dz)) <= sp20C) { chrlvUpdateShotbondsum(self, &sp234, &sp230, prop_selfchr->act_attack.attack_item); sp22C = sp230 == 0; - + if ((sp234 != 0) && ((self->actiontype == ACT_ATTACK) || (self->actiontype == ACT_ATTACKROLL))) { self->act_attack.attack_time = g_GlobalTimer; @@ -7271,9 +7286,9 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) else { if (( - (stanSavedColl_posData == NULL) + (stanSavedColl_posData == NULL) || ((stanSavedColl_posData->type != PROP_TYPE_CHR) && (stanSavedColl_posData->type != PROP_TYPE_VIEWER)) - ) + ) && (sp20C < 10000.0f)) { sp22C = 0; @@ -7293,7 +7308,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) if (stanSavedColl_posData->type == PROP_TYPE_CHR) { - if ((self->chrflags & 0x40) != 0) + if ((self->chrflags & CHRFLAG_CAN_SHOOT_CHRS) != 0) { handles_shot_actors(stanSavedColl_posData->chr, 0xF, &sp220, prop_selfchr->act_attack.attack_item, 0); } @@ -7316,7 +7331,7 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) if (sp264 != 0) { - switch (prop_selfchr->act_attack.attack_item) + switch (prop_selfchr->act_attack.attack_item) { case ITEM_WPPK: case ITEM_WPPKSIL: @@ -7367,20 +7382,20 @@ void chrlvFireWeaponRelated(ChrRecord *self, s32 hand) */ void chrlvTriggerFireWeapon(ChrRecord *self) { - self->hidden &= 0xFF7F; // CHRHIDDEN_FIRE_WEAPON_RIGHT + self->hidden &= ~CHRHIDDEN_FIRE_TRACER; if (self->hidden & CHRHIDDEN_FIRE_WEAPON_RIGHT) { chrlvFireWeaponRelated(self, GUNRIGHT); - self->hidden &= 0xFFF7; // CHRHIDDEN_FIRE_WEAPON_RIGHT + self->hidden &= ~CHRHIDDEN_FIRE_WEAPON_RIGHT; } if (self->hidden & CHRHIDDEN_FIRE_WEAPON_LEFT) { chrlvFireWeaponRelated(self, GUNLEFT); - self->hidden &= 0xFFFB; // CHRHIDDEN_FIRE_WEAPON_LEFT + self->hidden &= ~CHRHIDDEN_FIRE_WEAPON_LEFT; } } @@ -7487,9 +7502,9 @@ void chrlvTickAttackCommon(ChrRecord *self) if ( #ifdef REFRESH_PAL - (self->act_attack.attack_time < (self->act_attack.unk44 - 25)) + (self->act_attack.attack_time < (self->act_attack.unk44 - 25)) #else - (self->act_attack.attack_time < (self->act_attack.unk44 - 30)) + (self->act_attack.attack_time < (self->act_attack.unk44 - 30)) #endif && (self_model->anim2 == NULL)) { @@ -7509,7 +7524,7 @@ void chrlvTickAttackCommon(ChrRecord *self) self->act_attack.animfloats->anonymous_7, chrlvGetGuard007SpeedRating(self, 0.5f, 0.8f), 8.0f); - + if (self->act_attack.animfloats->anonymous_5 >= 0.0f) { modelSetAnimEndFrame(self_model, self->act_attack.animfloats->anonymous_5); @@ -7520,7 +7535,7 @@ void chrlvTickAttackCommon(ChrRecord *self) { chrlvAttackrollAnimationRelated7F02E3B8(self); } - + self->act_attack.unk33 = (s8) (self->act_attack.unk34 + 1); phi_f20 = objecthandlerGetModelField28(self_model); } @@ -7771,7 +7786,7 @@ void chrlvTickAttack(ChrRecord *self) phi_f2, chrlvGetGuard007SpeedRating(self, 0.5f, 0.8f), 16.0f); - + if (self->act_attack.animfloats->anonymous_5 >= 0.0f) { modelSetAnimEndFrame(self_model, self->act_attack.animfloats->anonymous_5); @@ -7844,7 +7859,7 @@ void chrlvTickAttack(ChrRecord *self) self->act_attack.animfloats->anonymous_9, chrlvGetGuard007SpeedRating(self, 0.5f, 0.8f), 16.0f); - + if (self->act_attack.unk37 != 0) { if (self->act_attack.animfloats->anonymous_5 >= 0.0f) @@ -7963,9 +7978,9 @@ void chrlvTickAttackRoll(ChrRecord *self) self->act_attackroll.unk30 = 2; self->act_attackroll.animfloats = phi_v1; self->sleep = 0; - + modelSetAnimation(temp_a0, (void *) phi_v1->anonymous_0, sp38, phi_v1->anonymous_4, chrlvGetGuard007SpeedRating(self, 0.5f, 0.8f), phi_f2_2); - + if (self->act_attackroll.unk36 != 0) { if (phi_v1->anonymous_9 >= 0.0f) @@ -8004,7 +8019,7 @@ void chrlvTickAttackRoll(ChrRecord *self) (self->act_attackroll.animfloats == &D_80030078[8]) || (self->act_attackroll.animfloats == &D_80030078[9]) || (self->act_attackroll.animfloats == &D_80030078[10]) - || (self->act_attackroll.animfloats == &D_80030078[11]) + || (self->act_attackroll.animfloats == &D_80030078[11]) || (self->act_attackroll.animfloats == &D_80030078[12]) || (self->act_attackroll.animfloats == &D_80030078[13]) || (self->act_attackroll.animfloats == &D_80030078[14]) @@ -8013,7 +8028,7 @@ void chrlvTickAttackRoll(ChrRecord *self) || (self->act_attackroll.animfloats == &D_80030078[17]) || (self->act_attackroll.animfloats == &D_80030078[18]) || (self->act_attackroll.animfloats == &D_80030078[19]) - ) + ) && (self->act_attackroll.unk36 == 0)) { if ((self->act_attackroll.animfloats->anonymous_9 > 0.0f) && (temp_f0 <= self->act_attackroll.animfloats->anonymous_9)) @@ -8021,7 +8036,7 @@ void chrlvTickAttackRoll(ChrRecord *self) if (sub_GAME_7F06F5C4(temp_a0) <= temp_f0) { modelSetAnimation(temp_a0, objecthandlerGetModelAnim(temp_a0), (s32) temp_a0->gunhand, self->act_attackroll.animfloats->anonymous_9, chrlvGetGuard007SpeedRating(self, 0.5f, 0.8f), 16.0f); - + if (self->act_attackroll.unk37 != 0) { if (self->act_attackroll.animfloats->anonymous_5 >= 0.0f) @@ -8073,7 +8088,7 @@ void chrlvTickThrowGrenade(ChrRecord *self) if ((temp_f2 >= 119.0f) && (held_prop != NULL)) { propobjSetDropped(self->weapons_held[gunhand], 3); - self->hidden |= 1; + self->hidden |= CHRHIDDEN_DROP_HELD_ITEMS; } if (objecthandlerGetModelField28(self_model) >= sub_GAME_7F06F5C4(self_model)) @@ -8403,7 +8418,7 @@ void chrlvTickAttackWalk(ChrRecord *self) * @param arg1: 3 vec * @param arg0: point in 3d * @param arg0: scalar value - * + * * Address 0x7F02FC34. */ s32 chrlvGeometryRelated7F02FC34(coord3d *arg0, coord3d *arg1, coord3d *arg2, f32 arg3) @@ -8413,7 +8428,7 @@ s32 chrlvGeometryRelated7F02FC34(coord3d *arg0, coord3d *arg1, coord3d *arg2, f3 dd.f[0] = arg2->f[0] - arg0->f[0]; dd.f[2] = arg2->f[2] - arg0->f[2]; - + if ((arg1->f[0] == 0.0f) && (arg1->f[2] == 0.0f)) { return ((dd.f[0] * dd.f[0]) + (dd.f[2] * dd.f[2])) <= (arg3 * arg3); @@ -8445,9 +8460,9 @@ s32 chrlvGeometryRelated7F02FC34(coord3d *arg0, coord3d *arg1, coord3d *arg2, f3 * @param curpos: 3 vec * @param prevpos: point in 3d * @param prevpos: scalar value - * + * * Address 0x7F02FD50. - * + * * PD posIsArrivingLaterallyAtPos. */ s32 chrlvIsArrivingLaterallyAtPos(coord3d *prevpos, coord3d *curpos, coord3d *targetpos, f32 range) @@ -8512,7 +8527,7 @@ void chrlvTickRunPos(ChrRecord *self) objecthandlerGetModelAnim(self_model); phi_f2 = objecthandlerGetModelField28(self_model) - offset; - + if (phi_f2 < 0.0f) { phi_f2 += (f32)objecthandlerGetModelAnim(self_model)->unk04; @@ -8566,7 +8581,7 @@ void chrlvTickRunPos(ChrRecord *self) /** * Address 0x7F030128. */ -s32 sub_GAME_7F030128(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d *dest, StandTile * arg4, s32 objflags) +s32 sub_GAME_7F030128(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d *dest, StandTile * arg4, s32 cdtypes) { StandTile *sp44; s32 sp40; @@ -8576,13 +8591,13 @@ s32 sub_GAME_7F030128(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d sp44 = arg2; sp40 = 0; - + chrGetChrWidthHeight(self->prop, &sp34, &sp3C, &sp38); - + chrSetMoving(self, 0); - + if ( - stanTestLineUnobstructed(&sp44, point->f[0], point->f[2], dest->f[0], dest->f[2], objflags, sp3C, sp38, 0.0f, 1.0f) + stanTestLineUnobstructed(&sp44, point->f[0], point->f[2], dest->f[0], dest->f[2], cdtypes, sp3C, sp38, 0.0f, 1.0f) && ((arg4 == NULL) || (sp44 == arg4))) { sp40 = 1; @@ -8598,7 +8613,7 @@ s32 sub_GAME_7F030128(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d /** * Address 0x7F0301FC. */ -s32 sub_GAME_7F0301FC(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d *dest, f32 arg4, s32 arg5) +s32 sub_GAME_7F0301FC(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d *dest, f32 arg4, s32 cdtypes) { StandTile *pstan; coord3d dd; @@ -8626,7 +8641,7 @@ s32 sub_GAME_7F0301FC(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d { norm = (dd.f[0] * dd.f[0]) + (dd.f[2] * dd.f[2]); norm = 1.0f / sqrtf(norm); - + dd.f[0] *= norm; dd.f[2] *= norm; @@ -8637,13 +8652,13 @@ s32 sub_GAME_7F0301FC(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d pstan = arg2; - if (stanTestLineUnobstructed(&pstan, point->f[0], point->f[2], point->f[0] + temp_f22, point->f[2] - temp_f20, arg5, sp64, sp60, 0.0f, 1.0f) - && stanTestLineUnobstructed(&pstan, point->f[0] + temp_f22, point->f[2] - temp_f20, dest->f[0] + temp_f22, dest->f[2] - temp_f20, arg5, sp64, sp60, 0.0f, 1.0f)) + if (stanTestLineUnobstructed(&pstan, point->f[0], point->f[2], point->f[0] + temp_f22, point->f[2] - temp_f20, cdtypes, sp64, sp60, 0.0f, 1.0f) + && stanTestLineUnobstructed(&pstan, point->f[0] + temp_f22, point->f[2] - temp_f20, dest->f[0] + temp_f22, dest->f[2] - temp_f20, cdtypes, sp64, sp60, 0.0f, 1.0f)) { pstan = arg2; - if (stanTestLineUnobstructed(&pstan, point->f[0], point->f[2], point->f[0] - temp_f22, point->f[2] + temp_f20, arg5, sp64, sp60, 0.0f, 1.0f) - && stanTestLineUnobstructed(&pstan, point->f[0] - temp_f22, point->f[2] + temp_f20, dest->f[0] - temp_f22, dest->f[2] + temp_f20, arg5, sp64, sp60, 0.0f, 1.0f)) + if (stanTestLineUnobstructed(&pstan, point->f[0], point->f[2], point->f[0] - temp_f22, point->f[2] + temp_f20, cdtypes, sp64, sp60, 0.0f, 1.0f) + && stanTestLineUnobstructed(&pstan, point->f[0] - temp_f22, point->f[2] + temp_f20, dest->f[0] - temp_f22, dest->f[2] + temp_f20, cdtypes, sp64, sp60, 0.0f, 1.0f)) { ret = 1; } @@ -8660,7 +8675,7 @@ s32 sub_GAME_7F0301FC(ChrRecord *self, coord3d *point, StandTile *arg2, coord3d /** * Address 0x7F0304AC. */ -s32 sub_GAME_7F0304AC(ChrRecord *self, coord3d *mypos, StandTile *mystan, coord3d *arg3, coord3d *bondpos, StandTile *bondstan, s32 arg6) +s32 sub_GAME_7F0304AC(ChrRecord *self, coord3d *mypos, StandTile *mystan, coord3d *arg3, coord3d *bondpos, StandTile *bondstan, s32 cdtypes) { StandTile *sp44; bool pass; @@ -8675,11 +8690,11 @@ s32 sub_GAME_7F0304AC(ChrRecord *self, coord3d *mypos, StandTile *mystan, coord3 chrGetChrWidthHeight(self->prop, &sp34, &sp3C, &sp38); chrSetMoving(self, 0); - if (stanTestLineUnobstructed(&sp44, mypos->x, mypos->z, arg3->x, arg3->z, arg6, sp3C, sp38, 0.0f, 1.0f)) + if (stanTestLineUnobstructed(&sp44, mypos->x, mypos->z, arg3->x, arg3->z, cdtypes, sp3C, sp38, 0.0f, 1.0f)) { sp30 = sp44; // duplicate var? needed? - if (stanTestLineUnobstructed(&sp30, arg3->x, arg3->z, bondpos->x, bondpos->z, arg6, sp3C, sp38, 0.0f, 1.0f) + if (stanTestLineUnobstructed(&sp30, arg3->x, arg3->z, bondpos->x, bondpos->z, cdtypes, sp3C, sp38, 0.0f, 1.0f) && ((bondstan == NULL) || (sp30 == bondstan))) { pass = TRUE; @@ -8695,10 +8710,10 @@ s32 sub_GAME_7F0304AC(ChrRecord *self, coord3d *mypos, StandTile *mystan, coord3 /** * Unreferenced. - * + * * Address 0x7F0305E0. */ -s32 sub_GAME_7F0305E0(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, f32 arg5, s32 arg6) +s32 sub_GAME_7F0305E0(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, f32 arg5, s32 cdtypes) { StandTile *sp4C; s32 sp48; @@ -8713,13 +8728,13 @@ s32 sub_GAME_7F0305E0(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * chrGetChrWidthHeight(self->prop, &sp3C, &sp44, &sp40); chrSetMoving(self, 0); - if (stanTestLineUnobstructed(&sp4C, arg1->x, arg1->f[2], arg3->x, arg3->f[2], arg6, sp44, sp40, 0.0f, 1.0f)) + if (stanTestLineUnobstructed(&sp4C, arg1->x, arg1->f[2], arg3->x, arg3->f[2], cdtypes, sp44, sp40, 0.0f, 1.0f)) { sp38 = sp4C; - if (stanTestLineUnobstructed(&sp38, arg3->x, arg3->f[2], arg4->x, arg4->f[2], arg6, sp44, sp40, 0.0f, 1.0f) - && sub_GAME_7F0301FC(self, arg1, arg2, arg3, arg5, arg6) - && sub_GAME_7F0301FC(self, arg3, sp4C, arg4, arg5, arg6)) + if (stanTestLineUnobstructed(&sp38, arg3->x, arg3->f[2], arg4->x, arg4->f[2], cdtypes, sp44, sp40, 0.0f, 1.0f) + && sub_GAME_7F0301FC(self, arg1, arg2, arg3, arg5, cdtypes) + && sub_GAME_7F0301FC(self, arg3, sp4C, arg4, arg5, cdtypes)) { sp48 = 1; } @@ -8772,7 +8787,7 @@ void chrlvSwapIfDiffArg2Determinate(coord3d *arg0, coord3d *arg1, coord3d *arg2) * Very similar to @see sub_GAME_7F030D70 . * Address 0x7F03081C. */ -s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 arg6, f32 arg7, s32 arg8) +s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 arg6, f32 arg7, s32 cdtypes) { StandTile *spAC; coord3d spA0; @@ -8801,7 +8816,7 @@ s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * spA0.f[0] = arg3->f[0] - arg1->f[0]; spA0.f[1] = 0.0f; spA0.f[2] = arg3->f[2] - arg1->f[2]; - + if ((spA0.f[0] == 0.0f) && (spA0.f[2] == 0.0f)) { return 1; @@ -8812,7 +8827,7 @@ s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * spA0.f[0] *= norm; spA0.f[2] *= norm; - + sp9C = 0.95f * (arg7 * spA0.f[0]); sp98 = 0.95f * (arg7 * spA0.f[2]); @@ -8830,7 +8845,7 @@ s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * arg1->f[2], arg1->f[0] + sp98, arg1->f[2] - sp9C, - arg8, + cdtypes, sp4C, sp48, 0.0f, @@ -8841,7 +8856,7 @@ s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * arg1->f[2] - sp9C, (arg3->f[0] + sp90) + (spA0.f[0] * arg6), (arg3->f[2] - sp94) + (spA0.f[2] * arg6), - arg8, + cdtypes, sp4C, sp48, 0.0f, @@ -8861,7 +8876,7 @@ s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * arg1->f[2], arg1->f[0] - sp98, arg1->f[2] + sp9C, - arg8, + cdtypes, sp4C, sp48, 0.0f, @@ -8872,7 +8887,7 @@ s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * arg1->f[2] + sp9C, (arg3->f[0] - sp90) + (spA0.f[0] * arg6), (arg3->f[2] + sp94) + (spA0.f[2] * arg6), - arg8, + cdtypes, sp4C, sp48, 0.0f, @@ -8921,8 +8936,8 @@ s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * { spAC = arg2; - if (stanTestLineUnobstructed(&spAC, arg1->f[0], arg1->f[2], arg3->f[0], arg3->f[2], arg8, sp4C, sp48, 0.0f, 1.0f) - && stanTestVolume(&spAC, arg3->f[0], arg3->f[2], arg7, arg8, sp4C, sp48) < 0) + if (stanTestLineUnobstructed(&spAC, arg1->f[0], arg1->f[2], arg3->f[0], arg3->f[2], cdtypes, sp4C, sp48, 0.0f, 1.0f) + && stanTestVolume(&spAC, arg3->f[0], arg3->f[2], arg7, cdtypes, sp4C, sp48) < 0) { sp50 = 1; } @@ -8941,10 +8956,10 @@ s32 sub_GAME_7F03081C(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * /** * Very similar to @see sub_GAME_7F03081C . - * + * * Address 0x7F030D70. */ -s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 arg6, f32 arg7, s32 arg8) +s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d *arg3, coord3d *arg4, coord3d *arg5, f32 arg6, f32 arg7, s32 cdtypes) { StandTile *spAC; coord3d spA0; @@ -8975,7 +8990,7 @@ s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * spA0.f[0] = arg3->f[0] - arg1->f[0]; spA0.f[1] = 0.0f; spA0.f[2] = arg3->f[2] - arg1->f[2]; - + if ((spA0.f[0] == 0.0f) && (spA0.f[2] == 0.0f)) { return 1; @@ -8986,7 +9001,7 @@ s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * spA0.f[0] *= norm; spA0.f[2] *= norm; - + sp9C = 0.95f * (arg7 * spA0.f[0]); sp98 = 0.95f * (arg7 * spA0.f[2]); @@ -9004,7 +9019,7 @@ s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * arg1->f[2], arg1->f[0] + sp98, arg1->f[2] - sp9C, - arg8, + cdtypes, sp4C, sp48, 0.0f, @@ -9015,7 +9030,7 @@ s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * arg1->f[2] - sp9C, (arg3->f[0] + sp90) + (spA0.f[0] * arg6), (arg3->f[2] - sp94) + (spA0.f[2] * arg6), - arg8, + cdtypes, sp4C, sp48, 0.0f, @@ -9037,7 +9052,7 @@ s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * arg1->f[2], arg1->f[0] - sp98, arg1->f[2] + sp9C, - arg8, + cdtypes, sp4C, sp48, 0.0f, @@ -9048,7 +9063,7 @@ s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * arg1->f[2] + sp9C, (arg3->f[0] - sp90) + (spA0.f[0] * arg6), (arg3->f[2] + sp94) + (spA0.f[2] * arg6), - arg8, + cdtypes, sp4C, sp48, 0.0f, @@ -9109,8 +9124,8 @@ s32 sub_GAME_7F030D70(ChrRecord *self, coord3d *arg1, StandTile *arg2, coord3d * { spAC = arg2; - if (stanTestLineUnobstructed(&spAC, arg1->f[0], arg1->f[2], arg3->f[0], arg3->f[2], arg8, sp4C, sp48, 0.0f, 1.0f) - && stanTestVolume(&spAC, arg3->f[0], arg3->f[2], arg7, arg8, sp4C, sp48) < 0) + if (stanTestLineUnobstructed(&spAC, arg1->f[0], arg1->f[2], arg3->f[0], arg3->f[2], cdtypes, sp4C, sp48, 0.0f, 1.0f) + && stanTestVolume(&spAC, arg3->f[0], arg3->f[2], arg7, cdtypes, sp4C, sp48) < 0) { sp50 = 1; } @@ -9141,7 +9156,7 @@ s32 sub_GAME_7F03130C( coord3d *arg6, struct waydata *arg7, f32 arg8, - s32 arg9, + s32 cdtypes, s32 set_copy) { PropRecord *self_prop; // -- 124 @@ -9197,8 +9212,8 @@ s32 sub_GAME_7F03130C( sp64.f[1] = arg1->f[1]; sp64.f[2] = arg1->f[2] + sp50.f[2]; - if (sub_GAME_7F03081C(self, &self_prop->pos, self_prop->stan, &sp64, sp4C, sp48, arg8, self->chrwidth, arg9) - && ((arg5 == 0) || sub_GAME_7F0304AC(self, &self_prop->pos, self_prop->stan, &sp64, arg6, NULL, arg9))) + if (sub_GAME_7F03081C(self, &self_prop->pos, self_prop->stan, &sp64, sp4C, sp48, arg8, self->chrwidth, cdtypes) + && ((arg5 == 0) || sub_GAME_7F0304AC(self, &self_prop->pos, self_prop->stan, &sp64, arg6, NULL, cdtypes))) { if (set_copy != 0) { @@ -9229,11 +9244,11 @@ s32 sub_GAME_7F03130C( * Iterates travel mode. Used by both ACT_GOPOS and ACT_PATROL. * 10% chance to open door. * Calls apply speed. - * + * * @see chrlvTickPatrol * @see chrlvTickGoPos * contrast with @see chrlvTravelTickMagic - * + * * Address 0x7F0315A4. */ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct waydata *arg3) @@ -9261,16 +9276,16 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way s32 max; f32 atan_pos; s32 temp_t1; - s32 phi_s6; + s32 cdtypes; PropRecord *phi_s3; s32 stack_01; s32 stack_02; self_prop = self->prop; - phi_s6 = 0x801D; + cdtypes = CDTYPE_OBJS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER | CDTYPE_DOORSLOCKEDTOAI; if ((self->hidden & CHRHIDDEN_OFFSCREEN_PATROL) != 0) { - phi_s6 = 0x1F; + cdtypes = CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER; } max=1; @@ -9282,7 +9297,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way sp100.f[1] = arg1->f[1]; sp100.f[2] = arg1->f[2]; - if (sub_GAME_7F03081C(self, &self_prop->pos, self_prop->stan, &sp100, &arg3->pos2, &arg3->pos3, -(self->chrwidth), self->chrwidth, 0x10) != 0) + if (sub_GAME_7F03081C(self, &self_prop->pos, self_prop->stan, &sp100, &arg3->pos2, &arg3->pos3, -(self->chrwidth), self->chrwidth, CDTYPE_PATHBLOCKER) != 0) { arg3->unk02 = (u8) 1; arg3->pos.f[0] = sp100.f[0]; @@ -9344,7 +9359,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way { arg3->unk02 = 0; arg3->unk03 = (u8) (s8) arg3->unk02; - arg3->pos_copy.f[0] = + arg3->pos_copy.f[0] = arg3->pos.f[0] = arg1->f[0]; arg3->pos_copy.f[1] = arg3->pos.f[1] = arg1->f[1]; @@ -9356,7 +9371,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way } else if (arg3->mode == WAYMODE_4) { - if (sub_GAME_7F030D70(self, &self_prop->pos, self_prop->stan, &arg3->pos, &arg3->pos2, &arg3->pos3, -(self->chrwidth), self->chrwidth, phi_s6) != 0) + if (sub_GAME_7F030D70(self, &self_prop->pos, self_prop->stan, &arg3->pos, &arg3->pos2, &arg3->pos3, -(self->chrwidth), self->chrwidth, cdtypes) != 0) { arg3->unk03 = max; arg3->mode = WAYMODE_0; @@ -9410,7 +9425,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way if (atan_pos2_a < atan_pos3_a) { - if (sub_GAME_7F03130C(self, &arg3->pos2, 1, &spF4, spe0, 0, NULL, arg3, spe0 * 1.1f, phi_s6, 1) != 0) + if (sub_GAME_7F03130C(self, &arg3->pos2, 1, &spF4, spe0, 0, NULL, arg3, spe0 * 1.1f, cdtypes, 1) != 0) { arg3->mode = WAYMODE_0; break; @@ -9446,7 +9461,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way atan_pos3_b = -atan_pos3_b; } - if ((atan_pos3_b < atan_pos2_b) && (sub_GAME_7F03130C(self, &spF4, 0, &spF4, spe0, 0, NULL, arg3, spe0 * 1.1f, phi_s6, 1) != 0)) + if ((atan_pos3_b < atan_pos2_b) && (sub_GAME_7F03130C(self, &spF4, 0, &spF4, spe0, 0, NULL, arg3, spe0 * 1.1f, cdtypes, 1) != 0)) { arg3->mode = WAYMODE_0; break; @@ -9455,7 +9470,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way } else { - if (sub_GAME_7F03130C(self, &arg3->pos3, 0, &spF4, spe0, 0, NULL, arg3, spe0 * 1.1f, phi_s6, 1) != 0) + if (sub_GAME_7F03130C(self, &arg3->pos3, 0, &spF4, spe0, 0, NULL, arg3, spe0 * 1.1f, cdtypes, 1) != 0) { arg3->mode = WAYMODE_0; break; @@ -9464,7 +9479,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way { atan_pos2_c = atan_pos - atan2f(arg3->pos3.f[0] - self_prop->pos.f[0], arg3->pos3.f[2] - self_prop->pos.f[2]); atan_pos3_c = atan_pos - atan2f(spF4.f[0] - self_prop->pos.f[0], spF4.f[2] - self_prop->pos.f[2]); - + if (atan_pos2_c < 0.0f) { atan_pos2_c = atan_pos2_c + M_TAU_F; @@ -9491,7 +9506,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way atan_pos3_c = -atan_pos3_c; } - if ((atan_pos3_c < atan_pos2_c) && (sub_GAME_7F03130C(self, &spF4, 1, &spF4, spe0, 0, NULL, arg3, spe0 * 1.1f, phi_s6, 1) != 0)) + if ((atan_pos3_c < atan_pos2_c) && (sub_GAME_7F03130C(self, &spF4, 1, &spF4, spe0, 0, NULL, arg3, spe0 * 1.1f, cdtypes, 1) != 0)) { arg3->mode = WAYMODE_0; break; @@ -9574,7 +9589,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way } } } - + if (self->actiontype == ACT_PATROL) { chrlvApplySpeed(self, &arg3->pos_copy, 0, &self->act_patrol.speed); @@ -9582,7 +9597,7 @@ void chrlvTravelTick(ChrRecord *self, coord3d *arg1, StandTile *arg2, struct way else { chrlvApplySpeed(self, &arg3->pos_copy, (s32) self->act_gopos.unk59, &self->act_gopos.speed); - + if (self->act_gopos.unk59 == 2) { if (self->act_gopos.speed != 0.0f) @@ -9664,7 +9679,7 @@ void chrlvTickGoPos(ChrRecord *self) return; } - + if (self->act_gopos.waydata.mode == WAYMODE_MAGIC) { chrlvActGoposRelated(self, &sp58, &sp54); @@ -9674,7 +9689,7 @@ void chrlvTickGoPos(ChrRecord *self) { chrlvActGoposSetTargetPosRelated(self); self->act_gopos.unk9c = g_GlobalTimer; - + return; } @@ -9734,8 +9749,8 @@ void chrlvTickGoPos(ChrRecord *self) wp_stan = self->act_gopos.target; } - if (sub_GAME_7F030128(self, &self_prop->pos, self_prop->stan, wp_pos, wp_stan, 0x10) - && sub_GAME_7F0301FC(self, &self_prop->pos, self_prop->stan, wp_pos, self->chrwidth * 1.2f, 0x10)) + if (sub_GAME_7F030128(self, &self_prop->pos, self_prop->stan, wp_pos, wp_stan, CDTYPE_PATHBLOCKER) + && sub_GAME_7F0301FC(self, &self_prop->pos, self_prop->stan, wp_pos, self->chrwidth * 1.2f, CDTYPE_PATHBLOCKER)) { chrlvActGoposIncCurIndex(self); chrlvActGoposIncCurIndex(self); @@ -9764,8 +9779,8 @@ void chrlvTickGoPos(ChrRecord *self) wp_stan = self->act_gopos.target; } - if (sub_GAME_7F030128(self, &self_prop->pos, self_prop->stan, wp_pos, wp_stan, 0x10) - && sub_GAME_7F0301FC(self, &self_prop->pos, self_prop->stan, wp_pos, self->chrwidth * 1.2f, 0x10)) + if (sub_GAME_7F030128(self, &self_prop->pos, self_prop->stan, wp_pos, wp_stan, CDTYPE_PATHBLOCKER) + && sub_GAME_7F0301FC(self, &self_prop->pos, self_prop->stan, wp_pos, self->chrwidth * 1.2f, CDTYPE_PATHBLOCKER)) { chrlvActGoposIncCurIndex(self); } @@ -9856,23 +9871,23 @@ void chrlvActionTick(ChrRecord *self) { if (self->actiontype == ACT_INIT) { - self->chrflags |= 1; + self->chrflags |= CHRFLAG_INIT; chrlvIdleAnimationRelated7F023A94(self, 0.0f); self->sleep = 0; } - if ((self->hidden & 0x40) != 0) + if ((self->hidden & CHRHIDDEN_TIMER_ACTIVE) != 0) { self->timer60 += g_ClockTimer; } self->sleep -= g_ClockTimer; - if (((s32) self->sleep < 0) || (self->chrflags & 0x40000)) + if (((s32)self->sleep < 0) || (self->chrflags & CHRFLAG_00040000)) { self->sleep = 0; ai(self, PROP_TYPE_CHR); - + switch (self->actiontype) { case ACT_STAND: @@ -9942,11 +9957,11 @@ void chrlvActionTick(ChrRecord *self) chrlvTickBondDieRemoved(self); break; } - - self->chrflags &= -5; - self->hidden &= 0xFDFD; - self->chrseeshot = -1; - self->chrseedie = -1; + + self->chrflags &= ~CHRFLAG_NEAR_MISS; + self->hidden &= ~(CHRHIDDEN_ALERT_GUARD_RELATED | CHRHIDDEN_BACKGROUND_AI); + self->chrseeshot = CHR_FREE; + self->chrseedie = CHR_FREE; } } } @@ -9954,7 +9969,7 @@ void chrlvActionTick(ChrRecord *self) /** * Calls chrlvActionTick on all characters, and updates count of guards that have recently seen bond. - * + * * Address 0x7F03291C. */ void chrlvAllChrTick(void) @@ -10057,7 +10072,7 @@ f32 chrGetAngleToBond(ChrRecord *self) * @param lookup_id: Lookup id for guard or preset. * @param stan: Out parameter. Will contain found stan. * @returns: Position of found item (depends on lookup mode). - * + * * Address 0x7F032C78. */ coord3d *chrlvGetChrOrPresetLocation(ChrRecord *self, s32 flags, s32 lookup_id, StandTile **stan) @@ -10101,7 +10116,7 @@ coord3d *chrlvGetChrOrPresetLocation(ChrRecord *self, s32 flags, s32 lookup_id, player_prop = get_curplayer_positiondata(); *stan = (StandTile *) player_prop->stan; - + return &player_prop->pos; } @@ -10198,7 +10213,7 @@ bool check_if_room_for_preset_loaded(ChrRecord *self, s32 padnum) if (padstan) { - return getROOMID_Bitflags(getTileRoom(padstan)); + return getROOMID_isRendered(getTileRoom(padstan)); } return FALSE; @@ -10210,6 +10225,12 @@ s32 chrResolvePadId(ChrRecord *guardData,s32 padNo) // Guard's target pad. if (padNo == PAD_PRESET1) { + #ifdef DEBUG + if (guardData->padpreset1 < 0) + { + osSyncPrintf("preset less than zero char = %d\n", guardData->chrnum); + } + #endif padNo = (s32)guardData->padpreset1; } @@ -10304,7 +10325,7 @@ f32 chrGetDistanceToChr(ChrRecord *self, s32 chrID) SQR(chr->prop->pos.y - myprop->pos.y) + SQR(chr->prop->pos.z - myprop->pos.z)); } - + return distance; } @@ -10605,7 +10626,7 @@ bool chrGoToChr(ChrRecord *self, s32 chrid, SPEED speed) /** * Return number of hits. - * + * * Address 0x7F0335A4. * PD: chrGetNumArghs */ @@ -10618,7 +10639,7 @@ s8 chrGetNumArghs(ChrRecord *self) /** * Return number of near misses - * + * * Address 0x7F0335AC. * PD: chrGetNumCloseArghs */ @@ -10630,7 +10651,7 @@ s8 chrGetNumCloseArghs(ChrRecord *self) /** * Return false if chrseeshot is negative. - * + * * Address 0x7F0335B4. */ bool chrSawInjury(ChrRecord *self) @@ -10641,7 +10662,7 @@ bool chrSawInjury(ChrRecord *self) /** * Return false if chrseedie is negative. - * + * * Address 0x7F0335C4. */ bool chrSawDeath(ChrRecord *self) @@ -10737,11 +10758,11 @@ bool check_if_able_to_then_kneel(ChrRecord *self) /** * Address 0x7F033700. */ -s32 check_if_able_to_then_perform_animation(ChrRecord *self, s32 animID, s32 b, s32 c, u8 d, s32 e) +s32 check_if_able_to_then_perform_animation(ChrRecord *self, s32 animID, s32 startframe, s32 endframe, u8 bitfield, s32 interpol_time60) { if (chrIsNotDeadOrShot(self)) { - chrlvPerformAnimationForActor(self, animID, b, c, d, e); + chrlvPerformAnimationForActor(self, animID, startframe, endframe, bitfield, interpol_time60); return TRUE; } @@ -10783,7 +10804,7 @@ s32 sub_GAME_7F033780(waypoint *arg0, coord3d *arg1, f32 angle) pad = &g_CurrentSetup.pads[arg0->padID]; dx = pad->pos.f[0] - arg1->f[0]; dz = pad->pos.f[2] - arg1->f[2]; - + temp_f0 = atan2f(dx, dz); ff = angle - temp_f0; @@ -10885,17 +10906,17 @@ bool check_2328_preset_set_with_method(ChrRecord *self, u8 quadrant) { PropRecord *myprop; PropRecord *bondprop; - + waypoint *myclosestwaypoint; waypoint *bondsclosestwaypoint; waypoint *sp2C[PATH_FINDING_WP_LIMIT]; - + if ((quadrant == QUADRANT_2NDWPTOTARGET) || (quadrant == QUADRANT_20)) { myprop = self->prop; bondprop = get_curplayer_positiondata(); - myclosestwaypoint = chrlvStanPathRelated(&myprop->pos, myprop->stan); + myclosestwaypoint = chrlvStanPathRelated(&myprop->pos, myprop->stan); bondsclosestwaypoint = chrlvStanPathRelated(&bondprop->pos, bondprop->stan); if (myclosestwaypoint != NULL && bondsclosestwaypoint != NULL) @@ -10909,7 +10930,7 @@ bool check_2328_preset_set_with_method(ChrRecord *self, u8 quadrant) return TRUE; } } - else + else { myclosestwaypoint = sub_GAME_7F08FB90(myclosestwaypoint, bondsclosestwaypoint); if (myclosestwaypoint != NULL) @@ -11116,22 +11137,22 @@ s32 chrIsTargetNearlyInSight(ChrRecord *self) * Address 0x7F033EAC. * PD: chrIsPosOffScreen */ -s32 sub_GAME_7F033EAC(coord3d *arg0, StandTile *arg1) +s32 chrIsPosOffScreen(coord3d *arg0, StandTile *tile) { bool offscreen; - bbox2d sp1C; + bbox2d box; offscreen = TRUE; - if (getROOMID_Bitflags(getTileRoom(arg1)) && fogPositionIsVisibleThroughFog(arg0, 0.0f)) + if (getROOMID_isRendered(getTileRoom(tile)) && fogPositionIsVisibleThroughFog(arg0, 0.0f)) { - if (bgGet2dBboxByRoomId(getTileRoom(arg1), &sp1C)) + if (bgGet2dBboxByRoomId(getTileRoom(tile), &box)) { - offscreen = camIsPosInScreenBox(arg0, 200.0f, &sp1C) == 0; + offscreen = camIsPosInScreenBox(arg0, 200.0f, &box) == 0; } else { - offscreen = sub_GAME_7F078A58(arg0, 200.0f) == 0; + offscreen = camIsPosInScreen(arg0, 200.0f) == 0; } } @@ -11143,7 +11164,7 @@ s32 sub_GAME_7F033EAC(coord3d *arg0, StandTile *arg1) * Address 0x7F033F48. * PD: chrAdjustPosForSpawn */ -bool sub_GAME_7F033F48(coord3d *pos, StandTile **arg1, f32 facing, bool allowonscreen) +bool chrAdjustPosForSpawn(coord3d *pos, StandTile **arg1, f32 facing, bool allowonscreen) { coord3d testpos; StandTile *s; @@ -11153,8 +11174,8 @@ bool sub_GAME_7F033F48(coord3d *pos, StandTile **arg1, f32 facing, bool allowons s = *arg1; spp = &s; - if ((stanTestVolume(spp, pos->f[0], pos->z, 20.0f, 0x1F, 0.0f, 1.0f) < 0) && - (allowonscreen || sub_GAME_7F033EAC(pos, *arg1))) + if ((stanTestVolume(spp, pos->f[0], pos->z, 20.0f, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, 0.0f, 1.0f) < 0) && + (allowonscreen || chrIsPosOffScreen(pos, *arg1))) { return TRUE; } @@ -11167,9 +11188,9 @@ bool sub_GAME_7F033F48(coord3d *pos, StandTile **arg1, f32 facing, bool allowons s = *arg1; - if (stanTestLineUnobstructed(spp, pos->f[0], pos->f[2], testpos.f[0], testpos.f[2], 0x13, 0.0f, 1.0f, 0.0f, 1.0f) - && (stanTestVolume(spp, testpos.f[0], testpos.f[2], 20.0f, 0x1F, 0.0f, 1.0f) < 0) - && (allowonscreen || sub_GAME_7F033EAC(&testpos, s))) + if (stanTestLineUnobstructed(spp, pos->f[0], pos->f[2], testpos.f[0], testpos.f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER, 0.0f, 1.0f, 0.0f, 1.0f) + && (stanTestVolume(spp, testpos.f[0], testpos.f[2], 20.0f, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, 0.0f, 1.0f) < 0) + && (allowonscreen || chrIsPosOffScreen(&testpos, s))) { *arg1 = s; @@ -11216,7 +11237,7 @@ PropRecord *chrSpawnAtCoord(s32 bodynum, s32 headnum, coord3d *pos, StandTile *s newpos.z = pos->z; stancopy = stan; - if (sub_GAME_7F033F48(&newpos, &stancopy, angle, ((spawnflags & 0x10) != 0))) + if (chrAdjustPosForSpawn(&newpos, &stancopy, angle, ((spawnflags & 0x10) != 0))) { chrHeader = retrieve_header_for_body_and_head(bodynum, headnum, spawnflags); @@ -11259,6 +11280,7 @@ PropRecord *chrSpawnAtPad(ChrRecord *self, s32 bodynum, s32 headnum, s32 padid, { pad = (PadRecord *)&g_CurrentSetup.boundpads[getBoundPadNum(padid)]; } + //<- not here... #ifdef ENABLE_LOG osSyncPrintf("%s%s new char x = %f, y = %f, z = %f \n", "", "", pad->pos.x, pad->pos.y, pad->pos.z); #endif @@ -11442,19 +11464,19 @@ bool actor_draws_throws_grenade_at_player_if_possible(ChrRecord *self) if (!Left || !Right) { flags = 0; - + if (Right) { flags = 0x10000000; } - + NewGrenadeProp = chrGiveWeapon(self, 0xC4, ITEM_GRENADE, flags); - + if (NewGrenadeProp) { NewGrenadeObj = NewGrenadeProp->weapon; NewGrenadeObj->runtime_bitflags |= 0x800; //manual bitflags are more effecient - + chrlvThrowGrenadeAnimationRelated(self, NewGrenadeProp, !Right ? GUNRIGHT : GUNLEFT, 1); //this matches return TRUE; @@ -11473,14 +11495,14 @@ bool actor_draws_throws_grenade_at_player_if_possible(ChrRecord *self) bool chrDropItem(ChrRecord *self, s32 modelnum, u8 weaponid) { WeaponObjRecord *NewModel = (WeaponObjRecord *)create_new_item_instance_of_model(modelnum, weaponid); - + if (NewModel && NewModel->prop) { modelSetScale(NewModel->model, NewModel->model->scale); chrpropReparent(NewModel->prop, self->prop); NewModel->timer = CHRLV_DEFAULT_TIMER; propobjSetDropped(NewModel->prop, 1); - self->hidden = self->hidden | 1; + self->hidden = self->hidden | CHRHIDDEN_DROP_HELD_ITEMS; return TRUE; } diff --git a/src/game/chrlv.h b/src/game/chrlv.h index d2c618c..892554f 100644 --- a/src/game/chrlv.h +++ b/src/game/chrlv.h @@ -132,7 +132,7 @@ void chrSetChrPreset2(ChrRecord *self, s32 id, s32 id2); void chrSetPadPreset( ChrRecord *self, s32 padid); void chrSetPadPresetByChrnum(ChrRecord *self, s32 chrid, s32 padid); s32 chrIsTargetNearlyInSight(ChrRecord *arg0); -bool sub_GAME_7F033F48(coord3d *pos, StandTile **arg1, f32 facing, bool b); +bool chrAdjustPosForSpawn(coord3d *pos, StandTile **arg1, f32 facing, bool b); PropRecord *chrSpawnAtPad(ChrRecord *self, s32 bodynum, s32 headnum, s32 padid, AIListRecord *ailist, s32 flags); PropRecord *chrSpawnAtChr(ChrRecord *self, s32 bodynum, s32 headnum, s32 chrnum, AIListRecord *ailist, s32 flags); bool chrIfInPadRoom(ChrRecord *self, s32 chrnum, s32 padnum); diff --git a/src/game/chrobjhandler.c b/src/game/chrobjhandler.c index feae19f..eff144d 100644 --- a/src/game/chrobjhandler.c +++ b/src/game/chrobjhandler.c @@ -1,3 +1,11 @@ +/*--------------------------------------------------------------------- + + File propobj.c + + Comments Prop Objects code. + + ---------------------------------------------------------------------*/ + #include #include #include @@ -65,30 +73,30 @@ -s32 alarm_timer = 0; -s32 *ptr_alarm_sfx = 0; -f32 toxic_gas_sound_timer = 0.0; -s32 activate_gas_sound_timer = FALSE; -coord3d D_80030AD0 = { 0.0f, 0.0f, 0.0f }; -s32 D_80030ADC = 0; -f32 D_80030AE0 = 0.0f; -ALSoundState *ptr_gas_sound = NULL; -s32 clock_drawn_flag = 1; -s32 clock_enable = 0; -f32 clock_time = 0; -s32 g_RemoteMineOwnerTriggerFlag = 0; -s32 g_NextWeaponSlot = 0; // numbers between 0 and 30 -s32 g_NextHatSlot = 0; -ObjectRecord *g_LevelLoadPropSwitch = NULL; -LockDoorRecord *g_LevelLoadPropLockDoor = NULL; -ObjectRecord *g_LevelLoadPropSafeItem = NULL; -struct PropRecord * D_80030B0C = NULL; -s32 bodypartshot = 0xFFFFFFFF; -f32 F_80030B14 = 1.0; -f32 F_80030B18 = 1.0; -f32 g_AutogunPendingDamageTick = 1.0; -f32 g_AutogunDamageScalar = 1.0; -f32 F_80030B24 = 1.0; +/* 0x80030AC8 */ s32 alarm_timer = 0; +/* 0x80030ACC */ s32 *ptr_alarm_sfx = 0; +/* 0x80030AD0 */ f32 toxic_gas_sound_timer = 0.0; +/* 0x80030AD4 */ s32 activate_gas_sound_timer = FALSE; +/* 0x80030AD8 */ coord3d D_80030AD0 = { 0.0f, 0.0f, 0.0f }; +/* 0x80030ADC */ s32 D_80030ADC = 0; +/* 0x80030AE0 */ f32 D_80030AE0 = 0.0f; +/* 0x80030AE4 */ ALSoundState *ptr_gas_sound = NULL; +/* 0x80030AE8 */ s32 clock_drawn_flag = 1; +/* 0x80030AEC */ s32 clock_enable = 0; +/* 0x80030AF0 */ f32 clock_time = 0; +/* 0x80030AF4 */ s32 g_RemoteMineOwnerTriggerFlag = 0; +/* 0x80030AF8 */ s32 g_NextWeaponSlot = 0; // numbers between 0 and 30 +/* 0x80030AFC */ s32 g_NextHatSlot = 0; +/* 0x80030B00 */ ObjectRecord *g_LevelLoadPropSwitch = NULL; +/* 0x80030B04 */ LockDoorRecord *g_LevelLoadPropLockDoor = NULL; +/* 0x80030B08 */ ObjectRecord *g_LevelLoadPropSafeItem = NULL; +/* 0x80030B0C */ struct PropRecord * D_80030B0C = NULL; +/* 0x80030B10 */ s32 bodypartshot = 0xFFFFFFFF; +/* 0x80030B14 */ f32 F_80030B14 = 1.0; +/* 0x80030B18 */ f32 F_80030B18 = 1.0; +/* 0x80030B1C */ f32 g_AutogunPendingDamageTick = 1.0; +/* 0x80030B20 */ f32 g_AutogunDamageScalar = 1.0; +/* 0x80030B24 */ f32 F_80030B24 = 1.0; /* * Set on level load. @@ -97,25 +105,40 @@ f32 g_SoloAmmoMultiplier = 1.0; s16 Throwing_knife_SFX[] = {0x5F, 0x60, 0x61}; -struct unk_joint_list D_80030B34 = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData D_80030B34 = {NULL, + TRUE, + 0x00000003, + NULL, + NULL, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; //[80030B74 00 Bond] u32 monAnim00Bond[] = { - MONUSEIMAGE(IMGBOND), + MONUSEIMAGE(IMGBOND), MONHORZSCROLL(0x400, 20), - MONHOLDTIME(20), + MONHOLDTIME(20), MONVERTSCROLL(0x400, 20), MONRGBA(COLOR_BLACK, 20), - MONHOLDTIME(20), + MONHOLDTIME(20), MONZOOMSQUARE(0x200, 20), MONRGBA(COLOR_WHITE, 20), - MONHOLDTIME(20), + MONHOLDTIME(20), MONZOOMSQUARE(0x400, 20), - MONHOLDTIME(20), - MONLOOP() + MONHOLDTIME(20), + MONLOOP() }; //[80030C00 01 Desktops, Satellite] @@ -251,7 +274,7 @@ u32 monAnim05GreenTextUp[] = { //[800310F0 06 red text down] u32 monAnim06RedTextDown[] = { - MONUSEIMAGE(IMGTEXT), + MONUSEIMAGE(IMGTEXT), MONRGBA(COLOR_DIESEL, 1), MONVERTSCROLL(0x200, 80), MONHOLDTIME(120), @@ -380,7 +403,7 @@ u32 monAnim10GlobalMap[] = { MONVERTSCROLLNA(0x200, 360), MONZOOMSQUARE(0x400, 720), MONHOLDTIME(300), - MONUSEIMAGE(IMGWORLDMAP), + MONUSEIMAGE(IMGWORLDMAP), MONHOLDTIME(420), MONRGBA(COLOR_STRONGGREEN, 30), MONHOLDTIME(30), @@ -609,15 +632,15 @@ u32 monRandEffectChanceGALAXY1[] = { //[80031A7C 1E random screens + random effects - set image] u32 monRandEffectChanceGALAXY2[] = { - MONUSEIMAGE(IMGGALAXY2), - MONHOLDTIME(20), + MONUSEIMAGE(IMGGALAXY2), + MONHOLDTIME(20), MONJUMPCHANCE(monRandChanceScrollOrZoomRandRGBN, HUNDRED_PERCENT_CHANCE) }; //[80031A98 1F random screens + random effects - set image] u32 monRandEffectChanceEARTHTEXT[] = { - MONUSEIMAGE(IMGEARTHTEXT), - MONHOLDTIME(20), + MONUSEIMAGE(IMGEARTHTEXT), + MONHOLDTIME(20), MONJUMPCHANCE(monRandChanceScrollOrZoomRandRGBN, HUNDRED_PERCENT_CHANCE) }; @@ -630,8 +653,8 @@ u32 monRandEffectChanceTARGETEARTH[] = { //[80031AD0 21 random screens + random effects - set image] u32 monRandEffectChanceGALAXY3[] = { - MONUSEIMAGE(IMGGALAXY3), - MONHOLDTIME(20), + MONUSEIMAGE(IMGGALAXY3), + MONHOLDTIME(20), MONJUMPCHANCE(monRandChanceScrollOrZoomRandRGBN, HUNDRED_PERCENT_CHANCE) }; @@ -656,7 +679,7 @@ u32 monRandChanceScrollOrZoomGreen[] = { }; u32 monRandChanceScrollOrZoomBlue[] = { - MONRGBA(COLOR_GOVERNORBAY, 60), + MONRGBA(COLOR_GOVERNORBAY, 60), MONJUMPTO(monRandChanceScrollOrZoom) }; @@ -733,13 +756,13 @@ u32 monAnim2CRandEffectWaitRoute[] = { //[80031D58 2D random screens + random effects - flash] u32 monAnim2DRandEffectFlash[] = { - MONHOLDTIME(50), - MONRGBA(COLOR_WHITE, 10), - MONRGBA(COLOR_BLACK, 5), - MONRGBA(COLOR_WHITE, 10), - MONHOLDTIME(25), - MONRGBA(COLOR_BLACK, 200), - MONHOLDTIME(500), + MONHOLDTIME(50), + MONRGBA(COLOR_WHITE, 10), + MONRGBA(COLOR_BLACK, 5), + MONRGBA(COLOR_WHITE, 10), + MONHOLDTIME(25), + MONRGBA(COLOR_BLACK, 200), + MONHOLDTIME(500), MONJUMPTO(monAnim17RandImageEffect) }; @@ -757,7 +780,7 @@ u32 monAnim2ERedBrightening[] = { //[80031DF4 2F green brightening screen] u32 monAnim2FGreenBrightening[] = { MONUSEIMAGE(IMGKEYBOARDKEY), - MONZOOMSQUARE(0x200, 0), + MONZOOMSQUARE(0x200, 0), MONRGBA(COLOR_APPLE, 60), MONHOLDTIME(60), MONRGBA(COLOR_MINESHAFT2, 10), @@ -787,7 +810,7 @@ u32 monAnim31RedSolid[] = { u32 monAnim32GreenSolid[] = { MONUSEIMAGE(IMGKEYBOARDKEY), MONZOOMSQUARE(0x200, 0), - MONRGBA(COLOR_APPLE, 10), + MONRGBA(COLOR_APPLE, 10), MONHOLDTIME(10), MONLOOP() }; @@ -821,14 +844,33 @@ u32 monAnim35Taser[] = { /** * Address 0x80031FD0. */ -struct unk_joint_list D_80031FD0 = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData D_80031FD0 = { NULL, + TRUE, + 0x00000003, + NULL, + + NULL, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + + 0, + {0,0,0,0}, + {0,0,0,0}, + CULLMODE_BOTH}; + // Forward declarations. s32 updateDoorDisplacement(DoorRecord* door); s32 objGetShotsTaken(ObjectRecord *); -void sub_GAME_7F04AC20(PropRecord *prop, struct unk_joint_list *, s32 arg2); -bool sub_GAME_7F044414(rect4f* rect1, s32 numvertices0, rect4f* rect2, s32 numvertices1); +void sub_GAME_7F04AC20(PropRecord *prop, ModelRenderData *, s32 arg2); +bool chrobjSeparatingAxisTheorem(rect4f* rect1, s32 numvertices0, rect4f* rect2, s32 numvertices1); void chrobjSndCreatePostEvent(ALSoundState *state, coord3d *pos, f32 low, f32 high); void sub_GAME_7F050DE8(Model* model); void remove_obj_from_temp_proxmine_table(WeaponObjRecord* proxy); @@ -837,7 +879,7 @@ s32 sub_GAME_7F042EB4(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2 s32 sub_GAME_7F042A0C(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2, struct coord3d *arg3, s32 arg4); s32 handles_projectile_motion(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2, struct coord3d *arg3, s32 arg4, s32 arg5); void sub_GAME_7F0431E4(struct ObjectRecord *arg0, struct coord3d *arg1); -void sub_GAME_7F054FB4(struct DoorRecord *arg0); +void door7F054FB4(struct DoorRecord *arg0); /* PD: projectileFree (similar but not the same structure) */ void projectileFree(Projectile* projectile) @@ -942,10 +984,12 @@ Projectile *projectileAllocate(void) void sub_GAME_7F03FDA8(PropRecord *prop) { - ObjectRecord *obj = prop->obj; - + ObjectRecord *obj = prop->obj; //po if (obj->runtime_bitflags & RUNTIMEBITFLAG_EMBEDDED) { + #ifdef DEBUG + //assert(po->move.attach->fallinfo==NULL); + #endif obj->embedment->projectile = projectileAllocate(); } else if ((obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) == 0) @@ -1153,10 +1197,10 @@ glabel set_color_shading_from_tile /* 074C6C 7F04013C 46083282 */ mul.s $f10, $f6, $f8 /* 074C70 7F040140 444EF800 */ cfc1 $t6, $31 /* 074C74 7F040144 44CFF800 */ ctc1 $t7, $31 -/* 074C78 7F040148 00000000 */ nop +/* 074C78 7F040148 00000000 */ nop /* 074C7C 7F04014C 46005424 */ cvt.w.s $f16, $f10 /* 074C80 7F040150 444FF800 */ cfc1 $t7, $31 -/* 074C84 7F040154 00000000 */ nop +/* 074C84 7F040154 00000000 */ nop /* 074C88 7F040158 31EF0078 */ andi $t7, $t7, 0x78 /* 074C8C 7F04015C 51E00013 */ beql $t7, $zero, .L7F0401AC /* 074C90 7F040160 440F8000 */ mfc1 $t7, $f16 @@ -1164,13 +1208,13 @@ glabel set_color_shading_from_tile /* 074C98 7F040168 240F0001 */ li $t7, 1 /* 074C9C 7F04016C 46105401 */ sub.s $f16, $f10, $f16 /* 074CA0 7F040170 44CFF800 */ ctc1 $t7, $31 -/* 074CA4 7F040174 00000000 */ nop +/* 074CA4 7F040174 00000000 */ nop /* 074CA8 7F040178 46008424 */ cvt.w.s $f16, $f16 /* 074CAC 7F04017C 444FF800 */ cfc1 $t7, $31 -/* 074CB0 7F040180 00000000 */ nop +/* 074CB0 7F040180 00000000 */ nop /* 074CB4 7F040184 31EF0078 */ andi $t7, $t7, 0x78 /* 074CB8 7F040188 15E00005 */ bnez $t7, .L7F0401A0 -/* 074CBC 7F04018C 00000000 */ nop +/* 074CBC 7F04018C 00000000 */ nop /* 074CC0 7F040190 440F8000 */ mfc1 $t7, $f16 /* 074CC4 7F040194 3C018000 */ lui $at, 0x8000 /* 074CC8 7F040198 10000007 */ b .L7F0401B8 @@ -1180,9 +1224,9 @@ glabel set_color_shading_from_tile /* 074CD4 7F0401A4 240FFFFF */ li $t7, -1 /* 074CD8 7F0401A8 440F8000 */ mfc1 $t7, $f16 .L7F0401AC: -/* 074CDC 7F0401AC 00000000 */ nop +/* 074CDC 7F0401AC 00000000 */ nop /* 074CE0 7F0401B0 05E0FFFB */ bltz $t7, .L7F0401A0 -/* 074CE4 7F0401B4 00000000 */ nop +/* 074CE4 7F0401B4 00000000 */ nop .L7F0401B8: /* 074CE8 7F0401B8 44CEF800 */ ctc1 $t6, $31 /* 074CEC 7F0401BC 01BF082A */ slt $at, $t5, $ra @@ -1223,21 +1267,21 @@ glabel set_color_shading_from_tile /* 074D68 7F040238 01E40019 */ multu $t7, $a0 /* 074D6C 7F04023C 00804825 */ move $t1, $a0 /* 074D70 7F040240 0000C012 */ mflo $t8 -/* 074D74 7F040244 00000000 */ nop -/* 074D78 7F040248 00000000 */ nop +/* 074D74 7F040244 00000000 */ nop +/* 074D78 7F040248 00000000 */ nop /* 074D7C 7F04024C 0306001A */ div $zero, $t8, $a2 /* 074D80 7F040250 00004012 */ mflo $t0 /* 074D84 7F040254 A0680000 */ sb $t0, ($v1) /* 074D88 7F040258 A1440000 */ sb $a0, ($t2) /* 074D8C 7F04025C 14C00002 */ bnez $a2, .L7F040268 -/* 074D90 7F040260 00000000 */ nop +/* 074D90 7F040260 00000000 */ nop /* 074D94 7F040264 0007000D */ break 7 .L7F040268: /* 074D98 7F040268 2401FFFF */ li $at, -1 /* 074D9C 7F04026C 14C10004 */ bne $a2, $at, .L7F040280 /* 074DA0 7F040270 3C018000 */ lui $at, 0x8000 /* 074DA4 7F040274 17010002 */ bne $t8, $at, .L7F040280 -/* 074DA8 7F040278 00000000 */ nop +/* 074DA8 7F040278 00000000 */ nop /* 074DAC 7F04027C 0006000D */ break 6 .L7F040280: /* 074DB0 7F040280 90FF0001 */ lbu $ra, 1($a3) @@ -1253,7 +1297,7 @@ glabel set_color_shading_from_tile /* 074DD4 7F0402A4 8FBF0014 */ lw $ra, 0x14($sp) /* 074DD8 7F0402A8 27BD0018 */ addiu $sp, $sp, 0x18 /* 074DDC 7F0402AC 03E00008 */ jr $ra -/* 074DE0 7F0402B0 00000000 */ nop +/* 074DE0 7F0402B0 00000000 */ nop ) #endif @@ -1275,7 +1319,7 @@ void update_color_shading(rgba_u8 *dest, rgba_u8 *src) s32 val_diff; s32 val_new; s32 i; - + for (i = 0; i < 4; i++) { val_diff = (src->rgba[i] - dest->rgba[i]); @@ -1315,10 +1359,10 @@ void chrobjCollisionRelated(ObjectRecord *obj) matrix_4x4_copy(&obj->mtx, &sp24); matrix_4x4_set_position(&obj->runtime_pos, &sp24); sub_GAME_7F03F540(bbox, &sp24, &obj->ptr_allocated_collisiondata_block->unk04, obj->ptr_allocated_collisiondata_block); - + obj->ptr_allocated_collisiondata_block->unk48 = obj->runtime_pos.f[1] + chrpropSumMatrixPosY(bbox, &sp24); obj->ptr_allocated_collisiondata_block->unk44 = obj->runtime_pos.f[1] + chrpropSumMatrixNegY(bbox, &sp24); - + if (obj->type == PROPDEF_AIRCRAFT) { obj->ptr_allocated_collisiondata_block->unk48 -= 200.0f; @@ -1331,7 +1375,7 @@ PropRecord* objInit(ObjectRecord* obj, ModelFileHeader* model_header, PropRecord { if (prop == NULL) { - prop = propAllocate(); + prop = chrpropAllocate(); } if (model == NULL) @@ -1353,7 +1397,7 @@ PropRecord* objInit(ObjectRecord* obj, ModelFileHeader* model_header, PropRecord if (obj->flags & 0x100) { - obj->ptr_allocated_collisiondata_block = mempAllocBytesInBank(0x50U, 4U); + obj->ptr_allocated_collisiondata_block = mempAllocBytesInBank(0x50U, MEMPOOL_STAGE); obj->state = (u8) (obj->state | 8); } else @@ -1462,7 +1506,7 @@ void sub_GAME_7F0407F4(ObjectRecord* obj, coord3d* pos, Mtxf* matrix, StandTile* //moveToPad -void sub_GAME_7F04088C(ObjectRecord *baseobj, PadRecord *pad, Mtxf *matrix, StandTile *stan, PadRecord *pad2) +void sub_GAME_7F04088C(ObjectRecord *baseobj, struct coord3d *pos, Mtxf *matrix, StandTile *stan, struct coord3d *pos2) { int padd[1]; ModelRoData_BoundingBoxRecord *modelBoundingBox; @@ -1481,16 +1525,16 @@ void sub_GAME_7F04088C(ObjectRecord *baseobj, PadRecord *pad, Mtxf *matrix, Stan { matrix_4x4_set_rotation_around_z(M_PI, &mtxcopy); matrix_4x4_multiply_in_place(matrix, &mtxcopy); - newPos.x = pad2->pos.x - (mtxcopy.m[1][0] * ymin); - newPos.y = pad2->pos.y - (mtxcopy.m[1][1] * ymin); - newPos.z = pad2->pos.z - (mtxcopy.m[1][2] * ymin); + newPos.x = pos2->f[0] - (mtxcopy.m[1][0] * ymin); + newPos.y = pos2->f[1] - (mtxcopy.m[1][1] * ymin); + newPos.z = pos2->f[2] - (mtxcopy.m[1][2] * ymin); } else if (baseobj->flags & 8) { matrix_4x4_copy(matrix, &mtxcopy); - newPos.x = pad2->pos.x - (mtxcopy.m[1][0] * xmax); - newPos.y = pad2->pos.y - (mtxcopy.m[1][1] * xmax); - newPos.z = pad2->pos.z - (mtxcopy.m[1][2] * xmax); + newPos.x = pos2->f[0] - (mtxcopy.m[1][0] * xmax); + newPos.y = pos2->f[1] - (mtxcopy.m[1][1] * xmax); + newPos.z = pos2->f[2] - (mtxcopy.m[1][2] * xmax); } else { @@ -1501,12 +1545,12 @@ void sub_GAME_7F04088C(ObjectRecord *baseobj, PadRecord *pad, Mtxf *matrix, Stan f32 byrefC; f32 byrefD; - distfromTileCenter = stanGetPositionYValue(mStan, pad->pos.x, pad->pos.z); + distfromTileCenter = stanGetPositionYValue(mStan, pos->f[0], pos->f[2]); matrix_4x4_copy(matrix, &mtxcopy); - newPos.x = pad2->pos.x - (mtxcopy.m[1][0] * xmax); - newPos.z = pad2->pos.z - (mtxcopy.m[1][2] * xmax); - roomObj = sub_GAME_7F03FAB0(pad, stan->room); + newPos.x = pos2->f[0] - (mtxcopy.m[1][0] * xmax); + newPos.z = pos2->f[2] - (mtxcopy.m[1][2] * xmax); + roomObj = sub_GAME_7F03FAB0(pos, stan->room); if (roomObj) { @@ -1529,19 +1573,25 @@ void sub_GAME_7F04088C(ObjectRecord *baseobj, PadRecord *pad, Mtxf *matrix, Stan } } - if (!(baseobj->flags2 & 1) && walkTilesBetweenPoints_NoCallback(&mStan, pad->pos.x, pad->pos.z, newPos.x, newPos.z)) + if (!(baseobj->flags2 & 1) && walkTilesBetweenPoints_NoCallback(&mStan, pos->f[0], pos->f[2], newPos.x, newPos.z)) { objChangeShading(baseobj, &newPos, &mtxcopy, mStan); } else { - objChangeShading(baseobj, pad, &mtxcopy, stan); + objChangeShading(baseobj, pos, &mtxcopy, stan); if ((baseobj->flags2 & 1) || (baseobj->flags & 0x1000)) { baseobj->runtime_pos.x = newPos.x; baseobj->runtime_pos.y = newPos.y; baseobj->runtime_pos.z = newPos.z; } + #ifdef DEBUG + else + { + osSyncPrintf("prop not positioned correctly!\n"); + } + #endif } chrobjCollisionRelated(baseobj); @@ -1601,6 +1651,17 @@ void objFreeEmbedmentOrProjectile(PropRecord *prop) { projectileFree(obj->embedment->projectile); } + #ifdef DEBUG + else + { + osSyncPrintf("ERROR: PROPHIDD_ATTACHED was, but move.attach was NULL\a\n"); + osSyncPrintf("po->obj=%d\n",po->obj); + osSyncPrintf("p->flags=%08x\n",p->flags); + osSyncPrintf("po->flags2=%08x\n",po->flags2); + osSyncPrintf("p->timetoregen=%d\n",p->timetoregen); + } + #endif + embedmentFree(obj->embedment); } obj->embedment = NULL; @@ -1658,9 +1719,9 @@ void objFree(ObjectRecord* obj, s32 freeprop, s32 canregen) else if (obj->type == PROPDEF_TINTED_GLASS) { TintedGlassRecord* record = (TintedGlassRecord*) obj; - if (record->unk8c >= 0) + if (record->portalnum >= 0) { - bgToggleDataPortalsContrlBytes1Bit1(record->unk8c, 1); + bgToggleDataPortalsContrlBytes1Bit1(record->portalnum, 1); } } else if (obj->type == PROPDEF_AIRCRAFT) @@ -1682,8 +1743,8 @@ void objFree(ObjectRecord* obj, s32 freeprop, s32 canregen) if (obj->prop != NULL) { - sub_GAME_7F0A0CCC(obj->prop, FALSE); - sub_GAME_7F0A0CCC(obj->prop, TRUE); + explosionClearBulletImpactRoomByFlag(obj->prop, FALSE); + explosionClearBulletImpactRoomByFlag(obj->prop, TRUE); if (canregen == 0) { @@ -1823,7 +1884,7 @@ glabel sub_GAME_7F041160 /* 075D28 7F0411F8 0FC1366C */ jal sub_GAME_7F04D9B0 /* 075D2C 7F0411FC AFB50014 */ sw $s5, 0x14($sp) /* 075D30 7F041200 1440001A */ bnez $v0, .L7F04126C -/* 075D34 7F041204 00000000 */ nop +/* 075D34 7F041204 00000000 */ nop /* 075D38 7F041208 10000018 */ b .L7F04126C /* 075D3C 7F04120C 00008025 */ move $s0, $zero .L7F041210: @@ -1848,7 +1909,7 @@ glabel sub_GAME_7F041160 /* 075D84 7F041254 0FC1366C */ jal sub_GAME_7F04D9B0 /* 075D88 7F041258 AFB60018 */ sw $s6, 0x18($sp) /* 075D8C 7F04125C 14400003 */ bnez $v0, .L7F04126C -/* 075D90 7F041260 00000000 */ nop +/* 075D90 7F041260 00000000 */ nop .L7F041264: /* 075D94 7F041264 5E00FFEF */ bgtzl $s0, .L7F041224 /* 075D98 7F041268 02E02025 */ move $a0, $s7 @@ -1869,7 +1930,7 @@ glabel sub_GAME_7F041160 /* 075DD0 7F0412A0 0FC1611D */ jal mtx4TransformVecInPlace /* 075DD4 7F0412A4 E4A80008 */ swc1 $f8, 8($a1) /* 075DD8 7F0412A8 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 075DDC 7F0412AC 00000000 */ nop +/* 075DDC 7F0412AC 00000000 */ nop /* 075DE0 7F0412B0 00402025 */ move $a0, $v0 /* 075DE4 7F0412B4 0FC1611D */ jal mtx4TransformVecInPlace /* 075DE8 7F0412B8 8FA500B4 */ lw $a1, 0xb4($sp) @@ -1896,9 +1957,9 @@ glabel sub_GAME_7F041160 /* 075E3C 7F04130C 460A3400 */ add.s $f16, $f6, $f10 /* 075E40 7F041310 46102200 */ add.s $f8, $f4, $f16 /* 075E44 7F041314 4608703C */ c.lt.s $f14, $f8 -/* 075E48 7F041318 00000000 */ nop +/* 075E48 7F041318 00000000 */ nop /* 075E4C 7F04131C 45000007 */ bc1f .L7F04133C -/* 075E50 7F041320 00000000 */ nop +/* 075E50 7F041320 00000000 */ nop /* 075E54 7F041324 46001187 */ neg.s $f6, $f2 /* 075E58 7F041328 46006287 */ neg.s $f10, $f12 /* 075E5C 7F04132C 46000487 */ neg.s $f18, $f0 @@ -1907,7 +1968,7 @@ glabel sub_GAME_7F041160 /* 075E68 7F041338 E6120008 */ swc1 $f18, 8($s0) .L7F04133C: /* 075E6C 7F04133C 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 075E70 7F041340 00000000 */ nop +/* 075E70 7F041340 00000000 */ nop /* 075E74 7F041344 00402025 */ move $a0, $v0 /* 075E78 7F041348 0FC160F6 */ jal mtx4RotateVecInPlace /* 075E7C 7F04134C 02002825 */ move $a1, $s0 @@ -1916,18 +1977,18 @@ glabel sub_GAME_7F041160 /* 075E88 7F041358 02002025 */ move $a0, $s0 /* 075E8C 7F04135C 26050004 */ addiu $a1, $s0, 4 /* 075E90 7F041360 46047032 */ c.eq.s $f14, $f4 -/* 075E94 7F041364 00000000 */ nop +/* 075E94 7F041364 00000000 */ nop /* 075E98 7F041368 4500000C */ bc1f .L7F04139C -/* 075E9C 7F04136C 00000000 */ nop +/* 075E9C 7F04136C 00000000 */ nop /* 075EA0 7F041370 C6100004 */ lwc1 $f16, 4($s0) /* 075EA4 7F041374 46107032 */ c.eq.s $f14, $f16 -/* 075EA8 7F041378 00000000 */ nop +/* 075EA8 7F041378 00000000 */ nop /* 075EAC 7F04137C 45000007 */ bc1f .L7F04139C -/* 075EB0 7F041380 00000000 */ nop +/* 075EB0 7F041380 00000000 */ nop /* 075EB4 7F041384 C6080008 */ lwc1 $f8, 8($s0) /* 075EB8 7F041388 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 075EBC 7F04138C 46087032 */ c.eq.s $f14, $f8 -/* 075EC0 7F041390 00000000 */ nop +/* 075EC0 7F041390 00000000 */ nop /* 075EC4 7F041394 45030006 */ bc1tl .L7F0413B0 /* 075EC8 7F041398 44813000 */ mtc1 $at, $f6 .L7F04139C: @@ -1937,7 +1998,7 @@ glabel sub_GAME_7F041160 /* 075ED8 7F0413A8 8FAB00BC */ lw $t3, 0xbc($sp) /* 075EDC 7F0413AC 44813000 */ mtc1 $at, $f6 .L7F0413B0: -/* 075EE0 7F0413B0 00000000 */ nop +/* 075EE0 7F0413B0 00000000 */ nop /* 075EE4 7F0413B4 E6060008 */ swc1 $f6, 8($s0) /* 075EE8 7F0413B8 8FAB00BC */ lw $t3, 0xbc($sp) .L7F0413BC: @@ -2009,22 +2070,22 @@ glabel sub_GAME_7F041400 /* 075FA8 7F041478 C6A00004 */ lwc1 $f0, 4($s5) /* 075FAC 7F04147C C7A800C8 */ lwc1 $f8, 0xc8($sp) /* 075FB0 7F041480 4600203C */ c.lt.s $f4, $f0 -/* 075FB4 7F041484 00000000 */ nop +/* 075FB4 7F041484 00000000 */ nop /* 075FB8 7F041488 45020007 */ bc1fl .L7F0414A8 /* 075FBC 7F04148C 4608003C */ c.lt.s $f0, $f8 /* 075FC0 7F041490 C6860004 */ lwc1 $f6, 4($s4) /* 075FC4 7F041494 4606203C */ c.lt.s $f4, $f6 -/* 075FC8 7F041498 00000000 */ nop +/* 075FC8 7F041498 00000000 */ nop /* 075FCC 7F04149C 450300C2 */ bc1tl .L7F0417A8 /* 075FD0 7F0414A0 00001025 */ move $v0, $zero /* 075FD4 7F0414A4 4608003C */ c.lt.s $f0, $f8 .L7F0414A8: -/* 075FD8 7F0414A8 00000000 */ nop +/* 075FD8 7F0414A8 00000000 */ nop /* 075FDC 7F0414AC 45020007 */ bc1fl .L7F0414CC /* 075FE0 7F0414B0 C6B00000 */ lwc1 $f16, ($s5) /* 075FE4 7F0414B4 C68A0004 */ lwc1 $f10, 4($s4) /* 075FE8 7F0414B8 4608503C */ c.lt.s $f10, $f8 -/* 075FEC 7F0414BC 00000000 */ nop +/* 075FEC 7F0414BC 00000000 */ nop /* 075FF0 7F0414C0 450300B9 */ bc1tl .L7F0417A8 /* 075FF4 7F0414C4 00001025 */ move $v0, $zero /* 075FF8 7F0414C8 C6B00000 */ lwc1 $f16, ($s5) @@ -2062,14 +2123,14 @@ glabel sub_GAME_7F041400 /* 076070 7F041540 E7A80014 */ swc1 $f8, 0x14($sp) /* 076074 7F041544 C4900000 */ lwc1 $f16, ($a0) /* 076078 7F041548 15000002 */ bnez $t0, .L7F041554 -/* 07607C 7F04154C 00000000 */ nop +/* 07607C 7F04154C 00000000 */ nop /* 076080 7F041550 0007000D */ break 7 .L7F041554: /* 076084 7F041554 2401FFFF */ li $at, -1 /* 076088 7F041558 15010004 */ bne $t0, $at, .L7F04156C /* 07608C 7F04155C 3C018000 */ lui $at, 0x8000 /* 076090 7F041560 16610002 */ bne $s3, $at, .L7F04156C -/* 076094 7F041564 00000000 */ nop +/* 076094 7F041564 00000000 */ nop /* 076098 7F041568 0006000D */ break 6 .L7F04156C: /* 07609C 7F04156C E7B00018 */ swc1 $f16, 0x18($sp) @@ -2094,10 +2155,10 @@ glabel sub_GAME_7F041400 /* 0760E8 7F0415B8 C44A0000 */ lwc1 $f10, ($v0) /* 0760EC 7F0415BC E7AA00A8 */ swc1 $f10, 0xa8($sp) /* 0760F0 7F0415C0 C4480004 */ lwc1 $f8, 4($v0) -/* 0760F4 7F0415C4 0FC2CC80 */ jal unkGeometry7F0B3200 +/* 0760F4 7F0415C4 0FC2CC80 */ jal calculateLineIntersectionFactor /* 0760F8 7F0415C8 E7A800AC */ swc1 $f8, 0xac($sp) /* 0760FC 7F0415CC 4614003C */ c.lt.s $f0, $f20 -/* 076100 7F0415D0 00000000 */ nop +/* 076100 7F0415D0 00000000 */ nop /* 076104 7F0415D4 45020004 */ bc1fl .L7F0415E8 /* 076108 7F0415D8 8FAD00D0 */ lw $t5, 0xd0($sp) /* 07610C 7F0415DC 46000506 */ mov.s $f20, $f0 @@ -2134,14 +2195,14 @@ glabel sub_GAME_7F041400 /* 076180 7F041650 E7A4007C */ swc1 $f4, 0x7c($sp) /* 076184 7F041654 C4660004 */ lwc1 $f6, 4($v1) /* 076188 7F041658 15000002 */ bnez $t0, .L7F041664 -/* 07618C 7F04165C 00000000 */ nop +/* 07618C 7F04165C 00000000 */ nop /* 076190 7F041660 0007000D */ break 7 .L7F041664: /* 076194 7F041664 2401FFFF */ li $at, -1 /* 076198 7F041668 15010004 */ bne $t0, $at, .L7F04167C /* 07619C 7F04166C 3C018000 */ li $at, 0x80000000 # -0.000000 /* 0761A0 7F041670 17210002 */ bne $t9, $at, .L7F04167C -/* 0761A4 7F041674 00000000 */ nop +/* 0761A4 7F041674 00000000 */ nop /* 0761A8 7F041678 0006000D */ break 6 .L7F04167C: /* 0761AC 7F04167C AFAB0010 */ sw $t3, 0x10($sp) @@ -2173,7 +2234,7 @@ glabel sub_GAME_7F041400 /* 076214 7F0416E4 46102482 */ mul.s $f18, $f4, $f16 /* 076218 7F0416E8 46069000 */ add.s $f0, $f18, $f6 /* 07621C 7F0416EC 460A003C */ c.lt.s $f0, $f10 -/* 076220 7F0416F0 00000000 */ nop +/* 076220 7F0416F0 00000000 */ nop /* 076224 7F0416F4 4502002C */ bc1fl .L7F0417A8 /* 076228 7F0416F8 00001025 */ move $v0, $zero /* 07622C 7F0416FC E4600000 */ swc1 $f0, ($v1) @@ -2197,7 +2258,7 @@ glabel sub_GAME_7F041400 /* 076274 7F041744 C4900008 */ lwc1 $f16, 8($a0) /* 076278 7F041748 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 07627C 7F04174C 4610A032 */ c.eq.s $f20, $f16 -/* 076280 7F041750 00000000 */ nop +/* 076280 7F041750 00000000 */ nop /* 076284 7F041754 45030006 */ bc1tl .L7F041770 /* 076288 7F041758 44819000 */ mtc1 $at, $f18 .L7F04175C: @@ -2207,7 +2268,7 @@ glabel sub_GAME_7F041400 /* 076298 7F041768 8FAC00D8 */ lw $t4, 0xd8($sp) /* 07629C 7F04176C 44819000 */ mtc1 $at, $f18 .L7F041770: -/* 0762A0 7F041770 00000000 */ nop +/* 0762A0 7F041770 00000000 */ nop /* 0762A4 7F041774 E4920008 */ swc1 $f18, 8($a0) /* 0762A8 7F041778 8FAC00D8 */ lw $t4, 0xd8($sp) .L7F04177C: @@ -2290,12 +2351,12 @@ glabel sub_GAME_7F0417DC .L7F041868: /* 076398 7F041868 C7B20068 */ lwc1 $f18, 0x68($sp) /* 07639C 7F04186C 4602403E */ c.le.s $f8, $f2 -/* 0763A0 7F041870 00000000 */ nop +/* 0763A0 7F041870 00000000 */ nop /* 0763A4 7F041874 45020055 */ bc1fl .L7F0419CC /* 0763A8 7F041878 00001025 */ move $v0, $zero /* 0763AC 7F04187C 46009180 */ add.s $f6, $f18, $f0 /* 0763B0 7F041880 4606103E */ c.le.s $f2, $f6 -/* 0763B4 7F041884 00000000 */ nop +/* 0763B4 7F041884 00000000 */ nop /* 0763B8 7F041888 45020050 */ bc1fl .L7F0419CC /* 0763BC 7F04188C 00001025 */ move $v0, $zero /* 0763C0 7F041890 904F0001 */ lbu $t7, 1($v0) @@ -2335,7 +2396,7 @@ glabel sub_GAME_7F0417DC /* 076448 7F041918 C7A60068 */ lwc1 $f6, 0x68($sp) /* 07644C 7F04191C 460A9080 */ add.s $f2, $f18, $f10 /* 076450 7F041920 4602403E */ c.le.s $f8, $f2 -/* 076454 7F041924 00000000 */ nop +/* 076454 7F041924 00000000 */ nop /* 076458 7F041928 45020028 */ bc1fl .L7F0419CC /* 07645C 7F04192C 00001025 */ move $v0, $zero /* 076460 7F041930 4606103E */ c.le.s $f2, $f6 @@ -2447,7 +2508,7 @@ glabel sub_GAME_7F0419E4 /* 0765B8 7F041A88 C5260000 */ lwc1 $f6, ($t1) /* 0765BC 7F041A8C 8FB200B8 */ lw $s2, 0xb8($sp) /* 0765C0 7F041A90 4606203C */ c.lt.s $f4, $f6 -/* 0765C4 7F041A94 00000000 */ nop +/* 0765C4 7F041A94 00000000 */ nop /* 0765C8 7F041A98 4502001C */ bc1fl .L7F041B0C /* 0765CC 7F041A9C 906E0001 */ lbu $t6, 1($v1) /* 0765D0 7F041AA0 E5240000 */ swc1 $f4, ($t1) @@ -2577,12 +2638,12 @@ glabel sub_GAME_7F041BB8 /* 076764 7F041C34 46000207 */ neg.s $f8, $f0 /* 076768 7F041C38 46045400 */ add.s $f16, $f10, $f4 /* 07676C 7F041C3C 4610403E */ c.le.s $f8, $f16 -/* 076770 7F041C40 00000000 */ nop +/* 076770 7F041C40 00000000 */ nop /* 076774 7F041C44 4502006B */ bc1fl .L7F041DF4 /* 076778 7F041C48 00001025 */ move $v0, $zero /* 07677C 7F041C4C 46009180 */ add.s $f6, $f18, $f0 /* 076780 7F041C50 4606803E */ c.le.s $f16, $f6 -/* 076784 7F041C54 00000000 */ nop +/* 076784 7F041C54 00000000 */ nop /* 076788 7F041C58 45020066 */ bc1fl .L7F041DF4 /* 07678C 7F041C5C 00001025 */ move $v0, $zero /* 076790 7F041C60 924E0001 */ lbu $t6, 1($s2) @@ -2628,7 +2689,7 @@ glabel sub_GAME_7F041BB8 /* 076830 7F041D00 C4A80000 */ lwc1 $f8, ($a1) /* 076834 7F041D04 460A9000 */ add.s $f0, $f18, $f10 /* 076838 7F041D08 4608003C */ c.lt.s $f0, $f8 -/* 07683C 7F041D0C 00000000 */ nop +/* 07683C 7F041D0C 00000000 */ nop /* 076840 7F041D10 45020038 */ bc1fl .L7F041DF4 /* 076844 7F041D14 00001025 */ move $v0, $zero /* 076848 7F041D18 E4A00000 */ swc1 $f0, ($a1) @@ -2662,7 +2723,7 @@ glabel sub_GAME_7F041BB8 /* 0768B8 7F041D88 C4920008 */ lwc1 $f18, 8($a0) /* 0768BC 7F041D8C 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0768C0 7F041D90 46121032 */ c.eq.s $f2, $f18 -/* 0768C4 7F041D94 00000000 */ nop +/* 0768C4 7F041D94 00000000 */ nop /* 0768C8 7F041D98 45030006 */ bc1tl .L7F041DB4 /* 0768CC 7F041D9C 44815000 */ mtc1 $at, $f10 .L7F041DA0: @@ -2672,7 +2733,7 @@ glabel sub_GAME_7F041BB8 /* 0768DC 7F041DAC 8FA90044 */ lw $t1, 0x44($sp) /* 0768E0 7F041DB0 44815000 */ mtc1 $at, $f10 .L7F041DB4: -/* 0768E4 7F041DB4 00000000 */ nop +/* 0768E4 7F041DB4 00000000 */ nop /* 0768E8 7F041DB8 E48A0008 */ swc1 $f10, 8($a0) /* 0768EC 7F041DBC 8FA90044 */ lw $t1, 0x44($sp) .L7F041DC0: @@ -2846,7 +2907,8 @@ bool projectileFindCollidingProp(PropRecord *prop, coord3d *pos1, coord3d *pos2, #ifdef NONMATCHING void handles_projectile_motion(void) { - + //this function contains + // osSyncPrintf("stanLineObjGfx: %d rooms is more than %d\n",arg0+0x58,20); } #else GLOBAL_ASM( @@ -2881,13 +2943,13 @@ glabel handles_projectile_motion /* 076DD8 7F0422A8 C4A60004 */ lwc1 $f6, 4($a1) /* 076DDC 7F0422AC C488005C */ lwc1 $f8, 0x5c($a0) /* 076DE0 7F0422B0 46083032 */ c.eq.s $f6, $f8 -/* 076DE4 7F0422B4 00000000 */ nop +/* 076DE4 7F0422B4 00000000 */ nop /* 076DE8 7F0422B8 45020008 */ bc1fl .L7F0422DC /* 076DEC 7F0422BC E7A00268 */ swc1 $f0, 0x268($sp) /* 076DF0 7F0422C0 C4AA0008 */ lwc1 $f10, 8($a1) /* 076DF4 7F0422C4 C4900060 */ lwc1 $f16, 0x60($a0) /* 076DF8 7F0422C8 46105032 */ c.eq.s $f10, $f16 -/* 076DFC 7F0422CC 00000000 */ nop +/* 076DFC 7F0422CC 00000000 */ nop /* 076E00 7F0422D0 450301C6 */ bc1tl .L7F0429EC /* 076E04 7F0422D4 8FBF003C */ lw $ra, 0x3c($sp) /* 076E08 7F0422D8 E7A00268 */ swc1 $f0, 0x268($sp) @@ -2948,12 +3010,12 @@ glabel handles_projectile_motion /* 076EDC 7F0423AC 8FA40048 */ lw $a0, 0x48($sp) .L7F0423B0: /* 076EE0 7F0423B0 27A50268 */ addiu $a1, $sp, 0x268 -/* 076EE4 7F0423B4 0FC2DE9E */ jal sub_GAME_7F0B7A78 +/* 076EE4 7F0423B4 0FC2DE9E */ jal bgTestBulletHitBackground /* 076EE8 7F0423B8 27A70274 */ addiu $a3, $sp, 0x274 /* 076EEC 7F0423BC 50400092 */ beql $v0, $zero, .L7F042608 /* 076EF0 7F0423C0 8E260004 */ lw $a2, 4($s1) /* 076EF4 7F0423C4 0FC2D20C */ jal get_room_data_float2 -/* 076EF8 7F0423C8 00000000 */ nop +/* 076EF8 7F0423C8 00000000 */ nop /* 076EFC 7F0423CC C7A60274 */ lwc1 $f6, 0x274($sp) /* 076F00 7F0423D0 C7AA0278 */ lwc1 $f10, 0x278($sp) /* 076F04 7F0423D4 C7B2027C */ lwc1 $f18, 0x27c($sp) @@ -2967,15 +3029,15 @@ glabel handles_projectile_motion /* 076F24 7F0423F4 E7A4027C */ swc1 $f4, 0x27c($sp) /* 076F28 7F0423F8 C64C0058 */ lwc1 $f12, 0x58($s2) /* 076F2C 7F0423FC 4606603E */ c.le.s $f12, $f6 -/* 076F30 7F042400 00000000 */ nop +/* 076F30 7F042400 00000000 */ nop /* 076F34 7F042404 4502000A */ bc1fl .L7F042430 /* 076F38 7F042408 460C503E */ c.le.s $f10, $f12 /* 076F3C 7F04240C 4606403E */ c.le.s $f8, $f6 -/* 076F40 7F042410 00000000 */ nop +/* 076F40 7F042410 00000000 */ nop /* 076F44 7F042414 45020006 */ bc1fl .L7F042430 /* 076F48 7F042418 460C503E */ c.le.s $f10, $f12 /* 076F4C 7F04241C 4608603E */ c.le.s $f12, $f8 -/* 076F50 7F042420 00000000 */ nop +/* 076F50 7F042420 00000000 */ nop /* 076F54 7F042424 4503000E */ bc1tl .L7F042460 /* 076F58 7F042428 C642005C */ lwc1 $f2, 0x5c($s2) /* 076F5C 7F04242C 460C503E */ c.le.s $f10, $f12 @@ -2984,11 +3046,11 @@ glabel handles_projectile_motion /* 076F64 7F042434 45020074 */ bc1fl .L7F042608 /* 076F68 7F042438 8E260004 */ lw $a2, 4($s1) /* 076F6C 7F04243C 4610503E */ c.le.s $f10, $f16 -/* 076F70 7F042440 00000000 */ nop +/* 076F70 7F042440 00000000 */ nop /* 076F74 7F042444 45020070 */ bc1fl .L7F042608 /* 076F78 7F042448 8E260004 */ lw $a2, 4($s1) /* 076F7C 7F04244C 460C803E */ c.le.s $f16, $f12 -/* 076F80 7F042450 00000000 */ nop +/* 076F80 7F042450 00000000 */ nop /* 076F84 7F042454 4502006C */ bc1fl .L7F042608 /* 076F88 7F042458 8E260004 */ lw $a2, 4($s1) /* 076F8C 7F04245C C642005C */ lwc1 $f2, 0x5c($s2) @@ -2997,15 +3059,15 @@ glabel handles_projectile_motion /* 076F94 7F042464 C7A40278 */ lwc1 $f4, 0x278($sp) /* 076F98 7F042468 C7A6026C */ lwc1 $f6, 0x26c($sp) /* 076F9C 7F04246C 4612103E */ c.le.s $f2, $f18 -/* 076FA0 7F042470 00000000 */ nop +/* 076FA0 7F042470 00000000 */ nop /* 076FA4 7F042474 4502000A */ bc1fl .L7F0424A0 /* 076FA8 7F042478 4602303E */ c.le.s $f6, $f2 /* 076FAC 7F04247C 4612203E */ c.le.s $f4, $f18 -/* 076FB0 7F042480 00000000 */ nop +/* 076FB0 7F042480 00000000 */ nop /* 076FB4 7F042484 45020006 */ bc1fl .L7F0424A0 /* 076FB8 7F042488 4602303E */ c.le.s $f6, $f2 /* 076FBC 7F04248C 4604103E */ c.le.s $f2, $f4 -/* 076FC0 7F042490 00000000 */ nop +/* 076FC0 7F042490 00000000 */ nop /* 076FC4 7F042494 4503000E */ bc1tl .L7F0424D0 /* 076FC8 7F042498 C6400060 */ lwc1 $f0, 0x60($s2) /* 076FCC 7F04249C 4602303E */ c.le.s $f6, $f2 @@ -3014,11 +3076,11 @@ glabel handles_projectile_motion /* 076FD4 7F0424A4 45020058 */ bc1fl .L7F042608 /* 076FD8 7F0424A8 8E260004 */ lw $a2, 4($s1) /* 076FDC 7F0424AC 4608303E */ c.le.s $f6, $f8 -/* 076FE0 7F0424B0 00000000 */ nop +/* 076FE0 7F0424B0 00000000 */ nop /* 076FE4 7F0424B4 45020054 */ bc1fl .L7F042608 /* 076FE8 7F0424B8 8E260004 */ lw $a2, 4($s1) /* 076FEC 7F0424BC 4602403E */ c.le.s $f8, $f2 -/* 076FF0 7F0424C0 00000000 */ nop +/* 076FF0 7F0424C0 00000000 */ nop /* 076FF4 7F0424C4 45020050 */ bc1fl .L7F042608 /* 076FF8 7F0424C8 8E260004 */ lw $a2, 4($s1) /* 076FFC 7F0424CC C6400060 */ lwc1 $f0, 0x60($s2) @@ -3027,15 +3089,15 @@ glabel handles_projectile_motion /* 077004 7F0424D4 C7B0027C */ lwc1 $f16, 0x27c($sp) /* 077008 7F0424D8 C7B20270 */ lwc1 $f18, 0x270($sp) /* 07700C 7F0424DC 460A003E */ c.le.s $f0, $f10 -/* 077010 7F0424E0 00000000 */ nop +/* 077010 7F0424E0 00000000 */ nop /* 077014 7F0424E4 4502000A */ bc1fl .L7F042510 /* 077018 7F0424E8 4600903E */ c.le.s $f18, $f0 /* 07701C 7F0424EC 460A803E */ c.le.s $f16, $f10 -/* 077020 7F0424F0 00000000 */ nop +/* 077020 7F0424F0 00000000 */ nop /* 077024 7F0424F4 45020006 */ bc1fl .L7F042510 /* 077028 7F0424F8 4600903E */ c.le.s $f18, $f0 /* 07702C 7F0424FC 4610003E */ c.le.s $f0, $f16 -/* 077030 7F042500 00000000 */ nop +/* 077030 7F042500 00000000 */ nop /* 077034 7F042504 4503000E */ bc1tl .L7F042540 /* 077038 7F042508 C7A60274 */ lwc1 $f6, 0x274($sp) /* 07703C 7F04250C 4600903E */ c.le.s $f18, $f0 @@ -3044,18 +3106,18 @@ glabel handles_projectile_motion /* 077044 7F042514 4502003C */ bc1fl .L7F042608 /* 077048 7F042518 8E260004 */ lw $a2, 4($s1) /* 07704C 7F04251C 4604903E */ c.le.s $f18, $f4 -/* 077050 7F042520 00000000 */ nop +/* 077050 7F042520 00000000 */ nop /* 077054 7F042524 45020038 */ bc1fl .L7F042608 /* 077058 7F042528 8E260004 */ lw $a2, 4($s1) /* 07705C 7F04252C 4600203E */ c.le.s $f4, $f0 -/* 077060 7F042530 00000000 */ nop +/* 077060 7F042530 00000000 */ nop /* 077064 7F042534 45020034 */ bc1fl .L7F042608 /* 077068 7F042538 8E260004 */ lw $a2, 4($s1) /* 07706C 7F04253C C7A60274 */ lwc1 $f6, 0x274($sp) .L7F042540: /* 077070 7F042540 C7A80278 */ lwc1 $f8, 0x278($sp) /* 077074 7F042544 46066032 */ c.eq.s $f12, $f6 -/* 077078 7F042548 00000000 */ nop +/* 077078 7F042548 00000000 */ nop /* 07707C 7F04254C 4502000A */ bc1fl .L7F042578 /* 077080 7F042550 C7B00274 */ lwc1 $f16, 0x274($sp) /* 077084 7F042554 46081032 */ c.eq.s $f2, $f8 @@ -3063,7 +3125,7 @@ glabel handles_projectile_motion /* 07708C 7F04255C 45020006 */ bc1fl .L7F042578 /* 077090 7F042560 C7B00274 */ lwc1 $f16, 0x274($sp) /* 077094 7F042564 460A0032 */ c.eq.s $f0, $f10 -/* 077098 7F042568 00000000 */ nop +/* 077098 7F042568 00000000 */ nop /* 07709C 7F04256C 45030026 */ bc1tl .L7F042608 /* 0770A0 7F042570 8E260004 */ lw $a2, 4($s1) /* 0770A4 7F042574 C7B00274 */ lwc1 $f16, 0x274($sp) @@ -3087,13 +3149,13 @@ glabel handles_projectile_motion /* 0770E8 7F0425B8 E60A0008 */ swc1 $f10, 8($s0) /* 0770EC 7F0425BC C6120004 */ lwc1 $f18, 4($s0) /* 0770F0 7F0425C0 4612A032 */ c.eq.s $f20, $f18 -/* 0770F4 7F0425C4 00000000 */ nop +/* 0770F4 7F0425C4 00000000 */ nop /* 0770F8 7F0425C8 45000007 */ bc1f .L7F0425E8 -/* 0770FC 7F0425CC 00000000 */ nop +/* 0770FC 7F0425CC 00000000 */ nop /* 077100 7F0425D0 C6040008 */ lwc1 $f4, 8($s0) /* 077104 7F0425D4 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 077108 7F0425D8 4604A032 */ c.eq.s $f20, $f4 -/* 07710C 7F0425DC 00000000 */ nop +/* 07710C 7F0425DC 00000000 */ nop /* 077110 7F0425E0 45030006 */ bc1tl .L7F0425FC /* 077114 7F0425E4 44813000 */ mtc1 $at, $f6 .L7F0425E8: @@ -3103,7 +3165,7 @@ glabel handles_projectile_motion /* 077124 7F0425F4 8E260004 */ lw $a2, 4($s1) /* 077128 7F0425F8 44813000 */ mtc1 $at, $f6 .L7F0425FC: -/* 07712C 7F0425FC 00000000 */ nop +/* 07712C 7F0425FC 00000000 */ nop /* 077130 7F042600 E6060008 */ swc1 $f6, 8($s0) /* 077134 7F042604 8E260004 */ lw $a2, 4($s1) .L7F042608: @@ -3141,14 +3203,14 @@ glabel handles_projectile_motion /* 0771B0 7F042680 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 0771B4 7F042684 C7A40064 */ lwc1 $f4, 0x64($sp) /* 0771B8 7F042688 4600603C */ c.lt.s $f12, $f0 -/* 0771BC 7F04268C 00000000 */ nop +/* 0771BC 7F04268C 00000000 */ nop /* 0771C0 7F042690 45020004 */ bc1fl .L7F0426A4 /* 0771C4 7F042694 44811000 */ mtc1 $at, $f2 /* 0771C8 7F042698 10000003 */ b .L7F0426A8 /* 0771CC 7F04269C 46006083 */ div.s $f2, $f12, $f0 /* 0771D0 7F0426A0 44811000 */ mtc1 $at, $f2 .L7F0426A4: -/* 0771D4 7F0426A4 00000000 */ nop +/* 0771D4 7F0426A4 00000000 */ nop .L7F0426A8: /* 0771D8 7F0426A8 46041202 */ mul.s $f8, $f2, $f4 /* 0771DC 7F0426AC C6660000 */ lwc1 $f6, ($s3) @@ -3423,19 +3485,19 @@ glabel sub_GAME_7F042A0C /* 077580 7F042A50 C6040008 */ lwc1 $f4, 8($s0) /* 077584 7F042A54 C4A20000 */ lwc1 $f2, ($a1) /* 077588 7F042A58 46041032 */ c.eq.s $f2, $f4 -/* 07758C 7F042A5C 00000000 */ nop +/* 07758C 7F042A5C 00000000 */ nop /* 077590 7F042A60 4502000E */ bc1fl .L7F042A9C /* 077594 7F042A64 E7A20098 */ swc1 $f2, 0x98($sp) /* 077598 7F042A68 C4A60004 */ lwc1 $f6, 4($a1) /* 07759C 7F042A6C C608000C */ lwc1 $f8, 0xc($s0) /* 0775A0 7F042A70 46083032 */ c.eq.s $f6, $f8 -/* 0775A4 7F042A74 00000000 */ nop +/* 0775A4 7F042A74 00000000 */ nop /* 0775A8 7F042A78 45020008 */ bc1fl .L7F042A9C /* 0775AC 7F042A7C E7A20098 */ swc1 $f2, 0x98($sp) /* 0775B0 7F042A80 C4AA0008 */ lwc1 $f10, 8($a1) /* 0775B4 7F042A84 C6100010 */ lwc1 $f16, 0x10($s0) /* 0775B8 7F042A88 46105032 */ c.eq.s $f10, $f16 -/* 0775BC 7F042A8C 00000000 */ nop +/* 0775BC 7F042A8C 00000000 */ nop /* 0775C0 7F042A90 45030104 */ bc1tl .L7F042EA4 /* 0775C4 7F042A94 8FBF0034 */ lw $ra, 0x34($sp) /* 0775C8 7F042A98 E7A20098 */ swc1 $f2, 0x98($sp) @@ -3470,7 +3532,7 @@ glabel sub_GAME_7F042A0C .L7F042B08: /* 077638 7F042B08 C7A4009C */ lwc1 $f4, 0x9c($sp) /* 07763C 7F042B0C 4602503C */ c.lt.s $f10, $f2 -/* 077640 7F042B10 00000000 */ nop +/* 077640 7F042B10 00000000 */ nop /* 077644 7F042B14 45020007 */ bc1fl .L7F042B34 /* 077648 7F042B18 46002181 */ sub.s $f6, $f4, $f0 /* 07764C 7F042B1C 46001401 */ sub.s $f16, $f2, $f0 @@ -3485,7 +3547,7 @@ glabel sub_GAME_7F042A0C /* 07766C 7F042B3C E7A8008C */ swc1 $f8, 0x8c($sp) .L7F042B40: /* 077670 7F042B40 0FC2C731 */ jal sub_GAME_7F0B1CC4 -/* 077674 7F042B44 00000000 */ nop +/* 077674 7F042B44 00000000 */ nop /* 077678 7F042B48 8E050008 */ lw $a1, 8($s0) /* 07767C 7F042B4C 8E060010 */ lw $a2, 0x10($s0) /* 077680 7F042B50 3C013F80 */ li $at, 0x3F800000 # 1.000000 @@ -3556,7 +3618,7 @@ glabel sub_GAME_7F042A0C /* 077780 7F042C50 C4900008 */ lwc1 $f16, 8($a0) /* 077784 7F042C54 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 077788 7F042C58 46101032 */ c.eq.s $f2, $f16 -/* 07778C 7F042C5C 00000000 */ nop +/* 07778C 7F042C5C 00000000 */ nop /* 077790 7F042C60 45030006 */ bc1tl .L7F042C7C /* 077794 7F042C64 44815000 */ mtc1 $at, $f10 .L7F042C68: @@ -3566,7 +3628,7 @@ glabel sub_GAME_7F042A0C /* 0777A4 7F042C74 C6000008 */ lwc1 $f0, 8($s0) /* 0777A8 7F042C78 44815000 */ mtc1 $at, $f10 .L7F042C7C: -/* 0777AC 7F042C7C 00000000 */ nop +/* 0777AC 7F042C7C 00000000 */ nop /* 0777B0 7F042C80 E48A0008 */ swc1 $f10, 8($a0) /* 0777B4 7F042C84 C6000008 */ lwc1 $f0, 8($s0) .L7F042C88: @@ -3574,20 +3636,20 @@ glabel sub_GAME_7F042A0C /* 0777BC 7F042C8C C7A4009C */ lwc1 $f4, 0x9c($sp) /* 0777C0 7F042C90 C7AA0098 */ lwc1 $f10, 0x98($sp) /* 0777C4 7F042C94 46009032 */ c.eq.s $f18, $f0 -/* 0777C8 7F042C98 00000000 */ nop +/* 0777C8 7F042C98 00000000 */ nop /* 0777CC 7F042C9C 4502000F */ bc1fl .L7F042CDC /* 0777D0 7F042CA0 46005481 */ sub.s $f18, $f10, $f0 /* 0777D4 7F042CA4 C606000C */ lwc1 $f6, 0xc($s0) /* 0777D8 7F042CA8 C7A800A0 */ lwc1 $f8, 0xa0($sp) /* 0777DC 7F042CAC 46062032 */ c.eq.s $f4, $f6 -/* 0777E0 7F042CB0 00000000 */ nop +/* 0777E0 7F042CB0 00000000 */ nop /* 0777E4 7F042CB4 45020009 */ bc1fl .L7F042CDC /* 0777E8 7F042CB8 46005481 */ sub.s $f18, $f10, $f0 /* 0777EC 7F042CBC C6100010 */ lwc1 $f16, 0x10($s0) /* 0777F0 7F042CC0 8FA200C8 */ lw $v0, 0xc8($sp) /* 0777F4 7F042CC4 C7B20098 */ lwc1 $f18, 0x98($sp) /* 0777F8 7F042CC8 46104032 */ c.eq.s $f8, $f16 -/* 0777FC 7F042CCC 00000000 */ nop +/* 0777FC 7F042CCC 00000000 */ nop /* 077800 7F042CD0 4503006A */ bc1tl .L7F042E7C /* 077804 7F042CD4 E4520000 */ swc1 $f18, ($v0) /* 077808 7F042CD8 46005481 */ sub.s $f18, $f10, $f0 @@ -3630,7 +3692,7 @@ glabel sub_GAME_7F042A0C /* 077898 7F042D68 E7B00044 */ swc1 $f16, 0x44($sp) /* 07789C 7F042D6C C6120010 */ lwc1 $f18, 0x10($s0) /* 0778A0 7F042D70 46125101 */ sub.s $f4, $f10, $f18 -/* 0778A4 7F042D74 0FC2CCF7 */ jal unkGeometry7F0B33DC +/* 0778A4 7F042D74 0FC2CCF7 */ jal calculateNormalizedLineIntersection /* 0778A8 7F042D78 E7A40048 */ swc1 $f4, 0x48($sp) /* 0778AC 7F042D7C C7A80044 */ lwc1 $f8, 0x44($sp) /* 0778B0 7F042D80 3C018005 */ lui $at, %hi(D_80052A5C) @@ -3741,7 +3803,7 @@ s32 sub_GAME_7F042EB4(struct ObjectRecord *arg0, f32 *arg1, struct coord3d *arg2 * deceleration and the global update multiplier. * * The new speed and distance done are written back to those pointers. - * + * * offsets: 077A48, 7F042F18 * (copied from Perfect Dark) */ @@ -3749,7 +3811,7 @@ void chrobjApplySpeed(f32 *openPosition, f32 maxFrac, f32 *speedPtr, f32 accel, { f32 speed = *speedPtr; s32 i; - + for (i = 0; i < g_ClockTimer; i++) { f32 limit = speed * speed * 0.5f / decel; @@ -3944,7 +4006,7 @@ glabel sub_GAME_7F0431E4 /* 077DE4 7F0432B4 C7AE0050 */ lwc1 $f14, 0x50($sp) /* 077DE8 7F0432B8 C7A00054 */ lwc1 $f0, 0x54($sp) /* 077DEC 7F0432BC 46021102 */ mul.s $f4, $f2, $f2 -/* 077DF0 7F0432C0 00000000 */ nop +/* 077DF0 7F0432C0 00000000 */ nop /* 077DF4 7F0432C4 460E7182 */ mul.s $f6, $f14, $f14 /* 077DF8 7F0432C8 46062200 */ add.s $f8, $f4, $f6 /* 077DFC 7F0432CC 46000282 */ mul.s $f10, $f0, $f0 @@ -3954,7 +4016,7 @@ glabel sub_GAME_7F0431E4 /* 077E0C 7F0432DC C7A4005C */ lwc1 $f4, 0x5c($sp) /* 077E10 7F0432E0 C7AA0060 */ lwc1 $f10, 0x60($sp) /* 077E14 7F0432E4 46042182 */ mul.s $f6, $f4, $f4 -/* 077E18 7F0432E8 00000000 */ nop +/* 077E18 7F0432E8 00000000 */ nop /* 077E1C 7F0432EC 460A5202 */ mul.s $f8, $f10, $f10 /* 077E20 7F0432F0 C7AA0064 */ lwc1 $f10, 0x64($sp) /* 077E24 7F0432F4 46083100 */ add.s $f4, $f6, $f8 @@ -3965,7 +4027,7 @@ glabel sub_GAME_7F0431E4 /* 077E38 7F043308 C7A8006C */ lwc1 $f8, 0x6c($sp) /* 077E3C 7F04330C C7A60070 */ lwc1 $f6, 0x70($sp) /* 077E40 7F043310 46084282 */ mul.s $f10, $f8, $f8 -/* 077E44 7F043314 00000000 */ nop +/* 077E44 7F043314 00000000 */ nop /* 077E48 7F043318 46063102 */ mul.s $f4, $f6, $f6 /* 077E4C 7F04331C C7A60074 */ lwc1 $f6, 0x74($sp) /* 077E50 7F043320 46045200 */ add.s $f8, $f10, $f4 @@ -3977,9 +4039,9 @@ glabel sub_GAME_7F0431E4 /* 077E68 7F043338 C6220018 */ lwc1 $f2, 0x18($s1) /* 077E6C 7F04333C C62E0020 */ lwc1 $f14, 0x20($s1) /* 077E70 7F043340 46101032 */ c.eq.s $f2, $f16 -/* 077E74 7F043344 00000000 */ nop +/* 077E74 7F043344 00000000 */ nop /* 077E78 7F043348 45000005 */ bc1f .L7F043360 -/* 077E7C 7F04334C 00000000 */ nop +/* 077E7C 7F04334C 00000000 */ nop /* 077E80 7F043350 46107032 */ c.eq.s $f14, $f16 /* 077E84 7F043354 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 077E88 7F043358 45030013 */ bc1tl .L7F0433A8 @@ -3998,10 +4060,10 @@ glabel sub_GAME_7F0431E4 /* 077EB8 7F043388 46009303 */ div.s $f12, $f18, $f0 /* 077EBC 7F04338C 44808000 */ mtc1 $zero, $f16 /* 077EC0 7F043390 460C1082 */ mul.s $f2, $f2, $f12 -/* 077EC4 7F043394 00000000 */ nop +/* 077EC4 7F043394 00000000 */ nop /* 077EC8 7F043398 460C7382 */ mul.s $f14, $f14, $f12 /* 077ECC 7F04339C 10000004 */ b .L7F0433B0 -/* 077ED0 7F0433A0 00000000 */ nop +/* 077ED0 7F0433A0 00000000 */ nop /* 077ED4 7F0433A4 44817000 */ mtc1 $at, $f14 .L7F0433A8: /* 077ED8 7F0433A8 44819000 */ mtc1 $at, $f18 @@ -4053,7 +4115,7 @@ glabel sub_GAME_7F0431E4 /* 077F84 7F043454 0FC16F84 */ jal quaternion_ensure_shortest_path /* 077F88 7F043458 8FA40024 */ lw $a0, 0x24($sp) /* 077F8C 7F04345C 44808000 */ mtc1 $zero, $f16 -/* 077F90 7F043460 00000000 */ nop +/* 077F90 7F043460 00000000 */ nop /* 077F94 7F043464 E6100060 */ swc1 $f16, 0x60($s0) /* 077F98 7F043468 C7A800CC */ lwc1 $f8, 0xcc($sp) /* 077F9C 7F04346C C7AA008C */ lwc1 $f10, 0x8c($sp) @@ -4070,19 +4132,19 @@ glabel sub_GAME_7F0431E4 /* 077FC8 7F043498 44808000 */ mtc1 $zero, $f16 /* 077FCC 7F04349C 46000486 */ mov.s $f18, $f0 /* 077FD0 7F0434A0 4600803C */ c.lt.s $f16, $f0 -/* 077FD4 7F0434A4 00000000 */ nop +/* 077FD4 7F0434A4 00000000 */ nop /* 077FD8 7F0434A8 45020018 */ bc1fl .L7F04350C /* 077FDC 7F0434AC 4600803C */ c.lt.s $f16, $f0 /* 077FE0 7F0434B0 C622001C */ lwc1 $f2, 0x1c($s1) /* 077FE4 7F0434B4 8FA2011C */ lw $v0, 0x11c($sp) /* 077FE8 7F0434B8 4602803C */ c.lt.s $f16, $f2 -/* 077FEC 7F0434BC 00000000 */ nop +/* 077FEC 7F0434BC 00000000 */ nop /* 077FF0 7F0434C0 45020012 */ bc1fl .L7F04350C /* 077FF4 7F0434C4 4600803C */ c.lt.s $f16, $f0 /* 077FF8 7F0434C8 C44A0004 */ lwc1 $f10, 4($v0) /* 077FFC 7F0434CC 3C014080 */ li $at, 0x40800000 # 4.000000 /* 078000 7F0434D0 4602503C */ c.lt.s $f10, $f2 -/* 078004 7F0434D4 00000000 */ nop +/* 078004 7F0434D4 00000000 */ nop /* 078008 7F0434D8 4502000C */ bc1fl .L7F04350C /* 07800C 7F0434DC 4600803C */ c.lt.s $f16, $f0 /* 078010 7F0434E0 44812000 */ mtc1 $at, $f4 @@ -4102,7 +4164,7 @@ glabel sub_GAME_7F0431E4 /* 078044 7F043514 45000013 */ bc1f .L7F043564 /* 078048 7F043518 C44E0004 */ lwc1 $f14, 4($v0) /* 07804C 7F04351C 4610103C */ c.lt.s $f2, $f16 -/* 078050 7F043520 00000000 */ nop +/* 078050 7F043520 00000000 */ nop /* 078054 7F043524 45020010 */ bc1fl .L7F043568 /* 078058 7F043528 C62A0020 */ lwc1 $f10, 0x20($s1) /* 07805C 7F04352C 460E103C */ c.lt.s $f2, $f14 @@ -4130,7 +4192,7 @@ glabel sub_GAME_7F0431E4 /* 0780AC 7F04357C C5E00014 */ lwc1 $f0, 0x14($t7) /* 0780B0 7F043580 E7B20030 */ swc1 $f18, 0x30($sp) /* 0780B4 7F043584 460A2182 */ mul.s $f6, $f4, $f10 -/* 0780B8 7F043588 00000000 */ nop +/* 0780B8 7F043588 00000000 */ nop /* 0780BC 7F04358C 46027102 */ mul.s $f4, $f14, $f2 /* 0780C0 7F043590 46043280 */ add.s $f10, $f6, $f4 /* 0780C4 7F043594 46000102 */ mul.s $f4, $f0, $f0 @@ -4151,15 +4213,15 @@ glabel sub_GAME_7F0431E4 /* 078100 7F0435D0 E60A0064 */ swc1 $f10, 0x64($s0) /* 078104 7F0435D4 44813000 */ mtc1 $at, $f6 .L7F0435D8: -/* 078108 7F0435D8 00000000 */ nop +/* 078108 7F0435D8 00000000 */ nop /* 07810C 7F0435DC E6060064 */ swc1 $f6, 0x64($s0) .L7F0435E0: /* 078110 7F0435E0 C6000064 */ lwc1 $f0, 0x64($s0) /* 078114 7F0435E4 3C018005 */ lui $at, %hi(D_80052A84) /* 078118 7F0435E8 4610003C */ c.lt.s $f0, $f16 -/* 07811C 7F0435EC 00000000 */ nop +/* 07811C 7F0435EC 00000000 */ nop /* 078120 7F0435F0 45000004 */ bc1f .L7F043604 -/* 078124 7F0435F4 00000000 */ nop +/* 078124 7F0435F4 00000000 */ nop /* 078128 7F0435F8 46000107 */ neg.s $f4, $f0 /* 07812C 7F0435FC E6040064 */ swc1 $f4, 0x64($s0) /* 078130 7F043600 C6000064 */ lwc1 $f0, 0x64($s0) @@ -4167,15 +4229,15 @@ glabel sub_GAME_7F0431E4 /* 078134 7F043604 C4222A84 */ lwc1 $f2, %lo(D_80052A84)($at) /* 078138 7F043608 3C018005 */ lui $at, %hi(D_80052A88) /* 07813C 7F04360C 4602003C */ c.lt.s $f0, $f2 -/* 078140 7F043610 00000000 */ nop +/* 078140 7F043610 00000000 */ nop /* 078144 7F043614 45000003 */ bc1f .L7F043624 -/* 078148 7F043618 00000000 */ nop +/* 078148 7F043618 00000000 */ nop /* 07814C 7F04361C 10000007 */ b .L7F04363C /* 078150 7F043620 E6020064 */ swc1 $f2, 0x64($s0) .L7F043624: /* 078154 7F043624 C4222A88 */ lwc1 $f2, %lo(D_80052A88)($at) /* 078158 7F043628 4600103C */ c.lt.s $f2, $f0 -/* 07815C 7F04362C 00000000 */ nop +/* 07815C 7F04362C 00000000 */ nop /* 078160 7F043630 45020003 */ bc1fl .L7F043640 /* 078164 7F043634 8FBF001C */ lw $ra, 0x1c($sp) /* 078168 7F043638 E6020064 */ swc1 $f2, 0x64($s0) @@ -4222,7 +4284,7 @@ glabel sub_GAME_7F043650 /* 0781C0 7F043690 5F20004E */ bgtzl $t9, .L7F0437CC /* 0781C4 7F043694 00414024 */ and $t0, $v0, $at /* 0781C8 7F043698 1100004B */ beqz $t0, .L7F0437C8 -/* 0781CC 7F04369C 3C0A8003 */ lui $t2, %hi(Throwing_knife_SFX) +/* 0781CC 7F04369C 3C0A8003 */ lui $t2, %hi(Throwing_knife_SFX) /* 0781D0 7F0436A0 254A0B2C */ addiu $t2, %lo(Throwing_knife_SFX) # addiu $t2, $t2, 0xb2c /* 0781D4 7F0436A4 8D410000 */ lw $at, ($t2) /* 0781D8 7F0436A8 27A90038 */ addiu $t1, $sp, 0x38 @@ -4238,7 +4300,7 @@ glabel sub_GAME_7F043650 /* 078200 7F0436D0 00007810 */ mfhi $t7 /* 078204 7F0436D4 AFAF0030 */ sw $t7, 0x30($sp) /* 078208 7F0436D8 8E03006C */ lw $v1, 0x6c($s0) -/* 07820C 7F0436DC 3C198005 */ lui $t9, %hi(g_GlobalTimer) +/* 07820C 7F0436DC 3C198005 */ lui $t9, %hi(g_GlobalTimer) /* 078210 7F0436E0 8F39837C */ lw $t9, %lo(g_GlobalTimer)($t9) /* 078214 7F0436E4 8C7800A0 */ lw $t8, 0xa0($v1) /* 078218 7F0436E8 8FA70034 */ lw $a3, 0x34($sp) @@ -4289,7 +4351,7 @@ glabel sub_GAME_7F043650 /* 0782C4 7F043794 8D440098 */ lw $a0, 0x98($t2) /* 0782C8 7F043798 0FC14E84 */ jal chrobjSndCreatePostEventDefault /* 0782CC 7F04379C 24A50008 */ addiu $a1, $a1, 8 -/* 0782D0 7F0437A0 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) +/* 0782D0 7F0437A0 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) /* 0782D4 7F0437A4 8D8C837C */ lw $t4, %lo(g_GlobalTimer)($t4) /* 0782D8 7F0437A8 8E0D006C */ lw $t5, 0x6c($s0) /* 0782DC 7F0437AC 240F0001 */ li $t7, 1 @@ -4307,7 +4369,7 @@ glabel sub_GAME_7F043650 /* 078304 7F0437D4 50800009 */ beql $a0, $zero, .L7F0437FC /* 078308 7F0437D8 8E09006C */ lw $t1, 0x6c($s0) /* 07830C 7F0437DC 0C00237C */ jal sndGetPlayingState -/* 078310 7F0437E0 00000000 */ nop +/* 078310 7F0437E0 00000000 */ nop /* 078314 7F0437E4 50400005 */ beql $v0, $zero, .L7F0437FC /* 078318 7F0437E8 8E09006C */ lw $t1, 0x6c($s0) /* 07831C 7F0437EC 8E0B006C */ lw $t3, 0x6c($s0) @@ -4319,7 +4381,7 @@ glabel sub_GAME_7F043650 /* 078330 7F043800 50800009 */ beql $a0, $zero, .L7F043828 /* 078334 7F043804 8FBF001C */ lw $ra, 0x1c($sp) /* 078338 7F043808 0C00237C */ jal sndGetPlayingState -/* 07833C 7F04380C 00000000 */ nop +/* 07833C 7F04380C 00000000 */ nop /* 078340 7F043810 50400005 */ beql $v0, $zero, .L7F043828 /* 078344 7F043814 8FBF001C */ lw $ra, 0x1c($sp) /* 078348 7F043818 8E0A006C */ lw $t2, 0x6c($s0) @@ -4331,7 +4393,7 @@ glabel sub_GAME_7F043650 /* 078358 7F043828 8FB00018 */ lw $s0, 0x18($sp) /* 07835C 7F04382C 27BD0040 */ addiu $sp, $sp, 0x40 /* 078360 7F043830 03E00008 */ jr $ra -/* 078364 7F043834 00000000 */ nop +/* 078364 7F043834 00000000 */ nop ) #endif @@ -4443,7 +4505,7 @@ glabel sub_GAME_7F043650 /* 076284 7F043894 50800009 */ beql $a0, $zero, .L7F0438BC /* 076288 7F043898 8E09006C */ lw $t1, 0x6c($s0) /* 07628C 7F04389C 0C002094 */ jal sndGetPlayingState -/* 076290 7F0438A0 00000000 */ nop +/* 076290 7F0438A0 00000000 */ nop /* 076294 7F0438A4 50400005 */ beql $v0, $zero, .L7F0438BC /* 076298 7F0438A8 8E09006C */ lw $t1, 0x6c($s0) /* 07629C 7F0438AC 8E0B006C */ lw $t3, 0x6c($s0) @@ -4455,7 +4517,7 @@ glabel sub_GAME_7F043650 /* 0762B0 7F0438C0 50800009 */ beql $a0, $zero, .L7F0438E8 /* 0762B4 7F0438C4 8FBF001C */ lw $ra, 0x1c($sp) /* 0762B8 7F0438C8 0C002094 */ jal sndGetPlayingState -/* 0762BC 7F0438CC 00000000 */ nop +/* 0762BC 7F0438CC 00000000 */ nop /* 0762C0 7F0438D0 50400005 */ beql $v0, $zero, .L7F0438E8 /* 0762C4 7F0438D4 8FBF001C */ lw $ra, 0x1c($sp) /* 0762C8 7F0438D8 8E0A006C */ lw $t2, 0x6c($s0) @@ -4467,7 +4529,7 @@ glabel sub_GAME_7F043650 /* 0762D8 7F0438E8 8FB00018 */ lw $s0, 0x18($sp) /* 0762DC 7F0438EC 27BD0040 */ addiu $sp, $sp, 0x40 /* 0762E0 7F0438F0 03E00008 */ jr $ra -/* 0762E4 7F0438F4 00000000 */ nop +/* 0762E4 7F0438F4 00000000 */ nop ) #endif #endif @@ -4622,7 +4684,7 @@ void propExplode(PropRecord *prop, s32 /* enum EXPLOSION_DEF */ explosionType) prop_obj = prop->obj; playernum = (prop_obj->runtime_bitflags & RUNTIMEBITFLAG_OWNER) >> RUNTIMEBITSHIFT_OWNER; - + if (prop->parent) { parent = prop->parent; @@ -4633,7 +4695,7 @@ void propExplode(PropRecord *prop, s32 /* enum EXPLOSION_DEF */ explosionType) } stan = parent->stan; - + if (prop->flags & PROPFLAG_ONSCREEN) { mtx = getsubmatrix(prop_obj->model); @@ -4694,7 +4756,7 @@ void propExplode(PropRecord *prop, s32 /* enum EXPLOSION_DEF */ explosionType) * US address 7F043D70. * JP address 7F044074. * EU address 7F043E34. - * + * * Seems to be a subset of Perfect Dark weaponTick. */ void chrobjWeaponTick(struct PropRecord* prop) @@ -4721,7 +4783,7 @@ void chrobjWeaponTick(struct PropRecord* prop) { return; } - + if (obj->type == PROP_TYPE_EXPLOSION) // 7 { if (obj->flags & PROPFLAG_IS_DRONE_GUN) @@ -4729,18 +4791,18 @@ void chrobjWeaponTick(struct PropRecord* prop) propExplode(prop, EXPLOSION_DEF_DRONE); obj->runtime_bitflags |= RUNTIMEBITFLAG_REMOVE; } - + return; } if (obj->type == PROP_TYPE_SMOKE) // 8 { weapon = prop->weapon; - + if (((weapon->weaponnum == ITEM_GRENADE) || (weapon->weaponnum == ITEM_NULL87)) && (weapon->timer >= 0)) { weapon->timer -= g_ClockTimer; - + if (weapon->timer < 0) { propExplode(prop, (obj->flags2 & PROPFLAG2_DOOR_ALTCOORDSYSTEM) ? EXPLOSION_DEF_MASSIVE : EXPLOSION_DEF_STANDARD); @@ -4768,7 +4830,7 @@ void chrobjWeaponTick(struct PropRecord* prop) else if (((weapon->weaponnum == ITEM_TIMEDMINE) || (weapon->weaponnum == ITEM_BOMBCASE)) && (weapon->timer >= 0)) { weapon->timer -= g_ClockTimer; - + if (weapon->timer < 0) { #if defined(VERSION_US) @@ -4779,7 +4841,7 @@ void chrobjWeaponTick(struct PropRecord* prop) { return; } -#endif +#endif weapon->timer = -1; obj->runtime_bitflags |= RUNTIMEBITFLAG_REMOVE; @@ -4800,7 +4862,7 @@ void chrobjWeaponTick(struct PropRecord* prop) if (weapon->timer > 1) { weapon->timer -= g_ClockTimer; - + if (weapon->timer < 2) { weapon->timer = 1; @@ -4829,13 +4891,13 @@ void chrobjWeaponTick(struct PropRecord* prop) else { p1 = EXPLOSION_DEF_STANDARD; - + if (bossGetStageNum() == LEVELID_FACILITY) { p1 = EXPLOSION_DEF_FACILITY_REMOTE; } } - + exp_result = propExplode(prop, p1); if (exp_result == 0) { @@ -4852,7 +4914,7 @@ void chrobjWeaponTick(struct PropRecord* prop) if (weapon->timer > 1) { weapon->timer -= g_ClockTimer; - + if (weapon->timer < 2) { weapon->timer = 1; @@ -4862,11 +4924,11 @@ void chrobjWeaponTick(struct PropRecord* prop) else if (weapon->timer == 1) { player_prop = get_curplayer_positiondata(); - + diff_x = player_prop->pos.f[0] - prop->pos.f[0]; diff_y = player_prop->pos.f[1] - prop->pos.f[1]; diff_z = player_prop->pos.f[2] - prop->pos.f[2]; - + if ((diff_x * diff_x) + (diff_y * diff_y) + (diff_z * diff_z) < PROXIMITY_MINE_TRIGGER_DISTANCE) { weapon->timer = 0; @@ -4884,7 +4946,7 @@ void chrobjWeaponTick(struct PropRecord* prop) return; } #endif - + weapon->timer = -1; obj->runtime_bitflags |= RUNTIMEBITFLAG_REMOVE; remove_obj_from_temp_proxmine_table(weapon); @@ -4987,10 +5049,13 @@ void sub_GAME_7F0442DC(PropRecord* prop) /** + * Address: 7F044414 + * Description: Separating Axis Theorem + * * Return true if both blocks are not intersecting on the X/Z plane. * PD: cdBlockExcludesBlockLaterally */ -bool sub_GAME_7F044414(rect4f* rect1, s32 numvertices0, rect4f* rect2, s32 numvertices1) +bool chrobjSeparatingAxisTheorem(rect4f* rect1, s32 numvertices0, rect4f* rect2, s32 numvertices1) { f64 diff2; f64 diff1; @@ -5060,8 +5125,20 @@ bool sub_GAME_7F044414(rect4f* rect1, s32 numvertices0, rect4f* rect2, s32 numve /** * Address 0x7F0446B8 (NTSC) * Address 0x7F0449A0 (NTSC-J) + * + * Description: Does a 2D collision check between two (convex?) polygons. + * + * Note: The NTSC version is 7 to 8 times faster than the others. + * Was this an attempt at optimization or to fix a bug? + * + * Deepseek says JP/EU's new code will detect edges cases such as a polygon + * fully contained into another. NTSC's only check is SAT, which misses when + * the polygons have edges that don’t overlap. NTSC's code handles 95% of + * collisions so it should be called first. + * + * So they fixed a bug, but didn't do it the right way so it wouldn't affect performance. */ -s32 sub_GAME_7F0446B8(struct rect4f *arg0, s32 arg1, struct rect4f *arg2, s32 arg3) +s32 chrobjTestPolygonsTouchingOrOverlap2D(struct rect4f *arg0, s32 arg1, struct rect4f *arg2, s32 arg3) { #if defined(VERSION_JP) || defined(VERSION_EU) s32 i; @@ -5092,12 +5169,12 @@ s32 sub_GAME_7F0446B8(struct rect4f *arg0, s32 arg1, struct rect4f *arg2, s32 ar } #endif - if (sub_GAME_7F044414(arg0, arg1, arg2, arg3)) + if (chrobjSeparatingAxisTheorem(arg0, arg1, arg2, arg3)) { return 0; } - if (sub_GAME_7F044414(arg2, arg3, arg0, arg1)) + if (chrobjSeparatingAxisTheorem(arg2, arg3, arg0, arg1)) { return 0; } @@ -5116,7 +5193,7 @@ s32 sub_GAME_7F0446B8(struct rect4f *arg0, s32 arg1, struct rect4f *arg2, s32 ar * @param collision_radius: Collision radius of point to test. * @param polygon: Convex polygon. * @param edges: Number of edges to test in polygon. - * + * * Address 0x7F044718. */ s32 chrobjTestPointPolygonCollision(struct coord3d *point, f32 collision_radius, struct rect4f *polygon, s32 edges) @@ -5137,7 +5214,7 @@ s32 chrobjTestPointPolygonCollision(struct coord3d *point, f32 collision_radius, temp_s0 = &polygon->points[(i+1) % edges]; temp_f0 = sub_GAME_7F0B16C4(polygon->points[i].f[0], polygon->points[i].f[1], temp_s0->f[0], temp_s0->f[1], px, pz); - + if (temp_f0 < 0.0f) { temp_f0 = -temp_f0; @@ -5146,9 +5223,9 @@ s32 chrobjTestPointPolygonCollision(struct coord3d *point, f32 collision_radius, temp_f26 = distBetweenPoints2d(polygon->points[i].f[0], polygon->points[i].f[1], px, pz); temp_f30 = distBetweenPoints2d(temp_s0->f[0], temp_s0->f[1], px, pz); - if ((temp_f0 < collision_radius) - && ((temp_f26 < collision_radius) - || (temp_f30 < collision_radius) + if ((temp_f0 < collision_radius) + && ((temp_f26 < collision_radius) + || (temp_f30 < collision_radius) || sub_GAME_7F0B17E4(polygon->points[i].f[0], polygon->points[i].f[1], temp_s0->f[0], temp_s0->f[1], px, pz) ) ) @@ -5161,196 +5238,108 @@ s32 chrobjTestPointPolygonCollision(struct coord3d *point, f32 collision_radius, } +/** + * NTSC address 0x7F0448A8. +*/ +s32 sub_GAME_7F0448A8(struct PropRecord *arg0) +{ + s32 var_s0; + struct rect4f *sp98; + s32 sp94; + f32 sp90; + f32 sp8C; + s32 roomids[8]; + s16 *temp_s0; + f32 sp64; + f32 sp60; + f32 sp5C; + f32 temp_f0; + PropRecord *propss; + ObjectRecord *temp_v0_2; + struct rect4f *sp4C; + s32 sp48; + f32 sp44; + f32 sp40; -#ifdef NONMATCHING -void sub_GAME_7F0448A8(void) { + chraiGetCollisionBounds(arg0, &sp98, &sp94, &sp90, &sp8C); + if (sp94 <= 0) + { + return 1; + } + + chraiGetPropRoomIds(arg0, (s32*)&roomids); + roomGetProps((s32*)&roomids); + + propss = (PropRecord *)&pos_data_entry; + + for (temp_s0 = ptr_list_object_lookup_indices; *temp_s0 >= 0; temp_s0++) + { + PropRecord *prop = &propss[*temp_s0]; + + if (prop != arg0) + { + if ((prop->type == PROP_TYPE_VIEWER) || (prop->type == PROP_TYPE_CHR)) + { + temp_v0_2 = prop->obj; + if ((temp_v0_2 == NULL) || !((s32) temp_v0_2->model & 0x400)) + { + chrpropGetCollisionBounds(prop, &sp5C, &sp64, &sp60); + + temp_f0 = sub_GAME_7F03CFE8(prop); + sp60 += temp_f0; + sp64 += temp_f0; + + if (sp60 <= sp90) + { + var_s0 = 1; + + if (sp8C <= sp64) + { + if (chrpropTestPointInPolygon(&prop->pos, sp98, sp94) != 0) + { + var_s0 = 0; + } + + if ((var_s0 != 0) && (chrobjTestPointPolygonCollision(&prop->pos, sp5C, sp98, sp94) != 0)) + { + var_s0 = 0; + } + + if (var_s0 == 0) + { + if ((prop->type == PROP_TYPE_CHR) && (arg0->type == PROP_TYPE_DOOR)) + { + prop->chr->hidden |= CHRHIDDEN_OFFSCREEN_PATROL; + } + + return 0; + } + } + } + } + } + else if ( + ((prop->type == PROP_TYPE_OBJ) || (prop->type == PROP_TYPE_WEAPON) || (prop->type == PROP_TYPE_DOOR)) + && ( + (arg0->type != PROP_TYPE_DOOR) + || ((prop->type != PROP_TYPE_DOOR) && ((prop->obj->type != PROPDEF_SAFE)) && (prop->obj->type != PROPDEF_AIRCRAFT)))) + { + chraiGetCollisionBounds(prop, &sp4C, &sp48, &sp44, &sp40); + + if ((sp48 > 0) + && (sp40 <= sp90) + && (sp8C <= sp44) + && (chrobjTestPolygonsTouchingOrOverlap2D(sp4C, sp48, sp98, sp94) != 0)) + { + return 0; + } + } + } + } + + return 1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0448A8 -/* 0793D8 7F0448A8 27BDFF60 */ addiu $sp, $sp, -0xa0 -/* 0793DC 7F0448AC AFBF0034 */ sw $ra, 0x34($sp) -/* 0793E0 7F0448B0 AFB50030 */ sw $s5, 0x30($sp) -/* 0793E4 7F0448B4 27AE008C */ addiu $t6, $sp, 0x8c -/* 0793E8 7F0448B8 0080A825 */ move $s5, $a0 -/* 0793EC 7F0448BC AFB4002C */ sw $s4, 0x2c($sp) -/* 0793F0 7F0448C0 AFB30028 */ sw $s3, 0x28($sp) -/* 0793F4 7F0448C4 AFB20024 */ sw $s2, 0x24($sp) -/* 0793F8 7F0448C8 AFB10020 */ sw $s1, 0x20($sp) -/* 0793FC 7F0448CC AFB0001C */ sw $s0, 0x1c($sp) -/* 079400 7F0448D0 AFAE0010 */ sw $t6, 0x10($sp) -/* 079404 7F0448D4 27A50098 */ addiu $a1, $sp, 0x98 -/* 079408 7F0448D8 27A60094 */ addiu $a2, $sp, 0x94 -/* 07940C 7F0448DC 0FC0F308 */ jal chraiGetCollisionBounds -/* 079410 7F0448E0 27A70090 */ addiu $a3, $sp, 0x90 -/* 079414 7F0448E4 8FAF0094 */ lw $t7, 0x94($sp) -/* 079418 7F0448E8 27B0006C */ addiu $s0, $sp, 0x6c -/* 07941C 7F0448EC 02A02025 */ move $a0, $s5 -/* 079420 7F0448F0 1DE00003 */ bgtz $t7, .L7F044900 -/* 079424 7F0448F4 00000000 */ nop -/* 079428 7F0448F8 10000086 */ b .L7F044B14 -/* 07942C 7F0448FC 24020001 */ li $v0, 1 -.L7F044900: -/* 079430 7F044900 0FC0F2E3 */ jal chraiGetPropRoomIds -/* 079434 7F044904 02002825 */ move $a1, $s0 -/* 079438 7F044908 0FC0F8FF */ jal roomGetProps -/* 07943C 7F04490C 02002025 */ move $a0, $s0 -/* 079440 7F044910 3C138007 */ lui $s3, %hi(ptr_list_object_lookup_indices) -/* 079444 7F044914 8E739C30 */ lw $s3, %lo(ptr_list_object_lookup_indices)($s3) -/* 079448 7F044918 24140002 */ li $s4, 2 -/* 07944C 7F04491C 86620000 */ lh $v0, ($s3) -/* 079450 7F044920 0440007B */ bltz $v0, .L7F044B10 -/* 079454 7F044924 0002C080 */ sll $t8, $v0, 2 -.L7F044928: -/* 079458 7F044928 0302C023 */ subu $t8, $t8, $v0 -/* 07945C 7F04492C 0018C080 */ sll $t8, $t8, 2 -/* 079460 7F044930 0302C021 */ addu $t8, $t8, $v0 -/* 079464 7F044934 3C198007 */ lui $t9, %hi(pos_data_entry) -/* 079468 7F044938 27399C38 */ addiu $t9, %lo(pos_data_entry) # addiu $t9, $t9, -0x63c8 -/* 07946C 7F04493C 0018C080 */ sll $t8, $t8, 2 -/* 079470 7F044940 03199021 */ addu $s2, $t8, $t9 -/* 079474 7F044944 5255006F */ beql $s2, $s5, .L7F044B04 -/* 079478 7F044948 86620002 */ lh $v0, 2($s3) -/* 07947C 7F04494C 92420000 */ lbu $v0, ($s2) -/* 079480 7F044950 24010006 */ li $at, 6 -/* 079484 7F044954 10410003 */ beq $v0, $at, .L7F044964 -/* 079488 7F044958 24010003 */ li $at, 3 -/* 07948C 7F04495C 5441003C */ bnel $v0, $at, .L7F044A50 -/* 079490 7F044960 24010001 */ li $at, 1 -.L7F044964: -/* 079494 7F044964 8E420004 */ lw $v0, 4($s2) -/* 079498 7F044968 02402025 */ move $a0, $s2 -/* 07949C 7F04496C 27A5005C */ addiu $a1, $sp, 0x5c -/* 0794A0 7F044970 10400005 */ beqz $v0, .L7F044988 -/* 0794A4 7F044974 27A60064 */ addiu $a2, $sp, 0x64 -/* 0794A8 7F044978 8C480014 */ lw $t0, 0x14($v0) -/* 0794AC 7F04497C 31090400 */ andi $t1, $t0, 0x400 -/* 0794B0 7F044980 55200060 */ bnezl $t1, .L7F044B04 -/* 0794B4 7F044984 86620002 */ lh $v0, 2($s3) -.L7F044988: -/* 0794B8 7F044988 0FC0F3E2 */ jal chrpropGetCollisionBounds -/* 0794BC 7F04498C 27A70060 */ addiu $a3, $sp, 0x60 -/* 0794C0 7F044990 0FC0F3FA */ jal sub_GAME_7F03CFE8 -/* 0794C4 7F044994 02402025 */ move $a0, $s2 -/* 0794C8 7F044998 C7A20060 */ lwc1 $f2, 0x60($sp) -/* 0794CC 7F04499C C7A80090 */ lwc1 $f8, 0x90($sp) -/* 0794D0 7F0449A0 C7A40064 */ lwc1 $f4, 0x64($sp) -/* 0794D4 7F0449A4 46001080 */ add.s $f2, $f2, $f0 -/* 0794D8 7F0449A8 C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0794DC 7F0449AC 46002180 */ add.s $f6, $f4, $f0 -/* 0794E0 7F0449B0 E7A20060 */ swc1 $f2, 0x60($sp) -/* 0794E4 7F0449B4 4608103E */ c.le.s $f2, $f8 -/* 0794E8 7F0449B8 E7A60064 */ swc1 $f6, 0x64($sp) -/* 0794EC 7F0449BC 45020051 */ bc1fl .L7F044B04 -/* 0794F0 7F0449C0 86620002 */ lh $v0, 2($s3) -/* 0794F4 7F0449C4 4606503E */ c.le.s $f10, $f6 -/* 0794F8 7F0449C8 26510008 */ addiu $s1, $s2, 8 -/* 0794FC 7F0449CC 24100001 */ li $s0, 1 -/* 079500 7F0449D0 02202025 */ move $a0, $s1 -/* 079504 7F0449D4 4500004A */ bc1f .L7F044B00 -/* 079508 7F0449D8 8FA50098 */ lw $a1, 0x98($sp) -/* 07950C 7F0449DC 0FC0F336 */ jal chrpropTestPointInPolygon -/* 079510 7F0449E0 8FA60094 */ lw $a2, 0x94($sp) -/* 079514 7F0449E4 10400002 */ beqz $v0, .L7F0449F0 -/* 079518 7F0449E8 02202025 */ move $a0, $s1 -/* 07951C 7F0449EC 00008025 */ move $s0, $zero -.L7F0449F0: -/* 079520 7F0449F0 12000007 */ beqz $s0, .L7F044A10 -/* 079524 7F0449F4 8FA5005C */ lw $a1, 0x5c($sp) -/* 079528 7F0449F8 8FA60098 */ lw $a2, 0x98($sp) -/* 07952C 7F0449FC 0FC111C6 */ jal chrobjTestPointPolygonCollision -/* 079530 7F044A00 8FA70094 */ lw $a3, 0x94($sp) -/* 079534 7F044A04 10400002 */ beqz $v0, .L7F044A10 -/* 079538 7F044A08 00000000 */ nop -/* 07953C 7F044A0C 00008025 */ move $s0, $zero -.L7F044A10: -/* 079540 7F044A10 5600003C */ bnezl $s0, .L7F044B04 -/* 079544 7F044A14 86620002 */ lh $v0, 2($s3) -/* 079548 7F044A18 924A0000 */ lbu $t2, ($s2) -/* 07954C 7F044A1C 24010003 */ li $at, 3 -/* 079550 7F044A20 15410008 */ bne $t2, $at, .L7F044A44 -/* 079554 7F044A24 00000000 */ nop -/* 079558 7F044A28 92AB0000 */ lbu $t3, ($s5) -/* 07955C 7F044A2C 168B0005 */ bne $s4, $t3, .L7F044A44 -/* 079560 7F044A30 00000000 */ nop -/* 079564 7F044A34 8E420004 */ lw $v0, 4($s2) -/* 079568 7F044A38 944C0012 */ lhu $t4, 0x12($v0) -/* 07956C 7F044A3C 358D0010 */ ori $t5, $t4, 0x10 -/* 079570 7F044A40 A44D0012 */ sh $t5, 0x12($v0) -.L7F044A44: -/* 079574 7F044A44 10000033 */ b .L7F044B14 -/* 079578 7F044A48 00001025 */ move $v0, $zero -/* 07957C 7F044A4C 24010001 */ li $at, 1 -.L7F044A50: -/* 079580 7F044A50 10410005 */ beq $v0, $at, .L7F044A68 -/* 079584 7F044A54 24010004 */ li $at, 4 -/* 079588 7F044A58 50410004 */ beql $v0, $at, .L7F044A6C -/* 07958C 7F044A5C 92AE0000 */ lbu $t6, ($s5) -/* 079590 7F044A60 56820028 */ bnel $s4, $v0, .L7F044B04 -/* 079594 7F044A64 86620002 */ lh $v0, 2($s3) -.L7F044A68: -/* 079598 7F044A68 92AE0000 */ lbu $t6, ($s5) -.L7F044A6C: -/* 07959C 7F044A6C 02402025 */ move $a0, $s2 -/* 0795A0 7F044A70 27A5004C */ addiu $a1, $sp, 0x4c -/* 0795A4 7F044A74 168E0009 */ bne $s4, $t6, .L7F044A9C -/* 0795A8 7F044A78 27A60048 */ addiu $a2, $sp, 0x48 -/* 0795AC 7F044A7C 52820021 */ beql $s4, $v0, .L7F044B04 -/* 0795B0 7F044A80 86620002 */ lh $v0, 2($s3) -/* 0795B4 7F044A84 8E4F0004 */ lw $t7, 4($s2) -/* 0795B8 7F044A88 2401002B */ li $at, 43 -/* 0795BC 7F044A8C 91E20003 */ lbu $v0, 3($t7) -/* 0795C0 7F044A90 1041001B */ beq $v0, $at, .L7F044B00 -/* 0795C4 7F044A94 24010028 */ li $at, 40 -/* 0795C8 7F044A98 10410019 */ beq $v0, $at, .L7F044B00 -.L7F044A9C: -/* 0795CC 7F044A9C 27B80040 */ addiu $t8, $sp, 0x40 -/* 0795D0 7F044AA0 AFB80010 */ sw $t8, 0x10($sp) -/* 0795D4 7F044AA4 0FC0F308 */ jal chraiGetCollisionBounds -/* 0795D8 7F044AA8 27A70044 */ addiu $a3, $sp, 0x44 -/* 0795DC 7F044AAC 8FA50048 */ lw $a1, 0x48($sp) -/* 0795E0 7F044AB0 C7B00090 */ lwc1 $f16, 0x90($sp) -/* 0795E4 7F044AB4 C7B20040 */ lwc1 $f18, 0x40($sp) -/* 0795E8 7F044AB8 58A00012 */ blezl $a1, .L7F044B04 -/* 0795EC 7F044ABC 86620002 */ lh $v0, 2($s3) -/* 0795F0 7F044AC0 4610903E */ c.le.s $f18, $f16 -/* 0795F4 7F044AC4 C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0795F8 7F044AC8 C7A8008C */ lwc1 $f8, 0x8c($sp) -/* 0795FC 7F044ACC 4502000D */ bc1fl .L7F044B04 -/* 079600 7F044AD0 86620002 */ lh $v0, 2($s3) -/* 079604 7F044AD4 4604403E */ c.le.s $f8, $f4 -/* 079608 7F044AD8 8FA4004C */ lw $a0, 0x4c($sp) -/* 07960C 7F044ADC 8FA60098 */ lw $a2, 0x98($sp) -/* 079610 7F044AE0 45020008 */ bc1fl .L7F044B04 -/* 079614 7F044AE4 86620002 */ lh $v0, 2($s3) -/* 079618 7F044AE8 0FC111AE */ jal sub_GAME_7F0446B8 -/* 07961C 7F044AEC 8FA70094 */ lw $a3, 0x94($sp) -/* 079620 7F044AF0 50400004 */ beql $v0, $zero, .L7F044B04 -/* 079624 7F044AF4 86620002 */ lh $v0, 2($s3) -/* 079628 7F044AF8 10000006 */ b .L7F044B14 -/* 07962C 7F044AFC 00001025 */ move $v0, $zero -.L7F044B00: -/* 079630 7F044B00 86620002 */ lh $v0, 2($s3) -.L7F044B04: -/* 079634 7F044B04 26730002 */ addiu $s3, $s3, 2 -/* 079638 7F044B08 0443FF87 */ bgezl $v0, .L7F044928 -/* 07963C 7F044B0C 0002C080 */ sll $t8, $v0, 2 -.L7F044B10: -/* 079640 7F044B10 24020001 */ li $v0, 1 -.L7F044B14: -/* 079644 7F044B14 8FBF0034 */ lw $ra, 0x34($sp) -/* 079648 7F044B18 8FB0001C */ lw $s0, 0x1c($sp) -/* 07964C 7F044B1C 8FB10020 */ lw $s1, 0x20($sp) -/* 079650 7F044B20 8FB20024 */ lw $s2, 0x24($sp) -/* 079654 7F044B24 8FB30028 */ lw $s3, 0x28($sp) -/* 079658 7F044B28 8FB4002C */ lw $s4, 0x2c($sp) -/* 07965C 7F044B2C 8FB50030 */ lw $s5, 0x30($sp) -/* 079660 7F044B30 03E00008 */ jr $ra -/* 079664 7F044B34 27BD00A0 */ addiu $sp, $sp, 0xa0 -) -#endif @@ -5581,7 +5570,7 @@ glabel sub_GAME_7F044B38 /* 0799A0 7F044E70 46043381 */ sub.s $f14, $f6, $f4 /* 0799A4 7F044E74 C7A60090 */ lwc1 $f6, 0x90($sp) /* 0799A8 7F044E78 4600703E */ c.le.s $f14, $f0 -/* 0799AC 7F044E7C 00000000 */ nop +/* 0799AC 7F044E7C 00000000 */ nop /* 0799B0 7F044E80 45020023 */ bc1fl .L7F044F10 /* 0799B4 7F044E84 C7A600A4 */ lwc1 $f6, 0xa4($sp) /* 0799B8 7F044E88 46064102 */ mul.s $f4, $f8, $f6 @@ -5592,7 +5581,7 @@ glabel sub_GAME_7F044B38 /* 0799CC 7F044E9C 460A2101 */ sub.s $f4, $f4, $f10 /* 0799D0 7F044EA0 C7AA0030 */ lwc1 $f10, 0x30($sp) /* 0799D4 7F044EA4 4600203E */ c.le.s $f4, $f0 -/* 0799D8 7F044EA8 00000000 */ nop +/* 0799D8 7F044EA8 00000000 */ nop /* 0799DC 7F044EAC 45020018 */ bc1fl .L7F044F10 /* 0799E0 7F044EB0 C7A600A4 */ lwc1 $f6, 0xa4($sp) /* 0799E4 7F044EB4 460A4102 */ mul.s $f4, $f8, $f10 @@ -5602,7 +5591,7 @@ glabel sub_GAME_7F044B38 /* 0799F4 7F044EC4 46062101 */ sub.s $f4, $f4, $f6 /* 0799F8 7F044EC8 C7A60034 */ lwc1 $f6, 0x34($sp) /* 0799FC 7F044ECC 4600203E */ c.le.s $f4, $f0 -/* 079A00 7F044ED0 00000000 */ nop +/* 079A00 7F044ED0 00000000 */ nop /* 079A04 7F044ED4 4502000E */ bc1fl .L7F044F10 /* 079A08 7F044ED8 C7A600A4 */ lwc1 $f6, 0xa4($sp) /* 079A0C 7F044EDC 46066102 */ mul.s $f4, $f12, $f6 @@ -5714,21 +5703,21 @@ glabel sub_GAME_7F044B38 /* 079BA0 7F045070 C7A4006C */ lwc1 $f4, 0x6c($sp) /* 079BA4 7F045074 C6000030 */ lwc1 $f0, 0x30($s0) /* 079BA8 7F045078 460A7202 */ mul.s $f8, $f14, $f10 -/* 079BAC 7F04507C 00000000 */ nop +/* 079BAC 7F04507C 00000000 */ nop /* 079BB0 7F045080 46002182 */ mul.s $f6, $f4, $f0 /* 079BB4 7F045084 46064281 */ sub.s $f10, $f8, $f6 /* 079BB8 7F045088 E60A0018 */ swc1 $f10, 0x18($s0) /* 079BBC 7F04508C C7A40068 */ lwc1 $f4, 0x68($sp) /* 079BC0 7F045090 C7A60070 */ lwc1 $f6, 0x70($sp) /* 079BC4 7F045094 46040202 */ mul.s $f8, $f0, $f4 -/* 079BC8 7F045098 00000000 */ nop +/* 079BC8 7F045098 00000000 */ nop /* 079BCC 7F04509C 46103282 */ mul.s $f10, $f6, $f16 /* 079BD0 7F0450A0 460A4101 */ sub.s $f4, $f8, $f10 /* 079BD4 7F0450A4 E604001C */ swc1 $f4, 0x1c($s0) /* 079BD8 7F0450A8 C7A6006C */ lwc1 $f6, 0x6c($sp) /* 079BDC 7F0450AC C7AA0068 */ lwc1 $f10, 0x68($sp) /* 079BE0 7F0450B0 46068202 */ mul.s $f8, $f16, $f6 -/* 079BE4 7F0450B4 00000000 */ nop +/* 079BE4 7F0450B4 00000000 */ nop /* 079BE8 7F0450B8 460E5102 */ mul.s $f4, $f10, $f14 /* 079BEC 7F0450BC C60A001C */ lwc1 $f10, 0x1c($s0) /* 079BF0 7F0450C0 46044181 */ sub.s $f6, $f8, $f4 @@ -5738,11 +5727,11 @@ glabel sub_GAME_7F044B38 /* 079C00 7F0450D0 C6020020 */ lwc1 $f2, 0x20($s0) /* 079C04 7F0450D4 C6120018 */ lwc1 $f18, 0x18($s0) /* 079C08 7F0450D8 46004102 */ mul.s $f4, $f8, $f0 -/* 079C0C 7F0450DC 00000000 */ nop +/* 079C0C 7F0450DC 00000000 */ nop /* 079C10 7F0450E0 46027182 */ mul.s $f6, $f14, $f2 /* 079C14 7F0450E4 46062281 */ sub.s $f10, $f4, $f6 /* 079C18 7F0450E8 46101202 */ mul.s $f8, $f2, $f16 -/* 079C1C 7F0450EC 00000000 */ nop +/* 079C1C 7F0450EC 00000000 */ nop /* 079C20 7F0450F0 46120102 */ mul.s $f4, $f0, $f18 /* 079C24 7F0450F4 E60A0038 */ swc1 $f10, 0x38($s0) /* 079C28 7F0450F8 460E9282 */ mul.s $f10, $f18, $f14 @@ -5848,6 +5837,8 @@ s32 glassCalculateOpacity(coord3d *pos, f32 xludist, f32 opadist, f32 arg3) #define AUTOGUN_P2_MAXSPEED 0.00034906587f // https://decomp.me/scratch/c9RKZ 65.91% +// PD name: objTick +// Address: 7F0452D4 s32 object_interaction(struct PropRecord *arg0) { struct coord3d sp694; @@ -5892,7 +5883,7 @@ s32 object_interaction(struct PropRecord *arg0) f32 sp4B0; s32 sp4AC; s32 sp4A8; - s32 sp4A4; + s32 sp4A4; f32 sp4A0; f32 sp49C; f32 sp498; @@ -5946,7 +5937,7 @@ s32 object_interaction(struct PropRecord *arg0) f32 sp248; Mtxf sp200; struct coord3d *sp1FC; - struct unk_joint_list sp1B0; + ModelRenderData sp1B0; Mtxf sp16C; struct coord3d *sp168; struct coord3d *sp164; @@ -5967,10 +5958,10 @@ s32 object_interaction(struct PropRecord *arg0) Mtxf spB8; f32 sp94; struct beam *beam; //sp90 - + Mtxf *sp70; /* compiler-managed */ Mtxf *sp6C; - + struct ObjectRecord *obj; struct Model *model; @@ -6051,7 +6042,7 @@ s32 object_interaction(struct PropRecord *arg0) if (obj->runtime_bitflags & RUNTIMEBITFLAG_REMOVE) { objFree(obj, 0, obj->state & RUNTIMEBITFLAG_REMOVE); - + return 1; } else if (obj->runtime_bitflags & RUNTIMEBITFLAG_ISRETICK) @@ -6062,7 +6053,7 @@ s32 object_interaction(struct PropRecord *arg0) { arg0->flags &= 0xFFFD; obj->runtime_bitflags |= RUNTIMEBITFLAG_ISRETICK; - + return 3; } @@ -6073,7 +6064,7 @@ s32 object_interaction(struct PropRecord *arg0) else { sp678 = sub_GAME_7F09B4D8(get_cur_playernum()) == 0; - + if (obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) { if (obj->projectile->ownerprop != NULL) @@ -6100,7 +6091,7 @@ s32 object_interaction(struct PropRecord *arg0) if (temp_s0->flags & 0x100) { struct PropRecord *projectile_prop; - + s32 var_s2 = 1; sp648 = (struct WeaponObjRecord *)obj; @@ -6118,17 +6109,17 @@ s32 object_interaction(struct PropRecord *arg0) } sp664 = sub_GAME_7F042EB4(obj, &temp_s0->unkd4, &sp64C, &sp658, 0, var_s2); - + if (projectile_prop != NULL) { sub_GAME_7F03D058(projectile_prop, 1); } - + if ((sp664 != 1) && (sp648 != NULL) && sp648->weaponnum == ITEM_NULL86) { sp648->timer = 0; } - + temp_s0->flags &= ~0x100; } @@ -6145,7 +6136,7 @@ s32 object_interaction(struct PropRecord *arg0) if (obj->projectile->flags & 1) { struct WeaponObjRecord *temp_s1 = (struct WeaponObjRecord *)obj; - + sp640 = sub_GAME_7F040078(obj); sp610 = 0; sp60C = 0; @@ -6168,7 +6159,7 @@ s32 object_interaction(struct PropRecord *arg0) temp_s0->unkB4 += temp_s0->unk10.f[1] * g_GlobalTimerDelta; temp_s0->unkB0 += temp_s0->unkB4 * g_GlobalTimerDelta; temp_s0->unk1C += ((1.0f/90.0f) * g_GlobalTimerDelta); - + if (temp_s0->unk1C > (10.0f/360.0f)) { temp_s0->unk1C = (10.0f/360.0f); @@ -6208,15 +6199,15 @@ s32 object_interaction(struct PropRecord *arg0) sp70 = &obj->mtx; sp6C = &obj->mtx; - + temp_s0->speed.f[0] += temp_s0->unk10.f[0] * g_GlobalTimerDelta; temp_s0->speed.f[2] += temp_s0->unk10.f[2] * g_GlobalTimerDelta; - + sp694.f[0] += temp_s0->speed.f[0] * g_GlobalTimerDelta; sp694.f[2] += temp_s0->speed.f[2] * g_GlobalTimerDelta; - + sub_GAME_7F057DF8(sp70, sp6C, g_ClockTimer, &g_ClockTimer); - + if ((obj->type == PROPDEF_COLLECTABLE) && (((temp_s1->weaponnum == 0x1D)) || (temp_s1->weaponnum == 0x1B) || (temp_s1->weaponnum == 0x1C) || (temp_s1->weaponnum == 0x21) || (temp_s1->weaponnum == 0x2F) || (temp_s1->weaponnum == 0x30) || (temp_s1->weaponnum == 0x22))) { var_s2_2 = 1; @@ -6233,14 +6224,14 @@ s32 object_interaction(struct PropRecord *arg0) { sub_GAME_7F03D058(temp_s0->ownerprop, 1); } - + sp690 = 1; // mps2c line 696 if ((sp664 == 2) && ((D_80030B0C == NULL) || (((D_80030B0C->type != 3)) && (D_80030B0C->type != 6)))) { var_a0 = 0; - + if ((D_80030B0C != NULL) && (D_80030B0C->obj->runtime_bitflags & 0x80)) { var_a0 = 1; @@ -6249,23 +6240,23 @@ s32 object_interaction(struct PropRecord *arg0) if (var_a0 == 0) { projectileFree(temp_s0); - + obj->projectile = NULL; obj->runtime_bitflags &= ~0x80; - + if (arg0->flags & 8) { arg0->flags |= 0x10; } - + chrobjSndCreatePostEventDefault(sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, ATTACH_MINE_SFX, NULL), &arg0->pos); sub_GAME_7F0577E8(((struct WeaponObjRecord *)obj)->weaponnum, arg0->stan->room); sub_GAME_7F0439B8(obj, &sp614, arg0->stan, &sp620); - + if (D_80030B0C != NULL) { temp_s2 = arg0->stan; - + if (objEmbed(arg0, D_80030B0C, objinst, dword_CODE_bss_80075B74) != 0) { arg0->stan = temp_s2; @@ -6279,7 +6270,7 @@ s32 object_interaction(struct PropRecord *arg0) // mpis2c line 728 if (sp604 == 0) { - if ((D_80030B0C != NULL) && (obj->type == PROPDEF_COLLECTABLE)) + if ((D_80030B0C != NULL) && (obj->type == PROPDEF_COLLECTABLE)) { struct WeaponObjRecord *temp_weap = (struct WeaponObjRecord *)obj; @@ -6326,20 +6317,20 @@ s32 object_interaction(struct PropRecord *arg0) if ((D_80030B0C->flags & 2) && (bodypartshot != 0x64) && (bodypartshot != 0x6E)) { temp_s2_4 = modelFindNodeMtx(objinst, dword_CODE_bss_80075B74, 0); - + sp5CC.f[0] = sp614.f[0]; sp5CC.f[1] = sp614.f[1]; sp5CC.f[2] = sp614.f[2]; mtx4TransformVecInPlace(camGetWorldToScreenMtxf(), &sp5CC); - + sp5CC.f[0] += ((sp5CC.f[0] - temp_s2_4->m[3][0]) * 0.5f); sp5CC.f[1] += ((sp5CC.f[1] - temp_s2_4->m[3][1]) * 0.5f); sp5CC.f[2] += ((sp5CC.f[2] - temp_s2_4->m[3][2]) * 0.5f); - + sp5CC.f[0] -= (getjointsize(objinst, dword_CODE_bss_80075B74) * 0.5f * flt_CODE_bss_80075B88.f[0]); sp5CC.f[1] -= (getjointsize(objinst, dword_CODE_bss_80075B74) * 0.5f * flt_CODE_bss_80075B78.f[0]); sp5CC.f[2] -= (getjointsize(objinst, dword_CODE_bss_80075B74) * 0.5f * flt_CODE_bss_80075B88.f[0]); - + matrix_4x4_7F059E64(temp_s2_4, sp58C); mtx4TransformVecInPlace(sp58C, &sp5CC); sub_GAME_7F0221DC(objinst, bodypartshot, dword_CODE_bss_80075B74, &sp5CC); @@ -6359,7 +6350,7 @@ s32 object_interaction(struct PropRecord *arg0) { maybe_detonate_object(D_80030B0C->obj, 100.0f, &obj->runtime_pos, ITEM_NULL86, (s32) ((u32) (obj->runtime_bitflags & RUNTIMEBITFLAG_OWNER) >> RUNTIMEBITSHIFT_OWNER)); } - + ((struct WeaponObjRecord *)obj)->timer = 0; } } @@ -6367,17 +6358,17 @@ s32 object_interaction(struct PropRecord *arg0) // mips2c line 811 if (sp604 == 0) - { + { if (sp664 == 0) { if (temp_s0->unk8C > 0.0f) { temp_f14_3 = ((sp620.f[2] * temp_s0->speed.f[2]) + ((temp_s0->speed.f[0] * sp620.f[0]) + (temp_s0->speed.f[1] * sp620.f[1]))) * -(temp_s0->unk8C + 1.0f); - + temp_s0->speed.f[0] += (temp_f14_3 * sp620.f[0]); temp_s0->speed.f[1] += (temp_f14_3 * sp620.f[1]); temp_s0->speed.f[2] += (temp_f14_3 * sp620.f[2]); - + if ((temp_s0->speed.f[1] <= 0.0f) && ((temp_s0->speed.f[1] >= 0.0f) || (temp_f20 <= obj->runtime_pos.f[1]))) { sp60C = 1; @@ -6399,7 +6390,7 @@ s32 object_interaction(struct PropRecord *arg0) { mtxLoadRandomRotation(sp6C); } - + temp_s0->unk90 += 1; } @@ -6415,12 +6406,12 @@ s32 object_interaction(struct PropRecord *arg0) arg0->pos.f[1] = (sp614.f[1] - sp638) + 4.0f; obj->runtime_pos.f[1] = arg0->pos.f[1]; } - + if (!(obj->runtime_bitflags & 0x10000)) { obj->runtime_bitflags |= 0x100; } - + if (temp_s0->unk8C > 0.0f) { temp_s0->speed.f[1] *= -temp_s0->unk8C; @@ -6471,7 +6462,7 @@ s32 object_interaction(struct PropRecord *arg0) } else { - sub_GAME_7F09E700(&temp_s1->runtime_pos, arg0->stan, 8, arg0->rooms, (arg0->flags & 8) != 0); + explosionCreateSmoke(&temp_s1->runtime_pos, arg0->stan, 8, arg0->rooms, (arg0->flags & 8) != 0); } } } @@ -6483,10 +6474,10 @@ s32 object_interaction(struct PropRecord *arg0) } else { - sub_GAME_7F09E700(&obj->runtime_pos, arg0->stan, 9, arg0->rooms, (arg0->flags & 8) != 0); + explosionCreateSmoke(&obj->runtime_pos, arg0->stan, 9, arg0->rooms, (arg0->flags & 8) != 0); } } - + if ((sp664 == 0) || (sp610 != 0)) { if (temp_s0->unkAC < (D_80048380 - 2)) @@ -6499,10 +6490,10 @@ s32 object_interaction(struct PropRecord *arg0) { sfx_state = sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DROP_GUN_SFX, NULL); } - + chrobjSndCreatePostEventDefault(sfx_state, &arg0->pos); } - + temp_s0->unkAC = D_80048380; } } @@ -6512,11 +6503,11 @@ s32 object_interaction(struct PropRecord *arg0) if ((temp_s1->runtime_bitflags & 0x80) && (temp_s0->flags & 0x400) && !(D_80048380 & 7)) { struct PropRecord *temp_v0_13 = temp_s1->prop; - + sp564.f[0] = temp_s1->runtime_pos.f[0] + 400.0f; sp564.f[1] = temp_s1->runtime_pos.f[1] - 1800.0f; sp564.f[2] = temp_s1->runtime_pos.f[2]; - + if (!(D_80048380 & 0xF)) { sp564.f[2] += 400.0f; @@ -6525,14 +6516,14 @@ s32 object_interaction(struct PropRecord *arg0) { sp564.f[2] -= 400.0f; } - + // void explosionCreate(void *, struct coord3d *pos, struct StandTile *stan, s16 /* enum EXPLOSION_DEF */ explosionType, s32 flag, s32 playernum, u8 *rooms, s32 flag2); explosionCreate(NULL, &sp564, temp_v0_13->stan, 0x14, 0, 0, temp_v0_13->rooms, 0); if (((s32) D_80048380 % 40) == 0) { - // void sub_GAME_7F09E700(coord3d *pos, StandTile *stan, s16 arg2, u8 *rooms, s32 arg4); - sub_GAME_7F09E700(&sp564, temp_v0_13->stan, 0xA, temp_v0_13->rooms, 1); + // void explosionCreateSmoke(coord3d *pos, StandTile *stan, s16 arg2, u8 *rooms, s32 arg4); + explosionCreateSmoke(&sp564, temp_v0_13->stan, 0xA, temp_v0_13->rooms, 1); } } } @@ -6540,16 +6531,16 @@ s32 object_interaction(struct PropRecord *arg0) else { var_s2_3 = 1; - + if (temp_s0->unk60 < 1.0f) { temp_s0->unk60 += (temp_s0->unk64 * g_GlobalTimerDelta); - + if (g_ClockTimer > 0) { temp_s0->unk64 *= 1.1f; } - + if ((temp_s0->unk60 > 1.0f) || (temp_s0->flags & 8)) { temp_s0->unk60 = 1.0f; @@ -6558,7 +6549,7 @@ s32 object_interaction(struct PropRecord *arg0) //void quaternion_slerp(quatf q1, quatf q2, f32 t, quatf result); quaternion_slerp((f32*)&temp_s0->unk68, (f32*)&temp_s0->unk78, temp_s0->unk60, (f32*)&sp550); sp70 = &obj->mtx; - + // void quaternion_to_matrix(quatf q, mat44f matrix); quaternion_to_matrix((f32*)&sp550, (f32*)&obj->mtx); matrix_column_1_scalar_multiply(temp_s0->unkC0, (f32*)sp70); @@ -6566,7 +6557,7 @@ s32 object_interaction(struct PropRecord *arg0) matrix_column_3_scalar_multiply_2(temp_s0->unkC8, (f32*)sp70); var_s2_3 = 0; } - + if (((temp_s0->speed.f[0] != 0.0f) || (temp_s0->speed.f[2] != 0.0f) || (temp_s0->unk60 < 1.0f)) && !(temp_s0->flags & 8)) { sp70 = &obj->mtx; @@ -6577,13 +6568,13 @@ s32 object_interaction(struct PropRecord *arg0) { sp694.f[0] += temp_s0->speed.f[0]; sp694.f[2] += temp_s0->speed.f[2]; - + if (temp_s0->unk60 >= 1.0f) { if (temp_s0->unk94 > 0.0f) { temp_f12_5 = (temp_s0->unk94 * g_GlobalTimerDelta) / sqrtf((temp_s0->speed.f[2] * temp_s0->speed.f[2]) + (temp_s0->speed.f[0] * temp_s0->speed.f[0])); - + if (temp_f12_5 >= 1.0f) { temp_s0->speed.f[0] = 0.0f; @@ -6609,8 +6600,8 @@ s32 object_interaction(struct PropRecord *arg0) arg0->pos.f[1] = stanGetPositionYValue(arg0->stan, arg0->pos.f[0], arg0->pos.f[2]) - (chrpropSumMatrixPosY(sp54C, sp70) + 4.0f); obj->runtime_pos.f[1] = arg0->pos.f[1]; - - + + if ((temp_s0->speed.f[0] < 0.1f) && (temp_s0->speed.f[0] > -0.1f)) { if ((temp_s0->speed.f[2] < 0.1f) && (temp_s0->speed.f[2] > -0.1f)) @@ -6620,7 +6611,7 @@ s32 object_interaction(struct PropRecord *arg0) } } } - + if ((var_s2_3 != 0) || (temp_s0->flags & 8)) { projectileFree(temp_s0); @@ -6650,44 +6641,44 @@ s32 object_interaction(struct PropRecord *arg0) if (obj->type == PROPDEF_DOOR) { struct DoorRecord *door = (struct DoorRecord *)arg0->obj; - + sp67C = door->openPosition; - + if ((door->openedTime > 0) && (door->openedTime < (g_GlobalTimer - door->autoCloseFrames)) && (door->openstate == DOORSTATE_STATIONARY) && !(door->flags & 0x80000000)) { doorActivate(door, DOORSTATE_CLOSING); } - + if (door->openstate == DOORSTATE_WAITING) { struct DoorRecord *linked_door = door->linkedDoor; - + var_v1_3 = 1; - + while ((linked_door != NULL) && (linked_door != door)) { if ((linked_door->openstate != DOORSTATE_STATIONARY) || (linked_door->openPosition > 0.0f)) { var_v1_3 = 0; } - + linked_door = linked_door->linkedDoor; } - + if (var_v1_3 != 0) { doorSetOpenState(door, DOORSTATE_OPENING); } } - + if ((door->doorType == 8) && (doorIsClosed(door) != 0) && (doorIsPadlockFree(door) != 0)) { doorActivateWrapper(arg0); } - + if ((door->timer < g_GlobalTimer) || (g_ClockTimer == 0)) { - sub_GAME_7F054FB4(door); + door7F054FB4(door); } } // mips2c line 1130 @@ -6717,7 +6708,7 @@ s32 object_interaction(struct PropRecord *arg0) { var_s2_4 = 0; } - + if (obj->flags & 0x20000000) { var_s2_4 = 0; @@ -6726,9 +6717,9 @@ s32 object_interaction(struct PropRecord *arg0) if (var_s2_4 != 0) { temp_f0_14 = atan2f(sp5xx.f[0], sp5xx.f[2]); - + var_f2 = camera->unkC8; - + if ( var_f2 < 0.0f) { var_f2 += 6.2831855f; @@ -6737,32 +6728,32 @@ s32 object_interaction(struct PropRecord *arg0) { var_f2 -= 6.2831855f; } - + var_f2 += camera->unkC4; if (var_f2 >= 6.2831855f) { var_f2 -= 6.2831855f; } - + var_f12 = temp_f0_14 - var_f2; - + if (temp_f0_14 < var_f2) { var_f12 += 6.2831855f; } - + var_f12 -= 3.1415927f; - + if (var_f12 < 0.0f) { var_f12 += 6.2831855f; } - + if (var_f12 > 3.1415927f) { var_f12 -= 6.2831855f; } - + if ((var_f12 > 0.7853982f) || (var_f12 < -0.7853982f)) { var_s2_4 = 0; @@ -6773,18 +6764,18 @@ s32 object_interaction(struct PropRecord *arg0) { sp4F0 = arg0->stan; bondviewUpdateGuardTankFlagsRelated(sp514, 0); - + if (stanTestLineUnobstructed(&sp4F0, arg0->pos.f[0], arg0->pos.f[2], sp514->pos.f[0], sp514->pos.f[2], 0x1B, 100.0f, 100.0f, 0.0f, 1.0f) != 0) { camera->timer += g_ClockTimer; - + if (camera->timer >= (s32) (300.0f * F_80030B14)) { alarmActivate(); camera->timer = 0; } } - + bondviewUpdateGuardTankFlagsRelated(sp514, 1); } @@ -6793,7 +6784,7 @@ s32 object_interaction(struct PropRecord *arg0) if ((sp518 - ((camera->unkD8 * camera->unkD8 * 0.5f) / 0.00065449846f)) <= camera->unkC8) { camera->unkD8 = (f32) (camera->unkD8 - (0.00065449846f * g_GlobalTimerDelta)); - + if (camera->unkD8 < 0.00065449846f) { camera->unkD8 = 0.00065449846f; @@ -6804,21 +6795,21 @@ s32 object_interaction(struct PropRecord *arg0) if (camera->unkD8 < camera->unkDC) { var_f2_3 = camera->unkD8 + (0.00065449846f * g_GlobalTimerDelta); - + if (camera->unkDC < var_f2_3) { var_f2_3 = camera->unkDC; } - + if (camera->unkC8 < (sp518 - ((var_f2_3 * var_f2_3 * 0.5f) / 0.00065449846f))) { camera->unkD8 = var_f2_3; } } } - + camera->unkC8 += (camera->unkD8 * g_GlobalTimerDelta); - + if (sp518 <= camera->unkC8) { camera->unkC8 = sp518; @@ -6831,7 +6822,7 @@ s32 object_interaction(struct PropRecord *arg0) if (camera->unkC8 <= (sp518 + ((camera->unkD8 * camera->unkD8 * 0.5f) / 0.00065449846f))) { camera->unkD8 = (f32) (camera->unkD8 - (0.00065449846f * g_GlobalTimerDelta)); - + if (camera->unkD8 < 0.00065449846f) { camera->unkD8 = 0.00065449846f; @@ -6842,21 +6833,21 @@ s32 object_interaction(struct PropRecord *arg0) if (camera->unkD8 < camera->unkDC) { var_f2_3 = camera->unkD8 + (0.00065449846f * g_GlobalTimerDelta); - + if (camera->unkDC < var_f2_3) { var_f2_3 = camera->unkDC; } - + if ((sp518 + ((var_f2_3 * var_f2_3 * 0.5f) / 0.00065449846f)) < camera->unkC8) { camera->unkD8 = var_f2_3; } } } - + camera->unkC8 -= (camera->unkD8 * g_GlobalTimerDelta); - + if (camera->unkC8 <= sp518) { camera->unkC8 = sp518; @@ -6875,7 +6866,7 @@ s32 object_interaction(struct PropRecord *arg0) sp4AC = 0; sp4A8 = 0; sp4A4 = 0; - + if (obj->flags2 & 0x80000000) { if (obj->flags2 & 0x40000000) @@ -6885,7 +6876,7 @@ s32 object_interaction(struct PropRecord *arg0) } else if ((autogun->rot_related == autogun->unk90) && (autogun->unk98 == autogun->unk9C)) { - autogun->unk98 = (((( RANDOMGETNEXT_F32() * 39.0f) + 1.0f) * 6.2831855f) / 360.0f); + autogun->unk98 = (((( RANDOMGETNEXT_F32() * 39.0f) + 1.0f) * 6.2831855f) / 360.0f); autogun->rot_related = (RANDOMGETNEXT_F32() * 6.2831855f); } @@ -6898,23 +6889,23 @@ s32 object_interaction(struct PropRecord *arg0) sp4BC.f[2] = temp_v0_19->pos.f[0] - obj->runtime_pos.f[0]; sp4BC.f[1] = (temp_v0_19->pos.f[1] - obj->runtime_pos.f[1]) - 20.0f; sp4BC.f[0] = temp_v0_19->pos.f[2] - obj->runtime_pos.f[2]; - + sp4B8 = (sp4BC.f[2] * sp4BC.f[2]) + (sp4BC.f[0] * sp4BC.f[0]); sp4B0 = sqrtf(sp4B8); - + if (obj->flags & 0x08000000) { sp4B8 += (sp4BC.f[1] * sp4BC.f[1]); sp4B0 = sqrtf(sp4B8); } - + sp4B4 = sp4B0; - + sp4A0 = chrlvGetAimLimitAngle(sp4B8); sp4D8 = autogun->rot_related; sp4D4 = autogun->unk98; - + if (sp4B4 <= autogun->aimdist) { // mips2c line 1339 @@ -6928,28 +6919,28 @@ s32 object_interaction(struct PropRecord *arg0) else { var_f12_3 = sp49C - autogun->unk90; - + if (var_f12_3 < 0.0f) { var_f12_3 += 6.2831855f; } - + if (var_f12_3 > 3.1415927f) { var_f12_3 -= 6.2831855f; } - + if ((sp498 - autogun->unk9C) < 0.0f) { // empty } - + if ((var_f12_3 < 1.2217306f) && (var_f12_3 > -1.2217306f)) { sp4AC = 1; } } - + if (sp4AC != 0) { sp494 = sp49C - autogun->rot_related; @@ -7000,12 +6991,12 @@ s32 object_interaction(struct PropRecord *arg0) if (autogun->is_active != 0) { sp4D8 += sp4A0 * 0.8f * sinf(((f32) ((s32) g_GlobalTimer % 120) * 6.2831855f) / 120.0f); - + if (sp4D8 < 0.0f) { sp4D8 += 6.2831855f; } - + if (sp4D8 >= 6.2831855f) { sp4D8 -= 6.2831855f; @@ -7044,7 +7035,7 @@ s32 object_interaction(struct PropRecord *arg0) chrobjCallsApplySpeed(&autogun->unk9C, sp4D4, &autogun->unkA0, 0.0008726647f, 0.0008726647f, autogun->speed); var_f12_5 = sp4D8 - autogun->unk90; - + if (var_f12_5 < 0.0f) { var_f12_5 += 6.2831855f; @@ -7071,14 +7062,14 @@ s32 object_interaction(struct PropRecord *arg0) if (sp4AC != 0) { - if ((var_f12_5 < sp4A0) + if ((var_f12_5 < sp4A0) && (-sp4A0 < var_f12_5) - && (var_f2_6 < sp4A0) + && (var_f2_6 < sp4A0) && (-sp4A0 < var_f2_6)) { autogun->is_active = 1; sp4A8 = 1; - + if (sp4A4 != 0) { autogun->unkB8 = (s32) g_GlobalTimer; @@ -7088,10 +7079,10 @@ s32 object_interaction(struct PropRecord *arg0) else { temp_f0_22 = 2.0f * sp4A0; - - if ((var_f12_5 < temp_f0_22) + + if ((var_f12_5 < temp_f0_22) && (-temp_f0_22 < var_f12_5) - && (var_f2_6 < temp_f0_22) + && (var_f2_6 < temp_f0_22) && (-temp_f0_22 < var_f2_6)) { autogun->is_active = 1; @@ -7114,7 +7105,7 @@ s32 object_interaction(struct PropRecord *arg0) if (sp4A8 != 0) { autogun->unkB0 += (0.009973311f * g_GlobalTimerDelta); - + if (autogun->unkB0 > 0.5983986f) { autogun->unkB0 = 0.5983986f; @@ -7126,7 +7117,7 @@ s32 object_interaction(struct PropRecord *arg0) { autogun->unkB0 *= 0.99f; } - + if (autogun->unkB0 <= 0.0001f) { autogun->unkB0 = 0.0f; @@ -7135,7 +7126,7 @@ s32 object_interaction(struct PropRecord *arg0) if (autogun->unkB0 > 0.0f) { autogun->unkB4 += (autogun->unkB0 * g_GlobalTimerDelta); - + while (autogun->unkB4 >= 6.2831855f) { autogun->unkB4 -= 6.2831855f; @@ -7147,12 +7138,12 @@ s32 object_interaction(struct PropRecord *arg0) else if (obj->type == PROPDEF_VEHICHLE) { struct VehichleRecord *temp_s1 = (struct VehichleRecord *)obj; - + sp478 = NULL; sp47C = temp_s1->roty; - + ai((PropDefHeaderRecord*)temp_s1, 1); - + if (temp_s1->speedtime60 >= 0.0f) { if (temp_s1->speedtime60 <= g_GlobalTimerDelta) @@ -7163,7 +7154,7 @@ s32 object_interaction(struct PropRecord *arg0) { temp_s1->speed += (((temp_s1->speedaim - temp_s1->speed) * g_GlobalTimerDelta) / temp_s1->speedtime60); } - + temp_s1->speedtime60 -= g_GlobalTimerDelta; } @@ -7175,14 +7166,14 @@ s32 object_interaction(struct PropRecord *arg0) { var_s0 = sub_GAME_7F053894(&temp_s1->runtime_pos, 2000.0f, 3000.0f); } - + if (var_s0 > 0) { if (((temp_s1->Sound == NULL) || (sndGetPlayingState(temp_s1->Sound) == 0)) && (lvlGetControlsLockedFlag() == 0)) { sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, TRUCK_RUN_SFX, temp_s1->Sound); } - + if (temp_s1->Sound != NULL) { sndCreatePostEvent(temp_s1->Sound, 8, var_s0); @@ -7201,9 +7192,9 @@ s32 object_interaction(struct PropRecord *arg0) if (temp_s1->path != NULL) { sp478 = &g_CurrentSetup.pads[g_CurrentSetup.pathwaypoints[temp_s1->path->waypoints[temp_s1->nextstep]].padID].pos; - + sp47C = atan2f(sp478->f[0] - temp_s1->runtime_pos.f[0], sp478->f[2] - temp_s1->runtime_pos.f[2]); - + if (temp_s1->flags & 0x20000000) { temp_s1->roty = sp47C; @@ -7222,11 +7213,11 @@ s32 object_interaction(struct PropRecord *arg0) if (temp_s1->speed > 0.0f) { sp430 = 0.0f; - + sp468 = arg0->stan; sp438 = temp_s1->roty; sp434 = temp_s1->turnrot60; - + if (sp478 != NULL) { sp430 = 0.0f; @@ -7251,7 +7242,7 @@ s32 object_interaction(struct PropRecord *arg0) { temp_s1->roty += 6.2831855f; } - + if (sp47C == temp_s1->roty) { if ((temp_s1->turnrot60 <= 0.00021816617f) && (temp_s1->turnrot60 >= -0.00021816617f)) @@ -7259,9 +7250,9 @@ s32 object_interaction(struct PropRecord *arg0) temp_s1->turnrot60 = 0.0f; } } - + temp_s0_5 = (f32*)model->obj->Switches[3]->Data; - + if (g_GlobalTimerDelta > 0.0f) { sp430 = (temp_s1->roty - sp438) / g_GlobalTimerDelta; @@ -7270,7 +7261,7 @@ s32 object_interaction(struct PropRecord *arg0) { sp430 += 6.2831855f; } - + sp460 = sinf(sp430) * (temp_s0_5[2] * model->scale) * g_GlobalTimerDelta; sp43C = sinf(temp_s1->roty); sp440 = 0.0f; @@ -7279,7 +7270,7 @@ s32 object_interaction(struct PropRecord *arg0) sp694.f[1] = temp_s1->runtime_pos.f[1]; sp694.f[2] = (sp43C * sp460) + (temp_s1->runtime_pos.f[2] + (temp_s1->speed * g_GlobalTimerDelta * sp444)); - if ((sub_GAME_7F0B0E24(&sp468, arg0->pos.f[0], arg0->pos.f[2], sp694.f[0], sp694.f[2], 0x1F, 0.0f, 1.0f, 0.0f, 1.0f) != 0) + if ((sub_GAME_7F0B0E24(&sp468, arg0->pos.f[0], arg0->pos.f[2], sp694.f[0], sp694.f[2], 0x1F, 0.0f, 1.0f, 0.0f, 1.0f) != 0) && (sub_GAME_7F0B18B8(&sp468, sp694.f[0], sp694.f[2], 10.0f, 0x1F, 0.0f, 1.0f) < 0)) { sp44C = arg0->stan; @@ -7294,7 +7285,7 @@ s32 object_interaction(struct PropRecord *arg0) chrobjCollisionRelated(obj); setupUpdateObjectRoomPosition(obj); var_s2_5 = sub_GAME_7F0448A8(arg0); - + if (var_s2_5 != 0) { temp_v0_25 = (f32*)model->obj->Switches[7]->Data; @@ -7312,13 +7303,13 @@ s32 object_interaction(struct PropRecord *arg0) // temp_f0_26 = arg0->pos.f[0]; // temp_f2_14 = arg0->pos.f[2] - // temp_f0_27 = arg0->pos.f[0] + sp418, + // temp_f0_27 = arg0->pos.f[0] + sp418, // temp_f2_15 = arg0->pos.f[2] + sp420 - // temp_f0_28 = arg0->pos.f[0], + // temp_f0_28 = arg0->pos.f[0], // temp_f2_16 = arg0->pos.f[2] - // temp_f0_29 = arg0->pos.f[0] + sp424, + // temp_f0_29 = arg0->pos.f[0] + sp424, // temp_f2_17 = arg0->pos.f[2] + sp42C, - + if ((walkTilesBetweenPoints_NoCallback(&sp468, arg0->pos.f[0], arg0->pos.f[2], sp40C + (arg0->pos.f[0] + sp424), sp414 + (arg0->pos.f[2] + sp42C)) == 0) || (walkTilesBetweenPoints_NoCallback(&sp468, sp40C + (arg0->pos.f[0] + sp424), sp414 + (arg0->pos.f[2] + sp42C), sp40C + (arg0->pos.f[0] + sp418), sp414 + (arg0->pos.f[2] + sp420)) == 0) || (walkTilesBetweenPoints_NoCallback(&sp468, sp40C + arg0->pos.f[0] + sp418, sp414 + arg0->pos.f[2] + sp420, sp400 + arg0->pos.f[0] + sp418, sp408 + arg0->pos.f[2] + sp420) == 0) @@ -7328,13 +7319,13 @@ s32 object_interaction(struct PropRecord *arg0) var_s2_5 = 0; } } - + if (var_s2_5 != 0) { sub_GAME_7F044B38(temp_s1); sub_GAME_7F0402B4(arg0, &temp_s1->nextcol); detonate_proxmine_In_range(&temp_s1->runtime_pos); - + if ((sp478 != NULL) && (chrlvIsArrivingLaterallyAtPos(&sp450, &sp694, sp478, 100.0f) != 0)) { @@ -7354,7 +7345,7 @@ s32 object_interaction(struct PropRecord *arg0) temp_s1->speedaim = (f32) temp_s1->speed; temp_s1->speedtime60 = 60.0f; } - + temp_s1->speed = 0.0f; temp_s1->roty = sp438; temp_s1->turnrot60 = sp434; @@ -7365,7 +7356,7 @@ s32 object_interaction(struct PropRecord *arg0) obj->runtime_pos.f[1] = sp450.f[1]; arg0->pos.f[2] = sp450.f[2]; obj->runtime_pos.f[2] = sp450.f[2]; - + chrobjCollisionRelated(obj); setupUpdateObjectRoomPosition(obj); } @@ -7377,7 +7368,7 @@ s32 object_interaction(struct PropRecord *arg0) temp_s1->speedaim = (f32) temp_s1->speed; temp_s1->speedtime60 = 60.0f; } - + temp_s1->speed = 0.0f; temp_s1->roty = sp438; temp_s1->turnrot60 = sp434; @@ -7402,7 +7393,7 @@ s32 object_interaction(struct PropRecord *arg0) if (temp_s0_6->anim != NULL) { setsuboffset(temp_s0_6, &temp_s1->runtime_pos); - + if (temp_s0_6->anim == animation_table_ptrs2[AIRCRAFT_ANIMATION_plane_runway]) { sub_GAME_7F06CE84(temp_s0_6, 10.438f); @@ -7423,7 +7414,7 @@ s32 object_interaction(struct PropRecord *arg0) sub_GAME_7F06CE84(temp_s1->model, 1.0438f); setsubroty(temp_s1->model, 0.0f); } - + modelTickAnimQuarterSpeed(temp_s1->model, g_ClockTimer, 1); subcalcpos(temp_s1->model); getsuboffset(temp_s1->model, &temp_s1->runtime_pos); @@ -7438,14 +7429,14 @@ s32 object_interaction(struct PropRecord *arg0) { var_v1_4 = (PadRecord *)&g_CurrentSetup.boundpads[getBoundPadNum(temp_s1->pad)]; } - + arg0->pos.f[1] = temp_s1->runtime_pos.f[1] + var_v1_4->pos.f[1]; temp_s1->runtime_pos.f[1] = arg0->pos.f[1]; setsuboffset(temp_s1->model, &temp_s1->runtime_pos); } - + var_f12_6 = temp_s1->speedtime60; - + if (var_f12_6 >= 0.0f) { if (var_f12_6 <= g_GlobalTimerDelta) @@ -7471,12 +7462,12 @@ s32 object_interaction(struct PropRecord *arg0) var_f12_6 = temp_s1->rotaryspeed; temp_s1->rotaryspeed += (((temp_s1->rotaryspeedaim - temp_s1->rotaryspeed) * g_GlobalTimerDelta) / temp_s1->rotaryspeedtime); } - + temp_s1->rotaryspeedtime -= g_GlobalTimerDelta; } - + var_s0_2 = 0; - + if (!(temp_s1->flags2 & 0x80000) && (objIsHealthy(obj) != 0) && (temp_s1->rotaryspeed != 0.0f) @@ -7484,14 +7475,14 @@ s32 object_interaction(struct PropRecord *arg0) { var_s0_2 = sub_GAME_7F053894(&temp_s1->runtime_pos, 5000.0f, 6000.0f); } - + if (var_s0_2 > 0) { if (((temp_s1->Sound == NULL) || (sndGetPlayingState(temp_s1->Sound) == 0)) && (lvlGetControlsLockedFlag() == 0)) { sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, HELI_RUN_SFX, temp_s1->Sound); } - + if (temp_s1->Sound != NULL) { sndCreatePostEvent(temp_s1->Sound, 8, var_s0_2); @@ -7504,7 +7495,7 @@ s32 object_interaction(struct PropRecord *arg0) sndDeactivate(temp_s1->Sound); } } - } + } } // mips2c line 1860 @@ -7517,7 +7508,7 @@ s32 object_interaction(struct PropRecord *arg0) tinted_glass->TintDist, tinted_glass->CullDist, tinted_glass->unk90); - + if ((tinted_glass->unk8C >= 0) && (sp674 == 1)) { if (tinted_glass->calculatedopacity == 0xFF) @@ -7529,7 +7520,7 @@ s32 object_interaction(struct PropRecord *arg0) bgToggleDataPortalsContrlBytes1Bit1(tinted_glass->unk8C, 1); } } - + sp670 = 0; } // mips2c line 1879 @@ -7539,22 +7530,22 @@ s32 object_interaction(struct PropRecord *arg0) var_s2_6 = 1; door->calculatedopacity = glassCalculateOpacity(&obj->runtime_pos, door->TintDist, door->CullDist, 0.0f); - + if (sp674 == 1) { if ((door->calculatedopacity != 0xFF) || (door->openPosition > 0.0f)) { var_s2_6 = 0; } - + temp_v0_29 = model->obj; - - if ((&skeleton_door == temp_v0_29->Skeleton) + + if ((&skeleton_door == temp_v0_29->Skeleton) && ((modelGetNodeRwData(model, temp_v0_29->Switches[0]))->Header.unk00 == 0)) { var_s2_6 = 0; } - + if (var_s2_6 != 0) { doorDeactivatePortal(door); @@ -7580,7 +7571,7 @@ s32 object_interaction(struct PropRecord *arg0) else { var_v1_5 = 0; - + if (!(obj->runtime_bitflags & 0x800) && !(obj->flags2 & 0x80000)) { var_v1_5 = sub_GAME_7F054D6C(arg0, &obj->runtime_pos, getinstsize(model), sp670); @@ -7602,13 +7593,13 @@ s32 object_interaction(struct PropRecord *arg0) if (obj->type == PROPDEF_DOOR) { - sp39C = (struct DoorRecord *)arg0->obj; - - sub_GAME_7F0526EC(sp39C, (Mtxf *)model->render_pos); + sp39C = (struct DoorRecord *)arg0->obj; + + door7F0526EC(sp39C, (Mtxf *)model->render_pos); matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), (Mtxf *)model->render_pos); - + temp_v0_31 = model->obj; - + if (&skeleton_eyelid_door == temp_v0_31->Skeleton) { temp_a1_4 = &model->render_pos[1].pos; @@ -7619,7 +7610,7 @@ s32 object_interaction(struct PropRecord *arg0) matrix_4x4_set_rotation_around_x(sp394, temp_a1_4); matrix_4x4_set_position((struct coord3d *)temp_s0_10, temp_a1_4); matrix_4x4_multiply_in_place((Mtxf *)model->render_pos, temp_a1_4); - + temp_a1_4 = &model->render_pos[2].pos; temp_s0_10 = (Mtxf *)temp_v0_31->Switches[1]->Data; @@ -7647,7 +7638,7 @@ s32 object_interaction(struct PropRecord *arg0) else { sp380 = 0.0f; - + if (sp678 != 0) { if (temp_f0_31 < sp67C) @@ -7659,14 +7650,14 @@ s32 object_interaction(struct PropRecord *arg0) for (sp38C = 0; sp38C < 6; sp38C++) { - temp_v0_32 = sp38C * 2; - + temp_v0_32 = sp38C * 2; + sp390 = (Mtxf *)model->obj->Switches[temp_v0_32 + 1]->Data; temp_a1_6 = &model->render_pos[temp_v0_32 + 1].pos; matrix_4x4_set_rotation_around_z(sp380, temp_a1_6); matrix_4x4_set_position((struct coord3d *)sp390, temp_a1_6); matrix_4x4_multiply_in_place((Mtxf *)model->render_pos, temp_a1_6); - + sp390 = (Mtxf *)model->obj->Switches[temp_v0_32 + 2]->Data; temp_a1_6 = &model->render_pos[temp_v0_32 + 2].pos; matrix_4x4_set_rotation_around_z(sp384, temp_a1_6); @@ -7685,7 +7676,7 @@ s32 object_interaction(struct PropRecord *arg0) if (obj->type == PROPDEF_CCTV) { struct CCTVRecord *sp370 = (struct CCTVRecord *)arg0->obj; - + var_f12_7 = sp370->unkC8; temp_s0_13 = (struct coord3d *)model->obj->Switches[0]->Data; @@ -7699,13 +7690,13 @@ s32 object_interaction(struct PropRecord *arg0) } matrix_4x4_set_rotation_around_y(var_f12_7, &sp320); - + matrix_4x4_multiply(&sp320, &sp370->unk84, &model->render_pos[1].pos); - + sp360.f[0] = temp_s0_13->f[0]; sp360.f[1] = temp_s0_13->f[1]; sp360.f[2] = temp_s0_13->f[2]; - + mtx4TransformVecInPlace(&sp3A4, &sp360); matrix_4x4_set_position(&sp360, &model->render_pos[1].pos); matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), &model->render_pos[1].pos); @@ -7714,14 +7705,14 @@ s32 object_interaction(struct PropRecord *arg0) else if (obj->type == PROPDEF_AUTOGUN) { struct AutogunRecord *sp318 = (struct AutogunRecord *)arg0->obj; - + sp304 = sp318->unk90 + 1.5707964f; sp300 = -sp318->unk9C; if (sp304 >= 6.2831855f) { sp304 -= 6.2831855f; } - + temp_s0_14 = model->obj->Switches[1]->Data; sp308.f[0] = temp_s0_14->f[0]; sp308.f[1] = temp_s0_14->f[1]; @@ -7750,7 +7741,7 @@ s32 object_interaction(struct PropRecord *arg0) matrix_4x4_set_identity_and_position(model->obj->Switches[4]->Data, sp2FC); matrix_4x4_multiply_homogeneous_in_place(model->obj->Switches[2]->Data, sp2FC); } - + if (model->obj->Switches[7] != NULL) { sp2FC = modelFindNodeMtx(model, model->obj->Switches[7], 0); @@ -7786,47 +7777,47 @@ s32 object_interaction(struct PropRecord *arg0) else if (obj->type == PROPDEF_VEHICHLE) { struct VehichleRecord *temp_s1 = (struct VehichleRecord *)obj; - + var_f0_3 = 0.0f; - + temp_v1_7 = model->obj->Switches; sp260 = temp_v1_7[1]->Data; sp25C = temp_v1_7[2]->Data; sp258 = temp_v1_7[3]->Data; sp254 = temp_v1_7[4]->Data; temp_v0_40 = temp_v1_7[5]->Data; - + if (sp678 != 0) { var_f0_3 = (temp_s1->speed * g_GlobalTimerDelta * 6.2831855f) / ((temp_v0_40[4] - temp_v0_40[3]) * model->scale * 6.2831855f * 0.5f); - + temp_s1->wheelxrot += var_f0_3; - + while (temp_s1->wheelxrot >= 6.2831855f) { temp_s1->wheelxrot -= 6.2831855f; } - + while (temp_s1->wheelxrot < 0.0f) { temp_s1->wheelxrot += 6.2831855f; } } - + temp_s1->wheelxrot += var_f0_3; - + while (temp_s1->wheelxrot >= 6.2831855f) { temp_s1->wheelxrot -= 6.2831855f; } - + while (temp_s1->wheelxrot < 0.0f) { temp_s1->wheelxrot += 6.2831855f; } - + matrix_4x4_set_rotation_around_x(temp_s1->wheelxrot, &sp2AC); - + if (temp_s1->speed > 0.0f) { sp24C = temp_s1->turnrot60; @@ -7835,21 +7826,21 @@ s32 object_interaction(struct PropRecord *arg0) { sp24C = -sp24C; } - + sp248 = sinf(sp24C) * sp250; temp_s1->wheelyrot = atan2f(sp248, (cosf(sp24C) * sp250) - (sp250 - temp_s1->speed)); - + if (temp_s1->wheelyrot < sp24C) { temp_s1->wheelyrot = sp24C; } - + if (temp_s1->turnrot60 > 0.0f) { temp_s1->wheelyrot = (6.2831855f - temp_s1->wheelyrot); } } - + matrix_4x4_set_rotation_around_y(temp_s1->wheelyrot, &sp26C); matrix_4x4_copy(&sp2AC, &model->render_pos[3].pos); matrix_4x4_set_position(sp258, &model->render_pos[3].pos); @@ -7872,29 +7863,29 @@ s32 object_interaction(struct PropRecord *arg0) else if (obj->type == PROPDEF_AIRCRAFT) { struct AircraftRecord *temp_s1 = (struct AircraftRecord*)obj; - + //temp_a1_19 = model->render_pos[1]; sp1FC = model->obj->Switches[2]->Data; - + if ((g_ClockTimer > 0) && (sp678 != 0)) { temp_s1->rotoryrot += temp_s1->rotaryspeed; - + while (temp_s1->rotoryrot >= 6.2831855f) { temp_s1->rotoryrot -= 6.2831855f; } - + while (temp_s1->rotoryrot < 0.0f) { temp_s1->rotoryrot += 6.2831855f; } } - + if (temp_s1->model->anim != NULL) { sp1B0 = D_80030B34; - + sp1B0.unk_matrix = camGetWorldToScreenMtxf(); sp1B0.mtxlist = &model->render_pos[0].pos; subcalcmatrices(&sp1B0, temp_s1->model); @@ -7903,7 +7894,7 @@ s32 object_interaction(struct PropRecord *arg0) { matrix_4x4_copy(&model->render_pos[0].pos, &model->render_pos[1].pos); } - + if (temp_s1->flags & 0x20000000) { matrix_4x4_set_rotation_around_z(temp_s1->rotoryrot, &sp200); @@ -7918,7 +7909,7 @@ s32 object_interaction(struct PropRecord *arg0) matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[1].pos, &model->render_pos[2].pos); var_v1_7 = model->obj->Switches; - + if (var_v1_7[3] != NULL) { temp_s0_21 = modelFindNodeMtx(model, var_v1_7[3], 0); @@ -7941,50 +7932,50 @@ s32 object_interaction(struct PropRecord *arg0) if (obj->type == PROPDEF_TANK) { struct TankRecord *temp_s1 = (struct TankRecord*)obj; - + temp_v1_8 = model->obj->Switches; - + sp168 = temp_v1_8[1]->Data; sp164 = temp_v1_8[3]->Data; sp160 = temp_v1_8[4]->Data; sp15C = temp_v1_8[2]->Data; sp158 = temp_v1_8[6]->Data; - + sp154 = -temp_s1->turret_vertical_angle; if (sp154 < 0.0f) { sp154 += 6.2831855f; } - + var_f12_9 = -temp_s1->turret_orientation_angle; if (var_f12_9 < 0.0f) { var_f12_9 += 6.2831855f; } - + matrix_4x4_set_rotation_around_y(var_f12_9, &model->render_pos[1].pos); matrix_4x4_set_position(sp168, &model->render_pos[1].pos); matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[0].pos, &model->render_pos[1].pos); - + matrix_4x4_set_rotation_around_x(sp154, &model->render_pos[3].pos); matrix_4x4_set_position(sp164, &model->render_pos[3].pos); matrix_4x4_multiply_homogeneous_in_place(sp6C, &model->render_pos[3].pos); - + matrix_4x4_set_rotation_around_y(1.5707964f, &model->render_pos[4].pos); matrix_4x4_set_position(sp160, &model->render_pos[4].pos); matrix_4x4_multiply_homogeneous_in_place(&model->render_pos[3].pos, &model->render_pos[4].pos); - + matrix_4x4_set_identity_and_position(sp15C, &model->render_pos[2].pos); matrix_4x4_multiply_homogeneous_in_place(sp6C, &model->render_pos[2].pos); matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), &model->render_pos[1].pos, &sp16C); sub_GAME_7F03F540(sp158, &sp16C, &temp_s1->rect, temp_s1->unk80); - + if (model->obj->Switches[7] != NULL) { modelGetNodeRwData(model, model->obj->Switches[7])->Header.unk00 = (s16) temp_s1->is_firing_tank; } - + if (model->obj->Switches[8] != NULL) { modelGetNodeRwData(model, model->obj->Switches[8])->Header.unk00 = 0; @@ -7994,10 +7985,10 @@ s32 object_interaction(struct PropRecord *arg0) } modelUpdateRelationsQuick(model, model->obj->RootNode); - arg0->Unk18 = -model->render_pos[0].pos.m[3][2]; + arg0->Unk18 = -model->render_pos[0].pos.m[3][2]; chrobjWeaponTick(arg0); - + sp684 = arg0->child; while (sp684 != NULL) @@ -8009,9 +8000,9 @@ s32 object_interaction(struct PropRecord *arg0) else { arg0->flags &= 0xFFFD; - + chrobjWeaponTick(arg0); - + sp684 = arg0->child; while (sp684 != NULL) @@ -8051,26 +8042,26 @@ s32 object_interaction(struct PropRecord *arg0) if ((autogun->is_active != 0) && !(obj->flags & 0x10000000)) { autogun->unkAC = (autogun->unkAC + 1) & 1; - + sp13C = autogun->unkAC == 0; - + if (model->obj->Switches[5] != 0) { sp138 = autogun->unkAC == 1; } - + if (autogun->unkC0 < g_GlobalTimer) { if ((autogun->unkC4 != NULL) && (sndGetPlayingState(autogun->unkC4) != 0)) { sndDeactivate(autogun->unkC4); } - + if ((autogun->unkC8 != NULL) && (sndGetPlayingState(autogun->unkC8) != 0)) { sndDeactivate(autogun->unkC8); } - + if (autogun->unkC4 == NULL) { sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, GUN_B9_CANNON_SHORT_SFX, autogun->unkC4); @@ -8081,7 +8072,7 @@ s32 object_interaction(struct PropRecord *arg0) sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, GUN_B9_CANNON_SHORT_SFX, autogun->unkC8); chrobjSndCreatePostEventDefault(autogun->unkC8, &arg0->pos); } - + autogun->unkC0 = (s32) (g_GlobalTimer + 2); } @@ -8095,12 +8086,12 @@ s32 object_interaction(struct PropRecord *arg0) sp100 = get_curplayer_positiondata(); var_a0_6 = 5; temp_v1_10 = model->obj->Switches; - + if ((model->obj->Switches[7] != 0) && !(autogun->unkAC & 7)) { var_a0_6 = 7; } - + if ((arg0->flags & 2) && temp_v1_10[var_a0_6] != NULL) { temp_s2_7 = modelFindNodeMtx(model, temp_v1_10[var_a0_6], 0); @@ -8123,7 +8114,7 @@ s32 object_interaction(struct PropRecord *arg0) sp12C.f[1] = arg0->pos.f[1]; sp12C.f[2] = arg0->pos.f[2]; } - + sp120.f[0] = cosf(autogun->unk9C) * sinf(autogun->unk90); sp120.f[1] = sinf(autogun->unk9C); sp120.f[2] = cosf(autogun->unk9C) * cosf(autogun->unk90); @@ -8131,7 +8122,7 @@ s32 object_interaction(struct PropRecord *arg0) sp110.f[0] = (sp120.f[0] * 65536.0f) + sp12C.f[0]; sp110.f[1] = (sp120.f[1] * 65536.0f) + sp12C.f[1]; sp110.f[2] = (sp120.f[2] * 65536.0f) + sp12C.f[2]; - + sub_GAME_7F0B1CC4(); // mmips2c line 2441 @@ -8149,32 +8140,32 @@ s32 object_interaction(struct PropRecord *arg0) temp_fc3d_a.f[0] = sp100->pos.f[0] - sp12C.f[0]; temp_fc3d_a.f[1] = sp100->pos.f[1] - sp12C.f[1]; temp_fc3d_a.f[2] = sp100->pos.f[2] - sp12C.f[2]; - + temp_f20_4 = (temp_fc3d_a.f[0] * temp_fc3d_a.f[0]) + (temp_fc3d_a.f[1] * temp_fc3d_a.f[1]) + (temp_fc3d_a.f[2] * temp_fc3d_a.f[2]); - + temp_fc3d_b.f[0] = sp110.f[0] - sp12C.f[0]; temp_fc3d_b.f[1] = sp110.f[1] - sp12C.f[1]; temp_fc3d_b.f[2] = sp110.f[2] - sp12C.f[2]; - - if ((temp_f20_4 <= ((temp_fc3d_b.f[0] * temp_fc3d_b.f[0]) + (temp_fc3d_b.f[1] * temp_fc3d_b.f[1]) + (temp_fc3d_b.f[2] * temp_fc3d_b.f[2]))) + + if ((temp_f20_4 <= ((temp_fc3d_b.f[0] * temp_fc3d_b.f[0]) + (temp_fc3d_b.f[1] * temp_fc3d_b.f[1]) + (temp_fc3d_b.f[2] * temp_fc3d_b.f[2]))) && (bondviewGetIfCurrentPlayerDamageShowTime() == 0)) { temp_f0_35 = sqrtf(temp_f20_4); var_f2_7 = 0.16f * g_GlobalTimerDelta * F_80030B1C; - + if (temp_f0_35 > 200.0f) { var_f2_7 *= 200.0f / temp_f0_35; } - + autogun->unkD4 += var_f2_7; - + if (autogun->unkD4 >= 1.0f) { bondviewCallRecordDamageKills(bondwalkItemGetDestructionAmount(ITEM_FNP90) * 0.125f * F_80030B20, autogun->unk90, -1, 1); - + autogun->unkD4 = 0.0f; - + if (bondviewGetIfCurrentPlayerDamageShowTime() != 0) { sp11C = 0; @@ -8190,7 +8181,7 @@ s32 object_interaction(struct PropRecord *arg0) { sub_GAME_7F0A3E1C(&sp110, 1, 26.0f, (s16) sp10C->room); } - + recall_joy2_hits_edit_flag(ITEM_FNP90, &sp110, -1); } else @@ -8206,32 +8197,32 @@ s32 object_interaction(struct PropRecord *arg0) if (sp104 != 0) { beam = autogun->beam; - + beam->from.f[0] = sp12C.f[0]; beam->from.f[1] = sp12C.f[1]; beam->from.f[2] = sp12C.f[2]; - + beam->dir.f[0] = sp110.f[0] - beam->from.f[0]; beam->dir.f[1] = sp110.f[1] - beam->from.f[1]; beam->dir.f[2] = sp110.f[2] - beam->from.f[2]; - + sp94 = sqrtf((beam->dir.f[2] * beam->dir.f[2]) + ((beam->from.f[0] * beam->from.f[0]) + (beam->from.f[1] * beam->from.f[1]))); temp_f2_23 = 1.0f / sp94; - + beam->dir.f[0] = (f32) (beam->dir.f[0] * temp_f2_23); beam->dir.f[1] = (f32) (beam->dir.f[1] * temp_f2_23); beam->dir.f[2] = (f32) (beam->dir.f[2] * temp_f2_23); - + if (sp94 > 10000.0f) { sp94 = 10000.0f; } - + beam->age = 0; beam->weaponnum = ITEM_FNP90; beam->maxdist = sp94; - + if (sp94 < 500.0f) { sp94 = 500.0f; @@ -8242,27 +8233,27 @@ s32 object_interaction(struct PropRecord *arg0) { beam->speed = 0.25f * sp94; beam->mindist = 0.6f * sp94; - + if (beam->mindist > 3000.0f) { beam->mindist = 3000.0f; } - + var_f4 = (-0.1f - (RANDOMGETNEXT_F32() * 0.3f)) * sp94; } else { beam->speed = 0.2f * sp94; beam->mindist = 0.2f * sp94; - + if (beam->mindist > 3000.0f) { beam->mindist = 3000.0f; } - + var_f4 = ((2.0f * RANDOMGETNEXT_F32()) - 1.0f) * beam->speed; } - + beam->dist = var_f4; } } @@ -8287,7 +8278,7 @@ s32 object_interaction(struct PropRecord *arg0) { arg0->stan = NULL; } - + return sp680; } #else @@ -8484,7 +8475,7 @@ glabel object_interaction /* 079ED4 7F0453A4 AFAC0678 */ sw $t4, 0x678($sp) .L7F0453A8: /* 079ED8 7F0453A8 0FC26C54 */ jal get_cur_playernum -/* 079EDC 7F0453AC 00000000 */ nop +/* 079EDC 7F0453AC 00000000 */ nop /* 079EE0 7F0453B0 0FC26D36 */ jal sub_GAME_7F09B4D8 /* 079EE4 7F0453B4 00402025 */ move $a0, $v0 /* 079EE8 7F0453B8 2C4E0001 */ sltiu $t6, $v0, 1 @@ -8494,7 +8485,7 @@ glabel object_interaction /* 079EF8 7F0453C8 51E0000C */ beql $t7, $zero, .L7F0453FC /* 079EFC 7F0453CC 8FAB0678 */ lw $t3, 0x678($sp) /* 079F00 7F0453D0 8E22006C */ lw $v0, 0x6c($s1) -/* 079F04 7F0453D4 3C188008 */ lui $t8, %hi(g_CurrentPlayer) +/* 079F04 7F0453D4 3C188008 */ lui $t8, %hi(g_CurrentPlayer) /* 079F08 7F0453D8 8C430088 */ lw $v1, 0x88($v0) /* 079F0C 7F0453DC 50600007 */ beql $v1, $zero, .L7F0453FC /* 079F10 7F0453E0 8FAB0678 */ lw $t3, 0x678($sp) @@ -8513,7 +8504,7 @@ glabel object_interaction /* 079F3C 7F04540C 51400483 */ beql $t2, $zero, .L7F04661C /* 079F40 7F045410 8FAD0690 */ lw $t5, 0x690($sp) /* 079F44 7F045414 8E30006C */ lw $s0, 0x6c($s1) -/* 079F48 7F045418 3C0E8005 */ lui $t6, %hi(g_ClockTimer) +/* 079F48 7F045418 3C0E8005 */ lui $t6, %hi(g_ClockTimer) /* 079F4C 7F04541C 8DCE8374 */ lw $t6, %lo(g_ClockTimer)($t6) /* 079F50 7F045420 8E0C00E0 */ lw $t4, 0xe0($s0) /* 079F54 7F045424 018E6821 */ addu $t5, $t4, $t6 @@ -8579,7 +8570,7 @@ glabel object_interaction /* 07A030 7F045500 AE0F0000 */ sw $t7, ($s0) /* 07A034 7F045504 C6260058 */ lwc1 $f6, 0x58($s1) .L7F045508: -/* 07A038 7F045508 3C188005 */ lui $t8, %hi(g_ClockTimer) +/* 07A038 7F045508 3C188005 */ lui $t8, %hi(g_ClockTimer) /* 07A03C 7F04550C 3C013F80 */ lui $at, 0x3f80 /* 07A040 7F045510 E7A60694 */ swc1 $f6, 0x694($sp) /* 07A044 7F045514 C62A005C */ lwc1 $f10, 0x5c($s1) @@ -8625,13 +8616,13 @@ glabel object_interaction /* 07A0E0 7F0455B0 8E030000 */ lw $v1, ($s0) /* 07A0E4 7F0455B4 306D0020 */ andi $t5, $v1, 0x20 /* 07A0E8 7F0455B8 11A0004B */ beqz $t5, .L7F0456E8 -/* 07A0EC 7F0455BC 00000000 */ nop +/* 07A0EC 7F0455BC 00000000 */ nop /* 07A0F0 7F0455C0 C4322A98 */ lwc1 $f18, %lo(rocket_initial_gravity_modifier)($at) /* 07A0F4 7F0455C4 C600001C */ lwc1 $f0, 0x1c($s0) /* 07A0F8 7F0455C8 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) /* 07A0FC 7F0455CC 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 /* 07A100 7F0455D0 4612003C */ c.lt.s $f0, $f18 -/* 07A104 7F0455D4 00000000 */ nop +/* 07A104 7F0455D4 00000000 */ nop /* 07A108 7F0455D8 4502001C */ bc1fl .L7F04564C /* 07A10C 7F0455DC C60000B0 */ lwc1 $f0, 0xb0($s0) /* 07A110 7F0455E0 C6080014 */ lwc1 $f8, 0x14($s0) @@ -8654,9 +8645,9 @@ glabel object_interaction /* 07A154 7F045624 E606001C */ swc1 $f6, 0x1c($s0) /* 07A158 7F045628 C604001C */ lwc1 $f4, 0x1c($s0) /* 07A15C 7F04562C 4604903C */ c.lt.s $f18, $f4 -/* 07A160 7F045630 00000000 */ nop +/* 07A160 7F045630 00000000 */ nop /* 07A164 7F045634 45000002 */ bc1f .L7F045640 -/* 07A168 7F045638 00000000 */ nop +/* 07A168 7F045638 00000000 */ nop /* 07A16C 7F04563C E612001C */ swc1 $f18, 0x1c($s0) .L7F045640: /* 07A170 7F045640 10000029 */ b .L7F0456E8 @@ -8665,7 +8656,7 @@ glabel object_interaction .L7F04564C: /* 07A17C 7F04564C C7A80698 */ lwc1 $f8, 0x698($sp) /* 07A180 7F045650 4600403C */ c.lt.s $f8, $f0 -/* 07A184 7F045654 00000000 */ nop +/* 07A184 7F045654 00000000 */ nop /* 07A188 7F045658 45000019 */ bc1f .L7F0456C0 /* 07A18C 7F04565C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07A190 7F045660 C4268378 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) @@ -8825,7 +8816,7 @@ glabel object_interaction /* 07A3D8 7F0458A8 3C038003 */ lui $v1, %hi(D_80030B0C) /* 07A3DC 7F0458AC 8C630B0C */ lw $v1, %lo(D_80030B0C)($v1) /* 07A3E0 7F0458B0 10600007 */ beqz $v1, .L7F0458D0 -/* 07A3E4 7F0458B4 00000000 */ nop +/* 07A3E4 7F0458B4 00000000 */ nop /* 07A3E8 7F0458B8 90620000 */ lbu $v0, ($v1) /* 07A3EC 7F0458BC 24010003 */ li $at, 3 /* 07A3F0 7F0458C0 1041003A */ beq $v0, $at, .L7F0459AC @@ -8839,7 +8830,7 @@ glabel object_interaction /* 07A40C 7F0458DC 8C4E0064 */ lw $t6, 0x64($v0) /* 07A410 7F0458E0 31CD0080 */ andi $t5, $t6, 0x80 /* 07A414 7F0458E4 11A00002 */ beqz $t5, .L7F0458F0 -/* 07A418 7F0458E8 00000000 */ nop +/* 07A418 7F0458E8 00000000 */ nop /* 07A41C 7F0458EC 24040001 */ li $a0, 1 .L7F0458F0: /* 07A420 7F0458F0 5480002F */ bnezl $a0, .L7F0459B0 @@ -8949,7 +8940,7 @@ glabel object_interaction /* 07A5B0 7F045A80 C610008C */ lwc1 $f16, 0x8c($s0) /* 07A5B4 7F045A84 C7AA0620 */ lwc1 $f10, 0x620($sp) /* 07A5B8 7F045A88 4610B03C */ c.lt.s $f22, $f16 -/* 07A5BC 7F045A8C 00000000 */ nop +/* 07A5BC 7F045A8C 00000000 */ nop /* 07A5C0 7F045A90 4502001D */ bc1fl .L7F045B08 /* 07A5C4 7F045A94 8E0C0000 */ lw $t4, ($s0) /* 07A5C8 7F045A98 C6020004 */ lwc1 $f2, 4($s0) @@ -8967,7 +8958,7 @@ glabel object_interaction /* 07A5F8 7F045AC8 46068200 */ add.s $f8, $f16, $f6 /* 07A5FC 7F045ACC 46004107 */ neg.s $f4, $f8 /* 07A600 7F045AD0 46047382 */ mul.s $f14, $f14, $f4 -/* 07A604 7F045AD4 00000000 */ nop +/* 07A604 7F045AD4 00000000 */ nop /* 07A608 7F045AD8 460A7182 */ mul.s $f6, $f14, $f10 /* 07A60C 7F045ADC 46061200 */ add.s $f8, $f2, $f6 /* 07A610 7F045AE0 E6080004 */ swc1 $f8, 4($s0) @@ -8995,7 +8986,7 @@ glabel object_interaction /* 07A660 7F045B30 8CA50B0C */ lw $a1, %lo(D_80030B0C)($a1) /* 07A664 7F045B34 0FC19107 */ jal recall_joy2_hits_edit_detail_edit_flag /* 07A668 7F045B38 82240080 */ lb $a0, 0x80($s1) -/* 07A66C 7F045B3C 3C188003 */ lui $t8, %hi(D_80030B0C) +/* 07A66C 7F045B3C 3C188003 */ lui $t8, %hi(D_80030B0C) /* 07A670 7F045B40 8F180B0C */ lw $t8, %lo(D_80030B0C)($t8) /* 07A674 7F045B44 3C028003 */ lui $v0, %hi(bodypartshot) /* 07A678 7F045B48 93080001 */ lbu $t0, 1($t8) @@ -9147,7 +9138,7 @@ glabel object_interaction /* 07A8AC 7F045D7C C610008C */ lwc1 $f16, 0x8c($s0) /* 07A8B0 7F045D80 C7A40620 */ lwc1 $f4, 0x620($sp) /* 07A8B4 7F045D84 4610B03C */ c.lt.s $f22, $f16 -/* 07A8B8 7F045D88 00000000 */ nop +/* 07A8B8 7F045D88 00000000 */ nop /* 07A8BC 7F045D8C 4502002B */ bc1fl .L7F045E3C /* 07A8C0 7F045D90 8E0F0000 */ lw $t7, ($s0) /* 07A8C4 7F045D94 C6020004 */ lwc1 $f2, 4($s0) @@ -9166,7 +9157,7 @@ glabel object_interaction /* 07A8F8 7F045DC8 46088280 */ add.s $f10, $f16, $f8 /* 07A8FC 7F045DCC 46005187 */ neg.s $f6, $f10 /* 07A900 7F045DD0 46067382 */ mul.s $f14, $f14, $f6 -/* 07A904 7F045DD4 00000000 */ nop +/* 07A904 7F045DD4 00000000 */ nop /* 07A908 7F045DD8 46047202 */ mul.s $f8, $f14, $f4 /* 07A90C 7F045DDC 46081280 */ add.s $f10, $f2, $f8 /* 07A910 7F045DE0 E60A0004 */ swc1 $f10, 4($s0) @@ -9182,12 +9173,12 @@ glabel object_interaction /* 07A938 7F045E08 C6080008 */ lwc1 $f8, 8($s0) /* 07A93C 7F045E0C 240D0001 */ li $t5, 1 /* 07A940 7F045E10 4608B03E */ c.le.s $f22, $f8 -/* 07A944 7F045E14 00000000 */ nop +/* 07A944 7F045E14 00000000 */ nop /* 07A948 7F045E18 45030007 */ bc1tl .L7F045E38 /* 07A94C 7F045E1C AFAD060C */ sw $t5, 0x60c($sp) /* 07A950 7F045E20 C62A005C */ lwc1 $f10, 0x5c($s1) /* 07A954 7F045E24 460AA03E */ c.le.s $f20, $f10 -/* 07A958 7F045E28 00000000 */ nop +/* 07A958 7F045E28 00000000 */ nop /* 07A95C 7F045E2C 45020003 */ bc1fl .L7F045E3C /* 07A960 7F045E30 8E0F0000 */ lw $t7, ($s0) /* 07A964 7F045E34 AFAD060C */ sw $t5, 0x60c($sp) @@ -9197,7 +9188,7 @@ glabel object_interaction /* 07A96C 7F045E3C C7B4063C */ lwc1 $f20, 0x63c($sp) /* 07A970 7F045E40 31F80008 */ andi $t8, $t7, 8 /* 07A974 7F045E44 17000014 */ bnez $t8, .L7F045E98 -/* 07A978 7F045E48 00000000 */ nop +/* 07A978 7F045E48 00000000 */ nop /* 07A97C 7F045E4C 8E640014 */ lw $a0, 0x14($s3) /* 07A980 7F045E50 8E650008 */ lw $a1, 8($s3) /* 07A984 7F045E54 0FC2CA5C */ jal stanGetPositionYValue @@ -9211,9 +9202,9 @@ glabel object_interaction /* 07A9A4 7F045E74 C666000C */ lwc1 $f6, 0xc($s3) /* 07A9A8 7F045E78 00004025 */ move $t0, $zero /* 07A9AC 7F045E7C 4604303C */ c.lt.s $f6, $f4 -/* 07A9B0 7F045E80 00000000 */ nop +/* 07A9B0 7F045E80 00000000 */ nop /* 07A9B4 7F045E84 45000002 */ bc1f .L7F045E90 -/* 07A9B8 7F045E88 00000000 */ nop +/* 07A9B8 7F045E88 00000000 */ nop /* 07A9BC 7F045E8C 24080001 */ li $t0, 1 .L7F045E90: /* 07A9C0 7F045E90 10000001 */ b .L7F045E98 @@ -9241,7 +9232,7 @@ glabel object_interaction /* 07AA08 7F045ED8 8FAF060C */ lw $t7, 0x60c($sp) /* 07AA0C 7F045EDC 8FB80610 */ lw $t8, 0x610($sp) /* 07AA10 7F045EE0 15A00003 */ bnez $t5, .L7F045EF0 -/* 07AA14 7F045EE4 00000000 */ nop +/* 07AA14 7F045EE4 00000000 */ nop /* 07AA18 7F045EE8 51E0003A */ beql $t7, $zero, .L7F045FD4 /* 07AA1C 7F045EEC 922C0003 */ lbu $t4, 3($s1) .L7F045EF0: @@ -9273,9 +9264,9 @@ glabel object_interaction .L7F045F4C: /* 07AA7C 7F045F4C C610008C */ lwc1 $f16, 0x8c($s0) /* 07AA80 7F045F50 4610B03C */ c.lt.s $f22, $f16 -/* 07AA84 7F045F54 00000000 */ nop +/* 07AA84 7F045F54 00000000 */ nop /* 07AA88 7F045F58 4500001B */ bc1f .L7F045FC8 -/* 07AA8C 7F045F5C 00000000 */ nop +/* 07AA8C 7F045F5C 00000000 */ nop /* 07AA90 7F045F60 C6040008 */ lwc1 $f4, 8($s0) /* 07AA94 7F045F64 46008207 */ neg.s $f8, $f16 /* 07AA98 7F045F68 3C018005 */ lui $at, %hi(D_80052AA8) @@ -9284,18 +9275,18 @@ glabel object_interaction /* 07AAA4 7F045F74 E60A0008 */ swc1 $f10, 8($s0) /* 07AAA8 7F045F78 C6060008 */ lwc1 $f6, 8($s0) /* 07AAAC 7F045F7C 4600303C */ c.lt.s $f6, $f0 -/* 07AAB0 7F045F80 00000000 */ nop +/* 07AAB0 7F045F80 00000000 */ nop /* 07AAB4 7F045F84 45020013 */ bc1fl .L7F045FD4 /* 07AAB8 7F045F88 922C0003 */ lbu $t4, 3($s1) /* 07AABC 7F045F8C 8E0B0000 */ lw $t3, ($s0) /* 07AAC0 7F045F90 02202025 */ move $a0, $s1 /* 07AAC4 7F045F94 31790002 */ andi $t9, $t3, 2 /* 07AAC8 7F045F98 13200007 */ beqz $t9, .L7F045FB8 -/* 07AACC 7F045F9C 00000000 */ nop +/* 07AACC 7F045F9C 00000000 */ nop /* 07AAD0 7F045FA0 8E0A0090 */ lw $t2, 0x90($s0) /* 07AAD4 7F045FA4 24010001 */ li $at, 1 /* 07AAD8 7F045FA8 15410003 */ bne $t2, $at, .L7F045FB8 -/* 07AADC 7F045FAC 00000000 */ nop +/* 07AADC 7F045FAC 00000000 */ nop /* 07AAE0 7F045FB0 10000007 */ b .L7F045FD0 /* 07AAE4 7F045FB4 E6000008 */ swc1 $f0, 8($s0) .L7F045FB8: @@ -9345,7 +9336,7 @@ glabel object_interaction /* 07AB7C 7F04604C C4242AAC */ lwc1 $f4, %lo(D_80052AAC)($at) /* 07AB80 7F046050 460A3380 */ add.s $f14, $f6, $f10 /* 07AB84 7F046054 460E203C */ c.lt.s $f4, $f14 -/* 07AB88 7F046058 00000000 */ nop +/* 07AB88 7F046058 00000000 */ nop /* 07AB8C 7F04605C 45020005 */ bc1fl .L7F046074 /* 07AB90 7F046060 8E0F00A8 */ lw $t7, 0xa8($s0) /* 07AB94 7F046064 E6160010 */ swc1 $f22, 0x10($s0) @@ -9368,7 +9359,7 @@ glabel object_interaction /* 07ABD0 7F0460A0 2667002C */ addiu $a3, $s3, 0x2c /* 07ABD4 7F0460A4 312B0008 */ andi $t3, $t1, 8 /* 07ABD8 7F0460A8 000BC82B */ sltu $t9, $zero, $t3 -/* 07ABDC 7F0460AC 0FC279C0 */ jal sub_GAME_7F09E700 +/* 07ABDC 7F0460AC 0FC279C0 */ jal explosionCreateSmoke /* 07ABE0 7F0460B0 AFB90010 */ sw $t9, 0x10($sp) /* 07ABE4 7F0460B4 10000013 */ b .L7F046104 /* 07ABE8 7F0460B8 8FB80664 */ lw $t8, 0x664($sp) @@ -9390,7 +9381,7 @@ glabel object_interaction /* 07AC1C 7F0460EC 31CD0008 */ andi $t5, $t6, 8 /* 07AC20 7F0460F0 000D782B */ sltu $t7, $zero, $t5 /* 07AC24 7F0460F4 AFAF0010 */ sw $t7, 0x10($sp) -/* 07AC28 7F0460F8 0FC279C0 */ jal sub_GAME_7F09E700 +/* 07AC28 7F0460F8 0FC279C0 */ jal explosionCreateSmoke /* 07AC2C 7F0460FC 2667002C */ addiu $a3, $s3, 0x2c .L7F046100: /* 07AC30 7F046100 8FB80664 */ lw $t8, 0x664($sp) @@ -9497,7 +9488,7 @@ glabel object_interaction /* 07ADA0 7F046270 2406000A */ li $a2, 10 /* 07ADA4 7F046274 8C450014 */ lw $a1, 0x14($v0) /* 07ADA8 7F046278 AFB90010 */ sw $t9, 0x10($sp) -/* 07ADAC 7F04627C 0FC279C0 */ jal sub_GAME_7F09E700 +/* 07ADAC 7F04627C 0FC279C0 */ jal explosionCreateSmoke /* 07ADB0 7F046280 2447002C */ addiu $a3, $v0, 0x2c /* 07ADB4 7F046284 100000E5 */ b .L7F04661C /* 07ADB8 7F046288 8FAD0690 */ lw $t5, 0x690($sp) @@ -9513,7 +9504,7 @@ glabel object_interaction /* 07ADDC 7F0462AC C60A0004 */ lwc1 $f10, 4($s0) /* 07ADE0 7F0462B0 C6020064 */ lwc1 $f2, 0x64($s0) /* 07ADE4 7F0462B4 C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) -/* 07ADE8 7F0462B8 3C0A8005 */ lui $t2, %hi(g_ClockTimer) +/* 07ADE8 7F0462B8 3C0A8005 */ lui $t2, %hi(g_ClockTimer) /* 07ADEC 7F0462BC 3C018005 */ lui $at, %hi(D_80052AB0) /* 07ADF0 7F0462C0 46041202 */ mul.s $f8, $f2, $f4 /* 07ADF4 7F0462C4 27B20550 */ addiu $s2, $sp, 0x550 @@ -9531,7 +9522,7 @@ glabel object_interaction /* 07AE20 7F0462F0 C6000060 */ lwc1 $f0, 0x60($s0) /* 07AE24 7F0462F4 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 07AE28 7F0462F8 4600403C */ c.lt.s $f8, $f0 -/* 07AE2C 7F0462FC 00000000 */ nop +/* 07AE2C 7F0462FC 00000000 */ nop /* 07AE30 7F046300 45030006 */ bc1tl .L7F04631C /* 07AE34 7F046304 44813000 */ mtc1 $at, $f6 /* 07AE38 7F046308 8E0C0000 */ lw $t4, ($s0) @@ -9540,7 +9531,7 @@ glabel object_interaction /* 07AE44 7F046314 44060000 */ mfc1 $a2, $f0 /* 07AE48 7F046318 44813000 */ mtc1 $at, $f6 .L7F04631C: -/* 07AE4C 7F04631C 00000000 */ nop +/* 07AE4C 7F04631C 00000000 */ nop /* 07AE50 7F046320 E6060060 */ swc1 $f6, 0x60($s0) /* 07AE54 7F046324 C6000060 */ lwc1 $f0, 0x60($s0) /* 07AE58 7F046328 44060000 */ mfc1 $a2, $f0 @@ -9564,29 +9555,29 @@ glabel object_interaction /* 07AE9C 7F04636C C60A0004 */ lwc1 $f10, 4($s0) .L7F046370: /* 07AEA0 7F046370 460AB032 */ c.eq.s $f22, $f10 -/* 07AEA4 7F046374 00000000 */ nop +/* 07AEA4 7F046374 00000000 */ nop /* 07AEA8 7F046378 4502000F */ bc1fl .L7F0463B8 /* 07AEAC 7F04637C 8E0D0000 */ lw $t5, ($s0) /* 07AEB0 7F046380 C604000C */ lwc1 $f4, 0xc($s0) /* 07AEB4 7F046384 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 07AEB8 7F046388 4604B032 */ c.eq.s $f22, $f4 -/* 07AEBC 7F04638C 00000000 */ nop +/* 07AEBC 7F04638C 00000000 */ nop /* 07AEC0 7F046390 45020009 */ bc1fl .L7F0463B8 /* 07AEC4 7F046394 8E0D0000 */ lw $t5, ($s0) /* 07AEC8 7F046398 C6080060 */ lwc1 $f8, 0x60($s0) /* 07AECC 7F04639C 44813000 */ mtc1 $at, $f6 -/* 07AED0 7F0463A0 00000000 */ nop +/* 07AED0 7F0463A0 00000000 */ nop /* 07AED4 7F0463A4 4606403C */ c.lt.s $f8, $f6 -/* 07AED8 7F0463A8 00000000 */ nop +/* 07AED8 7F0463A8 00000000 */ nop /* 07AEDC 7F0463AC 45000088 */ bc1f .L7F0465D0 -/* 07AEE0 7F0463B0 00000000 */ nop +/* 07AEE0 7F0463B0 00000000 */ nop /* 07AEE4 7F0463B4 8E0D0000 */ lw $t5, ($s0) .L7F0463B8: /* 07AEE8 7F0463B8 02202025 */ move $a0, $s1 /* 07AEEC 7F0463BC 26380018 */ addiu $t8, $s1, 0x18 /* 07AEF0 7F0463C0 31AF0008 */ andi $t7, $t5, 8 /* 07AEF4 7F0463C4 15E00082 */ bnez $t7, .L7F0465D0 -/* 07AEF8 7F0463C8 00000000 */ nop +/* 07AEF8 7F0463C8 00000000 */ nop /* 07AEFC 7F0463CC AFB80070 */ sw $t8, 0x70($sp) /* 07AF00 7F0463D0 0FC1001E */ jal chrobjGetBboxFromObjectRecord /* 07AF04 7F0463D4 00009025 */ move $s2, $zero @@ -9610,19 +9601,19 @@ glabel object_interaction /* 07AF48 7F046418 E7A4069C */ swc1 $f4, 0x69c($sp) /* 07AF4C 7F04641C C6080060 */ lwc1 $f8, 0x60($s0) /* 07AF50 7F046420 4608303E */ c.le.s $f6, $f8 -/* 07AF54 7F046424 00000000 */ nop +/* 07AF54 7F046424 00000000 */ nop /* 07AF58 7F046428 45020035 */ bc1fl .L7F046500 /* 07AF5C 7F04642C 24840001 */ addiu $a0, $a0, 1 /* 07AF60 7F046430 C60A0094 */ lwc1 $f10, 0x94($s0) /* 07AF64 7F046434 460AB03C */ c.lt.s $f22, $f10 -/* 07AF68 7F046438 00000000 */ nop +/* 07AF68 7F046438 00000000 */ nop /* 07AF6C 7F04643C 45020027 */ bc1fl .L7F0464DC /* 07AF70 7F046440 C6060004 */ lwc1 $f6, 4($s0) /* 07AF74 7F046444 C600000C */ lwc1 $f0, 0xc($s0) /* 07AF78 7F046448 C6020004 */ lwc1 $f2, 4($s0) /* 07AF7C 7F04644C AFA40548 */ sw $a0, 0x548($sp) /* 07AF80 7F046450 46000102 */ mul.s $f4, $f0, $f0 -/* 07AF84 7F046454 00000000 */ nop +/* 07AF84 7F046454 00000000 */ nop /* 07AF88 7F046458 46021202 */ mul.s $f8, $f2, $f2 /* 07AF8C 7F04645C 0C007DF8 */ jal sqrtf /* 07AF90 7F046460 46082300 */ add.s $f12, $f4, $f8 @@ -9638,7 +9629,7 @@ glabel object_interaction /* 07AFB8 7F046488 3C038005 */ lui $v1, %hi(g_ClockTimer) /* 07AFBC 7F04648C 46002303 */ div.s $f12, $f4, $f0 /* 07AFC0 7F046490 460C403E */ c.le.s $f8, $f12 -/* 07AFC4 7F046494 00000000 */ nop +/* 07AFC4 7F046494 00000000 */ nop /* 07AFC8 7F046498 45020005 */ bc1fl .L7F0464B0 /* 07AFCC 7F04649C C6020004 */ lwc1 $f2, 4($s0) /* 07AFD0 7F0464A0 E6160004 */ swc1 $f22, 4($s0) @@ -9648,7 +9639,7 @@ glabel object_interaction .L7F0464B0: /* 07AFE0 7F0464B0 C600000C */ lwc1 $f0, 0xc($s0) /* 07AFE4 7F0464B4 460C1182 */ mul.s $f6, $f2, $f12 -/* 07AFE8 7F0464B8 00000000 */ nop +/* 07AFE8 7F0464B8 00000000 */ nop /* 07AFEC 7F0464BC 460C0102 */ mul.s $f4, $f0, $f12 /* 07AFF0 7F0464C0 46061281 */ sub.s $f10, $f2, $f6 /* 07AFF4 7F0464C4 46040201 */ sub.s $f8, $f0, $f4 @@ -9662,7 +9653,7 @@ glabel object_interaction /* 07B00C 7F0464DC C604000C */ lwc1 $f4, 0xc($s0) /* 07B010 7F0464E0 3C038005 */ lui $v1, %hi(g_ClockTimer) /* 07B014 7F0464E4 460E3282 */ mul.s $f10, $f6, $f14 -/* 07B018 7F0464E8 00000000 */ nop +/* 07B018 7F0464E8 00000000 */ nop /* 07B01C 7F0464EC 460E2202 */ mul.s $f8, $f4, $f14 /* 07B020 7F0464F0 E60A0004 */ swc1 $f10, 4($s0) /* 07B024 7F0464F4 E608000C */ swc1 $f8, 0xc($s0) @@ -9702,30 +9693,30 @@ glabel object_interaction /* 07B0A0 7F046570 E62C005C */ swc1 $f12, 0x5c($s1) /* 07B0A4 7F046574 C6020004 */ lwc1 $f2, 4($s0) /* 07B0A8 7F046578 460E103C */ c.lt.s $f2, $f14 -/* 07B0AC 7F04657C 00000000 */ nop +/* 07B0AC 7F04657C 00000000 */ nop /* 07B0B0 7F046580 45000013 */ bc1f .L7F0465D0 -/* 07B0B4 7F046584 00000000 */ nop +/* 07B0B4 7F046584 00000000 */ nop /* 07B0B8 7F046588 C4242AC0 */ lwc1 $f4, %lo(D_80052AC0)($at) /* 07B0BC 7F04658C 4602203C */ c.lt.s $f4, $f2 -/* 07B0C0 7F046590 00000000 */ nop +/* 07B0C0 7F046590 00000000 */ nop /* 07B0C4 7F046594 4500000E */ bc1f .L7F0465D0 -/* 07B0C8 7F046598 00000000 */ nop +/* 07B0C8 7F046598 00000000 */ nop /* 07B0CC 7F04659C C600000C */ lwc1 $f0, 0xc($s0) /* 07B0D0 7F0465A0 3C018005 */ lui $at, %hi(D_80052AC4) /* 07B0D4 7F0465A4 460E003C */ c.lt.s $f0, $f14 -/* 07B0D8 7F0465A8 00000000 */ nop +/* 07B0D8 7F0465A8 00000000 */ nop /* 07B0DC 7F0465AC 45000008 */ bc1f .L7F0465D0 -/* 07B0E0 7F0465B0 00000000 */ nop +/* 07B0E0 7F0465B0 00000000 */ nop /* 07B0E4 7F0465B4 C4282AC4 */ lwc1 $f8, %lo(D_80052AC4)($at) /* 07B0E8 7F0465B8 4600403C */ c.lt.s $f8, $f0 -/* 07B0EC 7F0465BC 00000000 */ nop +/* 07B0EC 7F0465BC 00000000 */ nop /* 07B0F0 7F0465C0 45000003 */ bc1f .L7F0465D0 -/* 07B0F4 7F0465C4 00000000 */ nop +/* 07B0F4 7F0465C4 00000000 */ nop /* 07B0F8 7F0465C8 E616000C */ swc1 $f22, 0xc($s0) /* 07B0FC 7F0465CC E6160004 */ swc1 $f22, 4($s0) .L7F0465D0: /* 07B100 7F0465D0 16400005 */ bnez $s2, .L7F0465E8 -/* 07B104 7F0465D4 00000000 */ nop +/* 07B104 7F0465D4 00000000 */ nop /* 07B108 7F0465D8 8E090000 */ lw $t1, ($s0) /* 07B10C 7F0465DC 312B0008 */ andi $t3, $t1, 8 /* 07B110 7F0465E0 5160000E */ beql $t3, $zero, .L7F04661C @@ -9764,7 +9755,7 @@ glabel object_interaction /* 07B184 7F046654 54410052 */ bnel $v0, $at, .L7F0467A0 /* 07B188 7F046658 24010006 */ li $at, 6 /* 07B18C 7F04665C 8E700004 */ lw $s0, 4($s3) -/* 07B190 7F046660 3C188005 */ lui $t8, %hi(g_GlobalTimer) +/* 07B190 7F046660 3C188005 */ lui $t8, %hi(g_GlobalTimer) /* 07B194 7F046664 C60600B4 */ lwc1 $f6, 0xb4($s0) /* 07B198 7F046668 E7A6067C */ swc1 $f6, 0x67c($sp) /* 07B19C 7F04666C 8E0200EC */ lw $v0, 0xec($s0) @@ -9795,16 +9786,16 @@ glabel object_interaction /* 07B1FC 7F0466CC 24030001 */ li $v1, 1 /* 07B200 7F0466D0 02002025 */ move $a0, $s0 /* 07B204 7F0466D4 10400011 */ beqz $v0, .L7F04671C -/* 07B208 7F0466D8 00000000 */ nop +/* 07B208 7F0466D8 00000000 */ nop /* 07B20C 7F0466DC 1050000F */ beq $v0, $s0, .L7F04671C -/* 07B210 7F0466E0 00000000 */ nop +/* 07B210 7F0466E0 00000000 */ nop /* 07B214 7F0466E4 804E00BC */ lb $t6, 0xbc($v0) .L7F0466E8: /* 07B218 7F0466E8 55C00007 */ bnezl $t6, .L7F046708 /* 07B21C 7F0466EC 00001825 */ move $v1, $zero /* 07B220 7F0466F0 C44A00B4 */ lwc1 $f10, 0xb4($v0) /* 07B224 7F0466F4 460AB03C */ c.lt.s $f22, $f10 -/* 07B228 7F0466F8 00000000 */ nop +/* 07B228 7F0466F8 00000000 */ nop /* 07B22C 7F0466FC 45020003 */ bc1fl .L7F04670C /* 07B230 7F046700 8C4200C8 */ lw $v0, 0xc8($v0) /* 07B234 7F046704 00001825 */ move $v1, $zero @@ -9812,7 +9803,7 @@ glabel object_interaction /* 07B238 7F046708 8C4200C8 */ lw $v0, 0xc8($v0) .L7F04670C: /* 07B23C 7F04670C 10400003 */ beqz $v0, .L7F04671C -/* 07B240 7F046710 00000000 */ nop +/* 07B240 7F046710 00000000 */ nop /* 07B244 7F046714 5450FFF4 */ bnel $v0, $s0, .L7F0466E8 /* 07B248 7F046718 804E00BC */ lb $t6, 0xbc($v0) .L7F04671C: @@ -9824,30 +9815,30 @@ glabel object_interaction .L7F046730: /* 07B260 7F046730 24010008 */ li $at, 8 /* 07B264 7F046734 15A1000B */ bne $t5, $at, .L7F046764 -/* 07B268 7F046738 00000000 */ nop +/* 07B268 7F046738 00000000 */ nop /* 07B26C 7F04673C 0FC15288 */ jal doorIsClosed /* 07B270 7F046740 02002025 */ move $a0, $s0 /* 07B274 7F046744 10400007 */ beqz $v0, .L7F046764 -/* 07B278 7F046748 00000000 */ nop +/* 07B278 7F046748 00000000 */ nop /* 07B27C 7F04674C 0FC0F9C6 */ jal doorIsPadlockFree /* 07B280 7F046750 02002025 */ move $a0, $s0 /* 07B284 7F046754 10400003 */ beqz $v0, .L7F046764 -/* 07B288 7F046758 00000000 */ nop +/* 07B288 7F046758 00000000 */ nop /* 07B28C 7F04675C 0FC15667 */ jal doorActivateWrapper /* 07B290 7F046760 02602025 */ move $a0, $s3 .L7F046764: -/* 07B294 7F046764 3C188005 */ lui $t8, %hi(g_GlobalTimer) +/* 07B294 7F046764 3C188005 */ lui $t8, %hi(g_GlobalTimer) /* 07B298 7F046768 8F18837C */ lw $t8, %lo(g_GlobalTimer)($t8) /* 07B29C 7F04676C 8E0F00FC */ lw $t7, 0xfc($s0) -/* 07B2A0 7F046770 3C088005 */ lui $t0, %hi(g_ClockTimer) +/* 07B2A0 7F046770 3C088005 */ lui $t0, %hi(g_ClockTimer) /* 07B2A4 7F046774 01F8082A */ slt $at, $t7, $t8 /* 07B2A8 7F046778 14200004 */ bnez $at, .L7F04678C -/* 07B2AC 7F04677C 00000000 */ nop +/* 07B2AC 7F04677C 00000000 */ nop /* 07B2B0 7F046780 8D088374 */ lw $t0, %lo(g_ClockTimer)($t0) /* 07B2B4 7F046784 550006AA */ bnezl $t0, .L7F048230 /* 07B2B8 7F046788 92220003 */ lbu $v0, 3($s1) .L7F04678C: -/* 07B2BC 7F04678C 0FC153ED */ jal sub_GAME_7F054FB4 +/* 07B2BC 7F04678C 0FC153ED */ jal door7F054FB4 /* 07B2C0 7F046790 02002025 */ move $a0, $s0 /* 07B2C4 7F046794 100006A6 */ b .L7F048230 /* 07B2C8 7F046798 92220003 */ lbu $v0, 3($s1) @@ -9885,36 +9876,36 @@ glabel object_interaction /* 07B340 7F046810 4500000E */ bc1f .L7F04684C /* 07B344 7F046814 46082381 */ sub.s $f14, $f4, $f8 /* 07B348 7F046818 46000182 */ mul.s $f6, $f0, $f0 -/* 07B34C 7F04681C 00000000 */ nop +/* 07B34C 7F04681C 00000000 */ nop /* 07B350 7F046820 460C6282 */ mul.s $f10, $f12, $f12 -/* 07B354 7F046824 00000000 */ nop +/* 07B354 7F046824 00000000 */ nop /* 07B358 7F046828 46021102 */ mul.s $f4, $f2, $f2 /* 07B35C 7F04682C 46045200 */ add.s $f8, $f10, $f4 /* 07B360 7F046830 460E7282 */ mul.s $f10, $f14, $f14 /* 07B364 7F046834 460A4100 */ add.s $f4, $f8, $f10 /* 07B368 7F046838 4604303C */ c.lt.s $f6, $f4 -/* 07B36C 7F04683C 00000000 */ nop +/* 07B36C 7F04683C 00000000 */ nop /* 07B370 7F046840 45000002 */ bc1f .L7F04684C -/* 07B374 7F046844 00000000 */ nop +/* 07B374 7F046844 00000000 */ nop /* 07B378 7F046848 00009025 */ move $s2, $zero .L7F04684C: /* 07B37C 7F04684C 8E2A0008 */ lw $t2, 8($s1) /* 07B380 7F046850 000A6080 */ sll $t4, $t2, 2 /* 07B384 7F046854 05810002 */ bgez $t4, .L7F046860 -/* 07B388 7F046858 00000000 */ nop +/* 07B388 7F046858 00000000 */ nop /* 07B38C 7F04685C 00009025 */ move $s2, $zero .L7F046860: /* 07B390 7F046860 1240003A */ beqz $s2, .L7F04694C -/* 07B394 7F046864 00000000 */ nop +/* 07B394 7F046864 00000000 */ nop /* 07B398 7F046868 0FC16A8C */ jal atan2f /* 07B39C 7F04686C E7B20518 */ swc1 $f18, 0x518($sp) /* 07B3A0 7F046870 C60200C8 */ lwc1 $f2, 0xc8($s0) /* 07B3A4 7F046874 C7B20518 */ lwc1 $f18, 0x518($sp) /* 07B3A8 7F046878 3C018005 */ lui $at, %hi(D_80052ACC) /* 07B3AC 7F04687C 4616103C */ c.lt.s $f2, $f22 -/* 07B3B0 7F046880 00000000 */ nop +/* 07B3B0 7F046880 00000000 */ nop /* 07B3B4 7F046884 45000005 */ bc1f .L7F04689C -/* 07B3B8 7F046888 00000000 */ nop +/* 07B3B8 7F046888 00000000 */ nop /* 07B3BC 7F04688C 3C018005 */ lui $at, %hi(D_80052AC8) /* 07B3C0 7F046890 C4342AC8 */ lwc1 $f20, %lo(D_80052AC8)($at) /* 07B3C4 7F046894 10000007 */ b .L7F0468B4 @@ -9922,7 +9913,7 @@ glabel object_interaction .L7F04689C: /* 07B3CC 7F04689C C4342ACC */ lwc1 $f20, %lo(D_80052ACC)($at) /* 07B3D0 7F0468A0 4602A03E */ c.le.s $f20, $f2 -/* 07B3D4 7F0468A4 00000000 */ nop +/* 07B3D4 7F0468A4 00000000 */ nop /* 07B3D8 7F0468A8 45020003 */ bc1fl .L7F0468B8 /* 07B3DC 7F0468AC C60800C4 */ lwc1 $f8, 0xc4($s0) /* 07B3E0 7F0468B0 46141081 */ sub.s $f2, $f2, $f20 @@ -9932,7 +9923,7 @@ glabel object_interaction /* 07B3E8 7F0468B8 3C018005 */ lui $at, %hi(D_80052AD0) /* 07B3EC 7F0468BC 46081080 */ add.s $f2, $f2, $f8 /* 07B3F0 7F0468C0 4602A03E */ c.le.s $f20, $f2 -/* 07B3F4 7F0468C4 00000000 */ nop +/* 07B3F4 7F0468C4 00000000 */ nop /* 07B3F8 7F0468C8 45020003 */ bc1fl .L7F0468D8 /* 07B3FC 7F0468CC 4602003C */ c.lt.s $f0, $f2 /* 07B400 7F0468D0 46141081 */ sub.s $f2, $f2, $f20 @@ -9947,28 +9938,28 @@ glabel object_interaction /* 07B41C 7F0468EC 3C018005 */ lui $at, %hi(D_80052AD4) /* 07B420 7F0468F0 46006301 */ sub.s $f12, $f12, $f0 /* 07B424 7F0468F4 4616603C */ c.lt.s $f12, $f22 -/* 07B428 7F0468F8 00000000 */ nop +/* 07B428 7F0468F8 00000000 */ nop /* 07B42C 7F0468FC 45020003 */ bc1fl .L7F04690C /* 07B430 7F046900 460C003C */ c.lt.s $f0, $f12 /* 07B434 7F046904 46146300 */ add.s $f12, $f12, $f20 /* 07B438 7F046908 460C003C */ c.lt.s $f0, $f12 .L7F04690C: -/* 07B43C 7F04690C 00000000 */ nop +/* 07B43C 7F04690C 00000000 */ nop /* 07B440 7F046910 45000002 */ bc1f .L7F04691C -/* 07B444 7F046914 00000000 */ nop +/* 07B444 7F046914 00000000 */ nop /* 07B448 7F046918 46146301 */ sub.s $f12, $f12, $f20 .L7F04691C: /* 07B44C 7F04691C C42A2AD4 */ lwc1 $f10, %lo(D_80052AD4)($at) /* 07B450 7F046920 3C018005 */ lui $at, %hi(D_80052AD8) /* 07B454 7F046924 460C503C */ c.lt.s $f10, $f12 -/* 07B458 7F046928 00000000 */ nop +/* 07B458 7F046928 00000000 */ nop /* 07B45C 7F04692C 45030007 */ bc1tl .L7F04694C /* 07B460 7F046930 00009025 */ move $s2, $zero /* 07B464 7F046934 C4262AD8 */ lwc1 $f6, %lo(D_80052AD8)($at) /* 07B468 7F046938 4606603C */ c.lt.s $f12, $f6 -/* 07B46C 7F04693C 00000000 */ nop +/* 07B46C 7F04693C 00000000 */ nop /* 07B470 7F046940 45000002 */ bc1f .L7F04694C -/* 07B474 7F046944 00000000 */ nop +/* 07B474 7F046944 00000000 */ nop /* 07B478 7F046948 00009025 */ move $s2, $zero .L7F04694C: /* 07B47C 7F04694C 12400034 */ beqz $s2, .L7F046A20 @@ -9999,7 +9990,7 @@ glabel object_interaction /* 07B4E0 7F0469B0 E7A60024 */ swc1 $f6, 0x24($sp) /* 07B4E4 7F0469B4 10400015 */ beqz $v0, .L7F046A0C /* 07B4E8 7F0469B8 C7B20518 */ lwc1 $f18, 0x518($sp) -/* 07B4EC 7F0469BC 3C188005 */ lui $t8, %hi(g_ClockTimer) +/* 07B4EC 7F0469BC 3C188005 */ lui $t8, %hi(g_ClockTimer) /* 07B4F0 7F0469C0 8F188374 */ lw $t8, %lo(g_ClockTimer)($t8) /* 07B4F4 7F0469C4 8E0F00E0 */ lw $t7, 0xe0($s0) /* 07B4F8 7F0469C8 3C014396 */ li $at, 0x43960000 # 300.000000 @@ -10011,7 +10002,7 @@ glabel object_interaction /* 07B510 7F0469E0 46082282 */ mul.s $f10, $f4, $f8 /* 07B514 7F0469E4 4600518D */ trunc.w.s $f6, $f10 /* 07B518 7F0469E8 44193000 */ mfc1 $t9, $f6 -/* 07B51C 7F0469EC 00000000 */ nop +/* 07B51C 7F0469EC 00000000 */ nop /* 07B520 7F0469F0 0119082A */ slt $at, $t0, $t9 /* 07B524 7F0469F4 54200006 */ bnezl $at, .L7F046A10 /* 07B528 7F0469F8 8FA40514 */ lw $a0, 0x514($sp) @@ -10029,7 +10020,7 @@ glabel object_interaction .L7F046A20: /* 07B550 7F046A20 C60E00C8 */ lwc1 $f14, 0xc8($s0) /* 07B554 7F046A24 4612703C */ c.lt.s $f14, $f18 -/* 07B558 7F046A28 00000000 */ nop +/* 07B558 7F046A28 00000000 */ nop /* 07B55C 7F046A2C 45020047 */ bc1fl .L7F046B4C /* 07B560 7F046A30 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07B564 7F046A34 C60000D8 */ lwc1 $f0, 0xd8($s0) @@ -10043,7 +10034,7 @@ glabel object_interaction /* 07B584 7F046A54 46105083 */ div.s $f2, $f10, $f16 /* 07B588 7F046A58 46029181 */ sub.s $f6, $f18, $f2 /* 07B58C 7F046A5C 460E303E */ c.le.s $f6, $f14 -/* 07B590 7F046A60 00000000 */ nop +/* 07B590 7F046A60 00000000 */ nop /* 07B594 7F046A64 4502000F */ bc1fl .L7F046AA4 /* 07B598 7F046A68 C60C00DC */ lwc1 $f12, 0xdc($s0) /* 07B59C 7F046A6C C4248378 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) @@ -10052,9 +10043,9 @@ glabel object_interaction /* 07B5A8 7F046A78 E60A00D8 */ swc1 $f10, 0xd8($s0) /* 07B5AC 7F046A7C C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07B5B0 7F046A80 4610003C */ c.lt.s $f0, $f16 -/* 07B5B4 7F046A84 00000000 */ nop +/* 07B5B4 7F046A84 00000000 */ nop /* 07B5B8 7F046A88 45000003 */ bc1f .L7F046A98 -/* 07B5BC 7F046A8C 00000000 */ nop +/* 07B5BC 7F046A8C 00000000 */ nop /* 07B5C0 7F046A90 E61000D8 */ swc1 $f16, 0xd8($s0) /* 07B5C4 7F046A94 C60000D8 */ lwc1 $f0, 0xd8($s0) .L7F046A98: @@ -10064,29 +10055,29 @@ glabel object_interaction .L7F046AA4: /* 07B5D4 7F046AA4 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07B5D8 7F046AA8 460C003C */ c.lt.s $f0, $f12 -/* 07B5DC 7F046AAC 00000000 */ nop +/* 07B5DC 7F046AAC 00000000 */ nop /* 07B5E0 7F046AB0 45000017 */ bc1f .L7F046B10 -/* 07B5E4 7F046AB4 00000000 */ nop +/* 07B5E4 7F046AB4 00000000 */ nop /* 07B5E8 7F046AB8 C4268378 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) /* 07B5EC 7F046ABC 46068102 */ mul.s $f4, $f16, $f6 /* 07B5F0 7F046AC0 46040080 */ add.s $f2, $f0, $f4 /* 07B5F4 7F046AC4 4602603C */ c.lt.s $f12, $f2 -/* 07B5F8 7F046AC8 00000000 */ nop +/* 07B5F8 7F046AC8 00000000 */ nop /* 07B5FC 7F046ACC 45000002 */ bc1f .L7F046AD8 -/* 07B600 7F046AD0 00000000 */ nop +/* 07B600 7F046AD0 00000000 */ nop /* 07B604 7F046AD4 46006086 */ mov.s $f2, $f12 .L7F046AD8: /* 07B608 7F046AD8 46021202 */ mul.s $f8, $f2, $f2 /* 07B60C 7F046ADC 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 07B610 7F046AE0 44815000 */ mtc1 $at, $f10 -/* 07B614 7F046AE4 00000000 */ nop +/* 07B614 7F046AE4 00000000 */ nop /* 07B618 7F046AE8 460A4182 */ mul.s $f6, $f8, $f10 /* 07B61C 7F046AEC 46103103 */ div.s $f4, $f6, $f16 /* 07B620 7F046AF0 46049201 */ sub.s $f8, $f18, $f4 /* 07B624 7F046AF4 4608703C */ c.lt.s $f14, $f8 -/* 07B628 7F046AF8 00000000 */ nop +/* 07B628 7F046AF8 00000000 */ nop /* 07B62C 7F046AFC 45000004 */ bc1f .L7F046B10 -/* 07B630 7F046B00 00000000 */ nop +/* 07B630 7F046B00 00000000 */ nop /* 07B634 7F046B04 E60200D8 */ swc1 $f2, 0xd8($s0) /* 07B638 7F046B08 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07B63C 7F046B0C C60E00C8 */ lwc1 $f14, 0xc8($s0) @@ -10098,7 +10089,7 @@ glabel object_interaction /* 07B650 7F046B20 E60400C8 */ swc1 $f4, 0xc8($s0) /* 07B654 7F046B24 C60800C8 */ lwc1 $f8, 0xc8($s0) /* 07B658 7F046B28 4608903E */ c.le.s $f18, $f8 -/* 07B65C 7F046B2C 00000000 */ nop +/* 07B65C 7F046B2C 00000000 */ nop /* 07B660 7F046B30 450205BF */ bc1fl .L7F048230 /* 07B664 7F046B34 92220003 */ lbu $v0, 3($s1) /* 07B668 7F046B38 E61200C8 */ swc1 $f18, 0xc8($s0) @@ -10118,7 +10109,7 @@ glabel object_interaction /* 07B69C 7F046B6C 46102083 */ div.s $f2, $f4, $f16 /* 07B6A0 7F046B70 46029200 */ add.s $f8, $f18, $f2 /* 07B6A4 7F046B74 4608703E */ c.le.s $f14, $f8 -/* 07B6A8 7F046B78 00000000 */ nop +/* 07B6A8 7F046B78 00000000 */ nop /* 07B6AC 7F046B7C 4502000F */ bc1fl .L7F046BBC /* 07B6B0 7F046B80 C60C00DC */ lwc1 $f12, 0xdc($s0) /* 07B6B4 7F046B84 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) @@ -10127,9 +10118,9 @@ glabel object_interaction /* 07B6C0 7F046B90 E60400D8 */ swc1 $f4, 0xd8($s0) /* 07B6C4 7F046B94 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07B6C8 7F046B98 4610003C */ c.lt.s $f0, $f16 -/* 07B6CC 7F046B9C 00000000 */ nop +/* 07B6CC 7F046B9C 00000000 */ nop /* 07B6D0 7F046BA0 45000003 */ bc1f .L7F046BB0 -/* 07B6D4 7F046BA4 00000000 */ nop +/* 07B6D4 7F046BA4 00000000 */ nop /* 07B6D8 7F046BA8 E61000D8 */ swc1 $f16, 0xd8($s0) /* 07B6DC 7F046BAC C60000D8 */ lwc1 $f0, 0xd8($s0) .L7F046BB0: @@ -10139,29 +10130,29 @@ glabel object_interaction .L7F046BBC: /* 07B6EC 7F046BBC 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07B6F0 7F046BC0 460C003C */ c.lt.s $f0, $f12 -/* 07B6F4 7F046BC4 00000000 */ nop +/* 07B6F4 7F046BC4 00000000 */ nop /* 07B6F8 7F046BC8 45000017 */ bc1f .L7F046C28 -/* 07B6FC 7F046BCC 00000000 */ nop +/* 07B6FC 7F046BCC 00000000 */ nop /* 07B700 7F046BD0 C4288378 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) /* 07B704 7F046BD4 46088282 */ mul.s $f10, $f16, $f8 /* 07B708 7F046BD8 460A0080 */ add.s $f2, $f0, $f10 /* 07B70C 7F046BDC 4602603C */ c.lt.s $f12, $f2 -/* 07B710 7F046BE0 00000000 */ nop +/* 07B710 7F046BE0 00000000 */ nop /* 07B714 7F046BE4 45000002 */ bc1f .L7F046BF0 -/* 07B718 7F046BE8 00000000 */ nop +/* 07B718 7F046BE8 00000000 */ nop /* 07B71C 7F046BEC 46006086 */ mov.s $f2, $f12 .L7F046BF0: /* 07B720 7F046BF0 46021182 */ mul.s $f6, $f2, $f2 /* 07B724 7F046BF4 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 07B728 7F046BF8 44812000 */ mtc1 $at, $f4 -/* 07B72C 7F046BFC 00000000 */ nop +/* 07B72C 7F046BFC 00000000 */ nop /* 07B730 7F046C00 46043202 */ mul.s $f8, $f6, $f4 /* 07B734 7F046C04 46104283 */ div.s $f10, $f8, $f16 /* 07B738 7F046C08 460A9180 */ add.s $f6, $f18, $f10 /* 07B73C 7F046C0C 460E303C */ c.lt.s $f6, $f14 -/* 07B740 7F046C10 00000000 */ nop +/* 07B740 7F046C10 00000000 */ nop /* 07B744 7F046C14 45000004 */ bc1f .L7F046C28 -/* 07B748 7F046C18 00000000 */ nop +/* 07B748 7F046C18 00000000 */ nop /* 07B74C 7F046C1C E60200D8 */ swc1 $f2, 0xd8($s0) /* 07B750 7F046C20 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07B754 7F046C24 C60E00C8 */ lwc1 $f14, 0xc8($s0) @@ -10173,7 +10164,7 @@ glabel object_interaction /* 07B768 7F046C38 E60A00C8 */ swc1 $f10, 0xc8($s0) /* 07B76C 7F046C3C C60600C8 */ lwc1 $f6, 0xc8($s0) /* 07B770 7F046C40 4612303E */ c.le.s $f6, $f18 -/* 07B774 7F046C44 00000000 */ nop +/* 07B774 7F046C44 00000000 */ nop /* 07B778 7F046C48 45020579 */ bc1fl .L7F048230 /* 07B77C 7F046C4C 92220003 */ lbu $v0, 3($s1) /* 07B780 7F046C50 E61200C8 */ swc1 $f18, 0xc8($s0) @@ -10210,17 +10201,17 @@ glabel object_interaction .L7F046CC8: /* 07B7F8 7F046CC8 C60A0090 */ lwc1 $f10, 0x90($s0) /* 07B7FC 7F046CCC 460A1032 */ c.eq.s $f2, $f10 -/* 07B800 7F046CD0 00000000 */ nop +/* 07B800 7F046CD0 00000000 */ nop /* 07B804 7F046CD4 45000030 */ bc1f .L7F046D98 -/* 07B808 7F046CD8 00000000 */ nop +/* 07B808 7F046CD8 00000000 */ nop /* 07B80C 7F046CDC C6060098 */ lwc1 $f6, 0x98($s0) /* 07B810 7F046CE0 C604009C */ lwc1 $f4, 0x9c($s0) /* 07B814 7F046CE4 46043032 */ c.eq.s $f6, $f4 -/* 07B818 7F046CE8 00000000 */ nop +/* 07B818 7F046CE8 00000000 */ nop /* 07B81C 7F046CEC 4500002A */ bc1f .L7F046D98 -/* 07B820 7F046CF0 00000000 */ nop +/* 07B820 7F046CF0 00000000 */ nop /* 07B824 7F046CF4 0C002914 */ jal randomGetNext -/* 07B828 7F046CF8 00000000 */ nop +/* 07B828 7F046CF8 00000000 */ nop /* 07B82C 7F046CFC 44824000 */ mtc1 $v0, $f8 /* 07B830 7F046D00 3C018005 */ lui $at, %hi(D_80052AE8) /* 07B834 7F046D04 C4342AE8 */ lwc1 $f20, %lo(D_80052AE8)($at) @@ -10228,7 +10219,7 @@ glabel object_interaction /* 07B83C 7F046D0C 468042A0 */ cvt.s.w $f10, $f8 /* 07B840 7F046D10 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07B844 7F046D14 44813000 */ mtc1 $at, $f6 -/* 07B848 7F046D18 00000000 */ nop +/* 07B848 7F046D18 00000000 */ nop /* 07B84C 7F046D1C 46065280 */ add.s $f10, $f10, $f6 .L7F046D20: /* 07B850 7F046D20 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -10251,14 +10242,14 @@ glabel object_interaction /* 07B894 7F046D64 04410004 */ bgez $v0, .L7F046D78 /* 07B898 7F046D68 468041A0 */ cvt.s.w $f6, $f8 /* 07B89C 7F046D6C 44815000 */ mtc1 $at, $f10 -/* 07B8A0 7F046D70 00000000 */ nop +/* 07B8A0 7F046D70 00000000 */ nop /* 07B8A4 7F046D74 460A3180 */ add.s $f6, $f6, $f10 .L7F046D78: /* 07B8A8 7F046D78 3C012F80 */ li $at, 0x2F800000 # 0.000000 /* 07B8AC 7F046D7C 44812000 */ mtc1 $at, $f4 -/* 07B8B0 7F046D80 00000000 */ nop +/* 07B8B0 7F046D80 00000000 */ nop /* 07B8B4 7F046D84 46043202 */ mul.s $f8, $f6, $f4 -/* 07B8B8 7F046D88 00000000 */ nop +/* 07B8B8 7F046D88 00000000 */ nop /* 07B8BC 7F046D8C 46144282 */ mul.s $f10, $f8, $f20 /* 07B8C0 7F046D90 E60A0084 */ swc1 $f10, 0x84($s0) /* 07B8C4 7F046D94 C6020084 */ lwc1 $f2, 0x84($s0) @@ -10332,7 +10323,7 @@ glabel object_interaction /* 07B9C8 7F046E98 E7A804D4 */ swc1 $f8, 0x4d4($sp) /* 07B9CC 7F046E9C C60A00A8 */ lwc1 $f10, 0xa8($s0) /* 07B9D0 7F046EA0 460A103E */ c.le.s $f2, $f10 -/* 07B9D4 7F046EA4 00000000 */ nop +/* 07B9D4 7F046EA4 00000000 */ nop /* 07B9D8 7F046EA8 45020096 */ bc1fl .L7F047104 /* 07B9DC 7F046EAC 8FAC04AC */ lw $t4, 0x4ac($sp) /* 07B9E0 7F046EB0 C7AC04C4 */ lwc1 $f12, 0x4c4($sp) @@ -10362,9 +10353,9 @@ glabel object_interaction /* 07BA38 7F046F08 3C018005 */ lui $at, %hi(D_80052B04) /* 07BA3C 7F046F0C 46043301 */ sub.s $f12, $f6, $f4 /* 07BA40 7F046F10 4616603C */ c.lt.s $f12, $f22 -/* 07BA44 7F046F14 00000000 */ nop +/* 07BA44 7F046F14 00000000 */ nop /* 07BA48 7F046F18 45000003 */ bc1f .L7F046F28 -/* 07BA4C 7F046F1C 00000000 */ nop +/* 07BA4C 7F046F1C 00000000 */ nop /* 07BA50 7F046F20 C4342B04 */ lwc1 $f20, %lo(D_80052B04)($at) /* 07BA54 7F046F24 46146300 */ add.s $f12, $f12, $f20 .L7F046F28: @@ -10374,7 +10365,7 @@ glabel object_interaction /* 07BA64 7F046F34 C4282B0C */ lwc1 $f8, %lo(D_80052B0C)($at) /* 07BA68 7F046F38 3C018005 */ lui $at, %hi(D_80052B10) /* 07BA6C 7F046F3C 460C403C */ c.lt.s $f8, $f12 -/* 07BA70 7F046F40 00000000 */ nop +/* 07BA70 7F046F40 00000000 */ nop /* 07BA74 7F046F44 45020003 */ bc1fl .L7F046F54 /* 07BA78 7F046F48 C60A009C */ lwc1 $f10, 0x9c($s0) /* 07BA7C 7F046F4C 46146301 */ sub.s $f12, $f12, $f20 @@ -10382,20 +10373,20 @@ glabel object_interaction .L7F046F54: /* 07BA84 7F046F54 460A0081 */ sub.s $f2, $f0, $f10 /* 07BA88 7F046F58 4616103C */ c.lt.s $f2, $f22 -/* 07BA8C 7F046F5C 00000000 */ nop +/* 07BA8C 7F046F5C 00000000 */ nop /* 07BA90 7F046F60 45000001 */ bc1f .L7F046F68 -/* 07BA94 7F046F64 00000000 */ nop +/* 07BA94 7F046F64 00000000 */ nop .L7F046F68: /* 07BA98 7F046F68 C4262B10 */ lwc1 $f6, %lo(D_80052B10)($at) /* 07BA9C 7F046F6C 3C018005 */ lui $at, %hi(D_80052B14) /* 07BAA0 7F046F70 4606603C */ c.lt.s $f12, $f6 -/* 07BAA4 7F046F74 00000000 */ nop +/* 07BAA4 7F046F74 00000000 */ nop /* 07BAA8 7F046F78 45020009 */ bc1fl .L7F046FA0 /* 07BAAC 7F046F7C 8FAC04AC */ lw $t4, 0x4ac($sp) /* 07BAB0 7F046F80 C4242B14 */ lwc1 $f4, %lo(D_80052B14)($at) /* 07BAB4 7F046F84 240A0001 */ li $t2, 1 /* 07BAB8 7F046F88 460C203C */ c.lt.s $f4, $f12 -/* 07BABC 7F046F8C 00000000 */ nop +/* 07BABC 7F046F8C 00000000 */ nop /* 07BAC0 7F046F90 45020003 */ bc1fl .L7F046FA0 /* 07BAC4 7F046F94 8FAC04AC */ lw $t4, 0x4ac($sp) /* 07BAC8 7F046F98 AFAA04AC */ sw $t2, 0x4ac($sp) @@ -10415,13 +10406,13 @@ glabel object_interaction /* 07BAF8 7F046FC8 4606003C */ c.lt.s $f0, $f6 /* 07BAFC 7F046FCC AFAE0490 */ sw $t6, 0x490($sp) /* 07BB00 7F046FD0 45000003 */ bc1f .L7F046FE0 -/* 07BB04 7F046FD4 00000000 */ nop +/* 07BB04 7F046FD4 00000000 */ nop /* 07BB08 7F046FD8 10000007 */ b .L7F046FF8 /* 07BB0C 7F046FDC 46140000 */ add.s $f0, $f0, $f20 .L7F046FE0: /* 07BB10 7F046FE0 C4242B1C */ lwc1 $f4, %lo(D_80052B1C)($at) /* 07BB14 7F046FE4 4600203E */ c.le.s $f4, $f0 -/* 07BB18 7F046FE8 00000000 */ nop +/* 07BB18 7F046FE8 00000000 */ nop /* 07BB1C 7F046FEC 45020003 */ bc1fl .L7F046FFC /* 07BB20 7F046FF0 E7A00494 */ swc1 $f0, 0x494($sp) /* 07BB24 7F046FF4 46140001 */ sub.s $f0, $f0, $f20 @@ -10434,13 +10425,13 @@ glabel object_interaction /* 07BB38 7F047008 C6080088 */ lwc1 $f8, 0x88($s0) /* 07BB3C 7F04700C C7B004D8 */ lwc1 $f16, 0x4d8($sp) /* 07BB40 7F047010 4608003E */ c.le.s $f0, $f8 -/* 07BB44 7F047014 00000000 */ nop +/* 07BB44 7F047014 00000000 */ nop /* 07BB48 7F047018 45020027 */ bc1fl .L7F0470B8 /* 07BB4C 7F04701C 8E0200B8 */ lw $v0, 0xb8($s0) /* 07BB50 7F047020 C60A008C */ lwc1 $f10, 0x8c($s0) /* 07BB54 7F047024 240D001B */ li $t5, 27 /* 07BB58 7F047028 4600503E */ c.le.s $f10, $f0 -/* 07BB5C 7F04702C 00000000 */ nop +/* 07BB5C 7F04702C 00000000 */ nop /* 07BB60 7F047030 45020021 */ bc1fl .L7F0470B8 /* 07BB64 7F047034 8E0200B8 */ lw $v0, 0xb8($s0) /* 07BB68 7F047038 C6460010 */ lwc1 $f6, 0x10($s2) @@ -10477,7 +10468,7 @@ glabel object_interaction .L7F0470B4: /* 07BBE4 7F0470B4 8E0200B8 */ lw $v0, 0xb8($s0) .L7F0470B8: -/* 07BBE8 7F0470B8 3C198005 */ lui $t9, %hi(g_GlobalTimer) +/* 07BBE8 7F0470B8 3C198005 */ lui $t9, %hi(g_GlobalTimer) /* 07BBEC 7F0470BC 0442000B */ bltzl $v0, .L7F0470EC /* 07BBF0 7F0470C0 AFA004AC */ sw $zero, 0x4ac($sp) /* 07BBF4 7F0470C4 8F39837C */ lw $t9, %lo(g_GlobalTimer)($t9) @@ -10511,7 +10502,7 @@ glabel object_interaction /* 07BC58 7F047128 8E0E00D0 */ lw $t6, 0xd0($s0) .L7F04712C: /* 07BC5C 7F04712C 11C0001F */ beqz $t6, .L7F0471AC -/* 07BC60 7F047130 3C0D8005 */ lui $t5, %hi(g_GlobalTimer) +/* 07BC60 7F047130 3C0D8005 */ lui $t5, %hi(g_GlobalTimer) /* 07BC64 7F047134 8DAD837C */ lw $t5, %lo(g_GlobalTimer)($t5) /* 07BC68 7F047138 24010078 */ li $at, 120 /* 07BC6C 7F04713C E7B004D8 */ swc1 $f16, 0x4d8($sp) @@ -10529,17 +10520,17 @@ glabel object_interaction /* 07BC9C 7F04716C C7AA04A0 */ lwc1 $f10, 0x4a0($sp) /* 07BCA0 7F047170 C7B004D8 */ lwc1 $f16, 0x4d8($sp) /* 07BCA4 7F047174 46065102 */ mul.s $f4, $f10, $f6 -/* 07BCA8 7F047178 00000000 */ nop +/* 07BCA8 7F047178 00000000 */ nop /* 07BCAC 7F04717C 46002202 */ mul.s $f8, $f4, $f0 /* 07BCB0 7F047180 46088400 */ add.s $f16, $f16, $f8 /* 07BCB4 7F047184 4616803C */ c.lt.s $f16, $f22 -/* 07BCB8 7F047188 00000000 */ nop +/* 07BCB8 7F047188 00000000 */ nop /* 07BCBC 7F04718C 45000002 */ bc1f .L7F047198 -/* 07BCC0 7F047190 00000000 */ nop +/* 07BCC0 7F047190 00000000 */ nop /* 07BCC4 7F047194 46148400 */ add.s $f16, $f16, $f20 .L7F047198: /* 07BCC8 7F047198 4610A03E */ c.le.s $f20, $f16 -/* 07BCCC 7F04719C 00000000 */ nop +/* 07BCCC 7F04719C 00000000 */ nop /* 07BCD0 7F0471A0 45020003 */ bc1fl .L7F0471B0 /* 07BCD4 7F0471A4 C6020084 */ lwc1 $f2, 0x84($s0) /* 07BCD8 7F0471A8 46148401 */ sub.s $f16, $f16, $f20 @@ -10551,16 +10542,16 @@ glabel object_interaction /* 07BCE8 7F0471B8 46028001 */ sub.s $f0, $f16, $f2 /* 07BCEC 7F0471BC 26040090 */ addiu $a0, $s0, 0x90 /* 07BCF0 7F0471C0 460A003C */ c.lt.s $f0, $f10 -/* 07BCF4 7F0471C4 00000000 */ nop +/* 07BCF4 7F0471C4 00000000 */ nop /* 07BCF8 7F0471C8 45000003 */ bc1f .L7F0471D8 -/* 07BCFC 7F0471CC 00000000 */ nop +/* 07BCFC 7F0471CC 00000000 */ nop /* 07BD00 7F0471D0 10000008 */ b .L7F0471F4 /* 07BD04 7F0471D4 46140000 */ add.s $f0, $f0, $f20 .L7F0471D8: /* 07BD08 7F0471D8 3C018005 */ lui $at, %hi(D_80052B2C) /* 07BD0C 7F0471DC C4262B2C */ lwc1 $f6, %lo(D_80052B2C)($at) /* 07BD10 7F0471E0 4600303E */ c.le.s $f6, $f0 -/* 07BD14 7F0471E4 00000000 */ nop +/* 07BD14 7F0471E4 00000000 */ nop /* 07BD18 7F0471E8 45020003 */ bc1fl .L7F0471F8 /* 07BD1C 7F0471EC C60C0088 */ lwc1 $f12, 0x88($s0) /* 07BD20 7F0471F0 46140001 */ sub.s $f0, $f0, $f20 @@ -10569,7 +10560,7 @@ glabel object_interaction .L7F0471F8: /* 07BD28 7F0471F8 3C018005 */ lui $at, %hi(D_80052B30) /* 07BD2C 7F0471FC 4600603C */ c.lt.s $f12, $f0 -/* 07BD30 7F047200 00000000 */ nop +/* 07BD30 7F047200 00000000 */ nop /* 07BD34 7F047204 45020004 */ bc1fl .L7F047218 /* 07BD38 7F047208 C60C008C */ lwc1 $f12, 0x8c($s0) /* 07BD3C 7F04720C 10000007 */ b .L7F04722C @@ -10577,22 +10568,22 @@ glabel object_interaction /* 07BD44 7F047214 C60C008C */ lwc1 $f12, 0x8c($s0) .L7F047218: /* 07BD48 7F047218 460C003C */ c.lt.s $f0, $f12 -/* 07BD4C 7F04721C 00000000 */ nop +/* 07BD4C 7F04721C 00000000 */ nop /* 07BD50 7F047220 45020003 */ bc1fl .L7F047230 /* 07BD54 7F047224 4616803C */ c.lt.s $f16, $f22 /* 07BD58 7F047228 460C1400 */ add.s $f16, $f2, $f12 .L7F04722C: /* 07BD5C 7F04722C 4616803C */ c.lt.s $f16, $f22 .L7F047230: -/* 07BD60 7F047230 00000000 */ nop +/* 07BD60 7F047230 00000000 */ nop /* 07BD64 7F047234 45020003 */ bc1fl .L7F047244 /* 07BD68 7F047238 4610A03E */ c.le.s $f20, $f16 /* 07BD6C 7F04723C 46148400 */ add.s $f16, $f16, $f20 /* 07BD70 7F047240 4610A03E */ c.le.s $f20, $f16 .L7F047244: -/* 07BD74 7F047244 00000000 */ nop +/* 07BD74 7F047244 00000000 */ nop /* 07BD78 7F047248 45000002 */ bc1f .L7F047254 -/* 07BD7C 7F04724C 00000000 */ nop +/* 07BD7C 7F04724C 00000000 */ nop /* 07BD80 7F047250 46148401 */ sub.s $f16, $f16, $f20 .L7F047254: /* 07BD84 7F047254 C4202B30 */ lwc1 $f0, %lo(D_80052B30)($at) @@ -10620,14 +10611,14 @@ glabel object_interaction /* 07BDDC 7F0472AC C7A604D4 */ lwc1 $f6, 0x4d4($sp) /* 07BDE0 7F0472B0 460A8301 */ sub.s $f12, $f16, $f10 /* 07BDE4 7F0472B4 4616603C */ c.lt.s $f12, $f22 -/* 07BDE8 7F0472B8 00000000 */ nop +/* 07BDE8 7F0472B8 00000000 */ nop /* 07BDEC 7F0472BC 45000002 */ bc1f .L7F0472C8 -/* 07BDF0 7F0472C0 00000000 */ nop +/* 07BDF0 7F0472C0 00000000 */ nop /* 07BDF4 7F0472C4 46146300 */ add.s $f12, $f12, $f20 .L7F0472C8: /* 07BDF8 7F0472C8 C4202B38 */ lwc1 $f0, %lo(D_80052B38)($at) /* 07BDFC 7F0472CC 460C003C */ c.lt.s $f0, $f12 -/* 07BE00 7F0472D0 00000000 */ nop +/* 07BE00 7F0472D0 00000000 */ nop /* 07BE04 7F0472D4 45020003 */ bc1fl .L7F0472E4 /* 07BE08 7F0472D8 C604009C */ lwc1 $f4, 0x9c($s0) /* 07BE0C 7F0472DC 46146301 */ sub.s $f12, $f12, $f20 @@ -10635,13 +10626,13 @@ glabel object_interaction .L7F0472E4: /* 07BE14 7F0472E4 46043081 */ sub.s $f2, $f6, $f4 /* 07BE18 7F0472E8 4616103C */ c.lt.s $f2, $f22 -/* 07BE1C 7F0472EC 00000000 */ nop +/* 07BE1C 7F0472EC 00000000 */ nop /* 07BE20 7F0472F0 45020003 */ bc1fl .L7F047300 /* 07BE24 7F0472F4 4602003C */ c.lt.s $f0, $f2 /* 07BE28 7F0472F8 46141080 */ add.s $f2, $f2, $f20 /* 07BE2C 7F0472FC 4602003C */ c.lt.s $f0, $f2 .L7F047300: -/* 07BE30 7F047300 00000000 */ nop +/* 07BE30 7F047300 00000000 */ nop /* 07BE34 7F047304 45020003 */ bc1fl .L7F047314 /* 07BE38 7F047308 AE0000D0 */ sw $zero, 0xd0($s0) /* 07BE3C 7F04730C 46141081 */ sub.s $f2, $f2, $f20 @@ -10657,11 +10648,11 @@ glabel object_interaction /* 07BE60 7F047330 460A5000 */ add.s $f0, $f10, $f10 /* 07BE64 7F047334 46004007 */ neg.s $f0, $f8 /* 07BE68 7F047338 460C003C */ c.lt.s $f0, $f12 -/* 07BE6C 7F04733C 00000000 */ nop +/* 07BE6C 7F04733C 00000000 */ nop /* 07BE70 7F047340 45020016 */ bc1fl .L7F04739C /* 07BE74 7F047344 460A5000 */ add.s $f0, $f10, $f10 /* 07BE78 7F047348 4608103C */ c.lt.s $f2, $f8 -/* 07BE7C 7F04734C 00000000 */ nop +/* 07BE7C 7F04734C 00000000 */ nop /* 07BE80 7F047350 45020012 */ bc1fl .L7F04739C /* 07BE84 7F047354 460A5000 */ add.s $f0, $f10, $f10 /* 07BE88 7F047358 4602003C */ c.lt.s $f0, $f2 @@ -10673,9 +10664,9 @@ glabel object_interaction /* 07BEA0 7F047370 240B0001 */ li $t3, 1 /* 07BEA4 7F047374 AFAB04A8 */ sw $t3, 0x4a8($sp) /* 07BEA8 7F047378 1120002F */ beqz $t1, .L7F047438 -/* 07BEAC 7F04737C 3C198005 */ lui $t9, %hi(g_GlobalTimer) +/* 07BEAC 7F04737C 3C198005 */ lui $t9, %hi(g_GlobalTimer) /* 07BEB0 7F047380 8F39837C */ lw $t9, %lo(g_GlobalTimer)($t9) -/* 07BEB4 7F047384 3C0A8005 */ lui $t2, %hi(g_GlobalTimer) +/* 07BEB4 7F047384 3C0A8005 */ lui $t2, %hi(g_GlobalTimer) /* 07BEB8 7F047388 AE1900B8 */ sw $t9, 0xb8($s0) /* 07BEBC 7F04738C 8D4A837C */ lw $t2, %lo(g_GlobalTimer)($t2) /* 07BEC0 7F047390 10000029 */ b .L7F047438 @@ -10683,16 +10674,16 @@ glabel object_interaction /* 07BEC8 7F047398 460A5000 */ add.s $f0, $f10, $f10 .L7F04739C: /* 07BECC 7F04739C 4600603C */ c.lt.s $f12, $f0 -/* 07BED0 7F0473A0 00000000 */ nop +/* 07BED0 7F0473A0 00000000 */ nop /* 07BED4 7F0473A4 45020018 */ bc1fl .L7F047408 /* 07BED8 7F0473A8 8E0200B8 */ lw $v0, 0xb8($s0) /* 07BEDC 7F0473AC 46000387 */ neg.s $f14, $f0 /* 07BEE0 7F0473B0 460C703C */ c.lt.s $f14, $f12 -/* 07BEE4 7F0473B4 00000000 */ nop +/* 07BEE4 7F0473B4 00000000 */ nop /* 07BEE8 7F0473B8 45020013 */ bc1fl .L7F047408 /* 07BEEC 7F0473BC 8E0200B8 */ lw $v0, 0xb8($s0) /* 07BEF0 7F0473C0 4600103C */ c.lt.s $f2, $f0 -/* 07BEF4 7F0473C4 00000000 */ nop +/* 07BEF4 7F0473C4 00000000 */ nop /* 07BEF8 7F0473C8 4502000F */ bc1fl .L7F047408 /* 07BEFC 7F0473CC 8E0200B8 */ lw $v0, 0xb8($s0) /* 07BF00 7F0473D0 4602703C */ c.lt.s $f14, $f2 @@ -10704,13 +10695,13 @@ glabel object_interaction /* 07BF18 7F0473E8 240E0001 */ li $t6, 1 /* 07BF1C 7F0473EC AFAE04A8 */ sw $t6, 0x4a8($sp) /* 07BF20 7F0473F0 11A00011 */ beqz $t5, .L7F047438 -/* 07BF24 7F0473F4 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) +/* 07BF24 7F0473F4 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) /* 07BF28 7F0473F8 8DEF837C */ lw $t7, %lo(g_GlobalTimer)($t7) /* 07BF2C 7F0473FC 1000000E */ b .L7F047438 /* 07BF30 7F047400 AE0F00B8 */ sw $t7, 0xb8($s0) /* 07BF34 7F047404 8E0200B8 */ lw $v0, 0xb8($s0) .L7F047408: -/* 07BF38 7F047408 3C188005 */ lui $t8, %hi(g_GlobalTimer) +/* 07BF38 7F047408 3C188005 */ lui $t8, %hi(g_GlobalTimer) /* 07BF3C 7F04740C 0442000B */ bltzl $v0, .L7F04743C /* 07BF40 7F047410 8FB904A8 */ lw $t9, 0x4a8($sp) /* 07BF44 7F047414 8F18837C */ lw $t8, %lo(g_GlobalTimer)($t8) @@ -10739,7 +10730,7 @@ glabel object_interaction /* 07BF98 7F047468 E60600B0 */ swc1 $f6, 0xb0($s0) /* 07BF9C 7F04746C C60200B0 */ lwc1 $f2, 0xb0($s0) /* 07BFA0 7F047470 4602003C */ c.lt.s $f0, $f2 -/* 07BFA4 7F047474 00000000 */ nop +/* 07BFA4 7F047474 00000000 */ nop /* 07BFA8 7F047478 45020023 */ bc1fl .L7F047508 /* 07BFAC 7F04747C 4602B03C */ c.lt.s $f22, $f2 /* 07BFB0 7F047480 E60000B0 */ swc1 $f0, 0xb0($s0) @@ -10747,20 +10738,20 @@ glabel object_interaction /* 07BFB8 7F047488 C60200B0 */ lwc1 $f2, 0xb0($s0) /* 07BFBC 7F04748C C60200B0 */ lwc1 $f2, 0xb0($s0) .L7F047490: -/* 07BFC0 7F047490 3C0A8005 */ lui $t2, %hi(g_ClockTimer) +/* 07BFC0 7F047490 3C0A8005 */ lui $t2, %hi(g_ClockTimer) /* 07BFC4 7F047494 4602B03C */ c.lt.s $f22, $f2 -/* 07BFC8 7F047498 00000000 */ nop +/* 07BFC8 7F047498 00000000 */ nop /* 07BFCC 7F04749C 4502001A */ bc1fl .L7F047508 /* 07BFD0 7F0474A0 4602B03C */ c.lt.s $f22, $f2 /* 07BFD4 7F0474A4 8D4A8374 */ lw $t2, %lo(g_ClockTimer)($t2) /* 07BFD8 7F0474A8 00001025 */ move $v0, $zero /* 07BFDC 7F0474AC 3C018005 */ lui $at, %hi(D_80052B44) /* 07BFE0 7F0474B0 1940000C */ blez $t2, .L7F0474E4 -/* 07BFE4 7F0474B4 00000000 */ nop +/* 07BFE4 7F0474B4 00000000 */ nop /* 07BFE8 7F0474B8 C4202B44 */ lwc1 $f0, %lo(D_80052B44)($at) /* 07BFEC 7F0474BC C60400B0 */ lwc1 $f4, 0xb0($s0) .L7F0474C0: -/* 07BFF0 7F0474C0 3C0C8005 */ lui $t4, %hi(g_ClockTimer) +/* 07BFF0 7F0474C0 3C0C8005 */ lui $t4, %hi(g_ClockTimer) /* 07BFF4 7F0474C4 24420001 */ addiu $v0, $v0, 1 /* 07BFF8 7F0474C8 46002282 */ mul.s $f10, $f4, $f0 /* 07BFFC 7F0474CC E60A00B0 */ swc1 $f10, 0xb0($s0) @@ -10773,7 +10764,7 @@ glabel object_interaction /* 07C014 7F0474E4 3C018005 */ lui $at, %hi(D_80052B48) /* 07C018 7F0474E8 C4282B48 */ lwc1 $f8, %lo(D_80052B48)($at) /* 07C01C 7F0474EC 4608103E */ c.le.s $f2, $f8 -/* 07C020 7F0474F0 00000000 */ nop +/* 07C020 7F0474F0 00000000 */ nop /* 07C024 7F0474F4 45020004 */ bc1fl .L7F047508 /* 07C028 7F0474F8 4602B03C */ c.lt.s $f22, $f2 /* 07C02C 7F0474FC E61600B0 */ swc1 $f22, 0xb0($s0) @@ -10791,7 +10782,7 @@ glabel object_interaction /* 07C054 7F047524 E60800B4 */ swc1 $f8, 0xb4($s0) /* 07C058 7F047528 C60000B4 */ lwc1 $f0, 0xb4($s0) /* 07C05C 7F04752C 4600A03E */ c.le.s $f20, $f0 -/* 07C060 7F047530 00000000 */ nop +/* 07C060 7F047530 00000000 */ nop /* 07C064 7F047534 4502033E */ bc1fl .L7F048230 /* 07C068 7F047538 92220003 */ lbu $v0, 3($s1) /* 07C06C 7F04753C 46140101 */ sub.s $f4, $f0, $f20 @@ -10799,7 +10790,7 @@ glabel object_interaction /* 07C070 7F047540 E60400B4 */ swc1 $f4, 0xb4($s0) /* 07C074 7F047544 C60000B4 */ lwc1 $f0, 0xb4($s0) /* 07C078 7F047548 4600A03E */ c.le.s $f20, $f0 -/* 07C07C 7F04754C 00000000 */ nop +/* 07C07C 7F04754C 00000000 */ nop /* 07C080 7F047550 4503FFFB */ bc1tl .L7F047540 /* 07C084 7F047554 46140101 */ sub.s $f4, $f0, $f20 /* 07C088 7F047558 10000335 */ b .L7F048230 @@ -10816,13 +10807,13 @@ glabel object_interaction /* 07C0B0 7F047580 C62E0098 */ lwc1 $f14, 0x98($s1) /* 07C0B4 7F047584 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07C0B8 7F047588 460EB03E */ c.le.s $f22, $f14 -/* 07C0BC 7F04758C 00000000 */ nop +/* 07C0BC 7F04758C 00000000 */ nop /* 07C0C0 7F047590 45020016 */ bc1fl .L7F0475EC /* 07C0C4 7F047594 8E2E000C */ lw $t6, 0xc($s1) /* 07C0C8 7F047598 C4228378 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) /* 07C0CC 7F04759C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07C0D0 7F0475A0 4602703E */ c.le.s $f14, $f2 -/* 07C0D4 7F0475A4 00000000 */ nop +/* 07C0D4 7F0475A4 00000000 */ nop /* 07C0D8 7F0475A8 45020006 */ bc1fl .L7F0475C4 /* 07C0DC 7F0475AC C6200088 */ lwc1 $f0, 0x88($s1) /* 07C0E0 7F0475B0 C62A0094 */ lwc1 $f10, 0x94($s1) @@ -10846,23 +10837,23 @@ glabel object_interaction /* 07C11C 7F0475EC 00008025 */ move $s0, $zero /* 07C120 7F0475F0 000E6B00 */ sll $t5, $t6, 0xc /* 07C124 7F0475F4 05A00014 */ bltz $t5, .L7F047648 -/* 07C128 7F0475F8 00000000 */ nop +/* 07C128 7F0475F8 00000000 */ nop /* 07C12C 7F0475FC 0FC13BCD */ jal objIsHealthy /* 07C130 7F047600 02202025 */ move $a0, $s1 /* 07C134 7F047604 10400010 */ beqz $v0, .L7F047648 -/* 07C138 7F047608 00000000 */ nop +/* 07C138 7F047608 00000000 */ nop /* 07C13C 7F04760C C62A0088 */ lwc1 $f10, 0x88($s1) /* 07C140 7F047610 26240058 */ addiu $a0, $s1, 0x58 /* 07C144 7F047614 3C0544FA */ lui $a1, 0x44fa /* 07C148 7F047618 460AB03C */ c.lt.s $f22, $f10 /* 07C14C 7F04761C 3C06453B */ lui $a2, (0x453B8000 >> 16) # lui $a2, 0x453b /* 07C150 7F047620 45010006 */ bc1t .L7F04763C -/* 07C154 7F047624 00000000 */ nop +/* 07C154 7F047624 00000000 */ nop /* 07C158 7F047628 C6280094 */ lwc1 $f8, 0x94($s1) /* 07C15C 7F04762C 4608B03C */ c.lt.s $f22, $f8 -/* 07C160 7F047630 00000000 */ nop +/* 07C160 7F047630 00000000 */ nop /* 07C164 7F047634 45000004 */ bc1f .L7F047648 -/* 07C168 7F047638 00000000 */ nop +/* 07C168 7F047638 00000000 */ nop .L7F04763C: /* 07C16C 7F04763C 0FC14E25 */ jal sub_GAME_7F053894 /* 07C170 7F047640 34C68000 */ ori $a2, (0x453B8000 & 0xFFFF) # ori $a2, $a2, 0x8000 @@ -10872,14 +10863,14 @@ glabel object_interaction /* 07C17C 7F04764C 8E2400AC */ lw $a0, 0xac($s1) /* 07C180 7F047650 8E2400AC */ lw $a0, 0xac($s1) /* 07C184 7F047654 10800005 */ beqz $a0, .L7F04766C -/* 07C188 7F047658 00000000 */ nop +/* 07C188 7F047658 00000000 */ nop /* 07C18C 7F04765C 0C00237C */ jal sndGetPlayingState -/* 07C190 7F047660 00000000 */ nop +/* 07C190 7F047660 00000000 */ nop /* 07C194 7F047664 5440000A */ bnezl $v0, .L7F047690 /* 07C198 7F047668 8E2400AC */ lw $a0, 0xac($s1) .L7F04766C: /* 07C19C 7F04766C 0FC2FF01 */ jal lvlGetControlsLockedFlag -/* 07C1A0 7F047670 00000000 */ nop +/* 07C1A0 7F047670 00000000 */ nop /* 07C1A4 7F047674 14400005 */ bnez $v0, .L7F04768C /* 07C1A8 7F047678 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) /* 07C1AC 7F04767C 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) @@ -10901,7 +10892,7 @@ glabel object_interaction /* 07C1E0 7F0476B0 50800008 */ beql $a0, $zero, .L7F0476D4 /* 07C1E4 7F0476B4 8E2400A4 */ lw $a0, 0xa4($s1) /* 07C1E8 7F0476B8 0C00237C */ jal sndGetPlayingState -/* 07C1EC 7F0476BC 00000000 */ nop +/* 07C1EC 7F0476BC 00000000 */ nop /* 07C1F0 7F0476C0 50400004 */ beql $v0, $zero, .L7F0476D4 /* 07C1F4 7F0476C4 8E2400A4 */ lw $a0, 0xa4($s1) /* 07C1F8 7F0476C8 0C002408 */ jal sndDeactivate @@ -10971,7 +10962,7 @@ glabel object_interaction /* 07C2EC 7F0477BC C6260088 */ lwc1 $f6, 0x88($s1) .L7F0477C0: /* 07C2F0 7F0477C0 4606B03C */ c.lt.s $f22, $f6 -/* 07C2F4 7F0477C4 00000000 */ nop +/* 07C2F4 7F0477C4 00000000 */ nop /* 07C2F8 7F0477C8 450201AC */ bc1fl .L7F047E7C /* 07C2FC 7F0477CC 8E280008 */ lw $t0, 8($s1) /* 07C300 7F0477D0 8E6C0014 */ lw $t4, 0x14($s3) @@ -11021,7 +11012,7 @@ glabel object_interaction /* 07C3AC 7F04787C C7AE0430 */ lwc1 $f14, 0x430($sp) /* 07C3B0 7F047880 3C018005 */ lui $at, %hi(D_80052B58) /* 07C3B4 7F047884 460CA03E */ c.le.s $f20, $f12 -/* 07C3B8 7F047888 00000000 */ nop +/* 07C3B8 7F047888 00000000 */ nop /* 07C3BC 7F04788C 45020009 */ bc1fl .L7F0478B4 /* 07C3C0 7F047890 4616603C */ c.lt.s $f12, $f22 /* 07C3C4 7F047894 46146281 */ sub.s $f10, $f12, $f20 @@ -11029,12 +11020,12 @@ glabel object_interaction /* 07C3C8 7F047898 E62A00A0 */ swc1 $f10, 0xa0($s1) /* 07C3CC 7F04789C C62C00A0 */ lwc1 $f12, 0xa0($s1) /* 07C3D0 7F0478A0 460CA03E */ c.le.s $f20, $f12 -/* 07C3D4 7F0478A4 00000000 */ nop +/* 07C3D4 7F0478A4 00000000 */ nop /* 07C3D8 7F0478A8 4503FFFB */ bc1tl .L7F047898 /* 07C3DC 7F0478AC 46146281 */ sub.s $f10, $f12, $f20 /* 07C3E0 7F0478B0 4616603C */ c.lt.s $f12, $f22 .L7F0478B4: -/* 07C3E4 7F0478B4 00000000 */ nop +/* 07C3E4 7F0478B4 00000000 */ nop /* 07C3E8 7F0478B8 45020009 */ bc1fl .L7F0478E0 /* 07C3EC 7F0478BC C7A4047C */ lwc1 $f4, 0x47c($sp) /* 07C3F0 7F0478C0 46146200 */ add.s $f8, $f12, $f20 @@ -11042,25 +11033,25 @@ glabel object_interaction /* 07C3F4 7F0478C4 E62800A0 */ swc1 $f8, 0xa0($s1) /* 07C3F8 7F0478C8 C62C00A0 */ lwc1 $f12, 0xa0($s1) /* 07C3FC 7F0478CC 4616603C */ c.lt.s $f12, $f22 -/* 07C400 7F0478D0 00000000 */ nop +/* 07C400 7F0478D0 00000000 */ nop /* 07C404 7F0478D4 4503FFFB */ bc1tl .L7F0478C4 /* 07C408 7F0478D8 46146200 */ add.s $f8, $f12, $f20 /* 07C40C 7F0478DC C7A4047C */ lwc1 $f4, 0x47c($sp) .L7F0478E0: /* 07C410 7F0478E0 460C2032 */ c.eq.s $f4, $f12 -/* 07C414 7F0478E4 00000000 */ nop +/* 07C414 7F0478E4 00000000 */ nop /* 07C418 7F0478E8 4502000F */ bc1fl .L7F047928 /* 07C41C 7F0478EC 8E980008 */ lw $t8, 8($s4) /* 07C420 7F0478F0 C620009C */ lwc1 $f0, 0x9c($s1) /* 07C424 7F0478F4 C4262B58 */ lwc1 $f6, %lo(D_80052B58)($at) /* 07C428 7F0478F8 3C018005 */ lui $at, %hi(D_80052B5C) /* 07C42C 7F0478FC 4606003E */ c.le.s $f0, $f6 -/* 07C430 7F047900 00000000 */ nop +/* 07C430 7F047900 00000000 */ nop /* 07C434 7F047904 45020008 */ bc1fl .L7F047928 /* 07C438 7F047908 8E980008 */ lw $t8, 8($s4) /* 07C43C 7F04790C C42A2B5C */ lwc1 $f10, %lo(D_80052B5C)($at) /* 07C440 7F047910 4600503E */ c.le.s $f10, $f0 -/* 07C444 7F047914 00000000 */ nop +/* 07C444 7F047914 00000000 */ nop /* 07C448 7F047918 45020003 */ bc1fl .L7F047928 /* 07C44C 7F04791C 8E980008 */ lw $t8, 8($s4) /* 07C450 7F047920 E636009C */ swc1 $f22, 0x9c($s1) @@ -11079,9 +11070,9 @@ glabel object_interaction /* 07C480 7F047950 46023383 */ div.s $f14, $f6, $f2 .L7F047954: /* 07C484 7F047954 4616703C */ c.lt.s $f14, $f22 -/* 07C488 7F047958 00000000 */ nop +/* 07C488 7F047958 00000000 */ nop /* 07C48C 7F04795C 45000002 */ bc1f .L7F047968 -/* 07C490 7F047960 00000000 */ nop +/* 07C490 7F047960 00000000 */ nop /* 07C494 7F047964 46147380 */ add.s $f14, $f14, $f20 .L7F047968: /* 07C498 7F047968 0FC15FAB */ jal sinf @@ -11092,7 +11083,7 @@ glabel object_interaction /* 07C4AC 7F04797C 46085102 */ mul.s $f4, $f10, $f8 /* 07C4B0 7F047980 C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) /* 07C4B4 7F047984 46040182 */ mul.s $f6, $f0, $f4 -/* 07C4B8 7F047988 00000000 */ nop +/* 07C4B8 7F047988 00000000 */ nop /* 07C4BC 7F04798C 460A3202 */ mul.s $f8, $f6, $f10 /* 07C4C0 7F047990 E7A80460 */ swc1 $f8, 0x460($sp) /* 07C4C4 7F047994 0FC15FAB */ jal sinf @@ -11125,7 +11116,7 @@ glabel object_interaction /* 07C530 7F047A00 E7A80698 */ swc1 $f8, 0x698($sp) /* 07C534 7F047A04 C6280088 */ lwc1 $f8, 0x88($s1) /* 07C538 7F047A08 46024202 */ mul.s $f8, $f8, $f2 -/* 07C53C 7F047A0C 00000000 */ nop +/* 07C53C 7F047A0C 00000000 */ nop /* 07C540 7F047A10 46044202 */ mul.s $f8, $f8, $f4 /* 07C544 7F047A14 C6240060 */ lwc1 $f4, 0x60($s1) /* 07C548 7F047A18 46082100 */ add.s $f4, $f4, $f8 @@ -11322,7 +11313,7 @@ glabel object_interaction /* 07C844 7F047D14 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback /* 07C848 7F047D18 E7AA0010 */ swc1 $f10, 0x10($sp) /* 07C84C 7F047D1C 14400002 */ bnez $v0, .L7F047D28 -/* 07C850 7F047D20 00000000 */ nop +/* 07C850 7F047D20 00000000 */ nop .L7F047D24: /* 07C854 7F047D24 00009025 */ move $s2, $zero .L7F047D28: @@ -11345,7 +11336,7 @@ glabel object_interaction /* 07C898 7F047D68 0FC0BF54 */ jal chrlvIsArrivingLaterallyAtPos /* 07C89C 7F047D6C 3C0742C8 */ lui $a3, 0x42c8 /* 07C8A0 7F047D70 10400050 */ beqz $v0, .L7F047EB4 -/* 07C8A4 7F047D74 00000000 */ nop +/* 07C8A4 7F047D74 00000000 */ nop /* 07C8A8 7F047D78 8E2B00A8 */ lw $t3, 0xa8($s1) /* 07C8AC 7F047D7C 8E3900A4 */ lw $t9, 0xa4($s1) /* 07C8B0 7F047D80 3C014270 */ li $at, 0x42700000 # 60.000000 @@ -11356,7 +11347,7 @@ glabel object_interaction /* 07C8C4 7F047D94 014E6821 */ addu $t5, $t2, $t6 /* 07C8C8 7F047D98 8DB80000 */ lw $t8, ($t5) /* 07C8CC 7F047D9C 07010045 */ bgez $t8, .L7F047EB4 -/* 07C8D0 7F047DA0 00000000 */ nop +/* 07C8D0 7F047DA0 00000000 */ nop /* 07C8D4 7F047DA4 44814000 */ mtc1 $at, $f8 /* 07C8D8 7F047DA8 AE2000A4 */ sw $zero, 0xa4($s1) /* 07C8DC 7F047DAC E6360094 */ swc1 $f22, 0x94($s1) @@ -11366,7 +11357,7 @@ glabel object_interaction /* 07C8E8 7F047DB8 C6240098 */ lwc1 $f4, 0x98($s1) /* 07C8EC 7F047DBC 3C014270 */ li $at, 0x42700000 # 60.000000 /* 07C8F0 7F047DC0 4616203C */ c.lt.s $f4, $f22 -/* 07C8F4 7F047DC4 00000000 */ nop +/* 07C8F4 7F047DC4 00000000 */ nop /* 07C8F8 7F047DC8 45020006 */ bc1fl .L7F047DE4 /* 07C8FC 7F047DCC E6360088 */ swc1 $f22, 0x88($s1) /* 07C900 7F047DD0 C6260088 */ lwc1 $f6, 0x88($s1) @@ -11395,13 +11386,13 @@ glabel object_interaction /* 07C958 7F047E28 0FC15B28 */ jal setupUpdateObjectRoomPosition /* 07C95C 7F047E2C 02202025 */ move $a0, $s1 /* 07C960 7F047E30 10000020 */ b .L7F047EB4 -/* 07C964 7F047E34 00000000 */ nop +/* 07C964 7F047E34 00000000 */ nop .L7F047E38: /* 07C968 7F047E38 C6260098 */ lwc1 $f6, 0x98($s1) .L7F047E3C: /* 07C96C 7F047E3C 3C014270 */ li $at, 0x42700000 # 60.000000 /* 07C970 7F047E40 4616303C */ c.lt.s $f6, $f22 -/* 07C974 7F047E44 00000000 */ nop +/* 07C974 7F047E44 00000000 */ nop /* 07C978 7F047E48 45020006 */ bc1fl .L7F047E64 /* 07C97C 7F047E4C E6360088 */ swc1 $f22, 0x88($s1) /* 07C980 7F047E50 C62A0088 */ lwc1 $f10, 0x88($s1) @@ -11419,7 +11410,7 @@ glabel object_interaction .L7F047E7C: /* 07C9AC 7F047E7C 00085880 */ sll $t3, $t0, 2 /* 07C9B0 7F047E80 0561000C */ bgez $t3, .L7F047EB4 -/* 07C9B4 7F047E84 00000000 */ nop +/* 07C9B4 7F047E84 00000000 */ nop /* 07C9B8 7F047E88 C62C0038 */ lwc1 $f12, 0x38($s1) /* 07C9BC 7F047E8C 0FC16A8C */ jal atan2f /* 07C9C0 7F047E90 C62E0040 */ lwc1 $f14, 0x40($s1) @@ -11449,13 +11440,13 @@ glabel object_interaction /* 07CA18 7F047EE8 0FC1B303 */ jal setsuboffset /* 07CA1C 7F047EEC AFA50070 */ sw $a1, 0x70($sp) /* 07CA20 7F047EF0 8E300014 */ lw $s0, 0x14($s1) -/* 07CA24 7F047EF4 3C0E8003 */ lui $t6, %hi(animation_table_ptrs2+4) +/* 07CA24 7F047EF4 3C0E8003 */ lui $t6, %hi(animation_table_ptrs2+4) /* 07CA28 7F047EF8 8DCEA050 */ lw $t6, %lo(animation_table_ptrs2+4)($t6) /* 07CA2C 7F047EFC 8E0A0020 */ lw $t2, 0x20($s0) /* 07CA30 7F047F00 3C054127 */ lui $a1, (0x4127020C >> 16) # lui $a1, 0x4127 /* 07CA34 7F047F04 02002025 */ move $a0, $s0 /* 07CA38 7F047F08 154E0009 */ bne $t2, $t6, .L7F047F30 -/* 07CA3C 7F047F0C 00000000 */ nop +/* 07CA3C 7F047F0C 00000000 */ nop /* 07CA40 7F047F10 0FC1B3A1 */ jal sub_GAME_7F06CE84 /* 07CA44 7F047F14 34A5020C */ ori $a1, (0x4127020C & 0xFFFF) # ori $a1, $a1, 0x20c /* 07CA48 7F047F18 3C054049 */ lui $a1, (0x40490FDB >> 16) # lui $a1, 0x4049 @@ -11463,10 +11454,10 @@ glabel object_interaction /* 07CA50 7F047F20 0FC1B34F */ jal setsubroty /* 07CA54 7F047F24 8E240014 */ lw $a0, 0x14($s1) /* 07CA58 7F047F28 10000024 */ b .L7F047FBC -/* 07CA5C 7F047F2C 00000000 */ nop +/* 07CA5C 7F047F2C 00000000 */ nop .L7F047F30: /* 07CA60 7F047F30 0C001A57 */ jal bossGetStageNum -/* 07CA64 7F047F34 00000000 */ nop +/* 07CA64 7F047F34 00000000 */ nop /* 07CA68 7F047F38 24010016 */ li $at, 22 /* 07CA6C 7F047F3C 1441000A */ bne $v0, $at, .L7F047F68 /* 07CA70 7F047F40 3C053F85 */ lui $a1, (0x3F859B3D >> 16) # lui $a1, 0x3f85 @@ -11478,10 +11469,10 @@ glabel object_interaction /* 07CA88 7F047F58 0FC1B34F */ jal setsubroty /* 07CA8C 7F047F5C 8E240014 */ lw $a0, 0x14($s1) /* 07CA90 7F047F60 10000016 */ b .L7F047FBC -/* 07CA94 7F047F64 00000000 */ nop +/* 07CA94 7F047F64 00000000 */ nop .L7F047F68: /* 07CA98 7F047F68 0C001A57 */ jal bossGetStageNum -/* 07CA9C 7F047F6C 00000000 */ nop +/* 07CA9C 7F047F6C 00000000 */ nop /* 07CAA0 7F047F70 2401001A */ li $at, 26 /* 07CAA4 7F047F74 1441000B */ bne $v0, $at, .L7F047FA4 /* 07CAA8 7F047F78 3C053F85 */ lui $a1, 0x3f85 @@ -11494,7 +11485,7 @@ glabel object_interaction /* 07CAC4 7F047F94 0FC1B34F */ jal setsubroty /* 07CAC8 7F047F98 8E240014 */ lw $a0, 0x14($s1) /* 07CACC 7F047F9C 10000007 */ b .L7F047FBC -/* 07CAD0 7F047FA0 00000000 */ nop +/* 07CAD0 7F047FA0 00000000 */ nop .L7F047FA4: /* 07CAD4 7F047FA4 8E240014 */ lw $a0, 0x14($s1) /* 07CAD8 7F047FA8 0FC1B3A1 */ jal sub_GAME_7F06CE84 @@ -11555,13 +11546,13 @@ glabel object_interaction .L7F048078: /* 07CBA8 7F048078 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07CBAC 7F04807C 460CB03E */ c.le.s $f22, $f12 -/* 07CBB0 7F048080 00000000 */ nop +/* 07CBB0 7F048080 00000000 */ nop /* 07CBB4 7F048084 45020016 */ bc1fl .L7F0480E0 /* 07CBB8 7F048088 C6200094 */ lwc1 $f0, 0x94($s1) /* 07CBBC 7F04808C C4228378 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) /* 07CBC0 7F048090 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07CBC4 7F048094 4602603E */ c.le.s $f12, $f2 -/* 07CBC8 7F048098 00000000 */ nop +/* 07CBC8 7F048098 00000000 */ nop /* 07CBCC 7F04809C 45020006 */ bc1fl .L7F0480B8 /* 07CBD0 7F0480A0 C62E0098 */ lwc1 $f14, 0x98($s1) /* 07CBD4 7F0480A4 C624009C */ lwc1 $f4, 0x9c($s1) @@ -11584,13 +11575,13 @@ glabel object_interaction .L7F0480E0: /* 07CC10 7F0480E0 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07CC14 7F0480E4 4600B03E */ c.le.s $f22, $f0 -/* 07CC18 7F0480E8 00000000 */ nop +/* 07CC18 7F0480E8 00000000 */ nop /* 07CC1C 7F0480EC 45020016 */ bc1fl .L7F048148 /* 07CC20 7F0480F0 8E2B000C */ lw $t3, 0xc($s1) /* 07CC24 7F0480F4 C4228378 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) /* 07CC28 7F0480F8 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07CC2C 7F0480FC 4602003E */ c.le.s $f0, $f2 -/* 07CC30 7F048100 00000000 */ nop +/* 07CC30 7F048100 00000000 */ nop /* 07CC34 7F048104 45020006 */ bc1fl .L7F048120 /* 07CC38 7F048108 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07CC3C 7F04810C C6240090 */ lwc1 $f4, 0x90($s1) @@ -11614,16 +11605,16 @@ glabel object_interaction /* 07CC78 7F048148 00008025 */ move $s0, $zero /* 07CC7C 7F04814C 000B4B00 */ sll $t1, $t3, 0xc /* 07CC80 7F048150 05200014 */ bltz $t1, .L7F0481A4 -/* 07CC84 7F048154 00000000 */ nop +/* 07CC84 7F048154 00000000 */ nop /* 07CC88 7F048158 0FC13BCD */ jal objIsHealthy /* 07CC8C 7F04815C 02202025 */ move $a0, $s1 /* 07CC90 7F048160 10400010 */ beqz $v0, .L7F0481A4 -/* 07CC94 7F048164 00000000 */ nop +/* 07CC94 7F048164 00000000 */ nop /* 07CC98 7F048168 C624008C */ lwc1 $f4, 0x8c($s1) /* 07CC9C 7F04816C 4604B032 */ c.eq.s $f22, $f4 -/* 07CCA0 7F048170 00000000 */ nop +/* 07CCA0 7F048170 00000000 */ nop /* 07CCA4 7F048174 4501000B */ bc1t .L7F0481A4 -/* 07CCA8 7F048178 00000000 */ nop +/* 07CCA8 7F048178 00000000 */ nop /* 07CCAC 7F04817C 8E390008 */ lw $t9, 8($s1) /* 07CCB0 7F048180 3C05459C */ lui $a1, (0x459C4000 >> 16) # lui $a1, 0x459c /* 07CCB4 7F048184 34A54000 */ ori $a1, (0x459C4000 & 0xFFFF) # ori $a1, $a1, 0x4000 @@ -11639,14 +11630,14 @@ glabel object_interaction /* 07CCD8 7F0481A8 8E2400B0 */ lw $a0, 0xb0($s1) /* 07CCDC 7F0481AC 8E2400B0 */ lw $a0, 0xb0($s1) /* 07CCE0 7F0481B0 10800005 */ beqz $a0, .L7F0481C8 -/* 07CCE4 7F0481B4 00000000 */ nop +/* 07CCE4 7F0481B4 00000000 */ nop /* 07CCE8 7F0481B8 0C00237C */ jal sndGetPlayingState -/* 07CCEC 7F0481BC 00000000 */ nop +/* 07CCEC 7F0481BC 00000000 */ nop /* 07CCF0 7F0481C0 5440000A */ bnezl $v0, .L7F0481EC /* 07CCF4 7F0481C4 8E2400B0 */ lw $a0, 0xb0($s1) .L7F0481C8: /* 07CCF8 7F0481C8 0FC2FF01 */ jal lvlGetControlsLockedFlag -/* 07CCFC 7F0481CC 00000000 */ nop +/* 07CCFC 7F0481CC 00000000 */ nop /* 07CD00 7F0481D0 14400005 */ bnez $v0, .L7F0481E8 /* 07CD04 7F0481D4 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) /* 07CD08 7F0481D8 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) @@ -11668,7 +11659,7 @@ glabel object_interaction /* 07CD3C 7F04820C 50800008 */ beql $a0, $zero, .L7F048230 /* 07CD40 7F048210 92220003 */ lbu $v0, 3($s1) /* 07CD44 7F048214 0C00237C */ jal sndGetPlayingState -/* 07CD48 7F048218 00000000 */ nop +/* 07CD48 7F048218 00000000 */ nop /* 07CD4C 7F04821C 50400004 */ beql $v0, $zero, .L7F048230 /* 07CD50 7F048220 92220003 */ lbu $v0, 3($s1) /* 07CD54 7F048224 0C002408 */ jal sndDeactivate @@ -11693,7 +11684,7 @@ glabel object_interaction /* 07CD98 7F048268 44053000 */ mfc1 $a1, $f6 /* 07CD9C 7F04826C 44065000 */ mfc1 $a2, $f10 /* 07CDA0 7F048270 0FC11477 */ jal glassCalculateOpacity -/* 07CDA4 7F048274 00000000 */ nop +/* 07CDA4 7F048274 00000000 */ nop /* 07CDA8 7F048278 8E04008C */ lw $a0, 0x8c($s0) /* 07CDAC 7F04827C AE020088 */ sw $v0, 0x88($s0) /* 07CDB0 7F048280 8FAD0674 */ lw $t5, 0x674($sp) @@ -11702,11 +11693,11 @@ glabel object_interaction /* 07CDBC 7F04828C 15A10009 */ bne $t5, $at, .L7F0482B4 /* 07CDC0 7F048290 240100FF */ li $at, 255 /* 07CDC4 7F048294 14410005 */ bne $v0, $at, .L7F0482AC -/* 07CDC8 7F048298 00000000 */ nop +/* 07CDC8 7F048298 00000000 */ nop /* 07CDCC 7F04829C 0FC2E76F */ jal bgToggleDataPortalsContrlBytes1Bit1 /* 07CDD0 7F0482A0 00002825 */ move $a1, $zero /* 07CDD4 7F0482A4 10000003 */ b .L7F0482B4 -/* 07CDD8 7F0482A8 00000000 */ nop +/* 07CDD8 7F0482A8 00000000 */ nop .L7F0482AC: /* 07CDDC 7F0482AC 0FC2E76F */ jal bgToggleDataPortalsContrlBytes1Bit1 /* 07CDE0 7F0482B0 24050001 */ li $a1, 1 @@ -11734,7 +11725,7 @@ glabel object_interaction /* 07CE30 7F048300 44054000 */ mfc1 $a1, $f8 /* 07CE34 7F048304 44062000 */ mfc1 $a2, $f4 /* 07CE38 7F048308 0FC11477 */ jal glassCalculateOpacity -/* 07CE3C 7F04830C 00000000 */ nop +/* 07CE3C 7F04830C 00000000 */ nop /* 07CE40 7F048310 A60200BE */ sh $v0, 0xbe($s0) /* 07CE44 7F048314 8FB90674 */ lw $t9, 0x674($sp) /* 07CE48 7F048318 24010001 */ li $at, 1 @@ -11746,29 +11737,29 @@ glabel object_interaction /* 07CE60 7F048330 00009025 */ move $s2, $zero /* 07CE64 7F048334 C60600B4 */ lwc1 $f6, 0xb4($s0) /* 07CE68 7F048338 4606B03C */ c.lt.s $f22, $f6 -/* 07CE6C 7F04833C 00000000 */ nop +/* 07CE6C 7F04833C 00000000 */ nop /* 07CE70 7F048340 45020003 */ bc1fl .L7F048350 /* 07CE74 7F048344 8E820008 */ lw $v0, 8($s4) /* 07CE78 7F048348 00009025 */ move $s2, $zero .L7F04834C: /* 07CE7C 7F04834C 8E820008 */ lw $v0, 8($s4) .L7F048350: -/* 07CE80 7F048350 3C0A8004 */ lui $t2, %hi(skeleton_door) +/* 07CE80 7F048350 3C0A8004 */ lui $t2, %hi(skeleton_door) /* 07CE84 7F048354 254AA1DC */ addiu $t2, %lo(skeleton_door) # addiu $t2, $t2, -0x5e24 /* 07CE88 7F048358 8C4E0004 */ lw $t6, 4($v0) /* 07CE8C 7F04835C 154E0009 */ bne $t2, $t6, .L7F048384 -/* 07CE90 7F048360 00000000 */ nop +/* 07CE90 7F048360 00000000 */ nop /* 07CE94 7F048364 8C4D0008 */ lw $t5, 8($v0) /* 07CE98 7F048368 02802025 */ move $a0, $s4 /* 07CE9C 7F04836C 0FC1B1E7 */ jal modelGetNodeRwData /* 07CEA0 7F048370 8DA50004 */ lw $a1, 4($t5) /* 07CEA4 7F048374 8C580000 */ lw $t8, ($v0) /* 07CEA8 7F048378 17000002 */ bnez $t8, .L7F048384 -/* 07CEAC 7F04837C 00000000 */ nop +/* 07CEAC 7F04837C 00000000 */ nop /* 07CEB0 7F048380 00009025 */ move $s2, $zero .L7F048384: /* 07CEB4 7F048384 12400005 */ beqz $s2, .L7F04839C -/* 07CEB8 7F048388 00000000 */ nop +/* 07CEB8 7F048388 00000000 */ nop /* 07CEBC 7F04838C 0FC14D71 */ jal doorDeactivatePortal /* 07CEC0 7F048390 02002025 */ move $a0, $s0 /* 07CEC4 7F048394 10000004 */ b .L7F0483A8 @@ -11783,7 +11774,7 @@ glabel object_interaction /* 07CEDC 7F0483AC 560F0008 */ bnel $s0, $t7, .L7F0483D0 /* 07CEE0 7F0483B0 8E23000C */ lw $v1, 0xc($s1) /* 07CEE4 7F0483B4 0FC1F3A1 */ jal get_ptr_for_players_tank -/* 07CEE8 7F0483B8 00000000 */ nop +/* 07CEE8 7F0483B8 00000000 */ nop /* 07CEEC 7F0483BC 54530004 */ bnel $v0, $s3, .L7F0483D0 /* 07CEF0 7F0483C0 8E23000C */ lw $v1, 0xc($s1) /* 07CEF4 7F0483C4 10000019 */ b .L7F04842C @@ -11801,7 +11792,7 @@ glabel object_interaction /* 07CF1C 7F0483EC 00001825 */ move $v1, $zero /* 07CF20 7F0483F0 31690800 */ andi $t1, $t3, 0x800 /* 07CF24 7F0483F4 1520000D */ bnez $t1, .L7F04842C -/* 07CF28 7F0483F8 00000000 */ nop +/* 07CF28 7F0483F8 00000000 */ nop /* 07CF2C 7F0483FC 0720000B */ bltz $t9, .L7F04842C /* 07CF30 7F048400 02802025 */ move $a0, $s4 /* 07CF34 7F048404 262C0058 */ addiu $t4, $s1, 0x58 @@ -11838,18 +11829,18 @@ glabel object_interaction /* 07CFA8 7F048478 26240018 */ addiu $a0, $s1, 0x18 /* 07CFAC 7F04847C 8E640004 */ lw $a0, 4($s3) /* 07CFB0 7F048480 00402825 */ move $a1, $v0 -/* 07CFB4 7F048484 0FC149BB */ jal sub_GAME_7F0526EC +/* 07CFB4 7F048484 0FC149BB */ jal door7F0526EC /* 07CFB8 7F048488 AFA4039C */ sw $a0, 0x39c($sp) /* 07CFBC 7F04848C 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07CFC0 7F048490 00000000 */ nop +/* 07CFC0 7F048490 00000000 */ nop /* 07CFC4 7F048494 00402025 */ move $a0, $v0 /* 07CFC8 7F048498 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place /* 07CFCC 7F04849C 02402825 */ move $a1, $s2 /* 07CFD0 7F0484A0 8E820008 */ lw $v0, 8($s4) -/* 07CFD4 7F0484A4 3C0B8004 */ lui $t3, %hi(skeleton_eyelid_door) +/* 07CFD4 7F0484A4 3C0B8004 */ lui $t3, %hi(skeleton_eyelid_door) /* 07CFD8 7F0484A8 256BA100 */ addiu $t3, %lo(skeleton_eyelid_door) # addiu $t3, $t3, -0x5f00 /* 07CFDC 7F0484AC 8C430004 */ lw $v1, 4($v0) -/* 07CFE0 7F0484B0 3C0D8004 */ lui $t5, %hi(skeleton_iris_door) +/* 07CFE0 7F0484B0 3C0D8004 */ lui $t5, %hi(skeleton_iris_door) /* 07CFE4 7F0484B4 8FA6039C */ lw $a2, 0x39c($sp) /* 07CFE8 7F0484B8 15630025 */ bne $t3, $v1, .L7F048550 /* 07CFEC 7F0484BC 25ADA15C */ addiu $t5, %lo(skeleton_iris_door) # addiu $t5, $t5, -0x5ea4 @@ -11904,7 +11895,7 @@ glabel object_interaction /* 07D0AC 7F04857C C4CC0084 */ lwc1 $f12, 0x84($a2) /* 07D0B0 7F048580 460A6002 */ mul.s $f0, $f12, $f10 /* 07D0B4 7F048584 4602003C */ c.lt.s $f0, $f2 -/* 07D0B8 7F048588 00000000 */ nop +/* 07D0B8 7F048588 00000000 */ nop /* 07D0BC 7F04858C 4502001F */ bc1fl .L7F04860C /* 07D0C0 7F048590 8FA80678 */ lw $t0, 0x678($sp) /* 07D0C4 7F048594 46001201 */ sub.s $f8, $f2, $f0 @@ -11926,7 +11917,7 @@ glabel object_interaction /* 07D104 7F0485D4 00003025 */ move $a2, $zero /* 07D108 7F0485D8 266F0008 */ addiu $t7, $s3, 8 /* 07D10C 7F0485DC 45000008 */ bc1f .L7F048600 -/* 07D110 7F0485E0 00000000 */ nop +/* 07D110 7F0485E0 00000000 */ nop /* 07D114 7F0485E4 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) /* 07D118 7F0485E8 AFAF0070 */ sw $t7, 0x70($sp) /* 07D11C 7F0485EC 0C002382 */ jal sndPlaySfx @@ -12021,7 +12012,7 @@ glabel object_interaction /* 07D270 7F048740 0FC16266 */ jal matrix_4x4_set_position /* 07D274 7F048744 27A503A4 */ addiu $a1, $sp, 0x3a4 /* 07D278 7F048748 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07D27C 7F04874C 00000000 */ nop +/* 07D27C 7F04874C 00000000 */ nop /* 07D280 7F048750 00402025 */ move $a0, $v0 /* 07D284 7F048754 27A503A4 */ addiu $a1, $sp, 0x3a4 /* 07D288 7F048758 0FC16063 */ jal matrix_4x4_multiply_homogeneous @@ -12043,9 +12034,9 @@ glabel object_interaction /* 07D2C8 7F048798 46146300 */ add.s $f12, $f12, $f20 .L7F04879C: /* 07D2CC 7F04879C 460CA03E */ c.le.s $f20, $f12 -/* 07D2D0 7F0487A0 00000000 */ nop +/* 07D2D0 7F0487A0 00000000 */ nop /* 07D2D4 7F0487A4 45000002 */ bc1f .L7F0487B0 -/* 07D2D8 7F0487A8 00000000 */ nop +/* 07D2D8 7F0487A8 00000000 */ nop /* 07D2DC 7F0487AC 46146301 */ sub.s $f12, $f12, $f20 .L7F0487B0: /* 07D2E0 7F0487B0 0FC1617F */ jal matrix_4x4_set_rotation_around_y @@ -12070,7 +12061,7 @@ glabel object_interaction /* 07D32C 7F0487FC 0FC16266 */ jal matrix_4x4_set_position /* 07D330 7F048800 8FA5006C */ lw $a1, 0x6c($sp) /* 07D334 7F048804 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07D338 7F048808 00000000 */ nop +/* 07D338 7F048808 00000000 */ nop /* 07D33C 7F04880C 00402025 */ move $a0, $v0 /* 07D340 7F048810 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place /* 07D344 7F048814 8FA5006C */ lw $a1, 0x6c($sp) @@ -12121,7 +12112,7 @@ glabel object_interaction /* 07D3F0 7F0488C0 0FC1629F */ jal matrix_scalar_multiply /* 07D3F4 7F0488C4 C5CC0014 */ lwc1 $f12, 0x14($t6) /* 07D3F8 7F0488C8 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 07D3FC 7F0488CC 00000000 */ nop +/* 07D3FC 7F0488CC 00000000 */ nop /* 07D400 7F0488D0 00402025 */ move $a0, $v0 /* 07D404 7F0488D4 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place /* 07D408 7F0488D8 8FA5006C */ lw $a1, 0x6c($sp) @@ -12314,9 +12305,9 @@ glabel object_interaction /* 07D6DC 7F048BAC 460A3202 */ mul.s $f8, $f6, $f10 /* 07D6E0 7F048BB0 44815000 */ mtc1 $at, $f10 /* 07D6E4 7F048BB4 46144102 */ mul.s $f4, $f8, $f20 -/* 07D6E8 7F048BB8 00000000 */ nop +/* 07D6E8 7F048BB8 00000000 */ nop /* 07D6EC 7F048BBC 46141182 */ mul.s $f6, $f2, $f20 -/* 07D6F0 7F048BC0 00000000 */ nop +/* 07D6F0 7F048BC0 00000000 */ nop /* 07D6F4 7F048BC4 460A3202 */ mul.s $f8, $f6, $f10 /* 07D6F8 7F048BC8 C626008C */ lwc1 $f6, 0x8c($s1) /* 07D6FC 7F048BCC 46082003 */ div.s $f0, $f4, $f8 @@ -12324,20 +12315,20 @@ glabel object_interaction /* 07D704 7F048BD4 E62A008C */ swc1 $f10, 0x8c($s1) /* 07D708 7F048BD8 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07D70C 7F048BDC 460CA03E */ c.le.s $f20, $f12 -/* 07D710 7F048BE0 00000000 */ nop +/* 07D710 7F048BE0 00000000 */ nop /* 07D714 7F048BE4 45000008 */ bc1f .L7F048C08 -/* 07D718 7F048BE8 00000000 */ nop +/* 07D718 7F048BE8 00000000 */ nop /* 07D71C 7F048BEC 46146101 */ sub.s $f4, $f12, $f20 .L7F048BF0: /* 07D720 7F048BF0 E624008C */ swc1 $f4, 0x8c($s1) /* 07D724 7F048BF4 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07D728 7F048BF8 460CA03E */ c.le.s $f20, $f12 -/* 07D72C 7F048BFC 00000000 */ nop +/* 07D72C 7F048BFC 00000000 */ nop /* 07D730 7F048C00 4503FFFB */ bc1tl .L7F048BF0 /* 07D734 7F048C04 46146101 */ sub.s $f4, $f12, $f20 .L7F048C08: /* 07D738 7F048C08 4616603C */ c.lt.s $f12, $f22 -/* 07D73C 7F048C0C 00000000 */ nop +/* 07D73C 7F048C0C 00000000 */ nop /* 07D740 7F048C10 45020009 */ bc1fl .L7F048C38 /* 07D744 7F048C14 C626008C */ lwc1 $f6, 0x8c($s1) /* 07D748 7F048C18 46146200 */ add.s $f8, $f12, $f20 @@ -12345,7 +12336,7 @@ glabel object_interaction /* 07D74C 7F048C1C E628008C */ swc1 $f8, 0x8c($s1) /* 07D750 7F048C20 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07D754 7F048C24 4616603C */ c.lt.s $f12, $f22 -/* 07D758 7F048C28 00000000 */ nop +/* 07D758 7F048C28 00000000 */ nop /* 07D75C 7F048C2C 4503FFFB */ bc1tl .L7F048C1C /* 07D760 7F048C30 46146200 */ add.s $f8, $f12, $f20 .L7F048C34: @@ -12355,7 +12346,7 @@ glabel object_interaction /* 07D76C 7F048C3C E62A008C */ swc1 $f10, 0x8c($s1) /* 07D770 7F048C40 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07D774 7F048C44 460CA03E */ c.le.s $f20, $f12 -/* 07D778 7F048C48 00000000 */ nop +/* 07D778 7F048C48 00000000 */ nop /* 07D77C 7F048C4C 45020009 */ bc1fl .L7F048C74 /* 07D780 7F048C50 4616603C */ c.lt.s $f12, $f22 /* 07D784 7F048C54 46146101 */ sub.s $f4, $f12, $f20 @@ -12363,20 +12354,20 @@ glabel object_interaction /* 07D788 7F048C58 E624008C */ swc1 $f4, 0x8c($s1) /* 07D78C 7F048C5C C62C008C */ lwc1 $f12, 0x8c($s1) /* 07D790 7F048C60 460CA03E */ c.le.s $f20, $f12 -/* 07D794 7F048C64 00000000 */ nop +/* 07D794 7F048C64 00000000 */ nop /* 07D798 7F048C68 4503FFFB */ bc1tl .L7F048C58 /* 07D79C 7F048C6C 46146101 */ sub.s $f4, $f12, $f20 /* 07D7A0 7F048C70 4616603C */ c.lt.s $f12, $f22 .L7F048C74: -/* 07D7A4 7F048C74 00000000 */ nop +/* 07D7A4 7F048C74 00000000 */ nop /* 07D7A8 7F048C78 45000008 */ bc1f .L7F048C9C -/* 07D7AC 7F048C7C 00000000 */ nop +/* 07D7AC 7F048C7C 00000000 */ nop /* 07D7B0 7F048C80 46146200 */ add.s $f8, $f12, $f20 .L7F048C84: /* 07D7B4 7F048C84 E628008C */ swc1 $f8, 0x8c($s1) /* 07D7B8 7F048C88 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07D7BC 7F048C8C 4616603C */ c.lt.s $f12, $f22 -/* 07D7C0 7F048C90 00000000 */ nop +/* 07D7C0 7F048C90 00000000 */ nop /* 07D7C4 7F048C94 4503FFFB */ bc1tl .L7F048C84 /* 07D7C8 7F048C98 46146200 */ add.s $f8, $f12, $f20 .L7F048C9C: @@ -12384,7 +12375,7 @@ glabel object_interaction /* 07D7D0 7F048CA0 27A502AC */ addiu $a1, $sp, 0x2ac /* 07D7D4 7F048CA4 C6260088 */ lwc1 $f6, 0x88($s1) /* 07D7D8 7F048CA8 4606B03C */ c.lt.s $f22, $f6 -/* 07D7DC 7F048CAC 00000000 */ nop +/* 07D7DC 7F048CAC 00000000 */ nop /* 07D7E0 7F048CB0 4502002B */ bc1fl .L7F048D60 /* 07D7E4 7F048CB4 C62C0090 */ lwc1 $f12, 0x90($s1) /* 07D7E8 7F048CB8 8FA80260 */ lw $t0, 0x260($sp) @@ -12417,14 +12408,14 @@ glabel object_interaction /* 07D850 7F048D20 C7A2024C */ lwc1 $f2, 0x24c($sp) /* 07D854 7F048D24 E6200090 */ swc1 $f0, 0x90($s1) /* 07D858 7F048D28 4602003C */ c.lt.s $f0, $f2 -/* 07D85C 7F048D2C 00000000 */ nop +/* 07D85C 7F048D2C 00000000 */ nop /* 07D860 7F048D30 45020003 */ bc1fl .L7F048D40 /* 07D864 7F048D34 C62A009C */ lwc1 $f10, 0x9c($s1) /* 07D868 7F048D38 E6220090 */ swc1 $f2, 0x90($s1) /* 07D86C 7F048D3C C62A009C */ lwc1 $f10, 0x9c($s1) .L7F048D40: /* 07D870 7F048D40 460AB03C */ c.lt.s $f22, $f10 -/* 07D874 7F048D44 00000000 */ nop +/* 07D874 7F048D44 00000000 */ nop /* 07D878 7F048D48 45020005 */ bc1fl .L7F048D60 /* 07D87C 7F048D4C C62C0090 */ lwc1 $f12, 0x90($s1) /* 07D880 7F048D50 C6280090 */ lwc1 $f8, 0x90($s1) @@ -12482,15 +12473,15 @@ glabel object_interaction /* 07D94C 7F048E1C 24010028 */ li $at, 40 .L7F048E20: /* 07D950 7F048E20 14410086 */ bne $v0, $at, .L7F04903C -/* 07D954 7F048E24 00000000 */ nop +/* 07D954 7F048E24 00000000 */ nop /* 07D958 7F048E28 8E8B0008 */ lw $t3, 8($s4) -/* 07D95C 7F048E2C 3C0A8005 */ lui $t2, %hi(g_ClockTimer) +/* 07D95C 7F048E2C 3C0A8005 */ lui $t2, %hi(g_ClockTimer) /* 07D960 7F048E30 8D4A8374 */ lw $t2, %lo(g_ClockTimer)($t2) /* 07D964 7F048E34 8D690008 */ lw $t1, 8($t3) /* 07D968 7F048E38 8FAE0678 */ lw $t6, 0x678($sp) /* 07D96C 7F048E3C 27B001B0 */ addiu $s0, $sp, 0x1b0 /* 07D970 7F048E40 8D390008 */ lw $t9, 8($t1) -/* 07D974 7F048E44 3C0F8003 */ lui $t7, %hi(D_80030B34) +/* 07D974 7F048E44 3C0F8003 */ lui $t7, %hi(D_80030B34) /* 07D978 7F048E48 02402025 */ move $a0, $s2 /* 07D97C 7F048E4C 8F2C0004 */ lw $t4, 4($t9) /* 07D980 7F048E50 26450040 */ addiu $a1, $s2, 0x40 @@ -12504,7 +12495,7 @@ glabel object_interaction /* 07D9A0 7F048E70 E6280088 */ swc1 $f8, 0x88($s1) /* 07D9A4 7F048E74 C6200088 */ lwc1 $f0, 0x88($s1) /* 07D9A8 7F048E78 4600A03E */ c.le.s $f20, $f0 -/* 07D9AC 7F048E7C 00000000 */ nop +/* 07D9AC 7F048E7C 00000000 */ nop /* 07D9B0 7F048E80 45020009 */ bc1fl .L7F048EA8 /* 07D9B4 7F048E84 4616003C */ c.lt.s $f0, $f22 /* 07D9B8 7F048E88 46140101 */ sub.s $f4, $f0, $f20 @@ -12512,12 +12503,12 @@ glabel object_interaction /* 07D9BC 7F048E8C E6240088 */ swc1 $f4, 0x88($s1) /* 07D9C0 7F048E90 C6200088 */ lwc1 $f0, 0x88($s1) /* 07D9C4 7F048E94 4600A03E */ c.le.s $f20, $f0 -/* 07D9C8 7F048E98 00000000 */ nop +/* 07D9C8 7F048E98 00000000 */ nop /* 07D9CC 7F048E9C 4503FFFB */ bc1tl .L7F048E8C /* 07D9D0 7F048EA0 46140101 */ sub.s $f4, $f0, $f20 /* 07D9D4 7F048EA4 4616003C */ c.lt.s $f0, $f22 .L7F048EA8: -/* 07D9D8 7F048EA8 00000000 */ nop +/* 07D9D8 7F048EA8 00000000 */ nop /* 07D9DC 7F048EAC 45020009 */ bc1fl .L7F048ED4 /* 07D9E0 7F048EB0 8E2D0014 */ lw $t5, 0x14($s1) /* 07D9E4 7F048EB4 46140180 */ add.s $f6, $f0, $f20 @@ -12525,7 +12516,7 @@ glabel object_interaction /* 07D9E8 7F048EB8 E6260088 */ swc1 $f6, 0x88($s1) /* 07D9EC 7F048EBC C6200088 */ lwc1 $f0, 0x88($s1) /* 07D9F0 7F048EC0 4616003C */ c.lt.s $f0, $f22 -/* 07D9F4 7F048EC4 00000000 */ nop +/* 07D9F4 7F048EC4 00000000 */ nop /* 07D9F8 7F048EC8 4503FFFB */ bc1tl .L7F048EB8 /* 07D9FC 7F048ECC 46140180 */ add.s $f6, $f0, $f20 .L7F048ED0: @@ -12536,7 +12527,7 @@ glabel object_interaction /* 07DA0C 7F048EDC 8DB80020 */ lw $t8, 0x20($t5) /* 07DA10 7F048EE0 02004825 */ move $t1, $s0 /* 07DA14 7F048EE4 13000015 */ beqz $t8, .L7F048F3C -/* 07DA18 7F048EE8 00000000 */ nop +/* 07DA18 7F048EE8 00000000 */ nop .L7F048EEC: /* 07DA1C 7F048EEC 8DE10000 */ lw $at, ($t7) /* 07DA20 7F048EF0 25EF000C */ addiu $t7, $t7, 0xc @@ -12566,7 +12557,7 @@ glabel object_interaction /* 07DA78 7F048F48 27A50200 */ addiu $a1, $sp, 0x200 /* 07DA7C 7F048F4C 000C5080 */ sll $t2, $t4, 2 /* 07DA80 7F048F50 05410006 */ bgez $t2, .L7F048F6C -/* 07DA84 7F048F54 00000000 */ nop +/* 07DA84 7F048F54 00000000 */ nop /* 07DA88 7F048F58 C62C0088 */ lwc1 $f12, 0x88($s1) /* 07DA8C 7F048F5C 0FC161A2 */ jal matrix_4x4_set_rotation_around_z /* 07DA90 7F048F60 27A50200 */ addiu $a1, $sp, 0x200 @@ -12649,7 +12640,7 @@ glabel object_interaction /* 07DBB4 7F049084 C62E00C8 */ lwc1 $f14, 0xc8($s1) /* 07DBB8 7F049088 46007387 */ neg.s $f14, $f14 /* 07DBBC 7F04908C 4616703C */ c.lt.s $f14, $f22 -/* 07DBC0 7F049090 00000000 */ nop +/* 07DBC0 7F049090 00000000 */ nop /* 07DBC4 7F049094 45020003 */ bc1fl .L7F0490A4 /* 07DBC8 7F049098 C62C00CC */ lwc1 $f12, 0xcc($s1) /* 07DBCC 7F04909C 46147380 */ add.s $f14, $f14, $f20 @@ -12657,7 +12648,7 @@ glabel object_interaction .L7F0490A4: /* 07DBD4 7F0490A4 46006307 */ neg.s $f12, $f12 /* 07DBD8 7F0490A8 4616603C */ c.lt.s $f12, $f22 -/* 07DBDC 7F0490AC 00000000 */ nop +/* 07DBDC 7F0490AC 00000000 */ nop /* 07DBE0 7F0490B0 45020003 */ bc1fl .L7F0490C0 /* 07DBE4 7F0490B4 AFA5006C */ sw $a1, 0x6c($sp) /* 07DBE8 7F0490B8 46146300 */ add.s $f12, $f12, $f20 @@ -12700,7 +12691,7 @@ glabel object_interaction /* 07DC78 7F049148 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place /* 07DC7C 7F04914C 8FA50068 */ lw $a1, 0x68($sp) /* 07DC80 7F049150 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 07DC84 7F049154 00000000 */ nop +/* 07DC84 7F049154 00000000 */ nop /* 07DC88 7F049158 27B0016C */ addiu $s0, $sp, 0x16c /* 07DC8C 7F04915C 02003025 */ move $a2, $s0 /* 07DC90 7F049160 00402025 */ move $a0, $v0 @@ -12785,7 +12776,7 @@ glabel object_interaction /* 07DDB0 7F049280 468021A0 */ cvt.s.w $f6, $f4 /* 07DDB4 7F049284 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07DDB8 7F049288 44815000 */ mtc1 $at, $f10 -/* 07DDBC 7F04928C 00000000 */ nop +/* 07DDBC 7F04928C 00000000 */ nop /* 07DDC0 7F049290 460A3180 */ add.s $f6, $f6, $f10 .L7F049294: /* 07DDC4 7F049294 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -12806,7 +12797,7 @@ glabel object_interaction /* 07DE00 7F0492D0 46083100 */ add.s $f4, $f6, $f8 /* 07DE04 7F0492D4 44052000 */ mfc1 $a1, $f4 /* 07DE08 7F0492D8 0FC13842 */ jal maybe_detonate_object -/* 07DE0C 7F0492DC 00000000 */ nop +/* 07DE0C 7F0492DC 00000000 */ nop .L7F0492E0: /* 07DE10 7F0492E0 8FAF0678 */ lw $t7, 0x678($sp) /* 07DE14 7F0492E4 51E0020D */ beql $t7, $zero, .L7F049B1C @@ -12818,15 +12809,15 @@ glabel object_interaction /* 07DE2C 7F0492FC 0FC14E8F */ jal sub_GAME_7F053A3C /* 07DE30 7F049300 8E640004 */ lw $a0, 4($s3) /* 07DE34 7F049304 10000202 */ b .L7F049B10 -/* 07DE38 7F049308 00000000 */ nop +/* 07DE38 7F049308 00000000 */ nop /* 07DE3C 7F04930C 2401000D */ li $at, 13 .L7F049310: /* 07DE40 7F049310 144101FF */ bne $v0, $at, .L7F049B10 -/* 07DE44 7F049314 00000000 */ nop +/* 07DE44 7F049314 00000000 */ nop /* 07DE48 7F049318 0FC2FF01 */ jal lvlGetControlsLockedFlag -/* 07DE4C 7F04931C 00000000 */ nop +/* 07DE4C 7F04931C 00000000 */ nop /* 07DE50 7F049320 144001FB */ bnez $v0, .L7F049B10 -/* 07DE54 7F049324 00000000 */ nop +/* 07DE54 7F049324 00000000 */ nop /* 07DE58 7F049328 8E700004 */ lw $s0, 4($s3) /* 07DE5C 7F04932C AFA0013C */ sw $zero, 0x13c($sp) /* 07DE60 7F049330 AFA00138 */ sw $zero, 0x138($sp) @@ -12838,7 +12829,7 @@ glabel object_interaction /* 07DE78 7F049348 058201E0 */ bltzl $t4, .L7F049ACC /* 07DE7C 7F04934C 8E980008 */ lw $t8, 8($s4) /* 07DE80 7F049350 8E0A00AC */ lw $t2, 0xac($s0) -/* 07DE84 7F049354 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) +/* 07DE84 7F049354 3C0C8005 */ lui $t4, %hi(g_GlobalTimer) /* 07DE88 7F049358 254E0001 */ addiu $t6, $t2, 1 /* 07DE8C 7F04935C 31CD0001 */ andi $t5, $t6, 1 /* 07DE90 7F049360 AE0E00AC */ sw $t6, 0xac($s0) @@ -12862,7 +12853,7 @@ glabel object_interaction /* 07DED4 7F0493A4 50800008 */ beql $a0, $zero, .L7F0493C8 /* 07DED8 7F0493A8 8E0400C8 */ lw $a0, 0xc8($s0) /* 07DEDC 7F0493AC 0C00237C */ jal sndGetPlayingState -/* 07DEE0 7F0493B0 00000000 */ nop +/* 07DEE0 7F0493B0 00000000 */ nop /* 07DEE4 7F0493B4 50400004 */ beql $v0, $zero, .L7F0493C8 /* 07DEE8 7F0493B8 8E0400C8 */ lw $a0, 0xc8($s0) /* 07DEEC 7F0493BC 0C002408 */ jal sndDeactivate @@ -12872,7 +12863,7 @@ glabel object_interaction /* 07DEF8 7F0493C8 50800008 */ beql $a0, $zero, .L7F0493EC /* 07DEFC 7F0493CC 8E0A00C4 */ lw $t2, 0xc4($s0) /* 07DF00 7F0493D0 0C00237C */ jal sndGetPlayingState -/* 07DF04 7F0493D4 00000000 */ nop +/* 07DF04 7F0493D4 00000000 */ nop /* 07DF08 7F0493D8 50400004 */ beql $v0, $zero, .L7F0493EC /* 07DF0C 7F0493DC 8E0A00C4 */ lw $t2, 0xc4($s0) /* 07DF10 7F0493E0 0C002408 */ jal sndDeactivate @@ -12891,7 +12882,7 @@ glabel object_interaction /* 07DF40 7F049410 0FC14E84 */ jal chrobjSndCreatePostEventDefault /* 07DF44 7F049414 8FA50070 */ lw $a1, 0x70($sp) /* 07DF48 7F049418 1000000D */ b .L7F049450 -/* 07DF4C 7F04941C 00000000 */ nop +/* 07DF4C 7F04941C 00000000 */ nop .L7F049420: /* 07DF50 7F049420 8E0D00C8 */ lw $t5, 0xc8($s0) /* 07DF54 7F049424 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) @@ -12906,7 +12897,7 @@ glabel object_interaction /* 07DF78 7F049448 0FC14E84 */ jal chrobjSndCreatePostEventDefault /* 07DF7C 7F04944C 8FA50070 */ lw $a1, 0x70($sp) .L7F049450: -/* 07DF80 7F049450 3C088005 */ lui $t0, %hi(g_GlobalTimer) +/* 07DF80 7F049450 3C088005 */ lui $t0, %hi(g_GlobalTimer) /* 07DF84 7F049454 8D08837C */ lw $t0, %lo(g_GlobalTimer)($t0) /* 07DF88 7F049458 250B0002 */ addiu $t3, $t0, 2 /* 07DF8C 7F04945C AE0B00C0 */ sw $t3, 0xc0($s0) @@ -12981,7 +12972,7 @@ glabel object_interaction /* 07E094 7F049564 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback /* 07E098 7F049568 E7A40010 */ swc1 $f4, 0x10($sp) /* 07E09C 7F04956C 1440000E */ bnez $v0, .L7F0495A8 -/* 07E0A0 7F049570 00000000 */ nop +/* 07E0A0 7F049570 00000000 */ nop /* 07E0A4 7F049574 C66A0008 */ lwc1 $f10, 8($s3) /* 07E0A8 7F049578 E7AA012C */ swc1 $f10, 0x12c($sp) /* 07E0AC 7F04957C C666000C */ lwc1 $f6, 0xc($s3) @@ -13076,7 +13067,7 @@ glabel object_interaction /* 07E204 7F0496D4 46065201 */ sub.s $f8, $f10, $f6 /* 07E208 7F0496D8 E7A80118 */ swc1 $f8, 0x118($sp) .L7F0496DC: -/* 07E20C 7F0496DC 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) +/* 07E20C 7F0496DC 3C0F8005 */ lui $t7, %hi(g_GlobalTimer) /* 07E210 7F0496E0 8DEF837C */ lw $t7, %lo(g_GlobalTimer)($t7) /* 07E214 7F0496E4 8E0900BC */ lw $t1, 0xbc($s0) /* 07E218 7F0496E8 27B10110 */ addiu $s1, $sp, 0x110 @@ -13093,7 +13084,7 @@ glabel object_interaction /* 07E244 7F049714 C7A60134 */ lwc1 $f6, 0x134($sp) /* 07E248 7F049718 46062301 */ sub.s $f12, $f4, $f6 /* 07E24C 7F04971C 46000102 */ mul.s $f4, $f0, $f0 -/* 07E250 7F049720 00000000 */ nop +/* 07E250 7F049720 00000000 */ nop /* 07E254 7F049724 46021282 */ mul.s $f10, $f2, $f2 /* 07E258 7F049728 460A2100 */ add.s $f4, $f4, $f10 /* 07E25C 7F04972C 460C6282 */ mul.s $f10, $f12, $f12 @@ -13111,11 +13102,11 @@ glabel object_interaction /* 07E28C 7F04975C 460C6182 */ mul.s $f6, $f12, $f12 /* 07E290 7F049760 46065100 */ add.s $f4, $f10, $f6 /* 07E294 7F049764 4604A03E */ c.le.s $f20, $f4 -/* 07E298 7F049768 00000000 */ nop +/* 07E298 7F049768 00000000 */ nop /* 07E29C 7F04976C 45000033 */ bc1f .L7F04983C -/* 07E2A0 7F049770 00000000 */ nop +/* 07E2A0 7F049770 00000000 */ nop /* 07E2A4 7F049774 0FC227A9 */ jal bondviewGetIfCurrentPlayerDamageShowTime -/* 07E2A8 7F049778 00000000 */ nop +/* 07E2A8 7F049778 00000000 */ nop /* 07E2AC 7F04977C 54400030 */ bnezl $v0, .L7F049840 /* 07E2B0 7F049780 8FB9011C */ lw $t9, 0x11c($sp) /* 07E2B4 7F049784 0C007DF8 */ jal sqrtf @@ -13135,7 +13126,7 @@ glabel object_interaction /* 07E2EC 7F0497BC C60A00D4 */ lwc1 $f10, 0xd4($s0) /* 07E2F0 7F0497C0 46006203 */ div.s $f8, $f12, $f0 /* 07E2F4 7F0497C4 46081082 */ mul.s $f2, $f2, $f8 -/* 07E2F8 7F0497C8 00000000 */ nop +/* 07E2F8 7F0497C8 00000000 */ nop /* 07E2FC 7F0497CC C60A00D4 */ lwc1 $f10, 0xd4($s0) .L7F0497D0: /* 07E300 7F0497D0 3C013F80 */ li $at, 0x3F800000 # 1.000000 @@ -13144,7 +13135,7 @@ glabel object_interaction /* 07E30C 7F0497DC E60600D4 */ swc1 $f6, 0xd4($s0) /* 07E310 7F0497E0 C60400D4 */ lwc1 $f4, 0xd4($s0) /* 07E314 7F0497E4 4604403E */ c.le.s $f8, $f4 -/* 07E318 7F0497E8 00000000 */ nop +/* 07E318 7F0497E8 00000000 */ nop /* 07E31C 7F0497EC 45020014 */ bc1fl .L7F049840 /* 07E320 7F0497F0 8FB9011C */ lw $t9, 0x11c($sp) /* 07E324 7F0497F4 0FC177E1 */ jal bondwalkItemGetDestructionAmount @@ -13159,7 +13150,7 @@ glabel object_interaction /* 07E348 7F049818 24070001 */ li $a3, 1 /* 07E34C 7F04981C 46043302 */ mul.s $f12, $f6, $f4 /* 07E350 7F049820 0FC22793 */ jal bondviewCallRecordDamageKills -/* 07E354 7F049824 00000000 */ nop +/* 07E354 7F049824 00000000 */ nop /* 07E358 7F049828 0FC227A9 */ jal bondviewGetIfCurrentPlayerDamageShowTime /* 07E35C 7F04982C E61600D4 */ swc1 $f22, 0xd4($s0) /* 07E360 7F049830 50400003 */ beql $v0, $zero, .L7F049840 @@ -13288,7 +13279,7 @@ glabel object_interaction /* 07E52C 7F0499FC 468032A0 */ cvt.s.w $f10, $f6 /* 07E530 7F049A00 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07E534 7F049A04 44812000 */ mtc1 $at, $f4 -/* 07E538 7F049A08 00000000 */ nop +/* 07E538 7F049A08 00000000 */ nop /* 07E53C 7F049A0C 46045280 */ add.s $f10, $f10, $f4 .L7F049A10: /* 07E540 7F049A10 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -13313,9 +13304,9 @@ glabel object_interaction /* 07E588 7F049A58 C42A2B90 */ lwc1 $f10, %lo(D_80052B90)($at) /* 07E58C 7F049A5C 3C018005 */ lui $at, %hi(D_80052B94) /* 07E590 7F049A60 4600503C */ c.lt.s $f10, $f0 -/* 07E594 7F049A64 00000000 */ nop +/* 07E594 7F049A64 00000000 */ nop /* 07E598 7F049A68 45000003 */ bc1f .L7F049A78 -/* 07E59C 7F049A6C 00000000 */ nop +/* 07E59C 7F049A6C 00000000 */ nop /* 07E5A0 7F049A70 C4262B94 */ lwc1 $f6, %lo(D_80052B94)($at) /* 07E5A4 7F049A74 E4660024 */ swc1 $f6, 0x24($v1) .L7F049A78: @@ -13327,7 +13318,7 @@ glabel object_interaction /* 07E5BC 7F049A8C 46802220 */ cvt.s.w $f8, $f4 /* 07E5C0 7F049A90 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07E5C4 7F049A94 44815000 */ mtc1 $at, $f10 -/* 07E5C8 7F049A98 00000000 */ nop +/* 07E5C8 7F049A98 00000000 */ nop /* 07E5CC 7F049A9C 460A4200 */ add.s $f8, $f8, $f10 .L7F049AA0: /* 07E5D0 7F049AA0 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -13356,7 +13347,7 @@ glabel object_interaction /* 07E624 7F049AF4 8C65001C */ lw $a1, 0x1c($v1) .L7F049AF8: /* 07E628 7F049AF8 10A00005 */ beqz $a1, .L7F049B10 -/* 07E62C 7F049AFC 00000000 */ nop +/* 07E62C 7F049AFC 00000000 */ nop /* 07E630 7F049B00 0FC1B1E7 */ jal modelGetNodeRwData /* 07E634 7F049B04 02802025 */ move $a0, $s4 /* 07E638 7F049B08 8FAF0138 */ lw $t7, 0x138($sp) @@ -13577,7 +13568,7 @@ glabel object_interaction /* 07A2E8 7F045778 AFAF0680 */ sw $t7, 0x680($sp) .Ljp7F04577C: /* 07A2EC 7F04577C 0FC26F3C */ jal get_cur_playernum -/* 07A2F0 7F045780 00000000 */ nop +/* 07A2F0 7F045780 00000000 */ nop /* 07A2F4 7F045784 0FC2701E */ jal sub_GAME_7F09B4D8 /* 07A2F8 7F045788 00402025 */ move $a0, $v0 /* 07A2FC 7F04578C 2C590001 */ sltiu $t9, $v0, 1 @@ -13591,7 +13582,7 @@ glabel object_interaction /* 07A31C 7F0457AC 5080000C */ beql $a0, $zero, .Ljp7F0457E0 /* 07A320 7F0457B0 8FAA0680 */ lw $t2, 0x680($sp) /* 07A324 7F0457B4 0FC26F3F */ jal getPlayerPointerIndex -/* 07A328 7F0457B8 00000000 */ nop +/* 07A328 7F0457B8 00000000 */ nop /* 07A32C 7F0457BC 04400007 */ bltz $v0, .Ljp7F0457DC /* 07A330 7F0457C0 3C098008 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8008 /* 07A334 7F0457C4 8D29A120 */ lw $t1, %lo(g_CurrentPlayer)($t1) @@ -13722,13 +13713,13 @@ glabel object_interaction /* 07A504 7F045994 8E030000 */ lw $v1, ($s0) /* 07A508 7F045998 30680020 */ andi $t0, $v1, 0x20 /* 07A50C 7F04599C 1100004B */ beqz $t0, .Ljp7F045ACC -/* 07A510 7F0459A0 00000000 */ nop +/* 07A510 7F0459A0 00000000 */ nop /* 07A514 7F0459A4 C4322AC8 */ lwc1 $f18, %lo(rocket_initial_gravity_modifier)($at) /* 07A518 7F0459A8 C600001C */ lwc1 $f0, 0x1c($s0) /* 07A51C 7F0459AC 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) # $v0, 0x8005 /* 07A520 7F0459B0 244283B4 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c4c /* 07A524 7F0459B4 4612003C */ c.lt.s $f0, $f18 -/* 07A528 7F0459B8 00000000 */ nop +/* 07A528 7F0459B8 00000000 */ nop /* 07A52C 7F0459BC 4502001C */ bc1fl .Ljp7F045A30 /* 07A530 7F0459C0 C60000B0 */ lwc1 $f0, 0xb0($s0) /* 07A534 7F0459C4 C6080014 */ lwc1 $f8, 0x14($s0) @@ -13751,9 +13742,9 @@ glabel object_interaction /* 07A578 7F045A08 E606001C */ swc1 $f6, 0x1c($s0) /* 07A57C 7F045A0C C604001C */ lwc1 $f4, 0x1c($s0) /* 07A580 7F045A10 4604903C */ c.lt.s $f18, $f4 -/* 07A584 7F045A14 00000000 */ nop +/* 07A584 7F045A14 00000000 */ nop /* 07A588 7F045A18 45000002 */ bc1f .Ljp7F045A24 -/* 07A58C 7F045A1C 00000000 */ nop +/* 07A58C 7F045A1C 00000000 */ nop /* 07A590 7F045A20 E612001C */ swc1 $f18, 0x1c($s0) .Ljp7F045A24: /* 07A594 7F045A24 10000029 */ b .Ljp7F045ACC @@ -13762,7 +13753,7 @@ glabel object_interaction .Ljp7F045A30: /* 07A5A0 7F045A30 C7A806A0 */ lwc1 $f8, 0x6a0($sp) /* 07A5A4 7F045A34 4600403C */ c.lt.s $f8, $f0 -/* 07A5A8 7F045A38 00000000 */ nop +/* 07A5A8 7F045A38 00000000 */ nop /* 07A5AC 7F045A3C 45000019 */ bc1f .Ljp7F045AA4 /* 07A5B0 7F045A40 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 /* 07A5B4 7F045A44 C42683B4 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) @@ -13922,7 +13913,7 @@ glabel object_interaction /* 07A7FC 7F045C8C 3C038003 */ lui $v1, %hi(D_80030B0C) # $v1, 0x8003 /* 07A800 7F045C90 8C630B4C */ lw $v1, %lo(D_80030B0C)($v1) /* 07A804 7F045C94 10600007 */ beqz $v1, .Ljp7F045CB4 -/* 07A808 7F045C98 00000000 */ nop +/* 07A808 7F045C98 00000000 */ nop /* 07A80C 7F045C9C 90620000 */ lbu $v0, ($v1) /* 07A810 7F045CA0 24010003 */ li $at, 3 /* 07A814 7F045CA4 1041003A */ beq $v0, $at, .Ljp7F045D90 @@ -13936,7 +13927,7 @@ glabel object_interaction /* 07A830 7F045CC0 8C580064 */ lw $t8, 0x64($v0) /* 07A834 7F045CC4 33080080 */ andi $t0, $t8, 0x80 /* 07A838 7F045CC8 11000002 */ beqz $t0, .Ljp7F045CD4 -/* 07A83C 7F045CCC 00000000 */ nop +/* 07A83C 7F045CCC 00000000 */ nop /* 07A840 7F045CD0 24040001 */ li $a0, 1 .Ljp7F045CD4: /* 07A844 7F045CD4 5480002F */ bnezl $a0, .Ljp7F045D94 @@ -14046,7 +14037,7 @@ glabel object_interaction /* 07A9D4 7F045E64 C610008C */ lwc1 $f16, 0x8c($s0) /* 07A9D8 7F045E68 C7AA0628 */ lwc1 $f10, 0x628($sp) /* 07A9DC 7F045E6C 4610B03C */ c.lt.s $f22, $f16 -/* 07A9E0 7F045E70 00000000 */ nop +/* 07A9E0 7F045E70 00000000 */ nop /* 07A9E4 7F045E74 4502001D */ bc1fl .Ljp7F045EEC /* 07A9E8 7F045E78 8E190000 */ lw $t9, ($s0) /* 07A9EC 7F045E7C C6020004 */ lwc1 $f2, 4($s0) @@ -14064,7 +14055,7 @@ glabel object_interaction /* 07AA1C 7F045EAC 46068200 */ add.s $f8, $f16, $f6 /* 07AA20 7F045EB0 46004107 */ neg.s $f4, $f8 /* 07AA24 7F045EB4 46047382 */ mul.s $f14, $f14, $f4 -/* 07AA28 7F045EB8 00000000 */ nop +/* 07AA28 7F045EB8 00000000 */ nop /* 07AA2C 7F045EBC 460A7182 */ mul.s $f6, $f14, $f10 /* 07AA30 7F045EC0 46061200 */ add.s $f8, $f2, $f6 /* 07AA34 7F045EC4 E6080004 */ swc1 $f8, 4($s0) @@ -14244,7 +14235,7 @@ glabel object_interaction /* 07ACD0 7F046160 C610008C */ lwc1 $f16, 0x8c($s0) /* 07ACD4 7F046164 C7A40628 */ lwc1 $f4, 0x628($sp) /* 07ACD8 7F046168 4610B03C */ c.lt.s $f22, $f16 -/* 07ACDC 7F04616C 00000000 */ nop +/* 07ACDC 7F04616C 00000000 */ nop /* 07ACE0 7F046170 4502002B */ bc1fl .Ljp7F046220 /* 07ACE4 7F046174 8E090000 */ lw $t1, ($s0) /* 07ACE8 7F046178 C6020004 */ lwc1 $f2, 4($s0) @@ -14263,7 +14254,7 @@ glabel object_interaction /* 07AD1C 7F0461AC 46088280 */ add.s $f10, $f16, $f8 /* 07AD20 7F0461B0 46005187 */ neg.s $f6, $f10 /* 07AD24 7F0461B4 46067382 */ mul.s $f14, $f14, $f6 -/* 07AD28 7F0461B8 00000000 */ nop +/* 07AD28 7F0461B8 00000000 */ nop /* 07AD2C 7F0461BC 46047202 */ mul.s $f8, $f14, $f4 /* 07AD30 7F0461C0 46081280 */ add.s $f10, $f2, $f8 /* 07AD34 7F0461C4 E60A0004 */ swc1 $f10, 4($s0) @@ -14279,12 +14270,12 @@ glabel object_interaction /* 07AD5C 7F0461EC C6080008 */ lwc1 $f8, 8($s0) /* 07AD60 7F0461F0 24080001 */ li $t0, 1 /* 07AD64 7F0461F4 4608B03E */ c.le.s $f22, $f8 -/* 07AD68 7F0461F8 00000000 */ nop +/* 07AD68 7F0461F8 00000000 */ nop /* 07AD6C 7F0461FC 45030007 */ bc1tl .Ljp7F04621C /* 07AD70 7F046200 AFA80614 */ sw $t0, 0x614($sp) /* 07AD74 7F046204 C62A005C */ lwc1 $f10, 0x5c($s1) /* 07AD78 7F046208 460AA03E */ c.le.s $f20, $f10 -/* 07AD7C 7F04620C 00000000 */ nop +/* 07AD7C 7F04620C 00000000 */ nop /* 07AD80 7F046210 45020003 */ bc1fl .Ljp7F046220 /* 07AD84 7F046214 8E090000 */ lw $t1, ($s0) /* 07AD88 7F046218 AFA80614 */ sw $t0, 0x614($sp) @@ -14294,7 +14285,7 @@ glabel object_interaction /* 07AD90 7F046220 C7B40644 */ lwc1 $f20, 0x644($sp) /* 07AD94 7F046224 312B0008 */ andi $t3, $t1, 8 /* 07AD98 7F046228 15600014 */ bnez $t3, .Ljp7F04627C -/* 07AD9C 7F04622C 00000000 */ nop +/* 07AD9C 7F04622C 00000000 */ nop /* 07ADA0 7F046230 8E640014 */ lw $a0, 0x14($s3) /* 07ADA4 7F046234 8E650008 */ lw $a1, 8($s3) /* 07ADA8 7F046238 0FC2CD48 */ jal stanGetPositionYValue @@ -14308,9 +14299,9 @@ glabel object_interaction /* 07ADC8 7F046258 C666000C */ lwc1 $f6, 0xc($s3) /* 07ADCC 7F04625C 00006025 */ move $t4, $zero /* 07ADD0 7F046260 4604303C */ c.lt.s $f6, $f4 -/* 07ADD4 7F046264 00000000 */ nop +/* 07ADD4 7F046264 00000000 */ nop /* 07ADD8 7F046268 45000002 */ bc1f .Ljp7F046274 -/* 07ADDC 7F04626C 00000000 */ nop +/* 07ADDC 7F04626C 00000000 */ nop /* 07ADE0 7F046270 240C0001 */ li $t4, 1 .Ljp7F046274: /* 07ADE4 7F046274 10000001 */ b .Ljp7F04627C @@ -14338,7 +14329,7 @@ glabel object_interaction /* 07AE2C 7F0462BC 8FA90614 */ lw $t1, 0x614($sp) /* 07AE30 7F0462C0 8FAB0618 */ lw $t3, 0x618($sp) /* 07AE34 7F0462C4 15000003 */ bnez $t0, .Ljp7F0462D4 -/* 07AE38 7F0462C8 00000000 */ nop +/* 07AE38 7F0462C8 00000000 */ nop /* 07AE3C 7F0462CC 5120003A */ beql $t1, $zero, .Ljp7F0463B8 /* 07AE40 7F0462D0 92390003 */ lbu $t9, 3($s1) .Ljp7F0462D4: @@ -14370,9 +14361,9 @@ glabel object_interaction .Ljp7F046330: /* 07AEA0 7F046330 C610008C */ lwc1 $f16, 0x8c($s0) /* 07AEA4 7F046334 4610B03C */ c.lt.s $f22, $f16 -/* 07AEA8 7F046338 00000000 */ nop +/* 07AEA8 7F046338 00000000 */ nop /* 07AEAC 7F04633C 4500001B */ bc1f .Ljp7F0463AC -/* 07AEB0 7F046340 00000000 */ nop +/* 07AEB0 7F046340 00000000 */ nop /* 07AEB4 7F046344 C6040008 */ lwc1 $f4, 8($s0) /* 07AEB8 7F046348 46008207 */ neg.s $f8, $f16 /* 07AEBC 7F04634C 3C018005 */ lui $at, %hi(D_80052AA8) # $at, 0x8005 @@ -14381,18 +14372,18 @@ glabel object_interaction /* 07AEC8 7F046358 E60A0008 */ swc1 $f10, 8($s0) /* 07AECC 7F04635C C6060008 */ lwc1 $f6, 8($s0) /* 07AED0 7F046360 4600303C */ c.lt.s $f6, $f0 -/* 07AED4 7F046364 00000000 */ nop +/* 07AED4 7F046364 00000000 */ nop /* 07AED8 7F046368 45020013 */ bc1fl .Ljp7F0463B8 /* 07AEDC 7F04636C 92390003 */ lbu $t9, 3($s1) /* 07AEE0 7F046370 8E0A0000 */ lw $t2, ($s0) /* 07AEE4 7F046374 02202025 */ move $a0, $s1 /* 07AEE8 7F046378 314D0002 */ andi $t5, $t2, 2 /* 07AEEC 7F04637C 11A00007 */ beqz $t5, .Ljp7F04639C -/* 07AEF0 7F046380 00000000 */ nop +/* 07AEF0 7F046380 00000000 */ nop /* 07AEF4 7F046384 8E0F0090 */ lw $t7, 0x90($s0) /* 07AEF8 7F046388 24010001 */ li $at, 1 /* 07AEFC 7F04638C 15E10003 */ bne $t7, $at, .Ljp7F04639C -/* 07AF00 7F046390 00000000 */ nop +/* 07AF00 7F046390 00000000 */ nop /* 07AF04 7F046394 10000007 */ b .Ljp7F0463B4 /* 07AF08 7F046398 E6000008 */ swc1 $f0, 8($s0) .Ljp7F04639C: @@ -14442,7 +14433,7 @@ glabel object_interaction /* 07AFA0 7F046430 C4242ADC */ lwc1 $f4, %lo(D_80052AAC)($at) /* 07AFA4 7F046434 460A3380 */ add.s $f14, $f6, $f10 /* 07AFA8 7F046438 460E203C */ c.lt.s $f4, $f14 -/* 07AFAC 7F04643C 00000000 */ nop +/* 07AFAC 7F04643C 00000000 */ nop /* 07AFB0 7F046440 45020005 */ bc1fl .Ljp7F046458 /* 07AFB4 7F046444 8E0900A8 */ lw $t1, 0xa8($s0) /* 07AFB8 7F046448 E6160010 */ swc1 $f22, 0x10($s0) @@ -14465,7 +14456,7 @@ glabel object_interaction /* 07AFF4 7F046484 2667002C */ addiu $a3, $s3, 0x2c /* 07AFF8 7F046488 31CA0008 */ andi $t2, $t6, 8 /* 07AFFC 7F04648C 000A682B */ sltu $t5, $zero, $t2 -/* 07B000 7F046490 0FC27CA9 */ jal sub_GAME_7F09E700 +/* 07B000 7F046490 0FC27CA9 */ jal explosionCreateSmoke /* 07B004 7F046494 AFAD0010 */ sw $t5, 0x10($sp) /* 07B008 7F046498 10000013 */ b .Ljp7F0464E8 /* 07B00C 7F04649C 8FAB066C */ lw $t3, 0x66c($sp) @@ -14487,7 +14478,7 @@ glabel object_interaction /* 07B040 7F0464D0 33080008 */ andi $t0, $t8, 8 /* 07B044 7F0464D4 0008482B */ sltu $t1, $zero, $t0 /* 07B048 7F0464D8 AFA90010 */ sw $t1, 0x10($sp) -/* 07B04C 7F0464DC 0FC27CA9 */ jal sub_GAME_7F09E700 +/* 07B04C 7F0464DC 0FC27CA9 */ jal explosionCreateSmoke /* 07B050 7F0464E0 2667002C */ addiu $a3, $s3, 0x2c .Ljp7F0464E4: /* 07B054 7F0464E4 8FAB066C */ lw $t3, 0x66c($sp) @@ -14594,7 +14585,7 @@ glabel object_interaction /* 07B1C4 7F046654 2406000A */ li $a2, 10 /* 07B1C8 7F046658 8C450014 */ lw $a1, 0x14($v0) /* 07B1CC 7F04665C AFAD0010 */ sw $t5, 0x10($sp) -/* 07B1D0 7F046660 0FC27CA9 */ jal sub_GAME_7F09E700 +/* 07B1D0 7F046660 0FC27CA9 */ jal explosionCreateSmoke /* 07B1D4 7F046664 2447002C */ addiu $a3, $v0, 0x2c /* 07B1D8 7F046668 100000ED */ b .Ljp7F046A20 /* 07B1DC 7F04666C 8FAB0698 */ lw $t3, 0x698($sp) @@ -14628,7 +14619,7 @@ glabel object_interaction /* 07B244 7F0466D4 C6000060 */ lwc1 $f0, 0x60($s0) /* 07B248 7F0466D8 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 07B24C 7F0466DC 4600403C */ c.lt.s $f8, $f0 -/* 07B250 7F0466E0 00000000 */ nop +/* 07B250 7F0466E0 00000000 */ nop /* 07B254 7F0466E4 45030006 */ bc1tl .Ljp7F046700 /* 07B258 7F0466E8 44813000 */ mtc1 $at, $f6 /* 07B25C 7F0466EC 8E190000 */ lw $t9, ($s0) @@ -14637,7 +14628,7 @@ glabel object_interaction /* 07B268 7F0466F8 44060000 */ mfc1 $a2, $f0 /* 07B26C 7F0466FC 44813000 */ mtc1 $at, $f6 .Ljp7F046700: -/* 07B270 7F046700 00000000 */ nop +/* 07B270 7F046700 00000000 */ nop /* 07B274 7F046704 E6060060 */ swc1 $f6, 0x60($s0) /* 07B278 7F046708 C6000060 */ lwc1 $f0, 0x60($s0) /* 07B27C 7F04670C 44060000 */ mfc1 $a2, $f0 @@ -14661,29 +14652,29 @@ glabel object_interaction /* 07B2C0 7F046750 C60A0004 */ lwc1 $f10, 4($s0) .Ljp7F046754: /* 07B2C4 7F046754 460AB032 */ c.eq.s $f22, $f10 -/* 07B2C8 7F046758 00000000 */ nop +/* 07B2C8 7F046758 00000000 */ nop /* 07B2CC 7F04675C 4502000F */ bc1fl .Ljp7F04679C /* 07B2D0 7F046760 8E080000 */ lw $t0, ($s0) /* 07B2D4 7F046764 C604000C */ lwc1 $f4, 0xc($s0) /* 07B2D8 7F046768 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 07B2DC 7F04676C 4604B032 */ c.eq.s $f22, $f4 -/* 07B2E0 7F046770 00000000 */ nop +/* 07B2E0 7F046770 00000000 */ nop /* 07B2E4 7F046774 45020009 */ bc1fl .Ljp7F04679C /* 07B2E8 7F046778 8E080000 */ lw $t0, ($s0) /* 07B2EC 7F04677C C6080060 */ lwc1 $f8, 0x60($s0) /* 07B2F0 7F046780 44813000 */ mtc1 $at, $f6 -/* 07B2F4 7F046784 00000000 */ nop +/* 07B2F4 7F046784 00000000 */ nop /* 07B2F8 7F046788 4606403C */ c.lt.s $f8, $f6 -/* 07B2FC 7F04678C 00000000 */ nop +/* 07B2FC 7F04678C 00000000 */ nop /* 07B300 7F046790 45000088 */ bc1f .Ljp7F0469B4 -/* 07B304 7F046794 00000000 */ nop +/* 07B304 7F046794 00000000 */ nop /* 07B308 7F046798 8E080000 */ lw $t0, ($s0) .Ljp7F04679C: /* 07B30C 7F04679C 02202025 */ move $a0, $s1 /* 07B310 7F0467A0 262B0018 */ addiu $t3, $s1, 0x18 /* 07B314 7F0467A4 31090008 */ andi $t1, $t0, 8 /* 07B318 7F0467A8 15200082 */ bnez $t1, .Ljp7F0469B4 -/* 07B31C 7F0467AC 00000000 */ nop +/* 07B31C 7F0467AC 00000000 */ nop /* 07B320 7F0467B0 AFAB0074 */ sw $t3, 0x74($sp) /* 07B324 7F0467B4 0FC100DE */ jal chrobjGetBboxFromObjectRecord /* 07B328 7F0467B8 00009025 */ move $s2, $zero @@ -14707,19 +14698,19 @@ glabel object_interaction /* 07B36C 7F0467FC E7A406A4 */ swc1 $f4, 0x6a4($sp) /* 07B370 7F046800 C6080060 */ lwc1 $f8, 0x60($s0) /* 07B374 7F046804 4608303E */ c.le.s $f6, $f8 -/* 07B378 7F046808 00000000 */ nop +/* 07B378 7F046808 00000000 */ nop /* 07B37C 7F04680C 45020035 */ bc1fl .Ljp7F0468E4 /* 07B380 7F046810 24840001 */ addiu $a0, $a0, 1 /* 07B384 7F046814 C60A0094 */ lwc1 $f10, 0x94($s0) /* 07B388 7F046818 460AB03C */ c.lt.s $f22, $f10 -/* 07B38C 7F04681C 00000000 */ nop +/* 07B38C 7F04681C 00000000 */ nop /* 07B390 7F046820 45020027 */ bc1fl .Ljp7F0468C0 /* 07B394 7F046824 C6060004 */ lwc1 $f6, 4($s0) /* 07B398 7F046828 C600000C */ lwc1 $f0, 0xc($s0) /* 07B39C 7F04682C C6020004 */ lwc1 $f2, 4($s0) /* 07B3A0 7F046830 AFA40550 */ sw $a0, 0x550($sp) /* 07B3A4 7F046834 46000102 */ mul.s $f4, $f0, $f0 -/* 07B3A8 7F046838 00000000 */ nop +/* 07B3A8 7F046838 00000000 */ nop /* 07B3AC 7F04683C 46021202 */ mul.s $f8, $f2, $f2 /* 07B3B0 7F046840 0C007E08 */ jal sqrtf /* 07B3B4 7F046844 46082300 */ add.s $f12, $f4, $f8 @@ -14735,7 +14726,7 @@ glabel object_interaction /* 07B3DC 7F04686C 3C038005 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8005 /* 07B3E0 7F046870 46002303 */ div.s $f12, $f4, $f0 /* 07B3E4 7F046874 460C403E */ c.le.s $f8, $f12 -/* 07B3E8 7F046878 00000000 */ nop +/* 07B3E8 7F046878 00000000 */ nop /* 07B3EC 7F04687C 45020005 */ bc1fl .Ljp7F046894 /* 07B3F0 7F046880 C6020004 */ lwc1 $f2, 4($s0) /* 07B3F4 7F046884 E6160004 */ swc1 $f22, 4($s0) @@ -14745,7 +14736,7 @@ glabel object_interaction .Ljp7F046894: /* 07B404 7F046894 C600000C */ lwc1 $f0, 0xc($s0) /* 07B408 7F046898 460C1182 */ mul.s $f6, $f2, $f12 -/* 07B40C 7F04689C 00000000 */ nop +/* 07B40C 7F04689C 00000000 */ nop /* 07B410 7F0468A0 460C0102 */ mul.s $f4, $f0, $f12 /* 07B414 7F0468A4 46061281 */ sub.s $f10, $f2, $f6 /* 07B418 7F0468A8 46040201 */ sub.s $f8, $f0, $f4 @@ -14759,7 +14750,7 @@ glabel object_interaction /* 07B430 7F0468C0 C604000C */ lwc1 $f4, 0xc($s0) /* 07B434 7F0468C4 3C038005 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8005 /* 07B438 7F0468C8 460E3282 */ mul.s $f10, $f6, $f14 -/* 07B43C 7F0468CC 00000000 */ nop +/* 07B43C 7F0468CC 00000000 */ nop /* 07B440 7F0468D0 460E2202 */ mul.s $f8, $f4, $f14 /* 07B444 7F0468D4 E60A0004 */ swc1 $f10, 4($s0) /* 07B448 7F0468D8 E608000C */ swc1 $f8, 0xc($s0) @@ -14799,30 +14790,30 @@ glabel object_interaction /* 07B4C4 7F046954 E62C005C */ swc1 $f12, 0x5c($s1) /* 07B4C8 7F046958 C6020004 */ lwc1 $f2, 4($s0) /* 07B4CC 7F04695C 460E103C */ c.lt.s $f2, $f14 -/* 07B4D0 7F046960 00000000 */ nop +/* 07B4D0 7F046960 00000000 */ nop /* 07B4D4 7F046964 45000013 */ bc1f .Ljp7F0469B4 -/* 07B4D8 7F046968 00000000 */ nop +/* 07B4D8 7F046968 00000000 */ nop /* 07B4DC 7F04696C C4242AF0 */ lwc1 $f4, %lo(D_80052AC0)($at) /* 07B4E0 7F046970 4602203C */ c.lt.s $f4, $f2 -/* 07B4E4 7F046974 00000000 */ nop +/* 07B4E4 7F046974 00000000 */ nop /* 07B4E8 7F046978 4500000E */ bc1f .Ljp7F0469B4 -/* 07B4EC 7F04697C 00000000 */ nop +/* 07B4EC 7F04697C 00000000 */ nop /* 07B4F0 7F046980 C600000C */ lwc1 $f0, 0xc($s0) /* 07B4F4 7F046984 3C018005 */ lui $at, %hi(D_80052AC4) # $at, 0x8005 /* 07B4F8 7F046988 460E003C */ c.lt.s $f0, $f14 -/* 07B4FC 7F04698C 00000000 */ nop +/* 07B4FC 7F04698C 00000000 */ nop /* 07B500 7F046990 45000008 */ bc1f .Ljp7F0469B4 -/* 07B504 7F046994 00000000 */ nop +/* 07B504 7F046994 00000000 */ nop /* 07B508 7F046998 C4282AF4 */ lwc1 $f8, %lo(D_80052AC4)($at) /* 07B50C 7F04699C 4600403C */ c.lt.s $f8, $f0 -/* 07B510 7F0469A0 00000000 */ nop +/* 07B510 7F0469A0 00000000 */ nop /* 07B514 7F0469A4 45000003 */ bc1f .Ljp7F0469B4 -/* 07B518 7F0469A8 00000000 */ nop +/* 07B518 7F0469A8 00000000 */ nop /* 07B51C 7F0469AC E616000C */ swc1 $f22, 0xc($s0) /* 07B520 7F0469B0 E6160004 */ swc1 $f22, 4($s0) .Ljp7F0469B4: /* 07B524 7F0469B4 16400005 */ bnez $s2, .Ljp7F0469CC -/* 07B528 7F0469B8 00000000 */ nop +/* 07B528 7F0469B8 00000000 */ nop /* 07B52C 7F0469BC 8E0E0000 */ lw $t6, ($s0) /* 07B530 7F0469C0 31CA0008 */ andi $t2, $t6, 8 /* 07B534 7F0469C4 51400016 */ beql $t2, $zero, .Ljp7F046A20 @@ -14901,16 +14892,16 @@ glabel object_interaction /* 07B640 7F046AD0 24030001 */ li $v1, 1 /* 07B644 7F046AD4 02002025 */ move $a0, $s0 /* 07B648 7F046AD8 10400011 */ beqz $v0, .Ljp7F046B20 -/* 07B64C 7F046ADC 00000000 */ nop +/* 07B64C 7F046ADC 00000000 */ nop /* 07B650 7F046AE0 1050000F */ beq $v0, $s0, .Ljp7F046B20 -/* 07B654 7F046AE4 00000000 */ nop +/* 07B654 7F046AE4 00000000 */ nop /* 07B658 7F046AE8 804900BC */ lb $t1, 0xbc($v0) .Ljp7F046AEC: /* 07B65C 7F046AEC 55200007 */ bnezl $t1, .Ljp7F046B0C /* 07B660 7F046AF0 00001825 */ move $v1, $zero /* 07B664 7F046AF4 C44A00B4 */ lwc1 $f10, 0xb4($v0) /* 07B668 7F046AF8 460AB03C */ c.lt.s $f22, $f10 -/* 07B66C 7F046AFC 00000000 */ nop +/* 07B66C 7F046AFC 00000000 */ nop /* 07B670 7F046B00 45020003 */ bc1fl .Ljp7F046B10 /* 07B674 7F046B04 8C4200C8 */ lw $v0, 0xc8($v0) /* 07B678 7F046B08 00001825 */ move $v1, $zero @@ -14918,7 +14909,7 @@ glabel object_interaction /* 07B67C 7F046B0C 8C4200C8 */ lw $v0, 0xc8($v0) .Ljp7F046B10: /* 07B680 7F046B10 10400003 */ beqz $v0, .Ljp7F046B20 -/* 07B684 7F046B14 00000000 */ nop +/* 07B684 7F046B14 00000000 */ nop /* 07B688 7F046B18 5450FFF4 */ bnel $v0, $s0, .Ljp7F046AEC /* 07B68C 7F046B1C 804900BC */ lb $t1, 0xbc($v0) .Ljp7F046B20: @@ -14930,15 +14921,15 @@ glabel object_interaction .Ljp7F046B34: /* 07B6A4 7F046B34 24010008 */ li $at, 8 /* 07B6A8 7F046B38 1561000B */ bne $t3, $at, .Ljp7F046B68 -/* 07B6AC 7F046B3C 00000000 */ nop +/* 07B6AC 7F046B3C 00000000 */ nop /* 07B6B0 7F046B40 0FC153C7 */ jal doorIsClosed /* 07B6B4 7F046B44 02002025 */ move $a0, $s0 /* 07B6B8 7F046B48 10400007 */ beqz $v0, .Ljp7F046B68 -/* 07B6BC 7F046B4C 00000000 */ nop +/* 07B6BC 7F046B4C 00000000 */ nop /* 07B6C0 7F046B50 0FC0FA86 */ jal doorIsPadlockFree /* 07B6C4 7F046B54 02002025 */ move $a0, $s0 /* 07B6C8 7F046B58 10400003 */ beqz $v0, .Ljp7F046B68 -/* 07B6CC 7F046B5C 00000000 */ nop +/* 07B6CC 7F046B5C 00000000 */ nop /* 07B6D0 7F046B60 0FC157A6 */ jal doorActivateWrapper /* 07B6D4 7F046B64 02602025 */ move $a0, $s3 .Ljp7F046B68: @@ -14948,12 +14939,12 @@ glabel object_interaction /* 07B6E4 7F046B74 3C0A8005 */ lui $t2, %hi(g_ClockTimer) # $t2, 0x8005 /* 07B6E8 7F046B78 018E082A */ slt $at, $t4, $t6 /* 07B6EC 7F046B7C 14200004 */ bnez $at, .Ljp7F046B90 -/* 07B6F0 7F046B80 00000000 */ nop +/* 07B6F0 7F046B80 00000000 */ nop /* 07B6F4 7F046B84 8D4A83A4 */ lw $t2, %lo(g_ClockTimer)($t2) /* 07B6F8 7F046B88 554006AA */ bnezl $t2, .Ljp7F048634 /* 07B6FC 7F046B8C 92220003 */ lbu $v0, 3($s1) .Ljp7F046B90: -/* 07B700 7F046B90 0FC1552C */ jal sub_GAME_7F054FB4 +/* 07B700 7F046B90 0FC1552C */ jal door7F054FB4 /* 07B704 7F046B94 02002025 */ move $a0, $s0 /* 07B708 7F046B98 100006A6 */ b .Ljp7F048634 /* 07B70C 7F046B9C 92220003 */ lbu $v0, 3($s1) @@ -14991,36 +14982,36 @@ glabel object_interaction /* 07B784 7F046C14 4500000E */ bc1f .Ljp7F046C50 /* 07B788 7F046C18 46082381 */ sub.s $f14, $f4, $f8 /* 07B78C 7F046C1C 46000182 */ mul.s $f6, $f0, $f0 -/* 07B790 7F046C20 00000000 */ nop +/* 07B790 7F046C20 00000000 */ nop /* 07B794 7F046C24 460C6282 */ mul.s $f10, $f12, $f12 -/* 07B798 7F046C28 00000000 */ nop +/* 07B798 7F046C28 00000000 */ nop /* 07B79C 7F046C2C 46021102 */ mul.s $f4, $f2, $f2 /* 07B7A0 7F046C30 46045200 */ add.s $f8, $f10, $f4 /* 07B7A4 7F046C34 460E7282 */ mul.s $f10, $f14, $f14 /* 07B7A8 7F046C38 460A4100 */ add.s $f4, $f8, $f10 /* 07B7AC 7F046C3C 4604303C */ c.lt.s $f6, $f4 -/* 07B7B0 7F046C40 00000000 */ nop +/* 07B7B0 7F046C40 00000000 */ nop /* 07B7B4 7F046C44 45000002 */ bc1f .Ljp7F046C50 -/* 07B7B8 7F046C48 00000000 */ nop +/* 07B7B8 7F046C48 00000000 */ nop /* 07B7BC 7F046C4C 00009025 */ move $s2, $zero .Ljp7F046C50: /* 07B7C0 7F046C50 8E380008 */ lw $t8, 8($s1) /* 07B7C4 7F046C54 00184080 */ sll $t0, $t8, 2 /* 07B7C8 7F046C58 05010002 */ bgez $t0, .Ljp7F046C64 -/* 07B7CC 7F046C5C 00000000 */ nop +/* 07B7CC 7F046C5C 00000000 */ nop /* 07B7D0 7F046C60 00009025 */ move $s2, $zero .Ljp7F046C64: /* 07B7D4 7F046C64 1240003A */ beqz $s2, .Ljp7F046D50 -/* 07B7D8 7F046C68 00000000 */ nop +/* 07B7D8 7F046C68 00000000 */ nop /* 07B7DC 7F046C6C 0FC16BD4 */ jal atan2f /* 07B7E0 7F046C70 E7B2051C */ swc1 $f18, 0x51c($sp) /* 07B7E4 7F046C74 C60200C8 */ lwc1 $f2, 0xc8($s0) /* 07B7E8 7F046C78 C7B2051C */ lwc1 $f18, 0x51c($sp) /* 07B7EC 7F046C7C 3C018005 */ lui $at, %hi(D_80052ACC) /* 07B7F0 7F046C80 4616103C */ c.lt.s $f2, $f22 -/* 07B7F4 7F046C84 00000000 */ nop +/* 07B7F4 7F046C84 00000000 */ nop /* 07B7F8 7F046C88 45000005 */ bc1f .Ljp7F046CA0 -/* 07B7FC 7F046C8C 00000000 */ nop +/* 07B7FC 7F046C8C 00000000 */ nop /* 07B800 7F046C90 3C018005 */ lui $at, %hi(D_80052AC8) # $at, 0x8005 /* 07B804 7F046C94 C4342AF8 */ lwc1 $f20, %lo(D_80052AC8)($at) /* 07B808 7F046C98 10000007 */ b .Ljp7F046CB8 @@ -15028,7 +15019,7 @@ glabel object_interaction .Ljp7F046CA0: /* 07B810 7F046CA0 C4342AFC */ lwc1 $f20, %lo(D_80052ACC)($at) /* 07B814 7F046CA4 4602A03E */ c.le.s $f20, $f2 -/* 07B818 7F046CA8 00000000 */ nop +/* 07B818 7F046CA8 00000000 */ nop /* 07B81C 7F046CAC 45020003 */ bc1fl .Ljp7F046CBC /* 07B820 7F046CB0 C60800C4 */ lwc1 $f8, 0xc4($s0) /* 07B824 7F046CB4 46141081 */ sub.s $f2, $f2, $f20 @@ -15038,7 +15029,7 @@ glabel object_interaction /* 07B82C 7F046CBC 3C018005 */ lui $at, %hi(D_80052AD0) # $at, 0x8005 /* 07B830 7F046CC0 46081080 */ add.s $f2, $f2, $f8 /* 07B834 7F046CC4 4602A03E */ c.le.s $f20, $f2 -/* 07B838 7F046CC8 00000000 */ nop +/* 07B838 7F046CC8 00000000 */ nop /* 07B83C 7F046CCC 45020003 */ bc1fl .Ljp7F046CDC /* 07B840 7F046CD0 4602003C */ c.lt.s $f0, $f2 /* 07B844 7F046CD4 46141081 */ sub.s $f2, $f2, $f20 @@ -15053,28 +15044,28 @@ glabel object_interaction /* 07B860 7F046CF0 3C018005 */ lui $at, %hi(D_80052AD4) # $at, 0x8005 /* 07B864 7F046CF4 46006301 */ sub.s $f12, $f12, $f0 /* 07B868 7F046CF8 4616603C */ c.lt.s $f12, $f22 -/* 07B86C 7F046CFC 00000000 */ nop +/* 07B86C 7F046CFC 00000000 */ nop /* 07B870 7F046D00 45020003 */ bc1fl .Ljp7F046D10 /* 07B874 7F046D04 460C003C */ c.lt.s $f0, $f12 /* 07B878 7F046D08 46146300 */ add.s $f12, $f12, $f20 /* 07B87C 7F046D0C 460C003C */ c.lt.s $f0, $f12 .Ljp7F046D10: -/* 07B880 7F046D10 00000000 */ nop +/* 07B880 7F046D10 00000000 */ nop /* 07B884 7F046D14 45000002 */ bc1f .Ljp7F046D20 -/* 07B888 7F046D18 00000000 */ nop +/* 07B888 7F046D18 00000000 */ nop /* 07B88C 7F046D1C 46146301 */ sub.s $f12, $f12, $f20 .Ljp7F046D20: /* 07B890 7F046D20 C42A2B04 */ lwc1 $f10, %lo(D_80052AD4)($at) /* 07B894 7F046D24 3C018005 */ lui $at, %hi(D_80052AD8) /* 07B898 7F046D28 460C503C */ c.lt.s $f10, $f12 -/* 07B89C 7F046D2C 00000000 */ nop +/* 07B89C 7F046D2C 00000000 */ nop /* 07B8A0 7F046D30 45030007 */ bc1tl .Ljp7F046D50 /* 07B8A4 7F046D34 00009025 */ move $s2, $zero /* 07B8A8 7F046D38 C4262B08 */ lwc1 $f6, %lo(D_80052AD8)($at) /* 07B8AC 7F046D3C 4606603C */ c.lt.s $f12, $f6 -/* 07B8B0 7F046D40 00000000 */ nop +/* 07B8B0 7F046D40 00000000 */ nop /* 07B8B4 7F046D44 45000002 */ bc1f .Ljp7F046D50 -/* 07B8B8 7F046D48 00000000 */ nop +/* 07B8B8 7F046D48 00000000 */ nop /* 07B8BC 7F046D4C 00009025 */ move $s2, $zero .Ljp7F046D50: /* 07B8C0 7F046D50 12400034 */ beqz $s2, .Ljp7F046E24 @@ -15117,7 +15108,7 @@ glabel object_interaction /* 07B954 7F046DE4 46082282 */ mul.s $f10, $f4, $f8 /* 07B958 7F046DE8 4600518D */ trunc.w.s $f6, $f10 /* 07B95C 7F046DEC 44193000 */ mfc1 $t9, $f6 -/* 07B960 7F046DF0 00000000 */ nop +/* 07B960 7F046DF0 00000000 */ nop /* 07B964 7F046DF4 0159082A */ slt $at, $t2, $t9 /* 07B968 7F046DF8 54200006 */ bnezl $at, .Ljp7F046E14 /* 07B96C 7F046DFC 8FA40518 */ lw $a0, 0x518($sp) @@ -15135,7 +15126,7 @@ glabel object_interaction .Ljp7F046E24: /* 07B994 7F046E24 C60E00C8 */ lwc1 $f14, 0xc8($s0) /* 07B998 7F046E28 4612703C */ c.lt.s $f14, $f18 -/* 07B99C 7F046E2C 00000000 */ nop +/* 07B99C 7F046E2C 00000000 */ nop /* 07B9A0 7F046E30 45020047 */ bc1fl .Ljp7F046F50 /* 07B9A4 7F046E34 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07B9A8 7F046E38 C60000D8 */ lwc1 $f0, 0xd8($s0) @@ -15149,7 +15140,7 @@ glabel object_interaction /* 07B9C8 7F046E58 46105083 */ div.s $f2, $f10, $f16 /* 07B9CC 7F046E5C 46029181 */ sub.s $f6, $f18, $f2 /* 07B9D0 7F046E60 460E303E */ c.le.s $f6, $f14 -/* 07B9D4 7F046E64 00000000 */ nop +/* 07B9D4 7F046E64 00000000 */ nop /* 07B9D8 7F046E68 4502000F */ bc1fl .Ljp7F046EA8 /* 07B9DC 7F046E6C C60C00DC */ lwc1 $f12, 0xdc($s0) /* 07B9E0 7F046E70 C42483B4 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) @@ -15158,9 +15149,9 @@ glabel object_interaction /* 07B9EC 7F046E7C E60A00D8 */ swc1 $f10, 0xd8($s0) /* 07B9F0 7F046E80 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07B9F4 7F046E84 4610003C */ c.lt.s $f0, $f16 -/* 07B9F8 7F046E88 00000000 */ nop +/* 07B9F8 7F046E88 00000000 */ nop /* 07B9FC 7F046E8C 45000003 */ bc1f .Ljp7F046E9C -/* 07BA00 7F046E90 00000000 */ nop +/* 07BA00 7F046E90 00000000 */ nop /* 07BA04 7F046E94 E61000D8 */ swc1 $f16, 0xd8($s0) /* 07BA08 7F046E98 C60000D8 */ lwc1 $f0, 0xd8($s0) .Ljp7F046E9C: @@ -15170,29 +15161,29 @@ glabel object_interaction .Ljp7F046EA8: /* 07BA18 7F046EA8 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 /* 07BA1C 7F046EAC 460C003C */ c.lt.s $f0, $f12 -/* 07BA20 7F046EB0 00000000 */ nop +/* 07BA20 7F046EB0 00000000 */ nop /* 07BA24 7F046EB4 45000017 */ bc1f .Ljp7F046F14 -/* 07BA28 7F046EB8 00000000 */ nop +/* 07BA28 7F046EB8 00000000 */ nop /* 07BA2C 7F046EBC C42683B4 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) /* 07BA30 7F046EC0 46068102 */ mul.s $f4, $f16, $f6 /* 07BA34 7F046EC4 46040080 */ add.s $f2, $f0, $f4 /* 07BA38 7F046EC8 4602603C */ c.lt.s $f12, $f2 -/* 07BA3C 7F046ECC 00000000 */ nop +/* 07BA3C 7F046ECC 00000000 */ nop /* 07BA40 7F046ED0 45000002 */ bc1f .Ljp7F046EDC -/* 07BA44 7F046ED4 00000000 */ nop +/* 07BA44 7F046ED4 00000000 */ nop /* 07BA48 7F046ED8 46006086 */ mov.s $f2, $f12 .Ljp7F046EDC: /* 07BA4C 7F046EDC 46021202 */ mul.s $f8, $f2, $f2 /* 07BA50 7F046EE0 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 07BA54 7F046EE4 44815000 */ mtc1 $at, $f10 -/* 07BA58 7F046EE8 00000000 */ nop +/* 07BA58 7F046EE8 00000000 */ nop /* 07BA5C 7F046EEC 460A4182 */ mul.s $f6, $f8, $f10 /* 07BA60 7F046EF0 46103103 */ div.s $f4, $f6, $f16 /* 07BA64 7F046EF4 46049201 */ sub.s $f8, $f18, $f4 /* 07BA68 7F046EF8 4608703C */ c.lt.s $f14, $f8 -/* 07BA6C 7F046EFC 00000000 */ nop +/* 07BA6C 7F046EFC 00000000 */ nop /* 07BA70 7F046F00 45000004 */ bc1f .Ljp7F046F14 -/* 07BA74 7F046F04 00000000 */ nop +/* 07BA74 7F046F04 00000000 */ nop /* 07BA78 7F046F08 E60200D8 */ swc1 $f2, 0xd8($s0) /* 07BA7C 7F046F0C C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07BA80 7F046F10 C60E00C8 */ lwc1 $f14, 0xc8($s0) @@ -15204,7 +15195,7 @@ glabel object_interaction /* 07BA94 7F046F24 E60400C8 */ swc1 $f4, 0xc8($s0) /* 07BA98 7F046F28 C60800C8 */ lwc1 $f8, 0xc8($s0) /* 07BA9C 7F046F2C 4608903E */ c.le.s $f18, $f8 -/* 07BAA0 7F046F30 00000000 */ nop +/* 07BAA0 7F046F30 00000000 */ nop /* 07BAA4 7F046F34 450205BF */ bc1fl .Ljp7F048634 /* 07BAA8 7F046F38 92220003 */ lbu $v0, 3($s1) /* 07BAAC 7F046F3C E61200C8 */ swc1 $f18, 0xc8($s0) @@ -15224,7 +15215,7 @@ glabel object_interaction /* 07BAE0 7F046F70 46102083 */ div.s $f2, $f4, $f16 /* 07BAE4 7F046F74 46029200 */ add.s $f8, $f18, $f2 /* 07BAE8 7F046F78 4608703E */ c.le.s $f14, $f8 -/* 07BAEC 7F046F7C 00000000 */ nop +/* 07BAEC 7F046F7C 00000000 */ nop /* 07BAF0 7F046F80 4502000F */ bc1fl .Ljp7F046FC0 /* 07BAF4 7F046F84 C60C00DC */ lwc1 $f12, 0xdc($s0) /* 07BAF8 7F046F88 C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) @@ -15233,9 +15224,9 @@ glabel object_interaction /* 07BB04 7F046F94 E60400D8 */ swc1 $f4, 0xd8($s0) /* 07BB08 7F046F98 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07BB0C 7F046F9C 4610003C */ c.lt.s $f0, $f16 -/* 07BB10 7F046FA0 00000000 */ nop +/* 07BB10 7F046FA0 00000000 */ nop /* 07BB14 7F046FA4 45000003 */ bc1f .Ljp7F046FB4 -/* 07BB18 7F046FA8 00000000 */ nop +/* 07BB18 7F046FA8 00000000 */ nop /* 07BB1C 7F046FAC E61000D8 */ swc1 $f16, 0xd8($s0) /* 07BB20 7F046FB0 C60000D8 */ lwc1 $f0, 0xd8($s0) .Ljp7F046FB4: @@ -15245,29 +15236,29 @@ glabel object_interaction .Ljp7F046FC0: /* 07BB30 7F046FC0 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 /* 07BB34 7F046FC4 460C003C */ c.lt.s $f0, $f12 -/* 07BB38 7F046FC8 00000000 */ nop +/* 07BB38 7F046FC8 00000000 */ nop /* 07BB3C 7F046FCC 45000017 */ bc1f .Ljp7F04702C -/* 07BB40 7F046FD0 00000000 */ nop +/* 07BB40 7F046FD0 00000000 */ nop /* 07BB44 7F046FD4 C42883B4 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) /* 07BB48 7F046FD8 46088282 */ mul.s $f10, $f16, $f8 /* 07BB4C 7F046FDC 460A0080 */ add.s $f2, $f0, $f10 /* 07BB50 7F046FE0 4602603C */ c.lt.s $f12, $f2 -/* 07BB54 7F046FE4 00000000 */ nop +/* 07BB54 7F046FE4 00000000 */ nop /* 07BB58 7F046FE8 45000002 */ bc1f .Ljp7F046FF4 -/* 07BB5C 7F046FEC 00000000 */ nop +/* 07BB5C 7F046FEC 00000000 */ nop /* 07BB60 7F046FF0 46006086 */ mov.s $f2, $f12 .Ljp7F046FF4: /* 07BB64 7F046FF4 46021182 */ mul.s $f6, $f2, $f2 /* 07BB68 7F046FF8 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 07BB6C 7F046FFC 44812000 */ mtc1 $at, $f4 -/* 07BB70 7F047000 00000000 */ nop +/* 07BB70 7F047000 00000000 */ nop /* 07BB74 7F047004 46043202 */ mul.s $f8, $f6, $f4 /* 07BB78 7F047008 46104283 */ div.s $f10, $f8, $f16 /* 07BB7C 7F04700C 460A9180 */ add.s $f6, $f18, $f10 /* 07BB80 7F047010 460E303C */ c.lt.s $f6, $f14 -/* 07BB84 7F047014 00000000 */ nop +/* 07BB84 7F047014 00000000 */ nop /* 07BB88 7F047018 45000004 */ bc1f .Ljp7F04702C -/* 07BB8C 7F04701C 00000000 */ nop +/* 07BB8C 7F04701C 00000000 */ nop /* 07BB90 7F047020 E60200D8 */ swc1 $f2, 0xd8($s0) /* 07BB94 7F047024 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07BB98 7F047028 C60E00C8 */ lwc1 $f14, 0xc8($s0) @@ -15279,7 +15270,7 @@ glabel object_interaction /* 07BBAC 7F04703C E60A00C8 */ swc1 $f10, 0xc8($s0) /* 07BBB0 7F047040 C60600C8 */ lwc1 $f6, 0xc8($s0) /* 07BBB4 7F047044 4612303E */ c.le.s $f6, $f18 -/* 07BBB8 7F047048 00000000 */ nop +/* 07BBB8 7F047048 00000000 */ nop /* 07BBBC 7F04704C 45020579 */ bc1fl .Ljp7F048634 /* 07BBC0 7F047050 92220003 */ lbu $v0, 3($s1) /* 07BBC4 7F047054 E61200C8 */ swc1 $f18, 0xc8($s0) @@ -15316,17 +15307,17 @@ glabel object_interaction .Ljp7F0470CC: /* 07BC3C 7F0470CC C60A0090 */ lwc1 $f10, 0x90($s0) /* 07BC40 7F0470D0 460A1032 */ c.eq.s $f2, $f10 -/* 07BC44 7F0470D4 00000000 */ nop +/* 07BC44 7F0470D4 00000000 */ nop /* 07BC48 7F0470D8 45000030 */ bc1f .Ljp7F04719C -/* 07BC4C 7F0470DC 00000000 */ nop +/* 07BC4C 7F0470DC 00000000 */ nop /* 07BC50 7F0470E0 C6060098 */ lwc1 $f6, 0x98($s0) /* 07BC54 7F0470E4 C604009C */ lwc1 $f4, 0x9c($s0) /* 07BC58 7F0470E8 46043032 */ c.eq.s $f6, $f4 -/* 07BC5C 7F0470EC 00000000 */ nop +/* 07BC5C 7F0470EC 00000000 */ nop /* 07BC60 7F0470F0 4500002A */ bc1f .Ljp7F04719C -/* 07BC64 7F0470F4 00000000 */ nop +/* 07BC64 7F0470F4 00000000 */ nop /* 07BC68 7F0470F8 0C002918 */ jal randomGetNext -/* 07BC6C 7F0470FC 00000000 */ nop +/* 07BC6C 7F0470FC 00000000 */ nop /* 07BC70 7F047100 44824000 */ mtc1 $v0, $f8 /* 07BC74 7F047104 3C018005 */ lui $at, %hi(D_80052AE8) # $at, 0x8005 /* 07BC78 7F047108 C4342B18 */ lwc1 $f20, %lo(D_80052AE8)($at) @@ -15334,7 +15325,7 @@ glabel object_interaction /* 07BC80 7F047110 468042A0 */ cvt.s.w $f10, $f8 /* 07BC84 7F047114 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07BC88 7F047118 44813000 */ mtc1 $at, $f6 -/* 07BC8C 7F04711C 00000000 */ nop +/* 07BC8C 7F04711C 00000000 */ nop /* 07BC90 7F047120 46065280 */ add.s $f10, $f10, $f6 .Ljp7F047124: /* 07BC94 7F047124 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -15357,14 +15348,14 @@ glabel object_interaction /* 07BCD8 7F047168 04410004 */ bgez $v0, .Ljp7F04717C /* 07BCDC 7F04716C 468041A0 */ cvt.s.w $f6, $f8 /* 07BCE0 7F047170 44815000 */ mtc1 $at, $f10 -/* 07BCE4 7F047174 00000000 */ nop +/* 07BCE4 7F047174 00000000 */ nop /* 07BCE8 7F047178 460A3180 */ add.s $f6, $f6, $f10 .Ljp7F04717C: /* 07BCEC 7F04717C 3C012F80 */ li $at, 0x2F800000 # 0.000000 /* 07BCF0 7F047180 44812000 */ mtc1 $at, $f4 -/* 07BCF4 7F047184 00000000 */ nop +/* 07BCF4 7F047184 00000000 */ nop /* 07BCF8 7F047188 46043202 */ mul.s $f8, $f6, $f4 -/* 07BCFC 7F04718C 00000000 */ nop +/* 07BCFC 7F04718C 00000000 */ nop /* 07BD00 7F047190 46144282 */ mul.s $f10, $f8, $f20 /* 07BD04 7F047194 E60A0084 */ swc1 $f10, 0x84($s0) /* 07BD08 7F047198 C6020084 */ lwc1 $f2, 0x84($s0) @@ -15438,7 +15429,7 @@ glabel object_interaction /* 07BE0C 7F04729C E7A804D8 */ swc1 $f8, 0x4d8($sp) /* 07BE10 7F0472A0 C60A00A8 */ lwc1 $f10, 0xa8($s0) /* 07BE14 7F0472A4 460A103E */ c.le.s $f2, $f10 -/* 07BE18 7F0472A8 00000000 */ nop +/* 07BE18 7F0472A8 00000000 */ nop /* 07BE1C 7F0472AC 45020096 */ bc1fl .Ljp7F047508 /* 07BE20 7F0472B0 8FA804B0 */ lw $t0, 0x4b0($sp) /* 07BE24 7F0472B4 C7AC04C8 */ lwc1 $f12, 0x4c8($sp) @@ -15468,9 +15459,9 @@ glabel object_interaction /* 07BE7C 7F04730C 3C018005 */ lui $at, %hi(D_80052B04) # $at, 0x8005 /* 07BE80 7F047310 46043301 */ sub.s $f12, $f6, $f4 /* 07BE84 7F047314 4616603C */ c.lt.s $f12, $f22 -/* 07BE88 7F047318 00000000 */ nop +/* 07BE88 7F047318 00000000 */ nop /* 07BE8C 7F04731C 45000003 */ bc1f .Ljp7F04732C -/* 07BE90 7F047320 00000000 */ nop +/* 07BE90 7F047320 00000000 */ nop /* 07BE94 7F047324 C4342B34 */ lwc1 $f20, %lo(D_80052B04)($at) /* 07BE98 7F047328 46146300 */ add.s $f12, $f12, $f20 .Ljp7F04732C: @@ -15480,7 +15471,7 @@ glabel object_interaction /* 07BEA8 7F047338 C4282B3C */ lwc1 $f8, %lo(D_80052B0C)($at) /* 07BEAC 7F04733C 3C018005 */ lui $at, %hi(D_80052B10) # $at, 0x8005 /* 07BEB0 7F047340 460C403C */ c.lt.s $f8, $f12 -/* 07BEB4 7F047344 00000000 */ nop +/* 07BEB4 7F047344 00000000 */ nop /* 07BEB8 7F047348 45020003 */ bc1fl .Ljp7F047358 /* 07BEBC 7F04734C C60A009C */ lwc1 $f10, 0x9c($s0) /* 07BEC0 7F047350 46146301 */ sub.s $f12, $f12, $f20 @@ -15488,20 +15479,20 @@ glabel object_interaction .Ljp7F047358: /* 07BEC8 7F047358 460A0081 */ sub.s $f2, $f0, $f10 /* 07BECC 7F04735C 4616103C */ c.lt.s $f2, $f22 -/* 07BED0 7F047360 00000000 */ nop +/* 07BED0 7F047360 00000000 */ nop /* 07BED4 7F047364 45000001 */ bc1f .Ljp7F04736C -/* 07BED8 7F047368 00000000 */ nop +/* 07BED8 7F047368 00000000 */ nop .Ljp7F04736C: /* 07BEDC 7F04736C C4262B40 */ lwc1 $f6, %lo(D_80052B10)($at) /* 07BEE0 7F047370 3C018005 */ lui $at, %hi(D_80052B14) # $at, 0x8005 /* 07BEE4 7F047374 4606603C */ c.lt.s $f12, $f6 -/* 07BEE8 7F047378 00000000 */ nop +/* 07BEE8 7F047378 00000000 */ nop /* 07BEEC 7F04737C 45020009 */ bc1fl .Ljp7F0473A4 /* 07BEF0 7F047380 8FA804B0 */ lw $t0, 0x4b0($sp) /* 07BEF4 7F047384 C4242B44 */ lwc1 $f4, %lo(D_80052B14)($at) /* 07BEF8 7F047388 24180001 */ li $t8, 1 /* 07BEFC 7F04738C 460C203C */ c.lt.s $f4, $f12 -/* 07BF00 7F047390 00000000 */ nop +/* 07BF00 7F047390 00000000 */ nop /* 07BF04 7F047394 45020003 */ bc1fl .Ljp7F0473A4 /* 07BF08 7F047398 8FA804B0 */ lw $t0, 0x4b0($sp) /* 07BF0C 7F04739C AFB804B0 */ sw $t8, 0x4b0($sp) @@ -15521,13 +15512,13 @@ glabel object_interaction /* 07BF3C 7F0473CC 4606003C */ c.lt.s $f0, $f6 /* 07BF40 7F0473D0 AFA90494 */ sw $t1, 0x494($sp) /* 07BF44 7F0473D4 45000003 */ bc1f .Ljp7F0473E4 -/* 07BF48 7F0473D8 00000000 */ nop +/* 07BF48 7F0473D8 00000000 */ nop /* 07BF4C 7F0473DC 10000007 */ b .Ljp7F0473FC /* 07BF50 7F0473E0 46140000 */ add.s $f0, $f0, $f20 .Ljp7F0473E4: /* 07BF54 7F0473E4 C4242B4C */ lwc1 $f4, %lo(D_80052B1C)($at) /* 07BF58 7F0473E8 4600203E */ c.le.s $f4, $f0 -/* 07BF5C 7F0473EC 00000000 */ nop +/* 07BF5C 7F0473EC 00000000 */ nop /* 07BF60 7F0473F0 45020003 */ bc1fl .Ljp7F047400 /* 07BF64 7F0473F4 E7A00498 */ swc1 $f0, 0x498($sp) /* 07BF68 7F0473F8 46140001 */ sub.s $f0, $f0, $f20 @@ -15540,13 +15531,13 @@ glabel object_interaction /* 07BF7C 7F04740C C6080088 */ lwc1 $f8, 0x88($s0) /* 07BF80 7F047410 C7B004DC */ lwc1 $f16, 0x4dc($sp) /* 07BF84 7F047414 4608003E */ c.le.s $f0, $f8 -/* 07BF88 7F047418 00000000 */ nop +/* 07BF88 7F047418 00000000 */ nop /* 07BF8C 7F04741C 45020027 */ bc1fl .Ljp7F0474BC /* 07BF90 7F047420 8E0200B8 */ lw $v0, 0xb8($s0) /* 07BF94 7F047424 C60A008C */ lwc1 $f10, 0x8c($s0) /* 07BF98 7F047428 240B001B */ li $t3, 27 /* 07BF9C 7F04742C 4600503E */ c.le.s $f10, $f0 -/* 07BFA0 7F047430 00000000 */ nop +/* 07BFA0 7F047430 00000000 */ nop /* 07BFA4 7F047434 45020021 */ bc1fl .Ljp7F0474BC /* 07BFA8 7F047438 8E0200B8 */ lw $v0, 0xb8($s0) /* 07BFAC 7F04743C C6460010 */ lwc1 $f6, 0x10($s2) @@ -15635,17 +15626,17 @@ glabel object_interaction /* 07C0E0 7F047570 C7AA04A4 */ lwc1 $f10, 0x4a4($sp) /* 07C0E4 7F047574 C7B004DC */ lwc1 $f16, 0x4dc($sp) /* 07C0E8 7F047578 46065102 */ mul.s $f4, $f10, $f6 -/* 07C0EC 7F04757C 00000000 */ nop +/* 07C0EC 7F04757C 00000000 */ nop /* 07C0F0 7F047580 46002202 */ mul.s $f8, $f4, $f0 /* 07C0F4 7F047584 46088400 */ add.s $f16, $f16, $f8 /* 07C0F8 7F047588 4616803C */ c.lt.s $f16, $f22 -/* 07C0FC 7F04758C 00000000 */ nop +/* 07C0FC 7F04758C 00000000 */ nop /* 07C100 7F047590 45000002 */ bc1f .Ljp7F04759C -/* 07C104 7F047594 00000000 */ nop +/* 07C104 7F047594 00000000 */ nop /* 07C108 7F047598 46148400 */ add.s $f16, $f16, $f20 .Ljp7F04759C: /* 07C10C 7F04759C 4610A03E */ c.le.s $f20, $f16 -/* 07C110 7F0475A0 00000000 */ nop +/* 07C110 7F0475A0 00000000 */ nop /* 07C114 7F0475A4 45020003 */ bc1fl .Ljp7F0475B4 /* 07C118 7F0475A8 C6020084 */ lwc1 $f2, 0x84($s0) /* 07C11C 7F0475AC 46148401 */ sub.s $f16, $f16, $f20 @@ -15657,16 +15648,16 @@ glabel object_interaction /* 07C12C 7F0475BC 46028001 */ sub.s $f0, $f16, $f2 /* 07C130 7F0475C0 26040090 */ addiu $a0, $s0, 0x90 /* 07C134 7F0475C4 460A003C */ c.lt.s $f0, $f10 -/* 07C138 7F0475C8 00000000 */ nop +/* 07C138 7F0475C8 00000000 */ nop /* 07C13C 7F0475CC 45000003 */ bc1f .Ljp7F0475DC -/* 07C140 7F0475D0 00000000 */ nop +/* 07C140 7F0475D0 00000000 */ nop /* 07C144 7F0475D4 10000008 */ b .Ljp7F0475F8 /* 07C148 7F0475D8 46140000 */ add.s $f0, $f0, $f20 .Ljp7F0475DC: /* 07C14C 7F0475DC 3C018005 */ lui $at, %hi(D_80052B2C) # $at, 0x8005 /* 07C150 7F0475E0 C4262B5C */ lwc1 $f6, %lo(D_80052B2C)($at) /* 07C154 7F0475E4 4600303E */ c.le.s $f6, $f0 -/* 07C158 7F0475E8 00000000 */ nop +/* 07C158 7F0475E8 00000000 */ nop /* 07C15C 7F0475EC 45020003 */ bc1fl .Ljp7F0475FC /* 07C160 7F0475F0 C60C0088 */ lwc1 $f12, 0x88($s0) /* 07C164 7F0475F4 46140001 */ sub.s $f0, $f0, $f20 @@ -15675,7 +15666,7 @@ glabel object_interaction .Ljp7F0475FC: /* 07C16C 7F0475FC 3C018005 */ lui $at, %hi(D_80052B30) # $at, 0x8005 /* 07C170 7F047600 4600603C */ c.lt.s $f12, $f0 -/* 07C174 7F047604 00000000 */ nop +/* 07C174 7F047604 00000000 */ nop /* 07C178 7F047608 45020004 */ bc1fl .Ljp7F04761C /* 07C17C 7F04760C C60C008C */ lwc1 $f12, 0x8c($s0) /* 07C180 7F047610 10000007 */ b .Ljp7F047630 @@ -15683,22 +15674,22 @@ glabel object_interaction /* 07C188 7F047618 C60C008C */ lwc1 $f12, 0x8c($s0) .Ljp7F04761C: /* 07C18C 7F04761C 460C003C */ c.lt.s $f0, $f12 -/* 07C190 7F047620 00000000 */ nop +/* 07C190 7F047620 00000000 */ nop /* 07C194 7F047624 45020003 */ bc1fl .Ljp7F047634 /* 07C198 7F047628 4616803C */ c.lt.s $f16, $f22 /* 07C19C 7F04762C 460C1400 */ add.s $f16, $f2, $f12 .Ljp7F047630: /* 07C1A0 7F047630 4616803C */ c.lt.s $f16, $f22 .Ljp7F047634: -/* 07C1A4 7F047634 00000000 */ nop +/* 07C1A4 7F047634 00000000 */ nop /* 07C1A8 7F047638 45020003 */ bc1fl .Ljp7F047648 /* 07C1AC 7F04763C 4610A03E */ c.le.s $f20, $f16 /* 07C1B0 7F047640 46148400 */ add.s $f16, $f16, $f20 /* 07C1B4 7F047644 4610A03E */ c.le.s $f20, $f16 .Ljp7F047648: -/* 07C1B8 7F047648 00000000 */ nop +/* 07C1B8 7F047648 00000000 */ nop /* 07C1BC 7F04764C 45000002 */ bc1f .Ljp7F047658 -/* 07C1C0 7F047650 00000000 */ nop +/* 07C1C0 7F047650 00000000 */ nop /* 07C1C4 7F047654 46148401 */ sub.s $f16, $f16, $f20 .Ljp7F047658: /* 07C1C8 7F047658 C4202B60 */ lwc1 $f0, %lo(D_80052B30)($at) @@ -15726,14 +15717,14 @@ glabel object_interaction /* 07C220 7F0476B0 C7A604D8 */ lwc1 $f6, 0x4d8($sp) /* 07C224 7F0476B4 460A8301 */ sub.s $f12, $f16, $f10 /* 07C228 7F0476B8 4616603C */ c.lt.s $f12, $f22 -/* 07C22C 7F0476BC 00000000 */ nop +/* 07C22C 7F0476BC 00000000 */ nop /* 07C230 7F0476C0 45000002 */ bc1f .Ljp7F0476CC -/* 07C234 7F0476C4 00000000 */ nop +/* 07C234 7F0476C4 00000000 */ nop /* 07C238 7F0476C8 46146300 */ add.s $f12, $f12, $f20 .Ljp7F0476CC: /* 07C23C 7F0476CC C4202B68 */ lwc1 $f0, %lo(D_80052B38)($at) /* 07C240 7F0476D0 460C003C */ c.lt.s $f0, $f12 -/* 07C244 7F0476D4 00000000 */ nop +/* 07C244 7F0476D4 00000000 */ nop /* 07C248 7F0476D8 45020003 */ bc1fl .Ljp7F0476E8 /* 07C24C 7F0476DC C604009C */ lwc1 $f4, 0x9c($s0) /* 07C250 7F0476E0 46146301 */ sub.s $f12, $f12, $f20 @@ -15741,13 +15732,13 @@ glabel object_interaction .Ljp7F0476E8: /* 07C258 7F0476E8 46043081 */ sub.s $f2, $f6, $f4 /* 07C25C 7F0476EC 4616103C */ c.lt.s $f2, $f22 -/* 07C260 7F0476F0 00000000 */ nop +/* 07C260 7F0476F0 00000000 */ nop /* 07C264 7F0476F4 45020003 */ bc1fl .Ljp7F047704 /* 07C268 7F0476F8 4602003C */ c.lt.s $f0, $f2 /* 07C26C 7F0476FC 46141080 */ add.s $f2, $f2, $f20 /* 07C270 7F047700 4602003C */ c.lt.s $f0, $f2 .Ljp7F047704: -/* 07C274 7F047704 00000000 */ nop +/* 07C274 7F047704 00000000 */ nop /* 07C278 7F047708 45020003 */ bc1fl .Ljp7F047718 /* 07C27C 7F04770C AE0000D0 */ sw $zero, 0xd0($s0) /* 07C280 7F047710 46141081 */ sub.s $f2, $f2, $f20 @@ -15763,11 +15754,11 @@ glabel object_interaction /* 07C2A4 7F047734 460A5000 */ add.s $f0, $f10, $f10 /* 07C2A8 7F047738 46004007 */ neg.s $f0, $f8 /* 07C2AC 7F04773C 460C003C */ c.lt.s $f0, $f12 -/* 07C2B0 7F047740 00000000 */ nop +/* 07C2B0 7F047740 00000000 */ nop /* 07C2B4 7F047744 45020016 */ bc1fl .Ljp7F0477A0 /* 07C2B8 7F047748 460A5000 */ add.s $f0, $f10, $f10 /* 07C2BC 7F04774C 4608103C */ c.lt.s $f2, $f8 -/* 07C2C0 7F047750 00000000 */ nop +/* 07C2C0 7F047750 00000000 */ nop /* 07C2C4 7F047754 45020012 */ bc1fl .Ljp7F0477A0 /* 07C2C8 7F047758 460A5000 */ add.s $f0, $f10, $f10 /* 07C2CC 7F04775C 4602003C */ c.lt.s $f0, $f2 @@ -15789,16 +15780,16 @@ glabel object_interaction /* 07C30C 7F04779C 460A5000 */ add.s $f0, $f10, $f10 .Ljp7F0477A0: /* 07C310 7F0477A0 4600603C */ c.lt.s $f12, $f0 -/* 07C314 7F0477A4 00000000 */ nop +/* 07C314 7F0477A4 00000000 */ nop /* 07C318 7F0477A8 45020018 */ bc1fl .Ljp7F04780C /* 07C31C 7F0477AC 8E0200B8 */ lw $v0, 0xb8($s0) /* 07C320 7F0477B0 46000387 */ neg.s $f14, $f0 /* 07C324 7F0477B4 460C703C */ c.lt.s $f14, $f12 -/* 07C328 7F0477B8 00000000 */ nop +/* 07C328 7F0477B8 00000000 */ nop /* 07C32C 7F0477BC 45020013 */ bc1fl .Ljp7F04780C /* 07C330 7F0477C0 8E0200B8 */ lw $v0, 0xb8($s0) /* 07C334 7F0477C4 4600103C */ c.lt.s $f2, $f0 -/* 07C338 7F0477C8 00000000 */ nop +/* 07C338 7F0477C8 00000000 */ nop /* 07C33C 7F0477CC 4502000F */ bc1fl .Ljp7F04780C /* 07C340 7F0477D0 8E0200B8 */ lw $v0, 0xb8($s0) /* 07C344 7F0477D4 4602703C */ c.lt.s $f14, $f2 @@ -15845,7 +15836,7 @@ glabel object_interaction /* 07C3DC 7F04786C E60600B0 */ swc1 $f6, 0xb0($s0) /* 07C3E0 7F047870 C60200B0 */ lwc1 $f2, 0xb0($s0) /* 07C3E4 7F047874 4602003C */ c.lt.s $f0, $f2 -/* 07C3E8 7F047878 00000000 */ nop +/* 07C3E8 7F047878 00000000 */ nop /* 07C3EC 7F04787C 45020023 */ bc1fl .Ljp7F04790C /* 07C3F0 7F047880 4602B03C */ c.lt.s $f22, $f2 /* 07C3F4 7F047884 E60000B0 */ swc1 $f0, 0xb0($s0) @@ -15855,14 +15846,14 @@ glabel object_interaction .Ljp7F047894: /* 07C404 7F047894 3C188005 */ lui $t8, %hi(g_ClockTimer) # $t8, 0x8005 /* 07C408 7F047898 4602B03C */ c.lt.s $f22, $f2 -/* 07C40C 7F04789C 00000000 */ nop +/* 07C40C 7F04789C 00000000 */ nop /* 07C410 7F0478A0 4502001A */ bc1fl .Ljp7F04790C /* 07C414 7F0478A4 4602B03C */ c.lt.s $f22, $f2 /* 07C418 7F0478A8 8F1883A4 */ lw $t8, %lo(g_ClockTimer)($t8) /* 07C41C 7F0478AC 00001025 */ move $v0, $zero /* 07C420 7F0478B0 3C018005 */ lui $at, %hi(D_80052B44) # $at, 0x8005 /* 07C424 7F0478B4 1B00000C */ blez $t8, .Ljp7F0478E8 -/* 07C428 7F0478B8 00000000 */ nop +/* 07C428 7F0478B8 00000000 */ nop /* 07C42C 7F0478BC C4202B74 */ lwc1 $f0, %lo(D_80052B44)($at) /* 07C430 7F0478C0 C60400B0 */ lwc1 $f4, 0xb0($s0) .Ljp7F0478C4: @@ -15879,7 +15870,7 @@ glabel object_interaction /* 07C458 7F0478E8 3C018005 */ lui $at, %hi(D_80052B48) # $at, 0x8005 /* 07C45C 7F0478EC C4282B78 */ lwc1 $f8, %lo(D_80052B48)($at) /* 07C460 7F0478F0 4608103E */ c.le.s $f2, $f8 -/* 07C464 7F0478F4 00000000 */ nop +/* 07C464 7F0478F4 00000000 */ nop /* 07C468 7F0478F8 45020004 */ bc1fl .Ljp7F04790C /* 07C46C 7F0478FC 4602B03C */ c.lt.s $f22, $f2 /* 07C470 7F047900 E61600B0 */ swc1 $f22, 0xb0($s0) @@ -15897,7 +15888,7 @@ glabel object_interaction /* 07C498 7F047928 E60800B4 */ swc1 $f8, 0xb4($s0) /* 07C49C 7F04792C C60000B4 */ lwc1 $f0, 0xb4($s0) /* 07C4A0 7F047930 4600A03E */ c.le.s $f20, $f0 -/* 07C4A4 7F047934 00000000 */ nop +/* 07C4A4 7F047934 00000000 */ nop /* 07C4A8 7F047938 4502033E */ bc1fl .Ljp7F048634 /* 07C4AC 7F04793C 92220003 */ lbu $v0, 3($s1) /* 07C4B0 7F047940 46140101 */ sub.s $f4, $f0, $f20 @@ -15905,7 +15896,7 @@ glabel object_interaction /* 07C4B4 7F047944 E60400B4 */ swc1 $f4, 0xb4($s0) /* 07C4B8 7F047948 C60000B4 */ lwc1 $f0, 0xb4($s0) /* 07C4BC 7F04794C 4600A03E */ c.le.s $f20, $f0 -/* 07C4C0 7F047950 00000000 */ nop +/* 07C4C0 7F047950 00000000 */ nop /* 07C4C4 7F047954 4503FFFB */ bc1tl .Ljp7F047944 /* 07C4C8 7F047958 46140101 */ sub.s $f4, $f0, $f20 /* 07C4CC 7F04795C 10000335 */ b .Ljp7F048634 @@ -15922,13 +15913,13 @@ glabel object_interaction /* 07C4F4 7F047984 C62E0098 */ lwc1 $f14, 0x98($s1) /* 07C4F8 7F047988 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 /* 07C4FC 7F04798C 460EB03E */ c.le.s $f22, $f14 -/* 07C500 7F047990 00000000 */ nop +/* 07C500 7F047990 00000000 */ nop /* 07C504 7F047994 45020016 */ bc1fl .Ljp7F0479F0 /* 07C508 7F047998 8E29000C */ lw $t1, 0xc($s1) /* 07C50C 7F04799C C42283B4 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) /* 07C510 7F0479A0 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 /* 07C514 7F0479A4 4602703E */ c.le.s $f14, $f2 -/* 07C518 7F0479A8 00000000 */ nop +/* 07C518 7F0479A8 00000000 */ nop /* 07C51C 7F0479AC 45020006 */ bc1fl .Ljp7F0479C8 /* 07C520 7F0479B0 C6200088 */ lwc1 $f0, 0x88($s1) /* 07C524 7F0479B4 C62A0094 */ lwc1 $f10, 0x94($s1) @@ -15952,23 +15943,23 @@ glabel object_interaction /* 07C560 7F0479F0 00008025 */ move $s0, $zero /* 07C564 7F0479F4 00095B00 */ sll $t3, $t1, 0xc /* 07C568 7F0479F8 05600014 */ bltz $t3, .Ljp7F047A4C -/* 07C56C 7F0479FC 00000000 */ nop +/* 07C56C 7F0479FC 00000000 */ nop /* 07C570 7F047A00 0FC13CCE */ jal objIsHealthy /* 07C574 7F047A04 02202025 */ move $a0, $s1 /* 07C578 7F047A08 10400010 */ beqz $v0, .Ljp7F047A4C -/* 07C57C 7F047A0C 00000000 */ nop +/* 07C57C 7F047A0C 00000000 */ nop /* 07C580 7F047A10 C62A0088 */ lwc1 $f10, 0x88($s1) /* 07C584 7F047A14 26240058 */ addiu $a0, $s1, 0x58 /* 07C588 7F047A18 3C0544FA */ lui $a1, 0x44fa /* 07C58C 7F047A1C 460AB03C */ c.lt.s $f22, $f10 /* 07C590 7F047A20 3C06453B */ lui $a2, (0x453B8000 >> 16) # lui $a2, 0x453b /* 07C594 7F047A24 45010006 */ bc1t .Ljp7F047A40 -/* 07C598 7F047A28 00000000 */ nop +/* 07C598 7F047A28 00000000 */ nop /* 07C59C 7F047A2C C6280094 */ lwc1 $f8, 0x94($s1) /* 07C5A0 7F047A30 4608B03C */ c.lt.s $f22, $f8 -/* 07C5A4 7F047A34 00000000 */ nop +/* 07C5A4 7F047A34 00000000 */ nop /* 07C5A8 7F047A38 45000004 */ bc1f .Ljp7F047A4C -/* 07C5AC 7F047A3C 00000000 */ nop +/* 07C5AC 7F047A3C 00000000 */ nop .Ljp7F047A40: /* 07C5B0 7F047A40 0FC14F64 */ jal sub_GAME_7F053894 /* 07C5B4 7F047A44 34C68000 */ ori $a2, (0x453B8000 & 0xFFFF) # ori $a2, $a2, 0x8000 @@ -15978,14 +15969,14 @@ glabel object_interaction /* 07C5C0 7F047A50 8E2400AC */ lw $a0, 0xac($s1) /* 07C5C4 7F047A54 8E2400AC */ lw $a0, 0xac($s1) /* 07C5C8 7F047A58 10800005 */ beqz $a0, .Ljp7F047A70 -/* 07C5CC 7F047A5C 00000000 */ nop +/* 07C5CC 7F047A5C 00000000 */ nop /* 07C5D0 7F047A60 0C002380 */ jal sndGetPlayingState -/* 07C5D4 7F047A64 00000000 */ nop +/* 07C5D4 7F047A64 00000000 */ nop /* 07C5D8 7F047A68 5440000A */ bnezl $v0, .Ljp7F047A94 /* 07C5DC 7F047A6C 8E2400AC */ lw $a0, 0xac($s1) .Ljp7F047A70: /* 07C5E0 7F047A70 0FC3021B */ jal lvlGetControlsLockedFlag -/* 07C5E4 7F047A74 00000000 */ nop +/* 07C5E4 7F047A74 00000000 */ nop /* 07C5E8 7F047A78 14400005 */ bnez $v0, .Ljp7F047A90 /* 07C5EC 7F047A7C 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 /* 07C5F0 7F047A80 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) @@ -16007,7 +15998,7 @@ glabel object_interaction /* 07C624 7F047AB4 50800008 */ beql $a0, $zero, .Ljp7F047AD8 /* 07C628 7F047AB8 8E2400A4 */ lw $a0, 0xa4($s1) /* 07C62C 7F047ABC 0C002380 */ jal sndGetPlayingState -/* 07C630 7F047AC0 00000000 */ nop +/* 07C630 7F047AC0 00000000 */ nop /* 07C634 7F047AC4 50400004 */ beql $v0, $zero, .Ljp7F047AD8 /* 07C638 7F047AC8 8E2400A4 */ lw $a0, 0xa4($s1) /* 07C63C 7F047ACC 0C00240C */ jal sndDeactivate @@ -16077,7 +16068,7 @@ glabel object_interaction /* 07C730 7F047BC0 C6260088 */ lwc1 $f6, 0x88($s1) .Ljp7F047BC4: /* 07C734 7F047BC4 4606B03C */ c.lt.s $f22, $f6 -/* 07C738 7F047BC8 00000000 */ nop +/* 07C738 7F047BC8 00000000 */ nop /* 07C73C 7F047BCC 450201AC */ bc1fl .Ljp7F048280 /* 07C740 7F047BD0 8E2A0008 */ lw $t2, 8($s1) /* 07C744 7F047BD4 8E680014 */ lw $t0, 0x14($s3) @@ -16127,7 +16118,7 @@ glabel object_interaction /* 07C7F0 7F047C80 C7AE0434 */ lwc1 $f14, 0x434($sp) /* 07C7F4 7F047C84 3C018005 */ lui $at, %hi(D_80052B58) # $at, 0x8005 /* 07C7F8 7F047C88 460CA03E */ c.le.s $f20, $f12 -/* 07C7FC 7F047C8C 00000000 */ nop +/* 07C7FC 7F047C8C 00000000 */ nop /* 07C800 7F047C90 45020009 */ bc1fl .Ljp7F047CB8 /* 07C804 7F047C94 4616603C */ c.lt.s $f12, $f22 /* 07C808 7F047C98 46146281 */ sub.s $f10, $f12, $f20 @@ -16135,12 +16126,12 @@ glabel object_interaction /* 07C80C 7F047C9C E62A00A0 */ swc1 $f10, 0xa0($s1) /* 07C810 7F047CA0 C62C00A0 */ lwc1 $f12, 0xa0($s1) /* 07C814 7F047CA4 460CA03E */ c.le.s $f20, $f12 -/* 07C818 7F047CA8 00000000 */ nop +/* 07C818 7F047CA8 00000000 */ nop /* 07C81C 7F047CAC 4503FFFB */ bc1tl .Ljp7F047C9C /* 07C820 7F047CB0 46146281 */ sub.s $f10, $f12, $f20 /* 07C824 7F047CB4 4616603C */ c.lt.s $f12, $f22 .Ljp7F047CB8: -/* 07C828 7F047CB8 00000000 */ nop +/* 07C828 7F047CB8 00000000 */ nop /* 07C82C 7F047CBC 45020009 */ bc1fl .Ljp7F047CE4 /* 07C830 7F047CC0 C7A40480 */ lwc1 $f4, 0x480($sp) /* 07C834 7F047CC4 46146200 */ add.s $f8, $f12, $f20 @@ -16148,25 +16139,25 @@ glabel object_interaction /* 07C838 7F047CC8 E62800A0 */ swc1 $f8, 0xa0($s1) /* 07C83C 7F047CCC C62C00A0 */ lwc1 $f12, 0xa0($s1) /* 07C840 7F047CD0 4616603C */ c.lt.s $f12, $f22 -/* 07C844 7F047CD4 00000000 */ nop +/* 07C844 7F047CD4 00000000 */ nop /* 07C848 7F047CD8 4503FFFB */ bc1tl .Ljp7F047CC8 /* 07C84C 7F047CDC 46146200 */ add.s $f8, $f12, $f20 /* 07C850 7F047CE0 C7A40480 */ lwc1 $f4, 0x480($sp) .Ljp7F047CE4: /* 07C854 7F047CE4 460C2032 */ c.eq.s $f4, $f12 -/* 07C858 7F047CE8 00000000 */ nop +/* 07C858 7F047CE8 00000000 */ nop /* 07C85C 7F047CEC 4502000F */ bc1fl .Ljp7F047D2C /* 07C860 7F047CF0 8E8E0008 */ lw $t6, 8($s4) /* 07C864 7F047CF4 C620009C */ lwc1 $f0, 0x9c($s1) /* 07C868 7F047CF8 C4262B88 */ lwc1 $f6, %lo(D_80052B58)($at) /* 07C86C 7F047CFC 3C018005 */ lui $at, %hi(D_80052B5C) # $at, 0x8005 /* 07C870 7F047D00 4606003E */ c.le.s $f0, $f6 -/* 07C874 7F047D04 00000000 */ nop +/* 07C874 7F047D04 00000000 */ nop /* 07C878 7F047D08 45020008 */ bc1fl .Ljp7F047D2C /* 07C87C 7F047D0C 8E8E0008 */ lw $t6, 8($s4) /* 07C880 7F047D10 C42A2B8C */ lwc1 $f10, %lo(D_80052B5C)($at) /* 07C884 7F047D14 4600503E */ c.le.s $f10, $f0 -/* 07C888 7F047D18 00000000 */ nop +/* 07C888 7F047D18 00000000 */ nop /* 07C88C 7F047D1C 45020003 */ bc1fl .Ljp7F047D2C /* 07C890 7F047D20 8E8E0008 */ lw $t6, 8($s4) /* 07C894 7F047D24 E636009C */ swc1 $f22, 0x9c($s1) @@ -16185,9 +16176,9 @@ glabel object_interaction /* 07C8C4 7F047D54 46023383 */ div.s $f14, $f6, $f2 .Ljp7F047D58: /* 07C8C8 7F047D58 4616703C */ c.lt.s $f14, $f22 -/* 07C8CC 7F047D5C 00000000 */ nop +/* 07C8CC 7F047D5C 00000000 */ nop /* 07C8D0 7F047D60 45000002 */ bc1f .Ljp7F047D6C -/* 07C8D4 7F047D64 00000000 */ nop +/* 07C8D4 7F047D64 00000000 */ nop /* 07C8D8 7F047D68 46147380 */ add.s $f14, $f14, $f20 .Ljp7F047D6C: /* 07C8DC 7F047D6C 0FC160F3 */ jal sinf @@ -16198,7 +16189,7 @@ glabel object_interaction /* 07C8F0 7F047D80 46085102 */ mul.s $f4, $f10, $f8 /* 07C8F4 7F047D84 C42A83B4 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) /* 07C8F8 7F047D88 46040182 */ mul.s $f6, $f0, $f4 -/* 07C8FC 7F047D8C 00000000 */ nop +/* 07C8FC 7F047D8C 00000000 */ nop /* 07C900 7F047D90 460A3202 */ mul.s $f8, $f6, $f10 /* 07C904 7F047D94 E7A80464 */ swc1 $f8, 0x464($sp) /* 07C908 7F047D98 0FC160F3 */ jal sinf @@ -16231,7 +16222,7 @@ glabel object_interaction /* 07C974 7F047E04 E7A806A0 */ swc1 $f8, 0x6a0($sp) /* 07C978 7F047E08 C6280088 */ lwc1 $f8, 0x88($s1) /* 07C97C 7F047E0C 46024202 */ mul.s $f8, $f8, $f2 -/* 07C980 7F047E10 00000000 */ nop +/* 07C980 7F047E10 00000000 */ nop /* 07C984 7F047E14 46044202 */ mul.s $f8, $f8, $f4 /* 07C988 7F047E18 C6240060 */ lwc1 $f4, 0x60($s1) /* 07C98C 7F047E1C 46082100 */ add.s $f4, $f4, $f8 @@ -16428,7 +16419,7 @@ glabel object_interaction /* 07CC88 7F048118 0FC2C5E5 */ jal walkTilesBetweenPoints_NoCallback /* 07CC8C 7F04811C E7AA0010 */ swc1 $f10, 0x10($sp) /* 07CC90 7F048120 14400002 */ bnez $v0, .Ljp7F04812C -/* 07CC94 7F048124 00000000 */ nop +/* 07CC94 7F048124 00000000 */ nop .Ljp7F048128: /* 07CC98 7F048128 00009025 */ move $s2, $zero .Ljp7F04812C: @@ -16451,7 +16442,7 @@ glabel object_interaction /* 07CCDC 7F04816C 0FC0C014 */ jal chrlvIsArrivingLaterallyAtPos /* 07CCE0 7F048170 3C0742C8 */ lui $a3, 0x42c8 /* 07CCE4 7F048174 10400050 */ beqz $v0, .Ljp7F0482B8 -/* 07CCE8 7F048178 00000000 */ nop +/* 07CCE8 7F048178 00000000 */ nop /* 07CCEC 7F04817C 8E2F00A8 */ lw $t7, 0xa8($s1) /* 07CCF0 7F048180 8E3900A4 */ lw $t9, 0xa4($s1) /* 07CCF4 7F048184 3C014270 */ li $at, 0x42700000 # 60.000000 @@ -16462,7 +16453,7 @@ glabel object_interaction /* 07CD08 7F048198 03095821 */ addu $t3, $t8, $t1 /* 07CD0C 7F04819C 8D6E0000 */ lw $t6, ($t3) /* 07CD10 7F0481A0 05C10045 */ bgez $t6, .Ljp7F0482B8 -/* 07CD14 7F0481A4 00000000 */ nop +/* 07CD14 7F0481A4 00000000 */ nop /* 07CD18 7F0481A8 44814000 */ mtc1 $at, $f8 /* 07CD1C 7F0481AC AE2000A4 */ sw $zero, 0xa4($s1) /* 07CD20 7F0481B0 E6360094 */ swc1 $f22, 0x94($s1) @@ -16472,7 +16463,7 @@ glabel object_interaction /* 07CD2C 7F0481BC C6240098 */ lwc1 $f4, 0x98($s1) /* 07CD30 7F0481C0 3C014270 */ li $at, 0x42700000 # 60.000000 /* 07CD34 7F0481C4 4616203C */ c.lt.s $f4, $f22 -/* 07CD38 7F0481C8 00000000 */ nop +/* 07CD38 7F0481C8 00000000 */ nop /* 07CD3C 7F0481CC 45020006 */ bc1fl .Ljp7F0481E8 /* 07CD40 7F0481D0 E6360088 */ swc1 $f22, 0x88($s1) /* 07CD44 7F0481D4 C6260088 */ lwc1 $f6, 0x88($s1) @@ -16501,13 +16492,13 @@ glabel object_interaction /* 07CD9C 7F04822C 0FC15C68 */ jal setupUpdateObjectRoomPosition /* 07CDA0 7F048230 02202025 */ move $a0, $s1 /* 07CDA4 7F048234 10000020 */ b .Ljp7F0482B8 -/* 07CDA8 7F048238 00000000 */ nop +/* 07CDA8 7F048238 00000000 */ nop .Ljp7F04823C: /* 07CDAC 7F04823C C6260098 */ lwc1 $f6, 0x98($s1) .Ljp7F048240: /* 07CDB0 7F048240 3C014270 */ li $at, 0x42700000 # 60.000000 /* 07CDB4 7F048244 4616303C */ c.lt.s $f6, $f22 -/* 07CDB8 7F048248 00000000 */ nop +/* 07CDB8 7F048248 00000000 */ nop /* 07CDBC 7F04824C 45020006 */ bc1fl .Ljp7F048268 /* 07CDC0 7F048250 E6360088 */ swc1 $f22, 0x88($s1) /* 07CDC4 7F048254 C62A0088 */ lwc1 $f10, 0x88($s1) @@ -16525,7 +16516,7 @@ glabel object_interaction .Ljp7F048280: /* 07CDF0 7F048280 000A7880 */ sll $t7, $t2, 2 /* 07CDF4 7F048284 05E1000C */ bgez $t7, .Ljp7F0482B8 -/* 07CDF8 7F048288 00000000 */ nop +/* 07CDF8 7F048288 00000000 */ nop /* 07CDFC 7F04828C C62C0038 */ lwc1 $f12, 0x38($s1) /* 07CE00 7F048290 0FC16BD4 */ jal atan2f /* 07CE04 7F048294 C62E0040 */ lwc1 $f14, 0x40($s1) @@ -16561,7 +16552,7 @@ glabel object_interaction /* 07CE74 7F048304 3C054127 */ lui $a1, (0x4127020C >> 16) # lui $a1, 0x4127 /* 07CE78 7F048308 02002025 */ move $a0, $s0 /* 07CE7C 7F04830C 17090009 */ bne $t8, $t1, .Ljp7F048334 -/* 07CE80 7F048310 00000000 */ nop +/* 07CE80 7F048310 00000000 */ nop /* 07CE84 7F048314 0FC1B51D */ jal sub_GAME_7F06CE84 /* 07CE88 7F048318 34A5020C */ ori $a1, (0x4127020C & 0xFFFF) # ori $a1, $a1, 0x20c /* 07CE8C 7F04831C 3C054049 */ lui $a1, (0x40490FDB >> 16) # lui $a1, 0x4049 @@ -16569,10 +16560,10 @@ glabel object_interaction /* 07CE94 7F048324 0FC1B4CB */ jal setsubroty /* 07CE98 7F048328 8E240014 */ lw $a0, 0x14($s1) /* 07CE9C 7F04832C 10000024 */ b .Ljp7F0483C0 -/* 07CEA0 7F048330 00000000 */ nop +/* 07CEA0 7F048330 00000000 */ nop .Ljp7F048334: /* 07CEA4 7F048334 0C001A57 */ jal bossGetStageNum -/* 07CEA8 7F048338 00000000 */ nop +/* 07CEA8 7F048338 00000000 */ nop /* 07CEAC 7F04833C 24010016 */ li $at, 22 /* 07CEB0 7F048340 1441000A */ bne $v0, $at, .Ljp7F04836C /* 07CEB4 7F048344 3C053F85 */ lui $a1, (0x3F859B3D >> 16) # lui $a1, 0x3f85 @@ -16584,10 +16575,10 @@ glabel object_interaction /* 07CECC 7F04835C 0FC1B4CB */ jal setsubroty /* 07CED0 7F048360 8E240014 */ lw $a0, 0x14($s1) /* 07CED4 7F048364 10000016 */ b .Ljp7F0483C0 -/* 07CED8 7F048368 00000000 */ nop +/* 07CED8 7F048368 00000000 */ nop .Ljp7F04836C: /* 07CEDC 7F04836C 0C001A57 */ jal bossGetStageNum -/* 07CEE0 7F048370 00000000 */ nop +/* 07CEE0 7F048370 00000000 */ nop /* 07CEE4 7F048374 2401001A */ li $at, 26 /* 07CEE8 7F048378 1441000B */ bne $v0, $at, .Ljp7F0483A8 /* 07CEEC 7F04837C 3C053F85 */ lui $a1, 0x3f85 @@ -16600,7 +16591,7 @@ glabel object_interaction /* 07CF08 7F048398 0FC1B4CB */ jal setsubroty /* 07CF0C 7F04839C 8E240014 */ lw $a0, 0x14($s1) /* 07CF10 7F0483A0 10000007 */ b .Ljp7F0483C0 -/* 07CF14 7F0483A4 00000000 */ nop +/* 07CF14 7F0483A4 00000000 */ nop .Ljp7F0483A8: /* 07CF18 7F0483A8 8E240014 */ lw $a0, 0x14($s1) /* 07CF1C 7F0483AC 0FC1B51D */ jal sub_GAME_7F06CE84 @@ -16661,13 +16652,13 @@ glabel object_interaction .Ljp7F04847C: /* 07CFEC 7F04847C 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 /* 07CFF0 7F048480 460CB03E */ c.le.s $f22, $f12 -/* 07CFF4 7F048484 00000000 */ nop +/* 07CFF4 7F048484 00000000 */ nop /* 07CFF8 7F048488 45020016 */ bc1fl .Ljp7F0484E4 /* 07CFFC 7F04848C C6200094 */ lwc1 $f0, 0x94($s1) /* 07D000 7F048490 C42283B4 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) /* 07D004 7F048494 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 /* 07D008 7F048498 4602603E */ c.le.s $f12, $f2 -/* 07D00C 7F04849C 00000000 */ nop +/* 07D00C 7F04849C 00000000 */ nop /* 07D010 7F0484A0 45020006 */ bc1fl .Ljp7F0484BC /* 07D014 7F0484A4 C62E0098 */ lwc1 $f14, 0x98($s1) /* 07D018 7F0484A8 C624009C */ lwc1 $f4, 0x9c($s1) @@ -16690,13 +16681,13 @@ glabel object_interaction .Ljp7F0484E4: /* 07D054 7F0484E4 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 /* 07D058 7F0484E8 4600B03E */ c.le.s $f22, $f0 -/* 07D05C 7F0484EC 00000000 */ nop +/* 07D05C 7F0484EC 00000000 */ nop /* 07D060 7F0484F0 45020016 */ bc1fl .Ljp7F04854C /* 07D064 7F0484F4 8E2F000C */ lw $t7, 0xc($s1) /* 07D068 7F0484F8 C42283B4 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) /* 07D06C 7F0484FC 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8005 /* 07D070 7F048500 4602003E */ c.le.s $f0, $f2 -/* 07D074 7F048504 00000000 */ nop +/* 07D074 7F048504 00000000 */ nop /* 07D078 7F048508 45020006 */ bc1fl .Ljp7F048524 /* 07D07C 7F04850C C62C008C */ lwc1 $f12, 0x8c($s1) /* 07D080 7F048510 C6240090 */ lwc1 $f4, 0x90($s1) @@ -16720,16 +16711,16 @@ glabel object_interaction /* 07D0BC 7F04854C 00008025 */ move $s0, $zero /* 07D0C0 7F048550 000F6B00 */ sll $t5, $t7, 0xc /* 07D0C4 7F048554 05A00014 */ bltz $t5, .Ljp7F0485A8 -/* 07D0C8 7F048558 00000000 */ nop +/* 07D0C8 7F048558 00000000 */ nop /* 07D0CC 7F04855C 0FC13CCE */ jal objIsHealthy /* 07D0D0 7F048560 02202025 */ move $a0, $s1 /* 07D0D4 7F048564 10400010 */ beqz $v0, .Ljp7F0485A8 -/* 07D0D8 7F048568 00000000 */ nop +/* 07D0D8 7F048568 00000000 */ nop /* 07D0DC 7F04856C C624008C */ lwc1 $f4, 0x8c($s1) /* 07D0E0 7F048570 4604B032 */ c.eq.s $f22, $f4 -/* 07D0E4 7F048574 00000000 */ nop +/* 07D0E4 7F048574 00000000 */ nop /* 07D0E8 7F048578 4501000B */ bc1t .Ljp7F0485A8 -/* 07D0EC 7F04857C 00000000 */ nop +/* 07D0EC 7F04857C 00000000 */ nop /* 07D0F0 7F048580 8E390008 */ lw $t9, 8($s1) /* 07D0F4 7F048584 3C05459C */ lui $a1, (0x459C4000 >> 16) # lui $a1, 0x459c /* 07D0F8 7F048588 34A54000 */ ori $a1, (0x459C4000 & 0xFFFF) # ori $a1, $a1, 0x4000 @@ -16745,14 +16736,14 @@ glabel object_interaction /* 07D11C 7F0485AC 8E2400B0 */ lw $a0, 0xb0($s1) /* 07D120 7F0485B0 8E2400B0 */ lw $a0, 0xb0($s1) /* 07D124 7F0485B4 10800005 */ beqz $a0, .Ljp7F0485CC -/* 07D128 7F0485B8 00000000 */ nop +/* 07D128 7F0485B8 00000000 */ nop /* 07D12C 7F0485BC 0C002380 */ jal sndGetPlayingState -/* 07D130 7F0485C0 00000000 */ nop +/* 07D130 7F0485C0 00000000 */ nop /* 07D134 7F0485C4 5440000A */ bnezl $v0, .Ljp7F0485F0 /* 07D138 7F0485C8 8E2400B0 */ lw $a0, 0xb0($s1) .Ljp7F0485CC: /* 07D13C 7F0485CC 0FC3021B */ jal lvlGetControlsLockedFlag -/* 07D140 7F0485D0 00000000 */ nop +/* 07D140 7F0485D0 00000000 */ nop /* 07D144 7F0485D4 14400005 */ bnez $v0, .Ljp7F0485EC /* 07D148 7F0485D8 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 /* 07D14C 7F0485DC 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) @@ -16774,7 +16765,7 @@ glabel object_interaction /* 07D180 7F048610 50800008 */ beql $a0, $zero, .Ljp7F048634 /* 07D184 7F048614 92220003 */ lbu $v0, 3($s1) /* 07D188 7F048618 0C002380 */ jal sndGetPlayingState -/* 07D18C 7F04861C 00000000 */ nop +/* 07D18C 7F04861C 00000000 */ nop /* 07D190 7F048620 50400004 */ beql $v0, $zero, .Ljp7F048634 /* 07D194 7F048624 92220003 */ lbu $v0, 3($s1) /* 07D198 7F048628 0C00240C */ jal sndDeactivate @@ -16799,7 +16790,7 @@ glabel object_interaction /* 07D1DC 7F04866C 44053000 */ mfc1 $a1, $f6 /* 07D1E0 7F048670 44065000 */ mfc1 $a2, $f10 /* 07D1E4 7F048674 0FC1156C */ jal glassCalculateOpacity -/* 07D1E8 7F048678 00000000 */ nop +/* 07D1E8 7F048678 00000000 */ nop /* 07D1EC 7F04867C 8E04008C */ lw $a0, 0x8c($s0) /* 07D1F0 7F048680 AE020088 */ sw $v0, 0x88($s0) /* 07D1F4 7F048684 8FAB067C */ lw $t3, 0x67c($sp) @@ -16808,11 +16799,11 @@ glabel object_interaction /* 07D200 7F048690 15610009 */ bne $t3, $at, .Ljp7F0486B8 /* 07D204 7F048694 240100FF */ li $at, 255 /* 07D208 7F048698 14410005 */ bne $v0, $at, .Ljp7F0486B0 -/* 07D20C 7F04869C 00000000 */ nop +/* 07D20C 7F04869C 00000000 */ nop /* 07D210 7F0486A0 0FC2EA5B */ jal bgToggleDataPortalsContrlBytes1Bit1 /* 07D214 7F0486A4 00002825 */ move $a1, $zero /* 07D218 7F0486A8 10000003 */ b .Ljp7F0486B8 -/* 07D21C 7F0486AC 00000000 */ nop +/* 07D21C 7F0486AC 00000000 */ nop .Ljp7F0486B0: /* 07D220 7F0486B0 0FC2EA5B */ jal bgToggleDataPortalsContrlBytes1Bit1 /* 07D224 7F0486B4 24050001 */ li $a1, 1 @@ -16840,7 +16831,7 @@ glabel object_interaction /* 07D274 7F048704 44054000 */ mfc1 $a1, $f8 /* 07D278 7F048708 44062000 */ mfc1 $a2, $f4 /* 07D27C 7F04870C 0FC1156C */ jal glassCalculateOpacity -/* 07D280 7F048710 00000000 */ nop +/* 07D280 7F048710 00000000 */ nop /* 07D284 7F048714 A60200BE */ sh $v0, 0xbe($s0) /* 07D288 7F048718 8FB9067C */ lw $t9, 0x67c($sp) /* 07D28C 7F04871C 24010001 */ li $at, 1 @@ -16852,7 +16843,7 @@ glabel object_interaction /* 07D2A4 7F048734 00009025 */ move $s2, $zero /* 07D2A8 7F048738 C60600B4 */ lwc1 $f6, 0xb4($s0) /* 07D2AC 7F04873C 4606B03C */ c.lt.s $f22, $f6 -/* 07D2B0 7F048740 00000000 */ nop +/* 07D2B0 7F048740 00000000 */ nop /* 07D2B4 7F048744 45020003 */ bc1fl .Ljp7F048754 /* 07D2B8 7F048748 8E820008 */ lw $v0, 8($s4) /* 07D2BC 7F04874C 00009025 */ move $s2, $zero @@ -16863,18 +16854,18 @@ glabel object_interaction /* 07D2C8 7F048758 2718A20C */ addiu $t8, %lo(skeleton_door) # addiu $t8, $t8, -0x5df4 /* 07D2CC 7F04875C 8C490004 */ lw $t1, 4($v0) /* 07D2D0 7F048760 17090009 */ bne $t8, $t1, .Ljp7F048788 -/* 07D2D4 7F048764 00000000 */ nop +/* 07D2D4 7F048764 00000000 */ nop /* 07D2D8 7F048768 8C4B0008 */ lw $t3, 8($v0) /* 07D2DC 7F04876C 02802025 */ move $a0, $s4 /* 07D2E0 7F048770 0FC1B363 */ jal modelGetNodeRwData /* 07D2E4 7F048774 8D650004 */ lw $a1, 4($t3) /* 07D2E8 7F048778 8C4E0000 */ lw $t6, ($v0) /* 07D2EC 7F04877C 15C00002 */ bnez $t6, .Ljp7F048788 -/* 07D2F0 7F048780 00000000 */ nop +/* 07D2F0 7F048780 00000000 */ nop /* 07D2F4 7F048784 00009025 */ move $s2, $zero .Ljp7F048788: /* 07D2F8 7F048788 12400005 */ beqz $s2, .Ljp7F0487A0 -/* 07D2FC 7F04878C 00000000 */ nop +/* 07D2FC 7F04878C 00000000 */ nop /* 07D300 7F048790 0FC14EB0 */ jal doorDeactivatePortal /* 07D304 7F048794 02002025 */ move $a0, $s0 /* 07D308 7F048798 10000004 */ b .Ljp7F0487AC @@ -16889,7 +16880,7 @@ glabel object_interaction /* 07D320 7F0487B0 560C0008 */ bnel $s0, $t4, .Ljp7F0487D4 /* 07D324 7F0487B4 8E23000C */ lw $v1, 0xc($s1) /* 07D328 7F0487B8 0FC1F52A */ jal get_ptr_for_players_tank -/* 07D32C 7F0487BC 00000000 */ nop +/* 07D32C 7F0487BC 00000000 */ nop /* 07D330 7F0487C0 54530004 */ bnel $v0, $s3, .Ljp7F0487D4 /* 07D334 7F0487C4 8E23000C */ lw $v1, 0xc($s1) /* 07D338 7F0487C8 10000019 */ b .Ljp7F048830 @@ -16907,7 +16898,7 @@ glabel object_interaction /* 07D360 7F0487F0 00001825 */ move $v1, $zero /* 07D364 7F0487F4 31ED0800 */ andi $t5, $t7, 0x800 /* 07D368 7F0487F8 15A0000D */ bnez $t5, .Ljp7F048830 -/* 07D36C 7F0487FC 00000000 */ nop +/* 07D36C 7F0487FC 00000000 */ nop /* 07D370 7F048800 0720000B */ bltz $t9, .Ljp7F048830 /* 07D374 7F048804 02802025 */ move $a0, $s4 /* 07D378 7F048808 26280058 */ addiu $t0, $s1, 0x58 @@ -16944,10 +16935,10 @@ glabel object_interaction /* 07D3EC 7F04887C 26240018 */ addiu $a0, $s1, 0x18 /* 07D3F0 7F048880 8E640004 */ lw $a0, 4($s3) /* 07D3F4 7F048884 00402825 */ move $a1, $v0 -/* 07D3F8 7F048888 0FC14AFA */ jal sub_GAME_7F0526EC +/* 07D3F8 7F048888 0FC14AFA */ jal door7F0526EC /* 07D3FC 7F04888C AFA403A0 */ sw $a0, 0x3a0($sp) /* 07D400 7F048890 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07D404 7F048894 00000000 */ nop +/* 07D404 7F048894 00000000 */ nop /* 07D408 7F048898 00402025 */ move $a0, $v0 /* 07D40C 7F04889C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place /* 07D410 7F0488A0 02402825 */ move $a1, $s2 @@ -17010,7 +17001,7 @@ glabel object_interaction /* 07D4F0 7F048980 C4CC0084 */ lwc1 $f12, 0x84($a2) /* 07D4F4 7F048984 460A6002 */ mul.s $f0, $f12, $f10 /* 07D4F8 7F048988 4602003C */ c.lt.s $f0, $f2 -/* 07D4FC 7F04898C 00000000 */ nop +/* 07D4FC 7F04898C 00000000 */ nop /* 07D500 7F048990 4502001F */ bc1fl .Ljp7F048A10 /* 07D504 7F048994 8FAA0680 */ lw $t2, 0x680($sp) /* 07D508 7F048998 46001201 */ sub.s $f8, $f2, $f0 @@ -17032,7 +17023,7 @@ glabel object_interaction /* 07D548 7F0489D8 00003025 */ move $a2, $zero /* 07D54C 7F0489DC 266C0008 */ addiu $t4, $s3, 8 /* 07D550 7F0489E0 45000008 */ bc1f .Ljp7F048A04 -/* 07D554 7F0489E4 00000000 */ nop +/* 07D554 7F0489E4 00000000 */ nop /* 07D558 7F0489E8 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) /* 07D55C 7F0489EC AFAC0074 */ sw $t4, 0x74($sp) /* 07D560 7F0489F0 0C002386 */ jal sndPlaySfx @@ -17127,7 +17118,7 @@ glabel object_interaction /* 07D6B4 7F048B44 0FC163AE */ jal matrix_4x4_set_position /* 07D6B8 7F048B48 27A503A8 */ addiu $a1, $sp, 0x3a8 /* 07D6BC 7F048B4C 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07D6C0 7F048B50 00000000 */ nop +/* 07D6C0 7F048B50 00000000 */ nop /* 07D6C4 7F048B54 00402025 */ move $a0, $v0 /* 07D6C8 7F048B58 27A503A8 */ addiu $a1, $sp, 0x3a8 /* 07D6CC 7F048B5C 0FC161AB */ jal matrix_4x4_multiply_homogeneous @@ -17149,9 +17140,9 @@ glabel object_interaction /* 07D70C 7F048B9C 46146300 */ add.s $f12, $f12, $f20 .Ljp7F048BA0: /* 07D710 7F048BA0 460CA03E */ c.le.s $f20, $f12 -/* 07D714 7F048BA4 00000000 */ nop +/* 07D714 7F048BA4 00000000 */ nop /* 07D718 7F048BA8 45000002 */ bc1f .Ljp7F048BB4 -/* 07D71C 7F048BAC 00000000 */ nop +/* 07D71C 7F048BAC 00000000 */ nop /* 07D720 7F048BB0 46146301 */ sub.s $f12, $f12, $f20 .Ljp7F048BB4: /* 07D724 7F048BB4 0FC162C7 */ jal matrix_4x4_set_rotation_around_y @@ -17176,7 +17167,7 @@ glabel object_interaction /* 07D770 7F048C00 0FC163AE */ jal matrix_4x4_set_position /* 07D774 7F048C04 8FA50070 */ lw $a1, 0x70($sp) /* 07D778 7F048C08 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07D77C 7F048C0C 00000000 */ nop +/* 07D77C 7F048C0C 00000000 */ nop /* 07D780 7F048C10 00402025 */ move $a0, $v0 /* 07D784 7F048C14 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place /* 07D788 7F048C18 8FA50070 */ lw $a1, 0x70($sp) @@ -17227,7 +17218,7 @@ glabel object_interaction /* 07D834 7F048CC4 0FC163E7 */ jal matrix_scalar_multiply /* 07D838 7F048CC8 C52C0014 */ lwc1 $f12, 0x14($t1) /* 07D83C 7F048CCC 0FC1E26D */ jal camGetWorldToScreenMtxf -/* 07D840 7F048CD0 00000000 */ nop +/* 07D840 7F048CD0 00000000 */ nop /* 07D844 7F048CD4 00402025 */ move $a0, $v0 /* 07D848 7F048CD8 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place /* 07D84C 7F048CDC 8FA50070 */ lw $a1, 0x70($sp) @@ -17420,9 +17411,9 @@ glabel object_interaction /* 07DB20 7F048FB0 460A3202 */ mul.s $f8, $f6, $f10 /* 07DB24 7F048FB4 44815000 */ mtc1 $at, $f10 /* 07DB28 7F048FB8 46144102 */ mul.s $f4, $f8, $f20 -/* 07DB2C 7F048FBC 00000000 */ nop +/* 07DB2C 7F048FBC 00000000 */ nop /* 07DB30 7F048FC0 46141182 */ mul.s $f6, $f2, $f20 -/* 07DB34 7F048FC4 00000000 */ nop +/* 07DB34 7F048FC4 00000000 */ nop /* 07DB38 7F048FC8 460A3202 */ mul.s $f8, $f6, $f10 /* 07DB3C 7F048FCC C626008C */ lwc1 $f6, 0x8c($s1) /* 07DB40 7F048FD0 46082003 */ div.s $f0, $f4, $f8 @@ -17430,20 +17421,20 @@ glabel object_interaction /* 07DB48 7F048FD8 E62A008C */ swc1 $f10, 0x8c($s1) /* 07DB4C 7F048FDC C62C008C */ lwc1 $f12, 0x8c($s1) /* 07DB50 7F048FE0 460CA03E */ c.le.s $f20, $f12 -/* 07DB54 7F048FE4 00000000 */ nop +/* 07DB54 7F048FE4 00000000 */ nop /* 07DB58 7F048FE8 45000008 */ bc1f .Ljp7F04900C -/* 07DB5C 7F048FEC 00000000 */ nop +/* 07DB5C 7F048FEC 00000000 */ nop /* 07DB60 7F048FF0 46146101 */ sub.s $f4, $f12, $f20 .Ljp7F048FF4: /* 07DB64 7F048FF4 E624008C */ swc1 $f4, 0x8c($s1) /* 07DB68 7F048FF8 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07DB6C 7F048FFC 460CA03E */ c.le.s $f20, $f12 -/* 07DB70 7F049000 00000000 */ nop +/* 07DB70 7F049000 00000000 */ nop /* 07DB74 7F049004 4503FFFB */ bc1tl .Ljp7F048FF4 /* 07DB78 7F049008 46146101 */ sub.s $f4, $f12, $f20 .Ljp7F04900C: /* 07DB7C 7F04900C 4616603C */ c.lt.s $f12, $f22 -/* 07DB80 7F049010 00000000 */ nop +/* 07DB80 7F049010 00000000 */ nop /* 07DB84 7F049014 45020009 */ bc1fl .Ljp7F04903C /* 07DB88 7F049018 C626008C */ lwc1 $f6, 0x8c($s1) /* 07DB8C 7F04901C 46146200 */ add.s $f8, $f12, $f20 @@ -17451,7 +17442,7 @@ glabel object_interaction /* 07DB90 7F049020 E628008C */ swc1 $f8, 0x8c($s1) /* 07DB94 7F049024 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07DB98 7F049028 4616603C */ c.lt.s $f12, $f22 -/* 07DB9C 7F04902C 00000000 */ nop +/* 07DB9C 7F04902C 00000000 */ nop /* 07DBA0 7F049030 4503FFFB */ bc1tl .Ljp7F049020 /* 07DBA4 7F049034 46146200 */ add.s $f8, $f12, $f20 .Ljp7F049038: @@ -17461,7 +17452,7 @@ glabel object_interaction /* 07DBB0 7F049040 E62A008C */ swc1 $f10, 0x8c($s1) /* 07DBB4 7F049044 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07DBB8 7F049048 460CA03E */ c.le.s $f20, $f12 -/* 07DBBC 7F04904C 00000000 */ nop +/* 07DBBC 7F04904C 00000000 */ nop /* 07DBC0 7F049050 45020009 */ bc1fl .Ljp7F049078 /* 07DBC4 7F049054 4616603C */ c.lt.s $f12, $f22 /* 07DBC8 7F049058 46146101 */ sub.s $f4, $f12, $f20 @@ -17469,20 +17460,20 @@ glabel object_interaction /* 07DBCC 7F04905C E624008C */ swc1 $f4, 0x8c($s1) /* 07DBD0 7F049060 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07DBD4 7F049064 460CA03E */ c.le.s $f20, $f12 -/* 07DBD8 7F049068 00000000 */ nop +/* 07DBD8 7F049068 00000000 */ nop /* 07DBDC 7F04906C 4503FFFB */ bc1tl .Ljp7F04905C /* 07DBE0 7F049070 46146101 */ sub.s $f4, $f12, $f20 /* 07DBE4 7F049074 4616603C */ c.lt.s $f12, $f22 .Ljp7F049078: -/* 07DBE8 7F049078 00000000 */ nop +/* 07DBE8 7F049078 00000000 */ nop /* 07DBEC 7F04907C 45000008 */ bc1f .Ljp7F0490A0 -/* 07DBF0 7F049080 00000000 */ nop +/* 07DBF0 7F049080 00000000 */ nop /* 07DBF4 7F049084 46146200 */ add.s $f8, $f12, $f20 .Ljp7F049088: /* 07DBF8 7F049088 E628008C */ swc1 $f8, 0x8c($s1) /* 07DBFC 7F04908C C62C008C */ lwc1 $f12, 0x8c($s1) /* 07DC00 7F049090 4616603C */ c.lt.s $f12, $f22 -/* 07DC04 7F049094 00000000 */ nop +/* 07DC04 7F049094 00000000 */ nop /* 07DC08 7F049098 4503FFFB */ bc1tl .Ljp7F049088 /* 07DC0C 7F04909C 46146200 */ add.s $f8, $f12, $f20 .Ljp7F0490A0: @@ -17490,7 +17481,7 @@ glabel object_interaction /* 07DC14 7F0490A4 27A502B0 */ addiu $a1, $sp, 0x2b0 /* 07DC18 7F0490A8 C6260088 */ lwc1 $f6, 0x88($s1) /* 07DC1C 7F0490AC 4606B03C */ c.lt.s $f22, $f6 -/* 07DC20 7F0490B0 00000000 */ nop +/* 07DC20 7F0490B0 00000000 */ nop /* 07DC24 7F0490B4 4502002B */ bc1fl .Ljp7F049164 /* 07DC28 7F0490B8 C62C0090 */ lwc1 $f12, 0x90($s1) /* 07DC2C 7F0490BC 8FAA0264 */ lw $t2, 0x264($sp) @@ -17523,14 +17514,14 @@ glabel object_interaction /* 07DC94 7F049124 C7A20250 */ lwc1 $f2, 0x250($sp) /* 07DC98 7F049128 E6200090 */ swc1 $f0, 0x90($s1) /* 07DC9C 7F04912C 4602003C */ c.lt.s $f0, $f2 -/* 07DCA0 7F049130 00000000 */ nop +/* 07DCA0 7F049130 00000000 */ nop /* 07DCA4 7F049134 45020003 */ bc1fl .Ljp7F049144 /* 07DCA8 7F049138 C62A009C */ lwc1 $f10, 0x9c($s1) /* 07DCAC 7F04913C E6220090 */ swc1 $f2, 0x90($s1) /* 07DCB0 7F049140 C62A009C */ lwc1 $f10, 0x9c($s1) .Ljp7F049144: /* 07DCB4 7F049144 460AB03C */ c.lt.s $f22, $f10 -/* 07DCB8 7F049148 00000000 */ nop +/* 07DCB8 7F049148 00000000 */ nop /* 07DCBC 7F04914C 45020005 */ bc1fl .Ljp7F049164 /* 07DCC0 7F049150 C62C0090 */ lwc1 $f12, 0x90($s1) /* 07DCC4 7F049154 C6280090 */ lwc1 $f8, 0x90($s1) @@ -17588,7 +17579,7 @@ glabel object_interaction /* 07DD90 7F049220 24010028 */ li $at, 40 .Ljp7F049224: /* 07DD94 7F049224 14410086 */ bne $v0, $at, .Ljp7F049440 -/* 07DD98 7F049228 00000000 */ nop +/* 07DD98 7F049228 00000000 */ nop /* 07DD9C 7F04922C 8E8F0008 */ lw $t7, 8($s4) /* 07DDA0 7F049230 3C188005 */ lui $t8, %hi(g_ClockTimer) # $t8, 0x8005 /* 07DDA4 7F049234 8F1883A4 */ lw $t8, %lo(g_ClockTimer)($t8) @@ -17610,7 +17601,7 @@ glabel object_interaction /* 07DDE4 7F049274 E6280088 */ swc1 $f8, 0x88($s1) /* 07DDE8 7F049278 C6200088 */ lwc1 $f0, 0x88($s1) /* 07DDEC 7F04927C 4600A03E */ c.le.s $f20, $f0 -/* 07DDF0 7F049280 00000000 */ nop +/* 07DDF0 7F049280 00000000 */ nop /* 07DDF4 7F049284 45020009 */ bc1fl .Ljp7F0492AC /* 07DDF8 7F049288 4616003C */ c.lt.s $f0, $f22 /* 07DDFC 7F04928C 46140101 */ sub.s $f4, $f0, $f20 @@ -17618,12 +17609,12 @@ glabel object_interaction /* 07DE00 7F049290 E6240088 */ swc1 $f4, 0x88($s1) /* 07DE04 7F049294 C6200088 */ lwc1 $f0, 0x88($s1) /* 07DE08 7F049298 4600A03E */ c.le.s $f20, $f0 -/* 07DE0C 7F04929C 00000000 */ nop +/* 07DE0C 7F04929C 00000000 */ nop /* 07DE10 7F0492A0 4503FFFB */ bc1tl .Ljp7F049290 /* 07DE14 7F0492A4 46140101 */ sub.s $f4, $f0, $f20 /* 07DE18 7F0492A8 4616003C */ c.lt.s $f0, $f22 .Ljp7F0492AC: -/* 07DE1C 7F0492AC 00000000 */ nop +/* 07DE1C 7F0492AC 00000000 */ nop /* 07DE20 7F0492B0 45020009 */ bc1fl .Ljp7F0492D8 /* 07DE24 7F0492B4 8E2B0014 */ lw $t3, 0x14($s1) /* 07DE28 7F0492B8 46140180 */ add.s $f6, $f0, $f20 @@ -17631,7 +17622,7 @@ glabel object_interaction /* 07DE2C 7F0492BC E6260088 */ swc1 $f6, 0x88($s1) /* 07DE30 7F0492C0 C6200088 */ lwc1 $f0, 0x88($s1) /* 07DE34 7F0492C4 4616003C */ c.lt.s $f0, $f22 -/* 07DE38 7F0492C8 00000000 */ nop +/* 07DE38 7F0492C8 00000000 */ nop /* 07DE3C 7F0492CC 4503FFFB */ bc1tl .Ljp7F0492BC /* 07DE40 7F0492D0 46140180 */ add.s $f6, $f0, $f20 .Ljp7F0492D4: @@ -17642,7 +17633,7 @@ glabel object_interaction /* 07DE50 7F0492E0 8D6E0020 */ lw $t6, 0x20($t3) /* 07DE54 7F0492E4 02006825 */ move $t5, $s0 /* 07DE58 7F0492E8 11C00015 */ beqz $t6, .Ljp7F049340 -/* 07DE5C 7F0492EC 00000000 */ nop +/* 07DE5C 7F0492EC 00000000 */ nop .Ljp7F0492F0: /* 07DE60 7F0492F0 8D810000 */ lw $at, ($t4) /* 07DE64 7F0492F4 258C000C */ addiu $t4, $t4, 0xc @@ -17672,7 +17663,7 @@ glabel object_interaction /* 07DEBC 7F04934C 27A50204 */ addiu $a1, $sp, 0x204 /* 07DEC0 7F049350 0008C080 */ sll $t8, $t0, 2 /* 07DEC4 7F049354 07010006 */ bgez $t8, .Ljp7F049370 -/* 07DEC8 7F049358 00000000 */ nop +/* 07DEC8 7F049358 00000000 */ nop /* 07DECC 7F04935C C62C0088 */ lwc1 $f12, 0x88($s1) /* 07DED0 7F049360 0FC162EA */ jal matrix_4x4_set_rotation_around_z /* 07DED4 7F049364 27A50204 */ addiu $a1, $sp, 0x204 @@ -17755,7 +17746,7 @@ glabel object_interaction /* 07DFF8 7F049488 C62E00C8 */ lwc1 $f14, 0xc8($s1) /* 07DFFC 7F04948C 46007387 */ neg.s $f14, $f14 /* 07E000 7F049490 4616703C */ c.lt.s $f14, $f22 -/* 07E004 7F049494 00000000 */ nop +/* 07E004 7F049494 00000000 */ nop /* 07E008 7F049498 45020003 */ bc1fl .Ljp7F0494A8 /* 07E00C 7F04949C C62C00CC */ lwc1 $f12, 0xcc($s1) /* 07E010 7F0494A0 46147380 */ add.s $f14, $f14, $f20 @@ -17763,7 +17754,7 @@ glabel object_interaction .Ljp7F0494A8: /* 07E018 7F0494A8 46006307 */ neg.s $f12, $f12 /* 07E01C 7F0494AC 4616603C */ c.lt.s $f12, $f22 -/* 07E020 7F0494B0 00000000 */ nop +/* 07E020 7F0494B0 00000000 */ nop /* 07E024 7F0494B4 45020003 */ bc1fl .Ljp7F0494C4 /* 07E028 7F0494B8 AFA50070 */ sw $a1, 0x70($sp) /* 07E02C 7F0494BC 46146300 */ add.s $f12, $f12, $f20 @@ -17806,7 +17797,7 @@ glabel object_interaction /* 07E0BC 7F04954C 0FC1616E */ jal matrix_4x4_multiply_homogeneous_in_place /* 07E0C0 7F049550 8FA5006C */ lw $a1, 0x6c($sp) /* 07E0C4 7F049554 0FC1E28D */ jal currentPlayerGetMatrix10D4 -/* 07E0C8 7F049558 00000000 */ nop +/* 07E0C8 7F049558 00000000 */ nop /* 07E0CC 7F04955C 27B00170 */ addiu $s0, $sp, 0x170 /* 07E0D0 7F049560 02003025 */ move $a2, $s0 /* 07E0D4 7F049564 00402025 */ move $a0, $v0 @@ -17891,7 +17882,7 @@ glabel object_interaction /* 07E1F4 7F049684 468021A0 */ cvt.s.w $f6, $f4 /* 07E1F8 7F049688 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07E1FC 7F04968C 44815000 */ mtc1 $at, $f10 -/* 07E200 7F049690 00000000 */ nop +/* 07E200 7F049690 00000000 */ nop /* 07E204 7F049694 460A3180 */ add.s $f6, $f6, $f10 .Ljp7F049698: /* 07E208 7F049698 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -17912,7 +17903,7 @@ glabel object_interaction /* 07E244 7F0496D4 46083100 */ add.s $f4, $f6, $f8 /* 07E248 7F0496D8 44052000 */ mfc1 $a1, $f4 /* 07E24C 7F0496DC 0FC13943 */ jal maybe_detonate_object -/* 07E250 7F0496E0 00000000 */ nop +/* 07E250 7F0496E0 00000000 */ nop .Ljp7F0496E4: /* 07E254 7F0496E4 8FAC0680 */ lw $t4, 0x680($sp) /* 07E258 7F0496E8 5180020D */ beql $t4, $zero, .Ljp7F049F20 @@ -17924,15 +17915,15 @@ glabel object_interaction /* 07E270 7F049700 0FC14FCE */ jal sub_GAME_7F053A3C /* 07E274 7F049704 8E640004 */ lw $a0, 4($s3) /* 07E278 7F049708 10000202 */ b .Ljp7F049F14 -/* 07E27C 7F04970C 00000000 */ nop +/* 07E27C 7F04970C 00000000 */ nop /* 07E280 7F049710 2401000D */ li $at, 13 .Ljp7F049714: /* 07E284 7F049714 144101FF */ bne $v0, $at, .Ljp7F049F14 -/* 07E288 7F049718 00000000 */ nop +/* 07E288 7F049718 00000000 */ nop /* 07E28C 7F04971C 0FC3021B */ jal lvlGetControlsLockedFlag -/* 07E290 7F049720 00000000 */ nop +/* 07E290 7F049720 00000000 */ nop /* 07E294 7F049724 144001FB */ bnez $v0, .Ljp7F049F14 -/* 07E298 7F049728 00000000 */ nop +/* 07E298 7F049728 00000000 */ nop /* 07E29C 7F04972C 8E700004 */ lw $s0, 4($s3) /* 07E2A0 7F049730 AFA00140 */ sw $zero, 0x140($sp) /* 07E2A4 7F049734 AFA0013C */ sw $zero, 0x13c($sp) @@ -17968,7 +17959,7 @@ glabel object_interaction /* 07E318 7F0497A8 50800008 */ beql $a0, $zero, .Ljp7F0497CC /* 07E31C 7F0497AC 8E0400C8 */ lw $a0, 0xc8($s0) /* 07E320 7F0497B0 0C002380 */ jal sndGetPlayingState -/* 07E324 7F0497B4 00000000 */ nop +/* 07E324 7F0497B4 00000000 */ nop /* 07E328 7F0497B8 50400004 */ beql $v0, $zero, .Ljp7F0497CC /* 07E32C 7F0497BC 8E0400C8 */ lw $a0, 0xc8($s0) /* 07E330 7F0497C0 0C00240C */ jal sndDeactivate @@ -17978,7 +17969,7 @@ glabel object_interaction /* 07E33C 7F0497CC 50800008 */ beql $a0, $zero, .Ljp7F0497F0 /* 07E340 7F0497D0 8E1800C4 */ lw $t8, 0xc4($s0) /* 07E344 7F0497D4 0C002380 */ jal sndGetPlayingState -/* 07E348 7F0497D8 00000000 */ nop +/* 07E348 7F0497D8 00000000 */ nop /* 07E34C 7F0497DC 50400004 */ beql $v0, $zero, .Ljp7F0497F0 /* 07E350 7F0497E0 8E1800C4 */ lw $t8, 0xc4($s0) /* 07E354 7F0497E4 0C00240C */ jal sndDeactivate @@ -17997,7 +17988,7 @@ glabel object_interaction /* 07E384 7F049814 0FC14FC3 */ jal chrobjSndCreatePostEventDefault /* 07E388 7F049818 8FA50074 */ lw $a1, 0x74($sp) /* 07E38C 7F04981C 1000000D */ b .Ljp7F049854 -/* 07E390 7F049820 00000000 */ nop +/* 07E390 7F049820 00000000 */ nop .Ljp7F049824: /* 07E394 7F049824 8E0B00C8 */ lw $t3, 0xc8($s0) /* 07E398 7F049828 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 @@ -18087,7 +18078,7 @@ glabel object_interaction /* 07E4D8 7F049968 0FC2C5E5 */ jal walkTilesBetweenPoints_NoCallback /* 07E4DC 7F04996C E7A40010 */ swc1 $f4, 0x10($sp) /* 07E4E0 7F049970 1440000E */ bnez $v0, .Ljp7F0499AC -/* 07E4E4 7F049974 00000000 */ nop +/* 07E4E4 7F049974 00000000 */ nop /* 07E4E8 7F049978 C66A0008 */ lwc1 $f10, 8($s3) /* 07E4EC 7F04997C E7AA0130 */ swc1 $f10, 0x130($sp) /* 07E4F0 7F049980 C666000C */ lwc1 $f6, 0xc($s3) @@ -18199,7 +18190,7 @@ glabel object_interaction /* 07E688 7F049B18 C7A60138 */ lwc1 $f6, 0x138($sp) /* 07E68C 7F049B1C 46062301 */ sub.s $f12, $f4, $f6 /* 07E690 7F049B20 46000102 */ mul.s $f4, $f0, $f0 -/* 07E694 7F049B24 00000000 */ nop +/* 07E694 7F049B24 00000000 */ nop /* 07E698 7F049B28 46021282 */ mul.s $f10, $f2, $f2 /* 07E69C 7F049B2C 460A2100 */ add.s $f4, $f4, $f10 /* 07E6A0 7F049B30 460C6282 */ mul.s $f10, $f12, $f12 @@ -18217,11 +18208,11 @@ glabel object_interaction /* 07E6D0 7F049B60 460C6182 */ mul.s $f6, $f12, $f12 /* 07E6D4 7F049B64 46065100 */ add.s $f4, $f10, $f6 /* 07E6D8 7F049B68 4604A03E */ c.le.s $f20, $f4 -/* 07E6DC 7F049B6C 00000000 */ nop +/* 07E6DC 7F049B6C 00000000 */ nop /* 07E6E0 7F049B70 45000033 */ bc1f .Ljp7F049C40 -/* 07E6E4 7F049B74 00000000 */ nop +/* 07E6E4 7F049B74 00000000 */ nop /* 07E6E8 7F049B78 0FC2296B */ jal bondviewGetIfCurrentPlayerDamageShowTime -/* 07E6EC 7F049B7C 00000000 */ nop +/* 07E6EC 7F049B7C 00000000 */ nop /* 07E6F0 7F049B80 54400030 */ bnezl $v0, .Ljp7F049C44 /* 07E6F4 7F049B84 8FB90120 */ lw $t9, 0x120($sp) /* 07E6F8 7F049B88 0C007E08 */ jal sqrtf @@ -18241,7 +18232,7 @@ glabel object_interaction /* 07E730 7F049BC0 C60A00D4 */ lwc1 $f10, 0xd4($s0) /* 07E734 7F049BC4 46006203 */ div.s $f8, $f12, $f0 /* 07E738 7F049BC8 46081082 */ mul.s $f2, $f2, $f8 -/* 07E73C 7F049BCC 00000000 */ nop +/* 07E73C 7F049BCC 00000000 */ nop /* 07E740 7F049BD0 C60A00D4 */ lwc1 $f10, 0xd4($s0) .Ljp7F049BD4: /* 07E744 7F049BD4 3C013F80 */ li $at, 0x3F800000 # 1.000000 @@ -18250,7 +18241,7 @@ glabel object_interaction /* 07E750 7F049BE0 E60600D4 */ swc1 $f6, 0xd4($s0) /* 07E754 7F049BE4 C60400D4 */ lwc1 $f4, 0xd4($s0) /* 07E758 7F049BE8 4604403E */ c.le.s $f8, $f4 -/* 07E75C 7F049BEC 00000000 */ nop +/* 07E75C 7F049BEC 00000000 */ nop /* 07E760 7F049BF0 45020014 */ bc1fl .Ljp7F049C44 /* 07E764 7F049BF4 8FB90120 */ lw $t9, 0x120($sp) /* 07E768 7F049BF8 0FC17929 */ jal bondwalkItemGetDestructionAmount @@ -18265,7 +18256,7 @@ glabel object_interaction /* 07E78C 7F049C1C 24070001 */ li $a3, 1 /* 07E790 7F049C20 46043302 */ mul.s $f12, $f6, $f4 /* 07E794 7F049C24 0FC22955 */ jal bondviewCallRecordDamageKills -/* 07E798 7F049C28 00000000 */ nop +/* 07E798 7F049C28 00000000 */ nop /* 07E79C 7F049C2C 0FC2296B */ jal bondviewGetIfCurrentPlayerDamageShowTime /* 07E7A0 7F049C30 E61600D4 */ swc1 $f22, 0xd4($s0) /* 07E7A4 7F049C34 50400003 */ beql $v0, $zero, .Ljp7F049C44 @@ -18394,7 +18385,7 @@ glabel object_interaction /* 07E970 7F049E00 468032A0 */ cvt.s.w $f10, $f6 /* 07E974 7F049E04 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07E978 7F049E08 44812000 */ mtc1 $at, $f4 -/* 07E97C 7F049E0C 00000000 */ nop +/* 07E97C 7F049E0C 00000000 */ nop /* 07E980 7F049E10 46045280 */ add.s $f10, $f10, $f4 .Ljp7F049E14: /* 07E984 7F049E14 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -18419,9 +18410,9 @@ glabel object_interaction /* 07E9CC 7F049E5C C42A2BC0 */ lwc1 $f10, %lo(D_80052B90)($at) /* 07E9D0 7F049E60 3C018005 */ lui $at, %hi(D_80052B94) # $at, 0x8005 /* 07E9D4 7F049E64 4600503C */ c.lt.s $f10, $f0 -/* 07E9D8 7F049E68 00000000 */ nop +/* 07E9D8 7F049E68 00000000 */ nop /* 07E9DC 7F049E6C 45000003 */ bc1f .Ljp7F049E7C -/* 07E9E0 7F049E70 00000000 */ nop +/* 07E9E0 7F049E70 00000000 */ nop /* 07E9E4 7F049E74 C4262BC4 */ lwc1 $f6, %lo(D_80052B94)($at) /* 07E9E8 7F049E78 E4660024 */ swc1 $f6, 0x24($v1) .Ljp7F049E7C: @@ -18433,7 +18424,7 @@ glabel object_interaction /* 07EA00 7F049E90 46802220 */ cvt.s.w $f8, $f4 /* 07EA04 7F049E94 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07EA08 7F049E98 44815000 */ mtc1 $at, $f10 -/* 07EA0C 7F049E9C 00000000 */ nop +/* 07EA0C 7F049E9C 00000000 */ nop /* 07EA10 7F049EA0 460A4200 */ add.s $f8, $f8, $f10 .Ljp7F049EA4: /* 07EA14 7F049EA4 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -18462,7 +18453,7 @@ glabel object_interaction /* 07EA68 7F049EF8 8C65001C */ lw $a1, 0x1c($v1) .Ljp7F049EFC: /* 07EA6C 7F049EFC 10A00005 */ beqz $a1, .Ljp7F049F14 -/* 07EA70 7F049F00 00000000 */ nop +/* 07EA70 7F049F00 00000000 */ nop /* 07EA74 7F049F04 0FC1B363 */ jal modelGetNodeRwData /* 07EA78 7F049F08 02802025 */ move $a0, $s4 /* 07EA7C 7F049F0C 8FAC013C */ lw $t4, 0x13c($sp) @@ -18487,7 +18478,7 @@ glabel object_interaction /* 07EABC 7F049F4C 8FB3004C */ lw $s3, 0x4c($sp) /* 07EAC0 7F049F50 8FB40050 */ lw $s4, 0x50($sp) /* 07EAC4 7F049F54 03E00008 */ jr $ra -/* 07EAC8 7F049F58 27BD06B0 */ addiu $sp, $sp, 0x6b0 +/* 07EAC8 7F049F58 27BD06B0 */ addiu $sp, $sp, 0x6b0 ) #endif @@ -18683,7 +18674,7 @@ glabel object_interaction /* 077F28 7F045538 AFAB0680 */ sw $t3, 0x680($sp) .L7F04553C: /* 077F2C 7F04553C 0FC269A4 */ jal get_cur_playernum -/* 077F30 7F045540 00000000 */ nop +/* 077F30 7F045540 00000000 */ nop /* 077F34 7F045544 0FC26A86 */ jal sub_GAME_7F09B4D8 /* 077F38 7F045548 00402025 */ move $a0, $v0 /* 077F3C 7F04554C 2C4E0001 */ sltiu $t6, $v0, 1 @@ -18697,7 +18688,7 @@ glabel object_interaction /* 077F5C 7F04556C 5080000C */ beql $a0, $zero, .L7F0455A0 /* 077F60 7F045570 8FA80680 */ lw $t0, 0x680($sp) /* 077F64 7F045574 0FC269A7 */ jal getPlayerPointerIndex -/* 077F68 7F045578 00000000 */ nop +/* 077F68 7F045578 00000000 */ nop /* 077F6C 7F04557C 04400007 */ bltz $v0, .L7F04559C /* 077F70 7F045580 3C0F8007 */ lui $t7, %hi(g_CurrentPlayer) # $t7, 0x8007 /* 077F74 7F045584 8DEF8BC0 */ lw $t7, %lo(g_CurrentPlayer)($t7) @@ -18828,13 +18819,13 @@ glabel object_interaction /* 078144 7F045754 8E030000 */ lw $v1, ($s0) /* 078148 7F045758 30780020 */ andi $t8, $v1, 0x20 /* 07814C 7F04575C 1300004B */ beqz $t8, .L7F04588C -/* 078150 7F045760 00000000 */ nop +/* 078150 7F045760 00000000 */ nop /* 078154 7F045764 C4328BD8 */ lwc1 $f18, %lo(rocket_initial_gravity_modifier)($at) /* 078158 7F045768 C600001C */ lwc1 $f0, 0x1c($s0) /* 07815C 7F04576C 3C028004 */ lui $v0, %hi(g_GlobalTimerDelta) # $v0, 0x8004 /* 078160 7F045770 24421004 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, 0x1004 /* 078164 7F045774 4612003C */ c.lt.s $f0, $f18 -/* 078168 7F045778 00000000 */ nop +/* 078168 7F045778 00000000 */ nop /* 07816C 7F04577C 4502001C */ bc1fl .L7F0457F0 /* 078170 7F045780 C60000B0 */ lwc1 $f0, 0xb0($s0) /* 078174 7F045784 C6080014 */ lwc1 $f8, 0x14($s0) @@ -18857,9 +18848,9 @@ glabel object_interaction /* 0781B8 7F0457C8 E606001C */ swc1 $f6, 0x1c($s0) /* 0781BC 7F0457CC C604001C */ lwc1 $f4, 0x1c($s0) /* 0781C0 7F0457D0 4604903C */ c.lt.s $f18, $f4 -/* 0781C4 7F0457D4 00000000 */ nop +/* 0781C4 7F0457D4 00000000 */ nop /* 0781C8 7F0457D8 45000002 */ bc1f .L7F0457E4 -/* 0781CC 7F0457DC 00000000 */ nop +/* 0781CC 7F0457DC 00000000 */ nop /* 0781D0 7F0457E0 E612001C */ swc1 $f18, 0x1c($s0) .L7F0457E4: /* 0781D4 7F0457E4 10000029 */ b .L7F04588C @@ -18868,7 +18859,7 @@ glabel object_interaction .L7F0457F0: /* 0781E0 7F0457F0 C7A806A0 */ lwc1 $f8, 0x6a0($sp) /* 0781E4 7F0457F4 4600403C */ c.lt.s $f8, $f0 -/* 0781E8 7F0457F8 00000000 */ nop +/* 0781E8 7F0457F8 00000000 */ nop /* 0781EC 7F0457FC 45000019 */ bc1f .L7F045864 /* 0781F0 7F045800 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 /* 0781F4 7F045804 C4261004 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) @@ -19028,7 +19019,7 @@ glabel object_interaction /* 07843C 7F045A4C 3C038003 */ lui $v1, %hi(D_80030B0C) # $v1, 0x8003 /* 078440 7F045A50 8C63C05C */ lw $v1, %lo(D_80030B0C)($v1) /* 078444 7F045A54 10600007 */ beqz $v1, .L7F045A74 -/* 078448 7F045A58 00000000 */ nop +/* 078448 7F045A58 00000000 */ nop /* 07844C 7F045A5C 90620000 */ lbu $v0, ($v1) /* 078450 7F045A60 24010003 */ li $at, 3 /* 078454 7F045A64 1041003A */ beq $v0, $at, .L7F045B50 @@ -19042,7 +19033,7 @@ glabel object_interaction /* 078470 7F045A80 8C4D0064 */ lw $t5, 0x64($v0) /* 078474 7F045A84 31B80080 */ andi $t8, $t5, 0x80 /* 078478 7F045A88 13000002 */ beqz $t8, .L7F045A94 -/* 07847C 7F045A8C 00000000 */ nop +/* 07847C 7F045A8C 00000000 */ nop /* 078480 7F045A90 24040001 */ li $a0, 1 .L7F045A94: /* 078484 7F045A94 5480002F */ bnezl $a0, .L7F045B54 @@ -19152,7 +19143,7 @@ glabel object_interaction /* 078614 7F045C24 C610008C */ lwc1 $f16, 0x8c($s0) /* 078618 7F045C28 C7AA0628 */ lwc1 $f10, 0x628($sp) /* 07861C 7F045C2C 4610B03C */ c.lt.s $f22, $f16 -/* 078620 7F045C30 00000000 */ nop +/* 078620 7F045C30 00000000 */ nop /* 078624 7F045C34 4502001D */ bc1fl .L7F045CAC /* 078628 7F045C38 8E0E0000 */ lw $t6, ($s0) /* 07862C 7F045C3C C6020004 */ lwc1 $f2, 4($s0) @@ -19170,7 +19161,7 @@ glabel object_interaction /* 07865C 7F045C6C 46068200 */ add.s $f8, $f16, $f6 /* 078660 7F045C70 46004107 */ neg.s $f4, $f8 /* 078664 7F045C74 46047382 */ mul.s $f14, $f14, $f4 -/* 078668 7F045C78 00000000 */ nop +/* 078668 7F045C78 00000000 */ nop /* 07866C 7F045C7C 460A7182 */ mul.s $f6, $f14, $f10 /* 078670 7F045C80 46061200 */ add.s $f8, $f2, $f6 /* 078674 7F045C84 E6080004 */ swc1 $f8, 4($s0) @@ -19350,7 +19341,7 @@ glabel object_interaction /* 078910 7F045F20 C610008C */ lwc1 $f16, 0x8c($s0) /* 078914 7F045F24 C7A40628 */ lwc1 $f4, 0x628($sp) /* 078918 7F045F28 4610B03C */ c.lt.s $f22, $f16 -/* 07891C 7F045F2C 00000000 */ nop +/* 07891C 7F045F2C 00000000 */ nop /* 078920 7F045F30 4502002B */ bc1fl .L7F045FE0 /* 078924 7F045F34 8E0F0000 */ lw $t7, ($s0) /* 078928 7F045F38 C6020004 */ lwc1 $f2, 4($s0) @@ -19369,7 +19360,7 @@ glabel object_interaction /* 07895C 7F045F6C 46088280 */ add.s $f10, $f16, $f8 /* 078960 7F045F70 46005187 */ neg.s $f6, $f10 /* 078964 7F045F74 46067382 */ mul.s $f14, $f14, $f6 -/* 078968 7F045F78 00000000 */ nop +/* 078968 7F045F78 00000000 */ nop /* 07896C 7F045F7C 46047202 */ mul.s $f8, $f14, $f4 /* 078970 7F045F80 46081280 */ add.s $f10, $f2, $f8 /* 078974 7F045F84 E60A0004 */ swc1 $f10, 4($s0) @@ -19385,12 +19376,12 @@ glabel object_interaction /* 07899C 7F045FAC C6080008 */ lwc1 $f8, 8($s0) /* 0789A0 7F045FB0 24180001 */ li $t8, 1 /* 0789A4 7F045FB4 4608B03E */ c.le.s $f22, $f8 -/* 0789A8 7F045FB8 00000000 */ nop +/* 0789A8 7F045FB8 00000000 */ nop /* 0789AC 7F045FBC 45030007 */ bc1tl .L7F045FDC /* 0789B0 7F045FC0 AFB80614 */ sw $t8, 0x614($sp) /* 0789B4 7F045FC4 C62A005C */ lwc1 $f10, 0x5c($s1) /* 0789B8 7F045FC8 460AA03E */ c.le.s $f20, $f10 -/* 0789BC 7F045FCC 00000000 */ nop +/* 0789BC 7F045FCC 00000000 */ nop /* 0789C0 7F045FD0 45020003 */ bc1fl .L7F045FE0 /* 0789C4 7F045FD4 8E0F0000 */ lw $t7, ($s0) /* 0789C8 7F045FD8 AFB80614 */ sw $t8, 0x614($sp) @@ -19400,7 +19391,7 @@ glabel object_interaction /* 0789D0 7F045FE0 C7B40644 */ lwc1 $f20, 0x644($sp) /* 0789D4 7F045FE4 31F90008 */ andi $t9, $t7, 8 /* 0789D8 7F045FE8 17200014 */ bnez $t9, .L7F04603C -/* 0789DC 7F045FEC 00000000 */ nop +/* 0789DC 7F045FEC 00000000 */ nop /* 0789E0 7F045FF0 8E640014 */ lw $a0, 0x14($s3) /* 0789E4 7F045FF4 8E650008 */ lw $a1, 8($s3) /* 0789E8 7F045FF8 0FC2C70C */ jal stanGetPositionYValue @@ -19414,9 +19405,9 @@ glabel object_interaction /* 078A08 7F046018 C666000C */ lwc1 $f6, 0xc($s3) /* 078A0C 7F04601C 00004825 */ move $t1, $zero /* 078A10 7F046020 4604303C */ c.lt.s $f6, $f4 -/* 078A14 7F046024 00000000 */ nop +/* 078A14 7F046024 00000000 */ nop /* 078A18 7F046028 45000002 */ bc1f .L7F046034 -/* 078A1C 7F04602C 00000000 */ nop +/* 078A1C 7F04602C 00000000 */ nop /* 078A20 7F046030 24090001 */ li $t1, 1 .L7F046034: /* 078A24 7F046034 10000001 */ b .L7F04603C @@ -19444,7 +19435,7 @@ glabel object_interaction /* 078A6C 7F04607C 8FAF0614 */ lw $t7, 0x614($sp) /* 078A70 7F046080 8FB90618 */ lw $t9, 0x618($sp) /* 078A74 7F046084 17000003 */ bnez $t8, .L7F046094 -/* 078A78 7F046088 00000000 */ nop +/* 078A78 7F046088 00000000 */ nop /* 078A7C 7F04608C 51E0003A */ beql $t7, $zero, .L7F046178 /* 078A80 7F046090 922E0003 */ lbu $t6, 3($s1) .L7F046094: @@ -19476,9 +19467,9 @@ glabel object_interaction .L7F0460F0: /* 078AE0 7F0460F0 C610008C */ lwc1 $f16, 0x8c($s0) /* 078AE4 7F0460F4 4610B03C */ c.lt.s $f22, $f16 -/* 078AE8 7F0460F8 00000000 */ nop +/* 078AE8 7F0460F8 00000000 */ nop /* 078AEC 7F0460FC 4500001B */ bc1f .L7F04616C -/* 078AF0 7F046100 00000000 */ nop +/* 078AF0 7F046100 00000000 */ nop /* 078AF4 7F046104 C6040008 */ lwc1 $f4, 8($s0) /* 078AF8 7F046108 46008207 */ neg.s $f8, $f16 /* 078AFC 7F04610C 3C018005 */ lui $at, %hi(D_80052AA8) # $at, 0x8005 @@ -19487,18 +19478,18 @@ glabel object_interaction /* 078B08 7F046118 E60A0008 */ swc1 $f10, 8($s0) /* 078B0C 7F04611C C6060008 */ lwc1 $f6, 8($s0) /* 078B10 7F046120 4600303C */ c.lt.s $f6, $f0 -/* 078B14 7F046124 00000000 */ nop +/* 078B14 7F046124 00000000 */ nop /* 078B18 7F046128 45020013 */ bc1fl .L7F046178 /* 078B1C 7F04612C 922E0003 */ lbu $t6, 3($s1) /* 078B20 7F046130 8E080000 */ lw $t0, ($s0) /* 078B24 7F046134 02202025 */ move $a0, $s1 /* 078B28 7F046138 310C0002 */ andi $t4, $t0, 2 /* 078B2C 7F04613C 11800007 */ beqz $t4, .L7F04615C -/* 078B30 7F046140 00000000 */ nop +/* 078B30 7F046140 00000000 */ nop /* 078B34 7F046144 8E0B0090 */ lw $t3, 0x90($s0) /* 078B38 7F046148 24010001 */ li $at, 1 /* 078B3C 7F04614C 15610003 */ bne $t3, $at, .L7F04615C -/* 078B40 7F046150 00000000 */ nop +/* 078B40 7F046150 00000000 */ nop /* 078B44 7F046154 10000007 */ b .L7F046174 /* 078B48 7F046158 E6000008 */ swc1 $f0, 8($s0) .L7F04615C: @@ -19548,7 +19539,7 @@ glabel object_interaction /* 078BE0 7F0461F0 C4248BEC */ lwc1 $f4, %lo(D_80052AAC)($at) /* 078BE4 7F0461F4 460A3380 */ add.s $f14, $f6, $f10 /* 078BE8 7F0461F8 460E203C */ c.lt.s $f4, $f14 -/* 078BEC 7F0461FC 00000000 */ nop +/* 078BEC 7F0461FC 00000000 */ nop /* 078BF0 7F046200 45020005 */ bc1fl .L7F046218 /* 078BF4 7F046204 8E0F00A8 */ lw $t7, 0xa8($s0) /* 078BF8 7F046208 E6160010 */ swc1 $f22, 0x10($s0) @@ -19571,7 +19562,7 @@ glabel object_interaction /* 078C34 7F046244 2667002C */ addiu $a3, $s3, 0x2c /* 078C38 7F046248 31480008 */ andi $t0, $t2, 8 /* 078C3C 7F04624C 0008602B */ sltu $t4, $zero, $t0 -/* 078C40 7F046250 0FC27711 */ jal sub_GAME_7F09E700 +/* 078C40 7F046250 0FC27711 */ jal explosionCreateSmoke /* 078C44 7F046254 AFAC0010 */ sw $t4, 0x10($sp) /* 078C48 7F046258 10000013 */ b .L7F0462A8 /* 078C4C 7F04625C 8FB9066C */ lw $t9, 0x66c($sp) @@ -19593,7 +19584,7 @@ glabel object_interaction /* 078C80 7F046290 31B80008 */ andi $t8, $t5, 8 /* 078C84 7F046294 0018782B */ sltu $t7, $zero, $t8 /* 078C88 7F046298 AFAF0010 */ sw $t7, 0x10($sp) -/* 078C8C 7F04629C 0FC27711 */ jal sub_GAME_7F09E700 +/* 078C8C 7F04629C 0FC27711 */ jal explosionCreateSmoke /* 078C90 7F0462A0 2667002C */ addiu $a3, $s3, 0x2c .L7F0462A4: /* 078C94 7F0462A4 8FB9066C */ lw $t9, 0x66c($sp) @@ -19700,7 +19691,7 @@ glabel object_interaction /* 078E04 7F046414 2406000A */ li $a2, 10 /* 078E08 7F046418 8C450014 */ lw $a1, 0x14($v0) /* 078E0C 7F04641C AFAC0010 */ sw $t4, 0x10($sp) -/* 078E10 7F046420 0FC27711 */ jal sub_GAME_7F09E700 +/* 078E10 7F046420 0FC27711 */ jal explosionCreateSmoke /* 078E14 7F046424 2447002C */ addiu $a3, $v0, 0x2c /* 078E18 7F046428 100000ED */ b .L7F0467E0 /* 078E1C 7F04642C 8FB90698 */ lw $t9, 0x698($sp) @@ -19734,7 +19725,7 @@ glabel object_interaction /* 078E84 7F046494 C6000060 */ lwc1 $f0, 0x60($s0) /* 078E88 7F046498 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 078E8C 7F04649C 4600403C */ c.lt.s $f8, $f0 -/* 078E90 7F0464A0 00000000 */ nop +/* 078E90 7F0464A0 00000000 */ nop /* 078E94 7F0464A4 45030006 */ bc1tl .L7F0464C0 /* 078E98 7F0464A8 44813000 */ mtc1 $at, $f6 /* 078E9C 7F0464AC 8E0E0000 */ lw $t6, ($s0) @@ -19743,7 +19734,7 @@ glabel object_interaction /* 078EA8 7F0464B8 44060000 */ mfc1 $a2, $f0 /* 078EAC 7F0464BC 44813000 */ mtc1 $at, $f6 .L7F0464C0: -/* 078EB0 7F0464C0 00000000 */ nop +/* 078EB0 7F0464C0 00000000 */ nop /* 078EB4 7F0464C4 E6060060 */ swc1 $f6, 0x60($s0) /* 078EB8 7F0464C8 C6000060 */ lwc1 $f0, 0x60($s0) /* 078EBC 7F0464CC 44060000 */ mfc1 $a2, $f0 @@ -19767,29 +19758,29 @@ glabel object_interaction /* 078F00 7F046510 C60A0004 */ lwc1 $f10, 4($s0) .L7F046514: /* 078F04 7F046514 460AB032 */ c.eq.s $f22, $f10 -/* 078F08 7F046518 00000000 */ nop +/* 078F08 7F046518 00000000 */ nop /* 078F0C 7F04651C 4502000F */ bc1fl .L7F04655C /* 078F10 7F046520 8E180000 */ lw $t8, ($s0) /* 078F14 7F046524 C604000C */ lwc1 $f4, 0xc($s0) /* 078F18 7F046528 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 078F1C 7F04652C 4604B032 */ c.eq.s $f22, $f4 -/* 078F20 7F046530 00000000 */ nop +/* 078F20 7F046530 00000000 */ nop /* 078F24 7F046534 45020009 */ bc1fl .L7F04655C /* 078F28 7F046538 8E180000 */ lw $t8, ($s0) /* 078F2C 7F04653C C6080060 */ lwc1 $f8, 0x60($s0) /* 078F30 7F046540 44813000 */ mtc1 $at, $f6 -/* 078F34 7F046544 00000000 */ nop +/* 078F34 7F046544 00000000 */ nop /* 078F38 7F046548 4606403C */ c.lt.s $f8, $f6 -/* 078F3C 7F04654C 00000000 */ nop +/* 078F3C 7F04654C 00000000 */ nop /* 078F40 7F046550 45000088 */ bc1f .L7F046774 -/* 078F44 7F046554 00000000 */ nop +/* 078F44 7F046554 00000000 */ nop /* 078F48 7F046558 8E180000 */ lw $t8, ($s0) .L7F04655C: /* 078F4C 7F04655C 02202025 */ move $a0, $s1 /* 078F50 7F046560 26390018 */ addiu $t9, $s1, 0x18 /* 078F54 7F046564 330F0008 */ andi $t7, $t8, 8 /* 078F58 7F046568 15E00082 */ bnez $t7, .L7F046774 -/* 078F5C 7F04656C 00000000 */ nop +/* 078F5C 7F04656C 00000000 */ nop /* 078F60 7F046570 AFB90074 */ sw $t9, 0x74($sp) /* 078F64 7F046574 0FC1004E */ jal chrobjGetBboxFromObjectRecord /* 078F68 7F046578 00009025 */ move $s2, $zero @@ -19813,19 +19804,19 @@ glabel object_interaction /* 078FAC 7F0465BC E7A406A4 */ swc1 $f4, 0x6a4($sp) /* 078FB0 7F0465C0 C6080060 */ lwc1 $f8, 0x60($s0) /* 078FB4 7F0465C4 4608303E */ c.le.s $f6, $f8 -/* 078FB8 7F0465C8 00000000 */ nop +/* 078FB8 7F0465C8 00000000 */ nop /* 078FBC 7F0465CC 45020035 */ bc1fl .L7F0466A4 /* 078FC0 7F0465D0 24840001 */ addiu $a0, $a0, 1 /* 078FC4 7F0465D4 C60A0094 */ lwc1 $f10, 0x94($s0) /* 078FC8 7F0465D8 460AB03C */ c.lt.s $f22, $f10 -/* 078FCC 7F0465DC 00000000 */ nop +/* 078FCC 7F0465DC 00000000 */ nop /* 078FD0 7F0465E0 45020027 */ bc1fl .L7F046680 /* 078FD4 7F0465E4 C6060004 */ lwc1 $f6, 4($s0) /* 078FD8 7F0465E8 C600000C */ lwc1 $f0, 0xc($s0) /* 078FDC 7F0465EC C6020004 */ lwc1 $f2, 4($s0) /* 078FE0 7F0465F0 AFA40550 */ sw $a0, 0x550($sp) /* 078FE4 7F0465F4 46000102 */ mul.s $f4, $f0, $f0 -/* 078FE8 7F0465F8 00000000 */ nop +/* 078FE8 7F0465F8 00000000 */ nop /* 078FEC 7F0465FC 46021202 */ mul.s $f8, $f2, $f2 /* 078FF0 7F046600 0C007614 */ jal sqrtf /* 078FF4 7F046604 46082300 */ add.s $f12, $f4, $f8 @@ -19841,7 +19832,7 @@ glabel object_interaction /* 07901C 7F04662C 3C038004 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8004 /* 079020 7F046630 46002303 */ div.s $f12, $f4, $f0 /* 079024 7F046634 460C403E */ c.le.s $f8, $f12 -/* 079028 7F046638 00000000 */ nop +/* 079028 7F046638 00000000 */ nop /* 07902C 7F04663C 45020005 */ bc1fl .L7F046654 /* 079030 7F046640 C6020004 */ lwc1 $f2, 4($s0) /* 079034 7F046644 E6160004 */ swc1 $f22, 4($s0) @@ -19851,7 +19842,7 @@ glabel object_interaction .L7F046654: /* 079044 7F046654 C600000C */ lwc1 $f0, 0xc($s0) /* 079048 7F046658 460C1182 */ mul.s $f6, $f2, $f12 -/* 07904C 7F04665C 00000000 */ nop +/* 07904C 7F04665C 00000000 */ nop /* 079050 7F046660 460C0102 */ mul.s $f4, $f0, $f12 /* 079054 7F046664 46061281 */ sub.s $f10, $f2, $f6 /* 079058 7F046668 46040201 */ sub.s $f8, $f0, $f4 @@ -19865,7 +19856,7 @@ glabel object_interaction /* 079070 7F046680 C604000C */ lwc1 $f4, 0xc($s0) /* 079074 7F046684 3C038004 */ lui $v1, %hi(g_ClockTimer) # $v1, 0x8004 /* 079078 7F046688 460E3282 */ mul.s $f10, $f6, $f14 -/* 07907C 7F04668C 00000000 */ nop +/* 07907C 7F04668C 00000000 */ nop /* 079080 7F046690 460E2202 */ mul.s $f8, $f4, $f14 /* 079084 7F046694 E60A0004 */ swc1 $f10, 4($s0) /* 079088 7F046698 E608000C */ swc1 $f8, 0xc($s0) @@ -19905,30 +19896,30 @@ glabel object_interaction /* 079104 7F046714 E62C005C */ swc1 $f12, 0x5c($s1) /* 079108 7F046718 C6020004 */ lwc1 $f2, 4($s0) /* 07910C 7F04671C 460E103C */ c.lt.s $f2, $f14 -/* 079110 7F046720 00000000 */ nop +/* 079110 7F046720 00000000 */ nop /* 079114 7F046724 45000013 */ bc1f .L7F046774 -/* 079118 7F046728 00000000 */ nop +/* 079118 7F046728 00000000 */ nop /* 07911C 7F04672C C4248C00 */ lwc1 $f4, %lo(D_80052AC0)($at) /* 079120 7F046730 4602203C */ c.lt.s $f4, $f2 -/* 079124 7F046734 00000000 */ nop +/* 079124 7F046734 00000000 */ nop /* 079128 7F046738 4500000E */ bc1f .L7F046774 -/* 07912C 7F04673C 00000000 */ nop +/* 07912C 7F04673C 00000000 */ nop /* 079130 7F046740 C600000C */ lwc1 $f0, 0xc($s0) /* 079134 7F046744 3C018005 */ lui $at, %hi(D_80052AC4) # $at, 0x8005 /* 079138 7F046748 460E003C */ c.lt.s $f0, $f14 -/* 07913C 7F04674C 00000000 */ nop +/* 07913C 7F04674C 00000000 */ nop /* 079140 7F046750 45000008 */ bc1f .L7F046774 -/* 079144 7F046754 00000000 */ nop +/* 079144 7F046754 00000000 */ nop /* 079148 7F046758 C4288C04 */ lwc1 $f8, %lo(D_80052AC4)($at) /* 07914C 7F04675C 4600403C */ c.lt.s $f8, $f0 -/* 079150 7F046760 00000000 */ nop +/* 079150 7F046760 00000000 */ nop /* 079154 7F046764 45000003 */ bc1f .L7F046774 -/* 079158 7F046768 00000000 */ nop +/* 079158 7F046768 00000000 */ nop /* 07915C 7F04676C E616000C */ swc1 $f22, 0xc($s0) /* 079160 7F046770 E6160004 */ swc1 $f22, 4($s0) .L7F046774: /* 079164 7F046774 16400005 */ bnez $s2, .L7F04678C -/* 079168 7F046778 00000000 */ nop +/* 079168 7F046778 00000000 */ nop /* 07916C 7F04677C 8E0A0000 */ lw $t2, ($s0) /* 079170 7F046780 31480008 */ andi $t0, $t2, 8 /* 079174 7F046784 51000016 */ beql $t0, $zero, .L7F0467E0 @@ -20014,16 +20005,16 @@ glabel object_interaction /* 079298 7F0468A8 24030001 */ li $v1, 1 /* 07929C 7F0468AC 02002025 */ move $a0, $s0 /* 0792A0 7F0468B0 10400011 */ beqz $v0, .L7F0468F8 -/* 0792A4 7F0468B4 00000000 */ nop +/* 0792A4 7F0468B4 00000000 */ nop /* 0792A8 7F0468B8 1050000F */ beq $v0, $s0, .L7F0468F8 -/* 0792AC 7F0468BC 00000000 */ nop +/* 0792AC 7F0468BC 00000000 */ nop /* 0792B0 7F0468C0 805900BC */ lb $t9, 0xbc($v0) .L7F0468C4: /* 0792B4 7F0468C4 57200007 */ bnezl $t9, .L7F0468E4 /* 0792B8 7F0468C8 00001825 */ move $v1, $zero /* 0792BC 7F0468CC C44A00B4 */ lwc1 $f10, 0xb4($v0) /* 0792C0 7F0468D0 460AB03C */ c.lt.s $f22, $f10 -/* 0792C4 7F0468D4 00000000 */ nop +/* 0792C4 7F0468D4 00000000 */ nop /* 0792C8 7F0468D8 45020003 */ bc1fl .L7F0468E8 /* 0792CC 7F0468DC 8C4200C8 */ lw $v0, 0xc8($v0) /* 0792D0 7F0468E0 00001825 */ move $v1, $zero @@ -20031,7 +20022,7 @@ glabel object_interaction /* 0792D4 7F0468E4 8C4200C8 */ lw $v0, 0xc8($v0) .L7F0468E8: /* 0792D8 7F0468E8 10400003 */ beqz $v0, .L7F0468F8 -/* 0792DC 7F0468EC 00000000 */ nop +/* 0792DC 7F0468EC 00000000 */ nop /* 0792E0 7F0468F0 5450FFF4 */ bnel $v0, $s0, .L7F0468C4 /* 0792E4 7F0468F4 805900BC */ lb $t9, 0xbc($v0) .L7F0468F8: @@ -20043,15 +20034,15 @@ glabel object_interaction .L7F04690C: /* 0792FC 7F04690C 24010008 */ li $at, 8 /* 079300 7F046910 1521000B */ bne $t1, $at, .L7F046940 -/* 079304 7F046914 00000000 */ nop +/* 079304 7F046914 00000000 */ nop /* 079308 7F046918 0FC15340 */ jal doorIsClosed /* 07930C 7F04691C 02002025 */ move $a0, $s0 /* 079310 7F046920 10400007 */ beqz $v0, .L7F046940 -/* 079314 7F046924 00000000 */ nop +/* 079314 7F046924 00000000 */ nop /* 079318 7F046928 0FC0F9F6 */ jal doorIsPadlockFree /* 07931C 7F04692C 02002025 */ move $a0, $s0 /* 079320 7F046930 10400003 */ beqz $v0, .L7F046940 -/* 079324 7F046934 00000000 */ nop +/* 079324 7F046934 00000000 */ nop /* 079328 7F046938 0FC1571F */ jal doorActivateWrapper /* 07932C 7F04693C 02602025 */ move $a0, $s3 .L7F046940: @@ -20061,12 +20052,12 @@ glabel object_interaction /* 07933C 7F04694C 3C0B8004 */ lui $t3, %hi(g_ClockTimer) # $t3, 0x8004 /* 079340 7F046950 0148082A */ slt $at, $t2, $t0 /* 079344 7F046954 14200004 */ bnez $at, .L7F046968 -/* 079348 7F046958 00000000 */ nop +/* 079348 7F046958 00000000 */ nop /* 07934C 7F04695C 8D6B0FF4 */ lw $t3, %lo(g_ClockTimer)($t3) /* 079350 7F046960 556006AB */ bnezl $t3, .L7F048410 /* 079354 7F046964 92220003 */ lbu $v0, 3($s1) .L7F046968: -/* 079358 7F046968 0FC154A5 */ jal sub_GAME_7F054FB4 +/* 079358 7F046968 0FC154A5 */ jal door7F054FB4 /* 07935C 7F04696C 02002025 */ move $a0, $s0 /* 079360 7F046970 100006A7 */ b .L7F048410 /* 079364 7F046974 92220003 */ lbu $v0, 3($s1) @@ -20104,36 +20095,36 @@ glabel object_interaction /* 0793DC 7F0469EC 4500000E */ bc1f .L7F046A28 /* 0793E0 7F0469F0 46082381 */ sub.s $f14, $f4, $f8 /* 0793E4 7F0469F4 46000182 */ mul.s $f6, $f0, $f0 -/* 0793E8 7F0469F8 00000000 */ nop +/* 0793E8 7F0469F8 00000000 */ nop /* 0793EC 7F0469FC 460C6282 */ mul.s $f10, $f12, $f12 -/* 0793F0 7F046A00 00000000 */ nop +/* 0793F0 7F046A00 00000000 */ nop /* 0793F4 7F046A04 46021102 */ mul.s $f4, $f2, $f2 /* 0793F8 7F046A08 46045200 */ add.s $f8, $f10, $f4 /* 0793FC 7F046A0C 460E7282 */ mul.s $f10, $f14, $f14 /* 079400 7F046A10 460A4100 */ add.s $f4, $f8, $f10 /* 079404 7F046A14 4604303C */ c.lt.s $f6, $f4 -/* 079408 7F046A18 00000000 */ nop +/* 079408 7F046A18 00000000 */ nop /* 07940C 7F046A1C 45000002 */ bc1f .L7F046A28 -/* 079410 7F046A20 00000000 */ nop +/* 079410 7F046A20 00000000 */ nop /* 079414 7F046A24 00009025 */ move $s2, $zero .L7F046A28: /* 079418 7F046A28 8E380008 */ lw $t8, 8($s1) /* 07941C 7F046A2C 00187880 */ sll $t7, $t8, 2 /* 079420 7F046A30 05E10002 */ bgez $t7, .L7F046A3C -/* 079424 7F046A34 00000000 */ nop +/* 079424 7F046A34 00000000 */ nop /* 079428 7F046A38 00009025 */ move $s2, $zero .L7F046A3C: /* 07942C 7F046A3C 1240003A */ beqz $s2, .L7F046B28 -/* 079430 7F046A40 00000000 */ nop +/* 079430 7F046A40 00000000 */ nop /* 079434 7F046A44 0FC16BB8 */ jal atan2f /* 079438 7F046A48 E7B2051C */ swc1 $f18, 0x51c($sp) /* 07943C 7F046A4C C60200C8 */ lwc1 $f2, 0xc8($s0) /* 079440 7F046A50 C7B2051C */ lwc1 $f18, 0x51c($sp) /* 079444 7F046A54 3C018005 */ lui $at, %hi(D_80052ACC) /* 079448 7F046A58 4616103C */ c.lt.s $f2, $f22 -/* 07944C 7F046A5C 00000000 */ nop +/* 07944C 7F046A5C 00000000 */ nop /* 079450 7F046A60 45000005 */ bc1f .L7F046A78 -/* 079454 7F046A64 00000000 */ nop +/* 079454 7F046A64 00000000 */ nop /* 079458 7F046A68 3C018005 */ lui $at, %hi(D_80052AC8) # $at, 0x8005 /* 07945C 7F046A6C C4348C08 */ lwc1 $f20, %lo(D_80052AC8)($at) /* 079460 7F046A70 10000007 */ b .L7F046A90 @@ -20141,7 +20132,7 @@ glabel object_interaction .L7F046A78: /* 079468 7F046A78 C4348C0C */ lwc1 $f20, %lo(D_80052ACC)($at) /* 07946C 7F046A7C 4602A03E */ c.le.s $f20, $f2 -/* 079470 7F046A80 00000000 */ nop +/* 079470 7F046A80 00000000 */ nop /* 079474 7F046A84 45020003 */ bc1fl .L7F046A94 /* 079478 7F046A88 C60800C4 */ lwc1 $f8, 0xc4($s0) /* 07947C 7F046A8C 46141081 */ sub.s $f2, $f2, $f20 @@ -20151,7 +20142,7 @@ glabel object_interaction /* 079484 7F046A94 3C018005 */ lui $at, %hi(D_80052AD0) # $at, 0x8005 /* 079488 7F046A98 46081080 */ add.s $f2, $f2, $f8 /* 07948C 7F046A9C 4602A03E */ c.le.s $f20, $f2 -/* 079490 7F046AA0 00000000 */ nop +/* 079490 7F046AA0 00000000 */ nop /* 079494 7F046AA4 45020003 */ bc1fl .L7F046AB4 /* 079498 7F046AA8 4602003C */ c.lt.s $f0, $f2 /* 07949C 7F046AAC 46141081 */ sub.s $f2, $f2, $f20 @@ -20166,28 +20157,28 @@ glabel object_interaction /* 0794B8 7F046AC8 3C018005 */ lui $at, %hi(D_80052AD4) # $at, 0x8005 /* 0794BC 7F046ACC 46006301 */ sub.s $f12, $f12, $f0 /* 0794C0 7F046AD0 4616603C */ c.lt.s $f12, $f22 -/* 0794C4 7F046AD4 00000000 */ nop +/* 0794C4 7F046AD4 00000000 */ nop /* 0794C8 7F046AD8 45020003 */ bc1fl .L7F046AE8 /* 0794CC 7F046ADC 460C003C */ c.lt.s $f0, $f12 /* 0794D0 7F046AE0 46146300 */ add.s $f12, $f12, $f20 /* 0794D4 7F046AE4 460C003C */ c.lt.s $f0, $f12 .L7F046AE8: -/* 0794D8 7F046AE8 00000000 */ nop +/* 0794D8 7F046AE8 00000000 */ nop /* 0794DC 7F046AEC 45000002 */ bc1f .L7F046AF8 -/* 0794E0 7F046AF0 00000000 */ nop +/* 0794E0 7F046AF0 00000000 */ nop /* 0794E4 7F046AF4 46146301 */ sub.s $f12, $f12, $f20 .L7F046AF8: /* 0794E8 7F046AF8 C42A8C14 */ lwc1 $f10, %lo(D_80052AD4)($at) /* 0794EC 7F046AFC 3C018005 */ lui $at, %hi(D_80052AD8) /* 0794F0 7F046B00 460C503C */ c.lt.s $f10, $f12 -/* 0794F4 7F046B04 00000000 */ nop +/* 0794F4 7F046B04 00000000 */ nop /* 0794F8 7F046B08 45030007 */ bc1tl .L7F046B28 /* 0794FC 7F046B0C 00009025 */ move $s2, $zero /* 079500 7F046B10 C4268C18 */ lwc1 $f6, %lo(D_80052AD8)($at) /* 079504 7F046B14 4606603C */ c.lt.s $f12, $f6 -/* 079508 7F046B18 00000000 */ nop +/* 079508 7F046B18 00000000 */ nop /* 07950C 7F046B1C 45000002 */ bc1f .L7F046B28 -/* 079510 7F046B20 00000000 */ nop +/* 079510 7F046B20 00000000 */ nop /* 079514 7F046B24 00009025 */ move $s2, $zero .L7F046B28: /* 079518 7F046B28 12400034 */ beqz $s2, .L7F046BFC @@ -20230,7 +20221,7 @@ glabel object_interaction /* 0795AC 7F046BBC 46082282 */ mul.s $f10, $f4, $f8 /* 0795B0 7F046BC0 4600518D */ trunc.w.s $f6, $f10 /* 0795B4 7F046BC4 440D3000 */ mfc1 $t5, $f6 -/* 0795B8 7F046BC8 00000000 */ nop +/* 0795B8 7F046BC8 00000000 */ nop /* 0795BC 7F046BCC 016D082A */ slt $at, $t3, $t5 /* 0795C0 7F046BD0 54200006 */ bnezl $at, .L7F046BEC /* 0795C4 7F046BD4 8FA40518 */ lw $a0, 0x518($sp) @@ -20248,7 +20239,7 @@ glabel object_interaction .L7F046BFC: /* 0795EC 7F046BFC C60E00C8 */ lwc1 $f14, 0xc8($s0) /* 0795F0 7F046C00 4612703C */ c.lt.s $f14, $f18 -/* 0795F4 7F046C04 00000000 */ nop +/* 0795F4 7F046C04 00000000 */ nop /* 0795F8 7F046C08 45020047 */ bc1fl .L7F046D28 /* 0795FC 7F046C0C C60000D8 */ lwc1 $f0, 0xd8($s0) /* 079600 7F046C10 C60000D8 */ lwc1 $f0, 0xd8($s0) @@ -20262,7 +20253,7 @@ glabel object_interaction /* 079620 7F046C30 46105083 */ div.s $f2, $f10, $f16 /* 079624 7F046C34 46029181 */ sub.s $f6, $f18, $f2 /* 079628 7F046C38 460E303E */ c.le.s $f6, $f14 -/* 07962C 7F046C3C 00000000 */ nop +/* 07962C 7F046C3C 00000000 */ nop /* 079630 7F046C40 4502000F */ bc1fl .L7F046C80 /* 079634 7F046C44 C60C00DC */ lwc1 $f12, 0xdc($s0) /* 079638 7F046C48 C4241004 */ lwc1 $f4, %lo(g_GlobalTimerDelta)($at) @@ -20271,9 +20262,9 @@ glabel object_interaction /* 079644 7F046C54 E60A00D8 */ swc1 $f10, 0xd8($s0) /* 079648 7F046C58 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 07964C 7F046C5C 4610003C */ c.lt.s $f0, $f16 -/* 079650 7F046C60 00000000 */ nop +/* 079650 7F046C60 00000000 */ nop /* 079654 7F046C64 45000003 */ bc1f .L7F046C74 -/* 079658 7F046C68 00000000 */ nop +/* 079658 7F046C68 00000000 */ nop /* 07965C 7F046C6C E61000D8 */ swc1 $f16, 0xd8($s0) /* 079660 7F046C70 C60000D8 */ lwc1 $f0, 0xd8($s0) .L7F046C74: @@ -20283,29 +20274,29 @@ glabel object_interaction .L7F046C80: /* 079670 7F046C80 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 /* 079674 7F046C84 460C003C */ c.lt.s $f0, $f12 -/* 079678 7F046C88 00000000 */ nop +/* 079678 7F046C88 00000000 */ nop /* 07967C 7F046C8C 45000017 */ bc1f .L7F046CEC -/* 079680 7F046C90 00000000 */ nop +/* 079680 7F046C90 00000000 */ nop /* 079684 7F046C94 C4261004 */ lwc1 $f6, %lo(g_GlobalTimerDelta)($at) /* 079688 7F046C98 46068102 */ mul.s $f4, $f16, $f6 /* 07968C 7F046C9C 46040080 */ add.s $f2, $f0, $f4 /* 079690 7F046CA0 4602603C */ c.lt.s $f12, $f2 -/* 079694 7F046CA4 00000000 */ nop +/* 079694 7F046CA4 00000000 */ nop /* 079698 7F046CA8 45000002 */ bc1f .L7F046CB4 -/* 07969C 7F046CAC 00000000 */ nop +/* 07969C 7F046CAC 00000000 */ nop /* 0796A0 7F046CB0 46006086 */ mov.s $f2, $f12 .L7F046CB4: /* 0796A4 7F046CB4 46021202 */ mul.s $f8, $f2, $f2 /* 0796A8 7F046CB8 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 0796AC 7F046CBC 44815000 */ mtc1 $at, $f10 -/* 0796B0 7F046CC0 00000000 */ nop +/* 0796B0 7F046CC0 00000000 */ nop /* 0796B4 7F046CC4 460A4182 */ mul.s $f6, $f8, $f10 /* 0796B8 7F046CC8 46103103 */ div.s $f4, $f6, $f16 /* 0796BC 7F046CCC 46049201 */ sub.s $f8, $f18, $f4 /* 0796C0 7F046CD0 4608703C */ c.lt.s $f14, $f8 -/* 0796C4 7F046CD4 00000000 */ nop +/* 0796C4 7F046CD4 00000000 */ nop /* 0796C8 7F046CD8 45000004 */ bc1f .L7F046CEC -/* 0796CC 7F046CDC 00000000 */ nop +/* 0796CC 7F046CDC 00000000 */ nop /* 0796D0 7F046CE0 E60200D8 */ swc1 $f2, 0xd8($s0) /* 0796D4 7F046CE4 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 0796D8 7F046CE8 C60E00C8 */ lwc1 $f14, 0xc8($s0) @@ -20317,7 +20308,7 @@ glabel object_interaction /* 0796EC 7F046CFC E60400C8 */ swc1 $f4, 0xc8($s0) /* 0796F0 7F046D00 C60800C8 */ lwc1 $f8, 0xc8($s0) /* 0796F4 7F046D04 4608903E */ c.le.s $f18, $f8 -/* 0796F8 7F046D08 00000000 */ nop +/* 0796F8 7F046D08 00000000 */ nop /* 0796FC 7F046D0C 450205C0 */ bc1fl .L7F048410 /* 079700 7F046D10 92220003 */ lbu $v0, 3($s1) /* 079704 7F046D14 E61200C8 */ swc1 $f18, 0xc8($s0) @@ -20337,7 +20328,7 @@ glabel object_interaction /* 079738 7F046D48 46102083 */ div.s $f2, $f4, $f16 /* 07973C 7F046D4C 46029200 */ add.s $f8, $f18, $f2 /* 079740 7F046D50 4608703E */ c.le.s $f14, $f8 -/* 079744 7F046D54 00000000 */ nop +/* 079744 7F046D54 00000000 */ nop /* 079748 7F046D58 4502000F */ bc1fl .L7F046D98 /* 07974C 7F046D5C C60C00DC */ lwc1 $f12, 0xdc($s0) /* 079750 7F046D60 C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) @@ -20346,9 +20337,9 @@ glabel object_interaction /* 07975C 7F046D6C E60400D8 */ swc1 $f4, 0xd8($s0) /* 079760 7F046D70 C60000D8 */ lwc1 $f0, 0xd8($s0) /* 079764 7F046D74 4610003C */ c.lt.s $f0, $f16 -/* 079768 7F046D78 00000000 */ nop +/* 079768 7F046D78 00000000 */ nop /* 07976C 7F046D7C 45000003 */ bc1f .L7F046D8C -/* 079770 7F046D80 00000000 */ nop +/* 079770 7F046D80 00000000 */ nop /* 079774 7F046D84 E61000D8 */ swc1 $f16, 0xd8($s0) /* 079778 7F046D88 C60000D8 */ lwc1 $f0, 0xd8($s0) .L7F046D8C: @@ -20358,29 +20349,29 @@ glabel object_interaction .L7F046D98: /* 079788 7F046D98 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 /* 07978C 7F046D9C 460C003C */ c.lt.s $f0, $f12 -/* 079790 7F046DA0 00000000 */ nop +/* 079790 7F046DA0 00000000 */ nop /* 079794 7F046DA4 45000017 */ bc1f .L7F046E04 -/* 079798 7F046DA8 00000000 */ nop +/* 079798 7F046DA8 00000000 */ nop /* 07979C 7F046DAC C4281004 */ lwc1 $f8, %lo(g_GlobalTimerDelta)($at) /* 0797A0 7F046DB0 46088282 */ mul.s $f10, $f16, $f8 /* 0797A4 7F046DB4 460A0080 */ add.s $f2, $f0, $f10 /* 0797A8 7F046DB8 4602603C */ c.lt.s $f12, $f2 -/* 0797AC 7F046DBC 00000000 */ nop +/* 0797AC 7F046DBC 00000000 */ nop /* 0797B0 7F046DC0 45000002 */ bc1f .L7F046DCC -/* 0797B4 7F046DC4 00000000 */ nop +/* 0797B4 7F046DC4 00000000 */ nop /* 0797B8 7F046DC8 46006086 */ mov.s $f2, $f12 .L7F046DCC: /* 0797BC 7F046DCC 46021182 */ mul.s $f6, $f2, $f2 /* 0797C0 7F046DD0 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 0797C4 7F046DD4 44812000 */ mtc1 $at, $f4 -/* 0797C8 7F046DD8 00000000 */ nop +/* 0797C8 7F046DD8 00000000 */ nop /* 0797CC 7F046DDC 46043202 */ mul.s $f8, $f6, $f4 /* 0797D0 7F046DE0 46104283 */ div.s $f10, $f8, $f16 /* 0797D4 7F046DE4 460A9180 */ add.s $f6, $f18, $f10 /* 0797D8 7F046DE8 460E303C */ c.lt.s $f6, $f14 -/* 0797DC 7F046DEC 00000000 */ nop +/* 0797DC 7F046DEC 00000000 */ nop /* 0797E0 7F046DF0 45000004 */ bc1f .L7F046E04 -/* 0797E4 7F046DF4 00000000 */ nop +/* 0797E4 7F046DF4 00000000 */ nop /* 0797E8 7F046DF8 E60200D8 */ swc1 $f2, 0xd8($s0) /* 0797EC 7F046DFC C60000D8 */ lwc1 $f0, 0xd8($s0) /* 0797F0 7F046E00 C60E00C8 */ lwc1 $f14, 0xc8($s0) @@ -20392,7 +20383,7 @@ glabel object_interaction /* 079804 7F046E14 E60A00C8 */ swc1 $f10, 0xc8($s0) /* 079808 7F046E18 C60600C8 */ lwc1 $f6, 0xc8($s0) /* 07980C 7F046E1C 4612303E */ c.le.s $f6, $f18 -/* 079810 7F046E20 00000000 */ nop +/* 079810 7F046E20 00000000 */ nop /* 079814 7F046E24 4502057A */ bc1fl .L7F048410 /* 079818 7F046E28 92220003 */ lbu $v0, 3($s1) /* 07981C 7F046E2C E61200C8 */ swc1 $f18, 0xc8($s0) @@ -20429,17 +20420,17 @@ glabel object_interaction .L7F046EA4: /* 079894 7F046EA4 C60A0090 */ lwc1 $f10, 0x90($s0) /* 079898 7F046EA8 460A1032 */ c.eq.s $f2, $f10 -/* 07989C 7F046EAC 00000000 */ nop +/* 07989C 7F046EAC 00000000 */ nop /* 0798A0 7F046EB0 45000030 */ bc1f .L7F046F74 -/* 0798A4 7F046EB4 00000000 */ nop +/* 0798A4 7F046EB4 00000000 */ nop /* 0798A8 7F046EB8 C6060098 */ lwc1 $f6, 0x98($s0) /* 0798AC 7F046EBC C604009C */ lwc1 $f4, 0x9c($s0) /* 0798B0 7F046EC0 46043032 */ c.eq.s $f6, $f4 -/* 0798B4 7F046EC4 00000000 */ nop +/* 0798B4 7F046EC4 00000000 */ nop /* 0798B8 7F046EC8 4500002A */ bc1f .L7F046F74 -/* 0798BC 7F046ECC 00000000 */ nop +/* 0798BC 7F046ECC 00000000 */ nop /* 0798C0 7F046ED0 0C00262C */ jal randomGetNext -/* 0798C4 7F046ED4 00000000 */ nop +/* 0798C4 7F046ED4 00000000 */ nop /* 0798C8 7F046ED8 44824000 */ mtc1 $v0, $f8 /* 0798CC 7F046EDC 3C018005 */ lui $at, %hi(D_80052AE8) # $at, 0x8005 /* 0798D0 7F046EE0 C4348C28 */ lwc1 $f20, %lo(D_80052AE8)($at) @@ -20447,7 +20438,7 @@ glabel object_interaction /* 0798D8 7F046EE8 468042A0 */ cvt.s.w $f10, $f8 /* 0798DC 7F046EEC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 0798E0 7F046EF0 44813000 */ mtc1 $at, $f6 -/* 0798E4 7F046EF4 00000000 */ nop +/* 0798E4 7F046EF4 00000000 */ nop /* 0798E8 7F046EF8 46065280 */ add.s $f10, $f10, $f6 .L7F046EFC: /* 0798EC 7F046EFC 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -20470,14 +20461,14 @@ glabel object_interaction /* 079930 7F046F40 04410004 */ bgez $v0, .L7F046F54 /* 079934 7F046F44 468041A0 */ cvt.s.w $f6, $f8 /* 079938 7F046F48 44815000 */ mtc1 $at, $f10 -/* 07993C 7F046F4C 00000000 */ nop +/* 07993C 7F046F4C 00000000 */ nop /* 079940 7F046F50 460A3180 */ add.s $f6, $f6, $f10 .L7F046F54: /* 079944 7F046F54 3C012F80 */ li $at, 0x2F800000 # 0.000000 /* 079948 7F046F58 44812000 */ mtc1 $at, $f4 -/* 07994C 7F046F5C 00000000 */ nop +/* 07994C 7F046F5C 00000000 */ nop /* 079950 7F046F60 46043202 */ mul.s $f8, $f6, $f4 -/* 079954 7F046F64 00000000 */ nop +/* 079954 7F046F64 00000000 */ nop /* 079958 7F046F68 46144282 */ mul.s $f10, $f8, $f20 /* 07995C 7F046F6C E60A0084 */ swc1 $f10, 0x84($s0) /* 079960 7F046F70 C6020084 */ lwc1 $f2, 0x84($s0) @@ -20551,7 +20542,7 @@ glabel object_interaction /* 079A64 7F047074 E7A804D8 */ swc1 $f8, 0x4d8($sp) /* 079A68 7F047078 C60A00A8 */ lwc1 $f10, 0xa8($s0) /* 079A6C 7F04707C 460A103E */ c.le.s $f2, $f10 -/* 079A70 7F047080 00000000 */ nop +/* 079A70 7F047080 00000000 */ nop /* 079A74 7F047084 45020096 */ bc1fl .L7F0472E0 /* 079A78 7F047088 8FAF04B0 */ lw $t7, 0x4b0($sp) /* 079A7C 7F04708C C7AC04C8 */ lwc1 $f12, 0x4c8($sp) @@ -20581,9 +20572,9 @@ glabel object_interaction /* 079AD4 7F0470E4 3C018005 */ lui $at, %hi(D_80052B04) # $at, 0x8005 /* 079AD8 7F0470E8 46043301 */ sub.s $f12, $f6, $f4 /* 079ADC 7F0470EC 4616603C */ c.lt.s $f12, $f22 -/* 079AE0 7F0470F0 00000000 */ nop +/* 079AE0 7F0470F0 00000000 */ nop /* 079AE4 7F0470F4 45000003 */ bc1f .L7F047104 -/* 079AE8 7F0470F8 00000000 */ nop +/* 079AE8 7F0470F8 00000000 */ nop /* 079AEC 7F0470FC C4348C44 */ lwc1 $f20, %lo(D_80052B04)($at) /* 079AF0 7F047100 46146300 */ add.s $f12, $f12, $f20 .L7F047104: @@ -20593,7 +20584,7 @@ glabel object_interaction /* 079B00 7F047110 C4288C4C */ lwc1 $f8, %lo(D_80052B0C)($at) /* 079B04 7F047114 3C018005 */ lui $at, %hi(D_80052B10) # $at, 0x8005 /* 079B08 7F047118 460C403C */ c.lt.s $f8, $f12 -/* 079B0C 7F04711C 00000000 */ nop +/* 079B0C 7F04711C 00000000 */ nop /* 079B10 7F047120 45020003 */ bc1fl .L7F047130 /* 079B14 7F047124 C60A009C */ lwc1 $f10, 0x9c($s0) /* 079B18 7F047128 46146301 */ sub.s $f12, $f12, $f20 @@ -20601,20 +20592,20 @@ glabel object_interaction .L7F047130: /* 079B20 7F047130 460A0081 */ sub.s $f2, $f0, $f10 /* 079B24 7F047134 4616103C */ c.lt.s $f2, $f22 -/* 079B28 7F047138 00000000 */ nop +/* 079B28 7F047138 00000000 */ nop /* 079B2C 7F04713C 45000001 */ bc1f .L7F047144 -/* 079B30 7F047140 00000000 */ nop +/* 079B30 7F047140 00000000 */ nop .L7F047144: /* 079B34 7F047144 C4268C50 */ lwc1 $f6, %lo(D_80052B10)($at) /* 079B38 7F047148 3C018005 */ lui $at, %hi(D_80052B14) # $at, 0x8005 /* 079B3C 7F04714C 4606603C */ c.lt.s $f12, $f6 -/* 079B40 7F047150 00000000 */ nop +/* 079B40 7F047150 00000000 */ nop /* 079B44 7F047154 45020009 */ bc1fl .L7F04717C /* 079B48 7F047158 8FAF04B0 */ lw $t7, 0x4b0($sp) /* 079B4C 7F04715C C4248C54 */ lwc1 $f4, %lo(D_80052B14)($at) /* 079B50 7F047160 24180001 */ li $t8, 1 /* 079B54 7F047164 460C203C */ c.lt.s $f4, $f12 -/* 079B58 7F047168 00000000 */ nop +/* 079B58 7F047168 00000000 */ nop /* 079B5C 7F04716C 45020003 */ bc1fl .L7F04717C /* 079B60 7F047170 8FAF04B0 */ lw $t7, 0x4b0($sp) /* 079B64 7F047174 AFB804B0 */ sw $t8, 0x4b0($sp) @@ -20634,13 +20625,13 @@ glabel object_interaction /* 079B94 7F0471A4 4606003C */ c.lt.s $f0, $f6 /* 079B98 7F0471A8 AFB90494 */ sw $t9, 0x494($sp) /* 079B9C 7F0471AC 45000003 */ bc1f .L7F0471BC -/* 079BA0 7F0471B0 00000000 */ nop +/* 079BA0 7F0471B0 00000000 */ nop /* 079BA4 7F0471B4 10000007 */ b .L7F0471D4 /* 079BA8 7F0471B8 46140000 */ add.s $f0, $f0, $f20 .L7F0471BC: /* 079BAC 7F0471BC C4248C5C */ lwc1 $f4, %lo(D_80052B1C)($at) /* 079BB0 7F0471C0 4600203E */ c.le.s $f4, $f0 -/* 079BB4 7F0471C4 00000000 */ nop +/* 079BB4 7F0471C4 00000000 */ nop /* 079BB8 7F0471C8 45020003 */ bc1fl .L7F0471D8 /* 079BBC 7F0471CC E7A00498 */ swc1 $f0, 0x498($sp) /* 079BC0 7F0471D0 46140001 */ sub.s $f0, $f0, $f20 @@ -20653,13 +20644,13 @@ glabel object_interaction /* 079BD4 7F0471E4 C6080088 */ lwc1 $f8, 0x88($s0) /* 079BD8 7F0471E8 C7B004DC */ lwc1 $f16, 0x4dc($sp) /* 079BDC 7F0471EC 4608003E */ c.le.s $f0, $f8 -/* 079BE0 7F0471F0 00000000 */ nop +/* 079BE0 7F0471F0 00000000 */ nop /* 079BE4 7F0471F4 45020027 */ bc1fl .L7F047294 /* 079BE8 7F0471F8 8E0200B8 */ lw $v0, 0xb8($s0) /* 079BEC 7F0471FC C60A008C */ lwc1 $f10, 0x8c($s0) /* 079BF0 7F047200 2409001B */ li $t1, 27 /* 079BF4 7F047204 4600503E */ c.le.s $f10, $f0 -/* 079BF8 7F047208 00000000 */ nop +/* 079BF8 7F047208 00000000 */ nop /* 079BFC 7F04720C 45020021 */ bc1fl .L7F047294 /* 079C00 7F047210 8E0200B8 */ lw $v0, 0xb8($s0) /* 079C04 7F047214 C6460010 */ lwc1 $f6, 0x10($s2) @@ -20748,17 +20739,17 @@ glabel object_interaction /* 079D38 7F047348 C7AA04A4 */ lwc1 $f10, 0x4a4($sp) /* 079D3C 7F04734C C7B004DC */ lwc1 $f16, 0x4dc($sp) /* 079D40 7F047350 46065102 */ mul.s $f4, $f10, $f6 -/* 079D44 7F047354 00000000 */ nop +/* 079D44 7F047354 00000000 */ nop /* 079D48 7F047358 46002202 */ mul.s $f8, $f4, $f0 /* 079D4C 7F04735C 46088400 */ add.s $f16, $f16, $f8 /* 079D50 7F047360 4616803C */ c.lt.s $f16, $f22 -/* 079D54 7F047364 00000000 */ nop +/* 079D54 7F047364 00000000 */ nop /* 079D58 7F047368 45000002 */ bc1f .L7F047374 -/* 079D5C 7F04736C 00000000 */ nop +/* 079D5C 7F04736C 00000000 */ nop /* 079D60 7F047370 46148400 */ add.s $f16, $f16, $f20 .L7F047374: /* 079D64 7F047374 4610A03E */ c.le.s $f20, $f16 -/* 079D68 7F047378 00000000 */ nop +/* 079D68 7F047378 00000000 */ nop /* 079D6C 7F04737C 45020003 */ bc1fl .L7F04738C /* 079D70 7F047380 C6020084 */ lwc1 $f2, 0x84($s0) /* 079D74 7F047384 46148401 */ sub.s $f16, $f16, $f20 @@ -20770,16 +20761,16 @@ glabel object_interaction /* 079D84 7F047394 46028001 */ sub.s $f0, $f16, $f2 /* 079D88 7F047398 26040090 */ addiu $a0, $s0, 0x90 /* 079D8C 7F04739C 460A003C */ c.lt.s $f0, $f10 -/* 079D90 7F0473A0 00000000 */ nop +/* 079D90 7F0473A0 00000000 */ nop /* 079D94 7F0473A4 45000003 */ bc1f .L7F0473B4 -/* 079D98 7F0473A8 00000000 */ nop +/* 079D98 7F0473A8 00000000 */ nop /* 079D9C 7F0473AC 10000008 */ b .L7F0473D0 /* 079DA0 7F0473B0 46140000 */ add.s $f0, $f0, $f20 .L7F0473B4: /* 079DA4 7F0473B4 3C018005 */ lui $at, %hi(D_80052B2C) # $at, 0x8005 /* 079DA8 7F0473B8 C4268C6C */ lwc1 $f6, %lo(D_80052B2C)($at) /* 079DAC 7F0473BC 4600303E */ c.le.s $f6, $f0 -/* 079DB0 7F0473C0 00000000 */ nop +/* 079DB0 7F0473C0 00000000 */ nop /* 079DB4 7F0473C4 45020003 */ bc1fl .L7F0473D4 /* 079DB8 7F0473C8 C60C0088 */ lwc1 $f12, 0x88($s0) /* 079DBC 7F0473CC 46140001 */ sub.s $f0, $f0, $f20 @@ -20788,7 +20779,7 @@ glabel object_interaction .L7F0473D4: /* 079DC4 7F0473D4 3C018005 */ lui $at, %hi(D_80052B30) # $at, 0x8005 /* 079DC8 7F0473D8 4600603C */ c.lt.s $f12, $f0 -/* 079DCC 7F0473DC 00000000 */ nop +/* 079DCC 7F0473DC 00000000 */ nop /* 079DD0 7F0473E0 45020004 */ bc1fl .L7F0473F4 /* 079DD4 7F0473E4 C60C008C */ lwc1 $f12, 0x8c($s0) /* 079DD8 7F0473E8 10000007 */ b .L7F047408 @@ -20796,22 +20787,22 @@ glabel object_interaction /* 079DE0 7F0473F0 C60C008C */ lwc1 $f12, 0x8c($s0) .L7F0473F4: /* 079DE4 7F0473F4 460C003C */ c.lt.s $f0, $f12 -/* 079DE8 7F0473F8 00000000 */ nop +/* 079DE8 7F0473F8 00000000 */ nop /* 079DEC 7F0473FC 45020003 */ bc1fl .L7F04740C /* 079DF0 7F047400 4616803C */ c.lt.s $f16, $f22 /* 079DF4 7F047404 460C1400 */ add.s $f16, $f2, $f12 .L7F047408: /* 079DF8 7F047408 4616803C */ c.lt.s $f16, $f22 .L7F04740C: -/* 079DFC 7F04740C 00000000 */ nop +/* 079DFC 7F04740C 00000000 */ nop /* 079E00 7F047410 45020003 */ bc1fl .L7F047420 /* 079E04 7F047414 4610A03E */ c.le.s $f20, $f16 /* 079E08 7F047418 46148400 */ add.s $f16, $f16, $f20 /* 079E0C 7F04741C 4610A03E */ c.le.s $f20, $f16 .L7F047420: -/* 079E10 7F047420 00000000 */ nop +/* 079E10 7F047420 00000000 */ nop /* 079E14 7F047424 45000002 */ bc1f .L7F047430 -/* 079E18 7F047428 00000000 */ nop +/* 079E18 7F047428 00000000 */ nop /* 079E1C 7F04742C 46148401 */ sub.s $f16, $f16, $f20 .L7F047430: /* 079E20 7F047430 C4208C70 */ lwc1 $f0, %lo(D_80052B30)($at) @@ -20839,14 +20830,14 @@ glabel object_interaction /* 079E78 7F047488 C7A604D8 */ lwc1 $f6, 0x4d8($sp) /* 079E7C 7F04748C 460A8301 */ sub.s $f12, $f16, $f10 /* 079E80 7F047490 4616603C */ c.lt.s $f12, $f22 -/* 079E84 7F047494 00000000 */ nop +/* 079E84 7F047494 00000000 */ nop /* 079E88 7F047498 45000002 */ bc1f .L7F0474A4 -/* 079E8C 7F04749C 00000000 */ nop +/* 079E8C 7F04749C 00000000 */ nop /* 079E90 7F0474A0 46146300 */ add.s $f12, $f12, $f20 .L7F0474A4: /* 079E94 7F0474A4 C4208C78 */ lwc1 $f0, %lo(D_80052B38)($at) /* 079E98 7F0474A8 460C003C */ c.lt.s $f0, $f12 -/* 079E9C 7F0474AC 00000000 */ nop +/* 079E9C 7F0474AC 00000000 */ nop /* 079EA0 7F0474B0 45020003 */ bc1fl .L7F0474C0 /* 079EA4 7F0474B4 C604009C */ lwc1 $f4, 0x9c($s0) /* 079EA8 7F0474B8 46146301 */ sub.s $f12, $f12, $f20 @@ -20854,13 +20845,13 @@ glabel object_interaction .L7F0474C0: /* 079EB0 7F0474C0 46043081 */ sub.s $f2, $f6, $f4 /* 079EB4 7F0474C4 4616103C */ c.lt.s $f2, $f22 -/* 079EB8 7F0474C8 00000000 */ nop +/* 079EB8 7F0474C8 00000000 */ nop /* 079EBC 7F0474CC 45020003 */ bc1fl .L7F0474DC /* 079EC0 7F0474D0 4602003C */ c.lt.s $f0, $f2 /* 079EC4 7F0474D4 46141080 */ add.s $f2, $f2, $f20 /* 079EC8 7F0474D8 4602003C */ c.lt.s $f0, $f2 .L7F0474DC: -/* 079ECC 7F0474DC 00000000 */ nop +/* 079ECC 7F0474DC 00000000 */ nop /* 079ED0 7F0474E0 45020003 */ bc1fl .L7F0474F0 /* 079ED4 7F0474E4 AE0000D0 */ sw $zero, 0xd0($s0) /* 079ED8 7F0474E8 46141081 */ sub.s $f2, $f2, $f20 @@ -20876,11 +20867,11 @@ glabel object_interaction /* 079EFC 7F04750C 460A5000 */ add.s $f0, $f10, $f10 /* 079F00 7F047510 46004007 */ neg.s $f0, $f8 /* 079F04 7F047514 460C003C */ c.lt.s $f0, $f12 -/* 079F08 7F047518 00000000 */ nop +/* 079F08 7F047518 00000000 */ nop /* 079F0C 7F04751C 45020016 */ bc1fl .L7F047578 /* 079F10 7F047520 460A5000 */ add.s $f0, $f10, $f10 /* 079F14 7F047524 4608103C */ c.lt.s $f2, $f8 -/* 079F18 7F047528 00000000 */ nop +/* 079F18 7F047528 00000000 */ nop /* 079F1C 7F04752C 45020012 */ bc1fl .L7F047578 /* 079F20 7F047530 460A5000 */ add.s $f0, $f10, $f10 /* 079F24 7F047534 4602003C */ c.lt.s $f0, $f2 @@ -20902,16 +20893,16 @@ glabel object_interaction /* 079F64 7F047574 460A5000 */ add.s $f0, $f10, $f10 .L7F047578: /* 079F68 7F047578 4600603C */ c.lt.s $f12, $f0 -/* 079F6C 7F04757C 00000000 */ nop +/* 079F6C 7F04757C 00000000 */ nop /* 079F70 7F047580 45020018 */ bc1fl .L7F0475E4 /* 079F74 7F047584 8E0200B8 */ lw $v0, 0xb8($s0) /* 079F78 7F047588 46000387 */ neg.s $f14, $f0 /* 079F7C 7F04758C 460C703C */ c.lt.s $f14, $f12 -/* 079F80 7F047590 00000000 */ nop +/* 079F80 7F047590 00000000 */ nop /* 079F84 7F047594 45020013 */ bc1fl .L7F0475E4 /* 079F88 7F047598 8E0200B8 */ lw $v0, 0xb8($s0) /* 079F8C 7F04759C 4600103C */ c.lt.s $f2, $f0 -/* 079F90 7F0475A0 00000000 */ nop +/* 079F90 7F0475A0 00000000 */ nop /* 079F94 7F0475A4 4502000F */ bc1fl .L7F0475E4 /* 079F98 7F0475A8 8E0200B8 */ lw $v0, 0xb8($s0) /* 079F9C 7F0475AC 4602703C */ c.lt.s $f14, $f2 @@ -20958,7 +20949,7 @@ glabel object_interaction /* 07A034 7F047644 E60600B0 */ swc1 $f6, 0xb0($s0) /* 07A038 7F047648 C60200B0 */ lwc1 $f2, 0xb0($s0) /* 07A03C 7F04764C 4602003C */ c.lt.s $f0, $f2 -/* 07A040 7F047650 00000000 */ nop +/* 07A040 7F047650 00000000 */ nop /* 07A044 7F047654 45020023 */ bc1fl .L7F0476E4 /* 07A048 7F047658 4602B03C */ c.lt.s $f22, $f2 /* 07A04C 7F04765C E60000B0 */ swc1 $f0, 0xb0($s0) @@ -20968,14 +20959,14 @@ glabel object_interaction .L7F04766C: /* 07A05C 7F04766C 3C188004 */ lui $t8, %hi(g_ClockTimer) # $t8, 0x8004 /* 07A060 7F047670 4602B03C */ c.lt.s $f22, $f2 -/* 07A064 7F047674 00000000 */ nop +/* 07A064 7F047674 00000000 */ nop /* 07A068 7F047678 4502001A */ bc1fl .L7F0476E4 /* 07A06C 7F04767C 4602B03C */ c.lt.s $f22, $f2 /* 07A070 7F047680 8F180FF4 */ lw $t8, %lo(g_ClockTimer)($t8) /* 07A074 7F047684 00001025 */ move $v0, $zero /* 07A078 7F047688 3C018005 */ lui $at, %hi(D_80052B44) # $at, 0x8005 /* 07A07C 7F04768C 1B00000C */ blez $t8, .L7F0476C0 -/* 07A080 7F047690 00000000 */ nop +/* 07A080 7F047690 00000000 */ nop /* 07A084 7F047694 C4208C84 */ lwc1 $f0, %lo(D_80052B44)($at) /* 07A088 7F047698 C60400B0 */ lwc1 $f4, 0xb0($s0) .L7F04769C: @@ -20992,7 +20983,7 @@ glabel object_interaction /* 07A0B0 7F0476C0 3C018005 */ lui $at, %hi(D_80052B48) # $at, 0x8005 /* 07A0B4 7F0476C4 C4288C88 */ lwc1 $f8, %lo(D_80052B48)($at) /* 07A0B8 7F0476C8 4608103E */ c.le.s $f2, $f8 -/* 07A0BC 7F0476CC 00000000 */ nop +/* 07A0BC 7F0476CC 00000000 */ nop /* 07A0C0 7F0476D0 45020004 */ bc1fl .L7F0476E4 /* 07A0C4 7F0476D4 4602B03C */ c.lt.s $f22, $f2 /* 07A0C8 7F0476D8 E61600B0 */ swc1 $f22, 0xb0($s0) @@ -21010,7 +21001,7 @@ glabel object_interaction /* 07A0F0 7F047700 E60800B4 */ swc1 $f8, 0xb4($s0) /* 07A0F4 7F047704 C60000B4 */ lwc1 $f0, 0xb4($s0) /* 07A0F8 7F047708 4600A03E */ c.le.s $f20, $f0 -/* 07A0FC 7F04770C 00000000 */ nop +/* 07A0FC 7F04770C 00000000 */ nop /* 07A100 7F047710 4502033F */ bc1fl .L7F048410 /* 07A104 7F047714 92220003 */ lbu $v0, 3($s1) /* 07A108 7F047718 46140101 */ sub.s $f4, $f0, $f20 @@ -21018,7 +21009,7 @@ glabel object_interaction /* 07A10C 7F04771C E60400B4 */ swc1 $f4, 0xb4($s0) /* 07A110 7F047720 C60000B4 */ lwc1 $f0, 0xb4($s0) /* 07A114 7F047724 4600A03E */ c.le.s $f20, $f0 -/* 07A118 7F047728 00000000 */ nop +/* 07A118 7F047728 00000000 */ nop /* 07A11C 7F04772C 4503FFFB */ bc1tl .L7F04771C /* 07A120 7F047730 46140101 */ sub.s $f4, $f0, $f20 /* 07A124 7F047734 10000336 */ b .L7F048410 @@ -21035,13 +21026,13 @@ glabel object_interaction /* 07A14C 7F04775C C62E0098 */ lwc1 $f14, 0x98($s1) /* 07A150 7F047760 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 /* 07A154 7F047764 460EB03E */ c.le.s $f22, $f14 -/* 07A158 7F047768 00000000 */ nop +/* 07A158 7F047768 00000000 */ nop /* 07A15C 7F04776C 45020016 */ bc1fl .L7F0477C8 /* 07A160 7F047770 8E39000C */ lw $t9, 0xc($s1) /* 07A164 7F047774 C4221004 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) /* 07A168 7F047778 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 /* 07A16C 7F04777C 4602703E */ c.le.s $f14, $f2 -/* 07A170 7F047780 00000000 */ nop +/* 07A170 7F047780 00000000 */ nop /* 07A174 7F047784 45020006 */ bc1fl .L7F0477A0 /* 07A178 7F047788 C6200088 */ lwc1 $f0, 0x88($s1) /* 07A17C 7F04778C C62A0094 */ lwc1 $f10, 0x94($s1) @@ -21065,23 +21056,23 @@ glabel object_interaction /* 07A1B8 7F0477C8 00008025 */ move $s0, $zero /* 07A1BC 7F0477CC 00194B00 */ sll $t1, $t9, 0xc /* 07A1C0 7F0477D0 05200014 */ bltz $t1, .L7F047824 -/* 07A1C4 7F0477D4 00000000 */ nop +/* 07A1C4 7F0477D4 00000000 */ nop /* 07A1C8 7F0477D8 0FC13C47 */ jal objIsHealthy /* 07A1CC 7F0477DC 02202025 */ move $a0, $s1 /* 07A1D0 7F0477E0 10400010 */ beqz $v0, .L7F047824 -/* 07A1D4 7F0477E4 00000000 */ nop +/* 07A1D4 7F0477E4 00000000 */ nop /* 07A1D8 7F0477E8 C62A0088 */ lwc1 $f10, 0x88($s1) /* 07A1DC 7F0477EC 26240058 */ addiu $a0, $s1, 0x58 /* 07A1E0 7F0477F0 3C0544FA */ lui $a1, 0x44fa /* 07A1E4 7F0477F4 460AB03C */ c.lt.s $f22, $f10 /* 07A1E8 7F0477F8 3C06453B */ lui $a2, (0x453B8000 >> 16) # lui $a2, 0x453b /* 07A1EC 7F0477FC 45010006 */ bc1t .L7F047818 -/* 07A1F0 7F047800 00000000 */ nop +/* 07A1F0 7F047800 00000000 */ nop /* 07A1F4 7F047804 C6280094 */ lwc1 $f8, 0x94($s1) /* 07A1F8 7F047808 4608B03C */ c.lt.s $f22, $f8 -/* 07A1FC 7F04780C 00000000 */ nop +/* 07A1FC 7F04780C 00000000 */ nop /* 07A200 7F047810 45000004 */ bc1f .L7F047824 -/* 07A204 7F047814 00000000 */ nop +/* 07A204 7F047814 00000000 */ nop .L7F047818: /* 07A208 7F047818 0FC14EDD */ jal sub_GAME_7F053894 /* 07A20C 7F04781C 34C68000 */ ori $a2, (0x453B8000 & 0xFFFF) # ori $a2, $a2, 0x8000 @@ -21091,14 +21082,14 @@ glabel object_interaction /* 07A218 7F047828 8E2400AC */ lw $a0, 0xac($s1) /* 07A21C 7F04782C 8E2400AC */ lw $a0, 0xac($s1) /* 07A220 7F047830 10800005 */ beqz $a0, .L7F047848 -/* 07A224 7F047834 00000000 */ nop +/* 07A224 7F047834 00000000 */ nop /* 07A228 7F047838 0C002094 */ jal sndGetPlayingState -/* 07A22C 7F04783C 00000000 */ nop +/* 07A22C 7F04783C 00000000 */ nop /* 07A230 7F047840 5440000A */ bnezl $v0, .L7F04786C /* 07A234 7F047844 8E2400AC */ lw $a0, 0xac($s1) .L7F047848: /* 07A238 7F047848 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 07A23C 7F04784C 00000000 */ nop +/* 07A23C 7F04784C 00000000 */ nop /* 07A240 7F047850 14400005 */ bnez $v0, .L7F047868 /* 07A244 7F047854 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 /* 07A248 7F047858 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) @@ -21120,7 +21111,7 @@ glabel object_interaction /* 07A27C 7F04788C 50800008 */ beql $a0, $zero, .L7F0478B0 /* 07A280 7F047890 8E2400A4 */ lw $a0, 0xa4($s1) /* 07A284 7F047894 0C002094 */ jal sndGetPlayingState -/* 07A288 7F047898 00000000 */ nop +/* 07A288 7F047898 00000000 */ nop /* 07A28C 7F04789C 50400004 */ beql $v0, $zero, .L7F0478B0 /* 07A290 7F0478A0 8E2400A4 */ lw $a0, 0xa4($s1) /* 07A294 7F0478A4 0C002120 */ jal sndDeactivate @@ -21190,7 +21181,7 @@ glabel object_interaction /* 07A388 7F047998 C6260088 */ lwc1 $f6, 0x88($s1) .L7F04799C: /* 07A38C 7F04799C 4606B03C */ c.lt.s $f22, $f6 -/* 07A390 7F0479A0 00000000 */ nop +/* 07A390 7F0479A0 00000000 */ nop /* 07A394 7F0479A4 450201AA */ bc1fl .L7F048050 /* 07A398 7F0479A8 8E280008 */ lw $t0, 8($s1) /* 07A39C 7F0479AC 8E6F0014 */ lw $t7, 0x14($s3) @@ -21239,7 +21230,7 @@ glabel object_interaction /* 07A444 7F047A54 C7AE0434 */ lwc1 $f14, 0x434($sp) /* 07A448 7F047A58 3C018005 */ lui $at, %hi(D_80052B58) # $at, 0x8005 /* 07A44C 7F047A5C 460CA03E */ c.le.s $f20, $f12 -/* 07A450 7F047A60 00000000 */ nop +/* 07A450 7F047A60 00000000 */ nop /* 07A454 7F047A64 45020009 */ bc1fl .L7F047A8C /* 07A458 7F047A68 4616603C */ c.lt.s $f12, $f22 /* 07A45C 7F047A6C 46146281 */ sub.s $f10, $f12, $f20 @@ -21247,12 +21238,12 @@ glabel object_interaction /* 07A460 7F047A70 E62A00A0 */ swc1 $f10, 0xa0($s1) /* 07A464 7F047A74 C62C00A0 */ lwc1 $f12, 0xa0($s1) /* 07A468 7F047A78 460CA03E */ c.le.s $f20, $f12 -/* 07A46C 7F047A7C 00000000 */ nop +/* 07A46C 7F047A7C 00000000 */ nop /* 07A470 7F047A80 4503FFFB */ bc1tl .L7F047A70 /* 07A474 7F047A84 46146281 */ sub.s $f10, $f12, $f20 /* 07A478 7F047A88 4616603C */ c.lt.s $f12, $f22 .L7F047A8C: -/* 07A47C 7F047A8C 00000000 */ nop +/* 07A47C 7F047A8C 00000000 */ nop /* 07A480 7F047A90 45020009 */ bc1fl .L7F047AB8 /* 07A484 7F047A94 C7A40480 */ lwc1 $f4, 0x480($sp) /* 07A488 7F047A98 46146200 */ add.s $f8, $f12, $f20 @@ -21260,25 +21251,25 @@ glabel object_interaction /* 07A48C 7F047A9C E62800A0 */ swc1 $f8, 0xa0($s1) /* 07A490 7F047AA0 C62C00A0 */ lwc1 $f12, 0xa0($s1) /* 07A494 7F047AA4 4616603C */ c.lt.s $f12, $f22 -/* 07A498 7F047AA8 00000000 */ nop +/* 07A498 7F047AA8 00000000 */ nop /* 07A49C 7F047AAC 4503FFFB */ bc1tl .L7F047A9C /* 07A4A0 7F047AB0 46146200 */ add.s $f8, $f12, $f20 /* 07A4A4 7F047AB4 C7A40480 */ lwc1 $f4, 0x480($sp) .L7F047AB8: /* 07A4A8 7F047AB8 460C2032 */ c.eq.s $f4, $f12 -/* 07A4AC 7F047ABC 00000000 */ nop +/* 07A4AC 7F047ABC 00000000 */ nop /* 07A4B0 7F047AC0 4502000F */ bc1fl .L7F047B00 /* 07A4B4 7F047AC4 8E890008 */ lw $t1, 8($s4) /* 07A4B8 7F047AC8 C620009C */ lwc1 $f0, 0x9c($s1) /* 07A4BC 7F047ACC C4268C98 */ lwc1 $f6, %lo(D_80052B58)($at) /* 07A4C0 7F047AD0 3C018005 */ lui $at, %hi(D_80052B5C) # $at, 0x8005 /* 07A4C4 7F047AD4 4606003E */ c.le.s $f0, $f6 -/* 07A4C8 7F047AD8 00000000 */ nop +/* 07A4C8 7F047AD8 00000000 */ nop /* 07A4CC 7F047ADC 45020008 */ bc1fl .L7F047B00 /* 07A4D0 7F047AE0 8E890008 */ lw $t1, 8($s4) /* 07A4D4 7F047AE4 C42A8C9C */ lwc1 $f10, %lo(D_80052B5C)($at) /* 07A4D8 7F047AE8 4600503E */ c.le.s $f10, $f0 -/* 07A4DC 7F047AEC 00000000 */ nop +/* 07A4DC 7F047AEC 00000000 */ nop /* 07A4E0 7F047AF0 45020003 */ bc1fl .L7F047B00 /* 07A4E4 7F047AF4 8E890008 */ lw $t1, 8($s4) /* 07A4E8 7F047AF8 E636009C */ swc1 $f22, 0x9c($s1) @@ -21297,9 +21288,9 @@ glabel object_interaction /* 07A518 7F047B28 46023383 */ div.s $f14, $f6, $f2 .L7F047B2C: /* 07A51C 7F047B2C 4616703C */ c.lt.s $f14, $f22 -/* 07A520 7F047B30 00000000 */ nop +/* 07A520 7F047B30 00000000 */ nop /* 07A524 7F047B34 45000002 */ bc1f .L7F047B40 -/* 07A528 7F047B38 00000000 */ nop +/* 07A528 7F047B38 00000000 */ nop /* 07A52C 7F047B3C 46147380 */ add.s $f14, $f14, $f20 .L7F047B40: /* 07A530 7F047B40 0FC1606B */ jal sinf @@ -21310,7 +21301,7 @@ glabel object_interaction /* 07A544 7F047B54 46085102 */ mul.s $f4, $f10, $f8 /* 07A548 7F047B58 C42A1004 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) /* 07A54C 7F047B5C 46040182 */ mul.s $f6, $f0, $f4 -/* 07A550 7F047B60 00000000 */ nop +/* 07A550 7F047B60 00000000 */ nop /* 07A554 7F047B64 460A3202 */ mul.s $f8, $f6, $f10 /* 07A558 7F047B68 E7A80464 */ swc1 $f8, 0x464($sp) /* 07A55C 7F047B6C 0FC1606B */ jal sinf @@ -21343,7 +21334,7 @@ glabel object_interaction /* 07A5C8 7F047BD8 E7A806A0 */ swc1 $f8, 0x6a0($sp) /* 07A5CC 7F047BDC C6280088 */ lwc1 $f8, 0x88($s1) /* 07A5D0 7F047BE0 46024202 */ mul.s $f8, $f8, $f2 -/* 07A5D4 7F047BE4 00000000 */ nop +/* 07A5D4 7F047BE4 00000000 */ nop /* 07A5D8 7F047BE8 46044202 */ mul.s $f8, $f8, $f4 /* 07A5DC 7F047BEC C6240060 */ lwc1 $f4, 0x60($s1) /* 07A5E0 7F047BF0 46082100 */ add.s $f4, $f4, $f8 @@ -21540,7 +21531,7 @@ glabel object_interaction /* 07A8DC 7F047EEC 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback /* 07A8E0 7F047EF0 E7AA0010 */ swc1 $f10, 0x10($sp) /* 07A8E4 7F047EF4 14400002 */ bnez $v0, .L7F047F00 -/* 07A8E8 7F047EF8 00000000 */ nop +/* 07A8E8 7F047EF8 00000000 */ nop .L7F047EFC: /* 07A8EC 7F047EFC 00009025 */ move $s2, $zero .L7F047F00: @@ -21562,7 +21553,7 @@ glabel object_interaction /* 07A92C 7F047F3C 0FC0BF65 */ jal chrlvIsArrivingLaterallyAtPos /* 07A930 7F047F40 3C0742C8 */ lui $a3, 0x42c8 /* 07A934 7F047F44 10400050 */ beqz $v0, .L7F048088 -/* 07A938 7F047F48 00000000 */ nop +/* 07A938 7F047F48 00000000 */ nop /* 07A93C 7F047F4C 8E2A00A8 */ lw $t2, 0xa8($s1) /* 07A940 7F047F50 8E2C00A4 */ lw $t4, 0xa4($s1) /* 07A944 7F047F54 3C014270 */ li $at, 0x42700000 # 60.000000 @@ -21573,7 +21564,7 @@ glabel object_interaction /* 07A958 7F047F68 01D87821 */ addu $t7, $t6, $t8 /* 07A95C 7F047F6C 8DF90000 */ lw $t9, ($t7) /* 07A960 7F047F70 07210045 */ bgez $t9, .L7F048088 -/* 07A964 7F047F74 00000000 */ nop +/* 07A964 7F047F74 00000000 */ nop /* 07A968 7F047F78 44814000 */ mtc1 $at, $f8 /* 07A96C 7F047F7C AE2000A4 */ sw $zero, 0xa4($s1) /* 07A970 7F047F80 E6360094 */ swc1 $f22, 0x94($s1) @@ -21583,7 +21574,7 @@ glabel object_interaction /* 07A97C 7F047F8C C6240098 */ lwc1 $f4, 0x98($s1) /* 07A980 7F047F90 3C014270 */ li $at, 0x42700000 # 60.000000 /* 07A984 7F047F94 4616203C */ c.lt.s $f4, $f22 -/* 07A988 7F047F98 00000000 */ nop +/* 07A988 7F047F98 00000000 */ nop /* 07A98C 7F047F9C 45020006 */ bc1fl .L7F047FB8 /* 07A990 7F047FA0 E6360088 */ swc1 $f22, 0x88($s1) /* 07A994 7F047FA4 C6260088 */ lwc1 $f6, 0x88($s1) @@ -21612,13 +21603,13 @@ glabel object_interaction /* 07A9EC 7F047FFC 0FC15BE0 */ jal setupUpdateObjectRoomPosition /* 07A9F0 7F048000 02202025 */ move $a0, $s1 /* 07A9F4 7F048004 10000020 */ b .L7F048088 -/* 07A9F8 7F048008 00000000 */ nop +/* 07A9F8 7F048008 00000000 */ nop .L7F04800C: /* 07A9FC 7F04800C C6260098 */ lwc1 $f6, 0x98($s1) .L7F048010: /* 07AA00 7F048010 3C014270 */ li $at, 0x42700000 # 60.000000 /* 07AA04 7F048014 4616303C */ c.lt.s $f6, $f22 -/* 07AA08 7F048018 00000000 */ nop +/* 07AA08 7F048018 00000000 */ nop /* 07AA0C 7F04801C 45020006 */ bc1fl .L7F048038 /* 07AA10 7F048020 E6360088 */ swc1 $f22, 0x88($s1) /* 07AA14 7F048024 C62A0088 */ lwc1 $f10, 0x88($s1) @@ -21636,7 +21627,7 @@ glabel object_interaction .L7F048050: /* 07AA40 7F048050 00085080 */ sll $t2, $t0, 2 /* 07AA44 7F048054 0541000C */ bgez $t2, .L7F048088 -/* 07AA48 7F048058 00000000 */ nop +/* 07AA48 7F048058 00000000 */ nop /* 07AA4C 7F04805C C62C0038 */ lwc1 $f12, 0x38($s1) /* 07AA50 7F048060 0FC16BB8 */ jal atan2f /* 07AA54 7F048064 C62E0040 */ lwc1 $f14, 0x40($s1) @@ -21675,7 +21666,7 @@ glabel object_interaction /* 07AAD0 7F0480E0 8C8E0020 */ lw $t6, 0x20($a0) /* 07AAD4 7F0480E4 3C054127 */ lui $a1, (0x4127020C >> 16) # lui $a1, 0x4127 /* 07AAD8 7F0480E8 15D80009 */ bne $t6, $t8, .L7F048110 -/* 07AADC 7F0480EC 00000000 */ nop +/* 07AADC 7F0480EC 00000000 */ nop /* 07AAE0 7F0480F0 0FC1B4D2 */ jal sub_GAME_7F06CE84 /* 07AAE4 7F0480F4 34A5020C */ ori $a1, (0x4127020C & 0xFFFF) # ori $a1, $a1, 0x20c /* 07AAE8 7F0480F8 3C054049 */ lui $a1, (0x40490FDB >> 16) # lui $a1, 0x4049 @@ -21683,10 +21674,10 @@ glabel object_interaction /* 07AAF0 7F048100 0FC1B49D */ jal setsubroty /* 07AAF4 7F048104 8E240014 */ lw $a0, 0x14($s1) /* 07AAF8 7F048108 10000024 */ b .L7F04819C -/* 07AAFC 7F04810C 00000000 */ nop +/* 07AAFC 7F04810C 00000000 */ nop .L7F048110: /* 07AB00 7F048110 0C001769 */ jal bossGetStageNum -/* 07AB04 7F048114 00000000 */ nop +/* 07AB04 7F048114 00000000 */ nop /* 07AB08 7F048118 24010016 */ li $at, 22 /* 07AB0C 7F04811C 1441000A */ bne $v0, $at, .L7F048148 /* 07AB10 7F048120 3C053F85 */ lui $a1, (0x3F859B3D >> 16) # lui $a1, 0x3f85 @@ -21698,10 +21689,10 @@ glabel object_interaction /* 07AB28 7F048138 0FC1B49D */ jal setsubroty /* 07AB2C 7F04813C 8E240014 */ lw $a0, 0x14($s1) /* 07AB30 7F048140 10000016 */ b .L7F04819C -/* 07AB34 7F048144 00000000 */ nop +/* 07AB34 7F048144 00000000 */ nop .L7F048148: /* 07AB38 7F048148 0C001769 */ jal bossGetStageNum -/* 07AB3C 7F04814C 00000000 */ nop +/* 07AB3C 7F04814C 00000000 */ nop /* 07AB40 7F048150 2401001A */ li $at, 26 /* 07AB44 7F048154 1441000B */ bne $v0, $at, .L7F048184 /* 07AB48 7F048158 3C053F85 */ lui $a1, 0x3f85 @@ -21714,7 +21705,7 @@ glabel object_interaction /* 07AB64 7F048174 0FC1B49D */ jal setsubroty /* 07AB68 7F048178 8E240014 */ lw $a0, 0x14($s1) /* 07AB6C 7F04817C 10000007 */ b .L7F04819C -/* 07AB70 7F048180 00000000 */ nop +/* 07AB70 7F048180 00000000 */ nop .L7F048184: /* 07AB74 7F048184 8E240014 */ lw $a0, 0x14($s1) /* 07AB78 7F048188 0FC1B4D2 */ jal sub_GAME_7F06CE84 @@ -21775,13 +21766,13 @@ glabel object_interaction .L7F048258: /* 07AC48 7F048258 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 /* 07AC4C 7F04825C 460CB03E */ c.le.s $f22, $f12 -/* 07AC50 7F048260 00000000 */ nop +/* 07AC50 7F048260 00000000 */ nop /* 07AC54 7F048264 45020016 */ bc1fl .L7F0482C0 /* 07AC58 7F048268 C6200094 */ lwc1 $f0, 0x94($s1) /* 07AC5C 7F04826C C4221004 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) /* 07AC60 7F048270 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 /* 07AC64 7F048274 4602603E */ c.le.s $f12, $f2 -/* 07AC68 7F048278 00000000 */ nop +/* 07AC68 7F048278 00000000 */ nop /* 07AC6C 7F04827C 45020006 */ bc1fl .L7F048298 /* 07AC70 7F048280 C62E0098 */ lwc1 $f14, 0x98($s1) /* 07AC74 7F048284 C624009C */ lwc1 $f4, 0x9c($s1) @@ -21804,13 +21795,13 @@ glabel object_interaction .L7F0482C0: /* 07ACB0 7F0482C0 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 /* 07ACB4 7F0482C4 4600B03E */ c.le.s $f22, $f0 -/* 07ACB8 7F0482C8 00000000 */ nop +/* 07ACB8 7F0482C8 00000000 */ nop /* 07ACBC 7F0482CC 45020016 */ bc1fl .L7F048328 /* 07ACC0 7F0482D0 8E2A000C */ lw $t2, 0xc($s1) /* 07ACC4 7F0482D4 C4221004 */ lwc1 $f2, %lo(g_GlobalTimerDelta)($at) /* 07ACC8 7F0482D8 3C018004 */ lui $at, %hi(g_GlobalTimerDelta) # $at, 0x8004 /* 07ACCC 7F0482DC 4602003E */ c.le.s $f0, $f2 -/* 07ACD0 7F0482E0 00000000 */ nop +/* 07ACD0 7F0482E0 00000000 */ nop /* 07ACD4 7F0482E4 45020006 */ bc1fl .L7F048300 /* 07ACD8 7F0482E8 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07ACDC 7F0482EC C6240090 */ lwc1 $f4, 0x90($s1) @@ -21834,16 +21825,16 @@ glabel object_interaction /* 07AD18 7F048328 00008025 */ move $s0, $zero /* 07AD1C 7F04832C 000A5B00 */ sll $t3, $t2, 0xc /* 07AD20 7F048330 05600014 */ bltz $t3, .L7F048384 -/* 07AD24 7F048334 00000000 */ nop +/* 07AD24 7F048334 00000000 */ nop /* 07AD28 7F048338 0FC13C47 */ jal objIsHealthy /* 07AD2C 7F04833C 02202025 */ move $a0, $s1 /* 07AD30 7F048340 10400010 */ beqz $v0, .L7F048384 -/* 07AD34 7F048344 00000000 */ nop +/* 07AD34 7F048344 00000000 */ nop /* 07AD38 7F048348 C624008C */ lwc1 $f4, 0x8c($s1) /* 07AD3C 7F04834C 4604B032 */ c.eq.s $f22, $f4 -/* 07AD40 7F048350 00000000 */ nop +/* 07AD40 7F048350 00000000 */ nop /* 07AD44 7F048354 4501000B */ bc1t .L7F048384 -/* 07AD48 7F048358 00000000 */ nop +/* 07AD48 7F048358 00000000 */ nop /* 07AD4C 7F04835C 8E2C0008 */ lw $t4, 8($s1) /* 07AD50 7F048360 3C05459C */ lui $a1, (0x459C4000 >> 16) # lui $a1, 0x459c /* 07AD54 7F048364 34A54000 */ ori $a1, (0x459C4000 & 0xFFFF) # ori $a1, $a1, 0x4000 @@ -21859,14 +21850,14 @@ glabel object_interaction /* 07AD78 7F048388 8E2400B0 */ lw $a0, 0xb0($s1) /* 07AD7C 7F04838C 8E2400B0 */ lw $a0, 0xb0($s1) /* 07AD80 7F048390 10800005 */ beqz $a0, .L7F0483A8 -/* 07AD84 7F048394 00000000 */ nop +/* 07AD84 7F048394 00000000 */ nop /* 07AD88 7F048398 0C002094 */ jal sndGetPlayingState -/* 07AD8C 7F04839C 00000000 */ nop +/* 07AD8C 7F04839C 00000000 */ nop /* 07AD90 7F0483A0 5440000A */ bnezl $v0, .L7F0483CC /* 07AD94 7F0483A4 8E2400B0 */ lw $a0, 0xb0($s1) .L7F0483A8: /* 07AD98 7F0483A8 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 07AD9C 7F0483AC 00000000 */ nop +/* 07AD9C 7F0483AC 00000000 */ nop /* 07ADA0 7F0483B0 14400005 */ bnez $v0, .L7F0483C8 /* 07ADA4 7F0483B4 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 /* 07ADA8 7F0483B8 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) @@ -21888,7 +21879,7 @@ glabel object_interaction /* 07ADDC 7F0483EC 50800008 */ beql $a0, $zero, .L7F048410 /* 07ADE0 7F0483F0 92220003 */ lbu $v0, 3($s1) /* 07ADE4 7F0483F4 0C002094 */ jal sndGetPlayingState -/* 07ADE8 7F0483F8 00000000 */ nop +/* 07ADE8 7F0483F8 00000000 */ nop /* 07ADEC 7F0483FC 50400004 */ beql $v0, $zero, .L7F048410 /* 07ADF0 7F048400 92220003 */ lbu $v0, 3($s1) /* 07ADF4 7F048404 0C002120 */ jal sndDeactivate @@ -21913,7 +21904,7 @@ glabel object_interaction /* 07AE38 7F048448 44053000 */ mfc1 $a1, $f6 /* 07AE3C 7F04844C 44065000 */ mfc1 $a2, $f10 /* 07AE40 7F048450 0FC114DC */ jal glassCalculateOpacity -/* 07AE44 7F048454 00000000 */ nop +/* 07AE44 7F048454 00000000 */ nop /* 07AE48 7F048458 8E04008C */ lw $a0, 0x8c($s0) /* 07AE4C 7F04845C AE020088 */ sw $v0, 0x88($s0) /* 07AE50 7F048460 8FAF067C */ lw $t7, 0x67c($sp) @@ -21922,11 +21913,11 @@ glabel object_interaction /* 07AE5C 7F04846C 15E10009 */ bne $t7, $at, .L7F048494 /* 07AE60 7F048470 240100FF */ li $at, 255 /* 07AE64 7F048474 14410005 */ bne $v0, $at, .L7F04848C -/* 07AE68 7F048478 00000000 */ nop +/* 07AE68 7F048478 00000000 */ nop /* 07AE6C 7F04847C 0FC2E416 */ jal bgToggleDataPortalsContrlBytes1Bit1 /* 07AE70 7F048480 00002825 */ move $a1, $zero /* 07AE74 7F048484 10000003 */ b .L7F048494 -/* 07AE78 7F048488 00000000 */ nop +/* 07AE78 7F048488 00000000 */ nop .L7F04848C: /* 07AE7C 7F04848C 0FC2E416 */ jal bgToggleDataPortalsContrlBytes1Bit1 /* 07AE80 7F048490 24050001 */ li $a1, 1 @@ -21954,7 +21945,7 @@ glabel object_interaction /* 07AED0 7F0484E0 44054000 */ mfc1 $a1, $f8 /* 07AED4 7F0484E4 44062000 */ mfc1 $a2, $f4 /* 07AED8 7F0484E8 0FC114DC */ jal glassCalculateOpacity -/* 07AEDC 7F0484EC 00000000 */ nop +/* 07AEDC 7F0484EC 00000000 */ nop /* 07AEE0 7F0484F0 A60200BE */ sh $v0, 0xbe($s0) /* 07AEE4 7F0484F4 8FAC067C */ lw $t4, 0x67c($sp) /* 07AEE8 7F0484F8 24010001 */ li $at, 1 @@ -21966,7 +21957,7 @@ glabel object_interaction /* 07AF00 7F048510 00009025 */ move $s2, $zero /* 07AF04 7F048514 C60600B4 */ lwc1 $f6, 0xb4($s0) /* 07AF08 7F048518 4606B03C */ c.lt.s $f22, $f6 -/* 07AF0C 7F04851C 00000000 */ nop +/* 07AF0C 7F04851C 00000000 */ nop /* 07AF10 7F048520 45020003 */ bc1fl .L7F048530 /* 07AF14 7F048524 8E820008 */ lw $v0, 8($s4) /* 07AF18 7F048528 00009025 */ move $s2, $zero @@ -21977,18 +21968,18 @@ glabel object_interaction /* 07AF24 7F048534 25CE4D3C */ addiu $t6, %lo(skeleton_door) # addiu $t6, $t6, 0x4d3c /* 07AF28 7F048538 8C580004 */ lw $t8, 4($v0) /* 07AF2C 7F04853C 15D80009 */ bne $t6, $t8, .L7F048564 -/* 07AF30 7F048540 00000000 */ nop +/* 07AF30 7F048540 00000000 */ nop /* 07AF34 7F048544 8C4F0008 */ lw $t7, 8($v0) /* 07AF38 7F048548 02802025 */ move $a0, $s4 /* 07AF3C 7F04854C 0FC1B3A3 */ jal modelGetNodeRwData /* 07AF40 7F048550 8DE50004 */ lw $a1, 4($t7) /* 07AF44 7F048554 8C590000 */ lw $t9, ($v0) /* 07AF48 7F048558 17200002 */ bnez $t9, .L7F048564 -/* 07AF4C 7F04855C 00000000 */ nop +/* 07AF4C 7F04855C 00000000 */ nop /* 07AF50 7F048560 00009025 */ move $s2, $zero .L7F048564: /* 07AF54 7F048564 12400005 */ beqz $s2, .L7F04857C -/* 07AF58 7F048568 00000000 */ nop +/* 07AF58 7F048568 00000000 */ nop /* 07AF5C 7F04856C 0FC14E29 */ jal doorDeactivatePortal /* 07AF60 7F048570 02002025 */ move $a0, $s0 /* 07AF64 7F048574 10000004 */ b .L7F048588 @@ -22003,7 +21994,7 @@ glabel object_interaction /* 07AF7C 7F04858C 55210008 */ bnel $t1, $at, .L7F0485B0 /* 07AF80 7F048590 8E23000C */ lw $v1, 0xc($s1) /* 07AF84 7F048594 0FC1F3D6 */ jal get_ptr_for_players_tank -/* 07AF88 7F048598 00000000 */ nop +/* 07AF88 7F048598 00000000 */ nop /* 07AF8C 7F04859C 54530004 */ bnel $v0, $s3, .L7F0485B0 /* 07AF90 7F0485A0 8E23000C */ lw $v1, 0xc($s1) /* 07AF94 7F0485A4 10000018 */ b .L7F048608 @@ -22021,7 +22012,7 @@ glabel object_interaction /* 07AFBC 7F0485CC 00001825 */ move $v1, $zero /* 07AFC0 7F0485D0 314B0800 */ andi $t3, $t2, 0x800 /* 07AFC4 7F0485D4 1560000C */ bnez $t3, .L7F048608 -/* 07AFC8 7F0485D8 00000000 */ nop +/* 07AFC8 7F0485D8 00000000 */ nop /* 07AFCC 7F0485DC 0580000A */ bltz $t4, .L7F048608 /* 07AFD0 7F0485E0 02802025 */ move $a0, $s4 /* 07AFD4 7F0485E4 0FC1B525 */ jal getinstsize @@ -22057,10 +22048,10 @@ glabel object_interaction /* 07B044 7F048654 26240018 */ addiu $a0, $s1, 0x18 /* 07B048 7F048658 8E640004 */ lw $a0, 4($s3) /* 07B04C 7F04865C 00402825 */ move $a1, $v0 -/* 07B050 7F048660 0FC14A73 */ jal sub_GAME_7F0526EC +/* 07B050 7F048660 0FC14A73 */ jal door7F0526EC /* 07B054 7F048664 AFA403A0 */ sw $a0, 0x3a0($sp) /* 07B058 7F048668 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 07B05C 7F04866C 00000000 */ nop +/* 07B05C 7F04866C 00000000 */ nop /* 07B060 7F048670 00402025 */ move $a0, $v0 /* 07B064 7F048674 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place /* 07B068 7F048678 02402825 */ move $a1, $s2 @@ -22123,7 +22114,7 @@ glabel object_interaction /* 07B148 7F048758 C4CC0084 */ lwc1 $f12, 0x84($a2) /* 07B14C 7F04875C 460A6002 */ mul.s $f0, $f12, $f10 /* 07B150 7F048760 4602003C */ c.lt.s $f0, $f2 -/* 07B154 7F048764 00000000 */ nop +/* 07B154 7F048764 00000000 */ nop /* 07B158 7F048768 4502001F */ bc1fl .L7F0487E8 /* 07B15C 7F04876C 8FA90680 */ lw $t1, 0x680($sp) /* 07B160 7F048770 46001201 */ sub.s $f8, $f2, $f0 @@ -22145,7 +22136,7 @@ glabel object_interaction /* 07B1A0 7F0487B0 00003025 */ move $a2, $zero /* 07B1A4 7F0487B4 26790008 */ addiu $t9, $s3, 8 /* 07B1A8 7F0487B8 45000008 */ bc1f .L7F0487DC -/* 07B1AC 7F0487BC 00000000 */ nop +/* 07B1AC 7F0487BC 00000000 */ nop /* 07B1B0 7F0487C0 8C846900 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) /* 07B1B4 7F0487C4 AFB90074 */ sw $t9, 0x74($sp) /* 07B1B8 7F0487C8 0C00209A */ jal sndPlaySfx @@ -22239,7 +22230,7 @@ glabel object_interaction /* 07B308 7F048918 0FC16390 */ jal matrix_4x4_set_position /* 07B30C 7F04891C 27A503A8 */ addiu $a1, $sp, 0x3a8 /* 07B310 7F048920 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 07B314 7F048924 00000000 */ nop +/* 07B314 7F048924 00000000 */ nop /* 07B318 7F048928 00402025 */ move $a0, $v0 /* 07B31C 7F04892C 27A503A8 */ addiu $a1, $sp, 0x3a8 /* 07B320 7F048930 0FC1618D */ jal matrix_4x4_multiply_homogeneous @@ -22261,9 +22252,9 @@ glabel object_interaction /* 07B360 7F048970 46146300 */ add.s $f12, $f12, $f20 .L7F048974: /* 07B364 7F048974 460CA03E */ c.le.s $f20, $f12 -/* 07B368 7F048978 00000000 */ nop +/* 07B368 7F048978 00000000 */ nop /* 07B36C 7F04897C 45000002 */ bc1f .L7F048988 -/* 07B370 7F048980 00000000 */ nop +/* 07B370 7F048980 00000000 */ nop /* 07B374 7F048984 46146301 */ sub.s $f12, $f12, $f20 .L7F048988: /* 07B378 7F048988 0FC162A9 */ jal matrix_4x4_set_rotation_around_y @@ -22288,7 +22279,7 @@ glabel object_interaction /* 07B3C4 7F0489D4 0FC16390 */ jal matrix_4x4_set_position /* 07B3C8 7F0489D8 8FA50070 */ lw $a1, 0x70($sp) /* 07B3CC 7F0489DC 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 07B3D0 7F0489E0 00000000 */ nop +/* 07B3D0 7F0489E0 00000000 */ nop /* 07B3D4 7F0489E4 00402025 */ move $a0, $v0 /* 07B3D8 7F0489E8 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place /* 07B3DC 7F0489EC 8FA50070 */ lw $a1, 0x70($sp) @@ -22339,7 +22330,7 @@ glabel object_interaction /* 07B488 7F048A98 0FC163C9 */ jal matrix_scalar_multiply /* 07B48C 7F048A9C C5AC0014 */ lwc1 $f12, 0x14($t5) /* 07B490 7F048AA0 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 07B494 7F048AA4 00000000 */ nop +/* 07B494 7F048AA4 00000000 */ nop /* 07B498 7F048AA8 00402025 */ move $a0, $v0 /* 07B49C 7F048AAC 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place /* 07B4A0 7F048AB0 8FA50070 */ lw $a1, 0x70($sp) @@ -22532,9 +22523,9 @@ glabel object_interaction /* 07B774 7F048D84 460A3202 */ mul.s $f8, $f6, $f10 /* 07B778 7F048D88 44815000 */ mtc1 $at, $f10 /* 07B77C 7F048D8C 46144102 */ mul.s $f4, $f8, $f20 -/* 07B780 7F048D90 00000000 */ nop +/* 07B780 7F048D90 00000000 */ nop /* 07B784 7F048D94 46141182 */ mul.s $f6, $f2, $f20 -/* 07B788 7F048D98 00000000 */ nop +/* 07B788 7F048D98 00000000 */ nop /* 07B78C 7F048D9C 460A3202 */ mul.s $f8, $f6, $f10 /* 07B790 7F048DA0 C626008C */ lwc1 $f6, 0x8c($s1) /* 07B794 7F048DA4 46082003 */ div.s $f0, $f4, $f8 @@ -22542,20 +22533,20 @@ glabel object_interaction /* 07B79C 7F048DAC E62A008C */ swc1 $f10, 0x8c($s1) /* 07B7A0 7F048DB0 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07B7A4 7F048DB4 460CA03E */ c.le.s $f20, $f12 -/* 07B7A8 7F048DB8 00000000 */ nop +/* 07B7A8 7F048DB8 00000000 */ nop /* 07B7AC 7F048DBC 45000008 */ bc1f .L7F048DE0 -/* 07B7B0 7F048DC0 00000000 */ nop +/* 07B7B0 7F048DC0 00000000 */ nop /* 07B7B4 7F048DC4 46146101 */ sub.s $f4, $f12, $f20 .L7F048DC8: /* 07B7B8 7F048DC8 E624008C */ swc1 $f4, 0x8c($s1) /* 07B7BC 7F048DCC C62C008C */ lwc1 $f12, 0x8c($s1) /* 07B7C0 7F048DD0 460CA03E */ c.le.s $f20, $f12 -/* 07B7C4 7F048DD4 00000000 */ nop +/* 07B7C4 7F048DD4 00000000 */ nop /* 07B7C8 7F048DD8 4503FFFB */ bc1tl .L7F048DC8 /* 07B7CC 7F048DDC 46146101 */ sub.s $f4, $f12, $f20 .L7F048DE0: /* 07B7D0 7F048DE0 4616603C */ c.lt.s $f12, $f22 -/* 07B7D4 7F048DE4 00000000 */ nop +/* 07B7D4 7F048DE4 00000000 */ nop /* 07B7D8 7F048DE8 45020009 */ bc1fl .L7F048E10 /* 07B7DC 7F048DEC C626008C */ lwc1 $f6, 0x8c($s1) /* 07B7E0 7F048DF0 46146200 */ add.s $f8, $f12, $f20 @@ -22563,7 +22554,7 @@ glabel object_interaction /* 07B7E4 7F048DF4 E628008C */ swc1 $f8, 0x8c($s1) /* 07B7E8 7F048DF8 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07B7EC 7F048DFC 4616603C */ c.lt.s $f12, $f22 -/* 07B7F0 7F048E00 00000000 */ nop +/* 07B7F0 7F048E00 00000000 */ nop /* 07B7F4 7F048E04 4503FFFB */ bc1tl .L7F048DF4 /* 07B7F8 7F048E08 46146200 */ add.s $f8, $f12, $f20 .L7F048E0C: @@ -22573,7 +22564,7 @@ glabel object_interaction /* 07B804 7F048E14 E62A008C */ swc1 $f10, 0x8c($s1) /* 07B808 7F048E18 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07B80C 7F048E1C 460CA03E */ c.le.s $f20, $f12 -/* 07B810 7F048E20 00000000 */ nop +/* 07B810 7F048E20 00000000 */ nop /* 07B814 7F048E24 45020009 */ bc1fl .L7F048E4C /* 07B818 7F048E28 4616603C */ c.lt.s $f12, $f22 /* 07B81C 7F048E2C 46146101 */ sub.s $f4, $f12, $f20 @@ -22581,20 +22572,20 @@ glabel object_interaction /* 07B820 7F048E30 E624008C */ swc1 $f4, 0x8c($s1) /* 07B824 7F048E34 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07B828 7F048E38 460CA03E */ c.le.s $f20, $f12 -/* 07B82C 7F048E3C 00000000 */ nop +/* 07B82C 7F048E3C 00000000 */ nop /* 07B830 7F048E40 4503FFFB */ bc1tl .L7F048E30 /* 07B834 7F048E44 46146101 */ sub.s $f4, $f12, $f20 /* 07B838 7F048E48 4616603C */ c.lt.s $f12, $f22 .L7F048E4C: -/* 07B83C 7F048E4C 00000000 */ nop +/* 07B83C 7F048E4C 00000000 */ nop /* 07B840 7F048E50 45000008 */ bc1f .L7F048E74 -/* 07B844 7F048E54 00000000 */ nop +/* 07B844 7F048E54 00000000 */ nop /* 07B848 7F048E58 46146200 */ add.s $f8, $f12, $f20 .L7F048E5C: /* 07B84C 7F048E5C E628008C */ swc1 $f8, 0x8c($s1) /* 07B850 7F048E60 C62C008C */ lwc1 $f12, 0x8c($s1) /* 07B854 7F048E64 4616603C */ c.lt.s $f12, $f22 -/* 07B858 7F048E68 00000000 */ nop +/* 07B858 7F048E68 00000000 */ nop /* 07B85C 7F048E6C 4503FFFB */ bc1tl .L7F048E5C /* 07B860 7F048E70 46146200 */ add.s $f8, $f12, $f20 .L7F048E74: @@ -22602,7 +22593,7 @@ glabel object_interaction /* 07B868 7F048E78 27A502B0 */ addiu $a1, $sp, 0x2b0 /* 07B86C 7F048E7C C6260088 */ lwc1 $f6, 0x88($s1) /* 07B870 7F048E80 4606B03C */ c.lt.s $f22, $f6 -/* 07B874 7F048E84 00000000 */ nop +/* 07B874 7F048E84 00000000 */ nop /* 07B878 7F048E88 4502002B */ bc1fl .L7F048F38 /* 07B87C 7F048E8C C62C0090 */ lwc1 $f12, 0x90($s1) /* 07B880 7F048E90 8FB90264 */ lw $t9, 0x264($sp) @@ -22635,14 +22626,14 @@ glabel object_interaction /* 07B8E8 7F048EF8 C7A20250 */ lwc1 $f2, 0x250($sp) /* 07B8EC 7F048EFC E6200090 */ swc1 $f0, 0x90($s1) /* 07B8F0 7F048F00 4602003C */ c.lt.s $f0, $f2 -/* 07B8F4 7F048F04 00000000 */ nop +/* 07B8F4 7F048F04 00000000 */ nop /* 07B8F8 7F048F08 45020003 */ bc1fl .L7F048F18 /* 07B8FC 7F048F0C C62A009C */ lwc1 $f10, 0x9c($s1) /* 07B900 7F048F10 E6220090 */ swc1 $f2, 0x90($s1) /* 07B904 7F048F14 C62A009C */ lwc1 $f10, 0x9c($s1) .L7F048F18: /* 07B908 7F048F18 460AB03C */ c.lt.s $f22, $f10 -/* 07B90C 7F048F1C 00000000 */ nop +/* 07B90C 7F048F1C 00000000 */ nop /* 07B910 7F048F20 45020005 */ bc1fl .L7F048F38 /* 07B914 7F048F24 C62C0090 */ lwc1 $f12, 0x90($s1) /* 07B918 7F048F28 C6280090 */ lwc1 $f8, 0x90($s1) @@ -22722,7 +22713,7 @@ glabel object_interaction /* 07BA38 7F049048 E6280088 */ swc1 $f8, 0x88($s1) /* 07BA3C 7F04904C C6200088 */ lwc1 $f0, 0x88($s1) /* 07BA40 7F049050 4600A03E */ c.le.s $f20, $f0 -/* 07BA44 7F049054 00000000 */ nop +/* 07BA44 7F049054 00000000 */ nop /* 07BA48 7F049058 45020009 */ bc1fl .L7F049080 /* 07BA4C 7F04905C 4616003C */ c.lt.s $f0, $f22 /* 07BA50 7F049060 46140101 */ sub.s $f4, $f0, $f20 @@ -22730,12 +22721,12 @@ glabel object_interaction /* 07BA54 7F049064 E6240088 */ swc1 $f4, 0x88($s1) /* 07BA58 7F049068 C6200088 */ lwc1 $f0, 0x88($s1) /* 07BA5C 7F04906C 4600A03E */ c.le.s $f20, $f0 -/* 07BA60 7F049070 00000000 */ nop +/* 07BA60 7F049070 00000000 */ nop /* 07BA64 7F049074 4503FFFB */ bc1tl .L7F049064 /* 07BA68 7F049078 46140101 */ sub.s $f4, $f0, $f20 /* 07BA6C 7F04907C 4616003C */ c.lt.s $f0, $f22 .L7F049080: -/* 07BA70 7F049080 00000000 */ nop +/* 07BA70 7F049080 00000000 */ nop /* 07BA74 7F049084 45020009 */ bc1fl .L7F0490AC /* 07BA78 7F049088 8E2E0014 */ lw $t6, 0x14($s1) /* 07BA7C 7F04908C 46140180 */ add.s $f6, $f0, $f20 @@ -22743,7 +22734,7 @@ glabel object_interaction /* 07BA80 7F049090 E6260088 */ swc1 $f6, 0x88($s1) /* 07BA84 7F049094 C6200088 */ lwc1 $f0, 0x88($s1) /* 07BA88 7F049098 4616003C */ c.lt.s $f0, $f22 -/* 07BA8C 7F04909C 00000000 */ nop +/* 07BA8C 7F04909C 00000000 */ nop /* 07BA90 7F0490A0 4503FFFB */ bc1tl .L7F049090 /* 07BA94 7F0490A4 46140180 */ add.s $f6, $f0, $f20 .L7F0490A8: @@ -22754,7 +22745,7 @@ glabel object_interaction /* 07BAA4 7F0490B4 8DD80020 */ lw $t8, 0x20($t6) /* 07BAA8 7F0490B8 02004025 */ move $t0, $s0 /* 07BAAC 7F0490BC 13000015 */ beqz $t8, .L7F049114 -/* 07BAB0 7F0490C0 00000000 */ nop +/* 07BAB0 7F0490C0 00000000 */ nop .L7F0490C4: /* 07BAB4 7F0490C4 8DE10000 */ lw $at, ($t7) /* 07BAB8 7F0490C8 25EF000C */ addiu $t7, $t7, 0xc @@ -22784,7 +22775,7 @@ glabel object_interaction /* 07BB10 7F049120 27A50204 */ addiu $a1, $sp, 0x204 /* 07BB14 7F049124 000B6080 */ sll $t4, $t3, 2 /* 07BB18 7F049128 05810006 */ bgez $t4, .L7F049144 -/* 07BB1C 7F04912C 00000000 */ nop +/* 07BB1C 7F04912C 00000000 */ nop /* 07BB20 7F049130 C62C0088 */ lwc1 $f12, 0x88($s1) /* 07BB24 7F049134 0FC162CC */ jal matrix_4x4_set_rotation_around_z /* 07BB28 7F049138 27A50204 */ addiu $a1, $sp, 0x204 @@ -22868,7 +22859,7 @@ glabel object_interaction /* 07BC50 7F049260 C62E00C8 */ lwc1 $f14, 0xc8($s1) /* 07BC54 7F049264 46007387 */ neg.s $f14, $f14 /* 07BC58 7F049268 4616703C */ c.lt.s $f14, $f22 -/* 07BC5C 7F04926C 00000000 */ nop +/* 07BC5C 7F04926C 00000000 */ nop /* 07BC60 7F049270 45020003 */ bc1fl .L7F049280 /* 07BC64 7F049274 C62C00CC */ lwc1 $f12, 0xcc($s1) /* 07BC68 7F049278 46147380 */ add.s $f14, $f14, $f20 @@ -22876,7 +22867,7 @@ glabel object_interaction .L7F049280: /* 07BC70 7F049280 46006307 */ neg.s $f12, $f12 /* 07BC74 7F049284 4616603C */ c.lt.s $f12, $f22 -/* 07BC78 7F049288 00000000 */ nop +/* 07BC78 7F049288 00000000 */ nop /* 07BC7C 7F04928C 45020003 */ bc1fl .L7F04929C /* 07BC80 7F049290 AFA50070 */ sw $a1, 0x70($sp) /* 07BC84 7F049294 46146300 */ add.s $f12, $f12, $f20 @@ -22919,7 +22910,7 @@ glabel object_interaction /* 07BD14 7F049324 0FC16150 */ jal matrix_4x4_multiply_homogeneous_in_place /* 07BD18 7F049328 8FA5006C */ lw $a1, 0x6c($sp) /* 07BD1C 7F04932C 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 07BD20 7F049330 00000000 */ nop +/* 07BD20 7F049330 00000000 */ nop /* 07BD24 7F049334 27B00170 */ addiu $s0, $sp, 0x170 /* 07BD28 7F049338 02003025 */ move $a2, $s0 /* 07BD2C 7F04933C 00402025 */ move $a0, $v0 @@ -23004,7 +22995,7 @@ glabel object_interaction /* 07BE4C 7F04945C 468021A0 */ cvt.s.w $f6, $f4 /* 07BE50 7F049460 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07BE54 7F049464 44815000 */ mtc1 $at, $f10 -/* 07BE58 7F049468 00000000 */ nop +/* 07BE58 7F049468 00000000 */ nop /* 07BE5C 7F04946C 460A3180 */ add.s $f6, $f6, $f10 .L7F049470: /* 07BE60 7F049470 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -23025,7 +23016,7 @@ glabel object_interaction /* 07BE9C 7F0494AC 46083100 */ add.s $f4, $f6, $f8 /* 07BEA0 7F0494B0 44052000 */ mfc1 $a1, $f4 /* 07BEA4 7F0494B4 0FC138BC */ jal maybe_detonate_object -/* 07BEA8 7F0494B8 00000000 */ nop +/* 07BEA8 7F0494B8 00000000 */ nop .L7F0494BC: /* 07BEAC 7F0494BC 8FAF0680 */ lw $t7, 0x680($sp) /* 07BEB0 7F0494C0 51E0020D */ beql $t7, $zero, .L7F049CF8 @@ -23037,15 +23028,15 @@ glabel object_interaction /* 07BEC8 7F0494D8 0FC14F47 */ jal sub_GAME_7F053A3C /* 07BECC 7F0494DC 8E640004 */ lw $a0, 4($s3) /* 07BED0 7F0494E0 10000202 */ b .L7F049CEC -/* 07BED4 7F0494E4 00000000 */ nop +/* 07BED4 7F0494E4 00000000 */ nop /* 07BED8 7F0494E8 2401000D */ li $at, 13 .L7F0494EC: /* 07BEDC 7F0494EC 144101FF */ bne $v0, $at, .L7F049CEC -/* 07BEE0 7F0494F0 00000000 */ nop +/* 07BEE0 7F0494F0 00000000 */ nop /* 07BEE4 7F0494F4 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 07BEE8 7F0494F8 00000000 */ nop +/* 07BEE8 7F0494F8 00000000 */ nop /* 07BEEC 7F0494FC 144001FB */ bnez $v0, .L7F049CEC -/* 07BEF0 7F049500 00000000 */ nop +/* 07BEF0 7F049500 00000000 */ nop /* 07BEF4 7F049504 8E700004 */ lw $s0, 4($s3) /* 07BEF8 7F049508 AFA00140 */ sw $zero, 0x140($sp) /* 07BEFC 7F04950C AFA0013C */ sw $zero, 0x13c($sp) @@ -23081,7 +23072,7 @@ glabel object_interaction /* 07BF70 7F049580 50800008 */ beql $a0, $zero, .L7F0495A4 /* 07BF74 7F049584 8E0400C8 */ lw $a0, 0xc8($s0) /* 07BF78 7F049588 0C002094 */ jal sndGetPlayingState -/* 07BF7C 7F04958C 00000000 */ nop +/* 07BF7C 7F04958C 00000000 */ nop /* 07BF80 7F049590 50400004 */ beql $v0, $zero, .L7F0495A4 /* 07BF84 7F049594 8E0400C8 */ lw $a0, 0xc8($s0) /* 07BF88 7F049598 0C002120 */ jal sndDeactivate @@ -23091,7 +23082,7 @@ glabel object_interaction /* 07BF94 7F0495A4 50800008 */ beql $a0, $zero, .L7F0495C8 /* 07BF98 7F0495A8 8E0C00C4 */ lw $t4, 0xc4($s0) /* 07BF9C 7F0495AC 0C002094 */ jal sndGetPlayingState -/* 07BFA0 7F0495B0 00000000 */ nop +/* 07BFA0 7F0495B0 00000000 */ nop /* 07BFA4 7F0495B4 50400004 */ beql $v0, $zero, .L7F0495C8 /* 07BFA8 7F0495B8 8E0C00C4 */ lw $t4, 0xc4($s0) /* 07BFAC 7F0495BC 0C002120 */ jal sndDeactivate @@ -23110,7 +23101,7 @@ glabel object_interaction /* 07BFDC 7F0495EC 0FC14F3C */ jal chrobjSndCreatePostEventDefault /* 07BFE0 7F0495F0 8FA50074 */ lw $a1, 0x74($sp) /* 07BFE4 7F0495F4 1000000D */ b .L7F04962C -/* 07BFE8 7F0495F8 00000000 */ nop +/* 07BFE8 7F0495F8 00000000 */ nop .L7F0495FC: /* 07BFEC 7F0495FC 8E0E00C8 */ lw $t6, 0xc8($s0) /* 07BFF0 7F049600 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 @@ -23200,7 +23191,7 @@ glabel object_interaction /* 07C130 7F049740 0FC2BFA9 */ jal walkTilesBetweenPoints_NoCallback /* 07C134 7F049744 E7A40010 */ swc1 $f4, 0x10($sp) /* 07C138 7F049748 1440000E */ bnez $v0, .L7F049784 -/* 07C13C 7F04974C 00000000 */ nop +/* 07C13C 7F04974C 00000000 */ nop /* 07C140 7F049750 C66A0008 */ lwc1 $f10, 8($s3) /* 07C144 7F049754 E7AA0130 */ swc1 $f10, 0x130($sp) /* 07C148 7F049758 C666000C */ lwc1 $f6, 0xc($s3) @@ -23312,7 +23303,7 @@ glabel object_interaction /* 07C2E0 7F0498F0 C7A60138 */ lwc1 $f6, 0x138($sp) /* 07C2E4 7F0498F4 46062301 */ sub.s $f12, $f4, $f6 /* 07C2E8 7F0498F8 46000102 */ mul.s $f4, $f0, $f0 -/* 07C2EC 7F0498FC 00000000 */ nop +/* 07C2EC 7F0498FC 00000000 */ nop /* 07C2F0 7F049900 46021282 */ mul.s $f10, $f2, $f2 /* 07C2F4 7F049904 460A2100 */ add.s $f4, $f4, $f10 /* 07C2F8 7F049908 460C6282 */ mul.s $f10, $f12, $f12 @@ -23330,11 +23321,11 @@ glabel object_interaction /* 07C328 7F049938 460C6182 */ mul.s $f6, $f12, $f12 /* 07C32C 7F04993C 46065100 */ add.s $f4, $f10, $f6 /* 07C330 7F049940 4604A03E */ c.le.s $f20, $f4 -/* 07C334 7F049944 00000000 */ nop +/* 07C334 7F049944 00000000 */ nop /* 07C338 7F049948 45000033 */ bc1f .L7F049A18 -/* 07C33C 7F04994C 00000000 */ nop +/* 07C33C 7F04994C 00000000 */ nop /* 07C340 7F049950 0FC22810 */ jal bondviewGetIfCurrentPlayerDamageShowTime -/* 07C344 7F049954 00000000 */ nop +/* 07C344 7F049954 00000000 */ nop /* 07C348 7F049958 54400030 */ bnezl $v0, .L7F049A1C /* 07C34C 7F04995C 8FAA0120 */ lw $t2, 0x120($sp) /* 07C350 7F049960 0C007614 */ jal sqrtf @@ -23354,7 +23345,7 @@ glabel object_interaction /* 07C388 7F049998 C60A00D4 */ lwc1 $f10, 0xd4($s0) /* 07C38C 7F04999C 46006203 */ div.s $f8, $f12, $f0 /* 07C390 7F0499A0 46081082 */ mul.s $f2, $f2, $f8 -/* 07C394 7F0499A4 00000000 */ nop +/* 07C394 7F0499A4 00000000 */ nop /* 07C398 7F0499A8 C60A00D4 */ lwc1 $f10, 0xd4($s0) .L7F0499AC: /* 07C39C 7F0499AC 3C013F80 */ li $at, 0x3F800000 # 1.000000 @@ -23363,7 +23354,7 @@ glabel object_interaction /* 07C3A8 7F0499B8 E60600D4 */ swc1 $f6, 0xd4($s0) /* 07C3AC 7F0499BC C60400D4 */ lwc1 $f4, 0xd4($s0) /* 07C3B0 7F0499C0 4604403E */ c.le.s $f8, $f4 -/* 07C3B4 7F0499C4 00000000 */ nop +/* 07C3B4 7F0499C4 00000000 */ nop /* 07C3B8 7F0499C8 45020014 */ bc1fl .L7F049A1C /* 07C3BC 7F0499CC 8FAA0120 */ lw $t2, 0x120($sp) /* 07C3C0 7F0499D0 0FC1790F */ jal bondwalkItemGetDestructionAmount @@ -23378,7 +23369,7 @@ glabel object_interaction /* 07C3E4 7F0499F4 24070001 */ li $a3, 1 /* 07C3E8 7F0499F8 46043302 */ mul.s $f12, $f6, $f4 /* 07C3EC 7F0499FC 0FC227FA */ jal bondviewCallRecordDamageKills -/* 07C3F0 7F049A00 00000000 */ nop +/* 07C3F0 7F049A00 00000000 */ nop /* 07C3F4 7F049A04 0FC22810 */ jal bondviewGetIfCurrentPlayerDamageShowTime /* 07C3F8 7F049A08 E61600D4 */ swc1 $f22, 0xd4($s0) /* 07C3FC 7F049A0C 50400003 */ beql $v0, $zero, .L7F049A1C @@ -23507,7 +23498,7 @@ glabel object_interaction /* 07C5C8 7F049BD8 468032A0 */ cvt.s.w $f10, $f6 /* 07C5CC 7F049BDC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07C5D0 7F049BE0 44812000 */ mtc1 $at, $f4 -/* 07C5D4 7F049BE4 00000000 */ nop +/* 07C5D4 7F049BE4 00000000 */ nop /* 07C5D8 7F049BE8 46045280 */ add.s $f10, $f10, $f4 .L7F049BEC: /* 07C5DC 7F049BEC 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -23532,9 +23523,9 @@ glabel object_interaction /* 07C624 7F049C34 C42A8CD0 */ lwc1 $f10, %lo(D_80052B90)($at) /* 07C628 7F049C38 3C018005 */ lui $at, %hi(D_80052B94) # $at, 0x8005 /* 07C62C 7F049C3C 4600503C */ c.lt.s $f10, $f0 -/* 07C630 7F049C40 00000000 */ nop +/* 07C630 7F049C40 00000000 */ nop /* 07C634 7F049C44 45000003 */ bc1f .L7F049C54eu -/* 07C638 7F049C48 00000000 */ nop +/* 07C638 7F049C48 00000000 */ nop /* 07C63C 7F049C4C C4268CD4 */ lwc1 $f6, %lo(D_80052B94)($at) /* 07C640 7F049C50 E4660024 */ swc1 $f6, 0x24($v1) .L7F049C54eu: @@ -23546,7 +23537,7 @@ glabel object_interaction /* 07C658 7F049C68 46802220 */ cvt.s.w $f8, $f4 /* 07C65C 7F049C6C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07C660 7F049C70 44815000 */ mtc1 $at, $f10 -/* 07C664 7F049C74 00000000 */ nop +/* 07C664 7F049C74 00000000 */ nop /* 07C668 7F049C78 460A4200 */ add.s $f8, $f8, $f10 .L7F049C7C: /* 07C66C 7F049C7C 3C012F80 */ li $at, 0x2F800000 # 0.000000 @@ -23575,7 +23566,7 @@ glabel object_interaction /* 07C6C0 7F049CD0 8C65001C */ lw $a1, 0x1c($v1) .L7F049CD4: /* 07C6C4 7F049CD4 10A00005 */ beqz $a1, .L7F049CEC -/* 07C6C8 7F049CD8 00000000 */ nop +/* 07C6C8 7F049CD8 00000000 */ nop /* 07C6CC 7F049CDC 0FC1B3A3 */ jal modelGetNodeRwData /* 07C6D0 7F049CE0 02802025 */ move $a0, $s4 /* 07C6D4 7F049CE4 8FAF013C */ lw $t7, 0x13c($sp) @@ -23637,7 +23628,7 @@ glabel sub_GAME_7F049B58 .L7F049BA0: /* 07E6D0 7F049BA0 02402025 */ move $a0, $s2 /* 07E6D4 7F049BA4 1662000B */ bne $s3, $v0, .L7F049BD4 -/* 07E6D8 7F049BA8 00000000 */ nop +/* 07E6D8 7F049BA8 00000000 */ nop /* 07E6DC 7F049BAC 8E110004 */ lw $s1, 4($s0) /* 07E6E0 7F049BB0 02803025 */ move $a2, $s4 /* 07E6E4 7F049BB4 0FC18786 */ jal sub_GAME_7F061E18 @@ -23650,7 +23641,7 @@ glabel sub_GAME_7F049B58 /* 07E700 7F049BD0 00409025 */ move $s2, $v0 .L7F049BD4: /* 07E704 7F049BD4 1682000B */ bne $s4, $v0, .L7F049C04 -/* 07E708 7F049BD8 00000000 */ nop +/* 07E708 7F049BD8 00000000 */ nop /* 07E70C 7F049BDC 8E030004 */ lw $v1, 4($s0) /* 07E710 7F049BE0 02402025 */ move $a0, $s2 /* 07E714 7F049BE4 02803025 */ move $a2, $s4 @@ -24198,7 +24189,7 @@ Gfx *process_monitor_animation_microcode(Model *model, ModelNode *node, MonitorR // Render the image gSPSetGeometryMode(gdl++, G_CULL_BACK); - likely_generate_DL_for_image_declaration(&gdl, tconfig, arg5, arg4, 2); + texSelect(&gdl, tconfig, arg5, arg4, 2); gSPMatrix(gdl++, osVirtualToPhysical(model->render_pos), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(gdl++, SPSEGMENT_MODEL_VTX, osVirtualToPhysical(vertices)); @@ -24751,7 +24742,7 @@ void *process_monitor_animation_microcode(Model *arg0, ModelNode *arg1, MonitorR arg3 = temp_t2_3 + 8; temp_t2_3->unk4 = 0x2000; temp_t2_3->unk0 = 0xB7000000; - likely_generate_DL_for_image_declaration(temp_a0_2, phi_s1_2, arg5, arg4, 2); + texSelect(temp_a0_2, phi_s1_2, arg5, arg4, 2); temp_s0 = arg3; arg3 = temp_s0 + 8; temp_s0->unk0 = 0x1020040; @@ -24873,7 +24864,7 @@ glabel process_monitor_animation_microcode /* 07EB44 7F04A014 002B0821 */ addu $at, $at, $t3 /* 07EB48 7F04A018 8C2B2C6C */ lw $t3, %lo(jpt_80052C6C)($at) /* 07EB4C 7F04A01C 01600008 */ jr $t3 -/* 07EB50 7F04A020 00000000 */ nop +/* 07EB50 7F04A020 00000000 */ nop command00_reset_scroll_shift: /* 07EB54 7F04A024 244C0001 */ addiu $t4, $v0, 1 /* 07EB58 7F04A028 E6140040 */ swc1 $f20, 0x40($s0) @@ -24888,7 +24879,7 @@ command01_horizontal_scroll: /* 07EB78 7F04A048 05A10004 */ bgez $t5, .L7F04A05C /* 07EB7C 7F04A04C 468021A0 */ cvt.s.w $f6, $f4 /* 07EB80 7F04A050 44814000 */ mtc1 $at, $f8 -/* 07EB84 7F04A054 00000000 */ nop +/* 07EB84 7F04A054 00000000 */ nop /* 07EB88 7F04A058 46083180 */ add.s $f6, $f6, $f8 .L7F04A05C: /* 07EB8C 7F04A05C 4606C283 */ div.s $f10, $f24, $f6 @@ -24899,7 +24890,7 @@ command01_horizontal_scroll: /* 07EBA0 7F04A070 8C6E0004 */ lw $t6, 4($v1) /* 07EBA4 7F04A074 A60F0004 */ sh $t7, 4($s0) /* 07EBA8 7F04A078 448E9000 */ mtc1 $t6, $f18 -/* 07EBAC 7F04A07C 00000000 */ nop +/* 07EBAC 7F04A07C 00000000 */ nop /* 07EBB0 7F04A080 46809120 */ cvt.s.w $f4, $f18 /* 07EBB4 7F04A084 46162202 */ mul.s $f8, $f4, $f22 /* 07EBB8 7F04A088 46080180 */ add.s $f6, $f0, $f8 @@ -24913,7 +24904,7 @@ command02_vertical_scroll: /* 07EBD4 7F04A0A4 07010004 */ bgez $t8, .L7F04A0B8 /* 07EBD8 7F04A0A8 468054A0 */ cvt.s.w $f18, $f10 /* 07EBDC 7F04A0AC 44812000 */ mtc1 $at, $f4 -/* 07EBE0 7F04A0B0 00000000 */ nop +/* 07EBE0 7F04A0B0 00000000 */ nop /* 07EBE4 7F04A0B4 46049480 */ add.s $f18, $f18, $f4 .L7F04A0B8: /* 07EBE8 7F04A0B8 4612C203 */ div.s $f8, $f24, $f18 @@ -24924,7 +24915,7 @@ command02_vertical_scroll: /* 07EBFC 7F04A0CC 8C790004 */ lw $t9, 4($v1) /* 07EC00 7F04A0D0 A6080004 */ sh $t0, 4($s0) /* 07EC04 7F04A0D4 44993000 */ mtc1 $t9, $f6 -/* 07EC08 7F04A0D8 00000000 */ nop +/* 07EC08 7F04A0D8 00000000 */ nop /* 07EC0C 7F04A0DC 468032A0 */ cvt.s.w $f10, $f6 /* 07EC10 7F04A0E0 46165102 */ mul.s $f4, $f10, $f22 /* 07EC14 7F04A0E4 46040480 */ add.s $f18, $f0, $f4 @@ -24938,7 +24929,7 @@ command03_horizontal_pos: /* 07EC30 7F04A100 05210004 */ bgez $t1, .L7F04A114 /* 07EC34 7F04A104 468041A0 */ cvt.s.w $f6, $f8 /* 07EC38 7F04A108 44815000 */ mtc1 $at, $f10 -/* 07EC3C 7F04A10C 00000000 */ nop +/* 07EC3C 7F04A10C 00000000 */ nop /* 07EC40 7F04A110 460A3180 */ add.s $f6, $f6, $f10 .L7F04A114: /* 07EC44 7F04A114 4606C103 */ div.s $f4, $f24, $f6 @@ -24949,7 +24940,7 @@ command03_horizontal_pos: /* 07EC58 7F04A128 8C6A0004 */ lw $t2, 4($v1) /* 07EC5C 7F04A12C A60B0004 */ sh $t3, 4($s0) /* 07EC60 7F04A130 448A4000 */ mtc1 $t2, $f8 -/* 07EC64 7F04A134 00000000 */ nop +/* 07EC64 7F04A134 00000000 */ nop /* 07EC68 7F04A138 468042A0 */ cvt.s.w $f10, $f8 /* 07EC6C 7F04A13C 46165182 */ mul.s $f6, $f10, $f22 /* 07EC70 7F04A140 100000C9 */ b .L7F04A468 @@ -24962,7 +24953,7 @@ command04_vertical_pos: /* 07EC88 7F04A158 05810004 */ bgez $t4, .L7F04A16C /* 07EC8C 7F04A15C 468024A0 */ cvt.s.w $f18, $f4 /* 07EC90 7F04A160 44814000 */ mtc1 $at, $f8 -/* 07EC94 7F04A164 00000000 */ nop +/* 07EC94 7F04A164 00000000 */ nop /* 07EC98 7F04A168 46089480 */ add.s $f18, $f18, $f8 .L7F04A16C: /* 07EC9C 7F04A16C 4612C283 */ div.s $f10, $f24, $f18 @@ -24973,7 +24964,7 @@ command04_vertical_pos: /* 07ECB0 7F04A180 8C6D0004 */ lw $t5, 4($v1) /* 07ECB4 7F04A184 A60E0004 */ sh $t6, 4($s0) /* 07ECB8 7F04A188 448D2000 */ mtc1 $t5, $f4 -/* 07ECBC 7F04A18C 00000000 */ nop +/* 07ECBC 7F04A18C 00000000 */ nop /* 07ECC0 7F04A190 46802220 */ cvt.s.w $f8, $f4 /* 07ECC4 7F04A194 46164482 */ mul.s $f18, $f8, $f22 /* 07ECC8 7F04A198 100000B3 */ b .L7F04A468 @@ -24986,7 +24977,7 @@ command05_zoomx: /* 07ECE0 7F04A1B0 05E10004 */ bgez $t7, .L7F04A1C4 /* 07ECE4 7F04A1B4 468051A0 */ cvt.s.w $f6, $f10 /* 07ECE8 7F04A1B8 44812000 */ mtc1 $at, $f4 -/* 07ECEC 7F04A1BC 00000000 */ nop +/* 07ECEC 7F04A1BC 00000000 */ nop /* 07ECF0 7F04A1C0 46043180 */ add.s $f6, $f6, $f4 .L7F04A1C4: /* 07ECF4 7F04A1C4 4606C203 */ div.s $f8, $f24, $f6 @@ -24997,7 +24988,7 @@ command05_zoomx: /* 07ED08 7F04A1D8 8C780004 */ lw $t8, 4($v1) /* 07ED0C 7F04A1DC A6190004 */ sh $t9, 4($s0) /* 07ED10 7F04A1E0 44985000 */ mtc1 $t8, $f10 -/* 07ED14 7F04A1E4 00000000 */ nop +/* 07ED14 7F04A1E4 00000000 */ nop /* 07ED18 7F04A1E8 46805120 */ cvt.s.w $f4, $f10 /* 07ED1C 7F04A1EC 46162182 */ mul.s $f6, $f4, $f22 /* 07ED20 7F04A1F0 1000009D */ b .L7F04A468 @@ -25010,7 +25001,7 @@ command06_zoomy: /* 07ED38 7F04A208 05010004 */ bgez $t0, .L7F04A21C /* 07ED3C 7F04A20C 468044A0 */ cvt.s.w $f18, $f8 /* 07ED40 7F04A210 44815000 */ mtc1 $at, $f10 -/* 07ED44 7F04A214 00000000 */ nop +/* 07ED44 7F04A214 00000000 */ nop /* 07ED48 7F04A218 460A9480 */ add.s $f18, $f18, $f10 .L7F04A21C: /* 07ED4C 7F04A21C 4612C103 */ div.s $f4, $f24, $f18 @@ -25021,7 +25012,7 @@ command06_zoomy: /* 07ED60 7F04A230 8C690004 */ lw $t1, 4($v1) /* 07ED64 7F04A234 A60A0004 */ sh $t2, 4($s0) /* 07ED68 7F04A238 44894000 */ mtc1 $t1, $f8 -/* 07ED6C 7F04A23C 00000000 */ nop +/* 07ED6C 7F04A23C 00000000 */ nop /* 07ED70 7F04A240 468042A0 */ cvt.s.w $f10, $f8 /* 07ED74 7F04A244 46165482 */ mul.s $f18, $f10, $f22 /* 07ED78 7F04A248 10000087 */ b .L7F04A468 @@ -25038,7 +25029,7 @@ command07_use_image_from_global_monitor_table: /* 07EDA0 7F04A270 A60C0004 */ sh $t4, 4($s0) command08_halt_processing_for_time: /* 07EDA4 7F04A274 86020006 */ lh $v0, 6($s0) -/* 07EDA8 7F04A278 3C0D8005 */ lui $t5, %hi(g_ClockTimer) +/* 07EDA8 7F04A278 3C0D8005 */ lui $t5, %hi(g_ClockTimer) /* 07EDAC 7F04A27C 0442000E */ bltzl $v0, .L7F04A2B8 /* 07EDB0 7F04A280 8C680004 */ lw $t0, 4($v1) /* 07EDB4 7F04A284 8DAD8374 */ lw $t5, %lo(g_ClockTimer)($t5) @@ -25066,7 +25057,7 @@ command09_jump: /* 07EE00 7F04A2D0 3C014780 */ li $at, 0x47800000 # 65536.000000 /* 07EE04 7F04A2D4 44811000 */ mtc1 $at, $f2 /* 07EE08 7F04A2D8 10000063 */ b .L7F04A468 -/* 07EE0C 7F04A2DC 00000000 */ nop +/* 07EE0C 7F04A2DC 00000000 */ nop command0A_jump_conditional: /* 07EE10 7F04A2E0 0C002914 */ jal randomGetNext /* 07EE14 7F04A2E4 AFA30094 */ sw $v1, 0x94($sp) @@ -25082,7 +25073,7 @@ command0A_jump_conditional: /* 07EE3C 7F04A30C 3C014780 */ li $at, 0x47800000 # 65536.000000 /* 07EE40 7F04A310 44811000 */ mtc1 $at, $f2 /* 07EE44 7F04A314 10000054 */ b .L7F04A468 -/* 07EE48 7F04A318 00000000 */ nop +/* 07EE48 7F04A318 00000000 */ nop /* 07EE4C 7F04A31C 960B0004 */ lhu $t3, 4($s0) .L7F04A320: /* 07EE50 7F04A320 3C014780 */ li $at, 0x47800000 # 65536.000000 @@ -25090,7 +25081,7 @@ command0A_jump_conditional: /* 07EE58 7F04A328 256C0003 */ addiu $t4, $t3, 3 /* 07EE5C 7F04A32C A60C0004 */ sh $t4, 4($s0) /* 07EE60 7F04A330 1000004D */ b .L7F04A468 -/* 07EE64 7F04A334 00000000 */ nop +/* 07EE64 7F04A334 00000000 */ nop command0B_restart: /* 07EE68 7F04A338 1000004B */ b .L7F04A468 /* 07EE6C 7F04A33C A6000004 */ sh $zero, 4($s0) @@ -25105,7 +25096,7 @@ command0D_colour_transition: /* 07EE88 7F04A358 05A10004 */ bgez $t5, .L7F04A36C /* 07EE8C 7F04A35C 468021A0 */ cvt.s.w $f6, $f4 /* 07EE90 7F04A360 44814000 */ mtc1 $at, $f8 -/* 07EE94 7F04A364 00000000 */ nop +/* 07EE94 7F04A364 00000000 */ nop /* 07EE98 7F04A368 46083180 */ add.s $f6, $f6, $f8 .L7F04A36C: /* 07EE9C 7F04A36C 4606C283 */ div.s $f10, $f24, $f6 @@ -25137,7 +25128,7 @@ command0E_set_rotation: /* 07EF00 7F04A3D0 244B0002 */ addiu $t3, $v0, 2 /* 07EF04 7F04A3D4 A60B0004 */ sh $t3, 4($s0) /* 07EF08 7F04A3D8 448A9000 */ mtc1 $t2, $f18 -/* 07EF0C 7F04A3DC 00000000 */ nop +/* 07EF0C 7F04A3DC 00000000 */ nop /* 07EF10 7F04A3E0 46809120 */ cvt.s.w $f4, $f18 /* 07EF14 7F04A3E4 461A2202 */ mul.s $f8, $f4, $f26 /* 07EF18 7F04A3E8 46024183 */ div.s $f6, $f8, $f2 @@ -25148,7 +25139,7 @@ command0F_rotate: /* 07EF28 7F04A3F8 3C018005 */ lui $at, %hi(g_GlobalTimerDelta) /* 07EF2C 7F04A3FC C42A8378 */ lwc1 $f10, %lo(g_GlobalTimerDelta)($at) /* 07EF30 7F04A400 448C9000 */ mtc1 $t4, $f18 -/* 07EF34 7F04A404 00000000 */ nop +/* 07EF34 7F04A404 00000000 */ nop /* 07EF38 7F04A408 46809120 */ cvt.s.w $f4, $f18 /* 07EF3C 7F04A40C 46045202 */ mul.s $f8, $f10, $f4 /* 07EF40 7F04A410 C60A000C */ lwc1 $f10, 0xc($s0) @@ -25158,7 +25149,7 @@ command0F_rotate: /* 07EF50 7F04A420 E604000C */ swc1 $f4, 0xc($s0) /* 07EF54 7F04A424 C60C000C */ lwc1 $f12, 0xc($s0) /* 07EF58 7F04A428 460CD03E */ c.le.s $f26, $f12 -/* 07EF5C 7F04A42C 00000000 */ nop +/* 07EF5C 7F04A42C 00000000 */ nop /* 07EF60 7F04A430 45020005 */ bc1fl .L7F04A448 /* 07EF64 7F04A434 4614603C */ c.lt.s $f12, $f20 /* 07EF68 7F04A438 461A6201 */ sub.s $f8, $f12, $f26 @@ -25166,7 +25157,7 @@ command0F_rotate: /* 07EF70 7F04A440 C60C000C */ lwc1 $f12, 0xc($s0) /* 07EF74 7F04A444 4614603C */ c.lt.s $f12, $f20 .L7F04A448: -/* 07EF78 7F04A448 00000000 */ nop +/* 07EF78 7F04A448 00000000 */ nop /* 07EF7C 7F04A44C 45020004 */ bc1fl .L7F04A460 /* 07EF80 7F04A450 960D0004 */ lhu $t5, 4($s0) /* 07EF84 7F04A454 461A6180 */ add.s $f6, $f12, $f26 @@ -25181,7 +25172,7 @@ def_7F04A01C: /* 07EF9C 7F04A46C 96020004 */ lhu $v0, 4($s0) /* 07EFA0 7F04A470 C6000018 */ lwc1 $f0, 0x18($s0) /* 07EFA4 7F04A474 4600A03C */ c.lt.s $f20, $f0 -/* 07EFA8 7F04A478 00000000 */ nop +/* 07EFA8 7F04A478 00000000 */ nop /* 07EFAC 7F04A47C 45000017 */ bc1f .L7F04A4DC /* 07EFB0 7F04A480 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) /* 07EFB4 7F04A484 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 @@ -25192,7 +25183,7 @@ def_7F04A01C: /* 07EFC8 7F04A498 E6080014 */ swc1 $f8, 0x14($s0) /* 07EFCC 7F04A49C C6020014 */ lwc1 $f2, 0x14($s0) /* 07EFD0 7F04A4A0 4618103C */ c.lt.s $f2, $f24 -/* 07EFD4 7F04A4A4 00000000 */ nop +/* 07EFD4 7F04A4A4 00000000 */ nop /* 07EFD8 7F04A4A8 45020009 */ bc1fl .L7F04A4D0 /* 07EFDC 7F04A4AC C6080020 */ lwc1 $f8, 0x20($s0) /* 07EFE0 7F04A4B0 C600001C */ lwc1 $f0, 0x1c($s0) @@ -25212,7 +25203,7 @@ def_7F04A01C: /* 07F010 7F04A4E0 3C028005 */ lui $v0, %hi(g_GlobalTimerDelta) /* 07F014 7F04A4E4 24428378 */ addiu $v0, %lo(g_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 /* 07F018 7F04A4E8 4600A03C */ c.lt.s $f20, $f0 -/* 07F01C 7F04A4EC 00000000 */ nop +/* 07F01C 7F04A4EC 00000000 */ nop /* 07F020 7F04A4F0 45020017 */ bc1fl .L7F04A550 /* 07F024 7F04A4F4 C6000040 */ lwc1 $f0, 0x40($s0) /* 07F028 7F04A4F8 C4520000 */ lwc1 $f18, ($v0) @@ -25222,7 +25213,7 @@ def_7F04A01C: /* 07F038 7F04A508 E6040028 */ swc1 $f4, 0x28($s0) /* 07F03C 7F04A50C C6020028 */ lwc1 $f2, 0x28($s0) /* 07F040 7F04A510 4618103C */ c.lt.s $f2, $f24 -/* 07F044 7F04A514 00000000 */ nop +/* 07F044 7F04A514 00000000 */ nop /* 07F048 7F04A518 45020009 */ bc1fl .L7F04A540 /* 07F04C 7F04A51C C6040034 */ lwc1 $f4, 0x34($s0) /* 07F050 7F04A520 C6000030 */ lwc1 $f0, 0x30($s0) @@ -25241,7 +25232,7 @@ def_7F04A01C: /* 07F07C 7F04A54C C6000040 */ lwc1 $f0, 0x40($s0) .L7F04A550: /* 07F080 7F04A550 4600A03C */ c.lt.s $f20, $f0 -/* 07F084 7F04A554 00000000 */ nop +/* 07F084 7F04A554 00000000 */ nop /* 07F088 7F04A558 45020017 */ bc1fl .L7F04A5B8 /* 07F08C 7F04A55C C6000054 */ lwc1 $f0, 0x54($s0) /* 07F090 7F04A560 C4520000 */ lwc1 $f18, ($v0) @@ -25251,7 +25242,7 @@ def_7F04A01C: /* 07F0A0 7F04A570 E60A003C */ swc1 $f10, 0x3c($s0) /* 07F0A4 7F04A574 C602003C */ lwc1 $f2, 0x3c($s0) /* 07F0A8 7F04A578 4618103C */ c.lt.s $f2, $f24 -/* 07F0AC 7F04A57C 00000000 */ nop +/* 07F0AC 7F04A57C 00000000 */ nop /* 07F0B0 7F04A580 45020009 */ bc1fl .L7F04A5A8 /* 07F0B4 7F04A584 C60A0048 */ lwc1 $f10, 0x48($s0) /* 07F0B8 7F04A588 C6000044 */ lwc1 $f0, 0x44($s0) @@ -25270,7 +25261,7 @@ def_7F04A01C: /* 07F0E4 7F04A5B4 C6000054 */ lwc1 $f0, 0x54($s0) .L7F04A5B8: /* 07F0E8 7F04A5B8 4600A03C */ c.lt.s $f20, $f0 -/* 07F0EC 7F04A5BC 00000000 */ nop +/* 07F0EC 7F04A5BC 00000000 */ nop /* 07F0F0 7F04A5C0 45020017 */ bc1fl .L7F04A620 /* 07F0F4 7F04A5C4 C6020070 */ lwc1 $f2, 0x70($s0) /* 07F0F8 7F04A5C8 C4520000 */ lwc1 $f18, ($v0) @@ -25280,7 +25271,7 @@ def_7F04A01C: /* 07F108 7F04A5D8 E6060050 */ swc1 $f6, 0x50($s0) /* 07F10C 7F04A5DC C6020050 */ lwc1 $f2, 0x50($s0) /* 07F110 7F04A5E0 4618103C */ c.lt.s $f2, $f24 -/* 07F114 7F04A5E4 00000000 */ nop +/* 07F114 7F04A5E4 00000000 */ nop /* 07F118 7F04A5E8 45020009 */ bc1fl .L7F04A610 /* 07F11C 7F04A5EC C606005C */ lwc1 $f6, 0x5c($s0) /* 07F120 7F04A5F0 C6000058 */ lwc1 $f0, 0x58($s0) @@ -25299,7 +25290,7 @@ def_7F04A01C: /* 07F14C 7F04A61C C6020070 */ lwc1 $f2, 0x70($s0) .L7F04A620: /* 07F150 7F04A620 4602A03C */ c.lt.s $f20, $f2 -/* 07F154 7F04A624 00000000 */ nop +/* 07F154 7F04A624 00000000 */ nop /* 07F158 7F04A628 4502003F */ bc1fl .L7F04A728 /* 07F15C 7F04A62C 8FAA00A0 */ lw $t2, 0xa0($sp) /* 07F160 7F04A630 C4520000 */ lwc1 $f18, ($v0) @@ -25309,7 +25300,7 @@ def_7F04A01C: /* 07F170 7F04A640 E608006C */ swc1 $f8, 0x6c($s0) /* 07F174 7F04A644 C600006C */ lwc1 $f0, 0x6c($s0) /* 07F178 7F04A648 4618003C */ c.lt.s $f0, $f24 -/* 07F17C 7F04A64C 00000000 */ nop +/* 07F17C 7F04A64C 00000000 */ nop /* 07F180 7F04A650 4502002B */ bc1fl .L7F04A700 /* 07F184 7F04A654 920F0062 */ lbu $t7, 0x62($s0) /* 07F188 7F04A658 92020061 */ lbu $v0, 0x61($s0) @@ -25370,7 +25361,7 @@ def_7F04A01C: /* 07F258 7F04A728 8FA300A4 */ lw $v1, 0xa4($sp) /* 07F25C 7F04A72C 8FA900BC */ lw $t1, 0xbc($sp) /* 07F260 7F04A730 AD520000 */ sw $s2, ($t2) -/* 07F264 7F04A734 3C0F8009 */ lui $t7, %hi(monitorimages) +/* 07F264 7F04A734 3C0F8009 */ lui $t7, %hi(monitorimages) /* 07F268 7F04A738 AD490004 */ sw $t1, 4($t2) /* 07F26C 7F04A73C 8C6B0008 */ lw $t3, 8($v1) /* 07F270 7F04A740 8D610000 */ lw $at, ($t3) @@ -25439,18 +25430,18 @@ def_7F04A01C: /* 07F368 7F04A838 C60C000C */ lwc1 $f12, 0xc($s0) /* 07F36C 7F04A83C 461A0502 */ mul.s $f20, $f0, $f26 /* 07F370 7F04A840 0FC15FAB */ jal sinf -/* 07F374 7F04A844 00000000 */ nop +/* 07F374 7F04A844 00000000 */ nop /* 07F378 7F04A848 4614B582 */ mul.s $f22, $f22, $f20 /* 07F37C 7F04A84C C7AE0054 */ lwc1 $f14, 0x54($sp) /* 07F380 7F04A850 C7B00050 */ lwc1 $f16, 0x50($sp) /* 07F384 7F04A854 461A0082 */ mul.s $f2, $f0, $f26 -/* 07F388 7F04A858 00000000 */ nop +/* 07F388 7F04A858 00000000 */ nop /* 07F38C 7F04A85C 4602C602 */ mul.s $f24, $f24, $f2 -/* 07F390 7F04A860 00000000 */ nop +/* 07F390 7F04A860 00000000 */ nop /* 07F394 7F04A864 46027382 */ mul.s $f14, $f14, $f2 -/* 07F398 7F04A868 00000000 */ nop +/* 07F398 7F04A868 00000000 */ nop /* 07F39C 7F04A86C 46148402 */ mul.s $f16, $f16, $f20 -/* 07F3A0 7F04A870 00000000 */ nop +/* 07F3A0 7F04A870 00000000 */ nop .L7F04A874: /* 07F3A4 7F04A874 922E0004 */ lbu $t6, 4($s1) /* 07F3A8 7F04A878 3C014200 */ li $at, 0x42000000 # 32.000000 @@ -25460,143 +25451,143 @@ def_7F04A01C: /* 07F3B8 7F04A888 05C10004 */ bgez $t6, .L7F04A89C /* 07F3BC 7F04A88C 468041A0 */ cvt.s.w $f6, $f8 /* 07F3C0 7F04A890 44819000 */ mtc1 $at, $f18 -/* 07F3C4 7F04A894 00000000 */ nop +/* 07F3C4 7F04A894 00000000 */ nop /* 07F3C8 7F04A898 46123180 */ add.s $f6, $f6, $f18 .L7F04A89C: /* 07F3CC 7F04A89C C60A0038 */ lwc1 $f10, 0x38($s0) /* 07F3D0 7F04A8A0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F3D4 7F04A8A4 46165100 */ add.s $f4, $f10, $f22 /* 07F3D8 7F04A8A8 46043202 */ mul.s $f8, $f6, $f4 -/* 07F3DC 7F04A8AC 00000000 */ nop +/* 07F3DC 7F04A8AC 00000000 */ nop /* 07F3E0 7F04A8B0 46004482 */ mul.s $f18, $f8, $f0 /* 07F3E4 7F04A8B4 4600928D */ trunc.w.s $f10, $f18 /* 07F3E8 7F04A8B8 44085000 */ mfc1 $t0, $f10 -/* 07F3EC 7F04A8BC 00000000 */ nop +/* 07F3EC 7F04A8BC 00000000 */ nop /* 07F3F0 7F04A8C0 A6480008 */ sh $t0, 8($s2) /* 07F3F4 7F04A8C4 92390005 */ lbu $t9, 5($s1) /* 07F3F8 7F04A8C8 44993000 */ mtc1 $t9, $f6 /* 07F3FC 7F04A8CC 07210004 */ bgez $t9, .L7F04A8E0 /* 07F400 7F04A8D0 46803120 */ cvt.s.w $f4, $f6 /* 07F404 7F04A8D4 44814000 */ mtc1 $at, $f8 -/* 07F408 7F04A8D8 00000000 */ nop +/* 07F408 7F04A8D8 00000000 */ nop /* 07F40C 7F04A8DC 46082100 */ add.s $f4, $f4, $f8 .L7F04A8E0: /* 07F410 7F04A8E0 C612004C */ lwc1 $f18, 0x4c($s0) /* 07F414 7F04A8E4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F418 7F04A8E8 46189280 */ add.s $f10, $f18, $f24 /* 07F41C 7F04A8EC 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F420 7F04A8F0 00000000 */ nop +/* 07F420 7F04A8F0 00000000 */ nop /* 07F424 7F04A8F4 46003202 */ mul.s $f8, $f6, $f0 /* 07F428 7F04A8F8 4600448D */ trunc.w.s $f18, $f8 /* 07F42C 7F04A8FC 440C9000 */ mfc1 $t4, $f18 -/* 07F430 7F04A900 00000000 */ nop +/* 07F430 7F04A900 00000000 */ nop /* 07F434 7F04A904 A64C000A */ sh $t4, 0xa($s2) /* 07F438 7F04A908 922A0004 */ lbu $t2, 4($s1) /* 07F43C 7F04A90C 448A2000 */ mtc1 $t2, $f4 /* 07F440 7F04A910 05410004 */ bgez $t2, .L7F04A924 /* 07F444 7F04A914 468022A0 */ cvt.s.w $f10, $f4 /* 07F448 7F04A918 44813000 */ mtc1 $at, $f6 -/* 07F44C 7F04A91C 00000000 */ nop +/* 07F44C 7F04A91C 00000000 */ nop /* 07F450 7F04A920 46065280 */ add.s $f10, $f10, $f6 .L7F04A924: /* 07F454 7F04A924 C6080038 */ lwc1 $f8, 0x38($s0) /* 07F458 7F04A928 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F45C 7F04A92C 460E4481 */ sub.s $f18, $f8, $f14 /* 07F460 7F04A930 46125102 */ mul.s $f4, $f10, $f18 -/* 07F464 7F04A934 00000000 */ nop +/* 07F464 7F04A934 00000000 */ nop /* 07F468 7F04A938 46002182 */ mul.s $f6, $f4, $f0 /* 07F46C 7F04A93C 4600320D */ trunc.w.s $f8, $f6 /* 07F470 7F04A940 440D4000 */ mfc1 $t5, $f8 -/* 07F474 7F04A944 00000000 */ nop +/* 07F474 7F04A944 00000000 */ nop /* 07F478 7F04A948 A64D0018 */ sh $t5, 0x18($s2) /* 07F47C 7F04A94C 922F0005 */ lbu $t7, 5($s1) /* 07F480 7F04A950 448F5000 */ mtc1 $t7, $f10 /* 07F484 7F04A954 05E10004 */ bgez $t7, .L7F04A968 /* 07F488 7F04A958 468054A0 */ cvt.s.w $f18, $f10 /* 07F48C 7F04A95C 44812000 */ mtc1 $at, $f4 -/* 07F490 7F04A960 00000000 */ nop +/* 07F490 7F04A960 00000000 */ nop /* 07F494 7F04A964 46049480 */ add.s $f18, $f18, $f4 .L7F04A968: /* 07F498 7F04A968 C606004C */ lwc1 $f6, 0x4c($s0) /* 07F49C 7F04A96C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F4A0 7F04A970 46103200 */ add.s $f8, $f6, $f16 /* 07F4A4 7F04A974 46089282 */ mul.s $f10, $f18, $f8 -/* 07F4A8 7F04A978 00000000 */ nop +/* 07F4A8 7F04A978 00000000 */ nop /* 07F4AC 7F04A97C 46005102 */ mul.s $f4, $f10, $f0 /* 07F4B0 7F04A980 4600218D */ trunc.w.s $f6, $f4 /* 07F4B4 7F04A984 44183000 */ mfc1 $t8, $f6 -/* 07F4B8 7F04A988 00000000 */ nop +/* 07F4B8 7F04A988 00000000 */ nop /* 07F4BC 7F04A98C A658001A */ sh $t8, 0x1a($s2) /* 07F4C0 7F04A990 92280004 */ lbu $t0, 4($s1) /* 07F4C4 7F04A994 44889000 */ mtc1 $t0, $f18 /* 07F4C8 7F04A998 05010004 */ bgez $t0, .L7F04A9AC /* 07F4CC 7F04A99C 46809220 */ cvt.s.w $f8, $f18 /* 07F4D0 7F04A9A0 44815000 */ mtc1 $at, $f10 -/* 07F4D4 7F04A9A4 00000000 */ nop +/* 07F4D4 7F04A9A4 00000000 */ nop /* 07F4D8 7F04A9A8 460A4200 */ add.s $f8, $f8, $f10 .L7F04A9AC: /* 07F4DC 7F04A9AC C6040038 */ lwc1 $f4, 0x38($s0) /* 07F4E0 7F04A9B0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F4E4 7F04A9B4 46162181 */ sub.s $f6, $f4, $f22 /* 07F4E8 7F04A9B8 46064482 */ mul.s $f18, $f8, $f6 -/* 07F4EC 7F04A9BC 00000000 */ nop +/* 07F4EC 7F04A9BC 00000000 */ nop /* 07F4F0 7F04A9C0 46009282 */ mul.s $f10, $f18, $f0 /* 07F4F4 7F04A9C4 4600510D */ trunc.w.s $f4, $f10 /* 07F4F8 7F04A9C8 44092000 */ mfc1 $t1, $f4 -/* 07F4FC 7F04A9CC 00000000 */ nop +/* 07F4FC 7F04A9CC 00000000 */ nop /* 07F500 7F04A9D0 A6490028 */ sh $t1, 0x28($s2) /* 07F504 7F04A9D4 922C0005 */ lbu $t4, 5($s1) /* 07F508 7F04A9D8 448C4000 */ mtc1 $t4, $f8 /* 07F50C 7F04A9DC 05810004 */ bgez $t4, .L7F04A9F0 /* 07F510 7F04A9E0 468041A0 */ cvt.s.w $f6, $f8 /* 07F514 7F04A9E4 44819000 */ mtc1 $at, $f18 -/* 07F518 7F04A9E8 00000000 */ nop +/* 07F518 7F04A9E8 00000000 */ nop /* 07F51C 7F04A9EC 46123180 */ add.s $f6, $f6, $f18 .L7F04A9F0: /* 07F520 7F04A9F0 C60A004C */ lwc1 $f10, 0x4c($s0) /* 07F524 7F04A9F4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F528 7F04A9F8 46185101 */ sub.s $f4, $f10, $f24 /* 07F52C 7F04A9FC 46043202 */ mul.s $f8, $f6, $f4 -/* 07F530 7F04AA00 00000000 */ nop +/* 07F530 7F04AA00 00000000 */ nop /* 07F534 7F04AA04 46004482 */ mul.s $f18, $f8, $f0 /* 07F538 7F04AA08 4600928D */ trunc.w.s $f10, $f18 /* 07F53C 7F04AA0C 440B5000 */ mfc1 $t3, $f10 -/* 07F540 7F04AA10 00000000 */ nop +/* 07F540 7F04AA10 00000000 */ nop /* 07F544 7F04AA14 A64B002A */ sh $t3, 0x2a($s2) /* 07F548 7F04AA18 922D0004 */ lbu $t5, 4($s1) /* 07F54C 7F04AA1C 448D3000 */ mtc1 $t5, $f6 /* 07F550 7F04AA20 05A10004 */ bgez $t5, .L7F04AA34 /* 07F554 7F04AA24 46803120 */ cvt.s.w $f4, $f6 /* 07F558 7F04AA28 44814000 */ mtc1 $at, $f8 -/* 07F55C 7F04AA2C 00000000 */ nop +/* 07F55C 7F04AA2C 00000000 */ nop /* 07F560 7F04AA30 46082100 */ add.s $f4, $f4, $f8 .L7F04AA34: /* 07F564 7F04AA34 C6120038 */ lwc1 $f18, 0x38($s0) /* 07F568 7F04AA38 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F56C 7F04AA3C 460E9280 */ add.s $f10, $f18, $f14 /* 07F570 7F04AA40 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F574 7F04AA44 00000000 */ nop +/* 07F574 7F04AA44 00000000 */ nop /* 07F578 7F04AA48 46003202 */ mul.s $f8, $f6, $f0 /* 07F57C 7F04AA4C 4600448D */ trunc.w.s $f18, $f8 /* 07F580 7F04AA50 440E9000 */ mfc1 $t6, $f18 -/* 07F584 7F04AA54 00000000 */ nop +/* 07F584 7F04AA54 00000000 */ nop /* 07F588 7F04AA58 A64E0038 */ sh $t6, 0x38($s2) /* 07F58C 7F04AA5C 92380005 */ lbu $t8, 5($s1) /* 07F590 7F04AA60 44982000 */ mtc1 $t8, $f4 /* 07F594 7F04AA64 07010004 */ bgez $t8, .L7F04AA78 /* 07F598 7F04AA68 468022A0 */ cvt.s.w $f10, $f4 /* 07F59C 7F04AA6C 44813000 */ mtc1 $at, $f6 -/* 07F5A0 7F04AA70 00000000 */ nop +/* 07F5A0 7F04AA70 00000000 */ nop /* 07F5A4 7F04AA74 46065280 */ add.s $f10, $f10, $f6 .L7F04AA78: /* 07F5A8 7F04AA78 C608004C */ lwc1 $f8, 0x4c($s0) /* 07F5AC 7F04AA7C 46104481 */ sub.s $f18, $f8, $f16 /* 07F5B0 7F04AA80 46125102 */ mul.s $f4, $f10, $f18 -/* 07F5B4 7F04AA84 00000000 */ nop +/* 07F5B4 7F04AA84 00000000 */ nop /* 07F5B8 7F04AA88 46002182 */ mul.s $f6, $f4, $f0 /* 07F5BC 7F04AA8C 4600320D */ trunc.w.s $f8, $f6 /* 07F5C0 7F04AA90 44194000 */ mfc1 $t9, $f8 -/* 07F5C4 7F04AA94 00000000 */ nop +/* 07F5C4 7F04AA94 00000000 */ nop /* 07F5C8 7F04AA98 A659003A */ sh $t9, 0x3a($s2) .L7F04AA9C: /* 07F5CC 7F04AA9C 92020060 */ lbu $v0, 0x60($s0) @@ -25638,7 +25629,7 @@ def_7F04A01C: /* 07F658 7F04AB28 AD4D0000 */ sw $t5, ($t2) /* 07F65C 7F04AB2C AFAE0010 */ sw $t6, 0x10($sp) /* 07F660 7F04AB30 8FA700C0 */ lw $a3, 0xc0($sp) -/* 07F664 7F04AB34 0FC1DB5A */ jal likely_generate_DL_for_image_declaration +/* 07F664 7F04AB34 0FC1DB5A */ jal texSelect /* 07F668 7F04AB38 8FA600C4 */ lw $a2, 0xc4($sp) /* 07F66C 7F04AB3C 8FB000BC */ lw $s0, 0xbc($sp) /* 07F670 7F04AB40 3C190102 */ lui $t9, (0x01020040 >> 16) # lui $t9, 0x102 @@ -25794,7 +25785,7 @@ glabel process_monitor_animation_microcode /* 07EB44 7F04A014 002B0821 */ addu $at, $at, $t3 /* 07EB48 7F04A018 8C2B2C6C */ lw $t3, %lo(jpt_80052C6C)($at) /* 07EB4C 7F04A01C 01600008 */ jr $t3 -/* 07EB50 7F04A020 00000000 */ nop +/* 07EB50 7F04A020 00000000 */ nop command00_reset_scroll_shift: /* 07EB54 7F04A024 244C0001 */ addiu $t4, $v0, 1 /* 07EB58 7F04A028 E6140040 */ swc1 $f20, 0x40($s0) @@ -25809,7 +25800,7 @@ command01_horizontal_scroll: /* 07EB78 7F04A048 05A10004 */ bgez $t5, .L7F04A05C /* 07EB7C 7F04A04C 468021A0 */ cvt.s.w $f6, $f4 /* 07EB80 7F04A050 44814000 */ mtc1 $at, $f8 -/* 07EB84 7F04A054 00000000 */ nop +/* 07EB84 7F04A054 00000000 */ nop /* 07EB88 7F04A058 46083180 */ add.s $f6, $f6, $f8 .L7F04A05C: /* 07EB8C 7F04A05C 4606C283 */ div.s $f10, $f24, $f6 @@ -25820,7 +25811,7 @@ command01_horizontal_scroll: /* 07EBA0 7F04A070 8C6E0004 */ lw $t6, 4($v1) /* 07EBA4 7F04A074 A60F0004 */ sh $t7, 4($s0) /* 07EBA8 7F04A078 448E9000 */ mtc1 $t6, $f18 -/* 07EBAC 7F04A07C 00000000 */ nop +/* 07EBAC 7F04A07C 00000000 */ nop /* 07EBB0 7F04A080 46809120 */ cvt.s.w $f4, $f18 /* 07EBB4 7F04A084 46162202 */ mul.s $f8, $f4, $f22 /* 07EBB8 7F04A088 46080180 */ add.s $f6, $f0, $f8 @@ -25834,7 +25825,7 @@ command02_vertical_scroll: /* 07EBD4 7F04A0A4 07010004 */ bgez $t8, .L7F04A0B8 /* 07EBD8 7F04A0A8 468054A0 */ cvt.s.w $f18, $f10 /* 07EBDC 7F04A0AC 44812000 */ mtc1 $at, $f4 -/* 07EBE0 7F04A0B0 00000000 */ nop +/* 07EBE0 7F04A0B0 00000000 */ nop /* 07EBE4 7F04A0B4 46049480 */ add.s $f18, $f18, $f4 .L7F04A0B8: /* 07EBE8 7F04A0B8 4612C203 */ div.s $f8, $f24, $f18 @@ -25845,7 +25836,7 @@ command02_vertical_scroll: /* 07EBFC 7F04A0CC 8C790004 */ lw $t9, 4($v1) /* 07EC00 7F04A0D0 A6080004 */ sh $t0, 4($s0) /* 07EC04 7F04A0D4 44993000 */ mtc1 $t9, $f6 -/* 07EC08 7F04A0D8 00000000 */ nop +/* 07EC08 7F04A0D8 00000000 */ nop /* 07EC0C 7F04A0DC 468032A0 */ cvt.s.w $f10, $f6 /* 07EC10 7F04A0E0 46165102 */ mul.s $f4, $f10, $f22 /* 07EC14 7F04A0E4 46040480 */ add.s $f18, $f0, $f4 @@ -25859,7 +25850,7 @@ command03_horizontal_pos: /* 07EC30 7F04A100 05210004 */ bgez $t1, .L7F04A114 /* 07EC34 7F04A104 468041A0 */ cvt.s.w $f6, $f8 /* 07EC38 7F04A108 44815000 */ mtc1 $at, $f10 -/* 07EC3C 7F04A10C 00000000 */ nop +/* 07EC3C 7F04A10C 00000000 */ nop /* 07EC40 7F04A110 460A3180 */ add.s $f6, $f6, $f10 .L7F04A114: /* 07EC44 7F04A114 4606C103 */ div.s $f4, $f24, $f6 @@ -25870,7 +25861,7 @@ command03_horizontal_pos: /* 07EC58 7F04A128 8C6A0004 */ lw $t2, 4($v1) /* 07EC5C 7F04A12C A60B0004 */ sh $t3, 4($s0) /* 07EC60 7F04A130 448A4000 */ mtc1 $t2, $f8 -/* 07EC64 7F04A134 00000000 */ nop +/* 07EC64 7F04A134 00000000 */ nop /* 07EC68 7F04A138 468042A0 */ cvt.s.w $f10, $f8 /* 07EC6C 7F04A13C 46165182 */ mul.s $f6, $f10, $f22 /* 07EC70 7F04A140 100000C9 */ b .L7F04A468 @@ -25883,7 +25874,7 @@ command04_vertical_pos: /* 07EC88 7F04A158 05810004 */ bgez $t4, .L7F04A16C /* 07EC8C 7F04A15C 468024A0 */ cvt.s.w $f18, $f4 /* 07EC90 7F04A160 44814000 */ mtc1 $at, $f8 -/* 07EC94 7F04A164 00000000 */ nop +/* 07EC94 7F04A164 00000000 */ nop /* 07EC98 7F04A168 46089480 */ add.s $f18, $f18, $f8 .L7F04A16C: /* 07EC9C 7F04A16C 4612C283 */ div.s $f10, $f24, $f18 @@ -25894,7 +25885,7 @@ command04_vertical_pos: /* 07ECB0 7F04A180 8C6D0004 */ lw $t5, 4($v1) /* 07ECB4 7F04A184 A60E0004 */ sh $t6, 4($s0) /* 07ECB8 7F04A188 448D2000 */ mtc1 $t5, $f4 -/* 07ECBC 7F04A18C 00000000 */ nop +/* 07ECBC 7F04A18C 00000000 */ nop /* 07ECC0 7F04A190 46802220 */ cvt.s.w $f8, $f4 /* 07ECC4 7F04A194 46164482 */ mul.s $f18, $f8, $f22 /* 07ECC8 7F04A198 100000B3 */ b .L7F04A468 @@ -25907,7 +25898,7 @@ command05_zoomx: /* 07ECE0 7F04A1B0 05E10004 */ bgez $t7, .L7F04A1C4 /* 07ECE4 7F04A1B4 468051A0 */ cvt.s.w $f6, $f10 /* 07ECE8 7F04A1B8 44812000 */ mtc1 $at, $f4 -/* 07ECEC 7F04A1BC 00000000 */ nop +/* 07ECEC 7F04A1BC 00000000 */ nop /* 07ECF0 7F04A1C0 46043180 */ add.s $f6, $f6, $f4 .L7F04A1C4: /* 07ECF4 7F04A1C4 4606C203 */ div.s $f8, $f24, $f6 @@ -25918,7 +25909,7 @@ command05_zoomx: /* 07ED08 7F04A1D8 8C780004 */ lw $t8, 4($v1) /* 07ED0C 7F04A1DC A6190004 */ sh $t9, 4($s0) /* 07ED10 7F04A1E0 44985000 */ mtc1 $t8, $f10 -/* 07ED14 7F04A1E4 00000000 */ nop +/* 07ED14 7F04A1E4 00000000 */ nop /* 07ED18 7F04A1E8 46805120 */ cvt.s.w $f4, $f10 /* 07ED1C 7F04A1EC 46162182 */ mul.s $f6, $f4, $f22 /* 07ED20 7F04A1F0 1000009D */ b .L7F04A468 @@ -25931,7 +25922,7 @@ command06_zoomy: /* 07ED38 7F04A208 05010004 */ bgez $t0, .L7F04A21C /* 07ED3C 7F04A20C 468044A0 */ cvt.s.w $f18, $f8 /* 07ED40 7F04A210 44815000 */ mtc1 $at, $f10 -/* 07ED44 7F04A214 00000000 */ nop +/* 07ED44 7F04A214 00000000 */ nop /* 07ED48 7F04A218 460A9480 */ add.s $f18, $f18, $f10 .L7F04A21C: /* 07ED4C 7F04A21C 4612C103 */ div.s $f4, $f24, $f18 @@ -25942,7 +25933,7 @@ command06_zoomy: /* 07ED60 7F04A230 8C690004 */ lw $t1, 4($v1) /* 07ED64 7F04A234 A60A0004 */ sh $t2, 4($s0) /* 07ED68 7F04A238 44894000 */ mtc1 $t1, $f8 -/* 07ED6C 7F04A23C 00000000 */ nop +/* 07ED6C 7F04A23C 00000000 */ nop /* 07ED70 7F04A240 468042A0 */ cvt.s.w $f10, $f8 /* 07ED74 7F04A244 46165482 */ mul.s $f18, $f10, $f22 /* 07ED78 7F04A248 10000087 */ b .L7F04A468 @@ -25959,7 +25950,7 @@ command07_use_image_from_global_monitor_table: /* 07EDA0 7F04A270 A60C0004 */ sh $t4, 4($s0) command08_halt_processing_for_time: /* 07EDA4 7F04A274 86020006 */ lh $v0, 6($s0) -/* 07EDA8 7F04A278 3C0D8005 */ lui $t5, %hi(g_ClockTimer) +/* 07EDA8 7F04A278 3C0D8005 */ lui $t5, %hi(g_ClockTimer) /* 07EDAC 7F04A27C 0442000E */ bltzl $v0, .L7F04A2B8 /* 07EDB0 7F04A280 8C680004 */ lw $t0, 4($v1) /* 07EDB4 7F04A284 8DAD8374 */ lw $t5, %lo(g_ClockTimer)($t5) @@ -25987,7 +25978,7 @@ command09_jump: /* 07EE00 7F04A2D0 3C014780 */ li $at, 0x47800000 # 65536.000000 /* 07EE04 7F04A2D4 44811000 */ mtc1 $at, $f2 /* 07EE08 7F04A2D8 10000063 */ b .L7F04A468 -/* 07EE0C 7F04A2DC 00000000 */ nop +/* 07EE0C 7F04A2DC 00000000 */ nop command0A_jump_conditional: /* 07EE10 7F04A2E0 0C002914 */ jal randomGetNext /* 07EE14 7F04A2E4 AFA30094 */ sw $v1, 0x94($sp) @@ -26003,7 +25994,7 @@ command0A_jump_conditional: /* 07EE3C 7F04A30C 3C014780 */ li $at, 0x47800000 # 65536.000000 /* 07EE40 7F04A310 44811000 */ mtc1 $at, $f2 /* 07EE44 7F04A314 10000054 */ b .L7F04A468 -/* 07EE48 7F04A318 00000000 */ nop +/* 07EE48 7F04A318 00000000 */ nop /* 07EE4C 7F04A31C 960B0004 */ lhu $t3, 4($s0) .L7F04A320: /* 07EE50 7F04A320 3C014780 */ li $at, 0x47800000 # 65536.000000 @@ -26011,7 +26002,7 @@ command0A_jump_conditional: /* 07EE58 7F04A328 256C0003 */ addiu $t4, $t3, 3 /* 07EE5C 7F04A32C A60C0004 */ sh $t4, 4($s0) /* 07EE60 7F04A330 1000004D */ b .L7F04A468 -/* 07EE64 7F04A334 00000000 */ nop +/* 07EE64 7F04A334 00000000 */ nop command0B_restart: /* 07EE68 7F04A338 1000004B */ b .L7F04A468 /* 07EE6C 7F04A33C A6000004 */ sh $zero, 4($s0) @@ -26026,7 +26017,7 @@ command0D_colour_transition: /* 07EE88 7F04A358 05A10004 */ bgez $t5, .L7F04A36C /* 07EE8C 7F04A35C 468021A0 */ cvt.s.w $f6, $f4 /* 07EE90 7F04A360 44814000 */ mtc1 $at, $f8 -/* 07EE94 7F04A364 00000000 */ nop +/* 07EE94 7F04A364 00000000 */ nop /* 07EE98 7F04A368 46083180 */ add.s $f6, $f6, $f8 .L7F04A36C: /* 07EE9C 7F04A36C 4606C283 */ div.s $f10, $f24, $f6 @@ -26058,7 +26049,7 @@ command0E_set_rotation: /* 07EF00 7F04A3D0 244B0002 */ addiu $t3, $v0, 2 /* 07EF04 7F04A3D4 A60B0004 */ sh $t3, 4($s0) /* 07EF08 7F04A3D8 448A9000 */ mtc1 $t2, $f18 -/* 07EF0C 7F04A3DC 00000000 */ nop +/* 07EF0C 7F04A3DC 00000000 */ nop /* 07EF10 7F04A3E0 46809120 */ cvt.s.w $f4, $f18 /* 07EF14 7F04A3E4 461A2202 */ mul.s $f8, $f4, $f26 /* 07EF18 7F04A3E8 46024183 */ div.s $f6, $f8, $f2 @@ -26069,7 +26060,7 @@ command0F_rotate: /* 07EF28 7F04A3F8 3C018005 */ lui $at, %hi(g_JP_GlobalTimerDelta) /* 07EF2C 7F04A3FC C42A8378 */ lwc1 $f10, %lo(g_JP_GlobalTimerDelta)($at) /* 07EF30 7F04A400 448C9000 */ mtc1 $t4, $f18 -/* 07EF34 7F04A404 00000000 */ nop +/* 07EF34 7F04A404 00000000 */ nop /* 07EF38 7F04A408 46809120 */ cvt.s.w $f4, $f18 /* 07EF3C 7F04A40C 46045202 */ mul.s $f8, $f10, $f4 /* 07EF40 7F04A410 C60A000C */ lwc1 $f10, 0xc($s0) @@ -26079,7 +26070,7 @@ command0F_rotate: /* 07EF50 7F04A420 E604000C */ swc1 $f4, 0xc($s0) /* 07EF54 7F04A424 C60C000C */ lwc1 $f12, 0xc($s0) /* 07EF58 7F04A428 460CD03E */ c.le.s $f26, $f12 -/* 07EF5C 7F04A42C 00000000 */ nop +/* 07EF5C 7F04A42C 00000000 */ nop /* 07EF60 7F04A430 45020005 */ bc1fl .L7F04A448 /* 07EF64 7F04A434 4614603C */ c.lt.s $f12, $f20 /* 07EF68 7F04A438 461A6201 */ sub.s $f8, $f12, $f26 @@ -26087,7 +26078,7 @@ command0F_rotate: /* 07EF70 7F04A440 C60C000C */ lwc1 $f12, 0xc($s0) /* 07EF74 7F04A444 4614603C */ c.lt.s $f12, $f20 .L7F04A448: -/* 07EF78 7F04A448 00000000 */ nop +/* 07EF78 7F04A448 00000000 */ nop /* 07EF7C 7F04A44C 45020004 */ bc1fl .L7F04A460 /* 07EF80 7F04A450 960D0004 */ lhu $t5, 4($s0) /* 07EF84 7F04A454 461A6180 */ add.s $f6, $f12, $f26 @@ -26102,7 +26093,7 @@ def_7F04A01C: /* 07EF9C 7F04A46C 96020004 */ lhu $v0, 4($s0) /* 07EFA0 7F04A470 C6000018 */ lwc1 $f0, 0x18($s0) /* 07EFA4 7F04A474 4600A03C */ c.lt.s $f20, $f0 -/* 07EFA8 7F04A478 00000000 */ nop +/* 07EFA8 7F04A478 00000000 */ nop /* 07EFAC 7F04A47C 45000017 */ bc1f .L7F04A4DC /* 07EFB0 7F04A480 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) /* 07EFB4 7F04A484 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 @@ -26113,7 +26104,7 @@ def_7F04A01C: /* 07EFC8 7F04A498 E6080014 */ swc1 $f8, 0x14($s0) /* 07EFCC 7F04A49C C6020014 */ lwc1 $f2, 0x14($s0) /* 07EFD0 7F04A4A0 4618103C */ c.lt.s $f2, $f24 -/* 07EFD4 7F04A4A4 00000000 */ nop +/* 07EFD4 7F04A4A4 00000000 */ nop /* 07EFD8 7F04A4A8 45020009 */ bc1fl .L7F04A4D0 /* 07EFDC 7F04A4AC C6080020 */ lwc1 $f8, 0x20($s0) /* 07EFE0 7F04A4B0 C600001C */ lwc1 $f0, 0x1c($s0) @@ -26133,7 +26124,7 @@ def_7F04A01C: /* 07F010 7F04A4E0 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) /* 07F014 7F04A4E4 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 /* 07F018 7F04A4E8 4600A03C */ c.lt.s $f20, $f0 -/* 07F01C 7F04A4EC 00000000 */ nop +/* 07F01C 7F04A4EC 00000000 */ nop /* 07F020 7F04A4F0 45020017 */ bc1fl .L7F04A550 /* 07F024 7F04A4F4 C6000040 */ lwc1 $f0, 0x40($s0) /* 07F028 7F04A4F8 C4520000 */ lwc1 $f18, ($v0) @@ -26143,7 +26134,7 @@ def_7F04A01C: /* 07F038 7F04A508 E6040028 */ swc1 $f4, 0x28($s0) /* 07F03C 7F04A50C C6020028 */ lwc1 $f2, 0x28($s0) /* 07F040 7F04A510 4618103C */ c.lt.s $f2, $f24 -/* 07F044 7F04A514 00000000 */ nop +/* 07F044 7F04A514 00000000 */ nop /* 07F048 7F04A518 45020009 */ bc1fl .L7F04A540 /* 07F04C 7F04A51C C6040034 */ lwc1 $f4, 0x34($s0) /* 07F050 7F04A520 C6000030 */ lwc1 $f0, 0x30($s0) @@ -26162,7 +26153,7 @@ def_7F04A01C: /* 07F07C 7F04A54C C6000040 */ lwc1 $f0, 0x40($s0) .L7F04A550: /* 07F080 7F04A550 4600A03C */ c.lt.s $f20, $f0 -/* 07F084 7F04A554 00000000 */ nop +/* 07F084 7F04A554 00000000 */ nop /* 07F088 7F04A558 45020017 */ bc1fl .L7F04A5B8 /* 07F08C 7F04A55C C6000054 */ lwc1 $f0, 0x54($s0) /* 07F090 7F04A560 C4520000 */ lwc1 $f18, ($v0) @@ -26172,7 +26163,7 @@ def_7F04A01C: /* 07F0A0 7F04A570 E60A003C */ swc1 $f10, 0x3c($s0) /* 07F0A4 7F04A574 C602003C */ lwc1 $f2, 0x3c($s0) /* 07F0A8 7F04A578 4618103C */ c.lt.s $f2, $f24 -/* 07F0AC 7F04A57C 00000000 */ nop +/* 07F0AC 7F04A57C 00000000 */ nop /* 07F0B0 7F04A580 45020009 */ bc1fl .L7F04A5A8 /* 07F0B4 7F04A584 C60A0048 */ lwc1 $f10, 0x48($s0) /* 07F0B8 7F04A588 C6000044 */ lwc1 $f0, 0x44($s0) @@ -26191,7 +26182,7 @@ def_7F04A01C: /* 07F0E4 7F04A5B4 C6000054 */ lwc1 $f0, 0x54($s0) .L7F04A5B8: /* 07F0E8 7F04A5B8 4600A03C */ c.lt.s $f20, $f0 -/* 07F0EC 7F04A5BC 00000000 */ nop +/* 07F0EC 7F04A5BC 00000000 */ nop /* 07F0F0 7F04A5C0 45020017 */ bc1fl .L7F04A620 /* 07F0F4 7F04A5C4 C6020070 */ lwc1 $f2, 0x70($s0) /* 07F0F8 7F04A5C8 C4520000 */ lwc1 $f18, ($v0) @@ -26201,7 +26192,7 @@ def_7F04A01C: /* 07F108 7F04A5D8 E6060050 */ swc1 $f6, 0x50($s0) /* 07F10C 7F04A5DC C6020050 */ lwc1 $f2, 0x50($s0) /* 07F110 7F04A5E0 4618103C */ c.lt.s $f2, $f24 -/* 07F114 7F04A5E4 00000000 */ nop +/* 07F114 7F04A5E4 00000000 */ nop /* 07F118 7F04A5E8 45020009 */ bc1fl .L7F04A610 /* 07F11C 7F04A5EC C606005C */ lwc1 $f6, 0x5c($s0) /* 07F120 7F04A5F0 C6000058 */ lwc1 $f0, 0x58($s0) @@ -26220,7 +26211,7 @@ def_7F04A01C: /* 07F14C 7F04A61C C6020070 */ lwc1 $f2, 0x70($s0) .L7F04A620: /* 07F150 7F04A620 4602A03C */ c.lt.s $f20, $f2 -/* 07F154 7F04A624 00000000 */ nop +/* 07F154 7F04A624 00000000 */ nop /* 07F158 7F04A628 4502003F */ bc1fl .L7F04A728 /* 07F15C 7F04A62C 8FAA00A0 */ lw $t2, 0xa0($sp) /* 07F160 7F04A630 C4520000 */ lwc1 $f18, ($v0) @@ -26230,7 +26221,7 @@ def_7F04A01C: /* 07F170 7F04A640 E608006C */ swc1 $f8, 0x6c($s0) /* 07F174 7F04A644 C600006C */ lwc1 $f0, 0x6c($s0) /* 07F178 7F04A648 4618003C */ c.lt.s $f0, $f24 -/* 07F17C 7F04A64C 00000000 */ nop +/* 07F17C 7F04A64C 00000000 */ nop /* 07F180 7F04A650 4502002B */ bc1fl .L7F04A700 /* 07F184 7F04A654 920F0062 */ lbu $t7, 0x62($s0) /* 07F188 7F04A658 92020061 */ lbu $v0, 0x61($s0) @@ -26291,7 +26282,7 @@ def_7F04A01C: /* 07F258 7F04A728 8FA300A4 */ lw $v1, 0xa4($sp) /* 07F25C 7F04A72C 8FA900BC */ lw $t1, 0xbc($sp) /* 07F260 7F04A730 AD520000 */ sw $s2, ($t2) -/* 07F264 7F04A734 3C0F8009 */ lui $t7, %hi(monitorimages) +/* 07F264 7F04A734 3C0F8009 */ lui $t7, %hi(monitorimages) /* 07F268 7F04A738 AD490004 */ sw $t1, 4($t2) /* 07F26C 7F04A73C 8C6B0008 */ lw $t3, 8($v1) /* 07F270 7F04A740 8D610000 */ lw $at, ($t3) @@ -26360,18 +26351,18 @@ def_7F04A01C: /* 07F368 7F04A838 C60C000C */ lwc1 $f12, 0xc($s0) /* 07F36C 7F04A83C 461A0502 */ mul.s $f20, $f0, $f26 /* 07F370 7F04A840 0FC15FAB */ jal sinf -/* 07F374 7F04A844 00000000 */ nop +/* 07F374 7F04A844 00000000 */ nop /* 07F378 7F04A848 4614B582 */ mul.s $f22, $f22, $f20 /* 07F37C 7F04A84C C7AE0054 */ lwc1 $f14, 0x54($sp) /* 07F380 7F04A850 C7B00050 */ lwc1 $f16, 0x50($sp) /* 07F384 7F04A854 461A0082 */ mul.s $f2, $f0, $f26 -/* 07F388 7F04A858 00000000 */ nop +/* 07F388 7F04A858 00000000 */ nop /* 07F38C 7F04A85C 4602C602 */ mul.s $f24, $f24, $f2 -/* 07F390 7F04A860 00000000 */ nop +/* 07F390 7F04A860 00000000 */ nop /* 07F394 7F04A864 46027382 */ mul.s $f14, $f14, $f2 -/* 07F398 7F04A868 00000000 */ nop +/* 07F398 7F04A868 00000000 */ nop /* 07F39C 7F04A86C 46148402 */ mul.s $f16, $f16, $f20 -/* 07F3A0 7F04A870 00000000 */ nop +/* 07F3A0 7F04A870 00000000 */ nop .L7F04A874: /* 07F3A4 7F04A874 922E0004 */ lbu $t6, 4($s1) /* 07F3A8 7F04A878 3C014200 */ li $at, 0x42000000 # 32.000000 @@ -26381,143 +26372,143 @@ def_7F04A01C: /* 07F3B8 7F04A888 05C10004 */ bgez $t6, .L7F04A89C /* 07F3BC 7F04A88C 468041A0 */ cvt.s.w $f6, $f8 /* 07F3C0 7F04A890 44819000 */ mtc1 $at, $f18 -/* 07F3C4 7F04A894 00000000 */ nop +/* 07F3C4 7F04A894 00000000 */ nop /* 07F3C8 7F04A898 46123180 */ add.s $f6, $f6, $f18 .L7F04A89C: /* 07F3CC 7F04A89C C60A0038 */ lwc1 $f10, 0x38($s0) /* 07F3D0 7F04A8A0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F3D4 7F04A8A4 46165100 */ add.s $f4, $f10, $f22 /* 07F3D8 7F04A8A8 46043202 */ mul.s $f8, $f6, $f4 -/* 07F3DC 7F04A8AC 00000000 */ nop +/* 07F3DC 7F04A8AC 00000000 */ nop /* 07F3E0 7F04A8B0 46004482 */ mul.s $f18, $f8, $f0 /* 07F3E4 7F04A8B4 4600928D */ trunc.w.s $f10, $f18 /* 07F3E8 7F04A8B8 44085000 */ mfc1 $t0, $f10 -/* 07F3EC 7F04A8BC 00000000 */ nop +/* 07F3EC 7F04A8BC 00000000 */ nop /* 07F3F0 7F04A8C0 A6480008 */ sh $t0, 8($s2) /* 07F3F4 7F04A8C4 92390005 */ lbu $t9, 5($s1) /* 07F3F8 7F04A8C8 44993000 */ mtc1 $t9, $f6 /* 07F3FC 7F04A8CC 07210004 */ bgez $t9, .L7F04A8E0 /* 07F400 7F04A8D0 46803120 */ cvt.s.w $f4, $f6 /* 07F404 7F04A8D4 44814000 */ mtc1 $at, $f8 -/* 07F408 7F04A8D8 00000000 */ nop +/* 07F408 7F04A8D8 00000000 */ nop /* 07F40C 7F04A8DC 46082100 */ add.s $f4, $f4, $f8 .L7F04A8E0: /* 07F410 7F04A8E0 C612004C */ lwc1 $f18, 0x4c($s0) /* 07F414 7F04A8E4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F418 7F04A8E8 46189280 */ add.s $f10, $f18, $f24 /* 07F41C 7F04A8EC 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F420 7F04A8F0 00000000 */ nop +/* 07F420 7F04A8F0 00000000 */ nop /* 07F424 7F04A8F4 46003202 */ mul.s $f8, $f6, $f0 /* 07F428 7F04A8F8 4600448D */ trunc.w.s $f18, $f8 /* 07F42C 7F04A8FC 440C9000 */ mfc1 $t4, $f18 -/* 07F430 7F04A900 00000000 */ nop +/* 07F430 7F04A900 00000000 */ nop /* 07F434 7F04A904 A64C000A */ sh $t4, 0xa($s2) /* 07F438 7F04A908 922A0004 */ lbu $t2, 4($s1) /* 07F43C 7F04A90C 448A2000 */ mtc1 $t2, $f4 /* 07F440 7F04A910 05410004 */ bgez $t2, .L7F04A924 /* 07F444 7F04A914 468022A0 */ cvt.s.w $f10, $f4 /* 07F448 7F04A918 44813000 */ mtc1 $at, $f6 -/* 07F44C 7F04A91C 00000000 */ nop +/* 07F44C 7F04A91C 00000000 */ nop /* 07F450 7F04A920 46065280 */ add.s $f10, $f10, $f6 .L7F04A924: /* 07F454 7F04A924 C6080038 */ lwc1 $f8, 0x38($s0) /* 07F458 7F04A928 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F45C 7F04A92C 460E4481 */ sub.s $f18, $f8, $f14 /* 07F460 7F04A930 46125102 */ mul.s $f4, $f10, $f18 -/* 07F464 7F04A934 00000000 */ nop +/* 07F464 7F04A934 00000000 */ nop /* 07F468 7F04A938 46002182 */ mul.s $f6, $f4, $f0 /* 07F46C 7F04A93C 4600320D */ trunc.w.s $f8, $f6 /* 07F470 7F04A940 440D4000 */ mfc1 $t5, $f8 -/* 07F474 7F04A944 00000000 */ nop +/* 07F474 7F04A944 00000000 */ nop /* 07F478 7F04A948 A64D0018 */ sh $t5, 0x18($s2) /* 07F47C 7F04A94C 922F0005 */ lbu $t7, 5($s1) /* 07F480 7F04A950 448F5000 */ mtc1 $t7, $f10 /* 07F484 7F04A954 05E10004 */ bgez $t7, .L7F04A968 /* 07F488 7F04A958 468054A0 */ cvt.s.w $f18, $f10 /* 07F48C 7F04A95C 44812000 */ mtc1 $at, $f4 -/* 07F490 7F04A960 00000000 */ nop +/* 07F490 7F04A960 00000000 */ nop /* 07F494 7F04A964 46049480 */ add.s $f18, $f18, $f4 .L7F04A968: /* 07F498 7F04A968 C606004C */ lwc1 $f6, 0x4c($s0) /* 07F49C 7F04A96C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F4A0 7F04A970 46103200 */ add.s $f8, $f6, $f16 /* 07F4A4 7F04A974 46089282 */ mul.s $f10, $f18, $f8 -/* 07F4A8 7F04A978 00000000 */ nop +/* 07F4A8 7F04A978 00000000 */ nop /* 07F4AC 7F04A97C 46005102 */ mul.s $f4, $f10, $f0 /* 07F4B0 7F04A980 4600218D */ trunc.w.s $f6, $f4 /* 07F4B4 7F04A984 44183000 */ mfc1 $t8, $f6 -/* 07F4B8 7F04A988 00000000 */ nop +/* 07F4B8 7F04A988 00000000 */ nop /* 07F4BC 7F04A98C A658001A */ sh $t8, 0x1a($s2) /* 07F4C0 7F04A990 92280004 */ lbu $t0, 4($s1) /* 07F4C4 7F04A994 44889000 */ mtc1 $t0, $f18 /* 07F4C8 7F04A998 05010004 */ bgez $t0, .L7F04A9AC /* 07F4CC 7F04A99C 46809220 */ cvt.s.w $f8, $f18 /* 07F4D0 7F04A9A0 44815000 */ mtc1 $at, $f10 -/* 07F4D4 7F04A9A4 00000000 */ nop +/* 07F4D4 7F04A9A4 00000000 */ nop /* 07F4D8 7F04A9A8 460A4200 */ add.s $f8, $f8, $f10 .L7F04A9AC: /* 07F4DC 7F04A9AC C6040038 */ lwc1 $f4, 0x38($s0) /* 07F4E0 7F04A9B0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F4E4 7F04A9B4 46162181 */ sub.s $f6, $f4, $f22 /* 07F4E8 7F04A9B8 46064482 */ mul.s $f18, $f8, $f6 -/* 07F4EC 7F04A9BC 00000000 */ nop +/* 07F4EC 7F04A9BC 00000000 */ nop /* 07F4F0 7F04A9C0 46009282 */ mul.s $f10, $f18, $f0 /* 07F4F4 7F04A9C4 4600510D */ trunc.w.s $f4, $f10 /* 07F4F8 7F04A9C8 44092000 */ mfc1 $t1, $f4 -/* 07F4FC 7F04A9CC 00000000 */ nop +/* 07F4FC 7F04A9CC 00000000 */ nop /* 07F500 7F04A9D0 A6490028 */ sh $t1, 0x28($s2) /* 07F504 7F04A9D4 922C0005 */ lbu $t4, 5($s1) /* 07F508 7F04A9D8 448C4000 */ mtc1 $t4, $f8 /* 07F50C 7F04A9DC 05810004 */ bgez $t4, .L7F04A9F0 /* 07F510 7F04A9E0 468041A0 */ cvt.s.w $f6, $f8 /* 07F514 7F04A9E4 44819000 */ mtc1 $at, $f18 -/* 07F518 7F04A9E8 00000000 */ nop +/* 07F518 7F04A9E8 00000000 */ nop /* 07F51C 7F04A9EC 46123180 */ add.s $f6, $f6, $f18 .L7F04A9F0: /* 07F520 7F04A9F0 C60A004C */ lwc1 $f10, 0x4c($s0) /* 07F524 7F04A9F4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F528 7F04A9F8 46185101 */ sub.s $f4, $f10, $f24 /* 07F52C 7F04A9FC 46043202 */ mul.s $f8, $f6, $f4 -/* 07F530 7F04AA00 00000000 */ nop +/* 07F530 7F04AA00 00000000 */ nop /* 07F534 7F04AA04 46004482 */ mul.s $f18, $f8, $f0 /* 07F538 7F04AA08 4600928D */ trunc.w.s $f10, $f18 /* 07F53C 7F04AA0C 440B5000 */ mfc1 $t3, $f10 -/* 07F540 7F04AA10 00000000 */ nop +/* 07F540 7F04AA10 00000000 */ nop /* 07F544 7F04AA14 A64B002A */ sh $t3, 0x2a($s2) /* 07F548 7F04AA18 922D0004 */ lbu $t5, 4($s1) /* 07F54C 7F04AA1C 448D3000 */ mtc1 $t5, $f6 /* 07F550 7F04AA20 05A10004 */ bgez $t5, .L7F04AA34 /* 07F554 7F04AA24 46803120 */ cvt.s.w $f4, $f6 /* 07F558 7F04AA28 44814000 */ mtc1 $at, $f8 -/* 07F55C 7F04AA2C 00000000 */ nop +/* 07F55C 7F04AA2C 00000000 */ nop /* 07F560 7F04AA30 46082100 */ add.s $f4, $f4, $f8 .L7F04AA34: /* 07F564 7F04AA34 C6120038 */ lwc1 $f18, 0x38($s0) /* 07F568 7F04AA38 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F56C 7F04AA3C 460E9280 */ add.s $f10, $f18, $f14 /* 07F570 7F04AA40 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F574 7F04AA44 00000000 */ nop +/* 07F574 7F04AA44 00000000 */ nop /* 07F578 7F04AA48 46003202 */ mul.s $f8, $f6, $f0 /* 07F57C 7F04AA4C 4600448D */ trunc.w.s $f18, $f8 /* 07F580 7F04AA50 440E9000 */ mfc1 $t6, $f18 -/* 07F584 7F04AA54 00000000 */ nop +/* 07F584 7F04AA54 00000000 */ nop /* 07F588 7F04AA58 A64E0038 */ sh $t6, 0x38($s2) /* 07F58C 7F04AA5C 92380005 */ lbu $t8, 5($s1) /* 07F590 7F04AA60 44982000 */ mtc1 $t8, $f4 /* 07F594 7F04AA64 07010004 */ bgez $t8, .L7F04AA78 /* 07F598 7F04AA68 468022A0 */ cvt.s.w $f10, $f4 /* 07F59C 7F04AA6C 44813000 */ mtc1 $at, $f6 -/* 07F5A0 7F04AA70 00000000 */ nop +/* 07F5A0 7F04AA70 00000000 */ nop /* 07F5A4 7F04AA74 46065280 */ add.s $f10, $f10, $f6 .L7F04AA78: /* 07F5A8 7F04AA78 C608004C */ lwc1 $f8, 0x4c($s0) /* 07F5AC 7F04AA7C 46104481 */ sub.s $f18, $f8, $f16 /* 07F5B0 7F04AA80 46125102 */ mul.s $f4, $f10, $f18 -/* 07F5B4 7F04AA84 00000000 */ nop +/* 07F5B4 7F04AA84 00000000 */ nop /* 07F5B8 7F04AA88 46002182 */ mul.s $f6, $f4, $f0 /* 07F5BC 7F04AA8C 4600320D */ trunc.w.s $f8, $f6 /* 07F5C0 7F04AA90 44194000 */ mfc1 $t9, $f8 -/* 07F5C4 7F04AA94 00000000 */ nop +/* 07F5C4 7F04AA94 00000000 */ nop /* 07F5C8 7F04AA98 A659003A */ sh $t9, 0x3a($s2) .L7F04AA9C: /* 07F5CC 7F04AA9C 92020060 */ lbu $v0, 0x60($s0) @@ -26559,7 +26550,7 @@ def_7F04A01C: /* 07F658 7F04AB28 AD4D0000 */ sw $t5, ($t2) /* 07F65C 7F04AB2C AFAE0010 */ sw $t6, 0x10($sp) /* 07F660 7F04AB30 8FA700C0 */ lw $a3, 0xc0($sp) -/* 07F664 7F04AB34 0FC1DB5A */ jal likely_generate_DL_for_image_declaration +/* 07F664 7F04AB34 0FC1DB5A */ jal texSelect /* 07F668 7F04AB38 8FA600C4 */ lw $a2, 0xc4($sp) /* 07F66C 7F04AB3C 8FB000BC */ lw $s0, 0xbc($sp) /* 07F670 7F04AB40 3C190102 */ lui $t9, (0x01020040 >> 16) # lui $t9, 0x102 @@ -26715,7 +26706,7 @@ glabel process_monitor_animation_microcode /* 07EB44 7F04A014 002B0821 */ addu $at, $at, $t3 /* 07EB48 7F04A018 8C2B2C6C */ lw $t3, %lo(jpt_80052C6C)($at) /* 07EB4C 7F04A01C 01600008 */ jr $t3 -/* 07EB50 7F04A020 00000000 */ nop +/* 07EB50 7F04A020 00000000 */ nop command00_reset_scroll_shift: /* 07EB54 7F04A024 244C0001 */ addiu $t4, $v0, 1 /* 07EB58 7F04A028 E6140040 */ swc1 $f20, 0x40($s0) @@ -26730,7 +26721,7 @@ command01_horizontal_scroll: /* 07EB78 7F04A048 05A10004 */ bgez $t5, .L7F04A05C /* 07EB7C 7F04A04C 468021A0 */ cvt.s.w $f6, $f4 /* 07EB80 7F04A050 44814000 */ mtc1 $at, $f8 -/* 07EB84 7F04A054 00000000 */ nop +/* 07EB84 7F04A054 00000000 */ nop /* 07EB88 7F04A058 46083180 */ add.s $f6, $f6, $f8 .L7F04A05C: /* 07EB8C 7F04A05C 4606C283 */ div.s $f10, $f24, $f6 @@ -26741,7 +26732,7 @@ command01_horizontal_scroll: /* 07EBA0 7F04A070 8C6E0004 */ lw $t6, 4($v1) /* 07EBA4 7F04A074 A60F0004 */ sh $t7, 4($s0) /* 07EBA8 7F04A078 448E9000 */ mtc1 $t6, $f18 -/* 07EBAC 7F04A07C 00000000 */ nop +/* 07EBAC 7F04A07C 00000000 */ nop /* 07EBB0 7F04A080 46809120 */ cvt.s.w $f4, $f18 /* 07EBB4 7F04A084 46162202 */ mul.s $f8, $f4, $f22 /* 07EBB8 7F04A088 46080180 */ add.s $f6, $f0, $f8 @@ -26755,7 +26746,7 @@ command02_vertical_scroll: /* 07EBD4 7F04A0A4 07010004 */ bgez $t8, .L7F04A0B8 /* 07EBD8 7F04A0A8 468054A0 */ cvt.s.w $f18, $f10 /* 07EBDC 7F04A0AC 44812000 */ mtc1 $at, $f4 -/* 07EBE0 7F04A0B0 00000000 */ nop +/* 07EBE0 7F04A0B0 00000000 */ nop /* 07EBE4 7F04A0B4 46049480 */ add.s $f18, $f18, $f4 .L7F04A0B8: /* 07EBE8 7F04A0B8 4612C203 */ div.s $f8, $f24, $f18 @@ -26766,7 +26757,7 @@ command02_vertical_scroll: /* 07EBFC 7F04A0CC 8C790004 */ lw $t9, 4($v1) /* 07EC00 7F04A0D0 A6080004 */ sh $t0, 4($s0) /* 07EC04 7F04A0D4 44993000 */ mtc1 $t9, $f6 -/* 07EC08 7F04A0D8 00000000 */ nop +/* 07EC08 7F04A0D8 00000000 */ nop /* 07EC0C 7F04A0DC 468032A0 */ cvt.s.w $f10, $f6 /* 07EC10 7F04A0E0 46165102 */ mul.s $f4, $f10, $f22 /* 07EC14 7F04A0E4 46040480 */ add.s $f18, $f0, $f4 @@ -26780,7 +26771,7 @@ command03_horizontal_pos: /* 07EC30 7F04A100 05210004 */ bgez $t1, .L7F04A114 /* 07EC34 7F04A104 468041A0 */ cvt.s.w $f6, $f8 /* 07EC38 7F04A108 44815000 */ mtc1 $at, $f10 -/* 07EC3C 7F04A10C 00000000 */ nop +/* 07EC3C 7F04A10C 00000000 */ nop /* 07EC40 7F04A110 460A3180 */ add.s $f6, $f6, $f10 .L7F04A114: /* 07EC44 7F04A114 4606C103 */ div.s $f4, $f24, $f6 @@ -26791,7 +26782,7 @@ command03_horizontal_pos: /* 07EC58 7F04A128 8C6A0004 */ lw $t2, 4($v1) /* 07EC5C 7F04A12C A60B0004 */ sh $t3, 4($s0) /* 07EC60 7F04A130 448A4000 */ mtc1 $t2, $f8 -/* 07EC64 7F04A134 00000000 */ nop +/* 07EC64 7F04A134 00000000 */ nop /* 07EC68 7F04A138 468042A0 */ cvt.s.w $f10, $f8 /* 07EC6C 7F04A13C 46165182 */ mul.s $f6, $f10, $f22 /* 07EC70 7F04A140 100000C9 */ b .L7F04A468 @@ -26804,7 +26795,7 @@ command04_vertical_pos: /* 07EC88 7F04A158 05810004 */ bgez $t4, .L7F04A16C /* 07EC8C 7F04A15C 468024A0 */ cvt.s.w $f18, $f4 /* 07EC90 7F04A160 44814000 */ mtc1 $at, $f8 -/* 07EC94 7F04A164 00000000 */ nop +/* 07EC94 7F04A164 00000000 */ nop /* 07EC98 7F04A168 46089480 */ add.s $f18, $f18, $f8 .L7F04A16C: /* 07EC9C 7F04A16C 4612C283 */ div.s $f10, $f24, $f18 @@ -26815,7 +26806,7 @@ command04_vertical_pos: /* 07ECB0 7F04A180 8C6D0004 */ lw $t5, 4($v1) /* 07ECB4 7F04A184 A60E0004 */ sh $t6, 4($s0) /* 07ECB8 7F04A188 448D2000 */ mtc1 $t5, $f4 -/* 07ECBC 7F04A18C 00000000 */ nop +/* 07ECBC 7F04A18C 00000000 */ nop /* 07ECC0 7F04A190 46802220 */ cvt.s.w $f8, $f4 /* 07ECC4 7F04A194 46164482 */ mul.s $f18, $f8, $f22 /* 07ECC8 7F04A198 100000B3 */ b .L7F04A468 @@ -26828,7 +26819,7 @@ command05_zoomx: /* 07ECE0 7F04A1B0 05E10004 */ bgez $t7, .L7F04A1C4 /* 07ECE4 7F04A1B4 468051A0 */ cvt.s.w $f6, $f10 /* 07ECE8 7F04A1B8 44812000 */ mtc1 $at, $f4 -/* 07ECEC 7F04A1BC 00000000 */ nop +/* 07ECEC 7F04A1BC 00000000 */ nop /* 07ECF0 7F04A1C0 46043180 */ add.s $f6, $f6, $f4 .L7F04A1C4: /* 07ECF4 7F04A1C4 4606C203 */ div.s $f8, $f24, $f6 @@ -26839,7 +26830,7 @@ command05_zoomx: /* 07ED08 7F04A1D8 8C780004 */ lw $t8, 4($v1) /* 07ED0C 7F04A1DC A6190004 */ sh $t9, 4($s0) /* 07ED10 7F04A1E0 44985000 */ mtc1 $t8, $f10 -/* 07ED14 7F04A1E4 00000000 */ nop +/* 07ED14 7F04A1E4 00000000 */ nop /* 07ED18 7F04A1E8 46805120 */ cvt.s.w $f4, $f10 /* 07ED1C 7F04A1EC 46162182 */ mul.s $f6, $f4, $f22 /* 07ED20 7F04A1F0 1000009D */ b .L7F04A468 @@ -26852,7 +26843,7 @@ command06_zoomy: /* 07ED38 7F04A208 05010004 */ bgez $t0, .L7F04A21C /* 07ED3C 7F04A20C 468044A0 */ cvt.s.w $f18, $f8 /* 07ED40 7F04A210 44815000 */ mtc1 $at, $f10 -/* 07ED44 7F04A214 00000000 */ nop +/* 07ED44 7F04A214 00000000 */ nop /* 07ED48 7F04A218 460A9480 */ add.s $f18, $f18, $f10 .L7F04A21C: /* 07ED4C 7F04A21C 4612C103 */ div.s $f4, $f24, $f18 @@ -26863,7 +26854,7 @@ command06_zoomy: /* 07ED60 7F04A230 8C690004 */ lw $t1, 4($v1) /* 07ED64 7F04A234 A60A0004 */ sh $t2, 4($s0) /* 07ED68 7F04A238 44894000 */ mtc1 $t1, $f8 -/* 07ED6C 7F04A23C 00000000 */ nop +/* 07ED6C 7F04A23C 00000000 */ nop /* 07ED70 7F04A240 468042A0 */ cvt.s.w $f10, $f8 /* 07ED74 7F04A244 46165482 */ mul.s $f18, $f10, $f22 /* 07ED78 7F04A248 10000087 */ b .L7F04A468 @@ -26880,7 +26871,7 @@ command07_use_image_from_global_monitor_table: /* 07EDA0 7F04A270 A60C0004 */ sh $t4, 4($s0) command08_halt_processing_for_time: /* 07EDA4 7F04A274 86020006 */ lh $v0, 6($s0) -/* 07EDA8 7F04A278 3C0D8005 */ lui $t5, %hi(g_ClockTimer) +/* 07EDA8 7F04A278 3C0D8005 */ lui $t5, %hi(g_ClockTimer) /* 07EDAC 7F04A27C 0442000E */ bltzl $v0, .L7F04A2B8 /* 07EDB0 7F04A280 8C680004 */ lw $t0, 4($v1) /* 07EDB4 7F04A284 8DAD8374 */ lw $t5, %lo(g_ClockTimer)($t5) @@ -26908,7 +26899,7 @@ command09_jump: /* 07EE00 7F04A2D0 3C014780 */ li $at, 0x47800000 # 65536.000000 /* 07EE04 7F04A2D4 44811000 */ mtc1 $at, $f2 /* 07EE08 7F04A2D8 10000063 */ b .L7F04A468 -/* 07EE0C 7F04A2DC 00000000 */ nop +/* 07EE0C 7F04A2DC 00000000 */ nop command0A_jump_conditional: /* 07EE10 7F04A2E0 0C002914 */ jal randomGetNext /* 07EE14 7F04A2E4 AFA30094 */ sw $v1, 0x94($sp) @@ -26924,7 +26915,7 @@ command0A_jump_conditional: /* 07EE3C 7F04A30C 3C014780 */ li $at, 0x47800000 # 65536.000000 /* 07EE40 7F04A310 44811000 */ mtc1 $at, $f2 /* 07EE44 7F04A314 10000054 */ b .L7F04A468 -/* 07EE48 7F04A318 00000000 */ nop +/* 07EE48 7F04A318 00000000 */ nop /* 07EE4C 7F04A31C 960B0004 */ lhu $t3, 4($s0) .L7F04A320: /* 07EE50 7F04A320 3C014780 */ li $at, 0x47800000 # 65536.000000 @@ -26932,7 +26923,7 @@ command0A_jump_conditional: /* 07EE58 7F04A328 256C0003 */ addiu $t4, $t3, 3 /* 07EE5C 7F04A32C A60C0004 */ sh $t4, 4($s0) /* 07EE60 7F04A330 1000004D */ b .L7F04A468 -/* 07EE64 7F04A334 00000000 */ nop +/* 07EE64 7F04A334 00000000 */ nop command0B_restart: /* 07EE68 7F04A338 1000004B */ b .L7F04A468 /* 07EE6C 7F04A33C A6000004 */ sh $zero, 4($s0) @@ -26947,7 +26938,7 @@ command0D_colour_transition: /* 07EE88 7F04A358 05A10004 */ bgez $t5, .L7F04A36C /* 07EE8C 7F04A35C 468021A0 */ cvt.s.w $f6, $f4 /* 07EE90 7F04A360 44814000 */ mtc1 $at, $f8 -/* 07EE94 7F04A364 00000000 */ nop +/* 07EE94 7F04A364 00000000 */ nop /* 07EE98 7F04A368 46083180 */ add.s $f6, $f6, $f8 .L7F04A36C: /* 07EE9C 7F04A36C 4606C283 */ div.s $f10, $f24, $f6 @@ -26979,7 +26970,7 @@ command0E_set_rotation: /* 07EF00 7F04A3D0 244B0002 */ addiu $t3, $v0, 2 /* 07EF04 7F04A3D4 A60B0004 */ sh $t3, 4($s0) /* 07EF08 7F04A3D8 448A9000 */ mtc1 $t2, $f18 -/* 07EF0C 7F04A3DC 00000000 */ nop +/* 07EF0C 7F04A3DC 00000000 */ nop /* 07EF10 7F04A3E0 46809120 */ cvt.s.w $f4, $f18 /* 07EF14 7F04A3E4 461A2202 */ mul.s $f8, $f4, $f26 /* 07EF18 7F04A3E8 46024183 */ div.s $f6, $f8, $f2 @@ -26990,7 +26981,7 @@ command0F_rotate: /* 07EF28 7F04A3F8 3C018005 */ lui $at, %hi(g_JP_GlobalTimerDelta) /* 07EF2C 7F04A3FC C42A8378 */ lwc1 $f10, %lo(g_JP_GlobalTimerDelta)($at) /* 07EF30 7F04A400 448C9000 */ mtc1 $t4, $f18 -/* 07EF34 7F04A404 00000000 */ nop +/* 07EF34 7F04A404 00000000 */ nop /* 07EF38 7F04A408 46809120 */ cvt.s.w $f4, $f18 /* 07EF3C 7F04A40C 46045202 */ mul.s $f8, $f10, $f4 /* 07EF40 7F04A410 C60A000C */ lwc1 $f10, 0xc($s0) @@ -27000,7 +26991,7 @@ command0F_rotate: /* 07EF50 7F04A420 E604000C */ swc1 $f4, 0xc($s0) /* 07EF54 7F04A424 C60C000C */ lwc1 $f12, 0xc($s0) /* 07EF58 7F04A428 460CD03E */ c.le.s $f26, $f12 -/* 07EF5C 7F04A42C 00000000 */ nop +/* 07EF5C 7F04A42C 00000000 */ nop /* 07EF60 7F04A430 45020005 */ bc1fl .L7F04A448 /* 07EF64 7F04A434 4614603C */ c.lt.s $f12, $f20 /* 07EF68 7F04A438 461A6201 */ sub.s $f8, $f12, $f26 @@ -27008,7 +26999,7 @@ command0F_rotate: /* 07EF70 7F04A440 C60C000C */ lwc1 $f12, 0xc($s0) /* 07EF74 7F04A444 4614603C */ c.lt.s $f12, $f20 .L7F04A448: -/* 07EF78 7F04A448 00000000 */ nop +/* 07EF78 7F04A448 00000000 */ nop /* 07EF7C 7F04A44C 45020004 */ bc1fl .L7F04A460 /* 07EF80 7F04A450 960D0004 */ lhu $t5, 4($s0) /* 07EF84 7F04A454 461A6180 */ add.s $f6, $f12, $f26 @@ -27023,7 +27014,7 @@ def_7F04A01C: /* 07EF9C 7F04A46C 96020004 */ lhu $v0, 4($s0) /* 07EFA0 7F04A470 C6000018 */ lwc1 $f0, 0x18($s0) /* 07EFA4 7F04A474 4600A03C */ c.lt.s $f20, $f0 -/* 07EFA8 7F04A478 00000000 */ nop +/* 07EFA8 7F04A478 00000000 */ nop /* 07EFAC 7F04A47C 45000017 */ bc1f .L7F04A4DC /* 07EFB0 7F04A480 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) /* 07EFB4 7F04A484 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 @@ -27034,7 +27025,7 @@ def_7F04A01C: /* 07EFC8 7F04A498 E6080014 */ swc1 $f8, 0x14($s0) /* 07EFCC 7F04A49C C6020014 */ lwc1 $f2, 0x14($s0) /* 07EFD0 7F04A4A0 4618103C */ c.lt.s $f2, $f24 -/* 07EFD4 7F04A4A4 00000000 */ nop +/* 07EFD4 7F04A4A4 00000000 */ nop /* 07EFD8 7F04A4A8 45020009 */ bc1fl .L7F04A4D0 /* 07EFDC 7F04A4AC C6080020 */ lwc1 $f8, 0x20($s0) /* 07EFE0 7F04A4B0 C600001C */ lwc1 $f0, 0x1c($s0) @@ -27054,7 +27045,7 @@ def_7F04A01C: /* 07F010 7F04A4E0 3C028005 */ lui $v0, %hi(g_JP_GlobalTimerDelta) /* 07F014 7F04A4E4 24428378 */ addiu $v0, %lo(g_JP_GlobalTimerDelta) # addiu $v0, $v0, -0x7c88 /* 07F018 7F04A4E8 4600A03C */ c.lt.s $f20, $f0 -/* 07F01C 7F04A4EC 00000000 */ nop +/* 07F01C 7F04A4EC 00000000 */ nop /* 07F020 7F04A4F0 45020017 */ bc1fl .L7F04A550 /* 07F024 7F04A4F4 C6000040 */ lwc1 $f0, 0x40($s0) /* 07F028 7F04A4F8 C4520000 */ lwc1 $f18, ($v0) @@ -27064,7 +27055,7 @@ def_7F04A01C: /* 07F038 7F04A508 E6040028 */ swc1 $f4, 0x28($s0) /* 07F03C 7F04A50C C6020028 */ lwc1 $f2, 0x28($s0) /* 07F040 7F04A510 4618103C */ c.lt.s $f2, $f24 -/* 07F044 7F04A514 00000000 */ nop +/* 07F044 7F04A514 00000000 */ nop /* 07F048 7F04A518 45020009 */ bc1fl .L7F04A540 /* 07F04C 7F04A51C C6040034 */ lwc1 $f4, 0x34($s0) /* 07F050 7F04A520 C6000030 */ lwc1 $f0, 0x30($s0) @@ -27083,7 +27074,7 @@ def_7F04A01C: /* 07F07C 7F04A54C C6000040 */ lwc1 $f0, 0x40($s0) .L7F04A550: /* 07F080 7F04A550 4600A03C */ c.lt.s $f20, $f0 -/* 07F084 7F04A554 00000000 */ nop +/* 07F084 7F04A554 00000000 */ nop /* 07F088 7F04A558 45020017 */ bc1fl .L7F04A5B8 /* 07F08C 7F04A55C C6000054 */ lwc1 $f0, 0x54($s0) /* 07F090 7F04A560 C4520000 */ lwc1 $f18, ($v0) @@ -27093,7 +27084,7 @@ def_7F04A01C: /* 07F0A0 7F04A570 E60A003C */ swc1 $f10, 0x3c($s0) /* 07F0A4 7F04A574 C602003C */ lwc1 $f2, 0x3c($s0) /* 07F0A8 7F04A578 4618103C */ c.lt.s $f2, $f24 -/* 07F0AC 7F04A57C 00000000 */ nop +/* 07F0AC 7F04A57C 00000000 */ nop /* 07F0B0 7F04A580 45020009 */ bc1fl .L7F04A5A8 /* 07F0B4 7F04A584 C60A0048 */ lwc1 $f10, 0x48($s0) /* 07F0B8 7F04A588 C6000044 */ lwc1 $f0, 0x44($s0) @@ -27112,7 +27103,7 @@ def_7F04A01C: /* 07F0E4 7F04A5B4 C6000054 */ lwc1 $f0, 0x54($s0) .L7F04A5B8: /* 07F0E8 7F04A5B8 4600A03C */ c.lt.s $f20, $f0 -/* 07F0EC 7F04A5BC 00000000 */ nop +/* 07F0EC 7F04A5BC 00000000 */ nop /* 07F0F0 7F04A5C0 45020017 */ bc1fl .L7F04A620 /* 07F0F4 7F04A5C4 C6020070 */ lwc1 $f2, 0x70($s0) /* 07F0F8 7F04A5C8 C4520000 */ lwc1 $f18, ($v0) @@ -27122,7 +27113,7 @@ def_7F04A01C: /* 07F108 7F04A5D8 E6060050 */ swc1 $f6, 0x50($s0) /* 07F10C 7F04A5DC C6020050 */ lwc1 $f2, 0x50($s0) /* 07F110 7F04A5E0 4618103C */ c.lt.s $f2, $f24 -/* 07F114 7F04A5E4 00000000 */ nop +/* 07F114 7F04A5E4 00000000 */ nop /* 07F118 7F04A5E8 45020009 */ bc1fl .L7F04A610 /* 07F11C 7F04A5EC C606005C */ lwc1 $f6, 0x5c($s0) /* 07F120 7F04A5F0 C6000058 */ lwc1 $f0, 0x58($s0) @@ -27141,7 +27132,7 @@ def_7F04A01C: /* 07F14C 7F04A61C C6020070 */ lwc1 $f2, 0x70($s0) .L7F04A620: /* 07F150 7F04A620 4602A03C */ c.lt.s $f20, $f2 -/* 07F154 7F04A624 00000000 */ nop +/* 07F154 7F04A624 00000000 */ nop /* 07F158 7F04A628 4502003F */ bc1fl .L7F04A728 /* 07F15C 7F04A62C 8FAA00A0 */ lw $t2, 0xa0($sp) /* 07F160 7F04A630 C4520000 */ lwc1 $f18, ($v0) @@ -27151,7 +27142,7 @@ def_7F04A01C: /* 07F170 7F04A640 E608006C */ swc1 $f8, 0x6c($s0) /* 07F174 7F04A644 C600006C */ lwc1 $f0, 0x6c($s0) /* 07F178 7F04A648 4618003C */ c.lt.s $f0, $f24 -/* 07F17C 7F04A64C 00000000 */ nop +/* 07F17C 7F04A64C 00000000 */ nop /* 07F180 7F04A650 4502002B */ bc1fl .L7F04A700 /* 07F184 7F04A654 920F0062 */ lbu $t7, 0x62($s0) /* 07F188 7F04A658 92020061 */ lbu $v0, 0x61($s0) @@ -27212,7 +27203,7 @@ def_7F04A01C: /* 07F258 7F04A728 8FA300A4 */ lw $v1, 0xa4($sp) /* 07F25C 7F04A72C 8FA900BC */ lw $t1, 0xbc($sp) /* 07F260 7F04A730 AD520000 */ sw $s2, ($t2) -/* 07F264 7F04A734 3C0F8009 */ lui $t7, %hi(monitorimages) +/* 07F264 7F04A734 3C0F8009 */ lui $t7, %hi(monitorimages) /* 07F268 7F04A738 AD490004 */ sw $t1, 4($t2) /* 07F26C 7F04A73C 8C6B0008 */ lw $t3, 8($v1) /* 07F270 7F04A740 8D610000 */ lw $at, ($t3) @@ -27281,18 +27272,18 @@ def_7F04A01C: /* 07F368 7F04A838 C60C000C */ lwc1 $f12, 0xc($s0) /* 07F36C 7F04A83C 461A0502 */ mul.s $f20, $f0, $f26 /* 07F370 7F04A840 0FC15FAB */ jal sinf -/* 07F374 7F04A844 00000000 */ nop +/* 07F374 7F04A844 00000000 */ nop /* 07F378 7F04A848 4614B582 */ mul.s $f22, $f22, $f20 /* 07F37C 7F04A84C C7AE0054 */ lwc1 $f14, 0x54($sp) /* 07F380 7F04A850 C7B00050 */ lwc1 $f16, 0x50($sp) /* 07F384 7F04A854 461A0082 */ mul.s $f2, $f0, $f26 -/* 07F388 7F04A858 00000000 */ nop +/* 07F388 7F04A858 00000000 */ nop /* 07F38C 7F04A85C 4602C602 */ mul.s $f24, $f24, $f2 -/* 07F390 7F04A860 00000000 */ nop +/* 07F390 7F04A860 00000000 */ nop /* 07F394 7F04A864 46027382 */ mul.s $f14, $f14, $f2 -/* 07F398 7F04A868 00000000 */ nop +/* 07F398 7F04A868 00000000 */ nop /* 07F39C 7F04A86C 46148402 */ mul.s $f16, $f16, $f20 -/* 07F3A0 7F04A870 00000000 */ nop +/* 07F3A0 7F04A870 00000000 */ nop .L7F04A874: /* 07F3A4 7F04A874 922E0004 */ lbu $t6, 4($s1) /* 07F3A8 7F04A878 3C014200 */ li $at, 0x42000000 # 32.000000 @@ -27302,143 +27293,143 @@ def_7F04A01C: /* 07F3B8 7F04A888 05C10004 */ bgez $t6, .L7F04A89C /* 07F3BC 7F04A88C 468041A0 */ cvt.s.w $f6, $f8 /* 07F3C0 7F04A890 44819000 */ mtc1 $at, $f18 -/* 07F3C4 7F04A894 00000000 */ nop +/* 07F3C4 7F04A894 00000000 */ nop /* 07F3C8 7F04A898 46123180 */ add.s $f6, $f6, $f18 .L7F04A89C: /* 07F3CC 7F04A89C C60A0038 */ lwc1 $f10, 0x38($s0) /* 07F3D0 7F04A8A0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F3D4 7F04A8A4 46165100 */ add.s $f4, $f10, $f22 /* 07F3D8 7F04A8A8 46043202 */ mul.s $f8, $f6, $f4 -/* 07F3DC 7F04A8AC 00000000 */ nop +/* 07F3DC 7F04A8AC 00000000 */ nop /* 07F3E0 7F04A8B0 46004482 */ mul.s $f18, $f8, $f0 /* 07F3E4 7F04A8B4 4600928D */ trunc.w.s $f10, $f18 /* 07F3E8 7F04A8B8 44085000 */ mfc1 $t0, $f10 -/* 07F3EC 7F04A8BC 00000000 */ nop +/* 07F3EC 7F04A8BC 00000000 */ nop /* 07F3F0 7F04A8C0 A6480008 */ sh $t0, 8($s2) /* 07F3F4 7F04A8C4 92390005 */ lbu $t9, 5($s1) /* 07F3F8 7F04A8C8 44993000 */ mtc1 $t9, $f6 /* 07F3FC 7F04A8CC 07210004 */ bgez $t9, .L7F04A8E0 /* 07F400 7F04A8D0 46803120 */ cvt.s.w $f4, $f6 /* 07F404 7F04A8D4 44814000 */ mtc1 $at, $f8 -/* 07F408 7F04A8D8 00000000 */ nop +/* 07F408 7F04A8D8 00000000 */ nop /* 07F40C 7F04A8DC 46082100 */ add.s $f4, $f4, $f8 .L7F04A8E0: /* 07F410 7F04A8E0 C612004C */ lwc1 $f18, 0x4c($s0) /* 07F414 7F04A8E4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F418 7F04A8E8 46189280 */ add.s $f10, $f18, $f24 /* 07F41C 7F04A8EC 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F420 7F04A8F0 00000000 */ nop +/* 07F420 7F04A8F0 00000000 */ nop /* 07F424 7F04A8F4 46003202 */ mul.s $f8, $f6, $f0 /* 07F428 7F04A8F8 4600448D */ trunc.w.s $f18, $f8 /* 07F42C 7F04A8FC 440C9000 */ mfc1 $t4, $f18 -/* 07F430 7F04A900 00000000 */ nop +/* 07F430 7F04A900 00000000 */ nop /* 07F434 7F04A904 A64C000A */ sh $t4, 0xa($s2) /* 07F438 7F04A908 922A0004 */ lbu $t2, 4($s1) /* 07F43C 7F04A90C 448A2000 */ mtc1 $t2, $f4 /* 07F440 7F04A910 05410004 */ bgez $t2, .L7F04A924 /* 07F444 7F04A914 468022A0 */ cvt.s.w $f10, $f4 /* 07F448 7F04A918 44813000 */ mtc1 $at, $f6 -/* 07F44C 7F04A91C 00000000 */ nop +/* 07F44C 7F04A91C 00000000 */ nop /* 07F450 7F04A920 46065280 */ add.s $f10, $f10, $f6 .L7F04A924: /* 07F454 7F04A924 C6080038 */ lwc1 $f8, 0x38($s0) /* 07F458 7F04A928 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F45C 7F04A92C 460E4481 */ sub.s $f18, $f8, $f14 /* 07F460 7F04A930 46125102 */ mul.s $f4, $f10, $f18 -/* 07F464 7F04A934 00000000 */ nop +/* 07F464 7F04A934 00000000 */ nop /* 07F468 7F04A938 46002182 */ mul.s $f6, $f4, $f0 /* 07F46C 7F04A93C 4600320D */ trunc.w.s $f8, $f6 /* 07F470 7F04A940 440D4000 */ mfc1 $t5, $f8 -/* 07F474 7F04A944 00000000 */ nop +/* 07F474 7F04A944 00000000 */ nop /* 07F478 7F04A948 A64D0018 */ sh $t5, 0x18($s2) /* 07F47C 7F04A94C 922F0005 */ lbu $t7, 5($s1) /* 07F480 7F04A950 448F5000 */ mtc1 $t7, $f10 /* 07F484 7F04A954 05E10004 */ bgez $t7, .L7F04A968 /* 07F488 7F04A958 468054A0 */ cvt.s.w $f18, $f10 /* 07F48C 7F04A95C 44812000 */ mtc1 $at, $f4 -/* 07F490 7F04A960 00000000 */ nop +/* 07F490 7F04A960 00000000 */ nop /* 07F494 7F04A964 46049480 */ add.s $f18, $f18, $f4 .L7F04A968: /* 07F498 7F04A968 C606004C */ lwc1 $f6, 0x4c($s0) /* 07F49C 7F04A96C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F4A0 7F04A970 46103200 */ add.s $f8, $f6, $f16 /* 07F4A4 7F04A974 46089282 */ mul.s $f10, $f18, $f8 -/* 07F4A8 7F04A978 00000000 */ nop +/* 07F4A8 7F04A978 00000000 */ nop /* 07F4AC 7F04A97C 46005102 */ mul.s $f4, $f10, $f0 /* 07F4B0 7F04A980 4600218D */ trunc.w.s $f6, $f4 /* 07F4B4 7F04A984 44183000 */ mfc1 $t8, $f6 -/* 07F4B8 7F04A988 00000000 */ nop +/* 07F4B8 7F04A988 00000000 */ nop /* 07F4BC 7F04A98C A658001A */ sh $t8, 0x1a($s2) /* 07F4C0 7F04A990 92280004 */ lbu $t0, 4($s1) /* 07F4C4 7F04A994 44889000 */ mtc1 $t0, $f18 /* 07F4C8 7F04A998 05010004 */ bgez $t0, .L7F04A9AC /* 07F4CC 7F04A99C 46809220 */ cvt.s.w $f8, $f18 /* 07F4D0 7F04A9A0 44815000 */ mtc1 $at, $f10 -/* 07F4D4 7F04A9A4 00000000 */ nop +/* 07F4D4 7F04A9A4 00000000 */ nop /* 07F4D8 7F04A9A8 460A4200 */ add.s $f8, $f8, $f10 .L7F04A9AC: /* 07F4DC 7F04A9AC C6040038 */ lwc1 $f4, 0x38($s0) /* 07F4E0 7F04A9B0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F4E4 7F04A9B4 46162181 */ sub.s $f6, $f4, $f22 /* 07F4E8 7F04A9B8 46064482 */ mul.s $f18, $f8, $f6 -/* 07F4EC 7F04A9BC 00000000 */ nop +/* 07F4EC 7F04A9BC 00000000 */ nop /* 07F4F0 7F04A9C0 46009282 */ mul.s $f10, $f18, $f0 /* 07F4F4 7F04A9C4 4600510D */ trunc.w.s $f4, $f10 /* 07F4F8 7F04A9C8 44092000 */ mfc1 $t1, $f4 -/* 07F4FC 7F04A9CC 00000000 */ nop +/* 07F4FC 7F04A9CC 00000000 */ nop /* 07F500 7F04A9D0 A6490028 */ sh $t1, 0x28($s2) /* 07F504 7F04A9D4 922C0005 */ lbu $t4, 5($s1) /* 07F508 7F04A9D8 448C4000 */ mtc1 $t4, $f8 /* 07F50C 7F04A9DC 05810004 */ bgez $t4, .L7F04A9F0 /* 07F510 7F04A9E0 468041A0 */ cvt.s.w $f6, $f8 /* 07F514 7F04A9E4 44819000 */ mtc1 $at, $f18 -/* 07F518 7F04A9E8 00000000 */ nop +/* 07F518 7F04A9E8 00000000 */ nop /* 07F51C 7F04A9EC 46123180 */ add.s $f6, $f6, $f18 .L7F04A9F0: /* 07F520 7F04A9F0 C60A004C */ lwc1 $f10, 0x4c($s0) /* 07F524 7F04A9F4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F528 7F04A9F8 46185101 */ sub.s $f4, $f10, $f24 /* 07F52C 7F04A9FC 46043202 */ mul.s $f8, $f6, $f4 -/* 07F530 7F04AA00 00000000 */ nop +/* 07F530 7F04AA00 00000000 */ nop /* 07F534 7F04AA04 46004482 */ mul.s $f18, $f8, $f0 /* 07F538 7F04AA08 4600928D */ trunc.w.s $f10, $f18 /* 07F53C 7F04AA0C 440B5000 */ mfc1 $t3, $f10 -/* 07F540 7F04AA10 00000000 */ nop +/* 07F540 7F04AA10 00000000 */ nop /* 07F544 7F04AA14 A64B002A */ sh $t3, 0x2a($s2) /* 07F548 7F04AA18 922D0004 */ lbu $t5, 4($s1) /* 07F54C 7F04AA1C 448D3000 */ mtc1 $t5, $f6 /* 07F550 7F04AA20 05A10004 */ bgez $t5, .L7F04AA34 /* 07F554 7F04AA24 46803120 */ cvt.s.w $f4, $f6 /* 07F558 7F04AA28 44814000 */ mtc1 $at, $f8 -/* 07F55C 7F04AA2C 00000000 */ nop +/* 07F55C 7F04AA2C 00000000 */ nop /* 07F560 7F04AA30 46082100 */ add.s $f4, $f4, $f8 .L7F04AA34: /* 07F564 7F04AA34 C6120038 */ lwc1 $f18, 0x38($s0) /* 07F568 7F04AA38 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 07F56C 7F04AA3C 460E9280 */ add.s $f10, $f18, $f14 /* 07F570 7F04AA40 460A2182 */ mul.s $f6, $f4, $f10 -/* 07F574 7F04AA44 00000000 */ nop +/* 07F574 7F04AA44 00000000 */ nop /* 07F578 7F04AA48 46003202 */ mul.s $f8, $f6, $f0 /* 07F57C 7F04AA4C 4600448D */ trunc.w.s $f18, $f8 /* 07F580 7F04AA50 440E9000 */ mfc1 $t6, $f18 -/* 07F584 7F04AA54 00000000 */ nop +/* 07F584 7F04AA54 00000000 */ nop /* 07F588 7F04AA58 A64E0038 */ sh $t6, 0x38($s2) /* 07F58C 7F04AA5C 92380005 */ lbu $t8, 5($s1) /* 07F590 7F04AA60 44982000 */ mtc1 $t8, $f4 /* 07F594 7F04AA64 07010004 */ bgez $t8, .L7F04AA78 /* 07F598 7F04AA68 468022A0 */ cvt.s.w $f10, $f4 /* 07F59C 7F04AA6C 44813000 */ mtc1 $at, $f6 -/* 07F5A0 7F04AA70 00000000 */ nop +/* 07F5A0 7F04AA70 00000000 */ nop /* 07F5A4 7F04AA74 46065280 */ add.s $f10, $f10, $f6 .L7F04AA78: /* 07F5A8 7F04AA78 C608004C */ lwc1 $f8, 0x4c($s0) /* 07F5AC 7F04AA7C 46104481 */ sub.s $f18, $f8, $f16 /* 07F5B0 7F04AA80 46125102 */ mul.s $f4, $f10, $f18 -/* 07F5B4 7F04AA84 00000000 */ nop +/* 07F5B4 7F04AA84 00000000 */ nop /* 07F5B8 7F04AA88 46002182 */ mul.s $f6, $f4, $f0 /* 07F5BC 7F04AA8C 4600320D */ trunc.w.s $f8, $f6 /* 07F5C0 7F04AA90 44194000 */ mfc1 $t9, $f8 -/* 07F5C4 7F04AA94 00000000 */ nop +/* 07F5C4 7F04AA94 00000000 */ nop /* 07F5C8 7F04AA98 A659003A */ sh $t9, 0x3a($s2) .L7F04AA9C: /* 07F5CC 7F04AA9C 92020060 */ lbu $v0, 0x60($s0) @@ -27480,7 +27471,7 @@ def_7F04A01C: /* 07F658 7F04AB28 AD4D0000 */ sw $t5, ($t2) /* 07F65C 7F04AB2C AFAE0010 */ sw $t6, 0x10($sp) /* 07F660 7F04AB30 8FA700C0 */ lw $a3, 0xc0($sp) -/* 07F664 7F04AB34 0FC1DB5A */ jal likely_generate_DL_for_image_declaration +/* 07F664 7F04AB34 0FC1DB5A */ jal texSelect /* 07F668 7F04AB38 8FA600C4 */ lw $a2, 0xc4($sp) /* 07F66C 7F04AB3C 8FB000BC */ lw $s0, 0xbc($sp) /* 07F670 7F04AB40 3C190102 */ lui $t9, (0x01020040 >> 16) # lui $t9, 0x102 @@ -27577,7 +27568,7 @@ glabel sub_GAME_7F04AC20 /* 07F794 7F04AC64 11600005 */ beqz $t3, .L7F04AC7C /* 07F798 7F04AC68 AFAB0028 */ sw $t3, 0x28($sp) /* 07F79C 7F04AC6C 0FC1E0E5 */ jal get_BONDdata_field_10E0 -/* 07F7A0 7F04AC70 00000000 */ nop +/* 07F7A0 7F04AC70 00000000 */ nop /* 07F7A4 7F04AC74 0002602B */ sltu $t4, $zero, $v0 /* 07F7A8 7F04AC78 AFAC0028 */ sw $t4, 0x28($sp) .L7F04AC7C: @@ -27605,7 +27596,7 @@ glabel sub_GAME_7F04AC20 /* 07F7FC 7F04ACCC 24030001 */ li $v1, 1 /* 07F800 7F04ACD0 000A58C0 */ sll $t3, $t2, 3 /* 07F804 7F04ACD4 05610003 */ bgez $t3, .L7F04ACE4 -/* 07F808 7F04ACD8 00000000 */ nop +/* 07F808 7F04ACD8 00000000 */ nop /* 07F80C 7F04ACDC 10000001 */ b .L7F04ACE4 /* 07F810 7F04ACE0 24030008 */ li $v1, 8 .L7F04ACE4: @@ -27644,7 +27635,7 @@ glabel sub_GAME_7F04AC20 /* 07F88C 7F04AD5C 24030001 */ li $v1, 1 /* 07F890 7F04AD60 001870C0 */ sll $t6, $t8, 3 /* 07F894 7F04AD64 05C10003 */ bgez $t6, .L7F04AD74 -/* 07F898 7F04AD68 00000000 */ nop +/* 07F898 7F04AD68 00000000 */ nop /* 07F89C 7F04AD6C 10000001 */ b .L7F04AD74 /* 07F8A0 7F04AD70 24030008 */ li $v1, 8 .L7F04AD74: @@ -27673,7 +27664,7 @@ glabel sub_GAME_7F04AC20 /* 07F8F8 7F04ADC8 24030001 */ li $v1, 1 /* 07F8FC 7F04ADCC 03017024 */ and $t6, $t8, $at /* 07F900 7F04ADD0 11C00003 */ beqz $t6, .L7F04ADE0 -/* 07F904 7F04ADD4 00000000 */ nop +/* 07F904 7F04ADD4 00000000 */ nop /* 07F908 7F04ADD8 10000001 */ b .L7F04ADE0 /* 07F90C 7F04ADDC 24030008 */ li $v1, 8 .L7F04ADE0: @@ -27884,7 +27875,7 @@ glabel sub_GAME_7F04AC20 /* 07FBFC 7F04B0CC 8FA90078 */ lw $t1, 0x78($sp) /* 07FC00 7F04B0D0 8D240020 */ lw $a0, 0x20($t1) /* 07FC04 7F04B0D4 1080000A */ beqz $a0, .L7F04B100 -/* 07FC08 7F04B0D8 00000000 */ nop +/* 07FC08 7F04B0D8 00000000 */ nop /* 07FC0C 7F04B0DC 8FA60080 */ lw $a2, 0x80($sp) .L7F04B0E0: /* 07FC10 7F04B0E0 02002825 */ move $a1, $s0 @@ -27918,7 +27909,7 @@ glabel sub_GAME_7F04AC20 /* 07FC70 7F04B140 8FB00020 */ lw $s0, 0x20($sp) /* 07FC74 7F04B144 27BD0078 */ addiu $sp, $sp, 0x78 /* 07FC78 7F04B148 03E00008 */ jr $ra -/* 07FC7C 7F04B14C 00000000 */ nop +/* 07FC7C 7F04B14C 00000000 */ nop ) #endif @@ -27935,21 +27926,21 @@ Gfx *chrobjRenderProp(PropRecord *prop, Gfx *gdl, s32 arg2) struct rgba_f32 spB0; s32 spAC; s32 spA8; - struct unk_joint_list jlist; + ModelRenderData mrData; struct view4f sp58; struct rgba_s32 sp48; s32 sp44; ObjectRecord *obj; - s32 sp3C; + s32 objAlpha; f32 temp_f0; s32 temp_v0_4; s32 phi_a0; obj = prop->obj; - jlist = D_80031FD0; + mrData = D_80031FD0; - sp3C = 0xFF; + objAlpha = 0xFF; spAC = fogGetPropDistColor(prop, &spB0); if (spAC == 0) @@ -27966,15 +27957,15 @@ Gfx *chrobjRenderProp(PropRecord *prop, Gfx *gdl, s32 arg2) temp_f0 *= ((CHROBJ_TIMETOREGEN_F - (f32) prop->timetoregen) / CHROBJ_TIMETOREGEN_F); } - sp3C = (s32) (temp_f0 * 255.0f); + objAlpha = (s32) (temp_f0 * 255.0f); - if (sp3C <= 0) + if (objAlpha <= 0) { return gdl; } } - if ((sp3C < 0xFF) || (obj->flags2 & 0x10000)) + if ((objAlpha < 0xFF) || (obj->flags2 & 0x10000)) { if (arg2 == 0) { @@ -27998,31 +27989,31 @@ Gfx *chrobjRenderProp(PropRecord *prop, Gfx *gdl, s32 arg2) gdl = bgScissorCurrentPlayerViewDefault(gdl); } - jlist.unk08 = sp44; - jlist.unk04 = (obj->flags2 & 0x10000) == 0; + mrData.flags = sp44; + mrData.zbufferenabled = (obj->flags2 & 0x10000) == 0; - jlist.gdl = gdl; + mrData.gdl = gdl; - if (sp3C < 0xFF) + if (objAlpha < 0xFF) { - jlist.unk30 = 5; - jlist.unk34 = sp3C; + mrData.PropType = 5; + mrData.envcolour.word = objAlpha; } else { - jlist.unk30 = 9; + mrData.PropType = 9; if (obj->type == PROPDEF_TINTED_GLASS) { - jlist.unk34 = ((struct TintedGlassRecord*)obj)->calculatedopacity << 8; + mrData.envcolour.word = ((struct TintedGlassRecord*)obj)->calculatedopacity << 8; } else if ((obj->type == PROPDEF_DOOR) && ((((struct DoorRecord*)obj)->doorFlags & 2) != 0)) { - jlist.unk34 = ((struct DoorRecord*)obj)->calculatedopacity << 8; + mrData.envcolour.word = ((struct DoorRecord*)obj)->calculatedopacity << 8; } else { - jlist.unk34 = 0; + mrData.envcolour.word = 0; } } @@ -28038,7 +28029,7 @@ Gfx *chrobjRenderProp(PropRecord *prop, Gfx *gdl, s32 arg2) sp48.g = (s32) (obj->shadecol.rgba[1] * phi_a0) >> 8; sp48.b = (s32) (obj->shadecol.rgba[2] * phi_a0) >> 8; sp48.a = obj->shadecol.rgba[3] + temp_v0_4 * 0xF; - + if (sp48.a >= 0x100) { sp48.a = 0xFF; @@ -28046,11 +28037,11 @@ Gfx *chrobjRenderProp(PropRecord *prop, Gfx *gdl, s32 arg2) sub_GAME_7F040384(&sp48, spAC, &spB0); - jlist.unk38.word = (sp48.rgba[0] << 0x18) | (sp48.rgba[1] << 0x10) | (sp48.rgba[2] << 0x08) | (sp48.rgba[3] << 0x00); + mrData.fogcolour.word = (sp48.rgba[0] << 0x18) | (sp48.rgba[1] << 0x10) | (sp48.rgba[2] << 0x08) | (sp48.rgba[3] << 0x00); - sub_GAME_7F04AC20(prop, &jlist, arg2); - - return jlist.gdl; + sub_GAME_7F04AC20(prop, &mrData, arg2); + + return mrData.gdl; } @@ -28127,14 +28118,251 @@ bool sub_GAME_7F04B590(ModelFileHeader* arg0, ModelNode* arg1) #ifdef NONMATCHING -void sub_GAME_7F04B610(void) { +/* +* objDeform - Deform an object due to it being destroyed. +* PD has a very similar function of the same name +* Address: 7F04B610 +*/ +void objDeform(ObjectRecord *obj, s32 arg1) { + s32 sp7C; + s32 sp78; + s32 sp70; + f32 sp68; + f32 sp5C; + f32 sp44; + s32 sp40; + ModelNode *temp_v0; + Vertex **temp_s3; + Vertex *temp_a0_2; + Vertex *temp_v0_3; + Vertex *var_s0; + Vertex *var_v1; + Vertex *var_v1_2; + f32 temp_s1; + f32 temp_v0_8; + f32 var_f6; + s16 *temp_s0_2; + s16 temp_a0; + s16 temp_v0_4; + s16 temp_v0_5; + s16 var_s4; + s16 var_s6; + s32 *temp_t4; + s32 *temp_t7; + s32 temp_at; + s32 temp_at_2; + s32 temp_t1; + s32 temp_t3; + s32 temp_v0_2; + s32 temp_v0_6; + s32 temp_v0_9; + s32 var_s0_2; + s32 var_s1; + s32 var_s1_2; + s32 var_s1_3; + s32 var_s1_4; + s32 var_s2; + s32 var_s7; + s32 var_v1_3; + void *temp_s0; + void *temp_s0_3; + void *temp_s0_4; + void *temp_s0_5; + void *temp_s5; + void *temp_v0_10; + void *temp_v0_7; + temp_s1 = obj->mtx.m[0][0]; + var_s6 = 0x1869F; + var_s4 = 0xFFFE7961; + temp_v0 = sub_GAME_7F04B478(obj); + if ((temp_v0 != NULL) && (temp_s5 = temp_v0->Data, (temp_s5 != NULL)) && (sub_GAME_7F04B590(obj->mtx.m[0][0]->unk8, temp_v0) != 0)) { + temp_s3 = temp_s1->unk10 + (temp_s5->unk1A * 4); + temp_t1 = arg1 * 2; + if (randomGetNext() & 1) { + sp40 = temp_t1; + sp78 = (s32) *(object_explosion_details->Seed + ((obj->unk4 * 0xE) + temp_t1)); + } else { + temp_v0_2 = arg1 * 2; + sp40 = temp_v0_2; + sp78 = (s32) *(&object_explosion_details->Seed[3] + ((obj->unk4 * 0xE) + temp_v0_2)); + } + if ((get_debug_explosioninfo_flag() != 0) || (sp78 == 0)) { + get_debug_explosioninfo_flag(); + sp78 = randomGetNext(); + if (get_debug_explosioninfo_flag() != 0) { + sp78 &= 0xFFFF; + } + } + explosionClearBulletImpactRoom((PropRecord *) obj->model); + var_s7 = 1; + if (obj->unk4 == 0x4C) { + var_s7 = 0; + } + temp_v0_3 = sub_GAME_7F09BE4C(temp_s5->unkC, 0xB0B, temp_s1->unk8, objGetDestroyedLevel(obj)); + if (temp_v0_3 != NULL) { + if (temp_s5->unk8 != *temp_s3) { + var_s2 = 0; + var_s1 = 0; + var_v1 = temp_v0_3; + if (temp_s5->unkC > 0) { + do { + var_s2 += 1; + var_v1 += 0x10; + temp_t7 = *temp_s3 + var_s1; + temp_at = temp_t7->unk0; + var_s1 += 0x10; + var_v1->unk-10 = temp_at; + var_v1->unk-C = (s32) temp_t7->unk4; + var_v1->unk-8 = (s32) temp_t7->unk8; + var_v1->unk-4 = (s32) temp_t7->unkC; + } while (var_s2 < temp_s5->unkC); + var_s2 = 0; + } + sub_GAME_7F09C044(*temp_s3); + } else { + var_s2 = 0; + var_s1_2 = 0; + var_v1_2 = temp_v0_3; + if (temp_s5->unkC > 0) { + do { + var_s2 += 1; + var_v1_2 += 0x10; + temp_t4 = temp_s5->unk8 + var_s1_2; + temp_at_2 = temp_t4->unk0; + var_s1_2 += 0x10; + var_v1_2->unk-10 = temp_at_2; + var_v1_2->unk-C = (s32) temp_t4->unk4; + var_v1_2->unk-8 = (s32) temp_t4->unk8; + var_v1_2->unk-4 = (s32) temp_t4->unkC; + } while (var_s2 < temp_s5->unkC); + var_s2 = 0; + } + } + *temp_s3 = temp_v0_3; + temp_v0_4 = obj->unk4; + var_s1_3 = 0; + if ((temp_v0_4 == 0x26) || (temp_v0_4 == 0x27) || (temp_v0_4 == 0x55)) { + sp70 = 0; + } else { + sp70 = 1; + } + temp_a0 = temp_s5->unkC; + if (temp_a0 > 0) { + var_s0 = *temp_s3; + do { + temp_v0_5 = var_s0->coord.AsArray[1]; + var_s1_3 += 0x10; + if (temp_v0_5 < var_s6) { + var_s6 = temp_v0_5; + } + if (var_s4 < temp_v0_5) { + var_s4 = temp_v0_5; + } + var_s0 += 0x10; + } while (var_s1_3 < (temp_a0 * 0x10)); + var_s2 = 0; + } + temp_t3 = (s32) (var_s6 + var_s4) >> 1; + var_v1_3 = temp_t3; + if ((sp40 == 6) && ((temp_t3 - var_s6) >= 0x29)) { + var_v1_3 = var_s6 + 0x28; + } + temp_v0_6 = var_s4 - var_s6; + if (temp_v0_6 >= 0x3D) { + if (sp40 < 6) { + var_f6 = D_80052CC0; + goto block_47; + } + sp68 = (f32) (temp_v0_6 - 0x3C) / (f32) temp_v0_6; + } else { + var_f6 = 1.0f; +block_47: + sp68 = var_f6; + } + if (temp_a0 > 0) { + var_s1_4 = 0; + sp7C = var_v1_3; + sp44 = (f32) var_s6; + do { + temp_v0_7 = temp_s5->unk8 + var_s1_4; + chrObjRandomSetSeed(temp_v0_7->unk4 + temp_v0_7->unk0 + temp_v0_7->unk2 + sp78); + var_s0_2 = 0; + if (sp70 != 0) { + if (obj->mtx.m[1][2] >= 0.0f) { + if ((*temp_s3 + var_s1_4)->unk2 >= sp7C) { + if (var_s7 != 0) { + var_s0_2 = 0x5A; + } else { + var_s0_2 = 0x14; + } + } else if (var_s7 != 0) { + var_s0_2 = 0x14; + } else { + var_s0_2 = 0x5A; + } + } else if (sp7C >= (*temp_s3 + var_s1_4)->unk2) { + if (var_s7 != 0) { + var_s0_2 = 0x5A; + } else { + var_s0_2 = 0x14; + } + } else if (var_s7 != 0) { + var_s0_2 = 0x14; + } else { + var_s0_2 = 0x5A; + } + } + if ((s32) (chrObjRandomGetNext() % 100U) < var_s0_2) { + (*temp_s3 + var_s1_4)->unkC = 0; + (*temp_s3 + var_s1_4)->unkD = 0; + (*temp_s3 + var_s1_4)->unkE = 0; + (*temp_s3 + var_s1_4)->unkF = 0xFF; + } else if (sp40 == 2) { + (*temp_s3 + var_s1_4)->unkF = 0; + } + temp_s0 = *temp_s3 + var_s1_4; + temp_s0->unk2 = (s16) (s32) (((f32) (temp_s0->unk2 - var_s6) * sp68) + sp44); + temp_s0_2 = *temp_s3 + var_s1_4; + *temp_s0_2 = (*temp_s0_2 + (chrObjRandomGetNext() % 80U)) - 0x28; + temp_s0_3 = *temp_s3 + var_s1_4; + temp_s0_3->unk2 = (s16) ((temp_s0_3->unk2 + (chrObjRandomGetNext() % 80U)) - 0x28); + temp_s0_4 = *temp_s3 + var_s1_4; + temp_s0_4->unk4 = (s16) ((temp_s0_4->unk4 + (chrObjRandomGetNext() % 80U)) - 0x28); + temp_s0_5 = *temp_s3 + var_s1_4; + if (temp_s0_5->unk2 < var_s6) { + temp_s0_5->unk2 = var_s6; + } + var_s2 += 1; + var_s1_4 += 0x10; + } while (var_s2 < temp_s5->unkC); + } + } else { + temp_a0_2 = *temp_s3; + if (temp_s5->unk8 != temp_a0_2) { + sub_GAME_7F09C044(temp_a0_2); + *temp_s3 = temp_s5->unk8; + obj->ptr_allocated_collisiondata_block = (struct collision_data *) ((s32) obj->ptr_allocated_collisiondata_block | 4); + } + obj->mtx.m[1][1] *= D_80052CB4; + obj->mtx.m[1][2] *= D_80052CB4; + obj->mtx.m[1][3] *= D_80052CB4; + if (var_s7 != 0) { + temp_v0_8 = obj->mtx.m[0][0]; + sp5C = temp_v0_8->unk14; + temp_v0_9 = chrobjGetBboxFromObjFile(temp_v0_8->unk8); + temp_v0_10 = obj->model; + temp_v0_10->unkC = (f32) (temp_v0_10->unkC + (sp5C * chrpropBBOXGetYmin(temp_v0_9) * D_80052CB8)); + obj->runtime_pos.f[2] += sp5C * chrpropBBOXGetYmin(temp_v0_9) * D_80052CBC; + } + } + } } #else #ifndef VERSION_EU GLOBAL_ASM( .text -glabel sub_GAME_7F04B610 +glabel objDeform /* 080140 7F04B610 27BDFF68 */ addiu $sp, $sp, -0x98 /* 080144 7F04B614 AFB60030 */ sw $s6, 0x30($sp) /* 080148 7F04B618 AFB40028 */ sw $s4, 0x28($sp) @@ -28197,16 +28425,16 @@ glabel sub_GAME_7F04B610 /* 080228 7F04B6F8 AFA80078 */ sw $t0, 0x78($sp) .L7F04B6FC: /* 08022C 7F04B6FC 0FC243F1 */ jal get_debug_explosioninfo_flag -/* 080230 7F04B700 00000000 */ nop +/* 080230 7F04B700 00000000 */ nop /* 080234 7F04B704 14400003 */ bnez $v0, .L7F04B714 /* 080238 7F04B708 8FA90078 */ lw $t1, 0x78($sp) /* 08023C 7F04B70C 1520000B */ bnez $t1, .L7F04B73C -/* 080240 7F04B710 00000000 */ nop +/* 080240 7F04B710 00000000 */ nop .L7F04B714: /* 080244 7F04B714 0FC243F1 */ jal get_debug_explosioninfo_flag -/* 080248 7F04B718 00000000 */ nop +/* 080248 7F04B718 00000000 */ nop /* 08024C 7F04B71C 0C002914 */ jal randomGetNext -/* 080250 7F04B720 00000000 */ nop +/* 080250 7F04B720 00000000 */ nop /* 080254 7F04B724 0FC243F1 */ jal get_debug_explosioninfo_flag /* 080258 7F04B728 AFA20078 */ sw $v0, 0x78($sp) /* 08025C 7F04B72C 10400003 */ beqz $v0, .L7F04B73C @@ -28214,13 +28442,13 @@ glabel sub_GAME_7F04B610 /* 080264 7F04B734 314BFFFF */ andi $t3, $t2, 0xffff /* 080268 7F04B738 AFAB0078 */ sw $t3, 0x78($sp) .L7F04B73C: -/* 08026C 7F04B73C 0FC28364 */ jal sub_GAME_7F0A0D90 +/* 08026C 7F04B73C 0FC28364 */ jal explosionClearBulletImpactRoom /* 080270 7F04B740 8FC40010 */ lw $a0, 0x10($fp) /* 080274 7F04B744 87CC0004 */ lh $t4, 4($fp) /* 080278 7F04B748 2401004C */ li $at, 76 /* 08027C 7F04B74C 24170001 */ li $s7, 1 /* 080280 7F04B750 15810003 */ bne $t4, $at, .L7F04B760 -/* 080284 7F04B754 00000000 */ nop +/* 080284 7F04B754 00000000 */ nop /* 080288 7F04B758 10000001 */ b .L7F04B760 /* 08028C 7F04B75C 0000B825 */ move $s7, $zero .L7F04B760: @@ -28264,9 +28492,9 @@ glabel sub_GAME_7F04B610 /* 080320 7F04B7F0 00009025 */ move $s2, $zero .L7F04B7F4: /* 080324 7F04B7F4 0FC27011 */ jal sub_GAME_7F09C044 -/* 080328 7F04B7F8 00000000 */ nop +/* 080328 7F04B7F8 00000000 */ nop /* 08032C 7F04B7FC 10000018 */ b .L7F04B860 -/* 080330 7F04B800 00000000 */ nop +/* 080330 7F04B800 00000000 */ nop /* 080334 7F04B804 86AA000C */ lh $t2, 0xc($s5) .L7F04B808: /* 080338 7F04B808 00009025 */ move $s2, $zero @@ -28299,9 +28527,9 @@ glabel sub_GAME_7F04B610 /* 080398 7F04B868 8E640000 */ lw $a0, ($s3) /* 08039C 7F04B86C 8EB90008 */ lw $t9, 8($s5) /* 0803A0 7F04B870 13240008 */ beq $t9, $a0, .L7F04B894 -/* 0803A4 7F04B874 00000000 */ nop +/* 0803A4 7F04B874 00000000 */ nop /* 0803A8 7F04B878 0FC27011 */ jal sub_GAME_7F09C044 -/* 0803AC 7F04B87C 00000000 */ nop +/* 0803AC 7F04B87C 00000000 */ nop /* 0803B0 7F04B880 8EAF0008 */ lw $t7, 8($s5) /* 0803B4 7F04B884 AE6F0000 */ sw $t7, ($s3) /* 0803B8 7F04B888 8FC80064 */ lw $t0, 0x64($fp) @@ -28314,9 +28542,9 @@ glabel sub_GAME_7F04B610 /* 0803D0 7F04B8A0 C7C8002C */ lwc1 $f8, 0x2c($fp) /* 0803D4 7F04B8A4 C7D00030 */ lwc1 $f16, 0x30($fp) /* 0803D8 7F04B8A8 46002182 */ mul.s $f6, $f4, $f0 -/* 0803DC 7F04B8AC 00000000 */ nop +/* 0803DC 7F04B8AC 00000000 */ nop /* 0803E0 7F04B8B0 46004282 */ mul.s $f10, $f8, $f0 -/* 0803E4 7F04B8B4 00000000 */ nop +/* 0803E4 7F04B8B4 00000000 */ nop /* 0803E8 7F04B8B8 46008482 */ mul.s $f18, $f16, $f0 /* 0803EC 7F04B8BC E7C60028 */ swc1 $f6, 0x28($fp) /* 0803F0 7F04B8C0 E7CA002C */ swc1 $f10, 0x2c($fp) @@ -28422,7 +28650,7 @@ glabel sub_GAME_7F04B610 .L7F04BA24: /* 080554 7F04BA24 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 080558 7F04BA28 44813000 */ mtc1 $at, $f6 -/* 08055C 7F04BA2C 00000000 */ nop +/* 08055C 7F04BA2C 00000000 */ nop /* 080560 7F04BA30 E7A60068 */ swc1 $f6, 0x68($sp) .L7F04BA34: /* 080564 7F04BA34 5880009E */ blezl $a0, .L7F04BCB0 @@ -28447,12 +28675,12 @@ glabel sub_GAME_7F04B610 /* 0805AC 7F04BA7C 8FAB0070 */ lw $t3, 0x70($sp) /* 0805B0 7F04BA80 00008025 */ move $s0, $zero /* 0805B4 7F04BA84 1160002E */ beqz $t3, .L7F04BB40 -/* 0805B8 7F04BA88 00000000 */ nop +/* 0805B8 7F04BA88 00000000 */ nop /* 0805BC 7F04BA8C C7CA002C */ lwc1 $f10, 0x2c($fp) /* 0805C0 7F04BA90 44809000 */ mtc1 $zero, $f18 -/* 0805C4 7F04BA94 00000000 */ nop +/* 0805C4 7F04BA94 00000000 */ nop /* 0805C8 7F04BA98 460A903E */ c.le.s $f18, $f10 -/* 0805CC 7F04BA9C 00000000 */ nop +/* 0805CC 7F04BA9C 00000000 */ nop /* 0805D0 7F04BAA0 45020015 */ bc1fl .L7F04BAF8 /* 0805D4 7F04BAA4 8E6F0000 */ lw $t7, ($s3) /* 0805D8 7F04BAA8 8E6D0000 */ lw $t5, ($s3) @@ -28461,9 +28689,9 @@ glabel sub_GAME_7F04B610 /* 0805E4 7F04BAB4 858E0002 */ lh $t6, 2($t4) /* 0805E8 7F04BAB8 01D8082A */ slt $at, $t6, $t8 /* 0805EC 7F04BABC 14200007 */ bnez $at, .L7F04BADC -/* 0805F0 7F04BAC0 00000000 */ nop +/* 0805F0 7F04BAC0 00000000 */ nop /* 0805F4 7F04BAC4 12E00003 */ beqz $s7, .L7F04BAD4 -/* 0805F8 7F04BAC8 00000000 */ nop +/* 0805F8 7F04BAC8 00000000 */ nop /* 0805FC 7F04BACC 1000001C */ b .L7F04BB40 /* 080600 7F04BAD0 2410005A */ li $s0, 90 .L7F04BAD4: @@ -28471,7 +28699,7 @@ glabel sub_GAME_7F04B610 /* 080608 7F04BAD8 24100014 */ li $s0, 20 .L7F04BADC: /* 08060C 7F04BADC 12E00003 */ beqz $s7, .L7F04BAEC -/* 080610 7F04BAE0 00000000 */ nop +/* 080610 7F04BAE0 00000000 */ nop /* 080614 7F04BAE4 10000016 */ b .L7F04BB40 /* 080618 7F04BAE8 24100014 */ li $s0, 20 .L7F04BAEC: @@ -28484,9 +28712,9 @@ glabel sub_GAME_7F04B610 /* 080630 7F04BB00 85090002 */ lh $t1, 2($t0) /* 080634 7F04BB04 0329082A */ slt $at, $t9, $t1 /* 080638 7F04BB08 14200007 */ bnez $at, .L7F04BB28 -/* 08063C 7F04BB0C 00000000 */ nop +/* 08063C 7F04BB0C 00000000 */ nop /* 080640 7F04BB10 12E00003 */ beqz $s7, .L7F04BB20 -/* 080644 7F04BB14 00000000 */ nop +/* 080644 7F04BB14 00000000 */ nop /* 080648 7F04BB18 10000009 */ b .L7F04BB40 /* 08064C 7F04BB1C 2410005A */ li $s0, 90 .L7F04BB20: @@ -28494,7 +28722,7 @@ glabel sub_GAME_7F04B610 /* 080654 7F04BB24 24100014 */ li $s0, 20 .L7F04BB28: /* 080658 7F04BB28 12E00003 */ beqz $s7, .L7F04BB38 -/* 08065C 7F04BB2C 00000000 */ nop +/* 08065C 7F04BB2C 00000000 */ nop /* 080660 7F04BB30 10000003 */ b .L7F04BB40 /* 080664 7F04BB34 24100014 */ li $s0, 20 .L7F04BB38: @@ -28502,7 +28730,7 @@ glabel sub_GAME_7F04B610 /* 08066C 7F04BB3C 2410005A */ li $s0, 90 .L7F04BB40: /* 080670 7F04BB40 0FC26DD0 */ jal chrObjRandomGetNext -/* 080674 7F04BB44 00000000 */ nop +/* 080674 7F04BB44 00000000 */ nop /* 080678 7F04BB48 24010064 */ li $at, 100 /* 08067C 7F04BB4C 0041001B */ divu $zero, $v0, $at /* 080680 7F04BB50 00005010 */ mfhi $t2 @@ -28539,7 +28767,7 @@ glabel sub_GAME_7F04B610 /* 0806F0 7F04BBC0 860E0002 */ lh $t6, 2($s0) /* 0806F4 7F04BBC4 01D6C023 */ subu $t8, $t6, $s6 /* 0806F8 7F04BBC8 44982000 */ mtc1 $t8, $f4 -/* 0806FC 7F04BBCC 00000000 */ nop +/* 0806FC 7F04BBCC 00000000 */ nop /* 080700 7F04BBD0 468021A0 */ cvt.s.w $f6, $f4 /* 080704 7F04BBD4 46083402 */ mul.s $f16, $f6, $f8 /* 080708 7F04BBD8 460A8480 */ add.s $f18, $f16, $f10 @@ -28553,7 +28781,7 @@ glabel sub_GAME_7F04B610 /* 080728 7F04BBF8 01118021 */ addu $s0, $t0, $s1 /* 08072C 7F04BBFC 86090000 */ lh $t1, ($s0) /* 080730 7F04BC00 16800002 */ bnez $s4, .L7F04BC0C -/* 080734 7F04BC04 00000000 */ nop +/* 080734 7F04BC04 00000000 */ nop /* 080738 7F04BC08 0007000D */ break 7 .L7F04BC0C: /* 08073C 7F04BC0C 012A5821 */ addu $t3, $t1, $t2 @@ -28566,7 +28794,7 @@ glabel sub_GAME_7F04B610 /* 080758 7F04BC28 01918021 */ addu $s0, $t4, $s1 /* 08075C 7F04BC2C 860E0002 */ lh $t6, 2($s0) /* 080760 7F04BC30 16800002 */ bnez $s4, .L7F04BC3C -/* 080764 7F04BC34 00000000 */ nop +/* 080764 7F04BC34 00000000 */ nop /* 080768 7F04BC38 0007000D */ break 7 .L7F04BC3C: /* 08076C 7F04BC3C 01D87821 */ addu $t7, $t6, $t8 @@ -28579,7 +28807,7 @@ glabel sub_GAME_7F04B610 /* 080788 7F04BC58 01118021 */ addu $s0, $t0, $s1 /* 08078C 7F04BC5C 86090004 */ lh $t1, 4($s0) /* 080790 7F04BC60 16800002 */ bnez $s4, .L7F04BC6C -/* 080794 7F04BC64 00000000 */ nop +/* 080794 7F04BC64 00000000 */ nop /* 080798 7F04BC68 0007000D */ break 7 .L7F04BC6C: /* 08079C 7F04BC6C 012A5821 */ addu $t3, $t1, $t2 @@ -28619,7 +28847,7 @@ glabel sub_GAME_7F04B610 #ifdef VERSION_EU GLOBAL_ASM( .text -glabel sub_GAME_7F04B610 +glabel objDeform /* 07E1DC 7F04B7EC 27BDFF68 */ addiu $sp, $sp, -0x98 /* 07E1E0 7F04B7F0 AFB60030 */ sw $s6, 0x30($sp) /* 07E1E4 7F04B7F4 AFB40028 */ sw $s4, 0x28($sp) @@ -28657,7 +28885,7 @@ glabel sub_GAME_7F04B610 /* 07E264 7F04B874 1020001D */ beqz $at, .L7F04B8EC /* 07E268 7F04B878 01F99821 */ addu $s3, $t7, $t9 /* 07E26C 7F04B87C 0C00262C */ jal randomGetNext -/* 07E270 7F04B880 00000000 */ nop +/* 07E270 7F04B880 00000000 */ nop /* 07E274 7F04B884 30490001 */ andi $t1, $v0, 1 /* 07E278 7F04B888 1120000D */ beqz $t1, .L7F04B8C0 /* 07E27C 7F04B88C 8FA8009C */ lw $t0, 0x9c($sp) @@ -28689,16 +28917,16 @@ glabel sub_GAME_7F04B610 /* 07E2DC 7F04B8EC AFA00078 */ sw $zero, 0x78($sp) .L7F04B8F0: /* 07E2E0 7F04B8F0 0FC24118 */ jal get_debug_explosioninfo_flag -/* 07E2E4 7F04B8F4 00000000 */ nop +/* 07E2E4 7F04B8F4 00000000 */ nop /* 07E2E8 7F04B8F8 14400003 */ bnez $v0, .L7F04B908 /* 07E2EC 7F04B8FC 8FAB0078 */ lw $t3, 0x78($sp) /* 07E2F0 7F04B900 1560000B */ bnez $t3, .L7F04B930 -/* 07E2F4 7F04B904 00000000 */ nop +/* 07E2F4 7F04B904 00000000 */ nop .L7F04B908: /* 07E2F8 7F04B908 0FC24118 */ jal get_debug_explosioninfo_flag -/* 07E2FC 7F04B90C 00000000 */ nop +/* 07E2FC 7F04B90C 00000000 */ nop /* 07E300 7F04B910 0C00262C */ jal randomGetNext -/* 07E304 7F04B914 00000000 */ nop +/* 07E304 7F04B914 00000000 */ nop /* 07E308 7F04B918 0FC24118 */ jal get_debug_explosioninfo_flag /* 07E30C 7F04B91C AFA20078 */ sw $v0, 0x78($sp) /* 07E310 7F04B920 10400003 */ beqz $v0, .L7F04B930 @@ -28706,13 +28934,13 @@ glabel sub_GAME_7F04B610 /* 07E318 7F04B928 31AEFFFF */ andi $t6, $t5, 0xffff /* 07E31C 7F04B92C AFAE0078 */ sw $t6, 0x78($sp) .L7F04B930: -/* 07E320 7F04B930 0FC280B5 */ jal sub_GAME_7F0A0D90 +/* 07E320 7F04B930 0FC280B5 */ jal explosionClearBulletImpactRoom /* 07E324 7F04B934 8FC40010 */ lw $a0, 0x10($fp) /* 07E328 7F04B938 87D80004 */ lh $t8, 4($fp) /* 07E32C 7F04B93C 2401004C */ li $at, 76 /* 07E330 7F04B940 24170001 */ li $s7, 1 /* 07E334 7F04B944 17010003 */ bne $t8, $at, .L7F04B954 -/* 07E338 7F04B948 00000000 */ nop +/* 07E338 7F04B948 00000000 */ nop /* 07E33C 7F04B94C 10000001 */ b .L7F04B954 /* 07E340 7F04B950 0000B825 */ move $s7, $zero .L7F04B954: @@ -28756,9 +28984,9 @@ glabel sub_GAME_7F04B610 /* 07E3D4 7F04B9E4 00009025 */ move $s2, $zero .L7F04B9E8: /* 07E3D8 7F04B9E8 0FC26D61 */ jal sub_GAME_7F09C044 -/* 07E3DC 7F04B9EC 00000000 */ nop +/* 07E3DC 7F04B9EC 00000000 */ nop /* 07E3E0 7F04B9F0 10000018 */ b .L7F04BA54 -/* 07E3E4 7F04B9F4 00000000 */ nop +/* 07E3E4 7F04B9F4 00000000 */ nop /* 07E3E8 7F04B9F8 86AD000C */ lh $t5, 0xc($s5) .L7F04B9FC: /* 07E3EC 7F04B9FC 00009025 */ move $s2, $zero @@ -28791,9 +29019,9 @@ glabel sub_GAME_7F04B610 /* 07E44C 7F04BA5C 8E640000 */ lw $a0, ($s3) /* 07E450 7F04BA60 8EAA0008 */ lw $t2, 8($s5) /* 07E454 7F04BA64 11440008 */ beq $t2, $a0, .L7F04BA88 -/* 07E458 7F04BA68 00000000 */ nop +/* 07E458 7F04BA68 00000000 */ nop /* 07E45C 7F04BA6C 0FC26D61 */ jal sub_GAME_7F09C044 -/* 07E460 7F04BA70 00000000 */ nop +/* 07E460 7F04BA70 00000000 */ nop /* 07E464 7F04BA74 8EA90008 */ lw $t1, 8($s5) /* 07E468 7F04BA78 AE690000 */ sw $t1, ($s3) /* 07E46C 7F04BA7C 8FCC0064 */ lw $t4, 0x64($fp) @@ -28806,9 +29034,9 @@ glabel sub_GAME_7F04B610 /* 07E484 7F04BA94 C7C8002C */ lwc1 $f8, 0x2c($fp) /* 07E488 7F04BA98 C7D00030 */ lwc1 $f16, 0x30($fp) /* 07E48C 7F04BA9C 46002182 */ mul.s $f6, $f4, $f0 -/* 07E490 7F04BAA0 00000000 */ nop +/* 07E490 7F04BAA0 00000000 */ nop /* 07E494 7F04BAA4 46004282 */ mul.s $f10, $f8, $f0 -/* 07E498 7F04BAA8 00000000 */ nop +/* 07E498 7F04BAA8 00000000 */ nop /* 07E49C 7F04BAAC 46008482 */ mul.s $f18, $f16, $f0 /* 07E4A0 7F04BAB0 E7C60028 */ swc1 $f6, 0x28($fp) /* 07E4A4 7F04BAB4 E7CA002C */ swc1 $f10, 0x2c($fp) @@ -28914,7 +29142,7 @@ glabel sub_GAME_7F04B610 .L7F04BC18: /* 07E608 7F04BC18 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 07E60C 7F04BC1C 44813000 */ mtc1 $at, $f6 -/* 07E610 7F04BC20 00000000 */ nop +/* 07E610 7F04BC20 00000000 */ nop /* 07E614 7F04BC24 E7A60068 */ swc1 $f6, 0x68($sp) .L7F04BC28: /* 07E618 7F04BC28 5880009E */ blezl $a0, .L7F04BEA4 @@ -28939,12 +29167,12 @@ glabel sub_GAME_7F04B610 /* 07E660 7F04BC70 8FAE0070 */ lw $t6, 0x70($sp) /* 07E664 7F04BC74 00008025 */ move $s0, $zero /* 07E668 7F04BC78 11C0002E */ beqz $t6, .L7F04BD34 -/* 07E66C 7F04BC7C 00000000 */ nop +/* 07E66C 7F04BC7C 00000000 */ nop /* 07E670 7F04BC80 C7CA002C */ lwc1 $f10, 0x2c($fp) /* 07E674 7F04BC84 44809000 */ mtc1 $zero, $f18 -/* 07E678 7F04BC88 00000000 */ nop +/* 07E678 7F04BC88 00000000 */ nop /* 07E67C 7F04BC8C 460A903E */ c.le.s $f18, $f10 -/* 07E680 7F04BC90 00000000 */ nop +/* 07E680 7F04BC90 00000000 */ nop /* 07E684 7F04BC94 45020015 */ bc1fl .L7F04BCEC /* 07E688 7F04BC98 8E690000 */ lw $t1, ($s3) /* 07E68C 7F04BC9C 8E6F0000 */ lw $t7, ($s3) @@ -28953,9 +29181,9 @@ glabel sub_GAME_7F04B610 /* 07E698 7F04BCA8 87080002 */ lh $t0, 2($t8) /* 07E69C 7F04BCAC 0119082A */ slt $at, $t0, $t9 /* 07E6A0 7F04BCB0 14200007 */ bnez $at, .L7F04BCD0 -/* 07E6A4 7F04BCB4 00000000 */ nop +/* 07E6A4 7F04BCB4 00000000 */ nop /* 07E6A8 7F04BCB8 12E00003 */ beqz $s7, .L7F04BCC8 -/* 07E6AC 7F04BCBC 00000000 */ nop +/* 07E6AC 7F04BCBC 00000000 */ nop /* 07E6B0 7F04BCC0 1000001C */ b .L7F04BD34 /* 07E6B4 7F04BCC4 2410005A */ li $s0, 90 .L7F04BCC8: @@ -28963,7 +29191,7 @@ glabel sub_GAME_7F04B610 /* 07E6BC 7F04BCCC 24100014 */ li $s0, 20 .L7F04BCD0: /* 07E6C0 7F04BCD0 12E00003 */ beqz $s7, .L7F04BCE0 -/* 07E6C4 7F04BCD4 00000000 */ nop +/* 07E6C4 7F04BCD4 00000000 */ nop /* 07E6C8 7F04BCD8 10000016 */ b .L7F04BD34 /* 07E6CC 7F04BCDC 24100014 */ li $s0, 20 .L7F04BCE0: @@ -28976,9 +29204,9 @@ glabel sub_GAME_7F04B610 /* 07E6E4 7F04BCF4 858B0002 */ lh $t3, 2($t4) /* 07E6E8 7F04BCF8 014B082A */ slt $at, $t2, $t3 /* 07E6EC 7F04BCFC 14200007 */ bnez $at, .L7F04BD1C -/* 07E6F0 7F04BD00 00000000 */ nop +/* 07E6F0 7F04BD00 00000000 */ nop /* 07E6F4 7F04BD04 12E00003 */ beqz $s7, .L7F04BD14 -/* 07E6F8 7F04BD08 00000000 */ nop +/* 07E6F8 7F04BD08 00000000 */ nop /* 07E6FC 7F04BD0C 10000009 */ b .L7F04BD34 /* 07E700 7F04BD10 2410005A */ li $s0, 90 .L7F04BD14: @@ -28986,7 +29214,7 @@ glabel sub_GAME_7F04B610 /* 07E708 7F04BD18 24100014 */ li $s0, 20 .L7F04BD1C: /* 07E70C 7F04BD1C 12E00003 */ beqz $s7, .L7F04BD2C -/* 07E710 7F04BD20 00000000 */ nop +/* 07E710 7F04BD20 00000000 */ nop /* 07E714 7F04BD24 10000003 */ b .L7F04BD34 /* 07E718 7F04BD28 24100014 */ li $s0, 20 .L7F04BD2C: @@ -28994,7 +29222,7 @@ glabel sub_GAME_7F04B610 /* 07E720 7F04BD30 2410005A */ li $s0, 90 .L7F04BD34: /* 07E724 7F04BD34 0FC26B20 */ jal chrObjRandomGetNext -/* 07E728 7F04BD38 00000000 */ nop +/* 07E728 7F04BD38 00000000 */ nop /* 07E72C 7F04BD3C 24010064 */ li $at, 100 /* 07E730 7F04BD40 0041001B */ divu $zero, $v0, $at /* 07E734 7F04BD44 00006810 */ mfhi $t5 @@ -29031,7 +29259,7 @@ glabel sub_GAME_7F04B610 /* 07E7A4 7F04BDB4 86080002 */ lh $t0, 2($s0) /* 07E7A8 7F04BDB8 0116C823 */ subu $t9, $t0, $s6 /* 07E7AC 7F04BDBC 44992000 */ mtc1 $t9, $f4 -/* 07E7B0 7F04BDC0 00000000 */ nop +/* 07E7B0 7F04BDC0 00000000 */ nop /* 07E7B4 7F04BDC4 468021A0 */ cvt.s.w $f6, $f4 /* 07E7B8 7F04BDC8 46083402 */ mul.s $f16, $f6, $f8 /* 07E7BC 7F04BDCC 460A8480 */ add.s $f18, $f16, $f10 @@ -29045,7 +29273,7 @@ glabel sub_GAME_7F04B610 /* 07E7DC 7F04BDEC 01918021 */ addu $s0, $t4, $s1 /* 07E7E0 7F04BDF0 860B0000 */ lh $t3, ($s0) /* 07E7E4 7F04BDF4 16800002 */ bnez $s4, .L7F04BE00 -/* 07E7E8 7F04BDF8 00000000 */ nop +/* 07E7E8 7F04BDF8 00000000 */ nop /* 07E7EC 7F04BDFC 0007000D */ break 7 .L7F04BE00: /* 07E7F0 7F04BE00 016D7021 */ addu $t6, $t3, $t5 @@ -29058,7 +29286,7 @@ glabel sub_GAME_7F04B610 /* 07E80C 7F04BE1C 03118021 */ addu $s0, $t8, $s1 /* 07E810 7F04BE20 86080002 */ lh $t0, 2($s0) /* 07E814 7F04BE24 16800002 */ bnez $s4, .L7F04BE30 -/* 07E818 7F04BE28 00000000 */ nop +/* 07E818 7F04BE28 00000000 */ nop /* 07E81C 7F04BE2C 0007000D */ break 7 .L7F04BE30: /* 07E820 7F04BE30 01194821 */ addu $t1, $t0, $t9 @@ -29071,7 +29299,7 @@ glabel sub_GAME_7F04B610 /* 07E83C 7F04BE4C 01918021 */ addu $s0, $t4, $s1 /* 07E840 7F04BE50 860B0004 */ lh $t3, 4($s0) /* 07E844 7F04BE54 16800002 */ bnez $s4, .L7F04BE60 -/* 07E848 7F04BE58 00000000 */ nop +/* 07E848 7F04BE58 00000000 */ nop /* 07E84C 7F04BE5C 0007000D */ break 7 .L7F04BE60: /* 07E850 7F04BE60 016D7021 */ addu $t6, $t3, $t5 @@ -29340,19 +29568,19 @@ s32 objDrop(PropRecord *prop) // Do collision checks f32 objwidth = objGetWidth(obj); Mtxf *sp58 = getsubmatrix(model); - s32 sp54 = 0x1F; + s32 cdtypes = CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER; matrix_4x4_multiply_homogeneous(currentPlayerGetMatrix10D4(), sp58, &spB8); if (projectile->flags & 0x40) { - sp54 = 0x1D; + cdtypes = CDTYPE_OBJS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER; } sub_GAME_7F03D058(root, FALSE); - if ((stanTestLineUnobstructed(&rootstan, root->pos.f[0], root->pos.f[2], spB8.m[3][0], spB8.m[3][2], sp54, 0.0f, 1.0f, 0.0f, 1.0f) != 0) - && (stanTestVolume(&rootstan, spB8.m[3][0], spB8.m[3][2], objwidth, sp54, 0.0f, 1.0f) < 0)) + if ((stanTestLineUnobstructed(&rootstan, root->pos.f[0], root->pos.f[2], spB8.m[3][0], spB8.m[3][2], cdtypes, 0.0f, 1.0f, 0.0f, 1.0f) != 0) + && (stanTestVolume(&rootstan, spB8.m[3][0], spB8.m[3][2], objwidth, cdtypes, 0.0f, 1.0f) < 0)) { prop->stan = rootstan; @@ -29365,7 +29593,7 @@ s32 objDrop(PropRecord *prop) } sub_GAME_7F03D058(root, TRUE); - prop->Unk18 = -sp58->m[3][2]; + prop->zDepth = -sp58->m[3][2]; } else @@ -29522,11 +29750,11 @@ glabel object_explosion_related /* 081958 7F04CE28 C4840074 */ lwc1 $f4, 0x74($a0) /* 08195C 7F04CE2C 00808825 */ move $s1, $a0 /* 081960 7F04CE30 4606203C */ c.lt.s $f4, $f6 -/* 081964 7F04CE34 00000000 */ nop +/* 081964 7F04CE34 00000000 */ nop /* 081968 7F04CE38 45030006 */ bc1tl .L7F04CE54 /* 08196C 7F04CE3C 862E0004 */ lh $t6, 4($s1) /* 081970 7F04CE40 0FC0FFF0 */ jal objGetDestroyedLevel -/* 081974 7F04CE44 00000000 */ nop +/* 081974 7F04CE44 00000000 */ nop /* 081978 7F04CE48 504000C4 */ beql $v0, $zero, .L7F04D15C /* 08197C 7F04CE4C 8FBF002C */ lw $ra, 0x2c($sp) /* 081980 7F04CE50 862E0004 */ lh $t6, 4($s1) @@ -29556,7 +29784,7 @@ glabel object_explosion_related /* 0819D4 7F04CEA4 0FC0FFF0 */ jal objGetDestroyedLevel /* 0819D8 7F04CEA8 AFA80038 */ sw $t0, 0x38($sp) /* 0819DC 7F04CEAC 14400056 */ bnez $v0, .L7F04D008 -/* 0819E0 7F04CEB0 00000000 */ nop +/* 0819E0 7F04CEB0 00000000 */ nop /* 0819E4 7F04CEB4 92290002 */ lbu $t1, 2($s1) /* 0819E8 7F04CEB8 44804000 */ mtc1 $zero, $f8 /* 0819EC 7F04CEBC 352A0080 */ ori $t2, $t1, 0x80 @@ -29613,13 +29841,13 @@ glabel object_explosion_related /* 081AAC 7F04CF7C 02202025 */ move $a0, $s1 /* 081AB0 7F04CF80 318D2000 */ andi $t5, $t4, 0x2000 /* 081AB4 7F04CF84 11A00005 */ beqz $t5, .L7F04CF9C -/* 081AB8 7F04CF88 00000000 */ nop +/* 081AB8 7F04CF88 00000000 */ nop /* 081ABC 7F04CF8C 8E2E0064 */ lw $t6, 0x64($s1) /* 081AC0 7F04CF90 35CF0004 */ ori $t7, $t6, 4 /* 081AC4 7F04CF94 10000070 */ b .L7F04D158 /* 081AC8 7F04CF98 AE2F0064 */ sw $t7, 0x64($s1) .L7F04CF9C: -/* 081ACC 7F04CF9C 0FC12D84 */ jal sub_GAME_7F04B610 +/* 081ACC 7F04CF9C 0FC12D84 */ jal objDeform /* 081AD0 7F04CFA0 24050001 */ li $a1, 1 /* 081AD4 7F04CFA4 8FA40044 */ lw $a0, 0x44($sp) /* 081AD8 7F04CFA8 5604006C */ bnel $s0, $a0, .L7F04D15C @@ -29631,7 +29859,7 @@ glabel object_explosion_related /* 081AF0 7F04CFC0 5300000A */ beql $t8, $zero, .L7F04CFEC /* 081AF4 7F04CFC4 3C010001 */ lui $at, 1 /* 081AF8 7F04CFC8 0C002914 */ jal randomGetNext -/* 081AFC 7F04CFCC 00000000 */ nop +/* 081AFC 7F04CFCC 00000000 */ nop /* 081B00 7F04CFD0 24010003 */ li $at, 3 /* 081B04 7F04CFD4 0041001B */ divu $zero, $v0, $at /* 081B08 7F04CFD8 0000C810 */ mfhi $t9 @@ -29655,11 +29883,11 @@ glabel object_explosion_related /* 081B48 7F04D018 AFA20034 */ sw $v0, 0x34($sp) /* 081B4C 7F04D01C 00025083 */ sra $t2, $v0, 2 /* 081B50 7F04D020 25450001 */ addiu $a1, $t2, 1 -/* 081B54 7F04D024 0FC12D84 */ jal sub_GAME_7F04B610 +/* 081B54 7F04D024 0FC12D84 */ jal objDeform /* 081B58 7F04D028 02202025 */ move $a0, $s1 /* 081B5C 7F04D02C 8FAB0038 */ lw $t3, 0x38($sp) /* 081B60 7F04D030 1160002A */ beqz $t3, .L7F04D0DC -/* 081B64 7F04D034 00000000 */ nop +/* 081B64 7F04D034 00000000 */ nop /* 081B68 7F04D038 920C0001 */ lbu $t4, 1($s0) /* 081B6C 7F04D03C 8FA2004C */ lw $v0, 0x4c($sp) /* 081B70 7F04D040 27A40038 */ addiu $a0, $sp, 0x38 @@ -29688,7 +29916,7 @@ glabel object_explosion_related /* 081BCC 7F04D09C 0FC27094 */ jal explosionCreate /* 081BD0 7F04D0A0 AFB90014 */ sw $t9, 0x14($sp) /* 081BD4 7F04D0A4 1000000D */ b .L7F04D0DC -/* 081BD8 7F04D0A8 00000000 */ nop +/* 081BD8 7F04D0A8 00000000 */ nop .L7F04D0AC: /* 081BDC 7F04D0AC 8E060014 */ lw $a2, 0x14($s0) .L7F04D0B0: @@ -29761,11 +29989,11 @@ glabel object_explosion_related /* 07FA0C 7F04D01C C4840074 */ lwc1 $f4, 0x74($a0) /* 07FA10 7F04D020 00808825 */ move $s1, $a0 /* 07FA14 7F04D024 4606203C */ c.lt.s $f4, $f6 -/* 07FA18 7F04D028 00000000 */ nop +/* 07FA18 7F04D028 00000000 */ nop /* 07FA1C 7F04D02C 45030006 */ bc1tl .L7F04D048 /* 07FA20 7F04D030 862E0004 */ lh $t6, 4($s1) /* 07FA24 7F04D034 0FC10020 */ jal objGetDestroyedLevel -/* 07FA28 7F04D038 00000000 */ nop +/* 07FA28 7F04D038 00000000 */ nop /* 07FA2C 7F04D03C 504000C1 */ beql $v0, $zero, .L7F04D344 /* 07FA30 7F04D040 8FBF002C */ lw $ra, 0x2c($sp) /* 07FA34 7F04D044 862E0004 */ lh $t6, 4($s1) @@ -29792,7 +30020,7 @@ glabel object_explosion_related /* 07FA7C 7F04D08C 0FC10020 */ jal objGetDestroyedLevel /* 07FA80 7F04D090 AFB90038 */ sw $t9, 0x38($sp) /* 07FA84 7F04D094 14400056 */ bnez $v0, .L7F04D1F0 -/* 07FA88 7F04D098 00000000 */ nop +/* 07FA88 7F04D098 00000000 */ nop /* 07FA8C 7F04D09C 92280002 */ lbu $t0, 2($s1) /* 07FA90 7F04D0A0 44804000 */ mtc1 $zero, $f8 /* 07FA94 7F04D0A4 35090080 */ ori $t1, $t0, 0x80 @@ -29849,13 +30077,13 @@ glabel object_explosion_related /* 07FB54 7F04D164 02202025 */ move $a0, $s1 /* 07FB58 7F04D168 316C2000 */ andi $t4, $t3, 0x2000 /* 07FB5C 7F04D16C 11800005 */ beqz $t4, .L7F04D184 -/* 07FB60 7F04D170 00000000 */ nop +/* 07FB60 7F04D170 00000000 */ nop /* 07FB64 7F04D174 8E2D0064 */ lw $t5, 0x64($s1) /* 07FB68 7F04D178 35AE0004 */ ori $t6, $t5, 4 /* 07FB6C 7F04D17C 10000070 */ b .L7F04D340 /* 07FB70 7F04D180 AE2E0064 */ sw $t6, 0x64($s1) .L7F04D184: -/* 07FB74 7F04D184 0FC12DFB */ jal sub_GAME_7F04B610 +/* 07FB74 7F04D184 0FC12DFB */ jal objDeform /* 07FB78 7F04D188 24050001 */ li $a1, 1 /* 07FB7C 7F04D18C 8FA40044 */ lw $a0, 0x44($sp) /* 07FB80 7F04D190 5604006C */ bnel $s0, $a0, .L7F04D344 @@ -29867,7 +30095,7 @@ glabel object_explosion_related /* 07FB98 7F04D1A8 51E0000A */ beql $t7, $zero, .L7F04D1D4 /* 07FB9C 7F04D1AC 3C010001 */ lui $at, 1 /* 07FBA0 7F04D1B0 0C00262C */ jal randomGetNext -/* 07FBA4 7F04D1B4 00000000 */ nop +/* 07FBA4 7F04D1B4 00000000 */ nop /* 07FBA8 7F04D1B8 24010003 */ li $at, 3 /* 07FBAC 7F04D1BC 0041001B */ divu $zero, $v0, $at /* 07FBB0 7F04D1C0 0000C010 */ mfhi $t8 @@ -29891,11 +30119,11 @@ glabel object_explosion_related /* 07FBF0 7F04D200 AFA20034 */ sw $v0, 0x34($sp) /* 07FBF4 7F04D204 00024883 */ sra $t1, $v0, 2 /* 07FBF8 7F04D208 25250001 */ addiu $a1, $t1, 1 -/* 07FBFC 7F04D20C 0FC12DFB */ jal sub_GAME_7F04B610 +/* 07FBFC 7F04D20C 0FC12DFB */ jal objDeform /* 07FC00 7F04D210 02202025 */ move $a0, $s1 /* 07FC04 7F04D214 8FAA0038 */ lw $t2, 0x38($sp) /* 07FC08 7F04D218 1140002A */ beqz $t2, .L7F04D2C4eu -/* 07FC0C 7F04D21C 00000000 */ nop +/* 07FC0C 7F04D21C 00000000 */ nop /* 07FC10 7F04D220 920B0001 */ lbu $t3, 1($s0) /* 07FC14 7F04D224 8FA2004C */ lw $v0, 0x4c($sp) /* 07FC18 7F04D228 27A40038 */ addiu $a0, $sp, 0x38 @@ -29924,7 +30152,7 @@ glabel object_explosion_related /* 07FC74 7F04D284 0FC26DE4 */ jal explosionCreate /* 07FC78 7F04D288 AFB80014 */ sw $t8, 0x14($sp) /* 07FC7C 7F04D28C 1000000D */ b .L7F04D2C4eu -/* 07FC80 7F04D290 00000000 */ nop +/* 07FC80 7F04D290 00000000 */ nop .L7F04D294: /* 07FC84 7F04D294 8E060014 */ lw $a2, 0x14($s0) .L7F04D298: @@ -30068,14 +30296,14 @@ glabel bgTestHitOnObj /* 081D5C 7F04D22C 2401FFBF */ li $at, -65 /* 081D60 7F04D230 144100E2 */ bne $v0, $at, .L7F04D5BC /* 081D64 7F04D234 2403000A */ li $v1, 10 -/* 081D68 7F04D238 3C0B8003 */ lui $t3, %hi(D_8003204C) +/* 081D68 7F04D238 3C0B8003 */ lui $t3, %hi(D_8003204C) /* 081D6C 7F04D23C 256B204C */ addiu $t3, %lo(D_8003204C) # addiu $t3, $t3, 0x204c /* 081D70 7F04D240 8D610000 */ lw $at, ($t3) /* 081D74 7F04D244 27AA00E8 */ addiu $t2, $sp, 0xe8 /* 081D78 7F04D248 8D6D0004 */ lw $t5, 4($t3) /* 081D7C 7F04D24C AD410000 */ sw $at, ($t2) /* 081D80 7F04D250 8D610008 */ lw $at, 8($t3) -/* 081D84 7F04D254 3C0F8003 */ lui $t7, %hi(D_80032058) +/* 081D84 7F04D254 3C0F8003 */ lui $t7, %hi(D_80032058) /* 081D88 7F04D258 25EF2058 */ addiu $t7, %lo(D_80032058) # addiu $t7, $t7, 0x2058 /* 081D8C 7F04D25C AD4D0004 */ sw $t5, 4($t2) /* 081D90 7F04D260 AD410008 */ sw $at, 8($t2) @@ -30095,14 +30323,14 @@ glabel bgTestHitOnObj /* 081DC8 7F04D298 AFA900F8 */ sw $t1, 0xf8($sp) /* 081DCC 7F04D29C 922C0006 */ lbu $t4, 6($s1) /* 081DD0 7F04D2A0 14600002 */ bnez $v1, .L7F04D2AC -/* 081DD4 7F04D2A4 00000000 */ nop +/* 081DD4 7F04D2A4 00000000 */ nop /* 081DD8 7F04D2A8 0007000D */ break 7 .L7F04D2AC: /* 081DDC 7F04D2AC 2401FFFF */ li $at, -1 /* 081DE0 7F04D2B0 14610004 */ bne $v1, $at, .L7F04D2C4 /* 081DE4 7F04D2B4 3C018000 */ lui $at, 0x8000 /* 081DE8 7F04D2B8 15010002 */ bne $t0, $at, .L7F04D2C4 -/* 081DEC 7F04D2BC 00000000 */ nop +/* 081DEC 7F04D2BC 00000000 */ nop /* 081DF0 7F04D2C0 0006000D */ break 6 .L7F04D2C4: /* 081DF4 7F04D2C4 0183001A */ div $zero, $t4, $v1 @@ -30110,28 +30338,28 @@ glabel bgTestHitOnObj /* 081DFC 7F04D2CC AFAA00FC */ sw $t2, 0xfc($sp) /* 081E00 7F04D2D0 922B0007 */ lbu $t3, 7($s1) /* 081E04 7F04D2D4 14600002 */ bnez $v1, .L7F04D2E0 -/* 081E08 7F04D2D8 00000000 */ nop +/* 081E08 7F04D2D8 00000000 */ nop /* 081E0C 7F04D2DC 0007000D */ break 7 .L7F04D2E0: /* 081E10 7F04D2E0 2401FFFF */ li $at, -1 /* 081E14 7F04D2E4 14610004 */ bne $v1, $at, .L7F04D2F8 /* 081E18 7F04D2E8 3C018000 */ lui $at, 0x8000 /* 081E1C 7F04D2EC 15810002 */ bne $t4, $at, .L7F04D2F8 -/* 081E20 7F04D2F0 00000000 */ nop +/* 081E20 7F04D2F0 00000000 */ nop /* 081E24 7F04D2F4 0006000D */ break 6 .L7F04D2F8: /* 081E28 7F04D2F8 0163001A */ div $zero, $t3, $v1 /* 081E2C 7F04D2FC 00006812 */ mflo $t5 /* 081E30 7F04D300 AFAD0100 */ sw $t5, 0x100($sp) /* 081E34 7F04D304 14600002 */ bnez $v1, .L7F04D310 -/* 081E38 7F04D308 00000000 */ nop +/* 081E38 7F04D308 00000000 */ nop /* 081E3C 7F04D30C 0007000D */ break 7 .L7F04D310: /* 081E40 7F04D310 2401FFFF */ li $at, -1 /* 081E44 7F04D314 14610004 */ bne $v1, $at, .L7F04D328 /* 081E48 7F04D318 3C018000 */ lui $at, 0x8000 /* 081E4C 7F04D31C 15610002 */ bne $t3, $at, .L7F04D328 -/* 081E50 7F04D320 00000000 */ nop +/* 081E50 7F04D320 00000000 */ nop /* 081E54 7F04D324 0006000D */ break 6 .L7F04D328: /* 081E58 7F04D328 8C980000 */ lw $t8, ($a0) @@ -30179,7 +30407,7 @@ glabel bgTestHitOnObj .L7F04D3BC: /* 081EEC 7F04D3BC 0142082A */ slt $at, $t2, $v0 /* 081EF0 7F04D3C0 10200002 */ beqz $at, .L7F04D3CC -/* 081EF4 7F04D3C4 00000000 */ nop +/* 081EF4 7F04D3C4 00000000 */ nop /* 081EF8 7F04D3C8 AFA200E4 */ sw $v0, 0xe4($sp) .L7F04D3CC: /* 081EFC 7F04D3CC 548BFFD7 */ bnel $a0, $t3, .L7F04D32C @@ -30189,7 +30417,7 @@ glabel bgTestHitOnObj /* 081F0C 7F04D3DC 0FC2DB3B */ jal bgTestLineIntersectsBbox /* 081F10 7F04D3E0 27A700DC */ addiu $a3, $sp, 0xdc /* 081F14 7F04D3E4 10400162 */ beqz $v0, .L7F04D970 -/* 081F18 7F04D3E8 3C0D8003 */ lui $t5, %hi(D_80032064) +/* 081F18 7F04D3E8 3C0D8003 */ lui $t5, %hi(D_80032064) /* 081F1C 7F04D3EC 25AD2064 */ addiu $t5, %lo(D_80032064) # addiu $t5, $t5, 0x2064 /* 081F20 7F04D3F0 8DA10000 */ lw $at, ($t5) /* 081F24 7F04D3F4 27A700C4 */ addiu $a3, $sp, 0xc4 @@ -30212,10 +30440,10 @@ glabel bgTestHitOnObj /* 081F68 7F04D438 AFB8001C */ sw $t8, 0x1c($sp) /* 081F6C 7F04D43C AFBE0018 */ sw $fp, 0x18($sp) /* 081F70 7F04D440 AFB70010 */ sw $s7, 0x10($sp) -/* 081F74 7F04D444 0FC24A24 */ jal sub_GAME_7F092890 +/* 081F74 7F04D444 0FC24A24 */ jal intersectLineTriangle /* 081F78 7F04D448 AFAB0014 */ sw $t3, 0x14($sp) /* 081F7C 7F04D44C 10400148 */ beqz $v0, .L7F04D970 -/* 081F80 7F04D450 00000000 */ nop +/* 081F80 7F04D450 00000000 */ nop /* 081F84 7F04D454 C7A4011C */ lwc1 $f4, 0x11c($sp) /* 081F88 7F04D458 C6E80000 */ lwc1 $f8, ($s7) /* 081F8C 7F04D45C C7B20120 */ lwc1 $f18, 0x120($sp) @@ -30250,13 +30478,13 @@ glabel bgTestHitOnObj /* 082000 7F04D4D0 12A9000A */ beq $s5, $t1, .L7F04D4FC /* 082004 7F04D4D4 468043A0 */ cvt.s.w $f14, $f8 /* 082008 7F04D4D8 10200008 */ beqz $at, .L7F04D4FC -/* 08200C 7F04D4DC 00000000 */ nop +/* 08200C 7F04D4DC 00000000 */ nop /* 082010 7F04D4E0 904AFFF8 */ lbu $t2, -8($v0) .L7F04D4E4: /* 082014 7F04D4E4 2442FFF8 */ addiu $v0, $v0, -8 /* 082018 7F04D4E8 0262082B */ sltu $at, $s3, $v0 /* 08201C 7F04D4EC 12AA0003 */ beq $s5, $t2, .L7F04D4FC -/* 082020 7F04D4F0 00000000 */ nop +/* 082020 7F04D4F0 00000000 */ nop /* 082024 7F04D4F4 5420FFFB */ bnezl $at, .L7F04D4E4 /* 082028 7F04D4F8 904AFFF8 */ lbu $t2, -8($v0) .L7F04D4FC: @@ -30275,9 +30503,9 @@ glabel bgTestHitOnObj /* 082054 7F04D524 46105480 */ add.s $f18, $f10, $f16 /* 082058 7F04D528 46049000 */ add.s $f0, $f18, $f4 /* 08205C 7F04D52C 4614003C */ c.lt.s $f0, $f20 -/* 082060 7F04D530 00000000 */ nop +/* 082060 7F04D530 00000000 */ nop /* 082064 7F04D534 4500010E */ bc1f .L7F04D970 -/* 082068 7F04D538 00000000 */ nop +/* 082068 7F04D538 00000000 */ nop /* 08206C 7F04D53C C7A6011C */ lwc1 $f6, 0x11c($sp) /* 082070 7F04D540 240C0001 */ li $t4, 1 /* 082074 7F04D544 46000506 */ mov.s $f20, $f0 @@ -30313,17 +30541,17 @@ glabel bgTestHitOnObj .L7F04D5BC: /* 0820EC 7F04D5BC 2401FFB1 */ li $at, -79 /* 0820F0 7F04D5C0 144100EB */ bne $v0, $at, .L7F04D970 -/* 0820F4 7F04D5C4 00000000 */ nop +/* 0820F4 7F04D5C4 00000000 */ nop /* 0820F8 7F04D5C8 00009025 */ move $s2, $zero .L7F04D5CC: -/* 0820FC 7F04D5CC 3C188003 */ lui $t8, %hi(D_80032070) +/* 0820FC 7F04D5CC 3C188003 */ lui $t8, %hi(D_80032070) /* 082100 7F04D5D0 27182070 */ addiu $t8, %lo(D_80032070) # addiu $t8, $t8, 0x2070 /* 082104 7F04D5D4 8F010000 */ lw $at, ($t8) /* 082108 7F04D5D8 27AB0094 */ addiu $t3, $sp, 0x94 /* 08210C 7F04D5DC 8F0E0004 */ lw $t6, 4($t8) /* 082110 7F04D5E0 AD610000 */ sw $at, ($t3) /* 082114 7F04D5E4 8F010008 */ lw $at, 8($t8) -/* 082118 7F04D5E8 3C198003 */ lui $t9, %hi(D_8003207C) +/* 082118 7F04D5E8 3C198003 */ lui $t9, %hi(D_8003207C) /* 08211C 7F04D5EC 2739207C */ addiu $t9, %lo(D_8003207C) # addiu $t9, $t9, 0x207c /* 082120 7F04D5F0 AD6E0004 */ sw $t6, 4($t3) /* 082124 7F04D5F4 AD610008 */ sw $at, 8($t3) @@ -30429,7 +30657,7 @@ glabel bgTestHitOnObj .L7F04D760: /* 082290 7F04D760 0182082A */ slt $at, $t4, $v0 /* 082294 7F04D764 10200002 */ beqz $at, .L7F04D770 -/* 082298 7F04D768 00000000 */ nop +/* 082298 7F04D768 00000000 */ nop /* 08229C 7F04D76C AFA20090 */ sw $v0, 0x90($sp) .L7F04D770: /* 0822A0 7F04D770 5496FFD8 */ bnel $a0, $s6, .L7F04D6D4 @@ -30440,7 +30668,7 @@ glabel bgTestHitOnObj /* 0822B4 7F04D784 0FC2DB3B */ jal bgTestLineIntersectsBbox /* 0822B8 7F04D788 27A70088 */ addiu $a3, $sp, 0x88 /* 0822BC 7F04D78C 10400074 */ beqz $v0, .L7F04D960 -/* 0822C0 7F04D790 3C0D8003 */ lui $t5, %hi(D_80032088) +/* 0822C0 7F04D790 3C0D8003 */ lui $t5, %hi(D_80032088) /* 0822C4 7F04D794 25AD2088 */ addiu $t5, %lo(D_80032088) # addiu $t5, $t5, 0x2088 /* 0822C8 7F04D798 8DA10000 */ lw $at, ($t5) /* 0822CC 7F04D79C 27A70070 */ addiu $a3, $sp, 0x70 @@ -30463,7 +30691,7 @@ glabel bgTestHitOnObj /* 082310 7F04D7E0 AFAB001C */ sw $t3, 0x1c($sp) /* 082314 7F04D7E4 AFBE0018 */ sw $fp, 0x18($sp) /* 082318 7F04D7E8 AFB70010 */ sw $s7, 0x10($sp) -/* 08231C 7F04D7EC 0FC24A24 */ jal sub_GAME_7F092890 +/* 08231C 7F04D7EC 0FC24A24 */ jal intersectLineTriangle /* 082320 7F04D7F0 AFAC0014 */ sw $t4, 0x14($sp) /* 082324 7F04D7F4 5040005B */ beql $v0, $zero, .L7F04D964 /* 082328 7F04D7F8 26520001 */ addiu $s2, $s2, 1 @@ -30501,13 +30729,13 @@ glabel bgTestHitOnObj /* 0823A8 7F04D878 12B9000A */ beq $s5, $t9, .L7F04D8A4 /* 0823AC 7F04D87C 468053A0 */ cvt.s.w $f14, $f10 /* 0823B0 7F04D880 10200008 */ beqz $at, .L7F04D8A4 -/* 0823B4 7F04D884 00000000 */ nop +/* 0823B4 7F04D884 00000000 */ nop /* 0823B8 7F04D888 904AFFF8 */ lbu $t2, -8($v0) .L7F04D88C: /* 0823BC 7F04D88C 2442FFF8 */ addiu $v0, $v0, -8 /* 0823C0 7F04D890 0262082B */ sltu $at, $s3, $v0 /* 0823C4 7F04D894 12AA0003 */ beq $s5, $t2, .L7F04D8A4 -/* 0823C8 7F04D898 00000000 */ nop +/* 0823C8 7F04D898 00000000 */ nop /* 0823CC 7F04D89C 5420FFFB */ bnezl $at, .L7F04D88C /* 0823D0 7F04D8A0 904AFFF8 */ lbu $t2, -8($v0) .L7F04D8A4: @@ -30526,7 +30754,7 @@ glabel bgTestHitOnObj /* 0823FC 7F04D8CC 46128100 */ add.s $f4, $f16, $f18 /* 082400 7F04D8D0 46062000 */ add.s $f0, $f4, $f6 /* 082404 7F04D8D4 4614003C */ c.lt.s $f0, $f20 -/* 082408 7F04D8D8 00000000 */ nop +/* 082408 7F04D8D8 00000000 */ nop /* 08240C 7F04D8DC 45020021 */ bc1fl .L7F04D964 /* 082410 7F04D8E0 26520001 */ addiu $s2, $s2, 1 /* 082414 7F04D8E4 C7A8011C */ lwc1 $f8, 0x11c($sp) @@ -30565,7 +30793,7 @@ glabel bgTestHitOnObj .L7F04D964: /* 082494 7F04D964 24010004 */ li $at, 4 /* 082498 7F04D968 1641FF18 */ bne $s2, $at, .L7F04D5CC -/* 08249C 7F04D96C 00000000 */ nop +/* 08249C 7F04D96C 00000000 */ nop .L7F04D970: /* 0824A0 7F04D970 1000FE16 */ b .L7F04D1CC /* 0824A4 7F04D974 26310008 */ addiu $s1, $s1, 8 @@ -30744,8 +30972,8 @@ void sub_GAME_7F04DCB4(ObjectRecord* obj) prop = obj->prop; bbox = chrobjGetBboxFromObjectRecord(obj); - sub_GAME_7F0A0CCC(prop, FALSE); - sub_GAME_7F0A0CCC(prop, TRUE); + explosionClearBulletImpactRoomByFlag(prop, FALSE); + explosionClearBulletImpactRoomByFlag(prop, TRUE); sub_GAME_7F0A1DA0(&obj->runtime_pos.f[0], &obj->mtx.m[0][0], &obj->mtx.m[1][0], &obj->mtx.m[2][0], @@ -30778,7 +31006,7 @@ glabel sub_GAME_7F04DD68 /* 0828B8 7F04DD88 8F190008 */ lw $t9, 8($t8) /* 0828BC 7F04DD8C 8F220004 */ lw $v0, 4($t9) /* 0828C0 7F04DD90 AFA30078 */ sw $v1, 0x78($sp) -/* 0828C4 7F04DD94 0FC149BB */ jal sub_GAME_7F0526EC +/* 0828C4 7F04DD94 0FC149BB */ jal door7F0526EC /* 0828C8 7F04DD98 AFA20074 */ sw $v0, 0x74($sp) /* 0828CC 7F04DD9C 8FA20074 */ lw $v0, 0x74($sp) /* 0828D0 7F04DDA0 27A40060 */ addiu $a0, $sp, 0x60 @@ -30799,7 +31027,7 @@ glabel sub_GAME_7F04DD68 /* 08290C 7F04DDDC 0FC28768 */ jal sub_GAME_7F0A1DA0 /* 082910 7F04DDE0 E7B20024 */ swc1 $f18, 0x24($sp) /* 082914 7F04DDE4 8FA4007C */ lw $a0, 0x7c($sp) -/* 082918 7F04DDE8 0FC28333 */ jal sub_GAME_7F0A0CCC +/* 082918 7F04DDE8 0FC28333 */ jal explosionClearBulletImpactRoomByFlag /* 08291C 7F04DDEC 24050001 */ li $a1, 1 /* 082920 7F04DDF0 8FA40078 */ lw $a0, 0x78($sp) /* 082924 7F04DDF4 8C880008 */ lw $t0, 8($a0) @@ -30810,7 +31038,7 @@ glabel sub_GAME_7F04DD68 /* 082938 7F04DE08 8FBF002C */ lw $ra, 0x2c($sp) /* 08293C 7F04DE0C 27BD0080 */ addiu $sp, $sp, 0x80 /* 082940 7F04DE10 03E00008 */ jr $ra -/* 082944 7F04DE14 00000000 */ nop +/* 082944 7F04DE14 00000000 */ nop ) #endif @@ -30870,7 +31098,7 @@ glabel sub_GAME_7F04DE18 /* 0829F0 7F04DEC0 E7B20024 */ swc1 $f18, 0x24($sp) /* 0829F4 7F04DEC4 8FA40094 */ lw $a0, 0x94($sp) .L7F04DEC8: -/* 0829F8 7F04DEC8 0FC28333 */ jal sub_GAME_7F0A0CCC +/* 0829F8 7F04DEC8 0FC28333 */ jal explosionClearBulletImpactRoomByFlag /* 0829FC 7F04DECC 24050001 */ li $a1, 1 /* 082A00 7F04DED0 8E0A0008 */ lw $t2, 8($s0) /* 082A04 7F04DED4 02002025 */ move $a0, $s0 @@ -30882,7 +31110,7 @@ glabel sub_GAME_7F04DE18 /* 082A1C 7F04DEEC 8FB00030 */ lw $s0, 0x30($sp) /* 082A20 7F04DEF0 27BD0098 */ addiu $sp, $sp, 0x98 /* 082A24 7F04DEF4 03E00008 */ jr $ra -/* 082A28 7F04DEF8 00000000 */ nop +/* 082A28 7F04DEF8 00000000 */ nop ) #endif @@ -31069,7 +31297,7 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f s32 rhgun:1; s32 noammo:1; s32 inmotion:1; - s32 lhgun:1; + s32 lhgun:1; s32 nocontrol:1; s32 unk80000:1; s32 jbush:1; @@ -31077,7 +31305,7 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f s32 embedded:1; s32 normal:1; s32 unk8000:1; - s32 immobile:1; + s32 immobile:1; s32 dat:1; s32 uncollectable:1; s32 unk800:1; @@ -31085,7 +31313,7 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f s32 invincible:1; s32 embeddedin:1; s32 useguard:1; - s32 forcecollection:1; + s32 forcecollection:1; s32 posabs:1; s32 freestand:1; s32 roadblock:1; @@ -31093,7 +31321,7 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f s32 forcecollisions:1; s32 onground:1; s32 forcedonground:1; - s32 rotate90:1; + s32 rotate90:1; s32 upside_down:1; s32 rightside_up:1; s32 scalex:1; @@ -31127,11 +31355,11 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f } else { - + if (flags->unk800) { return; - } + } if (self->Head.type == PROPDEF_COLLECTABLE || PROPDEF_MAGAZINE) //switch(self->Head.type) @@ -31139,13 +31367,13 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f if (self->Head.type == PROPDEF_COLLECTABLE ) { weaponnum = ((WeaponObjRecord*)self)->weaponnum; - if ((weaponnum == ITEM_GRENADE) || - (weaponnum == ITEM_TIMEDMINE) || - (weaponnum == ITEM_REMOTEMINE) || - (weaponnum == ITEM_PROXIMITYMINE) || - (weaponnum == ITEM_56) || - (weaponnum == ITEM_57) || - (weaponnum == ITEM_BOMBCASE) || + if ((weaponnum == ITEM_GRENADE) || + (weaponnum == ITEM_TIMEDMINE) || + (weaponnum == ITEM_REMOTEMINE) || + (weaponnum == ITEM_PROXIMITYMINE) || + (weaponnum == ITEM_56) || + (weaponnum == ITEM_57) || + (weaponnum == ITEM_BOMBCASE) || (weaponnum == ITEM_PLASTIQUE)) { ((WeaponObjRecord*)self)->timer = 0; @@ -31155,14 +31383,14 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f else if (self->Head.type == PROPDEF_MAGAZINE) { type = ((AmmoCrateRecord*)self)->type; - if ((type == AMMO_GRENADE) || - (type == AMMO_ROCKETS) || - (type == AMMO_REMOTEMINE) || - (type == AMMO_PROXMINE) || - (type == AMMO_TIMEDMINE) || - (type == AMMO_GRENADEROUND) || - (type == AMMO_EXPLOSIVEPEN) || - (type == AMMO_BOMBCASE) || + if ((type == AMMO_GRENADE) || + (type == AMMO_ROCKETS) || + (type == AMMO_REMOTEMINE) || + (type == AMMO_PROXMINE) || + (type == AMMO_TIMEDMINE) || + (type == AMMO_GRENADEROUND) || + (type == AMMO_EXPLOSIVEPEN) || + (type == AMMO_BOMBCASE) || (type == AMMO_DYNAMITE)) { self->flags |= 0x10000000; @@ -31224,7 +31452,7 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f if (temp_v0_5) { //spawn magazine - AmmoCrateRecord NewMag = blank_07_object; //New_AmmoCrateRecord() + AmmoCrateRecord NewMag = blank_07_object; //New_AmmoCrateRecord() AmmoCrateRecord temp_a2 = NewMag; //temp_v0_5->obj = ammo->unk80; @@ -31236,7 +31464,7 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f if (objInitWithModelDef(&temp_a2, *(PitemZ_entries + (temp_a3 * 0xC)), &temp_a2, temp_a3) != 0) { //temp_a0 = temp_a2->unk14; - + modelSetScale(temp_a0, 1);//tempa2 chrpropReparent(temp_a2.base.prop, self->prop); } @@ -31286,7 +31514,7 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f // save_ptr_monitor_ani_code_to_obj_ani_slot(self + 0xF4, &D_80031EE8); // save_ptr_monitor_ani_code_to_obj_ani_slot(self + 0x168, &D_80031EE8); // save_ptr_monitor_ani_code_to_obj_ani_slot(self + 0x1DC, &D_80031EE8); - } + } } case 36: { @@ -31311,7 +31539,7 @@ void maybe_detonate_object(ObjectRecord* self, f32 damage, coord3d* pos, bool f if (objGetDestroyedLevel(self) == OBJECT_UNTOUCHED) { PropRecord *temp_a0_2 = self->prop->child; - + if (temp_a0_2 != 0) { do @@ -31410,7 +31638,7 @@ glabel maybe_detonate_object /* 082CFC 7F04E1CC 24050008 */ li $a1, 8 /* 082D00 7F04E1D0 24040007 */ li $a0, 7 /* 082D04 7F04E1D4 14A20015 */ bne $a1, $v0, .L7F04E22C -/* 082D08 7F04E1D8 00000000 */ nop +/* 082D08 7F04E1D8 00000000 */ nop /* 082D0C 7F04E1DC 82020080 */ lb $v0, 0x80($s0) /* 082D10 7F04E1E0 2401001A */ li $at, 26 /* 082D14 7F04E1E4 1041000F */ beq $v0, $at, .L7F04E224 @@ -31488,7 +31716,7 @@ glabel maybe_detonate_object /* 082E18 7F04E2E8 04410004 */ bgez $v0, .L7F04E2FC /* 082E1C 7F04E2EC 304A0003 */ andi $t2, $v0, 3 /* 082E20 7F04E2F0 11400002 */ beqz $t2, .L7F04E2FC -/* 082E24 7F04E2F4 00000000 */ nop +/* 082E24 7F04E2F4 00000000 */ nop /* 082E28 7F04E2F8 254AFFFC */ addiu $t2, $t2, -4 .L7F04E2FC: /* 082E2C 7F04E2FC 016A6023 */ subu $t4, $t3, $t2 @@ -31496,16 +31724,16 @@ glabel maybe_detonate_object /* 082E34 7F04E304 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 082E38 7F04E308 46808020 */ cvt.s.w $f0, $f16 /* 082E3C 7F04E30C 460C003C */ c.lt.s $f0, $f12 -/* 082E40 7F04E310 00000000 */ nop +/* 082E40 7F04E310 00000000 */ nop /* 082E44 7F04E314 45020004 */ bc1fl .L7F04E328 /* 082E48 7F04E318 44810000 */ mtc1 $at, $f0 /* 082E4C 7F04E31C 10000008 */ b .L7F04E340 /* 082E50 7F04E320 46000306 */ mov.s $f12, $f0 /* 082E54 7F04E324 44810000 */ mtc1 $at, $f0 .L7F04E328: -/* 082E58 7F04E328 00000000 */ nop +/* 082E58 7F04E328 00000000 */ nop /* 082E5C 7F04E32C 4600603C */ c.lt.s $f12, $f0 -/* 082E60 7F04E330 00000000 */ nop +/* 082E60 7F04E330 00000000 */ nop /* 082E64 7F04E334 45020003 */ bc1fl .L7F04E344 /* 082E68 7F04E338 C6120070 */ lwc1 $f18, 0x70($s0) /* 082E6C 7F04E33C 46000306 */ mov.s $f12, $f0 @@ -31525,7 +31753,7 @@ glabel maybe_detonate_object /* 082E94 7F04E364 C6040070 */ lwc1 $f4, 0x70($s0) /* 082E98 7F04E368 C6080074 */ lwc1 $f8, 0x74($s0) /* 082E9C 7F04E36C 4604403E */ c.le.s $f8, $f4 -/* 082EA0 7F04E370 00000000 */ nop +/* 082EA0 7F04E370 00000000 */ nop /* 082EA4 7F04E374 4502000D */ bc1fl .L7F04E3AC /* 082EA8 7F04E378 24010014 */ li $at, 20 /* 082EAC 7F04E37C 0FC1372D */ jal sub_GAME_7F04DCB4 @@ -31551,12 +31779,12 @@ glabel maybe_detonate_object /* 082EF0 7F04E3C0 54410060 */ bnel $v0, $at, .L7F04E544 /* 082EF4 7F04E3C4 92020003 */ lbu $v0, 3($s0) /* 082EF8 7F04E3C8 0C002914 */ jal randomGetNext -/* 082EFC 7F04E3CC 00000000 */ nop +/* 082EFC 7F04E3CC 00000000 */ nop /* 082F00 7F04E3D0 2401000D */ li $at, 13 /* 082F04 7F04E3D4 0041001B */ divu $zero, $v0, $at /* 082F08 7F04E3D8 00002010 */ mfhi $a0 /* 082F0C 7F04E3DC 00802825 */ move $a1, $a0 -/* 082F10 7F04E3E0 00000000 */ nop +/* 082F10 7F04E3E0 00000000 */ nop /* 082F14 7F04E3E4 00046880 */ sll $t5, $a0, 2 .L7F04E3E8: /* 082F18 7F04E3E8 020D1821 */ addu $v1, $s0, $t5 @@ -31576,7 +31804,7 @@ glabel maybe_detonate_object /* 082F50 7F04E420 8FA500C8 */ lw $a1, 0xc8($sp) /* 082F54 7F04E424 10400040 */ beqz $v0, .L7F04E528 /* 082F58 7F04E428 00403025 */ move $a2, $v0 -/* 082F5C 7F04E42C 3C198003 */ lui $t9, %hi(blank_07_object) +/* 082F5C 7F04E42C 3C198003 */ lui $t9, %hi(blank_07_object) /* 082F60 7F04E430 27A8003C */ addiu $t0, $sp, 0x3c /* 082F64 7F04E434 27392094 */ addiu $t9, %lo(blank_07_object) # addiu $t9, $t9, 0x2094 /* 082F68 7F04E438 94670080 */ lhu $a3, 0x80($v1) @@ -31664,7 +31892,7 @@ glabel maybe_detonate_object /* 083094 7F04E564 AE0B0008 */ sw $t3, 8($s0) /* 083098 7F04E568 24010001 */ li $at, 1 /* 08309C 7F04E56C 14410057 */ bne $v0, $at, .L7F04E6CC -/* 0830A0 7F04E570 00000000 */ nop +/* 0830A0 7F04E570 00000000 */ nop /* 0830A4 7F04E574 8E0A0008 */ lw $t2, 8($s0) /* 0830A8 7F04E578 3C011000 */ lui $at, 0x1000 /* 0830AC 7F04E57C 01416025 */ or $t4, $t2, $at @@ -31678,7 +31906,7 @@ glabel maybe_detonate_object /* 0830C8 7F04E598 02002025 */ move $a0, $s0 /* 0830CC 7F04E59C 24010001 */ li $at, 1 /* 0830D0 7F04E5A0 1441004A */ bne $v0, $at, .L7F04E6CC -/* 0830D4 7F04E5A4 00000000 */ nop +/* 0830D4 7F04E5A4 00000000 */ nop /* 0830D8 7F04E5A8 8E0D0008 */ lw $t5, 8($s0) /* 0830DC 7F04E5AC 3C011000 */ lui $at, 0x1000 /* 0830E0 7F04E5B0 01A17025 */ or $t6, $t5, $at @@ -31697,7 +31925,7 @@ glabel maybe_detonate_object /* 083110 7F04E5E0 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot /* 083114 7F04E5E4 24A51EE8 */ addiu $a1, %lo(monAnim33BlackSolid) # addiu $a1, $a1, 0x1ee8 /* 083118 7F04E5E8 10000038 */ b .L7F04E6CC -/* 08311C 7F04E5EC 00000000 */ nop +/* 08311C 7F04E5EC 00000000 */ nop /* 083120 7F04E5F0 2401000B */ li $at, 11 .L7F04E5F4: /* 083124 7F04E5F4 54410018 */ bnel $v0, $at, .L7F04E658 @@ -31723,7 +31951,7 @@ glabel maybe_detonate_object /* 083174 7F04E644 0FC12723 */ jal save_ptr_monitor_ani_code_to_obj_ani_slot /* 083178 7F04E648 260401DC */ addiu $a0, $s0, 0x1dc /* 08317C 7F04E64C 1000001F */ b .L7F04E6CC -/* 083180 7F04E650 00000000 */ nop +/* 083180 7F04E650 00000000 */ nop /* 083184 7F04E654 24010024 */ li $at, 36 .L7F04E658: /* 083188 7F04E658 5441000B */ bnel $v0, $at, .L7F04E688 @@ -31732,15 +31960,15 @@ glabel maybe_detonate_object /* 083194 7F04E664 02002025 */ move $a0, $s0 /* 083198 7F04E668 24010001 */ li $at, 1 /* 08319C 7F04E66C 14410017 */ bne $v0, $at, .L7F04E6CC -/* 0831A0 7F04E670 00000000 */ nop +/* 0831A0 7F04E670 00000000 */ nop /* 0831A4 7F04E674 0FC15799 */ jal init_trigger_toxic_gas_effect /* 0831A8 7F04E678 26040058 */ addiu $a0, $s0, 0x58 /* 0831AC 7F04E67C 10000013 */ b .L7F04E6CC -/* 0831B0 7F04E680 00000000 */ nop +/* 0831B0 7F04E680 00000000 */ nop /* 0831B4 7F04E684 24010015 */ li $at, 21 .L7F04E688: /* 0831B8 7F04E688 14410010 */ bne $v0, $at, .L7F04E6CC -/* 0831BC 7F04E68C 00000000 */ nop +/* 0831BC 7F04E68C 00000000 */ nop /* 0831C0 7F04E690 0FC0FFF0 */ jal objGetDestroyedLevel /* 0831C4 7F04E694 02002025 */ move $a0, $s0 /* 0831C8 7F04E698 5440000A */ bnezl $v0, .L7F04E6C4 @@ -31755,7 +31983,7 @@ glabel maybe_detonate_object /* 0831EC 7F04E6BC E6040084 */ swc1 $f4, 0x84($s0) /* 0831F0 7F04E6C0 44804000 */ mtc1 $zero, $f8 .L7F04E6C4: -/* 0831F4 7F04E6C4 00000000 */ nop +/* 0831F4 7F04E6C4 00000000 */ nop /* 0831F8 7F04E6C8 E6080084 */ swc1 $f8, 0x84($s0) .L7F04E6CC: /* 0831FC 7F04E6CC 0FC0FFF0 */ jal objGetDestroyedLevel @@ -31781,7 +32009,7 @@ glabel maybe_detonate_object /* 083240 7F04E710 8FB00018 */ lw $s0, 0x18($sp) /* 083244 7F04E714 27BD00E0 */ addiu $sp, $sp, 0xe0 /* 083248 7F04E718 03E00008 */ jr $ra -/* 08324C 7F04E71C 00000000 */ nop +/* 08324C 7F04E71C 00000000 */ nop ) #endif @@ -31846,7 +32074,7 @@ glabel sub_GAME_7F04E720 /* 0832FC 7F04E7CC 10410003 */ beq $v0, $at, .L7F04E7DC /* 083300 7F04E7D0 24010007 */ li $at, 7 /* 083304 7F04E7D4 14410019 */ bne $v0, $at, .L7F04E83C -/* 083308 7F04E7D8 00000000 */ nop +/* 083308 7F04E7D8 00000000 */ nop .L7F04E7DC: /* 08330C 7F04E7DC 2670000C */ addiu $s0, $s3, 0xc .L7F04E7E0: @@ -31870,7 +32098,7 @@ glabel sub_GAME_7F04E720 /* 083354 7F04E824 0FC1366C */ jal sub_GAME_7F04D9B0 /* 083358 7F04E828 02003825 */ move $a3, $s0 /* 08335C 7F04E82C 14400019 */ bnez $v0, .L7F04E894 -/* 083360 7F04E830 00000000 */ nop +/* 083360 7F04E830 00000000 */ nop /* 083364 7F04E834 10000017 */ b .L7F04E894 /* 083368 7F04E838 00009025 */ move $s2, $zero .L7F04E83C: @@ -31894,7 +32122,7 @@ glabel sub_GAME_7F04E720 /* 0833AC 7F04E87C 0FC1366C */ jal sub_GAME_7F04D9B0 /* 0833B0 7F04E880 02003825 */ move $a3, $s0 /* 0833B4 7F04E884 14400003 */ bnez $v0, .L7F04E894 -/* 0833B8 7F04E888 00000000 */ nop +/* 0833B8 7F04E888 00000000 */ nop .L7F04E88C: /* 0833BC 7F04E88C 5E40FFEC */ bgtzl $s2, .L7F04E840 /* 0833C0 7F04E890 02802025 */ move $a0, $s4 @@ -31939,7 +32167,7 @@ glabel sub_GAME_7F04E720 /* 083454 7F04E924 00001825 */ move $v1, $zero /* 083458 7F04E928 8EB90014 */ lw $t9, 0x14($s5) .L7F04E92C: -/* 08345C 7F04E92C 3C088004 */ lui $t0, %hi(skeleton_door) +/* 08345C 7F04E92C 3C088004 */ lui $t0, %hi(skeleton_door) /* 083460 7F04E930 2508A1DC */ addiu $t0, %lo(skeleton_door) # addiu $t0, $t0, -0x5e24 /* 083464 7F04E934 8F220008 */ lw $v0, 8($t9) /* 083468 7F04E938 8C490004 */ lw $t1, 4($v0) @@ -32123,12 +32351,12 @@ glabel sub_GAME_7F04EA68 /* 083728 7F04EBF8 24010017 */ li $at, 23 /* 08372C 7F04EBFC 8DA40018 */ lw $a0, 0x18($t5) /* 083730 7F04EC00 10810060 */ beq $a0, $at, .L7F04ED84 -/* 083734 7F04EC04 00000000 */ nop +/* 083734 7F04EC04 00000000 */ nop /* 083738 7F04EC08 8E0E004C */ lw $t6, 0x4c($s0) /* 08373C 7F04EC0C 55C00022 */ bnezl $t6, .L7F04EC98 /* 083740 7F04EC10 8602003A */ lh $v0, 0x3a($s0) /* 083744 7F04EC14 8E380014 */ lw $t8, 0x14($s1) -/* 083748 7F04EC18 3C0F8004 */ lui $t7, %hi(skeleton_door) +/* 083748 7F04EC18 3C0F8004 */ lui $t7, %hi(skeleton_door) /* 08374C 7F04EC1C 25EFA1DC */ addiu $t7, %lo(skeleton_door) # addiu $t7, $t7, -0x5e24 /* 083750 7F04EC20 8F190008 */ lw $t9, 8($t8) /* 083754 7F04EC24 8E080004 */ lw $t0, 4($s0) @@ -32155,7 +32383,7 @@ glabel sub_GAME_7F04EA68 /* 0837A4 7F04EC74 2605001C */ addiu $a1, $s0, 0x1c /* 0837A8 7F04EC78 24070001 */ li $a3, 1 /* 0837AC 7F04EC7C AFA30018 */ sw $v1, 0x18($sp) -/* 0837B0 7F04EC80 0FC28423 */ jal sub_GAME_7F0A108C +/* 0837B0 7F04EC80 0FC28423 */ jal explosionCreateBulletImpact /* 0837B4 7F04EC84 AFAE0014 */ sw $t6, 0x14($sp) /* 0837B8 7F04EC88 8FB80070 */ lw $t8, 0x70($sp) /* 0837BC 7F04EC8C 1000003D */ b .L7F04ED84 @@ -32166,7 +32394,7 @@ glabel sub_GAME_7F04EA68 /* 0837CC 7F04EC9C 3C0F8005 */ lui $t7, %hi(g_Textures) /* 0837D0 7F04ECA0 04410004 */ bgez $v0, .L7F04ECB4 /* 0837D4 7F04ECA4 0002C8C0 */ sll $t9, $v0, 3 -/* 0837D8 7F04ECA8 3C088005 */ lui $t0, %hi(D_8004E86C) +/* 0837D8 7F04ECA8 3C088005 */ lui $t0, %hi(D_8004E86C) /* 0837DC 7F04ECAC 10000008 */ b .L7F04ECD0 /* 0837E0 7F04ECB0 8D08E86C */ lw $t0, %lo(D_8004E86C)($t0) .L7F04ECB4: @@ -32183,7 +32411,7 @@ glabel sub_GAME_7F04EA68 /* 083808 7F04ECD8 A3A9004B */ sb $t1, 0x4b($sp) /* 08380C 7F04ECDC 8FA80050 */ lw $t0, 0x50($sp) /* 083810 7F04ECE0 8E2E0014 */ lw $t6, 0x14($s1) -/* 083814 7F04ECE4 3C188004 */ lui $t8, %hi(skeleton_door) +/* 083814 7F04ECE4 3C188004 */ lui $t8, %hi(skeleton_door) /* 083818 7F04ECE8 850D000A */ lh $t5, 0xa($t0) /* 08381C 7F04ECEC 8DC30008 */ lw $v1, 8($t6) /* 083820 7F04ECF0 2718A1DC */ addiu $t8, %lo(skeleton_door) # addiu $t8, $t8, -0x5e24 @@ -32192,7 +32420,7 @@ glabel sub_GAME_7F04EA68 /* 08382C 7F04ECFC 00005010 */ mfhi $t2 /* 083830 7F04ED00 83A9004B */ lb $t1, 0x4b($sp) /* 083834 7F04ED04 15A00002 */ bnez $t5, .L7F04ED10 -/* 083838 7F04ED08 00000000 */ nop +/* 083838 7F04ED08 00000000 */ nop /* 08383C 7F04ED0C 0007000D */ break 7 .L7F04ED10: /* 083840 7F04ED10 2605001C */ addiu $a1, $s0, 0x1c @@ -32203,7 +32431,7 @@ glabel sub_GAME_7F04EA68 /* 083854 7F04ED24 8DEB000C */ lw $t3, 0xc($t7) /* 083858 7F04ED28 132B0009 */ beq $t9, $t3, .L7F04ED50 .L7F04ED2C: -/* 08385C 7F04ED2C 3C0C8004 */ lui $t4, %hi(skeleton_cctv) +/* 08385C 7F04ED2C 3C0C8004 */ lui $t4, %hi(skeleton_cctv) /* 083860 7F04ED30 258CA05C */ addiu $t4, %lo(skeleton_cctv) # addiu $t4, $t4, -0x5fa4 /* 083864 7F04ED34 55840008 */ bnel $t4, $a0, .L7F04ED58 /* 083868 7F04ED38 8D0F0004 */ lw $t7, 4($t0) @@ -32223,13 +32451,13 @@ glabel sub_GAME_7F04EA68 /* 083898 7F04ED68 AFAB0010 */ sw $t3, 0x10($sp) /* 08389C 7F04ED6C 8E0C0040 */ lw $t4, 0x40($s0) /* 0838A0 7F04ED70 AFA90018 */ sw $t1, 0x18($sp) -/* 0838A4 7F04ED74 0FC28423 */ jal sub_GAME_7F0A108C +/* 0838A4 7F04ED74 0FC28423 */ jal explosionCreateBulletImpact /* 0838A8 7F04ED78 AFAC0014 */ sw $t4, 0x14($sp) /* 0838AC 7F04ED7C 8FAE0070 */ lw $t6, 0x70($sp) /* 0838B0 7F04ED80 8DC40018 */ lw $a0, 0x18($t6) .L7F04ED84: /* 0838B4 7F04ED84 0FC177E1 */ jal bondwalkItemGetDestructionAmount -/* 0838B8 7F04ED88 00000000 */ nop +/* 0838B8 7F04ED88 00000000 */ nop /* 0838BC 7F04ED8C 92220003 */ lbu $v0, 3($s1) /* 0838C0 7F04ED90 2401000D */ li $at, 13 /* 0838C4 7F04ED94 46000086 */ mov.s $f2, $f0 @@ -32238,24 +32466,24 @@ glabel sub_GAME_7F04EA68 /* 0838D0 7F04EDA0 C4300B24 */ lwc1 $f16, %lo(F_80030B24)($at) /* 0838D4 7F04EDA4 46100082 */ mul.s $f2, $f0, $f16 /* 0838D8 7F04EDA8 1000001B */ b .L7F04EE18 -/* 0838DC 7F04EDAC 00000000 */ nop +/* 0838DC 7F04EDAC 00000000 */ nop .L7F04EDB0: /* 0838E0 7F04EDB0 24010006 */ li $at, 6 /* 0838E4 7F04EDB4 14410018 */ bne $v0, $at, .L7F04EE18 -/* 0838E8 7F04EDB8 00000000 */ nop +/* 0838E8 7F04EDB8 00000000 */ nop /* 0838EC 7F04EDBC 8E2D0014 */ lw $t5, 0x14($s1) -/* 0838F0 7F04EDC0 3C188004 */ lui $t8, %hi(skeleton_cctv) +/* 0838F0 7F04EDC0 3C188004 */ lui $t8, %hi(skeleton_cctv) /* 0838F4 7F04EDC4 2718A05C */ addiu $t8, %lo(skeleton_cctv) # addiu $t8, $t8, -0x5fa4 /* 0838F8 7F04EDC8 8DA30008 */ lw $v1, 8($t5) /* 0838FC 7F04EDCC 8C6F0004 */ lw $t7, 4($v1) /* 083900 7F04EDD0 170F000D */ bne $t8, $t7, .L7F04EE08 -/* 083904 7F04EDD4 00000000 */ nop +/* 083904 7F04EDD4 00000000 */ nop /* 083908 7F04EDD8 8C6B0008 */ lw $t3, 8($v1) /* 08390C 7F04EDDC 8E190044 */ lw $t9, 0x44($s0) /* 083910 7F04EDE0 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 083914 7F04EDE4 8D6C0004 */ lw $t4, 4($t3) /* 083918 7F04EDE8 172C0007 */ bne $t9, $t4, .L7F04EE08 -/* 08391C 7F04EDEC 00000000 */ nop +/* 08391C 7F04EDEC 00000000 */ nop /* 083920 7F04EDF0 44812000 */ mtc1 $at, $f4 /* 083924 7F04EDF4 02202025 */ move $a0, $s1 /* 083928 7F04EDF8 46041082 */ mul.s $f2, $f2, $f4 @@ -32266,7 +32494,7 @@ glabel sub_GAME_7F04EA68 /* 083938 7F04EE08 3C018003 */ lui $at, %hi(F_80030B18) /* 08393C 7F04EE0C C4280B18 */ lwc1 $f8, %lo(F_80030B18)($at) /* 083940 7F04EE10 46081082 */ mul.s $f2, $f2, $f8 -/* 083944 7F04EE14 00000000 */ nop +/* 083944 7F04EE14 00000000 */ nop .L7F04EE18: /* 083948 7F04EE18 0FC26C54 */ jal get_cur_playernum /* 08394C 7F04EE1C E7A20044 */ swc1 $f2, 0x44($sp) @@ -32279,22 +32507,22 @@ glabel sub_GAME_7F04EA68 /* 083968 7F04EE38 0FC13833 */ jal chrobjMaybeDetonateObjectIfFlags /* 08396C 7F04EE3C 27A60060 */ addiu $a2, $sp, 0x60 /* 083970 7F04EE40 8E380014 */ lw $t8, 0x14($s1) -/* 083974 7F04EE44 3C0D8004 */ lui $t5, %hi(skeleton_door) +/* 083974 7F04EE44 3C0D8004 */ lui $t5, %hi(skeleton_door) /* 083978 7F04EE48 25ADA1DC */ addiu $t5, %lo(skeleton_door) # addiu $t5, $t5, -0x5e24 /* 08397C 7F04EE4C 8F0F0008 */ lw $t7, 8($t8) /* 083980 7F04EE50 8DEB0004 */ lw $t3, 4($t7) /* 083984 7F04EE54 15AB000D */ bne $t5, $t3, .L7F04EE8C -/* 083988 7F04EE58 00000000 */ nop +/* 083988 7F04EE58 00000000 */ nop /* 08398C 7F04EE5C 8E19004C */ lw $t9, 0x4c($s0) /* 083990 7F04EE60 1720000A */ bnez $t9, .L7F04EE8C -/* 083994 7F04EE64 00000000 */ nop +/* 083994 7F04EE64 00000000 */ nop /* 083998 7F04EE68 822C00BD */ lb $t4, 0xbd($s1) /* 08399C 7F04EE6C 258E0001 */ addiu $t6, $t4, 1 /* 0839A0 7F04EE70 A22E00BD */ sb $t6, 0xbd($s1) /* 0839A4 7F04EE74 823800BD */ lb $t8, 0xbd($s1) /* 0839A8 7F04EE78 2B010003 */ slti $at, $t8, 3 /* 0839AC 7F04EE7C 14200003 */ bnez $at, .L7F04EE8C -/* 0839B0 7F04EE80 00000000 */ nop +/* 0839B0 7F04EE80 00000000 */ nop /* 0839B4 7F04EE84 0FC1375A */ jal sub_GAME_7F04DD68 /* 0839B8 7F04EE88 02202025 */ move $a0, $s1 .L7F04EE8C: @@ -32379,7 +32607,7 @@ bool objTestForInteract(PropRecord* prop) if (((obj->type == PROP_TYPE_PLAYER) || (obj->flags & PROPFLAG_00080000) - || (obj->runtime_bitflags & (RUNTIMEBITFLAG_00000001 | RUNTIMEBITFLAG_00000002 | RUNTIMEBITFLAG_00000010)))) + || (obj->runtime_bitflags & (RUNTIMEBITFLAG_00000001 | RUNTIMEBITFLAG_00000002 | RUNTIMEBITFLAG_TAGGED)))) { if ((prop->flags & PROPFLAG_ONSCREEN) && (objIsHealthy(obj) != 0) @@ -32480,7 +32708,7 @@ void sub_GAME_7F04F218(PropRecord* prop, s32 arg1) { } else { - chr->accuracyrating = (u8) chr->accuracyrating | 0x20; + chr->accuracyrating = (u8) chr->accuracyrating | 0x20; } } @@ -32505,10 +32733,10 @@ void sub_GAME_7F04F244(PropRecord* prop, rect4f** arg1, s32* arg2, f32* arg3, f3 void append_text_picked_up(u8 *buffer,u8 * param2,u8 * param3) { - u8 *puVar1; - - puVar1 = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_00)); //Picked up - strcat(buffer,puVar1); + u8 *str; + + str = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_00_PICKEDUP)); //Picked up + strcat(buffer,str); return; } @@ -32519,13 +32747,13 @@ void append_text_picked_up(u8 *buffer,u8 * param2,u8 * param3) void append_text_ammo_amount_word(u8 *buffer, AMMOTYPE ammotype,u32 amount) { u8 *textfiletext; - + switch(ammotype) { case AMMO_9MM: case AMMO_9MM_2: case AMMO_RIFLE: case AMMO_PLASTIQUE: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_01)); //some + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_01_SOME)); //some strcat(buffer,textfiletext); break; case AMMO_SHOTGUN: @@ -32545,33 +32773,33 @@ void append_text_ammo_amount_word(u8 *buffer, AMMOTYPE ammotype,u32 amount) case AMMO_BUG: case AMMO_MICRO_CAMERA: if (amount == 1) { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_02)); //a + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_02_A)); //a strcat(buffer,textfiletext); } else { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_01)); //some + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_01_SOME)); //some strcat(buffer,textfiletext); } break; case AMMO_EXPLOSIVEPEN: case AMMO_BOMBCASE: if (amount == 1) { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_03)); //an + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_03_AN)); //an strcat(buffer,textfiletext); } else { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_01)); //some + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_01_SOME)); //some strcat(buffer,textfiletext); } break; case AMMO_GEKEY: case AMMO_TOKEN: if (amount == 1) { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_04)); //the + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_04_THE)); //the strcat(buffer,textfiletext); } else { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_01)); //some + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_01_SOME)); //some strcat(buffer,textfiletext); } } @@ -32584,23 +32812,23 @@ void apped_text_ammotype(u8 *buffer, AMMOTYPE ammotype, s32 amount) u8 *textfiletext; if (((ammotype == AMMO_9MM) || (ammotype == AMMO_9MM_2)) || (ammotype == AMMO_RIFLE)) { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_05)); //ammo + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_05_AMMO)); //ammo strcat(buffer,textfiletext); } else { if (ammotype == AMMO_KNIFE) { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_0F)); //throwing + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_0F_THROWING)); //throwing strcat(buffer,textfiletext); if (amount == 1) { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_10)); //knife + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_10_KNIFE)); //knife strcat(buffer,textfiletext); } else { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_11)); //knives + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_11_KNIVES)); //knives strcat(buffer,textfiletext); } } @@ -32610,15 +32838,15 @@ void apped_text_ammotype(u8 *buffer, AMMOTYPE ammotype, s32 amount) { if (amount == 1) { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_19)); //stick + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_19_STICK)); //stick strcat(buffer,textfiletext); } else { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_1A)); //sticks + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_1A_STICKS)); //sticks strcat(buffer,textfiletext); } - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_18)); //of dynamite + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_18_OFDYNAMITE)); //of dynamite strcat(buffer,textfiletext); } else @@ -32626,85 +32854,85 @@ void apped_text_ammotype(u8 *buffer, AMMOTYPE ammotype, s32 amount) switch(ammotype) { case AMMO_SHOTGUN: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_06)); //shotgun cartridge + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_06_SHOTGUNCARTRIDGE)); //shotgun cartridge strcat(buffer,textfiletext); break; case AMMO_MAGNUM: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_07)); //magnum bullet + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_07_MAGNUMBULLET)); //magnum bullet strcat(buffer,textfiletext); break; case AMMO_GGUN: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_08)); //golden bullet + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_08_GOLDENBULLET)); //golden bullet strcat(buffer,textfiletext); break; case AMMO_GRENADE: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_09)); //hand grenade + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_09_HANDGRENADE)); //hand grenade strcat(buffer,textfiletext); break; case AMMO_GRENADEROUND: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_0A)); //grenade round + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_0A_GRENADEROUND)); //grenade round strcat(buffer,textfiletext); break; case AMMO_ROCKETS: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_0B)); //rocket + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_0B_ROCKET)); //rocket strcat(buffer,textfiletext); break; case AMMO_REMOTEMINE: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_0C)); //remote mine + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_0C_REMOTEMINE)); //remote mine strcat(buffer,textfiletext); break; case AMMO_PROXMINE: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_0D)); //proximity mine + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_0D_PROXIMITYMINE)); //proximity mine strcat(buffer,textfiletext); break; case AMMO_TIMEDMINE: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_0E)); //timed mine + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_0E_TIMEDMINE)); //timed mine strcat(buffer,textfiletext); break; case AMMO_DARTS: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_13)); //dart + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_13_DART)); //dart strcat(buffer,textfiletext); break; case AMMO_EXPLOSIVEPEN: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_14)); //explosive pen + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_14_EXPLOSIVEPEN)); //explosive pen strcat(buffer,textfiletext); break; case AMMO_BOMBCASE: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_15)); //explosive case + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_15_EXPLOSIVECASE)); //explosive case strcat(buffer,textfiletext); break; case AMMO_FLARE: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_16)); //flare + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_16_FLARE)); //flare strcat(buffer,textfiletext); break; case AMMO_PITON: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_17)); //piton + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_17_PITON)); //piton strcat(buffer,textfiletext); break; case AMMO_BUG: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_1B)); //bug + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_1B_BUG)); //bug strcat(buffer,textfiletext); break; case AMMO_MICRO_CAMERA: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_1C)); //micro camera + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_1C_MICROCAMERA)); //micro camera strcat(buffer,textfiletext); break; case AMMO_GEKEY: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_1D)); //GoldenEye key + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_1D_GOLDENEYEKEY)); //GoldenEye key strcat(buffer,textfiletext); break; case AMMO_TOKEN: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_1E)); //token + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_1E_TOKEN)); //token strcat(buffer,textfiletext); break; case AMMO_PLASTIQUE: - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_1F)); //plastique + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_1F_PLASTIQUE)); //plastique strcat(buffer,textfiletext); break; } if (1 < amount) { - textfiletext = langGet(TEXT(LPROPOBJ,PROPOBJ_STR_12)); //s + textfiletext = langGet(getStringID(LPROPOBJ,PROPOBJ_STR_12_S)); //s strcat(buffer,textfiletext); } } @@ -32824,7 +33052,7 @@ void add_ammo_to_inventory(AMMOTYPE ammotype,int amount,int doplaysound,int dodi { int curammo; int maxammo; - + if (0 < amount) { curammo = check_cur_player_ammo_amount_in_inventory(ammotype); @@ -32974,7 +33202,7 @@ void generate_language_specific_text_for_weapon(u8 *finalstring, ITEM_IDS itemty if (getPlayerCount() < 3) { //Picked up - strcpy(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_00))); + strcpy(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_00_PICKEDUP))); } } @@ -32997,115 +33225,115 @@ void generate_language_specific_text_for_weapon(u8 *finalstring, ITEM_IDS itemty return; case ITEM_KNIFE: //a hunting knife. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_20))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_20_AHUNTINGKNIFE))); break; case ITEM_WPPK: //a PP7. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_21))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_21_APPK))); break; case ITEM_WPPKSIL: //a silenced PP7. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_22))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_22_ASILENCEDPPK))); break; case ITEM_TT33: //a DD44 Dostovei. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_23))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_23_ATT33))); break; case ITEM_SKORPION: //a Klobb. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_24))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_24_ASPKORPION))); break; case ITEM_AK47: //a KF7 Soviet. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_25))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_25_ANAK47))); break; case ITEM_UZI: //a ZMG (9mm). - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_26))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_26_ANUZI))); break; case ITEM_MP5K: //a D5K Deutsche. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_27))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_27_ANMP5K))); break; case ITEM_MP5KSIL: //a silenced D5K. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_28))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_28_ASILENCEDMP5))); break; case ITEM_SPECTRE: //a Phantom. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_29))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_29_ASPECTRE))); break; case ITEM_M16: //an AR33 assault rifle. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_2A))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_2A_ANM16))); break; case ITEM_FNP90: //an RC-P90. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_2B))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_2B_ANFNP90))); break; case ITEM_SHOTGUN: //a shotgun. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_2C))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_2C_ASHOTGUN))); break; case ITEM_AUTOSHOT: //an automatic shotgun. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_2D))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_2D_ANAUTOSHOTGUN))); break; case ITEM_SNIPERRIFLE: //a sniper rifle. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_2E))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_2E_ASNIPERRIFLE))); break; case ITEM_GRENADELAUNCH: //a grenade launcher. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_2F))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_2F_AGRENADELAUNCHER))); break; case ITEM_ROCKETLAUNCH: //a rocket launcher. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_30))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_30_AROCKETLAUNCHER))); break; case ITEM_RUGER: //a Cougar Magnum. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_31))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_31_ARUGERMAGNUM))); break; case ITEM_GOLDENGUN: //the Golden Gun. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_32))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_32_THEGOLDENGUN))); break; case ITEM_LASER: //a Moonraker laser. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_33))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_33_AMOOKRAKERLASER))); break; case ITEM_FLAREPISTOL: //a flare pistol. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_34))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_34_AFLAREPISTOL))); break; case ITEM_PITONGUN: //a piton gun. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_35))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_35_APITONGUN))); break; case ITEM_SILVERWPPK: //a silver PP7. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_36))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_36_ASILVERPPK))); break; case ITEM_GOLDWPPK: //a gold PP7. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_37))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_37_AGOLDPPK))); break; case ITEM_KEYCARD: //a keycard. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_38))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_38_AKEYCARD))); break; case ITEM_KEYYALE: //a yale key. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_39))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_39_AYALEKEY))); break; case ITEM_KEYBOLT: //a bolt key. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_3A))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_3A_ABOLTKEY))); break; default: //a new weapon. - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_3B))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_3B_ANEWWEAPON))); break; } @@ -33116,7 +33344,7 @@ void generate_language_specific_text_for_weapon(u8 *finalstring, ITEM_IDS itemty finalstring[strlen(finalstring) - 1] = '\0'; } //Picked up - strcat(finalstring, langGet(TEXT(LPROPOBJ,PROPOBJ_STR_00))); + strcat(finalstring, langGet(getStringID(LPROPOBJ,PROPOBJ_STR_00_PICKEDUP))); strcat(finalstring,"\n"); } @@ -33126,7 +33354,7 @@ void generate_language_specific_text_for_weapon(u8 *finalstring, ITEM_IDS itemty void display_text_for_weapon_in_lower_left_corner(ITEM_IDS weaponid) { char acStack100 [100]; - + generate_language_specific_text_for_weapon(acStack100,weaponid); HUDMESSAGEBOTTOM(acStack100); return; @@ -33275,7 +33503,7 @@ INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, bool showstring) //#5 { BodyArmourRecord *armour = propobj; char * text; - add_BONDdata_watch_armor(armour->Strength); + //add_BONDdata_watch_armor(armour->initialamount); sndPlaySfx(g_musicSfxBufferPtr, 0x51, 0); if (showstring) { @@ -33386,13 +33614,13 @@ glabel collect_or_interact_object /* 084D8C 7F05025C AFA40070 */ sw $a0, 0x70($sp) /* 084D90 7F050260 AFA50074 */ sw $a1, 0x74($sp) /* 084D94 7F050264 8C830004 */ lw $v1, 4($a0) -/* 084D98 7F050268 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) +/* 084D98 7F050268 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) /* 084D9C 7F05026C 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) /* 084DA0 7F050270 AFA3006C */ sw $v1, 0x6c($sp) -/* 084DA4 7F050274 3C198005 */ lui $t9, %hi(g_ClockTimer) +/* 084DA4 7F050274 3C198005 */ lui $t9, %hi(g_ClockTimer) /* 084DA8 7F050278 8DF800D8 */ lw $t8, 0xd8($t7) /* 084DAC 7F05027C 17000005 */ bnez $t8, .L7F050294 -/* 084DB0 7F050280 00000000 */ nop +/* 084DB0 7F050280 00000000 */ nop /* 084DB4 7F050284 8F398374 */ lw $t9, %lo(g_ClockTimer)($t9) /* 084DB8 7F050288 8FA8006C */ lw $t0, 0x6c($sp) /* 084DBC 7F05028C 57200004 */ bnezl $t9, .L7F0502A0 @@ -33410,7 +33638,7 @@ glabel collect_or_interact_object /* 084DE4 7F0502B4 002A0821 */ addu $at, $at, $t2 /* 084DE8 7F0502B8 8C2A322C */ lw $t2, %lo(object_interaction_table)($at) /* 084DEC 7F0502BC 01400008 */ jr $t2 -/* 084DF0 7F0502C0 00000000 */ nop +/* 084DF0 7F0502C0 00000000 */ nop interact_key_object: /* 084DF4 7F0502C4 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) /* 084DF8 7F0502C8 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) @@ -33419,7 +33647,7 @@ interact_key_object: /* 084E04 7F0502D4 00003025 */ move $a2, $zero /* 084E08 7F0502D8 8FAB0074 */ lw $t3, 0x74($sp) /* 084E0C 7F0502DC 1160000A */ beqz $t3, .L7F050308 -/* 084E10 7F0502E0 00000000 */ nop +/* 084E10 7F0502E0 00000000 */ nop /* 084E14 7F0502E4 0FC23657 */ jal bondinvGetActivatedTextObject /* 084E18 7F0502E8 8FA4006C */ lw $a0, 0x6c($sp) /* 084E1C 7F0502EC 14400004 */ bnez $v0, .L7F050300 @@ -33429,7 +33657,7 @@ interact_key_object: /* 084E2C 7F0502FC 00402025 */ move $a0, $v0 .L7F050300: /* 084E30 7F050300 0FC228F2 */ jal hudmsgBottomShow -/* 084E34 7F050304 00000000 */ nop +/* 084E34 7F050304 00000000 */ nop .L7F050308: /* 084E38 7F050308 100000DA */ b .L7F050674 /* 084E3C 7F05030C 24030004 */ li $v1, 4 @@ -33471,7 +33699,7 @@ interact_ammobox_object: /* 084EBC 7F05038C 46083282 */ mul.s $f10, $f6, $f8 /* 084EC0 7F050390 4600540D */ trunc.w.s $f16, $f10 /* 084EC4 7F050394 44058000 */ mfc1 $a1, $f16 -/* 084EC8 7F050398 00000000 */ nop +/* 084EC8 7F050398 00000000 */ nop .L7F05039C: /* 084ECC 7F05039C 00003025 */ move $a2, $zero /* 084ED0 7F0503A0 8FA70074 */ lw $a3, 0x74($sp) @@ -33516,7 +33744,7 @@ interact_weapon_object: /* 084F5C 7F05042C 8DCF0064 */ lw $t7, 0x64($t6) /* 084F60 7F050430 31F80400 */ andi $t8, $t7, 0x400 /* 084F64 7F050434 1300001B */ beqz $t8, .L7F0504A4 -/* 084F68 7F050438 00000000 */ nop +/* 084F68 7F050438 00000000 */ nop /* 084F6C 7F05043C 83280080 */ lb $t0, 0x80($t9) /* 084F70 7F050440 29010021 */ slti $at, $t0, 0x21 /* 084F74 7F050444 50200004 */ beql $at, $zero, .L7F050458 @@ -33532,7 +33760,7 @@ interact_weapon_object: /* 084F98 7F050468 10400005 */ beqz $v0, .L7F050480 /* 084F9C 7F05046C 00402025 */ move $a0, $v0 /* 084FA0 7F050470 0FC228F2 */ jal hudmsgBottomShow -/* 084FA4 7F050474 00000000 */ nop +/* 084FA4 7F050474 00000000 */ nop /* 084FA8 7F050478 10000005 */ b .L7F050490 /* 084FAC 7F05047C 240B0001 */ li $t3, 1 .L7F050480: @@ -33630,16 +33858,16 @@ interact_bodyarmor_object: /* 0850FC 7F0505CC 00003025 */ move $a2, $zero /* 085100 7F0505D0 8FAE0074 */ lw $t6, 0x74($sp) /* 085104 7F0505D4 11C00013 */ beqz $t6, .L7F050624 -/* 085108 7F0505D8 00000000 */ nop +/* 085108 7F0505D8 00000000 */ nop /* 08510C 7F0505DC 0FC23657 */ jal bondinvGetActivatedTextObject /* 085110 7F0505E0 8FA4006C */ lw $a0, 0x6c($sp) /* 085114 7F0505E4 1440000D */ bnez $v0, .L7F05061C /* 085118 7F0505E8 00402025 */ move $a0, $v0 /* 08511C 7F0505EC 0FC26919 */ jal getPlayerCount -/* 085120 7F0505F0 00000000 */ nop +/* 085120 7F0505F0 00000000 */ nop /* 085124 7F0505F4 28410003 */ slti $at, $v0, 3 /* 085128 7F0505F8 10200005 */ beqz $at, .L7F050610 -/* 08512C 7F0505FC 00000000 */ nop +/* 08512C 7F0505FC 00000000 */ nop /* 085130 7F050600 0FC30776 */ jal langGet /* 085134 7F050604 3404A43D */ li $a0, 42045 /* 085138 7F050608 10000004 */ b .L7F05061C @@ -33650,7 +33878,7 @@ interact_bodyarmor_object: /* 085148 7F050618 00402025 */ move $a0, $v0 .L7F05061C: /* 08514C 7F05061C 0FC228F2 */ jal hudmsgBottomShow -/* 085150 7F050620 00000000 */ nop +/* 085150 7F050620 00000000 */ nop .L7F050624: /* 085154 7F050624 10000013 */ b .L7F050674 /* 085158 7F050628 24030001 */ li $v1, 1 @@ -33673,7 +33901,7 @@ interact_default_object: /* 085194 7F050664 00402025 */ move $a0, $v0 .L7F050668: /* 085198 7F050668 0FC228F2 */ jal hudmsgBottomShow -/* 08519C 7F05066C 00000000 */ nop +/* 08519C 7F05066C 00000000 */ nop /* 0851A0 7F050670 24030004 */ li $v1, 4 .L7F050674: /* 0851A4 7F050674 24010001 */ li $at, 1 @@ -33683,7 +33911,7 @@ interact_default_object: /* 0851B0 7F050680 8F190064 */ lw $t9, 0x64($t8) /* 0851B4 7F050684 33280010 */ andi $t0, $t9, 0x10 /* 0851B8 7F050688 15000009 */ bnez $t0, .L7F0506B0 -/* 0851BC 7F05068C 00000000 */ nop +/* 0851BC 7F05068C 00000000 */ nop /* 0851C0 7F050690 93060002 */ lbu $a2, 2($t8) /* 0851C4 7F050694 03002025 */ move $a0, $t8 /* 0851C8 7F050698 00002825 */ move $a1, $zero @@ -33704,7 +33932,7 @@ interact_default_object: /* 0851FC 7F0506CC 8FB00018 */ lw $s0, 0x18($sp) /* 085200 7F0506D0 27BD0070 */ addiu $sp, $sp, 0x70 /* 085204 7F0506D4 03E00008 */ jr $ra -/* 085208 7F0506D8 00000000 */ nop +/* 085208 7F0506D8 00000000 */ nop ) #endif #ifdef VERSION_JP @@ -33766,13 +33994,13 @@ glabel collect_or_interact_object /* 084D8C 7F05025C AFA40070 */ sw $a0, 0x70($sp) /* 084D90 7F050260 AFA50074 */ sw $a1, 0x74($sp) /* 084D94 7F050264 8C830004 */ lw $v1, 4($a0) -/* 084D98 7F050268 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) +/* 084D98 7F050268 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) /* 084D9C 7F05026C 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) /* 084DA0 7F050270 AFA3006C */ sw $v1, 0x6c($sp) -/* 084DA4 7F050274 3C198005 */ lui $t9, %hi(g_ClockTimer) +/* 084DA4 7F050274 3C198005 */ lui $t9, %hi(g_ClockTimer) /* 084DA8 7F050278 8DF800D8 */ lw $t8, 0xd8($t7) /* 084DAC 7F05027C 17000005 */ bnez $t8, .L7F050294 -/* 084DB0 7F050280 00000000 */ nop +/* 084DB0 7F050280 00000000 */ nop /* 084DB4 7F050284 8F398374 */ lw $t9, %lo(g_ClockTimer)($t9) /* 084DB8 7F050288 8FA8006C */ lw $t0, 0x6c($sp) /* 084DBC 7F05028C 57200004 */ bnezl $t9, .L7F0502A0 @@ -33790,7 +34018,7 @@ glabel collect_or_interact_object /* 084DE4 7F0502B4 002A0821 */ addu $at, $at, $t2 /* 084DE8 7F0502B8 8C2A322C */ lw $t2, %lo(object_interaction_table)($at) /* 084DEC 7F0502BC 01400008 */ jr $t2 -/* 084DF0 7F0502C0 00000000 */ nop +/* 084DF0 7F0502C0 00000000 */ nop interact_key_object: /* 084DF4 7F0502C4 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) /* 084DF8 7F0502C8 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) @@ -33799,7 +34027,7 @@ interact_key_object: /* 084E04 7F0502D4 00003025 */ move $a2, $zero /* 084E08 7F0502D8 8FAB0074 */ lw $t3, 0x74($sp) /* 084E0C 7F0502DC 1160000A */ beqz $t3, .L7F050308 -/* 084E10 7F0502E0 00000000 */ nop +/* 084E10 7F0502E0 00000000 */ nop /* 084E14 7F0502E4 0FC23657 */ jal bondinvGetActivatedTextObject /* 084E18 7F0502E8 8FA4006C */ lw $a0, 0x6c($sp) /* 084E1C 7F0502EC 14400004 */ bnez $v0, .L7F050300 @@ -33809,7 +34037,7 @@ interact_key_object: /* 084E2C 7F0502FC 00402025 */ move $a0, $v0 .L7F050300: /* 084E30 7F050300 0FC228F2 */ jal jp_hudmsgBottomShow -/* 084E34 7F050304 00000000 */ nop +/* 084E34 7F050304 00000000 */ nop .L7F050308: /* 084E38 7F050308 100000DA */ b .L7F050674 /* 084E3C 7F05030C 24030004 */ li $v1, 4 @@ -33851,7 +34079,7 @@ interact_ammobox_object: /* 084EBC 7F05038C 46083282 */ mul.s $f10, $f6, $f8 /* 084EC0 7F050390 4600540D */ trunc.w.s $f16, $f10 /* 084EC4 7F050394 44058000 */ mfc1 $a1, $f16 -/* 084EC8 7F050398 00000000 */ nop +/* 084EC8 7F050398 00000000 */ nop .L7F05039C: /* 084ECC 7F05039C 00003025 */ move $a2, $zero /* 084ED0 7F0503A0 8FA70074 */ lw $a3, 0x74($sp) @@ -33896,7 +34124,7 @@ interact_weapon_object: /* 084F5C 7F05042C 8DCF0064 */ lw $t7, 0x64($t6) /* 084F60 7F050430 31F80400 */ andi $t8, $t7, 0x400 /* 084F64 7F050434 1300001B */ beqz $t8, .L7F0504A4 -/* 084F68 7F050438 00000000 */ nop +/* 084F68 7F050438 00000000 */ nop /* 084F6C 7F05043C 83280080 */ lb $t0, 0x80($t9) /* 084F70 7F050440 29010021 */ slti $at, $t0, 0x21 /* 084F74 7F050444 50200004 */ beql $at, $zero, .L7F050458 @@ -33912,7 +34140,7 @@ interact_weapon_object: /* 084F98 7F050468 10400005 */ beqz $v0, .L7F050480 /* 084F9C 7F05046C 00402025 */ move $a0, $v0 /* 084FA0 7F050470 0FC228F2 */ jal jp_hudmsgBottomShow -/* 084FA4 7F050474 00000000 */ nop +/* 084FA4 7F050474 00000000 */ nop /* 084FA8 7F050478 10000005 */ b .L7F050490 /* 084FAC 7F05047C 240B0001 */ li $t3, 1 .L7F050480: @@ -34010,16 +34238,16 @@ interact_bodyarmor_object: /* 0850FC 7F0505CC 00003025 */ move $a2, $zero /* 085100 7F0505D0 8FAE0074 */ lw $t6, 0x74($sp) /* 085104 7F0505D4 11C00013 */ beqz $t6, .L7F050624 -/* 085108 7F0505D8 00000000 */ nop +/* 085108 7F0505D8 00000000 */ nop /* 08510C 7F0505DC 0FC23657 */ jal bondinvGetActivatedTextObject /* 085110 7F0505E0 8FA4006C */ lw $a0, 0x6c($sp) /* 085114 7F0505E4 1440000D */ bnez $v0, .L7F05061C /* 085118 7F0505E8 00402025 */ move $a0, $v0 /* 08511C 7F0505EC 0FC26919 */ jal getPlayerCount -/* 085120 7F0505F0 00000000 */ nop +/* 085120 7F0505F0 00000000 */ nop /* 085124 7F0505F4 28410003 */ slti $at, $v0, 3 /* 085128 7F0505F8 10200005 */ beqz $at, .L7F050610 -/* 08512C 7F0505FC 00000000 */ nop +/* 08512C 7F0505FC 00000000 */ nop /* 085130 7F050600 0FC30776 */ jal langGet /* 085134 7F050604 3404A43D */ li $a0, 42045 /* 085138 7F050608 10000004 */ b .L7F05061C @@ -34030,7 +34258,7 @@ interact_bodyarmor_object: /* 085148 7F050618 00402025 */ move $a0, $v0 .L7F05061C: /* 08514C 7F05061C 0FC228F2 */ jal jp_hudmsgBottomShow -/* 085150 7F050620 00000000 */ nop +/* 085150 7F050620 00000000 */ nop .L7F050624: /* 085154 7F050624 10000013 */ b .L7F050674 /* 085158 7F050628 24030001 */ li $v1, 1 @@ -34053,7 +34281,7 @@ interact_default_object: /* 085194 7F050664 00402025 */ move $a0, $v0 .L7F050668: /* 085198 7F050668 0FC228F2 */ jal jp_hudmsgBottomShow -/* 08519C 7F05066C 00000000 */ nop +/* 08519C 7F05066C 00000000 */ nop /* 0851A0 7F050670 24030004 */ li $v1, 4 .L7F050674: /* 0851A4 7F050674 24010001 */ li $at, 1 @@ -34063,7 +34291,7 @@ interact_default_object: /* 0851B0 7F050680 8F190064 */ lw $t9, 0x64($t8) /* 0851B4 7F050684 33280010 */ andi $t0, $t9, 0x10 /* 0851B8 7F050688 15000009 */ bnez $t0, .L7F0506B0 -/* 0851BC 7F05068C 00000000 */ nop +/* 0851BC 7F05068C 00000000 */ nop /* 0851C0 7F050690 93060002 */ lbu $a2, 2($t8) /* 0851C4 7F050694 03002025 */ move $a0, $t8 /* 0851C8 7F050698 00002825 */ move $a1, $zero @@ -34084,7 +34312,7 @@ interact_default_object: /* 0851FC 7F0506CC 8FB00018 */ lw $s0, 0x18($sp) /* 085200 7F0506D0 27BD0070 */ addiu $sp, $sp, 0x70 /* 085204 7F0506D4 03E00008 */ jr $ra -/* 085208 7F0506D8 00000000 */ nop +/* 085208 7F0506D8 00000000 */ nop ) #endif @@ -34147,13 +34375,13 @@ glabel collect_or_interact_object /* 084D8C 7F05025C AFA40070 */ sw $a0, 0x70($sp) /* 084D90 7F050260 AFA50074 */ sw $a1, 0x74($sp) /* 084D94 7F050264 8C830004 */ lw $v1, 4($a0) -/* 084D98 7F050268 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) +/* 084D98 7F050268 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) /* 084D9C 7F05026C 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) /* 084DA0 7F050270 AFA3006C */ sw $v1, 0x6c($sp) -/* 084DA4 7F050274 3C198005 */ lui $t9, %hi(g_ClockTimer) +/* 084DA4 7F050274 3C198005 */ lui $t9, %hi(g_ClockTimer) /* 084DA8 7F050278 8DF800D8 */ lw $t8, 0xd8($t7) /* 084DAC 7F05027C 17000005 */ bnez $t8, .L7F050294 -/* 084DB0 7F050280 00000000 */ nop +/* 084DB0 7F050280 00000000 */ nop /* 084DB4 7F050284 8F398374 */ lw $t9, %lo(g_ClockTimer)($t9) /* 084DB8 7F050288 8FA8006C */ lw $t0, 0x6c($sp) /* 084DBC 7F05028C 57200004 */ bnezl $t9, .L7F0502A0 @@ -34171,7 +34399,7 @@ glabel collect_or_interact_object /* 084DE4 7F0502B4 002A0821 */ addu $at, $at, $t2 /* 084DE8 7F0502B8 8C2A322C */ lw $t2, %lo(object_interaction_table)($at) /* 084DEC 7F0502BC 01400008 */ jr $t2 -/* 084DF0 7F0502C0 00000000 */ nop +/* 084DF0 7F0502C0 00000000 */ nop interact_key_object: /* 084DF4 7F0502C4 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) /* 084DF8 7F0502C8 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) @@ -34180,7 +34408,7 @@ interact_key_object: /* 084E04 7F0502D4 00003025 */ move $a2, $zero /* 084E08 7F0502D8 8FAB0074 */ lw $t3, 0x74($sp) /* 084E0C 7F0502DC 1160000A */ beqz $t3, .L7F050308 -/* 084E10 7F0502E0 00000000 */ nop +/* 084E10 7F0502E0 00000000 */ nop /* 084E14 7F0502E4 0FC23657 */ jal bondinvGetActivatedTextObject /* 084E18 7F0502E8 8FA4006C */ lw $a0, 0x6c($sp) /* 084E1C 7F0502EC 14400004 */ bnez $v0, .L7F050300 @@ -34190,7 +34418,7 @@ interact_key_object: /* 084E2C 7F0502FC 00402025 */ move $a0, $v0 .L7F050300: /* 084E30 7F050300 0FC228F2 */ jal jp_hudmsgBottomShow -/* 084E34 7F050304 00000000 */ nop +/* 084E34 7F050304 00000000 */ nop .L7F050308: /* 084E38 7F050308 100000DA */ b .L7F050674 /* 084E3C 7F05030C 24030004 */ li $v1, 4 @@ -34232,7 +34460,7 @@ interact_ammobox_object: /* 084EBC 7F05038C 46083282 */ mul.s $f10, $f6, $f8 /* 084EC0 7F050390 4600540D */ trunc.w.s $f16, $f10 /* 084EC4 7F050394 44058000 */ mfc1 $a1, $f16 -/* 084EC8 7F050398 00000000 */ nop +/* 084EC8 7F050398 00000000 */ nop .L7F05039C: /* 084ECC 7F05039C 00003025 */ move $a2, $zero /* 084ED0 7F0503A0 8FA70074 */ lw $a3, 0x74($sp) @@ -34277,7 +34505,7 @@ interact_weapon_object: /* 084F5C 7F05042C 8DCF0064 */ lw $t7, 0x64($t6) /* 084F60 7F050430 31F80400 */ andi $t8, $t7, 0x400 /* 084F64 7F050434 1300001B */ beqz $t8, .L7F0504A4 -/* 084F68 7F050438 00000000 */ nop +/* 084F68 7F050438 00000000 */ nop /* 084F6C 7F05043C 83280080 */ lb $t0, 0x80($t9) /* 084F70 7F050440 29010021 */ slti $at, $t0, 0x21 /* 084F74 7F050444 50200004 */ beql $at, $zero, .L7F050458 @@ -34293,7 +34521,7 @@ interact_weapon_object: /* 084F98 7F050468 10400005 */ beqz $v0, .L7F050480 /* 084F9C 7F05046C 00402025 */ move $a0, $v0 /* 084FA0 7F050470 0FC228F2 */ jal jp_hudmsgBottomShow -/* 084FA4 7F050474 00000000 */ nop +/* 084FA4 7F050474 00000000 */ nop /* 084FA8 7F050478 10000005 */ b .L7F050490 /* 084FAC 7F05047C 240B0001 */ li $t3, 1 .L7F050480: @@ -34391,16 +34619,16 @@ interact_bodyarmor_object: /* 0850FC 7F0505CC 00003025 */ move $a2, $zero /* 085100 7F0505D0 8FAE0074 */ lw $t6, 0x74($sp) /* 085104 7F0505D4 11C00013 */ beqz $t6, .L7F050624 -/* 085108 7F0505D8 00000000 */ nop +/* 085108 7F0505D8 00000000 */ nop /* 08510C 7F0505DC 0FC23657 */ jal bondinvGetActivatedTextObject /* 085110 7F0505E0 8FA4006C */ lw $a0, 0x6c($sp) /* 085114 7F0505E4 1440000D */ bnez $v0, .L7F05061C /* 085118 7F0505E8 00402025 */ move $a0, $v0 /* 08511C 7F0505EC 0FC26919 */ jal getPlayerCount -/* 085120 7F0505F0 00000000 */ nop +/* 085120 7F0505F0 00000000 */ nop /* 085124 7F0505F4 28410003 */ slti $at, $v0, 3 /* 085128 7F0505F8 10200005 */ beqz $at, .L7F050610 -/* 08512C 7F0505FC 00000000 */ nop +/* 08512C 7F0505FC 00000000 */ nop /* 085130 7F050600 0FC30776 */ jal langGet /* 085134 7F050604 3404A43D */ li $a0, 42045 /* 085138 7F050608 10000004 */ b .L7F05061C @@ -34411,7 +34639,7 @@ interact_bodyarmor_object: /* 085148 7F050618 00402025 */ move $a0, $v0 .L7F05061C: /* 08514C 7F05061C 0FC228F2 */ jal jp_hudmsgBottomShow -/* 085150 7F050620 00000000 */ nop +/* 085150 7F050620 00000000 */ nop .L7F050624: /* 085154 7F050624 10000013 */ b .L7F050674 /* 085158 7F050628 24030001 */ li $v1, 1 @@ -34434,7 +34662,7 @@ interact_default_object: /* 085194 7F050664 00402025 */ move $a0, $v0 .L7F050668: /* 085198 7F050668 0FC228F2 */ jal jp_hudmsgBottomShow -/* 08519C 7F05066C 00000000 */ nop +/* 08519C 7F05066C 00000000 */ nop /* 0851A0 7F050670 24030004 */ li $v1, 4 .L7F050674: /* 0851A4 7F050674 24010001 */ li $at, 1 @@ -34444,7 +34672,7 @@ interact_default_object: /* 0851B0 7F050680 8F190064 */ lw $t9, 0x64($t8) /* 0851B4 7F050684 33280010 */ andi $t0, $t9, 0x10 /* 0851B8 7F050688 15000009 */ bnez $t0, .L7F0506B0 -/* 0851BC 7F05068C 00000000 */ nop +/* 0851BC 7F05068C 00000000 */ nop /* 0851C0 7F050690 93060002 */ lbu $a2, 2($t8) /* 0851C4 7F050694 03002025 */ move $a0, $t8 /* 0851C8 7F050698 00002825 */ move $a1, $zero @@ -34465,7 +34693,7 @@ interact_default_object: /* 0851FC 7F0506CC 8FB00018 */ lw $s0, 0x18($sp) /* 085200 7F0506D0 27BD0070 */ addiu $sp, $sp, 0x70 /* 085204 7F0506D4 03E00008 */ jr $ra -/* 085208 7F0506D8 00000000 */ nop +/* 085208 7F0506D8 00000000 */ nop ) #endif @@ -34825,19 +35053,19 @@ glabel object_collectability_routines .L7F050758: /* 085288 7F050758 314B0080 */ andi $t3, $t2, 0x80 /* 08528C 7F05075C 1160000A */ beqz $t3, .L7F050788 -/* 085290 7F050760 00000000 */ nop +/* 085290 7F050760 00000000 */ nop /* 085294 7F050764 8C82006C */ lw $v0, 0x6c($a0) /* 085298 7F050768 8C4C00BC */ lw $t4, 0xbc($v0) /* 08529C 7F05076C 19800006 */ blez $t4, .L7F050788 -/* 0852A0 7F050770 00000000 */ nop +/* 0852A0 7F050770 00000000 */ nop /* 0852A4 7F050774 8C4D0090 */ lw $t5, 0x90($v0) /* 0852A8 7F050778 15A00003 */ bnez $t5, .L7F050788 -/* 0852AC 7F05077C 00000000 */ nop +/* 0852AC 7F05077C 00000000 */ nop /* 0852B0 7F050780 10000167 */ b .L7F050D20 /* 0852B4 7F050784 00001025 */ move $v0, $zero .L7F050788: /* 0852B8 7F050788 0FC0F9EB */ jal objCanPickupFromSafe -/* 0852BC 7F05078C 00000000 */ nop +/* 0852BC 7F05078C 00000000 */ nop /* 0852C0 7F050790 14400003 */ bnez $v0, .L7F0507A0 /* 0852C4 7F050794 8FA50084 */ lw $a1, 0x84($sp) /* 0852C8 7F050798 10000161 */ b .L7F050D20 @@ -34858,7 +35086,7 @@ glabel object_collectability_routines .L7F0507D0: /* 085300 7F0507D0 846F0082 */ lh $t7, 0x82($v1) /* 085304 7F0507D4 05E10005 */ bgez $t7, .L7F0507EC -/* 085308 7F0507D8 00000000 */ nop +/* 085308 7F0507D8 00000000 */ nop /* 08530C 7F0507DC 8CB80064 */ lw $t8, 0x64($a1) /* 085310 7F0507E0 33190004 */ andi $t9, $t8, 4 /* 085314 7F0507E4 53200004 */ beql $t9, $zero, .L7F0507F8 @@ -34885,7 +35113,7 @@ glabel object_collectability_routines .L7F050830: /* 085360 7F050830 84690082 */ lh $t1, 0x82($v1) /* 085364 7F050834 05210005 */ bgez $t1, .L7F05084C -/* 085368 7F050838 00000000 */ nop +/* 085368 7F050838 00000000 */ nop /* 08536C 7F05083C 8CAA0064 */ lw $t2, 0x64($a1) /* 085370 7F050840 314B0004 */ andi $t3, $t2, 4 /* 085374 7F050844 51600004 */ beql $t3, $zero, .L7F050858 @@ -34896,11 +35124,11 @@ glabel object_collectability_routines /* 085384 7F050854 24010056 */ li $at, 86 .L7F050858: /* 085388 7F050858 14810007 */ bne $a0, $at, .L7F050878 -/* 08538C 7F05085C 00000000 */ nop +/* 08538C 7F05085C 00000000 */ nop /* 085390 7F050860 8CAC0064 */ lw $t4, 0x64($a1) /* 085394 7F050864 318D0080 */ andi $t5, $t4, 0x80 /* 085398 7F050868 11A00003 */ beqz $t5, .L7F050878 -/* 08539C 7F05086C 00000000 */ nop +/* 08539C 7F05086C 00000000 */ nop /* 0853A0 7F050870 1000012B */ b .L7F050D20 /* 0853A4 7F050874 00001025 */ move $v0, $zero .L7F050878: @@ -34924,13 +35152,13 @@ glabel object_collectability_routines /* 0853EC 7F0508BC 8FA30080 */ lw $v1, 0x80($sp) /* 0853F0 7F0508C0 00C2082A */ slt $at, $a2, $v0 /* 0853F4 7F0508C4 1420008A */ bnez $at, .L7F050AF0 -/* 0853F8 7F0508C8 00000000 */ nop +/* 0853F8 7F0508C8 00000000 */ nop /* 0853FC 7F0508CC 8C620084 */ lw $v0, 0x84($v1) /* 085400 7F0508D0 14400004 */ bnez $v0, .L7F0508E4 -/* 085404 7F0508D4 00000000 */ nop +/* 085404 7F0508D4 00000000 */ nop /* 085408 7F0508D8 806E0081 */ lb $t6, 0x81($v1) /* 08540C 7F0508DC 05C00015 */ bltz $t6, .L7F050934 -/* 085410 7F0508E0 00000000 */ nop +/* 085410 7F0508E0 00000000 */ nop .L7F0508E4: /* 085414 7F0508E4 50400005 */ beql $v0, $zero, .L7F0508FC /* 085418 7F0508E8 80650081 */ lb $a1, 0x81($v1) @@ -34950,9 +35178,9 @@ glabel object_collectability_routines /* 085448 7F050918 80640080 */ lb $a0, 0x80($v1) .L7F05091C: /* 08544C 7F05091C 0FC230E7 */ jal bondinvHasDualWeapon -/* 085450 7F050920 00000000 */ nop +/* 085450 7F050920 00000000 */ nop /* 085454 7F050924 10400072 */ beqz $v0, .L7F050AF0 -/* 085458 7F050928 00000000 */ nop +/* 085458 7F050928 00000000 */ nop /* 08545C 7F05092C 100000FC */ b .L7F050D20 /* 085460 7F050930 00001025 */ move $v0, $zero .L7F050934: @@ -34973,7 +35201,7 @@ glabel object_collectability_routines /* 085498 7F050968 8FA60038 */ lw $a2, 0x38($sp) /* 08549C 7F05096C 00C2082A */ slt $at, $a2, $v0 /* 0854A0 7F050970 1420005F */ bnez $at, .L7F050AF0 -/* 0854A4 7F050974 00000000 */ nop +/* 0854A4 7F050974 00000000 */ nop /* 0854A8 7F050978 100000E9 */ b .L7F050D20 /* 0854AC 7F05097C 00001025 */ move $v0, $zero .L7F050980: @@ -35025,7 +35253,7 @@ glabel object_collectability_routines .L7F050A24: /* 085554 7F050A24 8FAD006C */ lw $t5, 0x6c($sp) /* 085558 7F050A28 11A00031 */ beqz $t5, .L7F050AF0 -/* 08555C 7F050A2C 00000000 */ nop +/* 08555C 7F050A2C 00000000 */ nop /* 085560 7F050A30 100000BB */ b .L7F050D20 /* 085564 7F050A34 00001025 */ move $v0, $zero .L7F050A38: @@ -35040,19 +35268,19 @@ glabel object_collectability_routines /* 085588 7F050A58 24190001 */ li $t9, 1 /* 08558C 7F050A5C C7040084 */ lwc1 $f4, 0x84($t8) /* 085590 7F050A60 4600203E */ c.le.s $f4, $f0 -/* 085594 7F050A64 00000000 */ nop +/* 085594 7F050A64 00000000 */ nop /* 085598 7F050A68 45000003 */ bc1f .L7F050A78 -/* 08559C 7F050A6C 00000000 */ nop +/* 08559C 7F050A6C 00000000 */ nop /* 0855A0 7F050A70 1000001A */ b .L7F050ADC /* 0855A4 7F050A74 AFB9005C */ sw $t9, 0x5c($sp) .L7F050A78: /* 0855A8 7F050A78 0FC26919 */ jal getPlayerCount -/* 0855AC 7F050A7C 00000000 */ nop +/* 0855AC 7F050A7C 00000000 */ nop /* 0855B0 7F050A80 28410002 */ slti $at, $v0, 2 /* 0855B4 7F050A84 54200016 */ bnezl $at, .L7F050AE0 /* 0855B8 7F050A88 8FAB005C */ lw $t3, 0x5c($sp) /* 0855BC 7F050A8C 0FC051D6 */ jal get_scenario -/* 0855C0 7F050A90 00000000 */ nop +/* 0855C0 7F050A90 00000000 */ nop /* 0855C4 7F050A94 24010002 */ li $at, 2 /* 0855C8 7F050A98 14410008 */ bne $v0, $at, .L7F050ABC /* 0855CC 7F050A9C 00401825 */ move $v1, $v0 @@ -35068,7 +35296,7 @@ glabel object_collectability_routines /* 0855F0 7F050AC0 54610007 */ bnel $v1, $at, .L7F050AE0 /* 0855F4 7F050AC4 8FAB005C */ lw $t3, 0x5c($sp) /* 0855F8 7F050AC8 0FC233F0 */ jal bondinvHasGoldenGun -/* 0855FC 7F050ACC 00000000 */ nop +/* 0855FC 7F050ACC 00000000 */ nop /* 085600 7F050AD0 10400002 */ beqz $v0, .L7F050ADC /* 085604 7F050AD4 240A0001 */ li $t2, 1 /* 085608 7F050AD8 AFAA005C */ sw $t2, 0x5c($sp) @@ -35076,29 +35304,29 @@ glabel object_collectability_routines /* 08560C 7F050ADC 8FAB005C */ lw $t3, 0x5c($sp) .L7F050AE0: /* 085610 7F050AE0 11600003 */ beqz $t3, .L7F050AF0 -/* 085614 7F050AE4 00000000 */ nop +/* 085614 7F050AE4 00000000 */ nop /* 085618 7F050AE8 1000008D */ b .L7F050D20 /* 08561C 7F050AEC 00001025 */ move $v0, $zero .L7F050AF0: /* 085620 7F050AF0 0FC227C4 */ jal get_curplay_vertical_rotation_in_degrees -/* 085624 7F050AF4 00000000 */ nop +/* 085624 7F050AF4 00000000 */ nop /* 085628 7F050AF8 3C018005 */ lui $at, %hi(D_800532E0) /* 08562C 7F050AFC C42632E0 */ lwc1 $f6, %lo(D_800532E0)($at) -/* 085630 7F050B00 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) +/* 085630 7F050B00 3C0C8008 */ lui $t4, %hi(g_CurrentPlayer) /* 085634 7F050B04 4606003C */ c.lt.s $f0, $f6 -/* 085638 7F050B08 00000000 */ nop +/* 085638 7F050B08 00000000 */ nop /* 08563C 7F050B0C 45000007 */ bc1f .L7F050B2C -/* 085640 7F050B10 00000000 */ nop +/* 085640 7F050B10 00000000 */ nop /* 085644 7F050B14 8D8CA0B0 */ lw $t4, %lo(g_CurrentPlayer)($t4) /* 085648 7F050B18 8D8D1270 */ lw $t5, 0x1270($t4) /* 08564C 7F050B1C 05A10003 */ bgez $t5, .L7F050B2C -/* 085650 7F050B20 00000000 */ nop +/* 085650 7F050B20 00000000 */ nop /* 085654 7F050B24 1000007E */ b .L7F050D20 /* 085658 7F050B28 00001025 */ move $v0, $zero .L7F050B2C: /* 08565C 7F050B2C 0FC225E6 */ jal get_curplayer_positiondata -/* 085660 7F050B30 00000000 */ nop -/* 085664 7F050B34 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) +/* 085660 7F050B30 00000000 */ nop +/* 085664 7F050B34 3C0F8008 */ lui $t7, %hi(g_CurrentPlayer) /* 085668 7F050B38 8FAE0084 */ lw $t6, 0x84($sp) /* 08566C 7F050B3C 8DEFA0B0 */ lw $t7, %lo(g_CurrentPlayer)($t7) /* 085670 7F050B40 C44A0008 */ lwc1 $f10, 8($v0) @@ -35122,9 +35350,9 @@ glabel object_collectability_routines /* 0856B8 7F050B88 00001025 */ move $v0, $zero /* 0856BC 7F050B8C 460A4400 */ add.s $f16, $f8, $f10 /* 0856C0 7F050B90 4612803E */ c.le.s $f16, $f18 -/* 0856C4 7F050B94 00000000 */ nop +/* 0856C4 7F050B94 00000000 */ nop /* 0856C8 7F050B98 45000002 */ bc1f .L7F050BA4 -/* 0856CC 7F050B9C 00000000 */ nop +/* 0856CC 7F050B9C 00000000 */ nop /* 0856D0 7F050BA0 24020001 */ li $v0, 1 .L7F050BA4: /* 0856D4 7F050BA4 10400012 */ beqz $v0, .L7F050BF0 @@ -35133,9 +35361,9 @@ glabel object_collectability_routines /* 0856E0 7F050BB0 3C0143FA */ li $at, 0x43FA0000 # 500.000000 /* 0856E4 7F050BB4 00001025 */ move $v0, $zero /* 0856E8 7F050BB8 460C203E */ c.le.s $f4, $f12 -/* 0856EC 7F050BBC 00000000 */ nop +/* 0856EC 7F050BBC 00000000 */ nop /* 0856F0 7F050BC0 45000002 */ bc1f .L7F050BCC -/* 0856F4 7F050BC4 00000000 */ nop +/* 0856F4 7F050BC4 00000000 */ nop /* 0856F8 7F050BC8 24020001 */ li $v0, 1 .L7F050BCC: /* 0856FC 7F050BCC 10400008 */ beqz $v0, .L7F050BF0 @@ -35143,9 +35371,9 @@ glabel object_collectability_routines /* 085704 7F050BD4 44813000 */ mtc1 $at, $f6 /* 085708 7F050BD8 00003025 */ move $a2, $zero /* 08570C 7F050BDC 4606603E */ c.le.s $f12, $f6 -/* 085710 7F050BE0 00000000 */ nop +/* 085710 7F050BE0 00000000 */ nop /* 085714 7F050BE4 45000002 */ bc1f .L7F050BF0 -/* 085718 7F050BE8 00000000 */ nop +/* 085718 7F050BE8 00000000 */ nop /* 08571C 7F050BEC 24060001 */ li $a2, 1 .L7F050BF0: /* 085720 7F050BF0 10000021 */ b .L7F050C78 @@ -35159,9 +35387,9 @@ glabel object_collectability_routines /* 08573C 7F050C0C 00001025 */ move $v0, $zero /* 085740 7F050C10 460A4480 */ add.s $f18, $f8, $f10 /* 085744 7F050C14 4610903E */ c.le.s $f18, $f16 -/* 085748 7F050C18 00000000 */ nop +/* 085748 7F050C18 00000000 */ nop /* 08574C 7F050C1C 45000002 */ bc1f .L7F050C28 -/* 085750 7F050C20 00000000 */ nop +/* 085750 7F050C20 00000000 */ nop /* 085754 7F050C24 24020001 */ li $v0, 1 .L7F050C28: /* 085758 7F050C28 10400012 */ beqz $v0, .L7F050C74 @@ -35170,9 +35398,9 @@ glabel object_collectability_routines /* 085764 7F050C34 3C014348 */ li $at, 0x43480000 # 200.000000 /* 085768 7F050C38 00001025 */ move $v0, $zero /* 08576C 7F050C3C 460C203E */ c.le.s $f4, $f12 -/* 085770 7F050C40 00000000 */ nop +/* 085770 7F050C40 00000000 */ nop /* 085774 7F050C44 45000002 */ bc1f .L7F050C50 -/* 085778 7F050C48 00000000 */ nop +/* 085778 7F050C48 00000000 */ nop /* 08577C 7F050C4C 24020001 */ li $v0, 1 .L7F050C50: /* 085780 7F050C50 10400008 */ beqz $v0, .L7F050C74 @@ -35180,7 +35408,7 @@ glabel object_collectability_routines /* 085788 7F050C58 44813000 */ mtc1 $at, $f6 /* 08578C 7F050C5C 00003025 */ move $a2, $zero /* 085790 7F050C60 4606603E */ c.le.s $f12, $f6 -/* 085794 7F050C64 00000000 */ nop +/* 085794 7F050C64 00000000 */ nop /* 085798 7F050C68 45020003 */ bc1fl .L7F050C78 /* 08579C 7F050C6C 00C01825 */ move $v1, $a2 /* 0857A0 7F050C70 24060001 */ li $a2, 1 @@ -35220,7 +35448,7 @@ glabel object_collectability_routines /* 085820 7F050CF0 8FAD003C */ lw $t5, 0x3c($sp) /* 085824 7F050CF4 8DCF0014 */ lw $t7, 0x14($t6) /* 085828 7F050CF8 11AF0002 */ beq $t5, $t7, .L7F050D04 -/* 08582C 7F050CFC 00000000 */ nop +/* 08582C 7F050CFC 00000000 */ nop .L7F050D00: /* 085830 7F050D00 00001825 */ move $v1, $zero .L7F050D04: @@ -35236,7 +35464,7 @@ glabel object_collectability_routines .L7F050D24: /* 085854 7F050D24 27BD0088 */ addiu $sp, $sp, 0x88 /* 085858 7F050D28 03E00008 */ jr $ra -/* 08585C 7F050D2C 00000000 */ nop +/* 08585C 7F050D2C 00000000 */ nop ) #endif @@ -35289,19 +35517,19 @@ glabel object_collectability_routines .Ljp7F050B60: /* 0856D0 7F050B60 314B0080 */ andi $t3, $t2, 0x80 /* 0856D4 7F050B64 1160000A */ beqz $t3, .Ljp7F050B90 -/* 0856D8 7F050B68 00000000 */ nop +/* 0856D8 7F050B68 00000000 */ nop /* 0856DC 7F050B6C 8C82006C */ lw $v0, 0x6c($a0) /* 0856E0 7F050B70 8C4C00BC */ lw $t4, 0xbc($v0) /* 0856E4 7F050B74 19800006 */ blez $t4, .Ljp7F050B90 -/* 0856E8 7F050B78 00000000 */ nop +/* 0856E8 7F050B78 00000000 */ nop /* 0856EC 7F050B7C 8C4D0090 */ lw $t5, 0x90($v0) /* 0856F0 7F050B80 15A00003 */ bnez $t5, .Ljp7F050B90 -/* 0856F4 7F050B84 00000000 */ nop +/* 0856F4 7F050B84 00000000 */ nop /* 0856F8 7F050B88 100001A3 */ b .Ljp7F051218 /* 0856FC 7F050B8C 00001025 */ move $v0, $zero .Ljp7F050B90: /* 085700 7F050B90 0FC0FAAB */ jal objCanPickupFromSafe -/* 085704 7F050B94 00000000 */ nop +/* 085704 7F050B94 00000000 */ nop /* 085708 7F050B98 14400003 */ bnez $v0, .Ljp7F050BA8 /* 08570C 7F050B9C 8FA5008C */ lw $a1, 0x8c($sp) /* 085710 7F050BA0 1000019D */ b .Ljp7F051218 @@ -35322,7 +35550,7 @@ glabel object_collectability_routines .Ljp7F050BD8: /* 085748 7F050BD8 860F0082 */ lh $t7, 0x82($s0) /* 08574C 7F050BDC 05E10005 */ bgez $t7, .Ljp7F050BF4 -/* 085750 7F050BE0 00000000 */ nop +/* 085750 7F050BE0 00000000 */ nop /* 085754 7F050BE4 8CB80064 */ lw $t8, 0x64($a1) /* 085758 7F050BE8 33190004 */ andi $t9, $t8, 4 /* 08575C 7F050BEC 53200004 */ beql $t9, $zero, .Ljp7F050C00 @@ -35349,7 +35577,7 @@ glabel object_collectability_routines .Ljp7F050C38: /* 0857A8 7F050C38 86090082 */ lh $t1, 0x82($s0) /* 0857AC 7F050C3C 05210005 */ bgez $t1, .Ljp7F050C54 -/* 0857B0 7F050C40 00000000 */ nop +/* 0857B0 7F050C40 00000000 */ nop /* 0857B4 7F050C44 8CAA0064 */ lw $t2, 0x64($a1) /* 0857B8 7F050C48 314B0004 */ andi $t3, $t2, 4 /* 0857BC 7F050C4C 51600004 */ beql $t3, $zero, .Ljp7F050C60 @@ -35360,22 +35588,22 @@ glabel object_collectability_routines /* 0857CC 7F050C5C 24010056 */ li $at, 86 .Ljp7F050C60: /* 0857D0 7F050C60 14810007 */ bne $a0, $at, .Ljp7F050C80 -/* 0857D4 7F050C64 00000000 */ nop +/* 0857D4 7F050C64 00000000 */ nop /* 0857D8 7F050C68 8CAC0064 */ lw $t4, 0x64($a1) /* 0857DC 7F050C6C 318D0080 */ andi $t5, $t4, 0x80 /* 0857E0 7F050C70 11A00003 */ beqz $t5, .Ljp7F050C80 -/* 0857E4 7F050C74 00000000 */ nop +/* 0857E4 7F050C74 00000000 */ nop /* 0857E8 7F050C78 10000167 */ b .Ljp7F051218 /* 0857EC 7F050C7C 00001025 */ move $v0, $zero .Ljp7F050C80: /* 0857F0 7F050C80 0FC232E9 */ jal bondinvHasInvItem -/* 0857F4 7F050C84 00000000 */ nop +/* 0857F4 7F050C84 00000000 */ nop /* 0857F8 7F050C88 104000D9 */ beqz $v0, .Ljp7F050FF0 -/* 0857FC 7F050C8C 00000000 */ nop +/* 0857FC 7F050C8C 00000000 */ nop /* 085800 7F050C90 0FC1A686 */ jal get_ammo_type_for_weapon /* 085804 7F050C94 82040080 */ lb $a0, 0x80($s0) /* 085808 7F050C98 104000D5 */ beqz $v0, .Ljp7F050FF0 -/* 08580C 7F050C9C 00000000 */ nop +/* 08580C 7F050C9C 00000000 */ nop /* 085810 7F050CA0 0FC1A68F */ jal get_ammo_count_for_weapon /* 085814 7F050CA4 82040080 */ lb $a0, 0x80($s0) /* 085818 7F050CA8 82040080 */ lb $a0, 0x80($s0) @@ -35384,13 +35612,13 @@ glabel object_collectability_routines /* 085824 7F050CB4 8FA30040 */ lw $v1, 0x40($sp) /* 085828 7F050CB8 0062082A */ slt $at, $v1, $v0 /* 08582C 7F050CBC 142000CC */ bnez $at, .Ljp7F050FF0 -/* 085830 7F050CC0 00000000 */ nop +/* 085830 7F050CC0 00000000 */ nop /* 085834 7F050CC4 8E020084 */ lw $v0, 0x84($s0) /* 085838 7F050CC8 14400004 */ bnez $v0, .Ljp7F050CDC -/* 08583C 7F050CCC 00000000 */ nop +/* 08583C 7F050CCC 00000000 */ nop /* 085840 7F050CD0 820E0081 */ lb $t6, 0x81($s0) /* 085844 7F050CD4 05C00015 */ bltz $t6, .Ljp7F050D2C -/* 085848 7F050CD8 00000000 */ nop +/* 085848 7F050CD8 00000000 */ nop .Ljp7F050CDC: /* 08584C 7F050CDC 50400005 */ beql $v0, $zero, .Ljp7F050CF4 /* 085850 7F050CE0 82050081 */ lb $a1, 0x81($s0) @@ -35410,9 +35638,9 @@ glabel object_collectability_routines /* 085880 7F050D10 82040080 */ lb $a0, 0x80($s0) .Ljp7F050D14: /* 085884 7F050D14 0FC2330B */ jal bondinvHasDualWeapon -/* 085888 7F050D18 00000000 */ nop +/* 085888 7F050D18 00000000 */ nop /* 08588C 7F050D1C 104000B4 */ beqz $v0, .Ljp7F050FF0 -/* 085890 7F050D20 00000000 */ nop +/* 085890 7F050D20 00000000 */ nop /* 085894 7F050D24 1000013C */ b .Ljp7F051218 /* 085898 7F050D28 00001025 */ move $v0, $zero .Ljp7F050D2C: @@ -35431,7 +35659,7 @@ glabel object_collectability_routines /* 0858C8 7F050D58 8FA30040 */ lw $v1, 0x40($sp) /* 0858CC 7F050D5C 0062082A */ slt $at, $v1, $v0 /* 0858D0 7F050D60 142000A3 */ bnez $at, .Ljp7F050FF0 -/* 0858D4 7F050D64 00000000 */ nop +/* 0858D4 7F050D64 00000000 */ nop /* 0858D8 7F050D68 8E020080 */ lw $v0, 0x80($s0) /* 0858DC 7F050D6C 24010005 */ li $at, 5 /* 0858E0 7F050D70 54410007 */ bnel $v0, $at, .Ljp7F050D90 @@ -35439,7 +35667,7 @@ glabel object_collectability_routines /* 0858E8 7F050D78 0FC232E9 */ jal bondinvHasInvItem /* 0858EC 7F050D7C 2404001A */ li $a0, 26 /* 0858F0 7F050D80 1040009B */ beqz $v0, .Ljp7F050FF0 -/* 0858F4 7F050D84 00000000 */ nop +/* 0858F4 7F050D84 00000000 */ nop /* 0858F8 7F050D88 8E020080 */ lw $v0, 0x80($s0) /* 0858FC 7F050D8C 24010007 */ li $at, 7 .Ljp7F050D90: @@ -35448,7 +35676,7 @@ glabel object_collectability_routines /* 085908 7F050D98 0FC232E9 */ jal bondinvHasInvItem /* 08590C 7F050D9C 2404001D */ li $a0, 29 /* 085910 7F050DA0 10400093 */ beqz $v0, .Ljp7F050FF0 -/* 085914 7F050DA4 00000000 */ nop +/* 085914 7F050DA4 00000000 */ nop /* 085918 7F050DA8 8E020080 */ lw $v0, 0x80($s0) /* 08591C 7F050DAC 24010008 */ li $at, 8 .Ljp7F050DB0: @@ -35457,7 +35685,7 @@ glabel object_collectability_routines /* 085928 7F050DB8 0FC232E9 */ jal bondinvHasInvItem /* 08592C 7F050DBC 2404001C */ li $a0, 28 /* 085930 7F050DC0 1040008B */ beqz $v0, .Ljp7F050FF0 -/* 085934 7F050DC4 00000000 */ nop +/* 085934 7F050DC4 00000000 */ nop /* 085938 7F050DC8 8E020080 */ lw $v0, 0x80($s0) /* 08593C 7F050DCC 24010009 */ li $at, 9 .Ljp7F050DD0: @@ -35466,16 +35694,16 @@ glabel object_collectability_routines /* 085948 7F050DD8 0FC232E9 */ jal bondinvHasInvItem /* 08594C 7F050DDC 2404001B */ li $a0, 27 /* 085950 7F050DE0 10400083 */ beqz $v0, .Ljp7F050FF0 -/* 085954 7F050DE4 00000000 */ nop +/* 085954 7F050DE4 00000000 */ nop /* 085958 7F050DE8 8E020080 */ lw $v0, 0x80($s0) /* 08595C 7F050DEC 2401000A */ li $at, 10 .Ljp7F050DF0: /* 085960 7F050DF0 14410005 */ bne $v0, $at, .Ljp7F050E08 -/* 085964 7F050DF4 00000000 */ nop +/* 085964 7F050DF4 00000000 */ nop /* 085968 7F050DF8 0FC232E9 */ jal bondinvHasInvItem /* 08596C 7F050DFC 24040003 */ li $a0, 3 /* 085970 7F050E00 1040007B */ beqz $v0, .Ljp7F050FF0 -/* 085974 7F050E04 00000000 */ nop +/* 085974 7F050E04 00000000 */ nop .Ljp7F050E08: /* 085978 7F050E08 10000103 */ b .Ljp7F051218 /* 08597C 7F050E0C 00001025 */ move $v0, $zero @@ -35565,7 +35793,7 @@ glabel object_collectability_routines .Ljp7F050F30: /* 085AA0 7F050F30 8FAD0074 */ lw $t5, 0x74($sp) /* 085AA4 7F050F34 11A0002E */ beqz $t5, .Ljp7F050FF0 -/* 085AA8 7F050F38 00000000 */ nop +/* 085AA8 7F050F38 00000000 */ nop /* 085AAC 7F050F3C 100000B6 */ b .Ljp7F051218 /* 085AB0 7F050F40 00001025 */ move $v0, $zero .Ljp7F050F44: @@ -35578,24 +35806,24 @@ glabel object_collectability_routines /* 085ACC 7F050F5C C6040084 */ lwc1 $f4, 0x84($s0) /* 085AD0 7F050F60 240F0001 */ li $t7, 1 /* 085AD4 7F050F64 4600203E */ c.le.s $f4, $f0 -/* 085AD8 7F050F68 00000000 */ nop +/* 085AD8 7F050F68 00000000 */ nop /* 085ADC 7F050F6C 45000003 */ bc1f .Ljp7F050F7C -/* 085AE0 7F050F70 00000000 */ nop +/* 085AE0 7F050F70 00000000 */ nop /* 085AE4 7F050F74 10000019 */ b .Ljp7F050FDC /* 085AE8 7F050F78 AFAF0064 */ sw $t7, 0x64($sp) .Ljp7F050F7C: /* 085AEC 7F050F7C 0FC26C01 */ jal getPlayerCount -/* 085AF0 7F050F80 00000000 */ nop +/* 085AF0 7F050F80 00000000 */ nop /* 085AF4 7F050F84 28410002 */ slti $at, $v0, 2 /* 085AF8 7F050F88 54200015 */ bnezl $at, .Ljp7F050FE0 /* 085AFC 7F050F8C 8FA90064 */ lw $t1, 0x64($sp) /* 085B00 7F050F90 0FC05202 */ jal get_scenario -/* 085B04 7F050F94 00000000 */ nop +/* 085B04 7F050F94 00000000 */ nop /* 085B08 7F050F98 24010002 */ li $at, 2 /* 085B0C 7F050F9C 14410007 */ bne $v0, $at, .Ljp7F050FBC /* 085B10 7F050FA0 00408025 */ move $s0, $v0 /* 085B14 7F050FA4 0FC23639 */ jal bondinvIsAliveWithFlag -/* 085B18 7F050FA8 00000000 */ nop +/* 085B18 7F050FA8 00000000 */ nop /* 085B1C 7F050FAC 10400003 */ beqz $v0, .Ljp7F050FBC /* 085B20 7F050FB0 24180001 */ li $t8, 1 /* 085B24 7F050FB4 10000009 */ b .Ljp7F050FDC @@ -35605,7 +35833,7 @@ glabel object_collectability_routines /* 085B30 7F050FC0 56010007 */ bnel $s0, $at, .Ljp7F050FE0 /* 085B34 7F050FC4 8FA90064 */ lw $t1, 0x64($sp) /* 085B38 7F050FC8 0FC23649 */ jal bondinvHasGoldenGun -/* 085B3C 7F050FCC 00000000 */ nop +/* 085B3C 7F050FCC 00000000 */ nop /* 085B40 7F050FD0 10400002 */ beqz $v0, .Ljp7F050FDC /* 085B44 7F050FD4 24190001 */ li $t9, 1 /* 085B48 7F050FD8 AFB90064 */ sw $t9, 0x64($sp) @@ -35613,28 +35841,28 @@ glabel object_collectability_routines /* 085B4C 7F050FDC 8FA90064 */ lw $t1, 0x64($sp) .Ljp7F050FE0: /* 085B50 7F050FE0 11200003 */ beqz $t1, .Ljp7F050FF0 -/* 085B54 7F050FE4 00000000 */ nop +/* 085B54 7F050FE4 00000000 */ nop /* 085B58 7F050FE8 1000008B */ b .Ljp7F051218 /* 085B5C 7F050FEC 00001025 */ move $v0, $zero .Ljp7F050FF0: /* 085B60 7F050FF0 0FC22992 */ jal get_curplay_vertical_rotation_in_degrees -/* 085B64 7F050FF4 00000000 */ nop +/* 085B64 7F050FF4 00000000 */ nop /* 085B68 7F050FF8 3C018005 */ lui $at, %hi(D_800532E0) # $at, 0x8005 /* 085B6C 7F050FFC C4263310 */ lwc1 $f6, %lo(D_800532E0)($at) /* 085B70 7F051000 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8008 /* 085B74 7F051004 4606003C */ c.lt.s $f0, $f6 -/* 085B78 7F051008 00000000 */ nop +/* 085B78 7F051008 00000000 */ nop /* 085B7C 7F05100C 45000007 */ bc1f .Ljp7F05102C -/* 085B80 7F051010 00000000 */ nop +/* 085B80 7F051010 00000000 */ nop /* 085B84 7F051014 8D4AA120 */ lw $t2, %lo(g_CurrentPlayer)($t2) /* 085B88 7F051018 8D4B1270 */ lw $t3, 0x1270($t2) /* 085B8C 7F05101C 05610003 */ bgez $t3, .Ljp7F05102C -/* 085B90 7F051020 00000000 */ nop +/* 085B90 7F051020 00000000 */ nop /* 085B94 7F051024 1000007C */ b .Ljp7F051218 /* 085B98 7F051028 00001025 */ move $v0, $zero .Ljp7F05102C: /* 085B9C 7F05102C 0FC2279B */ jal get_curplayer_positiondata -/* 085BA0 7F051030 00000000 */ nop +/* 085BA0 7F051030 00000000 */ nop /* 085BA4 7F051034 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8008 /* 085BA8 7F051038 8FAC008C */ lw $t4, 0x8c($sp) /* 085BAC 7F05103C 8DADA120 */ lw $t5, %lo(g_CurrentPlayer)($t5) @@ -35659,9 +35887,9 @@ glabel object_collectability_routines /* 085BF8 7F051088 00001025 */ move $v0, $zero /* 085BFC 7F05108C 460A4400 */ add.s $f16, $f8, $f10 /* 085C00 7F051090 4612803E */ c.le.s $f16, $f18 -/* 085C04 7F051094 00000000 */ nop +/* 085C04 7F051094 00000000 */ nop /* 085C08 7F051098 45000002 */ bc1f .Ljp7F0510A4 -/* 085C0C 7F05109C 00000000 */ nop +/* 085C0C 7F05109C 00000000 */ nop /* 085C10 7F0510A0 24020001 */ li $v0, 1 .Ljp7F0510A4: /* 085C14 7F0510A4 10400012 */ beqz $v0, .Ljp7F0510F0 @@ -35670,9 +35898,9 @@ glabel object_collectability_routines /* 085C20 7F0510B0 3C0143FA */ li $at, 0x43FA0000 # 500.000000 /* 085C24 7F0510B4 00001025 */ move $v0, $zero /* 085C28 7F0510B8 460C203E */ c.le.s $f4, $f12 -/* 085C2C 7F0510BC 00000000 */ nop +/* 085C2C 7F0510BC 00000000 */ nop /* 085C30 7F0510C0 45000002 */ bc1f .Ljp7F0510CC -/* 085C34 7F0510C4 00000000 */ nop +/* 085C34 7F0510C4 00000000 */ nop /* 085C38 7F0510C8 24020001 */ li $v0, 1 .Ljp7F0510CC: /* 085C3C 7F0510CC 10400008 */ beqz $v0, .Ljp7F0510F0 @@ -35680,9 +35908,9 @@ glabel object_collectability_routines /* 085C44 7F0510D4 44813000 */ mtc1 $at, $f6 /* 085C48 7F0510D8 00001825 */ move $v1, $zero /* 085C4C 7F0510DC 4606603E */ c.le.s $f12, $f6 -/* 085C50 7F0510E0 00000000 */ nop +/* 085C50 7F0510E0 00000000 */ nop /* 085C54 7F0510E4 45000002 */ bc1f .Ljp7F0510F0 -/* 085C58 7F0510E8 00000000 */ nop +/* 085C58 7F0510E8 00000000 */ nop /* 085C5C 7F0510EC 24030001 */ li $v1, 1 .Ljp7F0510F0: /* 085C60 7F0510F0 10000021 */ b .Ljp7F051178 @@ -35696,9 +35924,9 @@ glabel object_collectability_routines /* 085C7C 7F05110C 00001025 */ move $v0, $zero /* 085C80 7F051110 460A4480 */ add.s $f18, $f8, $f10 /* 085C84 7F051114 4610903E */ c.le.s $f18, $f16 -/* 085C88 7F051118 00000000 */ nop +/* 085C88 7F051118 00000000 */ nop /* 085C8C 7F05111C 45000002 */ bc1f .Ljp7F051128 -/* 085C90 7F051120 00000000 */ nop +/* 085C90 7F051120 00000000 */ nop /* 085C94 7F051124 24020001 */ li $v0, 1 .Ljp7F051128: /* 085C98 7F051128 10400012 */ beqz $v0, .Ljp7F051174 @@ -35707,9 +35935,9 @@ glabel object_collectability_routines /* 085CA4 7F051134 3C014348 */ li $at, 0x43480000 # 200.000000 /* 085CA8 7F051138 00001025 */ move $v0, $zero /* 085CAC 7F05113C 460C203E */ c.le.s $f4, $f12 -/* 085CB0 7F051140 00000000 */ nop +/* 085CB0 7F051140 00000000 */ nop /* 085CB4 7F051144 45000002 */ bc1f .Ljp7F051150 -/* 085CB8 7F051148 00000000 */ nop +/* 085CB8 7F051148 00000000 */ nop /* 085CBC 7F05114C 24020001 */ li $v0, 1 .Ljp7F051150: /* 085CC0 7F051150 10400008 */ beqz $v0, .Ljp7F051174 @@ -35717,7 +35945,7 @@ glabel object_collectability_routines /* 085CC8 7F051158 44813000 */ mtc1 $at, $f6 /* 085CCC 7F05115C 00001825 */ move $v1, $zero /* 085CD0 7F051160 4606603E */ c.le.s $f12, $f6 -/* 085CD4 7F051164 00000000 */ nop +/* 085CD4 7F051164 00000000 */ nop /* 085CD8 7F051168 45020003 */ bc1fl .Ljp7F051178 /* 085CDC 7F05116C 00608025 */ move $s0, $v1 /* 085CE0 7F051170 24030001 */ li $v1, 1 @@ -35755,7 +35983,7 @@ glabel object_collectability_routines /* 085D58 7F0511E8 8FAB0044 */ lw $t3, 0x44($sp) /* 085D5C 7F0511EC 8D8D0014 */ lw $t5, 0x14($t4) /* 085D60 7F0511F0 116D0002 */ beq $t3, $t5, .Ljp7F0511FC -/* 085D64 7F0511F4 00000000 */ nop +/* 085D64 7F0511F4 00000000 */ nop .Ljp7F0511F8: /* 085D68 7F0511F8 00008025 */ move $s0, $zero .Ljp7F0511FC: @@ -35772,7 +36000,7 @@ glabel object_collectability_routines /* 085D8C 7F05121C 8FB00030 */ lw $s0, 0x30($sp) /* 085D90 7F051220 27BD0090 */ addiu $sp, $sp, 0x90 /* 085D94 7F051224 03E00008 */ jr $ra -/* 085D98 7F051228 00000000 */ nop +/* 085D98 7F051228 00000000 */ nop ) #endif @@ -35825,19 +36053,19 @@ glabel object_collectability_routines .Ljp7F050B60: /* 0856D0 7F050B60 314B0080 */ andi $t3, $t2, 0x80 /* 0856D4 7F050B64 1160000A */ beqz $t3, .Ljp7F050B90 -/* 0856D8 7F050B68 00000000 */ nop +/* 0856D8 7F050B68 00000000 */ nop /* 0856DC 7F050B6C 8C82006C */ lw $v0, 0x6c($a0) /* 0856E0 7F050B70 8C4C00BC */ lw $t4, 0xbc($v0) /* 0856E4 7F050B74 19800006 */ blez $t4, .Ljp7F050B90 -/* 0856E8 7F050B78 00000000 */ nop +/* 0856E8 7F050B78 00000000 */ nop /* 0856EC 7F050B7C 8C4D0090 */ lw $t5, 0x90($v0) /* 0856F0 7F050B80 15A00003 */ bnez $t5, .Ljp7F050B90 -/* 0856F4 7F050B84 00000000 */ nop +/* 0856F4 7F050B84 00000000 */ nop /* 0856F8 7F050B88 100001A3 */ b .Ljp7F051218 /* 0856FC 7F050B8C 00001025 */ move $v0, $zero .Ljp7F050B90: /* 085700 7F050B90 0FC0FAAB */ jal objCanPickupFromSafe -/* 085704 7F050B94 00000000 */ nop +/* 085704 7F050B94 00000000 */ nop /* 085708 7F050B98 14400003 */ bnez $v0, .Ljp7F050BA8 /* 08570C 7F050B9C 8FA5008C */ lw $a1, 0x8c($sp) /* 085710 7F050BA0 1000019D */ b .Ljp7F051218 @@ -35858,7 +36086,7 @@ glabel object_collectability_routines .Ljp7F050BD8: /* 085748 7F050BD8 860F0082 */ lh $t7, 0x82($s0) /* 08574C 7F050BDC 05E10005 */ bgez $t7, .Ljp7F050BF4 -/* 085750 7F050BE0 00000000 */ nop +/* 085750 7F050BE0 00000000 */ nop /* 085754 7F050BE4 8CB80064 */ lw $t8, 0x64($a1) /* 085758 7F050BE8 33190004 */ andi $t9, $t8, 4 /* 08575C 7F050BEC 53200004 */ beql $t9, $zero, .Ljp7F050C00 @@ -35885,7 +36113,7 @@ glabel object_collectability_routines .Ljp7F050C38: /* 0857A8 7F050C38 86090082 */ lh $t1, 0x82($s0) /* 0857AC 7F050C3C 05210005 */ bgez $t1, .Ljp7F050C54 -/* 0857B0 7F050C40 00000000 */ nop +/* 0857B0 7F050C40 00000000 */ nop /* 0857B4 7F050C44 8CAA0064 */ lw $t2, 0x64($a1) /* 0857B8 7F050C48 314B0004 */ andi $t3, $t2, 4 /* 0857BC 7F050C4C 51600004 */ beql $t3, $zero, .Ljp7F050C60 @@ -35896,22 +36124,22 @@ glabel object_collectability_routines /* 0857CC 7F050C5C 24010056 */ li $at, 86 .Ljp7F050C60: /* 0857D0 7F050C60 14810007 */ bne $a0, $at, .Ljp7F050C80 -/* 0857D4 7F050C64 00000000 */ nop +/* 0857D4 7F050C64 00000000 */ nop /* 0857D8 7F050C68 8CAC0064 */ lw $t4, 0x64($a1) /* 0857DC 7F050C6C 318D0080 */ andi $t5, $t4, 0x80 /* 0857E0 7F050C70 11A00003 */ beqz $t5, .Ljp7F050C80 -/* 0857E4 7F050C74 00000000 */ nop +/* 0857E4 7F050C74 00000000 */ nop /* 0857E8 7F050C78 10000167 */ b .Ljp7F051218 /* 0857EC 7F050C7C 00001025 */ move $v0, $zero .Ljp7F050C80: /* 0857F0 7F050C80 0FC232E9 */ jal bondinvHasInvItem -/* 0857F4 7F050C84 00000000 */ nop +/* 0857F4 7F050C84 00000000 */ nop /* 0857F8 7F050C88 104000D9 */ beqz $v0, .Ljp7F050FF0 -/* 0857FC 7F050C8C 00000000 */ nop +/* 0857FC 7F050C8C 00000000 */ nop /* 085800 7F050C90 0FC1A686 */ jal get_ammo_type_for_weapon /* 085804 7F050C94 82040080 */ lb $a0, 0x80($s0) /* 085808 7F050C98 104000D5 */ beqz $v0, .Ljp7F050FF0 -/* 08580C 7F050C9C 00000000 */ nop +/* 08580C 7F050C9C 00000000 */ nop /* 085810 7F050CA0 0FC1A68F */ jal get_ammo_count_for_weapon /* 085814 7F050CA4 82040080 */ lb $a0, 0x80($s0) /* 085818 7F050CA8 82040080 */ lb $a0, 0x80($s0) @@ -35920,13 +36148,13 @@ glabel object_collectability_routines /* 085824 7F050CB4 8FA30040 */ lw $v1, 0x40($sp) /* 085828 7F050CB8 0062082A */ slt $at, $v1, $v0 /* 08582C 7F050CBC 142000CC */ bnez $at, .Ljp7F050FF0 -/* 085830 7F050CC0 00000000 */ nop +/* 085830 7F050CC0 00000000 */ nop /* 085834 7F050CC4 8E020084 */ lw $v0, 0x84($s0) /* 085838 7F050CC8 14400004 */ bnez $v0, .Ljp7F050CDC -/* 08583C 7F050CCC 00000000 */ nop +/* 08583C 7F050CCC 00000000 */ nop /* 085840 7F050CD0 820E0081 */ lb $t6, 0x81($s0) /* 085844 7F050CD4 05C00015 */ bltz $t6, .Ljp7F050D2C -/* 085848 7F050CD8 00000000 */ nop +/* 085848 7F050CD8 00000000 */ nop .Ljp7F050CDC: /* 08584C 7F050CDC 50400005 */ beql $v0, $zero, .Ljp7F050CF4 /* 085850 7F050CE0 82050081 */ lb $a1, 0x81($s0) @@ -35946,9 +36174,9 @@ glabel object_collectability_routines /* 085880 7F050D10 82040080 */ lb $a0, 0x80($s0) .Ljp7F050D14: /* 085884 7F050D14 0FC2330B */ jal bondinvHasDualWeapon -/* 085888 7F050D18 00000000 */ nop +/* 085888 7F050D18 00000000 */ nop /* 08588C 7F050D1C 104000B4 */ beqz $v0, .Ljp7F050FF0 -/* 085890 7F050D20 00000000 */ nop +/* 085890 7F050D20 00000000 */ nop /* 085894 7F050D24 1000013C */ b .Ljp7F051218 /* 085898 7F050D28 00001025 */ move $v0, $zero .Ljp7F050D2C: @@ -35967,7 +36195,7 @@ glabel object_collectability_routines /* 0858C8 7F050D58 8FA30040 */ lw $v1, 0x40($sp) /* 0858CC 7F050D5C 0062082A */ slt $at, $v1, $v0 /* 0858D0 7F050D60 142000A3 */ bnez $at, .Ljp7F050FF0 -/* 0858D4 7F050D64 00000000 */ nop +/* 0858D4 7F050D64 00000000 */ nop /* 0858D8 7F050D68 8E020080 */ lw $v0, 0x80($s0) /* 0858DC 7F050D6C 24010005 */ li $at, 5 /* 0858E0 7F050D70 54410007 */ bnel $v0, $at, .Ljp7F050D90 @@ -35975,7 +36203,7 @@ glabel object_collectability_routines /* 0858E8 7F050D78 0FC232E9 */ jal bondinvHasInvItem /* 0858EC 7F050D7C 2404001A */ li $a0, 26 /* 0858F0 7F050D80 1040009B */ beqz $v0, .Ljp7F050FF0 -/* 0858F4 7F050D84 00000000 */ nop +/* 0858F4 7F050D84 00000000 */ nop /* 0858F8 7F050D88 8E020080 */ lw $v0, 0x80($s0) /* 0858FC 7F050D8C 24010007 */ li $at, 7 .Ljp7F050D90: @@ -35984,7 +36212,7 @@ glabel object_collectability_routines /* 085908 7F050D98 0FC232E9 */ jal bondinvHasInvItem /* 08590C 7F050D9C 2404001D */ li $a0, 29 /* 085910 7F050DA0 10400093 */ beqz $v0, .Ljp7F050FF0 -/* 085914 7F050DA4 00000000 */ nop +/* 085914 7F050DA4 00000000 */ nop /* 085918 7F050DA8 8E020080 */ lw $v0, 0x80($s0) /* 08591C 7F050DAC 24010008 */ li $at, 8 .Ljp7F050DB0: @@ -35993,7 +36221,7 @@ glabel object_collectability_routines /* 085928 7F050DB8 0FC232E9 */ jal bondinvHasInvItem /* 08592C 7F050DBC 2404001C */ li $a0, 28 /* 085930 7F050DC0 1040008B */ beqz $v0, .Ljp7F050FF0 -/* 085934 7F050DC4 00000000 */ nop +/* 085934 7F050DC4 00000000 */ nop /* 085938 7F050DC8 8E020080 */ lw $v0, 0x80($s0) /* 08593C 7F050DCC 24010009 */ li $at, 9 .Ljp7F050DD0: @@ -36002,16 +36230,16 @@ glabel object_collectability_routines /* 085948 7F050DD8 0FC232E9 */ jal bondinvHasInvItem /* 08594C 7F050DDC 2404001B */ li $a0, 27 /* 085950 7F050DE0 10400083 */ beqz $v0, .Ljp7F050FF0 -/* 085954 7F050DE4 00000000 */ nop +/* 085954 7F050DE4 00000000 */ nop /* 085958 7F050DE8 8E020080 */ lw $v0, 0x80($s0) /* 08595C 7F050DEC 2401000A */ li $at, 10 .Ljp7F050DF0: /* 085960 7F050DF0 14410005 */ bne $v0, $at, .Ljp7F050E08 -/* 085964 7F050DF4 00000000 */ nop +/* 085964 7F050DF4 00000000 */ nop /* 085968 7F050DF8 0FC232E9 */ jal bondinvHasInvItem /* 08596C 7F050DFC 24040003 */ li $a0, 3 /* 085970 7F050E00 1040007B */ beqz $v0, .Ljp7F050FF0 -/* 085974 7F050E04 00000000 */ nop +/* 085974 7F050E04 00000000 */ nop .Ljp7F050E08: /* 085978 7F050E08 10000103 */ b .Ljp7F051218 /* 08597C 7F050E0C 00001025 */ move $v0, $zero @@ -36101,7 +36329,7 @@ glabel object_collectability_routines .Ljp7F050F30: /* 085AA0 7F050F30 8FAD0074 */ lw $t5, 0x74($sp) /* 085AA4 7F050F34 11A0002E */ beqz $t5, .Ljp7F050FF0 -/* 085AA8 7F050F38 00000000 */ nop +/* 085AA8 7F050F38 00000000 */ nop /* 085AAC 7F050F3C 100000B6 */ b .Ljp7F051218 /* 085AB0 7F050F40 00001025 */ move $v0, $zero .Ljp7F050F44: @@ -36114,24 +36342,24 @@ glabel object_collectability_routines /* 085ACC 7F050F5C C6040084 */ lwc1 $f4, 0x84($s0) /* 085AD0 7F050F60 240F0001 */ li $t7, 1 /* 085AD4 7F050F64 4600203E */ c.le.s $f4, $f0 -/* 085AD8 7F050F68 00000000 */ nop +/* 085AD8 7F050F68 00000000 */ nop /* 085ADC 7F050F6C 45000003 */ bc1f .Ljp7F050F7C -/* 085AE0 7F050F70 00000000 */ nop +/* 085AE0 7F050F70 00000000 */ nop /* 085AE4 7F050F74 10000019 */ b .Ljp7F050FDC /* 085AE8 7F050F78 AFAF0064 */ sw $t7, 0x64($sp) .Ljp7F050F7C: /* 085AEC 7F050F7C 0FC26C01 */ jal getPlayerCount -/* 085AF0 7F050F80 00000000 */ nop +/* 085AF0 7F050F80 00000000 */ nop /* 085AF4 7F050F84 28410002 */ slti $at, $v0, 2 /* 085AF8 7F050F88 54200015 */ bnezl $at, .Ljp7F050FE0 /* 085AFC 7F050F8C 8FA90064 */ lw $t1, 0x64($sp) /* 085B00 7F050F90 0FC05202 */ jal get_scenario -/* 085B04 7F050F94 00000000 */ nop +/* 085B04 7F050F94 00000000 */ nop /* 085B08 7F050F98 24010002 */ li $at, 2 /* 085B0C 7F050F9C 14410007 */ bne $v0, $at, .Ljp7F050FBC /* 085B10 7F050FA0 00408025 */ move $s0, $v0 /* 085B14 7F050FA4 0FC23639 */ jal bondinvIsAliveWithFlag -/* 085B18 7F050FA8 00000000 */ nop +/* 085B18 7F050FA8 00000000 */ nop /* 085B1C 7F050FAC 10400003 */ beqz $v0, .Ljp7F050FBC /* 085B20 7F050FB0 24180001 */ li $t8, 1 /* 085B24 7F050FB4 10000009 */ b .Ljp7F050FDC @@ -36141,7 +36369,7 @@ glabel object_collectability_routines /* 085B30 7F050FC0 56010007 */ bnel $s0, $at, .Ljp7F050FE0 /* 085B34 7F050FC4 8FA90064 */ lw $t1, 0x64($sp) /* 085B38 7F050FC8 0FC23649 */ jal bondinvHasGoldenGun -/* 085B3C 7F050FCC 00000000 */ nop +/* 085B3C 7F050FCC 00000000 */ nop /* 085B40 7F050FD0 10400002 */ beqz $v0, .Ljp7F050FDC /* 085B44 7F050FD4 24190001 */ li $t9, 1 /* 085B48 7F050FD8 AFB90064 */ sw $t9, 0x64($sp) @@ -36149,28 +36377,28 @@ glabel object_collectability_routines /* 085B4C 7F050FDC 8FA90064 */ lw $t1, 0x64($sp) .Ljp7F050FE0: /* 085B50 7F050FE0 11200003 */ beqz $t1, .Ljp7F050FF0 -/* 085B54 7F050FE4 00000000 */ nop +/* 085B54 7F050FE4 00000000 */ nop /* 085B58 7F050FE8 1000008B */ b .Ljp7F051218 /* 085B5C 7F050FEC 00001025 */ move $v0, $zero .Ljp7F050FF0: /* 085B60 7F050FF0 0FC22992 */ jal get_curplay_vertical_rotation_in_degrees -/* 085B64 7F050FF4 00000000 */ nop +/* 085B64 7F050FF4 00000000 */ nop /* 085B68 7F050FF8 3C018005 */ lui $at, %hi(D_800532E0) # $at, 0x8005 /* 085B6C 7F050FFC C4263310 */ lwc1 $f6, %lo(D_800532E0)($at) /* 085B70 7F051000 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8008 /* 085B74 7F051004 4606003C */ c.lt.s $f0, $f6 -/* 085B78 7F051008 00000000 */ nop +/* 085B78 7F051008 00000000 */ nop /* 085B7C 7F05100C 45000007 */ bc1f .Ljp7F05102C -/* 085B80 7F051010 00000000 */ nop +/* 085B80 7F051010 00000000 */ nop /* 085B84 7F051014 8D4AA120 */ lw $t2, %lo(g_CurrentPlayer)($t2) /* 085B88 7F051018 8D4B1270 */ lw $t3, 0x1268($t2) /* 085B8C 7F05101C 05610003 */ bgez $t3, .Ljp7F05102C -/* 085B90 7F051020 00000000 */ nop +/* 085B90 7F051020 00000000 */ nop /* 085B94 7F051024 1000007C */ b .Ljp7F051218 /* 085B98 7F051028 00001025 */ move $v0, $zero .Ljp7F05102C: /* 085B9C 7F05102C 0FC2279B */ jal get_curplayer_positiondata -/* 085BA0 7F051030 00000000 */ nop +/* 085BA0 7F051030 00000000 */ nop /* 085BA4 7F051034 3C0D8008 */ lui $t5, %hi(g_CurrentPlayer) # $t5, 0x8008 /* 085BA8 7F051038 8FAC008C */ lw $t4, 0x8c($sp) /* 085BAC 7F05103C 8DADA120 */ lw $t5, %lo(g_CurrentPlayer)($t5) @@ -36195,9 +36423,9 @@ glabel object_collectability_routines /* 085BF8 7F051088 00001025 */ move $v0, $zero /* 085BFC 7F05108C 460A4400 */ add.s $f16, $f8, $f10 /* 085C00 7F051090 4612803E */ c.le.s $f16, $f18 -/* 085C04 7F051094 00000000 */ nop +/* 085C04 7F051094 00000000 */ nop /* 085C08 7F051098 45000002 */ bc1f .Ljp7F0510A4 -/* 085C0C 7F05109C 00000000 */ nop +/* 085C0C 7F05109C 00000000 */ nop /* 085C10 7F0510A0 24020001 */ li $v0, 1 .Ljp7F0510A4: /* 085C14 7F0510A4 10400012 */ beqz $v0, .Ljp7F0510F0 @@ -36206,9 +36434,9 @@ glabel object_collectability_routines /* 085C20 7F0510B0 3C0143FA */ li $at, 0x43FA0000 # 500.000000 /* 085C24 7F0510B4 00001025 */ move $v0, $zero /* 085C28 7F0510B8 460C203E */ c.le.s $f4, $f12 -/* 085C2C 7F0510BC 00000000 */ nop +/* 085C2C 7F0510BC 00000000 */ nop /* 085C30 7F0510C0 45000002 */ bc1f .Ljp7F0510CC -/* 085C34 7F0510C4 00000000 */ nop +/* 085C34 7F0510C4 00000000 */ nop /* 085C38 7F0510C8 24020001 */ li $v0, 1 .Ljp7F0510CC: /* 085C3C 7F0510CC 10400008 */ beqz $v0, .Ljp7F0510F0 @@ -36216,9 +36444,9 @@ glabel object_collectability_routines /* 085C44 7F0510D4 44813000 */ mtc1 $at, $f6 /* 085C48 7F0510D8 00001825 */ move $v1, $zero /* 085C4C 7F0510DC 4606603E */ c.le.s $f12, $f6 -/* 085C50 7F0510E0 00000000 */ nop +/* 085C50 7F0510E0 00000000 */ nop /* 085C54 7F0510E4 45000002 */ bc1f .Ljp7F0510F0 -/* 085C58 7F0510E8 00000000 */ nop +/* 085C58 7F0510E8 00000000 */ nop /* 085C5C 7F0510EC 24030001 */ li $v1, 1 .Ljp7F0510F0: /* 085C60 7F0510F0 10000021 */ b .Ljp7F051178 @@ -36232,9 +36460,9 @@ glabel object_collectability_routines /* 085C7C 7F05110C 00001025 */ move $v0, $zero /* 085C80 7F051110 460A4480 */ add.s $f18, $f8, $f10 /* 085C84 7F051114 4610903E */ c.le.s $f18, $f16 -/* 085C88 7F051118 00000000 */ nop +/* 085C88 7F051118 00000000 */ nop /* 085C8C 7F05111C 45000002 */ bc1f .Ljp7F051128 -/* 085C90 7F051120 00000000 */ nop +/* 085C90 7F051120 00000000 */ nop /* 085C94 7F051124 24020001 */ li $v0, 1 .Ljp7F051128: /* 085C98 7F051128 10400012 */ beqz $v0, .Ljp7F051174 @@ -36243,9 +36471,9 @@ glabel object_collectability_routines /* 085CA4 7F051134 3C014348 */ li $at, 0x43480000 # 200.000000 /* 085CA8 7F051138 00001025 */ move $v0, $zero /* 085CAC 7F05113C 460C203E */ c.le.s $f4, $f12 -/* 085CB0 7F051140 00000000 */ nop +/* 085CB0 7F051140 00000000 */ nop /* 085CB4 7F051144 45000002 */ bc1f .Ljp7F051150 -/* 085CB8 7F051148 00000000 */ nop +/* 085CB8 7F051148 00000000 */ nop /* 085CBC 7F05114C 24020001 */ li $v0, 1 .Ljp7F051150: /* 085CC0 7F051150 10400008 */ beqz $v0, .Ljp7F051174 @@ -36253,7 +36481,7 @@ glabel object_collectability_routines /* 085CC8 7F051158 44813000 */ mtc1 $at, $f6 /* 085CCC 7F05115C 00001825 */ move $v1, $zero /* 085CD0 7F051160 4606603E */ c.le.s $f12, $f6 -/* 085CD4 7F051164 00000000 */ nop +/* 085CD4 7F051164 00000000 */ nop /* 085CD8 7F051168 45020003 */ bc1fl .Ljp7F051178 /* 085CDC 7F05116C 00608025 */ move $s0, $v1 /* 085CE0 7F051170 24030001 */ li $v1, 1 @@ -36291,7 +36519,7 @@ glabel object_collectability_routines /* 085D58 7F0511E8 8FAB0044 */ lw $t3, 0x44($sp) /* 085D5C 7F0511EC 8D8D0014 */ lw $t5, 0x14($t4) /* 085D60 7F0511F0 116D0002 */ beq $t3, $t5, .Ljp7F0511FC -/* 085D64 7F0511F4 00000000 */ nop +/* 085D64 7F0511F4 00000000 */ nop .Ljp7F0511F8: /* 085D68 7F0511F8 00008025 */ move $s0, $zero .Ljp7F0511FC: @@ -36308,14 +36536,14 @@ glabel object_collectability_routines /* 085D8C 7F05121C 8FB00030 */ lw $s0, 0x30($sp) /* 085D90 7F051220 27BD0090 */ addiu $sp, $sp, 0x90 /* 085D94 7F051224 03E00008 */ jr $ra -/* 085D98 7F051228 00000000 */ nop +/* 085D98 7F051228 00000000 */ nop ) #endif #endif -bool sub_GAME_7F050D30(PropRecord *prop, coord3d *arg1, f32 *arg2, f32 *arg3) +bool sub_GAME_7F050D30(PropRecord *prop, coord3d *arg1, struct coord2d *arg2, struct coord2d *arg3) { if (prop->flags & PROPFLAG_ONSCREEN) { @@ -36329,13 +36557,13 @@ bool sub_GAME_7F050D30(PropRecord *prop, coord3d *arg1, f32 *arg2, f32 *arg3) arg1->x = matrix->m[3][0]; arg1->y = matrix->m[3][1]; - arg3[0] = 0; - arg3[1] = 0; + arg3->f[0] = 0; + arg3->f[1] = 0; - arg2[0] = 0; - arg2[1] = 0; + arg2->f[0] = 0; + arg2->f[1] = 0; - sub_GAME_7F03F90C(obj->model, &arg2[1], &arg2[0], &arg3[1], &arg3[0]); + sub_GAME_7F03F90C(obj->model, &arg2->f[1], &arg2->f[0], &arg3->f[1], &arg3->f[0]); return TRUE; } @@ -36448,13 +36676,13 @@ PropRecord *hatCreateForChr(ChrRecord *chr, s32 modelnum, u32 flags) modeldef = PitemZ_entries[modelnum].header; modelLoad(modelnum); - prop = propAllocate(); + prop = chrpropAllocate(); model = get_obj_instance_controller_for_header(modeldef); hat = hatCreate(prop == NULL, model == NULL, modeldef); if (prop == NULL) { - prop = propAllocate(); + prop = chrpropAllocate(); } if (model == NULL) @@ -36792,12 +37020,19 @@ void trigger_remote_mine_detonation(void) } +/** + * Get Key with ID from Prop (or child of prop) + * @param ID: ID of key + * @param prop: Prop to search + * @return: Key if found + * @RenameTo: objGetKeyIfExist +*/ KeyRecord *check_if_entry_is_collectable(s32 ID, PropRecord *prop) //#MATCH { KeyRecord * key; PropRecord *p; - if (prop->type == 4) + if (prop->type == PROPDEF_KEY) { key = prop->obj; if (ID == key->keyID) @@ -36818,14 +37053,22 @@ KeyRecord *check_if_entry_is_collectable(s32 ID, PropRecord *prop) //#MATCH } -ObjectRecord *weaponFindThrown(s32 ID) + + +/** + * Get Key if has been "dropped" + * @param KeyID: ID of Key to Find + * @return: Key if found and "Dropped" + * @RenameTo: objGetKeyIfDropped +*/ +KeyRecord *weaponFindThrown(s32 KeyID) //MATCH { - ObjectRecord *obj; - PropRecord * prop; + KeyRecord *obj; + PropRecord *prop; for (prop = get_ptr_obj_pos_list_current_entry(); prop; prop = prop->prev) { - obj = check_if_entry_is_collectable(ID, prop); + obj = check_if_entry_is_collectable(KeyID, prop); if (obj && (!(obj->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT))) { return obj; @@ -36843,6 +37086,10 @@ void add_obj_to_temp_proxmine_table(WeaponObjRecord* proxy) if (temp_mine_table[i] == NULL) { temp_mine_table[i] = proxy; + #ifdef DEBUG + assert(imodel != NULL) && (guard->hidden & 0x200)) + if ((guard->model != NULL) && (guard->hidden & CHRHIDDEN_BACKGROUND_AI)) { coord3d pos; chrlvGetPatrolPercentOrPosition(guard, &pos); @@ -36944,7 +37191,7 @@ PropRecord* complete_object_data_block_return_position_entry(WeaponObjRecord* ob } -PropRecord* sub_GAME_7F051DD8(s32* arg0, ModelFileHeader* arg1) +PropRecord* sub_GAME_7F051DD8(struct ObjectRecord* arg0, ModelFileHeader* arg1) { PropRecord* prop; @@ -36999,6 +37246,9 @@ bool chrEquipWeapon(WeaponObjRecord *wep, ChrRecord *chr) } else { + #ifdef DEBUG + osSyncPrintf("attempted multiple attach!!!\n"); + #endif return FALSE; } } @@ -37046,7 +37296,7 @@ void sub_GAME_7F052030(WeaponObjRecord* arg0, ChrRecord* arg1) /** * @param arg0: index into PitemZ_entries, which is enum PROP * @param arg1: object_weapon.gun_pickup value - * + * * Address 0x7F05206C. */ WeaponObjRecord blank_08_object_preset_1 = { @@ -37101,7 +37351,7 @@ WeaponObjRecord *create_new_item_instance_of_model(s32 modelnum, ITEM_IDS weapon itemModel = PitemZ_entries[modelnum]; modelLoad(); - lastObj = propAllocate(); + lastObj = chrpropAllocate(); ObjInst = get_obj_instance_controller_for_header(itemModel); isObjInstAvailable = ObjInst == 0; ObjInst = ObjInst; @@ -37111,7 +37361,7 @@ WeaponObjRecord *create_new_item_instance_of_model(s32 modelnum, ITEM_IDS weapon if (lastObj == 0) { ObjInst = ObjInst; - lastObj = propAllocate(); + lastObj = chrpropAllocate(); } ObjInst = ObjInst; if (ObjInst == 0) @@ -37168,7 +37418,7 @@ WeaponObjRecord *create_new_item_instance_of_model(s32 modelnum, ITEM_IDS weapon } return NewGun; // itemModel = PitemZ_entries[arg0].header; - + // (result)->unk80 = (s8) arg1; // should be object_weapon.gun_pickup } @@ -37219,8 +37469,8 @@ glabel create_new_item_instance_of_model /* 086BC8 7F052098 AFA400B8 */ sw $a0, 0xb8($sp) /* 086BCC 7F05209C 0FC15B0E */ jal modelLoad /* 086BD0 7F0520A0 AFAF00B4 */ sw $t7, 0xb4($sp) -/* 086BD4 7F0520A4 0FC0E90C */ jal propAllocate -/* 086BD8 7F0520A8 00000000 */ nop +/* 086BD4 7F0520A4 0FC0E90C */ jal chrpropAllocate +/* 086BD8 7F0520A8 00000000 */ nop /* 086BDC 7F0520AC 00408025 */ move $s0, $v0 /* 086BE0 7F0520B0 0FC1B025 */ jal get_obj_instance_controller_for_header /* 086BE4 7F0520B4 8FA400B4 */ lw $a0, 0xb4($sp) @@ -37232,24 +37482,24 @@ glabel create_new_item_instance_of_model /* 086BFC 7F0520CC 8FA700AC */ lw $a3, 0xac($sp) /* 086C00 7F0520D0 16000005 */ bnez $s0, .L7F0520E8 /* 086C04 7F0520D4 00408825 */ move $s1, $v0 -/* 086C08 7F0520D8 0FC0E90C */ jal propAllocate +/* 086C08 7F0520D8 0FC0E90C */ jal chrpropAllocate /* 086C0C 7F0520DC AFA700AC */ sw $a3, 0xac($sp) /* 086C10 7F0520E0 8FA700AC */ lw $a3, 0xac($sp) /* 086C14 7F0520E4 00408025 */ move $s0, $v0 .L7F0520E8: /* 086C18 7F0520E8 14E00004 */ bnez $a3, .L7F0520FC -/* 086C1C 7F0520EC 00000000 */ nop +/* 086C1C 7F0520EC 00000000 */ nop /* 086C20 7F0520F0 0FC1B025 */ jal get_obj_instance_controller_for_header /* 086C24 7F0520F4 8FA400B4 */ lw $a0, 0xb4($sp) /* 086C28 7F0520F8 00403825 */ move $a3, $v0 .L7F0520FC: /* 086C2C 7F0520FC 1220002C */ beqz $s1, .L7F0521B0 -/* 086C30 7F052100 00000000 */ nop +/* 086C30 7F052100 00000000 */ nop /* 086C34 7F052104 1200002A */ beqz $s0, .L7F0521B0 -/* 086C38 7F052108 00000000 */ nop +/* 086C38 7F052108 00000000 */ nop /* 086C3C 7F05210C 10E00028 */ beqz $a3, .L7F0521B0 /* 086C40 7F052110 27A20020 */ addiu $v0, $sp, 0x20 -/* 086C44 7F052114 3C188003 */ lui $t8, %hi(blank_08_object_preset_1) +/* 086C44 7F052114 3C188003 */ lui $t8, %hi(blank_08_object_preset_1) /* 086C48 7F052118 27182194 */ addiu $t8, %lo(blank_08_object_preset_1) # addiu $t8, $t8, 0x2194 /* 086C4C 7F05211C 27080084 */ addiu $t0, $t8, 0x84 /* 086C50 7F052120 00404825 */ move $t1, $v0 @@ -37313,7 +37563,7 @@ glabel create_new_item_instance_of_model /** - * Set removed flag on hand + * Set removed flag on hand */ void chrSetWeaponFlag4(ChrRecord *chr, GUNHAND hand) //#MATCH { @@ -37323,10 +37573,6 @@ void chrSetWeaponFlag4(ChrRecord *chr, GUNHAND hand) //#MATCH } } - - - -#ifdef NONMATCHING WeaponObjRecord blank_08_object_preset_4001 = { 0x0100, //extrascale 0x0, //state @@ -37356,43 +37602,52 @@ WeaponObjRecord blank_08_object_preset_4001 = { -1, //timer NULL //dualweapon }; -//https://decomp.me/scratch/pEmVO -PropRecord *something_with_generating_object(ChrRecord *self, s32 PropID, ITEM_IDS ItemID, s32 flags, WeaponObjRecord *Weapon, ItemModelFileRecord *PropItem) //#90.8% + +/** + * NTSC address 0x7F052214. +*/ +PropRecord *something_with_generating_object(ChrRecord *self, s32 propid, ITEM_IDS itemid, s32 flags, WeaponObjRecord *weapon, ItemModelFileRecord *prop_header) { - ObjectRecord *objinst; - PropRecord *lastobjentry; + Model *objinst; + PropRecord *lastobjentry; - if (!PropItem) + if (!prop_header) { - PropItem = &PitemZ_entries[PropID]; - modelLoad(PropID); //move a0a1 and t9,0xd4(sp) swapped here... + prop_header = PitemZ_entries[propid].header; + modelLoad(propid); } - lastobjentry = propAllocate(); - objinst = get_obj_instance_controller_for_header(PropItem); - if (!Weapon) + lastobjentry = chrpropAllocate(); + objinst = get_obj_instance_controller_for_header((ModelFileHeader *)prop_header); + + if (!weapon) { - Weapon = weaponCreate(lastobjentry == NULL, objinst == NULL, PropItem); + weapon = weaponCreate(lastobjentry == NULL, objinst == NULL, (ModelFileHeader *)prop_header); } + if (!lastobjentry) { - lastobjentry = propAllocate(); + lastobjentry = chrpropAllocate(); } + if (!objinst) { - objinst = get_obj_instance_controller_for_header(PropItem); + objinst = get_obj_instance_controller_for_header((ModelFileHeader *)prop_header); } - if (Weapon && lastobjentry && objinst) - { //t regs out by 1 - WeaponObjRecord New_Weapon = New_WeaponObjRecord(0); - *Weapon = New_Weapon; - Weapon->weaponnum = ItemID; - Weapon->obj = PropID; - Weapon->flags = flags | 0x4000; - Weapon->pad = self->chrnum; - //match after here - lastobjentry = sub_GAME_7F051F30(Weapon, self, PropItem, lastobjentry, objinst); + if (weapon && lastobjentry && objinst) + { + WeaponObjRecord new_weapon = blank_08_object_preset_4001; + *weapon = new_weapon; + + weapon->weaponnum = itemid; + weapon->obj = propid; + weapon->flags = flags | 0x4000; + + // pad = chrnum ??? + weapon->pad = self->chrnum; + + lastobjentry = sub_GAME_7F051F30(weapon, self, (ModelFileHeader *)prop_header, lastobjentry, objinst); } else { @@ -37400,172 +37655,18 @@ PropRecord *something_with_generating_object(ChrRecord *self, s32 PropID, ITEM_I { clear_model_obj(objinst); } + if (lastobjentry) { chrpropFree(lastobjentry); lastobjentry = NULL; } } + return lastobjentry; //should be new weapon } -#else -WeaponObjRecord blank_08_object_preset_4001 = { - 0x0100, //extrascale - 0x0, //state - 0x08, //type - 0, //obj - 0x4001, //pad - 0x00000000, //flags - 0, //flags2 - NULL, //prop - NULL, //model - { - 1.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 1.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 1.0f - }, //mtx - {0.0, 0.0, 0.0},//runtime_pos - {0x00000000}, //runtime_bitflags - NULL, //ptr_allocated_collisiondata_block - NULL, //projectile/embedment - 0.0f, //maxdamage - 1000.0f, //damage - { 0xFF, 0xFF, 0xFF, 0x00 }, // shadecol - { 0xFF, 0xFF, 0xFF, 0x00 }, // nextcol - ITEM_UNARMED, //weaponnu - -1, //LinkedWeaponType - -1, //timer - NULL //dualweapon -}; -GLOBAL_ASM( -.text -glabel something_with_generating_object -/* 086D44 7F052214 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 086D48 7F052218 8FAE00D4 */ lw $t6, 0xd4($sp) -/* 086D4C 7F05221C AFBF002C */ sw $ra, 0x2c($sp) -/* 086D50 7F052220 AFB20028 */ sw $s2, 0x28($sp) -/* 086D54 7F052224 AFB10024 */ sw $s1, 0x24($sp) -/* 086D58 7F052228 AFB00020 */ sw $s0, 0x20($sp) -/* 086D5C 7F05222C AFA400C0 */ sw $a0, 0xc0($sp) -/* 086D60 7F052230 AFA500C4 */ sw $a1, 0xc4($sp) -/* 086D64 7F052234 AFA600C8 */ sw $a2, 0xc8($sp) -/* 086D68 7F052238 15C0000A */ bnez $t6, .L7F052264 -/* 086D6C 7F05223C AFA700CC */ sw $a3, 0xcc($sp) -/* 086D70 7F052240 0005C080 */ sll $t8, $a1, 2 -/* 086D74 7F052244 0305C023 */ subu $t8, $t8, $a1 -/* 086D78 7F052248 0018C080 */ sll $t8, $t8, 2 -/* 086D7C 7F05224C 3C198004 */ lui $t9, %hi(PitemZ_entries) -/* 086D80 7F052250 0338C821 */ addu $t9, $t9, $t8 -/* 086D84 7F052254 8F39A228 */ lw $t9, %lo(PitemZ_entries)($t9) -/* 086D88 7F052258 00A02025 */ move $a0, $a1 -/* 086D8C 7F05225C 0FC15B0E */ jal modelLoad -/* 086D90 7F052260 AFB900D4 */ sw $t9, 0xd4($sp) -.L7F052264: -/* 086D94 7F052264 0FC0E90C */ jal propAllocate -/* 086D98 7F052268 00000000 */ nop -/* 086D9C 7F05226C 00408825 */ move $s1, $v0 -/* 086DA0 7F052270 0FC1B025 */ jal get_obj_instance_controller_for_header -/* 086DA4 7F052274 8FA400D4 */ lw $a0, 0xd4($sp) -/* 086DA8 7F052278 8FB000D0 */ lw $s0, 0xd0($sp) -/* 086DAC 7F05227C 00409025 */ move $s2, $v0 -/* 086DB0 7F052280 2E240001 */ sltiu $a0, $s1, 1 -/* 086DB4 7F052284 16000004 */ bnez $s0, .L7F052298 -/* 086DB8 7F052288 2C450001 */ sltiu $a1, $v0, 1 -/* 086DBC 7F05228C 0FC1449B */ jal weaponCreate -/* 086DC0 7F052290 8FA600D4 */ lw $a2, 0xd4($sp) -/* 086DC4 7F052294 00408025 */ move $s0, $v0 -.L7F052298: -/* 086DC8 7F052298 16200004 */ bnez $s1, .L7F0522AC -/* 086DCC 7F05229C 00000000 */ nop -/* 086DD0 7F0522A0 0FC0E90C */ jal propAllocate -/* 086DD4 7F0522A4 00000000 */ nop -/* 086DD8 7F0522A8 00408825 */ move $s1, $v0 -.L7F0522AC: -/* 086DDC 7F0522AC 16400004 */ bnez $s2, .L7F0522C0 -/* 086DE0 7F0522B0 00000000 */ nop -/* 086DE4 7F0522B4 0FC1B025 */ jal get_obj_instance_controller_for_header -/* 086DE8 7F0522B8 8FA400D4 */ lw $a0, 0xd4($sp) -/* 086DEC 7F0522BC 00409025 */ move $s2, $v0 -.L7F0522C0: -/* 086DF0 7F0522C0 12000034 */ beqz $s0, .L7F052394 -/* 086DF4 7F0522C4 00000000 */ nop -/* 086DF8 7F0522C8 12200032 */ beqz $s1, .L7F052394 -/* 086DFC 7F0522CC 00000000 */ nop -/* 086E00 7F0522D0 12400030 */ beqz $s2, .L7F052394 -/* 086E04 7F0522D4 27A20030 */ addiu $v0, $sp, 0x30 -/* 086E08 7F0522D8 3C088003 */ lui $t0, %hi(blank_08_object_preset_4001) -/* 086E0C 7F0522DC 2508221C */ addiu $t0, %lo(blank_08_object_preset_4001) # addiu $t0, $t0, 0x221c -/* 086E10 7F0522E0 250A0084 */ addiu $t2, $t0, 0x84 -/* 086E14 7F0522E4 00405825 */ move $t3, $v0 -.L7F0522E8: -/* 086E18 7F0522E8 8D010000 */ lw $at, ($t0) -/* 086E1C 7F0522EC 2508000C */ addiu $t0, $t0, 0xc -/* 086E20 7F0522F0 256B000C */ addiu $t3, $t3, 0xc -/* 086E24 7F0522F4 AD61FFF4 */ sw $at, -0xc($t3) -/* 086E28 7F0522F8 8D01FFF8 */ lw $at, -8($t0) -/* 086E2C 7F0522FC AD61FFF8 */ sw $at, -8($t3) -/* 086E30 7F052300 8D01FFFC */ lw $at, -4($t0) -/* 086E34 7F052304 150AFFF8 */ bne $t0, $t2, .L7F0522E8 -/* 086E38 7F052308 AD61FFFC */ sw $at, -4($t3) -/* 086E3C 7F05230C 8D010000 */ lw $at, ($t0) -/* 086E40 7F052310 00407025 */ move $t6, $v0 -/* 086E44 7F052314 0200C025 */ move $t8, $s0 -/* 086E48 7F052318 244D0084 */ addiu $t5, $v0, 0x84 -/* 086E4C 7F05231C AD610000 */ sw $at, ($t3) -.L7F052320: -/* 086E50 7F052320 8DC10000 */ lw $at, ($t6) -/* 086E54 7F052324 25CE000C */ addiu $t6, $t6, 0xc -/* 086E58 7F052328 2718000C */ addiu $t8, $t8, 0xc -/* 086E5C 7F05232C AF01FFF4 */ sw $at, -0xc($t8) -/* 086E60 7F052330 8DC1FFF8 */ lw $at, -8($t6) -/* 086E64 7F052334 AF01FFF8 */ sw $at, -8($t8) -/* 086E68 7F052338 8DC1FFFC */ lw $at, -4($t6) -/* 086E6C 7F05233C 15CDFFF8 */ bne $t6, $t5, .L7F052320 -/* 086E70 7F052340 AF01FFFC */ sw $at, -4($t8) -/* 086E74 7F052344 8DC10000 */ lw $at, ($t6) -/* 086E78 7F052348 02002025 */ move $a0, $s0 -/* 086E7C 7F05234C 02203825 */ move $a3, $s1 -/* 086E80 7F052350 AF010000 */ sw $at, ($t8) -/* 086E84 7F052354 8FB900C8 */ lw $t9, 0xc8($sp) -/* 086E88 7F052358 A2190080 */ sb $t9, 0x80($s0) -/* 086E8C 7F05235C 8FAF00C4 */ lw $t7, 0xc4($sp) -/* 086E90 7F052360 A60F0004 */ sh $t7, 4($s0) -/* 086E94 7F052364 8FA900CC */ lw $t1, 0xcc($sp) -/* 086E98 7F052368 352A4000 */ ori $t2, $t1, 0x4000 -/* 086E9C 7F05236C AE0A0008 */ sw $t2, 8($s0) -/* 086EA0 7F052370 8FA800C0 */ lw $t0, 0xc0($sp) -/* 086EA4 7F052374 850B0000 */ lh $t3, ($t0) -/* 086EA8 7F052378 A60B0006 */ sh $t3, 6($s0) -/* 086EAC 7F05237C AFB20010 */ sw $s2, 0x10($sp) -/* 086EB0 7F052380 8FA600D4 */ lw $a2, 0xd4($sp) -/* 086EB4 7F052384 0FC147CC */ jal sub_GAME_7F051F30 -/* 086EB8 7F052388 8FA500C0 */ lw $a1, 0xc0($sp) -/* 086EBC 7F05238C 1000000A */ b .L7F0523B8 -/* 086EC0 7F052390 00408825 */ move $s1, $v0 -.L7F052394: -/* 086EC4 7F052394 12400003 */ beqz $s2, .L7F0523A4 -/* 086EC8 7F052398 00000000 */ nop -/* 086ECC 7F05239C 0FC1B08D */ jal clear_model_obj -/* 086ED0 7F0523A0 02402025 */ move $a0, $s2 -.L7F0523A4: -/* 086ED4 7F0523A4 52200005 */ beql $s1, $zero, .L7F0523BC -/* 086ED8 7F0523A8 8FBF002C */ lw $ra, 0x2c($sp) -/* 086EDC 7F0523AC 0FC0E921 */ jal chrpropFree -/* 086EE0 7F0523B0 02202025 */ move $a0, $s1 -/* 086EE4 7F0523B4 00008825 */ move $s1, $zero -.L7F0523B8: -/* 086EE8 7F0523B8 8FBF002C */ lw $ra, 0x2c($sp) -.L7F0523BC: -/* 086EEC 7F0523BC 02201025 */ move $v0, $s1 -/* 086EF0 7F0523C0 8FB10024 */ lw $s1, 0x24($sp) -/* 086EF4 7F0523C4 8FB00020 */ lw $s0, 0x20($sp) -/* 086EF8 7F0523C8 8FB20028 */ lw $s2, 0x28($sp) -/* 086EFC 7F0523CC 03E00008 */ jr $ra -/* 086F00 7F0523D0 27BD00C0 */ addiu $sp, $sp, 0xc0 -) -#endif + @@ -37616,7 +37717,7 @@ glabel sub_GAME_7F0523F8 /* 086F68 7F052438 55E0003F */ bnezl $t7, .L7F052538 /* 086F6C 7F05243C 90480001 */ lbu $t0, 1($v0) /* 086F70 7F052440 8E18000C */ lw $t8, 0xc($s0) -/* 086F74 7F052444 3C098003 */ lui $t1, %hi(D_800322A4) +/* 086F74 7F052444 3C098003 */ lui $t1, %hi(D_800322A4) /* 086F78 7F052448 252922A4 */ addiu $t1, %lo(D_800322A4) # addiu $t1, $t1, 0x22a4 /* 086F7C 7F05244C 0018CB00 */ sll $t9, $t8, 0xc /* 086F80 7F052450 07200038 */ bltz $t9, .L7F052534 @@ -37811,7 +37912,7 @@ HATTYPE get_hat_model(PropRecord *prop) //#MATCH /** * US address 7F0526EC. */ -void sub_GAME_7F0526EC(DoorRecord *door, Mtxf *rhs) +void door7F0526EC(DoorRecord *door, Mtxf *rhs) { Mtxf lhs; struct coord3d sp54; @@ -37893,7 +37994,7 @@ void sub_GAME_7F0526EC(DoorRecord *door, Mtxf *rhs) sp2C.f[0] = (door->frac * door->openPosition) + door->runtime_pos.x; sp2C.f[1] = (door->unkac * door->openPosition) + door->runtime_pos.y; sp2C.f[2] = (door->unkb0 * door->openPosition) + door->runtime_pos.z; - + matrix_4x4_copy(&door->mtx, rhs); matrix_4x4_set_position(&sp2C, rhs); } @@ -37906,291 +38007,202 @@ void sub_GAME_7F0526EC(DoorRecord *door, Mtxf *rhs) - -#ifdef NONMATCHING -void sub_GAME_7F052B00(DoorRecord *door) +/** + * NTSC address 0x7F052B00. +*/ +void door7F052B00(DoorRecord *door) { - ? sp2C; - u32 * sp28; - s32 temp_a3; - s32 temp_a3_2; - s32 temp_a3_3; - s32 temp_a3_4; - u16 temp_v0_2; - u16 temp_v0_3; - u32 temp_f0; - u32 temp_f0_2; - u32 * temp_v1; - void *temp_v0; + struct ModelRoData_BoundingBoxRecord *door_bb; + Mtxf sp2C; - temp_v1 = &door->unkd0; - temp_v0 = (*door->model->unk8)->unk14->unk4; - temp_v1->unk0 = temp_v0->unk0; - temp_v1->unk4 = temp_v0->unk4; - temp_v1->unk8 = temp_v0->unk8; - temp_v1->unkC = temp_v0->unkC; - temp_v1->unk10 = temp_v0->unk10; - temp_v1->unk14 = temp_v0->unk14; - temp_v1->unk18 = temp_v0->unk18; - if ((door->doorFlags & 4) != 0) + door_bb = (struct ModelRoData_BoundingBoxRecord *)door->model->obj->RootNode->Child->Data; + + // struct copy + door->bbox = *door_bb; + + if (door->doorFlags & DOORFLAG_0004) { - if (door->doorType == 4) + if (door->doorType == DOORTYPE_VERTICAL) { - temp_f0 = temp_v0->unk10; - door->unke0 = (bitwise u32)((bitwise f32)temp_f0 + (((bitwise f32)temp_v0->unkC - (bitwise f32)temp_f0) * door->openPosition)); + door->bbox.Bounds.ymax = door_bb->Bounds.ymax + (door_bb->Bounds.ymin - door_bb->Bounds.ymax) * door->openPosition; } else { - temp_f0_2 = temp_v0->unk4; - door->unkd4 = (bitwise u32)((bitwise f32)temp_f0_2 + (((bitwise f32)temp_v0->unk8 - (bitwise f32)temp_f0_2) * door->openPosition)); + door->bbox.Bounds.xmin = door_bb->Bounds.xmin + (door_bb->Bounds.xmax - door_bb->Bounds.xmin) * door->openPosition; } } + if (door->perimFrac <= door->openPosition) { - door->ptr_allocated_collisiondata_block->unk0 = 0; + door->ptr_allocated_collisiondata_block->unk00 = 0; + return; } - sp28 = temp_v1; - sub_GAME_7F0526EC(door, &sp2C); - temp_a3 = door->ptr_allocated_collisiondata_block; - sub_GAME_7F03F540(sp28, &sp2C, temp_a3 + 4, temp_a3); - temp_v0_2 = door->doorType; - if (temp_v0_2 == 4) + + door7F0526EC(door, &sp2C); + sub_GAME_7F03F540(&door->bbox, &sp2C, &door->ptr_allocated_collisiondata_block->unk04, door->ptr_allocated_collisiondata_block); + + if (door->doorType == DOORTYPE_VERTICAL) { - door->ptr_allocated_collisiondata_block->unk48 = chrpropSumMatrixPosY(sp28, &sp2C) + door->Pos.y; + door->ptr_allocated_collisiondata_block->unk48 = door->runtime_pos.f[1] + chrpropSumMatrixPosY(&door->bbox, &sp2C); } - else if (temp_v0_2 == 8) + else if (door->doorType == DOORTYPE_FALLAWAY) { - door->ptr_allocated_collisiondata_block->unk48 = door->Pos.y - D_80053334; + door->ptr_allocated_collisiondata_block->unk48 = door->runtime_pos.f[1] - 10000.0f; } else { - door->ptr_allocated_collisiondata_block->unk48 = chrpropSumMatrixPosY(sp28, &sp2C) + sp60; - if ((door->doorFlags & 1) != 0) + door->ptr_allocated_collisiondata_block->unk48 = sp2C.m[3][1] + chrpropSumMatrixPosY(&door->bbox, &sp2C); + + if (door->doorFlags & DOORFLAG_0001) { - temp_a3_2 = door->ptr_allocated_collisiondata_block; - temp_a3_2->unk48 = temp_a3_2->unk48 - 1000.0f; + door->ptr_allocated_collisiondata_block->unk48 -= 1000.0f; } } - temp_v0_3 = door->doorType; - if (((temp_v0_3 == 6) && ((D_80053338 * door->maxFrac) < door->openPosition)) || ((temp_v0_3 == 7) && ((D_8005333C * door->maxFrac) < door->openPosition))) + + if (((door->doorType == DOORTYPE_EYE) && (0 < door->openPosition - (0.4f * door->maxFrac))) + || ((door->doorType == DOORTYPE_IRIS) && (0 < door->openPosition - (0.4f * door->maxFrac))) + ) { - temp_a3_4 = door->ptr_allocated_collisiondata_block; - temp_a3_4->unk44 = temp_a3_4->unk48 + 50.0f; - return; + + door->ptr_allocated_collisiondata_block->unk44 = door->ptr_allocated_collisiondata_block->unk48 + 50.0f; } - if (temp_v0_3 == 8) + else if (door->doorType == DOORTYPE_FALLAWAY) { - door->ptr_allocated_collisiondata_block->unk44 = door->Pos.y + 1000.0f; - return; + door->ptr_allocated_collisiondata_block->unk44 = door->runtime_pos.f[1] + 1000.0f; } - door->ptr_allocated_collisiondata_block->unk44 = chrpropSumMatrixNegY(sp28, &sp2C) + sp60; - if ((door->doorFlags & 1) != 0) + else { - temp_a3_3 = door->ptr_allocated_collisiondata_block; - temp_a3_3->unk44 = temp_a3_3->unk44 + 1000.0f; + door->ptr_allocated_collisiondata_block->unk44 = sp2C.m[3][1] + chrpropSumMatrixNegY(&door->bbox, &sp2C); + + if (door->doorFlags & DOORFLAG_0001) + { + door->ptr_allocated_collisiondata_block->unk44 += 1000.0f; + } } + } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80053334 -.word 0x461c4000 /*10000.0*/ -glabel D_80053338 -.word 0x3ecccccd /*0.40000001*/ -glabel D_8005333C -.word 0x3ecccccd /*0.40000001*/ -.text -glabel sub_GAME_7F052B00 -/* 087630 7F052B00 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 087634 7F052B04 AFBF001C */ sw $ra, 0x1c($sp) -/* 087638 7F052B08 AFB00018 */ sw $s0, 0x18($sp) -/* 08763C 7F052B0C 8C8E0014 */ lw $t6, 0x14($a0) -/* 087640 7F052B10 248300D0 */ addiu $v1, $a0, 0xd0 -/* 087644 7F052B14 00808025 */ move $s0, $a0 -/* 087648 7F052B18 8DCF0008 */ lw $t7, 8($t6) -/* 08764C 7F052B1C 27A5002C */ addiu $a1, $sp, 0x2c -/* 087650 7F052B20 8DF80000 */ lw $t8, ($t7) -/* 087654 7F052B24 8F190014 */ lw $t9, 0x14($t8) -/* 087658 7F052B28 8F220004 */ lw $v0, 4($t9) -/* 08765C 7F052B2C 8C410000 */ lw $at, ($v0) -/* 087660 7F052B30 AC610000 */ sw $at, ($v1) -/* 087664 7F052B34 8C4A0004 */ lw $t2, 4($v0) -/* 087668 7F052B38 AC6A0004 */ sw $t2, 4($v1) -/* 08766C 7F052B3C 8C410008 */ lw $at, 8($v0) -/* 087670 7F052B40 AC610008 */ sw $at, 8($v1) -/* 087674 7F052B44 8C4A000C */ lw $t2, 0xc($v0) -/* 087678 7F052B48 AC6A000C */ sw $t2, 0xc($v1) -/* 08767C 7F052B4C 8C410010 */ lw $at, 0x10($v0) -/* 087680 7F052B50 AC610010 */ sw $at, 0x10($v1) -/* 087684 7F052B54 8C4A0014 */ lw $t2, 0x14($v0) -/* 087688 7F052B58 AC6A0014 */ sw $t2, 0x14($v1) -/* 08768C 7F052B5C 8C410018 */ lw $at, 0x18($v0) -/* 087690 7F052B60 AC610018 */ sw $at, 0x18($v1) -/* 087694 7F052B64 948B0098 */ lhu $t3, 0x98($a0) -/* 087698 7F052B68 316C0004 */ andi $t4, $t3, 4 -/* 08769C 7F052B6C 51800015 */ beql $t4, $zero, .L7F052BC4 -/* 0876A0 7F052B70 C61000B4 */ lwc1 $f16, 0xb4($s0) -/* 0876A4 7F052B74 948D009A */ lhu $t5, 0x9a($a0) -/* 0876A8 7F052B78 24010004 */ li $at, 4 -/* 0876AC 7F052B7C 55A1000A */ bnel $t5, $at, .L7F052BA8 -/* 0876B0 7F052B80 C4400004 */ lwc1 $f0, 4($v0) -/* 0876B4 7F052B84 C4400010 */ lwc1 $f0, 0x10($v0) -/* 0876B8 7F052B88 C444000C */ lwc1 $f4, 0xc($v0) -/* 0876BC 7F052B8C C48800B4 */ lwc1 $f8, 0xb4($a0) -/* 0876C0 7F052B90 46002181 */ sub.s $f6, $f4, $f0 -/* 0876C4 7F052B94 46083282 */ mul.s $f10, $f6, $f8 -/* 0876C8 7F052B98 460A0400 */ add.s $f16, $f0, $f10 -/* 0876CC 7F052B9C 10000008 */ b .L7F052BC0 -/* 0876D0 7F052BA0 E49000E0 */ swc1 $f16, 0xe0($a0) -/* 0876D4 7F052BA4 C4400004 */ lwc1 $f0, 4($v0) -.L7F052BA8: -/* 0876D8 7F052BA8 C4520008 */ lwc1 $f18, 8($v0) -/* 0876DC 7F052BAC C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 0876E0 7F052BB0 46009101 */ sub.s $f4, $f18, $f0 -/* 0876E4 7F052BB4 46062202 */ mul.s $f8, $f4, $f6 -/* 0876E8 7F052BB8 46080280 */ add.s $f10, $f0, $f8 -/* 0876EC 7F052BBC E60A00D4 */ swc1 $f10, 0xd4($s0) -.L7F052BC0: -/* 0876F0 7F052BC0 C61000B4 */ lwc1 $f16, 0xb4($s0) -.L7F052BC4: -/* 0876F4 7F052BC4 C6120088 */ lwc1 $f18, 0x88($s0) -/* 0876F8 7F052BC8 02002025 */ move $a0, $s0 -/* 0876FC 7F052BCC 4610903E */ c.le.s $f18, $f16 -/* 087700 7F052BD0 00000000 */ nop -/* 087704 7F052BD4 45000004 */ bc1f .L7F052BE8 -/* 087708 7F052BD8 00000000 */ nop -/* 08770C 7F052BDC 8E0E0068 */ lw $t6, 0x68($s0) -/* 087710 7F052BE0 10000065 */ b .L7F052D78 -/* 087714 7F052BE4 ADC00000 */ sw $zero, ($t6) -.L7F052BE8: -/* 087718 7F052BE8 0FC149BB */ jal sub_GAME_7F0526EC -/* 08771C 7F052BEC AFA30028 */ sw $v1, 0x28($sp) -/* 087720 7F052BF0 8E070068 */ lw $a3, 0x68($s0) -/* 087724 7F052BF4 8FA40028 */ lw $a0, 0x28($sp) -/* 087728 7F052BF8 27A5002C */ addiu $a1, $sp, 0x2c -/* 08772C 7F052BFC 0FC0FD50 */ jal sub_GAME_7F03F540 -/* 087730 7F052C00 24E60004 */ addiu $a2, $a3, 4 -/* 087734 7F052C04 9602009A */ lhu $v0, 0x9a($s0) -/* 087738 7F052C08 24010004 */ li $at, 4 -/* 08773C 7F052C0C 8FA40028 */ lw $a0, 0x28($sp) -/* 087740 7F052C10 54410009 */ bnel $v0, $at, .L7F052C38 -/* 087744 7F052C14 24010008 */ li $at, 8 -/* 087748 7F052C18 0FC0FA6F */ jal chrpropSumMatrixPosY -/* 08774C 7F052C1C 27A5002C */ addiu $a1, $sp, 0x2c -/* 087750 7F052C20 C604005C */ lwc1 $f4, 0x5c($s0) -/* 087754 7F052C24 8E0F0068 */ lw $t7, 0x68($s0) -/* 087758 7F052C28 46040180 */ add.s $f6, $f0, $f4 -/* 08775C 7F052C2C 1000001B */ b .L7F052C9C -/* 087760 7F052C30 E5E60048 */ swc1 $f6, 0x48($t7) -/* 087764 7F052C34 24010008 */ li $at, 8 -.L7F052C38: -/* 087768 7F052C38 14410008 */ bne $v0, $at, .L7F052C5C -/* 08776C 7F052C3C 8FA40028 */ lw $a0, 0x28($sp) -/* 087770 7F052C40 3C018005 */ lui $at, %hi(D_80053334) -/* 087774 7F052C44 C42A3334 */ lwc1 $f10, %lo(D_80053334)($at) -/* 087778 7F052C48 C608005C */ lwc1 $f8, 0x5c($s0) -/* 08777C 7F052C4C 8E180068 */ lw $t8, 0x68($s0) -/* 087780 7F052C50 460A4401 */ sub.s $f16, $f8, $f10 -/* 087784 7F052C54 10000011 */ b .L7F052C9C -/* 087788 7F052C58 E7100048 */ swc1 $f16, 0x48($t8) -.L7F052C5C: -/* 08778C 7F052C5C 0FC0FA6F */ jal chrpropSumMatrixPosY -/* 087790 7F052C60 27A5002C */ addiu $a1, $sp, 0x2c -/* 087794 7F052C64 C7B20060 */ lwc1 $f18, 0x60($sp) -/* 087798 7F052C68 8E190068 */ lw $t9, 0x68($s0) -/* 08779C 7F052C6C 46120100 */ add.s $f4, $f0, $f18 -/* 0877A0 7F052C70 E7240048 */ swc1 $f4, 0x48($t9) -/* 0877A4 7F052C74 96090098 */ lhu $t1, 0x98($s0) -/* 0877A8 7F052C78 31280001 */ andi $t0, $t1, 1 -/* 0877AC 7F052C7C 51000008 */ beql $t0, $zero, .L7F052CA0 -/* 0877B0 7F052C80 9602009A */ lhu $v0, 0x9a($s0) -/* 0877B4 7F052C84 8E070068 */ lw $a3, 0x68($s0) -/* 0877B8 7F052C88 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0877BC 7F052C8C 44814000 */ mtc1 $at, $f8 -/* 0877C0 7F052C90 C4E60048 */ lwc1 $f6, 0x48($a3) -/* 0877C4 7F052C94 46083281 */ sub.s $f10, $f6, $f8 -/* 0877C8 7F052C98 E4EA0048 */ swc1 $f10, 0x48($a3) -.L7F052C9C: -/* 0877CC 7F052C9C 9602009A */ lhu $v0, 0x9a($s0) -.L7F052CA0: -/* 0877D0 7F052CA0 24010006 */ li $at, 6 -/* 0877D4 7F052CA4 14410008 */ bne $v0, $at, .L7F052CC8 -/* 0877D8 7F052CA8 3C018005 */ lui $at, %hi(D_80053338) -/* 0877DC 7F052CAC C4303338 */ lwc1 $f16, %lo(D_80053338)($at) -/* 0877E0 7F052CB0 C6120084 */ lwc1 $f18, 0x84($s0) -/* 0877E4 7F052CB4 C60600B4 */ lwc1 $f6, 0xb4($s0) -/* 0877E8 7F052CB8 46128102 */ mul.s $f4, $f16, $f18 -/* 0877EC 7F052CBC 4606203C */ c.lt.s $f4, $f6 -/* 0877F0 7F052CC0 00000000 */ nop -/* 0877F4 7F052CC4 4501000B */ bc1t .L7F052CF4 -.L7F052CC8: -/* 0877F8 7F052CC8 24010007 */ li $at, 7 -/* 0877FC 7F052CCC 14410010 */ bne $v0, $at, .L7F052D10 -/* 087800 7F052CD0 3C018005 */ lui $at, %hi(D_8005333C) -/* 087804 7F052CD4 C428333C */ lwc1 $f8, %lo(D_8005333C)($at) -/* 087808 7F052CD8 C60A0084 */ lwc1 $f10, 0x84($s0) -/* 08780C 7F052CDC C61200B4 */ lwc1 $f18, 0xb4($s0) -/* 087810 7F052CE0 460A4402 */ mul.s $f16, $f8, $f10 -/* 087814 7F052CE4 4612803C */ c.lt.s $f16, $f18 -/* 087818 7F052CE8 00000000 */ nop -/* 08781C 7F052CEC 45020009 */ bc1fl .L7F052D14 -/* 087820 7F052CF0 24010008 */ li $at, 8 -.L7F052CF4: -/* 087824 7F052CF4 8E070068 */ lw $a3, 0x68($s0) -/* 087828 7F052CF8 3C014248 */ li $at, 0x42480000 # 50.000000 -/* 08782C 7F052CFC 44813000 */ mtc1 $at, $f6 -/* 087830 7F052D00 C4E40048 */ lwc1 $f4, 0x48($a3) -/* 087834 7F052D04 46062200 */ add.s $f8, $f4, $f6 -/* 087838 7F052D08 1000001B */ b .L7F052D78 -/* 08783C 7F052D0C E4E80044 */ swc1 $f8, 0x44($a3) -.L7F052D10: -/* 087840 7F052D10 24010008 */ li $at, 8 -.L7F052D14: -/* 087844 7F052D14 14410008 */ bne $v0, $at, .L7F052D38 -/* 087848 7F052D18 8FA40028 */ lw $a0, 0x28($sp) -/* 08784C 7F052D1C 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 087850 7F052D20 44818000 */ mtc1 $at, $f16 -/* 087854 7F052D24 C60A005C */ lwc1 $f10, 0x5c($s0) -/* 087858 7F052D28 8E0A0068 */ lw $t2, 0x68($s0) -/* 08785C 7F052D2C 46105480 */ add.s $f18, $f10, $f16 -/* 087860 7F052D30 10000011 */ b .L7F052D78 -/* 087864 7F052D34 E5520044 */ swc1 $f18, 0x44($t2) -.L7F052D38: -/* 087868 7F052D38 0FC0FA97 */ jal chrpropSumMatrixNegY -/* 08786C 7F052D3C 27A5002C */ addiu $a1, $sp, 0x2c -/* 087870 7F052D40 C7A40060 */ lwc1 $f4, 0x60($sp) -/* 087874 7F052D44 8E0B0068 */ lw $t3, 0x68($s0) -/* 087878 7F052D48 46040180 */ add.s $f6, $f0, $f4 -/* 08787C 7F052D4C E5660044 */ swc1 $f6, 0x44($t3) -/* 087880 7F052D50 960C0098 */ lhu $t4, 0x98($s0) -/* 087884 7F052D54 318D0001 */ andi $t5, $t4, 1 -/* 087888 7F052D58 51A00008 */ beql $t5, $zero, .L7F052D7C -/* 08788C 7F052D5C 8FBF001C */ lw $ra, 0x1c($sp) -/* 087890 7F052D60 8E070068 */ lw $a3, 0x68($s0) -/* 087894 7F052D64 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 087898 7F052D68 44815000 */ mtc1 $at, $f10 -/* 08789C 7F052D6C C4E80044 */ lwc1 $f8, 0x44($a3) -/* 0878A0 7F052D70 460A4400 */ add.s $f16, $f8, $f10 -/* 0878A4 7F052D74 E4F00044 */ swc1 $f16, 0x44($a3) -.L7F052D78: -/* 0878A8 7F052D78 8FBF001C */ lw $ra, 0x1c($sp) -.L7F052D7C: -/* 0878AC 7F052D7C 8FB00018 */ lw $s0, 0x18($sp) -/* 0878B0 7F052D80 27BD0070 */ addiu $sp, $sp, 0x70 -/* 0878B4 7F052D84 03E00008 */ jr $ra -/* 0878B8 7F052D88 00000000 */ nop -) -#endif - - #ifdef NONMATCHING -void sub_GAME_7F052D8C(DoorRecord* door) { +/** + * NTSC address 0x7F052D8C. + * perfect dark void door0f08cb20(struct doorobj *door, Vtx *src, Vtx *dst, s32 numvertices) + * + * https://decomp.me/scratch/ccGWm +*/ +void sub_GAME_7F052D8C(DoorRecord *door) +{ +#define CYCLIC_NEXT1ALT(j) (j + 1) % 4 +#define CYCLIC_NEXT2ALT(j) (j + 2) % 4 +#define CYCLIC_NEXT3ALT(j) (j + 3) % 4 +#define CYCLIC_NEXT1(j) (j + 1) % 4 +#define CYCLIC_NEXT2(j) (j + 2) % 4 +#define CYCLIC_NEXT3(j) (j + 3) % 4 + + Model *mdl; + ModelNode *mdlDLCNode; + struct ModelRoData_DisplayList_CollisionRecord *src; + struct ModelRwData_DisplayList_CollisionRecord *dst; + s16 cutoff; + s32 var_fp; + s32 j; + s32 k; + + Vertex *psrc; + Vertex *pdst; + + if (door->doorFlags & DOORFLAG_0004) + { + mdl = door->model; + mdlDLCNode = mdl->obj->RootNode->Child->Child; //Get the DL + src = (struct ModelRoData_DisplayList_CollisionRecord *)mdlDLCNode->Data; + dst = (struct ModelRwData_DisplayList_CollisionRecord *)modelGetNodeRwData(mdl, mdlDLCNode); + + if (door->doorType == DOORTYPE_VERTICAL) + { + cutoff = door->bbox.Bounds.ymax + 0.5f; + } + else + { + cutoff = door->bbox.Bounds.xmin + 0.5f; + } + + dst->Vertices = dynAllocate7F0BD6C4(src->numVertices); + + for (var_fp = 0; var_fp < src->numVertices / 4; var_fp++) //block of 4 vertices (quad) + { + for (j = 0; j < 4; j++) //for each vertex in block, move and clamp to bounding box, if clamped, move texture coords so it doesnt look "squished" + { + psrc = &src->Vertices[var_fp * 4]; + pdst = &dst->Vertices[var_fp * 4]; + + if (j == 0) + { + pdst[j] = psrc[j]; + pdst[CYCLIC_NEXT1(j)] = psrc[CYCLIC_NEXT1(j)]; + pdst[CYCLIC_NEXT2(j)] = psrc[CYCLIC_NEXT2(j)]; + pdst[CYCLIC_NEXT3(j)] = psrc[CYCLIC_NEXT3(j)]; + // if (1); + } + + if (door->doorType == DOORTYPE_VERTICAL) + { + //if current vtx is higher than "cutoff", clamp it to cutoff. + if (psrc[j].coord.y >= cutoff) + { + //if next and current x and z are equal AND y Not equal - Find the "below" vertex in a quad + if (psrc[CYCLIC_NEXT1(j)].coord.x == psrc[j].coord.x && psrc[CYCLIC_NEXT1(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT1(j)].coord.y != psrc[j].coord.y) + { + //InterpolatedValue = InitialValue + (Difference1) * (ChangeInValue) / (Difference2); + pdst[j].s = psrc[j].s + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT1(j)].s - psrc[j].s) / (psrc[j].coord.y - psrc[CYCLIC_NEXT1(j)].coord.y); + pdst[j].t = psrc[j].t + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT1(j)].t - psrc[j].t) / (psrc[j].coord.y - psrc[CYCLIC_NEXT1(j)].coord.y); + } + else if (psrc[CYCLIC_NEXT2(j)].coord.x == psrc[j].coord.x && psrc[CYCLIC_NEXT2(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT2(j)].coord.y != psrc[j].coord.y) + { + pdst[j].s = psrc[j].s + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT2(j)].s - psrc[j].s) / (psrc[j].coord.y - psrc[CYCLIC_NEXT2(j)].coord.y); + pdst[j].t = psrc[j].t + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT2(j)].t - psrc[j].t) / (psrc[j].coord.y - psrc[CYCLIC_NEXT2(j)].coord.y); + } + else if (psrc[CYCLIC_NEXT3(j)].coord.x == psrc[j].coord.x && psrc[CYCLIC_NEXT3(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT3(j)].coord.y != psrc[j].coord.y) + { + pdst[j].s = psrc[j].s + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT3(j)].s - psrc[j].s) / (psrc[j].coord.y - psrc[CYCLIC_NEXT3(j)].coord.y); + pdst[j].t = psrc[j].t + (psrc[j].coord.y - cutoff) * (psrc[CYCLIC_NEXT3(j)].t - psrc[j].t) / (psrc[j].coord.y - psrc[CYCLIC_NEXT3(j)].coord.y); + } + + pdst[j].coord.y = cutoff; + } + } + else + { + if (psrc[j].coord.x <= cutoff) + { + //if next and current y and z are equal AND x Not equal - Find the "right" vertex in a quad + if (psrc[CYCLIC_NEXT1(j)].coord.y == psrc[j].coord.y && psrc[CYCLIC_NEXT1(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT1(j)].coord.x != psrc[j].coord.x) + { + pdst[j].s = psrc[j].s + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT1(j)].s - psrc[j].s) / (psrc[CYCLIC_NEXT1(j)].coord.x - psrc[j].coord.x); + pdst[j].t = psrc[j].t + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT1(j)].t - psrc[j].t) / (psrc[CYCLIC_NEXT1(j)].coord.x - psrc[j].coord.x); + } + else if (psrc[CYCLIC_NEXT2(j)].coord.y == psrc[j].coord.y && psrc[CYCLIC_NEXT2(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT2(j)].coord.x != psrc[j].coord.x) + { + pdst[j].s = psrc[j].s + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT2(j)].s - psrc[j].s) / (psrc[CYCLIC_NEXT2(j)].coord.x - psrc[j].coord.x); + pdst[j].t = psrc[j].t + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT2(j)].t - psrc[j].t) / (psrc[CYCLIC_NEXT2(j)].coord.x - psrc[j].coord.x); + } + else if (psrc[CYCLIC_NEXT3(j)].coord.y == psrc[j].coord.y && psrc[CYCLIC_NEXT3(j)].coord.z == psrc[j].coord.z && psrc[CYCLIC_NEXT3(j)].coord.x != psrc[j].coord.x) + { + pdst[j].s = psrc[j].s + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT3(j)].s - psrc[j].s) / (psrc[CYCLIC_NEXT3(j)].coord.x - psrc[j].coord.x); + pdst[j].t = psrc[j].t + (cutoff - psrc[j].coord.x) * (psrc[CYCLIC_NEXT3(j)].t - psrc[j].t) / (psrc[CYCLIC_NEXT3(j)].coord.x - psrc[j].coord.x); + } + + pdst[j].coord.x = cutoff; + } + } + } + } + } } + #else void sub_GAME_7F052D8C(DoorRecord*); GLOBAL_ASM( @@ -38230,18 +38242,18 @@ glabel sub_GAME_7F052D8C /* 087938 7F052E08 46062200 */ add.s $f8, $f4, $f6 /* 08793C 7F052E0C 4600428D */ trunc.w.s $f10, $f8 /* 087940 7F052E10 440D5000 */ mfc1 $t5, $f10 -/* 087944 7F052E14 00000000 */ nop +/* 087944 7F052E14 00000000 */ nop /* 087948 7F052E18 000DCC00 */ sll $t9, $t5, 0x10 /* 08794C 7F052E1C 1000000A */ b .L7F052E48 /* 087950 7F052E20 00196C03 */ sra $t5, $t9, 0x10 .L7F052E24: /* 087954 7F052E24 C6D000D4 */ lwc1 $f16, 0xd4($s6) /* 087958 7F052E28 44819000 */ mtc1 $at, $f18 -/* 08795C 7F052E2C 00000000 */ nop +/* 08795C 7F052E2C 00000000 */ nop /* 087960 7F052E30 46128100 */ add.s $f4, $f16, $f18 /* 087964 7F052E34 4600218D */ trunc.w.s $f6, $f4 /* 087968 7F052E38 440D3000 */ mfc1 $t5, $f6 -/* 08796C 7F052E3C 00000000 */ nop +/* 08796C 7F052E3C 00000000 */ nop /* 087970 7F052E40 000DC400 */ sll $t8, $t5, 0x10 /* 087974 7F052E44 00186C03 */ sra $t5, $t8, 0x10 .L7F052E48: @@ -38273,7 +38285,7 @@ glabel sub_GAME_7F052D8C /* 0879D0 7F052EA0 06410004 */ bgez $s2, .L7F052EB4 /* 0879D4 7F052EA4 32450003 */ andi $a1, $s2, 3 /* 0879D8 7F052EA8 10A00002 */ beqz $a1, .L7F052EB4 -/* 0879DC 7F052EAC 00000000 */ nop +/* 0879DC 7F052EAC 00000000 */ nop /* 0879E0 7F052EB0 24A5FFFC */ addiu $a1, $a1, -4 .L7F052EB4: /* 0879E4 7F052EB4 0005C900 */ sll $t9, $a1, 4 @@ -38282,7 +38294,7 @@ glabel sub_GAME_7F052D8C /* 0879F0 7F052EC0 04E10004 */ bgez $a3, .L7F052ED4 /* 0879F4 7F052EC4 30EE0003 */ andi $t6, $a3, 3 /* 0879F8 7F052EC8 11C00002 */ beqz $t6, .L7F052ED4 -/* 0879FC 7F052ECC 00000000 */ nop +/* 0879FC 7F052ECC 00000000 */ nop /* 087A00 7F052ED0 25CEFFFC */ addiu $t6, $t6, -4 .L7F052ED4: /* 087A04 7F052ED4 000E7900 */ sll $t7, $t6, 4 @@ -38293,7 +38305,7 @@ glabel sub_GAME_7F052D8C /* 087A18 7F052EE8 05810004 */ bgez $t4, .L7F052EFC /* 087A1C 7F052EEC 31980003 */ andi $t8, $t4, 3 /* 087A20 7F052EF0 13000002 */ beqz $t8, .L7F052EFC -/* 087A24 7F052EF4 00000000 */ nop +/* 087A24 7F052EF4 00000000 */ nop /* 087A28 7F052EF8 2718FFFC */ addiu $t8, $t8, -4 .L7F052EFC: /* 087A2C 7F052EFC 00186100 */ sll $t4, $t8, 4 @@ -38342,7 +38354,7 @@ glabel sub_GAME_7F052D8C /* 087AD4 7F052FA4 84C40002 */ lh $a0, 2($a2) /* 087AD8 7F052FA8 008D082A */ slt $at, $a0, $t5 /* 087ADC 7F052FAC 14200162 */ bnez $at, .L7F053538 -/* 087AE0 7F052FB0 00000000 */ nop +/* 087AE0 7F052FB0 00000000 */ nop /* 087AE4 7F052FB4 84C50000 */ lh $a1, ($a2) /* 087AE8 7F052FB8 85180000 */ lh $t8, ($t0) /* 087AEC 7F052FBC 57050039 */ bnel $t8, $a1, .L7F0530A4 @@ -38361,21 +38373,21 @@ glabel sub_GAME_7F052D8C /* 087B20 7F052FF0 01F90019 */ multu $t7, $t9 /* 087B24 7F052FF4 0089C023 */ subu $t8, $a0, $t1 /* 087B28 7F052FF8 00007012 */ mflo $t6 -/* 087B2C 7F052FFC 00000000 */ nop -/* 087B30 7F053000 00000000 */ nop +/* 087B2C 7F052FFC 00000000 */ nop +/* 087B30 7F053000 00000000 */ nop /* 087B34 7F053004 01D8001A */ div $zero, $t6, $t8 /* 087B38 7F053008 00007812 */ mflo $t7 /* 087B3C 7F05300C 01E2C821 */ addu $t9, $t7, $v0 /* 087B40 7F053010 A5790008 */ sh $t9, 8($t3) /* 087B44 7F053014 17000002 */ bnez $t8, .L7F053020 -/* 087B48 7F053018 00000000 */ nop +/* 087B48 7F053018 00000000 */ nop /* 087B4C 7F05301C 0007000D */ break 7 .L7F053020: /* 087B50 7F053020 2401FFFF */ li $at, -1 /* 087B54 7F053024 17010004 */ bne $t8, $at, .L7F053038 /* 087B58 7F053028 3C018000 */ lui $at, 0x8000 /* 087B5C 7F05302C 15C10002 */ bne $t6, $at, .L7F053038 -/* 087B60 7F053030 00000000 */ nop +/* 087B60 7F053030 00000000 */ nop /* 087B64 7F053034 0006000D */ break 6 .L7F053038: /* 087B68 7F053038 8518000A */ lh $t8, 0xa($t0) @@ -38387,25 +38399,25 @@ glabel sub_GAME_7F052D8C /* 087B80 7F053050 85180002 */ lh $t8, 2($t0) /* 087B84 7F053054 00987023 */ subu $t6, $a0, $t8 /* 087B88 7F053058 0000C812 */ mflo $t9 -/* 087B8C 7F05305C 00000000 */ nop -/* 087B90 7F053060 00000000 */ nop +/* 087B8C 7F05305C 00000000 */ nop +/* 087B90 7F053060 00000000 */ nop /* 087B94 7F053064 032E001A */ div $zero, $t9, $t6 /* 087B98 7F053068 00007812 */ mflo $t7 /* 087B9C 7F05306C 01E3C021 */ addu $t8, $t7, $v1 /* 087BA0 7F053070 15C00002 */ bnez $t6, .L7F05307C -/* 087BA4 7F053074 00000000 */ nop +/* 087BA4 7F053074 00000000 */ nop /* 087BA8 7F053078 0007000D */ break 7 .L7F05307C: /* 087BAC 7F05307C 2401FFFF */ li $at, -1 /* 087BB0 7F053080 15C10004 */ bne $t6, $at, .L7F053094 /* 087BB4 7F053084 3C018000 */ lui $at, 0x8000 /* 087BB8 7F053088 17210002 */ bne $t9, $at, .L7F053094 -/* 087BBC 7F05308C 00000000 */ nop +/* 087BBC 7F05308C 00000000 */ nop /* 087BC0 7F053090 0006000D */ break 6 .L7F053094: /* 087BC4 7F053094 A578000A */ sh $t8, 0xa($t3) /* 087BC8 7F053098 10000073 */ b .L7F053268 -/* 087BCC 7F05309C 00000000 */ nop +/* 087BCC 7F05309C 00000000 */ nop /* 087BD0 7F0530A0 85590000 */ lh $t9, ($t2) .L7F0530A4: /* 087BD4 7F0530A4 57250039 */ bnel $t9, $a1, .L7F05318C @@ -38424,21 +38436,21 @@ glabel sub_GAME_7F052D8C /* 087C08 7F0530D8 030E0019 */ multu $t8, $t6 /* 087C0C 7F0530DC 0088C823 */ subu $t9, $a0, $t0 /* 087C10 7F0530E0 00007812 */ mflo $t7 -/* 087C14 7F0530E4 00000000 */ nop -/* 087C18 7F0530E8 00000000 */ nop +/* 087C14 7F0530E4 00000000 */ nop +/* 087C18 7F0530E8 00000000 */ nop /* 087C1C 7F0530EC 01F9001A */ div $zero, $t7, $t9 /* 087C20 7F0530F0 0000C012 */ mflo $t8 /* 087C24 7F0530F4 03027021 */ addu $t6, $t8, $v0 /* 087C28 7F0530F8 A56E0008 */ sh $t6, 8($t3) /* 087C2C 7F0530FC 17200002 */ bnez $t9, .L7F053108 -/* 087C30 7F053100 00000000 */ nop +/* 087C30 7F053100 00000000 */ nop /* 087C34 7F053104 0007000D */ break 7 .L7F053108: /* 087C38 7F053108 2401FFFF */ li $at, -1 /* 087C3C 7F05310C 17210004 */ bne $t9, $at, .L7F053120 /* 087C40 7F053110 3C018000 */ lui $at, 0x8000 /* 087C44 7F053114 15E10002 */ bne $t7, $at, .L7F053120 -/* 087C48 7F053118 00000000 */ nop +/* 087C48 7F053118 00000000 */ nop /* 087C4C 7F05311C 0006000D */ break 6 .L7F053120: /* 087C50 7F053120 8559000A */ lh $t9, 0xa($t2) @@ -38450,36 +38462,36 @@ glabel sub_GAME_7F052D8C /* 087C68 7F053138 85590002 */ lh $t9, 2($t2) /* 087C6C 7F05313C 00997823 */ subu $t7, $a0, $t9 /* 087C70 7F053140 00007012 */ mflo $t6 -/* 087C74 7F053144 00000000 */ nop -/* 087C78 7F053148 00000000 */ nop +/* 087C74 7F053144 00000000 */ nop +/* 087C78 7F053148 00000000 */ nop /* 087C7C 7F05314C 01CF001A */ div $zero, $t6, $t7 /* 087C80 7F053150 0000C012 */ mflo $t8 /* 087C84 7F053154 0303C821 */ addu $t9, $t8, $v1 /* 087C88 7F053158 15E00002 */ bnez $t7, .L7F053164 -/* 087C8C 7F05315C 00000000 */ nop +/* 087C8C 7F05315C 00000000 */ nop /* 087C90 7F053160 0007000D */ break 7 .L7F053164: /* 087C94 7F053164 2401FFFF */ li $at, -1 /* 087C98 7F053168 15E10004 */ bne $t7, $at, .L7F05317C /* 087C9C 7F05316C 3C018000 */ lui $at, 0x8000 /* 087CA0 7F053170 15C10002 */ bne $t6, $at, .L7F05317C -/* 087CA4 7F053174 00000000 */ nop +/* 087CA4 7F053174 00000000 */ nop /* 087CA8 7F053178 0006000D */ break 6 .L7F05317C: /* 087CAC 7F05317C A579000A */ sh $t9, 0xa($t3) /* 087CB0 7F053180 10000039 */ b .L7F053268 -/* 087CB4 7F053184 00000000 */ nop +/* 087CB4 7F053184 00000000 */ nop /* 087CB8 7F053188 84EE0000 */ lh $t6, ($a3) .L7F05318C: /* 087CBC 7F05318C 15C50036 */ bne $t6, $a1, .L7F053268 -/* 087CC0 7F053190 00000000 */ nop +/* 087CC0 7F053190 00000000 */ nop /* 087CC4 7F053194 84EF0004 */ lh $t7, 4($a3) /* 087CC8 7F053198 84D80004 */ lh $t8, 4($a2) /* 087CCC 7F05319C 15F80032 */ bne $t7, $t8, .L7F053268 -/* 087CD0 7F0531A0 00000000 */ nop +/* 087CD0 7F0531A0 00000000 */ nop /* 087CD4 7F0531A4 84E50002 */ lh $a1, 2($a3) /* 087CD8 7F0531A8 10A4002F */ beq $a1, $a0, .L7F053268 -/* 087CDC 7F0531AC 00000000 */ nop +/* 087CDC 7F0531AC 00000000 */ nop /* 087CE0 7F0531B0 84C20008 */ lh $v0, 8($a2) /* 087CE4 7F0531B4 84EE0008 */ lh $t6, 8($a3) /* 087CE8 7F0531B8 008DC823 */ subu $t9, $a0, $t5 @@ -38487,21 +38499,21 @@ glabel sub_GAME_7F052D8C /* 087CF0 7F0531C0 032F0019 */ multu $t9, $t7 /* 087CF4 7F0531C4 00857023 */ subu $t6, $a0, $a1 /* 087CF8 7F0531C8 0000C012 */ mflo $t8 -/* 087CFC 7F0531CC 00000000 */ nop -/* 087D00 7F0531D0 00000000 */ nop +/* 087CFC 7F0531CC 00000000 */ nop +/* 087D00 7F0531D0 00000000 */ nop /* 087D04 7F0531D4 030E001A */ div $zero, $t8, $t6 /* 087D08 7F0531D8 0000C812 */ mflo $t9 /* 087D0C 7F0531DC 03227821 */ addu $t7, $t9, $v0 /* 087D10 7F0531E0 A56F0008 */ sh $t7, 8($t3) /* 087D14 7F0531E4 15C00002 */ bnez $t6, .L7F0531F0 -/* 087D18 7F0531E8 00000000 */ nop +/* 087D18 7F0531E8 00000000 */ nop /* 087D1C 7F0531EC 0007000D */ break 7 .L7F0531F0: /* 087D20 7F0531F0 2401FFFF */ li $at, -1 /* 087D24 7F0531F4 15C10004 */ bne $t6, $at, .L7F053208 /* 087D28 7F0531F8 3C018000 */ lui $at, 0x8000 /* 087D2C 7F0531FC 17010002 */ bne $t8, $at, .L7F053208 -/* 087D30 7F053200 00000000 */ nop +/* 087D30 7F053200 00000000 */ nop /* 087D34 7F053204 0006000D */ break 6 .L7F053208: /* 087D38 7F053208 84EE000A */ lh $t6, 0xa($a3) @@ -38513,21 +38525,21 @@ glabel sub_GAME_7F052D8C /* 087D50 7F053220 84EE0002 */ lh $t6, 2($a3) /* 087D54 7F053224 008EC023 */ subu $t8, $a0, $t6 /* 087D58 7F053228 00007812 */ mflo $t7 -/* 087D5C 7F05322C 00000000 */ nop -/* 087D60 7F053230 00000000 */ nop +/* 087D5C 7F05322C 00000000 */ nop +/* 087D60 7F053230 00000000 */ nop /* 087D64 7F053234 01F8001A */ div $zero, $t7, $t8 /* 087D68 7F053238 0000C812 */ mflo $t9 /* 087D6C 7F05323C 03237021 */ addu $t6, $t9, $v1 /* 087D70 7F053240 A56E000A */ sh $t6, 0xa($t3) /* 087D74 7F053244 17000002 */ bnez $t8, .L7F053250 -/* 087D78 7F053248 00000000 */ nop +/* 087D78 7F053248 00000000 */ nop /* 087D7C 7F05324C 0007000D */ break 7 .L7F053250: /* 087D80 7F053250 2401FFFF */ li $at, -1 /* 087D84 7F053254 17010004 */ bne $t8, $at, .L7F053268 /* 087D88 7F053258 3C018000 */ lui $at, 0x8000 /* 087D8C 7F05325C 15E10002 */ bne $t7, $at, .L7F053268 -/* 087D90 7F053260 00000000 */ nop +/* 087D90 7F053260 00000000 */ nop /* 087D94 7F053264 0006000D */ break 6 .L7F053268: /* 087D98 7F053268 100000B3 */ b .L7F053538 @@ -38536,7 +38548,7 @@ glabel sub_GAME_7F052D8C .L7F053274: /* 087DA4 7F053274 01A5082A */ slt $at, $t5, $a1 /* 087DA8 7F053278 142000AF */ bnez $at, .L7F053538 -/* 087DAC 7F05327C 00000000 */ nop +/* 087DAC 7F05327C 00000000 */ nop /* 087DB0 7F053280 84C40002 */ lh $a0, 2($a2) /* 087DB4 7F053284 850F0002 */ lh $t7, 2($t0) /* 087DB8 7F053288 55E40039 */ bnel $t7, $a0, .L7F053370 @@ -38555,21 +38567,21 @@ glabel sub_GAME_7F052D8C /* 087DEC 7F0532BC 01D80019 */ multu $t6, $t8 /* 087DF0 7F0532C0 01257823 */ subu $t7, $t1, $a1 /* 087DF4 7F0532C4 0000C812 */ mflo $t9 -/* 087DF8 7F0532C8 00000000 */ nop -/* 087DFC 7F0532CC 00000000 */ nop +/* 087DF8 7F0532C8 00000000 */ nop +/* 087DFC 7F0532CC 00000000 */ nop /* 087E00 7F0532D0 032F001A */ div $zero, $t9, $t7 /* 087E04 7F0532D4 00007012 */ mflo $t6 /* 087E08 7F0532D8 01C2C021 */ addu $t8, $t6, $v0 /* 087E0C 7F0532DC A5780008 */ sh $t8, 8($t3) /* 087E10 7F0532E0 15E00002 */ bnez $t7, .L7F0532EC -/* 087E14 7F0532E4 00000000 */ nop +/* 087E14 7F0532E4 00000000 */ nop /* 087E18 7F0532E8 0007000D */ break 7 .L7F0532EC: /* 087E1C 7F0532EC 2401FFFF */ li $at, -1 /* 087E20 7F0532F0 15E10004 */ bne $t7, $at, .L7F053304 /* 087E24 7F0532F4 3C018000 */ lui $at, 0x8000 /* 087E28 7F0532F8 17210002 */ bne $t9, $at, .L7F053304 -/* 087E2C 7F0532FC 00000000 */ nop +/* 087E2C 7F0532FC 00000000 */ nop /* 087E30 7F053300 0006000D */ break 6 .L7F053304: /* 087E34 7F053304 850F000A */ lh $t7, 0xa($t0) @@ -38581,20 +38593,20 @@ glabel sub_GAME_7F052D8C /* 087E4C 7F05331C 850F0000 */ lh $t7, ($t0) /* 087E50 7F053320 01E5C823 */ subu $t9, $t7, $a1 /* 087E54 7F053324 0000C012 */ mflo $t8 -/* 087E58 7F053328 00000000 */ nop -/* 087E5C 7F05332C 00000000 */ nop +/* 087E58 7F053328 00000000 */ nop +/* 087E5C 7F05332C 00000000 */ nop /* 087E60 7F053330 0319001A */ div $zero, $t8, $t9 /* 087E64 7F053334 00007012 */ mflo $t6 /* 087E68 7F053338 01C37821 */ addu $t7, $t6, $v1 /* 087E6C 7F05333C 17200002 */ bnez $t9, .L7F053348 -/* 087E70 7F053340 00000000 */ nop +/* 087E70 7F053340 00000000 */ nop /* 087E74 7F053344 0007000D */ break 7 .L7F053348: /* 087E78 7F053348 2401FFFF */ li $at, -1 /* 087E7C 7F05334C 17210004 */ bne $t9, $at, .L7F053360 /* 087E80 7F053350 3C018000 */ lui $at, 0x8000 /* 087E84 7F053354 17010002 */ bne $t8, $at, .L7F053360 -/* 087E88 7F053358 00000000 */ nop +/* 087E88 7F053358 00000000 */ nop /* 087E8C 7F05335C 0006000D */ break 6 .L7F053360: /* 087E90 7F053360 A56F000A */ sh $t7, 0xa($t3) @@ -38618,21 +38630,21 @@ glabel sub_GAME_7F052D8C /* 087ED4 7F0533A4 01F90019 */ multu $t7, $t9 /* 087ED8 7F0533A8 0105C023 */ subu $t8, $t0, $a1 /* 087EDC 7F0533AC 00007012 */ mflo $t6 -/* 087EE0 7F0533B0 00000000 */ nop -/* 087EE4 7F0533B4 00000000 */ nop +/* 087EE0 7F0533B0 00000000 */ nop +/* 087EE4 7F0533B4 00000000 */ nop /* 087EE8 7F0533B8 01D8001A */ div $zero, $t6, $t8 /* 087EEC 7F0533BC 00007812 */ mflo $t7 /* 087EF0 7F0533C0 01E2C821 */ addu $t9, $t7, $v0 /* 087EF4 7F0533C4 A5790008 */ sh $t9, 8($t3) /* 087EF8 7F0533C8 17000002 */ bnez $t8, .L7F0533D4 -/* 087EFC 7F0533CC 00000000 */ nop +/* 087EFC 7F0533CC 00000000 */ nop /* 087F00 7F0533D0 0007000D */ break 7 .L7F0533D4: /* 087F04 7F0533D4 2401FFFF */ li $at, -1 /* 087F08 7F0533D8 17010004 */ bne $t8, $at, .L7F0533EC /* 087F0C 7F0533DC 3C018000 */ lui $at, 0x8000 /* 087F10 7F0533E0 15C10002 */ bne $t6, $at, .L7F0533EC -/* 087F14 7F0533E4 00000000 */ nop +/* 087F14 7F0533E4 00000000 */ nop /* 087F18 7F0533E8 0006000D */ break 6 .L7F0533EC: /* 087F1C 7F0533EC 8558000A */ lh $t8, 0xa($t2) @@ -38644,20 +38656,20 @@ glabel sub_GAME_7F052D8C /* 087F34 7F053404 85580000 */ lh $t8, ($t2) /* 087F38 7F053408 03057023 */ subu $t6, $t8, $a1 /* 087F3C 7F05340C 0000C812 */ mflo $t9 -/* 087F40 7F053410 00000000 */ nop -/* 087F44 7F053414 00000000 */ nop +/* 087F40 7F053410 00000000 */ nop +/* 087F44 7F053414 00000000 */ nop /* 087F48 7F053418 032E001A */ div $zero, $t9, $t6 /* 087F4C 7F05341C 00007812 */ mflo $t7 /* 087F50 7F053420 01E3C021 */ addu $t8, $t7, $v1 /* 087F54 7F053424 15C00002 */ bnez $t6, .L7F053430 -/* 087F58 7F053428 00000000 */ nop +/* 087F58 7F053428 00000000 */ nop /* 087F5C 7F05342C 0007000D */ break 7 .L7F053430: /* 087F60 7F053430 2401FFFF */ li $at, -1 /* 087F64 7F053434 15C10004 */ bne $t6, $at, .L7F053448 /* 087F68 7F053438 3C018000 */ lui $at, 0x8000 /* 087F6C 7F05343C 17210002 */ bne $t9, $at, .L7F053448 -/* 087F70 7F053440 00000000 */ nop +/* 087F70 7F053440 00000000 */ nop /* 087F74 7F053444 0006000D */ break 6 .L7F053448: /* 087F78 7F053448 A578000A */ sh $t8, 0xa($t3) @@ -38681,21 +38693,21 @@ glabel sub_GAME_7F052D8C /* 087FBC 7F05348C 030E0019 */ multu $t8, $t6 /* 087FC0 7F053490 0085C823 */ subu $t9, $a0, $a1 /* 087FC4 7F053494 00007812 */ mflo $t7 -/* 087FC8 7F053498 00000000 */ nop -/* 087FCC 7F05349C 00000000 */ nop +/* 087FC8 7F053498 00000000 */ nop +/* 087FCC 7F05349C 00000000 */ nop /* 087FD0 7F0534A0 01F9001A */ div $zero, $t7, $t9 /* 087FD4 7F0534A4 0000C012 */ mflo $t8 /* 087FD8 7F0534A8 03027021 */ addu $t6, $t8, $v0 /* 087FDC 7F0534AC A56E0008 */ sh $t6, 8($t3) /* 087FE0 7F0534B0 17200002 */ bnez $t9, .L7F0534BC -/* 087FE4 7F0534B4 00000000 */ nop +/* 087FE4 7F0534B4 00000000 */ nop /* 087FE8 7F0534B8 0007000D */ break 7 .L7F0534BC: /* 087FEC 7F0534BC 2401FFFF */ li $at, -1 /* 087FF0 7F0534C0 17210004 */ bne $t9, $at, .L7F0534D4 /* 087FF4 7F0534C4 3C018000 */ lui $at, 0x8000 /* 087FF8 7F0534C8 15E10002 */ bne $t7, $at, .L7F0534D4 -/* 087FFC 7F0534CC 00000000 */ nop +/* 087FFC 7F0534CC 00000000 */ nop /* 088000 7F0534D0 0006000D */ break 6 .L7F0534D4: /* 088004 7F0534D4 84F9000A */ lh $t9, 0xa($a3) @@ -38707,21 +38719,21 @@ glabel sub_GAME_7F052D8C /* 08801C 7F0534EC 84F90000 */ lh $t9, ($a3) /* 088020 7F0534F0 03257823 */ subu $t7, $t9, $a1 /* 088024 7F0534F4 00007012 */ mflo $t6 -/* 088028 7F0534F8 00000000 */ nop -/* 08802C 7F0534FC 00000000 */ nop +/* 088028 7F0534F8 00000000 */ nop +/* 08802C 7F0534FC 00000000 */ nop /* 088030 7F053500 01CF001A */ div $zero, $t6, $t7 /* 088034 7F053504 0000C012 */ mflo $t8 /* 088038 7F053508 0303C821 */ addu $t9, $t8, $v1 /* 08803C 7F05350C A579000A */ sh $t9, 0xa($t3) /* 088040 7F053510 15E00002 */ bnez $t7, .L7F05351C -/* 088044 7F053514 00000000 */ nop +/* 088044 7F053514 00000000 */ nop /* 088048 7F053518 0007000D */ break 7 .L7F05351C: /* 08804C 7F05351C 2401FFFF */ li $at, -1 /* 088050 7F053520 15E10004 */ bne $t7, $at, .L7F053534 /* 088054 7F053524 3C018000 */ lui $at, 0x8000 /* 088058 7F053528 15C10002 */ bne $t6, $at, .L7F053534 -/* 08805C 7F05352C 00000000 */ nop +/* 08805C 7F05352C 00000000 */ nop /* 088060 7F053530 0006000D */ break 6 .L7F053534: /* 088064 7F053534 A56D0000 */ sh $t5, ($t3) @@ -38790,15 +38802,15 @@ PropRecord* doorInit(DoorRecord* door, coord3d* pos, Mtxf* mtx, StandTile* stan, prop = objInitWithAutoModel((ObjectRecord* ) door); scale = PitemZ_entries[door->obj].scale; - door->ptr_allocated_collisiondata_block = mempAllocBytesInBank(0x50U, 4U); + door->ptr_allocated_collisiondata_block = mempAllocBytesInBank(0x50U, MEMPOOL_STAGE); matrix_4x4_copy(mtx, &door->mtx); matrix_scalar_multiply(scale, door->mtx.m[0]); - + door->frac = (f32) coord->x; door->unkac = (f32) coord->y; door->unkb0 = (f32) coord->z; - + if (door->flags & PROPFLAG_80000000) { door->openPosition = door->maxFrac; } else { @@ -38812,11 +38824,11 @@ PropRecord* doorInit(DoorRecord* door, coord3d* pos, Mtxf* mtx, StandTile* stan, if (door->doorFlags & 4) { union ModelRoData *rodata = door->model->obj->RootNode->Child->Child->Data; - door->unkcc = mempAllocBytesInBank(rodata->DisplayListCollisions.numVertices * sizeof(Vertex), 4U); + door->unkcc = mempAllocBytesInBank(rodata->DisplayListCollisions.numVertices * sizeof(Vertex), MEMPOOL_STAGE); } else { door->unkcc = NULL; } - + door->portalNumber = -1; door->openSoundState = 0; door->closeSoundState = 0; @@ -38832,8 +38844,8 @@ PropRecord* doorInit(DoorRecord* door, coord3d* pos, Mtxf* mtx, StandTile* stan, door->runtime_pos.y = centre->y; door->runtime_pos.z = centre->z; door->flags |= PROPFLAG_00000100; - - sub_GAME_7F052B00(door); + + door7F052B00(door); sub_GAME_7F052D8C(door); sub_GAME_7F0402B4(door->prop, &door->nextcol); @@ -38841,7 +38853,7 @@ PropRecord* doorInit(DoorRecord* door, coord3d* pos, Mtxf* mtx, StandTile* stan, door->shadecol.g = door->nextcol.g; door->shadecol.b = door->nextcol.b; door->shadecol.a = door->nextcol.a; - + return prop; } @@ -38947,18 +38959,24 @@ void sub_GAME_7F053A3C(DoorRecord* arg0) if (open_playing != 0) { + #ifdef DEBUG + assert( po->audiostate!=NULL); + #endif sndCreatePostEvent(arg0->openSoundState, 8, sp1C); } if (close_playing != 0) { + #ifdef DEBUG + assert( po->audiostate2!=NULL); + #endif sndCreatePostEvent(arg0->closeSoundState, 8, sp1C); } } } -void sub_GAME_7F053B10(DoorRecord *door) //#MATCH +void door7F053B10(DoorRecord *door) //#MATCH { if (door->openSoundState && sndGetPlayingState(door->openSoundState)) { @@ -38974,11 +38992,11 @@ void sub_GAME_7F053B10(DoorRecord *door) //#MATCH -void play_door_opening_soundeffect_0(DoorRecord *door) { +void doorPlayOpenSound0(DoorRecord *door) { ALSoundState *soundState = NULL; ALSoundState *pendingState = NULL; - sub_GAME_7F053B10(door); + door7F053B10(door); if (door->openSoundState == NULL) { @@ -38991,101 +39009,101 @@ void play_door_opening_soundeffect_0(DoorRecord *door) { switch (door->doorOpenSound) { - case 1: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_01: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xD3, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_SLIDE1_SFX, pendingState); } break; - case 2: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_02: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0x07, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, pendingState); } break; - case 3: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xCA, NULL); + case DOOR_OPEN_SOUND_METAL: + soundState = sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_OPEN_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xCC, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_LOOP_SFX, pendingState); } break; - case 4: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD6, NULL); + case DOOR_OPEN_SOUND_04: + soundState = sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SLIDE_OPEN_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xD8, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SINGLE_LOOP_SFX, pendingState); } break; - case 5: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xBC, NULL); + case DOOR_OPEN_SOUND_WOOD: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_WOOD_OPEN_SFX, NULL); break; - case 6: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0x07, NULL); + case DOOR_OPEN_SOUND_06: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, NULL); break; - case 7: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xC0, NULL); + case DOOR_OPEN_SOUND_WOOD_2: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_CATCH_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xBF, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_WOOD_SLIDE_SFX, pendingState); } break; - case 8: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xBC, NULL); + case DOOR_OPEN_SOUND_WOOD_3: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_WOOD_OPEN_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0x07, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, pendingState); } break; - case 9: + case DOOR_OPEN_SOUND_09: if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xC2, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_SHUTTER_OPEN_SFX, pendingState); } break; - case 10: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xC4, NULL); + case DOOR_OPEN_SOUND_METAL_2: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_OPEN_SFX, NULL); break; - case 11: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0x07, NULL); + case DOOR_OPEN_SOUND_11: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, NULL); break; - case 12: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xC8, NULL); + case DOOR_OPEN_SOUND_METAL_3: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_OPEN3_SFX, NULL); break; - case 13: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0x07, NULL); + case DOOR_OPEN_SOUND_13: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0x07, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, pendingState); } break; - case 14: + case DOOR_OPEN_SOUND_HYDROLIC: if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xDA, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_HYDRAL_CLOSE_SFX, pendingState); } break; - case 15: + case DOOR_OPEN_SOUND_STONE: if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xE1, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_SLIDE_STONE_OPEN_SFX, pendingState); } break; - case 16: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD6, NULL); + case DOOR_OPEN_SOUND_16: + soundState = sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SLIDE_OPEN_SFX, NULL); break; - case 17: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0x07, NULL); + case DOOR_OPEN_SOUND_METAL_4: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, NULL); if (soundState != NULL) { chrobjSndCreatePostEventDefault(soundState, &door->prop->pos); } - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xCA, NULL); + soundState = sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_OPEN_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xCC, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_LOOP_SFX, pendingState); } break; } @@ -39103,11 +39121,11 @@ void play_door_opening_soundeffect_0(DoorRecord *door) { -void play_door_opening_soundeffect_1(DoorRecord *door) { +void doorPlayOpenSound1(DoorRecord *door) { ALSoundState *soundState = NULL; ALSoundState *pendingState = NULL; - sub_GAME_7F053B10(door); + door7F053B10(door); if (door->openSoundState == NULL) { @@ -39120,86 +39138,86 @@ void play_door_opening_soundeffect_1(DoorRecord *door) { switch (door->doorOpenSound) { - case 1: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_01: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xD3, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_SLIDE1_SFX, pendingState); } break; - case 2: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_02: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0x07, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, pendingState); } break; - case 3: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xCA, NULL); + case DOOR_OPEN_SOUND_METAL: + soundState = sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_OPEN_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xCC, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_LOOP_SFX, pendingState); } break; - case 4: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD6, NULL); + case DOOR_OPEN_SOUND_04: + soundState = sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SLIDE_OPEN_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xD8, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SINGLE_LOOP_SFX, pendingState); } break; - case 7: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xC0, NULL); + case DOOR_OPEN_SOUND_WOOD_2: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_CATCH_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xBF, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_WOOD_SLIDE_SFX, pendingState); } break; - case 8: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xBC, NULL); + case DOOR_OPEN_SOUND_WOOD_3: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_WOOD_OPEN_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0x07, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, pendingState); } break; - case 9: + case DOOR_OPEN_SOUND_09: if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xC2, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_SHUTTER_OPEN_SFX, pendingState); } break; - case 13: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0x07, NULL); + case DOOR_OPEN_SOUND_13: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0x07, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, pendingState); } break; - case 14: + case DOOR_OPEN_SOUND_HYDROLIC: if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xDA, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_HYDRAL_CLOSE_SFX, pendingState); } break; - case 15: + case DOOR_OPEN_SOUND_STONE: if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xE1, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, DOOR_SLIDE_STONE_OPEN_SFX, pendingState); } break; - case 16: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD6, NULL); + case DOOR_OPEN_SOUND_16: + soundState = sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SLIDE_OPEN_SFX, NULL); break; - case 17: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0x07, NULL); + case DOOR_OPEN_SOUND_METAL_4: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, NULL); if (soundState != NULL) { chrobjSndCreatePostEventDefault(soundState, &door->prop->pos); } - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xCA, NULL); + soundState = sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_OPEN_SFX, NULL); if (pendingState != NULL) { - sndPlaySfx(g_musicSfxBufferPtr, 0xCC, pendingState); + sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_LOOP_SFX, pendingState); } break; } @@ -39216,48 +39234,48 @@ void play_door_opening_soundeffect_1(DoorRecord *door) { -void play_door_closing_soundeffect_0(DoorRecord *door) { +void doorPlayCloseSound0(DoorRecord *door) { ALSoundState *soundState = NULL; - sub_GAME_7F053B10(door); + door7F053B10(door); switch (door->doorOpenSound) { - case 1: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_01: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); break; - case 2: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_02: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); break; - case 3: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xCB, NULL); + case DOOR_OPEN_SOUND_METAL: + soundState = sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_CLOSE_SFX, NULL); break; - case 4: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD7, NULL); + case DOOR_OPEN_SOUND_04: + soundState = sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SLIDE_CLOSE_SFX, NULL); break; - case 7: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_WOOD_2: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); break; - case 8: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xBB, NULL); + case DOOR_OPEN_SOUND_WOOD_3: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_WOOD_CLOSE_SFX, NULL); break; - case 9: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xC3, NULL); + case DOOR_OPEN_SOUND_09: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SHUTTER_CLOSE_SFX, NULL); break; - case 13: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0x07, NULL); + case DOOR_OPEN_SOUND_13: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, NULL); break; - case 14: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xDB, NULL); + case DOOR_OPEN_SOUND_HYDROLIC: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_HYDRAL_OPEN_SFX, NULL); break; - case 15: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xE2, NULL); + case DOOR_OPEN_SOUND_STONE: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SLIDE_STONE_CLOSE_SFX, NULL); break; - case 16: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD7, NULL); + case DOOR_OPEN_SOUND_16: + soundState = sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SLIDE_CLOSE_SFX, NULL); break; - case 17: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xCB, NULL); + case DOOR_OPEN_SOUND_METAL_4: + soundState = sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_CLOSE_SFX, NULL); break; } @@ -39275,64 +39293,64 @@ void play_door_closing_soundeffect_0(DoorRecord *door) { -void play_door_closing_soundeffect_1(DoorRecord *door) +void doorPlayCloseSound1(DoorRecord *door) { ALSoundState *soundState = NULL; - sub_GAME_7F053B10(door); + door7F053B10(door); switch (door->doorOpenSound) { - case 1: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_01: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); break; - case 2: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_02: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); break; - case 3: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xCB, NULL); + case DOOR_OPEN_SOUND_METAL: + soundState = sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_CLOSE_SFX, NULL); break; - case 4: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD7, NULL); + case DOOR_OPEN_SOUND_04: + soundState = sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SLIDE_CLOSE_SFX, NULL); break; - case 5: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xBB, NULL); + case DOOR_OPEN_SOUND_WOOD: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_WOOD_CLOSE_SFX, NULL); break; - case 6: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0x07, NULL); + case DOOR_OPEN_SOUND_06: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, NULL); break; - case 7: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD2, NULL); + case DOOR_OPEN_SOUND_WOOD_2: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SMART_CATCH1_SFX, NULL); break; - case 8: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xBB, NULL); + case DOOR_OPEN_SOUND_WOOD_3: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_WOOD_CLOSE_SFX, NULL); break; - case 9: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xC3, NULL); + case DOOR_OPEN_SOUND_09: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SHUTTER_CLOSE_SFX, NULL); break; - case 10: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xC5, NULL); + case DOOR_OPEN_SOUND_METAL_2: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_CLOSE_SFX, NULL); break; - case 11: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xC7, NULL); + case DOOR_OPEN_SOUND_11: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); break; - case 12: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xC9, NULL); + case DOOR_OPEN_SOUND_METAL_3: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_CLOSE3_SFX, NULL); break; - case 13: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0x07, NULL); + case DOOR_OPEN_SOUND_13: + soundState = sndPlaySfx(g_musicSfxBufferPtr, TRAIN_SLIDE_DOOR_SLIDE_SFX, NULL); break; - case 14: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xDB, NULL); + case DOOR_OPEN_SOUND_HYDROLIC: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_HYDRAL_OPEN_SFX, NULL); break; - case 15: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xE2, NULL); + case DOOR_OPEN_SOUND_STONE: + soundState = sndPlaySfx(g_musicSfxBufferPtr, DOOR_SLIDE_STONE_CLOSE_SFX, NULL); break; - case 16: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xD7, NULL); + case DOOR_OPEN_SOUND_16: + soundState = sndPlaySfx(g_musicSfxBufferPtr, HEAVY_SLIDE_CLOSE_SFX, NULL); break; - case 17: - soundState = sndPlaySfx(g_musicSfxBufferPtr, 0xCB, NULL); + case DOOR_OPEN_SOUND_METAL_4: + soundState = sndPlaySfx(g_musicSfxBufferPtr, METAL_SLIDE_CLOSE_SFX, NULL); break; } @@ -39354,7 +39372,7 @@ void doorStartOpen(DoorRecord *door) door->flags &= ~DOORFLAG_KEEPOPEN; door->runtime_bitflags |= RUNTIMEBITFLAG_BEENOPENED; - play_door_opening_soundeffect_0(door); + doorPlayOpenSound0(door); doorActivatePortal(door); if (door->doorType == 8) @@ -39375,13 +39393,13 @@ void doorStartOpen(DoorRecord *door) void doorStartClose(DoorRecord *door) { door->flags &= ~DOORFLAG_KEEPOPEN; - play_door_opening_soundeffect_1(door); + doorPlayOpenSound1(door); } void doorFinishOpen(DoorRecord *door) { - play_door_closing_soundeffect_0(door); + doorPlayCloseSound0(door); if (door->doorType == 8) { @@ -39398,7 +39416,7 @@ void doorFinishOpen(DoorRecord *door) void doorFinishClose(DoorRecord* door) { - play_door_closing_soundeffect_1(door); + doorPlayCloseSound1(door); doorDeactivatePortal(door); } @@ -39545,20 +39563,20 @@ f32 chrobjFogVisRangeRelated(PropRecord *prop, f32 size) ret = 1.0f; nfd = fogGetNearFogValuesP(); - if ((nfd != NULL) && (nfd->MaxObfuscationRange < prop->Unk18)) + if ((nfd != NULL) && (nfd->MaxObfuscationRange < prop->zDepth)) { temp_f12 = getPlayer_c_lodscalez(); - temp_f12 = ((((prop->Unk18 - nfd->MaxObfuscationRange) * 100.0f) / size) + nfd->MaxObfuscationRange) * temp_f12; - + temp_f12 = ((((prop->zDepth - nfd->MaxObfuscationRange) * 100.0f) / size) + nfd->MaxObfuscationRange) * temp_f12; + if (nfd->MaxVisRange <= temp_f12) { - ret = 0.0f; + ret = 0.0f; //im invisible } else { if (nfd->NearFog < temp_f12) { - ret = (nfd->MaxVisRange - temp_f12) / (nfd->MaxVisRange - nfd->NearFog); + ret = (nfd->MaxVisRange - temp_f12) / (nfd->MaxVisRange - nfd->NearFog);// power of fog (0 - 1 ) where 0 is full fog, and 1 is no fog } } } @@ -39616,7 +39634,7 @@ bool sub_GAME_7F054D6C(PropRecord *prop, coord3d *pos, f32 arg2, bool arg3) while (roomnum >= 0) { - if (getROOMID_Bitflags(roomnum) != 0) + if (getROOMID_isRendered(roomnum) != 0) { if (fogPositionIsVisibleThroughFog(pos, arg2) && (!arg3 || sub_GAME_7F054C58(pos, arg2))) { @@ -39626,7 +39644,7 @@ bool sub_GAME_7F054D6C(PropRecord *prop, coord3d *pos, f32 arg2, bool arg3) } else { - result = sub_GAME_7F078A58(pos, arg2); + result = camIsPosInScreen(pos, arg2); } if (result) @@ -39704,198 +39722,135 @@ s32 updateDoorDisplacement(DoorRecord* door) +/** + * NTSC address 0x7F054FB4. +*/ +void door7F054FB4(DoorRecord *door) +{ + Model *temp_a0; + ModelNode *temp_a1; + s32 var_s4; + DoorRecord *var_s1; + s32 var_s5; + s32 var_a0; -#ifdef NONMATCHING -void sub_GAME_7F054FB4(void) { + struct ModelRoData_DisplayList_CollisionRecord *temp_s0; + struct ModelRwData_DisplayList_CollisionRecord *temp_v0_3; + var_s4 = 0; + var_s5 = 1; + + var_s1 = door; + while (var_s1 != NULL) + { + var_s1->lastcalc60f = var_s1->openPosition; + if (updateDoorDisplacement(var_s1) != 0) + { + var_s4 = 1; + } + + var_s1 = var_s1->linkedDoor; + + if (var_s1 == door) + { + break; + } + } + + var_s1 = door; + if ((var_s4 != 0)) + { + while (var_s1 != NULL) + { + door7F052B00(var_s1); + var_s5 = sub_GAME_7F0448A8(var_s1->prop); + + if (var_s5 == 0) + { + break; + } + + var_s1 = var_s1->linkedDoor; + + if (var_s1 == door) + { + break; + } + } + } + + var_s1 = door; + while (var_s1 != NULL) + { + if (var_s4) + { + if (var_s5 != 0) + { + if (var_s1->openstate == DOORMODE_OPENING) + { + if (var_s1->maxFrac <= var_s1->openPosition) + { + var_s1->openstate = 0; + var_s1->speed = 0.0f; + var_s1->openedTime = (u32) g_GlobalTimer; + + doorFinishOpen(var_s1); + } + } + else if ((var_s1->openstate == DOORMODE_CLOSING) && (var_s1->openPosition <= 0.0f)) + { + var_s1->openstate = 0; + var_s1->speed = 0.0f; + var_s1->openedTime = 0; + + doorFinishClose(var_s1); + } + + sub_GAME_7F0402B4(var_s1->prop, &var_s1->nextcol); + } + else + { + var_s1->speed = 0.0f; + var_s1->openPosition = var_s1->lastcalc60f; + + door7F052B00(var_s1); + } + + sub_GAME_7F052D8C(var_s1); + } + else if (var_s1->doorFlags & DOORFLAG_0004) + { + temp_a0 = var_s1->model; + temp_a1 = temp_a0->obj->RootNode->Child->Child; + temp_s0 = (struct ModelRoData_DisplayList_CollisionRecord *)temp_a1->Data; + temp_v0_3 = (struct ModelRwData_DisplayList_CollisionRecord*)modelGetNodeRwData(temp_a0, temp_a1); + + if (temp_v0_3->Vertices != var_s1->unkcc) + { + for (var_a0 = 0; var_a0 < temp_s0->numVertices; var_a0++) + { + // struct copy + var_s1->unkcc[var_a0] = temp_v0_3->Vertices[var_a0]; + } + } + + temp_v0_3->Vertices = var_s1->unkcc; + } + + var_s1->lastcalc60i = g_GlobalTimer; + + var_s1 = var_s1->linkedDoor; + + if (var_s1 == door) + { + break; + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F054FB4 -/* 089AE4 7F054FB4 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 089AE8 7F054FB8 AFB50030 */ sw $s5, 0x30($sp) -/* 089AEC 7F054FBC AFB4002C */ sw $s4, 0x2c($sp) -/* 089AF0 7F054FC0 AFB20024 */ sw $s2, 0x24($sp) -/* 089AF4 7F054FC4 AFB10020 */ sw $s1, 0x20($sp) -/* 089AF8 7F054FC8 00809025 */ move $s2, $a0 -/* 089AFC 7F054FCC AFBF0034 */ sw $ra, 0x34($sp) -/* 089B00 7F054FD0 AFB30028 */ sw $s3, 0x28($sp) -/* 089B04 7F054FD4 AFB0001C */ sw $s0, 0x1c($sp) -/* 089B08 7F054FD8 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 089B0C 7F054FDC 0000A025 */ move $s4, $zero -/* 089B10 7F054FE0 24150001 */ li $s5, 1 -/* 089B14 7F054FE4 10800010 */ beqz $a0, .L7F055028 -/* 089B18 7F054FE8 00808825 */ move $s1, $a0 -/* 089B1C 7F054FEC C62400B4 */ lwc1 $f4, 0xb4($s1) -.L7F054FF0: -/* 089B20 7F054FF0 02202025 */ move $a0, $s1 -/* 089B24 7F054FF4 0FC153AA */ jal updateDoorDisplacement -/* 089B28 7F054FF8 E62400FC */ swc1 $f4, 0xfc($s1) -/* 089B2C 7F054FFC 50400003 */ beql $v0, $zero, .L7F05500C -/* 089B30 7F055000 8E3100C8 */ lw $s1, 0xc8($s1) -/* 089B34 7F055004 24140001 */ li $s4, 1 -/* 089B38 7F055008 8E3100C8 */ lw $s1, 0xc8($s1) -.L7F05500C: -/* 089B3C 7F05500C 16320003 */ bne $s1, $s2, .L7F05501C -/* 089B40 7F055010 00000000 */ nop -/* 089B44 7F055014 10000004 */ b .L7F055028 -/* 089B48 7F055018 02408825 */ move $s1, $s2 -.L7F05501C: -/* 089B4C 7F05501C 5620FFF4 */ bnezl $s1, .L7F054FF0 -/* 089B50 7F055020 C62400B4 */ lwc1 $f4, 0xb4($s1) -/* 089B54 7F055024 02408825 */ move $s1, $s2 -.L7F055028: -/* 089B58 7F055028 12800013 */ beqz $s4, .L7F055078 -/* 089B5C 7F05502C 00000000 */ nop -/* 089B60 7F055030 12400011 */ beqz $s2, .L7F055078 -/* 089B64 7F055034 00000000 */ nop -.L7F055038: -/* 089B68 7F055038 0FC14AC0 */ jal sub_GAME_7F052B00 -/* 089B6C 7F05503C 02202025 */ move $a0, $s1 -/* 089B70 7F055040 0FC1122A */ jal sub_GAME_7F0448A8 -/* 089B74 7F055044 8E240010 */ lw $a0, 0x10($s1) -/* 089B78 7F055048 14400003 */ bnez $v0, .L7F055058 -/* 089B7C 7F05504C 0040A825 */ move $s5, $v0 -/* 089B80 7F055050 10000009 */ b .L7F055078 -/* 089B84 7F055054 02408825 */ move $s1, $s2 -.L7F055058: -/* 089B88 7F055058 8E3100C8 */ lw $s1, 0xc8($s1) -/* 089B8C 7F05505C 16320003 */ bne $s1, $s2, .L7F05506C -/* 089B90 7F055060 00000000 */ nop -/* 089B94 7F055064 10000004 */ b .L7F055078 -/* 089B98 7F055068 02408825 */ move $s1, $s2 -.L7F05506C: -/* 089B9C 7F05506C 1620FFF2 */ bnez $s1, .L7F055038 -/* 089BA0 7F055070 00000000 */ nop -/* 089BA4 7F055074 02408825 */ move $s1, $s2 -.L7F055078: -/* 089BA8 7F055078 12400062 */ beqz $s2, .L7F055204 -/* 089BAC 7F05507C 3C138005 */ lui $s3, %hi(g_GlobalTimer) -/* 089BB0 7F055080 4480A000 */ mtc1 $zero, $f20 -/* 089BB4 7F055084 2673837C */ addiu $s3, %lo(g_GlobalTimer) # addiu $s3, $s3, -0x7c84 -.L7F055088: -/* 089BB8 7F055088 52800030 */ beql $s4, $zero, .L7F05514C -/* 089BBC 7F05508C 962F0098 */ lhu $t7, 0x98($s1) -/* 089BC0 7F055090 12A00025 */ beqz $s5, .L7F055128 -/* 089BC4 7F055094 02202025 */ move $a0, $s1 -/* 089BC8 7F055098 822200BC */ lb $v0, 0xbc($s1) -/* 089BCC 7F05509C 24010001 */ li $at, 1 -/* 089BD0 7F0550A0 54410010 */ bnel $v0, $at, .L7F0550E4 -/* 089BD4 7F0550A4 24010002 */ li $at, 2 -/* 089BD8 7F0550A8 C62600B4 */ lwc1 $f6, 0xb4($s1) -/* 089BDC 7F0550AC C6280084 */ lwc1 $f8, 0x84($s1) -/* 089BE0 7F0550B0 4606403E */ c.le.s $f8, $f6 -/* 089BE4 7F0550B4 00000000 */ nop -/* 089BE8 7F0550B8 45020017 */ bc1fl .L7F055118 -/* 089BEC 7F0550BC 8E240010 */ lw $a0, 0x10($s1) -/* 089BF0 7F0550C0 A22000BC */ sb $zero, 0xbc($s1) -/* 089BF4 7F0550C4 E63400B8 */ swc1 $f20, 0xb8($s1) -/* 089BF8 7F0550C8 8E6E0000 */ lw $t6, ($s3) -/* 089BFC 7F0550CC 02202025 */ move $a0, $s1 -/* 089C00 7F0550D0 0FC15203 */ jal doorFinishOpen -/* 089C04 7F0550D4 AE2E00EC */ sw $t6, 0xec($s1) -/* 089C08 7F0550D8 1000000F */ b .L7F055118 -/* 089C0C 7F0550DC 8E240010 */ lw $a0, 0x10($s1) -/* 089C10 7F0550E0 24010002 */ li $at, 2 -.L7F0550E4: -/* 089C14 7F0550E4 5441000C */ bnel $v0, $at, .L7F055118 -/* 089C18 7F0550E8 8E240010 */ lw $a0, 0x10($s1) -/* 089C1C 7F0550EC C62A00B4 */ lwc1 $f10, 0xb4($s1) -/* 089C20 7F0550F0 02202025 */ move $a0, $s1 -/* 089C24 7F0550F4 4614503E */ c.le.s $f10, $f20 -/* 089C28 7F0550F8 00000000 */ nop -/* 089C2C 7F0550FC 45020006 */ bc1fl .L7F055118 -/* 089C30 7F055100 8E240010 */ lw $a0, 0x10($s1) -/* 089C34 7F055104 A22000BC */ sb $zero, 0xbc($s1) -/* 089C38 7F055108 E63400B8 */ swc1 $f20, 0xb8($s1) -/* 089C3C 7F05510C 0FC1521F */ jal doorFinishClose -/* 089C40 7F055110 AE2000EC */ sw $zero, 0xec($s1) -/* 089C44 7F055114 8E240010 */ lw $a0, 0x10($s1) -.L7F055118: -/* 089C48 7F055118 0FC100AD */ jal sub_GAME_7F0402B4 -/* 089C4C 7F05511C 2625007C */ addiu $a1, $s1, 0x7c -/* 089C50 7F055120 10000005 */ b .L7F055138 -/* 089C54 7F055124 00000000 */ nop -.L7F055128: -/* 089C58 7F055128 C63000FC */ lwc1 $f16, 0xfc($s1) -/* 089C5C 7F05512C E63400B8 */ swc1 $f20, 0xb8($s1) -/* 089C60 7F055130 0FC14AC0 */ jal sub_GAME_7F052B00 -/* 089C64 7F055134 E63000B4 */ swc1 $f16, 0xb4($s1) -.L7F055138: -/* 089C68 7F055138 0FC14B63 */ jal sub_GAME_7F052D8C -/* 089C6C 7F05513C 02202025 */ move $a0, $s1 -/* 089C70 7F055140 1000002A */ b .L7F0551EC -/* 089C74 7F055144 8E690000 */ lw $t1, ($s3) -/* 089C78 7F055148 962F0098 */ lhu $t7, 0x98($s1) -.L7F05514C: -/* 089C7C 7F05514C 31F80004 */ andi $t8, $t7, 4 -/* 089C80 7F055150 53000026 */ beql $t8, $zero, .L7F0551EC -/* 089C84 7F055154 8E690000 */ lw $t1, ($s3) -/* 089C88 7F055158 8E240014 */ lw $a0, 0x14($s1) -/* 089C8C 7F05515C 8C990008 */ lw $t9, 8($a0) -/* 089C90 7F055160 8F280000 */ lw $t0, ($t9) -/* 089C94 7F055164 8D090014 */ lw $t1, 0x14($t0) -/* 089C98 7F055168 8D250014 */ lw $a1, 0x14($t1) -/* 089C9C 7F05516C 0FC1B1E7 */ jal modelGetNodeRwData -/* 089CA0 7F055170 8CB00004 */ lw $s0, 4($a1) -/* 089CA4 7F055174 8E2300CC */ lw $v1, 0xcc($s1) -/* 089CA8 7F055178 8C4A0000 */ lw $t2, ($v0) -/* 089CAC 7F05517C 506A001A */ beql $v1, $t2, .L7F0551E8 -/* 089CB0 7F055180 AC430000 */ sw $v1, ($v0) -/* 089CB4 7F055184 860B000C */ lh $t3, 0xc($s0) -/* 089CB8 7F055188 00002025 */ move $a0, $zero -/* 089CBC 7F05518C 59600016 */ blezl $t3, .L7F0551E8 -/* 089CC0 7F055190 AC430000 */ sw $v1, ($v0) -/* 089CC4 7F055194 00001825 */ move $v1, $zero -/* 089CC8 7F055198 8C4E0000 */ lw $t6, ($v0) -.L7F05519C: -/* 089CCC 7F05519C 8E2C00CC */ lw $t4, 0xcc($s1) -/* 089CD0 7F0551A0 24840001 */ addiu $a0, $a0, 1 -/* 089CD4 7F0551A4 01C37821 */ addu $t7, $t6, $v1 -/* 089CD8 7F0551A8 8DE10000 */ lw $at, ($t7) -/* 089CDC 7F0551AC 01836821 */ addu $t5, $t4, $v1 -/* 089CE0 7F0551B0 24630010 */ addiu $v1, $v1, 0x10 -/* 089CE4 7F0551B4 ADA10000 */ sw $at, ($t5) -/* 089CE8 7F0551B8 8DF90004 */ lw $t9, 4($t7) -/* 089CEC 7F0551BC ADB90004 */ sw $t9, 4($t5) -/* 089CF0 7F0551C0 8DE10008 */ lw $at, 8($t7) -/* 089CF4 7F0551C4 ADA10008 */ sw $at, 8($t5) -/* 089CF8 7F0551C8 8DF9000C */ lw $t9, 0xc($t7) -/* 089CFC 7F0551CC ADB9000C */ sw $t9, 0xc($t5) -/* 089D00 7F0551D0 8608000C */ lh $t0, 0xc($s0) -/* 089D04 7F0551D4 0088082A */ slt $at, $a0, $t0 -/* 089D08 7F0551D8 5420FFF0 */ bnezl $at, .L7F05519C -/* 089D0C 7F0551DC 8C4E0000 */ lw $t6, ($v0) -/* 089D10 7F0551E0 8E2300CC */ lw $v1, 0xcc($s1) -/* 089D14 7F0551E4 AC430000 */ sw $v1, ($v0) -.L7F0551E8: -/* 089D18 7F0551E8 8E690000 */ lw $t1, ($s3) -.L7F0551EC: -/* 089D1C 7F0551EC AE2900FC */ sw $t1, 0xfc($s1) -/* 089D20 7F0551F0 8E3100C8 */ lw $s1, 0xc8($s1) -/* 089D24 7F0551F4 52320004 */ beql $s1, $s2, .L7F055208 -/* 089D28 7F0551F8 8FBF0034 */ lw $ra, 0x34($sp) -/* 089D2C 7F0551FC 1620FFA2 */ bnez $s1, .L7F055088 -/* 089D30 7F055200 00000000 */ nop -.L7F055204: -/* 089D34 7F055204 8FBF0034 */ lw $ra, 0x34($sp) -.L7F055208: -/* 089D38 7F055208 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 089D3C 7F05520C 8FB0001C */ lw $s0, 0x1c($sp) -/* 089D40 7F055210 8FB10020 */ lw $s1, 0x20($sp) -/* 089D44 7F055214 8FB20024 */ lw $s2, 0x24($sp) -/* 089D48 7F055218 8FB30028 */ lw $s3, 0x28($sp) -/* 089D4C 7F05521C 8FB4002C */ lw $s4, 0x2c($sp) -/* 089D50 7F055220 8FB50030 */ lw $s5, 0x30($sp) -/* 089D54 7F055224 03E00008 */ jr $ra -/* 089D58 7F055228 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif // PD: door0f08f604 -void sub_GAME_7F05522C(DoorRecord *door, f32 *arg1, f32 *arg2, s32 altcoordsystem) +void door7F05522C(DoorRecord *door, f32 *arg1, f32 *arg2, s32 altcoordsystem) { f32 anglediff; PropRecord *playerprop; @@ -40025,7 +39980,7 @@ void sub_GAME_7F05522C(DoorRecord *door, f32 *arg1, f32 *arg2, s32 altcoordsyste // PD: func0f08f968 -bool sub_GAME_7F0555F8(DoorRecord *door, bool altcoordsystem) +bool door7F0555F8(DoorRecord *door, bool altcoordsystem) { bool checkmore; f32 sp50; @@ -40040,7 +39995,7 @@ bool sub_GAME_7F0555F8(DoorRecord *door, bool altcoordsystem) if (g_InteractProp == NULL) { - sub_GAME_7F05522C(door, &sp50, &sp4c, altcoordsystem); + door7F05522C(door, &sp50, &sp4c, altcoordsystem); if ((sp50 >= -limit) && (sp50 <= limit) && (sp4c >= -limit) && (sp4c <= limit)) { @@ -40053,7 +40008,7 @@ bool sub_GAME_7F0555F8(DoorRecord *door, bool altcoordsystem) while (sibling != NULL && sibling != door && (sp50 >= 0.0f || sp4c < 0.0f)) { - sub_GAME_7F05522C(sibling, &sp40, &sp3c, altcoordsystem); + door7F05522C(sibling, &sp40, &sp3c, altcoordsystem); if ((sp50 > 0.0f) && (sp40 < sp50)) { @@ -40128,11 +40083,11 @@ bool doorTestForInteract(PropRecord *prop) if (maybe) { - checkmore = sub_GAME_7F0555F8(door, FALSE); + checkmore = door7F0555F8(door, FALSE); if (checkmore && (door->flags2 & PROPFLAG2_DOOR_ALTCOORDSYSTEM)) { - checkmore = sub_GAME_7F0555F8(door, TRUE); + checkmore = door7F0555F8(door, TRUE); } } } @@ -40182,7 +40137,7 @@ s32 posIsInFrontOfDoor(PropRecord* prop, DoorRecord* door) f32 value = 0; pad = (BoundPadRecord*)&g_CurrentSetup.boundpads[door->pad]; - + normal.f[0] = (pad->up.f[1] * pad->look.f[2]) - (pad->up.f[2] * pad->look.f[1]); normal.f[1] = (pad->up.f[2] * pad->look.f[0]) - (pad->up.f[0] * pad->look.f[2]); normal.f[2] = (pad->up.f[0] * pad->look.f[1]) - (pad->up.f[1] * pad->look.f[0]); @@ -40218,7 +40173,7 @@ GLOBAL_ASM( .text glabel posIsInFrontOfDoor /* 08A5A0 7F055A70 84AE0006 */ lh $t6, 6($a1) -/* 08A5A4 7F055A74 3C188007 */ lui $t8, %hi(g_CurrentSetup+0x1C) +/* 08A5A4 7F055A74 3C188007 */ lui $t8, %hi(g_CurrentSetup+0x1C) /* 08A5A8 7F055A78 8F185D1C */ lw $t8, %lo(g_CurrentSetup+0x1C)($t8) /* 08A5AC 7F055A7C 000E7900 */ sll $t7, $t6, 4 /* 08A5B0 7F055A80 01EE7821 */ addu $t7, $t7, $t6 @@ -40271,7 +40226,7 @@ glabel posIsInFrontOfDoor /* 08A66C 7F055B3C 46008387 */ neg.s $f14, $f16 .L7F055B40: /* 08A670 7F055B40 4600703C */ c.lt.s $f14, $f0 -/* 08A674 7F055B44 00000000 */ nop +/* 08A674 7F055B44 00000000 */ nop /* 08A678 7F055B48 45020004 */ bc1fl .L7F055B5C /* 08A67C 7F055B4C 460E003C */ c.lt.s $f0, $f14 /* 08A680 7F055B50 10000007 */ b .L7F055B70 @@ -40280,7 +40235,7 @@ glabel posIsInFrontOfDoor .L7F055B5C: /* 08A68C 7F055B5C 24020001 */ li $v0, 1 /* 08A690 7F055B60 45000003 */ bc1f .L7F055B70 -/* 08A694 7F055B64 00000000 */ nop +/* 08A694 7F055B64 00000000 */ nop /* 08A698 7F055B68 10000001 */ b .L7F055B70 /* 08A69C 7F055B6C 24020001 */ li $v0, 1 .L7F055B70: @@ -40440,12 +40395,12 @@ void init_trigger_toxic_gas_effect(coord3d *source) //#MATCH D_80030AD0.z = source->z; if (bossGetStageNum() == LEVELID_EGYPT) { - gas_damage_flag = 120.0f; - gas_cutoff_flag = FALSE; + gasTimeToFullOpacity = 120.0f; + gasDoesDamageFlag = FALSE; return; } - gas_damage_flag = 3600.0f; - gas_cutoff_flag = TRUE; + gasTimeToFullOpacity = 3600.0f; + gasDoesDamageFlag = TRUE; } @@ -40474,18 +40429,18 @@ void handle_gas_damage(void) if (activate_gas_sound_timer != 0) { toxic_gas_sound_timer += g_GlobalTimerDelta; - if (gas_damage_flag <= toxic_gas_sound_timer) + if (gasTimeToFullOpacity <= toxic_gas_sound_timer) { - toxic_gas_sound_timer = gas_damage_flag; + toxic_gas_sound_timer = gasTimeToFullOpacity; activate_gas_sound_timer = 0; } } if (toxic_gas_sound_timer > 0.0f && g_PlayerInvincible == 0) { - fogSwitchToSolosky2(toxic_gas_sound_timer / gas_damage_flag); + fogSwitchToSolosky2(toxic_gas_sound_timer / gasTimeToFullOpacity); - if (gas_cutoff_flag == 0) { return; } + if (gasDoesDamageFlag == 0) { return; } #ifdef VERSION_EU if (D_80030ADC < (g_GlobalTimer - 0xBB)) @@ -40504,7 +40459,7 @@ void handle_gas_damage(void) } } - if (D_80030AE0 < gas_damage_flag) + if (D_80030AE0 < gasTimeToFullOpacity) { D_80030AE0 = D_80030AE0 + g_GlobalTimerDelta; if ((ptr_gas_sound == NULL) && (lvlGetControlsLockedFlag() == 0)) @@ -40575,13 +40530,13 @@ const char D_80052A44[] = ":\n"; Renders the on-screen countdown timer using minutes, seconds and milliseconds in the following format - + 00 : 00 : 00 Timer value is set using countdownTimerSetValue() */ Gfx *countdownTimerRender(Gfx *DL) { - + s32 mins; s32 secs; s32 ms; @@ -40590,16 +40545,16 @@ Gfx *countdownTimerRender(Gfx *DL) { f32 time; if (clock_drawn_flag == 0) { - + time = clock_time; if (time < 0.0f) { time = -time; } - + mins = (s32) floorFloat(time / 3600.0f); secs = (s32) floorFloat(time / 60.0f) - (mins * 60); ms = ((s32) floorFloat((time * 100.0f) / 60.0f) - (mins * 6000)) - (secs * 100); - + DL = microcode_constructor(DL); #if defined(VERSION_US) || defined(VERSION_JP) @@ -40607,28 +40562,28 @@ Gfx *countdownTimerRender(Gfx *DL) { #else valign_offset = 28; #endif - + // Minutes DL = gunDrawHudInteger(DL, (mins % 100) / 10, 0x82, HUDHALIGN_MIDDLE, ( viGetViewTop() + viGetViewHeight()) - valign_offset, HUDVALIGN_MIDDLE, 1); DL = gunDrawHudInteger(DL, mins % 10, 0x8A, HUDHALIGN_MIDDLE, ( viGetViewTop() + viGetViewHeight()) - valign_offset, HUDVALIGN_MIDDLE, 1); - - // : + + // : DL = gunDrawHudString(DL, &D_80052A44, 0x93, HUDHALIGN_MIDDLE, (viGetViewTop() + viGetViewHeight()) - valign_offset, HUDVALIGN_MIDDLE, 1); - + // Seconds DL = gunDrawHudInteger(DL, (secs % 60) / 10, 0x9C, HUDHALIGN_MIDDLE, (viGetViewTop() + viGetViewHeight()) - valign_offset, HUDVALIGN_MIDDLE, 1); DL = gunDrawHudInteger(DL, secs % 10, 0xA4, HUDHALIGN_MIDDLE, (viGetViewTop() + viGetViewHeight()) - valign_offset, HUDVALIGN_MIDDLE, 1); - + // : DL = gunDrawHudString(DL, &D_80052A44, 0xAD, HUDHALIGN_MIDDLE, (viGetViewTop() + viGetViewHeight()) - valign_offset, HUDVALIGN_MIDDLE, 1); - + // Milliseconds DL = gunDrawHudInteger(DL, (ms % 100) / 10, 0xB6, HUDHALIGN_MIDDLE, (viGetViewTop() + viGetViewHeight()) - valign_offset, HUDVALIGN_MIDDLE, 1); DL = gunDrawHudInteger(DL, ms % 10, 0xBE, HUDHALIGN_MIDDLE, (viGetViewTop() + viGetViewHeight()) - valign_offset, HUDVALIGN_MIDDLE, 1); DL = combiner_bayer_lod_perspective(DL); } - + return DL; } @@ -40662,7 +40617,53 @@ void handle_alarm_gas_timer_calldamage(void) #ifdef NONMATCHING -void sub_GAME_7F056690(void) { +// https://decomp.me/scratch/COEsd 99.07% +void sub_GAME_7F056690(void) +{ + Model *temp_s3; + PropRecord *var_s2; + ObjectRecord *temp_s1; + ModelNode *temp_v0_2; + struct ModelRoData_DisplayList_CollisionRecord *temp_s0; + + var_s2 = get_ptr_obj_pos_list_current_entry(); + + for (; var_s2 != NULL; var_s2 = var_s2->prev) + { + if ((var_s2->type == 1) && !(var_s2->flags & 2) ) + { + temp_s1 = var_s2->obj; + + if (temp_s1->state & 0x80) + { + temp_s3 = temp_s1->model; + temp_v0_2 = sub_GAME_7F04B478(temp_s1); + + if (temp_v0_2 != NULL) + { + temp_s0 = (struct ModelRoData_DisplayList_CollisionRecord *)temp_v0_2->Data; + if (temp_s0 != NULL) + { + if (sub_GAME_7F04B590(temp_s1->model->obj, temp_v0_2)) + { + // temp_s3->datas should be struct ModelRwData_DisplayList_CollisionRecord here. + struct ModelRwData_DisplayList_CollisionRecord **cr = (struct ModelRwData_DisplayList_CollisionRecord**)temp_s3->datas; + + if (temp_s0->Vertices != (Vertex*)cr[temp_s0->RwDataIndex]) + { + objFreePermanently(temp_s1, 1); + return; + } + } + + //continue; + } + } + } + + // break; + } + } } #else @@ -40740,70 +40741,32 @@ glabel sub_GAME_7F056690 -#ifdef NONMATCHING -void drop_inventory(void) { +void drop_inventory(void) +{ + ChrRecord *playerchr; + PropRecord *prop; + enum ITEM_IDS item; + enum PROP propid; + playerchr = g_CurrentPlayer->prop->chr; + + chrSetWeaponFlag4(playerchr, GUNRIGHT); + chrSetWeaponFlag4(playerchr, GUNLEFT); + + for (item = ITEM_FIST; item != ITEM_IDS_MAX; item++) + { + propid = getPropForHeldItem(item); + + if ((propid >= 0) && (bondinvHasInvItem(item) != 0)) + { + prop = something_with_generating_object(playerchr, propid, item, 0x20000000, NULL, NULL); + + if (prop != NULL) + { + propobjSetDropped(prop, DROPTYPE_DEFAULT); + objDrop(prop); + } + } + } } -#else -GLOBAL_ASM( -.text -glabel drop_inventory -/* 08B2AC 7F05677C 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 08B2B0 7F056780 3C0E8008 */ lui $t6, %hi(g_CurrentPlayer) -/* 08B2B4 7F056784 8DCEA0B0 */ lw $t6, %lo(g_CurrentPlayer)($t6) -/* 08B2B8 7F056788 AFBF0034 */ sw $ra, 0x34($sp) -/* 08B2BC 7F05678C AFB40030 */ sw $s4, 0x30($sp) -/* 08B2C0 7F056790 AFB3002C */ sw $s3, 0x2c($sp) -/* 08B2C4 7F056794 AFB20028 */ sw $s2, 0x28($sp) -/* 08B2C8 7F056798 AFB10024 */ sw $s1, 0x24($sp) -/* 08B2CC 7F05679C AFB00020 */ sw $s0, 0x20($sp) -/* 08B2D0 7F0567A0 8DCF00A8 */ lw $t7, 0xa8($t6) -/* 08B2D4 7F0567A4 00002825 */ move $a1, $zero -/* 08B2D8 7F0567A8 8DF20004 */ lw $s2, 4($t7) -/* 08B2DC 7F0567AC 0FC1487A */ jal chrSetWeaponFlag4 -/* 08B2E0 7F0567B0 02402025 */ move $a0, $s2 -/* 08B2E4 7F0567B4 02402025 */ move $a0, $s2 -/* 08B2E8 7F0567B8 0FC1487A */ jal chrSetWeaponFlag4 -/* 08B2EC 7F0567BC 24050001 */ li $a1, 1 -/* 08B2F0 7F0567C0 24100001 */ li $s0, 1 -/* 08B2F4 7F0567C4 24140059 */ li $s4, 89 -/* 08B2F8 7F0567C8 3C132000 */ lui $s3, 0x2000 -.L7F0567CC: -/* 08B2FC 7F0567CC 0FC26C91 */ jal getPropForHeldItem -/* 08B300 7F0567D0 02002025 */ move $a0, $s0 -/* 08B304 7F0567D4 04400012 */ bltz $v0, .L7F056820 -/* 08B308 7F0567D8 00408825 */ move $s1, $v0 -/* 08B30C 7F0567DC 0FC230C5 */ jal bondinvHasInvItem -/* 08B310 7F0567E0 02002025 */ move $a0, $s0 -/* 08B314 7F0567E4 1040000E */ beqz $v0, .L7F056820 -/* 08B318 7F0567E8 02402025 */ move $a0, $s2 -/* 08B31C 7F0567EC 02202825 */ move $a1, $s1 -/* 08B320 7F0567F0 02003025 */ move $a2, $s0 -/* 08B324 7F0567F4 02603825 */ move $a3, $s3 -/* 08B328 7F0567F8 AFA00010 */ sw $zero, 0x10($sp) -/* 08B32C 7F0567FC 0FC14885 */ jal something_with_generating_object -/* 08B330 7F056800 AFA00014 */ sw $zero, 0x14($sp) -/* 08B334 7F056804 10400006 */ beqz $v0, .L7F056820 -/* 08B338 7F056808 00408825 */ move $s1, $v0 -/* 08B33C 7F05680C 00402025 */ move $a0, $v0 -/* 08B340 7F056810 0FC12FF4 */ jal propobjSetDropped -/* 08B344 7F056814 24050001 */ li $a1, 1 -/* 08B348 7F056818 0FC1304C */ jal objDrop -/* 08B34C 7F05681C 02202025 */ move $a0, $s1 -.L7F056820: -/* 08B350 7F056820 26100001 */ addiu $s0, $s0, 1 -/* 08B354 7F056824 1614FFE9 */ bne $s0, $s4, .L7F0567CC -/* 08B358 7F056828 00000000 */ nop -/* 08B35C 7F05682C 8FBF0034 */ lw $ra, 0x34($sp) -/* 08B360 7F056830 8FB00020 */ lw $s0, 0x20($sp) -/* 08B364 7F056834 8FB10024 */ lw $s1, 0x24($sp) -/* 08B368 7F056838 8FB20028 */ lw $s2, 0x28($sp) -/* 08B36C 7F05683C 8FB3002C */ lw $s3, 0x2c($sp) -/* 08B370 7F056840 8FB40030 */ lw $s4, 0x30($sp) -/* 08B374 7F056844 03E00008 */ jr $ra -/* 08B378 7F056848 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - - diff --git a/src/game/chrobjhandler.h b/src/game/chrobjhandler.h index 2616a85..9252bf7 100644 --- a/src/game/chrobjhandler.h +++ b/src/game/chrobjhandler.h @@ -110,12 +110,12 @@ void trigger_remote_mine_detonation(void); void objDetach(PropRecord *prop); void objFreeEmbedmentOrProjectile(PropRecord *); -bool alarmIsActive(); +bool alarmIsActive(void); void init_trigger_toxic_gas_effect(coord3d *source); void chrSetWeaponFlag4(ChrRecord *chr, GUNHAND hand); -void sub_GAME_7F053B10(DoorRecord *door); +void door7F053B10(DoorRecord *door); void doorActivatePortal(DoorRecord *door); -void sub_GAME_7F052B00(DoorRecord *door); +void door7F052B00(DoorRecord *door); s32 sub_GAME_7F0539B8(f32 vol); void monitorSetImageByNum(MonitorRecord *mon, s32 monAnimID); void propweaponSetDual(WeaponObjRecord *leftweapon, WeaponObjRecord *rightweapon); @@ -124,21 +124,23 @@ bool countdownTimerIsRunning(void); void countdownTimerSetRunning(bool enable); void countdownTimerSetValue(f32 time); void countdownTimerSetVisible(int clocklockbits, bool unset); -void sub_GAME_7F04088C(ObjectRecord *baseobj, PadRecord *pad, Mtxf *matrix, StandTile *stan, PadRecord *pad2); +void sub_GAME_7F04088C(ObjectRecord *baseobj, struct coord3d *pad, Mtxf *matrix, StandTile *stan, struct coord3d *pos2); +void sub_GAME_7F040BA0(ObjectRecord *obj, struct coord3d *pos, Mtxf *arg2, StandTile *stan2, struct coord3d *pos2); bool chrEquipWeapon(WeaponObjRecord *wep, ChrRecord *chr); INV_ITEM_TYPE collect_or_interact_object(PropRecord *prop, bool showstring); INV_ITEM_TYPE propobjInteract(PropRecord *prop); s32 objGetDestroyedLevel(ObjectRecord *obj); void doorActivateWrapper(PropRecord *prop); bool objIsHealthy(ObjectRecord *self); -ObjectRecord *weaponFindThrown(s32 ID); -bool check_if_toxic_gas_activated(); +KeyRecord *weaponFindThrown(s32 ID); +bool check_if_toxic_gas_activated(void); HatRecord *hatCreate(bool musthaveprop, bool musthavemodel, ModelFileHeader *modeldef); PropRecord* objInitWithAutoModel(ObjectRecord* obj); +PropRecord* objInitWithModelDef(ObjectRecord* object, ModelFileHeader* header); Embedment *embedmentAllocate(void); void objDetach(PropRecord *prop); void sub_GAME_7F043650(struct WeaponObjRecord *arg0); -s32 sub_GAME_7F0446B8(struct rect4f *arg0, s32 arg1, struct rect4f *arg2, s32 arg3); +s32 chrobjTestPolygonsTouchingOrOverlap2D(struct rect4f *arg0, s32 arg1, struct rect4f *arg2, s32 arg3); s32 chrobjTestPointPolygonCollision(struct coord3d *arg0, f32 arg1, struct rect4f *arg2, s32 arg3); void maybe_detonate_object_and_its_children(PropRecord *arg0, f32 arg1, struct coord3d *arg2, s32 arg3, s32 owner); struct ModelRoData_BoundingBoxRecord* chrobjGetBboxFromObjectRecord(ObjectRecord *arg0); @@ -147,5 +149,9 @@ s32 sub_GAME_7F03F598(coord3d* pos, f32 arg1, BoundPadRecord *boundpads); void sub_GAME_7F0A1DA0(f32*, f32*, f32*, f32*, f32, f32, f32, f32, f32, f32); void sub_GAME_7F03F90C(Model *model, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4); s32 sub_GAME_7F0448A8(struct PropRecord *arg0); +PropRecord* sub_GAME_7F051DD8(struct ObjectRecord* arg0, ModelFileHeader* arg1); +void sub_GAME_7F052030(WeaponObjRecord* arg0, ChrRecord* arg1); +void drop_inventory(void); +void sub_GAME_7F056690(void); #endif diff --git a/src/game/chrprop.c b/src/game/chrprop.c index cbf20dc..1c320ef 100644 --- a/src/game/chrprop.c +++ b/src/game/chrprop.c @@ -1,43 +1,39 @@ #include +#include #include #include #include #include -#include +#include #include +#include +#include #include "bg.h" #include "bondview.h" +#include "cheat_buttons.h" #include "chr.h" #include "chrai.h" +#include "chraidata.h" #include "chrlv.h" #include "chrobjhandler.h" -#include "gun.h" -#include "lvl_text.h" -#include "math_floor.h" -#include "math_ceil.h" -#include "math_atan2f.h" -#include "player.h" -#include "chraidata.h" -#include -#include "objecthandler.h" -#include "chrobjhandler.h" -#include "initanitable.h" -#include -#include "lvl.h" -#include "stan.h" -#include "chr.h" -#include "mp_music.h" -#include "objective_status.h" -#include "bondview.h" -#include -#include "loadobjectmodel.h" -#include "cheat_buttons.h" -#include "player.h" -#include "player_2.h" +#include "explosions.h" #include "file.h" #include "fog.h" +#include "gun.h" +#include "initanitable.h" +#include "loadobjectmodel.h" +#include "lvl.h" +#include "lvl_text.h" +#include "math_atan2f.h" +#include "math_ceil.h" +#include "math_floor.h" +#include "mp_music.h" +#include "player.h" +#include "objecthandler.h" +#include "objective_status.h" +#include "player.h" +#include "player_2.h" #include "stan.h" -#include "explosions.h" // bss @@ -61,7 +57,7 @@ struct roomproplistchunk *RoomPropListChunks; /** * Array of pointers, containing onscreen props. - * + * * Address 0x80071620. */ PropRecord *g_OnScreenPropList[ONSCREEN_PROP_LIST_LEN]; @@ -75,6 +71,7 @@ PropRecord **g_LastOnScreenProp; /** * Count of onscreen props. * Address 0x80071DF4. + * canonically propznum */ s32 g_OnScreenPropCount; @@ -86,9 +83,9 @@ u32 dword_CODE_bss_80071DFC; WeaponObjRecord* temp_mine_table[30]; //CODE.bss:80071E78 -f32 gas_damage_flag; +f32 gasTimeToFullOpacity; //CODE.bss:80071E7C -u32 gas_cutoff_flag; +u32 gasDoesDamageFlag; /** * Address 0x80071E80. @@ -190,7 +187,7 @@ void propExecuteTickOperation(PropRecord *prop, INV_ITEM_TYPE op); /** * Counts onscreen props. - * + * * Address 0x7F03A240. */ void chraiUpdateOnscreenPropCount(void) @@ -221,6 +218,9 @@ void chraiUpdateOnscreenPropCount(void) if(1) { // removed + #ifdef DEBUG + assert(propznumUnk18; + f32 f = g_OnScreenPropList[j]->zDepth; if (phi_f12 < f) { @@ -276,7 +276,7 @@ PropRecord *get_ptr_obj_pos_list_current_entry(void) -PropRecord* propAllocate(void) +PropRecord* chrpropAllocate(void) { PropRecord* prop; @@ -447,11 +447,11 @@ Gfx *chrpropRender(Gfx * gdl, PropRecord *prop, s32 withalpha) } else if (type == PROP_TYPE_EXPLOSION) { - gdl = unk09c250RenderPropExplosion(prop, gdl); + gdl = explosionRenderPropExplosion(prop, gdl, withalpha); } else if (type == PROP_TYPE_SMOKE) { - gdl = unk09c250RenderPropSmoke(prop, gdl); + gdl = explosionRenderPropSmoke(prop, gdl, withalpha); } else if (type == PROP_TYPE_VIEWER) { @@ -464,18 +464,8 @@ Gfx *chrpropRender(Gfx * gdl, PropRecord *prop, s32 withalpha) -#ifdef NONMATCHING - /** * Address 0x7F03A6F4. - * - * decomp status: - * - compiles: yes - * - stack resize: ok - * - identical instructions: fail - * - identical registers: fail - * - * notes: can't seem to iterate the prop lists correctly. Maybe type definitions are wrong? */ Gfx *chrpropsRenderPass(Gfx *gdl, s32 roomid, s32 renderpass) { @@ -485,7 +475,7 @@ Gfx *chrpropsRenderPass(Gfx *gdl, s32 roomid, s32 renderpass) s32 i; s32* rp; s32 unused2; - s32 sp48[PROPRECORD_STAN_ROOM_LEN]; // 72 + s32 sp48[PROPRECORD_STAN_ROOM_LEN]; s32 unused3; s32 unused4; @@ -519,16 +509,15 @@ Gfx *chrpropsRenderPass(Gfx *gdl, s32 roomid, s32 renderpass) { flag = 1; } - + if (flag != 0) { - flag=0; - - chraiGetPropRoomIds(prop, &sp48); - + flag = 0; + chraiGetPropRoomIds(prop, sp48); + for (rp = sp48; *rp >= 0; rp++) { - if (getROOMID_Bitflags(*rp)) + if (getROOMID_isRendered(*rp)) { if (roomid == *rp) { @@ -549,25 +538,18 @@ Gfx *chrpropsRenderPass(Gfx *gdl, s32 roomid, s32 renderpass) } else { - /** - * decomp problem area. - * (target) precurser loop comparison seems to be loading g_OnScreenPropList address plus one byte. - * This code generates a `beqzl` at the end of the loop (and `bnez` at start), while target - * uses `bnezl` (and `bnez` at start). - * - */ - for (pp = g_OnScreenPropList; pp <= g_LastOnScreenProp; pp++) + for (pp = g_OnScreenPropList; pp < g_LastOnScreenProp; pp++) { prop = *pp; - flag = 0; if (prop != NULL) { - chraiGetPropRoomIds(prop, &sp48); + flag = 0; + chraiGetPropRoomIds(prop, sp48); for (rp = sp48; *rp >= 0; rp++) { - if (getROOMID_Bitflags(*rp)) + if (getROOMID_isRendered(*rp)) { if (roomid == *rp) { @@ -593,283 +575,32 @@ Gfx *chrpropsRenderPass(Gfx *gdl, s32 roomid, s32 renderpass) return bgScissorCurrentPlayerViewDefault(gdl); } -#else -GLOBAL_ASM( -.text -glabel chrpropsRenderPass -/* 06F224 7F03A6F4 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 06F228 7F03A6F8 AFBF0034 */ sw $ra, 0x34($sp) -/* 06F22C 7F03A6FC AFB70030 */ sw $s7, 0x30($sp) -/* 06F230 7F03A700 AFB50028 */ sw $s5, 0x28($sp) -/* 06F234 7F03A704 AFB40024 */ sw $s4, 0x24($sp) -/* 06F238 7F03A708 0080A025 */ move $s4, $a0 -/* 06F23C 7F03A70C 00C0A825 */ move $s5, $a2 -/* 06F240 7F03A710 00A0B825 */ move $s7, $a1 -/* 06F244 7F03A714 AFB6002C */ sw $s6, 0x2c($sp) -/* 06F248 7F03A718 AFB30020 */ sw $s3, 0x20($sp) -/* 06F24C 7F03A71C AFB2001C */ sw $s2, 0x1c($sp) -/* 06F250 7F03A720 AFB10018 */ sw $s1, 0x18($sp) -/* 06F254 7F03A724 0C001A57 */ jal bossGetStageNum -/* 06F258 7F03A728 AFB00014 */ sw $s0, 0x14($sp) -/* 06F25C 7F03A72C 24010036 */ li $at, 54 -/* 06F260 7F03A730 14410008 */ bne $v0, $at, .L7F03A754 -/* 06F264 7F03A734 00000000 */ nop -/* 06F268 7F03A738 16A00003 */ bnez $s5, .L7F03A748 -/* 06F26C 7F03A73C 24010002 */ li $at, 2 -/* 06F270 7F03A740 10000083 */ b .L7F03A950 -/* 06F274 7F03A744 02801025 */ move $v0, $s4 -.L7F03A748: -/* 06F278 7F03A748 16A10002 */ bne $s5, $at, .L7F03A754 -/* 06F27C 7F03A74C 00000000 */ nop -/* 06F280 7F03A750 0000A825 */ move $s5, $zero -.L7F03A754: -/* 06F284 7F03A754 12A00003 */ beqz $s5, .L7F03A764 -/* 06F288 7F03A758 24010002 */ li $at, 2 -/* 06F28C 7F03A75C 16A10043 */ bne $s5, $at, .L7F03A86C -/* 06F290 7F03A760 3C138007 */ lui $s3, %hi(g_OnScreenPropList) -.L7F03A764: -/* 06F294 7F03A764 3C138007 */ lui $s3, %hi(g_LastOnScreenProp) -/* 06F298 7F03A768 8E731DF0 */ lw $s3, %lo(g_LastOnScreenProp)($s3) -/* 06F29C 7F03A76C 3C0E8007 */ lui $t6, %hi(g_OnScreenPropList) -/* 06F2A0 7F03A770 25CE1620 */ addiu $t6, %lo(g_OnScreenPropList) # addiu $t6, $t6, 0x1620 -/* 06F2A4 7F03A774 2673FFFC */ addiu $s3, $s3, -4 -/* 06F2A8 7F03A778 026E082B */ sltu $at, $s3, $t6 -/* 06F2AC 7F03A77C 14200072 */ bnez $at, .L7F03A948 -/* 06F2B0 7F03A780 27B60048 */ addiu $s6, $sp, 0x48 -/* 06F2B4 7F03A784 8E720000 */ lw $s2, ($s3) -.L7F03A788: -/* 06F2B8 7F03A788 12400030 */ beqz $s2, .L7F03A84C -/* 06F2BC 7F03A78C 00000000 */ nop -/* 06F2C0 7F03A790 16A00007 */ bnez $s5, .L7F03A7B0 -/* 06F2C4 7F03A794 00008825 */ move $s1, $zero -/* 06F2C8 7F03A798 924F0001 */ lbu $t7, 1($s2) -/* 06F2CC 7F03A79C 31F80021 */ andi $t8, $t7, 0x21 -/* 06F2D0 7F03A7A0 57000004 */ bnezl $t8, .L7F03A7B4 -/* 06F2D4 7F03A7A4 24010002 */ li $at, 2 -/* 06F2D8 7F03A7A8 1000000A */ b .L7F03A7D4 -/* 06F2DC 7F03A7AC 24110001 */ li $s1, 1 -.L7F03A7B0: -/* 06F2E0 7F03A7B0 24010002 */ li $at, 2 -.L7F03A7B4: -/* 06F2E4 7F03A7B4 16A10007 */ bne $s5, $at, .L7F03A7D4 -/* 06F2E8 7F03A7B8 00000000 */ nop -/* 06F2EC 7F03A7BC 92590001 */ lbu $t9, 1($s2) -/* 06F2F0 7F03A7C0 24010001 */ li $at, 1 -/* 06F2F4 7F03A7C4 33280021 */ andi $t0, $t9, 0x21 -/* 06F2F8 7F03A7C8 15010002 */ bne $t0, $at, .L7F03A7D4 -/* 06F2FC 7F03A7CC 00000000 */ nop -/* 06F300 7F03A7D0 24110001 */ li $s1, 1 -.L7F03A7D4: -/* 06F304 7F03A7D4 1220001D */ beqz $s1, .L7F03A84C -/* 06F308 7F03A7D8 02402025 */ move $a0, $s2 -/* 06F30C 7F03A7DC 00008825 */ move $s1, $zero -/* 06F310 7F03A7E0 02C02825 */ move $a1, $s6 -/* 06F314 7F03A7E4 0FC0F2E3 */ jal chraiGetPropRoomIds -/* 06F318 7F03A7E8 02C08025 */ move $s0, $s6 -/* 06F31C 7F03A7EC 8FA90048 */ lw $t1, 0x48($sp) -/* 06F320 7F03A7F0 27AA0048 */ addiu $t2, $sp, 0x48 -/* 06F324 7F03A7F4 0520000F */ bltz $t1, .L7F03A834 -/* 06F328 7F03A7F8 00000000 */ nop -/* 06F32C 7F03A7FC 8D440000 */ lw $a0, ($t2) -.L7F03A800: -/* 06F330 7F03A800 0FC2D794 */ jal getROOMID_Bitflags -/* 06F334 7F03A804 00000000 */ nop -/* 06F338 7F03A808 50400007 */ beql $v0, $zero, .L7F03A828 -/* 06F33C 7F03A80C 8E040004 */ lw $a0, 4($s0) -/* 06F340 7F03A810 8E0B0000 */ lw $t3, ($s0) -/* 06F344 7F03A814 16EB0007 */ bne $s7, $t3, .L7F03A834 -/* 06F348 7F03A818 00000000 */ nop -/* 06F34C 7F03A81C 10000005 */ b .L7F03A834 -/* 06F350 7F03A820 24110001 */ li $s1, 1 -/* 06F354 7F03A824 8E040004 */ lw $a0, 4($s0) -.L7F03A828: -/* 06F358 7F03A828 26100004 */ addiu $s0, $s0, 4 -/* 06F35C 7F03A82C 0481FFF4 */ bgez $a0, .L7F03A800 -/* 06F360 7F03A830 00000000 */ nop -.L7F03A834: -/* 06F364 7F03A834 12200005 */ beqz $s1, .L7F03A84C -/* 06F368 7F03A838 02802025 */ move $a0, $s4 -/* 06F36C 7F03A83C 02402825 */ move $a1, $s2 -/* 06F370 7F03A840 0FC0E98B */ jal chrpropRender -/* 06F374 7F03A844 00003025 */ move $a2, $zero -/* 06F378 7F03A848 0040A025 */ move $s4, $v0 -.L7F03A84C: -/* 06F37C 7F03A84C 3C0C8007 */ lui $t4, %hi(g_OnScreenPropList) -/* 06F380 7F03A850 258C1620 */ addiu $t4, %lo(g_OnScreenPropList) # addiu $t4, $t4, 0x1620 -/* 06F384 7F03A854 2673FFFC */ addiu $s3, $s3, -4 -/* 06F388 7F03A858 026C082B */ sltu $at, $s3, $t4 -/* 06F38C 7F03A85C 5020FFCA */ beql $at, $zero, .L7F03A788 -/* 06F390 7F03A860 8E720000 */ lw $s2, ($s3) -/* 06F394 7F03A864 10000038 */ b .L7F03A948 -/* 06F398 7F03A868 00000000 */ nop -.L7F03A86C: -/* 06F39C 7F03A86C 3C158007 */ lui $s5, %hi(g_LastOnScreenProp) -/* 06F3A0 7F03A870 26B51DF0 */ addiu $s5, %lo(g_LastOnScreenProp) # addiu $s5, $s5, 0x1df0 -/* 06F3A4 7F03A874 8EAD0000 */ lw $t5, ($s5) -/* 06F3A8 7F03A878 3C0E8007 */ lui $t6, %hi(g_OnScreenPropList+1) -/* 06F3AC 7F03A87C 25CE1621 */ addiu $t6, %lo(g_OnScreenPropList+1) # addiu $t6, $t6, 0x1621 -/* 06F3B0 7F03A880 01AE082B */ sltu $at, $t5, $t6 -/* 06F3B4 7F03A884 14200030 */ bnez $at, .L7F03A948 -/* 06F3B8 7F03A888 26731620 */ addiu $s3, $s3, %lo(g_OnScreenPropList) -/* 06F3BC 7F03A88C 27B60048 */ addiu $s6, $sp, 0x48 -/* 06F3C0 7F03A890 8E720000 */ lw $s2, ($s3) -.L7F03A894: -/* 06F3C4 7F03A894 00008825 */ move $s1, $zero -/* 06F3C8 7F03A898 02C02825 */ move $a1, $s6 -/* 06F3CC 7F03A89C 12400025 */ beqz $s2, .L7F03A934 -/* 06F3D0 7F03A8A0 02402025 */ move $a0, $s2 -/* 06F3D4 7F03A8A4 0FC0F2E3 */ jal chraiGetPropRoomIds -/* 06F3D8 7F03A8A8 02C08025 */ move $s0, $s6 -/* 06F3DC 7F03A8AC 8FAF0048 */ lw $t7, 0x48($sp) -/* 06F3E0 7F03A8B0 27B80048 */ addiu $t8, $sp, 0x48 -/* 06F3E4 7F03A8B4 05E0000F */ bltz $t7, .L7F03A8F4 -/* 06F3E8 7F03A8B8 00000000 */ nop -/* 06F3EC 7F03A8BC 8F040000 */ lw $a0, ($t8) -.L7F03A8C0: -/* 06F3F0 7F03A8C0 0FC2D794 */ jal getROOMID_Bitflags -/* 06F3F4 7F03A8C4 00000000 */ nop -/* 06F3F8 7F03A8C8 50400007 */ beql $v0, $zero, .L7F03A8E8 -/* 06F3FC 7F03A8CC 8E040004 */ lw $a0, 4($s0) -/* 06F400 7F03A8D0 8E190000 */ lw $t9, ($s0) -/* 06F404 7F03A8D4 16F90007 */ bne $s7, $t9, .L7F03A8F4 -/* 06F408 7F03A8D8 00000000 */ nop -/* 06F40C 7F03A8DC 10000005 */ b .L7F03A8F4 -/* 06F410 7F03A8E0 24110001 */ li $s1, 1 -/* 06F414 7F03A8E4 8E040004 */ lw $a0, 4($s0) -.L7F03A8E8: -/* 06F418 7F03A8E8 26100004 */ addiu $s0, $s0, 4 -/* 06F41C 7F03A8EC 0481FFF4 */ bgez $a0, .L7F03A8C0 -/* 06F420 7F03A8F0 00000000 */ nop -.L7F03A8F4: -/* 06F424 7F03A8F4 52200010 */ beql $s1, $zero, .L7F03A938 -/* 06F428 7F03A8F8 8EAA0000 */ lw $t2, ($s5) -/* 06F42C 7F03A8FC 92480001 */ lbu $t0, 1($s2) -/* 06F430 7F03A900 02802025 */ move $a0, $s4 -/* 06F434 7F03A904 02402825 */ move $a1, $s2 -/* 06F438 7F03A908 31090020 */ andi $t1, $t0, 0x20 -/* 06F43C 7F03A90C 51200005 */ beql $t1, $zero, .L7F03A924 -/* 06F440 7F03A910 02802025 */ move $a0, $s4 -/* 06F444 7F03A914 0FC0E98B */ jal chrpropRender -/* 06F448 7F03A918 00003025 */ move $a2, $zero -/* 06F44C 7F03A91C 0040A025 */ move $s4, $v0 -/* 06F450 7F03A920 02802025 */ move $a0, $s4 -.L7F03A924: -/* 06F454 7F03A924 02402825 */ move $a1, $s2 -/* 06F458 7F03A928 0FC0E98B */ jal chrpropRender -/* 06F45C 7F03A92C 24060001 */ li $a2, 1 -/* 06F460 7F03A930 0040A025 */ move $s4, $v0 -.L7F03A934: -/* 06F464 7F03A934 8EAA0000 */ lw $t2, ($s5) -.L7F03A938: -/* 06F468 7F03A938 26730004 */ addiu $s3, $s3, 4 -/* 06F46C 7F03A93C 026A082B */ sltu $at, $s3, $t2 -/* 06F470 7F03A940 5420FFD4 */ bnezl $at, .L7F03A894 -/* 06F474 7F03A944 8E720000 */ lw $s2, ($s3) -.L7F03A948: -/* 06F478 7F03A948 0FC2D3ED */ jal bgScissorCurrentPlayerViewDefault -/* 06F47C 7F03A94C 02802025 */ move $a0, $s4 -.L7F03A950: -/* 06F480 7F03A950 8FBF0034 */ lw $ra, 0x34($sp) -/* 06F484 7F03A954 8FB00014 */ lw $s0, 0x14($sp) -/* 06F488 7F03A958 8FB10018 */ lw $s1, 0x18($sp) -/* 06F48C 7F03A95C 8FB2001C */ lw $s2, 0x1c($sp) -/* 06F490 7F03A960 8FB30020 */ lw $s3, 0x20($sp) -/* 06F494 7F03A964 8FB40024 */ lw $s4, 0x24($sp) -/* 06F498 7F03A968 8FB50028 */ lw $s5, 0x28($sp) -/* 06F49C 7F03A96C 8FB6002C */ lw $s6, 0x2c($sp) -/* 06F4A0 7F03A970 8FB70030 */ lw $s7, 0x30($sp) -/* 06F4A4 7F03A974 03E00008 */ jr $ra -/* 06F4A8 7F03A978 27BD0070 */ addiu $sp, $sp, 0x70 -) -#endif - -#ifdef NONMATCHING +/** + * Address 0x7F03A97C. +*/ s32 sub_GAME_7F03A97C(s32 index, coord3d* arg1, coord3d* arg2) { - s32 sp34; - s32 sp30; - s32 sp2C; - s32 sp28; - s32 sp24; - s32 sp20; + s32 sp2C[3]; + s32 sp20[3]; s_room_info* temp_v0; - temp_v0 = &array_room_info[index]; + temp_v0 = &g_BgRoomInfo[index]; if (temp_v0->ptr_unique_collision_points != NULL) { - sp20 = (s32) temp_v0->minbounds.f[0]; - sp24 = (s32) temp_v0->minbounds.f[1]; - sp28 = (s32) temp_v0->minbounds.f[2]; - sp2C = (s32) temp_v0->maxbounds.f[0]; - sp30 = (s32) temp_v0->maxbounds.f[1]; - sp34 = (s32) temp_v0->maxbounds.f[2]; - if (bgTestLineIntersectsBbox(arg1, arg2, &sp20, &sp2C) != 0) { + sp20[0] = temp_v0->minbounds.f[0]; + sp20[1] = temp_v0->minbounds.f[1]; + sp20[2] = temp_v0->minbounds.f[2]; + sp2C[0] = temp_v0->maxbounds.f[0]; + sp2C[1] = temp_v0->maxbounds.f[1]; + sp2C[2] = temp_v0->maxbounds.f[2]; + if (bgTestLineIntersectsBbox(arg1, arg2, sp20, sp2C) != 0) { return 1; } } return 0; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03A97C -/* 06F4AC 7F03A97C 00047080 */ sll $t6, $a0, 2 -/* 06F4B0 7F03A980 01C47021 */ addu $t6, $t6, $a0 -/* 06F4B4 7F03A984 3C0F8004 */ lui $t7, %hi(array_room_info) -/* 06F4B8 7F03A988 25EF1414 */ addiu $t7, %lo(array_room_info) # addiu $t7, $t7, 0x1414 -/* 06F4BC 7F03A98C 000E7100 */ sll $t6, $t6, 4 -/* 06F4C0 7F03A990 01CF1021 */ addu $v0, $t6, $t7 -/* 06F4C4 7F03A994 8C58002C */ lw $t8, 0x2c($v0) -/* 06F4C8 7F03A998 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 06F4CC 7F03A99C AFBF0014 */ sw $ra, 0x14($sp) -/* 06F4D0 7F03A9A0 AFA5003C */ sw $a1, 0x3c($sp) -/* 06F4D4 7F03A9A4 13000022 */ beqz $t8, .L7F03AA30 -/* 06F4D8 7F03A9A8 AFA60040 */ sw $a2, 0x40($sp) -/* 06F4DC 7F03A9AC C4440038 */ lwc1 $f4, 0x38($v0) -/* 06F4E0 7F03A9B0 C448003C */ lwc1 $f8, 0x3c($v0) -/* 06F4E4 7F03A9B4 C4500040 */ lwc1 $f16, 0x40($v0) -/* 06F4E8 7F03A9B8 4600218D */ trunc.w.s $f6, $f4 -/* 06F4EC 7F03A9BC C4440044 */ lwc1 $f4, 0x44($v0) -/* 06F4F0 7F03A9C0 00A02025 */ move $a0, $a1 -/* 06F4F4 7F03A9C4 4600428D */ trunc.w.s $f10, $f8 -/* 06F4F8 7F03A9C8 C4480048 */ lwc1 $f8, 0x48($v0) -/* 06F4FC 7F03A9CC 44083000 */ mfc1 $t0, $f6 -/* 06F500 7F03A9D0 4600848D */ trunc.w.s $f18, $f16 -/* 06F504 7F03A9D4 C450004C */ lwc1 $f16, 0x4c($v0) -/* 06F508 7F03A9D8 440A5000 */ mfc1 $t2, $f10 -/* 06F50C 7F03A9DC 4600218D */ trunc.w.s $f6, $f4 -/* 06F510 7F03A9E0 440C9000 */ mfc1 $t4, $f18 -/* 06F514 7F03A9E4 AFA80020 */ sw $t0, 0x20($sp) -/* 06F518 7F03A9E8 4600428D */ trunc.w.s $f10, $f8 -/* 06F51C 7F03A9EC 440E3000 */ mfc1 $t6, $f6 -/* 06F520 7F03A9F0 00C02825 */ move $a1, $a2 -/* 06F524 7F03A9F4 4600848D */ trunc.w.s $f18, $f16 -/* 06F528 7F03A9F8 44185000 */ mfc1 $t8, $f10 -/* 06F52C 7F03A9FC 27A60020 */ addiu $a2, $sp, 0x20 -/* 06F530 7F03AA00 27A7002C */ addiu $a3, $sp, 0x2c -/* 06F534 7F03AA04 44089000 */ mfc1 $t0, $f18 -/* 06F538 7F03AA08 AFAA0024 */ sw $t2, 0x24($sp) -/* 06F53C 7F03AA0C AFAC0028 */ sw $t4, 0x28($sp) -/* 06F540 7F03AA10 AFAE002C */ sw $t6, 0x2c($sp) -/* 06F544 7F03AA14 AFB80030 */ sw $t8, 0x30($sp) -/* 06F548 7F03AA18 0FC2DB3B */ jal bgTestLineIntersectsBbox -/* 06F54C 7F03AA1C AFA80034 */ sw $t0, 0x34($sp) -/* 06F550 7F03AA20 50400004 */ beql $v0, $zero, .L7F03AA34 -/* 06F554 7F03AA24 00001025 */ move $v0, $zero -/* 06F558 7F03AA28 10000002 */ b .L7F03AA34 -/* 06F55C 7F03AA2C 24020001 */ li $v0, 1 -.L7F03AA30: -/* 06F560 7F03AA30 00001025 */ move $v0, $zero -.L7F03AA34: -/* 06F564 7F03AA34 8FBF0014 */ lw $ra, 0x14($sp) -/* 06F568 7F03AA38 27BD0038 */ addiu $sp, $sp, 0x38 -/* 06F56C 7F03AA3C 03E00008 */ jr $ra -/* 06F570 7F03AA40 00000000 */ nop -) -#endif - @@ -1012,7 +743,7 @@ glabel sub_GAME_7F03AB58 /* 06F724 7F03ABF4 02402025 */ move $a0, $s2 /* 06F728 7F03ABF8 8FA50224 */ lw $a1, 0x224($sp) /* 06F72C 7F03ABFC 8E060000 */ lw $a2, ($s0) -/* 06F730 7F03AC00 0FC2DE9E */ jal sub_GAME_7F0B7A78 +/* 06F730 7F03AC00 0FC2DE9E */ jal bgTestBulletHitBackground /* 06F734 7F03AC04 02603825 */ move $a3, $s3 /* 06F738 7F03AC08 10400069 */ beqz $v0, .L7F03ADB0 /* 06F73C 7F03AC0C C7A40054 */ lwc1 $f4, 0x54($sp) @@ -1033,15 +764,15 @@ glabel sub_GAME_7F03AB58 /* 06F778 7F03AC48 C6200000 */ lwc1 $f0, ($s1) /* 06F77C 7F03AC4C C6420000 */ lwc1 $f2, ($s2) /* 06F780 7F03AC50 4600103E */ c.le.s $f2, $f0 -/* 06F784 7F03AC54 00000000 */ nop +/* 06F784 7F03AC54 00000000 */ nop /* 06F788 7F03AC58 4502000A */ bc1fl .L7F03AC84 /* 06F78C 7F03AC5C 4602003E */ c.le.s $f0, $f2 /* 06F790 7F03AC60 4606103E */ c.le.s $f2, $f6 -/* 06F794 7F03AC64 00000000 */ nop +/* 06F794 7F03AC64 00000000 */ nop /* 06F798 7F03AC68 45020006 */ bc1fl .L7F03AC84 /* 06F79C 7F03AC6C 4602003E */ c.le.s $f0, $f2 /* 06F7A0 7F03AC70 4600303C */ c.lt.s $f6, $f0 -/* 06F7A4 7F03AC74 00000000 */ nop +/* 06F7A4 7F03AC74 00000000 */ nop /* 06F7A8 7F03AC78 4503000E */ bc1tl .L7F03ACB4 /* 06F7AC 7F03AC7C C6200004 */ lwc1 $f0, 4($s1) /* 06F7B0 7F03AC80 4602003E */ c.le.s $f0, $f2 @@ -1050,11 +781,11 @@ glabel sub_GAME_7F03AB58 /* 06F7B8 7F03AC88 4502004A */ bc1fl .L7F03ADB4 /* 06F7BC 7F03AC8C 26100004 */ addiu $s0, $s0, 4 /* 06F7C0 7F03AC90 4602203E */ c.le.s $f4, $f2 -/* 06F7C4 7F03AC94 00000000 */ nop +/* 06F7C4 7F03AC94 00000000 */ nop /* 06F7C8 7F03AC98 45020046 */ bc1fl .L7F03ADB4 /* 06F7CC 7F03AC9C 26100004 */ addiu $s0, $s0, 4 /* 06F7D0 7F03ACA0 4604003C */ c.lt.s $f0, $f4 -/* 06F7D4 7F03ACA4 00000000 */ nop +/* 06F7D4 7F03ACA4 00000000 */ nop /* 06F7D8 7F03ACA8 45020042 */ bc1fl .L7F03ADB4 /* 06F7DC 7F03ACAC 26100004 */ addiu $s0, $s0, 4 /* 06F7E0 7F03ACB0 C6200004 */ lwc1 $f0, 4($s1) @@ -1062,15 +793,15 @@ glabel sub_GAME_7F03AB58 /* 06F7E4 7F03ACB4 C6420004 */ lwc1 $f2, 4($s2) /* 06F7E8 7F03ACB8 C7A80058 */ lwc1 $f8, 0x58($sp) /* 06F7EC 7F03ACBC 4600103E */ c.le.s $f2, $f0 -/* 06F7F0 7F03ACC0 00000000 */ nop +/* 06F7F0 7F03ACC0 00000000 */ nop /* 06F7F4 7F03ACC4 4502000A */ bc1fl .L7F03ACF0 /* 06F7F8 7F03ACC8 4602003E */ c.le.s $f0, $f2 /* 06F7FC 7F03ACCC 4608103E */ c.le.s $f2, $f8 -/* 06F800 7F03ACD0 00000000 */ nop +/* 06F800 7F03ACD0 00000000 */ nop /* 06F804 7F03ACD4 45020006 */ bc1fl .L7F03ACF0 /* 06F808 7F03ACD8 4602003E */ c.le.s $f0, $f2 /* 06F80C 7F03ACDC 4600403C */ c.lt.s $f8, $f0 -/* 06F810 7F03ACE0 00000000 */ nop +/* 06F810 7F03ACE0 00000000 */ nop /* 06F814 7F03ACE4 4503000E */ bc1tl .L7F03AD20 /* 06F818 7F03ACE8 C6200008 */ lwc1 $f0, 8($s1) /* 06F81C 7F03ACEC 4602003E */ c.le.s $f0, $f2 @@ -1079,11 +810,11 @@ glabel sub_GAME_7F03AB58 /* 06F824 7F03ACF4 4502002F */ bc1fl .L7F03ADB4 /* 06F828 7F03ACF8 26100004 */ addiu $s0, $s0, 4 /* 06F82C 7F03ACFC 4602503E */ c.le.s $f10, $f2 -/* 06F830 7F03AD00 00000000 */ nop +/* 06F830 7F03AD00 00000000 */ nop /* 06F834 7F03AD04 4502002B */ bc1fl .L7F03ADB4 /* 06F838 7F03AD08 26100004 */ addiu $s0, $s0, 4 /* 06F83C 7F03AD0C 460A003C */ c.lt.s $f0, $f10 -/* 06F840 7F03AD10 00000000 */ nop +/* 06F840 7F03AD10 00000000 */ nop /* 06F844 7F03AD14 45020027 */ bc1fl .L7F03ADB4 /* 06F848 7F03AD18 26100004 */ addiu $s0, $s0, 4 /* 06F84C 7F03AD1C C6200008 */ lwc1 $f0, 8($s1) @@ -1091,15 +822,15 @@ glabel sub_GAME_7F03AB58 /* 06F850 7F03AD20 C6420008 */ lwc1 $f2, 8($s2) /* 06F854 7F03AD24 C7B0005C */ lwc1 $f16, 0x5c($sp) /* 06F858 7F03AD28 4600103E */ c.le.s $f2, $f0 -/* 06F85C 7F03AD2C 00000000 */ nop +/* 06F85C 7F03AD2C 00000000 */ nop /* 06F860 7F03AD30 4502000A */ bc1fl .L7F03AD5C /* 06F864 7F03AD34 4602003E */ c.le.s $f0, $f2 /* 06F868 7F03AD38 4610103E */ c.le.s $f2, $f16 -/* 06F86C 7F03AD3C 00000000 */ nop +/* 06F86C 7F03AD3C 00000000 */ nop /* 06F870 7F03AD40 45020006 */ bc1fl .L7F03AD5C /* 06F874 7F03AD44 4602003E */ c.le.s $f0, $f2 /* 06F878 7F03AD48 4600803C */ c.lt.s $f16, $f0 -/* 06F87C 7F03AD4C 00000000 */ nop +/* 06F87C 7F03AD4C 00000000 */ nop /* 06F880 7F03AD50 4503000E */ bc1tl .L7F03AD8C /* 06F884 7F03AD54 AFA20238 */ sw $v0, 0x238($sp) /* 06F888 7F03AD58 4602003E */ c.le.s $f0, $f2 @@ -1108,11 +839,11 @@ glabel sub_GAME_7F03AB58 /* 06F890 7F03AD60 45020014 */ bc1fl .L7F03ADB4 /* 06F894 7F03AD64 26100004 */ addiu $s0, $s0, 4 /* 06F898 7F03AD68 4602903E */ c.le.s $f18, $f2 -/* 06F89C 7F03AD6C 00000000 */ nop +/* 06F89C 7F03AD6C 00000000 */ nop /* 06F8A0 7F03AD70 45020010 */ bc1fl .L7F03ADB4 /* 06F8A4 7F03AD74 26100004 */ addiu $s0, $s0, 4 /* 06F8A8 7F03AD78 4612003C */ c.lt.s $f0, $f18 -/* 06F8AC 7F03AD7C 00000000 */ nop +/* 06F8AC 7F03AD7C 00000000 */ nop /* 06F8B0 7F03AD80 4502000C */ bc1fl .L7F03ADB4 /* 06F8B4 7F03AD84 26100004 */ addiu $s0, $s0, 4 .L7F03AD88: @@ -1200,7 +931,7 @@ glabel sub_GAME_7F03ADF4 /* 06F9AC 7F03AE7C 8FA402FC */ lw $a0, 0x2fc($sp) /* 06F9B0 7F03AE80 8FA50300 */ lw $a1, 0x300($sp) /* 06F9B4 7F03AE84 02603025 */ move $a2, $s3 -/* 06F9B8 7F03AE88 0FC2DE9E */ jal sub_GAME_7F0B7A78 +/* 06F9B8 7F03AE88 0FC2DE9E */ jal bgTestBulletHitBackground /* 06F9BC 7F03AE8C 8FA70310 */ lw $a3, 0x310($sp) /* 06F9C0 7F03AE90 50400004 */ beql $v0, $zero, .L7F03AEA4 /* 06F9C4 7F03AE94 02602025 */ move $a0, $s3 @@ -1225,7 +956,7 @@ glabel sub_GAME_7F03ADF4 .L7F03AED4: /* 06FA04 7F03AED4 90480000 */ lbu $t0, ($v0) /* 06FA08 7F03AED8 11040004 */ beq $t0, $a0, .L7F03AEEC -/* 06FA0C 7F03AEDC 00000000 */ nop +/* 06FA0C 7F03AEDC 00000000 */ nop /* 06FA10 7F03AEE0 24630001 */ addiu $v1, $v1, 1 /* 06FA14 7F03AEE4 1470FFFB */ bne $v1, $s0, .L7F03AED4 /* 06FA18 7F03AEE8 24420001 */ addiu $v0, $v0, 1 @@ -1241,7 +972,7 @@ glabel sub_GAME_7F03ADF4 /* 06FA38 7F03AF08 26310001 */ addiu $s1, $s1, 1 /* 06FA3C 7F03AF0C 0225082A */ slt $at, $s1, $a1 /* 06FA40 7F03AF10 1420FFEA */ bnez $at, .L7F03AEBC -/* 06FA44 7F03AF14 00000000 */ nop +/* 06FA44 7F03AF14 00000000 */ nop .L7F03AF18: /* 06FA48 7F03AF18 26B50001 */ addiu $s5, $s5, 1 /* 06FA4C 7F03AF1C 02B0082A */ slt $at, $s5, $s0 @@ -1325,7 +1056,7 @@ glabel sub_GAME_7F03AF5C /* 06FB40 7F03B010 02602025 */ move $a0, $s3 /* 06FB44 7F03B014 8FA500C8 */ lw $a1, 0xc8($sp) /* 06FB48 7F03B018 02203025 */ move $a2, $s1 -/* 06FB4C 7F03B01C 0FC2DE9E */ jal sub_GAME_7F0B7A78 +/* 06FB4C 7F03B01C 0FC2DE9E */ jal bgTestBulletHitBackground /* 06FB50 7F03B020 02C03825 */ move $a3, $s6 /* 06FB54 7F03B024 10400035 */ beqz $v0, .L7F03B0FC /* 06FB58 7F03B028 C7A40088 */ lwc1 $f4, 0x88($sp) @@ -1341,7 +1072,7 @@ glabel sub_GAME_7F03AF5C /* 06FB80 7F03B050 C6680008 */ lwc1 $f8, 8($s3) /* 06FB84 7F03B054 46128081 */ sub.s $f2, $f16, $f18 /* 06FB88 7F03B058 46000282 */ mul.s $f10, $f0, $f0 -/* 06FB8C 7F03B05C 00000000 */ nop +/* 06FB8C 7F03B05C 00000000 */ nop /* 06FB90 7F03B060 46021402 */ mul.s $f16, $f2, $f2 /* 06FB94 7F03B064 46083301 */ sub.s $f12, $f6, $f8 /* 06FB98 7F03B068 460C6102 */ mul.s $f4, $f12, $f12 @@ -1354,7 +1085,7 @@ glabel sub_GAME_7F03AF5C /* 06FBB4 7F03B084 461CB501 */ sub.s $f20, $f22, $f28 .L7F03B088: /* 06FBB8 7F03B088 461AA03C */ c.lt.s $f20, $f26 -/* 06FBBC 7F03B08C 00000000 */ nop +/* 06FBBC 7F03B08C 00000000 */ nop /* 06FBC0 7F03B090 4502001B */ bc1fl .L7F03B100 /* 06FBC4 7F03B094 26310001 */ addiu $s1, $s1, 1 /* 06FBC8 7F03B098 E6060000 */ swc1 $f6, ($s0) @@ -1519,7 +1250,7 @@ glabel chraiDefaultWeaponFireHandler /* 06FDF8 7F03B2C8 504000B9 */ beql $v0, $zero, .L7F03B5B0 /* 06FDFC 7F03B2CC 8FB901AC */ lw $t9, 0x1ac($sp) /* 06FE00 7F03B2D0 0FC2D20F */ jal get_room_data_float1 -/* 06FE04 7F03B2D4 00000000 */ nop +/* 06FE04 7F03B2D4 00000000 */ nop /* 06FE08 7F03B2D8 0FC2D21E */ jal bgGetLevelVisibilityScale /* 06FE0C 7F03B2DC E7A00048 */ swc1 $f0, 0x48($sp) /* 06FE10 7F03B2E0 C7A20048 */ lwc1 $f2, 0x48($sp) @@ -1589,7 +1320,7 @@ glabel chraiDefaultWeaponFireHandler /* 06FF04 7F03B3D4 02002025 */ move $a0, $s0 /* 06FF08 7F03B3D8 27A50560 */ addiu $a1, $sp, 0x560 /* 06FF0C 7F03B3DC 02203025 */ move $a2, $s1 -/* 06FF10 7F03B3E0 0FC2DE9E */ jal sub_GAME_7F0B7A78 +/* 06FF10 7F03B3E0 0FC2DE9E */ jal bgTestBulletHitBackground /* 06FF14 7F03B3E4 27A70510 */ addiu $a3, $sp, 0x510 /* 06FF18 7F03B3E8 10400002 */ beqz $v0, .L7F03B3F4 /* 06FF1C 7F03B3EC 24190001 */ li $t9, 1 @@ -1598,15 +1329,15 @@ glabel chraiDefaultWeaponFireHandler /* 06FF24 7F03B3F4 03B14021 */ addu $t0, $sp, $s1 /* 06FF28 7F03B3F8 A119008C */ sb $t9, 0x8c($t0) /* 06FF2C 7F03B3FC 8FA90544 */ lw $t1, 0x544($sp) -/* 06FF30 7F03B400 3C0A8008 */ lui $t2, %hi(g_BgPortals) +/* 06FF30 7F03B400 3C0A8008 */ lui $t2, %hi(g_BgPortals) /* 06FF34 7F03B404 5D200027 */ bgtzl $t1, .L7F03B4A4 /* 06FF38 7F03B408 8FA80544 */ lw $t0, 0x544($sp) /* 06FF3C 7F03B40C 8D4AFF80 */ lw $t2, %lo(g_BgPortals)($t2) /* 06FF40 7F03B410 8D4B0000 */ lw $t3, ($t2) /* 06FF44 7F03B414 11600012 */ beqz $t3, .L7F03B460 -/* 06FF48 7F03B418 00000000 */ nop +/* 06FF48 7F03B418 00000000 */ nop /* 06FF4C 7F03B41C 0FC225E6 */ jal get_curplayer_positiondata -/* 06FF50 7F03B420 00000000 */ nop +/* 06FF50 7F03B420 00000000 */ nop /* 06FF54 7F03B424 0FC2CBF6 */ jal getTileRoom /* 06FF58 7F03B428 8C440014 */ lw $a0, 0x14($v0) /* 06FF5C 7F03B42C 27AC007C */ addiu $t4, $sp, 0x7c @@ -1624,7 +1355,7 @@ glabel chraiDefaultWeaponFireHandler /* 06FF8C 7F03B45C AFA20544 */ sw $v0, 0x544($sp) .L7F03B460: /* 06FF90 7F03B460 0FC225E6 */ jal get_curplayer_positiondata -/* 06FF94 7F03B464 00000000 */ nop +/* 06FF94 7F03B464 00000000 */ nop /* 06FF98 7F03B468 0FC2CBF6 */ jal getTileRoom /* 06FF9C 7F03B46C 8C440014 */ lw $a0, 0x14($v0) /* 06FFA0 7F03B470 27AF007C */ addiu $t7, $sp, 0x7c @@ -1645,14 +1376,14 @@ glabel chraiDefaultWeaponFireHandler /* 06FFD4 7F03B4A4 5900000F */ blezl $t0, .L7F03B4E4 /* 06FFD8 7F03B4A8 8FAB0544 */ lw $t3, 0x544($sp) /* 06FFDC 7F03B4AC 0FC2D20C */ jal get_room_data_float2 -/* 06FFE0 7F03B4B0 00000000 */ nop +/* 06FFE0 7F03B4B0 00000000 */ nop /* 06FFE4 7F03B4B4 C7B20510 */ lwc1 $f18, 0x510($sp) /* 06FFE8 7F03B4B8 C7AA0514 */ lwc1 $f10, 0x514($sp) /* 06FFEC 7F03B4BC C7A80518 */ lwc1 $f8, 0x518($sp) /* 06FFF0 7F03B4C0 46009182 */ mul.s $f6, $f18, $f0 -/* 06FFF4 7F03B4C4 00000000 */ nop +/* 06FFF4 7F03B4C4 00000000 */ nop /* 06FFF8 7F03B4C8 46005102 */ mul.s $f4, $f10, $f0 -/* 06FFFC 7F03B4CC 00000000 */ nop +/* 06FFFC 7F03B4CC 00000000 */ nop /* 070000 7F03B4D0 46004402 */ mul.s $f16, $f8, $f0 /* 070004 7F03B4D4 E7A60510 */ swc1 $f6, 0x510($sp) /* 070008 7F03B4D8 E7A40514 */ swc1 $f4, 0x514($sp) @@ -1699,12 +1430,12 @@ glabel chraiDefaultWeaponFireHandler /* 0700A0 7F03B570 8FAF056C */ lw $t7, 0x56c($sp) /* 0700A4 7F03B574 8FB80554 */ lw $t8, 0x554($sp) /* 0700A8 7F03B578 15E00003 */ bnez $t7, .L7F03B588 -/* 0700AC 7F03B57C 00000000 */ nop +/* 0700AC 7F03B57C 00000000 */ nop /* 0700B0 7F03B580 5300000B */ beql $t8, $zero, .L7F03B5B0 /* 0700B4 7F03B584 8FB901AC */ lw $t9, 0x1ac($sp) .L7F03B588: /* 0700B8 7F03B588 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 0700BC 7F03B58C 00000000 */ nop +/* 0700BC 7F03B58C 00000000 */ nop /* 0700C0 7F03B590 00402025 */ move $a0, $v0 /* 0700C4 7F03B594 0FC1611D */ jal mtx4TransformVecInPlace /* 0700C8 7F03B598 27A50500 */ addiu $a1, $sp, 0x500 @@ -1722,15 +1453,15 @@ glabel chraiDefaultWeaponFireHandler /* 0700F4 7F03B5C4 44818000 */ mtc1 $at, $f16 /* 0700F8 7F03B5C8 3C014396 */ li $at, 0x43960000 # 300.000000 /* 0700FC 7F03B5CC 4612803C */ c.lt.s $f16, $f18 -/* 070100 7F03B5D0 00000000 */ nop +/* 070100 7F03B5D0 00000000 */ nop /* 070104 7F03B5D4 45000004 */ bc1f .L7F03B5E8 -/* 070108 7F03B5D8 00000000 */ nop +/* 070108 7F03B5D8 00000000 */ nop /* 07010C 7F03B5DC 44813000 */ mtc1 $at, $f6 -/* 070110 7F03B5E0 00000000 */ nop +/* 070110 7F03B5E0 00000000 */ nop /* 070114 7F03B5E4 E7A601C8 */ swc1 $f6, 0x1c8($sp) .L7F03B5E8: /* 070118 7F03B5E8 8E311DF0 */ lw $s1, %lo(g_LastOnScreenProp)($s1) -/* 07011C 7F03B5EC 3C088007 */ lui $t0, %hi(g_OnScreenPropList) +/* 07011C 7F03B5EC 3C088007 */ lui $t0, %hi(g_OnScreenPropList) /* 070120 7F03B5F0 25081620 */ addiu $t0, %lo(g_OnScreenPropList) # addiu $t0, $t0, 0x1620 /* 070124 7F03B5F4 2631FFFC */ addiu $s1, $s1, -4 /* 070128 7F03B5F8 0228082B */ sltu $at, $s1, $t0 @@ -1739,7 +1470,7 @@ glabel chraiDefaultWeaponFireHandler /* 070134 7F03B604 8E300000 */ lw $s0, ($s1) .L7F03B608: /* 070138 7F03B608 12000020 */ beqz $s0, .L7F03B68C -/* 07013C 7F03B60C 00000000 */ nop +/* 07013C 7F03B60C 00000000 */ nop /* 070140 7F03B610 92020000 */ lbu $v0, ($s0) /* 070144 7F03B614 24010003 */ li $at, 3 /* 070148 7F03B618 1041000C */ beq $v0, $at, .L7F03B64C @@ -1760,7 +1491,7 @@ glabel chraiDefaultWeaponFireHandler /* 070180 7F03B650 0FC08992 */ jal sub_GAME_7F022648 /* 070184 7F03B654 02402825 */ move $a1, $s2 /* 070188 7F03B658 1000000C */ b .L7F03B68C -/* 07018C 7F03B65C 00000000 */ nop +/* 07018C 7F03B65C 00000000 */ nop .L7F03B660: /* 070190 7F03B660 92020000 */ lbu $v0, ($s0) .L7F03B664: @@ -1771,12 +1502,12 @@ glabel chraiDefaultWeaponFireHandler /* 0701A4 7F03B674 10410003 */ beq $v0, $at, .L7F03B684 /* 0701A8 7F03B678 24010002 */ li $at, 2 /* 0701AC 7F03B67C 14410003 */ bne $v0, $at, .L7F03B68C -/* 0701B0 7F03B680 00000000 */ nop +/* 0701B0 7F03B680 00000000 */ nop .L7F03B684: /* 0701B4 7F03B684 0FC13A6F */ jal sub_GAME_7F04E9BC /* 0701B8 7F03B688 02402825 */ move $a1, $s2 .L7F03B68C: -/* 0701BC 7F03B68C 3C0B8007 */ lui $t3, %hi(g_OnScreenPropList) +/* 0701BC 7F03B68C 3C0B8007 */ lui $t3, %hi(g_OnScreenPropList) /* 0701C0 7F03B690 256B1620 */ addiu $t3, %lo(g_OnScreenPropList) # addiu $t3, $t3, 0x1620 /* 0701C4 7F03B694 2631FFFC */ addiu $s1, $s1, -4 /* 0701C8 7F03B698 022B082B */ sltu $at, $s1, $t3 @@ -1846,7 +1577,7 @@ glabel chraiDefaultWeaponFireHandler /* 0702A4 7F03B774 44815000 */ mtc1 $at, $f10 /* 0702A8 7F03B778 C7A4050C */ lwc1 $f4, 0x50c($sp) /* 0702AC 7F03B77C 4604503C */ c.lt.s $f10, $f4 -/* 0702B0 7F03B780 00000000 */ nop +/* 0702B0 7F03B780 00000000 */ nop /* 0702B4 7F03B784 45020003 */ bc1fl .L7F03B794 /* 0702B8 7F03B788 8FA90554 */ lw $t1, 0x554($sp) /* 0702BC 7F03B78C 00008825 */ move $s1, $zero @@ -1856,7 +1587,7 @@ glabel chraiDefaultWeaponFireHandler /* 0702C4 7F03B794 87AA053A */ lh $t2, 0x53a($sp) /* 0702C8 7F03B798 8FAC056C */ lw $t4, 0x56c($sp) /* 0702CC 7F03B79C 11200034 */ beqz $t1, .L7F03B870 -/* 0702D0 7F03B7A0 00000000 */ nop +/* 0702D0 7F03B7A0 00000000 */ nop /* 0702D4 7F03B7A4 05410004 */ bgez $t2, .L7F03B7B8 /* 0702D8 7F03B7A8 87AB053A */ lh $t3, 0x53a($sp) /* 0702DC 7F03B7AC 3C108005 */ lui $s0, %hi(D_8004E86C) @@ -1874,16 +1605,16 @@ glabel chraiDefaultWeaponFireHandler /* 070308 7F03B7D8 8E10E86C */ lw $s0, %lo(D_8004E86C)($s0) .L7F03B7DC: /* 07030C 7F03B7DC 12200022 */ beqz $s1, .L7F03B868 -/* 070310 7F03B7E0 00000000 */ nop +/* 070310 7F03B7E0 00000000 */ nop /* 070314 7F03B7E4 8618000A */ lh $t8, 0xa($s0) /* 070318 7F03B7E8 8FB901AC */ lw $t9, 0x1ac($sp) /* 07031C 7F03B7EC 24010017 */ li $at, 23 /* 070320 7F03B7F0 1B000016 */ blez $t8, .L7F03B84C -/* 070324 7F03B7F4 00000000 */ nop +/* 070324 7F03B7F4 00000000 */ nop /* 070328 7F03B7F8 13210014 */ beq $t9, $at, .L7F03B84C -/* 07032C 7F03B7FC 00000000 */ nop +/* 07032C 7F03B7FC 00000000 */ nop /* 070330 7F03B800 0C002914 */ jal randomGetNext -/* 070334 7F03B804 00000000 */ nop +/* 070334 7F03B804 00000000 */ nop /* 070338 7F03B808 8608000A */ lh $t0, 0xa($s0) /* 07033C 7F03B80C 8E090004 */ lw $t1, 4($s0) /* 070340 7F03B810 240BFFFF */ li $t3, -1 @@ -1892,7 +1623,7 @@ glabel chraiDefaultWeaponFireHandler /* 07034C 7F03B81C 01235021 */ addu $t2, $t1, $v1 /* 070350 7F03B820 91460000 */ lbu $a2, ($t2) /* 070354 7F03B824 15000002 */ bnez $t0, .L7F03B830 -/* 070358 7F03B828 00000000 */ nop +/* 070358 7F03B828 00000000 */ nop /* 07035C 7F03B82C 0007000D */ break 7 .L7F03B830: /* 070360 7F03B830 AFA00018 */ sw $zero, 0x18($sp) @@ -1900,7 +1631,7 @@ glabel chraiDefaultWeaponFireHandler /* 070368 7F03B838 AFA00010 */ sw $zero, 0x10($sp) /* 07036C 7F03B83C 27A40548 */ addiu $a0, $sp, 0x548 /* 070370 7F03B840 27A5051C */ addiu $a1, $sp, 0x51c -/* 070374 7F03B844 0FC28423 */ jal sub_GAME_7F0A108C +/* 070374 7F03B844 0FC28423 */ jal explosionCreateBulletImpact /* 070378 7F03B848 87A70546 */ lh $a3, 0x546($sp) .L7F03B84C: /* 07037C 7F03B84C 0FC2ED8C */ jal check_if_imageID_is_light @@ -2041,7 +1772,7 @@ glabel sub_GAME_7F03B9C0 /* 070540 7F03BA10 C4400038 */ lwc1 $f0, 0x38($v0) /* 070544 7F03BA14 24A50001 */ addiu $a1, $a1, 1 /* 070548 7F03BA18 4600103C */ c.lt.s $f2, $f0 -/* 07054C 7F03BA1C 00000000 */ nop +/* 07054C 7F03BA1C 00000000 */ nop /* 070550 7F03BA20 45020005 */ bc1fl .L7F03BA38 /* 070554 7F03BA24 24630001 */ addiu $v1, $v1, 1 /* 070558 7F03BA28 46001306 */ mov.s $f12, $f2 @@ -2086,7 +1817,7 @@ glabel sub_GAME_7F03B9C0 /* 0705EC 7F03BABC 8C4C008C */ lw $t4, 0x8c($v0) /* 0705F0 7F03BAC0 C4440038 */ lwc1 $f4, 0x38($v0) /* 0705F4 7F03BAC4 4604603C */ c.lt.s $f12, $f4 -/* 0705F8 7F03BAC8 00000000 */ nop +/* 0705F8 7F03BAC8 00000000 */ nop /* 0705FC 7F03BACC 45020003 */ bc1fl .L7F03BADC /* 070600 7F03BAD0 8C4C008C */ lw $t4, 0x8c($v0) /* 070604 7F03BAD4 AC40003C */ sw $zero, 0x3c($v0) @@ -2100,7 +1831,7 @@ glabel sub_GAME_7F03B9C0 /* 07061C 7F03BAEC 24E200A0 */ addiu $v0, $a3, 0xa0 /* 070620 7F03BAF0 C4460088 */ lwc1 $f6, 0x88($v0) /* 070624 7F03BAF4 4606603C */ c.lt.s $f12, $f6 -/* 070628 7F03BAF8 00000000 */ nop +/* 070628 7F03BAF8 00000000 */ nop /* 07062C 7F03BAFC 45020003 */ bc1fl .L7F03BB0C /* 070630 7F03BB00 24E200A0 */ addiu $v0, $a3, 0xa0 /* 070634 7F03BB04 AC40008C */ sw $zero, 0x8c($v0) @@ -2115,7 +1846,7 @@ glabel sub_GAME_7F03B9C0 /* 070654 7F03BB24 8C58008C */ lw $t8, 0x8c($v0) /* 070658 7F03BB28 C4480038 */ lwc1 $f8, 0x38($v0) /* 07065C 7F03BB2C 4608603C */ c.lt.s $f12, $f8 -/* 070660 7F03BB30 00000000 */ nop +/* 070660 7F03BB30 00000000 */ nop /* 070664 7F03BB34 45020003 */ bc1fl .L7F03BB44 /* 070668 7F03BB38 8C58008C */ lw $t8, 0x8c($v0) /* 07066C 7F03BB3C AC40003C */ sw $zero, 0x3c($v0) @@ -2128,7 +1859,7 @@ glabel sub_GAME_7F03B9C0 /* 070684 7F03BB54 8C4800DC */ lw $t0, 0xdc($v0) /* 070688 7F03BB58 C44A0088 */ lwc1 $f10, 0x88($v0) /* 07068C 7F03BB5C 460A603C */ c.lt.s $f12, $f10 -/* 070690 7F03BB60 00000000 */ nop +/* 070690 7F03BB60 00000000 */ nop /* 070694 7F03BB64 45020003 */ bc1fl .L7F03BB74 /* 070698 7F03BB68 8C4800DC */ lw $t0, 0xdc($v0) /* 07069C 7F03BB6C AC40008C */ sw $zero, 0x8c($v0) @@ -2141,22 +1872,22 @@ glabel sub_GAME_7F03B9C0 /* 0706B4 7F03BB84 8C4A012C */ lw $t2, 0x12c($v0) /* 0706B8 7F03BB88 C45000D8 */ lwc1 $f16, 0xd8($v0) /* 0706BC 7F03BB8C 4610603C */ c.lt.s $f12, $f16 -/* 0706C0 7F03BB90 00000000 */ nop +/* 0706C0 7F03BB90 00000000 */ nop /* 0706C4 7F03BB94 45020003 */ bc1fl .L7F03BBA4 /* 0706C8 7F03BB98 8C4A012C */ lw $t2, 0x12c($v0) /* 0706CC 7F03BB9C AC4000DC */ sw $zero, 0xdc($v0) /* 0706D0 7F03BBA0 8C4A012C */ lw $t2, 0x12c($v0) .L7F03BBA4: /* 0706D4 7F03BBA4 1140000A */ beqz $t2, .L7F03BBD0 -/* 0706D8 7F03BBA8 00000000 */ nop +/* 0706D8 7F03BBA8 00000000 */ nop /* 0706DC 7F03BBAC 8C4B0174 */ lw $t3, 0x174($v0) /* 0706E0 7F03BBB0 15600007 */ bnez $t3, .L7F03BBD0 -/* 0706E4 7F03BBB4 00000000 */ nop +/* 0706E4 7F03BBB4 00000000 */ nop /* 0706E8 7F03BBB8 C4520128 */ lwc1 $f18, 0x128($v0) /* 0706EC 7F03BBBC 4612603C */ c.lt.s $f12, $f18 -/* 0706F0 7F03BBC0 00000000 */ nop +/* 0706F0 7F03BBC0 00000000 */ nop /* 0706F4 7F03BBC4 45000002 */ bc1f .L7F03BBD0 -/* 0706F8 7F03BBC8 00000000 */ nop +/* 0706F8 7F03BBC8 00000000 */ nop /* 0706FC 7F03BBCC AC40012C */ sw $zero, 0x12c($v0) .L7F03BBD0: /* 070700 7F03BBD0 1483FFCE */ bne $a0, $v1, .L7F03BB0C @@ -2176,7 +1907,7 @@ glabel sub_GAME_7F03B9C0 /* 070734 7F03BC04 8FAD0058 */ lw $t5, 0x58($sp) /* 070738 7F03BC08 C4E40034 */ lwc1 $f4, 0x34($a3) /* 07073C 7F03BC0C 4604703C */ c.lt.s $f14, $f4 -/* 070740 7F03BC10 00000000 */ nop +/* 070740 7F03BC10 00000000 */ nop /* 070744 7F03BC14 45020003 */ bc1fl .L7F03BC24 /* 070748 7F03BC18 8FAD0058 */ lw $t5, 0x58($sp) /* 07074C 7F03BC1C E4EE0034 */ swc1 $f14, 0x34($a3) @@ -2198,7 +1929,7 @@ glabel sub_GAME_7F03B9C0 /* 070784 7F03BC54 8C4F008C */ lw $t7, 0x8c($v0) /* 070788 7F03BC58 C5C60038 */ lwc1 $f6, 0x38($t6) /* 07078C 7F03BC5C 4606703C */ c.lt.s $f14, $f6 -/* 070790 7F03BC60 00000000 */ nop +/* 070790 7F03BC60 00000000 */ nop /* 070794 7F03BC64 45020003 */ bc1fl .L7F03BC74 /* 070798 7F03BC68 8C4F008C */ lw $t7, 0x8c($v0) /* 07079C 7F03BC6C ADC0003C */ sw $zero, 0x3c($t6) @@ -2208,7 +1939,7 @@ glabel sub_GAME_7F03B9C0 /* 0707A8 7F03BC78 8FA20030 */ lw $v0, 0x30($sp) /* 0707AC 7F03BC7C C4480088 */ lwc1 $f8, 0x88($v0) /* 0707B0 7F03BC80 4608703C */ c.lt.s $f14, $f8 -/* 0707B4 7F03BC84 00000000 */ nop +/* 0707B4 7F03BC84 00000000 */ nop /* 0707B8 7F03BC88 45020003 */ bc1fl .L7F03BC98 /* 0707BC 7F03BC8C 8FA20030 */ lw $v0, 0x30($sp) /* 0707C0 7F03BC90 AC40008C */ sw $zero, 0x8c($v0) @@ -2224,7 +1955,7 @@ glabel sub_GAME_7F03B9C0 /* 0707E0 7F03BCB0 8C59008C */ lw $t9, 0x8c($v0) /* 0707E4 7F03BCB4 C44A0038 */ lwc1 $f10, 0x38($v0) /* 0707E8 7F03BCB8 460A703C */ c.lt.s $f14, $f10 -/* 0707EC 7F03BCBC 00000000 */ nop +/* 0707EC 7F03BCBC 00000000 */ nop /* 0707F0 7F03BCC0 45020003 */ bc1fl .L7F03BCD0 /* 0707F4 7F03BCC4 8C59008C */ lw $t9, 0x8c($v0) /* 0707F8 7F03BCC8 AC40003C */ sw $zero, 0x3c($v0) @@ -2234,7 +1965,7 @@ glabel sub_GAME_7F03B9C0 /* 070804 7F03BCD4 8C4800DC */ lw $t0, 0xdc($v0) /* 070808 7F03BCD8 C4500088 */ lwc1 $f16, 0x88($v0) /* 07080C 7F03BCDC 4610703C */ c.lt.s $f14, $f16 -/* 070810 7F03BCE0 00000000 */ nop +/* 070810 7F03BCE0 00000000 */ nop /* 070814 7F03BCE4 45020003 */ bc1fl .L7F03BCF4 /* 070818 7F03BCE8 8C4800DC */ lw $t0, 0xdc($v0) /* 07081C 7F03BCEC AC40008C */ sw $zero, 0x8c($v0) @@ -2244,19 +1975,19 @@ glabel sub_GAME_7F03B9C0 /* 070828 7F03BCF8 8C49012C */ lw $t1, 0x12c($v0) /* 07082C 7F03BCFC C45200D8 */ lwc1 $f18, 0xd8($v0) /* 070830 7F03BD00 4612703C */ c.lt.s $f14, $f18 -/* 070834 7F03BD04 00000000 */ nop +/* 070834 7F03BD04 00000000 */ nop /* 070838 7F03BD08 45020003 */ bc1fl .L7F03BD18 /* 07083C 7F03BD0C 8C49012C */ lw $t1, 0x12c($v0) /* 070840 7F03BD10 AC4000DC */ sw $zero, 0xdc($v0) /* 070844 7F03BD14 8C49012C */ lw $t1, 0x12c($v0) .L7F03BD18: /* 070848 7F03BD18 11200007 */ beqz $t1, .L7F03BD38 -/* 07084C 7F03BD1C 00000000 */ nop +/* 07084C 7F03BD1C 00000000 */ nop /* 070850 7F03BD20 C4440128 */ lwc1 $f4, 0x128($v0) /* 070854 7F03BD24 4604703C */ c.lt.s $f14, $f4 -/* 070858 7F03BD28 00000000 */ nop +/* 070858 7F03BD28 00000000 */ nop /* 07085C 7F03BD2C 45000002 */ bc1f .L7F03BD38 -/* 070860 7F03BD30 00000000 */ nop +/* 070860 7F03BD30 00000000 */ nop /* 070864 7F03BD34 AC40012C */ sw $zero, 0x12c($v0) .L7F03BD38: /* 070868 7F03BD38 1483FFDA */ bne $a0, $v1, .L7F03BCA4 @@ -2272,7 +2003,7 @@ glabel sub_GAME_7F03B9C0 /* 070884 7F03BD54 8C4B003C */ lw $t3, 0x3c($v0) /* 070888 7F03BD58 24840050 */ addiu $a0, $a0, 0x50 /* 07088C 7F03BD5C 1560001D */ bnez $t3, .L7F03BDD4 -/* 070890 7F03BD60 00000000 */ nop +/* 070890 7F03BD60 00000000 */ nop /* 070894 7F03BD64 E44E0038 */ swc1 $f14, 0x38($v0) /* 070898 7F03BD68 8FAC0034 */ lw $t4, 0x34($sp) /* 07089C 7F03BD6C 00404025 */ move $t0, $v0 @@ -2309,7 +2040,7 @@ glabel sub_GAME_7F03B9C0 /* 07090C 7F03BDDC 8FBF0014 */ lw $ra, 0x14($sp) /* 070910 7F03BDE0 27BD0030 */ addiu $sp, $sp, 0x30 /* 070914 7F03BDE4 03E00008 */ jr $ra -/* 070918 7F03BDE8 00000000 */ nop +/* 070918 7F03BDE8 00000000 */ nop ) #endif @@ -2347,7 +2078,7 @@ glabel chraiFistAttackHandler /* 070968 7F03BE38 8C84A0B0 */ lw $a0, %lo(g_CurrentPlayer)($a0) /* 07096C 7F03BE3C 3C138007 */ lui $s3, %hi(g_LastOnScreenProp) /* 070970 7F03BE40 8E731DF0 */ lw $s3, %lo(g_LastOnScreenProp)($s3) -/* 070974 7F03BE44 3C0E8007 */ lui $t6, %hi(g_OnScreenPropList) +/* 070974 7F03BE44 3C0E8007 */ lui $t6, %hi(g_OnScreenPropList) /* 070978 7F03BE48 25CE1620 */ addiu $t6, %lo(g_OnScreenPropList) # addiu $t6, $t6, 0x1620 /* 07097C 7F03BE4C 2673FFFC */ addiu $s3, $s3, -4 /* 070980 7F03BE50 026E082B */ sltu $at, $s3, $t6 @@ -2359,23 +2090,23 @@ glabel chraiFistAttackHandler .L7F03BE68: /* 070998 7F03BE68 3C0143FA */ li $at, 0x43FA0000 # 500.000000 /* 07099C 7F03BE6C 12000083 */ beqz $s0, .L7F03C07C -/* 0709A0 7F03BE70 00000000 */ nop +/* 0709A0 7F03BE70 00000000 */ nop /* 0709A4 7F03BE74 C6040018 */ lwc1 $f4, 0x18($s0) /* 0709A8 7F03BE78 44813000 */ mtc1 $at, $f6 -/* 0709AC 7F03BE7C 00000000 */ nop +/* 0709AC 7F03BE7C 00000000 */ nop /* 0709B0 7F03BE80 4606203C */ c.lt.s $f4, $f6 -/* 0709B4 7F03BE84 00000000 */ nop +/* 0709B4 7F03BE84 00000000 */ nop /* 0709B8 7F03BE88 4500007C */ bc1f .L7F03C07C -/* 0709BC 7F03BE8C 00000000 */ nop +/* 0709BC 7F03BE8C 00000000 */ nop /* 0709C0 7F03BE90 92020000 */ lbu $v0, ($s0) /* 0709C4 7F03BE94 24010003 */ li $at, 3 /* 0709C8 7F03BE98 1041000B */ beq $v0, $at, .L7F03BEC8 /* 0709CC 7F03BE9C 24010006 */ li $at, 6 /* 0709D0 7F03BEA0 14410076 */ bne $v0, $at, .L7F03C07C -/* 0709D4 7F03BEA4 00000000 */ nop +/* 0709D4 7F03BEA4 00000000 */ nop /* 0709D8 7F03BEA8 8E0F0004 */ lw $t7, 4($s0) /* 0709DC 7F03BEAC 11E00073 */ beqz $t7, .L7F03C07C -/* 0709E0 7F03BEB0 00000000 */ nop +/* 0709E0 7F03BEB0 00000000 */ nop /* 0709E4 7F03BEB4 0FC26C57 */ jal getPlayerPointerIndex /* 0709E8 7F03BEB8 02002025 */ move $a0, $s0 /* 0709EC 7F03BEBC 0FC26C54 */ jal get_cur_playernum @@ -2391,7 +2122,7 @@ glabel chraiFistAttackHandler /* 070A10 7F03BEE0 27A500AC */ addiu $a1, $sp, 0xac /* 070A14 7F03BEE4 3C0142C8 */ li $at, 0x42C80000 # 100.000000 /* 070A18 7F03BEE8 4481A000 */ mtc1 $at, $f20 -/* 070A1C 7F03BEEC 00000000 */ nop +/* 070A1C 7F03BEEC 00000000 */ nop .L7F03BEF0: /* 070A20 7F03BEF0 8E44001C */ lw $a0, 0x1c($s2) /* 070A24 7F03BEF4 27A600A8 */ addiu $a2, $sp, 0xa8 @@ -2400,43 +2131,43 @@ glabel chraiFistAttackHandler /* 070A30 7F03BF00 C7A800AC */ lwc1 $f8, 0xac($sp) /* 070A34 7F03BF04 C7AA00A8 */ lwc1 $f10, 0xa8($sp) /* 070A38 7F03BF08 4608B03E */ c.le.s $f22, $f8 -/* 070A3C 7F03BF0C 00000000 */ nop +/* 070A3C 7F03BF0C 00000000 */ nop /* 070A40 7F03BF10 4500005A */ bc1f .L7F03C07C -/* 070A44 7F03BF14 00000000 */ nop +/* 070A44 7F03BF14 00000000 */ nop /* 070A48 7F03BF18 4616503E */ c.le.s $f10, $f22 /* 070A4C 7F03BF1C 27A500A4 */ addiu $a1, $sp, 0xa4 /* 070A50 7F03BF20 27A600A0 */ addiu $a2, $sp, 0xa0 /* 070A54 7F03BF24 24070001 */ li $a3, 1 /* 070A58 7F03BF28 45000054 */ bc1f .L7F03C07C -/* 070A5C 7F03BF2C 00000000 */ nop +/* 070A5C 7F03BF2C 00000000 */ nop /* 070A60 7F03BF30 0FC0FDD2 */ jal sub_GAME_7F03F748 /* 070A64 7F03BF34 8E44001C */ lw $a0, 0x1c($s2) /* 070A68 7F03BF38 C7B000A4 */ lwc1 $f16, 0xa4($sp) /* 070A6C 7F03BF3C C7B200A0 */ lwc1 $f18, 0xa0($sp) /* 070A70 7F03BF40 4610B03E */ c.le.s $f22, $f16 -/* 070A74 7F03BF44 00000000 */ nop +/* 070A74 7F03BF44 00000000 */ nop /* 070A78 7F03BF48 4500004C */ bc1f .L7F03C07C -/* 070A7C 7F03BF4C 00000000 */ nop +/* 070A7C 7F03BF4C 00000000 */ nop /* 070A80 7F03BF50 4616903E */ c.le.s $f18, $f22 /* 070A84 7F03BF54 27A5009C */ addiu $a1, $sp, 0x9c /* 070A88 7F03BF58 27A60098 */ addiu $a2, $sp, 0x98 /* 070A8C 7F03BF5C 24070002 */ li $a3, 2 /* 070A90 7F03BF60 45000046 */ bc1f .L7F03C07C -/* 070A94 7F03BF64 00000000 */ nop +/* 070A94 7F03BF64 00000000 */ nop /* 070A98 7F03BF68 0FC0FDD2 */ jal sub_GAME_7F03F748 /* 070A9C 7F03BF6C 8E44001C */ lw $a0, 0x1c($s2) /* 070AA0 7F03BF70 C7A40098 */ lwc1 $f4, 0x98($sp) /* 070AA4 7F03BF74 C7A6009C */ lwc1 $f6, 0x9c($sp) /* 070AA8 7F03BF78 4616203E */ c.le.s $f4, $f22 -/* 070AAC 7F03BF7C 00000000 */ nop +/* 070AAC 7F03BF7C 00000000 */ nop /* 070AB0 7F03BF80 4500003E */ bc1f .L7F03C07C -/* 070AB4 7F03BF84 00000000 */ nop +/* 070AB4 7F03BF84 00000000 */ nop /* 070AB8 7F03BF88 4600A207 */ neg.s $f8, $f20 /* 070ABC 7F03BF8C 27A40090 */ addiu $a0, $sp, 0x90 /* 070AC0 7F03BF90 4606403E */ c.le.s $f8, $f6 /* 070AC4 7F03BF94 24190013 */ li $t9, 19 /* 070AC8 7F03BF98 45000038 */ bc1f .L7F03C07C -/* 070ACC 7F03BF9C 00000000 */ nop +/* 070ACC 7F03BF9C 00000000 */ nop /* 070AD0 7F03BFA0 8E980014 */ lw $t8, 0x14($s4) /* 070AD4 7F03BFA4 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 070AD8 7F03BFA8 44818000 */ mtc1 $at, $f16 @@ -2456,17 +2187,17 @@ glabel chraiFistAttackHandler /* 070B10 7F03BFE0 8FA80090 */ lw $t0, 0x90($sp) /* 070B14 7F03BFE4 8E090014 */ lw $t1, 0x14($s0) /* 070B18 7F03BFE8 15090024 */ bne $t0, $t1, .L7F03C07C -/* 070B1C 7F03BFEC 00000000 */ nop +/* 070B1C 7F03BFEC 00000000 */ nop /* 070B20 7F03BFF0 0FC1E67C */ jal currentPlayerGetCrouchPos /* 070B24 7F03BFF4 2411000F */ li $s1, 15 /* 070B28 7F03BFF8 24010001 */ li $at, 1 /* 070B2C 7F03BFFC 14410003 */ bne $v0, $at, .L7F03C00C -/* 070B30 7F03C000 00000000 */ nop +/* 070B30 7F03C000 00000000 */ nop /* 070B34 7F03C004 10000006 */ b .L7F03C020 /* 070B38 7F03C008 241100C8 */ li $s1, 200 .L7F03C00C: /* 070B3C 7F03C00C 0FC1E67C */ jal currentPlayerGetCrouchPos -/* 070B40 7F03C010 00000000 */ nop +/* 070B40 7F03C010 00000000 */ nop /* 070B44 7F03C014 54400003 */ bnezl $v0, .L7F03C024 /* 070B48 7F03C018 27A40084 */ addiu $a0, $sp, 0x84 /* 070B4C 7F03C01C 241100C9 */ li $s1, 201 @@ -2477,7 +2208,7 @@ glabel chraiFistAttackHandler /* 070B58 7F03C028 0FC1A073 */ jal bullet_path_from_screen_center /* 070B5C 7F03C02C 8FA600C8 */ lw $a2, 0xc8($sp) /* 070B60 7F03C030 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 070B64 7F03C034 00000000 */ nop +/* 070B64 7F03C034 00000000 */ nop /* 070B68 7F03C038 00402025 */ move $a0, $v0 /* 070B6C 7F03C03C 0FC160F6 */ jal mtx4RotateVecInPlace /* 070B70 7F03C040 02A02825 */ move $a1, $s5 @@ -2496,7 +2227,7 @@ glabel chraiFistAttackHandler /* 070BA4 7F03C074 0FC19107 */ jal recall_joy2_hits_edit_detail_edit_flag /* 070BA8 7F03C078 2406FFFF */ li $a2, -1 .L7F03C07C: -/* 070BAC 7F03C07C 3C0C8007 */ lui $t4, %hi(g_OnScreenPropList) +/* 070BAC 7F03C07C 3C0C8007 */ lui $t4, %hi(g_OnScreenPropList) /* 070BB0 7F03C080 258C1620 */ addiu $t4, %lo(g_OnScreenPropList) # addiu $t4, $t4, 0x1620 /* 070BB4 7F03C084 2673FFFC */ addiu $s3, $s3, -4 /* 070BB8 7F03C088 026C082B */ sltu $at, $s3, $t4 @@ -2848,7 +2579,7 @@ void handle_mp_respawn_and_some_things(void) { chrpropDelist(prop_s1); temp_s0_2->runtime_bitflags = (s32) (temp_s0_2->runtime_bitflags & ~0x800); sp30 = setupGetCommandIndexByProp(prop_s1); - pad = (s32) temp_s0_2->pad; + pad = (s32) temp_s0_2->pad; temp_v0_5 = setupCommandGetObject(lvlGetCurrentStageToLoad(), sp30 + pad); if ((temp_v0_5 != NULL) && (temp_v0_5->prop != 0)) { //unk10 is prop temp_a0 = temp_s0_2->model; //unk14 @@ -2885,9 +2616,9 @@ void handle_mp_respawn_and_some_things(void) { // 0x04 is chr, obj, door, weapon } } else if (prop_type == PROP_TYPE_EXPLOSION) { - var_s2 = sub_GAME_7F09CEE8(prop_s1); // explosions related + var_s2 = explosionTick(prop_s1); // explosions related } else if (prop_type == PROP_TYPE_SMOKE) { - var_s2 = sub_GAME_7F09E8AC(prop_s1); // smoke related + var_s2 = explosionSmokeTick(prop_s1); // smoke related } else if (prop_type == PROP_TYPE_VIEWER) { sub_GAME_7F062B00(*(&g_playerPointers + (getPlayerPointerIndex(prop_s1) * 4)) + 0xA54); // function receives ChrRecord_f180 sub_GAME_7F062B00(*(&g_playerPointers + (getPlayerPointerIndex(prop_s1) * 4)) + 0xDFC); // function receives ChrRecord_f180 @@ -2929,7 +2660,7 @@ glabel handle_mp_respawn_and_some_things /* 07118C 7F03C65C 0FC0CA47 */ jal chrlvAllChrTick /* 071190 7F03C660 AFB00014 */ sw $s0, 0x14($sp) /* 071194 7F03C664 0FC0E909 */ jal get_ptr_obj_pos_list_current_entry -/* 071198 7F03C668 00000000 */ nop +/* 071198 7F03C668 00000000 */ nop /* 07119C 7F03C66C 104000E9 */ beqz $v0, .L7F03CA14 /* 0711A0 7F03C670 00408825 */ move $s1, $v0 .L7F03C674: @@ -2965,7 +2696,7 @@ glabel handle_mp_respawn_and_some_things /* 071210 7F03C6E0 24030001 */ li $v1, 1 /* 071214 7F03C6E4 00001825 */ move $v1, $zero .L7F03C6E8: -/* 071218 7F03C6E8 3C0F8005 */ lui $t7, %hi(g_ClockTimer) +/* 071218 7F03C6E8 3C0F8005 */ lui $t7, %hi(g_ClockTimer) /* 07121C 7F03C6EC 8DEF8374 */ lw $t7, %lo(g_ClockTimer)($t7) /* 071220 7F03C6F0 004FC023 */ subu $t8, $v0, $t7 /* 071224 7F03C6F4 A6380002 */ sh $t8, 2($s1) @@ -3010,7 +2741,7 @@ glabel handle_mp_respawn_and_some_things /* 0712B0 7F03C780 44800000 */ mtc1 $zero, $f0 /* 0712B4 7F03C784 C6040070 */ lwc1 $f4, 0x70($s0) /* 0712B8 7F03C788 46040032 */ c.eq.s $f0, $f4 -/* 0712BC 7F03C78C 00000000 */ nop +/* 0712BC 7F03C78C 00000000 */ nop /* 0712C0 7F03C790 45020035 */ bc1fl .L7F03C868 /* 0712C4 7F03C794 92080002 */ lbu $t0, 2($s0) /* 0712C8 7F03C798 92180002 */ lbu $t8, 2($s0) @@ -3020,7 +2751,7 @@ glabel handle_mp_respawn_and_some_things /* 0712D8 7F03C7A8 8E080008 */ lw $t0, 8($s0) /* 0712DC 7F03C7AC 31098000 */ andi $t1, $t0, 0x8000 /* 0712E0 7F03C7B0 11200023 */ beqz $t1, .L7F03C840 -/* 0712E4 7F03C7B4 00000000 */ nop +/* 0712E4 7F03C7B4 00000000 */ nop /* 0712E8 7F03C7B8 0FC0F863 */ jal chrpropDeregisterRooms /* 0712EC 7F03C7BC 02202025 */ move $a0, $s1 /* 0712F0 7F03C7C0 0FC0E94E */ jal chrpropDelist @@ -3118,7 +2849,7 @@ glabel handle_mp_respawn_and_some_things .L7F03C90C: /* 07143C 7F03C90C 54410006 */ bnel $v0, $at, .L7F03C928 /* 071440 7F03C910 24010008 */ li $at, 8 -/* 071444 7F03C914 0FC273BA */ jal sub_GAME_7F09CEE8 +/* 071444 7F03C914 0FC273BA */ jal explosionTick /* 071448 7F03C918 02202025 */ move $a0, $s1 /* 07144C 7F03C91C 10000028 */ b .L7F03C9C0 /* 071450 7F03C920 00409025 */ move $s2, $v0 @@ -3126,7 +2857,7 @@ glabel handle_mp_respawn_and_some_things .L7F03C928: /* 071458 7F03C928 54410006 */ bnel $v0, $at, .L7F03C944 /* 07145C 7F03C92C 24010006 */ li $at, 6 -/* 071460 7F03C930 0FC27A2B */ jal sub_GAME_7F09E8AC +/* 071460 7F03C930 0FC27A2B */ jal explosionSmokeTick /* 071464 7F03C934 02202025 */ move $a0, $s1 /* 071468 7F03C938 10000021 */ b .L7F03C9C0 /* 07146C 7F03C93C 00409025 */ move $s2, $v0 @@ -3154,7 +2885,7 @@ glabel handle_mp_respawn_and_some_things /* 0714C0 7F03C990 5140000C */ beql $t2, $zero, .L7F03C9C4 /* 0714C4 7F03C994 24010005 */ li $at, 5 /* 0714C8 7F03C998 0FC26919 */ jal getPlayerCount -/* 0714CC 7F03C99C 00000000 */ nop +/* 0714CC 7F03C99C 00000000 */ nop /* 0714D0 7F03C9A0 28410002 */ slti $at, $v0, 2 /* 0714D4 7F03C9A4 54200007 */ bnezl $at, .L7F03C9C4 /* 0714D8 7F03C9A8 24010005 */ li $at, 5 @@ -3179,7 +2910,7 @@ glabel handle_mp_respawn_and_some_things /* 071518 7F03C9E8 0FC0E93C */ jal chrpropActivateThisFrame /* 07151C 7F03C9EC 02202025 */ move $a0, $s1 /* 071520 7F03C9F0 16000006 */ bnez $s0, .L7F03CA0C -/* 071524 7F03C9F4 00000000 */ nop +/* 071524 7F03C9F4 00000000 */ nop /* 071528 7F03C9F8 10000004 */ b .L7F03CA0C /* 07152C 7F03C9FC 02208025 */ move $s0, $s1 .L7F03CA00: @@ -3212,7 +2943,7 @@ glabel handle_mp_respawn_and_some_things /* 06F10C 7F03C71C 0FC0CA58 */ jal chrlvAllChrTick /* 06F110 7F03C720 AFB00014 */ sw $s0, 0x14($sp) /* 06F114 7F03C724 0FC0E939 */ jal get_ptr_obj_pos_list_current_entry -/* 06F118 7F03C728 00000000 */ nop +/* 06F118 7F03C728 00000000 */ nop /* 06F11C 7F03C72C 104000E9 */ beqz $v0, .L7F03CAD4 /* 06F120 7F03C730 00408825 */ move $s1, $v0 .L7F03C734: @@ -3293,7 +3024,7 @@ glabel handle_mp_respawn_and_some_things /* 06F230 7F03C840 44800000 */ mtc1 $zero, $f0 /* 06F234 7F03C844 C6040070 */ lwc1 $f4, 0x70($s0) /* 06F238 7F03C848 46040032 */ c.eq.s $f0, $f4 -/* 06F23C 7F03C84C 00000000 */ nop +/* 06F23C 7F03C84C 00000000 */ nop /* 06F240 7F03C850 45020035 */ bc1fl .L7F03C928 /* 06F244 7F03C854 92080002 */ lbu $t0, 2($s0) /* 06F248 7F03C858 92180002 */ lbu $t8, 2($s0) @@ -3303,7 +3034,7 @@ glabel handle_mp_respawn_and_some_things /* 06F258 7F03C868 8E080008 */ lw $t0, 8($s0) /* 06F25C 7F03C86C 31098000 */ andi $t1, $t0, 0x8000 /* 06F260 7F03C870 11200023 */ beqz $t1, .L7F03C900 -/* 06F264 7F03C874 00000000 */ nop +/* 06F264 7F03C874 00000000 */ nop /* 06F268 7F03C878 0FC0F893 */ jal chrpropDeregisterRooms /* 06F26C 7F03C87C 02202025 */ move $a0, $s1 /* 06F270 7F03C880 0FC0E97E */ jal chrpropDelist @@ -3401,7 +3132,7 @@ glabel handle_mp_respawn_and_some_things .L7F03C9CC: /* 06F3BC 7F03C9CC 54410006 */ bnel $v0, $at, .L7F03C9E8 /* 06F3C0 7F03C9D0 24010008 */ li $at, 8 -/* 06F3C4 7F03C9D4 0FC2710B */ jal sub_GAME_7F09CEE8 +/* 06F3C4 7F03C9D4 0FC2710B */ jal explosionTick /* 06F3C8 7F03C9D8 02202025 */ move $a0, $s1 /* 06F3CC 7F03C9DC 10000028 */ b .L7F03CA80 /* 06F3D0 7F03C9E0 00409025 */ move $s2, $v0 @@ -3409,7 +3140,7 @@ glabel handle_mp_respawn_and_some_things .L7F03C9E8: /* 06F3D8 7F03C9E8 54410006 */ bnel $v0, $at, .L7F03CA04 /* 06F3DC 7F03C9EC 24010006 */ li $at, 6 -/* 06F3E0 7F03C9F0 0FC2777C */ jal sub_GAME_7F09E8AC +/* 06F3E0 7F03C9F0 0FC2777C */ jal explosionSmokeTick /* 06F3E4 7F03C9F4 02202025 */ move $a0, $s1 /* 06F3E8 7F03C9F8 10000021 */ b .L7F03CA80 /* 06F3EC 7F03C9FC 00409025 */ move $s2, $v0 @@ -3437,7 +3168,7 @@ glabel handle_mp_respawn_and_some_things /* 06F440 7F03CA50 5140000C */ beql $t2, $zero, .L7F03CA84 /* 06F444 7F03CA54 24010005 */ li $at, 5 /* 06F448 7F03CA58 0FC26669 */ jal getPlayerCount -/* 06F44C 7F03CA5C 00000000 */ nop +/* 06F44C 7F03CA5C 00000000 */ nop /* 06F450 7F03CA60 28410002 */ slti $at, $v0, 2 /* 06F454 7F03CA64 54200007 */ bnezl $at, .L7F03CA84 /* 06F458 7F03CA68 24010005 */ li $at, 5 @@ -3462,7 +3193,7 @@ glabel handle_mp_respawn_and_some_things /* 06F498 7F03CAA8 0FC0E96C */ jal chrpropActivateThisFrame /* 06F49C 7F03CAAC 02202025 */ move $a0, $s1 /* 06F4A0 7F03CAB0 16000006 */ bnez $s0, .L7F03CACC -/* 06F4A4 7F03CAB4 00000000 */ nop +/* 06F4A4 7F03CAB4 00000000 */ nop /* 06F4A8 7F03CAB8 10000004 */ b .L7F03CACC /* 06F4AC 7F03CABC 02208025 */ move $s0, $s1 .L7F03CAC0: @@ -3488,116 +3219,80 @@ glabel handle_mp_respawn_and_some_things -#ifdef NONMATCHING -void determing_type_of_object_and_detection(void) { +/* +* Address: 0x7F03CA30 +* PD: propsTick (src/game/proptick.c) +*/ +void determing_type_of_object_and_detection(void) +{ + s32 tickop; + PropRecord *prop; + PropRecord *prev; + PropRecord *propprev; + prop = get_ptr_obj_pos_list_current_entry(); + + while (prop != NULL) + { + tickop = 0; + prev = prop->prev; + + if (prop->type == PROP_TYPE_CHR) + { + tickop = chrTickBeams(prop); + } + else if ((prop->type == PROP_TYPE_OBJ) || (prop->type == PROP_TYPE_WEAPON) || (prop->type == PROP_TYPE_DOOR)) + { + tickop = object_interaction(prop); + } + else if (prop->type == PROP_TYPE_EXPLOSION) + { + tickop = explosionChrpropExplosionTick(prop); + } + else if (prop->type == PROP_TYPE_SMOKE) + { + tickop = explosionChrpropSmokeTick(prop); + } + else if (prop->type == PROP_TYPE_VIEWER) + { + tickop = playerTickBeams(prop); + } + + if (tickop == 5) + { + propprev = prev; + } + else + { + propprev = prop->prev; + + if (tickop == 3) + { + chrpropDelist(prop); + chrpropActivateThisFrame(prop); + + if (propprev == NULL) + { + propprev = prop; + } + } + else + { + propExecuteTickOperation(prop, tickop); + } + } + + prop = propprev; + } + + if (sub_GAME_7F09B4D8(get_cur_playernum()) == 0) + { + handle_alarm_gas_timer_calldamage(); + loop_set_sound_effect_all_slots(); + propsDefragRoomProps(); + } } -#else -GLOBAL_ASM( -.text -glabel determing_type_of_object_and_detection -/* 071560 7F03CA30 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 071564 7F03CA34 AFBF0024 */ sw $ra, 0x24($sp) -/* 071568 7F03CA38 AFB30020 */ sw $s3, 0x20($sp) -/* 07156C 7F03CA3C AFB2001C */ sw $s2, 0x1c($sp) -/* 071570 7F03CA40 AFB10018 */ sw $s1, 0x18($sp) -/* 071574 7F03CA44 0FC0E909 */ jal get_ptr_obj_pos_list_current_entry -/* 071578 7F03CA48 AFB00014 */ sw $s0, 0x14($sp) -/* 07157C 7F03CA4C 1040003C */ beqz $v0, .L7F03CB40 -/* 071580 7F03CA50 00408025 */ move $s0, $v0 -/* 071584 7F03CA54 24130003 */ li $s3, 3 -.L7F03CA58: -/* 071588 7F03CA58 92020000 */ lbu $v0, ($s0) -/* 07158C 7F03CA5C 00002825 */ move $a1, $zero -/* 071590 7F03CA60 8E120024 */ lw $s2, 0x24($s0) -/* 071594 7F03CA64 16620005 */ bne $s3, $v0, .L7F03CA7C -/* 071598 7F03CA68 24010001 */ li $at, 1 -/* 07159C 7F03CA6C 0FC083BC */ jal sub_GAME_7F020EF0 -/* 0715A0 7F03CA70 02002025 */ move $a0, $s0 -/* 0715A4 7F03CA74 1000001F */ b .L7F03CAF4 -/* 0715A8 7F03CA78 00402825 */ move $a1, $v0 -.L7F03CA7C: -/* 0715AC 7F03CA7C 10410005 */ beq $v0, $at, .L7F03CA94 -/* 0715B0 7F03CA80 24010004 */ li $at, 4 -/* 0715B4 7F03CA84 10410003 */ beq $v0, $at, .L7F03CA94 -/* 0715B8 7F03CA88 24010002 */ li $at, 2 -/* 0715BC 7F03CA8C 54410006 */ bnel $v0, $at, .L7F03CAA8 -/* 0715C0 7F03CA90 24010007 */ li $at, 7 -.L7F03CA94: -/* 0715C4 7F03CA94 0FC114B5 */ jal object_interaction -/* 0715C8 7F03CA98 02002025 */ move $a0, $s0 -/* 0715CC 7F03CA9C 10000015 */ b .L7F03CAF4 -/* 0715D0 7F03CAA0 00402825 */ move $a1, $v0 -/* 0715D4 7F03CAA4 24010007 */ li $at, 7 -.L7F03CAA8: -/* 0715D8 7F03CAA8 54410006 */ bnel $v0, $at, .L7F03CAC4 -/* 0715DC 7F03CAAC 24010008 */ li $at, 8 -/* 0715E0 7F03CAB0 0FC2753B */ jal sub_GAME_7F09D4EC -/* 0715E4 7F03CAB4 02002025 */ move $a0, $s0 -/* 0715E8 7F03CAB8 1000000E */ b .L7F03CAF4 -/* 0715EC 7F03CABC 00402825 */ move $a1, $v0 -/* 0715F0 7F03CAC0 24010008 */ li $at, 8 -.L7F03CAC4: -/* 0715F4 7F03CAC4 54410006 */ bnel $v0, $at, .L7F03CAE0 -/* 0715F8 7F03CAC8 24010006 */ li $at, 6 -/* 0715FC 7F03CACC 0FC27BE7 */ jal sub_GAME_7F09EF9C -/* 071600 7F03CAD0 02002025 */ move $a0, $s0 -/* 071604 7F03CAD4 10000007 */ b .L7F03CAF4 -/* 071608 7F03CAD8 00402825 */ move $a1, $v0 -/* 07160C 7F03CADC 24010006 */ li $at, 6 -.L7F03CAE0: -/* 071610 7F03CAE0 54410005 */ bnel $v0, $at, .L7F03CAF8 -/* 071614 7F03CAE4 24010005 */ li $at, 5 -/* 071618 7F03CAE8 0FC22C3C */ jal sub_GAME_7F08B0F0 -/* 07161C 7F03CAEC 02002025 */ move $a0, $s0 -/* 071620 7F03CAF0 00402825 */ move $a1, $v0 -.L7F03CAF4: -/* 071624 7F03CAF4 24010005 */ li $at, 5 -.L7F03CAF8: -/* 071628 7F03CAF8 14A10003 */ bne $a1, $at, .L7F03CB08 -/* 07162C 7F03CAFC 00000000 */ nop -/* 071630 7F03CB00 1000000D */ b .L7F03CB38 -/* 071634 7F03CB04 02408825 */ move $s1, $s2 -.L7F03CB08: -/* 071638 7F03CB08 14B30009 */ bne $a1, $s3, .L7F03CB30 -/* 07163C 7F03CB0C 8E110024 */ lw $s1, 0x24($s0) -/* 071640 7F03CB10 0FC0E94E */ jal chrpropDelist -/* 071644 7F03CB14 02002025 */ move $a0, $s0 -/* 071648 7F03CB18 0FC0E93C */ jal chrpropActivateThisFrame -/* 07164C 7F03CB1C 02002025 */ move $a0, $s0 -/* 071650 7F03CB20 16200005 */ bnez $s1, .L7F03CB38 -/* 071654 7F03CB24 00000000 */ nop -/* 071658 7F03CB28 10000003 */ b .L7F03CB38 -/* 07165C 7F03CB2C 02008825 */ move $s1, $s0 -.L7F03CB30: -/* 071660 7F03CB30 0FC0F0AF */ jal propExecuteTickOperation -/* 071664 7F03CB34 02002025 */ move $a0, $s0 -.L7F03CB38: -/* 071668 7F03CB38 1620FFC7 */ bnez $s1, .L7F03CA58 -/* 07166C 7F03CB3C 02208025 */ move $s0, $s1 -.L7F03CB40: -/* 071670 7F03CB40 0FC26C54 */ jal get_cur_playernum -/* 071674 7F03CB44 00000000 */ nop -/* 071678 7F03CB48 0FC26D36 */ jal sub_GAME_7F09B4D8 -/* 07167C 7F03CB4C 00402025 */ move $a0, $v0 -/* 071680 7F03CB50 54400008 */ bnezl $v0, .L7F03CB74 -/* 071684 7F03CB54 8FBF0024 */ lw $ra, 0x24($sp) -/* 071688 7F03CB58 0FC1597C */ jal handle_alarm_gas_timer_calldamage -/* 07168C 7F03CB5C 00000000 */ nop -/* 071690 7F03CB60 0FC0D239 */ jal loop_set_sound_effect_all_slots -/* 071694 7F03CB64 00000000 */ nop -/* 071698 7F03CB68 0FC0F93C */ jal propsDefragRoomProps -/* 07169C 7F03CB6C 00000000 */ nop -/* 0716A0 7F03CB70 8FBF0024 */ lw $ra, 0x24($sp) -.L7F03CB74: -/* 0716A4 7F03CB74 8FB00014 */ lw $s0, 0x14($sp) -/* 0716A8 7F03CB78 8FB10018 */ lw $s1, 0x18($sp) -/* 0716AC 7F03CB7C 8FB2001C */ lw $s2, 0x1c($sp) -/* 0716B0 7F03CB80 8FB30020 */ lw $s3, 0x20($sp) -/* 0716B4 7F03CB84 03E00008 */ jr $ra -/* 0716B8 7F03CB88 27BD0028 */ addiu $sp, $sp, 0x28 -) -#endif + @@ -3606,10 +3301,10 @@ glabel determing_type_of_object_and_detection /** * Copies stan roomids from prop to array. The list is terminated * with an entry of -1. - * + * * @param self: prop * @param roomids: out parameter. Must contain enough space to store room ids. - * + * * Address 0x7F03CB8C. */ void chraiGetPropRoomIds(PropRecord *self, s32 *roomids) @@ -3648,7 +3343,7 @@ void chraiGetPropRoomIds(PropRecord *self, s32 *roomids) * @param arg2: out parameter. * @param arg3: out parameter. Maybe ymin. (ground) * @param arg4: out parameter. Maybe ymax. (ground + chr/object height) - * + * * Address 0x7F03CC20. */ void chraiGetCollisionBounds(PropRecord *arg0, struct rect4f **arg1, s32 *arg2, f32 *arg3, f32 *arg4) @@ -3690,11 +3385,11 @@ void chraiGetCollisionBounds(PropRecord *arg0, struct rect4f **arg1, s32 *arg2, /** * Same as @see chraiGetCollisionBounds, but throws away arg3 and arg4. - * + * * @param arg0: * @param arg1: out parameter. Bounding coords (x,z) by (x,z). * @param arg2: out parameter. - * + * * Address 0x7F03CCB0. */ void chraiGetCollisionBoundsWithoutY(PropRecord *arg0, struct rect4f **arg1, s32 *arg2) @@ -3719,19 +3414,19 @@ void chraiGetCollisionBoundsWithoutY(PropRecord *arg0, struct rect4f **arg1, s32 s32 chrpropTestPointInPolygon(coord3d *point, struct rect4f *polygon, s32 edges) { /** - * Stack overflow: - * + * Stack overflow: + * * In any case, for any convex polygon (including rectangle) the test is * very simple: check each edge of the polygon, assuming each edge is * oriented in counterclockwise direction, and test whether the point lies * to the left of the edge (in the left-hand half-plane). If all edges pass * the test - the point is inside. If at least one fails - the point is outside. - * + * * In order to test whether the point (xp, yp) lies on the left-hand * side of the edge (x1, y1) - (x2, y2), you just need to calculate - * + * * D = (x2 - x1) * (yp - y1) - (xp - x1) * (y2 - y1) - * + * * https://stackoverflow.com/a/2752753/1462295 */ @@ -3752,7 +3447,7 @@ s32 chrpropTestPointInPolygon(coord3d *point, struct rect4f *polygon, s32 edges) for (i=0; ipoints[(i+1) % edges].f[1] - polygon->points[i].f[1]) * (point->f[0] - polygon->points[i].f[0])) + diff = ( (polygon->points[(i+1) % edges].f[1] - polygon->points[i].f[1]) * (point->f[0] - polygon->points[i].f[0])) - ((polygon->points[(i+1) % edges].f[0] - polygon->points[i].f[0]) * (point->f[2] - polygon->points[i].f[1])); if (diff != 0.0f) @@ -3788,7 +3483,7 @@ s32 chrpropTestPointInPolygon(coord3d *point, struct rect4f *polygon, s32 edges) * @param collision_radius: out parameter, will be set to character width or player collision radius. * @param height: out parameter, will be set to height * @param always_20: out parameter, will be set to either 20 or 30. - * + * * Address 0x7F03CF88. */ void chrpropGetCollisionBounds(PropRecord *arg0, f32 *collision_radius, f32 *height, f32 *arg3) @@ -3852,82 +3547,50 @@ void sub_GAME_7F03D058(PropRecord *prop, bool unset) //#MATCH +/** + * NTSC address: 0x7F03D0D4. +*/ +void sub_GAME_7F03D0D4(void) +{ + PropRecord *prop; + PropRecord *propprev; + bool isCollected = FALSE; + if (!isBondInTank() && !g_PlayerInvincible) + { + //for each prop in setup -#ifdef NONMATCHING -void sub_GAME_7F03D0D4(void) { + for (prop = get_ptr_obj_pos_list_current_entry(); prop != NULL; prop = propprev) + { + isCollected = 0; + if (prop->timetoregen <= 0) + { + switch (prop->type) + { + case PROP_TYPE_DOOR: + case PROP_TYPE_CHR: + case PROP_TYPE_PLAYER: + case PROP_TYPE_VIEWER: + case PROP_TYPE_EXPLOSION: + case PROP_TYPE_SMOKE: + break; + + case PROP_TYPE_OBJ: + isCollected = object_collectability_routines(prop); + break; + + case PROP_TYPE_WEAPON: + isCollected = redirect_object_collectability_routines(prop); + break; + } + } + propprev = prop->prev; //not sure why rare put this here and not in the for statement + + propExecuteTickOperation(prop, isCollected); + } + } } -#else -GLOBAL_ASM( -.late_rodata -/*D:800529A0*/ -glabel jpt_800529A0 -.word loc_CODE_7F03D144 -.word def_7F03D13C -.word def_7F03D13C -.word loc_CODE_7F03D154 -.word def_7F03D13C -.word def_7F03D13C -.word def_7F03D13C -.word def_7F03D13C -.text -glabel sub_GAME_7F03D0D4 -/* 071C04 7F03D0D4 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 071C08 7F03D0D8 AFBF001C */ sw $ra, 0x1c($sp) -/* 071C0C 7F03D0DC AFB10018 */ sw $s1, 0x18($sp) -/* 071C10 7F03D0E0 0FC1F39E */ jal isBondInTank -/* 071C14 7F03D0E4 AFB00014 */ sw $s0, 0x14($sp) -/* 071C18 7F03D0E8 14400022 */ bnez $v0, .L7F03D174 -/* 071C1C 7F03D0EC 3C0E8003 */ lui $t6, %hi(g_PlayerInvincible) -/* 071C20 7F03D0F0 8DCE64B4 */ lw $t6, %lo(g_PlayerInvincible)($t6) -/* 071C24 7F03D0F4 55C00020 */ bnezl $t6, .L7F03D178 -/* 071C28 7F03D0F8 8FBF001C */ lw $ra, 0x1c($sp) -/* 071C2C 7F03D0FC 0FC0E909 */ jal get_ptr_obj_pos_list_current_entry -/* 071C30 7F03D100 00000000 */ nop -/* 071C34 7F03D104 1040001B */ beqz $v0, .L7F03D174 -/* 071C38 7F03D108 00408825 */ move $s1, $v0 -.L7F03D10C: -/* 071C3C 7F03D10C 862F0002 */ lh $t7, 2($s1) -/* 071C40 7F03D110 00002825 */ move $a1, $zero -/* 071C44 7F03D114 5DE00013 */ bgtzl $t7, .L7F03D164 -/* 071C48 7F03D118 8E300024 */ lw $s0, 0x24($s1) -/* 071C4C 7F03D11C 92380000 */ lbu $t8, ($s1) -/* 071C50 7F03D120 2719FFFF */ addiu $t9, $t8, -1 -/* 071C54 7F03D124 2F210008 */ sltiu $at, $t9, 8 -/* 071C58 7F03D128 1020000D */ beqz $at, .L7F03D160 -/* 071C5C 7F03D12C 0019C880 */ sll $t9, $t9, 2 -/* 071C60 7F03D130 3C018005 */ lui $at, %hi(jpt_800529A0) -/* 071C64 7F03D134 00390821 */ addu $at, $at, $t9 -/* 071C68 7F03D138 8C3929A0 */ lw $t9, %lo(jpt_800529A0)($at) -/* 071C6C 7F03D13C 03200008 */ jr $t9 -/* 071C70 7F03D140 00000000 */ nop -loc_CODE_7F03D144: -/* 071C74 7F03D144 0FC141B7 */ jal object_collectability_routines -/* 071C78 7F03D148 02202025 */ move $a0, $s1 -/* 071C7C 7F03D14C 10000004 */ b .L7F03D160 -/* 071C80 7F03D150 00402825 */ move $a1, $v0 -loc_CODE_7F03D154: -/* 071C84 7F03D154 0FC14955 */ jal redirect_object_collectability_routines -/* 071C88 7F03D158 02202025 */ move $a0, $s1 -/* 071C8C 7F03D15C 00402825 */ move $a1, $v0 -def_7F03D13C: -.L7F03D160: -/* 071C90 7F03D160 8E300024 */ lw $s0, 0x24($s1) -.L7F03D164: -/* 071C94 7F03D164 0FC0F0AF */ jal propExecuteTickOperation -/* 071C98 7F03D168 02202025 */ move $a0, $s1 -/* 071C9C 7F03D16C 1600FFE7 */ bnez $s0, .L7F03D10C -/* 071CA0 7F03D170 02008825 */ move $s1, $s0 -.L7F03D174: -/* 071CA4 7F03D174 8FBF001C */ lw $ra, 0x1c($sp) -.L7F03D178: -/* 071CA8 7F03D178 8FB00014 */ lw $s0, 0x14($sp) -/* 071CAC 7F03D17C 8FB10018 */ lw $s1, 0x18($sp) -/* 071CB0 7F03D180 03E00008 */ jr $ra -/* 071CB4 7F03D184 27BD0020 */ addiu $sp, $sp, 0x20 -) -#endif f32 sub_GAME_7F03D188(PropRecord *prop, coord3d *arg1, f32 *arg2, f32 *arg3, f32 *arg4) @@ -3958,23 +3621,23 @@ f32 sub_GAME_7F03D188(PropRecord *prop, coord3d *arg1, f32 *arg2, f32 *arg3, f32 result = -2; - sub_GAME_7F077FF4(arg1, (coord3d*)spa0); + transform3Dto2DCoords(arg1, (coord3d*)spa0); sp94.x = arg2[0]; sp94.y = arg1->y; sp94.z = arg1->z; - sub_GAME_7F077FF4(&sp94, (coord3d*)sp8c); + transform3Dto2DCoords(&sp94, (coord3d*)sp8c); sp94.x = arg2[1]; sp94.y = arg1->y; sp94.z = arg1->z; - sub_GAME_7F077FF4(&sp94, (coord3d*)sp84); + transform3Dto2DCoords(&sp94, (coord3d*)sp84); sp94.x = arg1->x; sp94.y = arg3[1]; sp94.z = arg1->z; - sub_GAME_7F077FF4(&sp94, (coord3d*)sp7c); + transform3Dto2DCoords(&sp94, (coord3d*)sp7c); sp94.x = arg1->x; sp94.y = arg3[0]; sp94.z = arg1->z; - sub_GAME_7F077FF4(&sp94, (coord3d*)sp74); + transform3Dto2DCoords(&sp94, (coord3d*)sp74); if (sp74[1] >= top && bottom >= sp7c[1]) { @@ -4012,7 +3675,7 @@ f32 sub_GAME_7F03D188(PropRecord *prop, coord3d *arg1, f32 *arg2, f32 *arg3, f32 ducking_height_related = bondviewGetPlayerDuckingHeightRelated(g_CurrentPlayer); bondviewUpdateGuardTankFlagsRelated(playerprop, FALSE); - if ((stanTestLineUnobstructed(&stan, playerprop->pos.f[0], playerprop->pos.f[2], prop->pos.f[0], prop->pos.f[2], 0x13, ducking_height_related, ducking_height_related, 0.0f, 1.0f) != 0)) + if ((stanTestLineUnobstructed(&stan, playerprop->pos.f[0], playerprop->pos.f[2], prop->pos.f[0], prop->pos.f[2], CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PATHBLOCKER, ducking_height_related, ducking_height_related, 0.0f, 1.0f) != 0)) { if (stan == prop->stan) { @@ -4071,7 +3734,7 @@ f32 sub_GAME_7F03D188(PropRecord *prop, coord3d *arg1, f32 *arg2, f32 *arg3, f32 /** * Iterates on screen props to find autoaim target. - * + * * US address 7F03D78C. */ void chrpropUpdateAutoaimTarget(void) @@ -4101,7 +3764,7 @@ void chrpropUpdateAutoaimTarget(void) if (prop == NULL) { - continue; + continue; } if ((prop->type != PROP_TYPE_CHR) @@ -4113,7 +3776,7 @@ void chrpropUpdateAutoaimTarget(void) } chr = prop->chr; - + if (((chrGetEquippedWeaponProp(chr, GUNRIGHT) == 0) && (chrGetEquippedWeaponProp(chr, GUNLEFT) == 0))) { continue; @@ -4129,7 +3792,7 @@ void chrpropUpdateAutoaimTarget(void) if (var_f20 < var_f0) { var_f20 = var_f0; - + winning_prop = prop; sp9C.x = sp6C.x; sp9C.y = sp6C.y; @@ -4147,7 +3810,7 @@ void chrpropUpdateAutoaimTarget(void) if (sp9C.x > 1.0f); bondviewUpdateYAutoAimTime(winning_prop, ((sp9C.y - getPlayer_c_screentop()) / (getPlayer_c_screenheight() * 0.5f)) - 1.0f); - + if (redirect_get_BONDdata_autoaim_x() != 0) { bondviewUpdateXAutoAimTime(winning_prop, ((sp9C.x - getPlayer_c_screenleft()) / (getPlayer_c_screenwidth() * 0.5f)) - 1.0f); @@ -4160,23 +3823,25 @@ void chrpropUpdateAutoaimTarget(void) } } - -s32 propDoorGetCdTypes(PropRecord* arg0) +/* +* Address: 7F03D9EC +*/ +s32 propDoorGetCdTypes(PropRecord* prop) { s32 var_v1; - if (arg0->door->openPosition <= 0.0f) + if (prop->door->openPosition <= 0.0f) { var_v1 = CDTYPE_CLOSEDDOORS; } else { - var_v1 = (arg0->door->maxFrac <= arg0->door->openPosition) + var_v1 = (prop->door->maxFrac <= prop->door->openPosition) ? CDTYPE_OPENDOORS : CDTYPE_AJARDOORS; } - if (((s32)arg0->door->flags2 * 4) < 0) + if (((s32)prop->door->flags2 * 4) < 0) { var_v1 |= CDTYPE_DOORSLOCKEDTOAI; } @@ -4185,99 +3850,59 @@ s32 propDoorGetCdTypes(PropRecord* arg0) } -#ifdef NONMATCHING -void sub_GAME_7F03DA50(void) { +/* +* Address: 7F03DA50 +* PD: prop_is_of_cd_type +*/ +s32 propIsOfCdType(PropRecord* prop, s32 cdtypes) { + s32 ret; + ObjectRecord *obj; + ret = 1; + if (prop->type == PROP_TYPE_DOOR) { + if ((cdtypes & CDTYPE_AIOPAQUE)) { + obj = prop->obj; + + if (obj->flags & PROPFLAG_04000000) { + ret = 0; + } + } + + if (!(cdtypes & CDTYPE_DOORS)) { + if (!(propDoorGetCdTypes(prop) & cdtypes)) { + ret = 0; + } + } + } else if (prop->type == PROP_TYPE_VIEWER) { + if (!(cdtypes & CDTYPE_PLAYERS)) { + ret = 0; + } + } else if (prop->type == PROP_TYPE_CHR) { + if (!(cdtypes & CDTYPE_CHRS)) { + ret = 0; + } + } else { + obj = prop->obj; + + if ((cdtypes & CDTYPE_AIOPAQUE) && (obj->flags & PROPFLAG_04000000)) { + ret = 0; + } + + if ((cdtypes & CDTYPE_OBJSIMMUNETOEXPLOSIONS) && !(obj->flags & PROPFLAG_INVINCIBLE)) { + ret = 0; + } + + if (obj->flags & PROPFLAG_00000800) { + if (!(cdtypes & CDTYPE_PATHBLOCKER)) { + ret = 0; + } + } else if (!(cdtypes & CDTYPE_OBJS)) { + ret = 0; + } + } + + return ret; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03DA50 -/* 072580 7F03DA50 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 072584 7F03DA54 AFBF0014 */ sw $ra, 0x14($sp) -/* 072588 7F03DA58 90820000 */ lbu $v0, ($a0) -/* 07258C 7F03DA5C 24010002 */ li $at, 2 -/* 072590 7F03DA60 24060001 */ li $a2, 1 -/* 072594 7F03DA64 14410015 */ bne $v0, $at, .L7F03DABC -/* 072598 7F03DA68 30AE0100 */ andi $t6, $a1, 0x100 -/* 07259C 7F03DA6C 11C00007 */ beqz $t6, .L7F03DA8C -/* 0725A0 7F03DA70 30B90002 */ andi $t9, $a1, 2 -/* 0725A4 7F03DA74 8C820004 */ lw $v0, 4($a0) -/* 0725A8 7F03DA78 8C4F0008 */ lw $t7, 8($v0) -/* 0725AC 7F03DA7C 000FC140 */ sll $t8, $t7, 5 -/* 0725B0 7F03DA80 07010002 */ bgez $t8, .L7F03DA8C -/* 0725B4 7F03DA84 00000000 */ nop -/* 0725B8 7F03DA88 00003025 */ move $a2, $zero -.L7F03DA8C: -/* 0725BC 7F03DA8C 57200034 */ bnezl $t9, .L7F03DB60 -/* 0725C0 7F03DA90 8FBF0014 */ lw $ra, 0x14($sp) -/* 0725C4 7F03DA94 AFA50024 */ sw $a1, 0x24($sp) -/* 0725C8 7F03DA98 0FC0F67B */ jal propDoorGetCdTypes -/* 0725CC 7F03DA9C AFA6001C */ sw $a2, 0x1c($sp) -/* 0725D0 7F03DAA0 8FA50024 */ lw $a1, 0x24($sp) -/* 0725D4 7F03DAA4 8FA6001C */ lw $a2, 0x1c($sp) -/* 0725D8 7F03DAA8 00454024 */ and $t0, $v0, $a1 -/* 0725DC 7F03DAAC 5500002C */ bnezl $t0, .L7F03DB60 -/* 0725E0 7F03DAB0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0725E4 7F03DAB4 10000029 */ b .L7F03DB5C -/* 0725E8 7F03DAB8 00003025 */ move $a2, $zero -.L7F03DABC: -/* 0725EC 7F03DABC 24010006 */ li $at, 6 -/* 0725F0 7F03DAC0 14410005 */ bne $v0, $at, .L7F03DAD8 -/* 0725F4 7F03DAC4 30A90004 */ andi $t1, $a1, 4 -/* 0725F8 7F03DAC8 55200025 */ bnezl $t1, .L7F03DB60 -/* 0725FC 7F03DACC 8FBF0014 */ lw $ra, 0x14($sp) -/* 072600 7F03DAD0 10000022 */ b .L7F03DB5C -/* 072604 7F03DAD4 00003025 */ move $a2, $zero -.L7F03DAD8: -/* 072608 7F03DAD8 24010003 */ li $at, 3 -/* 07260C 7F03DADC 14410006 */ bne $v0, $at, .L7F03DAF8 -/* 072610 7F03DAE0 30AB0100 */ andi $t3, $a1, 0x100 -/* 072614 7F03DAE4 30AA0008 */ andi $t2, $a1, 8 -/* 072618 7F03DAE8 5540001D */ bnezl $t2, .L7F03DB60 -/* 07261C 7F03DAEC 8FBF0014 */ lw $ra, 0x14($sp) -/* 072620 7F03DAF0 1000001A */ b .L7F03DB5C -/* 072624 7F03DAF4 00003025 */ move $a2, $zero -.L7F03DAF8: -/* 072628 7F03DAF8 11600006 */ beqz $t3, .L7F03DB14 -/* 07262C 7F03DAFC 8C820004 */ lw $v0, 4($a0) -/* 072630 7F03DB00 8C4C0008 */ lw $t4, 8($v0) -/* 072634 7F03DB04 000C6940 */ sll $t5, $t4, 5 -/* 072638 7F03DB08 05A30003 */ bgezl $t5, .L7F03DB18 -/* 07263C 7F03DB0C 30AE0200 */ andi $t6, $a1, 0x200 -/* 072640 7F03DB10 00003025 */ move $a2, $zero -.L7F03DB14: -/* 072644 7F03DB14 30AE0200 */ andi $t6, $a1, 0x200 -.L7F03DB18: -/* 072648 7F03DB18 11C00005 */ beqz $t6, .L7F03DB30 -/* 07264C 7F03DB1C 8C430008 */ lw $v1, 8($v0) -/* 072650 7F03DB20 00037B80 */ sll $t7, $v1, 0xe -/* 072654 7F03DB24 05E20003 */ bltzl $t7, .L7F03DB34 -/* 072658 7F03DB28 30780800 */ andi $t8, $v1, 0x800 -/* 07265C 7F03DB2C 00003025 */ move $a2, $zero -.L7F03DB30: -/* 072660 7F03DB30 30780800 */ andi $t8, $v1, 0x800 -.L7F03DB34: -/* 072664 7F03DB34 13000006 */ beqz $t8, .L7F03DB50 -/* 072668 7F03DB38 30A80001 */ andi $t0, $a1, 1 -/* 07266C 7F03DB3C 30B90010 */ andi $t9, $a1, 0x10 -/* 072670 7F03DB40 57200007 */ bnezl $t9, .L7F03DB60 -/* 072674 7F03DB44 8FBF0014 */ lw $ra, 0x14($sp) -/* 072678 7F03DB48 10000004 */ b .L7F03DB5C -/* 07267C 7F03DB4C 00003025 */ move $a2, $zero -.L7F03DB50: -/* 072680 7F03DB50 55000003 */ bnezl $t0, .L7F03DB60 -/* 072684 7F03DB54 8FBF0014 */ lw $ra, 0x14($sp) -/* 072688 7F03DB58 00003025 */ move $a2, $zero -.L7F03DB5C: -/* 07268C 7F03DB5C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F03DB60: -/* 072690 7F03DB60 27BD0020 */ addiu $sp, $sp, 0x20 -/* 072694 7F03DB64 00C01025 */ move $v0, $a2 -/* 072698 7F03DB68 03E00008 */ jr $ra -/* 07269C 7F03DB6C 00000000 */ nop -) -#endif @@ -4310,675 +3935,172 @@ s32 sub_GAME_7F03DB70(s32* roomids1, s32* roomids2) -#ifdef NONMATCHING -void sub_GAME_7F03DBCC(void) { +/* +* Address: 0x7F03DBCC +* PD: prop_try_add_to_chunk +*/ +s32 chrpropInsertPropnum(s16 propnum, s32 chunkindex) { + s32 i; -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03DBCC -/* 0726FC 7F03DBCC 3C0F8007 */ lui $t7, %hi(RoomPropListChunks) -/* 072700 7F03DBD0 8DEF161C */ lw $t7, %lo(RoomPropListChunks)($t7) -/* 072704 7F03DBD4 0005C140 */ sll $t8, $a1, 5 -/* 072708 7F03DBD8 AFA40000 */ sw $a0, ($sp) -/* 07270C 7F03DBDC 01F81821 */ addu $v1, $t7, $t8 -/* 072710 7F03DBE0 84790000 */ lh $t9, ($v1) -/* 072714 7F03DBE4 00043400 */ sll $a2, $a0, 0x10 -/* 072718 7F03DBE8 00067403 */ sra $t6, $a2, 0x10 -/* 07271C 7F03DBEC 01C03025 */ move $a2, $t6 -/* 072720 7F03DBF0 07210004 */ bgez $t9, .L7F03DC04 -/* 072724 7F03DBF4 00602025 */ move $a0, $v1 -/* 072728 7F03DBF8 A48E0000 */ sh $t6, ($a0) -/* 07272C 7F03DBFC 03E00008 */ jr $ra -/* 072730 7F03DC00 24020001 */ li $v0, 1 - -.L7F03DC04: -/* 072734 7F03DC04 84880002 */ lh $t0, 2($a0) -/* 072738 7F03DC08 24020001 */ li $v0, 1 -/* 07273C 7F03DC0C 05030004 */ bgezl $t0, .L7F03DC20 -/* 072740 7F03DC10 84890004 */ lh $t1, 4($a0) -/* 072744 7F03DC14 03E00008 */ jr $ra -/* 072748 7F03DC18 A4860002 */ sh $a2, 2($a0) - -/* 07274C 7F03DC1C 84890004 */ lh $t1, 4($a0) -.L7F03DC20: -/* 072750 7F03DC20 24650006 */ addiu $a1, $v1, 6 -/* 072754 7F03DC24 2402001E */ li $v0, 30 -/* 072758 7F03DC28 05230005 */ bgezl $t1, .L7F03DC40 -/* 07275C 7F03DC2C 24040006 */ li $a0, 6 -/* 072760 7F03DC30 A4860004 */ sh $a2, 4($a0) -/* 072764 7F03DC34 03E00008 */ jr $ra -/* 072768 7F03DC38 24020001 */ li $v0, 1 - -/* 07276C 7F03DC3C 24040006 */ li $a0, 6 -.L7F03DC40: -/* 072770 7F03DC40 84AA0000 */ lh $t2, ($a1) -/* 072774 7F03DC44 24840008 */ addiu $a0, $a0, 8 -/* 072778 7F03DC48 05430005 */ bgezl $t2, .L7F03DC60 -/* 07277C 7F03DC4C 84AB0002 */ lh $t3, 2($a1) -/* 072780 7F03DC50 A4A60000 */ sh $a2, ($a1) -/* 072784 7F03DC54 03E00008 */ jr $ra -/* 072788 7F03DC58 24020001 */ li $v0, 1 - -/* 07278C 7F03DC5C 84AB0002 */ lh $t3, 2($a1) -.L7F03DC60: -/* 072790 7F03DC60 05630005 */ bgezl $t3, .L7F03DC78 -/* 072794 7F03DC64 84AC0004 */ lh $t4, 4($a1) -/* 072798 7F03DC68 A4A60002 */ sh $a2, 2($a1) -/* 07279C 7F03DC6C 03E00008 */ jr $ra -/* 0727A0 7F03DC70 24020001 */ li $v0, 1 - -/* 0727A4 7F03DC74 84AC0004 */ lh $t4, 4($a1) -.L7F03DC78: -/* 0727A8 7F03DC78 05830005 */ bgezl $t4, .L7F03DC90 -/* 0727AC 7F03DC7C 84AD0006 */ lh $t5, 6($a1) -/* 0727B0 7F03DC80 A4A60004 */ sh $a2, 4($a1) -/* 0727B4 7F03DC84 03E00008 */ jr $ra -/* 0727B8 7F03DC88 24020001 */ li $v0, 1 - -/* 0727BC 7F03DC8C 84AD0006 */ lh $t5, 6($a1) -.L7F03DC90: -/* 0727C0 7F03DC90 05A10004 */ bgez $t5, .L7F03DCA4 -/* 0727C4 7F03DC94 00000000 */ nop -/* 0727C8 7F03DC98 A4A60006 */ sh $a2, 6($a1) -/* 0727CC 7F03DC9C 03E00008 */ jr $ra -/* 0727D0 7F03DCA0 24020001 */ li $v0, 1 - -.L7F03DCA4: -/* 0727D4 7F03DCA4 1482FFE6 */ bne $a0, $v0, .L7F03DC40 -/* 0727D8 7F03DCA8 24A50008 */ addiu $a1, $a1, 8 -/* 0727DC 7F03DCAC 00001025 */ move $v0, $zero -/* 0727E0 7F03DCB0 03E00008 */ jr $ra -/* 0727E4 7F03DCB4 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F03DCB8(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03DCB8 -/* 0727E8 7F03DCB8 00803025 */ move $a2, $a0 -/* 0727EC 7F03DCBC 3C028007 */ lui $v0, %hi(RoomPropListChunks) -/* 0727F0 7F03DCC0 8C42161C */ lw $v0, %lo(RoomPropListChunks)($v0) -/* 0727F4 7F03DCC4 2404FFFE */ li $a0, -2 -/* 0727F8 7F03DCC8 00001825 */ move $v1, $zero -/* 0727FC 7F03DCCC 24070100 */ li $a3, 256 -.L7F03DCD0: -/* 072800 7F03DCD0 844E0000 */ lh $t6, ($v0) -/* 072804 7F03DCD4 548E002C */ bnel $a0, $t6, .L7F03DD88 -/* 072808 7F03DCD8 24630001 */ addiu $v1, $v1, 1 -/* 07280C 7F03DCDC 3C028007 */ lui $v0, %hi(RoomPropListChunks) -/* 072810 7F03DCE0 2442161C */ addiu $v0, %lo(RoomPropListChunks) # addiu $v0, $v0, 0x161c -/* 072814 7F03DCE4 00002025 */ move $a0, $zero -/* 072818 7F03DCE8 24080020 */ li $t0, 32 -/* 07281C 7F03DCEC 2407FFFF */ li $a3, -1 -.L7F03DCF0: -/* 072820 7F03DCF0 8C4F0000 */ lw $t7, ($v0) -/* 072824 7F03DCF4 0003C140 */ sll $t8, $v1, 5 -/* 072828 7F03DCF8 00035940 */ sll $t3, $v1, 5 -/* 07282C 7F03DCFC 01F8C821 */ addu $t9, $t7, $t8 -/* 072830 7F03DD00 03244821 */ addu $t1, $t9, $a0 -/* 072834 7F03DD04 A5270000 */ sh $a3, ($t1) -/* 072838 7F03DD08 8C4A0000 */ lw $t2, ($v0) -/* 07283C 7F03DD0C 00037940 */ sll $t7, $v1, 5 -/* 072840 7F03DD10 014B6021 */ addu $t4, $t2, $t3 -/* 072844 7F03DD14 01846821 */ addu $t5, $t4, $a0 -/* 072848 7F03DD18 A5A70002 */ sh $a3, 2($t5) -/* 07284C 7F03DD1C 8C4E0000 */ lw $t6, ($v0) -/* 072850 7F03DD20 00035140 */ sll $t2, $v1, 5 -/* 072854 7F03DD24 01CFC021 */ addu $t8, $t6, $t7 -/* 072858 7F03DD28 0304C821 */ addu $t9, $t8, $a0 -/* 07285C 7F03DD2C A7270004 */ sh $a3, 4($t9) -/* 072860 7F03DD30 8C490000 */ lw $t1, ($v0) -/* 072864 7F03DD34 012A5821 */ addu $t3, $t1, $t2 -/* 072868 7F03DD38 01646021 */ addu $t4, $t3, $a0 -/* 07286C 7F03DD3C 24840008 */ addiu $a0, $a0, 8 -/* 072870 7F03DD40 1488FFEB */ bne $a0, $t0, .L7F03DCF0 -/* 072874 7F03DD44 A5870006 */ sh $a3, 6($t4) -/* 072878 7F03DD48 04A00007 */ bltz $a1, .L7F03DD68 -/* 07287C 7F03DD4C 00000000 */ nop -/* 072880 7F03DD50 8C4D0000 */ lw $t5, ($v0) -/* 072884 7F03DD54 00057140 */ sll $t6, $a1, 5 -/* 072888 7F03DD58 00601025 */ move $v0, $v1 -/* 07288C 7F03DD5C 01AE7821 */ addu $t7, $t5, $t6 -/* 072890 7F03DD60 03E00008 */ jr $ra -/* 072894 7F03DD64 A5E3001E */ sh $v1, 0x1e($t7) - -.L7F03DD68: -/* 072898 7F03DD68 3C188007 */ lui $t8, %hi(RoomPropListChunkIndexes) -/* 07289C 7F03DD6C 8F181618 */ lw $t8, %lo(RoomPropListChunkIndexes)($t8) -/* 0728A0 7F03DD70 0006C840 */ sll $t9, $a2, 1 -/* 0728A4 7F03DD74 03194821 */ addu $t1, $t8, $t9 -/* 0728A8 7F03DD78 A5230000 */ sh $v1, ($t1) -/* 0728AC 7F03DD7C 03E00008 */ jr $ra -/* 0728B0 7F03DD80 00601025 */ move $v0, $v1 - -/* 0728B4 7F03DD84 24630001 */ addiu $v1, $v1, 1 -.L7F03DD88: -/* 0728B8 7F03DD88 1467FFD1 */ bne $v1, $a3, .L7F03DCD0 -/* 0728BC 7F03DD8C 24420020 */ addiu $v0, $v0, 0x20 -/* 0728C0 7F03DD90 2402FFFF */ li $v0, -1 -/* 0728C4 7F03DD94 03E00008 */ jr $ra -/* 0728C8 7F03DD98 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void chrpropRegisterRoom(PropRecord *arg0, s16 arg1) -{ - s16 temp_s0; - s16 temp_s0_2; - s32 temp_v0; - s32 phi_s0; - s32 phi_a2; - s32 phi_a2_2; - - phi_a2 = -1; - phi_a2_2 = -1; - if (arg1 >= 0) + // Note: The size of the propnums array is 16, but we're only iterating over the first 15 elements. + // Is this because the last element is always -1? Seems like a waste. + for (i = 0; i < 15; i++) { - temp_s0 = *(RoomPropListChunkIndexes + (arg1 * 2)); - phi_s0 = temp_s0; - if (temp_s0 >= 0) + if (RoomPropListChunks[chunkindex].propnums[i] < 0) { -loop_3: - if (sub_GAME_7F03DBCC((arg0 - pos_data_entry) / 52, phi_s0, phi_a2) == 0) - { - temp_s0_2 = (RoomPropListChunks + (phi_s0 << 5))->unk1E; - phi_s0 = temp_s0_2; - phi_a2 = phi_s0; - phi_a2_2 = phi_s0; - if (temp_s0_2 < 0) - { - goto block_5; - } - goto loop_3; - } + RoomPropListChunks[chunkindex].propnums[i] = propnum; + return 1; } - else + } + + return 0; +} + + + +/* +* Address: 0x7F03DCB8 +* Description: Find an emtpy chunk that can be assigned to a room +* PD: room_allocate_prop_list_chunk +*/ +s32 chrpropInitializeNewChunkForRoom(s32 roomindex, s32 chunkindex) +{ + s32 i; + for (i = 0; i < 256; i++) + { + if (RoomPropListChunks[i].propnums[0] == -2) { -block_5: - temp_v0 = sub_GAME_7F03DCB8(arg1, phi_a2_2, phi_a2_2); - if (temp_v0 >= 0) + // This chunk is allowed to be erased + s32 j; + for (j = 0; j < 16; j++) { - sub_GAME_7F03DBCC((arg0 - pos_data_entry) / 52, temp_v0); + RoomPropListChunks[i].propnums[j] = -1; } + + if (chunkindex >= 0) + { + RoomPropListChunks[chunkindex].propnums[0xF] = i; + } + else + { + RoomPropListChunkIndexes[roomindex] = i; + } + + return i; + } + } + + return -1; +} + + + + +/* +* Address: 0x7F03DD9C +* PD: prop_register_room +* PD adds an upper bound check to make sure room is not above the max number of rooms +*/ +void chrpropRegisterRoom(PropRecord *prop, s16 room) +{ + s32 prevchunk = -1; + + if (room < 0) + { + return; + } + else + { + // Find which chunk to start at + s32 chunkindex = RoomPropListChunkIndexes[room]; + s16 propnum = (prop - pos_data_entry); + + while (chunkindex >= 0) + { + if (chrpropInsertPropnum(propnum, chunkindex)) + { + return; + } + + prevchunk = chunkindex; + chunkindex = RoomPropListChunks[chunkindex].propnums[0xF]; + } + + // Allocate a new chunk + chunkindex = chrpropInitializeNewChunkForRoom(room, prevchunk); + + if (chunkindex >= 0) + { + chrpropInsertPropnum(propnum, chunkindex); } } } -} -#else -GLOBAL_ASM( -.text -glabel chrpropRegisterRoom -/* 0728CC 7F03DD9C 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0728D0 7F03DDA0 AFA5002C */ sw $a1, 0x2c($sp) -/* 0728D4 7F03DDA4 87AE002E */ lh $t6, 0x2e($sp) -/* 0728D8 7F03DDA8 AFBF0024 */ sw $ra, 0x24($sp) -/* 0728DC 7F03DDAC AFB20020 */ sw $s2, 0x20($sp) -/* 0728E0 7F03DDB0 AFB1001C */ sw $s1, 0x1c($sp) -/* 0728E4 7F03DDB4 AFB00018 */ sw $s0, 0x18($sp) -/* 0728E8 7F03DDB8 AFA40028 */ sw $a0, 0x28($sp) -/* 0728EC 7F03DDBC 05C0002F */ bltz $t6, .L7F03DE7C -/* 0728F0 7F03DDC0 2406FFFF */ li $a2, -1 -/* 0728F4 7F03DDC4 87B8002E */ lh $t8, 0x2e($sp) -/* 0728F8 7F03DDC8 3C0F8007 */ lui $t7, %hi(RoomPropListChunkIndexes) -/* 0728FC 7F03DDCC 8DEF1618 */ lw $t7, %lo(RoomPropListChunkIndexes)($t7) -/* 072900 7F03DDD0 0018C840 */ sll $t9, $t8, 1 -/* 072904 7F03DDD4 3C0A8007 */ lui $t2, %hi(pos_data_entry) -/* 072908 7F03DDD8 01F94021 */ addu $t0, $t7, $t9 -/* 07290C 7F03DDDC 85100000 */ lh $s0, ($t0) -/* 072910 7F03DDE0 254A9C38 */ addiu $t2, %lo(pos_data_entry) # addiu $t2, $t2, -0x63c8 -/* 072914 7F03DDE4 008A8823 */ subu $s1, $a0, $t2 -/* 072918 7F03DDE8 06000015 */ bltz $s0, .L7F03DE40 -/* 07291C 7F03DDEC 24010034 */ li $at, 52 -/* 072920 7F03DDF0 0221001A */ div $zero, $s1, $at -/* 072924 7F03DDF4 00005812 */ mflo $t3 -/* 072928 7F03DDF8 000B6400 */ sll $t4, $t3, 0x10 -/* 07292C 7F03DDFC 3C128007 */ lui $s2, %hi(RoomPropListChunks) -/* 072930 7F03DE00 2652161C */ addiu $s2, %lo(RoomPropListChunks) # addiu $s2, $s2, 0x161c -/* 072934 7F03DE04 000C8C03 */ sra $s1, $t4, 0x10 -/* 072938 7F03DE08 00112400 */ sll $a0, $s1, 0x10 -.L7F03DE0C: -/* 07293C 7F03DE0C 00047403 */ sra $t6, $a0, 0x10 -/* 072940 7F03DE10 01C02025 */ move $a0, $t6 -/* 072944 7F03DE14 0FC0F6F3 */ jal sub_GAME_7F03DBCC -/* 072948 7F03DE18 02002825 */ move $a1, $s0 -/* 07294C 7F03DE1C 54400018 */ bnezl $v0, .L7F03DE80 -/* 072950 7F03DE20 8FBF0024 */ lw $ra, 0x24($sp) -/* 072954 7F03DE24 8E580000 */ lw $t8, ($s2) -/* 072958 7F03DE28 00107940 */ sll $t7, $s0, 5 -/* 07295C 7F03DE2C 02003025 */ move $a2, $s0 -/* 072960 7F03DE30 030FC821 */ addu $t9, $t8, $t7 -/* 072964 7F03DE34 8730001E */ lh $s0, 0x1e($t9) -/* 072968 7F03DE38 0603FFF4 */ bgezl $s0, .L7F03DE0C -/* 07296C 7F03DE3C 00112400 */ sll $a0, $s1, 0x10 -.L7F03DE40: -/* 072970 7F03DE40 87A4002E */ lh $a0, 0x2e($sp) -/* 072974 7F03DE44 0FC0F72E */ jal sub_GAME_7F03DCB8 -/* 072978 7F03DE48 00C02825 */ move $a1, $a2 -/* 07297C 7F03DE4C 0440000B */ bltz $v0, .L7F03DE7C -/* 072980 7F03DE50 8FA80028 */ lw $t0, 0x28($sp) -/* 072984 7F03DE54 3C098007 */ lui $t1, %hi(pos_data_entry) -/* 072988 7F03DE58 25299C38 */ addiu $t1, %lo(pos_data_entry) # addiu $t1, $t1, -0x63c8 -/* 07298C 7F03DE5C 01092023 */ subu $a0, $t0, $t1 -/* 072990 7F03DE60 24010034 */ li $at, 52 -/* 072994 7F03DE64 0081001A */ div $zero, $a0, $at -/* 072998 7F03DE68 00005012 */ mflo $t2 -/* 07299C 7F03DE6C 000A5C00 */ sll $t3, $t2, 0x10 -/* 0729A0 7F03DE70 000B2403 */ sra $a0, $t3, 0x10 -/* 0729A4 7F03DE74 0FC0F6F3 */ jal sub_GAME_7F03DBCC -/* 0729A8 7F03DE78 00402825 */ move $a1, $v0 -.L7F03DE7C: -/* 0729AC 7F03DE7C 8FBF0024 */ lw $ra, 0x24($sp) -.L7F03DE80: -/* 0729B0 7F03DE80 8FB00018 */ lw $s0, 0x18($sp) -/* 0729B4 7F03DE84 8FB1001C */ lw $s1, 0x1c($sp) -/* 0729B8 7F03DE88 8FB20020 */ lw $s2, 0x20($sp) -/* 0729BC 7F03DE8C 03E00008 */ jr $ra -/* 0729C0 7F03DE90 27BD0028 */ addiu $sp, $sp, 0x28 -) -#endif -void chrpropDeregisterRoom(PropRecord *arg0, s16 room); - -#ifdef NONMATCHING -void chrpropDeregisterRoom(PropRecord *arg0, s16 arg1) -{ - s16 *temp_s0; - s16 *temp_t5_3; - s16 temp_s1; - s16 temp_s1_2; - s16 temp_s1_3; - s16 temp_s1_4; - s16 temp_s1_5; - s16 temp_t5; - s16 temp_t5_2; - s16 temp_v1; - s16 temp_v1_2; - s32 temp_lo; - s32 temp_s0_2; - s32 temp_t2; - s32 temp_v0; - u32 temp_t5_4; - u32 temp_t5_5; - u32 phi_t5; - s16 phi_v1; - s16 *phi_s0; - s32 phi_v0; - s16 *phi_s0_2; - s32 phi_v0_2; - s32 phi_s0_3; - s32 phi_v0_3; - s16 *phi_t5_2; - s32 phi_v0_4; - s16 *phi_t5_3; - s32 phi_v0_5; - s16 *phi_t5_4; - s32 phi_v0_6; - s32 phi_v0_7; - s32 phi_t1; - s32 phi_a2; - - phi_t1 = -1; - phi_a2 = 0; - if (arg1 >= 0) +/* +* Address: 0x7F03DE94 +* PD: prop_deregister_room +* PD adds an upper bound check to make sure room is not above the max number of rooms +*/ +void chrpropDeregisterRoom(PropRecord* prop, s16 room) { + bool removed = 0; + s32 prev = -1; + + if (room >= 0) { - temp_t2 = arg1 * 2; - temp_v1 = *(RoomPropListChunkIndexes + temp_t2); - phi_v1 = temp_v1; - if (temp_v1 >= 0) + s16 chunkindex = RoomPropListChunkIndexes[room]; + s16 propIndex = (prop - pos_data_entry); + + while (chunkindex >= 0) { - temp_lo = (arg0 - pos_data_entry) / 52; - phi_t5 = RoomPropListChunks; -loop_3: - temp_s0 = phi_t5 + (phi_v1 << 5); - temp_s1 = *temp_s0; - phi_s0 = temp_s0; - phi_v0 = 0; - if (temp_lo == temp_s1) + bool populated = 0; + s32 var_s0_2; + + // Check each prop entry in the chunk + for (var_s0_2 = 0; var_s0_2 < 15; var_s0_2++) { - *temp_s0 = -1; - phi_s0 = RoomPropListChunks + (phi_v1 << 5); - phi_a2 = 1; + if (propIndex == RoomPropListChunks[chunkindex].propnums[var_s0_2]) + { + RoomPropListChunks[chunkindex].propnums[var_s0_2] = -1; // Mark entry as empty + removed = 1; + } + else if (!populated && RoomPropListChunks[chunkindex].propnums[var_s0_2] >= 0) + { + populated = 1; + } } - else if (temp_s1 >= 0) + + if (!populated) // not matching { - phi_v0 = 1; - } - temp_t5 = phi_s0->unk2; - phi_s0_2 = phi_s0; - phi_v0_2 = phi_v0; - if (temp_lo == temp_t5) - { - phi_s0->unk2 = -1; - phi_s0_2 = RoomPropListChunks + (phi_v1 << 5); - phi_a2 = 1; - } - else if ((phi_v0 == 0) && (temp_t5 >= 0)) - { - phi_v0_2 = 1; - } - temp_t5_2 = phi_s0_2->unk4; - phi_v0_3 = phi_v0_2; - if (temp_lo == temp_t5_2) - { - phi_s0_2->unk4 = -1; - phi_a2 = 1; - } - else if ((phi_v0_2 == 0) && (temp_t5_2 >= 0)) - { - phi_v0_3 = 1; - } - phi_s0_3 = 6; - do - { - temp_t5_3 = RoomPropListChunks + (phi_v1 << 5) + phi_s0_3; - temp_s1_2 = *temp_t5_3; - phi_t5_2 = temp_t5_3; - phi_v0_4 = phi_v0_3; - if (temp_lo == temp_s1_2) + // This chunk is empty, so it can be marked as available + RoomPropListChunks[chunkindex].propnums[0] = -2; + + if (prev >= 0) { - *temp_t5_3 = -1; - phi_t5_2 = RoomPropListChunks + (phi_v1 << 5) + phi_s0_3; - phi_a2 = 1; - } - else if ((phi_v0_3 == 0) && (temp_s1_2 >= 0)) - { - phi_v0_4 = 1; - } - temp_s1_3 = phi_t5_2->unk2; - phi_t5_3 = phi_t5_2; - phi_v0_5 = phi_v0_4; - if (temp_lo == temp_s1_3) - { - phi_t5_2->unk2 = -1; - phi_t5_3 = RoomPropListChunks + (phi_v1 << 5) + phi_s0_3; - phi_a2 = 1; - } - else if ((phi_v0_4 == 0) && (temp_s1_3 >= 0)) - { - phi_v0_5 = 1; - } - temp_s1_4 = phi_t5_3->unk4; - phi_t5_4 = phi_t5_3; - phi_v0_6 = phi_v0_5; - if (temp_lo == temp_s1_4) - { - phi_t5_3->unk4 = -1; - phi_t5_4 = RoomPropListChunks + (phi_v1 << 5) + phi_s0_3; - phi_a2 = 1; - } - else if ((phi_v0_5 == 0) && (temp_s1_4 >= 0)) - { - phi_v0_6 = 1; - } - temp_s1_5 = phi_t5_4->unk6; - temp_s0_2 = phi_s0_3 + 8; - phi_s0_3 = temp_s0_2; - phi_v0_7 = phi_v0_6; - if (temp_lo == temp_s1_5) - { - phi_t5_4->unk6 = -1; - phi_a2 = 1; - } - else if ((phi_v0_6 == 0) && (temp_s1_5 >= 0)) - { - phi_v0_7 = 1; - } - phi_v0_3 = phi_v0_7; - } while (temp_s0_2 != 0x1E); - if (phi_v0_7 == 0) - { - temp_v0 = phi_v1 << 5; - *(RoomPropListChunks + temp_v0) = -2; - if (phi_t1 >= 0) - { - temp_t5_4 = RoomPropListChunks; - (temp_t5_4 + (phi_t1 << 5))->unk1E = (temp_t5_4 + temp_v0)->unk1E; + RoomPropListChunks[prev].propnums[0xF] = RoomPropListChunks[chunkindex].propnums[0xF]; } else { - *(RoomPropListChunkIndexes + temp_t2) = (RoomPropListChunks + temp_v0)->unk1E; + RoomPropListChunkIndexes[room] = RoomPropListChunks[chunkindex].propnums[0xF]; } } else { - phi_t1 = phi_v1; + prev = chunkindex; // not matching } - if (phi_a2 == 0) + + if (removed) { - temp_t5_5 = RoomPropListChunks; - temp_v1_2 = (temp_t5_5 + (phi_v1 << 5))->unk1E; - phi_t5 = temp_t5_5; - phi_v1 = temp_v1_2; - if (temp_v1_2 >= 0) - { - goto loop_3; - } + return; } + + chunkindex = RoomPropListChunks[chunkindex].propnums[0xF]; } } } -} -#else -GLOBAL_ASM( -.text -glabel chrpropDeregisterRoom -/* 0729C4 7F03DE94 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0729C8 7F03DE98 00057400 */ sll $t6, $a1, 0x10 -/* 0729CC 7F03DE9C 000E7C03 */ sra $t7, $t6, 0x10 -/* 0729D0 7F03DEA0 AFB1000C */ sw $s1, 0xc($sp) -/* 0729D4 7F03DEA4 AFB00008 */ sw $s0, 8($sp) -/* 0729D8 7F03DEA8 AFA50014 */ sw $a1, 0x14($sp) -/* 0729DC 7F03DEAC 00003025 */ move $a2, $zero -/* 0729E0 7F03DEB0 05E0009C */ bltz $t7, .L7F03E124 -/* 0729E4 7F03DEB4 2409FFFF */ li $t1, -1 -/* 0729E8 7F03DEB8 3C0B8007 */ lui $t3, %hi(RoomPropListChunkIndexes) -/* 0729EC 7F03DEBC 256B1618 */ addiu $t3, %lo(RoomPropListChunkIndexes) # addiu $t3, $t3, 0x1618 -/* 0729F0 7F03DEC0 8D780000 */ lw $t8, ($t3) -/* 0729F4 7F03DEC4 000F5040 */ sll $t2, $t7, 1 -/* 0729F8 7F03DEC8 3C0E8007 */ lui $t6, %hi(pos_data_entry) -/* 0729FC 7F03DECC 030AC821 */ addu $t9, $t8, $t2 -/* 072A00 7F03DED0 87230000 */ lh $v1, ($t9) -/* 072A04 7F03DED4 25CE9C38 */ addiu $t6, %lo(pos_data_entry) # addiu $t6, $t6, -0x63c8 -/* 072A08 7F03DED8 008E2023 */ subu $a0, $a0, $t6 -/* 072A0C 7F03DEDC 04600091 */ bltz $v1, .L7F03E124 -/* 072A10 7F03DEE0 3C0D8007 */ lui $t5, %hi(RoomPropListChunks) -/* 072A14 7F03DEE4 24010034 */ li $at, 52 -/* 072A18 7F03DEE8 0081001A */ div $zero, $a0, $at -/* 072A1C 7F03DEEC 00007812 */ mflo $t7 -/* 072A20 7F03DEF0 000FC400 */ sll $t8, $t7, 0x10 -/* 072A24 7F03DEF4 3C078007 */ lui $a3, %hi(RoomPropListChunks) -/* 072A28 7F03DEF8 24E7161C */ addiu $a3, %lo(RoomPropListChunks) # addiu $a3, $a3, 0x161c -/* 072A2C 7F03DEFC 00182403 */ sra $a0, $t8, 0x10 -/* 072A30 7F03DF00 8DAD161C */ lw $t5, %lo(RoomPropListChunks)($t5) -/* 072A34 7F03DF04 240CFFFE */ li $t4, -2 -/* 072A38 7F03DF08 2408001E */ li $t0, 30 -/* 072A3C 7F03DF0C 2405FFFF */ li $a1, -1 -/* 072A40 7F03DF10 00037140 */ sll $t6, $v1, 5 -.L7F03DF14: -/* 072A44 7F03DF14 01AE8021 */ addu $s0, $t5, $t6 -/* 072A48 7F03DF18 86110000 */ lh $s1, ($s0) -/* 072A4C 7F03DF1C 00001025 */ move $v0, $zero -/* 072A50 7F03DF20 00037140 */ sll $t6, $v1, 5 -/* 072A54 7F03DF24 14910006 */ bne $a0, $s1, .L7F03DF40 -/* 072A58 7F03DF28 0003C140 */ sll $t8, $v1, 5 -/* 072A5C 7F03DF2C A6050000 */ sh $a1, ($s0) -/* 072A60 7F03DF30 8CEF0000 */ lw $t7, ($a3) -/* 072A64 7F03DF34 24060001 */ li $a2, 1 -/* 072A68 7F03DF38 10000004 */ b .L7F03DF4C -/* 072A6C 7F03DF3C 01F88021 */ addu $s0, $t7, $t8 -.L7F03DF40: -/* 072A70 7F03DF40 06220003 */ bltzl $s1, .L7F03DF50 -/* 072A74 7F03DF44 860D0002 */ lh $t5, 2($s0) -/* 072A78 7F03DF48 24020001 */ li $v0, 1 -.L7F03DF4C: -/* 072A7C 7F03DF4C 860D0002 */ lh $t5, 2($s0) -.L7F03DF50: -/* 072A80 7F03DF50 148D0006 */ bne $a0, $t5, .L7F03DF6C -/* 072A84 7F03DF54 00000000 */ nop -/* 072A88 7F03DF58 A6050002 */ sh $a1, 2($s0) -/* 072A8C 7F03DF5C 8CF90000 */ lw $t9, ($a3) -/* 072A90 7F03DF60 24060001 */ li $a2, 1 -/* 072A94 7F03DF64 10000006 */ b .L7F03DF80 -/* 072A98 7F03DF68 032E8021 */ addu $s0, $t9, $t6 -.L7F03DF6C: -/* 072A9C 7F03DF6C 54400005 */ bnezl $v0, .L7F03DF84 -/* 072AA0 7F03DF70 860D0004 */ lh $t5, 4($s0) -/* 072AA4 7F03DF74 05A20003 */ bltzl $t5, .L7F03DF84 -/* 072AA8 7F03DF78 860D0004 */ lh $t5, 4($s0) -/* 072AAC 7F03DF7C 24020001 */ li $v0, 1 -.L7F03DF80: -/* 072AB0 7F03DF80 860D0004 */ lh $t5, 4($s0) -.L7F03DF84: -/* 072AB4 7F03DF84 148D0004 */ bne $a0, $t5, .L7F03DF98 -/* 072AB8 7F03DF88 00000000 */ nop -/* 072ABC 7F03DF8C A6050004 */ sh $a1, 4($s0) -/* 072AC0 7F03DF90 10000006 */ b .L7F03DFAC -/* 072AC4 7F03DF94 24060001 */ li $a2, 1 -.L7F03DF98: -/* 072AC8 7F03DF98 54400005 */ bnezl $v0, .L7F03DFB0 -/* 072ACC 7F03DF9C 24100006 */ li $s0, 6 -/* 072AD0 7F03DFA0 05A20003 */ bltzl $t5, .L7F03DFB0 -/* 072AD4 7F03DFA4 24100006 */ li $s0, 6 -/* 072AD8 7F03DFA8 24020001 */ li $v0, 1 -.L7F03DFAC: -/* 072ADC 7F03DFAC 24100006 */ li $s0, 6 -.L7F03DFB0: -/* 072AE0 7F03DFB0 8CEF0000 */ lw $t7, ($a3) -.L7F03DFB4: -/* 072AE4 7F03DFB4 0003C140 */ sll $t8, $v1, 5 -/* 072AE8 7F03DFB8 01F8C821 */ addu $t9, $t7, $t8 -/* 072AEC 7F03DFBC 03306821 */ addu $t5, $t9, $s0 -/* 072AF0 7F03DFC0 85B10000 */ lh $s1, ($t5) -/* 072AF4 7F03DFC4 14910008 */ bne $a0, $s1, .L7F03DFE8 -/* 072AF8 7F03DFC8 00000000 */ nop -/* 072AFC 7F03DFCC A5A50000 */ sh $a1, ($t5) -/* 072B00 7F03DFD0 8CEE0000 */ lw $t6, ($a3) -/* 072B04 7F03DFD4 00037940 */ sll $t7, $v1, 5 -/* 072B08 7F03DFD8 24060001 */ li $a2, 1 -/* 072B0C 7F03DFDC 01CFC021 */ addu $t8, $t6, $t7 -/* 072B10 7F03DFE0 10000006 */ b .L7F03DFFC -/* 072B14 7F03DFE4 03106821 */ addu $t5, $t8, $s0 -.L7F03DFE8: -/* 072B18 7F03DFE8 54400005 */ bnezl $v0, .L7F03E000 -/* 072B1C 7F03DFEC 85B10002 */ lh $s1, 2($t5) -/* 072B20 7F03DFF0 06220003 */ bltzl $s1, .L7F03E000 -/* 072B24 7F03DFF4 85B10002 */ lh $s1, 2($t5) -/* 072B28 7F03DFF8 24020001 */ li $v0, 1 -.L7F03DFFC: -/* 072B2C 7F03DFFC 85B10002 */ lh $s1, 2($t5) -.L7F03E000: -/* 072B30 7F03E000 14910008 */ bne $a0, $s1, .L7F03E024 -/* 072B34 7F03E004 00000000 */ nop -/* 072B38 7F03E008 A5A50002 */ sh $a1, 2($t5) -/* 072B3C 7F03E00C 8CF90000 */ lw $t9, ($a3) -/* 072B40 7F03E010 00037140 */ sll $t6, $v1, 5 -/* 072B44 7F03E014 24060001 */ li $a2, 1 -/* 072B48 7F03E018 032E7821 */ addu $t7, $t9, $t6 -/* 072B4C 7F03E01C 10000006 */ b .L7F03E038 -/* 072B50 7F03E020 01F06821 */ addu $t5, $t7, $s0 -.L7F03E024: -/* 072B54 7F03E024 54400005 */ bnezl $v0, .L7F03E03C -/* 072B58 7F03E028 85B10004 */ lh $s1, 4($t5) -/* 072B5C 7F03E02C 06220003 */ bltzl $s1, .L7F03E03C -/* 072B60 7F03E030 85B10004 */ lh $s1, 4($t5) -/* 072B64 7F03E034 24020001 */ li $v0, 1 -.L7F03E038: -/* 072B68 7F03E038 85B10004 */ lh $s1, 4($t5) -.L7F03E03C: -/* 072B6C 7F03E03C 14910008 */ bne $a0, $s1, .L7F03E060 -/* 072B70 7F03E040 00000000 */ nop -/* 072B74 7F03E044 A5A50004 */ sh $a1, 4($t5) -/* 072B78 7F03E048 8CF80000 */ lw $t8, ($a3) -/* 072B7C 7F03E04C 0003C940 */ sll $t9, $v1, 5 -/* 072B80 7F03E050 24060001 */ li $a2, 1 -/* 072B84 7F03E054 03197021 */ addu $t6, $t8, $t9 -/* 072B88 7F03E058 10000006 */ b .L7F03E074 -/* 072B8C 7F03E05C 01D06821 */ addu $t5, $t6, $s0 -.L7F03E060: -/* 072B90 7F03E060 54400005 */ bnezl $v0, .L7F03E078 -/* 072B94 7F03E064 85B10006 */ lh $s1, 6($t5) -/* 072B98 7F03E068 06220003 */ bltzl $s1, .L7F03E078 -/* 072B9C 7F03E06C 85B10006 */ lh $s1, 6($t5) -/* 072BA0 7F03E070 24020001 */ li $v0, 1 -.L7F03E074: -/* 072BA4 7F03E074 85B10006 */ lh $s1, 6($t5) -.L7F03E078: -/* 072BA8 7F03E078 26100008 */ addiu $s0, $s0, 8 -/* 072BAC 7F03E07C 14910004 */ bne $a0, $s1, .L7F03E090 -/* 072BB0 7F03E080 00000000 */ nop -/* 072BB4 7F03E084 A5A50006 */ sh $a1, 6($t5) -/* 072BB8 7F03E088 10000006 */ b .L7F03E0A4 -/* 072BBC 7F03E08C 24060001 */ li $a2, 1 -.L7F03E090: -/* 072BC0 7F03E090 14400004 */ bnez $v0, .L7F03E0A4 -/* 072BC4 7F03E094 00000000 */ nop -/* 072BC8 7F03E098 06200002 */ bltz $s1, .L7F03E0A4 -/* 072BCC 7F03E09C 00000000 */ nop -/* 072BD0 7F03E0A0 24020001 */ li $v0, 1 -.L7F03E0A4: -/* 072BD4 7F03E0A4 5608FFC3 */ bnel $s0, $t0, .L7F03DFB4 -/* 072BD8 7F03E0A8 8CEF0000 */ lw $t7, ($a3) -/* 072BDC 7F03E0AC 54400015 */ bnezl $v0, .L7F03E104 -/* 072BE0 7F03E0B0 00604825 */ move $t1, $v1 -/* 072BE4 7F03E0B4 8CEF0000 */ lw $t7, ($a3) -/* 072BE8 7F03E0B8 00031140 */ sll $v0, $v1, 5 -/* 072BEC 7F03E0BC 01E2C021 */ addu $t8, $t7, $v0 -/* 072BF0 7F03E0C0 05200008 */ bltz $t1, .L7F03E0E4 -/* 072BF4 7F03E0C4 A70C0000 */ sh $t4, ($t8) -/* 072BF8 7F03E0C8 8CED0000 */ lw $t5, ($a3) -/* 072BFC 7F03E0CC 00097940 */ sll $t7, $t1, 5 -/* 072C00 7F03E0D0 01A2C821 */ addu $t9, $t5, $v0 -/* 072C04 7F03E0D4 872E001E */ lh $t6, 0x1e($t9) -/* 072C08 7F03E0D8 01AFC021 */ addu $t8, $t5, $t7 -/* 072C0C 7F03E0DC 10000009 */ b .L7F03E104 -/* 072C10 7F03E0E0 A70E001E */ sh $t6, 0x1e($t8) -.L7F03E0E4: -/* 072C14 7F03E0E4 8CF90000 */ lw $t9, ($a3) -/* 072C18 7F03E0E8 8D780000 */ lw $t8, ($t3) -/* 072C1C 7F03E0EC 03227821 */ addu $t7, $t9, $v0 -/* 072C20 7F03E0F0 85EE001E */ lh $t6, 0x1e($t7) -/* 072C24 7F03E0F4 030AC821 */ addu $t9, $t8, $t2 -/* 072C28 7F03E0F8 10000002 */ b .L7F03E104 -/* 072C2C 7F03E0FC A72E0000 */ sh $t6, ($t9) -/* 072C30 7F03E100 00604825 */ move $t1, $v1 -.L7F03E104: -/* 072C34 7F03E104 54C00008 */ bnezl $a2, .L7F03E128 -/* 072C38 7F03E108 8FB00008 */ lw $s0, 8($sp) -/* 072C3C 7F03E10C 8CED0000 */ lw $t5, ($a3) -/* 072C40 7F03E110 00037940 */ sll $t7, $v1, 5 -/* 072C44 7F03E114 01AFC021 */ addu $t8, $t5, $t7 -/* 072C48 7F03E118 8703001E */ lh $v1, 0x1e($t8) -/* 072C4C 7F03E11C 0463FF7D */ bgezl $v1, .L7F03DF14 -/* 072C50 7F03E120 00037140 */ sll $t6, $v1, 5 -.L7F03E124: -/* 072C54 7F03E124 8FB00008 */ lw $s0, 8($sp) -.L7F03E128: -/* 072C58 7F03E128 8FB1000C */ lw $s1, 0xc($sp) -/* 072C5C 7F03E12C 03E00008 */ jr $ra -/* 072C60 7F03E130 27BD0010 */ addiu $sp, $sp, 0x10 -) -#endif - void sub_GAME_7F03E134(PropRecord* arg0) { @@ -4991,7 +4113,7 @@ void sub_GAME_7F03E134(PropRecord* arg0) { - // Duplicate of the below function with a small extension. +// Duplicate of the below function with a small extension. void chrpropDeregisterRooms(PropRecord *prop) { u8 room; @@ -5036,6 +4158,15 @@ void chrpropRegisterRooms(PropRecord *prop) #ifdef NONMATCHING +/* +* Address: 0x7F03E27C +* PD: Could be one of the following +* - los_find_intersecting_rooms_properly, +* - los_find_final_room_properly +* - los_find_intersecting_rooms_exhaustive +* - los_find_final_room_exhaustive +* - los_find_final_room_fast +*/ void sub_GAME_7F03E27C(void) { } @@ -5063,21 +4194,21 @@ glabel sub_GAME_7F03E27C /* 072DF0 7F03E2C0 10410003 */ beq $v0, $at, .L7F03E2D0 /* 072DF4 7F03E2C4 24010002 */ li $at, 2 /* 072DF8 7F03E2C8 14410002 */ bne $v0, $at, .L7F03E2D4 -/* 072DFC 7F03E2CC 00000000 */ nop +/* 072DFC 7F03E2CC 00000000 */ nop .L7F03E2D0: /* 072E00 7F03E2D0 8E030004 */ lw $v1, 4($s0) .L7F03E2D4: /* 072E04 7F03E2D4 1060000C */ beqz $v1, .L7F03E308 -/* 072E08 7F03E2D8 00000000 */ nop +/* 072E08 7F03E2D8 00000000 */ nop /* 072E0C 7F03E2DC 8C780064 */ lw $t8, 0x64($v1) /* 072E10 7F03E2E0 33190080 */ andi $t9, $t8, 0x80 /* 072E14 7F03E2E4 13200008 */ beqz $t9, .L7F03E308 -/* 072E18 7F03E2E8 00000000 */ nop +/* 072E18 7F03E2E8 00000000 */ nop /* 072E1C 7F03E2EC 8C62006C */ lw $v0, 0x6c($v1) /* 072E20 7F03E2F0 8C490000 */ lw $t1, ($v0) /* 072E24 7F03E2F4 312A0008 */ andi $t2, $t1, 8 /* 072E28 7F03E2F8 11400003 */ beqz $t2, .L7F03E308 -/* 072E2C 7F03E2FC 00000000 */ nop +/* 072E2C 7F03E2FC 00000000 */ nop /* 072E30 7F03E300 10000001 */ b .L7F03E308 /* 072E34 7F03E304 244600CC */ addiu $a2, $v0, 0xcc .L7F03E308: @@ -5147,7 +4278,7 @@ glabel sub_GAME_7F03E27C /* 072F1C 7F03E3EC 8FB00028 */ lw $s0, 0x28($sp) /* 072F20 7F03E3F0 27BD0070 */ addiu $sp, $sp, 0x70 /* 072F24 7F03E3F4 03E00008 */ jr $ra -/* 072F28 7F03E3F8 00000000 */ nop +/* 072F28 7F03E3F8 00000000 */ nop ) #endif @@ -5220,7 +4351,7 @@ void propsDefragRoomProps(void) s32 k; // Iterate rooms - for (i = 0; i < MaxNumRooms; i++) + for (i = 0; i < g_MaxNumRooms; i++) { s32 previndex = RoomPropListChunkIndexes[i]; @@ -5287,53 +4418,60 @@ void propsDefragRoomProps(void) void removed_debug_roomblocks_feature(void) { + /* gleened from debug + + fVar1 = 1.0f / sqrtf(((param_2 * param_2) + (param_3*param_3)) + (param_4*param_4)); + param_2 *= fvar1; + param_3 *= fvar1; + param_4 *= fvar1; + param_1 *= 0.017453292; //Deg2Rad? + + fVar1 = 1.0 - cosf(param_1); + fVar2 = param_2 * param_3 * fVar1; + fVar3 = param_3 * param_4 * fVar1; + fVar1 = param_4 * param_2 * fVar1; + + matrix_4x4_set_identity(param_5); + + *param_5 = param_2 * param_2 + cosf(param_1) * (1.0 - param_2 * param_2); + param_5[9] = fVar3 - param_2 * sinf(param_1); + param_5[6] = fVar3 + param_2 * sinf(param_1); + param_5[5] = param_3 * param_3 + cosf(param_1) * (1.0 - param_3 * param_3); + param_5[8] = fVar1 + param_3 * sinf(param_1); + param_5[2] = fVar1 - param_3 * sinf(param_1); + param_5[10] = param_4 * param_4 + cosf(param_1) * (1.0 - param_4 * param_4); + param_5[4] = fVar2 - param_4 * sinf(param_1); + param_5[1] = fVar2 + param_4 * sinf(param_1); + */ } -#ifdef NONMATCHING -void sub_GAME_7F03E6A0(void) { +/** + * NTSC address 0x7F03E6A0. +*/ +void sub_GAME_7F03E6A0(PropRecord *prop) +{ + struct LinkRecord *link; + struct ObjectRecord *obj; + obj = prop->obj; + + if (obj->runtime_bitflags & RUNTIMEBITFLAG_00000001) + { + for (link = g_LevelLoadPropSwitch; link != NULL; link = link->next) + { + if (prop == link->first) + { + if (link->second != NULL) + { + doorActivateWrapper(link->second); + } + } + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03E6A0 -/* 0731D0 7F03E6A0 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0731D4 7F03E6A4 AFBF001C */ sw $ra, 0x1c($sp) -/* 0731D8 7F03E6A8 AFB10018 */ sw $s1, 0x18($sp) -/* 0731DC 7F03E6AC AFB00014 */ sw $s0, 0x14($sp) -/* 0731E0 7F03E6B0 8C820004 */ lw $v0, 4($a0) -/* 0731E4 7F03E6B4 00808825 */ move $s1, $a0 -/* 0731E8 7F03E6B8 3C108003 */ lui $s0, %hi(g_LevelLoadPropSwitch) -/* 0731EC 7F03E6BC 8C4E0064 */ lw $t6, 0x64($v0) -/* 0731F0 7F03E6C0 31CF0001 */ andi $t7, $t6, 1 -/* 0731F4 7F03E6C4 51E00010 */ beql $t7, $zero, .L7F03E708 -/* 0731F8 7F03E6C8 8FBF001C */ lw $ra, 0x1c($sp) -/* 0731FC 7F03E6CC 8E100B00 */ lw $s0, %lo(g_LevelLoadPropSwitch)($s0) -/* 073200 7F03E6D0 5200000D */ beql $s0, $zero, .L7F03E708 -/* 073204 7F03E6D4 8FBF001C */ lw $ra, 0x1c($sp) -/* 073208 7F03E6D8 8E180004 */ lw $t8, 4($s0) -.L7F03E6DC: -/* 07320C 7F03E6DC 56380007 */ bnel $s1, $t8, .L7F03E6FC -/* 073210 7F03E6E0 8E10000C */ lw $s0, 0xc($s0) -/* 073214 7F03E6E4 8E040008 */ lw $a0, 8($s0) -/* 073218 7F03E6E8 50800004 */ beql $a0, $zero, .L7F03E6FC -/* 07321C 7F03E6EC 8E10000C */ lw $s0, 0xc($s0) -/* 073220 7F03E6F0 0FC15667 */ jal doorActivateWrapper -/* 073224 7F03E6F4 00000000 */ nop -/* 073228 7F03E6F8 8E10000C */ lw $s0, 0xc($s0) -.L7F03E6FC: -/* 07322C 7F03E6FC 5600FFF7 */ bnezl $s0, .L7F03E6DC -/* 073230 7F03E700 8E180004 */ lw $t8, 4($s0) -/* 073234 7F03E704 8FBF001C */ lw $ra, 0x1c($sp) -.L7F03E708: -/* 073238 7F03E708 8FB00014 */ lw $s0, 0x14($sp) -/* 07323C 7F03E70C 8FB10018 */ lw $s1, 0x18($sp) -/* 073240 7F03E710 03E00008 */ jr $ra -/* 073244 7F03E714 27BD0020 */ addiu $sp, $sp, 0x20 -) -#endif + bool doorIsPadlockFree(DoorRecord* door) @@ -5867,17 +5005,17 @@ glabel sub_GAME_7F03ECC0 /* 073A48 7F03EF18 00037900 */ sll $t7, $v1, 4 /* 073A4C 7F03EF1C 27B80160 */ addiu $t8, $sp, 0x160 /* 073A50 7F03EF20 4620103C */ c.lt.d $f2, $f0 -/* 073A54 7F03EF24 00000000 */ nop +/* 073A54 7F03EF24 00000000 */ nop /* 073A58 7F03EF28 4503000C */ bc1tl .L7F03EF5C /* 073A5C 7F03EF2C 01F84821 */ addu $t1, $t7, $t8 /* 073A60 7F03EF30 46201032 */ c.eq.d $f2, $f0 -/* 073A64 7F03EF34 00000000 */ nop +/* 073A64 7F03EF34 00000000 */ nop /* 073A68 7F03EF38 4502000B */ bc1fl .L7F03EF68 /* 073A6C 7F03EF3C 24630001 */ addiu $v1, $v1, 1 /* 073A70 7F03EF40 D4A80008 */ ldc1 $f8, 8($a1) /* 073A74 7F03EF44 D52A0008 */ ldc1 $f10, 8($t1) /* 073A78 7F03EF48 462A403C */ c.lt.d $f8, $f10 -/* 073A7C 7F03EF4C 00000000 */ nop +/* 073A7C 7F03EF4C 00000000 */ nop /* 073A80 7F03EF50 45020005 */ bc1fl .L7F03EF68 /* 073A84 7F03EF54 24630001 */ addiu $v1, $v1, 1 /* 073A88 7F03EF58 01F84821 */ addu $t1, $t7, $t8 @@ -5897,17 +5035,17 @@ glabel sub_GAME_7F03ECC0 /* 073AB4 7F03EF84 00037900 */ sll $t7, $v1, 4 /* 073AB8 7F03EF88 27B80160 */ addiu $t8, $sp, 0x160 /* 073ABC 7F03EF8C 4622603C */ c.lt.d $f12, $f2 -/* 073AC0 7F03EF90 00000000 */ nop +/* 073AC0 7F03EF90 00000000 */ nop /* 073AC4 7F03EF94 4503000C */ bc1tl .L7F03EFC8 /* 073AC8 7F03EF98 00605025 */ move $t2, $v1 /* 073ACC 7F03EF9C 462C1032 */ c.eq.d $f2, $f12 -/* 073AD0 7F03EFA0 00000000 */ nop +/* 073AD0 7F03EFA0 00000000 */ nop /* 073AD4 7F03EFA4 4502000A */ bc1fl .L7F03EFD0 /* 073AD8 7F03EFA8 24630001 */ addiu $v1, $v1, 1 /* 073ADC 7F03EFAC D4A40000 */ ldc1 $f4, ($a1) /* 073AE0 7F03EFB0 D5060000 */ ldc1 $f6, ($t0) /* 073AE4 7F03EFB4 4626203C */ c.lt.d $f4, $f6 -/* 073AE8 7F03EFB8 00000000 */ nop +/* 073AE8 7F03EFB8 00000000 */ nop /* 073AEC 7F03EFBC 45020004 */ bc1fl .L7F03EFD0 /* 073AF0 7F03EFC0 24630001 */ addiu $v1, $v1, 1 /* 073AF4 7F03EFC4 00605025 */ move $t2, $v1 @@ -5926,17 +5064,17 @@ glabel sub_GAME_7F03ECC0 /* 073B1C 7F03EFEC 00037900 */ sll $t7, $v1, 4 /* 073B20 7F03EFF0 27B80160 */ addiu $t8, $sp, 0x160 /* 073B24 7F03EFF4 4622803C */ c.lt.d $f16, $f2 -/* 073B28 7F03EFF8 00000000 */ nop +/* 073B28 7F03EFF8 00000000 */ nop /* 073B2C 7F03EFFC 4503000C */ bc1tl .L7F03F030 /* 073B30 7F03F000 00602025 */ move $a0, $v1 /* 073B34 7F03F004 46301032 */ c.eq.d $f2, $f16 -/* 073B38 7F03F008 00000000 */ nop +/* 073B38 7F03F008 00000000 */ nop /* 073B3C 7F03F00C 4502000A */ bc1fl .L7F03F038 /* 073B40 7F03F010 24630001 */ addiu $v1, $v1, 1 /* 073B44 7F03F014 D4E80008 */ ldc1 $f8, 8($a3) /* 073B48 7F03F018 D4AA0008 */ ldc1 $f10, 8($a1) /* 073B4C 7F03F01C 462A403C */ c.lt.d $f8, $f10 -/* 073B50 7F03F020 00000000 */ nop +/* 073B50 7F03F020 00000000 */ nop /* 073B54 7F03F024 45020004 */ bc1fl .L7F03F038 /* 073B58 7F03F028 24630001 */ addiu $v1, $v1, 1 /* 073B5C 7F03F02C 00602025 */ move $a0, $v1 @@ -5955,17 +5093,17 @@ glabel sub_GAME_7F03ECC0 /* 073B84 7F03F054 00037900 */ sll $t7, $v1, 4 /* 073B88 7F03F058 27B80160 */ addiu $t8, $sp, 0x160 /* 073B8C 7F03F05C 462C103C */ c.lt.d $f2, $f12 -/* 073B90 7F03F060 00000000 */ nop +/* 073B90 7F03F060 00000000 */ nop /* 073B94 7F03F064 4503000C */ bc1tl .L7F03F098 /* 073B98 7F03F068 00605825 */ move $t3, $v1 /* 073B9C 7F03F06C 462C1032 */ c.eq.d $f2, $f12 -/* 073BA0 7F03F070 00000000 */ nop +/* 073BA0 7F03F070 00000000 */ nop /* 073BA4 7F03F074 4502000A */ bc1fl .L7F03F0A0 /* 073BA8 7F03F078 24630001 */ addiu $v1, $v1, 1 /* 073BAC 7F03F07C D5840000 */ ldc1 $f4, ($t4) /* 073BB0 7F03F080 D4A60000 */ ldc1 $f6, ($a1) /* 073BB4 7F03F084 4626203C */ c.lt.d $f4, $f6 -/* 073BB8 7F03F088 00000000 */ nop +/* 073BB8 7F03F088 00000000 */ nop /* 073BBC 7F03F08C 45020004 */ bc1fl .L7F03F0A0 /* 073BC0 7F03F090 24630001 */ addiu $v1, $v1, 1 /* 073BC4 7F03F094 00605825 */ move $t3, $v1 @@ -5995,7 +5133,7 @@ glabel sub_GAME_7F03ECC0 .L7F03F0E4: /* 073C14 7F03F0E4 28610008 */ slti $at, $v1, 8 /* 073C18 7F03F0E8 1420FFF2 */ bnez $at, .L7F03F0B4 -/* 073C1C 7F03F0EC 00000000 */ nop +/* 073C1C 7F03F0EC 00000000 */ nop /* 073C20 7F03F0F0 46200220 */ cvt.s.d $f8, $f0 /* 073C24 7F03F0F4 8FAA01FC */ lw $t2, 0x1fc($sp) /* 073C28 7F03F0F8 24050001 */ li $a1, 1 @@ -6021,12 +5159,12 @@ glabel sub_GAME_7F03ECC0 /* 073C74 7F03F144 46220281 */ sub.d $f10, $f0, $f2 /* 073C78 7F03F148 462C3201 */ sub.d $f8, $f6, $f12 /* 073C7C 7F03F14C 462E5102 */ mul.d $f4, $f10, $f14 -/* 073C80 7F03F150 00000000 */ nop +/* 073C80 7F03F150 00000000 */ nop /* 073C84 7F03F154 46304282 */ mul.d $f10, $f8, $f16 /* 073C88 7F03F158 462A203C */ c.lt.d $f4, $f10 -/* 073C8C 7F03F15C 00000000 */ nop +/* 073C8C 7F03F15C 00000000 */ nop /* 073C90 7F03F160 4500000A */ bc1f .L7F03F18C -/* 073C94 7F03F164 00000000 */ nop +/* 073C94 7F03F164 00000000 */ nop /* 073C98 7F03F168 462001A0 */ cvt.s.d $f6, $f0 /* 073C9C 7F03F16C 25420008 */ addiu $v0, $t2, 8 /* 073CA0 7F03F170 24050002 */ li $a1, 2 @@ -6068,12 +5206,12 @@ glabel sub_GAME_7F03ECC0 /* 073D24 7F03F1F4 46301181 */ sub.d $f6, $f2, $f16 /* 073D28 7F03F1F8 46202281 */ sub.d $f10, $f4, $f0 /* 073D2C 7F03F1FC 462C3202 */ mul.d $f8, $f6, $f12 -/* 073D30 7F03F200 00000000 */ nop +/* 073D30 7F03F200 00000000 */ nop /* 073D34 7F03F204 462E5182 */ mul.d $f6, $f10, $f14 /* 073D38 7F03F208 4626403C */ c.lt.d $f8, $f6 -/* 073D3C 7F03F20C 00000000 */ nop +/* 073D3C 7F03F20C 00000000 */ nop /* 073D40 7F03F210 4500000A */ bc1f .L7F03F23C -/* 073D44 7F03F214 00000000 */ nop +/* 073D44 7F03F214 00000000 */ nop /* 073D48 7F03F218 46201120 */ cvt.s.d $f4, $f2 /* 073D4C 7F03F21C 24A50001 */ addiu $a1, $a1, 1 /* 073D50 7F03F220 256B0008 */ addiu $t3, $t3, 8 @@ -6113,12 +5251,12 @@ glabel sub_GAME_7F03ECC0 /* 073DCC 7F03F29C 462E0101 */ sub.d $f4, $f0, $f14 /* 073DD0 7F03F2A0 462C4181 */ sub.d $f6, $f8, $f12 /* 073DD4 7F03F2A4 46222282 */ mul.d $f10, $f4, $f2 -/* 073DD8 7F03F2A8 00000000 */ nop +/* 073DD8 7F03F2A8 00000000 */ nop /* 073DDC 7F03F2AC 46323102 */ mul.d $f4, $f6, $f18 /* 073DE0 7F03F2B0 4624503C */ c.lt.d $f10, $f4 -/* 073DE4 7F03F2B4 00000000 */ nop +/* 073DE4 7F03F2B4 00000000 */ nop /* 073DE8 7F03F2B8 4500000A */ bc1f .L7F03F2E4 -/* 073DEC 7F03F2BC 00000000 */ nop +/* 073DEC 7F03F2BC 00000000 */ nop /* 073DF0 7F03F2C0 46200220 */ cvt.s.d $f8, $f0 /* 073DF4 7F03F2C4 24A50001 */ addiu $a1, $a1, 1 /* 073DF8 7F03F2C8 256B0008 */ addiu $t3, $t3, 8 @@ -6158,12 +5296,12 @@ glabel sub_GAME_7F03ECC0 /* 073E74 7F03F344 46206201 */ sub.d $f8, $f12, $f0 /* 073E78 7F03F348 46225101 */ sub.d $f4, $f10, $f2 /* 073E7C 7F03F34C 46304182 */ mul.d $f6, $f8, $f16 -/* 073E80 7F03F350 00000000 */ nop +/* 073E80 7F03F350 00000000 */ nop /* 073E84 7F03F354 46322202 */ mul.d $f8, $f4, $f18 /* 073E88 7F03F358 4628303C */ c.lt.d $f6, $f8 -/* 073E8C 7F03F35C 00000000 */ nop +/* 073E8C 7F03F35C 00000000 */ nop /* 073E90 7F03F360 45000009 */ bc1f .L7F03F388 -/* 073E94 7F03F364 00000000 */ nop +/* 073E94 7F03F364 00000000 */ nop /* 073E98 7F03F368 462062A0 */ cvt.s.d $f10, $f12 /* 073E9C 7F03F36C 24A50001 */ addiu $a1, $a1, 1 /* 073EA0 7F03F370 00001825 */ move $v1, $zero @@ -6303,6 +5441,33 @@ void sub_GAME_7F03F540(struct ModelRoData_BoundingBoxRecord *bbox, Mtxf* arg1, s #ifdef NONMATCHING s32 sub_GAME_7F03F598(coord3d* pos, f32 arg1, BoundPadRecord *boundpads) { + dword local_70; + ushort *local_20; + dword local_1c; + dword local_18; + dword local_14; + dword local_8; + + local_20 = **(param_1 + 8); + do { + while( true ) { + if (local_20 == NULL) { + return NULL; + } + if (((*local_20 & 0xff) == 10) && (**(local_20 + 2) == param_2)) { + return local_20; + } + if (*(local_20 + 10) == 0) break; + local_20 = *(local_20 + 10); + } + for (; local_20 != NULL; local_20 = *(local_20 + 4)) { + if (*(local_20 + 6) != 0) { + local_20 = *(local_20 + 6); + break; + } + } + } while( true ); + } #else @@ -6335,7 +5500,7 @@ glabel sub_GAME_7F03F598 /* 074120 7F03F5F0 C4C60020 */ lwc1 $f6, 0x20($a2) /* 074124 7F03F5F4 C4C8000C */ lwc1 $f8, 0xc($a2) /* 074128 7F03F5F8 46049282 */ mul.s $f10, $f18, $f4 -/* 07412C 7F03F5FC 00000000 */ nop +/* 07412C 7F03F5FC 00000000 */ nop /* 074130 7F03F600 46083482 */ mul.s $f18, $f6, $f8 /* 074134 7F03F604 46125101 */ sub.s $f4, $f10, $f18 /* 074138 7F03F608 E7A40014 */ swc1 $f4, 0x14($sp) @@ -6344,7 +5509,7 @@ glabel sub_GAME_7F03F598 /* 074144 7F03F614 C4D20018 */ lwc1 $f18, 0x18($a2) /* 074148 7F03F618 C4C40010 */ lwc1 $f4, 0x10($a2) /* 07414C 7F03F61C 46083282 */ mul.s $f10, $f6, $f8 -/* 074150 7F03F620 00000000 */ nop +/* 074150 7F03F620 00000000 */ nop /* 074154 7F03F624 46049182 */ mul.s $f6, $f18, $f4 /* 074158 7F03F628 46065201 */ sub.s $f8, $f10, $f6 /* 07415C 7F03F62C E7A80018 */ swc1 $f8, 0x18($sp) @@ -6359,13 +5524,13 @@ glabel sub_GAME_7F03F598 /* 074180 7F03F650 46142180 */ add.s $f6, $f4, $f20 /* 074184 7F03F654 46085380 */ add.s $f14, $f10, $f8 /* 074188 7F03F658 460E303C */ c.lt.s $f6, $f14 -/* 07418C 7F03F65C 00000000 */ nop +/* 07418C 7F03F65C 00000000 */ nop /* 074190 7F03F660 45010007 */ bc1t .L7F03F680 -/* 074194 7F03F664 00000000 */ nop +/* 074194 7F03F664 00000000 */ nop /* 074198 7F03F668 C4D2003C */ lwc1 $f18, 0x3c($a2) /* 07419C 7F03F66C 46149281 */ sub.s $f10, $f18, $f20 /* 0741A0 7F03F670 460A703C */ c.lt.s $f14, $f10 -/* 0741A4 7F03F674 00000000 */ nop +/* 0741A4 7F03F674 00000000 */ nop /* 0741A8 7F03F678 45020004 */ bc1fl .L7F03F68C /* 0741AC 7F03F67C C4C8000C */ lwc1 $f8, 0xc($a2) .L7F03F680: @@ -6383,17 +5548,17 @@ glabel sub_GAME_7F03F598 /* 0741D8 7F03F6A8 46142480 */ add.s $f18, $f4, $f20 /* 0741DC 7F03F6AC 460A3380 */ add.s $f14, $f6, $f10 /* 0741E0 7F03F6B0 460E903C */ c.lt.s $f18, $f14 -/* 0741E4 7F03F6B4 00000000 */ nop +/* 0741E4 7F03F6B4 00000000 */ nop /* 0741E8 7F03F6B8 45010009 */ bc1t .L7F03F6E0 -/* 0741EC 7F03F6BC 00000000 */ nop +/* 0741EC 7F03F6BC 00000000 */ nop /* 0741F0 7F03F6C0 C4C80034 */ lwc1 $f8, 0x34($a2) /* 0741F4 7F03F6C4 C7AA0010 */ lwc1 $f10, 0x10($sp) /* 0741F8 7F03F6C8 C7B20014 */ lwc1 $f18, 0x14($sp) /* 0741FC 7F03F6CC 46144181 */ sub.s $f6, $f8, $f20 /* 074200 7F03F6D0 4606703C */ c.lt.s $f14, $f6 -/* 074204 7F03F6D4 00000000 */ nop +/* 074204 7F03F6D4 00000000 */ nop /* 074208 7F03F6D8 45000003 */ bc1f .L7F03F6E8 -/* 07420C 7F03F6DC 00000000 */ nop +/* 07420C 7F03F6DC 00000000 */ nop .L7F03F6E0: /* 074210 7F03F6E0 10000016 */ b .L7F03F73C /* 074214 7F03F6E4 00001025 */ move $v0, $zero @@ -6407,16 +5572,16 @@ glabel sub_GAME_7F03F598 /* 074230 7F03F700 46142200 */ add.s $f8, $f4, $f20 /* 074234 7F03F704 46069400 */ add.s $f16, $f18, $f6 /* 074238 7F03F708 4610403C */ c.lt.s $f8, $f16 -/* 07423C 7F03F70C 00000000 */ nop +/* 07423C 7F03F70C 00000000 */ nop /* 074240 7F03F710 45010008 */ bc1t .L7F03F734 -/* 074244 7F03F714 00000000 */ nop +/* 074244 7F03F714 00000000 */ nop /* 074248 7F03F718 C4CA002C */ lwc1 $f10, 0x2c($a2) /* 07424C 7F03F71C 24020001 */ li $v0, 1 /* 074250 7F03F720 46145481 */ sub.s $f18, $f10, $f20 /* 074254 7F03F724 4612803C */ c.lt.s $f16, $f18 -/* 074258 7F03F728 00000000 */ nop +/* 074258 7F03F728 00000000 */ nop /* 07425C 7F03F72C 45000003 */ bc1f .L7F03F73C -/* 074260 7F03F730 00000000 */ nop +/* 074260 7F03F730 00000000 */ nop .L7F03F734: /* 074264 7F03F734 10000001 */ b .L7F03F73C /* 074268 7F03F738 00001025 */ move $v0, $zero @@ -6505,129 +5670,70 @@ void sub_GAME_7F03F90C(Model *model, f32 *arg1, f32 *arg2, f32 *arg3, f32 *arg4) } -#ifdef NONMATCHING -void sub_GAME_7F03F948(void) { +/** + * NTSC address 0x7F03F948. +*/ +void sub_GAME_7F03F948(struct coord3d *arg0, struct coord2d *arg1, struct coord2d *arg2, struct coord2d *arg3, struct coord2d *arg4) +{ + struct coord3d sp24; + struct coord2d tout; + sp24.f[0] = arg1->f[0]; + sp24.f[1] = arg0->f[1]; + sp24.f[2] = arg0->f[2]; + transform3Dto2DCoords(&sp24, &tout); + arg3->f[0] = tout.f[0]; + + sp24.f[0] = arg1->f[1]; + sp24.f[1] = arg0->f[1]; + sp24.f[2] = arg0->f[2]; + transform3Dto2DCoords(&sp24, &tout); + arg4->f[0] = tout.f[0]; + + sp24.f[0] = arg0->f[0]; + sp24.f[1] = arg2->f[1]; + sp24.f[2] = arg0->f[2]; + transform3Dto2DCoords(&sp24, &tout); + arg3->f[1] = tout.f[1]; + + sp24.f[0] = arg0->f[0]; + sp24.f[1] = arg2->f[0]; + sp24.f[2] = arg0->f[2]; + transform3Dto2DCoords(&sp24, &tout); + arg4->f[1] = tout.f[1]; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F03F948 -/* 074478 7F03F948 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 07447C 7F03F94C AFBF001C */ sw $ra, 0x1c($sp) -/* 074480 7F03F950 AFB00018 */ sw $s0, 0x18($sp) -/* 074484 7F03F954 AFA5003C */ sw $a1, 0x3c($sp) -/* 074488 7F03F958 AFA60040 */ sw $a2, 0x40($sp) -/* 07448C 7F03F95C AFA70044 */ sw $a3, 0x44($sp) -/* 074490 7F03F960 C4A40000 */ lwc1 $f4, ($a1) -/* 074494 7F03F964 00808025 */ move $s0, $a0 -/* 074498 7F03F968 27A50024 */ addiu $a1, $sp, 0x24 -/* 07449C 7F03F96C E7A4002C */ swc1 $f4, 0x2c($sp) -/* 0744A0 7F03F970 C4860004 */ lwc1 $f6, 4($a0) -/* 0744A4 7F03F974 E7A60030 */ swc1 $f6, 0x30($sp) -/* 0744A8 7F03F978 C4880008 */ lwc1 $f8, 8($a0) -/* 0744AC 7F03F97C 27A4002C */ addiu $a0, $sp, 0x2c -/* 0744B0 7F03F980 0FC1DFFD */ jal sub_GAME_7F077FF4 -/* 0744B4 7F03F984 E7A80034 */ swc1 $f8, 0x34($sp) -/* 0744B8 7F03F988 C7AA0024 */ lwc1 $f10, 0x24($sp) -/* 0744BC 7F03F98C 8FAF0044 */ lw $t7, 0x44($sp) -/* 0744C0 7F03F990 27A4002C */ addiu $a0, $sp, 0x2c -/* 0744C4 7F03F994 27A50024 */ addiu $a1, $sp, 0x24 -/* 0744C8 7F03F998 E5EA0000 */ swc1 $f10, ($t7) -/* 0744CC 7F03F99C 8FB8003C */ lw $t8, 0x3c($sp) -/* 0744D0 7F03F9A0 C7100004 */ lwc1 $f16, 4($t8) -/* 0744D4 7F03F9A4 E7B0002C */ swc1 $f16, 0x2c($sp) -/* 0744D8 7F03F9A8 C6120004 */ lwc1 $f18, 4($s0) -/* 0744DC 7F03F9AC E7B20030 */ swc1 $f18, 0x30($sp) -/* 0744E0 7F03F9B0 C6040008 */ lwc1 $f4, 8($s0) -/* 0744E4 7F03F9B4 0FC1DFFD */ jal sub_GAME_7F077FF4 -/* 0744E8 7F03F9B8 E7A40034 */ swc1 $f4, 0x34($sp) -/* 0744EC 7F03F9BC C7A60024 */ lwc1 $f6, 0x24($sp) -/* 0744F0 7F03F9C0 8FB90048 */ lw $t9, 0x48($sp) -/* 0744F4 7F03F9C4 27A4002C */ addiu $a0, $sp, 0x2c -/* 0744F8 7F03F9C8 27A50024 */ addiu $a1, $sp, 0x24 -/* 0744FC 7F03F9CC E7260000 */ swc1 $f6, ($t9) -/* 074500 7F03F9D0 C6080000 */ lwc1 $f8, ($s0) -/* 074504 7F03F9D4 8FA80040 */ lw $t0, 0x40($sp) -/* 074508 7F03F9D8 E7A8002C */ swc1 $f8, 0x2c($sp) -/* 07450C 7F03F9DC C50A0004 */ lwc1 $f10, 4($t0) -/* 074510 7F03F9E0 E7AA0030 */ swc1 $f10, 0x30($sp) -/* 074514 7F03F9E4 C6100008 */ lwc1 $f16, 8($s0) -/* 074518 7F03F9E8 0FC1DFFD */ jal sub_GAME_7F077FF4 -/* 07451C 7F03F9EC E7B00034 */ swc1 $f16, 0x34($sp) -/* 074520 7F03F9F0 C7B20028 */ lwc1 $f18, 0x28($sp) -/* 074524 7F03F9F4 8FA90044 */ lw $t1, 0x44($sp) -/* 074528 7F03F9F8 27A4002C */ addiu $a0, $sp, 0x2c -/* 07452C 7F03F9FC 27A50024 */ addiu $a1, $sp, 0x24 -/* 074530 7F03FA00 E5320004 */ swc1 $f18, 4($t1) -/* 074534 7F03FA04 C6040000 */ lwc1 $f4, ($s0) -/* 074538 7F03FA08 8FAA0040 */ lw $t2, 0x40($sp) -/* 07453C 7F03FA0C E7A4002C */ swc1 $f4, 0x2c($sp) -/* 074540 7F03FA10 C5460000 */ lwc1 $f6, ($t2) -/* 074544 7F03FA14 E7A60030 */ swc1 $f6, 0x30($sp) -/* 074548 7F03FA18 C6080008 */ lwc1 $f8, 8($s0) -/* 07454C 7F03FA1C 0FC1DFFD */ jal sub_GAME_7F077FF4 -/* 074550 7F03FA20 E7A80034 */ swc1 $f8, 0x34($sp) -/* 074554 7F03FA24 C7AA0028 */ lwc1 $f10, 0x28($sp) -/* 074558 7F03FA28 8FAB0048 */ lw $t3, 0x48($sp) -/* 07455C 7F03FA2C E56A0004 */ swc1 $f10, 4($t3) -/* 074560 7F03FA30 8FBF001C */ lw $ra, 0x1c($sp) -/* 074564 7F03FA34 8FB00018 */ lw $s0, 0x18($sp) -/* 074568 7F03FA38 27BD0038 */ addiu $sp, $sp, 0x38 -/* 07456C 7F03FA3C 03E00008 */ jr $ra -/* 074570 7F03FA40 00000000 */ nop -) -#endif +/* +* Address: 0x7F03FA44 +*/ +ObjectRecord *scan_position_data_table_for_normal_object_at_preset(s32 PadId) { + PropRecord *prop; + s16 tempPadId = PadId; -#ifdef NONMATCHING -void scan_position_data_table_for_normal_object_at_preset(void) { + prop = get_ptr_obj_pos_list_current_entry(); + while (prop != NULL) + { + if (prop->type == PROP_TYPE_OBJ) + { + if (tempPadId == prop->obj->pad) + { + return prop->obj; + } + } + prop = prop->prev; + } + + return NULL; } -#else -GLOBAL_ASM( -.text -glabel scan_position_data_table_for_normal_object_at_preset -/* 074574 7F03FA44 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 074578 7F03FA48 AFBF0014 */ sw $ra, 0x14($sp) -/* 07457C 7F03FA4C 0FC0E909 */ jal get_ptr_obj_pos_list_current_entry -/* 074580 7F03FA50 AFA40018 */ sw $a0, 0x18($sp) -/* 074584 7F03FA54 8FA50018 */ lw $a1, 0x18($sp) -/* 074588 7F03FA58 10400010 */ beqz $v0, .L7F03FA9C -/* 07458C 7F03FA5C 00401825 */ move $v1, $v0 -/* 074590 7F03FA60 24020001 */ li $v0, 1 -/* 074594 7F03FA64 906E0000 */ lbu $t6, ($v1) -.L7F03FA68: -/* 074598 7F03FA68 544E000A */ bnel $v0, $t6, .L7F03FA94 -/* 07459C 7F03FA6C 8C630024 */ lw $v1, 0x24($v1) -/* 0745A0 7F03FA70 8C640004 */ lw $a0, 4($v1) -/* 0745A4 7F03FA74 00057C00 */ sll $t7, $a1, 0x10 -/* 0745A8 7F03FA78 000FC403 */ sra $t8, $t7, 0x10 -/* 0745AC 7F03FA7C 84990006 */ lh $t9, 6($a0) -/* 0745B0 7F03FA80 57190004 */ bnel $t8, $t9, .L7F03FA94 -/* 0745B4 7F03FA84 8C630024 */ lw $v1, 0x24($v1) -/* 0745B8 7F03FA88 10000005 */ b .L7F03FAA0 -/* 0745BC 7F03FA8C 00801025 */ move $v0, $a0 -/* 0745C0 7F03FA90 8C630024 */ lw $v1, 0x24($v1) -.L7F03FA94: -/* 0745C4 7F03FA94 5460FFF4 */ bnezl $v1, .L7F03FA68 -/* 0745C8 7F03FA98 906E0000 */ lbu $t6, ($v1) -.L7F03FA9C: -/* 0745CC 7F03FA9C 00001025 */ move $v0, $zero -.L7F03FAA0: -/* 0745D0 7F03FAA0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0745D4 7F03FAA4 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0745D8 7F03FAA8 03E00008 */ jr $ra -/* 0745DC 7F03FAAC 00000000 */ nop -) -#endif -ObjectRecord * sub_GAME_7F03FAB0(PadRecord * pad, s32 RoomID) + +ObjectRecord * sub_GAME_7F03FAB0(struct coord3d *pos, s32 RoomID) { s32 unused; rect4f * polygon; @@ -6637,10 +5743,10 @@ ObjectRecord * sub_GAME_7F03FAB0(PadRecord * pad, s32 RoomID) prop = get_ptr_obj_pos_list_current_entry(); while (prop != NULL) { - if ((prop->type == 1) && (RoomID == prop->stan->room)) + if ((prop->type == PROP_TYPE_OBJ) && (RoomID == prop->stan->room)) { chraiGetCollisionBoundsWithoutY(prop, &polygon, &edges); - if (chrpropTestPointInPolygon(&pad->pos, polygon, edges) != 0) + if (chrpropTestPointInPolygon(pos, polygon, edges) != 0) { return (ObjectRecord *) prop->chr; } diff --git a/src/game/cleanexplosions.c b/src/game/cleanexplosions.c index 8010f30..bc6a7bd 100644 --- a/src/game/cleanexplosions.c +++ b/src/game/cleanexplosions.c @@ -7,34 +7,34 @@ void cleanupExplosions(void) { s32 i; - numExplosionEntries = 0; + g_NumExplosionEntries = 0; viShake(0.0); - if (ptr_explosion_buf != NULL) + if (g_ExplosionBuffer != NULL) { for (i = 0; i +#include "chr.h" +void cleanupGuardData(void) +{ + int i; - -#ifdef NONMATCHING -void cleanupGuardData(void) { - void *temp_v0; - s32 temp_s2; - s32 phi_s0; - s32 phi_s2; - s32 phi_v1; - - // Node 0 - if (g_NumChrSlots > 0) - { - // Node 1 - phi_s0 = 0; - phi_s2 = 0; - phi_v1 = g_NumChrSlots; -loop_2: - // Node 2 - temp_v0 = (g_ChrSlots + phi_s0); - if (temp_v0->unk1C != 0) - { - // Node 3 - disable_sounds_attached_to_player_then_something(temp_v0->unk18); - chrpropDelist((g_ChrSlots + phi_s0)->unk18); - chrpropDisable((g_ChrSlots + phi_s0)->unk18); - chrpropFree((g_ChrSlots + phi_s0)->unk18); - phi_v1 = g_NumChrSlots; - } - // Node 4 - temp_s2 = (phi_s2 + 1); - phi_s0 = (phi_s0 + 0x1dc); - phi_s2 = temp_s2; - phi_v1 = phi_v1; - if (temp_s2 < phi_v1) - { - goto loop_2; + for (i = 0; i < g_NumChrSlots; i++) { + if (g_ChrSlots[i].model != 0) { + disable_sounds_attached_to_player_then_something(g_ChrSlots[i].prop); + chrpropDelist(g_ChrSlots[i].prop); + chrpropDisable(g_ChrSlots[i].prop); + chrpropFree(g_ChrSlots[i].prop); } } - // Node 5 - return; } -#else -GLOBAL_ASM( -.text -glabel cleanupGuardData -/* 03BEE0 7F0073B0 3C038003 */ lui $v1, %hi(g_NumChrSlots) -/* 03BEE4 7F0073B4 8C63CC68 */ lw $v1, %lo(g_NumChrSlots)($v1) -/* 03BEE8 7F0073B8 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 03BEEC 7F0073BC AFB20020 */ sw $s2, 0x20($sp) -/* 03BEF0 7F0073C0 AFBF0024 */ sw $ra, 0x24($sp) -/* 03BEF4 7F0073C4 AFB1001C */ sw $s1, 0x1c($sp) -/* 03BEF8 7F0073C8 AFB00018 */ sw $s0, 0x18($sp) -/* 03BEFC 7F0073CC 1860001D */ blez $v1, .L7F007444 -/* 03BF00 7F0073D0 00009025 */ move $s2, $zero -/* 03BF04 7F0073D4 3C118003 */ lui $s1, %hi(g_ChrSlots) -/* 03BF08 7F0073D8 2631CC64 */ addiu $s1, %lo(g_ChrSlots) # addiu $s1, $s1, -0x339c -/* 03BF0C 7F0073DC 00008025 */ move $s0, $zero -.L7F0073E0: -/* 03BF10 7F0073E0 8E2E0000 */ lw $t6, ($s1) -/* 03BF14 7F0073E4 01D01021 */ addu $v0, $t6, $s0 -/* 03BF18 7F0073E8 8C4F001C */ lw $t7, 0x1c($v0) -/* 03BF1C 7F0073EC 51E00012 */ beql $t7, $zero, .L7F007438 -/* 03BF20 7F0073F0 26520001 */ addiu $s2, $s2, 1 -/* 03BF24 7F0073F4 0FC08105 */ jal disable_sounds_attached_to_player_then_something -/* 03BF28 7F0073F8 8C440018 */ lw $a0, 0x18($v0) -/* 03BF2C 7F0073FC 8E380000 */ lw $t8, ($s1) -/* 03BF30 7F007400 0310C821 */ addu $t9, $t8, $s0 -/* 03BF34 7F007404 0FC0E94E */ jal chrpropDelist -/* 03BF38 7F007408 8F240018 */ lw $a0, 0x18($t9) -/* 03BF3C 7F00740C 8E280000 */ lw $t0, ($s1) -/* 03BF40 7F007410 01104821 */ addu $t1, $t0, $s0 -/* 03BF44 7F007414 0FC0E905 */ jal chrpropDisable -/* 03BF48 7F007418 8D240018 */ lw $a0, 0x18($t1) -/* 03BF4C 7F00741C 8E2A0000 */ lw $t2, ($s1) -/* 03BF50 7F007420 01505821 */ addu $t3, $t2, $s0 -/* 03BF54 7F007424 0FC0E921 */ jal chrpropFree -/* 03BF58 7F007428 8D640018 */ lw $a0, 0x18($t3) -/* 03BF5C 7F00742C 3C038003 */ lui $v1, %hi(g_NumChrSlots) -/* 03BF60 7F007430 8C63CC68 */ lw $v1, %lo(g_NumChrSlots)($v1) -/* 03BF64 7F007434 26520001 */ addiu $s2, $s2, 1 -.L7F007438: -/* 03BF68 7F007438 0243082A */ slt $at, $s2, $v1 -/* 03BF6C 7F00743C 1420FFE8 */ bnez $at, .L7F0073E0 -/* 03BF70 7F007440 261001DC */ addiu $s0, $s0, 0x1dc -.L7F007444: -/* 03BF74 7F007444 8FBF0024 */ lw $ra, 0x24($sp) -/* 03BF78 7F007448 8FB00018 */ lw $s0, 0x18($sp) -/* 03BF7C 7F00744C 8FB1001C */ lw $s1, 0x1c($sp) -/* 03BF80 7F007450 8FB20020 */ lw $s2, 0x20($sp) -/* 03BF84 7F007454 03E00008 */ jr $ra -/* 03BF88 7F007458 27BD0028 */ addiu $sp, $sp, 0x28 -) -#endif - - diff --git a/src/game/cleanup_objectives.c b/src/game/cleanup_objectives.c index a66dc93..a08eaf9 100644 --- a/src/game/cleanup_objectives.c +++ b/src/game/cleanup_objectives.c @@ -1,113 +1,17 @@ #include +#include "bondtypes.h" +#include "objective_status.h" +void cleanupObjectives(void) +{ + int i; - -#ifdef NONMATCHING -void cleanupObjectives(s32 stage) { - + for (i = 0; i < OBJECTIVES_MAX; i++) + { + if (objective_ptrs[i] != NULL && (objective_ptrs[i]->unkD & 1) && objectiveStatuses[i] != OBJECTIVESTATUS_FAILED) + { + objectiveStatuses[i] = OBJECTIVESTATUS_COMPLETE; + } + } } -#else -GLOBAL_ASM( -.text -glabel cleanupObjectives -/* 03C0C0 7F007590 3C028007 */ lui $v0, %hi(objective_ptrs) -/* 03C0C4 7F007594 8C425D30 */ lw $v0, %lo(objective_ptrs)($v0) -/* 03C0C8 7F007598 3C048007 */ lui $a0, %hi(objective_ptrs+8) -/* 03C0CC 7F00759C 24845D38 */ addiu $a0, %lo(objective_ptrs+8) # addiu $a0, $a0, 0x5d38 -/* 03C0D0 7F0075A0 1040000C */ beqz $v0, .L7F0075D4 -/* 03C0D4 7F0075A4 24030008 */ li $v1, 8 -/* 03C0D8 7F0075A8 904E000E */ lbu $t6, 0xe($v0) -/* 03C0DC 7F0075AC 3C188007 */ lui $t8, %hi(dword_CODE_bss_80075D58) -/* 03C0E0 7F0075B0 31CF0001 */ andi $t7, $t6, 1 -/* 03C0E4 7F0075B4 11E00007 */ beqz $t7, .L7F0075D4 -/* 03C0E8 7F0075B8 00000000 */ nop -/* 03C0EC 7F0075BC 8F185D58 */ lw $t8, %lo(dword_CODE_bss_80075D58)($t8) -/* 03C0F0 7F0075C0 24050002 */ li $a1, 2 -/* 03C0F4 7F0075C4 24190001 */ li $t9, 1 -/* 03C0F8 7F0075C8 10B80002 */ beq $a1, $t8, .L7F0075D4 -/* 03C0FC 7F0075CC 3C018007 */ lui $at, %hi(dword_CODE_bss_80075D58) -/* 03C100 7F0075D0 AC395D58 */ sw $t9, %lo(dword_CODE_bss_80075D58)($at) -.L7F0075D4: -/* 03C104 7F0075D4 3C028007 */ lui $v0, %hi(objective_ptrs+4) -/* 03C108 7F0075D8 8C425D34 */ lw $v0, %lo(objective_ptrs+4)($v0) -/* 03C10C 7F0075DC 3C088007 */ lui $t0, %hi(dword_CODE_bss_80075D58) -/* 03C110 7F0075E0 25085D58 */ addiu $t0, %lo(dword_CODE_bss_80075D58) # addiu $t0, $t0, 0x5d58 -/* 03C114 7F0075E4 1040000C */ beqz $v0, .L7F007618 -/* 03C118 7F0075E8 24050002 */ li $a1, 2 -/* 03C11C 7F0075EC 9049000E */ lbu $t1, 0xe($v0) -/* 03C120 7F0075F0 3C0B8007 */ lui $t3, %hi(dword_CODE_bss_80075D58+4) -/* 03C124 7F0075F4 312A0001 */ andi $t2, $t1, 1 -/* 03C128 7F0075F8 11400007 */ beqz $t2, .L7F007618 -/* 03C12C 7F0075FC 00000000 */ nop -/* 03C130 7F007600 8D6B5D5C */ lw $t3, %lo(dword_CODE_bss_80075D58+4)($t3) -/* 03C134 7F007604 240C0001 */ li $t4, 1 -/* 03C138 7F007608 3C018007 */ lui $at, %hi(dword_CODE_bss_80075D58+4) -/* 03C13C 7F00760C 10AB0002 */ beq $a1, $t3, .L7F007618 -/* 03C140 7F007610 00000000 */ nop -/* 03C144 7F007614 AC2C5D5C */ sw $t4, %lo(dword_CODE_bss_80075D58+4)($at) -.L7F007618: -/* 03C148 7F007618 3C068007 */ lui $a2, %hi(dword_CODE_bss_80075D58) -/* 03C14C 7F00761C 24C65D58 */ addiu $a2, %lo(dword_CODE_bss_80075D58) # addiu $a2, $a2, 0x5d58 -/* 03C150 7F007620 24070001 */ li $a3, 1 -.L7F007624: -/* 03C154 7F007624 8C820000 */ lw $v0, ($a0) -/* 03C158 7F007628 5040000B */ beql $v0, $zero, .L7F007658 -/* 03C15C 7F00762C 8C820004 */ lw $v0, 4($a0) -/* 03C160 7F007630 904D000E */ lbu $t5, 0xe($v0) -/* 03C164 7F007634 00C31021 */ addu $v0, $a2, $v1 -/* 03C168 7F007638 31AE0001 */ andi $t6, $t5, 1 -/* 03C16C 7F00763C 51C00006 */ beql $t6, $zero, .L7F007658 -/* 03C170 7F007640 8C820004 */ lw $v0, 4($a0) -/* 03C174 7F007644 8C4F0000 */ lw $t7, ($v0) -/* 03C178 7F007648 50AF0003 */ beql $a1, $t7, .L7F007658 -/* 03C17C 7F00764C 8C820004 */ lw $v0, 4($a0) -/* 03C180 7F007650 AC470000 */ sw $a3, ($v0) -/* 03C184 7F007654 8C820004 */ lw $v0, 4($a0) -.L7F007658: -/* 03C188 7F007658 5040000B */ beql $v0, $zero, .L7F007688 -/* 03C18C 7F00765C 8C820008 */ lw $v0, 8($a0) -/* 03C190 7F007660 9058000E */ lbu $t8, 0xe($v0) -/* 03C194 7F007664 00C31021 */ addu $v0, $a2, $v1 -/* 03C198 7F007668 33190001 */ andi $t9, $t8, 1 -/* 03C19C 7F00766C 53200006 */ beql $t9, $zero, .L7F007688 -/* 03C1A0 7F007670 8C820008 */ lw $v0, 8($a0) -/* 03C1A4 7F007674 8C490004 */ lw $t1, 4($v0) -/* 03C1A8 7F007678 50A90003 */ beql $a1, $t1, .L7F007688 -/* 03C1AC 7F00767C 8C820008 */ lw $v0, 8($a0) -/* 03C1B0 7F007680 AC470004 */ sw $a3, 4($v0) -/* 03C1B4 7F007684 8C820008 */ lw $v0, 8($a0) -.L7F007688: -/* 03C1B8 7F007688 5040000B */ beql $v0, $zero, .L7F0076B8 -/* 03C1BC 7F00768C 8C82000C */ lw $v0, 0xc($a0) -/* 03C1C0 7F007690 904A000E */ lbu $t2, 0xe($v0) -/* 03C1C4 7F007694 00C31021 */ addu $v0, $a2, $v1 -/* 03C1C8 7F007698 314B0001 */ andi $t3, $t2, 1 -/* 03C1CC 7F00769C 51600006 */ beql $t3, $zero, .L7F0076B8 -/* 03C1D0 7F0076A0 8C82000C */ lw $v0, 0xc($a0) -/* 03C1D4 7F0076A4 8C4C0008 */ lw $t4, 8($v0) -/* 03C1D8 7F0076A8 50AC0003 */ beql $a1, $t4, .L7F0076B8 -/* 03C1DC 7F0076AC 8C82000C */ lw $v0, 0xc($a0) -/* 03C1E0 7F0076B0 AC470008 */ sw $a3, 8($v0) -/* 03C1E4 7F0076B4 8C82000C */ lw $v0, 0xc($a0) -.L7F0076B8: -/* 03C1E8 7F0076B8 24840010 */ addiu $a0, $a0, 0x10 -/* 03C1EC 7F0076BC 1040000A */ beqz $v0, .L7F0076E8 -/* 03C1F0 7F0076C0 00000000 */ nop -/* 03C1F4 7F0076C4 904D000E */ lbu $t5, 0xe($v0) -/* 03C1F8 7F0076C8 00C31021 */ addu $v0, $a2, $v1 -/* 03C1FC 7F0076CC 31AE0001 */ andi $t6, $t5, 1 -/* 03C200 7F0076D0 11C00005 */ beqz $t6, .L7F0076E8 -/* 03C204 7F0076D4 00000000 */ nop -/* 03C208 7F0076D8 8C4F000C */ lw $t7, 0xc($v0) -/* 03C20C 7F0076DC 10AF0002 */ beq $a1, $t7, .L7F0076E8 -/* 03C210 7F0076E0 00000000 */ nop -/* 03C214 7F0076E4 AC47000C */ sw $a3, 0xc($v0) -.L7F0076E8: -/* 03C218 7F0076E8 1488FFCE */ bne $a0, $t0, .L7F007624 -/* 03C21C 7F0076EC 24630010 */ addiu $v1, $v1, 0x10 -/* 03C220 7F0076F0 03E00008 */ jr $ra -/* 03C224 7F0076F4 00000000 */ nop -) -#endif - diff --git a/src/game/cleanup_objects.c b/src/game/cleanup_objects.c index bf43b28..2a5ef89 100644 --- a/src/game/cleanup_objects.c +++ b/src/game/cleanup_objects.c @@ -2,157 +2,76 @@ #include #include "chrai.h" +#include "chrobjhandler.h" #include "cleanup_objects.h" #include "loadobjectmodel.h" -#ifdef NONMATCHING -/** - * decomp status: - * - compiles: yes - * - stack resize: ok - * - identical instructions: fail - * - identical registers: fail - * - * notes: something wrong with the comparison to 0x38. Also the first compare to NULL is wrong. - */ void cleanupObjects(s32 stage) { - object_standard *obj = g_CurrentSetup.propDefs; - - if (obj != NULL) + u32 *obj = (u32)g_CurrentSetup.propDefs; + + if (obj) { - for (; obj->type != 0x30;) + while ((u8)obj[0] != PROPDEF_END) { - switch (obj->type) + switch ((u8)obj[0]) { - case 1: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - case 10: - case 11: - case 12: - case 13: - case 17: - case 20: - case 21: - case 36: - case 39: - case 40: - case 41: - case 42: - case 43: - case 45: - case 47: + case PROPDEF_DOOR: + case PROPDEF_PROP: + case PROPDEF_KEY: + case PROPDEF_ALARM: + case PROPDEF_CCTV: + case PROPDEF_MAGAZINE: + case PROPDEF_COLLECTABLE: + case PROPDEF_MONITOR: + case PROPDEF_MULTI_MONITOR: + case PROPDEF_RACK: + case PROPDEF_AUTOGUN: + case PROPDEF_HAT: + case PROPDEF_AMMO: + case PROPDEF_ARMOUR: + case PROPDEF_GAS_RELEASING: + case PROPDEF_VEHICHLE: + case PROPDEF_AIRCRAFT: + case PROPDEF_UNK41: + case PROPDEF_GLASS: + case PROPDEF_SAFE: + case PROPDEF_TANK: + case PROPDEF_TINTED_GLASS: objFreePermanently((ObjectRecord *)obj, 1); break; + case PROPDEF_DOOR_SCALE: + case PROPDEF_GUARD: + case PROPDEF_LINK: + case PROPDEF_DEBRIS: + case PROPDEF_UNK16: + case PROPDEF_GUARD_ATTRIBUTE: + case PROPDEF_SWITCH: + case PROPDEF_TAG: + case PROPDEF_OBJECTIVE_START: + case PROPDEF_OBJECTIVE_END: + case PROPDEF_OBJECTIVE_DESTROY_OBJECT: + case PROPDEF_OBJECTIVE_COMPLETE_CONDITION: + case PROPDEF_OBJECTIVE_FAIL_CONDITION: + case PROPDEF_OBJECTIVE_COLLECT_OBJECT: + case PROPDEF_OBJECTIVE_DEPOSIT_OBJECT: + case PROPDEF_OBJECTIVE_PHOTOGRAPH: + case PROPDEF_OBJECTIVE_NULL: + case PROPDEF_OBJECTIVE_ENTER_ROOM: + case PROPDEF_OBJECTIVE_DEPOSIT_OBJECT_IN_ROOM: + case PROPDEF_OBJECTIVE_COPY_ITEM: + case PROPDEF_WATCH_MENU_OBJECTIVE_TEXT: + case PROPDEF_RENAME: + case PROPDEF_LOCK_DOOR: + case PROPDEF_SAFE_ITEM: + case PROPDEF_CAMERAPOS: + + break; + } - obj = &(((s32*)obj)[sizepropdef(obj)]); + obj = obj + sizepropdef(obj) ; } } } -#else -GLOBAL_ASM( -.rdata -glabel jpt_8004F210 - .word .L7F007550 - .word .L7F00755C - .word .L7F007550 - .word .L7F007550 - .word .L7F007550 - .word .L7F007550 - .word .L7F007550 - .word .L7F007550 - .word .L7F00755C - .word .L7F007550 - .word .L7F007550 - .word .L7F007550 - .word .L7F007550 - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F007550 - .word .L7F00755C - .word .L7F00755C - .word .L7F007550 - .word .L7F007550 - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F00755C - .word .L7F007550 - .word .L7F00755C - .word .L7F00755C - .word .L7F007550 - .word .L7F007550 - .word .L7F007550 - .word .L7F007550 - .word .L7F007550 - .word .L7F00755C - .word .L7F007550 - .word .L7F00755C - .word .L7F007550 -.text -glabel cleanupObjects -/* 03C030 7F007500 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 03C034 7F007504 AFB00018 */ sw $s0, 0x18($sp) -/* 03C038 7F007508 3C108007 */ lui $s0, %hi(g_CurrentSetup+0x0c) -/* 03C03C 7F00750C 8E105D0C */ lw $s0, %lo(g_CurrentSetup+0x0c)($s0) -/* 03C040 7F007510 AFBF001C */ sw $ra, 0x1c($sp) -/* 03C044 7F007514 AFA40020 */ sw $a0, 0x20($sp) -/* 03C048 7F007518 52000019 */ beql $s0, $zero, .L7F007580 -/* 03C04C 7F00751C 8FBF001C */ lw $ra, 0x1c($sp) -/* 03C050 7F007520 92030003 */ lbu $v1, 3($s0) -/* 03C054 7F007524 24010030 */ li $at, 48 -/* 03C058 7F007528 10610014 */ beq $v1, $at, .L7F00757C -/* 03C05C 7F00752C 246EFFFF */ addiu $t6, $v1, -1 -.L7F007530: -/* 03C060 7F007530 2DC1002F */ sltiu $at, $t6, 0x2f -/* 03C064 7F007534 10200009 */ beqz $at, .L7F00755C -/* 03C068 7F007538 000E7080 */ sll $t6, $t6, 2 -/* 03C06C 7F00753C 3C018005 */ lui $at, %hi(jpt_8004F210) -/* 03C070 7F007540 002E0821 */ addu $at, $at, $t6 -/* 03C074 7F007544 8C2EF210 */ lw $t6, %lo(jpt_8004F210)($at) -/* 03C078 7F007548 01C00008 */ jr $t6 -/* 03C07C 7F00754C 00000000 */ nop -.L7F007550: -/* 03C080 7F007550 02002025 */ move $a0, $s0 -/* 03C084 7F007554 0FC10409 */ jal objFreePermanently -/* 03C088 7F007558 24050001 */ li $a1, 1 -.L7F00755C: -/* 03C08C 7F00755C 0FC15A3D */ jal sizepropdef -/* 03C090 7F007560 02002025 */ move $a0, $s0 -/* 03C094 7F007564 00027880 */ sll $t7, $v0, 2 -/* 03C098 7F007568 01F08021 */ addu $s0, $t7, $s0 -/* 03C09C 7F00756C 92030003 */ lbu $v1, 3($s0) -/* 03C0A0 7F007570 24010030 */ li $at, 48 -/* 03C0A4 7F007574 5461FFEE */ bnel $v1, $at, .L7F007530 -/* 03C0A8 7F007578 246EFFFF */ addiu $t6, $v1, -1 -.L7F00757C: -/* 03C0AC 7F00757C 8FBF001C */ lw $ra, 0x1c($sp) -.L7F007580: -/* 03C0B0 7F007580 8FB00018 */ lw $s0, 0x18($sp) -/* 03C0B4 7F007584 27BD0020 */ addiu $sp, $sp, 0x20 -/* 03C0B8 7F007588 03E00008 */ jr $ra -/* 03C0BC 7F00758C 00000000 */ nop -) -#endif - - - - diff --git a/src/game/deb_loadallmodels.c b/src/game/deb_loadallmodels.c index 787c48d..fc79362 100644 --- a/src/game/deb_loadallmodels.c +++ b/src/game/deb_loadallmodels.c @@ -146,7 +146,12 @@ void debug_weapon_load_table(void) for (i = 0; tmp.array[i] >= 0; i++) { + /*if(*/ modelLoad(tmp.array[i]); + /*){break;}*/ if (1); + #ifdef DEBUG + osSyncPrintf("loaded weapon obj=%d", tmp.array[i]); + #endif } } diff --git a/src/game/debugmenu_08FE00.c b/src/game/debugmenu_08FE00.c index 72f60ea..6eb7a0b 100644 --- a/src/game/debugmenu_08FE00.c +++ b/src/game/debugmenu_08FE00.c @@ -39,6 +39,9 @@ void nullsub_32(void) { #endif +/* +* Address: 0x7f08fe08 +*/ void debmenuSetScaleIndex(s32 param_1) { #if defined(LEFTOVERDEBUG) g_DMenuScaleIndex = param_1; @@ -46,7 +49,9 @@ void debmenuSetScaleIndex(s32 param_1) { } - +/* +* Address: 0x7f08fe14 +*/ void debmenuSetMenu(char **labels, s32 (*positions)[2], s32 *offsets) { #if defined(LEFTOVERDEBUG) @@ -63,7 +68,9 @@ void debmenuSetMenu(char **labels, s32 (*positions)[2], s32 *offsets) #endif } - +/* +* Address: 0x7f08fe74 +*/ Gfx *debugmenuRender(Gfx *gdl) { #if defined (LEFTOVERDEBUG) @@ -86,7 +93,9 @@ Gfx *debugmenuRender(Gfx *gdl) return gdl; } - +/* +* Address: 0x7f09000c +*/ void sub_GAME_7F09000C(int a0,int a1,int a2) { #if defined (LEFTOVERDEBUG) @@ -110,7 +119,9 @@ void sub_GAME_7F09000C(int a0,int a1,int a2) - +/* +* Address: 0x7f0901b0 +*/ s32 get_highlighted_debug_option(void) { #if defined(LEFTOVERDEBUG) return g_DMenuSelectedOption; @@ -119,14 +130,18 @@ s32 get_highlighted_debug_option(void) { #endif } - +/* +* Address: 0x7f0901bc +*/ void set_highlighted_debug_option(s32 value) { #if defined(LEFTOVERDEBUG) g_DMenuSelectedOption = value; #endif } - +/* +* Address: 0x7f0901c8 +*/ void gotoAboveDebugOption(void) { #if defined(LEFTOVERDEBUG) @@ -152,7 +167,9 @@ void gotoAboveDebugOption(void) #endif } - +/* +* Address: 0x7f090248 +*/ void gotoBelowDebugOption(void) { #if defined(LEFTOVERDEBUG) @@ -181,6 +198,9 @@ void gotoBelowDebugOption(void) +/* +* Address: 0x7f0902c0 +*/ #if defined(LEFTOVERDEBUG) void gotoRightDebugOption(void) { @@ -233,7 +253,9 @@ void gotoRightDebugOption(void) #endif - +/* +* Address: 0x7f09039c +*/ #if defined(LEFTOVERDEBUG) void gotoLeftDebugOption(void) { diff --git a/src/game/debugmenu_handler.c b/src/game/debugmenu_handler.c index d96d016..a7fda5f 100644 --- a/src/game/debugmenu_handler.c +++ b/src/game/debugmenu_handler.c @@ -194,13 +194,13 @@ char *mcm_strings[] = { }; //D:80036F64 -s32 debug_render_raster = 2; +s32 debug_render_raster = DEB_BOND_VIEW; //D:80036F68 -s32 debug_freeze_processing = 2; +s32 debug_freeze_processing = DEB_BOND_VIEW; //D:80036F6C -s32 g_DebugMode = 2; +s32 g_DebugMode = DEB_BOND_VIEW; //D:80036F70 -s32 g_DebugHighlightedOption = 2; +s32 g_DebugHighlightedOption = DEB_BOND_VIEW; //D:80036F74 s32 memusage_display_flag = FALSE; //D:80036F78 @@ -304,6 +304,9 @@ coord3d player_pos_x = {0}; #endif +/* +* Address: 0x7f090490 +*/ void debugmenuUpdate(void) { #if defined(LEFTOVERDEBUG) @@ -312,15 +315,21 @@ void debugmenuUpdate(void) } #if defined(LEFTOVERDEBUG) +/* +* Address: 0x7f0904c4 +*/ void debmenuHandleMoveView(void) { - sub_GAME_7F0916F4(); + resetDebugCameraToPlayerPosition(); g_DebugHighlightedOption = get_highlighted_debug_option(); debug_render_raster = debug_freeze_processing = g_DebugHighlightedOption; } #endif #if defined(LEFTOVERDEBUG) +/* +* Address: 0x7f090508 +*/ void debmenuHandleStanView(void) { maybe_solo_intro_camera_handler(); @@ -330,6 +339,9 @@ void debmenuHandleStanView(void) #endif #if defined(LEFTOVERDEBUG) +/* +* Address: 0x7f09054c +*/ void debmenuHandleBondView(void) { maybe_solo_intro_camera_handler(); @@ -339,12 +351,18 @@ void debmenuHandleBondView(void) #endif #if defined(LEFTOVERDEBUG) +/* +* Address: 0x7f090590 +*/ void removed_do_debug_profile_flag_false(void) { return; } #endif #if defined(LEFTOVERDEBUG) +/* +* Address: 0x7f090598 +*/ void removed_do_debug_profile_flag_true(void) { return; } @@ -444,124 +462,124 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre { switch (get_highlighted_debug_option()) { - case 0: // move view + case DEB_MOVE_VIEW: // move view debmenuHandleMoveView(); break; - case 1: // stan view + case DEB_STAN_VIEW: // stan view debmenuHandleStanView(); break; - case 2: // bond view + case DEB_BOND_VIEW: // bond view debmenuHandleBondView(); break; - case 3: // level + case DEB_LEVEL: // level g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 4: // region + case DEB_REGION: // region g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 5: // scale + case DEB_SCALE: // scale g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 8: // select anim + case DEB_SELANIM: // select anim g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 9: // gun pos + case DEB_GUNPOS: // gun pos g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 10: // flash colour + case DEB_FLASHCOLOR: // flash colour g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 11: // hit colour + case DEB_HITCOLOR: // hit colour g_DebugHighlightedOption = get_highlighted_debug_option(); break; #ifdef XBLADEBUG - case 50: //marg top + case DEB_MARGTOP: //marg top /* printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - Function_82395958(1.0,0.0,0), - Function_82395958(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,1), - Function_82395958(1.0,0.0,2), - Function_82395958(1.0,0.0,3)); + bgTimesAddViewRelatedMaybe(1.0,0.0,0), + bgTimesAddViewRelatedMaybe(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,1), + bgTimesAddViewRelatedMaybe(1.0,0.0,2), + bgTimesAddViewRelatedMaybe(1.0,0.0,3)); //*/ - case 51: //marg bot + case DEB_MARGBOT: //marg bot /* printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - Function_82395958(1.0,0.0,0), - Function_82395958(1.0,0.0,1), - Function_82395958(1.0,0.0,2), - Function_82395958(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,3)); + bgTimesAddViewRelatedMaybe(1.0,0.0,0), + bgTimesAddViewRelatedMaybe(1.0,0.0,1), + bgTimesAddViewRelatedMaybe(1.0,0.0,2), + bgTimesAddViewRelatedMaybe(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,3)); //*/ - case 52: //marg left + case DEB_MARGLEFT: //marg left /* printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - Function_82395958(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,0), - Function_82395958(1.0,0.0,1), - Function_82395958(1.0,0.0,2), - Function_82395958(1.0,0.0,3)); + bgTimesAddViewRelatedMaybe(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,0), + bgTimesAddViewRelatedMaybe(1.0,0.0,1), + bgTimesAddViewRelatedMaybe(1.0,0.0,2), + bgTimesAddViewRelatedMaybe(1.0,0.0,3)); //*/ - case 53: //marg right + case DEB_MARGRIGHT: //marg right /* printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - Function_82395958(1.0,0.0,0), - Function_82395958(1.0,0.0,1), - Function_82395958(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,2), - Function_82395958(1.0,0.0,3)); + bgTimesAddViewRelatedMaybe(1.0,0.0,0), + bgTimesAddViewRelatedMaybe(1.0,0.0,1), + bgTimesAddViewRelatedMaybe(1.0,(((button_pressed & 1) >> 5 & 1 ^ 1) - ((button_pressed & 2) >> 5 & 1 ^ 1)) * 4.0,2), + bgTimesAddViewRelatedMaybe(1.0,0.0,3)); //*/ - case 54: //marg reset + case DEB_MARGRESET: //marg reset /* printf("Margins: %5.2f.0F %5.2f.0F %5.2f.0F %5.2f.0F\n", - Function_82395958(1.0,0.0,0), - Function_82395958(1.0,0.0,1), - Function_82395958(1.0,0.0,2), - Function_82395958(1.0,0.0,3)); + bgTimesAddViewRelatedMaybe(1.0,0.0,0), + bgTimesAddViewRelatedMaybe(1.0,0.0,1), + bgTimesAddViewRelatedMaybe(1.0,0.0,2), + bgTimesAddViewRelatedMaybe(1.0,0.0,3)); //*/ break; #endif - case 55: // screen size + case DEB_SCREENSIZE: // screen size g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 56: // screen pos + case DEB_SCREENPOS: // screen pos g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 12: // music + case DEB_MUSIC: // music g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 26: // port close - case 27: // port inf - case 28: // port approx + case DEB_PORTCLOSE: // port close + case DEB_PORT_INF: // port inf + case DEB_PORT_APPROX: // port approx debug_portal_flag ^= 1; break; - case 13: // sfx + case DEB_SFX: // sfx g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 14: // invincible + case DEB_INVINCIBLE: // invincible set_bondata_invincible_flag(get_bondata_invincible_flag() == 0); break; - case 15: // visible + case DEB_VISIBILE: // visible bondviewSetVisibleToGuardsFlag(bondviewGetVisibleToGuardsFlag() == 0); break; - case 16: // collisions - set_obj_collision_flag(get_obj_collision_flag() == 0); + case DEB_COLLISIONS: // collisions + set_obj_collision_flag(get_obj_collision_flag() == FALSE); break; - case 17: // all guns + case DEB_ALLGUNS: // all guns { for (i1 = 0; i1 < getPlayerCount(); i1++) { @@ -571,7 +589,7 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre break; } - case 18: // max ammo + case DEB_MAXAMMO: // max ammo { sp54 = get_cur_playernum(); for (i2 = 0; i2 < getPlayerCount(); i2++) @@ -583,7 +601,7 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre break; } - case 19: // display speed + case DEB_DISPSPEED: // display speed memusage_display_flag ^= 1; if (memusage_display_flag == 0) { @@ -591,148 +609,148 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre } break; - case 20: // background + case DEB_BG: // background debug_do_draw_bg ^= 1; break; - case 21: // props + case DEB_PROPS: // props debug_do_draw_obj ^= 1; break; - case 22: // stan hit + case DEB_STANHIT: // stan hit debug_stanhit_flag ^= 1; break; - case 23: // stan region + case DEB_STANREGION: // stan region debug_stanregion_flag ^= 1; break; - case 24: // stan problems + case DEB_STANPROBLEMS: // stan problems debug_stan_problems_flag ^= 1; break; - case 25: // print man pos + case DEB_PRTMANPOS: // print man pos debug_man_pos_flag ^= 1; break; - case 75: // testing man pos + case DEB_TESTINGMANPOS: // testing man pos g_DebugManPos ^= 1; break; - case 6: // play title + case DEB_PLAYTITLE: // play title bossSetLoadedStage(LEVELID_TITLE); break; - case 7: // bond die + case DEB_BONDDIE: // bond die bondviewKillCurrentPlayer(); break; - case 29: // pr room loads + case DEB_PRROOMLOADS: // pr room loads debug_prroomloads_flag ^= 1; break; - case 30: // show mem use + case DEB_SHOWMEMUSE: // show mem use bossEnableShowMemUseFlag(); break; - case 31: // show mem bars + case DEB_SHOWMEMBARS: // show mem bars bossMemBarsFlagToggle(); break; - case 32: // grab rgb + case DEB_GRABRGB: // grab rgb pscreehshotFlagRgb->flag = 1; osViBlack(1); viSetColorMode32Bit(); break; - case 33: // grab jpeg + case DEB_GRABJPG: // grab jpeg pscreehshotFlagJpg->flag = 1; osViBlack(1); viSetColorMode32Bit(); break; - case 34: // grab task + case DEB_TASKGRAB: // grab task debug_enable_taskgrab_flag ^= 1; break; - case 35: //rnd walk + case DEB_RNDWALK: //rnd walk break; - case 36: // record ramrom + case DEB_RECRAMROM: // record ramrom setRamRomRecordSlot(0); break; - case 37: // record 1 + case DEB_RECORD1: // record 1 setRamRomRecordSlot(1); break; - case 38: // record 2 + case DEB_RECORD2: // record 2 setRamRomRecordSlot(2); break; - case 39: // record 3 + case DEB_RECORD3: // record 3 setRamRomRecordSlot(3); break; - case 40: // replay ramrom + case DEB_REPLAYRAMROM: // replay ramrom replay_recorded_ramrom_from_indy(); break; - case 41: // save ramrom + case DEB_SAVERAMROM: // save ramrom save_ramrom_to_devtool(); break; - case 42: // load ramrom + case DEB_LOADRAMROM: // load ramrom load_ramrom_from_devtool(); break; - case 43: // auto y aim + case DEB_AUTOAIMY: // auto y aim set_BONDdata_autoaim_y(get_BONDdata_autoaim_y() == 0); break; - case 44: // auto x aim + case DEB_AUTOAIMX: // auto x aim set_BONDdata_autoaim_x(get_BONDdata_autoaim_x() == 0); break; - case 45: // 007 + case DEB_007: // 007 debug_007_unlock_flag ^= 1; break; - case 46: // agent + case DEB_AGENT: // agent debug_enable_agent_levels_flag ^= 1; break; - case 47: // all + case DEB_ALL: // all debug_enable_all_levels_flag ^= 1; break; - case 48: // fast + case DEB_FAST: // fast debug_fast_bond_flag ^= 1; break; - case 49: // objectives + case DEB_OBJECTIVES: // objectives debug_all_obj_complete_flag ^= 1; break; - case 57: // show patrols - set_show_patrols_flag(get_show_patrols_flag() == 0); + case DEB_SHOWPATROLS: // show patrols + set_show_patrols_flag(get_show_patrols_flag() == FALSE); break; - case 58: // intro - set_camera_mode(CAMERAMODE_SWIRL); + case DEB_INTRO: // intro + bondviewSetCameraMode(CAMERAMODE_SWIRL); break; - case 60: // intro pos - if (debug_render_raster == 0) + case DEB_INTRO_POS: // intro pos + if (debug_render_raster == DEB_MOVE_VIEW) { - handle_debug_intropos(); + initializeDebugCameraPosition(); } break; - case 61: // world pos - if (debug_render_raster == 0) + case DEB_WORLD_POS: // world pos + if (debug_render_raster == DEB_MOVE_VIEW) { - debugSetWorldPos(); + updateDebugCameraWorldPosition(); } else { @@ -765,51 +783,51 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre } break; - case 62: // gun key pos + case DEB_GUNKEYPOS: // gun key pos g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 64: // chr num + case DEB_CHRNUM: // chr num debug_chrnum_flag ^= 1; break; - case 63: // vis cvg + case DEB_VISCVG: // vis cvg debug_VisCVG_flag ^= 1; break; - case 69: // joy2 sky edit + case DEB_JOY2SKYEDIT: // joy2 sky edit debug_joy2skyedit_flag ^= 1; break; - case 70: // joy2 hits edit + case DEB_JOY2HITSEDIT: // joy2 hits edit debug_joy2hitsedit_flag ^= 1; break; - case 71: // joy2 detail edit + case DEB_JOY2DETAILEDIT: // joy2 detail edit debug_joy2detailedit_flag ^= 1; break; - case 72: // explosion info + case DEB_EXPLOSIONINFO: // explosion info debug_explosioninfo_flag ^= 1; break; - case 73: // magic fog + case DEB_MAGICFOG: // magic fog g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 76: // fog + case DEB_FOG: // fog g_DebugHighlightedOption = get_highlighted_debug_option(); break; - case 74: // gun watch pos + case DEB_GUNWATCHPOS: // gun watch pos debug_gunwatchpos_flags ^= 1; break; - case 65: // room blocks + case DEB_ROOMBLOCKS: // room blocks removed_debug_roomblocks_feature(); break; - case 66: // profile + case DEB_PROFILE: // profile { debug_profile_flag ^= 1; if (debug_profile_flag) @@ -823,15 +841,15 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre break; } - case 67: // obj load + case DEB_OBJLOAD: // obj load debug_object_load_all_models(); break; - case 68: // weapon load + case DEB_WEAPONLOAD: // weapon load debug_weapon_load_table(); break; - case 59: // intro edit + case DEB_INTRO_EDIT: // intro edit g_DebugHighlightedOption = get_highlighted_debug_option(); break; } @@ -841,11 +859,11 @@ s32 debug_menu_processor(s8 stick_h, s8 stick_v, u16 button_held, u16 button_pre { switch (get_highlighted_debug_option()) // switch 2; jump table: jpt_80055830 { - case 50: // marg top - case 51: // marg bot - case 52: // marg left - case 53: // marg right - case 54: // marg reset + case DEB_MARGTOP: // marg top + case DEB_MARGBOT: // marg bot + case DEB_MARGLEFT: // marg left + case DEB_MARGRIGHT: // marg right + case DEB_MARGRESET: // marg reset break; } } diff --git a/src/game/dyn.c b/src/game/dyn.c index d5f50b7..62608f7 100644 --- a/src/game/dyn.c +++ b/src/game/dyn.c @@ -53,11 +53,11 @@ void dynInitMemory(void) { g_VtxSizesByPlayerCount[getPlayerCount() - 1] = strtol(tokenFind(1, "-mvtx"), NULL, 0) * 1024; } - g_GfxBuffers[0] = mempAllocBytesInBank(g_GfxSizesByPlayerCount[getPlayerCount() - 1] * 2, 4); + g_GfxBuffers[0] = mempAllocBytesInBank(g_GfxSizesByPlayerCount[getPlayerCount() - 1] * 2, MEMPOOL_STAGE); g_GfxBuffers[1] = (g_GfxBuffers[0] + g_GfxSizesByPlayerCount[getPlayerCount() - 1]); g_GfxBuffers[2] = (g_GfxBuffers[1] + g_GfxSizesByPlayerCount[getPlayerCount() - 1]); - g_VtxBuffers[0] = mempAllocBytesInBank(g_VtxSizesByPlayerCount[getPlayerCount() - 1] * 2, 4); + g_VtxBuffers[0] = mempAllocBytesInBank(g_VtxSizesByPlayerCount[getPlayerCount() - 1] * 2, MEMPOOL_STAGE); g_VtxBuffers[1] = (g_VtxBuffers[0] + g_VtxSizesByPlayerCount[getPlayerCount() - 1]); g_VtxBuffers[2] = (g_VtxBuffers[1] + g_VtxSizesByPlayerCount[getPlayerCount() - 1]); diff --git a/src/game/ejectedcartridges.c b/src/game/ejectedcartridges.c index 6c38670..ae3dfe6 100644 --- a/src/game/ejectedcartridges.c +++ b/src/game/ejectedcartridges.c @@ -31,4 +31,4 @@ void init_ejected_cartridges(void) { fileLoad(ejected_cartridge[i].header, ejected_cartridge[i].text); i++; } -} \ No newline at end of file +} diff --git a/src/game/explosions.c b/src/game/explosions.c index 15c01fd..e79c6ef 100644 --- a/src/game/explosions.c +++ b/src/game/explosions.c @@ -6,59 +6,76 @@ #include #include #include "bg.h" +#include "bondview.h" +#include "cheat_buttons.h" +#include "chrai.h" +#include "chrlv.h" +#include "chrobjhandler.h" +#include "dyn.h" +#include "explosions.h" +#include "fr.h" #include "image_bank.h" #include "othermodemicrocode.h" -#include "explosions.h" -#include "unk_0BC530.h" #include "lvl.h" +#include "matrixmath.h" +#include "music.h" +#include "player.h" #include "random.h" -#include "fr.h" +#include "snd.h" +#include "stan.h" +#include "unk_0BC530.h" #include // bss //CODE.bss:8007A100 -char dword_CODE_bss_8007A100[0x40]; +// possibly printf("Allocating %d bytes for glass data (%d bits)\n",DAT_83bd5fb0 * 0x88 + 0xf & 0xfffffff0, DAT_83bd5fb0); +Mtx dword_CODE_bss_8007A100; /** - * ptr_smoke_buf = mempAllocBytesInBank(0x1FE0, 4); + * g_SmokeBuffer = mempAllocBytesInBank(0x1FE0, MEMPOOL_STAGE); + * printf("Allocating %d bytes for smoke data\n",0x9f60); * Address 0x8007A140. */ -struct Smoke *ptr_smoke_buf; +struct Smoke *g_SmokeBuffer; /** - * ptr_explosion_buf = mempAllocBytesInBank(0x1740, 4); + * g_ExplosionBuffer = mempAllocBytesInBank(0x1740, MEMPOOL_STAGE); + * printf("Allocating %d bytes for explosion data\n",0x2e80); * Address 0x8007A144. */ -struct Explosion *ptr_explosion_buf; +struct Explosion *g_ExplosionBuffer; //CODE.bss:8007A148 s32 max_particles; //CODE.bss:8007A14C -struct FlyingParticles *ptr_flying_particles_buf; +// printf("Allocating %d bytes for debris data (%d bits)\n", DAT_83bd2af0 * 0xa4, DAT_83bd2af0); +struct FlyingParticles *g_FlyingParticlesBuffer; /** - * ptr_scorch_buf = mempAllocBytesInBank(0x6E0, 4); + * g_ScorchBuffer = mempAllocBytesInBank(0x6E0, MEMPOOL_STAGE); + * printf("Allocating %d bytes for scorch data\n",0xa50); * sizeof each entry == 0x58 * Address 0x8007A150. */ -struct Scorch *ptr_scorch_buf; +struct Scorch *g_ScorchBuffer; /** - * ptr_bullet_impact_buf = mempAllocBytesInBank(0x1F40, 4); + * g_BulletImpactBuffer = mempAllocBytesInBank(0x1F40, MEMPOOL_STAGE); + * printf("Allocating %d bytes for wallhit data\n",0x3070); * Address 0x8007A154. */ -struct BulletImpact *ptr_bullet_impact_buf; +struct BulletImpact *g_BulletImpactBuffer; // data //D:80040170 -s32 numExplosionEntries = 0; +s32 g_NumExplosionEntries = 0; //D:80040174 -s32 numSmokeEntries = 0; +s32 g_NumSmokeEntries = 0; //D:80040178 -f32 D_80040178 = 1.0; +f32 g_SpExplosionDamageMult = 1.0; #if defined(VERSION_EU) -s_smoketype array_smoke_types[] = { +s_smoketype g_SmokeTypes[] = { // dur, appr, dis, size, bgrate, r, g, b, fgrate, propclouds { 1, 50, 99, 0, 0.0f, 128, 128, 128, 0.3f, 150 }, { 400, 50, 37, 60, 0.02f, 80, 80, 96, 0.3f, 150 }, @@ -74,7 +91,7 @@ s_smoketype array_smoke_types[] = { }; #else //D:8004017C -s_smoketype array_smoke_types[] = { +s_smoketype g_SmokeTypes[] = { // dur, appr, dis,size, bgrate, r, g, b, fgrate, propclouds { 1, 60, 99, 0, 0.0f, 128, 128, 128, 0.3f, 180}, { 480, 60, 45, 60, 0.02f, 80, 80, 96, 0.3f, 180}, @@ -91,7 +108,7 @@ s_smoketype array_smoke_types[] = { #endif #if defined(VERSION_EU) -s_explosiontype array_explosion_types[] = { +s_explosiontype g_ExplosionTypes[] = { //hrange, vrange, hchg, vchg, expsize, exprang, dmgrang, dur, proprate, flarespd, nbits, bitsize, bitdist, bithvel, bitvvel, smoketype, sndid, damage { 0.1f, 0.1f, 0.0f, 0.0f, 0.1f, 0.0f, 0.0f, 1, 1, 1.0f, 0, 0.1f, 0.0f, 0.0f, 0.0f, 0, 0x00, 0.0f}, { 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 25, 1, 1.0f, 10, 5.0f, 0.0f, 2.0f, 6.0f, 7, 0x00, 0.0f}, @@ -118,7 +135,7 @@ s_explosiontype array_explosion_types[] = { {160.0f, 120.0f, 7.19999980926514f, 2.40000009536743f, 600.0f, 450.0f, 640.0f, 50, 1, 2.0f, 0, 0.0f, 0.0f, 0.0f, 0.0f, 0, EXPLOSION_4B_SFX, 4.0f}, }; #else -s_explosiontype array_explosion_types[] = { +s_explosiontype g_ExplosionTypes[] = { //hrange, vrange, hchg, vchg, expsize, exprang, dmgrang, dur, proprate, flarespd, nbits, bitsize, bitdist, bithvel, bitvvel, smoketype, sndid, damage { 0.1f, 0.1f, 0.0f, 0.0f, 0.1f, 0.0f, 0.0f, 1, 1, 1.0f, 0, 0.1f, 0.0f, 0.0f, 0.0f, 0, 0x00, 0.0f}, { 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 30, 1, 1.0f, 10, 5.0f, 0.0f, 2.0f, 6.0f, 7, 0x00, 0.0f}, @@ -144,28 +161,30 @@ s_explosiontype array_explosion_types[] = { }; #endif -u32 array_explosion_dl_ptrs[] = { +Gfx * g_ExplosionDisplayLists[] = { &globalDL_0x078, &globalDL_0x120, &globalDL_0x1c8, - &globalDL_0x270, - &globalDL_0x318, + &globalDL_0x270, + &globalDL_0x318, &globalDL_0x3c0, - &globalDL_0x468, - &globalDL_0x510, - &globalDL_0x5b8, + &globalDL_0x468, + &globalDL_0x510, + &globalDL_0x5b8, &globalDL_0x660, - &globalDL_0x708, - &globalDL_0x7b0, - &globalDL_0x858, + &globalDL_0x708, + &globalDL_0x7b0, + &globalDL_0x858, &globalDL_0x900, - &globalDL_0x9a8 + &globalDL_0x9a8 }; -s32 numParticleEntries = 0; -s32 numScorchEntries = 0; -s32 numImpactEntries = 0; + +s32 g_NumParticleEntries = 0; +s32 g_NumScorchEntries = 0; +s32 g_NumImpactEntries = 0; + //D:8004080C -s_impacttype D_8004080C[] = { +s_impacttype g_ImpactTypes[] = { {10.0f, 10.0f, 1, 2, 8}, { 6.0f, 6.0f, 1, 2, 8}, { 8.0f, 8.0f, 0, 2, 8}, @@ -188,804 +207,185 @@ s_impacttype D_8004080C[] = { {12.0f, 12.0f, 1, 2, 1}, }; -u32 D_800408FC = 0; -u32 D_80040900 = 0; -u32 D_80040904 = 0; -u32 D_80040908 = 0; -//D:8004090C -u32 D_8004090C = 0xFFFFFFFF; -//D:80040910 -u32 D_80040910 = 0; -//D:80040914 -u32 D_80040914 = 0; -//D:80040918 -u32 D_80040918 = 0; -//D:8004091C -u32 D_8004091C = 0; -//D:80040920 -u32 D_80040920 = 0; -//D:80040924 -u32 D_80040924 = 0; -//D:80040928 -u32 D_80040928 = 0; -//D:8004092C -u32 D_8004092C = 0xDC; -//D:80040930 -u32 D_80040930 = 0; -//D:80040934 -u32 D_80040934 = 0; -//D:80040938 -u32 D_80040938 = 0; -//D:8004093C -u32 D_8004093C = 0xDC; +// unused / unreferenced (padding) +u32 D_800408FC = 0; + +Vtx g_ExplosionRenderPartDefaultVertex = {0, 0, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff }; +Vtx g_SmokeRenderPartDefaultVertex = {0, 0, 0, 0, 0, 0, 0x0, 0x0, 0x0, 0x0 }; +Vtx g_ScorchDefaultVertex = {0, 0, 0, 0, 0, 0, 0x0, 0x0, 0x0, 0xDC }; +Vtx g_BulletImpactDefaultVertex = {0, 0, 0, 0, 0, 0, 0x0, 0x0, 0x0, 0xDC }; // rodata +/*** prototypes */ + +void explosionInitFlyingParticles(coord3d *spawnpos, f32 spawn_rand_scale, f32 spawn_horiz_drift_scale, f32 spawn_vert_drift_scale, f32 spawn_tex_scale); +s32 explosionRoundFloat(f32 arg0); +void explosionSetBulletImpactAlpha(s32 arg0); +void explosionInflictDamage(PropRecord *arg0, f32 arg1, f32 arg2); +void explosionInflictDamage(struct PropRecord *arg0, f32 arg1, f32 arg2); +void explosionScorchTick(struct coord3d *pos, f32 explosion_size, s16 room); +Gfx *explosionRenderPart(struct ExplosionPart *arg0, Gfx *gdl, struct coord3d *coord); + +/*** *************************************************************************************************************/ /** * Named same as Perfect Dark. + * NTSC 0x7F09C250 */ -#ifdef NONMATCHING -void explosionCreate(void) { - -} +#if defined(VERSION_JP) || defined(VERSION_EU) +s32 #else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_800576B0 -.word 0x497423fe /*999999.88*/ -glabel D_800576B4 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel explosionCreate -/* 0D0D80 7F09C250 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0D0D84 7F09C254 00077400 */ sll $t6, $a3, 0x10 -/* 0D0D88 7F09C258 000E7C03 */ sra $t7, $t6, 0x10 -/* 0D0D8C 7F09C25C 3C198004 */ lui $t9, %hi(array_explosion_types) -/* 0D0D90 7F09C260 AFB10020 */ sw $s1, 0x20($sp) -/* 0D0D94 7F09C264 27390284 */ addiu $t9, %lo(array_explosion_types) # addiu $t9, $t9, 0x284 -/* 0D0D98 7F09C268 000FC180 */ sll $t8, $t7, 6 -/* 0D0D9C 7F09C26C AFB30028 */ sw $s3, 0x28($sp) -/* 0D0DA0 7F09C270 AFA70054 */ sw $a3, 0x54($sp) -/* 0D0DA4 7F09C274 03198821 */ addu $s1, $t8, $t9 -/* 0D0DA8 7F09C278 24010010 */ li $at, 16 -/* 0D0DAC 7F09C27C 01E03825 */ move $a3, $t7 -/* 0D0DB0 7F09C280 00A09825 */ move $s3, $a1 -/* 0D0DB4 7F09C284 AFBF002C */ sw $ra, 0x2c($sp) -/* 0D0DB8 7F09C288 AFB20024 */ sw $s2, 0x24($sp) -/* 0D0DBC 7F09C28C AFB0001C */ sw $s0, 0x1c($sp) -/* 0D0DC0 7F09C290 AFA40048 */ sw $a0, 0x48($sp) -/* 0D0DC4 7F09C294 AFA60050 */ sw $a2, 0x50($sp) -/* 0D0DC8 7F09C298 AFB10044 */ sw $s1, 0x44($sp) -/* 0D0DCC 7F09C29C 11E10006 */ beq $t7, $at, .L7F09C2B8 -/* 0D0DD0 7F09C2A0 00004025 */ move $t0, $zero -/* 0D0DD4 7F09C2A4 24010001 */ li $at, 1 -/* 0D0DD8 7F09C2A8 11E10003 */ beq $t7, $at, .L7F09C2B8 -/* 0D0DDC 7F09C2AC 240E0006 */ li $t6, 6 -/* 0D0DE0 7F09C2B0 3C018004 */ lui $at, %hi(numExplosionEntries) -/* 0D0DE4 7F09C2B4 AC2E0170 */ sw $t6, %lo(numExplosionEntries)($at) -.L7F09C2B8: -/* 0D0DE8 7F09C2B8 3C048008 */ lui $a0, %hi(ptr_explosion_buf) -/* 0D0DEC 7F09C2BC 8C84A144 */ lw $a0, %lo(ptr_explosion_buf)($a0) -/* 0D0DF0 7F09C2C0 00001025 */ move $v0, $zero -/* 0D0DF4 7F09C2C4 00801825 */ move $v1, $a0 -.L7F09C2C8: -/* 0D0DF8 7F09C2C8 8C6F0000 */ lw $t7, ($v1) -/* 0D0DFC 7F09C2CC 55E00004 */ bnezl $t7, .L7F09C2E0 -/* 0D0E00 7F09C2D0 244203E0 */ addiu $v0, $v0, 0x3e0 -/* 0D0E04 7F09C2D4 10000005 */ b .L7F09C2EC -/* 0D0E08 7F09C2D8 00444021 */ addu $t0, $v0, $a0 -/* 0D0E0C 7F09C2DC 244203E0 */ addiu $v0, $v0, 0x3e0 -.L7F09C2E0: -/* 0D0E10 7F09C2E0 28411740 */ slti $at, $v0, 0x1740 -/* 0D0E14 7F09C2E4 1420FFF8 */ bnez $at, .L7F09C2C8 -/* 0D0E18 7F09C2E8 246303E0 */ addiu $v1, $v1, 0x3e0 -.L7F09C2EC: -/* 0D0E1C 7F09C2EC 51000129 */ beql $t0, $zero, .L7F09C794 -/* 0D0E20 7F09C2F0 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D0E24 7F09C2F4 A7A70056 */ sh $a3, 0x56($sp) -/* 0D0E28 7F09C2F8 0FC0E90C */ jal propAllocate -/* 0D0E2C 7F09C2FC AFA80040 */ sw $t0, 0x40($sp) -/* 0D0E30 7F09C300 92230039 */ lbu $v1, 0x39($s1) -/* 0D0E34 7F09C304 8FA80040 */ lw $t0, 0x40($sp) -/* 0D0E38 7F09C308 00403825 */ move $a3, $v0 -/* 0D0E3C 7F09C30C 1860000E */ blez $v1, .L7F09C348 -/* 0D0E40 7F09C310 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) -/* 0D0E44 7F09C314 00032C00 */ sll $a1, $v1, 0x10 -/* 0D0E48 7F09C318 0005C403 */ sra $t8, $a1, 0x10 -/* 0D0E4C 7F09C31C 03002825 */ move $a1, $t8 -/* 0D0E50 7F09C320 8C843720 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0D0E54 7F09C324 00003025 */ move $a2, $zero -/* 0D0E58 7F09C328 AFA20030 */ sw $v0, 0x30($sp) -/* 0D0E5C 7F09C32C 0C002382 */ jal sndPlaySfx -/* 0D0E60 7F09C330 AFA80040 */ sw $t0, 0x40($sp) -/* 0D0E64 7F09C334 00402025 */ move $a0, $v0 -/* 0D0E68 7F09C338 0FC14E84 */ jal chrobjSndCreatePostEventDefault -/* 0D0E6C 7F09C33C 02602825 */ move $a1, $s3 -/* 0D0E70 7F09C340 8FA70030 */ lw $a3, 0x30($sp) -/* 0D0E74 7F09C344 8FA80040 */ lw $t0, 0x40($sp) -.L7F09C348: -/* 0D0E78 7F09C348 10E00111 */ beqz $a3, .L7F09C790 -/* 0D0E7C 7F09C34C 8FA60060 */ lw $a2, 0x60($sp) -/* 0D0E80 7F09C350 90EE0001 */ lbu $t6, 1($a3) -/* 0D0E84 7F09C354 24190007 */ li $t9, 7 -/* 0D0E88 7F09C358 A0F90000 */ sb $t9, ($a3) -/* 0D0E8C 7F09C35C 35CF0002 */ ori $t7, $t6, 2 -/* 0D0E90 7F09C360 A0EF0001 */ sb $t7, 1($a3) -/* 0D0E94 7F09C364 ACE80004 */ sw $t0, 4($a3) -/* 0D0E98 7F09C368 8FB80050 */ lw $t8, 0x50($sp) -/* 0D0E9C 7F09C36C 240500FF */ li $a1, 255 -/* 0D0EA0 7F09C370 00008025 */ move $s0, $zero -/* 0D0EA4 7F09C374 ACF80014 */ sw $t8, 0x14($a3) -/* 0D0EA8 7F09C378 C6640000 */ lwc1 $f4, ($s3) -/* 0D0EAC 7F09C37C 240E00FF */ li $t6, 255 -/* 0D0EB0 7F09C380 E4E40008 */ swc1 $f4, 8($a3) -/* 0D0EB4 7F09C384 C6660004 */ lwc1 $f6, 4($s3) -/* 0D0EB8 7F09C388 E4E6000C */ swc1 $f6, 0xc($a3) -/* 0D0EBC 7F09C38C C6680008 */ lwc1 $f8, 8($s3) -/* 0D0EC0 7F09C390 E4E80010 */ swc1 $f8, 0x10($a3) -/* 0D0EC4 7F09C394 90D90000 */ lbu $t9, ($a2) -/* 0D0EC8 7F09C398 10B9000C */ beq $a1, $t9, .L7F09C3CC -/* 0D0ECC 7F09C39C 00E01821 */ addu $v1, $a3, $zero -/* 0D0ED0 7F09C3A0 00C01021 */ addu $v0, $a2, $zero -/* 0D0ED4 7F09C3A4 90C40000 */ lbu $a0, ($a2) -/* 0D0ED8 7F09C3A8 24120007 */ li $s2, 7 -/* 0D0EDC 7F09C3AC A064002C */ sb $a0, 0x2c($v1) -.L7F09C3B0: -/* 0D0EE0 7F09C3B0 90440001 */ lbu $a0, 1($v0) -/* 0D0EE4 7F09C3B4 26100001 */ addiu $s0, $s0, 1 -/* 0D0EE8 7F09C3B8 24630001 */ addiu $v1, $v1, 1 -/* 0D0EEC 7F09C3BC 10A40003 */ beq $a1, $a0, .L7F09C3CC -/* 0D0EF0 7F09C3C0 24420001 */ addiu $v0, $v0, 1 -/* 0D0EF4 7F09C3C4 5612FFFA */ bnel $s0, $s2, .L7F09C3B0 -/* 0D0EF8 7F09C3C8 A064002C */ sb $a0, 0x2c($v1) -.L7F09C3CC: -/* 0D0EFC 7F09C3CC 00F07821 */ addu $t7, $a3, $s0 -/* 0D0F00 7F09C3D0 A1EE002C */ sb $t6, 0x2c($t7) -/* 0D0F04 7F09C3D4 8FB80064 */ lw $t8, 0x64($sp) -/* 0D0F08 7F09C3D8 24120007 */ li $s2, 7 -/* 0D0F0C 7F09C3DC 00008025 */ move $s0, $zero -/* 0D0F10 7F09C3E0 13000004 */ beqz $t8, .L7F09C3F4 -/* 0D0F14 7F09C3E4 00E02025 */ move $a0, $a3 -/* 0D0F18 7F09C3E8 90F90001 */ lbu $t9, 1($a3) -/* 0D0F1C 7F09C3EC 372E0008 */ ori $t6, $t9, 8 -/* 0D0F20 7F09C3F0 A0EE0001 */ sb $t6, 1($a3) -.L7F09C3F4: -/* 0D0F24 7F09C3F4 AFA70030 */ sw $a3, 0x30($sp) -/* 0D0F28 7F09C3F8 0FC0E93C */ jal chrpropActivateThisFrame -/* 0D0F2C 7F09C3FC AFA80040 */ sw $t0, 0x40($sp) -/* 0D0F30 7F09C400 0FC0E901 */ jal chrpropEnable -/* 0D0F34 7F09C404 8FA40030 */ lw $a0, 0x30($sp) -/* 0D0F38 7F09C408 8FA80040 */ lw $t0, 0x40($sp) -/* 0D0F3C 7F09C40C 8FA20058 */ lw $v0, 0x58($sp) -/* 0D0F40 7F09C410 8FA70030 */ lw $a3, 0x30($sp) -/* 0D0F44 7F09C414 8FA90048 */ lw $t1, 0x48($sp) -/* 0D0F48 7F09C418 87AF0056 */ lh $t7, 0x56($sp) -/* 0D0F4C 7F09C41C 2418FFFF */ li $t8, -1 -/* 0D0F50 7F09C420 A50003C8 */ sh $zero, 0x3c8($t0) -/* 0D0F54 7F09C424 A51803CA */ sh $t8, 0x3ca($t0) -/* 0D0F58 7F09C428 A10203CD */ sb $v0, 0x3cd($t0) -/* 0D0F5C 7F09C42C AD070000 */ sw $a3, ($t0) -/* 0D0F60 7F09C430 AD090004 */ sw $t1, 4($t0) -/* 0D0F64 7F09C434 A10F03CC */ sb $t7, 0x3cc($t0) -/* 0D0F68 7F09C438 8FB9005C */ lw $t9, 0x5c($sp) -/* 0D0F6C 7F09C43C 3C018005 */ lui $at, %hi(D_800576B0) -/* 0D0F70 7F09C440 1040002D */ beqz $v0, .L7F09C4F8 -/* 0D0F74 7F09C444 A11903CE */ sb $t9, 0x3ce($t0) -/* 0D0F78 7F09C448 51200019 */ beql $t1, $zero, .L7F09C4B0 -/* 0D0F7C 7F09C44C C6660000 */ lwc1 $f6, ($s3) -/* 0D0F80 7F09C450 8D2E0014 */ lw $t6, 0x14($t1) -/* 0D0F84 7F09C454 51C00016 */ beql $t6, $zero, .L7F09C4B0 -/* 0D0F88 7F09C458 C6660000 */ lwc1 $f6, ($s3) -/* 0D0F8C 7F09C45C C52A0008 */ lwc1 $f10, 8($t1) -/* 0D0F90 7F09C460 E50A03D0 */ swc1 $f10, 0x3d0($t0) -/* 0D0F94 7F09C464 8D260010 */ lw $a2, 0x10($t1) -/* 0D0F98 7F09C468 8D250008 */ lw $a1, 8($t1) -/* 0D0F9C 7F09C46C 8D240014 */ lw $a0, 0x14($t1) -/* 0D0FA0 7F09C470 0FC2CA5C */ jal stanGetPositionYValue -/* 0D0FA4 7F09C474 AFA80040 */ sw $t0, 0x40($sp) -/* 0D0FA8 7F09C478 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0D0FAC 7F09C47C 44818000 */ mtc1 $at, $f16 -/* 0D0FB0 7F09C480 8FA80040 */ lw $t0, 0x40($sp) -/* 0D0FB4 7F09C484 8FA90048 */ lw $t1, 0x48($sp) -/* 0D0FB8 7F09C488 46100480 */ add.s $f18, $f0, $f16 -/* 0D0FBC 7F09C48C E51203D4 */ swc1 $f18, 0x3d4($t0) -/* 0D0FC0 7F09C490 C5240010 */ lwc1 $f4, 0x10($t1) -/* 0D0FC4 7F09C494 E50403D8 */ swc1 $f4, 0x3d8($t0) -/* 0D0FC8 7F09C498 0FC2CBF6 */ jal getTileRoom -/* 0D0FCC 7F09C49C 8D240014 */ lw $a0, 0x14($t1) -/* 0D0FD0 7F09C4A0 8FA80040 */ lw $t0, 0x40($sp) -/* 0D0FD4 7F09C4A4 10000016 */ b .L7F09C500 -/* 0D0FD8 7F09C4A8 A50203DC */ sh $v0, 0x3dc($t0) -/* 0D0FDC 7F09C4AC C6660000 */ lwc1 $f6, ($s3) -.L7F09C4B0: -/* 0D0FE0 7F09C4B0 E50603D0 */ swc1 $f6, 0x3d0($t0) -/* 0D0FE4 7F09C4B4 8E660008 */ lw $a2, 8($s3) -/* 0D0FE8 7F09C4B8 8E650000 */ lw $a1, ($s3) -/* 0D0FEC 7F09C4BC AFA80040 */ sw $t0, 0x40($sp) -/* 0D0FF0 7F09C4C0 0FC2CA5C */ jal stanGetPositionYValue -/* 0D0FF4 7F09C4C4 8FA40050 */ lw $a0, 0x50($sp) -/* 0D0FF8 7F09C4C8 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0D0FFC 7F09C4CC 44814000 */ mtc1 $at, $f8 -/* 0D1000 7F09C4D0 8FA80040 */ lw $t0, 0x40($sp) -/* 0D1004 7F09C4D4 46080280 */ add.s $f10, $f0, $f8 -/* 0D1008 7F09C4D8 E50A03D4 */ swc1 $f10, 0x3d4($t0) -/* 0D100C 7F09C4DC C6700008 */ lwc1 $f16, 8($s3) -/* 0D1010 7F09C4E0 E51003D8 */ swc1 $f16, 0x3d8($t0) -/* 0D1014 7F09C4E4 0FC2CBF6 */ jal getTileRoom -/* 0D1018 7F09C4E8 8FA40050 */ lw $a0, 0x50($sp) -/* 0D101C 7F09C4EC 8FA80040 */ lw $t0, 0x40($sp) -/* 0D1020 7F09C4F0 10000003 */ b .L7F09C500 -/* 0D1024 7F09C4F4 A50203DC */ sh $v0, 0x3dc($t0) -.L7F09C4F8: -/* 0D1028 7F09C4F8 C43276B0 */ lwc1 $f18, %lo(D_800576B0)($at) -/* 0D102C 7F09C4FC E51203D0 */ swc1 $f18, 0x3d0($t0) -.L7F09C500: -/* 0D1030 7F09C500 0C002914 */ jal randomGetNext -/* 0D1034 7F09C504 AFA80040 */ sw $t0, 0x40($sp) -/* 0D1038 7F09C508 44822000 */ mtc1 $v0, $f4 -/* 0D103C 7F09C50C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1040 7F09C510 04410004 */ bgez $v0, .L7F09C524 -/* 0D1044 7F09C514 468021A0 */ cvt.s.w $f6, $f4 -/* 0D1048 7F09C518 44814000 */ mtc1 $at, $f8 -/* 0D104C 7F09C51C 00000000 */ nop -/* 0D1050 7F09C520 46083180 */ add.s $f6, $f6, $f8 -.L7F09C524: -/* 0D1054 7F09C524 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D1058 7F09C528 44815000 */ mtc1 $at, $f10 -/* 0D105C 7F09C52C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D1060 7F09C530 44819000 */ mtc1 $at, $f18 -/* 0D1064 7F09C534 460A3402 */ mul.s $f16, $f6, $f10 -/* 0D1068 7F09C538 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D106C 7F09C53C 44814000 */ mtc1 $at, $f8 -/* 0D1070 7F09C540 C62A0010 */ lwc1 $f10, 0x10($s1) -/* 0D1074 7F09C544 46128102 */ mul.s $f4, $f16, $f18 -/* 0D1078 7F09C548 46082180 */ add.s $f6, $f4, $f8 -/* 0D107C 7F09C54C 460A3402 */ mul.s $f16, $f6, $f10 -/* 0D1080 7F09C550 0C002914 */ jal randomGetNext -/* 0D1084 7F09C554 E7B0003C */ swc1 $f16, 0x3c($sp) -/* 0D1088 7F09C558 44829000 */ mtc1 $v0, $f18 -/* 0D108C 7F09C55C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1090 7F09C560 04410004 */ bgez $v0, .L7F09C574 -/* 0D1094 7F09C564 46809120 */ cvt.s.w $f4, $f18 -/* 0D1098 7F09C568 44814000 */ mtc1 $at, $f8 -/* 0D109C 7F09C56C 00000000 */ nop -/* 0D10A0 7F09C570 46082100 */ add.s $f4, $f4, $f8 -.L7F09C574: -/* 0D10A4 7F09C574 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D10A8 7F09C578 44813000 */ mtc1 $at, $f6 -/* 0D10AC 7F09C57C 3C018005 */ lui $at, %hi(D_800576B4) -/* 0D10B0 7F09C580 C43076B4 */ lwc1 $f16, %lo(D_800576B4)($at) -/* 0D10B4 7F09C584 46062282 */ mul.s $f10, $f4, $f6 -/* 0D10B8 7F09C588 00000000 */ nop -/* 0D10BC 7F09C58C 46105302 */ mul.s $f12, $f10, $f16 -/* 0D10C0 7F09C590 0FC15FA8 */ jal cosf -/* 0D10C4 7F09C594 E7AC0038 */ swc1 $f12, 0x38($sp) -/* 0D10C8 7F09C598 C7B2003C */ lwc1 $f18, 0x3c($sp) -/* 0D10CC 7F09C59C 8FA80040 */ lw $t0, 0x40($sp) -/* 0D10D0 7F09C5A0 46120202 */ mul.s $f8, $f0, $f18 -/* 0D10D4 7F09C5A4 E5080014 */ swc1 $f8, 0x14($t0) -/* 0D10D8 7F09C5A8 0FC15FAB */ jal sinf -/* 0D10DC 7F09C5AC C7AC0038 */ lwc1 $f12, 0x38($sp) -/* 0D10E0 7F09C5B0 C7A4003C */ lwc1 $f4, 0x3c($sp) -/* 0D10E4 7F09C5B4 8FA80040 */ lw $t0, 0x40($sp) -/* 0D10E8 7F09C5B8 240F0001 */ li $t7, 1 -/* 0D10EC 7F09C5BC 46040182 */ mul.s $f6, $f0, $f4 -/* 0D10F0 7F09C5C0 A50F001C */ sh $t7, 0x1c($t0) -/* 0D10F4 7F09C5C4 E5060018 */ swc1 $f6, 0x18($t0) -/* 0D10F8 7F09C5C8 C66A0000 */ lwc1 $f10, ($s3) -/* 0D10FC 7F09C5CC E50A0008 */ swc1 $f10, 8($t0) -/* 0D1100 7F09C5D0 C6700004 */ lwc1 $f16, 4($s3) -/* 0D1104 7F09C5D4 E510000C */ swc1 $f16, 0xc($t0) -/* 0D1108 7F09C5D8 C6720008 */ lwc1 $f18, 8($s3) -/* 0D110C 7F09C5DC E5120010 */ swc1 $f18, 0x10($t0) -/* 0D1110 7F09C5E0 86380024 */ lh $t8, 0x24($s1) -/* 0D1114 7F09C5E4 1B00000E */ blez $t8, .L7F09C620 -/* 0D1118 7F09C5E8 00000000 */ nop -/* 0D111C 7F09C5EC C6280028 */ lwc1 $f8, 0x28($s1) -.L7F09C5F0: -/* 0D1120 7F09C5F0 8E25002C */ lw $a1, 0x2c($s1) -/* 0D1124 7F09C5F4 8E260030 */ lw $a2, 0x30($s1) -/* 0D1128 7F09C5F8 8E270034 */ lw $a3, 0x34($s1) -/* 0D112C 7F09C5FC 02602025 */ move $a0, $s3 -/* 0D1130 7F09C600 0FC27C95 */ jal init_gray_flying_particles -/* 0D1134 7F09C604 E7A80010 */ swc1 $f8, 0x10($sp) -/* 0D1138 7F09C608 8FB90044 */ lw $t9, 0x44($sp) -/* 0D113C 7F09C60C 26100001 */ addiu $s0, $s0, 1 -/* 0D1140 7F09C610 872E0024 */ lh $t6, 0x24($t9) -/* 0D1144 7F09C614 020E082A */ slt $at, $s0, $t6 -/* 0D1148 7F09C618 5420FFF5 */ bnezl $at, .L7F09C5F0 -/* 0D114C 7F09C61C C6280028 */ lwc1 $f8, 0x28($s1) -.L7F09C620: -/* 0D1150 7F09C620 0FC26919 */ jal getPlayerCount -/* 0D1154 7F09C624 00000000 */ nop -/* 0D1158 7F09C628 28410002 */ slti $at, $v0, 2 -/* 0D115C 7F09C62C 14200058 */ bnez $at, .L7F09C790 -/* 0D1160 7F09C630 00003025 */ move $a2, $zero -/* 0D1164 7F09C634 3C0D8008 */ lui $t5, %hi(ptr_smoke_buf) -/* 0D1168 7F09C638 3C0B8004 */ lui $t3, %hi(array_smoke_types) -/* 0D116C 7F09C63C 256B017C */ addiu $t3, %lo(array_smoke_types) # addiu $t3, $t3, 0x17c -/* 0D1170 7F09C640 25ADA140 */ addiu $t5, %lo(ptr_smoke_buf) # addiu $t5, $t5, -0x5ec0 -/* 0D1174 7F09C644 241F1FE0 */ li $ra, 8160 -/* 0D1178 7F09C648 240C0018 */ li $t4, 24 -/* 0D117C 7F09C64C 240A0009 */ li $t2, 9 -/* 0D1180 7F09C650 24090008 */ li $t1, 8 -/* 0D1184 7F09C654 8DA30000 */ lw $v1, ($t5) -.L7F09C658: -/* 0D1188 7F09C658 00662821 */ addu $a1, $v1, $a2 -/* 0D118C 7F09C65C 8CAF0000 */ lw $t7, ($a1) -/* 0D1190 7F09C660 00C33821 */ addu $a3, $a2, $v1 -/* 0D1194 7F09C664 51E00011 */ beql $t7, $zero, .L7F09C6AC -/* 0D1198 7F09C668 8CAF0198 */ lw $t7, 0x198($a1) -/* 0D119C 7F09C66C 84E20006 */ lh $v0, 6($a3) -/* 0D11A0 7F09C670 5242000E */ beql $s2, $v0, .L7F09C6AC -/* 0D11A4 7F09C674 8CAF0198 */ lw $t7, 0x198($a1) -/* 0D11A8 7F09C678 84E80006 */ lh $t0, 6($a3) -/* 0D11AC 7F09C67C 5128000B */ beql $t1, $t0, .L7F09C6AC -/* 0D11B0 7F09C680 8CAF0198 */ lw $t7, 0x198($a1) -/* 0D11B4 7F09C684 51480009 */ beql $t2, $t0, .L7F09C6AC -/* 0D11B8 7F09C688 8CAF0198 */ lw $t7, 0x198($a1) -/* 0D11BC 7F09C68C 004C0019 */ multu $v0, $t4 -/* 0D11C0 7F09C690 0000C012 */ mflo $t8 -/* 0D11C4 7F09C694 0178C821 */ addu $t9, $t3, $t8 -/* 0D11C8 7F09C698 872E0000 */ lh $t6, ($t9) -/* 0D11CC 7F09C69C A4EE0004 */ sh $t6, 4($a3) -/* 0D11D0 7F09C6A0 8DA30000 */ lw $v1, ($t5) -/* 0D11D4 7F09C6A4 00662821 */ addu $a1, $v1, $a2 -/* 0D11D8 7F09C6A8 8CAF0198 */ lw $t7, 0x198($a1) -.L7F09C6AC: -/* 0D11DC 7F09C6AC 00C32021 */ addu $a0, $a2, $v1 -/* 0D11E0 7F09C6B0 51E00011 */ beql $t7, $zero, .L7F09C6F8 -/* 0D11E4 7F09C6B4 8CAF0330 */ lw $t7, 0x330($a1) -/* 0D11E8 7F09C6B8 8482019E */ lh $v0, 0x19e($a0) -/* 0D11EC 7F09C6BC 24840198 */ addiu $a0, $a0, 0x198 -/* 0D11F0 7F09C6C0 5242000D */ beql $s2, $v0, .L7F09C6F8 -/* 0D11F4 7F09C6C4 8CAF0330 */ lw $t7, 0x330($a1) -/* 0D11F8 7F09C6C8 5122000B */ beql $t1, $v0, .L7F09C6F8 -/* 0D11FC 7F09C6CC 8CAF0330 */ lw $t7, 0x330($a1) -/* 0D1200 7F09C6D0 51420009 */ beql $t2, $v0, .L7F09C6F8 -/* 0D1204 7F09C6D4 8CAF0330 */ lw $t7, 0x330($a1) -/* 0D1208 7F09C6D8 004C0019 */ multu $v0, $t4 -/* 0D120C 7F09C6DC 0000C012 */ mflo $t8 -/* 0D1210 7F09C6E0 0178C821 */ addu $t9, $t3, $t8 -/* 0D1214 7F09C6E4 872E0000 */ lh $t6, ($t9) -/* 0D1218 7F09C6E8 A48E0004 */ sh $t6, 4($a0) -/* 0D121C 7F09C6EC 8DA30000 */ lw $v1, ($t5) -/* 0D1220 7F09C6F0 00662821 */ addu $a1, $v1, $a2 -/* 0D1224 7F09C6F4 8CAF0330 */ lw $t7, 0x330($a1) -.L7F09C6F8: -/* 0D1228 7F09C6F8 00C32021 */ addu $a0, $a2, $v1 -/* 0D122C 7F09C6FC 51E00011 */ beql $t7, $zero, .L7F09C744 -/* 0D1230 7F09C700 8CAF04C8 */ lw $t7, 0x4c8($a1) -/* 0D1234 7F09C704 84820336 */ lh $v0, 0x336($a0) -/* 0D1238 7F09C708 24840330 */ addiu $a0, $a0, 0x330 -/* 0D123C 7F09C70C 5242000D */ beql $s2, $v0, .L7F09C744 -/* 0D1240 7F09C710 8CAF04C8 */ lw $t7, 0x4c8($a1) -/* 0D1244 7F09C714 5122000B */ beql $t1, $v0, .L7F09C744 -/* 0D1248 7F09C718 8CAF04C8 */ lw $t7, 0x4c8($a1) -/* 0D124C 7F09C71C 51420009 */ beql $t2, $v0, .L7F09C744 -/* 0D1250 7F09C720 8CAF04C8 */ lw $t7, 0x4c8($a1) -/* 0D1254 7F09C724 004C0019 */ multu $v0, $t4 -/* 0D1258 7F09C728 0000C012 */ mflo $t8 -/* 0D125C 7F09C72C 0178C821 */ addu $t9, $t3, $t8 -/* 0D1260 7F09C730 872E0000 */ lh $t6, ($t9) -/* 0D1264 7F09C734 A48E0004 */ sh $t6, 4($a0) -/* 0D1268 7F09C738 8DA30000 */ lw $v1, ($t5) -/* 0D126C 7F09C73C 00662821 */ addu $a1, $v1, $a2 -/* 0D1270 7F09C740 8CAF04C8 */ lw $t7, 0x4c8($a1) -.L7F09C744: -/* 0D1274 7F09C744 00C32021 */ addu $a0, $a2, $v1 -/* 0D1278 7F09C748 51E0000F */ beql $t7, $zero, .L7F09C788 -/* 0D127C 7F09C74C 24C60660 */ addiu $a2, $a2, 0x660 -/* 0D1280 7F09C750 848204CE */ lh $v0, 0x4ce($a0) -/* 0D1284 7F09C754 248404C8 */ addiu $a0, $a0, 0x4c8 -/* 0D1288 7F09C758 5242000B */ beql $s2, $v0, .L7F09C788 -/* 0D128C 7F09C75C 24C60660 */ addiu $a2, $a2, 0x660 -/* 0D1290 7F09C760 51220009 */ beql $t1, $v0, .L7F09C788 -/* 0D1294 7F09C764 24C60660 */ addiu $a2, $a2, 0x660 -/* 0D1298 7F09C768 51420007 */ beql $t2, $v0, .L7F09C788 -/* 0D129C 7F09C76C 24C60660 */ addiu $a2, $a2, 0x660 -/* 0D12A0 7F09C770 004C0019 */ multu $v0, $t4 -/* 0D12A4 7F09C774 0000C012 */ mflo $t8 -/* 0D12A8 7F09C778 0178C821 */ addu $t9, $t3, $t8 -/* 0D12AC 7F09C77C 872E0000 */ lh $t6, ($t9) -/* 0D12B0 7F09C780 A48E0004 */ sh $t6, 4($a0) -/* 0D12B4 7F09C784 24C60660 */ addiu $a2, $a2, 0x660 -.L7F09C788: -/* 0D12B8 7F09C788 54DFFFB3 */ bnel $a2, $ra, .L7F09C658 -/* 0D12BC 7F09C78C 8DA30000 */ lw $v1, ($t5) -.L7F09C790: -/* 0D12C0 7F09C790 8FBF002C */ lw $ra, 0x2c($sp) -.L7F09C794: -/* 0D12C4 7F09C794 8FB0001C */ lw $s0, 0x1c($sp) -/* 0D12C8 7F09C798 8FB10020 */ lw $s1, 0x20($sp) -/* 0D12CC 7F09C79C 8FB20024 */ lw $s2, 0x24($sp) -/* 0D12D0 7F09C7A0 8FB30028 */ lw $s3, 0x28($sp) -/* 0D12D4 7F09C7A4 03E00008 */ jr $ra -/* 0D12D8 7F09C7A8 27BD0048 */ addiu $sp, $sp, 0x48 -) +void +#endif +explosionCreate(PropRecord *arg0, struct coord3d *target_pos, StandTile *target_stan, s16 explosion_type, s32 arg4, s32 player, u8 *rooms, s32 arg7) +{ + s_explosiontype *sp44; + struct Explosion *sp40; + f32 sp3C; + f32 sp38; + s32 var_v0; + PropRecord *sp30; + + sp44 = &g_ExplosionTypes[explosion_type]; + sp40 = NULL; + +#if defined(VERSION_US) + if ((explosion_type != 0x10) && (explosion_type != 1)) + { + g_NumExplosionEntries = 6; + } #endif -#ifndef VERSION_US -GLOBAL_ASM( -.late_rodata -glabel D_800576B0 -.word 0x497423fe /*999999.88*/ -glabel D_800576B4 -.word 0x40c90fdb /*6.2831855*/ -.text -glabel explosionCreate -/* 0D1960 7F09CDF0 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 0D1964 7F09CDF4 AFA7005C */ sw $a3, 0x5c($sp) -/* 0D1968 7F09CDF8 87AE005E */ lh $t6, 0x5e($sp) -/* 0D196C 7F09CDFC 3C088008 */ lui $t0, %hi(ptr_explosion_buf) # $t0, 0x8008 -/* 0D1970 7F09CE00 8D08A1B4 */ lw $t0, %lo(ptr_explosion_buf)($t0) -/* 0D1974 7F09CE04 3C188004 */ lui $t8, %hi(array_explosion_types) # $t8, 0x8004 -/* 0D1978 7F09CE08 AFB10024 */ sw $s1, 0x24($sp) -/* 0D197C 7F09CE0C 271802B4 */ addiu $t8, %lo(array_explosion_types) # addiu $t8, $t8, 0x2b4 -/* 0D1980 7F09CE10 000E7980 */ sll $t7, $t6, 6 -/* 0D1984 7F09CE14 AFB40030 */ sw $s4, 0x30($sp) -/* 0D1988 7F09CE18 AFB3002C */ sw $s3, 0x2c($sp) -/* 0D198C 7F09CE1C 01F88821 */ addu $s1, $t7, $t8 -/* 0D1990 7F09CE20 00A09825 */ move $s3, $a1 -/* 0D1994 7F09CE24 AFBF0034 */ sw $ra, 0x34($sp) -/* 0D1998 7F09CE28 AFB20028 */ sw $s2, 0x28($sp) -/* 0D199C 7F09CE2C AFB00020 */ sw $s0, 0x20($sp) -/* 0D19A0 7F09CE30 AFA40050 */ sw $a0, 0x50($sp) -/* 0D19A4 7F09CE34 AFA60058 */ sw $a2, 0x58($sp) -/* 0D19A8 7F09CE38 AFB1004C */ sw $s1, 0x4c($sp) -/* 0D19AC 7F09CE3C 0000A025 */ move $s4, $zero -/* 0D19B0 7F09CE40 00001025 */ move $v0, $zero -/* 0D19B4 7F09CE44 01001825 */ move $v1, $t0 -.Ljp7F09CE48: -/* 0D19B8 7F09CE48 8C790000 */ lw $t9, ($v1) -/* 0D19BC 7F09CE4C 57200004 */ bnezl $t9, .Ljp7F09CE60 -/* 0D19C0 7F09CE50 244203E0 */ addiu $v0, $v0, 0x3e0 -/* 0D19C4 7F09CE54 10000005 */ b .Ljp7F09CE6C -/* 0D19C8 7F09CE58 0048A021 */ addu $s4, $v0, $t0 -/* 0D19CC 7F09CE5C 244203E0 */ addiu $v0, $v0, 0x3e0 -.Ljp7F09CE60: -/* 0D19D0 7F09CE60 28411740 */ slti $at, $v0, 0x1740 -/* 0D19D4 7F09CE64 1420FFF8 */ bnez $at, .Ljp7F09CE48 -/* 0D19D8 7F09CE68 246303E0 */ addiu $v1, $v1, 0x3e0 -.Ljp7F09CE6C: -/* 0D19DC 7F09CE6C 52800124 */ beql $s4, $zero, .Ljp7F09D300 -/* 0D19E0 7F09CE70 8FBF0034 */ lw $ra, 0x34($sp) -/* 0D19E4 7F09CE74 0FC0E9CC */ jal propAllocate -/* 0D19E8 7F09CE78 00000000 */ nop -/* 0D19EC 7F09CE7C 87AE005E */ lh $t6, 0x5e($sp) -/* 0D19F0 7F09CE80 24010010 */ li $at, 16 -/* 0D19F4 7F09CE84 00403825 */ move $a3, $v0 -/* 0D19F8 7F09CE88 11C10006 */ beq $t6, $at, .Ljp7F09CEA4 -/* 0D19FC 7F09CE8C 3C048006 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8006 -/* 0D1A00 7F09CE90 24010001 */ li $at, 1 -/* 0D1A04 7F09CE94 11C10003 */ beq $t6, $at, .Ljp7F09CEA4 -/* 0D1A08 7F09CE98 240F0006 */ li $t7, 6 -/* 0D1A0C 7F09CE9C 3C018004 */ lui $at, %hi(numExplosionEntries) # $at, 0x8004 -/* 0D1A10 7F09CEA0 AC2F01A0 */ sw $t7, %lo(numExplosionEntries)($at) -.Ljp7F09CEA4: -/* 0D1A14 7F09CEA4 92220039 */ lbu $v0, 0x39($s1) -/* 0D1A18 7F09CEA8 00003025 */ move $a2, $zero -/* 0D1A1C 7F09CEAC 1840000A */ blez $v0, .Ljp7F09CED8 -/* 0D1A20 7F09CEB0 00022C00 */ sll $a1, $v0, 0x10 -/* 0D1A24 7F09CEB4 0005C403 */ sra $t8, $a1, 0x10 -/* 0D1A28 7F09CEB8 03002825 */ move $a1, $t8 -/* 0D1A2C 7F09CEBC 8C843760 */ lw $a0, %lo(g_musicSfxBufferPtr)($a0) -/* 0D1A30 7F09CEC0 0C002386 */ jal sndPlaySfx -/* 0D1A34 7F09CEC4 AFA70038 */ sw $a3, 0x38($sp) -/* 0D1A38 7F09CEC8 00402025 */ move $a0, $v0 -/* 0D1A3C 7F09CECC 0FC14FC3 */ jal chrobjSndCreatePostEventDefault -/* 0D1A40 7F09CED0 02602825 */ move $a1, $s3 -/* 0D1A44 7F09CED4 8FA70038 */ lw $a3, 0x38($sp) -.Ljp7F09CED8: -/* 0D1A48 7F09CED8 10E00108 */ beqz $a3, .Ljp7F09D2FC -/* 0D1A4C 7F09CEDC 8FA60068 */ lw $a2, 0x68($sp) -/* 0D1A50 7F09CEE0 90EE0001 */ lbu $t6, 1($a3) -/* 0D1A54 7F09CEE4 24190007 */ li $t9, 7 -/* 0D1A58 7F09CEE8 A0F90000 */ sb $t9, ($a3) -/* 0D1A5C 7F09CEEC 35CF0002 */ ori $t7, $t6, 2 -/* 0D1A60 7F09CEF0 A0EF0001 */ sb $t7, 1($a3) -/* 0D1A64 7F09CEF4 ACF40004 */ sw $s4, 4($a3) -/* 0D1A68 7F09CEF8 8FB80058 */ lw $t8, 0x58($sp) -/* 0D1A6C 7F09CEFC 240500FF */ li $a1, 255 -/* 0D1A70 7F09CF00 00008025 */ move $s0, $zero -/* 0D1A74 7F09CF04 ACF80014 */ sw $t8, 0x14($a3) -/* 0D1A78 7F09CF08 C6640000 */ lwc1 $f4, ($s3) -/* 0D1A7C 7F09CF0C 240E00FF */ li $t6, 255 -/* 0D1A80 7F09CF10 E4E40008 */ swc1 $f4, 8($a3) -/* 0D1A84 7F09CF14 C6660004 */ lwc1 $f6, 4($s3) -/* 0D1A88 7F09CF18 E4E6000C */ swc1 $f6, 0xc($a3) -/* 0D1A8C 7F09CF1C C6680008 */ lwc1 $f8, 8($s3) -/* 0D1A90 7F09CF20 E4E80010 */ swc1 $f8, 0x10($a3) -/* 0D1A94 7F09CF24 90D90000 */ lbu $t9, ($a2) -/* 0D1A98 7F09CF28 10B9000C */ beq $a1, $t9, .Ljp7F09CF5C -/* 0D1A9C 7F09CF2C 00E01821 */ addu $v1, $a3, $zero -/* 0D1AA0 7F09CF30 00C01021 */ addu $v0, $a2, $zero -/* 0D1AA4 7F09CF34 90C40000 */ lbu $a0, ($a2) -/* 0D1AA8 7F09CF38 24120007 */ li $s2, 7 -/* 0D1AAC 7F09CF3C A064002C */ sb $a0, 0x2c($v1) -.Ljp7F09CF40: -/* 0D1AB0 7F09CF40 90440001 */ lbu $a0, 1($v0) -/* 0D1AB4 7F09CF44 26100001 */ addiu $s0, $s0, 1 -/* 0D1AB8 7F09CF48 24630001 */ addiu $v1, $v1, 1 -/* 0D1ABC 7F09CF4C 10A40003 */ beq $a1, $a0, .Ljp7F09CF5C -/* 0D1AC0 7F09CF50 24420001 */ addiu $v0, $v0, 1 -/* 0D1AC4 7F09CF54 5612FFFA */ bnel $s0, $s2, .Ljp7F09CF40 -/* 0D1AC8 7F09CF58 A064002C */ sb $a0, 0x2c($v1) -.Ljp7F09CF5C: -/* 0D1ACC 7F09CF5C 00F07821 */ addu $t7, $a3, $s0 -/* 0D1AD0 7F09CF60 A1EE002C */ sb $t6, 0x2c($t7) -/* 0D1AD4 7F09CF64 8FB8006C */ lw $t8, 0x6c($sp) -/* 0D1AD8 7F09CF68 24120007 */ li $s2, 7 -/* 0D1ADC 7F09CF6C 00008025 */ move $s0, $zero -/* 0D1AE0 7F09CF70 13000004 */ beqz $t8, .Ljp7F09CF84 -/* 0D1AE4 7F09CF74 00E02025 */ move $a0, $a3 -/* 0D1AE8 7F09CF78 90F90001 */ lbu $t9, 1($a3) -/* 0D1AEC 7F09CF7C 372E0008 */ ori $t6, $t9, 8 -/* 0D1AF0 7F09CF80 A0EE0001 */ sb $t6, 1($a3) -.Ljp7F09CF84: -/* 0D1AF4 7F09CF84 0FC0E9FC */ jal chrpropActivateThisFrame -/* 0D1AF8 7F09CF88 AFA70038 */ sw $a3, 0x38($sp) -/* 0D1AFC 7F09CF8C 0FC0E9C1 */ jal chrpropEnable -/* 0D1B00 7F09CF90 8FA40038 */ lw $a0, 0x38($sp) -/* 0D1B04 7F09CF94 8FA20060 */ lw $v0, 0x60($sp) -/* 0D1B08 7F09CF98 8FA70038 */ lw $a3, 0x38($sp) -/* 0D1B0C 7F09CF9C 8FA80050 */ lw $t0, 0x50($sp) -/* 0D1B10 7F09CFA0 87AF005E */ lh $t7, 0x5e($sp) -/* 0D1B14 7F09CFA4 2418FFFF */ li $t8, -1 -/* 0D1B18 7F09CFA8 A68003C8 */ sh $zero, 0x3c8($s4) -/* 0D1B1C 7F09CFAC A69803CA */ sh $t8, 0x3ca($s4) -/* 0D1B20 7F09CFB0 A28203CD */ sb $v0, 0x3cd($s4) -/* 0D1B24 7F09CFB4 AE870000 */ sw $a3, ($s4) -/* 0D1B28 7F09CFB8 AE880004 */ sw $t0, 4($s4) -/* 0D1B2C 7F09CFBC A28F03CC */ sb $t7, 0x3cc($s4) -/* 0D1B30 7F09CFC0 8FB90064 */ lw $t9, 0x64($sp) -/* 0D1B34 7F09CFC4 3C018005 */ lui $at, %hi(D_800576B0) # $at, 0x8005 -/* 0D1B38 7F09CFC8 10400028 */ beqz $v0, .Ljp7F09D06C -/* 0D1B3C 7F09CFCC A29903CE */ sb $t9, 0x3ce($s4) -/* 0D1B40 7F09CFD0 51000016 */ beql $t0, $zero, .Ljp7F09D02C -/* 0D1B44 7F09CFD4 C6660000 */ lwc1 $f6, ($s3) -/* 0D1B48 7F09CFD8 8D0E0014 */ lw $t6, 0x14($t0) -/* 0D1B4C 7F09CFDC 51C00013 */ beql $t6, $zero, .Ljp7F09D02C -/* 0D1B50 7F09CFE0 C6660000 */ lwc1 $f6, ($s3) -/* 0D1B54 7F09CFE4 C50A0008 */ lwc1 $f10, 8($t0) -/* 0D1B58 7F09CFE8 E68A03D0 */ swc1 $f10, 0x3d0($s4) -/* 0D1B5C 7F09CFEC 8D060010 */ lw $a2, 0x10($t0) -/* 0D1B60 7F09CFF0 8D050008 */ lw $a1, 8($t0) -/* 0D1B64 7F09CFF4 0FC2CD48 */ jal stanGetPositionYValue -/* 0D1B68 7F09CFF8 8D040014 */ lw $a0, 0x14($t0) -/* 0D1B6C 7F09CFFC 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0D1B70 7F09D000 44818000 */ mtc1 $at, $f16 -/* 0D1B74 7F09D004 8FA80050 */ lw $t0, 0x50($sp) -/* 0D1B78 7F09D008 46100480 */ add.s $f18, $f0, $f16 -/* 0D1B7C 7F09D00C E69203D4 */ swc1 $f18, 0x3d4($s4) -/* 0D1B80 7F09D010 C5040010 */ lwc1 $f4, 0x10($t0) -/* 0D1B84 7F09D014 E68403D8 */ swc1 $f4, 0x3d8($s4) -/* 0D1B88 7F09D018 0FC2CEE2 */ jal getTileRoom -/* 0D1B8C 7F09D01C 8D040014 */ lw $a0, 0x14($t0) -/* 0D1B90 7F09D020 10000014 */ b .Ljp7F09D074 -/* 0D1B94 7F09D024 A68203DC */ sh $v0, 0x3dc($s4) -/* 0D1B98 7F09D028 C6660000 */ lwc1 $f6, ($s3) -.Ljp7F09D02C: -/* 0D1B9C 7F09D02C E68603D0 */ swc1 $f6, 0x3d0($s4) -/* 0D1BA0 7F09D030 8E660008 */ lw $a2, 8($s3) -/* 0D1BA4 7F09D034 8E650000 */ lw $a1, ($s3) -/* 0D1BA8 7F09D038 0FC2CD48 */ jal stanGetPositionYValue -/* 0D1BAC 7F09D03C 8FA40058 */ lw $a0, 0x58($sp) -/* 0D1BB0 7F09D040 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0D1BB4 7F09D044 44814000 */ mtc1 $at, $f8 -/* 0D1BB8 7F09D048 00000000 */ nop -/* 0D1BBC 7F09D04C 46080280 */ add.s $f10, $f0, $f8 -/* 0D1BC0 7F09D050 E68A03D4 */ swc1 $f10, 0x3d4($s4) -/* 0D1BC4 7F09D054 C6700008 */ lwc1 $f16, 8($s3) -/* 0D1BC8 7F09D058 E69003D8 */ swc1 $f16, 0x3d8($s4) -/* 0D1BCC 7F09D05C 0FC2CEE2 */ jal getTileRoom -/* 0D1BD0 7F09D060 8FA40058 */ lw $a0, 0x58($sp) -/* 0D1BD4 7F09D064 10000003 */ b .Ljp7F09D074 -/* 0D1BD8 7F09D068 A68203DC */ sh $v0, 0x3dc($s4) -.Ljp7F09D06C: -/* 0D1BDC 7F09D06C C43276E0 */ lwc1 $f18, %lo(D_800576B0)($at) -/* 0D1BE0 7F09D070 E69203D0 */ swc1 $f18, 0x3d0($s4) -.Ljp7F09D074: -/* 0D1BE4 7F09D074 0C002918 */ jal randomGetNext -/* 0D1BE8 7F09D078 00000000 */ nop -/* 0D1BEC 7F09D07C 44822000 */ mtc1 $v0, $f4 -/* 0D1BF0 7F09D080 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1BF4 7F09D084 04410004 */ bgez $v0, .Ljp7F09D098 -/* 0D1BF8 7F09D088 468021A0 */ cvt.s.w $f6, $f4 -/* 0D1BFC 7F09D08C 44814000 */ mtc1 $at, $f8 -/* 0D1C00 7F09D090 00000000 */ nop -/* 0D1C04 7F09D094 46083180 */ add.s $f6, $f6, $f8 -.Ljp7F09D098: -/* 0D1C08 7F09D098 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D1C0C 7F09D09C 44815000 */ mtc1 $at, $f10 -/* 0D1C10 7F09D0A0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D1C14 7F09D0A4 44819000 */ mtc1 $at, $f18 -/* 0D1C18 7F09D0A8 460A3402 */ mul.s $f16, $f6, $f10 -/* 0D1C1C 7F09D0AC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D1C20 7F09D0B0 44814000 */ mtc1 $at, $f8 -/* 0D1C24 7F09D0B4 C62A0010 */ lwc1 $f10, 0x10($s1) -/* 0D1C28 7F09D0B8 46128102 */ mul.s $f4, $f16, $f18 -/* 0D1C2C 7F09D0BC 46082180 */ add.s $f6, $f4, $f8 -/* 0D1C30 7F09D0C0 460A3402 */ mul.s $f16, $f6, $f10 -/* 0D1C34 7F09D0C4 0C002918 */ jal randomGetNext -/* 0D1C38 7F09D0C8 E7B00044 */ swc1 $f16, 0x44($sp) -/* 0D1C3C 7F09D0CC 44829000 */ mtc1 $v0, $f18 -/* 0D1C40 7F09D0D0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1C44 7F09D0D4 04410004 */ bgez $v0, .Ljp7F09D0E8 -/* 0D1C48 7F09D0D8 46809120 */ cvt.s.w $f4, $f18 -/* 0D1C4C 7F09D0DC 44814000 */ mtc1 $at, $f8 -/* 0D1C50 7F09D0E0 00000000 */ nop -/* 0D1C54 7F09D0E4 46082100 */ add.s $f4, $f4, $f8 -.Ljp7F09D0E8: -/* 0D1C58 7F09D0E8 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D1C5C 7F09D0EC 44813000 */ mtc1 $at, $f6 -/* 0D1C60 7F09D0F0 3C018005 */ lui $at, %hi(D_800576B4) # $at, 0x8005 -/* 0D1C64 7F09D0F4 C43076E4 */ lwc1 $f16, %lo(D_800576B4)($at) -/* 0D1C68 7F09D0F8 46062282 */ mul.s $f10, $f4, $f6 -/* 0D1C6C 7F09D0FC 00000000 */ nop -/* 0D1C70 7F09D100 46105302 */ mul.s $f12, $f10, $f16 -/* 0D1C74 7F09D104 0FC160F0 */ jal cosf -/* 0D1C78 7F09D108 E7AC0040 */ swc1 $f12, 0x40($sp) -/* 0D1C7C 7F09D10C C7B20044 */ lwc1 $f18, 0x44($sp) -/* 0D1C80 7F09D110 46120202 */ mul.s $f8, $f0, $f18 -/* 0D1C84 7F09D114 E6880014 */ swc1 $f8, 0x14($s4) -/* 0D1C88 7F09D118 0FC160F3 */ jal sinf -/* 0D1C8C 7F09D11C C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 0D1C90 7F09D120 C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0D1C94 7F09D124 240F0001 */ li $t7, 1 -/* 0D1C98 7F09D128 A68F001C */ sh $t7, 0x1c($s4) -/* 0D1C9C 7F09D12C 46040182 */ mul.s $f6, $f0, $f4 -/* 0D1CA0 7F09D130 E6860018 */ swc1 $f6, 0x18($s4) -/* 0D1CA4 7F09D134 C66A0000 */ lwc1 $f10, ($s3) -/* 0D1CA8 7F09D138 E68A0008 */ swc1 $f10, 8($s4) -/* 0D1CAC 7F09D13C C6700004 */ lwc1 $f16, 4($s3) -/* 0D1CB0 7F09D140 E690000C */ swc1 $f16, 0xc($s4) -/* 0D1CB4 7F09D144 C6720008 */ lwc1 $f18, 8($s3) -/* 0D1CB8 7F09D148 E6920010 */ swc1 $f18, 0x10($s4) -/* 0D1CBC 7F09D14C 86380024 */ lh $t8, 0x24($s1) -/* 0D1CC0 7F09D150 1B00000E */ blez $t8, .Ljp7F09D18C -/* 0D1CC4 7F09D154 00000000 */ nop -/* 0D1CC8 7F09D158 C6280028 */ lwc1 $f8, 0x28($s1) -.Ljp7F09D15C: -/* 0D1CCC 7F09D15C 8E25002C */ lw $a1, 0x2c($s1) -/* 0D1CD0 7F09D160 8E260030 */ lw $a2, 0x30($s1) -/* 0D1CD4 7F09D164 8E270034 */ lw $a3, 0x34($s1) -/* 0D1CD8 7F09D168 02602025 */ move $a0, $s3 -/* 0D1CDC 7F09D16C 0FC27F7E */ jal init_gray_flying_particles -/* 0D1CE0 7F09D170 E7A80010 */ swc1 $f8, 0x10($sp) -/* 0D1CE4 7F09D174 8FB9004C */ lw $t9, 0x4c($sp) -/* 0D1CE8 7F09D178 26100001 */ addiu $s0, $s0, 1 -/* 0D1CEC 7F09D17C 872E0024 */ lh $t6, 0x24($t9) -/* 0D1CF0 7F09D180 020E082A */ slt $at, $s0, $t6 -/* 0D1CF4 7F09D184 5420FFF5 */ bnezl $at, .Ljp7F09D15C -/* 0D1CF8 7F09D188 C6280028 */ lwc1 $f8, 0x28($s1) -.Ljp7F09D18C: -/* 0D1CFC 7F09D18C 0FC26C01 */ jal getPlayerCount -/* 0D1D00 7F09D190 00000000 */ nop -/* 0D1D04 7F09D194 28410002 */ slti $at, $v0, 2 -/* 0D1D08 7F09D198 14200058 */ bnez $at, .Ljp7F09D2FC -/* 0D1D0C 7F09D19C 00003025 */ move $a2, $zero -/* 0D1D10 7F09D1A0 3C0D8008 */ lui $t5, %hi(ptr_smoke_buf) # $t5, 0x8008 -/* 0D1D14 7F09D1A4 3C0B8004 */ lui $t3, %hi(array_smoke_types) # $t3, 0x8004 -/* 0D1D18 7F09D1A8 256B01AC */ addiu $t3, %lo(array_smoke_types) # addiu $t3, $t3, 0x1ac -/* 0D1D1C 7F09D1AC 25ADA1B0 */ addiu $t5, %lo(ptr_smoke_buf) # addiu $t5, $t5, -0x5e50 -/* 0D1D20 7F09D1B0 241F1FE0 */ li $ra, 8160 -/* 0D1D24 7F09D1B4 240C0018 */ li $t4, 24 -/* 0D1D28 7F09D1B8 240A0009 */ li $t2, 9 -/* 0D1D2C 7F09D1BC 24090008 */ li $t1, 8 -/* 0D1D30 7F09D1C0 8DA30000 */ lw $v1, ($t5) -.Ljp7F09D1C4: -/* 0D1D34 7F09D1C4 00662821 */ addu $a1, $v1, $a2 -/* 0D1D38 7F09D1C8 8CAF0000 */ lw $t7, ($a1) -/* 0D1D3C 7F09D1CC 00C33821 */ addu $a3, $a2, $v1 -/* 0D1D40 7F09D1D0 51E00011 */ beql $t7, $zero, .Ljp7F09D218 -/* 0D1D44 7F09D1D4 8CAF0198 */ lw $t7, 0x198($a1) -/* 0D1D48 7F09D1D8 84E20006 */ lh $v0, 6($a3) -/* 0D1D4C 7F09D1DC 5242000E */ beql $s2, $v0, .Ljp7F09D218 -/* 0D1D50 7F09D1E0 8CAF0198 */ lw $t7, 0x198($a1) -/* 0D1D54 7F09D1E4 84E80006 */ lh $t0, 6($a3) -/* 0D1D58 7F09D1E8 5128000B */ beql $t1, $t0, .Ljp7F09D218 -/* 0D1D5C 7F09D1EC 8CAF0198 */ lw $t7, 0x198($a1) -/* 0D1D60 7F09D1F0 51480009 */ beql $t2, $t0, .Ljp7F09D218 -/* 0D1D64 7F09D1F4 8CAF0198 */ lw $t7, 0x198($a1) -/* 0D1D68 7F09D1F8 004C0019 */ multu $v0, $t4 -/* 0D1D6C 7F09D1FC 0000C012 */ mflo $t8 -/* 0D1D70 7F09D200 0178C821 */ addu $t9, $t3, $t8 -/* 0D1D74 7F09D204 872E0000 */ lh $t6, ($t9) -/* 0D1D78 7F09D208 A4EE0004 */ sh $t6, 4($a3) -/* 0D1D7C 7F09D20C 8DA30000 */ lw $v1, ($t5) -/* 0D1D80 7F09D210 00662821 */ addu $a1, $v1, $a2 -/* 0D1D84 7F09D214 8CAF0198 */ lw $t7, 0x198($a1) -.Ljp7F09D218: -/* 0D1D88 7F09D218 00C32021 */ addu $a0, $a2, $v1 -/* 0D1D8C 7F09D21C 51E00011 */ beql $t7, $zero, .Ljp7F09D264 -/* 0D1D90 7F09D220 8CAF0330 */ lw $t7, 0x330($a1) -/* 0D1D94 7F09D224 8482019E */ lh $v0, 0x19e($a0) -/* 0D1D98 7F09D228 24840198 */ addiu $a0, $a0, 0x198 -/* 0D1D9C 7F09D22C 5242000D */ beql $s2, $v0, .Ljp7F09D264 -/* 0D1DA0 7F09D230 8CAF0330 */ lw $t7, 0x330($a1) -/* 0D1DA4 7F09D234 5122000B */ beql $t1, $v0, .Ljp7F09D264 -/* 0D1DA8 7F09D238 8CAF0330 */ lw $t7, 0x330($a1) -/* 0D1DAC 7F09D23C 51420009 */ beql $t2, $v0, .Ljp7F09D264 -/* 0D1DB0 7F09D240 8CAF0330 */ lw $t7, 0x330($a1) -/* 0D1DB4 7F09D244 004C0019 */ multu $v0, $t4 -/* 0D1DB8 7F09D248 0000C012 */ mflo $t8 -/* 0D1DBC 7F09D24C 0178C821 */ addu $t9, $t3, $t8 -/* 0D1DC0 7F09D250 872E0000 */ lh $t6, ($t9) -/* 0D1DC4 7F09D254 A48E0004 */ sh $t6, 4($a0) -/* 0D1DC8 7F09D258 8DA30000 */ lw $v1, ($t5) -/* 0D1DCC 7F09D25C 00662821 */ addu $a1, $v1, $a2 -/* 0D1DD0 7F09D260 8CAF0330 */ lw $t7, 0x330($a1) -.Ljp7F09D264: -/* 0D1DD4 7F09D264 00C32021 */ addu $a0, $a2, $v1 -/* 0D1DD8 7F09D268 51E00011 */ beql $t7, $zero, .Ljp7F09D2B0 -/* 0D1DDC 7F09D26C 8CAF04C8 */ lw $t7, 0x4c8($a1) -/* 0D1DE0 7F09D270 84820336 */ lh $v0, 0x336($a0) -/* 0D1DE4 7F09D274 24840330 */ addiu $a0, $a0, 0x330 -/* 0D1DE8 7F09D278 5242000D */ beql $s2, $v0, .Ljp7F09D2B0 -/* 0D1DEC 7F09D27C 8CAF04C8 */ lw $t7, 0x4c8($a1) -/* 0D1DF0 7F09D280 5122000B */ beql $t1, $v0, .Ljp7F09D2B0 -/* 0D1DF4 7F09D284 8CAF04C8 */ lw $t7, 0x4c8($a1) -/* 0D1DF8 7F09D288 51420009 */ beql $t2, $v0, .Ljp7F09D2B0 -/* 0D1DFC 7F09D28C 8CAF04C8 */ lw $t7, 0x4c8($a1) -/* 0D1E00 7F09D290 004C0019 */ multu $v0, $t4 -/* 0D1E04 7F09D294 0000C012 */ mflo $t8 -/* 0D1E08 7F09D298 0178C821 */ addu $t9, $t3, $t8 -/* 0D1E0C 7F09D29C 872E0000 */ lh $t6, ($t9) -/* 0D1E10 7F09D2A0 A48E0004 */ sh $t6, 4($a0) -/* 0D1E14 7F09D2A4 8DA30000 */ lw $v1, ($t5) -/* 0D1E18 7F09D2A8 00662821 */ addu $a1, $v1, $a2 -/* 0D1E1C 7F09D2AC 8CAF04C8 */ lw $t7, 0x4c8($a1) -.Ljp7F09D2B0: -/* 0D1E20 7F09D2B0 00C32021 */ addu $a0, $a2, $v1 -/* 0D1E24 7F09D2B4 51E0000F */ beql $t7, $zero, .Ljp7F09D2F4 -/* 0D1E28 7F09D2B8 24C60660 */ addiu $a2, $a2, 0x660 -/* 0D1E2C 7F09D2BC 848204CE */ lh $v0, 0x4ce($a0) -/* 0D1E30 7F09D2C0 248404C8 */ addiu $a0, $a0, 0x4c8 -/* 0D1E34 7F09D2C4 5242000B */ beql $s2, $v0, .Ljp7F09D2F4 -/* 0D1E38 7F09D2C8 24C60660 */ addiu $a2, $a2, 0x660 -/* 0D1E3C 7F09D2CC 51220009 */ beql $t1, $v0, .Ljp7F09D2F4 -/* 0D1E40 7F09D2D0 24C60660 */ addiu $a2, $a2, 0x660 -/* 0D1E44 7F09D2D4 51420007 */ beql $t2, $v0, .Ljp7F09D2F4 -/* 0D1E48 7F09D2D8 24C60660 */ addiu $a2, $a2, 0x660 -/* 0D1E4C 7F09D2DC 004C0019 */ multu $v0, $t4 -/* 0D1E50 7F09D2E0 0000C012 */ mflo $t8 -/* 0D1E54 7F09D2E4 0178C821 */ addu $t9, $t3, $t8 -/* 0D1E58 7F09D2E8 872E0000 */ lh $t6, ($t9) -/* 0D1E5C 7F09D2EC A48E0004 */ sh $t6, 4($a0) -/* 0D1E60 7F09D2F0 24C60660 */ addiu $a2, $a2, 0x660 -.Ljp7F09D2F4: -/* 0D1E64 7F09D2F4 54DFFFB3 */ bnel $a2, $ra, .Ljp7F09D1C4 -/* 0D1E68 7F09D2F8 8DA30000 */ lw $v1, ($t5) -.Ljp7F09D2FC: -/* 0D1E6C 7F09D2FC 8FBF0034 */ lw $ra, 0x34($sp) -.Ljp7F09D300: -/* 0D1E70 7F09D300 0014102B */ sltu $v0, $zero, $s4 -/* 0D1E74 7F09D304 8FB40030 */ lw $s4, 0x30($sp) -/* 0D1E78 7F09D308 8FB00020 */ lw $s0, 0x20($sp) -/* 0D1E7C 7F09D30C 8FB10024 */ lw $s1, 0x24($sp) -/* 0D1E80 7F09D310 8FB20028 */ lw $s2, 0x28($sp) -/* 0D1E84 7F09D314 8FB3002C */ lw $s3, 0x2c($sp) -/* 0D1E88 7F09D318 03E00008 */ jr $ra -/* 0D1E8C 7F09D31C 27BD0050 */ addiu $sp, $sp, 0x50 -) + for (var_v0 = 0; var_v0 < EXPLOSION_BUFFER_LEN; var_v0++) + { + if (g_ExplosionBuffer[var_v0].prop == NULL) + { + sp40 = &g_ExplosionBuffer[var_v0]; + break; + } + } + + if (sp40 != NULL) + { + sp30 = chrpropAllocate(); + +#if defined(VERSION_JP) || defined(VERSION_EU) + if ((explosion_type != 0x10) && (explosion_type != 1)) + { + g_NumExplosionEntries = 6; + } #endif + if ((s32) sp44->sndID > 0) + { + chrobjSndCreatePostEventDefault(sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, (s16) sp44->sndID, NULL), target_pos); + } + if (sp30 != NULL) + { + sp30->type = PROP_TYPE_EXPLOSION; + sp30->flags |= PROPFLAG_ONSCREEN; + sp30->explosion = sp40; + var_v0 = 0; + sp30->stan = target_stan; + sp30->pos.f[0] = target_pos->f[0]; + sp30->pos.f[1] = target_pos->f[1]; + sp30->pos.f[2] = target_pos->f[2]; + while (rooms[var_v0] != 0xff && var_v0 < 7) + { + sp30->rooms[var_v0] = rooms[var_v0]; + var_v0++; + } + + sp30->rooms[var_v0] = 0xFF; + + if (arg7 != 0) + { + sp30->flags |= PROPFLAG_00000008; + } + + chrpropActivateThisFrame(sp30); + chrpropEnable(sp30); + + sp40->explosion_type = explosion_type; + sp40->age = 0; + sp40->unk3CA = -1; + sp40->unk3CD = (u8) arg4; + sp40->prop = sp30; + sp40->source = arg0; + sp40->player = (s8) player; + + if (arg4 != 0) + { + if ((arg0 != NULL) && (arg0->stan != NULL)) + { + sp40->pos.f[0] = arg0->pos.f[0]; + sp40->pos.f[1] = stanGetPositionYValue(arg0->stan, arg0->pos.f[0], arg0->pos.f[2]) + 4.0f; + sp40->pos.f[2] = arg0->pos.f[2]; + sp40->room = getTileRoom(arg0->stan); + } + else + { + sp40->pos.f[0] = target_pos->f[0]; + sp40->pos.f[1] = stanGetPositionYValue(target_stan, target_pos->f[0], target_pos->f[2]) + 4.0f; + sp40->pos.f[2] = target_pos->f[2]; + sp40->room = getTileRoom(target_stan); + } + } + else + { + sp40->pos.f[0] = 999999.9f; + } + + sp3C = ((RANDOMFRAC() * 0.5f) + 1.0f) * sp44->explosion_size; + sp38 = RANDOMFRAC() * M_TAU_F; + + sp40->parts[0].size = cosf(sp38) * sp3C; + sp40->parts[0].rot = sinf(sp38) * sp3C; + sp40->parts[0].frame = 1; + sp40->parts[0].pos.f[0] = target_pos->f[0]; + sp40->parts[0].pos.f[1] = target_pos->f[1]; + sp40->parts[0].pos.f[2] = target_pos->f[2]; + + for (var_v0 = 0; var_v0 < sp44->numshrapnelbits; var_v0++) + { + explosionInitFlyingParticles(target_pos, sp44->shrapnel_scatter_dist, sp44->shrapnel_hvel, sp44->shrapnel_vvel, sp44->shrapnel_size); + } + + if (getPlayerCount() >= 2) + { + for (var_v0 = 0; var_v0 < SMOKE_BUFFER_LEN; var_v0++) + { + if (g_SmokeBuffer[var_v0].prop != NULL) + { + struct Smoke *smoke = &g_SmokeBuffer[var_v0]; + + if (smoke->smoke_type != 7 && smoke->smoke_type != 8 && smoke->smoke_type != 9) + { + smoke->duration = g_SmokeTypes[smoke->smoke_type].duration; + } + } + } + } + } + } + +#if defined(VERSION_JP) || defined(VERSION_EU) + return sp40 != 0; #endif +} void setSixExplosionAndSmokeEntries(void) { - numExplosionEntries = 6; - numSmokeEntries = 6; + g_NumExplosionEntries = 6; + g_NumSmokeEntries = 6; } -void sub_GAME_7F09C7C4(coord3d* arg0, coord3d* arg1, coord3d* arg2) +void explosionScreenShake(coord3d* source_pos, coord3d* source_mag, coord3d* result) { PropRecord* explosion_prop; f32 angle; @@ -1000,869 +400,436 @@ void sub_GAME_7F09C7C4(coord3d* arg0, coord3d* arg1, coord3d* arg2) f32 dist; f32 dist2; - if (numExplosionEntries == 0) + if (g_NumExplosionEntries == 0) { viShake(0.0f); return; } angle = 0.8f; - mag_scalar_x = (cosf(angle) * arg1->x) - (sinf(angle) * arg1->f[2]); - mag_scalar_z = (sinf(angle) * arg1->x) + (cosf(angle) * arg1->f[2]); + mag_scalar_x = (cosf(angle) * source_mag->x) - (sinf(angle) * source_mag->f[2]); + mag_scalar_z = (sinf(angle) * source_mag->x) + (cosf(angle) * source_mag->f[2]); explosion_mag = 0.0f; for (i = 0; i < EXPLOSION_BUFFER_LEN; i++) { - explosion_prop = ptr_explosion_buf[i].prop; + explosion_prop = g_ExplosionBuffer[i].prop; if (explosion_prop != NULL) { - diff_x = explosion_prop->pos.x - arg0->x; - diff_y = explosion_prop->pos.y - arg0->y; - diff_z = explosion_prop->pos.z - arg0->z; + diff_x = explosion_prop->pos.x - source_pos->x; + diff_y = explosion_prop->pos.y - source_pos->y; + diff_z = explosion_prop->pos.z - source_pos->z; #ifndef VERSION_US dist = sqrtf((diff_x * diff_x) + (diff_y * diff_y) + (diff_z * diff_z)); if (dist == 0.0f) { dist = 0.0001f; } - dist2 = array_explosion_types[ptr_explosion_buf[i].unk3CC].explosion_size / dist; + dist2 = g_ExplosionTypes[g_ExplosionBuffer[i].explosion_type].explosion_size / dist; #else dist = (diff_x * diff_x) + (diff_y * diff_y) + (diff_z * diff_z); - dist2 = array_explosion_types[ptr_explosion_buf[i].unk3CC].explosion_size / sqrtf(dist); + dist2 = g_ExplosionTypes[g_ExplosionBuffer[i].explosion_type].explosion_size / sqrtf(dist); #endif explosion_mag += dist2 * 15.0f; } } - if (numSmokeEntries > 0) + if (g_NumSmokeEntries > 0) { - numSmokeEntries--; + g_NumSmokeEntries--; explosion_mag++; } - numExplosionEntries--; - if (numExplosionEntries & 2) + g_NumExplosionEntries--; + if (g_NumExplosionEntries & 2) { - arg2->y = explosion_mag; + result->y = explosion_mag; explosion_mag = -explosion_mag; } else { - arg2->y = -explosion_mag; + result->y = -explosion_mag; } - arg2->x = explosion_mag * mag_scalar_x; - arg2->z = explosion_mag * mag_scalar_z; + result->x = explosion_mag * mag_scalar_x; + result->z = explosion_mag * mag_scalar_z; - viShake((f32) numExplosionEntries * explosion_mag); + viShake((f32) g_NumExplosionEntries * explosion_mag); +} + +/*** + * see Perfect Dark void explosionInflictDamage(struct prop *expprop) + * Address 0x7F09C9D8 (NTSC) +*/ +void explosionInflictDamage(PropRecord *arg0, f32 horiz_range, f32 vert_range) +{ + s32 spE0[8]; + PropRecord *temp_s0; + s16 *var_s3; + s_explosiontype *temp_s6; + struct Explosion *temp_s2; + + temp_s2 = arg0->explosion; + temp_s6 = &g_ExplosionTypes[temp_s2->explosion_type]; + + if (temp_s2->age >= temp_s2->unk3CA) + { + chraiGetPropRoomIds(arg0, &spE0[0]); + roomGetProps(&spE0[0]); + + for (var_s3 = ptr_list_object_lookup_indices; *var_s3 >= 0; var_s3++) + { + temp_s0 = &pos_data_entry[*var_s3]; + + if ((temp_s0 != temp_s2->source) && (temp_s0->timetoregen == 0)) + { + if (temp_s0->type == PROP_TYPE_OBJ || temp_s0->type == PROP_TYPE_WEAPON || temp_s0->type == PROP_TYPE_DOOR) + { + struct ObjectRecord *spCC; + f32 xdist; + f32 ydist; + f32 zdist; + + spCC = temp_s0->obj; + xdist = spCC->runtime_pos.f[0] - arg0->pos.f[0]; + ydist = spCC->runtime_pos.f[1] - arg0->pos.f[1]; + zdist = spCC->runtime_pos.f[2] - arg0->pos.f[2]; + + if ((xdist <= horiz_range) + && (-horiz_range <= xdist) + && (ydist <= vert_range) + && (-vert_range <= ydist) + && (zdist <= horiz_range) + && (-horiz_range <= zdist)) + { + f32 xfrac; + f32 yfrac; + f32 zfrac; + f32 minfrac; + + xfrac = xdist / horiz_range; + yfrac = ydist / vert_range; + zfrac = zdist / horiz_range; + + if (xfrac < 0.0f) + { + xfrac = -xfrac; + } + + if (yfrac < 0.0f) + { + yfrac = -yfrac; + } + + if (zfrac < 0.0f) + { + zfrac = -zfrac; + } + + xfrac = 1.0f - xfrac; + yfrac = 1.0f - yfrac; + zfrac = 1.0f - zfrac; + + minfrac = xfrac; + + if (yfrac < minfrac) + { + minfrac = yfrac; + } + + if (zfrac < minfrac) + { + minfrac = zfrac; + } + + minfrac = minfrac * EXPLOSION_DAMAGE_SCALER * temp_s6->damage; + + if (!(spCC->runtime_bitflags & 0x1000) && !(spCC->flags2 & 0x200400)) + { + maybe_detonate_object_and_its_children( + temp_s0, + ((RANDOMFRAC() * 0.5f) + 1.0f) * minfrac, + &spCC->runtime_pos, + 0x1D, + (s32) temp_s2->player); + } + } + + } + else if (temp_s0->type == PROP_TYPE_CHR || temp_s0->type == PROP_TYPE_VIEWER) + { + f32 xdist; + f32 ydist; + f32 zdist; + + xdist = temp_s0->pos.f[0] - arg0->pos.f[0]; + ydist = temp_s0->pos.f[1] - arg0->pos.f[1]; + zdist = temp_s0->pos.f[2] - arg0->pos.f[2]; + + if ((xdist <= horiz_range) + && (-horiz_range <= xdist) + && (ydist <= vert_range) + && (-vert_range <= ydist) + && (zdist <= horiz_range) + && (-horiz_range <= zdist)) + { + f32 xfrac; + f32 yfrac; + f32 zfrac; + f32 minfrac; + + xfrac = xdist / horiz_range; + yfrac = ydist / vert_range; + zfrac = zdist / horiz_range; + + if (xfrac < 0.0f) + { + xfrac = -xfrac; + } + + if (yfrac < 0.0f) + { + yfrac = -yfrac; + } + + if (zfrac < 0.0f) + { + zfrac = -zfrac; + } + + xfrac = 1.0f - xfrac; + yfrac = 1.0f - yfrac; + zfrac = 1.0f - zfrac; + + minfrac = xfrac; + + if (yfrac < minfrac) + { + minfrac = yfrac; + } + + if (zfrac < minfrac) + { + minfrac = zfrac; + } + + minfrac *= minfrac; + minfrac = minfrac * EXPLOSION_DAMAGE_SCALER * temp_s6->damage; + + if (temp_s0->type == PROP_TYPE_CHR) + { + chrlvExplosionDamage(temp_s0->chr, &arg0->pos, minfrac, 1); + } + else + { + s32 sp90; + + if ((xdist != 0.0f) || (zdist != 0.0f)) + { + f32 temp_f2_3 = sqrtf((xdist * xdist) + (zdist * zdist)); + xdist *= 1.0f / temp_f2_3; + zdist *= 1.0f / temp_f2_3; + } + + sp90 = get_cur_playernum(); + set_cur_player(getPlayerPointerIndex(temp_s0)); + + if (getPlayerCount() == 1) + { + minfrac *= g_SpExplosionDamageMult; + } + + if (isBondInTank() == 1) + { + minfrac *= 2.0f; + } + + record_damage_kills(minfrac, xdist, zdist, (s32) temp_s2->player, 1); + set_cur_player(sp90); + } + } + } + } + } + + temp_s2->unk3CA = temp_s2->age + (temp_s6->duration >> 2); + } } -#ifdef NONMATCHING -void sub_GAME_7F09C9D8(void) { + + +/*** + * see Perfect Dark u32 explosionTick(struct prop *prop) + * + * NTSC address 0x7F09CEE8. +*/ +s32 explosionTick(PropRecord* arg0) +{ + s32 var_s4; + s32 j; + s32 k; + + f32 hrange; + f32 vrange; + f32 temp_f20; + f32 temp_f12; + + struct Explosion *exp; + s_explosiontype *explosiontype; + + f32 lvupdate; + s32 sp9C; + struct coord3d sp90; + struct coord3d sp84; + + + exp = arg0->explosion; + explosiontype = &g_ExplosionTypes[exp->explosion_type]; + + if (g_ClockTimer == 0) + { + return 0; + } + + lvupdate = (g_ClockTimer < 15) ? (f32) g_ClockTimer : 15.0f; + + if ((exp->age >= 8) && (exp->age < explosiontype->duration)) + { + hrange = explosiontype->hrange + (explosiontype->hchange * exp->age); + vrange = explosiontype->vrange + (explosiontype->vchange * exp->age); + + if (exp->explosion_type == 0xE) + { + if (exp->age < 0x20) + { + arg0->pos.f[1] += 10.0f * lvupdate; + } + + if (exp->age >= 0x21) + { + hrange = (exp->age * 3.0f) + 40.0f; + + if (hrange > 300.0f) + { + hrange = 300.0f; + } + + vrange = 20.0f; + } + } + + sp9C = (s32) (((f32)explosiontype->propagationrate * (f32)exp->age) / (f32)explosiontype->duration) + 1; + for (var_s4 = 0; var_s4 < sp9C; var_s4++) + { + for (j=0; jparts[j].frame == 0) + { + exp->parts[j].frame = 1; + + exp->parts[j].pos.f[0] = arg0->pos.f[0] + ((RANDOMFRAC() - 0.5f) * hrange); + exp->parts[j].pos.f[1] = arg0->pos.f[1] + ((RANDOMFRAC() - 0.5f) * vrange); + exp->parts[j].pos.f[2] = arg0->pos.f[2] + ((RANDOMFRAC() - 0.5f) * hrange); + + temp_f20 = ((RANDOMFRAC() * 0.5f) + 1.0f) * explosiontype->explosion_size; + temp_f12 = RANDOMFRAC() * M_TAU_F; + + exp->parts[j].size = cosf(temp_f12) * temp_f20; + exp->parts[j].rot = sinf(temp_f12) * temp_f20; + + break; + } + } + } + + // see Perfect Dark void explosionGetBboxAtFrame(struct coord *lower, struct coord *upper, s32 frame, struct prop *prop) + + hrange = (hrange * 0.5f) + explosiontype->explosion_size * 1.5f; + vrange = (vrange * 0.5f) + explosiontype->explosion_size * 1.5f; + + sp90.f[0] = arg0->pos.f[0] - hrange; + sp90.f[1] = arg0->pos.f[1] - vrange; + sp90.f[2] = arg0->pos.f[2] - hrange; + + sp84.f[0] = arg0->pos.f[0] + hrange; + sp84.f[1] = arg0->pos.f[1] + vrange; + sp84.f[2] = arg0->pos.f[2] + hrange; + + // end explosionGetBboxAtFrame. + + sub_GAME_7F03E27C(arg0, &sp90, &sp84, hrange); + + vrange = explosiontype->explosion_range + (((explosiontype->dmg_range - explosiontype->explosion_range) * (f32) exp->age) / (f32) explosiontype->duration); + explosionInflictDamage(arg0, vrange, vrange); + } + + for (k = 0; k < (s32) lvupdate; k++) + { + exp->age++; + + for (j=0; jparts[j].frame > 0) + { + exp->parts[j].frame++; + } + } + + if (((exp->age == 0xF) && (exp->explosion_type == 0xE)) + || (((exp->age + 0x14) == (s16) explosiontype->duration) && (exp->explosion_type != 0xE))) + { + if ((exp->source != NULL) && (exp->source->stan != NULL)) + { + if (exp->source->type == PROP_TYPE_OBJ) + { + struct ObjectRecord *obj = exp->source->obj; + explosionCreateSmoke(&obj->runtime_pos, exp->source->stan, (s16) explosiontype->smoketype, exp->source->rooms, (arg0->flags & 8) != 0); + } + else + { + explosionCreateSmoke(&exp->source->pos, exp->source->stan, (s16) explosiontype->smoketype, exp->source->rooms, (arg0->flags & 8) != 0); + } + } + else + { + explosionCreateSmoke(&arg0->pos, arg0->stan, (s16) explosiontype->smoketype, arg0->rooms, (arg0->flags & 8) != 0); + } + } + + if ((exp->age == ((s16) explosiontype->duration >> 1)) && (exp->unk3CD != 0)) + { + explosionScorchTick(&exp->pos, explosiontype->explosion_size * 4.0f, exp->room); + } + } + + if (exp->age >= explosiontype->duration + (s32) (16.0f * explosiontype->flareanimspeed)) + { + exp->prop = NULL; + return 1; + } + + return 0; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F09C9D8 -/* 0D1508 7F09C9D8 27BDFF00 */ addiu $sp, $sp, -0x100 -/* 0D150C 7F09C9DC AFBF006C */ sw $ra, 0x6c($sp) -/* 0D1510 7F09C9E0 AFB60068 */ sw $s6, 0x68($sp) -/* 0D1514 7F09C9E4 AFB50064 */ sw $s5, 0x64($sp) -/* 0D1518 7F09C9E8 AFB40060 */ sw $s4, 0x60($sp) -/* 0D151C 7F09C9EC AFB3005C */ sw $s3, 0x5c($sp) -/* 0D1520 7F09C9F0 AFB20058 */ sw $s2, 0x58($sp) -/* 0D1524 7F09C9F4 AFB10054 */ sw $s1, 0x54($sp) -/* 0D1528 7F09C9F8 AFB00050 */ sw $s0, 0x50($sp) -/* 0D152C 7F09C9FC F7BE0048 */ sdc1 $f30, 0x48($sp) -/* 0D1530 7F09CA00 F7BC0040 */ sdc1 $f28, 0x40($sp) -/* 0D1534 7F09CA04 F7BA0038 */ sdc1 $f26, 0x38($sp) -/* 0D1538 7F09CA08 F7B80030 */ sdc1 $f24, 0x30($sp) -/* 0D153C 7F09CA0C F7B60028 */ sdc1 $f22, 0x28($sp) -/* 0D1540 7F09CA10 F7B40020 */ sdc1 $f20, 0x20($sp) -/* 0D1544 7F09CA14 AFA60108 */ sw $a2, 0x108($sp) -/* 0D1548 7F09CA18 8C920004 */ lw $s2, 4($a0) -/* 0D154C 7F09CA1C 3C188004 */ lui $t8, %hi(array_explosion_types) -/* 0D1550 7F09CA20 4485E000 */ mtc1 $a1, $f28 -/* 0D1554 7F09CA24 824E03CC */ lb $t6, 0x3cc($s2) -/* 0D1558 7F09CA28 865903C8 */ lh $t9, 0x3c8($s2) -/* 0D155C 7F09CA2C 864803CA */ lh $t0, 0x3ca($s2) -/* 0D1560 7F09CA30 27180284 */ addiu $t8, %lo(array_explosion_types) # addiu $t8, $t8, 0x284 -/* 0D1564 7F09CA34 000E7980 */ sll $t7, $t6, 6 -/* 0D1568 7F09CA38 0328082A */ slt $at, $t9, $t0 -/* 0D156C 7F09CA3C 00808825 */ move $s1, $a0 -/* 0D1570 7F09CA40 14200119 */ bnez $at, .L7F09CEA8 -/* 0D1574 7F09CA44 01F8B021 */ addu $s6, $t7, $t8 -/* 0D1578 7F09CA48 27B000E0 */ addiu $s0, $sp, 0xe0 -/* 0D157C 7F09CA4C 0FC0F2E3 */ jal chraiGetPropRoomIds -/* 0D1580 7F09CA50 02002825 */ move $a1, $s0 -/* 0D1584 7F09CA54 0FC0F8FF */ jal roomGetProps -/* 0D1588 7F09CA58 02002025 */ move $a0, $s0 -/* 0D158C 7F09CA5C 3C138007 */ lui $s3, %hi(ptr_list_object_lookup_indices) -/* 0D1590 7F09CA60 8E739C30 */ lw $s3, %lo(ptr_list_object_lookup_indices)($s3) -/* 0D1594 7F09CA64 24150003 */ li $s5, 3 -/* 0D1598 7F09CA68 86620000 */ lh $v0, ($s3) -/* 0D159C 7F09CA6C 0442010A */ bltzl $v0, .L7F09CE98 -/* 0D15A0 7F09CA70 86C9001C */ lh $t1, 0x1c($s6) -/* 0D15A4 7F09CA74 4480F000 */ mtc1 $zero, $f30 -/* 0D15A8 7F09CA78 24140001 */ li $s4, 1 -/* 0D15AC 7F09CA7C 00024880 */ sll $t1, $v0, 2 -.L7F09CA80: -/* 0D15B0 7F09CA80 01224823 */ subu $t1, $t1, $v0 -/* 0D15B4 7F09CA84 00094880 */ sll $t1, $t1, 2 -/* 0D15B8 7F09CA88 8E4B0004 */ lw $t3, 4($s2) -/* 0D15BC 7F09CA8C 01224821 */ addu $t1, $t1, $v0 -/* 0D15C0 7F09CA90 3C0A8007 */ lui $t2, %hi(pos_data_entry) -/* 0D15C4 7F09CA94 254A9C38 */ addiu $t2, %lo(pos_data_entry) # addiu $t2, $t2, -0x63c8 -/* 0D15C8 7F09CA98 00094880 */ sll $t1, $t1, 2 -/* 0D15CC 7F09CA9C 012A8021 */ addu $s0, $t1, $t2 -/* 0D15D0 7F09CAA0 520B00F9 */ beql $s0, $t3, .L7F09CE88 -/* 0D15D4 7F09CAA4 86620002 */ lh $v0, 2($s3) -/* 0D15D8 7F09CAA8 860C0002 */ lh $t4, 2($s0) -/* 0D15DC 7F09CAAC 558000F6 */ bnezl $t4, .L7F09CE88 -/* 0D15E0 7F09CAB0 86620002 */ lh $v0, 2($s3) -/* 0D15E4 7F09CAB4 92020000 */ lbu $v0, ($s0) -/* 0D15E8 7F09CAB8 24010004 */ li $at, 4 -/* 0D15EC 7F09CABC 52820006 */ beql $s4, $v0, .L7F09CAD8 -/* 0D15F0 7F09CAC0 8E030004 */ lw $v1, 4($s0) -/* 0D15F4 7F09CAC4 10410003 */ beq $v0, $at, .L7F09CAD4 -/* 0D15F8 7F09CAC8 24010002 */ li $at, 2 -/* 0D15FC 7F09CACC 1441006B */ bne $v0, $at, .L7F09CC7C -/* 0D1600 7F09CAD0 00000000 */ nop -.L7F09CAD4: -/* 0D1604 7F09CAD4 8E030004 */ lw $v1, 4($s0) -.L7F09CAD8: -/* 0D1608 7F09CAD8 C6260008 */ lwc1 $f6, 8($s1) -/* 0D160C 7F09CADC C62A000C */ lwc1 $f10, 0xc($s1) -/* 0D1610 7F09CAE0 C4640058 */ lwc1 $f4, 0x58($v1) -/* 0D1614 7F09CAE4 C468005C */ lwc1 $f8, 0x5c($v1) -/* 0D1618 7F09CAE8 46062481 */ sub.s $f18, $f4, $f6 -/* 0D161C 7F09CAEC C6260010 */ lwc1 $f6, 0x10($s1) -/* 0D1620 7F09CAF0 C4640060 */ lwc1 $f4, 0x60($v1) -/* 0D1624 7F09CAF4 460A4501 */ sub.s $f20, $f8, $f10 -/* 0D1628 7F09CAF8 461C903E */ c.le.s $f18, $f28 -/* 0D162C 7F09CAFC 46062581 */ sub.s $f22, $f4, $f6 -/* 0D1630 7F09CB00 4500005C */ bc1f .L7F09CC74 -/* 0D1634 7F09CB04 00000000 */ nop -/* 0D1638 7F09CB08 4600E007 */ neg.s $f0, $f28 -/* 0D163C 7F09CB0C C7A80108 */ lwc1 $f8, 0x108($sp) -/* 0D1640 7F09CB10 4612003E */ c.le.s $f0, $f18 -/* 0D1644 7F09CB14 00000000 */ nop -/* 0D1648 7F09CB18 45000056 */ bc1f .L7F09CC74 -/* 0D164C 7F09CB1C 00000000 */ nop -/* 0D1650 7F09CB20 4608A03E */ c.le.s $f20, $f8 -/* 0D1654 7F09CB24 00000000 */ nop -/* 0D1658 7F09CB28 45000052 */ bc1f .L7F09CC74 -/* 0D165C 7F09CB2C 00000000 */ nop -/* 0D1660 7F09CB30 46004287 */ neg.s $f10, $f8 -/* 0D1664 7F09CB34 4614503E */ c.le.s $f10, $f20 -/* 0D1668 7F09CB38 00000000 */ nop -/* 0D166C 7F09CB3C 4500004D */ bc1f .L7F09CC74 -/* 0D1670 7F09CB40 00000000 */ nop -/* 0D1674 7F09CB44 461CB03E */ c.le.s $f22, $f28 -/* 0D1678 7F09CB48 00000000 */ nop -/* 0D167C 7F09CB4C 45000049 */ bc1f .L7F09CC74 -/* 0D1680 7F09CB50 00000000 */ nop -/* 0D1684 7F09CB54 4616003E */ c.le.s $f0, $f22 -/* 0D1688 7F09CB58 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D168C 7F09CB5C 45000045 */ bc1f .L7F09CC74 -/* 0D1690 7F09CB60 00000000 */ nop -/* 0D1694 7F09CB64 461C9083 */ div.s $f2, $f18, $f28 -/* 0D1698 7F09CB68 C6DA003C */ lwc1 $f26, 0x3c($s6) -/* 0D169C 7F09CB6C 4608A383 */ div.s $f14, $f20, $f8 -/* 0D16A0 7F09CB70 46001006 */ mov.s $f0, $f2 -/* 0D16A4 7F09CB74 461E103C */ c.lt.s $f2, $f30 -/* 0D16A8 7F09CB78 461CB603 */ div.s $f24, $f22, $f28 -/* 0D16AC 7F09CB7C 4481B000 */ mtc1 $at, $f22 -/* 0D16B0 7F09CB80 46007306 */ mov.s $f12, $f14 -/* 0D16B4 7F09CB84 45000002 */ bc1f .L7F09CB90 -/* 0D16B8 7F09CB88 4600C406 */ mov.s $f16, $f24 -/* 0D16BC 7F09CB8C 46001007 */ neg.s $f0, $f2 -.L7F09CB90: -/* 0D16C0 7F09CB90 461E703C */ c.lt.s $f14, $f30 -/* 0D16C4 7F09CB94 4600B501 */ sub.s $f20, $f22, $f0 -/* 0D16C8 7F09CB98 45020003 */ bc1fl .L7F09CBA8 -/* 0D16CC 7F09CB9C 461EC03C */ c.lt.s $f24, $f30 -/* 0D16D0 7F09CBA0 46007307 */ neg.s $f12, $f14 -/* 0D16D4 7F09CBA4 461EC03C */ c.lt.s $f24, $f30 -.L7F09CBA8: -/* 0D16D8 7F09CBA8 460CB301 */ sub.s $f12, $f22, $f12 -/* 0D16DC 7F09CBAC 45020003 */ bc1fl .L7F09CBBC -/* 0D16E0 7F09CBB0 4614603C */ c.lt.s $f12, $f20 -/* 0D16E4 7F09CBB4 4600C407 */ neg.s $f16, $f24 -/* 0D16E8 7F09CBB8 4614603C */ c.lt.s $f12, $f20 -.L7F09CBBC: -/* 0D16EC 7F09CBBC 4610B401 */ sub.s $f16, $f22, $f16 -/* 0D16F0 7F09CBC0 45020003 */ bc1fl .L7F09CBD0 -/* 0D16F4 7F09CBC4 4614803C */ c.lt.s $f16, $f20 -/* 0D16F8 7F09CBC8 46006506 */ mov.s $f20, $f12 -/* 0D16FC 7F09CBCC 4614803C */ c.lt.s $f16, $f20 -.L7F09CBD0: -/* 0D1700 7F09CBD0 00000000 */ nop -/* 0D1704 7F09CBD4 45020003 */ bc1fl .L7F09CBE4 -/* 0D1708 7F09CBD8 8C6D0064 */ lw $t5, 0x64($v1) -/* 0D170C 7F09CBDC 46008506 */ mov.s $f20, $f16 -/* 0D1710 7F09CBE0 8C6D0064 */ lw $t5, 0x64($v1) -.L7F09CBE4: -/* 0D1714 7F09CBE4 461AA502 */ mul.s $f20, $f20, $f26 -/* 0D1718 7F09CBE8 31AE1000 */ andi $t6, $t5, 0x1000 -/* 0D171C 7F09CBEC 15C00021 */ bnez $t6, .L7F09CC74 -/* 0D1720 7F09CBF0 00000000 */ nop -/* 0D1724 7F09CBF4 8C6F000C */ lw $t7, 0xc($v1) -/* 0D1728 7F09CBF8 3C010020 */ lui $at, (0x00200400 >> 16) # lui $at, 0x20 -/* 0D172C 7F09CBFC 34210400 */ ori $at, (0x00200400 & 0xFFFF) # ori $at, $at, 0x400 -/* 0D1730 7F09CC00 01E1C024 */ and $t8, $t7, $at -/* 0D1734 7F09CC04 1700001B */ bnez $t8, .L7F09CC74 -/* 0D1738 7F09CC08 00000000 */ nop -/* 0D173C 7F09CC0C 0C002914 */ jal randomGetNext -/* 0D1740 7F09CC10 AFA300CC */ sw $v1, 0xcc($sp) -/* 0D1744 7F09CC14 44822000 */ mtc1 $v0, $f4 -/* 0D1748 7F09CC18 8FA300CC */ lw $v1, 0xcc($sp) -/* 0D174C 7F09CC1C 02002025 */ move $a0, $s0 -/* 0D1750 7F09CC20 04410005 */ bgez $v0, .L7F09CC38 -/* 0D1754 7F09CC24 468021A0 */ cvt.s.w $f6, $f4 -/* 0D1758 7F09CC28 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D175C 7F09CC2C 44815000 */ mtc1 $at, $f10 -/* 0D1760 7F09CC30 00000000 */ nop -/* 0D1764 7F09CC34 460A3180 */ add.s $f6, $f6, $f10 -.L7F09CC38: -/* 0D1768 7F09CC38 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D176C 7F09CC3C 44814000 */ mtc1 $at, $f8 -/* 0D1770 7F09CC40 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D1774 7F09CC44 44815000 */ mtc1 $at, $f10 -/* 0D1778 7F09CC48 46083102 */ mul.s $f4, $f6, $f8 -/* 0D177C 7F09CC4C 825903CE */ lb $t9, 0x3ce($s2) -/* 0D1780 7F09CC50 24660058 */ addiu $a2, $v1, 0x58 -/* 0D1784 7F09CC54 2407001D */ li $a3, 29 -/* 0D1788 7F09CC58 AFB90010 */ sw $t9, 0x10($sp) -/* 0D178C 7F09CC5C 460A2182 */ mul.s $f6, $f4, $f10 -/* 0D1790 7F09CC60 46163200 */ add.s $f8, $f6, $f22 -/* 0D1794 7F09CC64 46144102 */ mul.s $f4, $f8, $f20 -/* 0D1798 7F09CC68 44052000 */ mfc1 $a1, $f4 -/* 0D179C 7F09CC6C 0FC137BF */ jal maybe_detonate_object_and_its_children -/* 0D17A0 7F09CC70 00000000 */ nop -.L7F09CC74: -/* 0D17A4 7F09CC74 10000084 */ b .L7F09CE88 -/* 0D17A8 7F09CC78 86620002 */ lh $v0, 2($s3) -.L7F09CC7C: -/* 0D17AC 7F09CC7C 12A20003 */ beq $s5, $v0, .L7F09CC8C -/* 0D17B0 7F09CC80 24010006 */ li $at, 6 -/* 0D17B4 7F09CC84 54410080 */ bnel $v0, $at, .L7F09CE88 -/* 0D17B8 7F09CC88 86620002 */ lh $v0, 2($s3) -.L7F09CC8C: -/* 0D17BC 7F09CC8C C60A0008 */ lwc1 $f10, 8($s0) -/* 0D17C0 7F09CC90 C6260008 */ lwc1 $f6, 8($s1) -/* 0D17C4 7F09CC94 C608000C */ lwc1 $f8, 0xc($s0) -/* 0D17C8 7F09CC98 C624000C */ lwc1 $f4, 0xc($s1) -/* 0D17CC 7F09CC9C 46065581 */ sub.s $f22, $f10, $f6 -/* 0D17D0 7F09CCA0 C6260010 */ lwc1 $f6, 0x10($s1) -/* 0D17D4 7F09CCA4 C60A0010 */ lwc1 $f10, 0x10($s0) -/* 0D17D8 7F09CCA8 46044481 */ sub.s $f18, $f8, $f4 -/* 0D17DC 7F09CCAC 461CB03E */ c.le.s $f22, $f28 -/* 0D17E0 7F09CCB0 46065601 */ sub.s $f24, $f10, $f6 -/* 0D17E4 7F09CCB4 45020074 */ bc1fl .L7F09CE88 -/* 0D17E8 7F09CCB8 86620002 */ lh $v0, 2($s3) -/* 0D17EC 7F09CCBC 4600E007 */ neg.s $f0, $f28 -/* 0D17F0 7F09CCC0 C7A80108 */ lwc1 $f8, 0x108($sp) -/* 0D17F4 7F09CCC4 4616003E */ c.le.s $f0, $f22 -/* 0D17F8 7F09CCC8 00000000 */ nop -/* 0D17FC 7F09CCCC 4502006E */ bc1fl .L7F09CE88 -/* 0D1800 7F09CCD0 86620002 */ lh $v0, 2($s3) -/* 0D1804 7F09CCD4 4608903E */ c.le.s $f18, $f8 -/* 0D1808 7F09CCD8 00000000 */ nop -/* 0D180C 7F09CCDC 4502006A */ bc1fl .L7F09CE88 -/* 0D1810 7F09CCE0 86620002 */ lh $v0, 2($s3) -/* 0D1814 7F09CCE4 46004107 */ neg.s $f4, $f8 -/* 0D1818 7F09CCE8 4612203E */ c.le.s $f4, $f18 -/* 0D181C 7F09CCEC 00000000 */ nop -/* 0D1820 7F09CCF0 45020065 */ bc1fl .L7F09CE88 -/* 0D1824 7F09CCF4 86620002 */ lh $v0, 2($s3) -/* 0D1828 7F09CCF8 461CC03E */ c.le.s $f24, $f28 -/* 0D182C 7F09CCFC 00000000 */ nop -/* 0D1830 7F09CD00 45020061 */ bc1fl .L7F09CE88 -/* 0D1834 7F09CD04 86620002 */ lh $v0, 2($s3) -/* 0D1838 7F09CD08 4618003E */ c.le.s $f0, $f24 -/* 0D183C 7F09CD0C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D1840 7F09CD10 4502005D */ bc1fl .L7F09CE88 -/* 0D1844 7F09CD14 86620002 */ lh $v0, 2($s3) -/* 0D1848 7F09CD18 461CB083 */ div.s $f2, $f22, $f28 -/* 0D184C 7F09CD1C C6DA003C */ lwc1 $f26, 0x3c($s6) -/* 0D1850 7F09CD20 26250008 */ addiu $a1, $s1, 8 -/* 0D1854 7F09CD24 02803825 */ move $a3, $s4 -/* 0D1858 7F09CD28 46089383 */ div.s $f14, $f18, $f8 -/* 0D185C 7F09CD2C 46001006 */ mov.s $f0, $f2 -/* 0D1860 7F09CD30 461E103C */ c.lt.s $f2, $f30 -/* 0D1864 7F09CD34 461CC503 */ div.s $f20, $f24, $f28 -/* 0D1868 7F09CD38 46007306 */ mov.s $f12, $f14 -/* 0D186C 7F09CD3C 45000002 */ bc1f .L7F09CD48 -/* 0D1870 7F09CD40 4600A406 */ mov.s $f16, $f20 -/* 0D1874 7F09CD44 46001007 */ neg.s $f0, $f2 -.L7F09CD48: -/* 0D1878 7F09CD48 461E703C */ c.lt.s $f14, $f30 -/* 0D187C 7F09CD4C 44811000 */ mtc1 $at, $f2 -/* 0D1880 7F09CD50 45020003 */ bc1fl .L7F09CD60 -/* 0D1884 7F09CD54 461EA03C */ c.lt.s $f20, $f30 -/* 0D1888 7F09CD58 46007307 */ neg.s $f12, $f14 -/* 0D188C 7F09CD5C 461EA03C */ c.lt.s $f20, $f30 -.L7F09CD60: -/* 0D1890 7F09CD60 460C1301 */ sub.s $f12, $f2, $f12 -/* 0D1894 7F09CD64 45020003 */ bc1fl .L7F09CD74 -/* 0D1898 7F09CD68 46001501 */ sub.s $f20, $f2, $f0 -/* 0D189C 7F09CD6C 4600A407 */ neg.s $f16, $f20 -/* 0D18A0 7F09CD70 46001501 */ sub.s $f20, $f2, $f0 -.L7F09CD74: -/* 0D18A4 7F09CD74 46101401 */ sub.s $f16, $f2, $f16 -/* 0D18A8 7F09CD78 4614603C */ c.lt.s $f12, $f20 -/* 0D18AC 7F09CD7C 00000000 */ nop -/* 0D18B0 7F09CD80 45020003 */ bc1fl .L7F09CD90 -/* 0D18B4 7F09CD84 4614803C */ c.lt.s $f16, $f20 -/* 0D18B8 7F09CD88 46006506 */ mov.s $f20, $f12 -/* 0D18BC 7F09CD8C 4614803C */ c.lt.s $f16, $f20 -.L7F09CD90: -/* 0D18C0 7F09CD90 00000000 */ nop -/* 0D18C4 7F09CD94 45000002 */ bc1f .L7F09CDA0 -/* 0D18C8 7F09CD98 00000000 */ nop -/* 0D18CC 7F09CD9C 46008506 */ mov.s $f20, $f16 -.L7F09CDA0: -/* 0D18D0 7F09CDA0 4614A502 */ mul.s $f20, $f20, $f20 -/* 0D18D4 7F09CDA4 00000000 */ nop -/* 0D18D8 7F09CDA8 461AA502 */ mul.s $f20, $f20, $f26 -/* 0D18DC 7F09CDAC 16A20006 */ bne $s5, $v0, .L7F09CDC8 -/* 0D18E0 7F09CDB0 00000000 */ nop -/* 0D18E4 7F09CDB4 4406A000 */ mfc1 $a2, $f20 -/* 0D18E8 7F09CDB8 0FC09E01 */ jal chrlvExplosionDamage -/* 0D18EC 7F09CDBC 8E040004 */ lw $a0, 4($s0) -/* 0D18F0 7F09CDC0 10000031 */ b .L7F09CE88 -/* 0D18F4 7F09CDC4 86620002 */ lh $v0, 2($s3) -.L7F09CDC8: -/* 0D18F8 7F09CDC8 461EB032 */ c.eq.s $f22, $f30 -/* 0D18FC 7F09CDCC 00000000 */ nop -/* 0D1900 7F09CDD0 45000005 */ bc1f .L7F09CDE8 -/* 0D1904 7F09CDD4 00000000 */ nop -/* 0D1908 7F09CDD8 461EC032 */ c.eq.s $f24, $f30 -/* 0D190C 7F09CDDC 00000000 */ nop -/* 0D1910 7F09CDE0 4501000E */ bc1t .L7F09CE1C -/* 0D1914 7F09CDE4 00000000 */ nop -.L7F09CDE8: -/* 0D1918 7F09CDE8 4616B282 */ mul.s $f10, $f22, $f22 -/* 0D191C 7F09CDEC 00000000 */ nop -/* 0D1920 7F09CDF0 4618C182 */ mul.s $f6, $f24, $f24 -/* 0D1924 7F09CDF4 0C007DF8 */ jal sqrtf -/* 0D1928 7F09CDF8 46065300 */ add.s $f12, $f10, $f6 -/* 0D192C 7F09CDFC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D1930 7F09CE00 44812000 */ mtc1 $at, $f4 -/* 0D1934 7F09CE04 00000000 */ nop -/* 0D1938 7F09CE08 46002083 */ div.s $f2, $f4, $f0 -/* 0D193C 7F09CE0C 4602B582 */ mul.s $f22, $f22, $f2 -/* 0D1940 7F09CE10 00000000 */ nop -/* 0D1944 7F09CE14 4602C602 */ mul.s $f24, $f24, $f2 -/* 0D1948 7F09CE18 00000000 */ nop -.L7F09CE1C: -/* 0D194C 7F09CE1C 0FC26C54 */ jal get_cur_playernum -/* 0D1950 7F09CE20 00000000 */ nop -/* 0D1954 7F09CE24 AFA20090 */ sw $v0, 0x90($sp) -/* 0D1958 7F09CE28 0FC26C57 */ jal getPlayerPointerIndex -/* 0D195C 7F09CE2C 02002025 */ move $a0, $s0 -/* 0D1960 7F09CE30 0FC26C43 */ jal set_cur_player -/* 0D1964 7F09CE34 00402025 */ move $a0, $v0 -/* 0D1968 7F09CE38 0FC26919 */ jal getPlayerCount -/* 0D196C 7F09CE3C 00000000 */ nop -/* 0D1970 7F09CE40 14540004 */ bne $v0, $s4, .L7F09CE54 -/* 0D1974 7F09CE44 3C018004 */ lui $at, %hi(D_80040178) -/* 0D1978 7F09CE48 C4280178 */ lwc1 $f8, %lo(D_80040178)($at) -/* 0D197C 7F09CE4C 4608A502 */ mul.s $f20, $f20, $f8 -/* 0D1980 7F09CE50 00000000 */ nop -.L7F09CE54: -/* 0D1984 7F09CE54 0FC1F39E */ jal isBondInTank -/* 0D1988 7F09CE58 00000000 */ nop -/* 0D198C 7F09CE5C 14540002 */ bne $v0, $s4, .L7F09CE68 -/* 0D1990 7F09CE60 4600B386 */ mov.s $f14, $f22 -/* 0D1994 7F09CE64 4614A500 */ add.s $f20, $f20, $f20 -.L7F09CE68: -/* 0D1998 7F09CE68 4406C000 */ mfc1 $a2, $f24 -/* 0D199C 7F09CE6C 824703CE */ lb $a3, 0x3ce($s2) -/* 0D19A0 7F09CE70 AFB40010 */ sw $s4, 0x10($sp) -/* 0D19A4 7F09CE74 0FC22647 */ jal record_damage_kills -/* 0D19A8 7F09CE78 4600A306 */ mov.s $f12, $f20 -/* 0D19AC 7F09CE7C 0FC26C43 */ jal set_cur_player -/* 0D19B0 7F09CE80 8FA40090 */ lw $a0, 0x90($sp) -/* 0D19B4 7F09CE84 86620002 */ lh $v0, 2($s3) -.L7F09CE88: -/* 0D19B8 7F09CE88 26730002 */ addiu $s3, $s3, 2 -/* 0D19BC 7F09CE8C 0443FEFC */ bgezl $v0, .L7F09CA80 -/* 0D19C0 7F09CE90 00024880 */ sll $t1, $v0, 2 -/* 0D19C4 7F09CE94 86C9001C */ lh $t1, 0x1c($s6) -.L7F09CE98: -/* 0D19C8 7F09CE98 864803C8 */ lh $t0, 0x3c8($s2) -/* 0D19CC 7F09CE9C 00095083 */ sra $t2, $t1, 2 -/* 0D19D0 7F09CEA0 010A5821 */ addu $t3, $t0, $t2 -/* 0D19D4 7F09CEA4 A64B03CA */ sh $t3, 0x3ca($s2) -.L7F09CEA8: -/* 0D19D8 7F09CEA8 8FBF006C */ lw $ra, 0x6c($sp) -/* 0D19DC 7F09CEAC D7B40020 */ ldc1 $f20, 0x20($sp) -/* 0D19E0 7F09CEB0 D7B60028 */ ldc1 $f22, 0x28($sp) -/* 0D19E4 7F09CEB4 D7B80030 */ ldc1 $f24, 0x30($sp) -/* 0D19E8 7F09CEB8 D7BA0038 */ ldc1 $f26, 0x38($sp) -/* 0D19EC 7F09CEBC D7BC0040 */ ldc1 $f28, 0x40($sp) -/* 0D19F0 7F09CEC0 D7BE0048 */ ldc1 $f30, 0x48($sp) -/* 0D19F4 7F09CEC4 8FB00050 */ lw $s0, 0x50($sp) -/* 0D19F8 7F09CEC8 8FB10054 */ lw $s1, 0x54($sp) -/* 0D19FC 7F09CECC 8FB20058 */ lw $s2, 0x58($sp) -/* 0D1A00 7F09CED0 8FB3005C */ lw $s3, 0x5c($sp) -/* 0D1A04 7F09CED4 8FB40060 */ lw $s4, 0x60($sp) -/* 0D1A08 7F09CED8 8FB50064 */ lw $s5, 0x64($sp) -/* 0D1A0C 7F09CEDC 8FB60068 */ lw $s6, 0x68($sp) -/* 0D1A10 7F09CEE0 03E00008 */ jr $ra -/* 0D1A14 7F09CEE4 27BD0100 */ addiu $sp, $sp, 0x100 -) -#endif - - -#ifdef NONMATCHING -void sub_GAME_7F09CEE8(void) { - -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_800576BC -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F09CEE8 -/* 0D1A18 7F09CEE8 27BDFF38 */ addiu $sp, $sp, -0xc8 -/* 0D1A1C 7F09CEEC AFBF006C */ sw $ra, 0x6c($sp) -/* 0D1A20 7F09CEF0 AFB70068 */ sw $s7, 0x68($sp) -/* 0D1A24 7F09CEF4 AFB60064 */ sw $s6, 0x64($sp) -/* 0D1A28 7F09CEF8 AFB50060 */ sw $s5, 0x60($sp) -/* 0D1A2C 7F09CEFC AFB4005C */ sw $s4, 0x5c($sp) -/* 0D1A30 7F09CF00 AFB30058 */ sw $s3, 0x58($sp) -/* 0D1A34 7F09CF04 AFB20054 */ sw $s2, 0x54($sp) -/* 0D1A38 7F09CF08 AFB10050 */ sw $s1, 0x50($sp) -/* 0D1A3C 7F09CF0C AFB0004C */ sw $s0, 0x4c($sp) -/* 0D1A40 7F09CF10 F7BE0040 */ sdc1 $f30, 0x40($sp) -/* 0D1A44 7F09CF14 F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 0D1A48 7F09CF18 F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0D1A4C 7F09CF1C F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0D1A50 7F09CF20 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0D1A54 7F09CF24 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D1A58 7F09CF28 8C920004 */ lw $s2, 4($a0) -/* 0D1A5C 7F09CF2C 3C028005 */ lui $v0, %hi(g_ClockTimer) -/* 0D1A60 7F09CF30 8C428374 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0D1A64 7F09CF34 824503CC */ lb $a1, 0x3cc($s2) -/* 0D1A68 7F09CF38 3C0F8004 */ lui $t7, %hi(array_explosion_types) -/* 0D1A6C 7F09CF3C 25EF0284 */ addiu $t7, %lo(array_explosion_types) # addiu $t7, $t7, 0x284 -/* 0D1A70 7F09CF40 00057180 */ sll $t6, $a1, 6 -/* 0D1A74 7F09CF44 00809825 */ move $s3, $a0 -/* 0D1A78 7F09CF48 14400003 */ bnez $v0, .L7F09CF58 -/* 0D1A7C 7F09CF4C 01CFA821 */ addu $s5, $t6, $t7 -/* 0D1A80 7F09CF50 10000155 */ b .L7F09D4A8 -/* 0D1A84 7F09CF54 00001025 */ move $v0, $zero -.L7F09CF58: -/* 0D1A88 7F09CF58 2841000F */ slti $at, $v0, 0xf -/* 0D1A8C 7F09CF5C 50200007 */ beql $at, $zero, .L7F09CF7C -/* 0D1A90 7F09CF60 3C014170 */ lui $at, 0x4170 -/* 0D1A94 7F09CF64 44822000 */ mtc1 $v0, $f4 -/* 0D1A98 7F09CF68 00000000 */ nop -/* 0D1A9C 7F09CF6C 468021A0 */ cvt.s.w $f6, $f4 -/* 0D1AA0 7F09CF70 10000005 */ b .L7F09CF88 -/* 0D1AA4 7F09CF74 E7A600A0 */ swc1 $f6, 0xa0($sp) -/* 0D1AA8 7F09CF78 3C014170 */ li $at, 0x41700000 # 15.000000 -.L7F09CF7C: -/* 0D1AAC 7F09CF7C 44814000 */ mtc1 $at, $f8 -/* 0D1AB0 7F09CF80 00000000 */ nop -/* 0D1AB4 7F09CF84 E7A800A0 */ swc1 $f8, 0xa0($sp) -.L7F09CF88: -/* 0D1AB8 7F09CF88 864303C8 */ lh $v1, 0x3c8($s2) -/* 0D1ABC 7F09CF8C 28610008 */ slti $at, $v1, 8 -/* 0D1AC0 7F09CF90 542000D5 */ bnezl $at, .L7F09D2E8 -/* 0D1AC4 7F09CF94 C7AA00A0 */ lwc1 $f10, 0xa0($sp) -/* 0D1AC8 7F09CF98 86A2001C */ lh $v0, 0x1c($s5) -/* 0D1ACC 7F09CF9C 0062082A */ slt $at, $v1, $v0 -/* 0D1AD0 7F09CFA0 502000D1 */ beql $at, $zero, .L7F09D2E8 -/* 0D1AD4 7F09CFA4 C7AA00A0 */ lwc1 $f10, 0xa0($sp) -/* 0D1AD8 7F09CFA8 44835000 */ mtc1 $v1, $f10 -/* 0D1ADC 7F09CFAC C6B20008 */ lwc1 $f18, 8($s5) -/* 0D1AE0 7F09CFB0 C6A8000C */ lwc1 $f8, 0xc($s5) -/* 0D1AE4 7F09CFB4 46805020 */ cvt.s.w $f0, $f10 -/* 0D1AE8 7F09CFB8 C6B00000 */ lwc1 $f16, ($s5) -/* 0D1AEC 7F09CFBC C6A60004 */ lwc1 $f6, 4($s5) -/* 0D1AF0 7F09CFC0 2417000E */ li $s7, 14 -/* 0D1AF4 7F09CFC4 28610020 */ slti $at, $v1, 0x20 -/* 0D1AF8 7F09CFC8 24160001 */ li $s6, 1 -/* 0D1AFC 7F09CFCC 46009102 */ mul.s $f4, $f18, $f0 -/* 0D1B00 7F09CFD0 00000000 */ nop -/* 0D1B04 7F09CFD4 46004282 */ mul.s $f10, $f8, $f0 -/* 0D1B08 7F09CFD8 46048700 */ add.s $f28, $f16, $f4 -/* 0D1B0C 7F09CFDC 16E5001F */ bne $s7, $a1, .L7F09D05C -/* 0D1B10 7F09CFE0 460A3780 */ add.s $f30, $f6, $f10 -/* 0D1B14 7F09CFE4 1020000C */ beqz $at, .L7F09D018 -/* 0D1B18 7F09CFE8 C7B000A0 */ lwc1 $f16, 0xa0($sp) -/* 0D1B1C 7F09CFEC 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0D1B20 7F09CFF0 44819000 */ mtc1 $at, $f18 -/* 0D1B24 7F09CFF4 C668000C */ lwc1 $f8, 0xc($s3) -/* 0D1B28 7F09CFF8 46109102 */ mul.s $f4, $f18, $f16 -/* 0D1B2C 7F09CFFC 46044180 */ add.s $f6, $f8, $f4 -/* 0D1B30 7F09D000 E666000C */ swc1 $f6, 0xc($s3) -/* 0D1B34 7F09D004 864303C8 */ lh $v1, 0x3c8($s2) -/* 0D1B38 7F09D008 86A2001C */ lh $v0, 0x1c($s5) -/* 0D1B3C 7F09D00C 44835000 */ mtc1 $v1, $f10 -/* 0D1B40 7F09D010 00000000 */ nop -/* 0D1B44 7F09D014 46805020 */ cvt.s.w $f0, $f10 -.L7F09D018: -/* 0D1B48 7F09D018 28610021 */ slti $at, $v1, 0x21 -/* 0D1B4C 7F09D01C 1420000F */ bnez $at, .L7F09D05C -/* 0D1B50 7F09D020 3C014396 */ li $at, 0x43960000 # 300.000000 -/* 0D1B54 7F09D024 44811000 */ mtc1 $at, $f2 -/* 0D1B58 7F09D028 3C014040 */ li $at, 0x40400000 # 3.000000 -/* 0D1B5C 7F09D02C 44819000 */ mtc1 $at, $f18 -/* 0D1B60 7F09D030 3C014220 */ li $at, 0x42200000 # 40.000000 -/* 0D1B64 7F09D034 44814000 */ mtc1 $at, $f8 -/* 0D1B68 7F09D038 46120402 */ mul.s $f16, $f0, $f18 -/* 0D1B6C 7F09D03C 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0D1B70 7F09D040 4481F000 */ mtc1 $at, $f30 -/* 0D1B74 7F09D044 46088700 */ add.s $f28, $f16, $f8 -/* 0D1B78 7F09D048 461C103C */ c.lt.s $f2, $f28 -/* 0D1B7C 7F09D04C 00000000 */ nop -/* 0D1B80 7F09D050 45000002 */ bc1f .L7F09D05C -/* 0D1B84 7F09D054 00000000 */ nop -/* 0D1B88 7F09D058 46001706 */ mov.s $f28, $f2 -.L7F09D05C: -/* 0D1B8C 7F09D05C 86B8001E */ lh $t8, 0x1e($s5) -/* 0D1B90 7F09D060 44829000 */ mtc1 $v0, $f18 -/* 0D1B94 7F09D064 0000A025 */ move $s4, $zero -/* 0D1B98 7F09D068 44982000 */ mtc1 $t8, $f4 -/* 0D1B9C 7F09D06C 46809420 */ cvt.s.w $f16, $f18 -/* 0D1BA0 7F09D070 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D1BA4 7F09D074 468021A0 */ cvt.s.w $f6, $f4 -/* 0D1BA8 7F09D078 46003282 */ mul.s $f10, $f6, $f0 -/* 0D1BAC 7F09D07C 46105203 */ div.s $f8, $f10, $f16 -/* 0D1BB0 7F09D080 4600410D */ trunc.w.s $f4, $f8 -/* 0D1BB4 7F09D084 44082000 */ mfc1 $t0, $f4 -/* 0D1BB8 7F09D088 00000000 */ nop -/* 0D1BBC 7F09D08C 25090001 */ addiu $t1, $t0, 1 -/* 0D1BC0 7F09D090 19200061 */ blez $t1, .L7F09D218 -/* 0D1BC4 7F09D094 AFA9009C */ sw $t1, 0x9c($sp) -/* 0D1BC8 7F09D098 4481D000 */ mtc1 $at, $f26 -/* 0D1BCC 7F09D09C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D1BD0 7F09D0A0 4481B000 */ mtc1 $at, $f22 -/* 0D1BD4 7F09D0A4 241103C0 */ li $s1, 960 -/* 0D1BD8 7F09D0A8 00001025 */ move $v0, $zero -.L7F09D0AC: -/* 0D1BDC 7F09D0AC 02408025 */ move $s0, $s2 -.L7F09D0B0: -/* 0D1BE0 7F09D0B0 860A001C */ lh $t2, 0x1c($s0) -/* 0D1BE4 7F09D0B4 24420018 */ addiu $v0, $v0, 0x18 -/* 0D1BE8 7F09D0B8 15400051 */ bnez $t2, .L7F09D200 -/* 0D1BEC 7F09D0BC 00000000 */ nop -/* 0D1BF0 7F09D0C0 0C002914 */ jal randomGetNext -/* 0D1BF4 7F09D0C4 A616001C */ sh $s6, 0x1c($s0) -/* 0D1BF8 7F09D0C8 44823000 */ mtc1 $v0, $f6 -/* 0D1BFC 7F09D0CC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1C00 7F09D0D0 04410004 */ bgez $v0, .L7F09D0E4 -/* 0D1C04 7F09D0D4 468034A0 */ cvt.s.w $f18, $f6 -/* 0D1C08 7F09D0D8 44815000 */ mtc1 $at, $f10 -/* 0D1C0C 7F09D0DC 00000000 */ nop -/* 0D1C10 7F09D0E0 460A9480 */ add.s $f18, $f18, $f10 -.L7F09D0E4: -/* 0D1C14 7F09D0E4 46169402 */ mul.s $f16, $f18, $f22 -/* 0D1C18 7F09D0E8 C6660008 */ lwc1 $f6, 8($s3) -/* 0D1C1C 7F09D0EC 461A8201 */ sub.s $f8, $f16, $f26 -/* 0D1C20 7F09D0F0 461C4102 */ mul.s $f4, $f8, $f28 -/* 0D1C24 7F09D0F4 46062280 */ add.s $f10, $f4, $f6 -/* 0D1C28 7F09D0F8 0C002914 */ jal randomGetNext -/* 0D1C2C 7F09D0FC E60A0008 */ swc1 $f10, 8($s0) -/* 0D1C30 7F09D100 44829000 */ mtc1 $v0, $f18 -/* 0D1C34 7F09D104 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1C38 7F09D108 04410004 */ bgez $v0, .L7F09D11C -/* 0D1C3C 7F09D10C 46809420 */ cvt.s.w $f16, $f18 -/* 0D1C40 7F09D110 44814000 */ mtc1 $at, $f8 -/* 0D1C44 7F09D114 00000000 */ nop -/* 0D1C48 7F09D118 46088400 */ add.s $f16, $f16, $f8 -.L7F09D11C: -/* 0D1C4C 7F09D11C 46168102 */ mul.s $f4, $f16, $f22 -/* 0D1C50 7F09D120 C672000C */ lwc1 $f18, 0xc($s3) -/* 0D1C54 7F09D124 461A2181 */ sub.s $f6, $f4, $f26 -/* 0D1C58 7F09D128 461E3282 */ mul.s $f10, $f6, $f30 -/* 0D1C5C 7F09D12C 46125200 */ add.s $f8, $f10, $f18 -/* 0D1C60 7F09D130 0C002914 */ jal randomGetNext -/* 0D1C64 7F09D134 E608000C */ swc1 $f8, 0xc($s0) -/* 0D1C68 7F09D138 44828000 */ mtc1 $v0, $f16 -/* 0D1C6C 7F09D13C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1C70 7F09D140 04410004 */ bgez $v0, .L7F09D154 -/* 0D1C74 7F09D144 46808120 */ cvt.s.w $f4, $f16 -/* 0D1C78 7F09D148 44813000 */ mtc1 $at, $f6 -/* 0D1C7C 7F09D14C 00000000 */ nop -/* 0D1C80 7F09D150 46062100 */ add.s $f4, $f4, $f6 -.L7F09D154: -/* 0D1C84 7F09D154 46162282 */ mul.s $f10, $f4, $f22 -/* 0D1C88 7F09D158 C6700010 */ lwc1 $f16, 0x10($s3) -/* 0D1C8C 7F09D15C 461A5481 */ sub.s $f18, $f10, $f26 -/* 0D1C90 7F09D160 461C9202 */ mul.s $f8, $f18, $f28 -/* 0D1C94 7F09D164 46104180 */ add.s $f6, $f8, $f16 -/* 0D1C98 7F09D168 0C002914 */ jal randomGetNext -/* 0D1C9C 7F09D16C E6060010 */ swc1 $f6, 0x10($s0) -/* 0D1CA0 7F09D170 44822000 */ mtc1 $v0, $f4 -/* 0D1CA4 7F09D174 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1CA8 7F09D178 04410004 */ bgez $v0, .L7F09D18C -/* 0D1CAC 7F09D17C 468022A0 */ cvt.s.w $f10, $f4 -/* 0D1CB0 7F09D180 44819000 */ mtc1 $at, $f18 -/* 0D1CB4 7F09D184 00000000 */ nop -/* 0D1CB8 7F09D188 46125280 */ add.s $f10, $f10, $f18 -.L7F09D18C: -/* 0D1CBC 7F09D18C 46165202 */ mul.s $f8, $f10, $f22 -/* 0D1CC0 7F09D190 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D1CC4 7F09D194 44813000 */ mtc1 $at, $f6 -/* 0D1CC8 7F09D198 C6B20010 */ lwc1 $f18, 0x10($s5) -/* 0D1CCC 7F09D19C 461A4402 */ mul.s $f16, $f8, $f26 -/* 0D1CD0 7F09D1A0 46068100 */ add.s $f4, $f16, $f6 -/* 0D1CD4 7F09D1A4 46122502 */ mul.s $f20, $f4, $f18 -/* 0D1CD8 7F09D1A8 0C002914 */ jal randomGetNext -/* 0D1CDC 7F09D1AC 00000000 */ nop -/* 0D1CE0 7F09D1B0 44825000 */ mtc1 $v0, $f10 -/* 0D1CE4 7F09D1B4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D1CE8 7F09D1B8 04410004 */ bgez $v0, .L7F09D1CC -/* 0D1CEC 7F09D1BC 46805220 */ cvt.s.w $f8, $f10 -/* 0D1CF0 7F09D1C0 44818000 */ mtc1 $at, $f16 -/* 0D1CF4 7F09D1C4 00000000 */ nop -/* 0D1CF8 7F09D1C8 46104200 */ add.s $f8, $f8, $f16 -.L7F09D1CC: -/* 0D1CFC 7F09D1CC 46164182 */ mul.s $f6, $f8, $f22 -/* 0D1D00 7F09D1D0 3C018005 */ lui $at, %hi(D_800576BC) -/* 0D1D04 7F09D1D4 C42476BC */ lwc1 $f4, %lo(D_800576BC)($at) -/* 0D1D08 7F09D1D8 46043302 */ mul.s $f12, $f6, $f4 -/* 0D1D0C 7F09D1DC 0FC15FA8 */ jal cosf -/* 0D1D10 7F09D1E0 46006606 */ mov.s $f24, $f12 -/* 0D1D14 7F09D1E4 46140482 */ mul.s $f18, $f0, $f20 -/* 0D1D18 7F09D1E8 4600C306 */ mov.s $f12, $f24 -/* 0D1D1C 7F09D1EC 0FC15FAB */ jal sinf -/* 0D1D20 7F09D1F0 E6120014 */ swc1 $f18, 0x14($s0) -/* 0D1D24 7F09D1F4 46140282 */ mul.s $f10, $f0, $f20 -/* 0D1D28 7F09D1F8 10000003 */ b .L7F09D208 -/* 0D1D2C 7F09D1FC E60A0018 */ swc1 $f10, 0x18($s0) -.L7F09D200: -/* 0D1D30 7F09D200 1451FFAB */ bne $v0, $s1, .L7F09D0B0 -/* 0D1D34 7F09D204 26100018 */ addiu $s0, $s0, 0x18 -.L7F09D208: -/* 0D1D38 7F09D208 8FAB009C */ lw $t3, 0x9c($sp) -/* 0D1D3C 7F09D20C 26940001 */ addiu $s4, $s4, 1 -/* 0D1D40 7F09D210 568BFFA6 */ bnel $s4, $t3, .L7F09D0AC -/* 0D1D44 7F09D214 00001025 */ move $v0, $zero -.L7F09D218: -/* 0D1D48 7F09D218 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D1D4C 7F09D21C 4481D000 */ mtc1 $at, $f26 -/* 0D1D50 7F09D220 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -/* 0D1D54 7F09D224 44814000 */ mtc1 $at, $f8 -/* 0D1D58 7F09D228 C6B00010 */ lwc1 $f16, 0x10($s5) -/* 0D1D5C 7F09D22C C6720008 */ lwc1 $f18, 8($s3) -/* 0D1D60 7F09D230 02602025 */ move $a0, $s3 -/* 0D1D64 7F09D234 46088002 */ mul.s $f0, $f16, $f8 -/* 0D1D68 7F09D238 27A50090 */ addiu $a1, $sp, 0x90 -/* 0D1D6C 7F09D23C 27A60084 */ addiu $a2, $sp, 0x84 -/* 0D1D70 7F09D240 461AE182 */ mul.s $f6, $f28, $f26 -/* 0D1D74 7F09D244 46003700 */ add.s $f28, $f6, $f0 -/* 0D1D78 7F09D248 461AF102 */ mul.s $f4, $f30, $f26 -/* 0D1D7C 7F09D24C 4407E000 */ mfc1 $a3, $f28 -/* 0D1D80 7F09D250 461C9281 */ sub.s $f10, $f18, $f28 -/* 0D1D84 7F09D254 46002780 */ add.s $f30, $f4, $f0 -/* 0D1D88 7F09D258 E7AA0090 */ swc1 $f10, 0x90($sp) -/* 0D1D8C 7F09D25C C670000C */ lwc1 $f16, 0xc($s3) -/* 0D1D90 7F09D260 461E8201 */ sub.s $f8, $f16, $f30 -/* 0D1D94 7F09D264 E7A80094 */ swc1 $f8, 0x94($sp) -/* 0D1D98 7F09D268 C6660010 */ lwc1 $f6, 0x10($s3) -/* 0D1D9C 7F09D26C 461C3101 */ sub.s $f4, $f6, $f28 -/* 0D1DA0 7F09D270 E7A40098 */ swc1 $f4, 0x98($sp) -/* 0D1DA4 7F09D274 C6720008 */ lwc1 $f18, 8($s3) -/* 0D1DA8 7F09D278 461C9280 */ add.s $f10, $f18, $f28 -/* 0D1DAC 7F09D27C E7AA0084 */ swc1 $f10, 0x84($sp) -/* 0D1DB0 7F09D280 C670000C */ lwc1 $f16, 0xc($s3) -/* 0D1DB4 7F09D284 461E8200 */ add.s $f8, $f16, $f30 -/* 0D1DB8 7F09D288 E7A80088 */ swc1 $f8, 0x88($sp) -/* 0D1DBC 7F09D28C C6660010 */ lwc1 $f6, 0x10($s3) -/* 0D1DC0 7F09D290 461C3100 */ add.s $f4, $f6, $f28 -/* 0D1DC4 7F09D294 0FC0F89F */ jal sub_GAME_7F03E27C -/* 0D1DC8 7F09D298 E7A4008C */ swc1 $f4, 0x8c($sp) -/* 0D1DCC 7F09D29C 864C03C8 */ lh $t4, 0x3c8($s2) -/* 0D1DD0 7F09D2A0 C6A00014 */ lwc1 $f0, 0x14($s5) -/* 0D1DD4 7F09D2A4 C6B20018 */ lwc1 $f18, 0x18($s5) -/* 0D1DD8 7F09D2A8 448C8000 */ mtc1 $t4, $f16 -/* 0D1DDC 7F09D2AC 86AD001C */ lh $t5, 0x1c($s5) -/* 0D1DE0 7F09D2B0 46009281 */ sub.s $f10, $f18, $f0 -/* 0D1DE4 7F09D2B4 02602025 */ move $a0, $s3 -/* 0D1DE8 7F09D2B8 448D2000 */ mtc1 $t5, $f4 -/* 0D1DEC 7F09D2BC 46808220 */ cvt.s.w $f8, $f16 -/* 0D1DF0 7F09D2C0 468024A0 */ cvt.s.w $f18, $f4 -/* 0D1DF4 7F09D2C4 46085182 */ mul.s $f6, $f10, $f8 -/* 0D1DF8 7F09D2C8 46123403 */ div.s $f16, $f6, $f18 -/* 0D1DFC 7F09D2CC 46100780 */ add.s $f30, $f0, $f16 -/* 0D1E00 7F09D2D0 4405F000 */ mfc1 $a1, $f30 -/* 0D1E04 7F09D2D4 4406F000 */ mfc1 $a2, $f30 -/* 0D1E08 7F09D2D8 0FC27276 */ jal sub_GAME_7F09C9D8 -/* 0D1E0C 7F09D2DC 00000000 */ nop -/* 0D1E10 7F09D2E0 864303C8 */ lh $v1, 0x3c8($s2) -/* 0D1E14 7F09D2E4 C7AA00A0 */ lwc1 $f10, 0xa0($sp) -.L7F09D2E8: -/* 0D1E18 7F09D2E8 24160001 */ li $s6, 1 -/* 0D1E1C 7F09D2EC 2417000E */ li $s7, 14 -/* 0D1E20 7F09D2F0 4600520D */ trunc.w.s $f8, $f10 -/* 0D1E24 7F09D2F4 0000A025 */ move $s4, $zero -/* 0D1E28 7F09D2F8 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0D1E2C 7F09D2FC 440F4000 */ mfc1 $t7, $f8 -/* 0D1E30 7F09D300 00000000 */ nop -/* 0D1E34 7F09D304 19E00058 */ blez $t7, .L7F09D468 -/* 0D1E38 7F09D308 AFAF0070 */ sw $t7, 0x70($sp) -/* 0D1E3C 7F09D30C 4481A000 */ mtc1 $at, $f20 -/* 0D1E40 7F09D310 241103C0 */ li $s1, 960 -/* 0D1E44 7F09D314 24780001 */ addiu $t8, $v1, 1 -.L7F09D318: -/* 0D1E48 7F09D318 A65803C8 */ sh $t8, 0x3c8($s2) -/* 0D1E4C 7F09D31C 00001025 */ move $v0, $zero -/* 0D1E50 7F09D320 02408025 */ move $s0, $s2 -.L7F09D324: -/* 0D1E54 7F09D324 8603001C */ lh $v1, 0x1c($s0) -/* 0D1E58 7F09D328 24420018 */ addiu $v0, $v0, 0x18 -/* 0D1E5C 7F09D32C 18600002 */ blez $v1, .L7F09D338 -/* 0D1E60 7F09D330 24790001 */ addiu $t9, $v1, 1 -/* 0D1E64 7F09D334 A619001C */ sh $t9, 0x1c($s0) -.L7F09D338: -/* 0D1E68 7F09D338 1451FFFA */ bne $v0, $s1, .L7F09D324 -/* 0D1E6C 7F09D33C 26100018 */ addiu $s0, $s0, 0x18 -/* 0D1E70 7F09D340 864303C8 */ lh $v1, 0x3c8($s2) -/* 0D1E74 7F09D344 2401000F */ li $at, 15 -/* 0D1E78 7F09D348 54610005 */ bnel $v1, $at, .L7F09D360 -/* 0D1E7C 7F09D34C 86A2001C */ lh $v0, 0x1c($s5) -/* 0D1E80 7F09D350 824803CC */ lb $t0, 0x3cc($s2) -/* 0D1E84 7F09D354 52E80009 */ beql $s7, $t0, .L7F09D37C -/* 0D1E88 7F09D358 8E420004 */ lw $v0, 4($s2) -/* 0D1E8C 7F09D35C 86A2001C */ lh $v0, 0x1c($s5) -.L7F09D360: -/* 0D1E90 7F09D360 24690014 */ addiu $t1, $v1, 0x14 -/* 0D1E94 7F09D364 5449002F */ bnel $v0, $t1, .L7F09D424 -/* 0D1E98 7F09D368 00025843 */ sra $t3, $v0, 1 -/* 0D1E9C 7F09D36C 824A03CC */ lb $t2, 0x3cc($s2) -/* 0D1EA0 7F09D370 52EA002C */ beql $s7, $t2, .L7F09D424 -/* 0D1EA4 7F09D374 00025843 */ sra $t3, $v0, 1 -/* 0D1EA8 7F09D378 8E420004 */ lw $v0, 4($s2) -.L7F09D37C: -/* 0D1EAC 7F09D37C 26640008 */ addiu $a0, $s3, 8 -/* 0D1EB0 7F09D380 2667002C */ addiu $a3, $s3, 0x2c -/* 0D1EB4 7F09D384 5040001E */ beql $v0, $zero, .L7F09D400 -/* 0D1EB8 7F09D388 92680001 */ lbu $t0, 1($s3) -/* 0D1EBC 7F09D38C 8C450014 */ lw $a1, 0x14($v0) -/* 0D1EC0 7F09D390 50A0001B */ beql $a1, $zero, .L7F09D400 -/* 0D1EC4 7F09D394 92680001 */ lbu $t0, 1($s3) -/* 0D1EC8 7F09D398 904B0000 */ lbu $t3, ($v0) -/* 0D1ECC 7F09D39C 2447002C */ addiu $a3, $v0, 0x2c -/* 0D1ED0 7F09D3A0 24440008 */ addiu $a0, $v0, 8 -/* 0D1ED4 7F09D3A4 56CB000C */ bnel $s6, $t3, .L7F09D3D8 -/* 0D1ED8 7F09D3A8 926F0001 */ lbu $t7, 1($s3) -/* 0D1EDC 7F09D3AC 926C0001 */ lbu $t4, 1($s3) -/* 0D1EE0 7F09D3B0 8C430004 */ lw $v1, 4($v0) -/* 0D1EE4 7F09D3B4 92A60038 */ lbu $a2, 0x38($s5) -/* 0D1EE8 7F09D3B8 318D0008 */ andi $t5, $t4, 8 -/* 0D1EEC 7F09D3BC 000D702B */ sltu $t6, $zero, $t5 -/* 0D1EF0 7F09D3C0 AFAE0010 */ sw $t6, 0x10($sp) -/* 0D1EF4 7F09D3C4 0FC279C0 */ jal sub_GAME_7F09E700 -/* 0D1EF8 7F09D3C8 24640058 */ addiu $a0, $v1, 0x58 -/* 0D1EFC 7F09D3CC 10000009 */ b .L7F09D3F4 -/* 0D1F00 7F09D3D0 864303C8 */ lh $v1, 0x3c8($s2) -/* 0D1F04 7F09D3D4 926F0001 */ lbu $t7, 1($s3) -.L7F09D3D8: -/* 0D1F08 7F09D3D8 92A60038 */ lbu $a2, 0x38($s5) -/* 0D1F0C 7F09D3DC 2447002C */ addiu $a3, $v0, 0x2c -/* 0D1F10 7F09D3E0 31F80008 */ andi $t8, $t7, 8 -/* 0D1F14 7F09D3E4 0018C82B */ sltu $t9, $zero, $t8 -/* 0D1F18 7F09D3E8 0FC279C0 */ jal sub_GAME_7F09E700 -/* 0D1F1C 7F09D3EC AFB90010 */ sw $t9, 0x10($sp) -/* 0D1F20 7F09D3F0 864303C8 */ lh $v1, 0x3c8($s2) -.L7F09D3F4: -/* 0D1F24 7F09D3F4 1000000A */ b .L7F09D420 -/* 0D1F28 7F09D3F8 86A2001C */ lh $v0, 0x1c($s5) -/* 0D1F2C 7F09D3FC 92680001 */ lbu $t0, 1($s3) -.L7F09D400: -/* 0D1F30 7F09D400 8E650014 */ lw $a1, 0x14($s3) -/* 0D1F34 7F09D404 92A60038 */ lbu $a2, 0x38($s5) -/* 0D1F38 7F09D408 31090008 */ andi $t1, $t0, 8 -/* 0D1F3C 7F09D40C 0009502B */ sltu $t2, $zero, $t1 -/* 0D1F40 7F09D410 0FC279C0 */ jal sub_GAME_7F09E700 -/* 0D1F44 7F09D414 AFAA0010 */ sw $t2, 0x10($sp) -/* 0D1F48 7F09D418 864303C8 */ lh $v1, 0x3c8($s2) -/* 0D1F4C 7F09D41C 86A2001C */ lh $v0, 0x1c($s5) -.L7F09D420: -/* 0D1F50 7F09D420 00025843 */ sra $t3, $v0, 1 -.L7F09D424: -/* 0D1F54 7F09D424 5563000D */ bnel $t3, $v1, .L7F09D45C -/* 0D1F58 7F09D428 8FAD0070 */ lw $t5, 0x70($sp) -/* 0D1F5C 7F09D42C 824C03CD */ lb $t4, 0x3cd($s2) -/* 0D1F60 7F09D430 5180000A */ beql $t4, $zero, .L7F09D45C -/* 0D1F64 7F09D434 8FAD0070 */ lw $t5, 0x70($sp) -/* 0D1F68 7F09D438 C6A40010 */ lwc1 $f4, 0x10($s5) -/* 0D1F6C 7F09D43C 264403D0 */ addiu $a0, $s2, 0x3d0 -/* 0D1F70 7F09D440 864603DC */ lh $a2, 0x3dc($s2) -/* 0D1F74 7F09D444 46142182 */ mul.s $f6, $f4, $f20 -/* 0D1F78 7F09D448 44053000 */ mfc1 $a1, $f6 -/* 0D1F7C 7F09D44C 0FC2809F */ jal sub_GAME_7F0A027C -/* 0D1F80 7F09D450 00000000 */ nop -/* 0D1F84 7F09D454 864303C8 */ lh $v1, 0x3c8($s2) -/* 0D1F88 7F09D458 8FAD0070 */ lw $t5, 0x70($sp) -.L7F09D45C: -/* 0D1F8C 7F09D45C 26940001 */ addiu $s4, $s4, 1 -/* 0D1F90 7F09D460 568DFFAD */ bnel $s4, $t5, .L7F09D318 -/* 0D1F94 7F09D464 24780001 */ addiu $t8, $v1, 1 -.L7F09D468: -/* 0D1F98 7F09D468 3C014180 */ li $at, 0x41800000 # 16.000000 -/* 0D1F9C 7F09D46C 44819000 */ mtc1 $at, $f18 -/* 0D1FA0 7F09D470 C6B00020 */ lwc1 $f16, 0x20($s5) -/* 0D1FA4 7F09D474 86B8001C */ lh $t8, 0x1c($s5) -/* 0D1FA8 7F09D478 00001025 */ move $v0, $zero -/* 0D1FAC 7F09D47C 46109282 */ mul.s $f10, $f18, $f16 -/* 0D1FB0 7F09D480 4600520D */ trunc.w.s $f8, $f10 -/* 0D1FB4 7F09D484 440F4000 */ mfc1 $t7, $f8 -/* 0D1FB8 7F09D488 00000000 */ nop -/* 0D1FBC 7F09D48C 030FC821 */ addu $t9, $t8, $t7 -/* 0D1FC0 7F09D490 0079082A */ slt $at, $v1, $t9 -/* 0D1FC4 7F09D494 14200004 */ bnez $at, .L7F09D4A8 -/* 0D1FC8 7F09D498 00000000 */ nop -/* 0D1FCC 7F09D49C AE400000 */ sw $zero, ($s2) -/* 0D1FD0 7F09D4A0 10000001 */ b .L7F09D4A8 -/* 0D1FD4 7F09D4A4 24020001 */ li $v0, 1 -.L7F09D4A8: -/* 0D1FD8 7F09D4A8 8FBF006C */ lw $ra, 0x6c($sp) -/* 0D1FDC 7F09D4AC D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D1FE0 7F09D4B0 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0D1FE4 7F09D4B4 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0D1FE8 7F09D4B8 D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0D1FEC 7F09D4BC D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 0D1FF0 7F09D4C0 D7BE0040 */ ldc1 $f30, 0x40($sp) -/* 0D1FF4 7F09D4C4 8FB0004C */ lw $s0, 0x4c($sp) -/* 0D1FF8 7F09D4C8 8FB10050 */ lw $s1, 0x50($sp) -/* 0D1FFC 7F09D4CC 8FB20054 */ lw $s2, 0x54($sp) -/* 0D2000 7F09D4D0 8FB30058 */ lw $s3, 0x58($sp) -/* 0D2004 7F09D4D4 8FB4005C */ lw $s4, 0x5c($sp) -/* 0D2008 7F09D4D8 8FB50060 */ lw $s5, 0x60($sp) -/* 0D200C 7F09D4DC 8FB60064 */ lw $s6, 0x64($sp) -/* 0D2010 7F09D4E0 8FB70068 */ lw $s7, 0x68($sp) -/* 0D2014 7F09D4E4 03E00008 */ jr $ra -/* 0D2018 7F09D4E8 27BD00C8 */ addiu $sp, $sp, 0xc8 -) -#endif - - -u8 sub_GAME_7F09D4EC(PropRecord* prop) +/* +* Address: 0x7F09D4EC +*/ +u8 explosionChrpropExplosionTick(PropRecord* prop) { Mtxf* player_matrix; player_matrix = camGetWorldToScreenMtxf(); - prop->Unk18 = -((((player_matrix->m[0][2] * prop->pos.x) + (player_matrix->m[1][2] * prop->pos.y)) + (player_matrix->m[2][2] * prop->pos.z)) + player_matrix->m[3][2]); + prop->zDepth = -((((player_matrix->m[0][2] * prop->pos.x) + (player_matrix->m[1][2] * prop->pos.y)) + (player_matrix->m[2][2] * prop->pos.z)) + player_matrix->m[3][2]); - if (prop->Unk18 < 100.0f) + if (prop->zDepth < 100.0f) { - prop->Unk18 *= 0.5f; + prop->zDepth *= 0.5f; } else { - prop->Unk18 -= 100.0f; + prop->zDepth -= 100.0f; } if (g_ClockTimer == 0) @@ -1874,1199 +841,372 @@ u8 sub_GAME_7F09D4EC(PropRecord* prop) } -#ifdef NONMATCHING -void unk09c250RenderPropExplosion(void) { +/*** + * Perfect Dark Gfx *explosionRender(struct prop *prop, Gfx *gdl, bool xlupass) + * + * NTSC address 0x7F09D5A0. +*/ +Gfx *explosionRenderPropExplosion(PropRecord *prop, Gfx *gdl, s32 withalpha) +{ + s32 temp_s1; + struct Explosion *temp_s5; + struct coord3d *temp_s6; + s32 var_s2; + + struct bbox2d sp70; + + s32 temp_f10; + s32 i; + + temp_s1 = prop->rooms[0]; + temp_s5 = prop->explosion; + temp_s6 = getRoomPositionByIndex((s32) temp_s1); + + if (withalpha == 0) + { + return gdl; + } + else + { + if (sub_GAME_7F054A64(prop, &sp70) > 0) + { + gdl = bgScissorCurrentPlayerViewF(gdl, sp70.min.f[0], sp70.min.f[1], sp70.max.f[0], sp70.max.f[1]); + } + else + { + gdl = bgScissorCurrentPlayerViewDefault(gdl); + } + + gSPClearGeometryMode(gdl++, G_CULL_BOTH | G_FOG); + gSPMatrix(gdl++, osVirtualToPhysical((void*)get_BONDdata_field_10E0()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + + gdl = applyRoomMatrixToDisplayList(gdl, temp_s1); + + gSPSegment(gdl++, SPSEGMENT_GETITLE, osVirtualToPhysical(pGlobalimagetable)); + + for (var_s2 = 14; + var_s2 >= 0; + var_s2--) + { + gSPDisplayList(gdl++, g_ExplosionDisplayLists[var_s2]); + + for (i = 0; i < EXPLOSION_PARTS_LEN; i++) + { + if (temp_s5->parts[i].frame > 0 + && var_s2 == (s32)( (f32)(temp_s5->parts[i].frame - 1) / g_ExplosionTypes[temp_s5->explosion_type].flareanimspeed ) ) + { + gdl = explosionRenderPart(&temp_s5->parts[i], gdl, temp_s6); + } + } + } + + gSPMatrix(gdl++, osVirtualToPhysical((void*)currentPlayerGetProjectionMatrix()), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + + temp_f10 = (s32) (g_ExplosionTypes[temp_s5->explosion_type].flareanimspeed * 15.0f); + + for (i = 0; i < EXPLOSION_PARTS_LEN; i++) + { + if (temp_f10 < temp_s5->parts[i].frame) + { + temp_s5->parts[i].frame = 0; + } + } + } + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel unk09c250RenderPropExplosion -/* 0D20D0 7F09D5A0 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 0D20D4 7F09D5A4 AFB0001C */ sw $s0, 0x1c($sp) -/* 0D20D8 7F09D5A8 AFBF003C */ sw $ra, 0x3c($sp) -/* 0D20DC 7F09D5AC AFB70038 */ sw $s7, 0x38($sp) -/* 0D20E0 7F09D5B0 AFB60034 */ sw $s6, 0x34($sp) -/* 0D20E4 7F09D5B4 AFB50030 */ sw $s5, 0x30($sp) -/* 0D20E8 7F09D5B8 AFB4002C */ sw $s4, 0x2c($sp) -/* 0D20EC 7F09D5BC AFB30028 */ sw $s3, 0x28($sp) -/* 0D20F0 7F09D5C0 AFB20024 */ sw $s2, 0x24($sp) -/* 0D20F4 7F09D5C4 AFB10020 */ sw $s1, 0x20($sp) -/* 0D20F8 7F09D5C8 9091002C */ lbu $s1, 0x2c($a0) -/* 0D20FC 7F09D5CC 00808025 */ move $s0, $a0 -/* 0D2100 7F09D5D0 8C950004 */ lw $s5, 4($a0) -/* 0D2104 7F09D5D4 00C09025 */ move $s2, $a2 -/* 0D2108 7F09D5D8 00A0A025 */ move $s4, $a1 -/* 0D210C 7F09D5DC 0FC2F285 */ jal getRoomIndexPOS -/* 0D2110 7F09D5E0 02202025 */ move $a0, $s1 -/* 0D2114 7F09D5E4 16400003 */ bnez $s2, .L7F09D5F4 -/* 0D2118 7F09D5E8 0040B025 */ move $s6, $v0 -/* 0D211C 7F09D5EC 10000084 */ b .L7F09D800 -/* 0D2120 7F09D5F0 02801025 */ move $v0, $s4 -.L7F09D5F4: -/* 0D2124 7F09D5F4 02002025 */ move $a0, $s0 -/* 0D2128 7F09D5F8 0FC15299 */ jal sub_GAME_7F054A64 -/* 0D212C 7F09D5FC 27A50070 */ addiu $a1, $sp, 0x70 -/* 0D2130 7F09D600 1840000A */ blez $v0, .L7F09D62C -/* 0D2134 7F09D604 00000000 */ nop -/* 0D2138 7F09D608 C7A4007C */ lwc1 $f4, 0x7c($sp) -/* 0D213C 7F09D60C 02802025 */ move $a0, $s4 -/* 0D2140 7F09D610 8FA50070 */ lw $a1, 0x70($sp) -/* 0D2144 7F09D614 8FA60074 */ lw $a2, 0x74($sp) -/* 0D2148 7F09D618 8FA70078 */ lw $a3, 0x78($sp) -/* 0D214C 7F09D61C 0FC2D3FD */ jal bgScissorCurrentPlayerViewF -/* 0D2150 7F09D620 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0D2154 7F09D624 10000004 */ b .L7F09D638 -/* 0D2158 7F09D628 0040A025 */ move $s4, $v0 -.L7F09D62C: -/* 0D215C 7F09D62C 0FC2D3ED */ jal bgScissorCurrentPlayerViewDefault -/* 0D2160 7F09D630 02802025 */ move $a0, $s4 -/* 0D2164 7F09D634 0040A025 */ move $s4, $v0 -.L7F09D638: -/* 0D2168 7F09D638 02801025 */ move $v0, $s4 -/* 0D216C 7F09D63C 3C0F0001 */ lui $t7, (0x00013000 >> 16) # lui $t7, 1 -/* 0D2170 7F09D640 35EF3000 */ ori $t7, (0x00013000 & 0xFFFF) # ori $t7, $t7, 0x3000 -/* 0D2174 7F09D644 26940008 */ addiu $s4, $s4, 8 -/* 0D2178 7F09D648 3C0EB600 */ lui $t6, 0xb600 -/* 0D217C 7F09D64C 3C180103 */ lui $t8, (0x01030040 >> 16) # lui $t8, 0x103 -/* 0D2180 7F09D650 AC4E0000 */ sw $t6, ($v0) -/* 0D2184 7F09D654 AC4F0004 */ sw $t7, 4($v0) -/* 0D2188 7F09D658 37180040 */ ori $t8, (0x01030040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0D218C 7F09D65C 02808025 */ move $s0, $s4 -/* 0D2190 7F09D660 AE180000 */ sw $t8, ($s0) -/* 0D2194 7F09D664 0FC1E0E5 */ jal get_BONDdata_field_10E0 -/* 0D2198 7F09D668 26940008 */ addiu $s4, $s4, 8 -/* 0D219C 7F09D66C 0C003A2C */ jal osVirtualToPhysical -/* 0D21A0 7F09D670 00402025 */ move $a0, $v0 -/* 0D21A4 7F09D674 AE020004 */ sw $v0, 4($s0) -/* 0D21A8 7F09D678 02802025 */ move $a0, $s4 -/* 0D21AC 7F09D67C 0FC2F271 */ jal sub_GAME_7F0BC9C4 -/* 0D21B0 7F09D680 02202825 */ move $a1, $s1 -/* 0D21B4 7F09D684 3C19BC00 */ lui $t9, (0xBC000806 >> 16) # lui $t9, 0xbc00 -/* 0D21B8 7F09D688 37390806 */ ori $t9, (0xBC000806 & 0xFFFF) # ori $t9, $t9, 0x806 -/* 0D21BC 7F09D68C AC590000 */ sw $t9, ($v0) -/* 0D21C0 7F09D690 3C048009 */ lui $a0, %hi(pGlobalimagetable) -/* 0D21C4 7F09D694 8C84D0B4 */ lw $a0, %lo(pGlobalimagetable)($a0) -/* 0D21C8 7F09D698 00408025 */ move $s0, $v0 -/* 0D21CC 7F09D69C 0C003A2C */ jal osVirtualToPhysical -/* 0D21D0 7F09D6A0 24540008 */ addiu $s4, $v0, 8 -/* 0D21D4 7F09D6A4 3C178004 */ lui $s7, %hi(array_smoke_types+0x680) -/* 0D21D8 7F09D6A8 3C138004 */ lui $s3, %hi(array_explosion_types) -/* 0D21DC 7F09D6AC AE020004 */ sw $v0, 4($s0) -/* 0D21E0 7F09D6B0 26730284 */ addiu $s3, %lo(array_explosion_types) # addiu $s3, $s3, 0x284 -/* 0D21E4 7F09D6B4 26F707FC */ addiu $s7, %lo(array_smoke_types+0x680) # addiu $s7, $s7, 0x7fc -/* 0D21E8 7F09D6B8 2412000E */ li $s2, 14 -.L7F09D6BC: -/* 0D21EC 7F09D6BC 02801025 */ move $v0, $s4 -/* 0D21F0 7F09D6C0 3C080600 */ lui $t0, 0x600 -/* 0D21F4 7F09D6C4 AC480000 */ sw $t0, ($v0) -/* 0D21F8 7F09D6C8 8EE90000 */ lw $t1, ($s7) -/* 0D21FC 7F09D6CC 26940008 */ addiu $s4, $s4, 8 -/* 0D2200 7F09D6D0 00008825 */ move $s1, $zero -/* 0D2204 7F09D6D4 02A08025 */ move $s0, $s5 -/* 0D2208 7F09D6D8 AC490004 */ sw $t1, 4($v0) -.L7F09D6DC: -/* 0D220C 7F09D6DC 8602001C */ lh $v0, 0x1c($s0) -/* 0D2210 7F09D6E0 18400012 */ blez $v0, .L7F09D72C -/* 0D2214 7F09D6E4 244AFFFF */ addiu $t2, $v0, -1 -/* 0D2218 7F09D6E8 448A3000 */ mtc1 $t2, $f6 -/* 0D221C 7F09D6EC 82AB03CC */ lb $t3, 0x3cc($s5) -/* 0D2220 7F09D6F0 26040008 */ addiu $a0, $s0, 8 -/* 0D2224 7F09D6F4 46803220 */ cvt.s.w $f8, $f6 -/* 0D2228 7F09D6F8 000B6180 */ sll $t4, $t3, 6 -/* 0D222C 7F09D6FC 026C6821 */ addu $t5, $s3, $t4 -/* 0D2230 7F09D700 C5AA0020 */ lwc1 $f10, 0x20($t5) -/* 0D2234 7F09D704 02802825 */ move $a1, $s4 -/* 0D2238 7F09D708 460A4403 */ div.s $f16, $f8, $f10 -/* 0D223C 7F09D70C 4600848D */ trunc.w.s $f18, $f16 -/* 0D2240 7F09D710 440F9000 */ mfc1 $t7, $f18 -/* 0D2244 7F09D714 00000000 */ nop -/* 0D2248 7F09D718 564F0005 */ bnel $s2, $t7, .L7F09D730 -/* 0D224C 7F09D71C 26310018 */ addiu $s1, $s1, 0x18 -/* 0D2250 7F09D720 0FC2760B */ jal sub_GAME_7F09D82C -/* 0D2254 7F09D724 02C03025 */ move $a2, $s6 -/* 0D2258 7F09D728 0040A025 */ move $s4, $v0 -.L7F09D72C: -/* 0D225C 7F09D72C 26310018 */ addiu $s1, $s1, 0x18 -.L7F09D730: -/* 0D2260 7F09D730 2A2103C0 */ slti $at, $s1, 0x3c0 -/* 0D2264 7F09D734 1420FFE9 */ bnez $at, .L7F09D6DC -/* 0D2268 7F09D738 26100018 */ addiu $s0, $s0, 0x18 -/* 0D226C 7F09D73C 2652FFFF */ addiu $s2, $s2, -1 -/* 0D2270 7F09D740 0641FFDE */ bgez $s2, .L7F09D6BC -/* 0D2274 7F09D744 26F7FFFC */ addiu $s7, $s7, -4 -/* 0D2278 7F09D748 3C180103 */ lui $t8, (0x01030040 >> 16) # lui $t8, 0x103 -/* 0D227C 7F09D74C 37180040 */ ori $t8, (0x01030040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0D2280 7F09D750 02809025 */ move $s2, $s4 -/* 0D2284 7F09D754 AE580000 */ sw $t8, ($s2) -/* 0D2288 7F09D758 0FC1E0DD */ jal currentPlayerGetProjectionMatrix -/* 0D228C 7F09D75C 26940008 */ addiu $s4, $s4, 8 -/* 0D2290 7F09D760 0C003A2C */ jal osVirtualToPhysical -/* 0D2294 7F09D764 00402025 */ move $a0, $v0 -/* 0D2298 7F09D768 AE420004 */ sw $v0, 4($s2) -/* 0D229C 7F09D76C 82B903CC */ lb $t9, 0x3cc($s5) -/* 0D22A0 7F09D770 3C014170 */ li $at, 0x41700000 # 15.000000 -/* 0D22A4 7F09D774 44813000 */ mtc1 $at, $f6 -/* 0D22A8 7F09D778 00194180 */ sll $t0, $t9, 6 -/* 0D22AC 7F09D77C 02684821 */ addu $t1, $s3, $t0 -/* 0D22B0 7F09D780 C5240020 */ lwc1 $f4, 0x20($t1) -/* 0D22B4 7F09D784 240203C0 */ li $v0, 960 -/* 0D22B8 7F09D788 00008825 */ move $s1, $zero -/* 0D22BC 7F09D78C 46062202 */ mul.s $f8, $f4, $f6 -/* 0D22C0 7F09D790 02A08025 */ move $s0, $s5 -/* 0D22C4 7F09D794 4600428D */ trunc.w.s $f10, $f8 -/* 0D22C8 7F09D798 44035000 */ mfc1 $v1, $f10 -/* 0D22CC 7F09D79C 00000000 */ nop -.L7F09D7A0: -/* 0D22D0 7F09D7A0 860B001C */ lh $t3, 0x1c($s0) -/* 0D22D4 7F09D7A4 26310060 */ addiu $s1, $s1, 0x60 -/* 0D22D8 7F09D7A8 006B082A */ slt $at, $v1, $t3 -/* 0D22DC 7F09D7AC 50200003 */ beql $at, $zero, .L7F09D7BC -/* 0D22E0 7F09D7B0 860C0034 */ lh $t4, 0x34($s0) -/* 0D22E4 7F09D7B4 A600001C */ sh $zero, 0x1c($s0) -/* 0D22E8 7F09D7B8 860C0034 */ lh $t4, 0x34($s0) -.L7F09D7BC: -/* 0D22EC 7F09D7BC 006C082A */ slt $at, $v1, $t4 -/* 0D22F0 7F09D7C0 50200003 */ beql $at, $zero, .L7F09D7D0 -/* 0D22F4 7F09D7C4 860D004C */ lh $t5, 0x4c($s0) -/* 0D22F8 7F09D7C8 A6000034 */ sh $zero, 0x34($s0) -/* 0D22FC 7F09D7CC 860D004C */ lh $t5, 0x4c($s0) -.L7F09D7D0: -/* 0D2300 7F09D7D0 006D082A */ slt $at, $v1, $t5 -/* 0D2304 7F09D7D4 50200003 */ beql $at, $zero, .L7F09D7E4 -/* 0D2308 7F09D7D8 860E0064 */ lh $t6, 0x64($s0) -/* 0D230C 7F09D7DC A600004C */ sh $zero, 0x4c($s0) -/* 0D2310 7F09D7E0 860E0064 */ lh $t6, 0x64($s0) -.L7F09D7E4: -/* 0D2314 7F09D7E4 006E082A */ slt $at, $v1, $t6 -/* 0D2318 7F09D7E8 10200002 */ beqz $at, .L7F09D7F4 -/* 0D231C 7F09D7EC 00000000 */ nop -/* 0D2320 7F09D7F0 A6000064 */ sh $zero, 0x64($s0) -.L7F09D7F4: -/* 0D2324 7F09D7F4 1622FFEA */ bne $s1, $v0, .L7F09D7A0 -/* 0D2328 7F09D7F8 26100060 */ addiu $s0, $s0, 0x60 -/* 0D232C 7F09D7FC 02801025 */ move $v0, $s4 -.L7F09D800: -/* 0D2330 7F09D800 8FBF003C */ lw $ra, 0x3c($sp) -/* 0D2334 7F09D804 8FB0001C */ lw $s0, 0x1c($sp) -/* 0D2338 7F09D808 8FB10020 */ lw $s1, 0x20($sp) -/* 0D233C 7F09D80C 8FB20024 */ lw $s2, 0x24($sp) -/* 0D2340 7F09D810 8FB30028 */ lw $s3, 0x28($sp) -/* 0D2344 7F09D814 8FB4002C */ lw $s4, 0x2c($sp) -/* 0D2348 7F09D818 8FB50030 */ lw $s5, 0x30($sp) -/* 0D234C 7F09D81C 8FB60034 */ lw $s6, 0x34($sp) -/* 0D2350 7F09D820 8FB70038 */ lw $s7, 0x38($sp) -/* 0D2354 7F09D824 03E00008 */ jr $ra -/* 0D2358 7F09D828 27BD0090 */ addiu $sp, $sp, 0x90 -) -#endif +/*** + * Perfect Dark Gfx *explosionRenderPart(struct explosion *exp, struct explosionpart *part, Gfx *gdl, struct coord *coord, s32 arg4) + * + * NTSC address 0x7F09D82C. +*/ +Gfx *explosionRenderPart(struct ExplosionPart *arg0, Gfx *gdl, struct coord3d *coord) +{ + s32 padding1; + f32 f2; + + Vtx spA0; + Mtxf *sp9C; + struct coord3d *sp98; + struct coord3d sp8C; + struct coord3d sp80; + struct coord3d sp74; + struct coord3d sp68; + f32 sp64; + f32 sp60; + f32 sp5C; + + Vtx *vertices; + + f32 sp54; + f32 sp50; + + f32 sp4c; + f32 sp48; + f32 sp44; + + f32 temp_f0; + f32 var_f12; -#ifdef NONMATCHING -void sub_GAME_7F09D82C(void) { + spA0 = g_ExplosionRenderPartDefaultVertex; + sp9C = currentPlayerGetMatrix10D4(); + sp98 = bondviewGetCurrentPlayersPosition(); + + sp64 = arg0->pos.f[0] - sp98->f[0]; + sp60 = arg0->pos.f[1] - sp98->f[1]; + sp5C = arg0->pos.f[2] - sp98->f[2]; + + temp_f0 = sqrtf((sp64 * sp64) + (sp60 * sp60) + (sp5C * sp5C)); + var_f12 = temp_f0 * 0.5f; + if (var_f12 > 100.0f) + { + var_f12 = 100.0f; + } + + if (temp_f0 == 0) + { + f2 = 0.0f; + } + else + { + f2 = (temp_f0 - var_f12) / temp_f0; + } + + sp54 = arg0->size * f2; + sp50 = arg0->rot * f2; + + sp4c = sp98->f[0] + (sp64 * f2); + sp48 = sp98->f[1] + (sp60 * f2); + sp44 = sp98->f[2] + (sp5C * f2); + + vertices = dynAllocate7F0BD6C4(4); + + vertices[0] = spA0; + vertices[1] = spA0; + vertices[2] = spA0; + vertices[3] = spA0; + vertices[4] = spA0; + + sp8C.f[0] = sp9C->m[0][0] * sp54; + sp8C.f[1] = sp9C->m[0][1] * sp54; + sp8C.f[2] = sp9C->m[0][2] * sp54; + + sp80.f[0] = sp9C->m[0][0] * sp50; + sp80.f[1] = sp9C->m[0][1] * sp50; + sp80.f[2] = sp9C->m[0][2] * sp50; + + sp74.f[0] = sp9C->m[1][0] * sp54; + sp74.f[1] = sp9C->m[1][1] * sp54; + sp74.f[2] = sp9C->m[1][2] * sp54; + + sp68.f[0] = sp9C->m[1][0] * sp50; + sp68.f[1] = sp9C->m[1][1] * sp50; + sp68.f[2] = sp9C->m[1][2] * sp50; + + vertices[0].v.ob[0] = (sp4c - sp8C.f[0] - sp68.f[0]) * get_room_data_float1() - coord->f[0]; + vertices[0].v.ob[1] = (sp48 - sp8C.f[1] - sp68.f[1]) * get_room_data_float1() - coord->f[1]; + vertices[0].v.ob[2] = (sp44 - sp8C.f[2] - sp68.f[2]) * get_room_data_float1() - coord->f[2]; + vertices[0].v.tc[0] = 1760; + vertices[0].v.tc[1] = 0; + + vertices[1].v.ob[0] = (sp4c + sp80.f[0] - sp74.f[0]) * get_room_data_float1() - coord->f[0]; + vertices[1].v.ob[1] = (sp48 + sp80.f[1] - sp74.f[1]) * get_room_data_float1() - coord->f[1]; + vertices[1].v.ob[2] = (sp44 + sp80.f[2] - sp74.f[2]) * get_room_data_float1() - coord->f[2]; + vertices[1].v.tc[0] = 0; + vertices[1].v.tc[1] = 0; + + vertices[2].v.ob[0] = (sp4c + sp8C.f[0] + sp68.f[0]) * get_room_data_float1() - coord->f[0]; + vertices[2].v.ob[1] = (sp48 + sp8C.f[1] + sp68.f[1]) * get_room_data_float1() - coord->f[1]; + vertices[2].v.ob[2] = (sp44 + sp8C.f[2] + sp68.f[2]) * get_room_data_float1() - coord->f[2]; + vertices[2].v.tc[0] = 0; + vertices[2].v.tc[1] = 1760; + + vertices[3].v.ob[0] = (sp4c - sp80.f[0] + sp74.f[0]) * get_room_data_float1() - coord->f[0]; + vertices[3].v.ob[1] = (sp48 - sp80.f[1] + sp74.f[1]) * get_room_data_float1() - coord->f[1]; + vertices[3].v.ob[2] = (sp44 - sp80.f[2] + sp74.f[2]) * get_room_data_float1() - coord->f[2]; + vertices[3].v.tc[0] = 1760; + vertices[3].v.tc[1] = 1760; + + gSPVertex(gdl++, osVirtualToPhysical(vertices), 4, 0); + + gSP2Triangles(gdl++, 0, 1, 2, 0, 0, 2, 3, 0); + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F09D82C -/* 0D235C 7F09D82C 27BDFF48 */ addiu $sp, $sp, -0xb8 -/* 0D2360 7F09D830 3C0F8004 */ lui $t7, %hi(D_8004080C+0xF4) -/* 0D2364 7F09D834 AFBF0024 */ sw $ra, 0x24($sp) -/* 0D2368 7F09D838 AFB20020 */ sw $s2, 0x20($sp) -/* 0D236C 7F09D83C AFB1001C */ sw $s1, 0x1c($sp) -/* 0D2370 7F09D840 AFB00018 */ sw $s0, 0x18($sp) -/* 0D2374 7F09D844 25EF0900 */ addiu $t7, %lo(D_8004080C+0xF4) # addiu $t7, $t7, 0x900 -/* 0D2378 7F09D848 8DE10000 */ lw $at, ($t7) -/* 0D237C 7F09D84C 8DE80004 */ lw $t0, 4($t7) -/* 0D2380 7F09D850 27AE00A0 */ addiu $t6, $sp, 0xa0 -/* 0D2384 7F09D854 ADC10000 */ sw $at, ($t6) -/* 0D2388 7F09D858 ADC80004 */ sw $t0, 4($t6) -/* 0D238C 7F09D85C 8DE8000C */ lw $t0, 0xc($t7) -/* 0D2390 7F09D860 8DE10008 */ lw $at, 8($t7) -/* 0D2394 7F09D864 00808025 */ move $s0, $a0 -/* 0D2398 7F09D868 00C08825 */ move $s1, $a2 -/* 0D239C 7F09D86C 00A09025 */ move $s2, $a1 -/* 0D23A0 7F09D870 ADC8000C */ sw $t0, 0xc($t6) -/* 0D23A4 7F09D874 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 0D23A8 7F09D878 ADC10008 */ sw $at, 8($t6) -/* 0D23AC 7F09D87C 0FC227F5 */ jal bondviewGetCurrentPlayersPosition -/* 0D23B0 7F09D880 AFA2009C */ sw $v0, 0x9c($sp) -/* 0D23B4 7F09D884 C6040000 */ lwc1 $f4, ($s0) -/* 0D23B8 7F09D888 C4460000 */ lwc1 $f6, ($v0) -/* 0D23BC 7F09D88C C6080004 */ lwc1 $f8, 4($s0) -/* 0D23C0 7F09D890 C44A0004 */ lwc1 $f10, 4($v0) -/* 0D23C4 7F09D894 46062381 */ sub.s $f14, $f4, $f6 -/* 0D23C8 7F09D898 C4460008 */ lwc1 $f6, 8($v0) -/* 0D23CC 7F09D89C C6040008 */ lwc1 $f4, 8($s0) -/* 0D23D0 7F09D8A0 460A4401 */ sub.s $f16, $f8, $f10 -/* 0D23D4 7F09D8A4 460E7202 */ mul.s $f8, $f14, $f14 -/* 0D23D8 7F09D8A8 E7AE0064 */ swc1 $f14, 0x64($sp) -/* 0D23DC 7F09D8AC 46062481 */ sub.s $f18, $f4, $f6 -/* 0D23E0 7F09D8B0 46108282 */ mul.s $f10, $f16, $f16 -/* 0D23E4 7F09D8B4 E7B00060 */ swc1 $f16, 0x60($sp) -/* 0D23E8 7F09D8B8 AFA20098 */ sw $v0, 0x98($sp) -/* 0D23EC 7F09D8BC 46129182 */ mul.s $f6, $f18, $f18 -/* 0D23F0 7F09D8C0 E7B2005C */ swc1 $f18, 0x5c($sp) -/* 0D23F4 7F09D8C4 460A4100 */ add.s $f4, $f8, $f10 -/* 0D23F8 7F09D8C8 0C007DF8 */ jal sqrtf -/* 0D23FC 7F09D8CC 46062300 */ add.s $f12, $f4, $f6 -/* 0D2400 7F09D8D0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D2404 7F09D8D4 44814000 */ mtc1 $at, $f8 -/* 0D2408 7F09D8D8 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 0D240C 7F09D8DC 44815000 */ mtc1 $at, $f10 -/* 0D2410 7F09D8E0 46080302 */ mul.s $f12, $f0, $f8 -/* 0D2414 7F09D8E4 44802000 */ mtc1 $zero, $f4 -/* 0D2418 7F09D8E8 8FA3009C */ lw $v1, 0x9c($sp) -/* 0D241C 7F09D8EC 8FA50098 */ lw $a1, 0x98($sp) -/* 0D2420 7F09D8F0 C7AE0064 */ lwc1 $f14, 0x64($sp) -/* 0D2424 7F09D8F4 C7B00060 */ lwc1 $f16, 0x60($sp) -/* 0D2428 7F09D8F8 C7B2005C */ lwc1 $f18, 0x5c($sp) -/* 0D242C 7F09D8FC 460C503C */ c.lt.s $f10, $f12 -/* 0D2430 7F09D900 00000000 */ nop -/* 0D2434 7F09D904 45000003 */ bc1f .L7F09D914 -/* 0D2438 7F09D908 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 0D243C 7F09D90C 44816000 */ mtc1 $at, $f12 -/* 0D2440 7F09D910 00000000 */ nop -.L7F09D914: -/* 0D2444 7F09D914 46040032 */ c.eq.s $f0, $f4 -/* 0D2448 7F09D918 00000000 */ nop -/* 0D244C 7F09D91C 45020005 */ bc1fl .L7F09D934 -/* 0D2450 7F09D920 460C0181 */ sub.s $f6, $f0, $f12 -/* 0D2454 7F09D924 44801000 */ mtc1 $zero, $f2 -/* 0D2458 7F09D928 10000004 */ b .L7F09D93C -/* 0D245C 7F09D92C C608000C */ lwc1 $f8, 0xc($s0) -/* 0D2460 7F09D930 460C0181 */ sub.s $f6, $f0, $f12 -.L7F09D934: -/* 0D2464 7F09D934 46003083 */ div.s $f2, $f6, $f0 -/* 0D2468 7F09D938 C608000C */ lwc1 $f8, 0xc($s0) -.L7F09D93C: -/* 0D246C 7F09D93C C60A0010 */ lwc1 $f10, 0x10($s0) -/* 0D2470 7F09D940 C4A40000 */ lwc1 $f4, ($a1) -/* 0D2474 7F09D944 46024002 */ mul.s $f0, $f8, $f2 -/* 0D2478 7F09D948 24040004 */ li $a0, 4 -/* 0D247C 7F09D94C 46025302 */ mul.s $f12, $f10, $f2 -/* 0D2480 7F09D950 00000000 */ nop -/* 0D2484 7F09D954 46027182 */ mul.s $f6, $f14, $f2 -/* 0D2488 7F09D958 46062200 */ add.s $f8, $f4, $f6 -/* 0D248C 7F09D95C 46028102 */ mul.s $f4, $f16, $f2 -/* 0D2490 7F09D960 E7A8004C */ swc1 $f8, 0x4c($sp) -/* 0D2494 7F09D964 C4AA0004 */ lwc1 $f10, 4($a1) -/* 0D2498 7F09D968 46045180 */ add.s $f6, $f10, $f4 -/* 0D249C 7F09D96C 46029282 */ mul.s $f10, $f18, $f2 -/* 0D24A0 7F09D970 E7A60048 */ swc1 $f6, 0x48($sp) -/* 0D24A4 7F09D974 C4A80008 */ lwc1 $f8, 8($a1) -/* 0D24A8 7F09D978 E7AC0050 */ swc1 $f12, 0x50($sp) -/* 0D24AC 7F09D97C E7A00054 */ swc1 $f0, 0x54($sp) -/* 0D24B0 7F09D980 460A4100 */ add.s $f4, $f8, $f10 -/* 0D24B4 7F09D984 AFA3009C */ sw $v1, 0x9c($sp) -/* 0D24B8 7F09D988 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 0D24BC 7F09D98C E7A40044 */ swc1 $f4, 0x44($sp) -/* 0D24C0 7F09D990 27A400A0 */ addiu $a0, $sp, 0xa0 -/* 0D24C4 7F09D994 8C810000 */ lw $at, ($a0) -/* 0D24C8 7F09D998 8FA3009C */ lw $v1, 0x9c($sp) -/* 0D24CC 7F09D99C C7A00054 */ lwc1 $f0, 0x54($sp) -/* 0D24D0 7F09D9A0 C7AC0050 */ lwc1 $f12, 0x50($sp) -/* 0D24D4 7F09D9A4 AC410000 */ sw $at, ($v0) -/* 0D24D8 7F09D9A8 8C8B0004 */ lw $t3, 4($a0) -/* 0D24DC 7F09D9AC 00408025 */ move $s0, $v0 -/* 0D24E0 7F09D9B0 AC4B0004 */ sw $t3, 4($v0) -/* 0D24E4 7F09D9B4 8C810008 */ lw $at, 8($a0) -/* 0D24E8 7F09D9B8 AC410008 */ sw $at, 8($v0) -/* 0D24EC 7F09D9BC 8C8B000C */ lw $t3, 0xc($a0) -/* 0D24F0 7F09D9C0 AC4B000C */ sw $t3, 0xc($v0) -/* 0D24F4 7F09D9C4 8C810000 */ lw $at, ($a0) -/* 0D24F8 7F09D9C8 AC410010 */ sw $at, 0x10($v0) -/* 0D24FC 7F09D9CC 8C990004 */ lw $t9, 4($a0) -/* 0D2500 7F09D9D0 AC590014 */ sw $t9, 0x14($v0) -/* 0D2504 7F09D9D4 8C810008 */ lw $at, 8($a0) -/* 0D2508 7F09D9D8 AC410018 */ sw $at, 0x18($v0) -/* 0D250C 7F09D9DC 8C99000C */ lw $t9, 0xc($a0) -/* 0D2510 7F09D9E0 AC59001C */ sw $t9, 0x1c($v0) -/* 0D2514 7F09D9E4 8C810000 */ lw $at, ($a0) -/* 0D2518 7F09D9E8 AC410020 */ sw $at, 0x20($v0) -/* 0D251C 7F09D9EC 8C8F0004 */ lw $t7, 4($a0) -/* 0D2520 7F09D9F0 AC4F0024 */ sw $t7, 0x24($v0) -/* 0D2524 7F09D9F4 8C810008 */ lw $at, 8($a0) -/* 0D2528 7F09D9F8 AC410028 */ sw $at, 0x28($v0) -/* 0D252C 7F09D9FC 8C8F000C */ lw $t7, 0xc($a0) -/* 0D2530 7F09DA00 AC4F002C */ sw $t7, 0x2c($v0) -/* 0D2534 7F09DA04 8C810000 */ lw $at, ($a0) -/* 0D2538 7F09DA08 AC410030 */ sw $at, 0x30($v0) -/* 0D253C 7F09DA0C 8C890004 */ lw $t1, 4($a0) -/* 0D2540 7F09DA10 AC490034 */ sw $t1, 0x34($v0) -/* 0D2544 7F09DA14 8C810008 */ lw $at, 8($a0) -/* 0D2548 7F09DA18 AC410038 */ sw $at, 0x38($v0) -/* 0D254C 7F09DA1C 8C89000C */ lw $t1, 0xc($a0) -/* 0D2550 7F09DA20 AC49003C */ sw $t1, 0x3c($v0) -/* 0D2554 7F09DA24 8C810000 */ lw $at, ($a0) -/* 0D2558 7F09DA28 AC410040 */ sw $at, 0x40($v0) -/* 0D255C 7F09DA2C 8C8C0004 */ lw $t4, 4($a0) -/* 0D2560 7F09DA30 AC4C0044 */ sw $t4, 0x44($v0) -/* 0D2564 7F09DA34 8C810008 */ lw $at, 8($a0) -/* 0D2568 7F09DA38 AC410048 */ sw $at, 0x48($v0) -/* 0D256C 7F09DA3C 8C8C000C */ lw $t4, 0xc($a0) -/* 0D2570 7F09DA40 AC4C004C */ sw $t4, 0x4c($v0) -/* 0D2574 7F09DA44 C4660000 */ lwc1 $f6, ($v1) -/* 0D2578 7F09DA48 46003202 */ mul.s $f8, $f6, $f0 -/* 0D257C 7F09DA4C E7A8008C */ swc1 $f8, 0x8c($sp) -/* 0D2580 7F09DA50 C46A0004 */ lwc1 $f10, 4($v1) -/* 0D2584 7F09DA54 46005102 */ mul.s $f4, $f10, $f0 -/* 0D2588 7F09DA58 E7A40090 */ swc1 $f4, 0x90($sp) -/* 0D258C 7F09DA5C C4660008 */ lwc1 $f6, 8($v1) -/* 0D2590 7F09DA60 46003202 */ mul.s $f8, $f6, $f0 -/* 0D2594 7F09DA64 E7A80094 */ swc1 $f8, 0x94($sp) -/* 0D2598 7F09DA68 C46A0000 */ lwc1 $f10, ($v1) -/* 0D259C 7F09DA6C 460C5102 */ mul.s $f4, $f10, $f12 -/* 0D25A0 7F09DA70 E7A40080 */ swc1 $f4, 0x80($sp) -/* 0D25A4 7F09DA74 C4660004 */ lwc1 $f6, 4($v1) -/* 0D25A8 7F09DA78 460C3202 */ mul.s $f8, $f6, $f12 -/* 0D25AC 7F09DA7C E7A80084 */ swc1 $f8, 0x84($sp) -/* 0D25B0 7F09DA80 C46A0008 */ lwc1 $f10, 8($v1) -/* 0D25B4 7F09DA84 460C5102 */ mul.s $f4, $f10, $f12 -/* 0D25B8 7F09DA88 E7A40088 */ swc1 $f4, 0x88($sp) -/* 0D25BC 7F09DA8C C4660010 */ lwc1 $f6, 0x10($v1) -/* 0D25C0 7F09DA90 46003202 */ mul.s $f8, $f6, $f0 -/* 0D25C4 7F09DA94 E7A80074 */ swc1 $f8, 0x74($sp) -/* 0D25C8 7F09DA98 C46A0014 */ lwc1 $f10, 0x14($v1) -/* 0D25CC 7F09DA9C 46005102 */ mul.s $f4, $f10, $f0 -/* 0D25D0 7F09DAA0 E7A40078 */ swc1 $f4, 0x78($sp) -/* 0D25D4 7F09DAA4 C4660018 */ lwc1 $f6, 0x18($v1) -/* 0D25D8 7F09DAA8 46003202 */ mul.s $f8, $f6, $f0 -/* 0D25DC 7F09DAAC E7A8007C */ swc1 $f8, 0x7c($sp) -/* 0D25E0 7F09DAB0 C46A0010 */ lwc1 $f10, 0x10($v1) -/* 0D25E4 7F09DAB4 460C5102 */ mul.s $f4, $f10, $f12 -/* 0D25E8 7F09DAB8 E7A40068 */ swc1 $f4, 0x68($sp) -/* 0D25EC 7F09DABC C4660014 */ lwc1 $f6, 0x14($v1) -/* 0D25F0 7F09DAC0 460C3202 */ mul.s $f8, $f6, $f12 -/* 0D25F4 7F09DAC4 E7A8006C */ swc1 $f8, 0x6c($sp) -/* 0D25F8 7F09DAC8 C46A0018 */ lwc1 $f10, 0x18($v1) -/* 0D25FC 7F09DACC 460C5102 */ mul.s $f4, $f10, $f12 -/* 0D2600 7F09DAD0 0FC2D20F */ jal get_room_data_float1 -/* 0D2604 7F09DAD4 E7A40070 */ swc1 $f4, 0x70($sp) -/* 0D2608 7F09DAD8 C7A6004C */ lwc1 $f6, 0x4c($sp) -/* 0D260C 7F09DADC C7A8008C */ lwc1 $f8, 0x8c($sp) -/* 0D2610 7F09DAE0 C7A40068 */ lwc1 $f4, 0x68($sp) -/* 0D2614 7F09DAE4 46083281 */ sub.s $f10, $f6, $f8 -/* 0D2618 7F09DAE8 46045181 */ sub.s $f6, $f10, $f4 -/* 0D261C 7F09DAEC C62A0000 */ lwc1 $f10, ($s1) -/* 0D2620 7F09DAF0 46003202 */ mul.s $f8, $f6, $f0 -/* 0D2624 7F09DAF4 460A4101 */ sub.s $f4, $f8, $f10 -/* 0D2628 7F09DAF8 4600218D */ trunc.w.s $f6, $f4 -/* 0D262C 7F09DAFC 440E3000 */ mfc1 $t6, $f6 -/* 0D2630 7F09DB00 0FC2D20F */ jal get_room_data_float1 -/* 0D2634 7F09DB04 A60E0000 */ sh $t6, ($s0) -/* 0D2638 7F09DB08 C7A80048 */ lwc1 $f8, 0x48($sp) -/* 0D263C 7F09DB0C C7AA0090 */ lwc1 $f10, 0x90($sp) -/* 0D2640 7F09DB10 C7A6006C */ lwc1 $f6, 0x6c($sp) -/* 0D2644 7F09DB14 460A4101 */ sub.s $f4, $f8, $f10 -/* 0D2648 7F09DB18 46062201 */ sub.s $f8, $f4, $f6 -/* 0D264C 7F09DB1C C6240004 */ lwc1 $f4, 4($s1) -/* 0D2650 7F09DB20 46004282 */ mul.s $f10, $f8, $f0 -/* 0D2654 7F09DB24 46045181 */ sub.s $f6, $f10, $f4 -/* 0D2658 7F09DB28 4600320D */ trunc.w.s $f8, $f6 -/* 0D265C 7F09DB2C 440F4000 */ mfc1 $t7, $f8 -/* 0D2660 7F09DB30 0FC2D20F */ jal get_room_data_float1 -/* 0D2664 7F09DB34 A60F0002 */ sh $t7, 2($s0) -/* 0D2668 7F09DB38 C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 0D266C 7F09DB3C C7A40094 */ lwc1 $f4, 0x94($sp) -/* 0D2670 7F09DB40 C7A80070 */ lwc1 $f8, 0x70($sp) -/* 0D2674 7F09DB44 240906E0 */ li $t1, 1760 -/* 0D2678 7F09DB48 46045181 */ sub.s $f6, $f10, $f4 -/* 0D267C 7F09DB4C 46083281 */ sub.s $f10, $f6, $f8 -/* 0D2680 7F09DB50 C6260008 */ lwc1 $f6, 8($s1) -/* 0D2684 7F09DB54 A6090008 */ sh $t1, 8($s0) -/* 0D2688 7F09DB58 A600000A */ sh $zero, 0xa($s0) -/* 0D268C 7F09DB5C 46005102 */ mul.s $f4, $f10, $f0 -/* 0D2690 7F09DB60 46062201 */ sub.s $f8, $f4, $f6 -/* 0D2694 7F09DB64 4600428D */ trunc.w.s $f10, $f8 -/* 0D2698 7F09DB68 44085000 */ mfc1 $t0, $f10 -/* 0D269C 7F09DB6C 0FC2D20F */ jal get_room_data_float1 -/* 0D26A0 7F09DB70 A6080004 */ sh $t0, 4($s0) -/* 0D26A4 7F09DB74 C7A4004C */ lwc1 $f4, 0x4c($sp) -/* 0D26A8 7F09DB78 C7A60080 */ lwc1 $f6, 0x80($sp) -/* 0D26AC 7F09DB7C C7AA0074 */ lwc1 $f10, 0x74($sp) -/* 0D26B0 7F09DB80 46062200 */ add.s $f8, $f4, $f6 -/* 0D26B4 7F09DB84 460A4101 */ sub.s $f4, $f8, $f10 -/* 0D26B8 7F09DB88 C6280000 */ lwc1 $f8, ($s1) -/* 0D26BC 7F09DB8C 46002182 */ mul.s $f6, $f4, $f0 -/* 0D26C0 7F09DB90 46083281 */ sub.s $f10, $f6, $f8 -/* 0D26C4 7F09DB94 4600510D */ trunc.w.s $f4, $f10 -/* 0D26C8 7F09DB98 440B2000 */ mfc1 $t3, $f4 -/* 0D26CC 7F09DB9C 0FC2D20F */ jal get_room_data_float1 -/* 0D26D0 7F09DBA0 A60B0010 */ sh $t3, 0x10($s0) -/* 0D26D4 7F09DBA4 C7A60048 */ lwc1 $f6, 0x48($sp) -/* 0D26D8 7F09DBA8 C7A80084 */ lwc1 $f8, 0x84($sp) -/* 0D26DC 7F09DBAC C7A40078 */ lwc1 $f4, 0x78($sp) -/* 0D26E0 7F09DBB0 46083280 */ add.s $f10, $f6, $f8 -/* 0D26E4 7F09DBB4 46045181 */ sub.s $f6, $f10, $f4 -/* 0D26E8 7F09DBB8 C62A0004 */ lwc1 $f10, 4($s1) -/* 0D26EC 7F09DBBC 46003202 */ mul.s $f8, $f6, $f0 -/* 0D26F0 7F09DBC0 460A4101 */ sub.s $f4, $f8, $f10 -/* 0D26F4 7F09DBC4 4600218D */ trunc.w.s $f6, $f4 -/* 0D26F8 7F09DBC8 44193000 */ mfc1 $t9, $f6 -/* 0D26FC 7F09DBCC 0FC2D20F */ jal get_room_data_float1 -/* 0D2700 7F09DBD0 A6190012 */ sh $t9, 0x12($s0) -/* 0D2704 7F09DBD4 C7A80044 */ lwc1 $f8, 0x44($sp) -/* 0D2708 7F09DBD8 C7AA0088 */ lwc1 $f10, 0x88($sp) -/* 0D270C 7F09DBDC C7A6007C */ lwc1 $f6, 0x7c($sp) -/* 0D2710 7F09DBE0 460A4100 */ add.s $f4, $f8, $f10 -/* 0D2714 7F09DBE4 46062201 */ sub.s $f8, $f4, $f6 -/* 0D2718 7F09DBE8 C6240008 */ lwc1 $f4, 8($s1) -/* 0D271C 7F09DBEC A6000018 */ sh $zero, 0x18($s0) -/* 0D2720 7F09DBF0 A600001A */ sh $zero, 0x1a($s0) -/* 0D2724 7F09DBF4 46004282 */ mul.s $f10, $f8, $f0 -/* 0D2728 7F09DBF8 46045181 */ sub.s $f6, $f10, $f4 -/* 0D272C 7F09DBFC 4600320D */ trunc.w.s $f8, $f6 -/* 0D2730 7F09DC00 44184000 */ mfc1 $t8, $f8 -/* 0D2734 7F09DC04 0FC2D20F */ jal get_room_data_float1 -/* 0D2738 7F09DC08 A6180014 */ sh $t8, 0x14($s0) -/* 0D273C 7F09DC0C C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0D2740 7F09DC10 C7A4008C */ lwc1 $f4, 0x8c($sp) -/* 0D2744 7F09DC14 C7A80068 */ lwc1 $f8, 0x68($sp) -/* 0D2748 7F09DC18 46045180 */ add.s $f6, $f10, $f4 -/* 0D274C 7F09DC1C 46083280 */ add.s $f10, $f6, $f8 -/* 0D2750 7F09DC20 C6260000 */ lwc1 $f6, ($s1) -/* 0D2754 7F09DC24 46005102 */ mul.s $f4, $f10, $f0 -/* 0D2758 7F09DC28 46062201 */ sub.s $f8, $f4, $f6 -/* 0D275C 7F09DC2C 4600428D */ trunc.w.s $f10, $f8 -/* 0D2760 7F09DC30 440A5000 */ mfc1 $t2, $f10 -/* 0D2764 7F09DC34 0FC2D20F */ jal get_room_data_float1 -/* 0D2768 7F09DC38 A60A0020 */ sh $t2, 0x20($s0) -/* 0D276C 7F09DC3C C7A40048 */ lwc1 $f4, 0x48($sp) -/* 0D2770 7F09DC40 C7A60090 */ lwc1 $f6, 0x90($sp) -/* 0D2774 7F09DC44 C7AA006C */ lwc1 $f10, 0x6c($sp) -/* 0D2778 7F09DC48 46062200 */ add.s $f8, $f4, $f6 -/* 0D277C 7F09DC4C 460A4100 */ add.s $f4, $f8, $f10 -/* 0D2780 7F09DC50 C6280004 */ lwc1 $f8, 4($s1) -/* 0D2784 7F09DC54 46002182 */ mul.s $f6, $f4, $f0 -/* 0D2788 7F09DC58 46083281 */ sub.s $f10, $f6, $f8 -/* 0D278C 7F09DC5C 4600510D */ trunc.w.s $f4, $f10 -/* 0D2790 7F09DC60 44092000 */ mfc1 $t1, $f4 -/* 0D2794 7F09DC64 0FC2D20F */ jal get_room_data_float1 -/* 0D2798 7F09DC68 A6090022 */ sh $t1, 0x22($s0) -/* 0D279C 7F09DC6C C7A60044 */ lwc1 $f6, 0x44($sp) -/* 0D27A0 7F09DC70 C7A80094 */ lwc1 $f8, 0x94($sp) -/* 0D27A4 7F09DC74 C7A40070 */ lwc1 $f4, 0x70($sp) -/* 0D27A8 7F09DC78 240C06E0 */ li $t4, 1760 -/* 0D27AC 7F09DC7C 46083280 */ add.s $f10, $f6, $f8 -/* 0D27B0 7F09DC80 46045180 */ add.s $f6, $f10, $f4 -/* 0D27B4 7F09DC84 C62A0008 */ lwc1 $f10, 8($s1) -/* 0D27B8 7F09DC88 A6000028 */ sh $zero, 0x28($s0) -/* 0D27BC 7F09DC8C A60C002A */ sh $t4, 0x2a($s0) -/* 0D27C0 7F09DC90 46003202 */ mul.s $f8, $f6, $f0 -/* 0D27C4 7F09DC94 460A4101 */ sub.s $f4, $f8, $f10 -/* 0D27C8 7F09DC98 4600218D */ trunc.w.s $f6, $f4 -/* 0D27CC 7F09DC9C 440B3000 */ mfc1 $t3, $f6 -/* 0D27D0 7F09DCA0 0FC2D20F */ jal get_room_data_float1 -/* 0D27D4 7F09DCA4 A60B0024 */ sh $t3, 0x24($s0) -/* 0D27D8 7F09DCA8 C7A8004C */ lwc1 $f8, 0x4c($sp) -/* 0D27DC 7F09DCAC C7AA0080 */ lwc1 $f10, 0x80($sp) -/* 0D27E0 7F09DCB0 C7A60074 */ lwc1 $f6, 0x74($sp) -/* 0D27E4 7F09DCB4 460A4101 */ sub.s $f4, $f8, $f10 -/* 0D27E8 7F09DCB8 46062200 */ add.s $f8, $f4, $f6 -/* 0D27EC 7F09DCBC C6240000 */ lwc1 $f4, ($s1) -/* 0D27F0 7F09DCC0 46004282 */ mul.s $f10, $f8, $f0 -/* 0D27F4 7F09DCC4 46045181 */ sub.s $f6, $f10, $f4 -/* 0D27F8 7F09DCC8 4600320D */ trunc.w.s $f8, $f6 -/* 0D27FC 7F09DCCC 440E4000 */ mfc1 $t6, $f8 -/* 0D2800 7F09DCD0 0FC2D20F */ jal get_room_data_float1 -/* 0D2804 7F09DCD4 A60E0030 */ sh $t6, 0x30($s0) -/* 0D2808 7F09DCD8 C7AA0048 */ lwc1 $f10, 0x48($sp) -/* 0D280C 7F09DCDC C7A40084 */ lwc1 $f4, 0x84($sp) -/* 0D2810 7F09DCE0 C7A80078 */ lwc1 $f8, 0x78($sp) -/* 0D2814 7F09DCE4 46045181 */ sub.s $f6, $f10, $f4 -/* 0D2818 7F09DCE8 46083280 */ add.s $f10, $f6, $f8 -/* 0D281C 7F09DCEC C6260004 */ lwc1 $f6, 4($s1) -/* 0D2820 7F09DCF0 46005102 */ mul.s $f4, $f10, $f0 -/* 0D2824 7F09DCF4 46062201 */ sub.s $f8, $f4, $f6 -/* 0D2828 7F09DCF8 4600428D */ trunc.w.s $f10, $f8 -/* 0D282C 7F09DCFC 440F5000 */ mfc1 $t7, $f10 -/* 0D2830 7F09DD00 0FC2D20F */ jal get_room_data_float1 -/* 0D2834 7F09DD04 A60F0032 */ sh $t7, 0x32($s0) -/* 0D2838 7F09DD08 C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0D283C 7F09DD0C C7A60088 */ lwc1 $f6, 0x88($sp) -/* 0D2840 7F09DD10 C7AA007C */ lwc1 $f10, 0x7c($sp) -/* 0D2844 7F09DD14 240906E0 */ li $t1, 1760 -/* 0D2848 7F09DD18 46062201 */ sub.s $f8, $f4, $f6 -/* 0D284C 7F09DD1C 240D06E0 */ li $t5, 1760 -/* 0D2850 7F09DD20 3C0B0430 */ lui $t3, (0x04300040 >> 16) # lui $t3, 0x430 -/* 0D2854 7F09DD24 356B0040 */ ori $t3, (0x04300040 & 0xFFFF) # ori $t3, $t3, 0x40 -/* 0D2858 7F09DD28 460A4100 */ add.s $f4, $f8, $f10 -/* 0D285C 7F09DD2C C6280008 */ lwc1 $f8, 8($s1) -/* 0D2860 7F09DD30 A6090038 */ sh $t1, 0x38($s0) -/* 0D2864 7F09DD34 A60D003A */ sh $t5, 0x3a($s0) -/* 0D2868 7F09DD38 46002182 */ mul.s $f6, $f4, $f0 -/* 0D286C 7F09DD3C 02402825 */ move $a1, $s2 -/* 0D2870 7F09DD40 26520008 */ addiu $s2, $s2, 8 -/* 0D2874 7F09DD44 02002025 */ move $a0, $s0 -/* 0D2878 7F09DD48 46083281 */ sub.s $f10, $f6, $f8 -/* 0D287C 7F09DD4C 4600510D */ trunc.w.s $f4, $f10 -/* 0D2880 7F09DD50 44082000 */ mfc1 $t0, $f4 -/* 0D2884 7F09DD54 00000000 */ nop -/* 0D2888 7F09DD58 A6080034 */ sh $t0, 0x34($s0) -/* 0D288C 7F09DD5C ACAB0000 */ sw $t3, ($a1) -/* 0D2890 7F09DD60 0C003A2C */ jal osVirtualToPhysical -/* 0D2894 7F09DD64 AFA50038 */ sw $a1, 0x38($sp) -/* 0D2898 7F09DD68 8FA50038 */ lw $a1, 0x38($sp) -/* 0D289C 7F09DD6C 02401825 */ move $v1, $s2 -/* 0D28A0 7F09DD70 3C0CB100 */ lui $t4, (0xB1000032 >> 16) # lui $t4, 0xb100 -/* 0D28A4 7F09DD74 ACA20004 */ sw $v0, 4($a1) -/* 0D28A8 7F09DD78 358C0032 */ ori $t4, (0xB1000032 & 0xFFFF) # ori $t4, $t4, 0x32 -/* 0D28AC 7F09DD7C 24192010 */ li $t9, 8208 -/* 0D28B0 7F09DD80 AC790004 */ sw $t9, 4($v1) -/* 0D28B4 7F09DD84 AC6C0000 */ sw $t4, ($v1) -/* 0D28B8 7F09DD88 8FBF0024 */ lw $ra, 0x24($sp) -/* 0D28BC 7F09DD8C 26420008 */ addiu $v0, $s2, 8 -/* 0D28C0 7F09DD90 8FB20020 */ lw $s2, 0x20($sp) -/* 0D28C4 7F09DD94 8FB1001C */ lw $s1, 0x1c($sp) -/* 0D28C8 7F09DD98 8FB00018 */ lw $s0, 0x18($sp) -/* 0D28CC 7F09DD9C 03E00008 */ jr $ra -/* 0D28D0 7F09DDA0 27BD00B8 */ addiu $sp, $sp, 0xb8 -) -#endif +/*** + * Perfect Dark Gfx *smokeRenderPart(struct smoke *smoke, struct smokepart *part, Gfx *gdl, struct coord *coord, f32 size) + * + * NTSC address 0x7F09DDA4. +*/ +Gfx *explosionSmokeRenderPart(struct Smoke *smoke, struct SmokePart *smoke_part, Gfx *gdl, struct coord3d *arg3) +{ + Vtx *vertices; + Vtx spC0; + Mtxf *mtx; + struct coord3d spB0; + struct coord3d spA4; + struct coord3d sp98; + struct coord3d sp8C; + f32 sp88; + f32 sp84; + f32 sp80; + f32 sp7C; + f32 sp78; + u8 sp77; + struct coord3d *sp70; + f32 sp6C; + f32 sp68; + f32 sp64; + f32 temp_f0; + f32 range; + f32 mult; + f32 sp54; + f32 sp50; + f32 sp4C; + + spC0 = g_SmokeRenderPartDefaultVertex; + mtx = currentPlayerGetMatrix10D4(); + sp70 = bondviewGetCurrentPlayersPosition(); -#ifdef NONMATCHING -void sub_GAME_7F09DDA4(void) { + if (g_SmokeTypes[smoke->smoke_type].rateappear >= smoke_part->count) + { + sp77 = (smoke_part->alpha / (f32) g_SmokeTypes[smoke->smoke_type].rateappear) * smoke_part->count; + } + else + { + sp77 = smoke_part->alpha; + } + vertices = dynAllocate7F0BD6C4(4); + + vertices[0] = spC0; + vertices[1] = spC0; + vertices[2] = spC0; + vertices[3] = spC0; + + sp88 = cosf(smoke_part->rot) * smoke_part->size; + sp84 = sinf(smoke_part->rot) * smoke_part->size; + + sp80 = smoke_part->pos.f[0] + (sinf(smoke_part->offset1) * 7.0f); + sp7C = smoke_part->pos.f[1]; + sp78 = smoke_part->pos.f[2] + (sinf(smoke_part->offset2) * 7.0f); + + sp6C = sp80 - sp70->f[0]; + sp68 = sp7C - sp70->f[1]; + sp64 = sp78 - sp70->f[2]; + + temp_f0 = sqrtf((sp6C * sp6C) + (sp68 * sp68) + (sp64 * sp64)); + + if (temp_f0 > 30000.0f) + { + return gdl; + } + + range = temp_f0 * 0.5f; + + if (range > 100.0f) { + range = 100.0f; + } + + if (temp_f0 == 0.0f) { + mult = 0.0f; + } else { + mult = (temp_f0 - range) / temp_f0; + } + + sp88 = sp88 * mult; + sp84 = sp84 * mult; + + sp80 = sp70->f[0] + sp6C * mult; + sp7C = sp70->f[1] + sp68 * mult; + sp78 = sp70->f[2] + sp64 * mult; + + spB0.f[0] = mtx->m[0][0] * sp88; + spB0.f[1] = mtx->m[0][1] * sp88; + spB0.f[2] = mtx->m[0][2] * sp88; + spA4.f[0] = mtx->m[0][0] * sp84; + spA4.f[1] = mtx->m[0][1] * sp84; + spA4.f[2] = mtx->m[0][2] * sp84; + sp98.f[0] = mtx->m[1][0] * sp88; + sp98.f[1] = mtx->m[1][1] * sp88; + sp98.f[2] = mtx->m[1][2] * sp88; + sp8C.f[0] = mtx->m[1][0] * sp84; + sp8C.f[1] = mtx->m[1][1] * sp84; + sp8C.f[2] = mtx->m[1][2] * sp84; + + sp54 = ((sp80 - spB0.f[0] - sp8C.f[0]) * get_room_data_float1() - arg3->f[0]) * 10.0f; + sp50 = ((sp7C - spB0.f[1] - sp8C.f[1]) * get_room_data_float1() - arg3->f[1]) * 10.0f; + sp4C = ((sp78 - spB0.f[2] - sp8C.f[2]) * get_room_data_float1() - arg3->f[2]) * 10.0f; + + if (sp54 > 30000.0f + || sp54 < -30000.0f + || sp50 > 30000.0f + || sp50 < -30000.0f + || sp4C > 30000.0f + || sp4C < -30000.0f) + { + return gdl; + } + + vertices[0].v.ob[0] = sp54; + vertices[0].v.ob[1] = sp50; + vertices[0].v.ob[2] = sp4C; + vertices[0].v.tc[0] = 1760; + vertices[0].v.tc[1] = 0; + vertices[0].v.cn[0] = g_SmokeTypes[smoke->smoke_type].r; + vertices[0].v.cn[1] = g_SmokeTypes[smoke->smoke_type].g; + vertices[0].v.cn[2] = g_SmokeTypes[smoke->smoke_type].b; + vertices[0].v.cn[3] = sp77; + + vertices[1].v.ob[0] = ((((sp80 + spA4.f[0]) - sp98.f[0]) * get_room_data_float1()) - arg3->f[0]) * 10.0f; + vertices[1].v.ob[1] = ((((sp7C + spA4.f[1]) - sp98.f[1]) * get_room_data_float1()) - arg3->f[1]) * 10.0f; + vertices[1].v.ob[2] = ((((sp78 + spA4.f[2]) - sp98.f[2]) * get_room_data_float1()) - arg3->f[2]) * 10.0f; + vertices[1].v.tc[0] = 0; + vertices[1].v.tc[1] = 0; + vertices[1].v.cn[0] = g_SmokeTypes[smoke->smoke_type].r; + vertices[1].v.cn[1] = g_SmokeTypes[smoke->smoke_type].g; + vertices[1].v.cn[2] = g_SmokeTypes[smoke->smoke_type].b; + vertices[1].v.cn[3] = sp77; + + vertices[2].v.ob[0] = (((sp80 + spB0.f[0] + sp8C.f[0]) * get_room_data_float1()) - arg3->f[0]) * 10.0f; + vertices[2].v.ob[1] = (((sp7C + spB0.f[1] + sp8C.f[1]) * get_room_data_float1()) - arg3->f[1]) * 10.0f; + vertices[2].v.ob[2] = (((sp78 + spB0.f[2] + sp8C.f[2]) * get_room_data_float1()) - arg3->f[2]) * 10.0f; + vertices[2].v.tc[0] = 0; + vertices[2].v.tc[1] = 1760; + vertices[2].v.cn[0] = g_SmokeTypes[smoke->smoke_type].r; + vertices[2].v.cn[1] = g_SmokeTypes[smoke->smoke_type].g; + vertices[2].v.cn[2] = g_SmokeTypes[smoke->smoke_type].b; + vertices[2].v.cn[3] = sp77; + + vertices[3].v.ob[0] = ((((sp80 - spA4.f[0]) + sp98.f[0]) * get_room_data_float1()) - arg3->f[0]) * 10.0f; + vertices[3].v.ob[1] = ((((sp7C - spA4.f[1]) + sp98.f[1]) * get_room_data_float1()) - arg3->f[1]) * 10.0f; + vertices[3].v.ob[2] = ((((sp78 - spA4.f[2]) + sp98.f[2]) * get_room_data_float1()) - arg3->f[2]) * 10.0f; + vertices[3].v.tc[0] = 1760; + vertices[3].v.tc[1] = 1760; + vertices[3].v.cn[0] = g_SmokeTypes[smoke->smoke_type].r; + vertices[3].v.cn[1] = g_SmokeTypes[smoke->smoke_type].g; + vertices[3].v.cn[2] = g_SmokeTypes[smoke->smoke_type].b; + vertices[3].v.cn[3] = sp77; + + gSPVertex(gdl++, osVirtualToPhysical(vertices), 4, 0); + + gSP2Triangles(gdl++, 0, 1, 2, 0, 0, 2, 3, 0); + + return gdl; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800576C0 -.word 0x46ea6000 /*30000.0*/ -glabel D_800576C4 -.word 0x46ea6000 /*30000.0*/ -glabel D_800576C8 -.word 0xc6ea6000 /*-30000.0*/ -.text -glabel sub_GAME_7F09DDA4 -/* 0D28D4 7F09DDA4 27BDFF28 */ addiu $sp, $sp, -0xd8 -/* 0D28D8 7F09DDA8 3C0F8004 */ lui $t7, %hi(D_80040910) -/* 0D28DC 7F09DDAC AFBF0034 */ sw $ra, 0x34($sp) -/* 0D28E0 7F09DDB0 AFB50030 */ sw $s5, 0x30($sp) -/* 0D28E4 7F09DDB4 AFB4002C */ sw $s4, 0x2c($sp) -/* 0D28E8 7F09DDB8 AFB30028 */ sw $s3, 0x28($sp) -/* 0D28EC 7F09DDBC AFB20024 */ sw $s2, 0x24($sp) -/* 0D28F0 7F09DDC0 AFB10020 */ sw $s1, 0x20($sp) -/* 0D28F4 7F09DDC4 AFB0001C */ sw $s0, 0x1c($sp) -/* 0D28F8 7F09DDC8 F7B40010 */ sdc1 $f20, 0x10($sp) -/* 0D28FC 7F09DDCC AFA600E0 */ sw $a2, 0xe0($sp) -/* 0D2900 7F09DDD0 25EF0910 */ addiu $t7, %lo(D_80040910) # addiu $t7, $t7, 0x910 -/* 0D2904 7F09DDD4 8DE10000 */ lw $at, ($t7) -/* 0D2908 7F09DDD8 8DE80004 */ lw $t0, 4($t7) -/* 0D290C 7F09DDDC 27AE00C0 */ addiu $t6, $sp, 0xc0 -/* 0D2910 7F09DDE0 ADC10000 */ sw $at, ($t6) -/* 0D2914 7F09DDE4 ADC80004 */ sw $t0, 4($t6) -/* 0D2918 7F09DDE8 8DE8000C */ lw $t0, 0xc($t7) -/* 0D291C 7F09DDEC 8DE10008 */ lw $at, 8($t7) -/* 0D2920 7F09DDF0 00A08825 */ move $s1, $a1 -/* 0D2924 7F09DDF4 00809025 */ move $s2, $a0 -/* 0D2928 7F09DDF8 00E09825 */ move $s3, $a3 -/* 0D292C 7F09DDFC ADC8000C */ sw $t0, 0xc($t6) -/* 0D2930 7F09DE00 0FC1E111 */ jal currentPlayerGetMatrix10D4 -/* 0D2934 7F09DE04 ADC10008 */ sw $at, 8($t6) -/* 0D2938 7F09DE08 0FC227F5 */ jal bondviewGetCurrentPlayersPosition -/* 0D293C 7F09DE0C AFA200BC */ sw $v0, 0xbc($sp) -/* 0D2940 7F09DE10 AFA20070 */ sw $v0, 0x70($sp) -/* 0D2944 7F09DE14 86490006 */ lh $t1, 6($s2) -/* 0D2948 7F09DE18 24150018 */ li $s5, 24 -/* 0D294C 7F09DE1C 3C148004 */ lui $s4, %hi(array_smoke_types) -/* 0D2950 7F09DE20 01350019 */ multu $t1, $s5 -/* 0D2954 7F09DE24 2694017C */ addiu $s4, %lo(array_smoke_types) # addiu $s4, $s4, 0x17c -/* 0D2958 7F09DE28 86250024 */ lh $a1, 0x24($s1) -/* 0D295C 7F09DE2C 8FA300BC */ lw $v1, 0xbc($sp) -/* 0D2960 7F09DE30 24180001 */ li $t8, 1 -/* 0D2964 7F09DE34 00005012 */ mflo $t2 -/* 0D2968 7F09DE38 028A5821 */ addu $t3, $s4, $t2 -/* 0D296C 7F09DE3C 85640002 */ lh $a0, 2($t3) -/* 0D2970 7F09DE40 0085082A */ slt $at, $a0, $a1 -/* 0D2974 7F09DE44 5420002C */ bnezl $at, .L7F09DEF8 -/* 0D2978 7F09DE48 4459F800 */ cfc1 $t9, $31 -/* 0D297C 7F09DE4C 44843000 */ mtc1 $a0, $f6 -/* 0D2980 7F09DE50 C6240020 */ lwc1 $f4, 0x20($s1) -/* 0D2984 7F09DE54 240D0001 */ li $t5, 1 -/* 0D2988 7F09DE58 46803220 */ cvt.s.w $f8, $f6 -/* 0D298C 7F09DE5C 44853000 */ mtc1 $a1, $f6 -/* 0D2990 7F09DE60 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D2994 7F09DE64 46082283 */ div.s $f10, $f4, $f8 -/* 0D2998 7F09DE68 46803120 */ cvt.s.w $f4, $f6 -/* 0D299C 7F09DE6C 46045202 */ mul.s $f8, $f10, $f4 -/* 0D29A0 7F09DE70 444CF800 */ cfc1 $t4, $31 -/* 0D29A4 7F09DE74 44CDF800 */ ctc1 $t5, $31 -/* 0D29A8 7F09DE78 00000000 */ nop -/* 0D29AC 7F09DE7C 460041A4 */ cvt.w.s $f6, $f8 -/* 0D29B0 7F09DE80 444DF800 */ cfc1 $t5, $31 -/* 0D29B4 7F09DE84 00000000 */ nop -/* 0D29B8 7F09DE88 31AD0078 */ andi $t5, $t5, 0x78 -/* 0D29BC 7F09DE8C 51A00013 */ beql $t5, $zero, .L7F09DEDC -/* 0D29C0 7F09DE90 440D3000 */ mfc1 $t5, $f6 -/* 0D29C4 7F09DE94 44813000 */ mtc1 $at, $f6 -/* 0D29C8 7F09DE98 240D0001 */ li $t5, 1 -/* 0D29CC 7F09DE9C 46064181 */ sub.s $f6, $f8, $f6 -/* 0D29D0 7F09DEA0 44CDF800 */ ctc1 $t5, $31 -/* 0D29D4 7F09DEA4 00000000 */ nop -/* 0D29D8 7F09DEA8 460031A4 */ cvt.w.s $f6, $f6 -/* 0D29DC 7F09DEAC 444DF800 */ cfc1 $t5, $31 -/* 0D29E0 7F09DEB0 00000000 */ nop -/* 0D29E4 7F09DEB4 31AD0078 */ andi $t5, $t5, 0x78 -/* 0D29E8 7F09DEB8 15A00005 */ bnez $t5, .L7F09DED0 -/* 0D29EC 7F09DEBC 00000000 */ nop -/* 0D29F0 7F09DEC0 440D3000 */ mfc1 $t5, $f6 -/* 0D29F4 7F09DEC4 3C018000 */ lui $at, 0x8000 -/* 0D29F8 7F09DEC8 10000007 */ b .L7F09DEE8 -/* 0D29FC 7F09DECC 01A16825 */ or $t5, $t5, $at -.L7F09DED0: -/* 0D2A00 7F09DED0 10000005 */ b .L7F09DEE8 -/* 0D2A04 7F09DED4 240DFFFF */ li $t5, -1 -/* 0D2A08 7F09DED8 440D3000 */ mfc1 $t5, $f6 -.L7F09DEDC: -/* 0D2A0C 7F09DEDC 00000000 */ nop -/* 0D2A10 7F09DEE0 05A0FFFB */ bltz $t5, .L7F09DED0 -/* 0D2A14 7F09DEE4 00000000 */ nop -.L7F09DEE8: -/* 0D2A18 7F09DEE8 44CCF800 */ ctc1 $t4, $31 -/* 0D2A1C 7F09DEEC 10000023 */ b .L7F09DF7C -/* 0D2A20 7F09DEF0 A3AD0077 */ sb $t5, 0x77($sp) -/* 0D2A24 7F09DEF4 4459F800 */ cfc1 $t9, $31 -.L7F09DEF8: -/* 0D2A28 7F09DEF8 44D8F800 */ ctc1 $t8, $31 -/* 0D2A2C 7F09DEFC C62A0020 */ lwc1 $f10, 0x20($s1) -/* 0D2A30 7F09DF00 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0D2A34 7F09DF04 46005124 */ cvt.w.s $f4, $f10 -/* 0D2A38 7F09DF08 4458F800 */ cfc1 $t8, $31 -/* 0D2A3C 7F09DF0C 00000000 */ nop -/* 0D2A40 7F09DF10 33180078 */ andi $t8, $t8, 0x78 -/* 0D2A44 7F09DF14 53000013 */ beql $t8, $zero, .L7F09DF64 -/* 0D2A48 7F09DF18 44182000 */ mfc1 $t8, $f4 -/* 0D2A4C 7F09DF1C 44812000 */ mtc1 $at, $f4 -/* 0D2A50 7F09DF20 24180001 */ li $t8, 1 -/* 0D2A54 7F09DF24 46045101 */ sub.s $f4, $f10, $f4 -/* 0D2A58 7F09DF28 44D8F800 */ ctc1 $t8, $31 -/* 0D2A5C 7F09DF2C 00000000 */ nop -/* 0D2A60 7F09DF30 46002124 */ cvt.w.s $f4, $f4 -/* 0D2A64 7F09DF34 4458F800 */ cfc1 $t8, $31 -/* 0D2A68 7F09DF38 00000000 */ nop -/* 0D2A6C 7F09DF3C 33180078 */ andi $t8, $t8, 0x78 -/* 0D2A70 7F09DF40 17000005 */ bnez $t8, .L7F09DF58 -/* 0D2A74 7F09DF44 00000000 */ nop -/* 0D2A78 7F09DF48 44182000 */ mfc1 $t8, $f4 -/* 0D2A7C 7F09DF4C 3C018000 */ lui $at, 0x8000 -/* 0D2A80 7F09DF50 10000007 */ b .L7F09DF70 -/* 0D2A84 7F09DF54 0301C025 */ or $t8, $t8, $at -.L7F09DF58: -/* 0D2A88 7F09DF58 10000005 */ b .L7F09DF70 -/* 0D2A8C 7F09DF5C 2418FFFF */ li $t8, -1 -/* 0D2A90 7F09DF60 44182000 */ mfc1 $t8, $f4 -.L7F09DF64: -/* 0D2A94 7F09DF64 00000000 */ nop -/* 0D2A98 7F09DF68 0700FFFB */ bltz $t8, .L7F09DF58 -/* 0D2A9C 7F09DF6C 00000000 */ nop -.L7F09DF70: -/* 0D2AA0 7F09DF70 44D9F800 */ ctc1 $t9, $31 -/* 0D2AA4 7F09DF74 A3B80077 */ sb $t8, 0x77($sp) -/* 0D2AA8 7F09DF78 00000000 */ nop -.L7F09DF7C: -/* 0D2AAC 7F09DF7C 24040004 */ li $a0, 4 -/* 0D2AB0 7F09DF80 0FC2F5B1 */ jal dynAllocate7F0BD6C4 -/* 0D2AB4 7F09DF84 AFA300BC */ sw $v1, 0xbc($sp) -/* 0D2AB8 7F09DF88 27A400C0 */ addiu $a0, $sp, 0xc0 -/* 0D2ABC 7F09DF8C 8C810000 */ lw $at, ($a0) -/* 0D2AC0 7F09DF90 00408025 */ move $s0, $v0 -/* 0D2AC4 7F09DF94 AC410000 */ sw $at, ($v0) -/* 0D2AC8 7F09DF98 8C880004 */ lw $t0, 4($a0) -/* 0D2ACC 7F09DF9C AC480004 */ sw $t0, 4($v0) -/* 0D2AD0 7F09DFA0 8C810008 */ lw $at, 8($a0) -/* 0D2AD4 7F09DFA4 AC410008 */ sw $at, 8($v0) -/* 0D2AD8 7F09DFA8 8C88000C */ lw $t0, 0xc($a0) -/* 0D2ADC 7F09DFAC AC48000C */ sw $t0, 0xc($v0) -/* 0D2AE0 7F09DFB0 8C810000 */ lw $at, ($a0) -/* 0D2AE4 7F09DFB4 AC410010 */ sw $at, 0x10($v0) -/* 0D2AE8 7F09DFB8 8C8B0004 */ lw $t3, 4($a0) -/* 0D2AEC 7F09DFBC AC4B0014 */ sw $t3, 0x14($v0) -/* 0D2AF0 7F09DFC0 8C810008 */ lw $at, 8($a0) -/* 0D2AF4 7F09DFC4 AC410018 */ sw $at, 0x18($v0) -/* 0D2AF8 7F09DFC8 8C8B000C */ lw $t3, 0xc($a0) -/* 0D2AFC 7F09DFCC AC4B001C */ sw $t3, 0x1c($v0) -/* 0D2B00 7F09DFD0 8C810000 */ lw $at, ($a0) -/* 0D2B04 7F09DFD4 AC410020 */ sw $at, 0x20($v0) -/* 0D2B08 7F09DFD8 8C990004 */ lw $t9, 4($a0) -/* 0D2B0C 7F09DFDC AC590024 */ sw $t9, 0x24($v0) -/* 0D2B10 7F09DFE0 8C810008 */ lw $at, 8($a0) -/* 0D2B14 7F09DFE4 AC410028 */ sw $at, 0x28($v0) -/* 0D2B18 7F09DFE8 8C99000C */ lw $t9, 0xc($a0) -/* 0D2B1C 7F09DFEC AC59002C */ sw $t9, 0x2c($v0) -/* 0D2B20 7F09DFF0 8C810000 */ lw $at, ($a0) -/* 0D2B24 7F09DFF4 AC410030 */ sw $at, 0x30($v0) -/* 0D2B28 7F09DFF8 8C8E0004 */ lw $t6, 4($a0) -/* 0D2B2C 7F09DFFC AC4E0034 */ sw $t6, 0x34($v0) -/* 0D2B30 7F09E000 8C810008 */ lw $at, 8($a0) -/* 0D2B34 7F09E004 AC410038 */ sw $at, 0x38($v0) -/* 0D2B38 7F09E008 8C8E000C */ lw $t6, 0xc($a0) -/* 0D2B3C 7F09E00C AC4E003C */ sw $t6, 0x3c($v0) -/* 0D2B40 7F09E010 0FC15FA8 */ jal cosf -/* 0D2B44 7F09E014 C62C0010 */ lwc1 $f12, 0x10($s1) -/* 0D2B48 7F09E018 C628000C */ lwc1 $f8, 0xc($s1) -/* 0D2B4C 7F09E01C C62C0010 */ lwc1 $f12, 0x10($s1) -/* 0D2B50 7F09E020 46080382 */ mul.s $f14, $f0, $f8 -/* 0D2B54 7F09E024 0FC15FAB */ jal sinf -/* 0D2B58 7F09E028 E7AE0088 */ swc1 $f14, 0x88($sp) -/* 0D2B5C 7F09E02C C626000C */ lwc1 $f6, 0xc($s1) -/* 0D2B60 7F09E030 C62C0018 */ lwc1 $f12, 0x18($s1) -/* 0D2B64 7F09E034 46060402 */ mul.s $f16, $f0, $f6 -/* 0D2B68 7F09E038 0FC15FAB */ jal sinf -/* 0D2B6C 7F09E03C E7B00084 */ swc1 $f16, 0x84($sp) -/* 0D2B70 7F09E040 3C0140E0 */ li $at, 0x40E00000 # 7.000000 -/* 0D2B74 7F09E044 44815000 */ mtc1 $at, $f10 -/* 0D2B78 7F09E048 C6280000 */ lwc1 $f8, ($s1) -/* 0D2B7C 7F09E04C 460A0102 */ mul.s $f4, $f0, $f10 -/* 0D2B80 7F09E050 46082180 */ add.s $f6, $f4, $f8 -/* 0D2B84 7F09E054 E7A60080 */ swc1 $f6, 0x80($sp) -/* 0D2B88 7F09E058 C62A0004 */ lwc1 $f10, 4($s1) -/* 0D2B8C 7F09E05C E7AA007C */ swc1 $f10, 0x7c($sp) -/* 0D2B90 7F09E060 0FC15FAB */ jal sinf -/* 0D2B94 7F09E064 C62C001C */ lwc1 $f12, 0x1c($s1) -/* 0D2B98 7F09E068 3C0140E0 */ li $at, 0x40E00000 # 7.000000 -/* 0D2B9C 7F09E06C 44812000 */ mtc1 $at, $f4 -/* 0D2BA0 7F09E070 C6260008 */ lwc1 $f6, 8($s1) -/* 0D2BA4 7F09E074 8FA20070 */ lw $v0, 0x70($sp) -/* 0D2BA8 7F09E078 46040202 */ mul.s $f8, $f0, $f4 -/* 0D2BAC 7F09E07C C7A40080 */ lwc1 $f4, 0x80($sp) -/* 0D2BB0 7F09E080 46064280 */ add.s $f10, $f8, $f6 -/* 0D2BB4 7F09E084 C7A6007C */ lwc1 $f6, 0x7c($sp) -/* 0D2BB8 7F09E088 E7AA0078 */ swc1 $f10, 0x78($sp) -/* 0D2BBC 7F09E08C C4480000 */ lwc1 $f8, ($v0) -/* 0D2BC0 7F09E090 46082501 */ sub.s $f20, $f4, $f8 -/* 0D2BC4 7F09E094 C4440004 */ lwc1 $f4, 4($v0) -/* 0D2BC8 7F09E098 C4480008 */ lwc1 $f8, 8($v0) -/* 0D2BCC 7F09E09C 46043481 */ sub.s $f18, $f6, $f4 -/* 0D2BD0 7F09E0A0 4614A182 */ mul.s $f6, $f20, $f20 -/* 0D2BD4 7F09E0A4 46085081 */ sub.s $f2, $f10, $f8 -/* 0D2BD8 7F09E0A8 46129102 */ mul.s $f4, $f18, $f18 -/* 0D2BDC 7F09E0AC E7B20068 */ swc1 $f18, 0x68($sp) -/* 0D2BE0 7F09E0B0 46021202 */ mul.s $f8, $f2, $f2 -/* 0D2BE4 7F09E0B4 E7A20064 */ swc1 $f2, 0x64($sp) -/* 0D2BE8 7F09E0B8 46043280 */ add.s $f10, $f6, $f4 -/* 0D2BEC 7F09E0BC 0C007DF8 */ jal sqrtf -/* 0D2BF0 7F09E0C0 46085300 */ add.s $f12, $f10, $f8 -/* 0D2BF4 7F09E0C4 3C018005 */ lui $at, %hi(D_800576C0) -/* 0D2BF8 7F09E0C8 C42676C0 */ lwc1 $f6, %lo(D_800576C0)($at) -/* 0D2BFC 7F09E0CC 8FA300BC */ lw $v1, 0xbc($sp) -/* 0D2C00 7F09E0D0 C7AE0088 */ lwc1 $f14, 0x88($sp) -/* 0D2C04 7F09E0D4 4600303C */ c.lt.s $f6, $f0 -/* 0D2C08 7F09E0D8 C7B00084 */ lwc1 $f16, 0x84($sp) -/* 0D2C0C 7F09E0DC C7B20068 */ lwc1 $f18, 0x68($sp) -/* 0D2C10 7F09E0E0 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D2C14 7F09E0E4 45020004 */ bc1fl .L7F09E0F8 -/* 0D2C18 7F09E0E8 44812000 */ mtc1 $at, $f4 -/* 0D2C1C 7F09E0EC 1000017A */ b .L7F09E6D8 -/* 0D2C20 7F09E0F0 8FA200E0 */ lw $v0, 0xe0($sp) -/* 0D2C24 7F09E0F4 44812000 */ mtc1 $at, $f4 -.L7F09E0F8: -/* 0D2C28 7F09E0F8 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 0D2C2C 7F09E0FC 44815000 */ mtc1 $at, $f10 -/* 0D2C30 7F09E100 46040302 */ mul.s $f12, $f0, $f4 -/* 0D2C34 7F09E104 44804000 */ mtc1 $zero, $f8 -/* 0D2C38 7F09E108 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 0D2C3C 7F09E10C 460C503C */ c.lt.s $f10, $f12 -/* 0D2C40 7F09E110 00000000 */ nop -/* 0D2C44 7F09E114 45020004 */ bc1fl .L7F09E128 -/* 0D2C48 7F09E118 46080032 */ c.eq.s $f0, $f8 -/* 0D2C4C 7F09E11C 44816000 */ mtc1 $at, $f12 -/* 0D2C50 7F09E120 00000000 */ nop -/* 0D2C54 7F09E124 46080032 */ c.eq.s $f0, $f8 -.L7F09E128: -/* 0D2C58 7F09E128 00000000 */ nop -/* 0D2C5C 7F09E12C 45020005 */ bc1fl .L7F09E144 -/* 0D2C60 7F09E130 460C0181 */ sub.s $f6, $f0, $f12 -/* 0D2C64 7F09E134 44801000 */ mtc1 $zero, $f2 -/* 0D2C68 7F09E138 10000003 */ b .L7F09E148 -/* 0D2C6C 7F09E13C 00000000 */ nop -/* 0D2C70 7F09E140 460C0181 */ sub.s $f6, $f0, $f12 -.L7F09E144: -/* 0D2C74 7F09E144 46003083 */ div.s $f2, $f6, $f0 -.L7F09E148: -/* 0D2C78 7F09E148 46027382 */ mul.s $f14, $f14, $f2 -/* 0D2C7C 7F09E14C 8FA20070 */ lw $v0, 0x70($sp) -/* 0D2C80 7F09E150 46028402 */ mul.s $f16, $f16, $f2 -/* 0D2C84 7F09E154 C4440000 */ lwc1 $f4, ($v0) -/* 0D2C88 7F09E158 4602A282 */ mul.s $f10, $f20, $f2 -/* 0D2C8C 7F09E15C 460A2200 */ add.s $f8, $f4, $f10 -/* 0D2C90 7F09E160 46029102 */ mul.s $f4, $f18, $f2 -/* 0D2C94 7F09E164 E7A80080 */ swc1 $f8, 0x80($sp) -/* 0D2C98 7F09E168 C4460004 */ lwc1 $f6, 4($v0) -/* 0D2C9C 7F09E16C 46043280 */ add.s $f10, $f6, $f4 -/* 0D2CA0 7F09E170 C7A60064 */ lwc1 $f6, 0x64($sp) -/* 0D2CA4 7F09E174 46023102 */ mul.s $f4, $f6, $f2 -/* 0D2CA8 7F09E178 E7AA007C */ swc1 $f10, 0x7c($sp) -/* 0D2CAC 7F09E17C C4480008 */ lwc1 $f8, 8($v0) -/* 0D2CB0 7F09E180 46044280 */ add.s $f10, $f8, $f4 -/* 0D2CB4 7F09E184 E7AA0078 */ swc1 $f10, 0x78($sp) -/* 0D2CB8 7F09E188 C4660000 */ lwc1 $f6, ($v1) -/* 0D2CBC 7F09E18C 460E3202 */ mul.s $f8, $f6, $f14 -/* 0D2CC0 7F09E190 E7A800B0 */ swc1 $f8, 0xb0($sp) -/* 0D2CC4 7F09E194 C4640004 */ lwc1 $f4, 4($v1) -/* 0D2CC8 7F09E198 460E2282 */ mul.s $f10, $f4, $f14 -/* 0D2CCC 7F09E19C E7AA00B4 */ swc1 $f10, 0xb4($sp) -/* 0D2CD0 7F09E1A0 C4660008 */ lwc1 $f6, 8($v1) -/* 0D2CD4 7F09E1A4 460E3202 */ mul.s $f8, $f6, $f14 -/* 0D2CD8 7F09E1A8 E7A800B8 */ swc1 $f8, 0xb8($sp) -/* 0D2CDC 7F09E1AC C4640000 */ lwc1 $f4, ($v1) -/* 0D2CE0 7F09E1B0 46102282 */ mul.s $f10, $f4, $f16 -/* 0D2CE4 7F09E1B4 E7AA00A4 */ swc1 $f10, 0xa4($sp) -/* 0D2CE8 7F09E1B8 C4660004 */ lwc1 $f6, 4($v1) -/* 0D2CEC 7F09E1BC 46103202 */ mul.s $f8, $f6, $f16 -/* 0D2CF0 7F09E1C0 E7A800A8 */ swc1 $f8, 0xa8($sp) -/* 0D2CF4 7F09E1C4 C4640008 */ lwc1 $f4, 8($v1) -/* 0D2CF8 7F09E1C8 46102282 */ mul.s $f10, $f4, $f16 -/* 0D2CFC 7F09E1CC E7AA00AC */ swc1 $f10, 0xac($sp) -/* 0D2D00 7F09E1D0 C4660010 */ lwc1 $f6, 0x10($v1) -/* 0D2D04 7F09E1D4 460E3202 */ mul.s $f8, $f6, $f14 -/* 0D2D08 7F09E1D8 E7A80098 */ swc1 $f8, 0x98($sp) -/* 0D2D0C 7F09E1DC C4640014 */ lwc1 $f4, 0x14($v1) -/* 0D2D10 7F09E1E0 460E2282 */ mul.s $f10, $f4, $f14 -/* 0D2D14 7F09E1E4 E7AA009C */ swc1 $f10, 0x9c($sp) -/* 0D2D18 7F09E1E8 C4660018 */ lwc1 $f6, 0x18($v1) -/* 0D2D1C 7F09E1EC 460E3202 */ mul.s $f8, $f6, $f14 -/* 0D2D20 7F09E1F0 E7A800A0 */ swc1 $f8, 0xa0($sp) -/* 0D2D24 7F09E1F4 C4640010 */ lwc1 $f4, 0x10($v1) -/* 0D2D28 7F09E1F8 46102282 */ mul.s $f10, $f4, $f16 -/* 0D2D2C 7F09E1FC E7AA008C */ swc1 $f10, 0x8c($sp) -/* 0D2D30 7F09E200 C4660014 */ lwc1 $f6, 0x14($v1) -/* 0D2D34 7F09E204 46103202 */ mul.s $f8, $f6, $f16 -/* 0D2D38 7F09E208 E7A80090 */ swc1 $f8, 0x90($sp) -/* 0D2D3C 7F09E20C C4640018 */ lwc1 $f4, 0x18($v1) -/* 0D2D40 7F09E210 46102282 */ mul.s $f10, $f4, $f16 -/* 0D2D44 7F09E214 0FC2D20F */ jal get_room_data_float1 -/* 0D2D48 7F09E218 E7AA0094 */ swc1 $f10, 0x94($sp) -/* 0D2D4C 7F09E21C C7A60080 */ lwc1 $f6, 0x80($sp) -/* 0D2D50 7F09E220 C7A800B0 */ lwc1 $f8, 0xb0($sp) -/* 0D2D54 7F09E224 C7AA008C */ lwc1 $f10, 0x8c($sp) -/* 0D2D58 7F09E228 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 0D2D5C 7F09E22C 46083101 */ sub.s $f4, $f6, $f8 -/* 0D2D60 7F09E230 4481A000 */ mtc1 $at, $f20 -/* 0D2D64 7F09E234 460A2181 */ sub.s $f6, $f4, $f10 -/* 0D2D68 7F09E238 C6640000 */ lwc1 $f4, ($s3) -/* 0D2D6C 7F09E23C 46003202 */ mul.s $f8, $f6, $f0 -/* 0D2D70 7F09E240 46044281 */ sub.s $f10, $f8, $f4 -/* 0D2D74 7F09E244 46145082 */ mul.s $f2, $f10, $f20 -/* 0D2D78 7F09E248 0FC2D20F */ jal get_room_data_float1 -/* 0D2D7C 7F09E24C E7A20054 */ swc1 $f2, 0x54($sp) -/* 0D2D80 7F09E250 C7A6007C */ lwc1 $f6, 0x7c($sp) -/* 0D2D84 7F09E254 C7A800B4 */ lwc1 $f8, 0xb4($sp) -/* 0D2D88 7F09E258 C7AA0090 */ lwc1 $f10, 0x90($sp) -/* 0D2D8C 7F09E25C 46083101 */ sub.s $f4, $f6, $f8 -/* 0D2D90 7F09E260 460A2181 */ sub.s $f6, $f4, $f10 -/* 0D2D94 7F09E264 C6640004 */ lwc1 $f4, 4($s3) -/* 0D2D98 7F09E268 46003202 */ mul.s $f8, $f6, $f0 -/* 0D2D9C 7F09E26C 46044281 */ sub.s $f10, $f8, $f4 -/* 0D2DA0 7F09E270 46145302 */ mul.s $f12, $f10, $f20 -/* 0D2DA4 7F09E274 0FC2D20F */ jal get_room_data_float1 -/* 0D2DA8 7F09E278 E7AC0050 */ swc1 $f12, 0x50($sp) -/* 0D2DAC 7F09E27C C7A60078 */ lwc1 $f6, 0x78($sp) -/* 0D2DB0 7F09E280 C7A800B8 */ lwc1 $f8, 0xb8($sp) -/* 0D2DB4 7F09E284 C7AA0094 */ lwc1 $f10, 0x94($sp) -/* 0D2DB8 7F09E288 3C018005 */ lui $at, %hi(D_800576C4) -/* 0D2DBC 7F09E28C 46083101 */ sub.s $f4, $f6, $f8 -/* 0D2DC0 7F09E290 C43076C4 */ lwc1 $f16, %lo(D_800576C4)($at) -/* 0D2DC4 7F09E294 C7A20054 */ lwc1 $f2, 0x54($sp) -/* 0D2DC8 7F09E298 C7AC0050 */ lwc1 $f12, 0x50($sp) -/* 0D2DCC 7F09E29C 460A2181 */ sub.s $f6, $f4, $f10 -/* 0D2DD0 7F09E2A0 C6640008 */ lwc1 $f4, 8($s3) -/* 0D2DD4 7F09E2A4 3C018005 */ lui $at, %hi(D_800576C8) -/* 0D2DD8 7F09E2A8 4602803C */ c.lt.s $f16, $f2 -/* 0D2DDC 7F09E2AC 46003202 */ mul.s $f8, $f6, $f0 -/* 0D2DE0 7F09E2B0 46044281 */ sub.s $f10, $f8, $f4 -/* 0D2DE4 7F09E2B4 46145382 */ mul.s $f14, $f10, $f20 -/* 0D2DE8 7F09E2B8 45010016 */ bc1t .L7F09E314 -/* 0D2DEC 7F09E2BC 00000000 */ nop -/* 0D2DF0 7F09E2C0 C42076C8 */ lwc1 $f0, %lo(D_800576C8)($at) -/* 0D2DF4 7F09E2C4 4600103C */ c.lt.s $f2, $f0 -/* 0D2DF8 7F09E2C8 00000000 */ nop -/* 0D2DFC 7F09E2CC 45010011 */ bc1t .L7F09E314 -/* 0D2E00 7F09E2D0 00000000 */ nop -/* 0D2E04 7F09E2D4 460C803C */ c.lt.s $f16, $f12 -/* 0D2E08 7F09E2D8 00000000 */ nop -/* 0D2E0C 7F09E2DC 4501000D */ bc1t .L7F09E314 -/* 0D2E10 7F09E2E0 00000000 */ nop -/* 0D2E14 7F09E2E4 4600603C */ c.lt.s $f12, $f0 -/* 0D2E18 7F09E2E8 00000000 */ nop -/* 0D2E1C 7F09E2EC 45010009 */ bc1t .L7F09E314 -/* 0D2E20 7F09E2F0 00000000 */ nop -/* 0D2E24 7F09E2F4 460E803C */ c.lt.s $f16, $f14 -/* 0D2E28 7F09E2F8 00000000 */ nop -/* 0D2E2C 7F09E2FC 45010005 */ bc1t .L7F09E314 -/* 0D2E30 7F09E300 00000000 */ nop -/* 0D2E34 7F09E304 4600703C */ c.lt.s $f14, $f0 -/* 0D2E38 7F09E308 00000000 */ nop -/* 0D2E3C 7F09E30C 45020004 */ bc1fl .L7F09E320 -/* 0D2E40 7F09E310 4600118D */ trunc.w.s $f6, $f2 -.L7F09E314: -/* 0D2E44 7F09E314 100000F0 */ b .L7F09E6D8 -/* 0D2E48 7F09E318 8FA200E0 */ lw $v0, 0xe0($sp) -/* 0D2E4C 7F09E31C 4600118D */ trunc.w.s $f6, $f2 -.L7F09E320: -/* 0D2E50 7F09E320 241906E0 */ li $t9, 1760 -/* 0D2E54 7F09E324 A6190008 */ sh $t9, 8($s0) -/* 0D2E58 7F09E328 4600620D */ trunc.w.s $f8, $f12 -/* 0D2E5C 7F09E32C 440A3000 */ mfc1 $t2, $f6 -/* 0D2E60 7F09E330 A600000A */ sh $zero, 0xa($s0) -/* 0D2E64 7F09E334 4600710D */ trunc.w.s $f4, $f14 -/* 0D2E68 7F09E338 440B4000 */ mfc1 $t3, $f8 -/* 0D2E6C 7F09E33C A60A0000 */ sh $t2, ($s0) -/* 0D2E70 7F09E340 440C2000 */ mfc1 $t4, $f4 -/* 0D2E74 7F09E344 A60B0002 */ sh $t3, 2($s0) -/* 0D2E78 7F09E348 A60C0004 */ sh $t4, 4($s0) -/* 0D2E7C 7F09E34C 864F0006 */ lh $t7, 6($s2) -/* 0D2E80 7F09E350 01F50019 */ multu $t7, $s5 -/* 0D2E84 7F09E354 0000C012 */ mflo $t8 -/* 0D2E88 7F09E358 02987021 */ addu $t6, $s4, $t8 -/* 0D2E8C 7F09E35C 91C8000C */ lbu $t0, 0xc($t6) -/* 0D2E90 7F09E360 A208000C */ sb $t0, 0xc($s0) -/* 0D2E94 7F09E364 864A0006 */ lh $t2, 6($s2) -/* 0D2E98 7F09E368 01550019 */ multu $t2, $s5 -/* 0D2E9C 7F09E36C 00004812 */ mflo $t1 -/* 0D2EA0 7F09E370 02895821 */ addu $t3, $s4, $t1 -/* 0D2EA4 7F09E374 916D000D */ lbu $t5, 0xd($t3) -/* 0D2EA8 7F09E378 A20D000D */ sb $t5, 0xd($s0) -/* 0D2EAC 7F09E37C 864C0006 */ lh $t4, 6($s2) -/* 0D2EB0 7F09E380 01950019 */ multu $t4, $s5 -/* 0D2EB4 7F09E384 0000C812 */ mflo $t9 -/* 0D2EB8 7F09E388 02997821 */ addu $t7, $s4, $t9 -/* 0D2EBC 7F09E38C 91F8000E */ lbu $t8, 0xe($t7) -/* 0D2EC0 7F09E390 A218000E */ sb $t8, 0xe($s0) -/* 0D2EC4 7F09E394 93AE0077 */ lbu $t6, 0x77($sp) -/* 0D2EC8 7F09E398 0FC2D20F */ jal get_room_data_float1 -/* 0D2ECC 7F09E39C A20E000F */ sb $t6, 0xf($s0) -/* 0D2ED0 7F09E3A0 C7AA0080 */ lwc1 $f10, 0x80($sp) -/* 0D2ED4 7F09E3A4 C7A600A4 */ lwc1 $f6, 0xa4($sp) -/* 0D2ED8 7F09E3A8 C7A40098 */ lwc1 $f4, 0x98($sp) -/* 0D2EDC 7F09E3AC 46065200 */ add.s $f8, $f10, $f6 -/* 0D2EE0 7F09E3B0 46044281 */ sub.s $f10, $f8, $f4 -/* 0D2EE4 7F09E3B4 C6680000 */ lwc1 $f8, ($s3) -/* 0D2EE8 7F09E3B8 46005182 */ mul.s $f6, $f10, $f0 -/* 0D2EEC 7F09E3BC 46083101 */ sub.s $f4, $f6, $f8 -/* 0D2EF0 7F09E3C0 46142282 */ mul.s $f10, $f4, $f20 -/* 0D2EF4 7F09E3C4 4600518D */ trunc.w.s $f6, $f10 -/* 0D2EF8 7F09E3C8 440A3000 */ mfc1 $t2, $f6 -/* 0D2EFC 7F09E3CC 0FC2D20F */ jal get_room_data_float1 -/* 0D2F00 7F09E3D0 A60A0010 */ sh $t2, 0x10($s0) -/* 0D2F04 7F09E3D4 C7A8007C */ lwc1 $f8, 0x7c($sp) -/* 0D2F08 7F09E3D8 C7A400A8 */ lwc1 $f4, 0xa8($sp) -/* 0D2F0C 7F09E3DC C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 0D2F10 7F09E3E0 46044280 */ add.s $f10, $f8, $f4 -/* 0D2F14 7F09E3E4 46065201 */ sub.s $f8, $f10, $f6 -/* 0D2F18 7F09E3E8 C66A0004 */ lwc1 $f10, 4($s3) -/* 0D2F1C 7F09E3EC 46004102 */ mul.s $f4, $f8, $f0 -/* 0D2F20 7F09E3F0 460A2181 */ sub.s $f6, $f4, $f10 -/* 0D2F24 7F09E3F4 46143202 */ mul.s $f8, $f6, $f20 -/* 0D2F28 7F09E3F8 4600410D */ trunc.w.s $f4, $f8 -/* 0D2F2C 7F09E3FC 440B2000 */ mfc1 $t3, $f4 -/* 0D2F30 7F09E400 0FC2D20F */ jal get_room_data_float1 -/* 0D2F34 7F09E404 A60B0012 */ sh $t3, 0x12($s0) -/* 0D2F38 7F09E408 C7AA0078 */ lwc1 $f10, 0x78($sp) -/* 0D2F3C 7F09E40C C7A600AC */ lwc1 $f6, 0xac($sp) -/* 0D2F40 7F09E410 C7A400A0 */ lwc1 $f4, 0xa0($sp) -/* 0D2F44 7F09E414 46065200 */ add.s $f8, $f10, $f6 -/* 0D2F48 7F09E418 46044281 */ sub.s $f10, $f8, $f4 -/* 0D2F4C 7F09E41C C6680008 */ lwc1 $f8, 8($s3) -/* 0D2F50 7F09E420 A6000018 */ sh $zero, 0x18($s0) -/* 0D2F54 7F09E424 A600001A */ sh $zero, 0x1a($s0) -/* 0D2F58 7F09E428 46005182 */ mul.s $f6, $f10, $f0 -/* 0D2F5C 7F09E42C 46083101 */ sub.s $f4, $f6, $f8 -/* 0D2F60 7F09E430 46142282 */ mul.s $f10, $f4, $f20 -/* 0D2F64 7F09E434 4600518D */ trunc.w.s $f6, $f10 -/* 0D2F68 7F09E438 440C3000 */ mfc1 $t4, $f6 -/* 0D2F6C 7F09E43C 00000000 */ nop -/* 0D2F70 7F09E440 A60C0014 */ sh $t4, 0x14($s0) -/* 0D2F74 7F09E444 86590006 */ lh $t9, 6($s2) -/* 0D2F78 7F09E448 03350019 */ multu $t9, $s5 -/* 0D2F7C 7F09E44C 00007812 */ mflo $t7 -/* 0D2F80 7F09E450 028FC021 */ addu $t8, $s4, $t7 -/* 0D2F84 7F09E454 930E000C */ lbu $t6, 0xc($t8) -/* 0D2F88 7F09E458 A20E001C */ sb $t6, 0x1c($s0) -/* 0D2F8C 7F09E45C 86480006 */ lh $t0, 6($s2) -/* 0D2F90 7F09E460 01150019 */ multu $t0, $s5 -/* 0D2F94 7F09E464 00005012 */ mflo $t2 -/* 0D2F98 7F09E468 028A4821 */ addu $t1, $s4, $t2 -/* 0D2F9C 7F09E46C 912B000D */ lbu $t3, 0xd($t1) -/* 0D2FA0 7F09E470 A20B001D */ sb $t3, 0x1d($s0) -/* 0D2FA4 7F09E474 864D0006 */ lh $t5, 6($s2) -/* 0D2FA8 7F09E478 01B50019 */ multu $t5, $s5 -/* 0D2FAC 7F09E47C 00006012 */ mflo $t4 -/* 0D2FB0 7F09E480 028CC821 */ addu $t9, $s4, $t4 -/* 0D2FB4 7F09E484 932F000E */ lbu $t7, 0xe($t9) -/* 0D2FB8 7F09E488 A20F001E */ sb $t7, 0x1e($s0) -/* 0D2FBC 7F09E48C 93B80077 */ lbu $t8, 0x77($sp) -/* 0D2FC0 7F09E490 0FC2D20F */ jal get_room_data_float1 -/* 0D2FC4 7F09E494 A218001F */ sb $t8, 0x1f($s0) -/* 0D2FC8 7F09E498 C7A80080 */ lwc1 $f8, 0x80($sp) -/* 0D2FCC 7F09E49C C7A400B0 */ lwc1 $f4, 0xb0($sp) -/* 0D2FD0 7F09E4A0 C7A6008C */ lwc1 $f6, 0x8c($sp) -/* 0D2FD4 7F09E4A4 46044280 */ add.s $f10, $f8, $f4 -/* 0D2FD8 7F09E4A8 46065200 */ add.s $f8, $f10, $f6 -/* 0D2FDC 7F09E4AC C66A0000 */ lwc1 $f10, ($s3) -/* 0D2FE0 7F09E4B0 46004102 */ mul.s $f4, $f8, $f0 -/* 0D2FE4 7F09E4B4 460A2181 */ sub.s $f6, $f4, $f10 -/* 0D2FE8 7F09E4B8 46143202 */ mul.s $f8, $f6, $f20 -/* 0D2FEC 7F09E4BC 4600410D */ trunc.w.s $f4, $f8 -/* 0D2FF0 7F09E4C0 44082000 */ mfc1 $t0, $f4 -/* 0D2FF4 7F09E4C4 0FC2D20F */ jal get_room_data_float1 -/* 0D2FF8 7F09E4C8 A6080020 */ sh $t0, 0x20($s0) -/* 0D2FFC 7F09E4CC C7AA007C */ lwc1 $f10, 0x7c($sp) -/* 0D3000 7F09E4D0 C7A600B4 */ lwc1 $f6, 0xb4($sp) -/* 0D3004 7F09E4D4 C7A40090 */ lwc1 $f4, 0x90($sp) -/* 0D3008 7F09E4D8 46065200 */ add.s $f8, $f10, $f6 -/* 0D300C 7F09E4DC 46044280 */ add.s $f10, $f8, $f4 -/* 0D3010 7F09E4E0 C6680004 */ lwc1 $f8, 4($s3) -/* 0D3014 7F09E4E4 46005182 */ mul.s $f6, $f10, $f0 -/* 0D3018 7F09E4E8 46083101 */ sub.s $f4, $f6, $f8 -/* 0D301C 7F09E4EC 46142282 */ mul.s $f10, $f4, $f20 -/* 0D3020 7F09E4F0 4600518D */ trunc.w.s $f6, $f10 -/* 0D3024 7F09E4F4 44093000 */ mfc1 $t1, $f6 -/* 0D3028 7F09E4F8 0FC2D20F */ jal get_room_data_float1 -/* 0D302C 7F09E4FC A6090022 */ sh $t1, 0x22($s0) -/* 0D3030 7F09E500 C7A80078 */ lwc1 $f8, 0x78($sp) -/* 0D3034 7F09E504 C7A400B8 */ lwc1 $f4, 0xb8($sp) -/* 0D3038 7F09E508 C7A60094 */ lwc1 $f6, 0x94($sp) -/* 0D303C 7F09E50C 240C06E0 */ li $t4, 1760 -/* 0D3040 7F09E510 46044280 */ add.s $f10, $f8, $f4 -/* 0D3044 7F09E514 46065200 */ add.s $f8, $f10, $f6 -/* 0D3048 7F09E518 C66A0008 */ lwc1 $f10, 8($s3) -/* 0D304C 7F09E51C A6000028 */ sh $zero, 0x28($s0) -/* 0D3050 7F09E520 A60C002A */ sh $t4, 0x2a($s0) -/* 0D3054 7F09E524 46004102 */ mul.s $f4, $f8, $f0 -/* 0D3058 7F09E528 460A2181 */ sub.s $f6, $f4, $f10 -/* 0D305C 7F09E52C 46143202 */ mul.s $f8, $f6, $f20 -/* 0D3060 7F09E530 4600410D */ trunc.w.s $f4, $f8 -/* 0D3064 7F09E534 440D2000 */ mfc1 $t5, $f4 -/* 0D3068 7F09E538 00000000 */ nop -/* 0D306C 7F09E53C A60D0024 */ sh $t5, 0x24($s0) -/* 0D3070 7F09E540 86590006 */ lh $t9, 6($s2) -/* 0D3074 7F09E544 03350019 */ multu $t9, $s5 -/* 0D3078 7F09E548 00007812 */ mflo $t7 -/* 0D307C 7F09E54C 028FC021 */ addu $t8, $s4, $t7 -/* 0D3080 7F09E550 930E000C */ lbu $t6, 0xc($t8) -/* 0D3084 7F09E554 A20E002C */ sb $t6, 0x2c($s0) -/* 0D3088 7F09E558 86480006 */ lh $t0, 6($s2) -/* 0D308C 7F09E55C 01150019 */ multu $t0, $s5 -/* 0D3090 7F09E560 00005012 */ mflo $t2 -/* 0D3094 7F09E564 028A4821 */ addu $t1, $s4, $t2 -/* 0D3098 7F09E568 912B000D */ lbu $t3, 0xd($t1) -/* 0D309C 7F09E56C A20B002D */ sb $t3, 0x2d($s0) -/* 0D30A0 7F09E570 864D0006 */ lh $t5, 6($s2) -/* 0D30A4 7F09E574 01B50019 */ multu $t5, $s5 -/* 0D30A8 7F09E578 00006012 */ mflo $t4 -/* 0D30AC 7F09E57C 028CC821 */ addu $t9, $s4, $t4 -/* 0D30B0 7F09E580 932F000E */ lbu $t7, 0xe($t9) -/* 0D30B4 7F09E584 A20F002E */ sb $t7, 0x2e($s0) -/* 0D30B8 7F09E588 93B80077 */ lbu $t8, 0x77($sp) -/* 0D30BC 7F09E58C 0FC2D20F */ jal get_room_data_float1 -/* 0D30C0 7F09E590 A218002F */ sb $t8, 0x2f($s0) -/* 0D30C4 7F09E594 C7AA0080 */ lwc1 $f10, 0x80($sp) -/* 0D30C8 7F09E598 C7A600A4 */ lwc1 $f6, 0xa4($sp) -/* 0D30CC 7F09E59C C7A40098 */ lwc1 $f4, 0x98($sp) -/* 0D30D0 7F09E5A0 46065201 */ sub.s $f8, $f10, $f6 -/* 0D30D4 7F09E5A4 46044280 */ add.s $f10, $f8, $f4 -/* 0D30D8 7F09E5A8 C6680000 */ lwc1 $f8, ($s3) -/* 0D30DC 7F09E5AC 46005182 */ mul.s $f6, $f10, $f0 -/* 0D30E0 7F09E5B0 46083101 */ sub.s $f4, $f6, $f8 -/* 0D30E4 7F09E5B4 46142282 */ mul.s $f10, $f4, $f20 -/* 0D30E8 7F09E5B8 4600518D */ trunc.w.s $f6, $f10 -/* 0D30EC 7F09E5BC 44083000 */ mfc1 $t0, $f6 -/* 0D30F0 7F09E5C0 0FC2D20F */ jal get_room_data_float1 -/* 0D30F4 7F09E5C4 A6080030 */ sh $t0, 0x30($s0) -/* 0D30F8 7F09E5C8 C7A8007C */ lwc1 $f8, 0x7c($sp) -/* 0D30FC 7F09E5CC C7A400A8 */ lwc1 $f4, 0xa8($sp) -/* 0D3100 7F09E5D0 C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 0D3104 7F09E5D4 46044281 */ sub.s $f10, $f8, $f4 -/* 0D3108 7F09E5D8 46065200 */ add.s $f8, $f10, $f6 -/* 0D310C 7F09E5DC C66A0004 */ lwc1 $f10, 4($s3) -/* 0D3110 7F09E5E0 46004102 */ mul.s $f4, $f8, $f0 -/* 0D3114 7F09E5E4 460A2181 */ sub.s $f6, $f4, $f10 -/* 0D3118 7F09E5E8 46143202 */ mul.s $f8, $f6, $f20 -/* 0D311C 7F09E5EC 4600410D */ trunc.w.s $f4, $f8 -/* 0D3120 7F09E5F0 44092000 */ mfc1 $t1, $f4 -/* 0D3124 7F09E5F4 0FC2D20F */ jal get_room_data_float1 -/* 0D3128 7F09E5F8 A6090032 */ sh $t1, 0x32($s0) -/* 0D312C 7F09E5FC C7AA0078 */ lwc1 $f10, 0x78($sp) -/* 0D3130 7F09E600 C7A600AC */ lwc1 $f6, 0xac($sp) -/* 0D3134 7F09E604 C7A400A0 */ lwc1 $f4, 0xa0($sp) -/* 0D3138 7F09E608 240C06E0 */ li $t4, 1760 -/* 0D313C 7F09E60C 46065201 */ sub.s $f8, $f10, $f6 -/* 0D3140 7F09E610 241906E0 */ li $t9, 1760 -/* 0D3144 7F09E614 02002025 */ move $a0, $s0 -/* 0D3148 7F09E618 46044280 */ add.s $f10, $f8, $f4 -/* 0D314C 7F09E61C C6680008 */ lwc1 $f8, 8($s3) -/* 0D3150 7F09E620 A60C0038 */ sh $t4, 0x38($s0) -/* 0D3154 7F09E624 A619003A */ sh $t9, 0x3a($s0) -/* 0D3158 7F09E628 46005182 */ mul.s $f6, $f10, $f0 -/* 0D315C 7F09E62C 46083101 */ sub.s $f4, $f6, $f8 -/* 0D3160 7F09E630 46142282 */ mul.s $f10, $f4, $f20 -/* 0D3164 7F09E634 4600518D */ trunc.w.s $f6, $f10 -/* 0D3168 7F09E638 440D3000 */ mfc1 $t5, $f6 -/* 0D316C 7F09E63C 00000000 */ nop -/* 0D3170 7F09E640 A60D0034 */ sh $t5, 0x34($s0) -/* 0D3174 7F09E644 864F0006 */ lh $t7, 6($s2) -/* 0D3178 7F09E648 01F50019 */ multu $t7, $s5 -/* 0D317C 7F09E64C 0000C012 */ mflo $t8 -/* 0D3180 7F09E650 02987021 */ addu $t6, $s4, $t8 -/* 0D3184 7F09E654 91C8000C */ lbu $t0, 0xc($t6) -/* 0D3188 7F09E658 A208003C */ sb $t0, 0x3c($s0) -/* 0D318C 7F09E65C 864A0006 */ lh $t2, 6($s2) -/* 0D3190 7F09E660 01550019 */ multu $t2, $s5 -/* 0D3194 7F09E664 00004812 */ mflo $t1 -/* 0D3198 7F09E668 02895821 */ addu $t3, $s4, $t1 -/* 0D319C 7F09E66C 916D000D */ lbu $t5, 0xd($t3) -/* 0D31A0 7F09E670 3C090430 */ lui $t1, (0x04300040 >> 16) # lui $t1, 0x430 -/* 0D31A4 7F09E674 35290040 */ ori $t1, (0x04300040 & 0xFFFF) # ori $t1, $t1, 0x40 -/* 0D31A8 7F09E678 A20D003D */ sb $t5, 0x3d($s0) -/* 0D31AC 7F09E67C 864C0006 */ lh $t4, 6($s2) -/* 0D31B0 7F09E680 01950019 */ multu $t4, $s5 -/* 0D31B4 7F09E684 0000C812 */ mflo $t9 -/* 0D31B8 7F09E688 02997821 */ addu $t7, $s4, $t9 -/* 0D31BC 7F09E68C 91F8000E */ lbu $t8, 0xe($t7) -/* 0D31C0 7F09E690 A218003E */ sb $t8, 0x3e($s0) -/* 0D31C4 7F09E694 93AE0077 */ lbu $t6, 0x77($sp) -/* 0D31C8 7F09E698 A20E003F */ sb $t6, 0x3f($s0) -/* 0D31CC 7F09E69C 8FB100E0 */ lw $s1, 0xe0($sp) -/* 0D31D0 7F09E6A0 262A0008 */ addiu $t2, $s1, 8 -/* 0D31D4 7F09E6A4 AFAA00E0 */ sw $t2, 0xe0($sp) -/* 0D31D8 7F09E6A8 0C003A2C */ jal osVirtualToPhysical -/* 0D31DC 7F09E6AC AE290000 */ sw $t1, ($s1) -/* 0D31E0 7F09E6B0 AE220004 */ sw $v0, 4($s1) -/* 0D31E4 7F09E6B4 8FAB00E0 */ lw $t3, 0xe0($sp) -/* 0D31E8 7F09E6B8 3C0CB100 */ lui $t4, (0xB1000032 >> 16) # lui $t4, 0xb100 -/* 0D31EC 7F09E6BC 358C0032 */ ori $t4, (0xB1000032 & 0xFFFF) # ori $t4, $t4, 0x32 -/* 0D31F0 7F09E6C0 256D0008 */ addiu $t5, $t3, 8 -/* 0D31F4 7F09E6C4 AFAD00E0 */ sw $t5, 0xe0($sp) -/* 0D31F8 7F09E6C8 24192010 */ li $t9, 8208 -/* 0D31FC 7F09E6CC AD790004 */ sw $t9, 4($t3) -/* 0D3200 7F09E6D0 AD6C0000 */ sw $t4, ($t3) -/* 0D3204 7F09E6D4 8FA200E0 */ lw $v0, 0xe0($sp) -.L7F09E6D8: -/* 0D3208 7F09E6D8 8FBF0034 */ lw $ra, 0x34($sp) -/* 0D320C 7F09E6DC D7B40010 */ ldc1 $f20, 0x10($sp) -/* 0D3210 7F09E6E0 8FB0001C */ lw $s0, 0x1c($sp) -/* 0D3214 7F09E6E4 8FB10020 */ lw $s1, 0x20($sp) -/* 0D3218 7F09E6E8 8FB20024 */ lw $s2, 0x24($sp) -/* 0D321C 7F09E6EC 8FB30028 */ lw $s3, 0x28($sp) -/* 0D3220 7F09E6F0 8FB4002C */ lw $s4, 0x2c($sp) -/* 0D3224 7F09E6F4 8FB50030 */ lw $s5, 0x30($sp) -/* 0D3228 7F09E6F8 03E00008 */ jr $ra -/* 0D322C 7F09E6FC 27BD00D8 */ addiu $sp, $sp, 0xd8 -) -#endif -void sub_GAME_7F09E700(coord3d *pos, StandTile *stan, s16 arg2, u8 *rooms, s32 arg4) +void explosionCreateSmoke(coord3d *pos, StandTile *stan, s16 smoke_type, u8 *rooms, s32 flags) { struct Smoke *smoke; struct Smoke *smoke_tmp; @@ -3079,24 +1219,24 @@ void sub_GAME_7F09E700(coord3d *pos, StandTile *stan, s16 arg2, u8 *rooms, s32 a for (i = 0; i < 20; i++) { - if (ptr_smoke_buf[i].prop == NULL) + if (g_SmokeBuffer[i].prop == NULL) { - smoke = &ptr_smoke_buf[i]; + smoke = &g_SmokeBuffer[i]; break; } else if (player_count >= 2) { - smoke_tmp = (i + ptr_smoke_buf); - if (((smoke_tmp->unk06 != 7) && (smoke_tmp->unk06 != 8)) && (smoke_tmp->unk06 != 9)) + smoke_tmp = (i + g_SmokeBuffer); + if (((smoke_tmp->smoke_type != 7) && (smoke_tmp->smoke_type != 8)) && (smoke_tmp->smoke_type != 9)) { - smoke_tmp->unk04 = (s16) array_smoke_types[smoke_tmp->unk06].duration; + smoke_tmp->duration = (s16) g_SmokeTypes[smoke_tmp->smoke_type].duration; } } } if (smoke == NULL) { return; } - prop = propAllocate(); + prop = chrpropAllocate(); if (prop == NULL) { return; } prop->type = 8; @@ -3113,7 +1253,7 @@ void sub_GAME_7F09E700(coord3d *pos, StandTile *stan, s16 arg2, u8 *rooms, s32 a } prop->rooms[i] = 0xFF; - if (arg4 != 0) + if (flags != 0) { prop->flags |= 8; } @@ -3121,687 +1261,271 @@ void sub_GAME_7F09E700(coord3d *pos, StandTile *stan, s16 arg2, u8 *rooms, s32 a chrpropActivateThisFrame(prop); chrpropEnable(prop); smoke->prop = prop; - smoke->unk04 = 0; - smoke->unk06 = arg2; + smoke->duration = 0; + smoke->smoke_type = smoke_type; } -#ifdef NONMATCHING -void sub_GAME_7F09E8AC(void) { +/*** + * Perfect Dark u32 smokeTick(struct prop *prop) + * + * NTSC address 0x7F09E8AC. +*/ +s32 explosionSmokeTick(PropRecord *arg0) +{ + f32 temp_f2; + s32 i; + s32 j; + s32 k; + f32 lvupdate; + struct Smoke *smoke; + struct SmokePart *part; + struct coord3d bbmin; + struct coord3d bbmax; + f32 var_f14; + s32 var_v1; + + smoke = arg0->smoke; + if (g_ClockTimer == 0) + { + return 0; + } + + lvupdate = (g_ClockTimer < 15) ? (f32) g_ClockTimer : 15.0f; + + for (i = 0; i < (s32) lvupdate; i++) + { + smoke->duration += 1; + + for (j = 0; j < SMOKE_PARTS_LEN; j++) + { + part = &smoke->parts[j]; + + if (part->size != 0.0f) + { + part->pos.f[1] += 0.3f; + part->size += 0.15f; + + part->alpha -= g_SmokeTypes[smoke->smoke_type].fg_rotrate; + part->count++; + part->rot += part->deltarot; + + part->offset1 += 0.02f + RANDOMFRAC() * 0.01f; + part->offset2 += 0.02f + RANDOMFRAC() * 0.01f; + + if (part->alpha < 4.0f) + { + part->size = 0.0f; + } + } + } + + if (smoke->duration < g_SmokeTypes[smoke->smoke_type].duration) + { + if (smoke->duration % g_SmokeTypes[smoke->smoke_type].ratedissolve == 1) + { + for (j = 0; j < SMOKE_PARTS_LEN; j++) + { + if (smoke->parts[j].size == 0.0f) + { + part = &smoke->parts[j]; + + part->size = g_SmokeTypes[smoke->smoke_type].size * (RANDOMFRAC() * 0.5f + 1.0f); + part->alpha = (randomGetNext() % 70) + 110.0f; + part->count = 0; + part->rot = RANDOMFRAC() * M_TAU_F; + part->deltarot = (0.5f - RANDOMFRAC()) * g_SmokeTypes[smoke->smoke_type].bg_rotrate; + + part->pos.x = arg0->pos.x; + part->pos.y = arg0->pos.y; + part->pos.z = arg0->pos.z; + + part->offset1 = RANDOMFRAC() * 0.5f; + part->offset2 = RANDOMFRAC() * 0.5f; + + if (smoke->duration > g_SmokeTypes[smoke->smoke_type].duration - g_SmokeTypes[smoke->smoke_type].propagated_clouds) + { + part->alpha *= (g_SmokeTypes[smoke->smoke_type].duration - smoke->duration) / (f32)g_SmokeTypes[smoke->smoke_type].propagated_clouds; + } + + break; + } + } + } + } + } + + bbmin.x = arg0->pos.x - 1.0f; + bbmin.y = arg0->pos.y - 1.0f; + bbmin.z = arg0->pos.z - 1.0f; + + bbmax.x = arg0->pos.x + 1.0f; + bbmax.y = arg0->pos.y + 1.0f; + bbmax.z = arg0->pos.z + 1.0f; + + var_f14 = 0.0f; + + for (j = 0; j < SMOKE_PARTS_LEN; j++) + { + if (smoke->parts[j].size != 0.0f) + { + for (k = 0; k < 3; k++) + { + if (bbmin.f[k] > smoke->parts[j].pos.f[k] - smoke->parts[j].size) + { + bbmin.f[k] = smoke->parts[j].pos.f[k] - smoke->parts[j].size; + } + else if (bbmax.f[k] < smoke->parts[j].pos.f[k] - smoke->parts[j].size) + { + bbmax.f[k] = smoke->parts[j].pos.f[k] - smoke->parts[j].size; + } + } + } + } + + temp_f2 = arg0->pos.f[0] - bbmin.f[0]; + if (temp_f2 > 0.0f) + { + var_f14 = temp_f2; + } + + if (var_f14 < arg0->pos.f[2] - bbmin.f[2]) + { + var_f14 = arg0->pos.f[2] - bbmin.f[2]; + } + + if (var_f14 < bbmax.f[0] - arg0->pos.f[0]) + { + var_f14 = bbmax.f[0] - arg0->pos.f[0]; + } + + if (var_f14 < bbmax.f[2] - arg0->pos.f[2]) + { + var_f14 = bbmax.f[2] - arg0->pos.f[2]; + } + + sub_GAME_7F03E27C(arg0, &bbmin, &bbmax, var_f14); + + if (smoke->duration > g_SmokeTypes[smoke->smoke_type].ratedissolve) + { + var_v1 = 1; + + for (j = 0; j < SMOKE_PARTS_LEN; j++) + { + if (smoke->parts[j].size > 0.0f) + { + var_v1 = 0; + break; + } + } + } + else + { + var_v1 = 0; + } + + if (var_v1 != 0) + { + smoke->prop = NULL; + return 1; + } + + return 0; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800576CC -.word 0x3e19999a /*0.15000001*/ -glabel D_800576D0 -.word 0x3e99999a /*0.30000001*/ -glabel D_800576D4 -.word 0x3c23d70a /*0.0099999998*/ -glabel D_800576D8 -.word 0x3ca3d70a /*0.02*/ -glabel D_800576DC -.word 0x40c90fdb /*6.2831855*/ -.text -glabel sub_GAME_7F09E8AC -/* 0D33DC 7F09E8AC 27BDFF30 */ addiu $sp, $sp, -0xd0 -/* 0D33E0 7F09E8B0 3C028005 */ lui $v0, %hi(g_ClockTimer) -/* 0D33E4 7F09E8B4 8C428374 */ lw $v0, %lo(g_ClockTimer)($v0) -/* 0D33E8 7F09E8B8 AFBF006C */ sw $ra, 0x6c($sp) -/* 0D33EC 7F09E8BC AFBE0068 */ sw $fp, 0x68($sp) -/* 0D33F0 7F09E8C0 AFB70064 */ sw $s7, 0x64($sp) -/* 0D33F4 7F09E8C4 AFB60060 */ sw $s6, 0x60($sp) -/* 0D33F8 7F09E8C8 AFB5005C */ sw $s5, 0x5c($sp) -/* 0D33FC 7F09E8CC AFB40058 */ sw $s4, 0x58($sp) -/* 0D3400 7F09E8D0 AFB30054 */ sw $s3, 0x54($sp) -/* 0D3404 7F09E8D4 AFB20050 */ sw $s2, 0x50($sp) -/* 0D3408 7F09E8D8 AFB1004C */ sw $s1, 0x4c($sp) -/* 0D340C 7F09E8DC AFB00048 */ sw $s0, 0x48($sp) -/* 0D3410 7F09E8E0 F7BE0040 */ sdc1 $f30, 0x40($sp) -/* 0D3414 7F09E8E4 F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 0D3418 7F09E8E8 F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0D341C 7F09E8EC F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0D3420 7F09E8F0 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0D3424 7F09E8F4 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D3428 7F09E8F8 0080B825 */ move $s7, $a0 -/* 0D342C 7F09E8FC 14400003 */ bnez $v0, .L7F09E90C -/* 0D3430 7F09E900 8C930004 */ lw $s3, 4($a0) -/* 0D3434 7F09E904 10000193 */ b .L7F09EF54 -/* 0D3438 7F09E908 00001025 */ move $v0, $zero -.L7F09E90C: -/* 0D343C 7F09E90C 2841000F */ slti $at, $v0, 0xf -/* 0D3440 7F09E910 50200005 */ beql $at, $zero, .L7F09E928 -/* 0D3444 7F09E914 3C014170 */ lui $at, 0x4170 -/* 0D3448 7F09E918 44822000 */ mtc1 $v0, $f4 -/* 0D344C 7F09E91C 10000004 */ b .L7F09E930 -/* 0D3450 7F09E920 46802020 */ cvt.s.w $f0, $f4 -/* 0D3454 7F09E924 3C014170 */ li $at, 0x41700000 # 15.000000 -.L7F09E928: -/* 0D3458 7F09E928 44810000 */ mtc1 $at, $f0 -/* 0D345C 7F09E92C 00000000 */ nop -.L7F09E930: -/* 0D3460 7F09E930 4600018D */ trunc.w.s $f6, $f0 -/* 0D3464 7F09E934 3C158004 */ lui $s5, %hi(array_smoke_types) -/* 0D3468 7F09E938 26B5017C */ addiu $s5, %lo(array_smoke_types) # addiu $s5, $s5, 0x17c -/* 0D346C 7F09E93C 0000F025 */ move $fp, $zero -/* 0D3470 7F09E940 440F3000 */ mfc1 $t7, $f6 -/* 0D3474 7F09E944 3C018005 */ lui $at, %hi(D_800576CC) -/* 0D3478 7F09E948 24160018 */ li $s6, 24 -/* 0D347C 7F09E94C 19E000FD */ blez $t7, .L7F09ED44 -/* 0D3480 7F09E950 AFAF008C */ sw $t7, 0x8c($sp) -/* 0D3484 7F09E954 C43E76CC */ lwc1 $f30, %lo(D_800576CC)($at) -/* 0D3488 7F09E958 3C018005 */ lui $at, %hi(D_800576D0) -/* 0D348C 7F09E95C C43C76D0 */ lwc1 $f28, %lo(D_800576D0)($at) -/* 0D3490 7F09E960 3C018005 */ lui $at, %hi(D_800576D4) -/* 0D3494 7F09E964 C43876D4 */ lwc1 $f24, %lo(D_800576D4)($at) -/* 0D3498 7F09E968 3C018005 */ lui $at, %hi(D_800576D8) -/* 0D349C 7F09E96C C43676D8 */ lwc1 $f22, %lo(D_800576D8)($at) -/* 0D34A0 7F09E970 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D34A4 7F09E974 4481A000 */ mtc1 $at, $f20 -/* 0D34A8 7F09E978 4480D000 */ mtc1 $zero, $f26 -/* 0D34AC 7F09E97C 24140190 */ li $s4, 400 -/* 0D34B0 7F09E980 86790004 */ lh $t9, 4($s3) -.L7F09E984: -/* 0D34B4 7F09E984 00001025 */ move $v0, $zero -/* 0D34B8 7F09E988 00009025 */ move $s2, $zero -/* 0D34BC 7F09E98C 27280001 */ addiu $t0, $t9, 1 -/* 0D34C0 7F09E990 A6680004 */ sh $t0, 4($s3) -/* 0D34C4 7F09E994 02608825 */ move $s1, $s3 -.L7F09E998: -/* 0D34C8 7F09E998 C6280014 */ lwc1 $f8, 0x14($s1) -/* 0D34CC 7F09E99C 4608D032 */ c.eq.s $f26, $f8 -/* 0D34D0 7F09E9A0 00000000 */ nop -/* 0D34D4 7F09E9A4 4503003C */ bc1tl .L7F09EA98 -/* 0D34D8 7F09E9A8 26520028 */ addiu $s2, $s2, 0x28 -/* 0D34DC 7F09E9AC 26300008 */ addiu $s0, $s1, 8 -/* 0D34E0 7F09E9B0 C60A0004 */ lwc1 $f10, 4($s0) -/* 0D34E4 7F09E9B4 C612000C */ lwc1 $f18, 0xc($s0) -/* 0D34E8 7F09E9B8 C6060020 */ lwc1 $f6, 0x20($s0) -/* 0D34EC 7F09E9BC 461C5400 */ add.s $f16, $f10, $f28 -/* 0D34F0 7F09E9C0 860C0024 */ lh $t4, 0x24($s0) -/* 0D34F4 7F09E9C4 461E9100 */ add.s $f4, $f18, $f30 -/* 0D34F8 7F09E9C8 E6100004 */ swc1 $f16, 4($s0) -/* 0D34FC 7F09E9CC C6100010 */ lwc1 $f16, 0x10($s0) -/* 0D3500 7F09E9D0 C6120014 */ lwc1 $f18, 0x14($s0) -/* 0D3504 7F09E9D4 E604000C */ swc1 $f4, 0xc($s0) -/* 0D3508 7F09E9D8 86690006 */ lh $t1, 6($s3) -/* 0D350C 7F09E9DC 46128100 */ add.s $f4, $f16, $f18 -/* 0D3510 7F09E9E0 258D0001 */ addiu $t5, $t4, 1 -/* 0D3514 7F09E9E4 01360019 */ multu $t1, $s6 -/* 0D3518 7F09E9E8 00005012 */ mflo $t2 -/* 0D351C 7F09E9EC 02AA5821 */ addu $t3, $s5, $t2 -/* 0D3520 7F09E9F0 C5680010 */ lwc1 $f8, 0x10($t3) -/* 0D3524 7F09E9F4 A60D0024 */ sh $t5, 0x24($s0) -/* 0D3528 7F09E9F8 E6040010 */ swc1 $f4, 0x10($s0) -/* 0D352C 7F09E9FC 46083281 */ sub.s $f10, $f6, $f8 -/* 0D3530 7F09EA00 0C002914 */ jal randomGetNext -/* 0D3534 7F09EA04 E60A0020 */ swc1 $f10, 0x20($s0) -/* 0D3538 7F09EA08 44824000 */ mtc1 $v0, $f8 -/* 0D353C 7F09EA0C C6060018 */ lwc1 $f6, 0x18($s0) -/* 0D3540 7F09EA10 04410005 */ bgez $v0, .L7F09EA28 -/* 0D3544 7F09EA14 468042A0 */ cvt.s.w $f10, $f8 -/* 0D3548 7F09EA18 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D354C 7F09EA1C 44818000 */ mtc1 $at, $f16 -/* 0D3550 7F09EA20 00000000 */ nop -/* 0D3554 7F09EA24 46105280 */ add.s $f10, $f10, $f16 -.L7F09EA28: -/* 0D3558 7F09EA28 46145482 */ mul.s $f18, $f10, $f20 -/* 0D355C 7F09EA2C 00000000 */ nop -/* 0D3560 7F09EA30 46189102 */ mul.s $f4, $f18, $f24 -/* 0D3564 7F09EA34 4604B200 */ add.s $f8, $f22, $f4 -/* 0D3568 7F09EA38 46083400 */ add.s $f16, $f6, $f8 -/* 0D356C 7F09EA3C 0C002914 */ jal randomGetNext -/* 0D3570 7F09EA40 E6100018 */ swc1 $f16, 0x18($s0) -/* 0D3574 7F09EA44 44829000 */ mtc1 $v0, $f18 -/* 0D3578 7F09EA48 C60A001C */ lwc1 $f10, 0x1c($s0) -/* 0D357C 7F09EA4C 04410005 */ bgez $v0, .L7F09EA64 -/* 0D3580 7F09EA50 46809120 */ cvt.s.w $f4, $f18 -/* 0D3584 7F09EA54 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D3588 7F09EA58 44813000 */ mtc1 $at, $f6 -/* 0D358C 7F09EA5C 00000000 */ nop -/* 0D3590 7F09EA60 46062100 */ add.s $f4, $f4, $f6 -.L7F09EA64: -/* 0D3594 7F09EA64 46142202 */ mul.s $f8, $f4, $f20 -/* 0D3598 7F09EA68 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0D359C 7F09EA6C C6040020 */ lwc1 $f4, 0x20($s0) -/* 0D35A0 7F09EA70 46184402 */ mul.s $f16, $f8, $f24 -/* 0D35A4 7F09EA74 44814000 */ mtc1 $at, $f8 -/* 0D35A8 7F09EA78 00000000 */ nop -/* 0D35AC 7F09EA7C 4608203C */ c.lt.s $f4, $f8 -/* 0D35B0 7F09EA80 4610B480 */ add.s $f18, $f22, $f16 -/* 0D35B4 7F09EA84 46125180 */ add.s $f6, $f10, $f18 -/* 0D35B8 7F09EA88 45000002 */ bc1f .L7F09EA94 -/* 0D35BC 7F09EA8C E606001C */ swc1 $f6, 0x1c($s0) -/* 0D35C0 7F09EA90 E61A000C */ swc1 $f26, 0xc($s0) -.L7F09EA94: -/* 0D35C4 7F09EA94 26520028 */ addiu $s2, $s2, 0x28 -.L7F09EA98: -/* 0D35C8 7F09EA98 2A410190 */ slti $at, $s2, 0x190 -/* 0D35CC 7F09EA9C 1420FFBE */ bnez $at, .L7F09E998 -/* 0D35D0 7F09EAA0 26310028 */ addiu $s1, $s1, 0x28 -/* 0D35D4 7F09EAA4 866E0006 */ lh $t6, 6($s3) -/* 0D35D8 7F09EAA8 86630004 */ lh $v1, 4($s3) -/* 0D35DC 7F09EAAC 01D60019 */ multu $t6, $s6 -/* 0D35E0 7F09EAB0 00007812 */ mflo $t7 -/* 0D35E4 7F09EAB4 02AF2021 */ addu $a0, $s5, $t7 -/* 0D35E8 7F09EAB8 84980000 */ lh $t8, ($a0) -/* 0D35EC 7F09EABC 0078082A */ slt $at, $v1, $t8 -/* 0D35F0 7F09EAC0 5020009D */ beql $at, $zero, .L7F09ED38 -/* 0D35F4 7F09EAC4 8FAB008C */ lw $t3, 0x8c($sp) -/* 0D35F8 7F09EAC8 84990004 */ lh $t9, 4($a0) -/* 0D35FC 7F09EACC 00009025 */ move $s2, $zero -/* 0D3600 7F09EAD0 02608825 */ move $s1, $s3 -/* 0D3604 7F09EAD4 0079001A */ div $zero, $v1, $t9 -/* 0D3608 7F09EAD8 17200002 */ bnez $t9, .L7F09EAE4 -/* 0D360C 7F09EADC 00000000 */ nop -/* 0D3610 7F09EAE0 0007000D */ break 7 -.L7F09EAE4: -/* 0D3614 7F09EAE4 2401FFFF */ li $at, -1 -/* 0D3618 7F09EAE8 17210004 */ bne $t9, $at, .L7F09EAFC -/* 0D361C 7F09EAEC 3C018000 */ li $at, 0x80000000 # -0.000000 -/* 0D3620 7F09EAF0 14610002 */ bne $v1, $at, .L7F09EAFC -/* 0D3624 7F09EAF4 00000000 */ nop -/* 0D3628 7F09EAF8 0006000D */ break 6 -.L7F09EAFC: -/* 0D362C 7F09EAFC 24010001 */ li $at, 1 -/* 0D3630 7F09EB00 00004010 */ mfhi $t0 -/* 0D3634 7F09EB04 5501008C */ bnel $t0, $at, .L7F09ED38 -/* 0D3638 7F09EB08 8FAB008C */ lw $t3, 0x8c($sp) -.L7F09EB0C: -/* 0D363C 7F09EB0C C6300014 */ lwc1 $f16, 0x14($s1) -/* 0D3640 7F09EB10 26520028 */ addiu $s2, $s2, 0x28 -/* 0D3644 7F09EB14 4610D032 */ c.eq.s $f26, $f16 -/* 0D3648 7F09EB18 00000000 */ nop -/* 0D364C 7F09EB1C 45000083 */ bc1f .L7F09ED2C -/* 0D3650 7F09EB20 00000000 */ nop -/* 0D3654 7F09EB24 0C002914 */ jal randomGetNext -/* 0D3658 7F09EB28 00000000 */ nop -/* 0D365C 7F09EB2C 44825000 */ mtc1 $v0, $f10 -/* 0D3660 7F09EB30 26300008 */ addiu $s0, $s1, 8 -/* 0D3664 7F09EB34 04410005 */ bgez $v0, .L7F09EB4C -/* 0D3668 7F09EB38 468054A0 */ cvt.s.w $f18, $f10 -/* 0D366C 7F09EB3C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D3670 7F09EB40 44813000 */ mtc1 $at, $f6 -/* 0D3674 7F09EB44 00000000 */ nop -/* 0D3678 7F09EB48 46069480 */ add.s $f18, $f18, $f6 -.L7F09EB4C: -/* 0D367C 7F09EB4C 86690006 */ lh $t1, 6($s3) -/* 0D3680 7F09EB50 46149102 */ mul.s $f4, $f18, $f20 -/* 0D3684 7F09EB54 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D3688 7F09EB58 01360019 */ multu $t1, $s6 -/* 0D368C 7F09EB5C 44814000 */ mtc1 $at, $f8 -/* 0D3690 7F09EB60 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D3694 7F09EB64 44815000 */ mtc1 $at, $f10 -/* 0D3698 7F09EB68 46082402 */ mul.s $f16, $f4, $f8 -/* 0D369C 7F09EB6C 00005012 */ mflo $t2 -/* 0D36A0 7F09EB70 02AA5821 */ addu $t3, $s5, $t2 -/* 0D36A4 7F09EB74 856C0006 */ lh $t4, 6($t3) -/* 0D36A8 7F09EB78 460A8180 */ add.s $f6, $f16, $f10 -/* 0D36AC 7F09EB7C 448C9000 */ mtc1 $t4, $f18 -/* 0D36B0 7F09EB80 00000000 */ nop -/* 0D36B4 7F09EB84 46809120 */ cvt.s.w $f4, $f18 -/* 0D36B8 7F09EB88 46043202 */ mul.s $f8, $f6, $f4 -/* 0D36BC 7F09EB8C 0C002914 */ jal randomGetNext -/* 0D36C0 7F09EB90 E608000C */ swc1 $f8, 0xc($s0) -/* 0D36C4 7F09EB94 24010046 */ li $at, 70 -/* 0D36C8 7F09EB98 0041001B */ divu $zero, $v0, $at -/* 0D36CC 7F09EB9C 00006810 */ mfhi $t5 -/* 0D36D0 7F09EBA0 448D8000 */ mtc1 $t5, $f16 -/* 0D36D4 7F09EBA4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D36D8 7F09EBA8 05A10004 */ bgez $t5, .L7F09EBBC -/* 0D36DC 7F09EBAC 468082A0 */ cvt.s.w $f10, $f16 -/* 0D36E0 7F09EBB0 44819000 */ mtc1 $at, $f18 -/* 0D36E4 7F09EBB4 00000000 */ nop -/* 0D36E8 7F09EBB8 46125280 */ add.s $f10, $f10, $f18 -.L7F09EBBC: -/* 0D36EC 7F09EBBC 3C0142DC */ li $at, 0x42DC0000 # 110.000000 -/* 0D36F0 7F09EBC0 44813000 */ mtc1 $at, $f6 -/* 0D36F4 7F09EBC4 A6000024 */ sh $zero, 0x24($s0) -/* 0D36F8 7F09EBC8 46065100 */ add.s $f4, $f10, $f6 -/* 0D36FC 7F09EBCC 0C002914 */ jal randomGetNext -/* 0D3700 7F09EBD0 E6040020 */ swc1 $f4, 0x20($s0) -/* 0D3704 7F09EBD4 44824000 */ mtc1 $v0, $f8 -/* 0D3708 7F09EBD8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D370C 7F09EBDC 04410004 */ bgez $v0, .L7F09EBF0 -/* 0D3710 7F09EBE0 46804420 */ cvt.s.w $f16, $f8 -/* 0D3714 7F09EBE4 44819000 */ mtc1 $at, $f18 -/* 0D3718 7F09EBE8 00000000 */ nop -/* 0D371C 7F09EBEC 46128400 */ add.s $f16, $f16, $f18 -.L7F09EBF0: -/* 0D3720 7F09EBF0 46148282 */ mul.s $f10, $f16, $f20 -/* 0D3724 7F09EBF4 3C018005 */ lui $at, %hi(D_800576DC) -/* 0D3728 7F09EBF8 C42676DC */ lwc1 $f6, %lo(D_800576DC)($at) -/* 0D372C 7F09EBFC 46065102 */ mul.s $f4, $f10, $f6 -/* 0D3730 7F09EC00 0C002914 */ jal randomGetNext -/* 0D3734 7F09EC04 E6040010 */ swc1 $f4, 0x10($s0) -/* 0D3738 7F09EC08 44829000 */ mtc1 $v0, $f18 -/* 0D373C 7F09EC0C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D3740 7F09EC10 44814000 */ mtc1 $at, $f8 -/* 0D3744 7F09EC14 04410005 */ bgez $v0, .L7F09EC2C -/* 0D3748 7F09EC18 46809420 */ cvt.s.w $f16, $f18 -/* 0D374C 7F09EC1C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D3750 7F09EC20 44815000 */ mtc1 $at, $f10 -/* 0D3754 7F09EC24 00000000 */ nop -/* 0D3758 7F09EC28 460A8400 */ add.s $f16, $f16, $f10 -.L7F09EC2C: -/* 0D375C 7F09EC2C 866E0006 */ lh $t6, 6($s3) -/* 0D3760 7F09EC30 46148182 */ mul.s $f6, $f16, $f20 -/* 0D3764 7F09EC34 46064101 */ sub.s $f4, $f8, $f6 -/* 0D3768 7F09EC38 01D60019 */ multu $t6, $s6 -/* 0D376C 7F09EC3C 00007812 */ mflo $t7 -/* 0D3770 7F09EC40 02AFC021 */ addu $t8, $s5, $t7 -/* 0D3774 7F09EC44 C7120008 */ lwc1 $f18, 8($t8) -/* 0D3778 7F09EC48 46049282 */ mul.s $f10, $f18, $f4 -/* 0D377C 7F09EC4C E60A0014 */ swc1 $f10, 0x14($s0) -/* 0D3780 7F09EC50 C6F00008 */ lwc1 $f16, 8($s7) -/* 0D3784 7F09EC54 E6100000 */ swc1 $f16, ($s0) -/* 0D3788 7F09EC58 C6E8000C */ lwc1 $f8, 0xc($s7) -/* 0D378C 7F09EC5C E6080004 */ swc1 $f8, 4($s0) -/* 0D3790 7F09EC60 C6E60010 */ lwc1 $f6, 0x10($s7) -/* 0D3794 7F09EC64 0C002914 */ jal randomGetNext -/* 0D3798 7F09EC68 E6060008 */ swc1 $f6, 8($s0) -/* 0D379C 7F09EC6C 44829000 */ mtc1 $v0, $f18 -/* 0D37A0 7F09EC70 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D37A4 7F09EC74 04410004 */ bgez $v0, .L7F09EC88 -/* 0D37A8 7F09EC78 46809120 */ cvt.s.w $f4, $f18 -/* 0D37AC 7F09EC7C 44815000 */ mtc1 $at, $f10 -/* 0D37B0 7F09EC80 00000000 */ nop -/* 0D37B4 7F09EC84 460A2100 */ add.s $f4, $f4, $f10 -.L7F09EC88: -/* 0D37B8 7F09EC88 46142402 */ mul.s $f16, $f4, $f20 -/* 0D37BC 7F09EC8C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D37C0 7F09EC90 44814000 */ mtc1 $at, $f8 -/* 0D37C4 7F09EC94 00000000 */ nop -/* 0D37C8 7F09EC98 46088182 */ mul.s $f6, $f16, $f8 -/* 0D37CC 7F09EC9C 0C002914 */ jal randomGetNext -/* 0D37D0 7F09ECA0 E6060018 */ swc1 $f6, 0x18($s0) -/* 0D37D4 7F09ECA4 44829000 */ mtc1 $v0, $f18 -/* 0D37D8 7F09ECA8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D37DC 7F09ECAC 04410004 */ bgez $v0, .L7F09ECC0 -/* 0D37E0 7F09ECB0 468092A0 */ cvt.s.w $f10, $f18 -/* 0D37E4 7F09ECB4 44812000 */ mtc1 $at, $f4 -/* 0D37E8 7F09ECB8 00000000 */ nop -/* 0D37EC 7F09ECBC 46045280 */ add.s $f10, $f10, $f4 -.L7F09ECC0: -/* 0D37F0 7F09ECC0 46145402 */ mul.s $f16, $f10, $f20 -/* 0D37F4 7F09ECC4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D37F8 7F09ECC8 44814000 */ mtc1 $at, $f8 -/* 0D37FC 7F09ECCC 00000000 */ nop -/* 0D3800 7F09ECD0 46088182 */ mul.s $f6, $f16, $f8 -/* 0D3804 7F09ECD4 E606001C */ swc1 $f6, 0x1c($s0) -/* 0D3808 7F09ECD8 86790006 */ lh $t9, 6($s3) -/* 0D380C 7F09ECDC 86630004 */ lh $v1, 4($s3) -/* 0D3810 7F09ECE0 03360019 */ multu $t9, $s6 -/* 0D3814 7F09ECE4 00004012 */ mflo $t0 -/* 0D3818 7F09ECE8 02A82021 */ addu $a0, $s5, $t0 -/* 0D381C 7F09ECEC 84850000 */ lh $a1, ($a0) -/* 0D3820 7F09ECF0 84860014 */ lh $a2, 0x14($a0) -/* 0D3824 7F09ECF4 00A64823 */ subu $t1, $a1, $a2 -/* 0D3828 7F09ECF8 0123082A */ slt $at, $t1, $v1 -/* 0D382C 7F09ECFC 5020000E */ beql $at, $zero, .L7F09ED38 -/* 0D3830 7F09ED00 8FAB008C */ lw $t3, 0x8c($sp) -/* 0D3834 7F09ED04 00A35023 */ subu $t2, $a1, $v1 -/* 0D3838 7F09ED08 448A9000 */ mtc1 $t2, $f18 -/* 0D383C 7F09ED0C 44865000 */ mtc1 $a2, $f10 -/* 0D3840 7F09ED10 C6060020 */ lwc1 $f6, 0x20($s0) -/* 0D3844 7F09ED14 46809120 */ cvt.s.w $f4, $f18 -/* 0D3848 7F09ED18 46805420 */ cvt.s.w $f16, $f10 -/* 0D384C 7F09ED1C 46102203 */ div.s $f8, $f4, $f16 -/* 0D3850 7F09ED20 46083482 */ mul.s $f18, $f6, $f8 -/* 0D3854 7F09ED24 10000003 */ b .L7F09ED34 -/* 0D3858 7F09ED28 E6120020 */ swc1 $f18, 0x20($s0) -.L7F09ED2C: -/* 0D385C 7F09ED2C 1654FF77 */ bne $s2, $s4, .L7F09EB0C -/* 0D3860 7F09ED30 26310028 */ addiu $s1, $s1, 0x28 -.L7F09ED34: -/* 0D3864 7F09ED34 8FAB008C */ lw $t3, 0x8c($sp) -.L7F09ED38: -/* 0D3868 7F09ED38 27DE0001 */ addiu $fp, $fp, 1 -/* 0D386C 7F09ED3C 57CBFF11 */ bnel $fp, $t3, .L7F09E984 -/* 0D3870 7F09ED40 86790004 */ lh $t9, 4($s3) -.L7F09ED44: -/* 0D3874 7F09ED44 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D3878 7F09ED48 44812000 */ mtc1 $at, $f4 -/* 0D387C 7F09ED4C C6EA0008 */ lwc1 $f10, 8($s7) -/* 0D3880 7F09ED50 44814000 */ mtc1 $at, $f8 -/* 0D3884 7F09ED54 4480D000 */ mtc1 $zero, $f26 -/* 0D3888 7F09ED58 46045401 */ sub.s $f16, $f10, $f4 -/* 0D388C 7F09ED5C 44812000 */ mtc1 $at, $f4 -/* 0D3890 7F09ED60 3C158004 */ lui $s5, %hi(array_smoke_types) -/* 0D3894 7F09ED64 26B5017C */ addiu $s5, %lo(array_smoke_types) # addiu $s5, $s5, 0x17c -/* 0D3898 7F09ED68 E7B000A8 */ swc1 $f16, 0xa8($sp) -/* 0D389C 7F09ED6C C6E6000C */ lwc1 $f6, 0xc($s7) -/* 0D38A0 7F09ED70 24160018 */ li $s6, 24 -/* 0D38A4 7F09ED74 00009025 */ move $s2, $zero -/* 0D38A8 7F09ED78 46083481 */ sub.s $f18, $f6, $f8 -/* 0D38AC 7F09ED7C 44814000 */ mtc1 $at, $f8 -/* 0D38B0 7F09ED80 02608825 */ move $s1, $s3 -/* 0D38B4 7F09ED84 27B0009C */ addiu $s0, $sp, 0x9c -/* 0D38B8 7F09ED88 E7B200AC */ swc1 $f18, 0xac($sp) -/* 0D38BC 7F09ED8C C6EA0010 */ lwc1 $f10, 0x10($s7) -/* 0D38C0 7F09ED90 27A600B4 */ addiu $a2, $sp, 0xb4 -/* 0D38C4 7F09ED94 4600D386 */ mov.s $f14, $f26 -/* 0D38C8 7F09ED98 46045401 */ sub.s $f16, $f10, $f4 -/* 0D38CC 7F09ED9C 44812000 */ mtc1 $at, $f4 -/* 0D38D0 7F09EDA0 E7B000B0 */ swc1 $f16, 0xb0($sp) -/* 0D38D4 7F09EDA4 C6E60008 */ lwc1 $f6, 8($s7) -/* 0D38D8 7F09EDA8 46083480 */ add.s $f18, $f6, $f8 -/* 0D38DC 7F09EDAC 44814000 */ mtc1 $at, $f8 -/* 0D38E0 7F09EDB0 E7B2009C */ swc1 $f18, 0x9c($sp) -/* 0D38E4 7F09EDB4 C6EA000C */ lwc1 $f10, 0xc($s7) -/* 0D38E8 7F09EDB8 46045400 */ add.s $f16, $f10, $f4 -/* 0D38EC 7F09EDBC E7B000A0 */ swc1 $f16, 0xa0($sp) -/* 0D38F0 7F09EDC0 C6E60010 */ lwc1 $f6, 0x10($s7) -/* 0D38F4 7F09EDC4 46083480 */ add.s $f18, $f6, $f8 -/* 0D38F8 7F09EDC8 E7B200A4 */ swc1 $f18, 0xa4($sp) -.L7F09EDCC: -/* 0D38FC 7F09EDCC C62A0014 */ lwc1 $f10, 0x14($s1) -/* 0D3900 7F09EDD0 26520028 */ addiu $s2, $s2, 0x28 -/* 0D3904 7F09EDD4 2A410190 */ slti $at, $s2, 0x190 -/* 0D3908 7F09EDD8 460AD032 */ c.eq.s $f26, $f10 -/* 0D390C 7F09EDDC 00002025 */ move $a0, $zero -/* 0D3910 7F09EDE0 02202825 */ move $a1, $s1 -/* 0D3914 7F09EDE4 27A200A8 */ addiu $v0, $sp, 0xa8 -/* 0D3918 7F09EDE8 45010016 */ bc1t .L7F09EE44 -/* 0D391C 7F09EDEC 00000000 */ nop -.L7F09EDF0: -/* 0D3920 7F09EDF0 C4A40008 */ lwc1 $f4, 8($a1) -/* 0D3924 7F09EDF4 C6300014 */ lwc1 $f16, 0x14($s1) -/* 0D3928 7F09EDF8 C4460000 */ lwc1 $f6, ($v0) -/* 0D392C 7F09EDFC 24A50004 */ addiu $a1, $a1, 4 -/* 0D3930 7F09EE00 46102001 */ sub.s $f0, $f4, $f16 -/* 0D3934 7F09EE04 02041821 */ addu $v1, $s0, $a0 -/* 0D3938 7F09EE08 4606003C */ c.lt.s $f0, $f6 -/* 0D393C 7F09EE0C 00000000 */ nop -/* 0D3940 7F09EE10 45020004 */ bc1fl .L7F09EE24 -/* 0D3944 7F09EE14 C4680000 */ lwc1 $f8, ($v1) -/* 0D3948 7F09EE18 10000007 */ b .L7F09EE38 -/* 0D394C 7F09EE1C E4400000 */ swc1 $f0, ($v0) -/* 0D3950 7F09EE20 C4680000 */ lwc1 $f8, ($v1) -.L7F09EE24: -/* 0D3954 7F09EE24 4600403C */ c.lt.s $f8, $f0 -/* 0D3958 7F09EE28 00000000 */ nop -/* 0D395C 7F09EE2C 45020003 */ bc1fl .L7F09EE3C -/* 0D3960 7F09EE30 24420004 */ addiu $v0, $v0, 4 -/* 0D3964 7F09EE34 E4600000 */ swc1 $f0, ($v1) -.L7F09EE38: -/* 0D3968 7F09EE38 24420004 */ addiu $v0, $v0, 4 -.L7F09EE3C: -/* 0D396C 7F09EE3C 1446FFEC */ bne $v0, $a2, .L7F09EDF0 -/* 0D3970 7F09EE40 24840004 */ addiu $a0, $a0, 4 -.L7F09EE44: -/* 0D3974 7F09EE44 1420FFE1 */ bnez $at, .L7F09EDCC -/* 0D3978 7F09EE48 26310028 */ addiu $s1, $s1, 0x28 -/* 0D397C 7F09EE4C C6E00008 */ lwc1 $f0, 8($s7) -/* 0D3980 7F09EE50 C7B200A8 */ lwc1 $f18, 0xa8($sp) -/* 0D3984 7F09EE54 C7AA00B0 */ lwc1 $f10, 0xb0($sp) -/* 0D3988 7F09EE58 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0D398C 7F09EE5C 46120081 */ sub.s $f2, $f0, $f18 -/* 0D3990 7F09EE60 C7B000A4 */ lwc1 $f16, 0xa4($sp) -/* 0D3994 7F09EE64 02E02025 */ move $a0, $s7 -/* 0D3998 7F09EE68 27A500A8 */ addiu $a1, $sp, 0xa8 -/* 0D399C 7F09EE6C 4602D03C */ c.lt.s $f26, $f2 -/* 0D39A0 7F09EE70 00000000 */ nop -/* 0D39A4 7F09EE74 45020003 */ bc1fl .L7F09EE84 -/* 0D39A8 7F09EE78 C6E20010 */ lwc1 $f2, 0x10($s7) -/* 0D39AC 7F09EE7C 46001386 */ mov.s $f14, $f2 -/* 0D39B0 7F09EE80 C6E20010 */ lwc1 $f2, 0x10($s7) -.L7F09EE84: -/* 0D39B4 7F09EE84 460A1301 */ sub.s $f12, $f2, $f10 -/* 0D39B8 7F09EE88 460C703C */ c.lt.s $f14, $f12 -/* 0D39BC 7F09EE8C 00000000 */ nop -/* 0D39C0 7F09EE90 45020003 */ bc1fl .L7F09EEA0 -/* 0D39C4 7F09EE94 46002301 */ sub.s $f12, $f4, $f0 -/* 0D39C8 7F09EE98 46006386 */ mov.s $f14, $f12 -/* 0D39CC 7F09EE9C 46002301 */ sub.s $f12, $f4, $f0 -.L7F09EEA0: -/* 0D39D0 7F09EEA0 46028001 */ sub.s $f0, $f16, $f2 -/* 0D39D4 7F09EEA4 460C703C */ c.lt.s $f14, $f12 -/* 0D39D8 7F09EEA8 00000000 */ nop -/* 0D39DC 7F09EEAC 45020003 */ bc1fl .L7F09EEBC -/* 0D39E0 7F09EEB0 4600703C */ c.lt.s $f14, $f0 -/* 0D39E4 7F09EEB4 46006386 */ mov.s $f14, $f12 -/* 0D39E8 7F09EEB8 4600703C */ c.lt.s $f14, $f0 -.L7F09EEBC: -/* 0D39EC 7F09EEBC 00000000 */ nop -/* 0D39F0 7F09EEC0 45020003 */ bc1fl .L7F09EED0 -/* 0D39F4 7F09EEC4 44077000 */ mfc1 $a3, $f14 -/* 0D39F8 7F09EEC8 46000386 */ mov.s $f14, $f0 -/* 0D39FC 7F09EECC 44077000 */ mfc1 $a3, $f14 -.L7F09EED0: -/* 0D3A00 7F09EED0 0FC0F89F */ jal sub_GAME_7F03E27C -/* 0D3A04 7F09EED4 02003025 */ move $a2, $s0 -/* 0D3A08 7F09EED8 866C0006 */ lh $t4, 6($s3) -/* 0D3A0C 7F09EEDC 86780004 */ lh $t8, 4($s3) -/* 0D3A10 7F09EEE0 00009025 */ move $s2, $zero -/* 0D3A14 7F09EEE4 01960019 */ multu $t4, $s6 -/* 0D3A18 7F09EEE8 02608825 */ move $s1, $s3 -/* 0D3A1C 7F09EEEC 24020190 */ li $v0, 400 -/* 0D3A20 7F09EEF0 00001825 */ move $v1, $zero -/* 0D3A24 7F09EEF4 00006812 */ mflo $t5 -/* 0D3A28 7F09EEF8 02AD7021 */ addu $t6, $s5, $t5 -/* 0D3A2C 7F09EEFC 85CF0004 */ lh $t7, 4($t6) -/* 0D3A30 7F09EF00 01F8082A */ slt $at, $t7, $t8 -/* 0D3A34 7F09EF04 1020000E */ beqz $at, .L7F09EF40 -/* 0D3A38 7F09EF08 00000000 */ nop -/* 0D3A3C 7F09EF0C 24030001 */ li $v1, 1 -.L7F09EF10: -/* 0D3A40 7F09EF10 C6260014 */ lwc1 $f6, 0x14($s1) -/* 0D3A44 7F09EF14 26520028 */ addiu $s2, $s2, 0x28 -/* 0D3A48 7F09EF18 4606D03C */ c.lt.s $f26, $f6 -/* 0D3A4C 7F09EF1C 00000000 */ nop -/* 0D3A50 7F09EF20 45000003 */ bc1f .L7F09EF30 -/* 0D3A54 7F09EF24 00000000 */ nop -/* 0D3A58 7F09EF28 10000005 */ b .L7F09EF40 -/* 0D3A5C 7F09EF2C 00001825 */ move $v1, $zero -.L7F09EF30: -/* 0D3A60 7F09EF30 1642FFF7 */ bne $s2, $v0, .L7F09EF10 -/* 0D3A64 7F09EF34 26310028 */ addiu $s1, $s1, 0x28 -/* 0D3A68 7F09EF38 10000001 */ b .L7F09EF40 -/* 0D3A6C 7F09EF3C 00000000 */ nop -.L7F09EF40: -/* 0D3A70 7F09EF40 10600004 */ beqz $v1, .L7F09EF54 -/* 0D3A74 7F09EF44 00001025 */ move $v0, $zero -/* 0D3A78 7F09EF48 AE600000 */ sw $zero, ($s3) -/* 0D3A7C 7F09EF4C 10000001 */ b .L7F09EF54 -/* 0D3A80 7F09EF50 24020001 */ li $v0, 1 -.L7F09EF54: -/* 0D3A84 7F09EF54 8FBF006C */ lw $ra, 0x6c($sp) -/* 0D3A88 7F09EF58 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D3A8C 7F09EF5C D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0D3A90 7F09EF60 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0D3A94 7F09EF64 D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0D3A98 7F09EF68 D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 0D3A9C 7F09EF6C D7BE0040 */ ldc1 $f30, 0x40($sp) -/* 0D3AA0 7F09EF70 8FB00048 */ lw $s0, 0x48($sp) -/* 0D3AA4 7F09EF74 8FB1004C */ lw $s1, 0x4c($sp) -/* 0D3AA8 7F09EF78 8FB20050 */ lw $s2, 0x50($sp) -/* 0D3AAC 7F09EF7C 8FB30054 */ lw $s3, 0x54($sp) -/* 0D3AB0 7F09EF80 8FB40058 */ lw $s4, 0x58($sp) -/* 0D3AB4 7F09EF84 8FB5005C */ lw $s5, 0x5c($sp) -/* 0D3AB8 7F09EF88 8FB60060 */ lw $s6, 0x60($sp) -/* 0D3ABC 7F09EF8C 8FB70064 */ lw $s7, 0x64($sp) -/* 0D3AC0 7F09EF90 8FBE0068 */ lw $fp, 0x68($sp) -/* 0D3AC4 7F09EF94 03E00008 */ jr $ra -/* 0D3AC8 7F09EF98 27BD00D0 */ addiu $sp, $sp, 0xd0 -) -#endif -u8 sub_GAME_7F09EF9C(PropRecord* prop) +/* +* Address: 0x7F09EF9C +*/ +u8 explosionChrpropSmokeTick(PropRecord* prop) { Mtxf* player_matrix; player_matrix = camGetWorldToScreenMtxf(); - prop->Unk18 = -((((player_matrix->m[0][2] * prop->pos.x) + (player_matrix->m[1][2] * prop->pos.y)) + (player_matrix->m[2][2] * prop->pos.z)) + player_matrix->m[3][2]); + prop->zDepth = -((((player_matrix->m[0][2] * prop->pos.x) + (player_matrix->m[1][2] * prop->pos.y)) + (player_matrix->m[2][2] * prop->pos.z)) + player_matrix->m[3][2]); - if (prop->Unk18 < 100.0f) + if (prop->zDepth < 100.0f) { - prop->Unk18 *= 0.5f; + prop->zDepth *= 0.5f; } else { - prop->Unk18 -= 100.0f; + prop->zDepth -= 100.0f; } return 0; } -#ifdef NONMATCHING -void unk09c250RenderPropSmoke(void) { +extern Gfx globalDL_0x000; +/*** + * NTSC address 0x7F09F03C. +*/ +Gfx *explosionRenderPropSmoke(PropRecord *arg0, Gfx *gdl, s32 withalpha) +{ + struct Smoke *smoke; + s32 i; + struct bbox2d sp78; + struct coord3d *temp_s5; + s32 temp_s1; + + + temp_s1 = arg0->rooms[0]; + smoke = arg0->smoke; + temp_s5 = getRoomPositionByIndex(temp_s1); + + if (withalpha == 0) + { + return gdl; + } + + if (sub_GAME_7F054A64(arg0, &sp78) > 0) + { + gdl = bgScissorCurrentPlayerViewF(gdl, sp78.min.f[0], sp78.min.f[1], sp78.max.f[0], sp78.max.f[1]); + } + else + { + gdl = bgScissorCurrentPlayerViewDefault(gdl); + } + + gSPClearGeometryMode(gdl++, G_CULL_BOTH | G_FOG); + + gSPMatrix(gdl++, osVirtualToPhysical((void*)get_BONDdata_field_10E0()), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + + gdl = applyRoomMatrixToDisplayList(gdl, temp_s1); + + gSPMatrix(gdl++, osVirtualToPhysical((void*)&dword_CODE_bss_8007A100), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + + gSPSegment(gdl++, SPSEGMENT_GETITLE, osVirtualToPhysical((void*)pGlobalimagetable)); + + gSPDisplayList(gdl++, &globalDL_0x000); + + gDPSetColorDither(gdl++, G_CD_NOISE); + + for (i = 0; i < SMOKE_PARTS_LEN; i++) + { + if (smoke->parts[i].size > 0.0f) + { + gdl = explosionSmokeRenderPart(smoke, &smoke->parts[i], gdl, temp_s5); + } + else + { + smoke->parts[i].size = 0.0f; + } + } + + gDPSetColorDither(gdl++, G_CD_BAYER); + + gSPMatrix(gdl++, osVirtualToPhysical((void*)currentPlayerGetProjectionMatrix()), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel unk09c250RenderPropSmoke -/* 0D3B6C 7F09F03C 27BDFF70 */ addiu $sp, $sp, -0x90 -/* 0D3B70 7F09F040 AFB00024 */ sw $s0, 0x24($sp) -/* 0D3B74 7F09F044 AFBF003C */ sw $ra, 0x3c($sp) -/* 0D3B78 7F09F048 AFB50038 */ sw $s5, 0x38($sp) -/* 0D3B7C 7F09F04C AFB40034 */ sw $s4, 0x34($sp) -/* 0D3B80 7F09F050 AFB30030 */ sw $s3, 0x30($sp) -/* 0D3B84 7F09F054 AFB2002C */ sw $s2, 0x2c($sp) -/* 0D3B88 7F09F058 AFB10028 */ sw $s1, 0x28($sp) -/* 0D3B8C 7F09F05C F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D3B90 7F09F060 9091002C */ lbu $s1, 0x2c($a0) -/* 0D3B94 7F09F064 00808025 */ move $s0, $a0 -/* 0D3B98 7F09F068 8C940004 */ lw $s4, 4($a0) -/* 0D3B9C 7F09F06C 00A09025 */ move $s2, $a1 -/* 0D3BA0 7F09F070 00C09825 */ move $s3, $a2 -/* 0D3BA4 7F09F074 0FC2F285 */ jal getRoomIndexPOS -/* 0D3BA8 7F09F078 02202025 */ move $a0, $s1 -/* 0D3BAC 7F09F07C 16600003 */ bnez $s3, .L7F09F08C -/* 0D3BB0 7F09F080 0040A825 */ move $s5, $v0 -/* 0D3BB4 7F09F084 10000069 */ b .L7F09F22C -/* 0D3BB8 7F09F088 02401025 */ move $v0, $s2 -.L7F09F08C: -/* 0D3BBC 7F09F08C 02002025 */ move $a0, $s0 -/* 0D3BC0 7F09F090 0FC15299 */ jal sub_GAME_7F054A64 -/* 0D3BC4 7F09F094 27A50078 */ addiu $a1, $sp, 0x78 -/* 0D3BC8 7F09F098 1840000A */ blez $v0, .L7F09F0C4 -/* 0D3BCC 7F09F09C 00000000 */ nop -/* 0D3BD0 7F09F0A0 C7A40084 */ lwc1 $f4, 0x84($sp) -/* 0D3BD4 7F09F0A4 02402025 */ move $a0, $s2 -/* 0D3BD8 7F09F0A8 8FA50078 */ lw $a1, 0x78($sp) -/* 0D3BDC 7F09F0AC 8FA6007C */ lw $a2, 0x7c($sp) -/* 0D3BE0 7F09F0B0 8FA70080 */ lw $a3, 0x80($sp) -/* 0D3BE4 7F09F0B4 0FC2D3FD */ jal bgScissorCurrentPlayerViewF -/* 0D3BE8 7F09F0B8 E7A40010 */ swc1 $f4, 0x10($sp) -/* 0D3BEC 7F09F0BC 10000004 */ b .L7F09F0D0 -/* 0D3BF0 7F09F0C0 00409025 */ move $s2, $v0 -.L7F09F0C4: -/* 0D3BF4 7F09F0C4 0FC2D3ED */ jal bgScissorCurrentPlayerViewDefault -/* 0D3BF8 7F09F0C8 02402025 */ move $a0, $s2 -/* 0D3BFC 7F09F0CC 00409025 */ move $s2, $v0 -.L7F09F0D0: -/* 0D3C00 7F09F0D0 02401025 */ move $v0, $s2 -/* 0D3C04 7F09F0D4 3C0F0001 */ lui $t7, (0x00013000 >> 16) # lui $t7, 1 -/* 0D3C08 7F09F0D8 35EF3000 */ ori $t7, (0x00013000 & 0xFFFF) # ori $t7, $t7, 0x3000 -/* 0D3C0C 7F09F0DC 26520008 */ addiu $s2, $s2, 8 -/* 0D3C10 7F09F0E0 3C0EB600 */ lui $t6, 0xb600 -/* 0D3C14 7F09F0E4 3C180103 */ lui $t8, (0x01030040 >> 16) # lui $t8, 0x103 -/* 0D3C18 7F09F0E8 AC4E0000 */ sw $t6, ($v0) -/* 0D3C1C 7F09F0EC AC4F0004 */ sw $t7, 4($v0) -/* 0D3C20 7F09F0F0 37180040 */ ori $t8, (0x01030040 & 0xFFFF) # ori $t8, $t8, 0x40 -/* 0D3C24 7F09F0F4 02408025 */ move $s0, $s2 -/* 0D3C28 7F09F0F8 AE180000 */ sw $t8, ($s0) -/* 0D3C2C 7F09F0FC 0FC1E0E5 */ jal get_BONDdata_field_10E0 -/* 0D3C30 7F09F100 26520008 */ addiu $s2, $s2, 8 -/* 0D3C34 7F09F104 0C003A2C */ jal osVirtualToPhysical -/* 0D3C38 7F09F108 00402025 */ move $a0, $v0 -/* 0D3C3C 7F09F10C AE020004 */ sw $v0, 4($s0) -/* 0D3C40 7F09F110 02402025 */ move $a0, $s2 -/* 0D3C44 7F09F114 0FC2F271 */ jal sub_GAME_7F0BC9C4 -/* 0D3C48 7F09F118 02202825 */ move $a1, $s1 -/* 0D3C4C 7F09F11C 3C190100 */ lui $t9, (0x01000040 >> 16) # lui $t9, 0x100 -/* 0D3C50 7F09F120 37390040 */ ori $t9, (0x01000040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 0D3C54 7F09F124 3C048008 */ lui $a0, %hi(dword_CODE_bss_8007A100) -/* 0D3C58 7F09F128 2484A100 */ addiu $a0, %lo(dword_CODE_bss_8007A100) # addiu $a0, $a0, -0x5f00 -/* 0D3C5C 7F09F12C AC590000 */ sw $t9, ($v0) -/* 0D3C60 7F09F130 00408025 */ move $s0, $v0 -/* 0D3C64 7F09F134 0C003A2C */ jal osVirtualToPhysical -/* 0D3C68 7F09F138 24520008 */ addiu $s2, $v0, 8 -/* 0D3C6C 7F09F13C 3C08BC00 */ lui $t0, (0xBC000806 >> 16) # lui $t0, 0xbc00 -/* 0D3C70 7F09F140 AE020004 */ sw $v0, 4($s0) -/* 0D3C74 7F09F144 35080806 */ ori $t0, (0xBC000806 & 0xFFFF) # ori $t0, $t0, 0x806 -/* 0D3C78 7F09F148 02409825 */ move $s3, $s2 -/* 0D3C7C 7F09F14C AE680000 */ sw $t0, ($s3) -/* 0D3C80 7F09F150 3C048009 */ lui $a0, %hi(pGlobalimagetable) -/* 0D3C84 7F09F154 8C84D0B4 */ lw $a0, %lo(pGlobalimagetable)($a0) -/* 0D3C88 7F09F158 0C003A2C */ jal osVirtualToPhysical -/* 0D3C8C 7F09F15C 26520008 */ addiu $s2, $s2, 8 -/* 0D3C90 7F09F160 AE620004 */ sw $v0, 4($s3) -/* 0D3C94 7F09F164 02401825 */ move $v1, $s2 -/* 0D3C98 7F09F168 26520008 */ addiu $s2, $s2, 8 -/* 0D3C9C 7F09F16C 3C0A0200 */ lui $t2, 0x200 -/* 0D3CA0 7F09F170 254A0000 */ addiu $t2, $t2, 0 -/* 0D3CA4 7F09F174 3C090600 */ lui $t1, 0x600 -/* 0D3CA8 7F09F178 02402025 */ move $a0, $s2 -/* 0D3CAC 7F09F17C AC690000 */ sw $t1, ($v1) -/* 0D3CB0 7F09F180 AC6A0004 */ sw $t2, 4($v1) -/* 0D3CB4 7F09F184 3C0BBA00 */ lui $t3, (0xBA000602 >> 16) # lui $t3, 0xba00 -/* 0D3CB8 7F09F188 356B0602 */ ori $t3, (0xBA000602 & 0xFFFF) # ori $t3, $t3, 0x602 -/* 0D3CBC 7F09F18C 240C0080 */ li $t4, 128 -/* 0D3CC0 7F09F190 4480A000 */ mtc1 $zero, $f20 -/* 0D3CC4 7F09F194 AC8C0004 */ sw $t4, 4($a0) -/* 0D3CC8 7F09F198 AC8B0000 */ sw $t3, ($a0) -/* 0D3CCC 7F09F19C 26520008 */ addiu $s2, $s2, 8 -/* 0D3CD0 7F09F1A0 24130190 */ li $s3, 400 -/* 0D3CD4 7F09F1A4 00008825 */ move $s1, $zero -/* 0D3CD8 7F09F1A8 02808025 */ move $s0, $s4 -.L7F09F1AC: -/* 0D3CDC 7F09F1AC C6060014 */ lwc1 $f6, 0x14($s0) -/* 0D3CE0 7F09F1B0 02802025 */ move $a0, $s4 -/* 0D3CE4 7F09F1B4 26050008 */ addiu $a1, $s0, 8 -/* 0D3CE8 7F09F1B8 4606A03C */ c.lt.s $f20, $f6 -/* 0D3CEC 7F09F1BC 02403025 */ move $a2, $s2 -/* 0D3CF0 7F09F1C0 45020006 */ bc1fl .L7F09F1DC -/* 0D3CF4 7F09F1C4 E6140014 */ swc1 $f20, 0x14($s0) -/* 0D3CF8 7F09F1C8 0FC27769 */ jal sub_GAME_7F09DDA4 -/* 0D3CFC 7F09F1CC 02A03825 */ move $a3, $s5 -/* 0D3D00 7F09F1D0 10000002 */ b .L7F09F1DC -/* 0D3D04 7F09F1D4 00409025 */ move $s2, $v0 -/* 0D3D08 7F09F1D8 E6140014 */ swc1 $f20, 0x14($s0) -.L7F09F1DC: -/* 0D3D0C 7F09F1DC 26310028 */ addiu $s1, $s1, 0x28 -/* 0D3D10 7F09F1E0 1633FFF2 */ bne $s1, $s3, .L7F09F1AC -/* 0D3D14 7F09F1E4 26100028 */ addiu $s0, $s0, 0x28 -/* 0D3D18 7F09F1E8 02401025 */ move $v0, $s2 -/* 0D3D1C 7F09F1EC 3C0DBA00 */ lui $t5, (0xBA000602 >> 16) # lui $t5, 0xba00 -/* 0D3D20 7F09F1F0 35AD0602 */ ori $t5, (0xBA000602 & 0xFFFF) # ori $t5, $t5, 0x602 -/* 0D3D24 7F09F1F4 26520008 */ addiu $s2, $s2, 8 -/* 0D3D28 7F09F1F8 240E0040 */ li $t6, 64 -/* 0D3D2C 7F09F1FC 3C0F0103 */ lui $t7, (0x01030040 >> 16) # lui $t7, 0x103 -/* 0D3D30 7F09F200 AC4E0004 */ sw $t6, 4($v0) -/* 0D3D34 7F09F204 AC4D0000 */ sw $t5, ($v0) -/* 0D3D38 7F09F208 35EF0040 */ ori $t7, (0x01030040 & 0xFFFF) # ori $t7, $t7, 0x40 -/* 0D3D3C 7F09F20C 02408025 */ move $s0, $s2 -/* 0D3D40 7F09F210 AE0F0000 */ sw $t7, ($s0) -/* 0D3D44 7F09F214 0FC1E0DD */ jal currentPlayerGetProjectionMatrix -/* 0D3D48 7F09F218 26520008 */ addiu $s2, $s2, 8 -/* 0D3D4C 7F09F21C 0C003A2C */ jal osVirtualToPhysical -/* 0D3D50 7F09F220 00402025 */ move $a0, $v0 -/* 0D3D54 7F09F224 AE020004 */ sw $v0, 4($s0) -/* 0D3D58 7F09F228 02401025 */ move $v0, $s2 -.L7F09F22C: -/* 0D3D5C 7F09F22C 8FBF003C */ lw $ra, 0x3c($sp) -/* 0D3D60 7F09F230 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D3D64 7F09F234 8FB00024 */ lw $s0, 0x24($sp) -/* 0D3D68 7F09F238 8FB10028 */ lw $s1, 0x28($sp) -/* 0D3D6C 7F09F23C 8FB2002C */ lw $s2, 0x2c($sp) -/* 0D3D70 7F09F240 8FB30030 */ lw $s3, 0x30($sp) -/* 0D3D74 7F09F244 8FB40034 */ lw $s4, 0x34($sp) -/* 0D3D78 7F09F248 8FB50038 */ lw $s5, 0x38($sp) -/* 0D3D7C 7F09F24C 03E00008 */ jr $ra -/* 0D3D80 7F09F250 27BD0090 */ addiu $sp, $sp, 0x90 -) -#endif -void init_gray_flying_particles(coord3d *spawnpos, f32 arg1, f32 arg2, f32 arg3, f32 arg4) +// https://decomp.me/scratch/RT8eu +void explosionInitFlyingParticles(coord3d *spawnpos, f32 spawn_rand_scale, f32 spawn_horiz_drift_scale, f32 spawn_vert_drift_scale, f32 spawn_tex_scale) { // these are gray rectangles of dust created from shooting walls with guns that fall down with gravity // a bullet will create a group of them flying off the wall @@ -3811,39 +1535,39 @@ void init_gray_flying_particles(coord3d *spawnpos, f32 arg1, f32 arg2, f32 arg3, f32 rand3; s16 unk08_upper; s16 unk0A_upper; - s8 rand_s8; + s32 rand_s8; rand1 = (2.0f * (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX))) - 1.0f; rand2 = ((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 1.12f) - 0.12f; rand3 = (2.0f * (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX))) - 1.0f; - ptr_flying_particles_buf[numParticleEntries].unk00 = 1; + g_FlyingParticlesBuffer[g_NumParticleEntries].unk00 = 1; - ptr_flying_particles_buf[numParticleEntries].x = spawnpos->f[0] + (arg1 * rand1); - ptr_flying_particles_buf[numParticleEntries].y = spawnpos->f[1] + (arg1 * rand2); - ptr_flying_particles_buf[numParticleEntries].z = spawnpos->f[2] + (arg1 * rand3); + g_FlyingParticlesBuffer[g_NumParticleEntries].position.f[0] = spawnpos->f[0] + (spawn_rand_scale * rand1); + g_FlyingParticlesBuffer[g_NumParticleEntries].position.f[1] = spawnpos->f[1] + (spawn_rand_scale * rand2); + g_FlyingParticlesBuffer[g_NumParticleEntries].position.f[2] = spawnpos->f[2] + (spawn_rand_scale * rand3); - ptr_flying_particles_buf[numParticleEntries].unk1C = rand1 * arg2; - ptr_flying_particles_buf[numParticleEntries].unk20 = rand2 * arg3; - ptr_flying_particles_buf[numParticleEntries].unk24 = rand3 * arg2; + g_FlyingParticlesBuffer[g_NumParticleEntries].position_drift.f[0] = rand1 * spawn_horiz_drift_scale; + g_FlyingParticlesBuffer[g_NumParticleEntries].position_drift.f[1] = rand2 * spawn_vert_drift_scale; + g_FlyingParticlesBuffer[g_NumParticleEntries].position_drift.f[2] = rand3 * spawn_horiz_drift_scale; - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk00 = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * arg4)); - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk02 = 0; - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk04 = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * arg4)); + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.ob[0] = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * spawn_tex_scale)); + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.ob[1] = 0; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.ob[2] = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * spawn_tex_scale)); if (1) { - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk00 = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * arg4)); - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk02 = 0; - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk04 = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * (-arg4))); + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.ob[0] = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * spawn_tex_scale)); + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.ob[1] = 0; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.ob[2] = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * (-spawn_tex_scale))); - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk00 = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * (-arg4))); - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk02 = 0; - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk04 = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * (-arg4))); + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.ob[0] = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * (-spawn_tex_scale))); + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.ob[1] = 0; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.ob[2] = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * (-spawn_tex_scale))); - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk00 = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * (-arg4))); - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk02 = 0; - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk04 = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * arg4)); + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.ob[0] = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * (-spawn_tex_scale))); + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.ob[1] = 0; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.ob[2] = (s16) ((s32) ((((((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.75f) + 0.75f) * spawn_tex_scale)); } if (1) {} @@ -3851,76 +1575,76 @@ void init_gray_flying_particles(coord3d *spawnpos, f32 arg1, f32 arg2, f32 arg3, unk08_upper = (randomGetNext() & 3) << 8; unk0A_upper = (randomGetNext() & 3) << 8; - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk08 = unk08_upper + 0xE0; - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk0A = unk0A_upper + 0xE0; - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk08 = unk08_upper + 0xE0; - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk0A = unk0A_upper; - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk08 = unk08_upper; - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk0A = unk0A_upper; - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk08 = unk08_upper; - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk0A = unk0A_upper + 0xE0; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.tc[0] = unk08_upper + 0xE0; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.tc[1] = unk0A_upper + 0xE0; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.tc[0] = unk08_upper + 0xE0; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.tc[1] = unk0A_upper; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.tc[0] = unk08_upper; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.tc[1] = unk0A_upper; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.tc[0] = unk08_upper; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.tc[1] = unk0A_upper + 0xE0; if (randomGetNext() & 1) { rand_s8 = 0xFF - (randomGetNext() & 0x3F); - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk0E = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk0D = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk0C = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.cn[2] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.cn[1] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.cn[0] = rand_s8; rand_s8 = 0xFF - (randomGetNext() & 0x3F); - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk0E = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk0D = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk0C = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.cn[2] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.cn[1] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.cn[0] = rand_s8; rand_s8 = 0xFF - (randomGetNext() & 0x3F); - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk0E = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk0D = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk0C = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.cn[2] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.cn[1] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.cn[0] = rand_s8; rand_s8 = 0xFF - (randomGetNext() & 0x3F); - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk0E = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk0D = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk0C = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.cn[2] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.cn[1] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.cn[0] = rand_s8; } else { rand_s8 = randomGetNext() & 0x3F; - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk0E = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk0D = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk0C = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.cn[2] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.cn[1] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.cn[0] = rand_s8; rand_s8 = randomGetNext() & 0x3F; - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk0E = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk0D = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk0C = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.cn[2] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.cn[1] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.cn[0] = rand_s8; rand_s8 = randomGetNext() & 0x3F; - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk0E = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk0D = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk0C = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.cn[2] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.cn[1] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.cn[0] = rand_s8; rand_s8 = randomGetNext() & 0x3F; - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk0E = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk0D = rand_s8; - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk0C = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.cn[2] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.cn[1] = rand_s8; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.cn[0] = rand_s8; } - ptr_flying_particles_buf[numParticleEntries].unk38[0].unk0F = 0xdc; - ptr_flying_particles_buf[numParticleEntries].unk38[1].unk0F = 0xdc; - ptr_flying_particles_buf[numParticleEntries].unk38[2].unk0F = 0xdc; - ptr_flying_particles_buf[numParticleEntries].unk38[3].unk0F = 0xdc; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[0].v.cn[3] = 0xdc; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[1].v.cn[3] = 0xdc; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[2].v.cn[3] = 0xdc; + g_FlyingParticlesBuffer[g_NumParticleEntries].vertex_list[3].v.cn[3] = 0xdc; - ptr_flying_particles_buf[numParticleEntries].unk10 = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * M_TAU_F; - ptr_flying_particles_buf[numParticleEntries].unk14 = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * M_TAU_F; - ptr_flying_particles_buf[numParticleEntries].unk18 = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * M_TAU_F; + g_FlyingParticlesBuffer[g_NumParticleEntries].rotation.f[0] = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * M_TAU_F; + g_FlyingParticlesBuffer[g_NumParticleEntries].rotation.f[1] = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * M_TAU_F; + g_FlyingParticlesBuffer[g_NumParticleEntries].rotation.f[2] = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * M_TAU_F; - ptr_flying_particles_buf[numParticleEntries].unk28 = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.1f; - ptr_flying_particles_buf[numParticleEntries].unk2C = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.1f; - ptr_flying_particles_buf[numParticleEntries].unk30 = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.1f; + g_FlyingParticlesBuffer[g_NumParticleEntries].rotation_drift.f[0] = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.1f; + g_FlyingParticlesBuffer[g_NumParticleEntries].rotation_drift.f[1] = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.1f; + g_FlyingParticlesBuffer[g_NumParticleEntries].rotation_drift.f[2] = (((f32) randomGetNext()) * (1.0f / (f32)UINT_MAX)) * 0.1f; - numParticleEntries++; - if (numParticleEntries >= max_particles) + g_NumParticleEntries++; + if (g_NumParticleEntries >= max_particles) { - numParticleEntries = 0; + g_NumParticleEntries = 0; } } -void update_gray_flying_particles(void) +void explosionUpdateFlyingParticles(void) { f32 scalar; s32 i; @@ -3938,760 +1662,195 @@ void update_gray_flying_particles(void) for (i = 0; i < max_particles; i++) { - if (ptr_flying_particles_buf[i].unk00 > 0) + if (g_FlyingParticlesBuffer[i].unk00 > 0) { - ptr_flying_particles_buf[i].unk00 += (s32) scalar; + g_FlyingParticlesBuffer[i].unk00 += (s32) scalar; - ptr_flying_particles_buf[i].unk10 += ptr_flying_particles_buf[i].unk28 * scalar; - ptr_flying_particles_buf[i].unk14 += ptr_flying_particles_buf[i].unk2C * scalar; - ptr_flying_particles_buf[i].unk18 += ptr_flying_particles_buf[i].unk30 * scalar; - ptr_flying_particles_buf[i].x += ptr_flying_particles_buf[i].unk1C * scalar; - ptr_flying_particles_buf[i].z += ptr_flying_particles_buf[i].unk24 * scalar; + g_FlyingParticlesBuffer[i].rotation.f[0] += g_FlyingParticlesBuffer[i].rotation_drift.f[0] * scalar; + g_FlyingParticlesBuffer[i].rotation.f[1] += g_FlyingParticlesBuffer[i].rotation_drift.f[1] * scalar; + g_FlyingParticlesBuffer[i].rotation.f[2] += g_FlyingParticlesBuffer[i].rotation_drift.f[2] * scalar; + + g_FlyingParticlesBuffer[i].position.f[0] += g_FlyingParticlesBuffer[i].position_drift.f[0] * scalar; + g_FlyingParticlesBuffer[i].position.f[2] += g_FlyingParticlesBuffer[i].position_drift.f[2] * scalar; for (j = 0; j < (s32)scalar; j++) { // initially sends particles flying up - ptr_flying_particles_buf[i].y += ptr_flying_particles_buf[i].unk20; + g_FlyingParticlesBuffer[i].position.f[1] += g_FlyingParticlesBuffer[i].position_drift.f[1]; // applies gravity so particles fall down - if (ptr_flying_particles_buf[i].unk20 > -3.75f) + if (g_FlyingParticlesBuffer[i].position_drift.f[1] > -3.75f) { - ptr_flying_particles_buf[i].unk20 -= 0.2f; + g_FlyingParticlesBuffer[i].position_drift.f[1] -= 0.2f; } } // handles particles life time - if ((ptr_flying_particles_buf[i].unk00 >= 0x65) && (!(randomGetNext() & 0x1F) || (ptr_flying_particles_buf[i].unk00 == 0x12C))) + if ((g_FlyingParticlesBuffer[i].unk00 >= 0x65) && (!(randomGetNext() & 0x1F) || (g_FlyingParticlesBuffer[i].unk00 == 0x12C))) { - ptr_flying_particles_buf[i].unk00 = 0; + g_FlyingParticlesBuffer[i].unk00 = 0; } // position-related. deletes particles that are too low or too high. - if ((ptr_flying_particles_buf[i].y < -30000.0f) || (ptr_flying_particles_buf[i].y > 30000.0f)) + if ((g_FlyingParticlesBuffer[i].position.f[1] < -30000.0f) || (g_FlyingParticlesBuffer[i].position.f[1] > 30000.0f)) { - ptr_flying_particles_buf[i].unk00 = 0; + g_FlyingParticlesBuffer[i].unk00 = 0; } } } } -#ifdef NONMATCHING -Gfx * sub_GAME_7F0A0034(Gfx *arg0) { +extern Gfx globalDL_0xa50; +/*** + * NTSC address 0x7F0A0034. +*/ +Gfx *explosionRenderFlyingParticles(Gfx *gdl) +{ + Mtxf sp80; + s32 i; + Mtx *temp_v0_2; + struct FlyingParticles *particles; + + gSPClearGeometryMode(gdl++, G_CULL_BOTH); + gSPSegment(gdl++, SPSEGMENT_GETITLE, osVirtualToPhysical((void*)pGlobalimagetable)); + gSPDisplayList(gdl++, &globalDL_0xa50); + gDPSetRenderMode(gdl++, G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2); + + for (i = 0; i < max_particles; i++) + { + // HACK: regalloc has instructions backwards. + particles = (struct FlyingParticles *)(u32)g_FlyingParticlesBuffer + i; + + if (particles->unk00 > 0) + { + matrix_4x4_set_position_and_rotation_around_xyz(&particles->position, &particles->rotation, &sp80); + matrix_4x4_multiply_homogeneous_in_place(camGetWorldToScreenMtxf(), &sp80); + + if ((sp80.m[3][0] < 20000.0f) + && (sp80.m[3][0] > -20000.0f) + && (sp80.m[3][1] < 20000.0f) + && (sp80.m[3][1] > -20000.0f) + && (sp80.m[3][2] < 20000.0f) + && (sp80.m[3][2] > -20000.0f)) + { + temp_v0_2 = dynAllocateMatrix(); + matrix_4x4_f32_to_s32(&sp80, (Mtxf *)temp_v0_2); + + gSPMatrix(gdl++, osVirtualToPhysical((void*)temp_v0_2), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPVertex(gdl++, osVirtualToPhysical((void*)g_FlyingParticlesBuffer[i].vertex_list), 4, 0) + gSP2Triangles(gdl++, 0, 1, 2, 0, 0, 2, 3, 0); + } + } + } + + return gdl; } -#else -GLOBAL_ASM( -.late_rodata -glabel D_800576FC -.word 0xc69c4000 /*-20000.0*/ -glabel D_80057700 -.word 0x469c4000 /*20000.0*/ -.text -glabel sub_GAME_7F0A0034 -/* 0D4B64 7F0A0034 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 0D4B68 7F0A0038 AFB00028 */ sw $s0, 0x28($sp) -/* 0D4B6C 7F0A003C AFBF004C */ sw $ra, 0x4c($sp) -/* 0D4B70 7F0A0040 AFBE0048 */ sw $fp, 0x48($sp) -/* 0D4B74 7F0A0044 AFB70044 */ sw $s7, 0x44($sp) -/* 0D4B78 7F0A0048 AFB60040 */ sw $s6, 0x40($sp) -/* 0D4B7C 7F0A004C AFB5003C */ sw $s5, 0x3c($sp) -/* 0D4B80 7F0A0050 AFB40038 */ sw $s4, 0x38($sp) -/* 0D4B84 7F0A0054 AFB30034 */ sw $s3, 0x34($sp) -/* 0D4B88 7F0A0058 AFB20030 */ sw $s2, 0x30($sp) -/* 0D4B8C 7F0A005C AFB1002C */ sw $s1, 0x2c($sp) -/* 0D4B90 7F0A0060 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0D4B94 7F0A0064 F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D4B98 7F0A0068 3C0EB600 */ lui $t6, 0xb600 -/* 0D4B9C 7F0A006C 240F3000 */ li $t7, 12288 -/* 0D4BA0 7F0A0070 AC8F0004 */ sw $t7, 4($a0) -/* 0D4BA4 7F0A0074 AC8E0000 */ sw $t6, ($a0) -/* 0D4BA8 7F0A0078 24900008 */ addiu $s0, $a0, 8 -/* 0D4BAC 7F0A007C 3C18BC00 */ lui $t8, (0xBC000806 >> 16) # lui $t8, 0xbc00 -/* 0D4BB0 7F0A0080 37180806 */ ori $t8, (0xBC000806 & 0xFFFF) # ori $t8, $t8, 0x806 -/* 0D4BB4 7F0A0084 02008825 */ move $s1, $s0 -/* 0D4BB8 7F0A0088 AE380000 */ sw $t8, ($s1) -/* 0D4BBC 7F0A008C 3C048009 */ lui $a0, %hi(pGlobalimagetable) -/* 0D4BC0 7F0A0090 8C84D0B4 */ lw $a0, %lo(pGlobalimagetable)($a0) -/* 0D4BC4 7F0A0094 0C003A2C */ jal osVirtualToPhysical -/* 0D4BC8 7F0A0098 26100008 */ addiu $s0, $s0, 8 -/* 0D4BCC 7F0A009C 02001825 */ move $v1, $s0 -/* 0D4BD0 7F0A00A0 AE220004 */ sw $v0, 4($s1) -/* 0D4BD4 7F0A00A4 3C080200 */ lui $t0, 0x200 -/* 0D4BD8 7F0A00A8 25080A50 */ addiu $t0, $t0, 0xa50 -/* 0D4BDC 7F0A00AC 26100008 */ addiu $s0, $s0, 8 -/* 0D4BE0 7F0A00B0 3C190600 */ lui $t9, 0x600 -/* 0D4BE4 7F0A00B4 AC790000 */ sw $t9, ($v1) -/* 0D4BE8 7F0A00B8 AC680004 */ sw $t0, 4($v1) -/* 0D4BEC 7F0A00BC 02002025 */ move $a0, $s0 -/* 0D4BF0 7F0A00C0 3C09B900 */ lui $t1, (0xB900031D >> 16) # lui $t1, 0xb900 -/* 0D4BF4 7F0A00C4 3C0A0050 */ lui $t2, (0x005049D8 >> 16) # lui $t2, 0x50 -/* 0D4BF8 7F0A00C8 354A49D8 */ ori $t2, (0x005049D8 & 0xFFFF) # ori $t2, $t2, 0x49d8 -/* 0D4BFC 7F0A00CC 3529031D */ ori $t1, (0xB900031D & 0xFFFF) # ori $t1, $t1, 0x31d -/* 0D4C00 7F0A00D0 AC890000 */ sw $t1, ($a0) -/* 0D4C04 7F0A00D4 AC8A0004 */ sw $t2, 4($a0) -/* 0D4C08 7F0A00D8 3C0B8008 */ lui $t3, %hi(max_particles) -/* 0D4C0C 7F0A00DC 8D6BA148 */ lw $t3, %lo(max_particles)($t3) -/* 0D4C10 7F0A00E0 26100008 */ addiu $s0, $s0, 8 -/* 0D4C14 7F0A00E4 0000A825 */ move $s5, $zero -/* 0D4C18 7F0A00E8 19600055 */ blez $t3, .L7F0A0240 -/* 0D4C1C 7F0A00EC 00009825 */ move $s3, $zero -/* 0D4C20 7F0A00F0 3C018005 */ lui $at, %hi(D_800576FC) -/* 0D4C24 7F0A00F4 C43676FC */ lwc1 $f22, %lo(D_800576FC)($at) -/* 0D4C28 7F0A00F8 3C018005 */ lui $at, %hi(D_80057700) -/* 0D4C2C 7F0A00FC 3C1E0430 */ lui $fp, (0x04300040 >> 16) # lui $fp, 0x430 -/* 0D4C30 7F0A0100 3C170102 */ lui $s7, (0x01020040 >> 16) # lui $s7, 0x102 -/* 0D4C34 7F0A0104 3C168008 */ lui $s6, %hi(ptr_flying_particles_buf) -/* 0D4C38 7F0A0108 26D6A14C */ addiu $s6, %lo(ptr_flying_particles_buf) # addiu $s6, $s6, -0x5eb4 -/* 0D4C3C 7F0A010C 36F70040 */ ori $s7, (0x01020040 & 0xFFFF) # ori $s7, $s7, 0x40 -/* 0D4C40 7F0A0110 37DE0040 */ ori $fp, (0x04300040 & 0xFFFF) # ori $fp, $fp, 0x40 -/* 0D4C44 7F0A0114 C4347700 */ lwc1 $f20, %lo(D_80057700)($at) -/* 0D4C48 7F0A0118 27B40080 */ addiu $s4, $sp, 0x80 -/* 0D4C4C 7F0A011C 8ECC0000 */ lw $t4, ($s6) -.L7F0A0120: -/* 0D4C50 7F0A0120 01931021 */ addu $v0, $t4, $s3 -/* 0D4C54 7F0A0124 8C4D0000 */ lw $t5, ($v0) -/* 0D4C58 7F0A0128 24440004 */ addiu $a0, $v0, 4 -/* 0D4C5C 7F0A012C 24450010 */ addiu $a1, $v0, 0x10 -/* 0D4C60 7F0A0130 19A0003C */ blez $t5, .L7F0A0224 -/* 0D4C64 7F0A0134 00000000 */ nop -/* 0D4C68 7F0A0138 0FC1624B */ jal matrix_4x4_set_position_and_rotation_around_xyz -/* 0D4C6C 7F0A013C 02803025 */ move $a2, $s4 -/* 0D4C70 7F0A0140 0FC1E0F1 */ jal camGetWorldToScreenMtxf -/* 0D4C74 7F0A0144 00000000 */ nop -/* 0D4C78 7F0A0148 00402025 */ move $a0, $v0 -/* 0D4C7C 7F0A014C 0FC16026 */ jal matrix_4x4_multiply_homogeneous_in_place -/* 0D4C80 7F0A0150 02802825 */ move $a1, $s4 -/* 0D4C84 7F0A0154 C7A000B0 */ lwc1 $f0, 0xb0($sp) -/* 0D4C88 7F0A0158 4614003C */ c.lt.s $f0, $f20 -/* 0D4C8C 7F0A015C 00000000 */ nop -/* 0D4C90 7F0A0160 45000030 */ bc1f .L7F0A0224 -/* 0D4C94 7F0A0164 00000000 */ nop -/* 0D4C98 7F0A0168 4600B03C */ c.lt.s $f22, $f0 -/* 0D4C9C 7F0A016C C7A000B4 */ lwc1 $f0, 0xb4($sp) -/* 0D4CA0 7F0A0170 4500002C */ bc1f .L7F0A0224 -/* 0D4CA4 7F0A0174 00000000 */ nop -/* 0D4CA8 7F0A0178 4614003C */ c.lt.s $f0, $f20 -/* 0D4CAC 7F0A017C 00000000 */ nop -/* 0D4CB0 7F0A0180 45000028 */ bc1f .L7F0A0224 -/* 0D4CB4 7F0A0184 00000000 */ nop -/* 0D4CB8 7F0A0188 4600B03C */ c.lt.s $f22, $f0 -/* 0D4CBC 7F0A018C C7A000B8 */ lwc1 $f0, 0xb8($sp) -/* 0D4CC0 7F0A0190 45000024 */ bc1f .L7F0A0224 -/* 0D4CC4 7F0A0194 00000000 */ nop -/* 0D4CC8 7F0A0198 4614003C */ c.lt.s $f0, $f20 -/* 0D4CCC 7F0A019C 00000000 */ nop -/* 0D4CD0 7F0A01A0 45000020 */ bc1f .L7F0A0224 -/* 0D4CD4 7F0A01A4 00000000 */ nop -/* 0D4CD8 7F0A01A8 4600B03C */ c.lt.s $f22, $f0 -/* 0D4CDC 7F0A01AC 00000000 */ nop -/* 0D4CE0 7F0A01B0 4500001C */ bc1f .L7F0A0224 -/* 0D4CE4 7F0A01B4 00000000 */ nop -/* 0D4CE8 7F0A01B8 0FC2F5B8 */ jal dynAllocateMatrix -/* 0D4CEC 7F0A01BC 00000000 */ nop -/* 0D4CF0 7F0A01C0 00409025 */ move $s2, $v0 -/* 0D4CF4 7F0A01C4 02802025 */ move $a0, $s4 -/* 0D4CF8 7F0A01C8 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 0D4CFC 7F0A01CC 00402825 */ move $a1, $v0 -/* 0D4D00 7F0A01D0 02008825 */ move $s1, $s0 -/* 0D4D04 7F0A01D4 AE370000 */ sw $s7, ($s1) -/* 0D4D08 7F0A01D8 26100008 */ addiu $s0, $s0, 8 -/* 0D4D0C 7F0A01DC 0C003A2C */ jal osVirtualToPhysical -/* 0D4D10 7F0A01E0 02402025 */ move $a0, $s2 -/* 0D4D14 7F0A01E4 AE220004 */ sw $v0, 4($s1) -/* 0D4D18 7F0A01E8 02009025 */ move $s2, $s0 -/* 0D4D1C 7F0A01EC AE5E0000 */ sw $fp, ($s2) -/* 0D4D20 7F0A01F0 8ECE0000 */ lw $t6, ($s6) -/* 0D4D24 7F0A01F4 26100008 */ addiu $s0, $s0, 8 -/* 0D4D28 7F0A01F8 01D32021 */ addu $a0, $t6, $s3 -/* 0D4D2C 7F0A01FC 0C003A2C */ jal osVirtualToPhysical -/* 0D4D30 7F0A0200 24840038 */ addiu $a0, $a0, 0x38 -/* 0D4D34 7F0A0204 02001825 */ move $v1, $s0 -/* 0D4D38 7F0A0208 AE420004 */ sw $v0, 4($s2) -/* 0D4D3C 7F0A020C 3C0FB100 */ lui $t7, (0xB1000032 >> 16) # lui $t7, 0xb100 -/* 0D4D40 7F0A0210 35EF0032 */ ori $t7, (0xB1000032 & 0xFFFF) # ori $t7, $t7, 0x32 -/* 0D4D44 7F0A0214 24182010 */ li $t8, 8208 -/* 0D4D48 7F0A0218 AC780004 */ sw $t8, 4($v1) -/* 0D4D4C 7F0A021C AC6F0000 */ sw $t7, ($v1) -/* 0D4D50 7F0A0220 26100008 */ addiu $s0, $s0, 8 -.L7F0A0224: -/* 0D4D54 7F0A0224 3C198008 */ lui $t9, %hi(max_particles) -/* 0D4D58 7F0A0228 8F39A148 */ lw $t9, %lo(max_particles)($t9) -/* 0D4D5C 7F0A022C 26B50001 */ addiu $s5, $s5, 1 -/* 0D4D60 7F0A0230 26730078 */ addiu $s3, $s3, 0x78 -/* 0D4D64 7F0A0234 02B9082A */ slt $at, $s5, $t9 -/* 0D4D68 7F0A0238 5420FFB9 */ bnezl $at, .L7F0A0120 -/* 0D4D6C 7F0A023C 8ECC0000 */ lw $t4, ($s6) -.L7F0A0240: -/* 0D4D70 7F0A0240 8FBF004C */ lw $ra, 0x4c($sp) -/* 0D4D74 7F0A0244 02001025 */ move $v0, $s0 -/* 0D4D78 7F0A0248 8FB00028 */ lw $s0, 0x28($sp) -/* 0D4D7C 7F0A024C D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D4D80 7F0A0250 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0D4D84 7F0A0254 8FB1002C */ lw $s1, 0x2c($sp) -/* 0D4D88 7F0A0258 8FB20030 */ lw $s2, 0x30($sp) -/* 0D4D8C 7F0A025C 8FB30034 */ lw $s3, 0x34($sp) -/* 0D4D90 7F0A0260 8FB40038 */ lw $s4, 0x38($sp) -/* 0D4D94 7F0A0264 8FB5003C */ lw $s5, 0x3c($sp) -/* 0D4D98 7F0A0268 8FB60040 */ lw $s6, 0x40($sp) -/* 0D4D9C 7F0A026C 8FB70044 */ lw $s7, 0x44($sp) -/* 0D4DA0 7F0A0270 8FBE0048 */ lw $fp, 0x48($sp) -/* 0D4DA4 7F0A0274 03E00008 */ jr $ra -/* 0D4DA8 7F0A0278 27BD00C0 */ addiu $sp, $sp, 0xc0 -) -#endif +/*** + * NTSC address 0x7F0A027C. +*/ +void explosionScorchTick(struct coord3d *pos, f32 explosion_size, s16 room) +{ + Vtx sp58; + f32 sp54; + f32 sp50; + f32 sp4C; + u8 sp4B; + struct coord3d *temp_s0; + u32 temp_hi; -#ifdef NONMATCHING -void sub_GAME_7F0A027C(void) { + sp58 = g_ScorchDefaultVertex; + sp54 = RANDOMFRAC() * M_TAU_F; + sp4B = 0xFF - (randomGetNext() % 80U); + + temp_s0 = getRoomPositionByIndex((s32) room); + + if (getPlayerCount() < 2) + { + if (explosion_size > 200.0f) + { + explosion_size = 200.0f; + } + + explosion_size *= (0.8f + (0.2f * RANDOMFRAC())); + + pos->f[0] = (pos->f[0] * get_room_data_float1()) - temp_s0->f[0]; + pos->f[1] = (pos->f[1] * get_room_data_float1()) - temp_s0->f[1]; + pos->f[2] = (pos->f[2] * get_room_data_float1()) - temp_s0->f[2]; + + explosion_size *= get_room_data_float1(); + + sp50 = cosf(sp54) * explosion_size; + sp4C = sinf(sp54) * explosion_size; + + g_ScorchBuffer[g_NumScorchEntries].roomid = room; + g_ScorchBuffer[g_NumScorchEntries].pos.f[0] = pos->f[0]; + g_ScorchBuffer[g_NumScorchEntries].pos.f[1] = pos->f[1]; + g_ScorchBuffer[g_NumScorchEntries].pos.f[2] = pos->f[2]; + g_ScorchBuffer[g_NumScorchEntries].explosion_size = explosion_size; + + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0] = sp58; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1] = sp58; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2] = sp58; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3] = sp58; + + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0].v.ob[0] = (s16) (s32) (pos->f[0] + sp50); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0].v.ob[1] = (s16) (s32) (pos->f[1] + 0.5f); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0].v.ob[2] = (s16) (s32) (pos->f[2] + sp4C); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0].v.tc[0] = 0; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0].v.tc[1] = genericimage->width << 5; + temp_hi = randomGetNext() % 50U; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0].v.cn[2] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0].v.cn[1] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0].v.cn[0] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[0].v.cn[3] = sp4B; + + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1].v.ob[0] = (s16) (s32) (pos->f[0] + sp4C); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1].v.ob[1] = (s16) (s32) (pos->f[1] + 0.5f); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1].v.ob[2] = (s16) (s32) (pos->f[2] - sp50); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1].v.tc[0] = 0; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1].v.tc[1] = 0; + temp_hi = randomGetNext() % 50U; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1].v.cn[2] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1].v.cn[1] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1].v.cn[0] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[1].v.cn[3] = sp4B; + + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2].v.ob[0] = (s16) (s32) (pos->f[0] - sp50); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2].v.ob[1] = (s16) (s32) (pos->f[1] + 0.5f); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2].v.ob[2] = (s16) (s32) (pos->f[2] - sp4C); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2].v.tc[0] = genericimage->height << 5; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2].v.tc[1] = 0; + temp_hi = randomGetNext() % 50U; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2].v.cn[2] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2].v.cn[1] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2].v.cn[0] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[2].v.cn[3] = sp4B; + + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3].v.ob[0] = (s16) (s32) (pos->f[0] - sp4C); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3].v.ob[1] = (s16) (s32) (pos->f[1] + 0.5f); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3].v.ob[2] = (s16) (s32) (pos->f[2] + sp50); + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3].v.tc[0] = genericimage->width << 5; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3].v.tc[1] = genericimage->height << 5; + temp_hi = randomGetNext() % 50U; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3].v.cn[2] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3].v.cn[1] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3].v.cn[0] = (u8) temp_hi; + g_ScorchBuffer[g_NumScorchEntries].vertex_list[3].v.cn[3] = sp4B; + + g_NumScorchEntries++; + if (g_NumScorchEntries >= SCORCH_BUFFER_LEN) + { + g_NumScorchEntries = 0; + } + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_80057704 -.word 0x40c90fdb /*6.2831855*/ -glabel D_80057708 -.word 0x3e4ccccd /*0.2*/ -glabel D_8005770C -.word 0x3f4ccccd /*0.80000001*/ -.text -glabel sub_GAME_7F0A027C -/* 0D4DAC 7F0A027C 27BDFF98 */ addiu $sp, $sp, -0x68 -/* 0D4DB0 7F0A0280 3C0E8004 */ lui $t6, %hi(D_80040920) -/* 0D4DB4 7F0A0284 AFBF0034 */ sw $ra, 0x34($sp) -/* 0D4DB8 7F0A0288 AFB40030 */ sw $s4, 0x30($sp) -/* 0D4DBC 7F0A028C AFB3002C */ sw $s3, 0x2c($sp) -/* 0D4DC0 7F0A0290 AFB20028 */ sw $s2, 0x28($sp) -/* 0D4DC4 7F0A0294 AFB10024 */ sw $s1, 0x24($sp) -/* 0D4DC8 7F0A0298 AFB00020 */ sw $s0, 0x20($sp) -/* 0D4DCC 7F0A029C F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0D4DD0 7F0A02A0 AFA60070 */ sw $a2, 0x70($sp) -/* 0D4DD4 7F0A02A4 25CE0920 */ addiu $t6, %lo(D_80040920) # addiu $t6, $t6, 0x920 -/* 0D4DD8 7F0A02A8 8DC10000 */ lw $at, ($t6) -/* 0D4DDC 7F0A02AC 27B30058 */ addiu $s3, $sp, 0x58 -/* 0D4DE0 7F0A02B0 4485A000 */ mtc1 $a1, $f20 -/* 0D4DE4 7F0A02B4 AE610000 */ sw $at, ($s3) -/* 0D4DE8 7F0A02B8 8DD90004 */ lw $t9, 4($t6) -/* 0D4DEC 7F0A02BC 0080A025 */ move $s4, $a0 -/* 0D4DF0 7F0A02C0 AE790004 */ sw $t9, 4($s3) -/* 0D4DF4 7F0A02C4 8DC10008 */ lw $at, 8($t6) -/* 0D4DF8 7F0A02C8 AE610008 */ sw $at, 8($s3) -/* 0D4DFC 7F0A02CC 8DD9000C */ lw $t9, 0xc($t6) -/* 0D4E00 7F0A02D0 0C002914 */ jal randomGetNext -/* 0D4E04 7F0A02D4 AE79000C */ sw $t9, 0xc($s3) -/* 0D4E08 7F0A02D8 44822000 */ mtc1 $v0, $f4 -/* 0D4E0C 7F0A02DC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D4E10 7F0A02E0 04410004 */ bgez $v0, .L7F0A02F4 -/* 0D4E14 7F0A02E4 468021A0 */ cvt.s.w $f6, $f4 -/* 0D4E18 7F0A02E8 44814000 */ mtc1 $at, $f8 -/* 0D4E1C 7F0A02EC 00000000 */ nop -/* 0D4E20 7F0A02F0 46083180 */ add.s $f6, $f6, $f8 -.L7F0A02F4: -/* 0D4E24 7F0A02F4 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D4E28 7F0A02F8 44815000 */ mtc1 $at, $f10 -/* 0D4E2C 7F0A02FC 3C018005 */ lui $at, %hi(D_80057704) -/* 0D4E30 7F0A0300 C4327704 */ lwc1 $f18, %lo(D_80057704)($at) -/* 0D4E34 7F0A0304 460A3402 */ mul.s $f16, $f6, $f10 -/* 0D4E38 7F0A0308 00000000 */ nop -/* 0D4E3C 7F0A030C 46128102 */ mul.s $f4, $f16, $f18 -/* 0D4E40 7F0A0310 0C002914 */ jal randomGetNext -/* 0D4E44 7F0A0314 E7A40054 */ swc1 $f4, 0x54($sp) -/* 0D4E48 7F0A0318 24010050 */ li $at, 80 -/* 0D4E4C 7F0A031C 0041001B */ divu $zero, $v0, $at -/* 0D4E50 7F0A0320 00004010 */ mfhi $t0 -/* 0D4E54 7F0A0324 240900FF */ li $t1, 255 -/* 0D4E58 7F0A0328 01285023 */ subu $t2, $t1, $t0 -/* 0D4E5C 7F0A032C A3AA004B */ sb $t2, 0x4b($sp) -/* 0D4E60 7F0A0330 0FC2F285 */ jal getRoomIndexPOS -/* 0D4E64 7F0A0334 87A40072 */ lh $a0, 0x72($sp) -/* 0D4E68 7F0A0338 0FC26919 */ jal getPlayerCount -/* 0D4E6C 7F0A033C 00408025 */ move $s0, $v0 -/* 0D4E70 7F0A0340 28410002 */ slti $at, $v0, 2 -/* 0D4E74 7F0A0344 102001D2 */ beqz $at, .L7F0A0A90 -/* 0D4E78 7F0A0348 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 0D4E7C 7F0A034C 44810000 */ mtc1 $at, $f0 -/* 0D4E80 7F0A0350 00000000 */ nop -/* 0D4E84 7F0A0354 4614003C */ c.lt.s $f0, $f20 -/* 0D4E88 7F0A0358 00000000 */ nop -/* 0D4E8C 7F0A035C 45000002 */ bc1f .L7F0A0368 -/* 0D4E90 7F0A0360 00000000 */ nop -/* 0D4E94 7F0A0364 46000506 */ mov.s $f20, $f0 -.L7F0A0368: -/* 0D4E98 7F0A0368 0C002914 */ jal randomGetNext -/* 0D4E9C 7F0A036C 00000000 */ nop -/* 0D4EA0 7F0A0370 44824000 */ mtc1 $v0, $f8 -/* 0D4EA4 7F0A0374 04410005 */ bgez $v0, .L7F0A038C -/* 0D4EA8 7F0A0378 468041A0 */ cvt.s.w $f6, $f8 -/* 0D4EAC 7F0A037C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0D4EB0 7F0A0380 44815000 */ mtc1 $at, $f10 -/* 0D4EB4 7F0A0384 00000000 */ nop -/* 0D4EB8 7F0A0388 460A3180 */ add.s $f6, $f6, $f10 -.L7F0A038C: -/* 0D4EBC 7F0A038C 3C012F80 */ li $at, 0x2F800000 # 0.000000 -/* 0D4EC0 7F0A0390 44818000 */ mtc1 $at, $f16 -/* 0D4EC4 7F0A0394 3C018005 */ lui $at, %hi(D_80057708) -/* 0D4EC8 7F0A0398 C4247708 */ lwc1 $f4, %lo(D_80057708)($at) -/* 0D4ECC 7F0A039C 46103482 */ mul.s $f18, $f6, $f16 -/* 0D4ED0 7F0A03A0 3C018005 */ lui $at, %hi(D_8005770C) -/* 0D4ED4 7F0A03A4 C42A770C */ lwc1 $f10, %lo(D_8005770C)($at) -/* 0D4ED8 7F0A03A8 46122202 */ mul.s $f8, $f4, $f18 -/* 0D4EDC 7F0A03AC 46085180 */ add.s $f6, $f10, $f8 -/* 0D4EE0 7F0A03B0 4606A502 */ mul.s $f20, $f20, $f6 -/* 0D4EE4 7F0A03B4 0FC2D20F */ jal get_room_data_float1 -/* 0D4EE8 7F0A03B8 00000000 */ nop -/* 0D4EEC 7F0A03BC C6900000 */ lwc1 $f16, ($s4) -/* 0D4EF0 7F0A03C0 C6120000 */ lwc1 $f18, ($s0) -/* 0D4EF4 7F0A03C4 46008102 */ mul.s $f4, $f16, $f0 -/* 0D4EF8 7F0A03C8 46122281 */ sub.s $f10, $f4, $f18 -/* 0D4EFC 7F0A03CC 0FC2D20F */ jal get_room_data_float1 -/* 0D4F00 7F0A03D0 E68A0000 */ swc1 $f10, ($s4) -/* 0D4F04 7F0A03D4 C6880004 */ lwc1 $f8, 4($s4) -/* 0D4F08 7F0A03D8 C6100004 */ lwc1 $f16, 4($s0) -/* 0D4F0C 7F0A03DC 46004182 */ mul.s $f6, $f8, $f0 -/* 0D4F10 7F0A03E0 46103101 */ sub.s $f4, $f6, $f16 -/* 0D4F14 7F0A03E4 0FC2D20F */ jal get_room_data_float1 -/* 0D4F18 7F0A03E8 E6840004 */ swc1 $f4, 4($s4) -/* 0D4F1C 7F0A03EC C6920008 */ lwc1 $f18, 8($s4) -/* 0D4F20 7F0A03F0 C6080008 */ lwc1 $f8, 8($s0) -/* 0D4F24 7F0A03F4 46009282 */ mul.s $f10, $f18, $f0 -/* 0D4F28 7F0A03F8 46085181 */ sub.s $f6, $f10, $f8 -/* 0D4F2C 7F0A03FC 0FC2D20F */ jal get_room_data_float1 -/* 0D4F30 7F0A0400 E6860008 */ swc1 $f6, 8($s4) -/* 0D4F34 7F0A0404 4600A502 */ mul.s $f20, $f20, $f0 -/* 0D4F38 7F0A0408 0FC15FA8 */ jal cosf -/* 0D4F3C 7F0A040C C7AC0054 */ lwc1 $f12, 0x54($sp) -/* 0D4F40 7F0A0410 46140402 */ mul.s $f16, $f0, $f20 -/* 0D4F44 7F0A0414 C7AC0054 */ lwc1 $f12, 0x54($sp) -/* 0D4F48 7F0A0418 0FC15FAB */ jal sinf -/* 0D4F4C 7F0A041C E7B00050 */ swc1 $f16, 0x50($sp) -/* 0D4F50 7F0A0420 3C128004 */ lui $s2, %hi(numScorchEntries) -/* 0D4F54 7F0A0424 26520804 */ addiu $s2, %lo(numScorchEntries) # addiu $s2, $s2, 0x804 -/* 0D4F58 7F0A0428 8E4D0000 */ lw $t5, ($s2) -/* 0D4F5C 7F0A042C 24110058 */ li $s1, 88 -/* 0D4F60 7F0A0430 46140082 */ mul.s $f2, $f0, $f20 -/* 0D4F64 7F0A0434 3C108008 */ lui $s0, %hi(ptr_scorch_buf) -/* 0D4F68 7F0A0438 01B10019 */ multu $t5, $s1 -/* 0D4F6C 7F0A043C 2610A150 */ addiu $s0, %lo(ptr_scorch_buf) # addiu $s0, $s0, -0x5eb0 -/* 0D4F70 7F0A0440 8E0C0000 */ lw $t4, ($s0) -/* 0D4F74 7F0A0444 87AB0072 */ lh $t3, 0x72($sp) -/* 0D4F78 7F0A0448 E7A2004C */ swc1 $f2, 0x4c($sp) -/* 0D4F7C 7F0A044C 0000C012 */ mflo $t8 -/* 0D4F80 7F0A0450 01987821 */ addu $t7, $t4, $t8 -/* 0D4F84 7F0A0454 A5EB0000 */ sh $t3, ($t7) -/* 0D4F88 7F0A0458 8E590000 */ lw $t9, ($s2) -/* 0D4F8C 7F0A045C 8E0E0000 */ lw $t6, ($s0) -/* 0D4F90 7F0A0460 C6840000 */ lwc1 $f4, ($s4) -/* 0D4F94 7F0A0464 03310019 */ multu $t9, $s1 -/* 0D4F98 7F0A0468 00004812 */ mflo $t1 -/* 0D4F9C 7F0A046C 01C94021 */ addu $t0, $t6, $t1 -/* 0D4FA0 7F0A0470 E5040004 */ swc1 $f4, 4($t0) -/* 0D4FA4 7F0A0474 8E4D0000 */ lw $t5, ($s2) -/* 0D4FA8 7F0A0478 8E0A0000 */ lw $t2, ($s0) -/* 0D4FAC 7F0A047C C6920004 */ lwc1 $f18, 4($s4) -/* 0D4FB0 7F0A0480 01B10019 */ multu $t5, $s1 -/* 0D4FB4 7F0A0484 00006012 */ mflo $t4 -/* 0D4FB8 7F0A0488 014CC021 */ addu $t8, $t2, $t4 -/* 0D4FBC 7F0A048C E7120008 */ swc1 $f18, 8($t8) -/* 0D4FC0 7F0A0490 8E4F0000 */ lw $t7, ($s2) -/* 0D4FC4 7F0A0494 8E0B0000 */ lw $t3, ($s0) -/* 0D4FC8 7F0A0498 C68A0008 */ lwc1 $f10, 8($s4) -/* 0D4FCC 7F0A049C 01F10019 */ multu $t7, $s1 -/* 0D4FD0 7F0A04A0 0000C812 */ mflo $t9 -/* 0D4FD4 7F0A04A4 01797021 */ addu $t6, $t3, $t9 -/* 0D4FD8 7F0A04A8 E5CA000C */ swc1 $f10, 0xc($t6) -/* 0D4FDC 7F0A04AC 8E480000 */ lw $t0, ($s2) -/* 0D4FE0 7F0A04B0 8E090000 */ lw $t1, ($s0) -/* 0D4FE4 7F0A04B4 01110019 */ multu $t0, $s1 -/* 0D4FE8 7F0A04B8 00006812 */ mflo $t5 -/* 0D4FEC 7F0A04BC 012D5021 */ addu $t2, $t1, $t5 -/* 0D4FF0 7F0A04C0 E5540010 */ swc1 $f20, 0x10($t2) -/* 0D4FF4 7F0A04C4 8E580000 */ lw $t8, ($s2) -/* 0D4FF8 7F0A04C8 8E0C0000 */ lw $t4, ($s0) -/* 0D4FFC 7F0A04CC 8E610000 */ lw $at, ($s3) -/* 0D5000 7F0A04D0 03110019 */ multu $t8, $s1 -/* 0D5004 7F0A04D4 00007812 */ mflo $t7 -/* 0D5008 7F0A04D8 018F5821 */ addu $t3, $t4, $t7 -/* 0D500C 7F0A04DC AD610018 */ sw $at, 0x18($t3) -/* 0D5010 7F0A04E0 8E6E0004 */ lw $t6, 4($s3) -/* 0D5014 7F0A04E4 AD6E001C */ sw $t6, 0x1c($t3) -/* 0D5018 7F0A04E8 8E610008 */ lw $at, 8($s3) -/* 0D501C 7F0A04EC AD610020 */ sw $at, 0x20($t3) -/* 0D5020 7F0A04F0 8E6E000C */ lw $t6, 0xc($s3) -/* 0D5024 7F0A04F4 AD6E0024 */ sw $t6, 0x24($t3) -/* 0D5028 7F0A04F8 8E490000 */ lw $t1, ($s2) -/* 0D502C 7F0A04FC 8E080000 */ lw $t0, ($s0) -/* 0D5030 7F0A0500 8E610000 */ lw $at, ($s3) -/* 0D5034 7F0A0504 01310019 */ multu $t1, $s1 -/* 0D5038 7F0A0508 00006812 */ mflo $t5 -/* 0D503C 7F0A050C 010D5021 */ addu $t2, $t0, $t5 -/* 0D5040 7F0A0510 AD410028 */ sw $at, 0x28($t2) -/* 0D5044 7F0A0514 8E6C0004 */ lw $t4, 4($s3) -/* 0D5048 7F0A0518 AD4C002C */ sw $t4, 0x2c($t2) -/* 0D504C 7F0A051C 8E610008 */ lw $at, 8($s3) -/* 0D5050 7F0A0520 AD410030 */ sw $at, 0x30($t2) -/* 0D5054 7F0A0524 8E6C000C */ lw $t4, 0xc($s3) -/* 0D5058 7F0A0528 AD4C0034 */ sw $t4, 0x34($t2) -/* 0D505C 7F0A052C 8E590000 */ lw $t9, ($s2) -/* 0D5060 7F0A0530 8E0F0000 */ lw $t7, ($s0) -/* 0D5064 7F0A0534 8E610000 */ lw $at, ($s3) -/* 0D5068 7F0A0538 03310019 */ multu $t9, $s1 -/* 0D506C 7F0A053C 00005812 */ mflo $t3 -/* 0D5070 7F0A0540 01EB7021 */ addu $t6, $t7, $t3 -/* 0D5074 7F0A0544 ADC10038 */ sw $at, 0x38($t6) -/* 0D5078 7F0A0548 8E680004 */ lw $t0, 4($s3) -/* 0D507C 7F0A054C ADC8003C */ sw $t0, 0x3c($t6) -/* 0D5080 7F0A0550 8E610008 */ lw $at, 8($s3) -/* 0D5084 7F0A0554 ADC10040 */ sw $at, 0x40($t6) -/* 0D5088 7F0A0558 8E68000C */ lw $t0, 0xc($s3) -/* 0D508C 7F0A055C ADC80044 */ sw $t0, 0x44($t6) -/* 0D5090 7F0A0560 8E580000 */ lw $t8, ($s2) -/* 0D5094 7F0A0564 8E0D0000 */ lw $t5, ($s0) -/* 0D5098 7F0A0568 8E610000 */ lw $at, ($s3) -/* 0D509C 7F0A056C 03110019 */ multu $t8, $s1 -/* 0D50A0 7F0A0570 00005012 */ mflo $t2 -/* 0D50A4 7F0A0574 01AA6021 */ addu $t4, $t5, $t2 -/* 0D50A8 7F0A0578 AD810048 */ sw $at, 0x48($t4) -/* 0D50AC 7F0A057C 8E6F0004 */ lw $t7, 4($s3) -/* 0D50B0 7F0A0580 AD8F004C */ sw $t7, 0x4c($t4) -/* 0D50B4 7F0A0584 8E610008 */ lw $at, 8($s3) -/* 0D50B8 7F0A0588 AD810050 */ sw $at, 0x50($t4) -/* 0D50BC 7F0A058C 8E6F000C */ lw $t7, 0xc($s3) -/* 0D50C0 7F0A0590 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D50C4 7F0A0594 44815000 */ mtc1 $at, $f10 -/* 0D50C8 7F0A0598 AD8F0054 */ sw $t7, 0x54($t4) -/* 0D50CC 7F0A059C 8E480000 */ lw $t0, ($s2) -/* 0D50D0 7F0A05A0 C7A60050 */ lwc1 $f6, 0x50($sp) -/* 0D50D4 7F0A05A4 C6880000 */ lwc1 $f8, ($s4) -/* 0D50D8 7F0A05A8 01110019 */ multu $t0, $s1 -/* 0D50DC 7F0A05AC 8E0E0000 */ lw $t6, ($s0) -/* 0D50E0 7F0A05B0 46064400 */ add.s $f16, $f8, $f6 -/* 0D50E4 7F0A05B4 4600810D */ trunc.w.s $f4, $f16 -/* 0D50E8 7F0A05B8 44092000 */ mfc1 $t1, $f4 -/* 0D50EC 7F0A05BC 0000C012 */ mflo $t8 -/* 0D50F0 7F0A05C0 01D86821 */ addu $t5, $t6, $t8 -/* 0D50F4 7F0A05C4 A5A90018 */ sh $t1, 0x18($t5) -/* 0D50F8 7F0A05C8 8E4F0000 */ lw $t7, ($s2) -/* 0D50FC 7F0A05CC C6920004 */ lwc1 $f18, 4($s4) -/* 0D5100 7F0A05D0 8E0C0000 */ lw $t4, ($s0) -/* 0D5104 7F0A05D4 01F10019 */ multu $t7, $s1 -/* 0D5108 7F0A05D8 460A9200 */ add.s $f8, $f18, $f10 -/* 0D510C 7F0A05DC 3C0E8009 */ lui $t6, %hi(genericimage) -/* 0D5110 7F0A05E0 4600418D */ trunc.w.s $f6, $f8 -/* 0D5114 7F0A05E4 44193000 */ mfc1 $t9, $f6 -/* 0D5118 7F0A05E8 00005812 */ mflo $t3 -/* 0D511C 7F0A05EC 018B4021 */ addu $t0, $t4, $t3 -/* 0D5120 7F0A05F0 A519001A */ sh $t9, 0x1a($t0) -/* 0D5124 7F0A05F4 8E4D0000 */ lw $t5, ($s2) -/* 0D5128 7F0A05F8 C6900008 */ lwc1 $f16, 8($s4) -/* 0D512C 7F0A05FC 8E090000 */ lw $t1, ($s0) -/* 0D5130 7F0A0600 01B10019 */ multu $t5, $s1 -/* 0D5134 7F0A0604 46028100 */ add.s $f4, $f16, $f2 -/* 0D5138 7F0A0608 4600248D */ trunc.w.s $f18, $f4 -/* 0D513C 7F0A060C 44189000 */ mfc1 $t8, $f18 -/* 0D5140 7F0A0610 00005012 */ mflo $t2 -/* 0D5144 7F0A0614 012A7821 */ addu $t7, $t1, $t2 -/* 0D5148 7F0A0618 A5F8001C */ sh $t8, 0x1c($t7) -/* 0D514C 7F0A061C 8E4B0000 */ lw $t3, ($s2) -/* 0D5150 7F0A0620 8E0C0000 */ lw $t4, ($s0) -/* 0D5154 7F0A0624 01710019 */ multu $t3, $s1 -/* 0D5158 7F0A0628 0000C812 */ mflo $t9 -/* 0D515C 7F0A062C 01994021 */ addu $t0, $t4, $t9 -/* 0D5160 7F0A0630 A5000020 */ sh $zero, 0x20($t0) -/* 0D5164 7F0A0634 8E580000 */ lw $t8, ($s2) -/* 0D5168 7F0A0638 8DCED0B8 */ lw $t6, %lo(genericimage)($t6) -/* 0D516C 7F0A063C 8E0A0000 */ lw $t2, ($s0) -/* 0D5170 7F0A0640 03110019 */ multu $t8, $s1 -/* 0D5174 7F0A0644 91CD0004 */ lbu $t5, 4($t6) -/* 0D5178 7F0A0648 000D4940 */ sll $t1, $t5, 5 -/* 0D517C 7F0A064C 00007812 */ mflo $t7 -/* 0D5180 7F0A0650 014F5821 */ addu $t3, $t2, $t7 -/* 0D5184 7F0A0654 0C002914 */ jal randomGetNext -/* 0D5188 7F0A0658 A5690022 */ sh $t1, 0x22($t3) -/* 0D518C 7F0A065C 24010032 */ li $at, 50 -/* 0D5190 7F0A0660 0041001B */ divu $zero, $v0, $at -/* 0D5194 7F0A0664 00009810 */ mfhi $s3 -/* 0D5198 7F0A0668 8E590000 */ lw $t9, ($s2) -/* 0D519C 7F0A066C 8E0C0000 */ lw $t4, ($s0) -/* 0D51A0 7F0A0670 C7B4004C */ lwc1 $f20, 0x4c($sp) -/* 0D51A4 7F0A0674 03310019 */ multu $t9, $s1 -/* 0D51A8 7F0A0678 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D51AC 7F0A067C 44812000 */ mtc1 $at, $f4 -/* 0D51B0 7F0A0680 00004012 */ mflo $t0 -/* 0D51B4 7F0A0684 01887021 */ addu $t6, $t4, $t0 -/* 0D51B8 7F0A0688 A1D30026 */ sb $s3, 0x26($t6) -/* 0D51BC 7F0A068C 8E580000 */ lw $t8, ($s2) -/* 0D51C0 7F0A0690 8E0D0000 */ lw $t5, ($s0) -/* 0D51C4 7F0A0694 03110019 */ multu $t8, $s1 -/* 0D51C8 7F0A0698 00005012 */ mflo $t2 -/* 0D51CC 7F0A069C 01AA7821 */ addu $t7, $t5, $t2 -/* 0D51D0 7F0A06A0 A1F30025 */ sb $s3, 0x25($t7) -/* 0D51D4 7F0A06A4 8E4B0000 */ lw $t3, ($s2) -/* 0D51D8 7F0A06A8 8E090000 */ lw $t1, ($s0) -/* 0D51DC 7F0A06AC 01710019 */ multu $t3, $s1 -/* 0D51E0 7F0A06B0 0000C812 */ mflo $t9 -/* 0D51E4 7F0A06B4 01396021 */ addu $t4, $t1, $t9 -/* 0D51E8 7F0A06B8 A1930024 */ sb $s3, 0x24($t4) -/* 0D51EC 7F0A06BC 8E580000 */ lw $t8, ($s2) -/* 0D51F0 7F0A06C0 8E0E0000 */ lw $t6, ($s0) -/* 0D51F4 7F0A06C4 93A8004B */ lbu $t0, 0x4b($sp) -/* 0D51F8 7F0A06C8 03110019 */ multu $t8, $s1 -/* 0D51FC 7F0A06CC 00006812 */ mflo $t5 -/* 0D5200 7F0A06D0 01CD5021 */ addu $t2, $t6, $t5 -/* 0D5204 7F0A06D4 A1480027 */ sb $t0, 0x27($t2) -/* 0D5208 7F0A06D8 8E590000 */ lw $t9, ($s2) -/* 0D520C 7F0A06DC C68A0000 */ lwc1 $f10, ($s4) -/* 0D5210 7F0A06E0 8E090000 */ lw $t1, ($s0) -/* 0D5214 7F0A06E4 03310019 */ multu $t9, $s1 -/* 0D5218 7F0A06E8 46145200 */ add.s $f8, $f10, $f20 -/* 0D521C 7F0A06EC 4600418D */ trunc.w.s $f6, $f8 -/* 0D5220 7F0A06F0 440B3000 */ mfc1 $t3, $f6 -/* 0D5224 7F0A06F4 00006012 */ mflo $t4 -/* 0D5228 7F0A06F8 012CC021 */ addu $t8, $t1, $t4 -/* 0D522C 7F0A06FC A70B0028 */ sh $t3, 0x28($t8) -/* 0D5230 7F0A0700 8E4A0000 */ lw $t2, ($s2) -/* 0D5234 7F0A0704 C6900004 */ lwc1 $f16, 4($s4) -/* 0D5238 7F0A0708 8E080000 */ lw $t0, ($s0) -/* 0D523C 7F0A070C 01510019 */ multu $t2, $s1 -/* 0D5240 7F0A0710 46048480 */ add.s $f18, $f16, $f4 -/* 0D5244 7F0A0714 4600928D */ trunc.w.s $f10, $f18 -/* 0D5248 7F0A0718 440D5000 */ mfc1 $t5, $f10 -/* 0D524C 7F0A071C 00007812 */ mflo $t7 -/* 0D5250 7F0A0720 010FC821 */ addu $t9, $t0, $t7 -/* 0D5254 7F0A0724 A72D002A */ sh $t5, 0x2a($t9) -/* 0D5258 7F0A0728 8E580000 */ lw $t8, ($s2) -/* 0D525C 7F0A072C C7A60050 */ lwc1 $f6, 0x50($sp) -/* 0D5260 7F0A0730 C6880008 */ lwc1 $f8, 8($s4) -/* 0D5264 7F0A0734 03110019 */ multu $t8, $s1 -/* 0D5268 7F0A0738 8E0B0000 */ lw $t3, ($s0) -/* 0D526C 7F0A073C 46064401 */ sub.s $f16, $f8, $f6 -/* 0D5270 7F0A0740 4600810D */ trunc.w.s $f4, $f16 -/* 0D5274 7F0A0744 440C2000 */ mfc1 $t4, $f4 -/* 0D5278 7F0A0748 00007012 */ mflo $t6 -/* 0D527C 7F0A074C 016E5021 */ addu $t2, $t3, $t6 -/* 0D5280 7F0A0750 A54C002C */ sh $t4, 0x2c($t2) -/* 0D5284 7F0A0754 8E4F0000 */ lw $t7, ($s2) -/* 0D5288 7F0A0758 8E080000 */ lw $t0, ($s0) -/* 0D528C 7F0A075C 01F10019 */ multu $t7, $s1 -/* 0D5290 7F0A0760 00006812 */ mflo $t5 -/* 0D5294 7F0A0764 010DC821 */ addu $t9, $t0, $t5 -/* 0D5298 7F0A0768 A7200030 */ sh $zero, 0x30($t9) -/* 0D529C 7F0A076C 8E580000 */ lw $t8, ($s2) -/* 0D52A0 7F0A0770 8E090000 */ lw $t1, ($s0) -/* 0D52A4 7F0A0774 03110019 */ multu $t8, $s1 -/* 0D52A8 7F0A0778 00005812 */ mflo $t3 -/* 0D52AC 7F0A077C 012B7021 */ addu $t6, $t1, $t3 -/* 0D52B0 7F0A0780 0C002914 */ jal randomGetNext -/* 0D52B4 7F0A0784 A5C00032 */ sh $zero, 0x32($t6) -/* 0D52B8 7F0A0788 24010032 */ li $at, 50 -/* 0D52BC 7F0A078C 0041001B */ divu $zero, $v0, $at -/* 0D52C0 7F0A0790 00009810 */ mfhi $s3 -/* 0D52C4 7F0A0794 8E4A0000 */ lw $t2, ($s2) -/* 0D52C8 7F0A0798 8E0C0000 */ lw $t4, ($s0) -/* 0D52CC 7F0A079C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D52D0 7F0A07A0 01510019 */ multu $t2, $s1 -/* 0D52D4 7F0A07A4 44812000 */ mtc1 $at, $f4 -/* 0D52D8 7F0A07A8 00007812 */ mflo $t7 -/* 0D52DC 7F0A07AC 018F4021 */ addu $t0, $t4, $t7 -/* 0D52E0 7F0A07B0 A1130036 */ sb $s3, 0x36($t0) -/* 0D52E4 7F0A07B4 8E590000 */ lw $t9, ($s2) -/* 0D52E8 7F0A07B8 8E0D0000 */ lw $t5, ($s0) -/* 0D52EC 7F0A07BC 03310019 */ multu $t9, $s1 -/* 0D52F0 7F0A07C0 0000C012 */ mflo $t8 -/* 0D52F4 7F0A07C4 01B84821 */ addu $t1, $t5, $t8 -/* 0D52F8 7F0A07C8 A1330035 */ sb $s3, 0x35($t1) -/* 0D52FC 7F0A07CC 8E4E0000 */ lw $t6, ($s2) -/* 0D5300 7F0A07D0 8E0B0000 */ lw $t3, ($s0) -/* 0D5304 7F0A07D4 01D10019 */ multu $t6, $s1 -/* 0D5308 7F0A07D8 00005012 */ mflo $t2 -/* 0D530C 7F0A07DC 016A6021 */ addu $t4, $t3, $t2 -/* 0D5310 7F0A07E0 A1930034 */ sb $s3, 0x34($t4) -/* 0D5314 7F0A07E4 8E590000 */ lw $t9, ($s2) -/* 0D5318 7F0A07E8 8E080000 */ lw $t0, ($s0) -/* 0D531C 7F0A07EC 93AF004B */ lbu $t7, 0x4b($sp) -/* 0D5320 7F0A07F0 03310019 */ multu $t9, $s1 -/* 0D5324 7F0A07F4 00006812 */ mflo $t5 -/* 0D5328 7F0A07F8 010DC021 */ addu $t8, $t0, $t5 -/* 0D532C 7F0A07FC A30F0037 */ sb $t7, 0x37($t8) -/* 0D5330 7F0A0800 8E4A0000 */ lw $t2, ($s2) -/* 0D5334 7F0A0804 C7AA0050 */ lwc1 $f10, 0x50($sp) -/* 0D5338 7F0A0808 C6920000 */ lwc1 $f18, ($s4) -/* 0D533C 7F0A080C 01510019 */ multu $t2, $s1 -/* 0D5340 7F0A0810 8E0B0000 */ lw $t3, ($s0) -/* 0D5344 7F0A0814 460A9201 */ sub.s $f8, $f18, $f10 -/* 0D5348 7F0A0818 4600418D */ trunc.w.s $f6, $f8 -/* 0D534C 7F0A081C 440E3000 */ mfc1 $t6, $f6 -/* 0D5350 7F0A0820 00006012 */ mflo $t4 -/* 0D5354 7F0A0824 016CC821 */ addu $t9, $t3, $t4 -/* 0D5358 7F0A0828 A72E0038 */ sh $t6, 0x38($t9) -/* 0D535C 7F0A082C 8E580000 */ lw $t8, ($s2) -/* 0D5360 7F0A0830 C6900004 */ lwc1 $f16, 4($s4) -/* 0D5364 7F0A0834 8E0F0000 */ lw $t7, ($s0) -/* 0D5368 7F0A0838 03110019 */ multu $t8, $s1 -/* 0D536C 7F0A083C 46048480 */ add.s $f18, $f16, $f4 -/* 0D5370 7F0A0840 4600928D */ trunc.w.s $f10, $f18 -/* 0D5374 7F0A0844 440D5000 */ mfc1 $t5, $f10 -/* 0D5378 7F0A0848 00004812 */ mflo $t1 -/* 0D537C 7F0A084C 01E95021 */ addu $t2, $t7, $t1 -/* 0D5380 7F0A0850 A54D003A */ sh $t5, 0x3a($t2) -/* 0D5384 7F0A0854 8E590000 */ lw $t9, ($s2) -/* 0D5388 7F0A0858 C6880008 */ lwc1 $f8, 8($s4) -/* 0D538C 7F0A085C 8E0E0000 */ lw $t6, ($s0) -/* 0D5390 7F0A0860 03310019 */ multu $t9, $s1 -/* 0D5394 7F0A0864 46144181 */ sub.s $f6, $f8, $f20 -/* 0D5398 7F0A0868 3C0F8009 */ lui $t7, %hi(genericimage) -/* 0D539C 7F0A086C 4600340D */ trunc.w.s $f16, $f6 -/* 0D53A0 7F0A0870 440C8000 */ mfc1 $t4, $f16 -/* 0D53A4 7F0A0874 00004012 */ mflo $t0 -/* 0D53A8 7F0A0878 01C8C021 */ addu $t8, $t6, $t0 -/* 0D53AC 7F0A087C A70C003C */ sh $t4, 0x3c($t8) -/* 0D53B0 7F0A0880 8E4B0000 */ lw $t3, ($s2) -/* 0D53B4 7F0A0884 8DEFD0B8 */ lw $t7, %lo(genericimage)($t7) -/* 0D53B8 7F0A0888 8E0A0000 */ lw $t2, ($s0) -/* 0D53BC 7F0A088C 01710019 */ multu $t3, $s1 -/* 0D53C0 7F0A0890 91E90005 */ lbu $t1, 5($t7) -/* 0D53C4 7F0A0894 00096940 */ sll $t5, $t1, 5 -/* 0D53C8 7F0A0898 0000C812 */ mflo $t9 -/* 0D53CC 7F0A089C 01597021 */ addu $t6, $t2, $t9 -/* 0D53D0 7F0A08A0 A5CD0040 */ sh $t5, 0x40($t6) -/* 0D53D4 7F0A08A4 8E4C0000 */ lw $t4, ($s2) -/* 0D53D8 7F0A08A8 8E080000 */ lw $t0, ($s0) -/* 0D53DC 7F0A08AC 01910019 */ multu $t4, $s1 -/* 0D53E0 7F0A08B0 0000C012 */ mflo $t8 -/* 0D53E4 7F0A08B4 01187821 */ addu $t7, $t0, $t8 -/* 0D53E8 7F0A08B8 0C002914 */ jal randomGetNext -/* 0D53EC 7F0A08BC A5E00042 */ sh $zero, 0x42($t7) -/* 0D53F0 7F0A08C0 24010032 */ li $at, 50 -/* 0D53F4 7F0A08C4 0041001B */ divu $zero, $v0, $at -/* 0D53F8 7F0A08C8 00009810 */ mfhi $s3 -/* 0D53FC 7F0A08CC 8E4B0000 */ lw $t3, ($s2) -/* 0D5400 7F0A08D0 8E090000 */ lw $t1, ($s0) -/* 0D5404 7F0A08D4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0D5408 7F0A08D8 01710019 */ multu $t3, $s1 -/* 0D540C 7F0A08DC 44813000 */ mtc1 $at, $f6 -/* 0D5410 7F0A08E0 00005012 */ mflo $t2 -/* 0D5414 7F0A08E4 012AC821 */ addu $t9, $t1, $t2 -/* 0D5418 7F0A08E8 A3330046 */ sb $s3, 0x46($t9) -/* 0D541C 7F0A08EC 8E4E0000 */ lw $t6, ($s2) -/* 0D5420 7F0A08F0 8E0D0000 */ lw $t5, ($s0) -/* 0D5424 7F0A08F4 01D10019 */ multu $t6, $s1 -/* 0D5428 7F0A08F8 00006012 */ mflo $t4 -/* 0D542C 7F0A08FC 01AC4021 */ addu $t0, $t5, $t4 -/* 0D5430 7F0A0900 A1130045 */ sb $s3, 0x45($t0) -/* 0D5434 7F0A0904 8E4F0000 */ lw $t7, ($s2) -/* 0D5438 7F0A0908 8E180000 */ lw $t8, ($s0) -/* 0D543C 7F0A090C 01F10019 */ multu $t7, $s1 -/* 0D5440 7F0A0910 00005812 */ mflo $t3 -/* 0D5444 7F0A0914 030B4821 */ addu $t1, $t8, $t3 -/* 0D5448 7F0A0918 A1330044 */ sb $s3, 0x44($t1) -/* 0D544C 7F0A091C 8E4E0000 */ lw $t6, ($s2) -/* 0D5450 7F0A0920 8E190000 */ lw $t9, ($s0) -/* 0D5454 7F0A0924 93AA004B */ lbu $t2, 0x4b($sp) -/* 0D5458 7F0A0928 01D10019 */ multu $t6, $s1 -/* 0D545C 7F0A092C 00006812 */ mflo $t5 -/* 0D5460 7F0A0930 032D6021 */ addu $t4, $t9, $t5 -/* 0D5464 7F0A0934 A18A0047 */ sb $t2, 0x47($t4) -/* 0D5468 7F0A0938 8E4B0000 */ lw $t3, ($s2) -/* 0D546C 7F0A093C C6840000 */ lwc1 $f4, ($s4) -/* 0D5470 7F0A0940 8E180000 */ lw $t8, ($s0) -/* 0D5474 7F0A0944 01710019 */ multu $t3, $s1 -/* 0D5478 7F0A0948 46142481 */ sub.s $f18, $f4, $f20 -/* 0D547C 7F0A094C 4600928D */ trunc.w.s $f10, $f18 -/* 0D5480 7F0A0950 440F5000 */ mfc1 $t7, $f10 -/* 0D5484 7F0A0954 00004812 */ mflo $t1 -/* 0D5488 7F0A0958 03097021 */ addu $t6, $t8, $t1 -/* 0D548C 7F0A095C A5CF0048 */ sh $t7, 0x48($t6) -/* 0D5490 7F0A0960 8E4C0000 */ lw $t4, ($s2) -/* 0D5494 7F0A0964 C6880004 */ lwc1 $f8, 4($s4) -/* 0D5498 7F0A0968 8E0A0000 */ lw $t2, ($s0) -/* 0D549C 7F0A096C 01910019 */ multu $t4, $s1 -/* 0D54A0 7F0A0970 46064400 */ add.s $f16, $f8, $f6 -/* 0D54A4 7F0A0974 4600810D */ trunc.w.s $f4, $f16 -/* 0D54A8 7F0A0978 440D2000 */ mfc1 $t5, $f4 -/* 0D54AC 7F0A097C 00004012 */ mflo $t0 -/* 0D54B0 7F0A0980 01485821 */ addu $t3, $t2, $t0 -/* 0D54B4 7F0A0984 A56D004A */ sh $t5, 0x4a($t3) -/* 0D54B8 7F0A0988 8E4E0000 */ lw $t6, ($s2) -/* 0D54BC 7F0A098C C7AA0050 */ lwc1 $f10, 0x50($sp) -/* 0D54C0 7F0A0990 C6920008 */ lwc1 $f18, 8($s4) -/* 0D54C4 7F0A0994 01D10019 */ multu $t6, $s1 -/* 0D54C8 7F0A0998 8E0F0000 */ lw $t7, ($s0) -/* 0D54CC 7F0A099C 460A9200 */ add.s $f8, $f18, $f10 -/* 0D54D0 7F0A09A0 3C0A8009 */ lui $t2, %hi(genericimage) -/* 0D54D4 7F0A09A4 4600418D */ trunc.w.s $f6, $f8 -/* 0D54D8 7F0A09A8 44093000 */ mfc1 $t1, $f6 -/* 0D54DC 7F0A09AC 0000C812 */ mflo $t9 -/* 0D54E0 7F0A09B0 01F96021 */ addu $t4, $t7, $t9 -/* 0D54E4 7F0A09B4 A589004C */ sh $t1, 0x4c($t4) -/* 0D54E8 7F0A09B8 8E580000 */ lw $t8, ($s2) -/* 0D54EC 7F0A09BC 8D4AD0B8 */ lw $t2, %lo(genericimage)($t2) -/* 0D54F0 7F0A09C0 8E0B0000 */ lw $t3, ($s0) -/* 0D54F4 7F0A09C4 03110019 */ multu $t8, $s1 -/* 0D54F8 7F0A09C8 91480004 */ lbu $t0, 4($t2) -/* 0D54FC 7F0A09CC 3C198009 */ lui $t9, %hi(genericimage) -/* 0D5500 7F0A09D0 00086940 */ sll $t5, $t0, 5 -/* 0D5504 7F0A09D4 00007012 */ mflo $t6 -/* 0D5508 7F0A09D8 016E7821 */ addu $t7, $t3, $t6 -/* 0D550C 7F0A09DC A5ED0050 */ sh $t5, 0x50($t7) -/* 0D5510 7F0A09E0 8E480000 */ lw $t0, ($s2) -/* 0D5514 7F0A09E4 8F39D0B8 */ lw $t9, %lo(genericimage)($t9) -/* 0D5518 7F0A09E8 8E0A0000 */ lw $t2, ($s0) -/* 0D551C 7F0A09EC 01110019 */ multu $t0, $s1 -/* 0D5520 7F0A09F0 93290005 */ lbu $t1, 5($t9) -/* 0D5524 7F0A09F4 00096140 */ sll $t4, $t1, 5 -/* 0D5528 7F0A09F8 0000C012 */ mflo $t8 -/* 0D552C 7F0A09FC 01585821 */ addu $t3, $t2, $t8 -/* 0D5530 7F0A0A00 0C002914 */ jal randomGetNext -/* 0D5534 7F0A0A04 A56C0052 */ sh $t4, 0x52($t3) -/* 0D5538 7F0A0A08 24010032 */ li $at, 50 -/* 0D553C 7F0A0A0C 0041001B */ divu $zero, $v0, $at -/* 0D5540 7F0A0A10 00009810 */ mfhi $s3 -/* 0D5544 7F0A0A14 8E4D0000 */ lw $t5, ($s2) -/* 0D5548 7F0A0A18 8E0E0000 */ lw $t6, ($s0) -/* 0D554C 7F0A0A1C 01B10019 */ multu $t5, $s1 -/* 0D5550 7F0A0A20 00007812 */ mflo $t7 -/* 0D5554 7F0A0A24 01CFC821 */ addu $t9, $t6, $t7 -/* 0D5558 7F0A0A28 A3330056 */ sb $s3, 0x56($t9) -/* 0D555C 7F0A0A2C 8E480000 */ lw $t0, ($s2) -/* 0D5560 7F0A0A30 8E090000 */ lw $t1, ($s0) -/* 0D5564 7F0A0A34 01110019 */ multu $t0, $s1 -/* 0D5568 7F0A0A38 00005012 */ mflo $t2 -/* 0D556C 7F0A0A3C 012AC021 */ addu $t8, $t1, $t2 -/* 0D5570 7F0A0A40 A3130055 */ sb $s3, 0x55($t8) -/* 0D5574 7F0A0A44 8E4B0000 */ lw $t3, ($s2) -/* 0D5578 7F0A0A48 8E0C0000 */ lw $t4, ($s0) -/* 0D557C 7F0A0A4C 01710019 */ multu $t3, $s1 -/* 0D5580 7F0A0A50 00006812 */ mflo $t5 -/* 0D5584 7F0A0A54 018D7021 */ addu $t6, $t4, $t5 -/* 0D5588 7F0A0A58 A1D30054 */ sb $s3, 0x54($t6) -/* 0D558C 7F0A0A5C 8E480000 */ lw $t0, ($s2) -/* 0D5590 7F0A0A60 8E190000 */ lw $t9, ($s0) -/* 0D5594 7F0A0A64 93AF004B */ lbu $t7, 0x4b($sp) -/* 0D5598 7F0A0A68 01110019 */ multu $t0, $s1 -/* 0D559C 7F0A0A6C 00004812 */ mflo $t1 -/* 0D55A0 7F0A0A70 03295021 */ addu $t2, $t9, $t1 -/* 0D55A4 7F0A0A74 A14F0057 */ sb $t7, 0x57($t2) -/* 0D55A8 7F0A0A78 8E580000 */ lw $t8, ($s2) -/* 0D55AC 7F0A0A7C 270B0001 */ addiu $t3, $t8, 1 -/* 0D55B0 7F0A0A80 29610014 */ slti $at, $t3, 0x14 -/* 0D55B4 7F0A0A84 14200002 */ bnez $at, .L7F0A0A90 -/* 0D55B8 7F0A0A88 AE4B0000 */ sw $t3, ($s2) -/* 0D55BC 7F0A0A8C AE400000 */ sw $zero, ($s2) -.L7F0A0A90: -/* 0D55C0 7F0A0A90 8FBF0034 */ lw $ra, 0x34($sp) -/* 0D55C4 7F0A0A94 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0D55C8 7F0A0A98 8FB00020 */ lw $s0, 0x20($sp) -/* 0D55CC 7F0A0A9C 8FB10024 */ lw $s1, 0x24($sp) -/* 0D55D0 7F0A0AA0 8FB20028 */ lw $s2, 0x28($sp) -/* 0D55D4 7F0A0AA4 8FB3002C */ lw $s3, 0x2c($sp) -/* 0D55D8 7F0A0AA8 8FB40030 */ lw $s4, 0x30($sp) -/* 0D55DC 7F0A0AAC 03E00008 */ jr $ra -/* 0D55E0 7F0A0AB0 27BD0068 */ addiu $sp, $sp, 0x68 -) -#endif @@ -4699,7 +1858,7 @@ glabel sub_GAME_7F0A027C /** * Address 0x7F0A0AB4. */ -Gfx *sub_GAME_7F0A0AB4(Gfx *arg0) +Gfx *explosionRenderScorchBuffer(Gfx *arg0) { //temp_t6 = arg0; s32 i; @@ -4715,27 +1874,27 @@ Gfx *sub_GAME_7F0A0AB4(Gfx *arg0) gSPClearGeometryMode(arg0++, G_CULL_FRONT | G_FOG); gDPSetColorDither(arg0++, G_CD_NOISE); - likely_generate_DL_for_image_declaration(&arg0, genericimage, 4, 1, 2); + texSelect(&arg0, genericimage, 4, 1, 2); for (i=0; i<20; i++) { - if (ptr_scorch_buf[i].roomid >= 0 && getROOMID_Bitflags(ptr_scorch_buf[i].roomid)) + if (g_ScorchBuffer[i].roomid >= 0 && getROOMID_isRendered(g_ScorchBuffer[i].roomid)) { - if (phi_s3 != ptr_scorch_buf[i].roomid) + if (phi_s3 != g_ScorchBuffer[i].roomid) { - phi_s3 = ptr_scorch_buf[i].roomid; - arg0 = sub_GAME_7F0BC9C4(arg0, ptr_scorch_buf[i].roomid); + phi_s3 = g_ScorchBuffer[i].roomid; + arg0 = applyRoomMatrixToDisplayList(arg0, g_ScorchBuffer[i].roomid); } /** - * Loads into the RSP vertex buffer the vertices that will be used by the gSP1Triangle commands that generates polygons. - * - * param v: the segment address of vertex list. - * param n: the number of vertices (1~32) - * param v0: Starting index in vertex buffer where vertices are to be loaded + * Loads into the RSP vertex buffer the vertices that will be used by the gSP1Triangle commands that generates polygons. + * + * param v: the segment address of vertex list. + * param n: the number of vertices (1~32) + * param v0: Starting index in vertex buffer where vertices are to be loaded * gSPVertex(Gfx *gdl, Vtx *v, u32 n, u32 v0) */ - gSPVertex(arg0++, osVirtualToPhysical((void*)ptr_scorch_buf[i].vertex_list), 4, 0); + gSPVertex(arg0++, osVirtualToPhysical((void*)g_ScorchBuffer[i].vertex_list), 4, 0); gSP2Triangles(arg0++, 0, 1, 2, 0, 0, 2, 3, 0); @@ -4752,56 +1911,57 @@ Gfx *sub_GAME_7F0A0AB4(Gfx *arg0) -s32 sub_GAME_7F0A0C74(f32 arg0) +s32 explosionRoundFloat(f32 arg0) { if (arg0 >= 0.0f) { return (s32) (arg0 + 0.5f); } + return (s32) (arg0 - 0.5f); } -void sub_GAME_7F0A0CCC(PropRecord* arg0, s8 arg1) +void explosionClearBulletImpactRoomByFlag(PropRecord* arg0, s8 arg1) { s32 i; for (i = 0; i < BULLET_IMPACT_BUFFER_LEN; i++) { - if ((arg0 == ptr_bullet_impact_buf[i].unk48) && (arg1 == ptr_bullet_impact_buf[i].unk4D)) + if ((arg0 == g_BulletImpactBuffer[i].prop) && (arg1 == g_BulletImpactBuffer[i].room_clear_flag)) { - ptr_bullet_impact_buf[i].unk00 = -1; + g_BulletImpactBuffer[i].room = -1; } } } -void sub_GAME_7F0A0D90(PropRecord* arg0) +void explosionClearBulletImpactRoom(PropRecord* arg0) { s32 i; for (i = 0; i < BULLET_IMPACT_BUFFER_LEN; i++) { - if ((arg0 == ptr_bullet_impact_buf[i].unk48) && (D_8004080C[ptr_bullet_impact_buf[i].unk02].unk1 == 2)) + if ((arg0 == g_BulletImpactBuffer[i].prop) && (g_ImpactTypes[g_BulletImpactBuffer[i].impact_type].unk1 == 2)) { - ptr_bullet_impact_buf[i].unk00 = -1; + g_BulletImpactBuffer[i].room = -1; } } } -void sub_GAME_7F0A0E98(s32 arg0) +void explosionSetBulletImpactAlpha(s32 arg0) { u32 val; s32 i; for (i = 0; i < SMOKE_PARTS_LEN; i++) { val = (u32) (((f32) i / 10.0f) * 255.0f); - ptr_bullet_impact_buf[arg0].unk47 = (s8) val; - if (1) { } - ptr_bullet_impact_buf[arg0].unk37 = (s8) val; - ptr_bullet_impact_buf[arg0].unk27 = (s8) val; - ptr_bullet_impact_buf[arg0].unk17 = (s8) val; + + g_BulletImpactBuffer[arg0].vertex_list[3].v.cn[3] = val; // alpha + g_BulletImpactBuffer[arg0].vertex_list[2].v.cn[3] = val; // alpha + g_BulletImpactBuffer[arg0].vertex_list[1].v.cn[3] = val; // alpha + g_BulletImpactBuffer[arg0].vertex_list[0].v.cn[3] = val; // alpha if (++arg0 >= BULLET_IMPACT_BUFFER_LEN) { @@ -4811,893 +1971,315 @@ void sub_GAME_7F0A0E98(s32 arg0) } -#ifdef NONMATCHING -void sub_GAME_7F0A108C(void) { +/*** + * NTSC address 0x7F0A108C. +*/ +void explosionCreateBulletImpact(struct coord3d *pos, struct coord3d *arg1, s16 impact_type, s16 room, PropRecord *prop, s8 model_render_pos_index, s8 room_clear_flag) +{ + Vtx spE0; + f32 spDC; + f32 spD8; + f32 spD4; + f32 temp_f6; + f32 temp_f2_2; + f32 temp_f12; + f32 spC4; + struct coord3d *temp_s0_2; + f32 spBC; + f32 spB8; + f32 spB4; + f32 spB0; + s32 temp_v1; + struct coord3d spA0; + f32 sp9C; + f32 sp98; + RenderPosView *temp_s1; + ObjectRecord *temp_s0; + f32 temp_f0; + f32 sp88; + s32 var_s1; + struct coord3d sp78; + struct coord3d sp6C; + f32 zero = 0.0f; + s_impacttype *sp50; + u8 var_s0; + u8 sp62; + u8 sp61; + spE0 = g_BulletImpactDefaultVertex; + + if (cheatIsActive(CHEAT_PAINTBALL)) + { + impact_type = 0x10; + } + + spA0.f[0] = pos->f[0]; + spA0.f[1] = pos->f[1]; + spA0.f[2] = pos->f[2]; + + sp50 = &g_ImpactTypes[impact_type]; + + sp9C = sp50->width; + sp98 = sp50->height; + + if ((arg1->f[0] == 0.0f) && (arg1->f[2] == 0.0f)) + { + spB8 = 0.0f; + spB4 = 0.0f; + spBC = 0.0f; + spB0 = 1.0f; + spC4 = 1.0f; + } + else + { + temp_f0 = sqrtf((arg1->f[0] * arg1->f[0]) + (arg1->f[1] * arg1->f[1]) + (arg1->f[2] * arg1->f[2])); + + spDC = arg1->f[0] / temp_f0; + spD8 = arg1->f[1] / temp_f0; + spD4 = arg1->f[2] / temp_f0; + + temp_f0 = sqrtf((spDC * spDC) + (spD4 * spD4)); + + temp_f2_2 = spDC / temp_f0; + temp_f12 = spD4 / temp_f0; + + spBC = -temp_f2_2; + spB8 = spD8 * temp_f2_2; + spB4 = -temp_f0; + spB0 = spD8 * temp_f12; + spC4 = temp_f12; + } + + if (prop != NULL) + { + temp_s0 = prop->obj; + temp_s1 = &temp_s0->model->render_pos[model_render_pos_index]; + + sp78.f[0] = spC4; + sp78.f[1] = 0.0f; + sp78.f[2] = spBC; + + sp6C.f[0] = spB8; + sp6C.f[1] = spB4; + sp6C.f[2] = spB0; + + mtx4RotateVecInPlace(&temp_s1->pos, &sp78); + mtx4RotateVecInPlace(&temp_s1->pos, &sp6C); + + sp88 = sqrtf((sp78.f[0] * sp78.f[0]) + (sp78.f[1] * sp78.f[1]) + (sp78.f[2] * sp78.f[2])); + temp_f6 = sqrtf((sp6C.f[0] * sp6C.f[0]) + (sp6C.f[1] * sp6C.f[1]) + (sp6C.f[2] * sp6C.f[2])); + + sp9C /= sp88; + sp98 /= temp_f6; + + if ((sp50->unk2 < 2) && (sp50->unk1 == 2)) + { + temp_s0->state |= PROPSTATE_2; + } + else + { + temp_s0->state |= PROPSTATE_DAMAGED; + } + } + else + { + temp_s0_2 = getRoomPositionByIndex((s32) room); + spA0.f[0] = (spA0.f[0] * get_room_data_float1()) - temp_s0_2->f[0]; + spA0.f[1] = (spA0.f[1] * get_room_data_float1()) - temp_s0_2->f[1]; + spA0.f[2] = (spA0.f[2] * get_room_data_float1()) - temp_s0_2->f[2]; + sp9C *= get_room_data_float1(); + sp98 *= get_room_data_float1(); + } + + g_BulletImpactBuffer[g_NumImpactEntries].prop = prop; + g_BulletImpactBuffer[g_NumImpactEntries].model_render_pos_index = model_render_pos_index; + g_BulletImpactBuffer[g_NumImpactEntries].room_clear_flag = room_clear_flag; + g_BulletImpactBuffer[g_NumImpactEntries].room = room; + g_BulletImpactBuffer[g_NumImpactEntries].impact_type = impact_type; + + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[0] = spE0; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[1] = spE0; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[2] = spE0; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[3] = spE0; + + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[0].v.ob[0] = explosionRoundFloat((spA0.f[0] - (sp9C * spC4)) - (sp98 * spB8)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[0].v.ob[1] = explosionRoundFloat((spA0.f[1] - zero) - (sp98 * spB4)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[0].v.ob[2] = explosionRoundFloat((spA0.f[2] - (sp9C * spBC)) - (sp98 * spB0)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[0].v.tc[0] = 0; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[0].v.tc[1] = impactimages[impact_type].height << 5; + + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[1].v.ob[0] = explosionRoundFloat((spA0.f[0] - (sp9C * spC4)) + (sp98 * spB8)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[1].v.ob[1] = explosionRoundFloat((spA0.f[1] - zero) + (sp98 * spB4)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[1].v.ob[2] = explosionRoundFloat((spA0.f[2] - (sp9C * spBC)) + (sp98 * spB0)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[1].v.tc[0] = 0; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[1].v.tc[1] = 0; + + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[2].v.ob[0] = explosionRoundFloat(spA0.f[0] + (sp9C * spC4) + (sp98 * spB8)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[2].v.ob[1] = explosionRoundFloat(spA0.f[1] + zero + (sp98 * spB4)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[2].v.ob[2] = explosionRoundFloat(spA0.f[2] + (sp9C * spBC) + (sp98 * spB0)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[2].v.tc[0] = impactimages[impact_type].width << 5; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[2].v.tc[1] = 0; + + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[3].v.ob[0] = explosionRoundFloat((spA0.f[0] + (sp9C * spC4)) - (sp98 * spB8)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[3].v.ob[1] = explosionRoundFloat((spA0.f[1] + zero) - (sp98 * spB4)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[3].v.ob[2] = explosionRoundFloat((spA0.f[2] + (sp9C * spBC)) - (sp98 * spB0)); + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[3].v.tc[0] = impactimages[impact_type].width << 5; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[3].v.tc[1] = impactimages[impact_type].height << 5; + + for (var_s1 = 0; var_s1 < 4; var_s1++) + { + switch (sp50->apptype) + { + default: + var_s0 = 0; + break; + + case 1: + temp_v1 = 0xFF - (randomGetNext() % 40U); + sp61 = temp_v1; + sp62 = temp_v1; + var_s0 = temp_v1; + break; + + case 0: + temp_v1 = randomGetNext() % 40U; + sp61 = temp_v1; + sp62 = temp_v1; + var_s0 = temp_v1; + break; + + case 2: + var_s0 = (randomGetNext() & 1) ? 0xff : 0; + sp62 = (randomGetNext() & 1) ? 0xff : 0; + sp61 = (randomGetNext() & 1) ? 0xff : 0; + break; + } + + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[var_s1].v.cn[0] = var_s0; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[var_s1].v.cn[1] = sp62; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[var_s1].v.cn[2] = sp61; + g_BulletImpactBuffer[g_NumImpactEntries].vertex_list[var_s1].v.cn[3] = 0xff; // alpha + } + + g_NumImpactEntries++; + if (g_NumImpactEntries >= BULLET_IMPACT_BUFFER_LEN) + { + g_NumImpactEntries = 0; + } + + explosionSetBulletImpactAlpha(g_NumImpactEntries); + + g_BulletImpactBuffer[g_NumImpactEntries].room = -1; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0A108C -/* 0D5BBC 7F0A108C 27BDFF10 */ addiu $sp, $sp, -0xf0 -/* 0D5BC0 7F0A1090 3C0E8004 */ lui $t6, %hi(D_80040930) -/* 0D5BC4 7F0A1094 AFBF0034 */ sw $ra, 0x34($sp) -/* 0D5BC8 7F0A1098 AFB60030 */ sw $s6, 0x30($sp) -/* 0D5BCC 7F0A109C AFB5002C */ sw $s5, 0x2c($sp) -/* 0D5BD0 7F0A10A0 AFB40028 */ sw $s4, 0x28($sp) -/* 0D5BD4 7F0A10A4 AFB30024 */ sw $s3, 0x24($sp) -/* 0D5BD8 7F0A10A8 AFB20020 */ sw $s2, 0x20($sp) -/* 0D5BDC 7F0A10AC AFB1001C */ sw $s1, 0x1c($sp) -/* 0D5BE0 7F0A10B0 AFB00018 */ sw $s0, 0x18($sp) -/* 0D5BE4 7F0A10B4 AFA600F8 */ sw $a2, 0xf8($sp) -/* 0D5BE8 7F0A10B8 AFA700FC */ sw $a3, 0xfc($sp) -/* 0D5BEC 7F0A10BC 25CE0930 */ addiu $t6, %lo(D_80040930) # addiu $t6, $t6, 0x930 -/* 0D5BF0 7F0A10C0 8DC10000 */ lw $at, ($t6) -/* 0D5BF4 7F0A10C4 27B500E0 */ addiu $s5, $sp, 0xe0 -/* 0D5BF8 7F0A10C8 00808825 */ move $s1, $a0 -/* 0D5BFC 7F0A10CC AEA10000 */ sw $at, ($s5) -/* 0D5C00 7F0A10D0 8DD90004 */ lw $t9, 4($t6) -/* 0D5C04 7F0A10D4 00A08025 */ move $s0, $a1 -/* 0D5C08 7F0A10D8 2404000F */ li $a0, 15 -/* 0D5C0C 7F0A10DC AEB90004 */ sw $t9, 4($s5) -/* 0D5C10 7F0A10E0 8DC10008 */ lw $at, 8($t6) -/* 0D5C14 7F0A10E4 AEA10008 */ sw $at, 8($s5) -/* 0D5C18 7F0A10E8 8DD9000C */ lw $t9, 0xc($t6) -/* 0D5C1C 7F0A10EC 0FC249EF */ jal cheatIsActive -/* 0D5C20 7F0A10F0 AEB9000C */ sw $t9, 0xc($s5) -/* 0D5C24 7F0A10F4 10400003 */ beqz $v0, .L7F0A1104 -/* 0D5C28 7F0A10F8 3C0A8004 */ lui $t2, %hi(D_8004080C) -/* 0D5C2C 7F0A10FC 24080010 */ li $t0, 16 -/* 0D5C30 7F0A1100 A7A800FA */ sh $t0, 0xfa($sp) -.L7F0A1104: -/* 0D5C34 7F0A1104 C6240000 */ lwc1 $f4, ($s1) -/* 0D5C38 7F0A1108 87B400FA */ lh $s4, 0xfa($sp) -/* 0D5C3C 7F0A110C 254A080C */ addiu $t2, %lo(D_8004080C) # addiu $t2, $t2, 0x80c -/* 0D5C40 7F0A1110 E7A400A0 */ swc1 $f4, 0xa0($sp) -/* 0D5C44 7F0A1114 C6260004 */ lwc1 $f6, 4($s1) -/* 0D5C48 7F0A1118 00144880 */ sll $t1, $s4, 2 -/* 0D5C4C 7F0A111C 01344823 */ subu $t1, $t1, $s4 -/* 0D5C50 7F0A1120 E7A600A4 */ swc1 $f6, 0xa4($sp) -/* 0D5C54 7F0A1124 C6280008 */ lwc1 $f8, 8($s1) -/* 0D5C58 7F0A1128 0009A080 */ sll $s4, $t1, 2 -/* 0D5C5C 7F0A112C 028A5821 */ addu $t3, $s4, $t2 -/* 0D5C60 7F0A1130 AFAB0050 */ sw $t3, 0x50($sp) -/* 0D5C64 7F0A1134 E7A800A8 */ swc1 $f8, 0xa8($sp) -/* 0D5C68 7F0A1138 C56A0000 */ lwc1 $f10, ($t3) -/* 0D5C6C 7F0A113C 44808000 */ mtc1 $zero, $f16 -/* 0D5C70 7F0A1140 E7AA009C */ swc1 $f10, 0x9c($sp) -/* 0D5C74 7F0A1144 C5640004 */ lwc1 $f4, 4($t3) -/* 0D5C78 7F0A1148 E7A40098 */ swc1 $f4, 0x98($sp) -/* 0D5C7C 7F0A114C C60E0000 */ lwc1 $f14, ($s0) -/* 0D5C80 7F0A1150 460E8032 */ c.eq.s $f16, $f14 -/* 0D5C84 7F0A1154 00000000 */ nop -/* 0D5C88 7F0A1158 4500000E */ bc1f .L7F0A1194 -/* 0D5C8C 7F0A115C 00000000 */ nop -/* 0D5C90 7F0A1160 C6060008 */ lwc1 $f6, 8($s0) -/* 0D5C94 7F0A1164 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0D5C98 7F0A1168 46068032 */ c.eq.s $f16, $f6 -/* 0D5C9C 7F0A116C 00000000 */ nop -/* 0D5CA0 7F0A1170 45000008 */ bc1f .L7F0A1194 -/* 0D5CA4 7F0A1174 00000000 */ nop -/* 0D5CA8 7F0A1178 44810000 */ mtc1 $at, $f0 -/* 0D5CAC 7F0A117C E7B000B8 */ swc1 $f16, 0xb8($sp) -/* 0D5CB0 7F0A1180 E7B000B4 */ swc1 $f16, 0xb4($sp) -/* 0D5CB4 7F0A1184 E7B000BC */ swc1 $f16, 0xbc($sp) -/* 0D5CB8 7F0A1188 E7A000B0 */ swc1 $f0, 0xb0($sp) -/* 0D5CBC 7F0A118C 10000025 */ b .L7F0A1224 -/* 0D5CC0 7F0A1190 E7A000C4 */ swc1 $f0, 0xc4($sp) -.L7F0A1194: -/* 0D5CC4 7F0A1194 460E7202 */ mul.s $f8, $f14, $f14 -/* 0D5CC8 7F0A1198 C6020004 */ lwc1 $f2, 4($s0) -/* 0D5CCC 7F0A119C C6000008 */ lwc1 $f0, 8($s0) -/* 0D5CD0 7F0A11A0 46021282 */ mul.s $f10, $f2, $f2 -/* 0D5CD4 7F0A11A4 460A4100 */ add.s $f4, $f8, $f10 -/* 0D5CD8 7F0A11A8 46000182 */ mul.s $f6, $f0, $f0 -/* 0D5CDC 7F0A11AC 0C007DF8 */ jal sqrtf -/* 0D5CE0 7F0A11B0 46043300 */ add.s $f12, $f6, $f4 -/* 0D5CE4 7F0A11B4 C6080000 */ lwc1 $f8, ($s0) -/* 0D5CE8 7F0A11B8 C6060008 */ lwc1 $f6, 8($s0) -/* 0D5CEC 7F0A11BC C60A0004 */ lwc1 $f10, 4($s0) -/* 0D5CF0 7F0A11C0 46004383 */ div.s $f14, $f8, $f0 -/* 0D5CF4 7F0A11C4 46003403 */ div.s $f16, $f6, $f0 -/* 0D5CF8 7F0A11C8 E7AE00DC */ swc1 $f14, 0xdc($sp) -/* 0D5CFC 7F0A11CC 460E7102 */ mul.s $f4, $f14, $f14 -/* 0D5D00 7F0A11D0 46005483 */ div.s $f18, $f10, $f0 -/* 0D5D04 7F0A11D4 E7B000D4 */ swc1 $f16, 0xd4($sp) -/* 0D5D08 7F0A11D8 46108202 */ mul.s $f8, $f16, $f16 -/* 0D5D0C 7F0A11DC 46082300 */ add.s $f12, $f4, $f8 -/* 0D5D10 7F0A11E0 0C007DF8 */ jal sqrtf -/* 0D5D14 7F0A11E4 E7B200D8 */ swc1 $f18, 0xd8($sp) -/* 0D5D18 7F0A11E8 C7AE00DC */ lwc1 $f14, 0xdc($sp) -/* 0D5D1C 7F0A11EC C7B000D4 */ lwc1 $f16, 0xd4($sp) -/* 0D5D20 7F0A11F0 C7B200D8 */ lwc1 $f18, 0xd8($sp) -/* 0D5D24 7F0A11F4 46007083 */ div.s $f2, $f14, $f0 -/* 0D5D28 7F0A11F8 46000107 */ neg.s $f4, $f0 -/* 0D5D2C 7F0A11FC E7A400B4 */ swc1 $f4, 0xb4($sp) -/* 0D5D30 7F0A1200 46008303 */ div.s $f12, $f16, $f0 -/* 0D5D34 7F0A1204 44808000 */ mtc1 $zero, $f16 -/* 0D5D38 7F0A1208 46029182 */ mul.s $f6, $f18, $f2 -/* 0D5D3C 7F0A120C 46001287 */ neg.s $f10, $f2 -/* 0D5D40 7F0A1210 E7AA00BC */ swc1 $f10, 0xbc($sp) -/* 0D5D44 7F0A1214 E7A600B8 */ swc1 $f6, 0xb8($sp) -/* 0D5D48 7F0A1218 460C9202 */ mul.s $f8, $f18, $f12 -/* 0D5D4C 7F0A121C E7AC00C4 */ swc1 $f12, 0xc4($sp) -/* 0D5D50 7F0A1220 E7A800B0 */ swc1 $f8, 0xb0($sp) -.L7F0A1224: -/* 0D5D54 7F0A1224 8FA20100 */ lw $v0, 0x100($sp) -/* 0D5D58 7F0A1228 10400044 */ beqz $v0, .L7F0A133C -/* 0D5D5C 7F0A122C 00000000 */ nop -/* 0D5D60 7F0A1230 8C500004 */ lw $s0, 4($v0) -/* 0D5D64 7F0A1234 C7AA00C4 */ lwc1 $f10, 0xc4($sp) -/* 0D5D68 7F0A1238 83AF0107 */ lb $t7, 0x107($sp) -/* 0D5D6C 7F0A123C 8E0D0014 */ lw $t5, 0x14($s0) -/* 0D5D70 7F0A1240 C7A600BC */ lwc1 $f6, 0xbc($sp) -/* 0D5D74 7F0A1244 C7A400B8 */ lwc1 $f4, 0xb8($sp) -/* 0D5D78 7F0A1248 8DB8000C */ lw $t8, 0xc($t5) -/* 0D5D7C 7F0A124C E7AA0078 */ swc1 $f10, 0x78($sp) -/* 0D5D80 7F0A1250 C7A800B4 */ lwc1 $f8, 0xb4($sp) -/* 0D5D84 7F0A1254 C7AA00B0 */ lwc1 $f10, 0xb0($sp) -/* 0D5D88 7F0A1258 000F7180 */ sll $t6, $t7, 6 -/* 0D5D8C 7F0A125C 030E8821 */ addu $s1, $t8, $t6 -/* 0D5D90 7F0A1260 E7B0007C */ swc1 $f16, 0x7c($sp) -/* 0D5D94 7F0A1264 02202025 */ move $a0, $s1 -/* 0D5D98 7F0A1268 27A50078 */ addiu $a1, $sp, 0x78 -/* 0D5D9C 7F0A126C E7A60080 */ swc1 $f6, 0x80($sp) -/* 0D5DA0 7F0A1270 E7A4006C */ swc1 $f4, 0x6c($sp) -/* 0D5DA4 7F0A1274 E7A80070 */ swc1 $f8, 0x70($sp) -/* 0D5DA8 7F0A1278 0FC160F6 */ jal mtx4RotateVecInPlace -/* 0D5DAC 7F0A127C E7AA0074 */ swc1 $f10, 0x74($sp) -/* 0D5DB0 7F0A1280 02202025 */ move $a0, $s1 -/* 0D5DB4 7F0A1284 0FC160F6 */ jal mtx4RotateVecInPlace -/* 0D5DB8 7F0A1288 27A5006C */ addiu $a1, $sp, 0x6c -/* 0D5DBC 7F0A128C C7A00078 */ lwc1 $f0, 0x78($sp) -/* 0D5DC0 7F0A1290 C7A2007C */ lwc1 $f2, 0x7c($sp) -/* 0D5DC4 7F0A1294 C7AE0080 */ lwc1 $f14, 0x80($sp) -/* 0D5DC8 7F0A1298 46000182 */ mul.s $f6, $f0, $f0 -/* 0D5DCC 7F0A129C 00000000 */ nop -/* 0D5DD0 7F0A12A0 46021102 */ mul.s $f4, $f2, $f2 -/* 0D5DD4 7F0A12A4 46043200 */ add.s $f8, $f6, $f4 -/* 0D5DD8 7F0A12A8 460E7282 */ mul.s $f10, $f14, $f14 -/* 0D5DDC 7F0A12AC 0C007DF8 */ jal sqrtf -/* 0D5DE0 7F0A12B0 46085300 */ add.s $f12, $f10, $f8 -/* 0D5DE4 7F0A12B4 C7A2006C */ lwc1 $f2, 0x6c($sp) -/* 0D5DE8 7F0A12B8 C7AE0070 */ lwc1 $f14, 0x70($sp) -/* 0D5DEC 7F0A12BC C7B00074 */ lwc1 $f16, 0x74($sp) -/* 0D5DF0 7F0A12C0 46021182 */ mul.s $f6, $f2, $f2 -/* 0D5DF4 7F0A12C4 E7A00088 */ swc1 $f0, 0x88($sp) -/* 0D5DF8 7F0A12C8 460E7102 */ mul.s $f4, $f14, $f14 -/* 0D5DFC 7F0A12CC 46043280 */ add.s $f10, $f6, $f4 -/* 0D5E00 7F0A12D0 46108202 */ mul.s $f8, $f16, $f16 -/* 0D5E04 7F0A12D4 0C007DF8 */ jal sqrtf -/* 0D5E08 7F0A12D8 460A4300 */ add.s $f12, $f8, $f10 -/* 0D5E0C 7F0A12DC C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 0D5E10 7F0A12E0 C7A40088 */ lwc1 $f4, 0x88($sp) -/* 0D5E14 7F0A12E4 C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 0D5E18 7F0A12E8 8FB90050 */ lw $t9, 0x50($sp) -/* 0D5E1C 7F0A12EC 46043203 */ div.s $f8, $f6, $f4 -/* 0D5E20 7F0A12F0 46005183 */ div.s $f6, $f10, $f0 -/* 0D5E24 7F0A12F4 E7A8009C */ swc1 $f8, 0x9c($sp) -/* 0D5E28 7F0A12F8 E7A60098 */ swc1 $f6, 0x98($sp) -/* 0D5E2C 7F0A12FC 9328000A */ lbu $t0, 0xa($t9) -/* 0D5E30 7F0A1300 29010002 */ slti $at, $t0, 2 -/* 0D5E34 7F0A1304 5020000A */ beql $at, $zero, .L7F0A1330 -/* 0D5E38 7F0A1308 920C0002 */ lbu $t4, 2($s0) -/* 0D5E3C 7F0A130C 93290009 */ lbu $t1, 9($t9) -/* 0D5E40 7F0A1310 24010002 */ li $at, 2 -/* 0D5E44 7F0A1314 55210006 */ bnel $t1, $at, .L7F0A1330 -/* 0D5E48 7F0A1318 920C0002 */ lbu $t4, 2($s0) -/* 0D5E4C 7F0A131C 920A0002 */ lbu $t2, 2($s0) -/* 0D5E50 7F0A1320 354B0002 */ ori $t3, $t2, 2 -/* 0D5E54 7F0A1324 10000022 */ b .L7F0A13B0 -/* 0D5E58 7F0A1328 A20B0002 */ sb $t3, 2($s0) -/* 0D5E5C 7F0A132C 920C0002 */ lbu $t4, 2($s0) -.L7F0A1330: -/* 0D5E60 7F0A1330 358D0001 */ ori $t5, $t4, 1 -/* 0D5E64 7F0A1334 1000001E */ b .L7F0A13B0 -/* 0D5E68 7F0A1338 A20D0002 */ sb $t5, 2($s0) -.L7F0A133C: -/* 0D5E6C 7F0A133C 0FC2F285 */ jal getRoomIndexPOS -/* 0D5E70 7F0A1340 87A400FE */ lh $a0, 0xfe($sp) -/* 0D5E74 7F0A1344 0FC2D20F */ jal get_room_data_float1 -/* 0D5E78 7F0A1348 00408025 */ move $s0, $v0 -/* 0D5E7C 7F0A134C C7A400A0 */ lwc1 $f4, 0xa0($sp) -/* 0D5E80 7F0A1350 C60A0000 */ lwc1 $f10, ($s0) -/* 0D5E84 7F0A1354 46002202 */ mul.s $f8, $f4, $f0 -/* 0D5E88 7F0A1358 460A4181 */ sub.s $f6, $f8, $f10 -/* 0D5E8C 7F0A135C 0FC2D20F */ jal get_room_data_float1 -/* 0D5E90 7F0A1360 E7A600A0 */ swc1 $f6, 0xa0($sp) -/* 0D5E94 7F0A1364 C7A400A4 */ lwc1 $f4, 0xa4($sp) -/* 0D5E98 7F0A1368 C60A0004 */ lwc1 $f10, 4($s0) -/* 0D5E9C 7F0A136C 46002202 */ mul.s $f8, $f4, $f0 -/* 0D5EA0 7F0A1370 460A4181 */ sub.s $f6, $f8, $f10 -/* 0D5EA4 7F0A1374 0FC2D20F */ jal get_room_data_float1 -/* 0D5EA8 7F0A1378 E7A600A4 */ swc1 $f6, 0xa4($sp) -/* 0D5EAC 7F0A137C C7A400A8 */ lwc1 $f4, 0xa8($sp) -/* 0D5EB0 7F0A1380 C60A0008 */ lwc1 $f10, 8($s0) -/* 0D5EB4 7F0A1384 46002202 */ mul.s $f8, $f4, $f0 -/* 0D5EB8 7F0A1388 460A4181 */ sub.s $f6, $f8, $f10 -/* 0D5EBC 7F0A138C 0FC2D20F */ jal get_room_data_float1 -/* 0D5EC0 7F0A1390 E7A600A8 */ swc1 $f6, 0xa8($sp) -/* 0D5EC4 7F0A1394 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0D5EC8 7F0A1398 46002202 */ mul.s $f8, $f4, $f0 -/* 0D5ECC 7F0A139C 0FC2D20F */ jal get_room_data_float1 -/* 0D5ED0 7F0A13A0 E7A8009C */ swc1 $f8, 0x9c($sp) -/* 0D5ED4 7F0A13A4 C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 0D5ED8 7F0A13A8 46005182 */ mul.s $f6, $f10, $f0 -/* 0D5EDC 7F0A13AC E7A60098 */ swc1 $f6, 0x98($sp) -.L7F0A13B0: -/* 0D5EE0 7F0A13B0 3C128004 */ lui $s2, %hi(numImpactEntries) -/* 0D5EE4 7F0A13B4 26520808 */ addiu $s2, %lo(numImpactEntries) # addiu $s2, $s2, 0x808 -/* 0D5EE8 7F0A13B8 8E4E0000 */ lw $t6, ($s2) -/* 0D5EEC 7F0A13BC 24160050 */ li $s6, 80 -/* 0D5EF0 7F0A13C0 3C138008 */ lui $s3, %hi(ptr_bullet_impact_buf) -/* 0D5EF4 7F0A13C4 01D60019 */ multu $t6, $s6 -/* 0D5EF8 7F0A13C8 2673A154 */ addiu $s3, %lo(ptr_bullet_impact_buf) # addiu $s3, $s3, -0x5eac -/* 0D5EFC 7F0A13CC 8E780000 */ lw $t8, ($s3) -/* 0D5F00 7F0A13D0 8FAF0100 */ lw $t7, 0x100($sp) -/* 0D5F04 7F0A13D4 00004012 */ mflo $t0 -/* 0D5F08 7F0A13D8 0308C821 */ addu $t9, $t8, $t0 -/* 0D5F0C 7F0A13DC AF2F0048 */ sw $t7, 0x48($t9) -/* 0D5F10 7F0A13E0 8E4B0000 */ lw $t3, ($s2) -/* 0D5F14 7F0A13E4 8E6A0000 */ lw $t2, ($s3) -/* 0D5F18 7F0A13E8 83A90107 */ lb $t1, 0x107($sp) -/* 0D5F1C 7F0A13EC 01760019 */ multu $t3, $s6 -/* 0D5F20 7F0A13F0 00006012 */ mflo $t4 -/* 0D5F24 7F0A13F4 014C6821 */ addu $t5, $t2, $t4 -/* 0D5F28 7F0A13F8 A1A9004C */ sb $t1, 0x4c($t5) -/* 0D5F2C 7F0A13FC 8E480000 */ lw $t0, ($s2) -/* 0D5F30 7F0A1400 8E780000 */ lw $t8, ($s3) -/* 0D5F34 7F0A1404 83AE010B */ lb $t6, 0x10b($sp) -/* 0D5F38 7F0A1408 01160019 */ multu $t0, $s6 -/* 0D5F3C 7F0A140C 00007812 */ mflo $t7 -/* 0D5F40 7F0A1410 030FC821 */ addu $t9, $t8, $t7 -/* 0D5F44 7F0A1414 A32E004D */ sb $t6, 0x4d($t9) -/* 0D5F48 7F0A1418 8E4C0000 */ lw $t4, ($s2) -/* 0D5F4C 7F0A141C 8E6A0000 */ lw $t2, ($s3) -/* 0D5F50 7F0A1420 87AB00FE */ lh $t3, 0xfe($sp) -/* 0D5F54 7F0A1424 01960019 */ multu $t4, $s6 -/* 0D5F58 7F0A1428 00004812 */ mflo $t1 -/* 0D5F5C 7F0A142C 01496821 */ addu $t5, $t2, $t1 -/* 0D5F60 7F0A1430 A5AB0000 */ sh $t3, ($t5) -/* 0D5F64 7F0A1434 8E4F0000 */ lw $t7, ($s2) -/* 0D5F68 7F0A1438 8E780000 */ lw $t8, ($s3) -/* 0D5F6C 7F0A143C 87A800FA */ lh $t0, 0xfa($sp) -/* 0D5F70 7F0A1440 01F60019 */ multu $t7, $s6 -/* 0D5F74 7F0A1444 00007012 */ mflo $t6 -/* 0D5F78 7F0A1448 030EC821 */ addu $t9, $t8, $t6 -/* 0D5F7C 7F0A144C A7280002 */ sh $t0, 2($t9) -/* 0D5F80 7F0A1450 8E4A0000 */ lw $t2, ($s2) -/* 0D5F84 7F0A1454 8E6C0000 */ lw $t4, ($s3) -/* 0D5F88 7F0A1458 8EA10000 */ lw $at, ($s5) -/* 0D5F8C 7F0A145C 01560019 */ multu $t2, $s6 -/* 0D5F90 7F0A1460 00004812 */ mflo $t1 -/* 0D5F94 7F0A1464 01895821 */ addu $t3, $t4, $t1 -/* 0D5F98 7F0A1468 AD610008 */ sw $at, 8($t3) -/* 0D5F9C 7F0A146C 8EAF0004 */ lw $t7, 4($s5) -/* 0D5FA0 7F0A1470 AD6F000C */ sw $t7, 0xc($t3) -/* 0D5FA4 7F0A1474 8EA10008 */ lw $at, 8($s5) -/* 0D5FA8 7F0A1478 AD610010 */ sw $at, 0x10($t3) -/* 0D5FAC 7F0A147C 8EAF000C */ lw $t7, 0xc($s5) -/* 0D5FB0 7F0A1480 AD6F0014 */ sw $t7, 0x14($t3) -/* 0D5FB4 7F0A1484 8E4E0000 */ lw $t6, ($s2) -/* 0D5FB8 7F0A1488 8E780000 */ lw $t8, ($s3) -/* 0D5FBC 7F0A148C 8EA10000 */ lw $at, ($s5) -/* 0D5FC0 7F0A1490 01D60019 */ multu $t6, $s6 -/* 0D5FC4 7F0A1494 00004012 */ mflo $t0 -/* 0D5FC8 7F0A1498 0308C821 */ addu $t9, $t8, $t0 -/* 0D5FCC 7F0A149C AF210018 */ sw $at, 0x18($t9) -/* 0D5FD0 7F0A14A0 8EAC0004 */ lw $t4, 4($s5) -/* 0D5FD4 7F0A14A4 AF2C001C */ sw $t4, 0x1c($t9) -/* 0D5FD8 7F0A14A8 8EA10008 */ lw $at, 8($s5) -/* 0D5FDC 7F0A14AC AF210020 */ sw $at, 0x20($t9) -/* 0D5FE0 7F0A14B0 8EAC000C */ lw $t4, 0xc($s5) -/* 0D5FE4 7F0A14B4 AF2C0024 */ sw $t4, 0x24($t9) -/* 0D5FE8 7F0A14B8 8E4D0000 */ lw $t5, ($s2) -/* 0D5FEC 7F0A14BC 8E690000 */ lw $t1, ($s3) -/* 0D5FF0 7F0A14C0 8EA10000 */ lw $at, ($s5) -/* 0D5FF4 7F0A14C4 01B60019 */ multu $t5, $s6 -/* 0D5FF8 7F0A14C8 00005812 */ mflo $t3 -/* 0D5FFC 7F0A14CC 012B7821 */ addu $t7, $t1, $t3 -/* 0D6000 7F0A14D0 ADE10028 */ sw $at, 0x28($t7) -/* 0D6004 7F0A14D4 8EB80004 */ lw $t8, 4($s5) -/* 0D6008 7F0A14D8 ADF8002C */ sw $t8, 0x2c($t7) -/* 0D600C 7F0A14DC 8EA10008 */ lw $at, 8($s5) -/* 0D6010 7F0A14E0 ADE10030 */ sw $at, 0x30($t7) -/* 0D6014 7F0A14E4 8EB8000C */ lw $t8, 0xc($s5) -/* 0D6018 7F0A14E8 ADF80034 */ sw $t8, 0x34($t7) -/* 0D601C 7F0A14EC 8E4A0000 */ lw $t2, ($s2) -/* 0D6020 7F0A14F0 8E680000 */ lw $t0, ($s3) -/* 0D6024 7F0A14F4 8EA10000 */ lw $at, ($s5) -/* 0D6028 7F0A14F8 01560019 */ multu $t2, $s6 -/* 0D602C 7F0A14FC 0000C812 */ mflo $t9 -/* 0D6030 7F0A1500 01196021 */ addu $t4, $t0, $t9 -/* 0D6034 7F0A1504 AD810038 */ sw $at, 0x38($t4) -/* 0D6038 7F0A1508 8EA90004 */ lw $t1, 4($s5) -/* 0D603C 7F0A150C AD89003C */ sw $t1, 0x3c($t4) -/* 0D6040 7F0A1510 8EA10008 */ lw $at, 8($s5) -/* 0D6044 7F0A1514 AD810040 */ sw $at, 0x40($t4) -/* 0D6048 7F0A1518 8EA9000C */ lw $t1, 0xc($s5) -/* 0D604C 7F0A151C AD890044 */ sw $t1, 0x44($t4) -/* 0D6050 7F0A1520 C7A800C4 */ lwc1 $f8, 0xc4($sp) -/* 0D6054 7F0A1524 C7A4009C */ lwc1 $f4, 0x9c($sp) -/* 0D6058 7F0A1528 C7A600B8 */ lwc1 $f6, 0xb8($sp) -/* 0D605C 7F0A152C C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 0D6060 7F0A1530 46082002 */ mul.s $f0, $f4, $f8 -/* 0D6064 7F0A1534 C7A400A0 */ lwc1 $f4, 0xa0($sp) -/* 0D6068 7F0A1538 46065082 */ mul.s $f2, $f10, $f6 -/* 0D606C 7F0A153C E7A0004C */ swc1 $f0, 0x4c($sp) -/* 0D6070 7F0A1540 46002201 */ sub.s $f8, $f4, $f0 -/* 0D6074 7F0A1544 E7A20048 */ swc1 $f2, 0x48($sp) -/* 0D6078 7F0A1548 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D607C 7F0A154C 46024301 */ sub.s $f12, $f8, $f2 -/* 0D6080 7F0A1550 8E4E0000 */ lw $t6, ($s2) -/* 0D6084 7F0A1554 8E6B0000 */ lw $t3, ($s3) -/* 0D6088 7F0A1558 44804000 */ mtc1 $zero, $f8 -/* 0D608C 7F0A155C 01D60019 */ multu $t6, $s6 -/* 0D6090 7F0A1560 00007812 */ mflo $t7 -/* 0D6094 7F0A1564 016FC021 */ addu $t8, $t3, $t7 -/* 0D6098 7F0A1568 A7020008 */ sh $v0, 8($t8) -/* 0D609C 7F0A156C C7A600B4 */ lwc1 $f6, 0xb4($sp) -/* 0D60A0 7F0A1570 C7AA0098 */ lwc1 $f10, 0x98($sp) -/* 0D60A4 7F0A1574 C7A400A4 */ lwc1 $f4, 0xa4($sp) -/* 0D60A8 7F0A1578 46065002 */ mul.s $f0, $f10, $f6 -/* 0D60AC 7F0A157C 46082281 */ sub.s $f10, $f4, $f8 -/* 0D60B0 7F0A1580 46005301 */ sub.s $f12, $f10, $f0 -/* 0D60B4 7F0A1584 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D60B8 7F0A1588 E7A00044 */ swc1 $f0, 0x44($sp) -/* 0D60BC 7F0A158C 8E480000 */ lw $t0, ($s2) -/* 0D60C0 7F0A1590 8E6A0000 */ lw $t2, ($s3) -/* 0D60C4 7F0A1594 01160019 */ multu $t0, $s6 -/* 0D60C8 7F0A1598 0000C812 */ mflo $t9 -/* 0D60CC 7F0A159C 01596821 */ addu $t5, $t2, $t9 -/* 0D60D0 7F0A15A0 A5A2000A */ sh $v0, 0xa($t5) -/* 0D60D4 7F0A15A4 C7A400BC */ lwc1 $f4, 0xbc($sp) -/* 0D60D8 7F0A15A8 C7A6009C */ lwc1 $f6, 0x9c($sp) -/* 0D60DC 7F0A15AC C7AA00B0 */ lwc1 $f10, 0xb0($sp) -/* 0D60E0 7F0A15B0 C7A80098 */ lwc1 $f8, 0x98($sp) -/* 0D60E4 7F0A15B4 46043002 */ mul.s $f0, $f6, $f4 -/* 0D60E8 7F0A15B8 C7A600A8 */ lwc1 $f6, 0xa8($sp) -/* 0D60EC 7F0A15BC 460A4082 */ mul.s $f2, $f8, $f10 -/* 0D60F0 7F0A15C0 E7A00040 */ swc1 $f0, 0x40($sp) -/* 0D60F4 7F0A15C4 46003101 */ sub.s $f4, $f6, $f0 -/* 0D60F8 7F0A15C8 E7A2003C */ swc1 $f2, 0x3c($sp) -/* 0D60FC 7F0A15CC 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D6100 7F0A15D0 46022301 */ sub.s $f12, $f4, $f2 -/* 0D6104 7F0A15D4 8E490000 */ lw $t1, ($s2) -/* 0D6108 7F0A15D8 8E6C0000 */ lw $t4, ($s3) -/* 0D610C 7F0A15DC 3C108009 */ lui $s0, %hi(impactimages) -/* 0D6110 7F0A15E0 01360019 */ multu $t1, $s6 -/* 0D6114 7F0A15E4 2610D0BC */ addiu $s0, %lo(impactimages) # addiu $s0, $s0, -0x2f44 -/* 0D6118 7F0A15E8 00007012 */ mflo $t6 -/* 0D611C 7F0A15EC 018E5821 */ addu $t3, $t4, $t6 -/* 0D6120 7F0A15F0 A562000C */ sh $v0, 0xc($t3) -/* 0D6124 7F0A15F4 8E580000 */ lw $t8, ($s2) -/* 0D6128 7F0A15F8 8E6F0000 */ lw $t7, ($s3) -/* 0D612C 7F0A15FC 03160019 */ multu $t8, $s6 -/* 0D6130 7F0A1600 00004012 */ mflo $t0 -/* 0D6134 7F0A1604 01E85021 */ addu $t2, $t7, $t0 -/* 0D6138 7F0A1608 A5400010 */ sh $zero, 0x10($t2) -/* 0D613C 7F0A160C 8E4B0000 */ lw $t3, ($s2) -/* 0D6140 7F0A1610 8E190000 */ lw $t9, ($s0) -/* 0D6144 7F0A1614 8E6E0000 */ lw $t6, ($s3) -/* 0D6148 7F0A1618 01760019 */ multu $t3, $s6 -/* 0D614C 7F0A161C 03346821 */ addu $t5, $t9, $s4 -/* 0D6150 7F0A1620 91A90005 */ lbu $t1, 5($t5) -/* 0D6154 7F0A1624 00096140 */ sll $t4, $t1, 5 -/* 0D6158 7F0A1628 0000C012 */ mflo $t8 -/* 0D615C 7F0A162C 01D87821 */ addu $t7, $t6, $t8 -/* 0D6160 7F0A1630 A5EC0012 */ sh $t4, 0x12($t7) -/* 0D6164 7F0A1634 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0D6168 7F0A1638 C7A800A0 */ lwc1 $f8, 0xa0($sp) -/* 0D616C 7F0A163C C7A40048 */ lwc1 $f4, 0x48($sp) -/* 0D6170 7F0A1640 460A4181 */ sub.s $f6, $f8, $f10 -/* 0D6174 7F0A1644 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D6178 7F0A1648 46043300 */ add.s $f12, $f6, $f4 -/* 0D617C 7F0A164C 8E4A0000 */ lw $t2, ($s2) -/* 0D6180 7F0A1650 8E680000 */ lw $t0, ($s3) -/* 0D6184 7F0A1654 44805000 */ mtc1 $zero, $f10 -/* 0D6188 7F0A1658 01560019 */ multu $t2, $s6 -/* 0D618C 7F0A165C 0000C812 */ mflo $t9 -/* 0D6190 7F0A1660 01196821 */ addu $t5, $t0, $t9 -/* 0D6194 7F0A1664 A5A20018 */ sh $v0, 0x18($t5) -/* 0D6198 7F0A1668 C7A800A4 */ lwc1 $f8, 0xa4($sp) -/* 0D619C 7F0A166C C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0D61A0 7F0A1670 460A4181 */ sub.s $f6, $f8, $f10 -/* 0D61A4 7F0A1674 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D61A8 7F0A1678 46043300 */ add.s $f12, $f6, $f4 -/* 0D61AC 7F0A167C 8E4B0000 */ lw $t3, ($s2) -/* 0D61B0 7F0A1680 8E690000 */ lw $t1, ($s3) -/* 0D61B4 7F0A1684 01760019 */ multu $t3, $s6 -/* 0D61B8 7F0A1688 00007012 */ mflo $t6 -/* 0D61BC 7F0A168C 012EC021 */ addu $t8, $t1, $t6 -/* 0D61C0 7F0A1690 A702001A */ sh $v0, 0x1a($t8) -/* 0D61C4 7F0A1694 C7AA0040 */ lwc1 $f10, 0x40($sp) -/* 0D61C8 7F0A1698 C7A800A8 */ lwc1 $f8, 0xa8($sp) -/* 0D61CC 7F0A169C C7A4003C */ lwc1 $f4, 0x3c($sp) -/* 0D61D0 7F0A16A0 460A4181 */ sub.s $f6, $f8, $f10 -/* 0D61D4 7F0A16A4 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D61D8 7F0A16A8 46043300 */ add.s $f12, $f6, $f4 -/* 0D61DC 7F0A16AC 8E4F0000 */ lw $t7, ($s2) -/* 0D61E0 7F0A16B0 8E6C0000 */ lw $t4, ($s3) -/* 0D61E4 7F0A16B4 01F60019 */ multu $t7, $s6 -/* 0D61E8 7F0A16B8 00005012 */ mflo $t2 -/* 0D61EC 7F0A16BC 018A4021 */ addu $t0, $t4, $t2 -/* 0D61F0 7F0A16C0 A502001C */ sh $v0, 0x1c($t0) -/* 0D61F4 7F0A16C4 8E4D0000 */ lw $t5, ($s2) -/* 0D61F8 7F0A16C8 8E790000 */ lw $t9, ($s3) -/* 0D61FC 7F0A16CC 01B60019 */ multu $t5, $s6 -/* 0D6200 7F0A16D0 00005812 */ mflo $t3 -/* 0D6204 7F0A16D4 032B4821 */ addu $t1, $t9, $t3 -/* 0D6208 7F0A16D8 A5200020 */ sh $zero, 0x20($t1) -/* 0D620C 7F0A16DC 8E580000 */ lw $t8, ($s2) -/* 0D6210 7F0A16E0 8E6E0000 */ lw $t6, ($s3) -/* 0D6214 7F0A16E4 03160019 */ multu $t8, $s6 -/* 0D6218 7F0A16E8 00007812 */ mflo $t7 -/* 0D621C 7F0A16EC 01CF6021 */ addu $t4, $t6, $t7 -/* 0D6220 7F0A16F0 A5800022 */ sh $zero, 0x22($t4) -/* 0D6224 7F0A16F4 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0D6228 7F0A16F8 C7A800A0 */ lwc1 $f8, 0xa0($sp) -/* 0D622C 7F0A16FC C7A40048 */ lwc1 $f4, 0x48($sp) -/* 0D6230 7F0A1700 460A4180 */ add.s $f6, $f8, $f10 -/* 0D6234 7F0A1704 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D6238 7F0A1708 46043300 */ add.s $f12, $f6, $f4 -/* 0D623C 7F0A170C 8E480000 */ lw $t0, ($s2) -/* 0D6240 7F0A1710 8E6A0000 */ lw $t2, ($s3) -/* 0D6244 7F0A1714 44805000 */ mtc1 $zero, $f10 -/* 0D6248 7F0A1718 01160019 */ multu $t0, $s6 -/* 0D624C 7F0A171C 00006812 */ mflo $t5 -/* 0D6250 7F0A1720 014DC821 */ addu $t9, $t2, $t5 -/* 0D6254 7F0A1724 A7220028 */ sh $v0, 0x28($t9) -/* 0D6258 7F0A1728 C7A800A4 */ lwc1 $f8, 0xa4($sp) -/* 0D625C 7F0A172C C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0D6260 7F0A1730 460A4180 */ add.s $f6, $f8, $f10 -/* 0D6264 7F0A1734 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D6268 7F0A1738 46043300 */ add.s $f12, $f6, $f4 -/* 0D626C 7F0A173C 8E490000 */ lw $t1, ($s2) -/* 0D6270 7F0A1740 8E6B0000 */ lw $t3, ($s3) -/* 0D6274 7F0A1744 01360019 */ multu $t1, $s6 -/* 0D6278 7F0A1748 0000C012 */ mflo $t8 -/* 0D627C 7F0A174C 01787021 */ addu $t6, $t3, $t8 -/* 0D6280 7F0A1750 A5C2002A */ sh $v0, 0x2a($t6) -/* 0D6284 7F0A1754 C7AA0040 */ lwc1 $f10, 0x40($sp) -/* 0D6288 7F0A1758 C7A800A8 */ lwc1 $f8, 0xa8($sp) -/* 0D628C 7F0A175C C7A4003C */ lwc1 $f4, 0x3c($sp) -/* 0D6290 7F0A1760 460A4180 */ add.s $f6, $f8, $f10 -/* 0D6294 7F0A1764 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D6298 7F0A1768 46043300 */ add.s $f12, $f6, $f4 -/* 0D629C 7F0A176C 8E4C0000 */ lw $t4, ($s2) -/* 0D62A0 7F0A1770 8E6F0000 */ lw $t7, ($s3) -/* 0D62A4 7F0A1774 01960019 */ multu $t4, $s6 -/* 0D62A8 7F0A1778 00004012 */ mflo $t0 -/* 0D62AC 7F0A177C 01E85021 */ addu $t2, $t7, $t0 -/* 0D62B0 7F0A1780 A542002C */ sh $v0, 0x2c($t2) -/* 0D62B4 7F0A1784 8E4E0000 */ lw $t6, ($s2) -/* 0D62B8 7F0A1788 8E0D0000 */ lw $t5, ($s0) -/* 0D62BC 7F0A178C 8E780000 */ lw $t8, ($s3) -/* 0D62C0 7F0A1790 01D60019 */ multu $t6, $s6 -/* 0D62C4 7F0A1794 01B4C821 */ addu $t9, $t5, $s4 -/* 0D62C8 7F0A1798 93290004 */ lbu $t1, 4($t9) -/* 0D62CC 7F0A179C 00095940 */ sll $t3, $t1, 5 -/* 0D62D0 7F0A17A0 00006012 */ mflo $t4 -/* 0D62D4 7F0A17A4 030C7821 */ addu $t7, $t8, $t4 -/* 0D62D8 7F0A17A8 A5EB0030 */ sh $t3, 0x30($t7) -/* 0D62DC 7F0A17AC 8E4A0000 */ lw $t2, ($s2) -/* 0D62E0 7F0A17B0 8E680000 */ lw $t0, ($s3) -/* 0D62E4 7F0A17B4 01560019 */ multu $t2, $s6 -/* 0D62E8 7F0A17B8 00006812 */ mflo $t5 -/* 0D62EC 7F0A17BC 010DC821 */ addu $t9, $t0, $t5 -/* 0D62F0 7F0A17C0 A7200032 */ sh $zero, 0x32($t9) -/* 0D62F4 7F0A17C4 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0D62F8 7F0A17C8 C7A800A0 */ lwc1 $f8, 0xa0($sp) -/* 0D62FC 7F0A17CC C7A40048 */ lwc1 $f4, 0x48($sp) -/* 0D6300 7F0A17D0 460A4180 */ add.s $f6, $f8, $f10 -/* 0D6304 7F0A17D4 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D6308 7F0A17D8 46043301 */ sub.s $f12, $f6, $f4 -/* 0D630C 7F0A17DC 8E4E0000 */ lw $t6, ($s2) -/* 0D6310 7F0A17E0 8E690000 */ lw $t1, ($s3) -/* 0D6314 7F0A17E4 44805000 */ mtc1 $zero, $f10 -/* 0D6318 7F0A17E8 01D60019 */ multu $t6, $s6 -/* 0D631C 7F0A17EC 0000C012 */ mflo $t8 -/* 0D6320 7F0A17F0 01386021 */ addu $t4, $t1, $t8 -/* 0D6324 7F0A17F4 A5820038 */ sh $v0, 0x38($t4) -/* 0D6328 7F0A17F8 C7A800A4 */ lwc1 $f8, 0xa4($sp) -/* 0D632C 7F0A17FC C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0D6330 7F0A1800 460A4180 */ add.s $f6, $f8, $f10 -/* 0D6334 7F0A1804 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D6338 7F0A1808 46043301 */ sub.s $f12, $f6, $f4 -/* 0D633C 7F0A180C 8E4F0000 */ lw $t7, ($s2) -/* 0D6340 7F0A1810 8E6B0000 */ lw $t3, ($s3) -/* 0D6344 7F0A1814 01F60019 */ multu $t7, $s6 -/* 0D6348 7F0A1818 00005012 */ mflo $t2 -/* 0D634C 7F0A181C 016A4021 */ addu $t0, $t3, $t2 -/* 0D6350 7F0A1820 A502003A */ sh $v0, 0x3a($t0) -/* 0D6354 7F0A1824 C7AA0040 */ lwc1 $f10, 0x40($sp) -/* 0D6358 7F0A1828 C7A800A8 */ lwc1 $f8, 0xa8($sp) -/* 0D635C 7F0A182C C7A4003C */ lwc1 $f4, 0x3c($sp) -/* 0D6360 7F0A1830 460A4180 */ add.s $f6, $f8, $f10 -/* 0D6364 7F0A1834 0FC2831D */ jal sub_GAME_7F0A0C74 -/* 0D6368 7F0A1838 46043301 */ sub.s $f12, $f6, $f4 -/* 0D636C 7F0A183C 8E590000 */ lw $t9, ($s2) -/* 0D6370 7F0A1840 8E6D0000 */ lw $t5, ($s3) -/* 0D6374 7F0A1844 00008825 */ move $s1, $zero -/* 0D6378 7F0A1848 03360019 */ multu $t9, $s6 -/* 0D637C 7F0A184C 24150028 */ li $s5, 40 -/* 0D6380 7F0A1850 00007012 */ mflo $t6 -/* 0D6384 7F0A1854 01AE4821 */ addu $t1, $t5, $t6 -/* 0D6388 7F0A1858 A522003C */ sh $v0, 0x3c($t1) -/* 0D638C 7F0A185C 8E480000 */ lw $t0, ($s2) -/* 0D6390 7F0A1860 8E180000 */ lw $t8, ($s0) -/* 0D6394 7F0A1864 8E6A0000 */ lw $t2, ($s3) -/* 0D6398 7F0A1868 01160019 */ multu $t0, $s6 -/* 0D639C 7F0A186C 03146021 */ addu $t4, $t8, $s4 -/* 0D63A0 7F0A1870 918F0004 */ lbu $t7, 4($t4) -/* 0D63A4 7F0A1874 000F5940 */ sll $t3, $t7, 5 -/* 0D63A8 7F0A1878 0000C812 */ mflo $t9 -/* 0D63AC 7F0A187C 01596821 */ addu $t5, $t2, $t9 -/* 0D63B0 7F0A1880 A5AB0040 */ sh $t3, 0x40($t5) -/* 0D63B4 7F0A1884 8E480000 */ lw $t0, ($s2) -/* 0D63B8 7F0A1888 8E0E0000 */ lw $t6, ($s0) -/* 0D63BC 7F0A188C 8E6F0000 */ lw $t7, ($s3) -/* 0D63C0 7F0A1890 01160019 */ multu $t0, $s6 -/* 0D63C4 7F0A1894 01D44821 */ addu $t1, $t6, $s4 -/* 0D63C8 7F0A1898 91380005 */ lbu $t8, 5($t1) -/* 0D63CC 7F0A189C 241400FF */ li $s4, 255 -/* 0D63D0 7F0A18A0 00186140 */ sll $t4, $t8, 5 -/* 0D63D4 7F0A18A4 00005012 */ mflo $t2 -/* 0D63D8 7F0A18A8 01EAC821 */ addu $t9, $t7, $t2 -/* 0D63DC 7F0A18AC A72C0042 */ sh $t4, 0x42($t9) -/* 0D63E0 7F0A18B0 93A40061 */ lbu $a0, 0x61($sp) -/* 0D63E4 7F0A18B4 93A50062 */ lbu $a1, 0x62($sp) -.L7F0A18B8: -/* 0D63E8 7F0A18B8 8FAB0050 */ lw $t3, 0x50($sp) -/* 0D63EC 7F0A18BC 24010001 */ li $at, 1 -/* 0D63F0 7F0A18C0 91620008 */ lbu $v0, 8($t3) -/* 0D63F4 7F0A18C4 10400013 */ beqz $v0, .L7F0A1914 -/* 0D63F8 7F0A18C8 00000000 */ nop -/* 0D63FC 7F0A18CC 10410005 */ beq $v0, $at, .L7F0A18E4 -/* 0D6400 7F0A18D0 24010002 */ li $at, 2 -/* 0D6404 7F0A18D4 1041001A */ beq $v0, $at, .L7F0A1940 -/* 0D6408 7F0A18D8 00000000 */ nop -/* 0D640C 7F0A18DC 1000002E */ b .L7F0A1998 -/* 0D6410 7F0A18E0 00008025 */ move $s0, $zero -.L7F0A18E4: -/* 0D6414 7F0A18E4 0C002914 */ jal randomGetNext -/* 0D6418 7F0A18E8 00000000 */ nop -/* 0D641C 7F0A18EC 0055001B */ divu $zero, $v0, $s5 -/* 0D6420 7F0A18F0 00006810 */ mfhi $t5 -/* 0D6424 7F0A18F4 028D1823 */ subu $v1, $s4, $t5 -/* 0D6428 7F0A18F8 16A00002 */ bnez $s5, .L7F0A1904 -/* 0D642C 7F0A18FC 00000000 */ nop -/* 0D6430 7F0A1900 0007000D */ break 7 -.L7F0A1904: -/* 0D6434 7F0A1904 306400FF */ andi $a0, $v1, 0xff -/* 0D6438 7F0A1908 306500FF */ andi $a1, $v1, 0xff -/* 0D643C 7F0A190C 10000022 */ b .L7F0A1998 -/* 0D6440 7F0A1910 307000FF */ andi $s0, $v1, 0xff -.L7F0A1914: -/* 0D6444 7F0A1914 0C002914 */ jal randomGetNext -/* 0D6448 7F0A1918 00000000 */ nop -/* 0D644C 7F0A191C 0055001B */ divu $zero, $v0, $s5 -/* 0D6450 7F0A1920 00001810 */ mfhi $v1 -/* 0D6454 7F0A1924 306400FF */ andi $a0, $v1, 0xff -/* 0D6458 7F0A1928 16A00002 */ bnez $s5, .L7F0A1934 -/* 0D645C 7F0A192C 00000000 */ nop -/* 0D6460 7F0A1930 0007000D */ break 7 -.L7F0A1934: -/* 0D6464 7F0A1934 306500FF */ andi $a1, $v1, 0xff -/* 0D6468 7F0A1938 10000017 */ b .L7F0A1998 -/* 0D646C 7F0A193C 307000FF */ andi $s0, $v1, 0xff -.L7F0A1940: -/* 0D6470 7F0A1940 0C002914 */ jal randomGetNext -/* 0D6474 7F0A1944 00000000 */ nop -/* 0D6478 7F0A1948 304E0001 */ andi $t6, $v0, 1 -/* 0D647C 7F0A194C 11C00003 */ beqz $t6, .L7F0A195C -/* 0D6480 7F0A1950 00008025 */ move $s0, $zero -/* 0D6484 7F0A1954 10000001 */ b .L7F0A195C -/* 0D6488 7F0A1958 329000FF */ andi $s0, $s4, 0xff -.L7F0A195C: -/* 0D648C 7F0A195C 0C002914 */ jal randomGetNext -/* 0D6490 7F0A1960 00000000 */ nop -/* 0D6494 7F0A1964 30490001 */ andi $t1, $v0, 1 -/* 0D6498 7F0A1968 11200003 */ beqz $t1, .L7F0A1978 -/* 0D649C 7F0A196C 00002825 */ move $a1, $zero -/* 0D64A0 7F0A1970 10000001 */ b .L7F0A1978 -/* 0D64A4 7F0A1974 328500FF */ andi $a1, $s4, 0xff -.L7F0A1978: -/* 0D64A8 7F0A1978 0C002914 */ jal randomGetNext -/* 0D64AC 7F0A197C A3A50062 */ sb $a1, 0x62($sp) -/* 0D64B0 7F0A1980 30580001 */ andi $t8, $v0, 1 -/* 0D64B4 7F0A1984 13000003 */ beqz $t8, .L7F0A1994 -/* 0D64B8 7F0A1988 93A50062 */ lbu $a1, 0x62($sp) -/* 0D64BC 7F0A198C 10000002 */ b .L7F0A1998 -/* 0D64C0 7F0A1990 328400FF */ andi $a0, $s4, 0xff -.L7F0A1994: -/* 0D64C4 7F0A1994 00002025 */ move $a0, $zero -.L7F0A1998: -/* 0D64C8 7F0A1998 8E4F0000 */ lw $t7, ($s2) -/* 0D64CC 7F0A199C 8E680000 */ lw $t0, ($s3) -/* 0D64D0 7F0A19A0 24010040 */ li $at, 64 -/* 0D64D4 7F0A19A4 000F5080 */ sll $t2, $t7, 2 -/* 0D64D8 7F0A19A8 014F5021 */ addu $t2, $t2, $t7 -/* 0D64DC 7F0A19AC 000A5100 */ sll $t2, $t2, 4 -/* 0D64E0 7F0A19B0 010A6021 */ addu $t4, $t0, $t2 -/* 0D64E4 7F0A19B4 0191C821 */ addu $t9, $t4, $s1 -/* 0D64E8 7F0A19B8 A3300014 */ sb $s0, 0x14($t9) -/* 0D64EC 7F0A19BC 8E4D0000 */ lw $t5, ($s2) -/* 0D64F0 7F0A19C0 8E6B0000 */ lw $t3, ($s3) -/* 0D64F4 7F0A19C4 000D7080 */ sll $t6, $t5, 2 -/* 0D64F8 7F0A19C8 01CD7021 */ addu $t6, $t6, $t5 -/* 0D64FC 7F0A19CC 000E7100 */ sll $t6, $t6, 4 -/* 0D6500 7F0A19D0 016E4821 */ addu $t1, $t3, $t6 -/* 0D6504 7F0A19D4 0131C021 */ addu $t8, $t1, $s1 -/* 0D6508 7F0A19D8 A3050015 */ sb $a1, 0x15($t8) -/* 0D650C 7F0A19DC 8E480000 */ lw $t0, ($s2) -/* 0D6510 7F0A19E0 8E6F0000 */ lw $t7, ($s3) -/* 0D6514 7F0A19E4 00085080 */ sll $t2, $t0, 2 -/* 0D6518 7F0A19E8 01485021 */ addu $t2, $t2, $t0 -/* 0D651C 7F0A19EC 000A5100 */ sll $t2, $t2, 4 -/* 0D6520 7F0A19F0 01EA6021 */ addu $t4, $t7, $t2 -/* 0D6524 7F0A19F4 0191C821 */ addu $t9, $t4, $s1 -/* 0D6528 7F0A19F8 A3240016 */ sb $a0, 0x16($t9) -/* 0D652C 7F0A19FC 8E4B0000 */ lw $t3, ($s2) -/* 0D6530 7F0A1A00 8E6D0000 */ lw $t5, ($s3) -/* 0D6534 7F0A1A04 000B7080 */ sll $t6, $t3, 2 -/* 0D6538 7F0A1A08 01CB7021 */ addu $t6, $t6, $t3 -/* 0D653C 7F0A1A0C 000E7100 */ sll $t6, $t6, 4 -/* 0D6540 7F0A1A10 01AE4821 */ addu $t1, $t5, $t6 -/* 0D6544 7F0A1A14 0131C021 */ addu $t8, $t1, $s1 -/* 0D6548 7F0A1A18 26310010 */ addiu $s1, $s1, 0x10 -/* 0D654C 7F0A1A1C 1621FFA6 */ bne $s1, $at, .L7F0A18B8 -/* 0D6550 7F0A1A20 A3140017 */ sb $s4, 0x17($t8) -/* 0D6554 7F0A1A24 8E480000 */ lw $t0, ($s2) -/* 0D6558 7F0A1A28 A3A40061 */ sb $a0, 0x61($sp) -/* 0D655C 7F0A1A2C A3A50062 */ sb $a1, 0x62($sp) -/* 0D6560 7F0A1A30 25040001 */ addiu $a0, $t0, 1 -/* 0D6564 7F0A1A34 28810064 */ slti $at, $a0, 0x64 -/* 0D6568 7F0A1A38 14200003 */ bnez $at, .L7F0A1A48 -/* 0D656C 7F0A1A3C AE440000 */ sw $a0, ($s2) -/* 0D6570 7F0A1A40 AE400000 */ sw $zero, ($s2) -/* 0D6574 7F0A1A44 00002025 */ move $a0, $zero -.L7F0A1A48: -/* 0D6578 7F0A1A48 0FC283A6 */ jal sub_GAME_7F0A0E98 -/* 0D657C 7F0A1A4C 00000000 */ nop -/* 0D6580 7F0A1A50 8E590000 */ lw $t9, ($s2) -/* 0D6584 7F0A1A54 8E6C0000 */ lw $t4, ($s3) -/* 0D6588 7F0A1A58 240AFFFF */ li $t2, -1 -/* 0D658C 7F0A1A5C 03360019 */ multu $t9, $s6 -/* 0D6590 7F0A1A60 00005812 */ mflo $t3 -/* 0D6594 7F0A1A64 018B6821 */ addu $t5, $t4, $t3 -/* 0D6598 7F0A1A68 A5AA0000 */ sh $t2, ($t5) -/* 0D659C 7F0A1A6C 8FBF0034 */ lw $ra, 0x34($sp) -/* 0D65A0 7F0A1A70 8FB60030 */ lw $s6, 0x30($sp) -/* 0D65A4 7F0A1A74 8FB5002C */ lw $s5, 0x2c($sp) -/* 0D65A8 7F0A1A78 8FB40028 */ lw $s4, 0x28($sp) -/* 0D65AC 7F0A1A7C 8FB30024 */ lw $s3, 0x24($sp) -/* 0D65B0 7F0A1A80 8FB20020 */ lw $s2, 0x20($sp) -/* 0D65B4 7F0A1A84 8FB1001C */ lw $s1, 0x1c($sp) -/* 0D65B8 7F0A1A88 8FB00018 */ lw $s0, 0x18($sp) -/* 0D65BC 7F0A1A8C 03E00008 */ jr $ra -/* 0D65C0 7F0A1A90 27BD00F0 */ addiu $sp, $sp, 0xf0 -) -#endif -#ifdef NONMATCHING -void explosionRenderBulletImpactOnProp(void) { +/*** + * Perfect Dark Gfx *smokeRender(struct prop *prop, Gfx *gdl, bool xlupass) + * + * NTSC address 0x7F0A1A94. +*/ +Gfx *explosionRenderBulletImpactOnProp(Gfx *gdl, PropRecord *arg1, s32 arg2) +{ + s32 padding1; + s32 padding2; + + s32 i; // var_s4 + s32 sp50; + struct Scorch *sp4C; + s32 sp48; + union RenderPosView *render_pos; + s32 padding3; + s16 var_s5; + s32 impact_type; + s32 var_v0; + + var_s5 = -1; + sp50 = 0; + sp4C = NULL; + sp48 = -1; + + if (arg1 != NULL) + { + sp4C = arg1->scorch; + } + + gSPClearGeometryMode(gdl++, G_CULL_BOTH); + gDPSetColorDither(gdl++, G_CD_NOISE); + + for (i = 0; i < BULLET_IMPACT_BUFFER_LEN; i++) + { + if (arg1 == g_BulletImpactBuffer[i].prop) + { + if (g_BulletImpactBuffer[i].room >= 0) + { + if (arg1 || getROOMID_isRendered(g_BulletImpactBuffer[i].room)) + { + impact_type = g_BulletImpactBuffer[i].impact_type; + + if (arg2) + { + var_v0 = g_ImpactTypes[impact_type].unk2 < 2 && g_ImpactTypes[impact_type].unk1 == 2; + } + else + { + var_v0 = (g_ImpactTypes[impact_type].unk2 >= 2) || g_ImpactTypes[impact_type].unk1 != 2; + } + + if (var_v0) + { + sp50 = 1; + + if (arg1 != NULL) + { + if (var_s5 != g_BulletImpactBuffer[i].model_render_pos_index) + { + render_pos = &sp4C->model->render_pos[g_BulletImpactBuffer[i].model_render_pos_index]; + var_s5 = g_BulletImpactBuffer[i].model_render_pos_index; + gSPMatrix(gdl++, osVirtualToPhysical(render_pos), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + } + } + else + { + if (var_s5 != g_BulletImpactBuffer[i].room) + { + var_s5 = g_BulletImpactBuffer[i].room; + gdl = applyRoomMatrixToDisplayList(gdl, g_BulletImpactBuffer[i].room); + } + } + + if (sp48 != impact_type) + { + texSelect(&gdl, &impactimages[impact_type], g_ImpactTypes[impact_type].unk1, g_ImpactTypes[impact_type].unk2, 2U); + sp48 = impact_type; + } + + gSPVertex(gdl++, osVirtualToPhysical(g_BulletImpactBuffer[i].vertex_list), 4, 0); + gSP2Triangles(gdl++, 0, 1, 2, 0, 0, 2, 3, 0); + } + } + } + } + } + + if ((arg1 != NULL) && (sp50 == 0)) + { + sp4C->unk02 &= ~(1 << arg2); + } + + gDPSetColorDither(gdl++, G_CD_BAYER); + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel explosionRenderBulletImpactOnProp -/* 0D65C4 7F0A1A94 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 0D65C8 7F0A1A98 AFB60038 */ sw $s6, 0x38($sp) -/* 0D65CC 7F0A1A9C AFB50034 */ sw $s5, 0x34($sp) -/* 0D65D0 7F0A1AA0 240EFFFF */ li $t6, -1 -/* 0D65D4 7F0A1AA4 00A0B025 */ move $s6, $a1 -/* 0D65D8 7F0A1AA8 AFBF0044 */ sw $ra, 0x44($sp) -/* 0D65DC 7F0A1AAC AFBE0040 */ sw $fp, 0x40($sp) -/* 0D65E0 7F0A1AB0 AFB7003C */ sw $s7, 0x3c($sp) -/* 0D65E4 7F0A1AB4 AFB40030 */ sw $s4, 0x30($sp) -/* 0D65E8 7F0A1AB8 AFB3002C */ sw $s3, 0x2c($sp) -/* 0D65EC 7F0A1ABC AFB20028 */ sw $s2, 0x28($sp) -/* 0D65F0 7F0A1AC0 AFB10024 */ sw $s1, 0x24($sp) -/* 0D65F4 7F0A1AC4 AFB00020 */ sw $s0, 0x20($sp) -/* 0D65F8 7F0A1AC8 AFA40060 */ sw $a0, 0x60($sp) -/* 0D65FC 7F0A1ACC AFA60068 */ sw $a2, 0x68($sp) -/* 0D6600 7F0A1AD0 2415FFFF */ li $s5, -1 -/* 0D6604 7F0A1AD4 AFA00050 */ sw $zero, 0x50($sp) -/* 0D6608 7F0A1AD8 AFA0004C */ sw $zero, 0x4c($sp) -/* 0D660C 7F0A1ADC 10A00003 */ beqz $a1, .L7F0A1AEC -/* 0D6610 7F0A1AE0 AFAE0048 */ sw $t6, 0x48($sp) -/* 0D6614 7F0A1AE4 8CAF0004 */ lw $t7, 4($a1) -/* 0D6618 7F0A1AE8 AFAF004C */ sw $t7, 0x4c($sp) -.L7F0A1AEC: -/* 0D661C 7F0A1AEC 8FB80060 */ lw $t8, 0x60($sp) -/* 0D6620 7F0A1AF0 3C08B600 */ lui $t0, 0xb600 -/* 0D6624 7F0A1AF4 24093000 */ li $t1, 12288 -/* 0D6628 7F0A1AF8 27190008 */ addiu $t9, $t8, 8 -/* 0D662C 7F0A1AFC AFB90060 */ sw $t9, 0x60($sp) -/* 0D6630 7F0A1B00 AF090004 */ sw $t1, 4($t8) -/* 0D6634 7F0A1B04 AF080000 */ sw $t0, ($t8) -/* 0D6638 7F0A1B08 8FAA0060 */ lw $t2, 0x60($sp) -/* 0D663C 7F0A1B0C 3C0CBA00 */ lui $t4, (0xBA000602 >> 16) # lui $t4, 0xba00 -/* 0D6640 7F0A1B10 358C0602 */ ori $t4, (0xBA000602 & 0xFFFF) # ori $t4, $t4, 0x602 -/* 0D6644 7F0A1B14 254B0008 */ addiu $t3, $t2, 8 -/* 0D6648 7F0A1B18 AFAB0060 */ sw $t3, 0x60($sp) -/* 0D664C 7F0A1B1C 240D0080 */ li $t5, 128 -/* 0D6650 7F0A1B20 3C1E8004 */ lui $fp, %hi(D_8004080C) -/* 0D6654 7F0A1B24 3C178008 */ lui $s7, %hi(ptr_bullet_impact_buf) -/* 0D6658 7F0A1B28 26F7A154 */ addiu $s7, %lo(ptr_bullet_impact_buf) # addiu $s7, $s7, -0x5eac -/* 0D665C 7F0A1B2C 27DE080C */ addiu $fp, %lo(D_8004080C) # addiu $fp, $fp, 0x80c -/* 0D6660 7F0A1B30 0000A025 */ move $s4, $zero -/* 0D6664 7F0A1B34 AD4D0004 */ sw $t5, 4($t2) -/* 0D6668 7F0A1B38 AD4C0000 */ sw $t4, ($t2) -/* 0D666C 7F0A1B3C 8EEE0000 */ lw $t6, ($s7) -.L7F0A1B40: -/* 0D6670 7F0A1B40 01D41821 */ addu $v1, $t6, $s4 -/* 0D6674 7F0A1B44 8C6F0048 */ lw $t7, 0x48($v1) -/* 0D6678 7F0A1B48 56CF0068 */ bnel $s6, $t7, .L7F0A1CEC -/* 0D667C 7F0A1B4C 26940050 */ addiu $s4, $s4, 0x50 -/* 0D6680 7F0A1B50 84650000 */ lh $a1, ($v1) -/* 0D6684 7F0A1B54 04A20065 */ bltzl $a1, .L7F0A1CEC -/* 0D6688 7F0A1B58 26940050 */ addiu $s4, $s4, 0x50 -/* 0D668C 7F0A1B5C 56C00008 */ bnezl $s6, .L7F0A1B80 -/* 0D6690 7F0A1B60 8FB90068 */ lw $t9, 0x68($sp) -/* 0D6694 7F0A1B64 0FC2D794 */ jal getROOMID_Bitflags -/* 0D6698 7F0A1B68 00A02025 */ move $a0, $a1 -/* 0D669C 7F0A1B6C 5040005F */ beql $v0, $zero, .L7F0A1CEC -/* 0D66A0 7F0A1B70 26940050 */ addiu $s4, $s4, 0x50 -/* 0D66A4 7F0A1B74 8EF80000 */ lw $t8, ($s7) -/* 0D66A8 7F0A1B78 03141821 */ addu $v1, $t8, $s4 -/* 0D66AC 7F0A1B7C 8FB90068 */ lw $t9, 0x68($sp) -.L7F0A1B80: -/* 0D66B0 7F0A1B80 84730002 */ lh $s3, 2($v1) -/* 0D66B4 7F0A1B84 240C0001 */ li $t4, 1 -/* 0D66B8 7F0A1B88 1320000D */ beqz $t9, .L7F0A1BC0 -/* 0D66BC 7F0A1B8C 00139080 */ sll $s2, $s3, 2 -/* 0D66C0 7F0A1B90 00139080 */ sll $s2, $s3, 2 -/* 0D66C4 7F0A1B94 02539023 */ subu $s2, $s2, $s3 -/* 0D66C8 7F0A1B98 00129080 */ sll $s2, $s2, 2 -/* 0D66CC 7F0A1B9C 03D28021 */ addu $s0, $fp, $s2 -/* 0D66D0 7F0A1BA0 9202000A */ lbu $v0, 0xa($s0) -/* 0D66D4 7F0A1BA4 28480002 */ slti $t0, $v0, 2 -/* 0D66D8 7F0A1BA8 11000010 */ beqz $t0, .L7F0A1BEC -/* 0D66DC 7F0A1BAC 01001025 */ move $v0, $t0 -/* 0D66E0 7F0A1BB0 92020009 */ lbu $v0, 9($s0) -/* 0D66E4 7F0A1BB4 38490002 */ xori $t1, $v0, 2 -/* 0D66E8 7F0A1BB8 1000000C */ b .L7F0A1BEC -/* 0D66EC 7F0A1BBC 2D220001 */ sltiu $v0, $t1, 1 -.L7F0A1BC0: -/* 0D66F0 7F0A1BC0 02539023 */ subu $s2, $s2, $s3 -/* 0D66F4 7F0A1BC4 00129080 */ sll $s2, $s2, 2 -/* 0D66F8 7F0A1BC8 03D28021 */ addu $s0, $fp, $s2 -/* 0D66FC 7F0A1BCC 9202000A */ lbu $v0, 0xa($s0) -/* 0D6700 7F0A1BD0 284A0002 */ slti $t2, $v0, 2 -/* 0D6704 7F0A1BD4 39420001 */ xori $v0, $t2, 1 -/* 0D6708 7F0A1BD8 14400004 */ bnez $v0, .L7F0A1BEC -/* 0D670C 7F0A1BDC 00000000 */ nop -/* 0D6710 7F0A1BE0 92020009 */ lbu $v0, 9($s0) -/* 0D6714 7F0A1BE4 384B0002 */ xori $t3, $v0, 2 -/* 0D6718 7F0A1BE8 000B102B */ sltu $v0, $zero, $t3 -.L7F0A1BEC: -/* 0D671C 7F0A1BEC 5040003F */ beql $v0, $zero, .L7F0A1CEC -/* 0D6720 7F0A1BF0 26940050 */ addiu $s4, $s4, 0x50 -/* 0D6724 7F0A1BF4 12C00014 */ beqz $s6, .L7F0A1C48 -/* 0D6728 7F0A1BF8 AFAC0050 */ sw $t4, 0x50($sp) -/* 0D672C 7F0A1BFC 8062004C */ lb $v0, 0x4c($v1) -/* 0D6730 7F0A1C00 8FAE004C */ lw $t6, 0x4c($sp) -/* 0D6734 7F0A1C04 8FB10060 */ lw $s1, 0x60($sp) -/* 0D6738 7F0A1C08 12A20018 */ beq $s5, $v0, .L7F0A1C6C -/* 0D673C 7F0A1C0C 00026980 */ sll $t5, $v0, 6 -/* 0D6740 7F0A1C10 8DCF0014 */ lw $t7, 0x14($t6) -/* 0D6744 7F0A1C14 0002AC00 */ sll $s5, $v0, 0x10 -/* 0D6748 7F0A1C18 26290008 */ addiu $t1, $s1, 8 -/* 0D674C 7F0A1C1C 8DF8000C */ lw $t8, 0xc($t7) -/* 0D6750 7F0A1C20 3C0A0102 */ lui $t2, (0x01020040 >> 16) # lui $t2, 0x102 -/* 0D6754 7F0A1C24 0015CC03 */ sra $t9, $s5, 0x10 -/* 0D6758 7F0A1C28 354A0040 */ ori $t2, (0x01020040 & 0xFFFF) # ori $t2, $t2, 0x40 -/* 0D675C 7F0A1C2C AFA90060 */ sw $t1, 0x60($sp) -/* 0D6760 7F0A1C30 0320A825 */ move $s5, $t9 -/* 0D6764 7F0A1C34 AE2A0000 */ sw $t2, ($s1) -/* 0D6768 7F0A1C38 0C003A2C */ jal osVirtualToPhysical -/* 0D676C 7F0A1C3C 01B82021 */ addu $a0, $t5, $t8 -/* 0D6770 7F0A1C40 1000000A */ b .L7F0A1C6C -/* 0D6774 7F0A1C44 AE220004 */ sw $v0, 4($s1) -.L7F0A1C48: -/* 0D6778 7F0A1C48 84650000 */ lh $a1, ($v1) -/* 0D677C 7F0A1C4C 8FA40060 */ lw $a0, 0x60($sp) -/* 0D6780 7F0A1C50 52A50007 */ beql $s5, $a1, .L7F0A1C70 -/* 0D6784 7F0A1C54 8FAC0048 */ lw $t4, 0x48($sp) -/* 0D6788 7F0A1C58 0005AC00 */ sll $s5, $a1, 0x10 -/* 0D678C 7F0A1C5C 00155C03 */ sra $t3, $s5, 0x10 -/* 0D6790 7F0A1C60 0FC2F271 */ jal sub_GAME_7F0BC9C4 -/* 0D6794 7F0A1C64 0160A825 */ move $s5, $t3 -/* 0D6798 7F0A1C68 AFA20060 */ sw $v0, 0x60($sp) -.L7F0A1C6C: -/* 0D679C 7F0A1C6C 8FAC0048 */ lw $t4, 0x48($sp) -.L7F0A1C70: -/* 0D67A0 7F0A1C70 27A40060 */ addiu $a0, $sp, 0x60 -/* 0D67A4 7F0A1C74 3C0E8009 */ lui $t6, %hi(impactimages) -/* 0D67A8 7F0A1C78 11930008 */ beq $t4, $s3, .L7F0A1C9C -/* 0D67AC 7F0A1C7C 240F0002 */ li $t7, 2 -/* 0D67B0 7F0A1C80 8DCED0BC */ lw $t6, %lo(impactimages)($t6) -/* 0D67B4 7F0A1C84 92060009 */ lbu $a2, 9($s0) -/* 0D67B8 7F0A1C88 9207000A */ lbu $a3, 0xa($s0) -/* 0D67BC 7F0A1C8C AFAF0010 */ sw $t7, 0x10($sp) -/* 0D67C0 7F0A1C90 0FC1DB5A */ jal likely_generate_DL_for_image_declaration -/* 0D67C4 7F0A1C94 024E2821 */ addu $a1, $s2, $t6 -/* 0D67C8 7F0A1C98 AFB30048 */ sw $s3, 0x48($sp) -.L7F0A1C9C: -/* 0D67CC 7F0A1C9C 8FB00060 */ lw $s0, 0x60($sp) -/* 0D67D0 7F0A1CA0 3C190430 */ lui $t9, (0x04300040 >> 16) # lui $t9, 0x430 -/* 0D67D4 7F0A1CA4 37390040 */ ori $t9, (0x04300040 & 0xFFFF) # ori $t9, $t9, 0x40 -/* 0D67D8 7F0A1CA8 26180008 */ addiu $t8, $s0, 8 -/* 0D67DC 7F0A1CAC AFB80060 */ sw $t8, 0x60($sp) -/* 0D67E0 7F0A1CB0 AE190000 */ sw $t9, ($s0) -/* 0D67E4 7F0A1CB4 8EE80000 */ lw $t0, ($s7) -/* 0D67E8 7F0A1CB8 01142021 */ addu $a0, $t0, $s4 -/* 0D67EC 7F0A1CBC 0C003A2C */ jal osVirtualToPhysical -/* 0D67F0 7F0A1CC0 24840008 */ addiu $a0, $a0, 8 -/* 0D67F4 7F0A1CC4 AE020004 */ sw $v0, 4($s0) -/* 0D67F8 7F0A1CC8 8FA90060 */ lw $t1, 0x60($sp) -/* 0D67FC 7F0A1CCC 3C0BB100 */ lui $t3, (0xB1000032 >> 16) # lui $t3, 0xb100 -/* 0D6800 7F0A1CD0 356B0032 */ ori $t3, (0xB1000032 & 0xFFFF) # ori $t3, $t3, 0x32 -/* 0D6804 7F0A1CD4 252A0008 */ addiu $t2, $t1, 8 -/* 0D6808 7F0A1CD8 AFAA0060 */ sw $t2, 0x60($sp) -/* 0D680C 7F0A1CDC 240C2010 */ li $t4, 8208 -/* 0D6810 7F0A1CE0 AD2C0004 */ sw $t4, 4($t1) -/* 0D6814 7F0A1CE4 AD2B0000 */ sw $t3, ($t1) -/* 0D6818 7F0A1CE8 26940050 */ addiu $s4, $s4, 0x50 -.L7F0A1CEC: -/* 0D681C 7F0A1CEC 24011F40 */ li $at, 8000 -/* 0D6820 7F0A1CF0 5681FF93 */ bnel $s4, $at, .L7F0A1B40 -/* 0D6824 7F0A1CF4 8EEE0000 */ lw $t6, ($s7) -/* 0D6828 7F0A1CF8 12C0000A */ beqz $s6, .L7F0A1D24 -/* 0D682C 7F0A1CFC 8FAE0050 */ lw $t6, 0x50($sp) -/* 0D6830 7F0A1D00 15C00008 */ bnez $t6, .L7F0A1D24 -/* 0D6834 7F0A1D04 8FAF004C */ lw $t7, 0x4c($sp) -/* 0D6838 7F0A1D08 8FB80068 */ lw $t8, 0x68($sp) -/* 0D683C 7F0A1D0C 91ED0002 */ lbu $t5, 2($t7) -/* 0D6840 7F0A1D10 24190001 */ li $t9, 1 -/* 0D6844 7F0A1D14 03194004 */ sllv $t0, $t9, $t8 -/* 0D6848 7F0A1D18 01004827 */ not $t1, $t0 -/* 0D684C 7F0A1D1C 01A95024 */ and $t2, $t5, $t1 -/* 0D6850 7F0A1D20 A1EA0002 */ sb $t2, 2($t7) -.L7F0A1D24: -/* 0D6854 7F0A1D24 8FAB0060 */ lw $t3, 0x60($sp) -/* 0D6858 7F0A1D28 3C0EBA00 */ lui $t6, (0xBA000602 >> 16) # lui $t6, 0xba00 -/* 0D685C 7F0A1D2C 35CE0602 */ ori $t6, (0xBA000602 & 0xFFFF) # ori $t6, $t6, 0x602 -/* 0D6860 7F0A1D30 256C0008 */ addiu $t4, $t3, 8 -/* 0D6864 7F0A1D34 AFAC0060 */ sw $t4, 0x60($sp) -/* 0D6868 7F0A1D38 24190040 */ li $t9, 64 -/* 0D686C 7F0A1D3C AD790004 */ sw $t9, 4($t3) -/* 0D6870 7F0A1D40 AD6E0000 */ sw $t6, ($t3) -/* 0D6874 7F0A1D44 8FBF0044 */ lw $ra, 0x44($sp) -/* 0D6878 7F0A1D48 8FBE0040 */ lw $fp, 0x40($sp) -/* 0D687C 7F0A1D4C 8FB7003C */ lw $s7, 0x3c($sp) -/* 0D6880 7F0A1D50 8FB60038 */ lw $s6, 0x38($sp) -/* 0D6884 7F0A1D54 8FB50034 */ lw $s5, 0x34($sp) -/* 0D6888 7F0A1D58 8FB40030 */ lw $s4, 0x30($sp) -/* 0D688C 7F0A1D5C 8FB3002C */ lw $s3, 0x2c($sp) -/* 0D6890 7F0A1D60 8FB20028 */ lw $s2, 0x28($sp) -/* 0D6894 7F0A1D64 8FB10024 */ lw $s1, 0x24($sp) -/* 0D6898 7F0A1D68 8FB00020 */ lw $s0, 0x20($sp) -/* 0D689C 7F0A1D6C 8FA20060 */ lw $v0, 0x60($sp) -/* 0D68A0 7F0A1D70 03E00008 */ jr $ra -/* 0D68A4 7F0A1D74 27BD0060 */ addiu $sp, $sp, 0x60 -) -#endif - -Gfx * sub_GAME_7F0A1D78(Gfx *arg0) +Gfx * explosionCallRenderBulletImpactOnProp(Gfx *arg0) { return explosionRenderBulletImpactOnProp(arg0, NULL, 0); } diff --git a/src/game/explosions.h b/src/game/explosions.h index a625338..0f101c6 100644 --- a/src/game/explosions.h +++ b/src/game/explosions.h @@ -3,11 +3,16 @@ #include #include +// Not sure what this was originally, but it looks like there was a multiplier +// applied that compiler factors out. +#define EXPLOSION_DAMAGE_SCALER 1.0f + #define EXPLOSION_BUFFER_LEN 6 #define EXPLOSION_PARTS_LEN 40 #define SMOKE_BUFFER_LEN 20 #define SMOKE_PARTS_LEN 10 #define SCORCH_BUFFER_LEN 20 +#define IMPACT_TYPE_LEN 20 #define BULLET_IMPACT_BUFFER_LEN 100 #define MAX_FLYING_PARTICLES 200 @@ -34,10 +39,10 @@ typedef struct s_explosiontype { f32 explosion_size; f32 explosion_range; f32 dmg_range; - u16 duration; - u16 propagationrate; + s16 duration; + s16 propagationrate; f32 flareanimspeed; - u16 numshrapnelbits; + s16 numshrapnelbits; //u16 field_0x26; f32 shrapnel_size; f32 shrapnel_scatter_dist; @@ -60,189 +65,124 @@ typedef struct s_impacttype { struct ExplosionPart { coord3d pos; - u32 size; - u32 rot; + f32 size; + f32 rot; s16 frame; u8 bb; }; struct Explosion { - PropRecord *prop; - u32 unk04; + PropRecord *prop; // maybe explosion prop + PropRecord *source; // maybe source prop (e.g., crate) struct ExplosionPart parts[EXPLOSION_PARTS_LEN]; - u32 unk3C8; - s8 unk3CC; - u8 unk3CD; - u16 unk3CE; - u32 unk3D0; - u32 unk3D4; - u32 unk3D8; - u32 unk3DC; + s16 age; // some kind of current tick + total elapsed? + s16 unk3CA; // total elapsed? Or "next tick" age? + + s8 explosion_type; + s8 unk3CD; + s8 player; + s8 unk3CF; + + struct coord3d pos; + s16 room; + s16 unk3DE; }; struct SmokePart { coord3d pos; /*0x00*/ f32 size; /*0x0c*/ - u32 rot; /*0x10*/ - u32 deltarot; /*0x14*/ - u32 offset1; /*0x18*/ - u32 offset2; /*0x1c*/ - u32 alpha; /*0x20*/ - u16 count; /*0x24*/ + f32 rot; /*0x10*/ + f32 deltarot; /*0x14*/ + f32 offset1; /*0x18*/ + f32 offset2; /*0x1c*/ + f32 alpha; /*0x20*/ + s16 count; /*0x24*/ }; struct Smoke { PropRecord *prop; - s16 unk04; - s16 unk06; + s16 duration; + s16 smoke_type; struct SmokePart parts[SMOKE_PARTS_LEN]; /*0x008*/ }; struct Scorch { s16 roomid; - s16 unk02; - u32 unk04; - u32 unk08; - u32 unk0C; + u8 unk02; + s8 unk03; - u32 unk10; - u32 unk14; - u32 vertex_list[4]; + struct coord3d pos; + f32 explosion_size; + struct Model *model; - u32 unk28; - u32 unk2C; - - u32 unk30; - u32 unk34; - u32 unk38; - u32 unk3C; - - u32 unk40; - u32 unk44; - u32 unk48; - u32 unk4C; - - u32 unk50; - u32 unk54; + Vtx vertex_list[4]; }; struct BulletImpact { - s16 unk00; - s16 unk02; + s16 room; + s16 impact_type; u32 unk04; - u32 unk08; - u32 unk0C; - - u32 unk10; - u16 unk14; - s8 unk16; - s8 unk17; - u32 unk18; - u32 unk1C; - - u32 unk20; - u16 unk24; - s8 unk26; - s8 unk27; - u32 unk28; - u32 unk2C; - - u32 unk30; - u16 unk34; - s8 unk36; - s8 unk37; - u32 unk38; - u32 unk3C; - - u32 unk40; - u16 unk44; - s8 unk46; - s8 unk47; - PropRecord* unk48; - s8 unk4C; - s8 unk4D; + Vtx vertex_list[4]; + PropRecord* prop; + s8 model_render_pos_index; + s8 room_clear_flag; s16 unk4E; }; -struct FlyingParticles_unk38 { - s16 unk00; - s16 unk02; - s16 unk04; - s16 unk06; - s16 unk08; - s16 unk0A; - s8 unk0C; - s8 unk0D; - s8 unk0E; - u8 unk0F; -}; - struct FlyingParticles { s32 unk00; - // coord3d? - f32 x; - f32 y; - f32 z; - - // coord3d? - f32 unk10; - f32 unk14; - f32 unk18; - - // coord3d? - f32 unk1C; - f32 unk20; - f32 unk24; - - // coord3d? - f32 unk28; - f32 unk2C; - f32 unk30; + struct coord3d position; // 0x04 + struct coord3d rotation; // 0x10 + struct coord3d position_drift; // 0x1c + struct coord3d rotation_drift; // 0x28 s32 unk34; - struct FlyingParticles_unk38 unk38[4]; + Vtx vertex_list[4]; }; -extern f32 D_80040178; -extern char dword_CODE_bss_8007A100[]; -extern struct Smoke *ptr_smoke_buf; -extern struct Explosion *ptr_explosion_buf; +extern f32 g_SpExplosionDamageMult; +extern Mtx dword_CODE_bss_8007A100; +extern struct Smoke *g_SmokeBuffer; +extern struct Explosion *g_ExplosionBuffer; extern s32 max_particles; -extern struct FlyingParticles *ptr_flying_particles_buf; -extern struct Scorch *ptr_scorch_buf; -extern struct BulletImpact *ptr_bullet_impact_buf; -extern s32 numExplosionEntries; -extern s32 numSmokeEntries; -extern s32 numParticleEntries; -extern s32 numScorchEntries; -extern s32 numImpactEntries; - -#if defined(VERSION_JP) || defined(VERSION_EU) -s32 sub_GAME_7F09C250(s32 arg0, struct coord3d *pos, struct StandTile *stan, s16 arg3, s32 flag4, s32 playernum, u8 *rooms, s32 flag7); -#else -void sub_GAME_7F09C250(s32 arg0, struct coord3d *pos, struct StandTile *stan, s16 arg3, s32 flag4, s32 playernum, u8 *rooms, s32 flag7); -#endif +extern struct FlyingParticles *g_FlyingParticlesBuffer; +extern struct Scorch *g_ScorchBuffer; +extern struct BulletImpact *g_BulletImpactBuffer; +extern s32 g_NumExplosionEntries; +extern s32 g_NumSmokeEntries; +extern s32 g_NumParticleEntries; +extern s32 g_NumScorchEntries; +extern s32 g_NumImpactEntries; + +s32 explosionSmokeTick(PropRecord *arg0); void sub_GAME_7F09FD3C(void); -Gfx * sub_GAME_7F0A0034(Gfx *arg0); -Gfx * sub_GAME_7F0A1D78(Gfx *arg0); -Gfx *sub_GAME_7F0A0AB4(Gfx *arg0); -Gfx *unk09c250RenderPropExplosion(PropRecord *arg0, Gfx *arg1); -Gfx *unk09c250RenderPropSmoke(PropRecord *arg0, Gfx *arg1); +Gfx * explosionRenderFlyingParticles(Gfx *arg0); +Gfx * explosionCallRenderBulletImpactOnProp(Gfx *arg0); +Gfx *explosionRenderScorchBuffer(Gfx *arg0); +Gfx *explosionRenderPropExplosion(PropRecord *prop, Gfx *gdl, s32 withalpha); +Gfx *explosionRenderPropSmoke(PropRecord *arg0, Gfx *arg1, s32 withalpha); Gfx *explosionRenderBulletImpactOnProp(Gfx *arg0, PropRecord *arg1, s32 arg2); -void sub_GAME_7F09E700(coord3d *pos, StandTile *stan, s16 arg2, u8 *rooms, s32 arg4); +void explosionCreateSmoke(coord3d *pos, StandTile *stan, s16 smoke_type, u8 *rooms, s32 flags); +void explosionUpdateFlyingParticles(void); +u8 explosionChrpropSmokeTick(PropRecord* prop); +u8 explosionChrpropExplosionTick(PropRecord* prop); +void explosionScreenShake(coord3d* source_pos, coord3d* source_mag, coord3d* result); +void explosionCreateBulletImpact(struct coord3d *pos, struct coord3d *arg1, s16 impact_type, s16 room, PropRecord *prop, s8 model_render_pos_index, s8 room_clear_flag); #if defined(VERSION_JP) || defined(VERSION_EU) -s32 explosionCreate(void *, struct coord3d *pos, struct StandTile *stan, s16 /* enum EXPLOSION_DEF */ explosionType, s32 flag, s32 playernum, u8 *rooms, s32 flag2); +s32 explosionCreate(PropRecord *arg0, struct coord3d *target_pos, StandTile *target_stan, s16 /* enum EXPLOSION_DEF */ explosion_type, s32 arg4, s32 player, u8 *rooms, s32 arg7); +s32 sub_GAME_7F09C250(s32 arg0, struct coord3d *pos, struct StandTile *stan, s16 arg3, s32 flag4, s32 playernum, u8 *rooms, s32 flag7); #else -void explosionCreate(void *, struct coord3d *pos, struct StandTile *stan, s16 /* enum EXPLOSION_DEF */ explosionType, s32 flag, s32 playernum, u8 *rooms, s32 flag2); +void explosionCreate(PropRecord *arg0, struct coord3d *target_pos, StandTile *target_stan, s16 /* enum EXPLOSION_DEF */ explosion_type, s32 arg4, s32 player, u8 *rooms, s32 arg7); +void sub_GAME_7F09C250(s32 arg0, struct coord3d *pos, struct StandTile *stan, s16 arg3, s32 flag4, s32 playernum, u8 *rooms, s32 flag7); #endif #endif diff --git a/src/game/file.c b/src/game/file.c index 4fef22b..752262a 100644 --- a/src/game/file.c +++ b/src/game/file.c @@ -47,7 +47,7 @@ void end_of_mission_briefing(void) { if (!fileGetIsCheatUnlocked(fileGetSaveForFoldernum(selected_folder_num), mission_folder_setup_entries[briefingpage].mission_num)) { - sub_GAME_7F01E760(selected_folder_num, mission_folder_setup_entries[briefingpage].mission_num); + fileSaveFolderUnlockCheat(selected_folder_num, mission_folder_setup_entries[briefingpage].mission_num); g_NewCheatUnlocked = TRUE; return; } @@ -60,7 +60,11 @@ void end_of_mission_briefing(void) void fileLoadSaveSettingsForSelectedFolder(int stage) { - if(stage){} + if(stage){ + #ifdef DEBUG + + #endif + } fileLoadSettingsForFolder(selected_folder_num); } @@ -69,17 +73,17 @@ void deleteCurrentSelectedFolder(void) fileClearSavefileForFolder(selected_folder_num); } -void copyCurrentEEPROMtoStack(void) +void fileUpdateBondInCurrentFolder(void) { - fileCopySaveIfSelectedBondDifferent(selected_folder_num); + fileUpdateSelectedBondInSave(selected_folder_num); } -s32 getSelectedFolderBond(void) +s32 fileGetBondForCurrentFolder(void) { return fileGetBondForFolder(selected_folder_num); } -void set_selected_folder_num(u32 foldernum) +void fileSetCurrentFolder(u32 foldernum) { selected_folder_num = foldernum; } diff --git a/src/game/file.h b/src/game/file.h index 8541f6f..a99d888 100644 --- a/src/game/file.h +++ b/src/game/file.h @@ -29,24 +29,9 @@ typedef struct smallSave } smallSave; extern save_data saves[6]; -extern save_data D_8002C520; -extern save_data D_8002C580; -extern save_data D_8002C5E0; -extern smallSave blankSmallSave; -extern save_data D_8002C660; -extern save_data D_8002C6C0; -extern save_data D_8002C720; -extern save_data D_8002C780; -extern save_data D_8002C7E0; -extern save_data D_8002C840; -extern save_data blank_eeprom; extern s32 save_selected_bond[]; -void set_selected_folder_num(u32 foldernum); -void set_selected_difficulty(DIFFICULTY difficulty); -void set_solo_and_ptr_briefing(LEVELID stage); - f32 get_007_reaction_speed(void); f32 get_007_health_mod(void); f32 get_007_damage_mod(void); @@ -54,9 +39,9 @@ f32 get_007_accuracy_mod(void); void end_of_mission_briefing(void); void fileLoadSaveSettingsForSelectedFolder(int stage); void deleteCurrentSelectedFolder(void); -void copyCurrentEEPROMtoStack(void); -s32 getSelectedFolderBond(void); -void set_selected_folder_num(u32 foldernum); +void fileUpdateBondInCurrentFolder(void); +s32 fileGetBondForCurrentFolder(void); +void fileSetCurrentFolder(u32 foldernum); void set_selected_difficulty(DIFFICULTY difficulty); void set_solo_and_ptr_briefing(LEVELID stage); void sub_GAME_7F01D61C(struct save_data *savefile); diff --git a/src/game/file2.c b/src/game/file2.c index 8a7afdb..979a3b6 100644 --- a/src/game/file2.c +++ b/src/game/file2.c @@ -7,7 +7,7 @@ #include "file.h" #include "file2.h" #include "front.h" - +#include "cheat_buttons.h" // bss @@ -17,40 +17,20 @@ //CODE.bss:80069A40 //CODE.bss:80069AA0 //CODE.bss:80069B00 -save_data saves[6]; +save_data saves[SAVESLOTMAX]; //CODE.bss:80069B60 u32 dword_CODE_bss_80069B60; //data //D:8002C510 -s32 save_selected_bond[] = {0,0,0,0}; +#ifdef ALL_BONDS +s32 save_selected_bond[] = {BOND_BROSNAN,BOND_CONNERY,BOND_DALTON,BOND_MOORE}; +#else +s32 save_selected_bond[] = {BOND_BROSNAN,BOND_BROSNAN,BOND_BROSNAN,BOND_BROSNAN}; +#endif -//D:8002C520 -save_data D_8002C520 = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0}; -//D:8002C580 -// Default Save -save_data D_8002C580 = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0}; -//D:8002C5E0 -save_data D_8002C5E0 = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0}; -//D:8002C640 -smallSave blankSmallSave = {0, 0, 0x42}; -//D:8002C660 -save_data D_8002C660 = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0}; - -//D:8002C6C0 -save_data D_8002C6C0 = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -//D:8002C720 -save_data D_8002C720 = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -//D:8002C780 -save_data D_8002C780 = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -//D:8002C7E0 -save_data D_8002C7E0 = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -//D:8002C840 -save_data D_8002C840 = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -//D:8002C8A0 -save_data blank_eeprom = {0, 0, 0x80, 0x00, 0xFF, 0xFF, DEFAULT_OPTIONS, 0x00, 0x00, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; /** @@ -69,9 +49,9 @@ s32 fileGamePakProbe(void) */ void fileResetRamRomSave(void) { - save_data new_save = D_8002C520; + save_data new_save = BLANKSAVEDATA; - saves[5] = new_save; + saves[SAVESLOTRAMROM] = new_save; } /** @@ -81,7 +61,7 @@ void fileResetRamRomSave(void) */ void fileWriteSmallSave(smallSave *save) { - if (fileGamePakProbe() != 0) + if (fileGamePakProbe()) { fileGenerateCRC(&save->unk[0], &save->unk[24], save); joyGamePakLongWrite(0, save, sizeof(smallSave)); @@ -95,12 +75,12 @@ void fileWriteSmallSave(smallSave *save) */ void fileWriteSave(save_data *save) { - if (save >= &saves[0] && save < &saves[5]) + if (save >= &saves[SAVESLOT1] && save < &saves[SAVESLOTRAMROM]) { - if ( fileGamePakProbe() != 0) + if ( fileGamePakProbe()) { fileGenerateCRC(&save->completion_bitflags, save + 1, save); - joyGamePakLongWrite((((u32)((save - &saves[0]) * 0x60) >> 3) + 4), save, sizeof(save_data)); + joyGamePakLongWrite((((u32)((save - &saves[SAVESLOT1]) * 0x60) >> 3) + 4), save, sizeof(save_data)); // 0x60 = sizeof(save_data) be sure to manually update if save changes } } } @@ -112,7 +92,7 @@ void fileWriteSave(save_data *save) */ void fileResetSave(save_data *save) { - save_data new_save = D_8002C580; + save_data new_save = BLANKSAVEDATA; *save = new_save; fileWriteSave(save); @@ -126,7 +106,7 @@ void fileResetSave(save_data *save) */ u32 fileGetSaveFolder(save_data *save) { - return save->completion_bitflags & 7; + return save->completion_bitflags & SAVEFLAG_FOLDER; } /** @@ -137,19 +117,19 @@ u32 fileGetSaveFolder(save_data *save) */ void fileSetSaveFoldernum(save_data *save, u32 folder) { - save->completion_bitflags &= ~7; - save->completion_bitflags |= folder & 7; + save->completion_bitflags &= ~SAVEFLAG_FOLDER; + save->completion_bitflags |= folder & SAVEFLAG_FOLDER; } /** - * Set save flag 0x18 + * Get save flag 0x18 * * @param folder * @return u32 */ -u32 fileSetSaveFlag_0x18(save_data *folder) +u32 fileGetSaveFlagSlot(save_data *folder) { - return (folder->completion_bitflags & 0x18) >> 3; + return (folder->completion_bitflags & SAVEFLAG_SLOT) >> 3; } /** @@ -158,10 +138,10 @@ u32 fileSetSaveFlag_0x18(save_data *folder) * @param folder * @param arg1 */ -void fileResetSaveFlag_0x18(save_data *folder, s32 arg1) +void fileResetSaveFlagSlot(save_data *folder, s32 slot) { - folder->completion_bitflags &= ~0x18; - folder->completion_bitflags |= ((arg1 * 8) & 0x18); + folder->completion_bitflags &= ~SAVEFLAG_SLOT; + folder->completion_bitflags |= ((slot * 8) & SAVEFLAG_SLOT); } /** @@ -172,19 +152,19 @@ void fileResetSaveFlag_0x18(save_data *folder, s32 arg1) */ u32 fileGetSelectedBond(save_data *folder) { - return (folder->completion_bitflags & 0x60) >> 5; + return (folder->completion_bitflags & SAVEFLAG_BOND) >> 5; } /** * Set the selected bond save flag * * @param folder - * @param arg1 + * @param bond */ -void fileSetSelectedBond(save_data *folder, s32 arg1) +void fileSetSelectedBond(save_data *folder, s32 bond) { - folder->completion_bitflags &= ~0x60; - folder->completion_bitflags |= ((arg1 << 5) & 0x60); + folder->completion_bitflags &= ~SAVEFLAG_BOND; + folder->completion_bitflags |= ((bond << 5) & SAVEFLAG_BOND); } /** @@ -193,9 +173,9 @@ void fileSetSelectedBond(save_data *folder, s32 arg1) * @param folder * @return TRUE/FALSE */ -bool fileGetSaveFlag_0x80(save_data *folder) +bool fileGetSaveFlagDoReset(save_data *folder) { - return ((folder->completion_bitflags & 0x80) != 0); + return ((folder->completion_bitflags & SAVEFLAG_DORESET) != FALSE); } /** @@ -205,15 +185,15 @@ bool fileGetSaveFlag_0x80(save_data *folder) * @param folder: folder to enable or disable flag * @param set: Enable flag if TRUE, Disable flag if FALSE */ -void fileSetSaveFlag_0x80(save_data *folder, bool enable) +void fileSetSaveFlagDoReset(save_data *folder, bool enable) { if (enable) { - folder->completion_bitflags |= 0x80; + folder->completion_bitflags |= SAVEFLAG_DORESET; } else { - folder->completion_bitflags &= ~0x80; + folder->completion_bitflags &= ~SAVEFLAG_DORESET; } } @@ -221,11 +201,11 @@ void fileSetSaveFlag_0x80(save_data *folder, bool enable) * Get completion time for stage at difficulty * * @param save - * @param stagenum + * @param levelid * @param difficulty * @return best time for stage at difficulty */ -s32 fileGetSaveStageDifficultyTime(save_data* save, LEVEL_SOLO_SEQUENCE stagenum, DIFFICULTY difficulty) +s32 fileGetSaveStageDifficultyTime(save_data* save, LEVEL_SOLO_SEQUENCE levelid, DIFFICULTY difficulty) { s32 offset; LEVEL_SOLO_SEQUENCE max_level; @@ -233,7 +213,7 @@ s32 fileGetSaveStageDifficultyTime(save_data* save, LEVEL_SOLO_SEQUENCE stagenum s32 index; max_level = SP_LEVEL_MAX; - if ((stagenum >= SP_LEVEL_DAM) && (stagenum < SP_LEVEL_MAX ) && (difficulty >= DIFFICULTY_AGENT) && (difficulty < DIFFICULTY_MAX)) + if ((levelid >= SP_LEVEL_DAM) && (levelid < SP_LEVEL_MAX ) && (difficulty >= DIFFICULTY_AGENT) && (difficulty < DIFFICULTY_MAX)) { if (difficulty == DIFFICULTY_007) { @@ -244,24 +224,24 @@ s32 fileGetSaveStageDifficultyTime(save_data* save, LEVEL_SOLO_SEQUENCE stagenum return 0; } - offset = ((difficulty * max_level) + stagenum) * 10; //startbit + offset = ((difficulty * max_level) + levelid) * 10; //startbit index = (offset >> 3); switch(7 - (offset & 7)) //bitmask { - case 7: //no offset + case 7: //no offset agent // first 10 bits 8 + 2 1111 1111 1100 0000 time = ((save->times[index] & 0xFF) << 2) | ((save->times[index + 1] & 0xc0) >> 6); break; - case 5: //offset 2 + case 5: //offset 2 secret agent // next 10 bits 6 + 4 0011 1111 1111 0000 time = ((save->times[index] & 0x3f) << 4) | ((save->times[index + 1] & 0xf0) >> 4); break; - case 3: //offset 4 + case 3: //offset 4 00 agent // next 10 bits 4 + 6 0000 1111 1111 1100 time = ((save->times[index] & 0xf) << 6) | ((save->times[index + 1] & 0xfc) >> 2); break; - case 1: //offset 6 + case 1: //offset 6 007 // next 10 bits 2 + 8 0000 0011 1111 1111 time = ((save->times[index] & 0x3) << 8) | ((save->times[index + 1] & 0xFFF)); break; @@ -282,18 +262,18 @@ s32 fileGetSaveStageDifficultyTime(save_data* save, LEVEL_SOLO_SEQUENCE stagenum * Set completion time for stage at difficulty * * @param save - * @param stage + * @param levelid * @param difficulty * @param newtime */ -void fileSetDifficultyStageTime(save_data *save, LEVEL_SOLO_SEQUENCE stage, DIFFICULTY difficulty, s32 newtime) +void fileSetDifficultyStageTime(save_data *save, LEVEL_SOLO_SEQUENCE levelid, DIFFICULTY difficulty, s32 newtime) { s32 offset; s32 index; - u32 max_level; + LEVEL_SOLO_SEQUENCE max_level; max_level = SP_LEVEL_MAX; - if ((stage >= 0) && (stage < SP_LEVEL_MAX ) && (difficulty >= DIFFICULTY_AGENT) && (difficulty < DIFFICULTY_007)) + if ((levelid >= SP_LEVEL_DAM) && (levelid < SP_LEVEL_MAX ) && (difficulty >= DIFFICULTY_AGENT) && (difficulty < DIFFICULTY_007)) { if (newtime == 0) { newtime = 0x4f; @@ -301,30 +281,30 @@ void fileSetDifficultyStageTime(save_data *save, LEVEL_SOLO_SEQUENCE stage, DIFF newtime = 0x3ff; } - offset = ((difficulty * max_level) + stage) * 10; //startbit + offset = ((difficulty * max_level) + levelid) * 10; //startbit index = (offset >> 3); switch(7 - (offset & 7)) //bitmask { - case 7: //no offset 4 8 12 etc + case 7: //no offset 4 8 12 etc agent save->times[index] &= 0xff00; save->times[index + 1] &= 0xff3f; save->times[index] |= (newtime >> 2) & 0xff; save->times[index + 1] |= (newtime << 6) & 0xc0; break; - case 5: //first offset 5 9 13 etc + case 5: //first offset 5 9 13 etc secret agent save->times[index] &= 0xffc0; save->times[index + 1] &= 0xff0f; save->times[index] |= ((newtime >> 4) & 0x3f); save->times[index + 1] |= (newtime << 4) & 0xf0; break; - case 3: //second offset 6 10 14 etc + case 3: //second offset 6 10 14 etc 00 agent save->times[index] &= 0xfff0; save->times[index + 1] &= 0xff03; save->times[index] |= ((newtime >> 6) & 0xf); save->times[index + 1] |= (newtime << 2) & 0xfC; break; - case 1: //third offset 7 11 15 etc + case 1: //third offset 7 11 15 etc 007 save->times[index] &= 0xfffc; save->times[index + 1] &= 0xff00; save->times[index] |= ((newtime >> 8) & 3); @@ -332,7 +312,7 @@ void fileSetDifficultyStageTime(save_data *save, LEVEL_SOLO_SEQUENCE stage, DIFF break; default: #if DEBUG - osSyncPrintf("file.c: SHOULDN\'T GET HERE EVER [1]\n"); + osSyncPrintf("file.c: SHOULDN\'T GET HERE EVER [2]\n"); #endif break; } @@ -348,9 +328,9 @@ void fileSetDifficultyStageTime(save_data *save, LEVEL_SOLO_SEQUENCE stage, DIFF * @param difficulty * @return is stage at diffiuclty completed */ -bool fileGetSaveStageCompletedForDifficulty(save_data *folder, s32 levelid, DIFFICULTY difficulty) +bool fileGetSaveStageCompletedForDifficulty(save_data *folder, LEVEL_SOLO_SEQUENCE levelid, DIFFICULTY difficulty) { - if ((levelid >= 0) && (levelid < SP_LEVEL_MAX) && (difficulty >= DIFFICULTY_AGENT) && (difficulty <= DIFFICULTY_007)) + if ((levelid >= SP_LEVEL_DAM) && (levelid < SP_LEVEL_MAX) && (difficulty >= DIFFICULTY_AGENT) && (difficulty <= DIFFICULTY_007)) { return fileGetSaveStageDifficultyTime(folder, levelid, difficulty) != 0; } @@ -366,15 +346,15 @@ bool fileGetSaveStageCompletedForDifficulty(save_data *folder, s32 levelid, DIFF * @param difficulty * @param arg4 */ -void fileCheckSaveStageDifficultyTime(save_data *folder, LEVEL_SOLO_SEQUENCE stage, DIFFICULTY difficulty, s32 newtime) +void fileCheckSaveStageDifficultyTime(save_data *folder, LEVEL_SOLO_SEQUENCE levelid, DIFFICULTY difficulty, s32 newtime) { - if ((stage >= 0) && (stage < SP_LEVEL_MAX) && (difficulty >= DIFFICULTY_AGENT) && (difficulty <= DIFFICULTY_007)) + if ((levelid >= SP_LEVEL_DAM) && (levelid < SP_LEVEL_MAX) && (difficulty >= DIFFICULTY_AGENT) && (difficulty <= DIFFICULTY_007)) { - s32 time = fileGetSaveStageDifficultyTime(folder, stage, difficulty); + s32 time = fileGetSaveStageDifficultyTime(folder, levelid, difficulty); if ((time == 0) || (newtime < time)) { - fileSetDifficultyStageTime(folder, stage, difficulty, newtime); + fileSetDifficultyStageTime(folder, levelid, difficulty, newtime); } } } @@ -390,7 +370,7 @@ bool fileGetIsCheatUnlocked(save_data *save, s32 cheat) { s32 bits; - if (cheat >= 0 && cheat < SP_LEVEL_MAX) + if (cheat >= 0 && cheat < CHEAT_20) { bits = save->unlocked_cheats_1 | save->unlocked_cheats_3 << 0x18 | save->unlocked_cheats_3 << 0x10 | save->unlocked_cheats_2 << 8; return ((1 << cheat) & bits) != 0; @@ -405,12 +385,12 @@ bool fileGetIsCheatUnlocked(save_data *save, s32 cheat) * @param save * @param cheat */ -void sub_GAME_7F01DD74(save_data *save, s32 cheat) +void fileSetSaveCheatUnlocked(save_data *save, s32 cheat) { u32 i; u32 temp; - if (cheat >= 0 && cheat < SP_LEVEL_MAX) + if (cheat >= 0 && cheat < CHEAT_20) { temp = 1 << (cheat); @@ -419,7 +399,7 @@ void sub_GAME_7F01DD74(save_data *save, s32 cheat) temp = temp >> 8; } - *(((u8 *)save + i + 0xe)) |= temp & 0xFFu; + *(((u8 *)save + i + 0xe)) |= temp & 0xFFu; //save.unlocked_cheats_1[i] |= temp; } } @@ -433,9 +413,9 @@ save_data * fileGetSaveForFoldernum(u32 folder) { int i; - for (i = 0; i < 5; i++) + for (i = SAVESLOT1; i < SAVESLOTRAMROM; i++) { - if ( fileGetSaveFlag_0x80(&saves[i]) == 0 && + if ( fileGetSaveFlagDoReset(&saves[i]) == FALSE && fileGetSaveFolder(&saves[i]) == folder) { return &saves[i]; @@ -444,7 +424,7 @@ save_data * fileGetSaveForFoldernum(u32 folder) if (folder == RAMROM_FOLDERNUM) { - return &saves[5]; + return &saves[SAVESLOTRAMROM]; } return NULL; @@ -455,13 +435,13 @@ save_data * fileGetSaveForFoldernum(u32 folder) * * @return s32 */ -s32 fileGetSaveFlag_0x80_any_folder(void) +s32 fileGetSaveFlagDoReset_any_folder(void) { s32 i; - for(i = 0; i < 5; i++) + for(i = SAVESLOT1; i < SAVESLOTRAMROM; i++) { - if ( fileGetSaveFlag_0x80(&saves[i])) + if ( fileGetSaveFlagDoReset(&saves[i])) { return i; } @@ -476,20 +456,19 @@ s32 fileGetSaveFlag_0x80_any_folder(void) * * @param folder */ -void sub_GAME_7F01DEB4(u32 folder) +void fileBuildWriteNewSave(u32 folder) { s32 folder_with_flag; - save_data new_save; - folder_with_flag = fileGetSaveFlag_0x80_any_folder(); + folder_with_flag = fileGetSaveFlagDoReset_any_folder(); if (folder_with_flag >= 0) { - new_save = D_8002C5E0; + save_data new_save = BLANKSAVEDATA; saves[folder_with_flag] = new_save; fileSetSaveFoldernum(&saves[folder_with_flag], folder); - fileSetSaveFlag_0x80(&saves[folder_with_flag], 0); + fileSetSaveFlagDoReset(&saves[folder_with_flag], FALSE); fileSetSelectedBond(&saves[folder_with_flag], folder); fileWriteSave(&saves[folder_with_flag]); } @@ -511,7 +490,7 @@ void fileValidateSaves(void) joyGamePakLongRead(0, &joyChecksum, sizeof(smallSave)); // if customised file dont assume crc is ok - if (joyChecksum.unk[0] != (0x40 | 0x2)) + if (joyChecksum.unk[0] != SAVEFLAGS_SET(FOLDER3, SAVESLOT1, BOND_CONNERY, FALSE)) { checksumOK = FALSE; } @@ -528,7 +507,7 @@ void fileValidateSaves(void) // bad checksum, create a new save and replace damaged one. if (!checksumOK) { - smallSave NewSave = blankSmallSave; + smallSave NewSave = {0, 0, SAVEFLAGS_SET(FOLDER3, SAVESLOT1, BOND_CONNERY, FALSE)}; joyChecksum = NewSave; fileWriteSmallSave(&joyChecksum); } @@ -536,13 +515,14 @@ void fileValidateSaves(void) // Block read 5 saves starting at address 4th byte (? bug: address must be multiple of 8 - return is -1) joyGamePakLongRead(4, &saves, sizeof(save_data) * 5); - for (i = 0; i != 5; i++) //only != matches + for (i = SAVESLOT1; i != SAVESLOTRAMROM; i++) //only != matches { bool checksumOK2 = TRUE; fileGenerateCRC(&saves[i].completion_bitflags, &saves[i + 1], &crc); // do checksum on save data - if (1){} if (1){} // Hack to shift registers + if (1){} // Hack to shift registers + if (1){} // or something like if (FINAL){} if ((crc[0] != saves[i].chksum1) || (crc[1] != saves[i].chksum2)) @@ -556,34 +536,34 @@ void fileValidateSaves(void) } } - for (i = 0; i < 4; i++) + for (i = FOLDER1; i < MAX_FOLDER_COUNT; i++) { - s32 flag18_2; + s32 slot_2; s32 jif = -1; - s32 flag18 = -1; + s32 slot = -1; s32 j; // for each save - for (j = 0; j < 5; j++) + for (j = SAVESLOT1; j < SAVESLOTRAMROM; j++) { - // if save = folder and 80 set - if (!fileGetSaveFlag_0x80(&saves[j]) && + // if save = folder and SAVEFLAG_DORESET set + if (!fileGetSaveFlagDoReset(&saves[j]) && fileGetSaveFolder(&saves[j]) == i) { - if (jif < 0) // on first 80 do this + if (jif < SAVESLOT1) // on first SAVEFLAG_DORESET do this { jif = j; - flag18 = fileSetSaveFlag_0x18(&saves[j]); + slot = fileGetSaveFlagSlot(&saves[j]); } else { - flag18_2 = fileSetSaveFlag_0x18(&saves[j]); + slot_2 = fileGetSaveFlagSlot(&saves[j]); - if (flag18_2 == (flag18 + 1) % 4) + if (slot_2 == (slot + 1) % 4) { fileResetSave(&saves[jif]); jif = j; - flag18 = flag18_2; + slot = slot_2; } else { @@ -593,14 +573,14 @@ void fileValidateSaves(void) } } - // 80 was not set - if (jif < 0) + // SAVEFLAG_DORESET was not set + if (jif < SAVESLOT1) { - sub_GAME_7F01DEB4(i); + fileBuildWriteNewSave(i); } } - for (i = 0; i < 4; i++) + for (i = FOLDER1; i < MAX_FOLDER_COUNT; i++) { save_data *save = fileGetSaveForFoldernum(i); @@ -620,12 +600,12 @@ void fileValidateSaves(void) */ bool fileIsFolderValid(s32 folder) { - if ((folder >= 0) && (folder < 4)) + if ((folder >= FOLDER1) && (folder < MAX_FOLDER_COUNT)) { return TRUE; } - if (folder == 100) + if (folder == RAMROM_FOLDERNUM) { return TRUE; } @@ -638,30 +618,30 @@ bool fileIsFolderValid(s32 folder) * file fileIsStageUnlockedAtDifficulty calls fileIsSavedStageUnlockedAtDifficulty * * @param foldernum - * @param stage + * @param levelid * @param difficulty * @return 0, 1, or 3 (STAGESTATUS_LOCKED, STAGESTATUS_UNLOCKED, STAGESTATUS_COMPLETED) */ -STAGESTATUS fileIsStageUnlockedAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE stage, DIFFICULTY difficulty) +STAGESTATUS fileIsStageUnlockedAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE levelid, DIFFICULTY difficulty) { save_data* save; s32 i; if (( fileIsFolderValid(foldernum)) && - (stage >= SP_LEVEL_DAM && stage < SP_LEVEL_MAX) && + (levelid >= SP_LEVEL_DAM && levelid < SP_LEVEL_MAX) && (difficulty >= DIFFICULTY_AGENT && difficulty < DIFFICULTY_MAX)) { save = fileGetSaveForFoldernum(foldernum); if (save) { - if ( fileGetSaveStageCompletedForDifficulty(save, stage, difficulty)) + if ( fileGetSaveStageCompletedForDifficulty(save, levelid, difficulty)) { return STAGESTATUS_COMPLETED; //found on first try, stage has been completed and a time saved. } - if ((stage == SP_LEVEL_AZTEC && difficulty < DIFFICULTY_SECRET) || - (stage == SP_LEVEL_EGYPT && difficulty < DIFFICULTY_00)) + if ((levelid == SP_LEVEL_AZTEC && difficulty < DIFFICULTY_SECRET) || + (levelid == SP_LEVEL_EGYPT && difficulty < DIFFICULTY_00)) { return STAGESTATUS_LOCKED; //we cant possibly have a completed bonus stage below each set dificulty } @@ -670,7 +650,7 @@ STAGESTATUS fileIsStageUnlockedAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE s for (i = difficulty; i < DIFFICULTY_MAX ; i++) { LEVEL_SOLO_SEQUENCE istage; - for (istage = SP_LEVEL_DAM; istage < stage; istage++) + for (istage = SP_LEVEL_DAM; istage < levelid; istage++) { if (! fileGetSaveStageCompletedForDifficulty(save, istage, i)) { @@ -678,18 +658,18 @@ STAGESTATUS fileIsStageUnlockedAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE s } } //if the first uncomplete stage is not less than current - if (stage <= istage) + if (levelid <= istage) { return STAGESTATUS_UNLOCKED; } } // if we still cant find it - if ((difficulty < DIFFICULTY_007) && (stage < SP_LEVEL_AZTEC)) + if ((difficulty < DIFFICULTY_007) && (levelid < SP_LEVEL_AZTEC)) { for (i = difficulty; i < DIFFICULTY_MAX; i++) { - if ( fileGetSaveStageCompletedForDifficulty(save, stage - 1, i)) + if ( fileGetSaveStageCompletedForDifficulty(save, levelid - 1, i)) { return STAGESTATUS_UNLOCKED; } @@ -710,7 +690,7 @@ STAGESTATUS fileIsStageUnlockedAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE s { for (i = DIFFICULTY_AGENT; i < difficulty; i++) { - if (! fileGetSaveStageCompletedForDifficulty(save, stage, i)) + if (! fileGetSaveStageCompletedForDifficulty(save, levelid, i)) { break; } @@ -725,7 +705,7 @@ STAGESTATUS fileIsStageUnlockedAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE s }// save // no save, current level is dam, its unlocked. - if (stage == SP_LEVEL_DAM) + if (levelid == SP_LEVEL_DAM) { return STAGESTATUS_UNLOCKED; } @@ -752,13 +732,13 @@ STAGESTATUS fileIsStageUnlockedAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE s * @param save1 * @param save2 */ -void sub_GAME_7F01E504(save_data *save1, save_data *save2) +void fileOverwriteSaveSlotWithNewSave(save_data *save1, save_data *save2) { s32 folder_with_flag; - s32 otherfolder; + s32 slot; - otherfolder = 0; - folder_with_flag = fileGetSaveFlag_0x80_any_folder(); + slot = 0; + folder_with_flag = fileGetSaveFlagDoReset_any_folder(); if (folder_with_flag >= 0) { @@ -766,11 +746,11 @@ void sub_GAME_7F01E504(save_data *save1, save_data *save2) if (save1) { - otherfolder = (s32)( fileSetSaveFlag_0x18(save1) + 1) % 4; + slot = (s32)( fileGetSaveFlagSlot(save1) + 1) % 4; } - fileSetSaveFlag_0x80(&saves[folder_with_flag], 0); - fileResetSaveFlag_0x18(&saves[folder_with_flag], otherfolder); + fileSetSaveFlagDoReset(&saves[folder_with_flag], FALSE); + fileResetSaveFlagSlot(&saves[folder_with_flag], slot); fileWriteSave(&saves[folder_with_flag]); if (save1) @@ -790,19 +770,15 @@ void sub_GAME_7F01E504(save_data *save1, save_data *save2) */ void fileUnlockStageInFolderAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE stage, DIFFICULTY difficulty, s32 newtime) { - save_data new_save; - save_data *save; - s32 i; - - if ((foldernum >= 0) && (foldernum < 4) && + if ((foldernum >= 0) && (foldernum < MAX_FOLDER_COUNT) && (stage >= SP_LEVEL_DAM) && (stage < SP_LEVEL_MAX) && (difficulty >= DIFFICULTY_AGENT) && (difficulty < DIFFICULTY_MAX)) { - new_save = D_8002C660; + save_data new_save = BLANKSAVEDATA; - save = fileGetSaveForFoldernum(foldernum); - - if (save != 0) { + save_data *save = fileGetSaveForFoldernum(foldernum); + s32 i; + if (save) { new_save = *save; } else { fileSetSaveFoldernum(&new_save, foldernum); @@ -820,7 +796,7 @@ void fileUnlockStageInFolderAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE stag } } - sub_GAME_7F01E504(&save->chksum1, &new_save); + fileOverwriteSaveSlotWithNewSave(&save[0], &new_save); } } @@ -830,33 +806,32 @@ void fileUnlockStageInFolderAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE stag * @param foldernum * @param cheat */ -void sub_GAME_7F01E760(s32 foldernum, s32 cheat) +void fileSaveFolderUnlockCheat(s32 foldernum, s32 cheat) { - save_data *save; - save_data new_save; - - if ((foldernum >= 0) && (foldernum < 4) && (cheat >= 0) && (cheat < SP_LEVEL_MAX)) + if ((foldernum >= FOLDER1) && (foldernum < MAX_FOLDER_COUNT) && (cheat >= 0) && (cheat < CHEAT_20)) { - save = fileGetSaveForFoldernum(foldernum); + save_data *save = fileGetSaveForFoldernum(foldernum); - if (save != 0 && fileGetIsCheatUnlocked(save, cheat) != 0) + if (save && fileGetIsCheatUnlocked(save, cheat)) { return; } - new_save = D_8002C6C0; - - if (save != 0) { - new_save = *save; - } - else - { - fileSetSaveFoldernum(&new_save, foldernum); - } + save_data new_save = BLANKSAVEDATA; - sub_GAME_7F01DD74(&new_save, cheat); - sub_GAME_7F01E504(save, &new_save); + if (save) + { + new_save = *save; + } + else + { + fileSetSaveFoldernum(&new_save, foldernum); + } + + fileSetSaveCheatUnlocked(&new_save, cheat); + fileOverwriteSaveSlotWithNewSave(save, &new_save); + } } } @@ -868,7 +843,7 @@ void sub_GAME_7F01E760(s32 foldernum, s32 cheat) * @param stage * @param difficulty */ -void fileGetHighestStageDifficultyCompletedForFolder(s32 foldernum, LEVEL_SOLO_SEQUENCE *stage, DIFFICULTY *difficulty) +void fileGetHighestStageDifficultyCompletedForFolder(s32 foldernum, LEVEL_SOLO_SEQUENCE *levelid, DIFFICULTY *difficulty) { save_data *folder; LEVEL_SOLO_SEQUENCE stageid; @@ -876,22 +851,22 @@ void fileGetHighestStageDifficultyCompletedForFolder(s32 foldernum, LEVEL_SOLO_S folder = fileGetSaveForFoldernum(foldernum); - if (folder != NULL) + if (folder) { - for (difficultyid = DIFFICULTY_007; difficultyid >= 0; difficultyid--) + for (difficultyid = DIFFICULTY_007; difficultyid >= DIFFICULTY_AGENT; difficultyid--) { - for (stageid = SP_LEVEL_EGYPT; stageid >= 0; stageid--) + for (stageid = SP_LEVEL_EGYPT; stageid >= SP_LEVEL_DAM; stageid--) { if ( fileGetSaveStageCompletedForDifficulty(folder, stageid, difficultyid)) { - *stage = stageid; + *levelid = stageid; *difficulty = difficultyid; return; } } } } - *stage = SP_LEVEL_DAM - 1; + *levelid = SP_LEVEL_DAM - 1; *difficulty = DIFFICULTY_MULTI; } @@ -903,18 +878,18 @@ void fileGetHighestStageDifficultyCompletedForFolder(s32 foldernum, LEVEL_SOLO_S */ LEVEL_SOLO_SEQUENCE fileGetHighestStageUnlockedForFolder(s32 foldernum) { - LEVEL_SOLO_SEQUENCE stageid; + LEVEL_SOLO_SEQUENCE levelid; DIFFICULTY difficulty; if ( fileGetSaveForFoldernum(foldernum) != NULL) { - for (stageid = SP_LEVEL_EGYPT; stageid >= 0; stageid--) + for (levelid = SP_LEVEL_EGYPT; levelid >= SP_LEVEL_DAM; levelid--) { for (difficulty = DIFFICULTY_AGENT; difficulty < DIFFICULTY_MAX; difficulty++) { - if ( fileIsStageUnlockedAtDifficulty(foldernum, stageid, difficulty)) + if ( fileIsStageUnlockedAtDifficulty(foldernum, levelid, difficulty)) { - return stageid; + return levelid; } } } @@ -925,15 +900,15 @@ LEVEL_SOLO_SEQUENCE fileGetHighestStageUnlockedForFolder(s32 foldernum) /** * Get the highest stage unlocked in any folder * - * @return stageid + * @return levelid */ LEVEL_SOLO_SEQUENCE fileGetHighestStageUnlockedAnyFolder(void) { int folder; LEVEL_SOLO_SEQUENCE isfound; - LEVEL_SOLO_SEQUENCE highest = 0; + LEVEL_SOLO_SEQUENCE highest = SP_LEVEL_DAM; - for (folder = 0; folder < 4; folder++) + for (folder = FOLDER1; folder < MAX_FOLDER_COUNT; folder++) { isfound = fileGetHighestStageUnlockedForFolder(folder); if (highest < isfound) @@ -990,7 +965,7 @@ bool fileIsCradleCompletedAnyFolder(void) { int folder; - for (folder = 0; folder < 4; folder++) + for (folder = FOLDER1; folder < MAX_FOLDER_COUNT; folder++) { if ( fileIsCradleCompletedForFolder(folder)) { @@ -1010,7 +985,7 @@ bool check_aztec_completed_any_folder_secret_00(void) { int folder; - for (folder = 0; folder < 4; folder++) + for (folder = FOLDER1; folder < MAX_FOLDER_COUNT; folder++) { if ( fileIsAztecCompletedOnSecretOr00ForFolder(folder)) { @@ -1030,7 +1005,7 @@ bool fileIsEgyptCompletedOn00AnyFolder(void) { int folder; - for (folder = 0; folder < 4; folder++) + for (folder = FOLDER1; folder < MAX_FOLDER_COUNT; folder++) { if ( fileIsEgyptCompletedOn00ForFolder(folder)) { @@ -1051,13 +1026,13 @@ u8 fileGetBondForFolder(u32 folder) { #ifdef ALL_BONDS //likely code based on behavior - if ((folder >= 0) && (folder < 4)) + if ((folder >= FOLDER1) && (folder < MAX_FOLDER_COUNT)) { return save_selected_bond[folder]; } #endif - return 0; + return BOND_BROSNAN; } /** @@ -1068,12 +1043,15 @@ u8 fileGetBondForFolder(u32 folder) */ void fileSetSelectedBondTofolder(s32 folder, s32 bond) { - if (folder < 0 || folder > 3) + if (folder < FOLDER1 || folder > FOLDER4) { return; } - - save_selected_bond[folder] = 0; +#ifdef ALL_BONDS + save_selected_bond[folder] = bond; +#else + save_selected_bond[folder] = BOND_BROSNAN; +#endif } /** @@ -1104,22 +1082,21 @@ void sub_GAME_7F01EBFC(u32 unused) void fileDeleteSaveForFolder(s32 foldernum) { save_data *save; - LEVEL_SOLO_SEQUENCE stage; + LEVEL_SOLO_SEQUENCE levelid; DIFFICULTY difficulty; - save_data new_save; - if (foldernum >= 0 && foldernum < 4) + if (foldernum >= FOLDER1 && foldernum < MAX_FOLDER_COUNT) { save = fileGetSaveForFoldernum(foldernum); - if (save != 0) + if (save) { - fileGetHighestStageDifficultyCompletedForFolder(foldernum, &stage, &difficulty); - if ((stage >= 0) && (difficulty >= 0)) + fileGetHighestStageDifficultyCompletedForFolder(foldernum, &levelid, &difficulty); + if ((levelid >= SP_LEVEL_DAM) && (difficulty >= DIFFICULTY_AGENT)) { - new_save = D_8002C720; + save_data new_save = BLANKSAVEDATA; *save = new_save; fileSetSaveFoldernum(save, foldernum); - fileSetSaveFlag_0x80(save, 0); + fileSetSaveFlagDoReset(save, FALSE); fileSetSelectedBond(save, foldernum); fileSetSelectedBondTofolder(foldernum, foldernum); fileWriteSave(save); @@ -1137,16 +1114,16 @@ void fileDeleteSaveForFolder(s32 foldernum) void fileInitializeAllTimes(u32 folder) { save_data *save; - LEVEL_SOLO_SEQUENCE stagenum; + LEVEL_SOLO_SEQUENCE levelid; DIFFICULTY difficulty; save = fileGetSaveForFoldernum(folder); - for (stagenum = SP_LEVEL_DAM; stagenum < SP_LEVEL_MAX; stagenum++) + for (levelid = SP_LEVEL_DAM; levelid < SP_LEVEL_MAX; levelid++) { for(difficulty = DIFFICULTY_AGENT; difficulty < DIFFICULTY_007; difficulty++) { - fileCheckSaveStageDifficultyTime(save, stagenum, difficulty, 99999999); + fileCheckSaveStageDifficultyTime(save, levelid, difficulty, 99999999); } } } @@ -1158,42 +1135,40 @@ void fileInitializeAllTimes(u32 folder) * if no free slot, do nothing * @param foldernum Current folder number */ -void sub_GAME_7F01EDA0(s32 foldernum) +void fileCopyFolderToFirstFree(s32 foldernum) { save_data* save; - LEVEL_SOLO_SEQUENCE stage; + LEVEL_SOLO_SEQUENCE levelid; DIFFICULTY difficulty; s32 other; - save_data new_save; - save_data* temp_s2; - if ((foldernum >= 0) && (foldernum < 4)) + if ((foldernum >= FOLDER1) && (foldernum < MAX_FOLDER_COUNT)) { save = fileGetSaveForFoldernum(foldernum); - if (save != 0) + if (save) { - fileGetHighestStageDifficultyCompletedForFolder(foldernum, &stage, &difficulty); - if (stage >= 0) + fileGetHighestStageDifficultyCompletedForFolder(foldernum, &levelid, &difficulty); + if (levelid >= SP_LEVEL_DAM) { - if (difficulty >= 0) { - for(other = 0;other != 4; other++) + if (difficulty >= DIFFICULTY_AGENT) { + for(other = FOLDER1;other != MAX_FOLDER_COUNT; other++) { - if (( fileGetSaveForFoldernum(other) == 0) || - ( fileGetHighestStageDifficultyCompletedForFolder(other, &stage, &difficulty), - (stage < 0) && (difficulty < 0))) + if (( fileGetSaveForFoldernum(other) == NULL) || + ( fileGetHighestStageDifficultyCompletedForFolder(other, &levelid, &difficulty), + (levelid < SP_LEVEL_DAM) && (difficulty < DIFFICULTY_AGENT))) { break; } } - if ((s32)other < 4) + if ((s32)other < MAX_FOLDER_COUNT) { - new_save = D_8002C780; - temp_s2 = fileGetSaveForFoldernum(other); + save_data new_save = BLANKSAVEDATA; + save_data *temp_s2 = fileGetSaveForFoldernum(other); new_save = *save; fileSetSaveFoldernum(&new_save, other); fileSetSelectedBondTofolder(other, fileGetBondForFolder(foldernum)); - sub_GAME_7F01E504(temp_s2, &new_save); + fileOverwriteSaveSlotWithNewSave(temp_s2, &new_save); } } } @@ -1215,51 +1190,51 @@ void fileSaveSettingsForFolder(save_data *save) save->music_vol = get_mTrack2Vol() >> 7; save->sfx_vol = (call_sndGetSfxSlotFirstNaturalVolume() >> 7); - if (get_cur_player_look_vertical_inverted() != 0) + if (get_cur_player_look_vertical_inverted()) { - bits = 1; + bits = OPTION_INVERTLOOK; } - if (cur_player_get_autoaim() != 0) + if (cur_player_get_autoaim()) { - bits |= 2; + bits |= OPTION_AUTOAIM; } - if (cur_player_get_aim_control() != 0) + if (cur_player_get_aim_control()) { - bits |= 4; + bits |= OPTION_AIMCONTROL; } - if (cur_player_get_sight_onscreen_control() != 0) + if (cur_player_get_sight_onscreen_control()) { - bits |= 8; + bits |= OPTION_SIGHTONSCREEN; } - if (cur_player_get_lookahead() != 0) + if (cur_player_get_lookahead()) { - bits |= 0x10; + bits |= OPTION_LOOKAHEAD; } - if (cur_player_get_ammo_onscreen_setting() != 0) + if (cur_player_get_ammo_onscreen_setting()) { - bits |= 0x20; + bits |= OPTION_DISPLAYAMMO; } - if (cur_player_get_screen_setting() == 1) + if (cur_player_get_screen_setting() == SCREEN_SIZE_WIDESCREEN) { - bits |= 0x40; + bits |= OPTION_SCREENWIDE; } - else if (cur_player_get_screen_setting() == 2) + else if (cur_player_get_screen_setting() == SCREEN_SIZE_CINEMA) { - bits |= 0x800; + bits |= OPTION_SCREENCINEMA; } if (get_screen_ratio() != SCREEN_RATIO_NORMAL) { - bits |= 0x80; + bits |= OPTION_SCREENRATIO; } - temp = ((u16) (cur_player_get_control_type() << 8)) & 0x700; + temp = ((u16) (cur_player_get_control_type() << 8)) & OPTION_CONTROLTYPE; save->options = bits | temp; } @@ -1284,34 +1259,34 @@ void fileLoadSettingsForFolder(u32 folder) if (getPlayerCount() == 1) { - cur_player_set_control_type(((s32) (options & 0x700) >> 8) & 0xFFFF); + cur_player_set_control_type(((s32) (options & OPTION_CONTROLTYPE) >> 8) & 0xFFFF); } else { - cur_player_set_control_type(0); + cur_player_set_control_type(CONTROLLER_CONFIG_HONEY); } - set_cur_player_look_vertical_inverted((options & 1) != 0); - cur_player_set_autoaim((options & 2) != 0); - cur_player_set_aim_control((options & 4) != 0); - cur_player_set_sight_onscreen_control((options & 8) != 0); - cur_player_set_lookahead((options & 0x10) != 0); - cur_player_set_ammo_onscreen_setting((options & 0x20) != 0); + set_cur_player_look_vertical_inverted((options & OPTION_INVERTLOOK) != FALSE); + cur_player_set_autoaim((options & OPTION_AUTOAIM) != FALSE); + cur_player_set_aim_control((options & OPTION_AIMCONTROL) != FALSE); + cur_player_set_sight_onscreen_control((options & OPTION_SIGHTONSCREEN) != FALSE); + cur_player_set_lookahead((options & OPTION_LOOKAHEAD) != FALSE); + cur_player_set_ammo_onscreen_setting((options & OPTION_DISPLAYAMMO) != FALSE); - if (options & 0x800) + if (options & OPTION_SCREENCINEMA) { - cur_player_set_screen_setting(2); + cur_player_set_screen_setting(SCREEN_SIZE_CINEMA); } - else if (options & 0x40) + else if (options & OPTION_SCREENWIDE) { - cur_player_set_screen_setting(1); + cur_player_set_screen_setting(SCREEN_SIZE_WIDESCREEN); } else { - cur_player_set_screen_setting(0); + cur_player_set_screen_setting(SCREEN_SIZE_FULLSCREEN); } - set_screen_ratio((options & 0x80) != 0); + set_screen_ratio((options & OPTION_SCREENRATIO) != FALSE); } } @@ -1322,17 +1297,13 @@ void fileLoadSettingsForFolder(u32 folder) */ void fileClearSavefileForFolder(s32 folder) { - save_data *save; - save_data save_to_copy; - save_data new_save; - - if (folder >= 0 && folder < 4) + if (folder >= FOLDER1 && folder < MAX_FOLDER_COUNT) { - save = fileGetSaveForFoldernum(folder); + save_data *save = fileGetSaveForFoldernum(folder); - save_to_copy = D_8002C7E0; - - if (save != 0) + save_data save_to_copy = BLANKSAVEDATA; + save_data new_save; + if (save) { save_to_copy = *save; } @@ -1345,9 +1316,9 @@ void fileClearSavefileForFolder(s32 folder) fileSaveSettingsForFolder(&new_save); - if (_bcmp(&new_save, &save_to_copy, sizeof(save_data)) != 0) + if (memcmp(&new_save, &save_to_copy, sizeof(save_data))) { - sub_GAME_7F01E504(save, &new_save); + fileOverwriteSaveSlotWithNewSave(save, &new_save); } } } @@ -1357,17 +1328,15 @@ void fileClearSavefileForFolder(s32 folder) * * @param folder */ -void fileCopySaveIfSelectedBondDifferent(s32 folder) +void fileUpdateSelectedBondInSave(s32 folder) { - save_data *save; - save_data new_save; - if (folder >= 0 && folder < 4) + if (folder >= FOLDER1 && folder < MAX_FOLDER_COUNT) { - save = fileGetSaveForFoldernum(folder); - new_save = D_8002C840; + save_data *save = fileGetSaveForFoldernum(folder); + save_data new_save = BLANKSAVEDATA; - if (save != 0) + if (save) { new_save = *save; } @@ -1379,7 +1348,7 @@ void fileCopySaveIfSelectedBondDifferent(s32 folder) if (save_selected_bond[folder] != fileGetSelectedBond(&new_save)) { fileSetSelectedBond(&new_save, save_selected_bond[folder]); - sub_GAME_7F01E504(save, &new_save); + fileOverwriteSaveSlotWithNewSave(save, &new_save); } } } @@ -1392,18 +1361,16 @@ void fileCopySaveIfSelectedBondDifferent(s32 folder) */ void fileCopySave(s32 folder, save_data *out_save) { - save_data *in_save; - save_data new_save; - in_save = fileGetSaveForFoldernum(folder); + save_data *in_save = fileGetSaveForFoldernum(folder); - if (in_save != 0) + if (in_save) { *out_save = *in_save; } else { - new_save = blank_eeprom; + save_data new_save = BLANKSAVEDATA; *out_save = new_save; } } @@ -1418,7 +1385,7 @@ void fileCopyDemoSaveToRamRomSave(u32 folder, save_data *save) { if (folder == RAMROM_FOLDERNUM) { - saves[5] = *save; + saves[SAVESLOTRAMROM] = *save; } } @@ -1430,7 +1397,7 @@ void fileCopyDemoSaveToRamRomSave(u32 folder, save_data *save) */ s32 fileIs007ModeUnlocked(u32 folder) { - LEVEL_SOLO_SEQUENCE stage; + LEVEL_SOLO_SEQUENCE levelid; save_data* save; save = fileGetSaveForFoldernum(folder); @@ -1442,15 +1409,15 @@ s32 fileIs007ModeUnlocked(u32 folder) return TRUE; } - for (stage = SP_LEVEL_DAM; stage < SP_LEVEL_MAX; stage++) + for (levelid = SP_LEVEL_DAM; levelid < SP_LEVEL_MAX; levelid++) { - if (! fileGetSaveStageCompletedForDifficulty(save, stage, DIFFICULTY_00)) + if (! fileGetSaveStageCompletedForDifficulty(save, levelid, DIFFICULTY_00)) { break; } } - if (stage == SP_LEVEL_MAX) + if (levelid == SP_LEVEL_MAX) { return TRUE; } diff --git a/src/game/file2.h b/src/game/file2.h index 05b837d..3bba55e 100644 --- a/src/game/file2.h +++ b/src/game/file2.h @@ -6,7 +6,7 @@ #include #include "file.h" -#define RAMROM_FOLDERNUM 0x64 + /* EEPROM masks for in-game settings */ #define OPTION_INVERTLOOK 0x0001 @@ -26,13 +26,13 @@ u8 fileGetBondForFolder(u32 folder); void fileValidateSaves(void); bool fileGetIsCheatUnlocked(save_data *save, s32 cheat); -STAGESTATUS fileIsStageUnlockedAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE stage, DIFFICULTY difficulty); -void fileUnlockStageInFolderAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE stage, DIFFICULTY difficulty, s32 newtime); -void sub_GAME_7F01E760(s32 foldernum, s32 cheat); +STAGESTATUS fileIsStageUnlockedAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE levelid, DIFFICULTY difficulty); +void fileUnlockStageInFolderAtDifficulty(s32 foldernum, LEVEL_SOLO_SEQUENCE levelid, DIFFICULTY difficulty, s32 newtime); +void fileSaveFolderUnlockCheat(s32 foldernum, s32 cheat); void fileLoadSettingsForFolder(u32 folder); void fileDeleteSaveForFolder(s32 foldernum); -void fileGetHighestStageDifficultyCompletedForFolder(s32 foldernum, LEVEL_SOLO_SEQUENCE *stage, DIFFICULTY *difficulty); +void fileGetHighestStageDifficultyCompletedForFolder(s32 foldernum, LEVEL_SOLO_SEQUENCE *levelid, DIFFICULTY *difficulty); bool check_aztec_completed_any_folder_secret_00(void); bool fileIsEgyptCompletedOn00AnyFolder(void); LEVEL_SOLO_SEQUENCE fileGetHighestStageUnlockedAnyFolder(void); diff --git a/src/game/fog.c b/src/game/fog.c index a9f6bfc..5a6cd77 100644 --- a/src/game/fog.c +++ b/src/game/fog.c @@ -64,8 +64,7 @@ EnvironmentRecord * g_EnvironmentAltp; s32 D_800825F4; #if defined(VERSION_EU) -EnvironmentRecord dword_CODE_bss_800825F8; -s32 bss_800825F8_padding[2]; +struct NearFogRecordF eu_loadCurrentNearFog; #endif /** @@ -276,7 +275,6 @@ f32 fogGetScaledFarFogIntensitySquared(void) } -#if defined(VERSION_US) || defined(VERSION_JP) /** * Address 0x7F0BA758. */ @@ -333,268 +331,32 @@ void fogLoadCurrentEnvironment(EnvironmentRecord *arg0) g_CurrentEnvironment.WaterBlue = arg0->Sky.WaterBlue; g_CurrentEnvironment.WaterConcavity = arg0->Sky.WaterConcavity; - if (arg0->Visibility.Nfd.NearFog == 0.0f) +#if defined(VERSION_EU) + #define FOG_ZERO 0 +#else + #define FOG_ZERO 0.0f +#endif + + if (arg0->Visibility.Nfd.NearFog == FOG_ZERO) { g_NearFogValuesP = NULL; } else { +#if defined(VERSION_EU) + eu_loadCurrentNearFog.NearFog = arg0->Visibility.Nfd.NearFog; + eu_loadCurrentNearFog.MaxVisRange = arg0->Visibility.Nfd.MaxVisRange; + eu_loadCurrentNearFog.MaxObfuscationRange = arg0->Visibility.Nfd.MaxObfuscationRange; + g_NearFogValuesP = &eu_loadCurrentNearFog; +#else g_NearFogValuesP = &arg0->Visibility.Nfd; +#endif } +#undef FOG_ZERO + g_FogSkyIsEnabled = 1; } -#endif -#if defined(VERSION_EU) -GLOBAL_ASM( -.text -glabel fogLoadCurrentEnvironment -/* 0EC3E8 7F0B99F8 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 0EC3EC 7F0B99FC AFBF0014 */ sw $ra, 0x14($sp) -/* 0EC3F0 7F0B9A00 848F0004 */ lh $t7, 4($a0) -/* 0EC3F4 7F0B9A04 848E0002 */ lh $t6, 2($a0) -/* 0EC3F8 7F0B9A08 AFA40038 */ sw $a0, 0x38($sp) -/* 0EC3FC 7F0B9A0C 448F3000 */ mtc1 $t7, $f6 -/* 0EC400 7F0B9A10 448E2000 */ mtc1 $t6, $f4 -/* 0EC404 7F0B9A14 468033A0 */ cvt.s.w $f14, $f6 -/* 0EC408 7F0B9A18 0C001028 */ jal viSetZRange -/* 0EC40C 7F0B9A1C 46802320 */ cvt.s.w $f12, $f4 -/* 0EC410 7F0B9A20 0C00103F */ jal viGetZRange -/* 0EC414 7F0B9A24 27A40030 */ addiu $a0, $sp, 0x30 -/* 0EC418 7F0B9A28 0FC2CEED */ jal bgGetLevelVisibilityScale -/* 0EC41C 7F0B9A2C 00000000 */ nop -/* 0EC420 7F0B9A30 C7A80030 */ lwc1 $f8, 0x30($sp) -/* 0EC424 7F0B9A34 C7A40034 */ lwc1 $f4, 0x34($sp) -/* 0EC428 7F0B9A38 8FA50038 */ lw $a1, 0x38($sp) -/* 0EC42C 7F0B9A3C 46004283 */ div.s $f10, $f8, $f0 -/* 0EC430 7F0B9A40 3C01447A */ li $at, 0x447A0000 # 1000.000000 -/* 0EC434 7F0B9A44 3C048007 */ lui $a0, %hi(g_DifferenceFromFarFogIntensity) # $a0, 0x8007 -/* 0EC438 7F0B9A48 2484CF84 */ addiu $a0, %lo(g_DifferenceFromFarFogIntensity) # addiu $a0, $a0, -0x307c -/* 0EC43C 7F0B9A4C 3C068007 */ lui $a2, %hi(g_FarFogIntensity) # $a2, 0x8007 -/* 0EC440 7F0B9A50 24C6CF80 */ addiu $a2, %lo(g_FarFogIntensity) # addiu $a2, $a2, -0x3080 -/* 0EC444 7F0B9A54 3C038007 */ lui $v1, %hi(g_CurFogDetails) # $v1, 0x8007 -/* 0EC448 7F0B9A58 2463CF68 */ addiu $v1, %lo(g_CurFogDetails) # addiu $v1, $v1, -0x3098 -/* 0EC44C 7F0B9A5C 3C028004 */ lui $v0, %hi(g_CurrentEnvironment) # $v0, 0x8004 -/* 0EC450 7F0B9A60 2442E2BC */ addiu $v0, %lo(g_CurrentEnvironment) # addiu $v0, $v0, -0x1d44 -/* 0EC454 7F0B9A64 46002183 */ div.s $f6, $f4, $f0 -/* 0EC458 7F0B9A68 E7AA0030 */ swc1 $f10, 0x30($sp) -/* 0EC45C 7F0B9A6C 44812000 */ mtc1 $at, $f4 -/* 0EC460 7F0B9A70 E7A60034 */ swc1 $f6, 0x34($sp) -/* 0EC464 7F0B9A74 84B8000C */ lh $t8, 0xc($a1) -/* 0EC468 7F0B9A78 44984000 */ mtc1 $t8, $f8 -/* 0EC46C 7F0B9A7C 00000000 */ nop -/* 0EC470 7F0B9A80 468042A0 */ cvt.s.w $f10, $f8 -/* 0EC474 7F0B9A84 46045183 */ div.s $f6, $f10, $f4 -/* 0EC478 7F0B9A88 44812000 */ mtc1 $at, $f4 -/* 0EC47C 7F0B9A8C 3C018004 */ lui $at, %hi(g_ScaledFarFogIntensity) # $at, 0x8004 -/* 0EC480 7F0B9A90 E4860000 */ swc1 $f6, ($a0) -/* 0EC484 7F0B9A94 84B9000E */ lh $t9, 0xe($a1) -/* 0EC488 7F0B9A98 44994000 */ mtc1 $t9, $f8 -/* 0EC48C 7F0B9A9C 00000000 */ nop -/* 0EC490 7F0B9AA0 468042A0 */ cvt.s.w $f10, $f8 -/* 0EC494 7F0B9AA4 C7A80034 */ lwc1 $f8, 0x34($sp) -/* 0EC498 7F0B9AA8 46045183 */ div.s $f6, $f10, $f4 -/* 0EC49C 7F0B9AAC C7AA0030 */ lwc1 $f10, 0x30($sp) -/* 0EC4A0 7F0B9AB0 460A4381 */ sub.s $f14, $f8, $f10 -/* 0EC4A4 7F0B9AB4 E4C60000 */ swc1 $f6, ($a2) -/* 0EC4A8 7F0B9AB8 C4D00000 */ lwc1 $f16, ($a2) -/* 0EC4AC 7F0B9ABC 46107102 */ mul.s $f4, $f14, $f16 -/* 0EC4B0 7F0B9AC0 46045180 */ add.s $f6, $f10, $f4 -/* 0EC4B4 7F0B9AC4 E426E2B4 */ swc1 $f6, %lo(g_ScaledFarFogIntensity)($at) -/* 0EC4B8 7F0B9AC8 C4820000 */ lwc1 $f2, ($a0) -/* 0EC4BC 7F0B9ACC 3C018004 */ lui $at, %hi(g_ScaledDifferenceFromFarFogIntensity) # $at, 0x8004 -/* 0EC4C0 7F0B9AD0 46027202 */ mul.s $f8, $f14, $f2 -/* 0EC4C4 7F0B9AD4 46085100 */ add.s $f4, $f10, $f8 -/* 0EC4C8 7F0B9AD8 E424E2B8 */ swc1 $f4, %lo(g_ScaledDifferenceFromFarFogIntensity)($at) -/* 0EC4CC 7F0B9ADC 84A80002 */ lh $t0, 2($a1) -/* 0EC4D0 7F0B9AE0 3C014300 */ li $at, 0x43000000 # 128.000000 -/* 0EC4D4 7F0B9AE4 44883000 */ mtc1 $t0, $f6 -/* 0EC4D8 7F0B9AE8 00000000 */ nop -/* 0EC4DC 7F0B9AEC 468032A0 */ cvt.s.w $f10, $f6 -/* 0EC4E0 7F0B9AF0 46005203 */ div.s $f8, $f10, $f0 -/* 0EC4E4 7F0B9AF4 E4680000 */ swc1 $f8, ($v1) -/* 0EC4E8 7F0B9AF8 84A90004 */ lh $t1, 4($a1) -/* 0EC4EC 7F0B9AFC 46028201 */ sub.s $f8, $f16, $f2 -/* 0EC4F0 7F0B9B00 C4720000 */ lwc1 $f18, ($v1) -/* 0EC4F4 7F0B9B04 44892000 */ mtc1 $t1, $f4 -/* 0EC4F8 7F0B9B08 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0EC4FC 7F0B9B0C 468021A0 */ cvt.s.w $f6, $f4 -/* 0EC500 7F0B9B10 44812000 */ mtc1 $at, $f4 -/* 0EC504 7F0B9B14 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0EC508 7F0B9B18 44814000 */ mtc1 $at, $f8 -/* 0EC50C 7F0B9B1C 3C014380 */ li $at, 0x43800000 # 256.000000 -/* 0EC510 7F0B9B20 46003283 */ div.s $f10, $f6, $f0 -/* 0EC514 7F0B9B24 C7A60018 */ lwc1 $f6, 0x18($sp) -/* 0EC518 7F0B9B28 E46A0004 */ swc1 $f10, 4($v1) -/* 0EC51C 7F0B9B2C 46062283 */ div.s $f10, $f4, $f6 -/* 0EC520 7F0B9B30 C46C0004 */ lwc1 $f12, 4($v1) -/* 0EC524 7F0B9B34 46024101 */ sub.s $f4, $f8, $f2 -/* 0EC528 7F0B9B38 E7AA0020 */ swc1 $f10, 0x20($sp) -/* 0EC52C 7F0B9B3C 44815000 */ mtc1 $at, $f10 -/* 0EC530 7F0B9B40 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0EC534 7F0B9B44 460A2202 */ mul.s $f8, $f4, $f10 -/* 0EC538 7F0B9B48 46126281 */ sub.s $f10, $f12, $f18 -/* 0EC53C 7F0B9B4C E7AA0018 */ swc1 $f10, 0x18($sp) -/* 0EC540 7F0B9B50 44815000 */ mtc1 $at, $f10 -/* 0EC544 7F0B9B54 46064103 */ div.s $f4, $f8, $f6 -/* 0EC548 7F0B9B58 C7A80020 */ lwc1 $f8, 0x20($sp) -/* 0EC54C 7F0B9B5C 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 0EC550 7F0B9B60 46004187 */ neg.s $f6, $f8 -/* 0EC554 7F0B9B64 460A9200 */ add.s $f8, $f18, $f10 -/* 0EC558 7F0B9B68 C7AA0018 */ lwc1 $f10, 0x18($sp) -/* 0EC55C 7F0B9B6C E7A4001C */ swc1 $f4, 0x1c($sp) -/* 0EC560 7F0B9B70 460C3102 */ mul.s $f4, $f6, $f12 -/* 0EC564 7F0B9B74 00000000 */ nop -/* 0EC568 7F0B9B78 46082182 */ mul.s $f6, $f4, $f8 -/* 0EC56C 7F0B9B7C 44814000 */ mtc1 $at, $f8 -/* 0EC570 7F0B9B80 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0EC574 7F0B9B84 460A3103 */ div.s $f4, $f6, $f10 -/* 0EC578 7F0B9B88 44815000 */ mtc1 $at, $f10 -/* 0EC57C 7F0B9B8C 3C01437F */ li $at, 0x437F0000 # 255.000000 -/* 0EC580 7F0B9B90 46082183 */ div.s $f6, $f4, $f8 -/* 0EC584 7F0B9B94 C7A80020 */ lwc1 $f8, 0x20($sp) -/* 0EC588 7F0B9B98 460A6100 */ add.s $f4, $f12, $f10 -/* 0EC58C 7F0B9B9C C7AA0018 */ lwc1 $f10, 0x18($sp) -/* 0EC590 7F0B9BA0 E4660010 */ swc1 $f6, 0x10($v1) -/* 0EC594 7F0B9BA4 46082182 */ mul.s $f6, $f4, $f8 -/* 0EC598 7F0B9BA8 C7A8001C */ lwc1 $f8, 0x1c($sp) -/* 0EC59C 7F0B9BAC 460A3103 */ div.s $f4, $f6, $f10 -/* 0EC5A0 7F0B9BB0 44815000 */ mtc1 $at, $f10 -/* 0EC5A4 7F0B9BB4 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0EC5A8 7F0B9BB8 46082180 */ add.s $f6, $f4, $f8 -/* 0EC5AC 7F0B9BBC 460A3103 */ div.s $f4, $f6, $f10 -/* 0EC5B0 7F0B9BC0 E4640014 */ swc1 $f4, 0x14($v1) -/* 0EC5B4 7F0B9BC4 84AA000C */ lh $t2, 0xc($a1) -/* 0EC5B8 7F0B9BC8 AC4A0000 */ sw $t2, ($v0) -/* 0EC5BC 7F0B9BCC 84AB000E */ lh $t3, 0xe($a1) -/* 0EC5C0 7F0B9BD0 AC4B0004 */ sw $t3, 4($v0) -/* 0EC5C4 7F0B9BD4 90AC0010 */ lbu $t4, 0x10($a1) -/* 0EC5C8 7F0B9BD8 A04C0008 */ sb $t4, 8($v0) -/* 0EC5CC 7F0B9BDC 90AD0011 */ lbu $t5, 0x11($a1) -/* 0EC5D0 7F0B9BE0 A04D0009 */ sb $t5, 9($v0) -/* 0EC5D4 7F0B9BE4 90AE0012 */ lbu $t6, 0x12($a1) -/* 0EC5D8 7F0B9BE8 A04E000A */ sb $t6, 0xa($v0) -/* 0EC5DC 7F0B9BEC 90AF0013 */ lbu $t7, 0x13($a1) -/* 0EC5E0 7F0B9BF0 A04F000B */ sb $t7, 0xb($v0) -/* 0EC5E4 7F0B9BF4 84B80014 */ lh $t8, 0x14($a1) -/* 0EC5E8 7F0B9BF8 44984000 */ mtc1 $t8, $f8 -/* 0EC5EC 7F0B9BFC 00000000 */ nop -/* 0EC5F0 7F0B9C00 468041A0 */ cvt.s.w $f6, $f8 -/* 0EC5F4 7F0B9C04 E446000C */ swc1 $f6, 0xc($v0) -/* 0EC5F8 7F0B9C08 90B90016 */ lbu $t9, 0x16($a1) -/* 0EC5FC 7F0B9C0C A4590010 */ sh $t9, 0x10($v0) -/* 0EC600 7F0B9C10 90A80017 */ lbu $t0, 0x17($a1) -/* 0EC604 7F0B9C14 44885000 */ mtc1 $t0, $f10 -/* 0EC608 7F0B9C18 05010004 */ bgez $t0, .L7F0B9C2C -/* 0EC60C 7F0B9C1C 46805120 */ cvt.s.w $f4, $f10 -/* 0EC610 7F0B9C20 44814000 */ mtc1 $at, $f8 -/* 0EC614 7F0B9C24 00000000 */ nop -/* 0EC618 7F0B9C28 46082100 */ add.s $f4, $f4, $f8 -.L7F0B9C2C: -/* 0EC61C 7F0B9C2C E4440014 */ swc1 $f4, 0x14($v0) -/* 0EC620 7F0B9C30 90A90018 */ lbu $t1, 0x18($a1) -/* 0EC624 7F0B9C34 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0EC628 7F0B9C38 44893000 */ mtc1 $t1, $f6 -/* 0EC62C 7F0B9C3C 05210004 */ bgez $t1, .L7F0B9C50 -/* 0EC630 7F0B9C40 468032A0 */ cvt.s.w $f10, $f6 -/* 0EC634 7F0B9C44 44814000 */ mtc1 $at, $f8 -/* 0EC638 7F0B9C48 00000000 */ nop -/* 0EC63C 7F0B9C4C 46085280 */ add.s $f10, $f10, $f8 -.L7F0B9C50: -/* 0EC640 7F0B9C50 E44A0018 */ swc1 $f10, 0x18($v0) -/* 0EC644 7F0B9C54 90AA0019 */ lbu $t2, 0x19($a1) -/* 0EC648 7F0B9C58 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0EC64C 7F0B9C5C 448A2000 */ mtc1 $t2, $f4 -/* 0EC650 7F0B9C60 05410004 */ bgez $t2, .L7F0B9C74 -/* 0EC654 7F0B9C64 468021A0 */ cvt.s.w $f6, $f4 -/* 0EC658 7F0B9C68 44814000 */ mtc1 $at, $f8 -/* 0EC65C 7F0B9C6C 00000000 */ nop -/* 0EC660 7F0B9C70 46083180 */ add.s $f6, $f6, $f8 -.L7F0B9C74: -/* 0EC664 7F0B9C74 E446001C */ swc1 $f6, 0x1c($v0) -/* 0EC668 7F0B9C78 90AB001A */ lbu $t3, 0x1a($a1) -/* 0EC66C 7F0B9C7C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0EC670 7F0B9C80 240A0001 */ li $t2, 1 -/* 0EC674 7F0B9C84 A04B0020 */ sb $t3, 0x20($v0) -/* 0EC678 7F0B9C88 84AC001C */ lh $t4, 0x1c($a1) -/* 0EC67C 7F0B9C8C 448C5000 */ mtc1 $t4, $f10 -/* 0EC680 7F0B9C90 00000000 */ nop -/* 0EC684 7F0B9C94 46805120 */ cvt.s.w $f4, $f10 -/* 0EC688 7F0B9C98 E4440024 */ swc1 $f4, 0x24($v0) -/* 0EC68C 7F0B9C9C 90AD001E */ lbu $t5, 0x1e($a1) -/* 0EC690 7F0B9CA0 A44D0028 */ sh $t5, 0x28($v0) -/* 0EC694 7F0B9CA4 90AE001F */ lbu $t6, 0x1f($a1) -/* 0EC698 7F0B9CA8 448E4000 */ mtc1 $t6, $f8 -/* 0EC69C 7F0B9CAC 05C10004 */ bgez $t6, .L7F0B9CC0 -/* 0EC6A0 7F0B9CB0 468041A0 */ cvt.s.w $f6, $f8 -/* 0EC6A4 7F0B9CB4 44815000 */ mtc1 $at, $f10 -/* 0EC6A8 7F0B9CB8 00000000 */ nop -/* 0EC6AC 7F0B9CBC 460A3180 */ add.s $f6, $f6, $f10 -.L7F0B9CC0: -/* 0EC6B0 7F0B9CC0 E446002C */ swc1 $f6, 0x2c($v0) -/* 0EC6B4 7F0B9CC4 90AF0020 */ lbu $t7, 0x20($a1) -/* 0EC6B8 7F0B9CC8 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0EC6BC 7F0B9CCC 448F2000 */ mtc1 $t7, $f4 -/* 0EC6C0 7F0B9CD0 05E10004 */ bgez $t7, .L7F0B9CE4 -/* 0EC6C4 7F0B9CD4 46802220 */ cvt.s.w $f8, $f4 -/* 0EC6C8 7F0B9CD8 44815000 */ mtc1 $at, $f10 -/* 0EC6CC 7F0B9CDC 00000000 */ nop -/* 0EC6D0 7F0B9CE0 460A4200 */ add.s $f8, $f8, $f10 -.L7F0B9CE4: -/* 0EC6D4 7F0B9CE4 E4480030 */ swc1 $f8, 0x30($v0) -/* 0EC6D8 7F0B9CE8 90B80021 */ lbu $t8, 0x21($a1) -/* 0EC6DC 7F0B9CEC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0EC6E0 7F0B9CF0 44983000 */ mtc1 $t8, $f6 -/* 0EC6E4 7F0B9CF4 07010004 */ bgez $t8, .L7F0B9D08 -/* 0EC6E8 7F0B9CF8 46803120 */ cvt.s.w $f4, $f6 -/* 0EC6EC 7F0B9CFC 44815000 */ mtc1 $at, $f10 -/* 0EC6F0 7F0B9D00 00000000 */ nop -/* 0EC6F4 7F0B9D04 460A2100 */ add.s $f4, $f4, $f10 -.L7F0B9D08: -/* 0EC6F8 7F0B9D08 E4440034 */ swc1 $f4, 0x34($v0) -/* 0EC6FC 7F0B9D0C 90B90022 */ lbu $t9, 0x22($a1) -/* 0EC700 7F0B9D10 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0EC704 7F0B9D14 44994000 */ mtc1 $t9, $f8 -/* 0EC708 7F0B9D18 07210004 */ bgez $t9, .L7F0B9D2C -/* 0EC70C 7F0B9D1C 468041A0 */ cvt.s.w $f6, $f8 -/* 0EC710 7F0B9D20 44815000 */ mtc1 $at, $f10 -/* 0EC714 7F0B9D24 00000000 */ nop -/* 0EC718 7F0B9D28 460A3180 */ add.s $f6, $f6, $f10 -.L7F0B9D2C: -/* 0EC71C 7F0B9D2C E4460038 */ swc1 $f6, 0x38($v0) -/* 0EC720 7F0B9D30 84A30006 */ lh $v1, 6($a1) -/* 0EC724 7F0B9D34 3C018007 */ lui $at, %hi(g_NearFogValuesP) # $at, 0x8007 -/* 0EC728 7F0B9D38 54600004 */ bnezl $v1, .L7F0B9D4C -/* 0EC72C 7F0B9D3C 44832000 */ mtc1 $v1, $f4 -/* 0EC730 7F0B9D40 10000012 */ b .L7F0B9D8C -/* 0EC734 7F0B9D44 AC20CF64 */ sw $zero, %lo(g_NearFogValuesP)($at) -/* 0EC738 7F0B9D48 44832000 */ mtc1 $v1, $f4 -.L7F0B9D4C: -/* 0EC73C 7F0B9D4C 3C028007 */ lui $v0, %hi(dword_CODE_bss_800825F8) # $v0, 0x8007 -/* 0EC740 7F0B9D50 2442CF98 */ addiu $v0, %lo(dword_CODE_bss_800825F8) # addiu $v0, $v0, -0x3068 -/* 0EC744 7F0B9D54 46802220 */ cvt.s.w $f8, $f4 -/* 0EC748 7F0B9D58 3C018007 */ lui $at, %hi(g_NearFogValuesP) # $at, 0x8007 -/* 0EC74C 7F0B9D5C E4480000 */ swc1 $f8, ($v0) -/* 0EC750 7F0B9D60 84A80008 */ lh $t0, 8($a1) -/* 0EC754 7F0B9D64 44885000 */ mtc1 $t0, $f10 -/* 0EC758 7F0B9D68 00000000 */ nop -/* 0EC75C 7F0B9D6C 468051A0 */ cvt.s.w $f6, $f10 -/* 0EC760 7F0B9D70 E4460004 */ swc1 $f6, 4($v0) -/* 0EC764 7F0B9D74 84A9000A */ lh $t1, 0xa($a1) -/* 0EC768 7F0B9D78 44892000 */ mtc1 $t1, $f4 -/* 0EC76C 7F0B9D7C 00000000 */ nop -/* 0EC770 7F0B9D80 46802220 */ cvt.s.w $f8, $f4 -/* 0EC774 7F0B9D84 E4480008 */ swc1 $f8, 8($v0) -/* 0EC778 7F0B9D88 AC22CF64 */ sw $v0, %lo(g_NearFogValuesP)($at) -.L7F0B9D8C: -/* 0EC77C 7F0B9D8C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0EC780 7F0B9D90 3C018007 */ lui $at, %hi(g_FogSkyIsEnabled) # $at, 0x8007 -/* 0EC784 7F0B9D94 AC2ACF60 */ sw $t2, %lo(g_FogSkyIsEnabled)($at) -/* 0EC788 7F0B9D98 03E00008 */ jr $ra -/* 0EC78C 7F0B9D9C 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - /** * Address 0x7F0BA9D0. @@ -730,7 +492,6 @@ void fogLoadLevelEnvironment(s32 level_id, s32 arg1) g_EnvironmentFoundp = NULL; } -#if defined(VERSION_US) || defined(VERSION_JP) /** * Address 0x7F0BACA8. * Switch to next Environment. @@ -738,13 +499,11 @@ void fogLoadLevelEnvironment(s32 level_id, s32 arg1) */ void fogSwitchToSolosky2(f32 arg0) { -#if defined(VERSION_US) || defined(VERSION_JP) - static EnvironmentRecord dword_CODE_bss_800825F8; -#endif + static EnvironmentRecord static_envr; - dword_CODE_bss_800825F8 = *g_EnvironmentMainp; + static_envr = *g_EnvironmentMainp; - dword_CODE_bss_800825F8.Visibility.BlendMultiplier = + static_envr.Visibility.BlendMultiplier = g_EnvironmentMainp->Visibility.BlendMultiplier #if defined(VERSION_EU) + (arg0 * ((f32)g_EnvironmentAltp->Visibility.BlendMultiplier - (f32)g_EnvironmentMainp->Visibility.BlendMultiplier)); @@ -752,7 +511,7 @@ void fogSwitchToSolosky2(f32 arg0) + (arg0 * (g_EnvironmentAltp->Visibility.BlendMultiplier - g_EnvironmentMainp->Visibility.BlendMultiplier)); #endif - dword_CODE_bss_800825F8.Visibility.FarFog = + static_envr.Visibility.FarFog = g_EnvironmentMainp->Visibility.FarFog #if defined(VERSION_EU) + (arg0 * ((f32)g_EnvironmentAltp->Visibility.FarFog - (f32)g_EnvironmentMainp->Visibility.FarFog)); @@ -760,329 +519,33 @@ void fogSwitchToSolosky2(f32 arg0) + (arg0 * (g_EnvironmentAltp->Visibility.FarFog - g_EnvironmentMainp->Visibility.FarFog)); #endif - dword_CODE_bss_800825F8.Fog.DifferenceFromFarIntensity = + static_envr.Fog.DifferenceFromFarIntensity = (f32)g_EnvironmentMainp->Fog.DifferenceFromFarIntensity + (arg0 * ((f32)g_EnvironmentAltp->Fog.DifferenceFromFarIntensity - (f32)g_EnvironmentMainp->Fog.DifferenceFromFarIntensity)); - dword_CODE_bss_800825F8.Fog.FarIntensity = + static_envr.Fog.FarIntensity = (f32)g_EnvironmentMainp->Fog.FarIntensity + (arg0 * ((f32)g_EnvironmentAltp->Fog.FarIntensity - (f32)g_EnvironmentMainp->Fog.FarIntensity)); - dword_CODE_bss_800825F8.Sky.Red = + static_envr.Sky.Red = (f32)g_EnvironmentMainp->Sky.Red + (arg0 * ((f32)g_EnvironmentAltp->Sky.Red - (f32)g_EnvironmentMainp->Sky.Red)); - dword_CODE_bss_800825F8.Sky.Green = + static_envr.Sky.Green = (f32)g_EnvironmentMainp->Sky.Green + (arg0 * ((f32)g_EnvironmentAltp->Sky.Green - (f32)g_EnvironmentMainp->Sky.Green)); - dword_CODE_bss_800825F8.Sky.Blue = + static_envr.Sky.Blue = (f32)g_EnvironmentMainp->Sky.Blue + (arg0 * ((f32)g_EnvironmentAltp->Sky.Blue - (f32)g_EnvironmentMainp->Sky.Blue)); - dword_CODE_bss_800825F8.Sky.Red &= 0xf8; - dword_CODE_bss_800825F8.Sky.Green &= 0xf8; - dword_CODE_bss_800825F8.Sky.Blue &= 0xf8; + static_envr.Sky.Red &= 0xf8; + static_envr.Sky.Green &= 0xf8; + static_envr.Sky.Blue &= 0xf8; - fogLoadCurrentEnvironment(&dword_CODE_bss_800825F8); + fogLoadCurrentEnvironment(&static_envr); } -#else - -/** - * - * .bss -glabel dword_CODE_bss_800825F8 -.word 0,0,0,0 -.word 0,0,0,0 -.word 0,0,0,0 - * -*/ -/** - * hack: - * variables referenced in the following asm are wrong, just used - * to get matching addresses. -*/ -GLOBAL_ASM( - - - - -.text -glabel fogSwitchToSolosky2 -/* 0ECA68 7F0BA078 3C028007 */ lui $v0, %hi(g_EnvironmentMainp) # $v0, 0x8007 -/* 0ECA6C 7F0BA07C 8C42CF8C */ lw $v0, %lo(g_EnvironmentMainp)($v0) -/* 0ECA70 7F0BA080 3C048007 */ lui $a0, %hi(g_EnvironmentMainp + 0x1c) # $a0, 0x8007 -/* 0ECA74 7F0BA084 2484CFA8 */ addiu $a0, %lo(g_EnvironmentMainp + 0x1c) # addiu $a0, $a0, -0x3058 -/* 0ECA78 7F0BA088 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0ECA7C 7F0BA08C AFBF0014 */ sw $ra, 0x14($sp) -/* 0ECA80 7F0BA090 00804025 */ move $t0, $a0 -/* 0ECA84 7F0BA094 0040C825 */ move $t9, $v0 -/* 0ECA88 7F0BA098 24580024 */ addiu $t8, $v0, 0x24 -.L7F0BA09C: -/* 0ECA8C 7F0BA09C 8B210000 */ lwl $at, ($t9) -/* 0ECA90 7F0BA0A0 9B210003 */ lwr $at, 3($t9) -/* 0ECA94 7F0BA0A4 2739000C */ addiu $t9, $t9, 0xc -/* 0ECA98 7F0BA0A8 2508000C */ addiu $t0, $t0, 0xc -/* 0ECA9C 7F0BA0AC AD01FFF4 */ sw $at, -0xc($t0) -/* 0ECAA0 7F0BA0B0 8B21FFF8 */ lwl $at, -8($t9) -/* 0ECAA4 7F0BA0B4 9B21FFFB */ lwr $at, -5($t9) -/* 0ECAA8 7F0BA0B8 AD01FFF8 */ sw $at, -8($t0) -/* 0ECAAC 7F0BA0BC 8B21FFFC */ lwl $at, -4($t9) -/* 0ECAB0 7F0BA0C0 9B21FFFF */ lwr $at, -1($t9) -/* 0ECAB4 7F0BA0C4 1738FFF5 */ bne $t9, $t8, .L7F0BA09C -/* 0ECAB8 7F0BA0C8 AD01FFFC */ sw $at, -4($t0) -/* 0ECABC 7F0BA0CC 3C038007 */ lui $v1, %hi(g_EnvironmentMainp) # $v1, 0x8007 -/* 0ECAC0 7F0BA0D0 8C63CF90 */ lw $v1, %lo(g_EnvironmentMainp+4)($v1) -/* 0ECAC4 7F0BA0D4 84490002 */ lh $t1, 2($v0) -/* 0ECAC8 7F0BA0D8 3C018007 */ lui $at, %hi(g_EnvironmentMainp+4) # $at, 0x8007 -/* 0ECACC 7F0BA0DC 846A0002 */ lh $t2, 2($v1) -/* 0ECAD0 7F0BA0E0 44892000 */ mtc1 $t1, $f4 -/* 0ECAD4 7F0BA0E4 448A3000 */ mtc1 $t2, $f6 -/* 0ECAD8 7F0BA0E8 46802020 */ cvt.s.w $f0, $f4 -/* 0ECADC 7F0BA0EC 46803220 */ cvt.s.w $f8, $f6 -/* 0ECAE0 7F0BA0F0 46004281 */ sub.s $f10, $f8, $f0 -/* 0ECAE4 7F0BA0F4 460A6102 */ mul.s $f4, $f12, $f10 -/* 0ECAE8 7F0BA0F8 46040180 */ add.s $f6, $f0, $f4 -/* 0ECAEC 7F0BA0FC 4600320D */ trunc.w.s $f8, $f6 -/* 0ECAF0 7F0BA100 440C4000 */ mfc1 $t4, $f8 -/* 0ECAF4 7F0BA104 00000000 */ nop -/* 0ECAF8 7F0BA108 A42CCFAA */ sh $t4, %lo(g_EnvironmentMainp+0x1e)($at) -/* 0ECAFC 7F0BA10C 844D0004 */ lh $t5, 4($v0) -/* 0ECB00 7F0BA110 846F0004 */ lh $t7, 4($v1) -/* 0ECB04 7F0BA114 448D5000 */ mtc1 $t5, $f10 -/* 0ECB08 7F0BA118 448F2000 */ mtc1 $t7, $f4 -/* 0ECB0C 7F0BA11C 468050A0 */ cvt.s.w $f2, $f10 -/* 0ECB10 7F0BA120 468021A0 */ cvt.s.w $f6, $f4 -/* 0ECB14 7F0BA124 46023201 */ sub.s $f8, $f6, $f2 -/* 0ECB18 7F0BA128 46086282 */ mul.s $f10, $f12, $f8 -/* 0ECB1C 7F0BA12C 460A1100 */ add.s $f4, $f2, $f10 -/* 0ECB20 7F0BA130 4600218D */ trunc.w.s $f6, $f4 -/* 0ECB24 7F0BA134 44183000 */ mfc1 $t8, $f6 -/* 0ECB28 7F0BA138 00000000 */ nop -/* 0ECB2C 7F0BA13C A438CFAC */ sh $t8, %lo(g_EnvironmentMainp+0x20)($at) -/* 0ECB30 7F0BA140 8459000C */ lh $t9, 0xc($v0) -/* 0ECB34 7F0BA144 8468000C */ lh $t0, 0xc($v1) -/* 0ECB38 7F0BA148 3C018007 */ lui $at, %hi(g_EnvironmentMainp+0x20) # $at, 0x8007 -/* 0ECB3C 7F0BA14C 44994000 */ mtc1 $t9, $f8 -/* 0ECB40 7F0BA150 44885000 */ mtc1 $t0, $f10 -/* 0ECB44 7F0BA154 468043A0 */ cvt.s.w $f14, $f8 -/* 0ECB48 7F0BA158 46805120 */ cvt.s.w $f4, $f10 -/* 0ECB4C 7F0BA15C 460E2181 */ sub.s $f6, $f4, $f14 -/* 0ECB50 7F0BA160 46066202 */ mul.s $f8, $f12, $f6 -/* 0ECB54 7F0BA164 46087280 */ add.s $f10, $f14, $f8 -/* 0ECB58 7F0BA168 4600510D */ trunc.w.s $f4, $f10 -/* 0ECB5C 7F0BA16C 440A2000 */ mfc1 $t2, $f4 -/* 0ECB60 7F0BA170 00000000 */ nop -/* 0ECB64 7F0BA174 A42ACFB4 */ sh $t2, %lo(g_EnvironmentMainp+0x28)($at) -/* 0ECB68 7F0BA178 844B000E */ lh $t3, 0xe($v0) -/* 0ECB6C 7F0BA17C 846C000E */ lh $t4, 0xe($v1) -/* 0ECB70 7F0BA180 448B3000 */ mtc1 $t3, $f6 -/* 0ECB74 7F0BA184 448C4000 */ mtc1 $t4, $f8 -/* 0ECB78 7F0BA188 46803420 */ cvt.s.w $f16, $f6 -/* 0ECB7C 7F0BA18C 468042A0 */ cvt.s.w $f10, $f8 -/* 0ECB80 7F0BA190 46105101 */ sub.s $f4, $f10, $f16 -/* 0ECB84 7F0BA194 46046182 */ mul.s $f6, $f12, $f4 -/* 0ECB88 7F0BA198 46068200 */ add.s $f8, $f16, $f6 -/* 0ECB8C 7F0BA19C 4600428D */ trunc.w.s $f10, $f8 -/* 0ECB90 7F0BA1A0 440F5000 */ mfc1 $t7, $f10 -/* 0ECB94 7F0BA1A4 00000000 */ nop -/* 0ECB98 7F0BA1A8 A42FCFB6 */ sh $t7, %lo(g_EnvironmentMainp+0x2a)($at) -/* 0ECB9C 7F0BA1AC 904E0010 */ lbu $t6, 0x10($v0) -/* 0ECBA0 7F0BA1B0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0ECBA4 7F0BA1B4 448E2000 */ mtc1 $t6, $f4 -/* 0ECBA8 7F0BA1B8 05C10004 */ bgez $t6, .L7F0BA1CC -/* 0ECBAC 7F0BA1BC 468024A0 */ cvt.s.w $f18, $f4 -/* 0ECBB0 7F0BA1C0 44813000 */ mtc1 $at, $f6 -/* 0ECBB4 7F0BA1C4 00000000 */ nop -/* 0ECBB8 7F0BA1C8 46069480 */ add.s $f18, $f18, $f6 -.L7F0BA1CC: -/* 0ECBBC 7F0BA1CC 90780010 */ lbu $t8, 0x10($v1) -/* 0ECBC0 7F0BA1D0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0ECBC4 7F0BA1D4 44984000 */ mtc1 $t8, $f8 -/* 0ECBC8 7F0BA1D8 07010004 */ bgez $t8, .L7F0BA1EC -/* 0ECBCC 7F0BA1DC 468042A0 */ cvt.s.w $f10, $f8 -/* 0ECBD0 7F0BA1E0 44812000 */ mtc1 $at, $f4 -/* 0ECBD4 7F0BA1E4 00000000 */ nop -/* 0ECBD8 7F0BA1E8 46045280 */ add.s $f10, $f10, $f4 -.L7F0BA1EC: -/* 0ECBDC 7F0BA1EC 46125181 */ sub.s $f6, $f10, $f18 -/* 0ECBE0 7F0BA1F0 24080001 */ li $t0, 1 -/* 0ECBE4 7F0BA1F4 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0ECBE8 7F0BA1F8 46066202 */ mul.s $f8, $f12, $f6 -/* 0ECBEC 7F0BA1FC 46089100 */ add.s $f4, $f18, $f8 -/* 0ECBF0 7F0BA200 4459F800 */ cfc1 $t9, $31 -/* 0ECBF4 7F0BA204 44C8F800 */ ctc1 $t0, $31 -/* 0ECBF8 7F0BA208 00000000 */ nop -/* 0ECBFC 7F0BA20C 460022A4 */ cvt.w.s $f10, $f4 -/* 0ECC00 7F0BA210 4448F800 */ cfc1 $t0, $31 -/* 0ECC04 7F0BA214 00000000 */ nop -/* 0ECC08 7F0BA218 31080078 */ andi $t0, $t0, 0x78 -/* 0ECC0C 7F0BA21C 51000013 */ beql $t0, $zero, .L7F0BA26C -/* 0ECC10 7F0BA220 44085000 */ mfc1 $t0, $f10 -/* 0ECC14 7F0BA224 44815000 */ mtc1 $at, $f10 -/* 0ECC18 7F0BA228 24080001 */ li $t0, 1 -/* 0ECC1C 7F0BA22C 460A2281 */ sub.s $f10, $f4, $f10 -/* 0ECC20 7F0BA230 44C8F800 */ ctc1 $t0, $31 -/* 0ECC24 7F0BA234 00000000 */ nop -/* 0ECC28 7F0BA238 460052A4 */ cvt.w.s $f10, $f10 -/* 0ECC2C 7F0BA23C 4448F800 */ cfc1 $t0, $31 -/* 0ECC30 7F0BA240 00000000 */ nop -/* 0ECC34 7F0BA244 31080078 */ andi $t0, $t0, 0x78 -/* 0ECC38 7F0BA248 15000005 */ bnez $t0, .L7F0BA260 -/* 0ECC3C 7F0BA24C 00000000 */ nop -/* 0ECC40 7F0BA250 44085000 */ mfc1 $t0, $f10 -/* 0ECC44 7F0BA254 3C018000 */ lui $at, 0x8000 -/* 0ECC48 7F0BA258 10000007 */ b .L7F0BA278 -/* 0ECC4C 7F0BA25C 01014025 */ or $t0, $t0, $at -.L7F0BA260: -/* 0ECC50 7F0BA260 10000005 */ b .L7F0BA278 -/* 0ECC54 7F0BA264 2408FFFF */ li $t0, -1 -/* 0ECC58 7F0BA268 44085000 */ mfc1 $t0, $f10 -.L7F0BA26C: -/* 0ECC5C 7F0BA26C 00000000 */ nop -/* 0ECC60 7F0BA270 0500FFFB */ bltz $t0, .L7F0BA260 -/* 0ECC64 7F0BA274 00000000 */ nop -.L7F0BA278: -/* 0ECC68 7F0BA278 3C018007 */ lui $at, %hi(g_EnvironmentMainp+0x2c) # $at, 0x8007 -/* 0ECC6C 7F0BA27C A028CFB8 */ sb $t0, %lo(g_EnvironmentMainp+0x2c)($at) -/* 0ECC70 7F0BA280 90490011 */ lbu $t1, 0x11($v0) -/* 0ECC74 7F0BA284 44D9F800 */ ctc1 $t9, $31 -/* 0ECC78 7F0BA288 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0ECC7C 7F0BA28C 44893000 */ mtc1 $t1, $f6 -/* 0ECC80 7F0BA290 05210004 */ bgez $t1, .L7F0BA2A4 -/* 0ECC84 7F0BA294 46803220 */ cvt.s.w $f8, $f6 -/* 0ECC88 7F0BA298 44812000 */ mtc1 $at, $f4 -/* 0ECC8C 7F0BA29C 00000000 */ nop -/* 0ECC90 7F0BA2A0 46044200 */ add.s $f8, $f8, $f4 -.L7F0BA2A4: -/* 0ECC94 7F0BA2A4 E7A80018 */ swc1 $f8, 0x18($sp) -/* 0ECC98 7F0BA2A8 906A0011 */ lbu $t2, 0x11($v1) -/* 0ECC9C 7F0BA2AC C7A80018 */ lwc1 $f8, 0x18($sp) -/* 0ECCA0 7F0BA2B0 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0ECCA4 7F0BA2B4 448A5000 */ mtc1 $t2, $f10 -/* 0ECCA8 7F0BA2B8 310900F8 */ andi $t1, $t0, 0xf8 -/* 0ECCAC 7F0BA2BC 05410004 */ bgez $t2, .L7F0BA2D0 -/* 0ECCB0 7F0BA2C0 468051A0 */ cvt.s.w $f6, $f10 -/* 0ECCB4 7F0BA2C4 44812000 */ mtc1 $at, $f4 -/* 0ECCB8 7F0BA2C8 00000000 */ nop -/* 0ECCBC 7F0BA2CC 46043180 */ add.s $f6, $f6, $f4 -.L7F0BA2D0: -/* 0ECCC0 7F0BA2D0 46083281 */ sub.s $f10, $f6, $f8 -/* 0ECCC4 7F0BA2D4 240C0001 */ li $t4, 1 -/* 0ECCC8 7F0BA2D8 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0ECCCC 7F0BA2DC 460A6102 */ mul.s $f4, $f12, $f10 -/* 0ECCD0 7F0BA2E0 46044180 */ add.s $f6, $f8, $f4 -/* 0ECCD4 7F0BA2E4 444BF800 */ cfc1 $t3, $31 -/* 0ECCD8 7F0BA2E8 44CCF800 */ ctc1 $t4, $31 -/* 0ECCDC 7F0BA2EC 00000000 */ nop -/* 0ECCE0 7F0BA2F0 460032A4 */ cvt.w.s $f10, $f6 -/* 0ECCE4 7F0BA2F4 444CF800 */ cfc1 $t4, $31 -/* 0ECCE8 7F0BA2F8 00000000 */ nop -/* 0ECCEC 7F0BA2FC 318C0078 */ andi $t4, $t4, 0x78 -/* 0ECCF0 7F0BA300 51800013 */ beql $t4, $zero, .L7F0BA350 -/* 0ECCF4 7F0BA304 440C5000 */ mfc1 $t4, $f10 -/* 0ECCF8 7F0BA308 44815000 */ mtc1 $at, $f10 -/* 0ECCFC 7F0BA30C 240C0001 */ li $t4, 1 -/* 0ECD00 7F0BA310 460A3281 */ sub.s $f10, $f6, $f10 -/* 0ECD04 7F0BA314 44CCF800 */ ctc1 $t4, $31 -/* 0ECD08 7F0BA318 00000000 */ nop -/* 0ECD0C 7F0BA31C 460052A4 */ cvt.w.s $f10, $f10 -/* 0ECD10 7F0BA320 444CF800 */ cfc1 $t4, $31 -/* 0ECD14 7F0BA324 00000000 */ nop -/* 0ECD18 7F0BA328 318C0078 */ andi $t4, $t4, 0x78 -/* 0ECD1C 7F0BA32C 15800005 */ bnez $t4, .L7F0BA344 -/* 0ECD20 7F0BA330 00000000 */ nop -/* 0ECD24 7F0BA334 440C5000 */ mfc1 $t4, $f10 -/* 0ECD28 7F0BA338 3C018000 */ lui $at, 0x8000 -/* 0ECD2C 7F0BA33C 10000007 */ b .L7F0BA35C -/* 0ECD30 7F0BA340 01816025 */ or $t4, $t4, $at -.L7F0BA344: -/* 0ECD34 7F0BA344 10000005 */ b .L7F0BA35C -/* 0ECD38 7F0BA348 240CFFFF */ li $t4, -1 -/* 0ECD3C 7F0BA34C 440C5000 */ mfc1 $t4, $f10 -.L7F0BA350: -/* 0ECD40 7F0BA350 00000000 */ nop -/* 0ECD44 7F0BA354 0580FFFB */ bltz $t4, .L7F0BA344 -/* 0ECD48 7F0BA358 00000000 */ nop -.L7F0BA35C: -/* 0ECD4C 7F0BA35C 3C018007 */ lui $at, %hi(g_EnvironmentMainp+0x2d) # $at, 0x8007 -/* 0ECD50 7F0BA360 A02CCFB9 */ sb $t4, %lo(g_EnvironmentMainp+0x2d)($at) -/* 0ECD54 7F0BA364 904D0012 */ lbu $t5, 0x12($v0) -/* 0ECD58 7F0BA368 44CBF800 */ ctc1 $t3, $31 -/* 0ECD5C 7F0BA36C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0ECD60 7F0BA370 448D4000 */ mtc1 $t5, $f8 -/* 0ECD64 7F0BA374 318B00F8 */ andi $t3, $t4, 0xf8 -/* 0ECD68 7F0BA378 05A10004 */ bgez $t5, .L7F0BA38C -/* 0ECD6C 7F0BA37C 46804120 */ cvt.s.w $f4, $f8 -/* 0ECD70 7F0BA380 44813000 */ mtc1 $at, $f6 -/* 0ECD74 7F0BA384 00000000 */ nop -/* 0ECD78 7F0BA388 46062100 */ add.s $f4, $f4, $f6 -.L7F0BA38C: -/* 0ECD7C 7F0BA38C E7A4001C */ swc1 $f4, 0x1c($sp) -/* 0ECD80 7F0BA390 906F0012 */ lbu $t7, 0x12($v1) -/* 0ECD84 7F0BA394 C7A4001C */ lwc1 $f4, 0x1c($sp) -/* 0ECD88 7F0BA398 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 0ECD8C 7F0BA39C 448F5000 */ mtc1 $t7, $f10 -/* 0ECD90 7F0BA3A0 05E10004 */ bgez $t7, .L7F0BA3B4 -/* 0ECD94 7F0BA3A4 46805220 */ cvt.s.w $f8, $f10 -/* 0ECD98 7F0BA3A8 44813000 */ mtc1 $at, $f6 -/* 0ECD9C 7F0BA3AC 00000000 */ nop -/* 0ECDA0 7F0BA3B0 46064200 */ add.s $f8, $f8, $f6 -.L7F0BA3B4: -/* 0ECDA4 7F0BA3B4 46044281 */ sub.s $f10, $f8, $f4 -/* 0ECDA8 7F0BA3B8 24180001 */ li $t8, 1 -/* 0ECDAC 7F0BA3BC 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0ECDB0 7F0BA3C0 460A6182 */ mul.s $f6, $f12, $f10 -/* 0ECDB4 7F0BA3C4 46062200 */ add.s $f8, $f4, $f6 -/* 0ECDB8 7F0BA3C8 444EF800 */ cfc1 $t6, $31 -/* 0ECDBC 7F0BA3CC 44D8F800 */ ctc1 $t8, $31 -/* 0ECDC0 7F0BA3D0 00000000 */ nop -/* 0ECDC4 7F0BA3D4 460042A4 */ cvt.w.s $f10, $f8 -/* 0ECDC8 7F0BA3D8 4458F800 */ cfc1 $t8, $31 -/* 0ECDCC 7F0BA3DC 00000000 */ nop -/* 0ECDD0 7F0BA3E0 33180078 */ andi $t8, $t8, 0x78 -/* 0ECDD4 7F0BA3E4 53000013 */ beql $t8, $zero, .L7F0BA434 -/* 0ECDD8 7F0BA3E8 44185000 */ mfc1 $t8, $f10 -/* 0ECDDC 7F0BA3EC 44815000 */ mtc1 $at, $f10 -/* 0ECDE0 7F0BA3F0 24180001 */ li $t8, 1 -/* 0ECDE4 7F0BA3F4 460A4281 */ sub.s $f10, $f8, $f10 -/* 0ECDE8 7F0BA3F8 44D8F800 */ ctc1 $t8, $31 -/* 0ECDEC 7F0BA3FC 00000000 */ nop -/* 0ECDF0 7F0BA400 460052A4 */ cvt.w.s $f10, $f10 -/* 0ECDF4 7F0BA404 4458F800 */ cfc1 $t8, $31 -/* 0ECDF8 7F0BA408 00000000 */ nop -/* 0ECDFC 7F0BA40C 33180078 */ andi $t8, $t8, 0x78 -/* 0ECE00 7F0BA410 17000005 */ bnez $t8, .L7F0BA428 -/* 0ECE04 7F0BA414 00000000 */ nop -/* 0ECE08 7F0BA418 44185000 */ mfc1 $t8, $f10 -/* 0ECE0C 7F0BA41C 3C018000 */ lui $at, 0x8000 -/* 0ECE10 7F0BA420 10000007 */ b .L7F0BA440 -/* 0ECE14 7F0BA424 0301C025 */ or $t8, $t8, $at -.L7F0BA428: -/* 0ECE18 7F0BA428 10000005 */ b .L7F0BA440 -/* 0ECE1C 7F0BA42C 2418FFFF */ li $t8, -1 -/* 0ECE20 7F0BA430 44185000 */ mfc1 $t8, $f10 -.L7F0BA434: -/* 0ECE24 7F0BA434 00000000 */ nop -/* 0ECE28 7F0BA438 0700FFFB */ bltz $t8, .L7F0BA428 -/* 0ECE2C 7F0BA43C 00000000 */ nop -.L7F0BA440: -/* 0ECE30 7F0BA440 3C018007 */ lui $at, %hi(g_EnvironmentMainp+0x2e) # $at, 0x8007 -/* 0ECE34 7F0BA444 A038CFBA */ sb $t8, %lo(g_EnvironmentMainp+0x2e)($at) -/* 0ECE38 7F0BA448 44CEF800 */ ctc1 $t6, $31 -/* 0ECE3C 7F0BA44C 330F00F8 */ andi $t7, $t8, 0xf8 -/* 0ECE40 7F0BA450 A029CFB8 */ sb $t1, %lo(g_EnvironmentMainp+0x2c)($at) -/* 0ECE44 7F0BA454 A02BCFB9 */ sb $t3, %lo(g_EnvironmentMainp+0x2d)($at) -/* 0ECE48 7F0BA458 0FC2E67E */ jal fogLoadCurrentEnvironment -/* 0ECE4C 7F0BA45C A02FCFBA */ sb $t7, %lo(g_EnvironmentMainp+0x2e)($at) -/* 0ECE50 7F0BA460 8FBF0014 */ lw $ra, 0x14($sp) -/* 0ECE54 7F0BA464 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0ECE58 7F0BA468 03E00008 */ jr $ra -/* 0ECE5C 7F0BA46C 00000000 */ nop -) -#endif - /** * @param gdl: @@ -1179,28 +642,28 @@ s32 fogGetPropDistColor(PropRecord *prop, rgba_f32 *color) { if (g_FogSkyIsEnabled == 0) { - return 2; + return 2; // No fog, props cannot be obscured by fog } - if (prop->Unk18 < 0.0f) + if (prop->zDepth < 0.0f) { - return 2; + return 2; // Prop is behind the camera } color->rgba[0] = (f32) g_CurrentEnvironment.Red / 255.0f; color->rgba[1] = (f32) g_CurrentEnvironment.Green / 255.0f; color->rgba[2] = (f32) g_CurrentEnvironment.Blue / 255.0f; - color->rgba[3] = (g_CurFogDetails.far_fog_dist_scaled / prop->Unk18) + g_CurFogDetails.near_fog_dist_scaled; + color->rgba[3] = (g_CurFogDetails.far_fog_dist_scaled / prop->zDepth) + g_CurFogDetails.near_fog_dist_scaled; if (color->rgba[3] < 0.0f) { - return 2; + return 2; // Prop has no fog effect coloring applied to it } if (color->rgba[3] > 1.0f) { - return 0; + return 0; // Prop is completely obscured by fog (don't render) } - return 1; + return 1; // Fog color will be applied to prop } diff --git a/src/game/front.c b/src/game/front.c index c6f1d84..4bc5acd 100644 --- a/src/game/front.c +++ b/src/game/front.c @@ -140,14 +140,14 @@ s32 mp_char_prev_select_player[MAX_PLAYER_COUNT]; /** * EU .bss 80068650 */ -s32 array_favweapon[MAX_PLAYER_COUNT][2]; +s32 array_favweapon[MAX_PLAYER_COUNT][GUNHANDS]; #else /** * Address 800696F0 */ -s32 array_favweapon[MAX_PLAYER_COUNT][2]; +s32 array_favweapon[MAX_PLAYER_COUNT][GUNHANDS]; /** * Address 80069710 @@ -252,8 +252,8 @@ s32 tab_start_highlight = FALSE; s32 tab_next_highlight = FALSE; s32 tab_prev_highlight = FALSE; -s32 selected_folder_num = 0; -s32 selected_folder_num_copy = 0; +s32 selected_folder_num = FOLDER1; +s32 selected_folder_num_copy = FOLDER1; GAMEMODE gamemode = GAMEMODE_INTRO; s32 selected_stage = LEVELID_NONE; @@ -270,8 +270,8 @@ s32 final_menu_briefing_page = BRIEFING_M; s32 current_menu_briefing_page = BRIEFING_TITLE; s32 folder_selection_screen_option_icon = 0; -s32 folder_selected_for_deletion = -1; -s32 folder_selected_for_deletion_choice = 1; +s32 folder_selected_for_deletion = FOLDER_INVALID; +s32 folder_selected_for_deletion_choice = FOLDER2; s32 mission_failed_or_aborted = FALSE; s32 g_isBondKIA = FALSE; @@ -279,7 +279,7 @@ s32 g_isBondKIA = FALSE; s32 is_first_time_on_legal_screen = TRUE; s32 is_first_time_on_main_menu = TRUE; -s32 prev_keypresses = 0; +s32 prev_keypresses = FALSE; s32 ge_logo_bool = FALSE; s32 maybe_is_in_menu = TRUE; @@ -294,7 +294,6 @@ u8 * ptr_logo_and_walletbond_DL = NULL; s32 ptr_menu_videobuffer = 0; struct Model *logoinst = NULL; struct Model * walletinst[] = { NULL, NULL, NULL, NULL}; -s32 D_8002A96C = 0; Lights1 gelogolight = gdSPDefLights1( 0x96, 0x96, 0x96, @@ -314,38 +313,94 @@ f32 slider_007_mode_health = 1.0f; f32 slider_007_mode_accuracy = 1.0f; f32 slider_007_mode_damage = 1.0f; -rgba_u8 D_8002A9B0 = { 0xA0, 0x00, 0x00, 0x00 }; -rgba_u8 D_8002A9B4 = { 0x96, 0x00, 0x00, 0x00 }; -rgba_u8 D_8002A9B8 = { 0x28, 0x00, 0x00, 0x00 }; -rgba_u8 D_8002A9BC = { 0x8C, 0x00, 0x00, 0x00 }; +rgba_u8 D_8002A9B0 = { 160, 0, 0, 0 }; +rgba_u8 D_8002A9B4 = { 150, 0, 0, 0 }; +rgba_u8 D_8002A9B8 = { 40, 0, 0, 0 }; +rgba_u8 D_8002A9BC = { 140, 0, 0, 0 }; struct coord3d legalpage_pos = {0.0f, 0.0f, 0.0f}; struct legal_screen_text legalpage_text_array[] = { - {220, 30, CENTER_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_07), 0}, //"TWYCROSS BOARD OF GAME CLASSIFICATION\n" - { 34, 83, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_08), 0}, //"This is to certify\n" - {226, 84, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_09), 0}, //"(c) 1997 Nintendo/Rare\n" - {226, 97, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_10), 0}, //"(c) 1962, 1995 Danjaq, LLC. &\n" - {226, 110, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_11), 0}, //"U.A.C. All Rights Reserved\n" - {226, 122, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_12), 0}, //"(c) 1997 Eon Productions\n" - {227, 134, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_13), 0}, //"Ltd. & Mac B. Inc.\n" - {219, 211, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_14), 0}, //"Suitable only for 1-4 persons\n" - { 60, 169, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_15), 0}, //"PRESIDENT\n" - { 60, 201, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_16), 0}, //"VICE\n" - { 99, 266, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_17), 0}, //"James Bond theme by Monty Norman.\n" - { 80, 280, LEFT_ALIGN, CENTER_ALIGN, TEXT(LTITLE, TITLE_STR_18), 0} //"Used by permission of EMI Unart Catalog Inc.\n" + {220, 30, CENTER_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_07_TWY), 0}, //"TWYCROSS BOARD OF GAME CLASSIFICATION\n" + { 34, 83, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_08_CERT), 0}, //"This is to certify\n" + {226, 84, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_09_NINRARE), 0}, //"(c) 1997 Nintendo/Rare\n" + {226, 97, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_10_DANJAQ), 0}, //"(c) 1962, 1995 Danjaq, LLC. &\n" + {226, 110, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_11_UAC), 0}, //"U.A.C. All Rights Reserved\n" + {226, 122, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_12_EON), 0}, //"(c) 1997 Eon Productions\n" + {227, 134, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_13_MACB), 0}, //"Ltd. & Mac B. Inc.\n" + {219, 211, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_14_PERSONS), 0}, //"Suitable only for 1-4 persons\n" + { 60, 169, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_15_PRESIDENT), 0}, //"PRESIDENT\n" + { 60, 201, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_16_VICE), 0}, //"VICE\n" + { 99, 266, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_17_NORMAN), 0}, //"James Bond theme by Monty Norman.\n" + { 80, 280, LEFT_ALIGN, CENTER_ALIGN, getStringID(LTITLE, TITLE_STR_18_EMI), 0} //"Used by permission of EMI Unart Catalog Inc.\n" }; -struct unk_joint_list D_8002AABC = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData D_8002AABC = {NULL, + TRUE, + 0x00000003, + NULL, + + NULL, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; + struct coord3d nintendologo_pos = {0}; -struct unk_joint_list D_8002AB08 = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData D_8002AB08 = {NULL, + TRUE, + 0x00000003, + NULL, + + NULL, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; struct coord3d goldeneyelogo_pos = { 0 }; -struct unk_joint_list D_8002AB54 = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData D_8002AB54 = {NULL, + TRUE, + 0x00000003, + NULL, + + NULL, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; + struct coord3d D_8002AB94[] = { {-900.0f, 800.0f, 0.0f}, @@ -358,35 +413,35 @@ struct rectbbox folder_option_COPY_bound = { 0 }; struct rectbbox folder_option_ERASE_bound = { 0 }; struct mission_folder_setup mission_folder_setup_entries[] = { - {"1", TEXT(LTITLE, TITLE_STR_120), 0, LEVELID_NONE, 0, MISSION_HEADER, -1, 0}, - {"i", TEXT(LTITLE, TITLE_STR_121), 0, LEVELID_DAM, 0, MISSION_PART, 0, "UbriefdamZ"}, - {"ii", TEXT(LTITLE, TITLE_STR_122), 0, LEVELID_FACILITY, 0, MISSION_PART, 1, "UbriefarkZ"}, - {"iii", TEXT(LTITLE, TITLE_STR_123), 0, LEVELID_RUNWAY, 0, MISSION_PART, 2, "UbriefrunZ"}, - {"2", TEXT(LTITLE, TITLE_STR_124), 0, LEVELID_NONE, 0, MISSION_HEADER, -1, 0}, - {"i", TEXT(LTITLE, TITLE_STR_125), 0, LEVELID_SURFACE, 0, MISSION_PART, 3, "UbriefsevxZ"}, - {"ii", TEXT(LTITLE, TITLE_STR_126), 0, LEVELID_BUNKER1, 0, MISSION_PART, 4, "UbriefsevbunkerZ"}, - {"3", TEXT(LTITLE, TITLE_STR_127), 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, - {"i", TEXT(LTITLE, TITLE_STR_128), TEXT(LTITLE, TITLE_STR_129), LEVELID_SILO, 1, MISSION_PART, 5, "UbriefsiloZ"}, - {"4", TEXT(LTITLE, TITLE_STR_130), 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, - {"i", TEXT(LTITLE, TITLE_STR_131), 0, LEVELID_FRIGATE, 1, MISSION_PART, 6, "UbriefdestZ"}, - {"5", TEXT(LTITLE, TITLE_STR_124), 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, - {"i", TEXT(LTITLE, TITLE_STR_125), 0, LEVELID_SURFACE2, 1, MISSION_PART, 7, "UbriefsevxbZ"}, - {"ii", TEXT(LTITLE, TITLE_STR_126), 0, LEVELID_BUNKER2, 1, MISSION_PART, 8, "UbriefsevbZ"}, - {"6", TEXT(LTITLE, TITLE_STR_132), 0, LEVELID_NONE, 2, MISSION_HEADER, -1, 0}, - {"i", TEXT(LTITLE, TITLE_STR_133), TEXT(LTITLE, TITLE_STR_134), LEVELID_STATUE, 2, MISSION_PART, 9, "UbriefstatueZ"}, - {"ii", TEXT(LTITLE, TITLE_STR_135), TEXT(LTITLE, TITLE_STR_136), LEVELID_ARCHIVES, 2, MISSION_PART, 0xA, "UbriefarchZ"}, - {"iii", TEXT(LTITLE, TITLE_STR_137), 0, LEVELID_STREETS, 2, MISSION_PART, 0xB, "UbriefpeteZ"}, - {"iv", TEXT(LTITLE, TITLE_STR_138), 0, LEVELID_DEPOT, 2, MISSION_PART, 0xC, "UbriefdepoZ"}, - {"v", TEXT(LTITLE, TITLE_STR_139), 0, LEVELID_TRAIN, 2, MISSION_PART, 0xD, "UbrieftraZ"}, - {"7", TEXT(LTITLE, TITLE_STR_140), 0, LEVELID_NONE, 3, MISSION_HEADER, -1, 0}, - {"i", TEXT(LTITLE, TITLE_STR_141), 0, LEVELID_JUNGLE, 3, MISSION_PART, 0xE, "UbriefjunZ"}, - {"ii", TEXT(LTITLE, TITLE_STR_142), TEXT(LTITLE, TITLE_STR_143), LEVELID_CONTROL, 3, MISSION_PART, 0xF, "UbriefcontrolZ"}, - {"iii", TEXT(LTITLE, TITLE_STR_144), TEXT(LTITLE, TITLE_STR_145), LEVELID_CAVERNS, 3, MISSION_PART, 0x10, "UbriefcaveZ"}, - {"iv", TEXT(LTITLE, TITLE_STR_146), TEXT(LTITLE, TITLE_STR_147), LEVELID_CRADLE, 3, MISSION_PART, 0x11, "UbriefcradZ"}, - {"8", TEXT(LTITLE, TITLE_STR_148), 0, LEVELID_NONE, 4, MISSION_HEADER, -1, 0}, - {"i", TEXT(LTITLE, TITLE_STR_149), TEXT(LTITLE, TITLE_STR_150), LEVELID_AZTEC, 4, MISSION_PART, 0x12, "UbriefaztZ"}, - {"9", TEXT(LTITLE, TITLE_STR_151), 0, LEVELID_NONE, 4, MISSION_HEADER, -1, 0}, - {"i", TEXT(LTITLE, TITLE_STR_152), TEXT(LTITLE, TITLE_STR_153), LEVELID_EGYPT, 4, MISSION_PART, 0x13, "UbriefcrypZ"}, + {"1", getStringID(LTITLE, TITLE_STR_120_ARK), 0, LEVELID_NONE, 0, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_121_DAM), 0, LEVELID_DAM, 0, MISSION_PART, 0, "UbriefdamZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_122_FAC), 0, LEVELID_FACILITY, 0, MISSION_PART, 1, "UbriefarkZ"}, + {"iii", getStringID(LTITLE, TITLE_STR_123_RUN), 0, LEVELID_RUNWAY, 0, MISSION_PART, 2, "UbriefrunZ"}, + {"2", getStringID(LTITLE, TITLE_STR_124_SEV), 0, LEVELID_NONE, 0, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_125_SURF), 0, LEVELID_SURFACE, 0, MISSION_PART, 3, "UbriefsevxZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_126_BUNK), 0, LEVELID_BUNKER1, 0, MISSION_PART, 4, "UbriefsevbunkerZ"}, + {"3", getStringID(LTITLE, TITLE_STR_127_KIRG), 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_128_SILO4), getStringID(LTITLE, TITLE_STR_129_SILO), LEVELID_SILO, 1, MISSION_PART, 5, "UbriefsiloZ"}, + {"4", getStringID(LTITLE, TITLE_STR_130_MONTE), 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_131_FRIG), 0, LEVELID_FRIGATE, 1, MISSION_PART, 6, "UbriefdestZ"}, + {"5", getStringID(LTITLE, TITLE_STR_124_SEV), 0, LEVELID_NONE, 1, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_125_SURF), 0, LEVELID_SURFACE2, 1, MISSION_PART, 7, "UbriefsevxbZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_126_BUNK), 0, LEVELID_BUNKER2, 1, MISSION_PART, 8, "UbriefsevbZ"}, + {"6", getStringID(LTITLE, TITLE_STR_132_STPETER), 0, LEVELID_NONE, 2, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_133_STATPARK), getStringID(LTITLE, TITLE_STR_134_STAT), LEVELID_STATUE, 2, MISSION_PART, 9, "UbriefstatueZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_135_MILARCH), getStringID(LTITLE, TITLE_STR_136_ARCH), LEVELID_ARCHIVES, 2, MISSION_PART, 0xA, "UbriefarchZ"}, + {"iii", getStringID(LTITLE, TITLE_STR_137_STREETS), 0, LEVELID_STREETS, 2, MISSION_PART, 0xB, "UbriefpeteZ"}, + {"iv", getStringID(LTITLE, TITLE_STR_138_DEPOT), 0, LEVELID_DEPOT, 2, MISSION_PART, 0xC, "UbriefdepoZ"}, + {"v", getStringID(LTITLE, TITLE_STR_139_TRAIN), 0, LEVELID_TRAIN, 2, MISSION_PART, 0xD, "UbrieftraZ"}, + {"7", getStringID(LTITLE, TITLE_STR_140_CUBA), 0, LEVELID_NONE, 3, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_141_JUN), 0, LEVELID_JUNGLE, 3, MISSION_PART, 0xE, "UbriefjunZ"}, + {"ii", getStringID(LTITLE, TITLE_STR_142_CONCENTER), getStringID(LTITLE, TITLE_STR_143_CON), LEVELID_CONTROL, 3, MISSION_PART, 0xF, "UbriefcontrolZ"}, + {"iii", getStringID(LTITLE, TITLE_STR_144_WATERCAV), getStringID(LTITLE, TITLE_STR_145_CAV), LEVELID_CAVERNS, 3, MISSION_PART, 0x10, "UbriefcaveZ"}, + {"iv", getStringID(LTITLE, TITLE_STR_146_ANTENNA), getStringID(LTITLE, TITLE_STR_147_CRADLE), LEVELID_CRADLE, 3, MISSION_PART, 0x11, "UbriefcradZ"}, + {"8", getStringID(LTITLE, TITLE_STR_148_TEOTIHUACA), 0, LEVELID_NONE, 4, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_149_AZTECCOMPLEX), getStringID(LTITLE, TITLE_STR_150_AZTEC), LEVELID_AZTEC, 4, MISSION_PART, 0x12, "UbriefaztZ"}, + {"9", getStringID(LTITLE, TITLE_STR_151_ELSAGHIRA), 0, LEVELID_NONE, 4, MISSION_HEADER, -1, 0}, + {"i", getStringID(LTITLE, TITLE_STR_152_EGYPTIANTEMPLE), getStringID(LTITLE, TITLE_STR_153_EGYPTIAN), LEVELID_EGYPT, 4, MISSION_PART, 0x13, "UbriefcrypZ"}, {NULL, 0, 0, LEVELID_NONE, -1, MISSION_PART, -1, 0} }; @@ -394,8 +449,46 @@ struct FolderSelect unknown_folderselect_constructor = { 0x14, 0x14, 0x14 }; struct FolderSelect unknown_folderselect_constructor_0 = { 0x32, 0x32, 0x32 }; -struct unk_joint_list unknown_folderselect = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; -struct unk_joint_list D_8002AF84 = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData unknown_folderselect = {NULL, + TRUE, + 0x00000003, + NULL, + + NULL, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; + +ModelRenderData D_8002AF84 = {NULL, + TRUE, + 0x00000003, + NULL, + + NULL, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; + f32 D_8002AFC4 = 0; f32 D_8002AFC8 = 190.0; @@ -409,220 +502,219 @@ s32 cursor_ypos_table_mission_select[] = {62, 131, 201, 270}; #endif struct MP_game_length_settings multi_game_lengths[] = { - {TEXT(LTITLE, TITLE_STR_45), 0, 0, 0}, /* unlimited */ - {TEXT(LTITLE, TITLE_STR_46), 0, MINS_TO_TIMER60(5), 0}, /* 5 minutes */ - {TEXT(LTITLE, TITLE_STR_47), 0, MINS_TO_TIMER60(10), 0}, /* 10 minutes */ - {TEXT(LTITLE, TITLE_STR_48), 0, MINS_TO_TIMER60(20), 0}, /* 20 minutes */ - {TEXT(LTITLE, TITLE_STR_49), 0, 0, 5}, /* first to 5 points */ - {TEXT(LTITLE, TITLE_STR_50), 0, 0, 10}, /* first to 10 points */ - {TEXT(LTITLE, TITLE_STR_51), 0, 0, 20}, /* first to 20 points */ - {TEXT(LTITLE, TITLE_STR_52), 0, 0, 0} /* last person alive wins */ + {getStringID(LTITLE, TITLE_STR_45_UNLIMITED), 0, 0, 0}, /* unlimited */ + {getStringID(LTITLE, TITLE_STR_46_5MIN), 0, MINS_TO_TIMER60(5), 0}, /* 5 minutes */ + {getStringID(LTITLE, TITLE_STR_47_10MIN), 0, MINS_TO_TIMER60(10), 0}, /* 10 minutes */ + {getStringID(LTITLE, TITLE_STR_48_20MIN), 0, MINS_TO_TIMER60(20), 0}, /* 20 minutes */ + {getStringID(LTITLE, TITLE_STR_49_5PT), 0, 0, 5}, /* first to 5 points */ + {getStringID(LTITLE, TITLE_STR_50_10PT), 0, 0, 10}, /* first to 10 points */ + {getStringID(LTITLE, TITLE_STR_51_20PT), 0, 0, 20}, /* first to 20 points */ + {getStringID(LTITLE, TITLE_STR_52_LASTALIVE), 0, 0, 0} /* last person alive wins */ }; struct mp_stage_playercount mp_player_counts[] = { - {TEXT(LTITLE, TITLE_STR_53), 2, 4}, //"Normal" - {TEXT(LTITLE, TITLE_STR_54), 2, 4}, //"You Only Live Twice" - {TEXT(LTITLE, TITLE_STR_55), 2, 4}, //"The Living Daylights [Flag Tag]" - {TEXT(LTITLE, TITLE_STR_56), 2, 4}, //"The Man With the Golden Gun" - {TEXT(LTITLE, TITLE_STR_57), 2, 4}, //"License to Kill" - {TEXT(LTITLE, TITLE_STR_58), 4, 4}, //"Team: 2 vs 2" - {TEXT(LTITLE, TITLE_STR_59), 4, 4}, //"Team: 3 vs 1" - {TEXT(LTITLE, TITLE_STR_60), 3, 3} //"Team: 2 vs 1" + {getStringID(LTITLE, TITLE_STR_53_NORMAL), 2, 4}, //"Normal" + {getStringID(LTITLE, TITLE_STR_54_YOLT), 2, 4}, //"You Only Live Twice" + {getStringID(LTITLE, TITLE_STR_55_FLAGTAG), 2, 4}, //"The Living Daylights [Flag Tag]" + {getStringID(LTITLE, TITLE_STR_56_GG), 2, 4}, //"The Man With the Golden Gun" + {getStringID(LTITLE, TITLE_STR_57_LTK), 2, 4}, //"License to Kill" + {getStringID(LTITLE, TITLE_STR_58_2V2), 4, 4}, //"Team: 2 vs 2" + {getStringID(LTITLE, TITLE_STR_59_3V1), 4, 4}, //"Team: 3 vs 1" + {getStringID(LTITLE, TITLE_STR_60_2V1), 3, 3} //"Team: 2 vs 1" }; struct mp_stage_setup multi_stage_setups[] = { /* unlocked by default */ - {TEXT(LTITLE, TITLE_STR_154), TEXT(LTITLE, TITLE_STR_155), IMG_MP_RANDOM, LEVELID_NONE, -1, 1, 4}, - {TEXT(LTITLE, TITLE_STR_156), TEXT(LTITLE, TITLE_STR_157), IMG_MP_TEMPLE, LEVELID_TEMPLE, -1, 1, 4}, - {TEXT(LTITLE, TITLE_STR_158), TEXT(LTITLE, TITLE_STR_159), IMG_MP_COMPLEX, LEVELID_COMPLEX, -1, 1, 4}, - {TEXT(LTITLE, TITLE_STR_162), TEXT(LTITLE, TITLE_STR_163), IMG_MP_CAVES, LEVELID_CAVES, -1, 1, 4}, - {TEXT(LTITLE, TITLE_STR_160), TEXT(LTITLE, TITLE_STR_161), IMG_MP_BASEMENT, LEVELID_LIBRARY, -1, 1, 4}, - {TEXT(LTITLE, TITLE_STR_269), TEXT(LTITLE, TITLE_STR_270), IMG_MP_BASEMENT, LEVELID_BASEMENT, -1, 1, 4}, - {TEXT(LTITLE, TITLE_STR_271), TEXT(LTITLE, TITLE_STR_272), IMG_MP_BASEMENT, LEVELID_STACK, -1, 1, 4}, + {getStringID(LTITLE, TITLE_STR_154_RANDOM), getStringID(LTITLE, TITLE_STR_155_RANDOM2), IMG_MP_RANDOM, LEVELID_NONE, -1, 1, 4}, + {getStringID(LTITLE, TITLE_STR_156_TEMPLE), getStringID(LTITLE, TITLE_STR_157_TEMPLE2), IMG_MP_TEMPLE, LEVELID_TEMPLE, -1, 1, 4}, + {getStringID(LTITLE, TITLE_STR_158_COMPLEX), getStringID(LTITLE, TITLE_STR_159_COMPLEX2), IMG_MP_COMPLEX, LEVELID_COMPLEX, -1, 1, 4}, + {getStringID(LTITLE, TITLE_STR_162_CAVES), getStringID(LTITLE, TITLE_STR_163_CAVES2), IMG_MP_CAVES, LEVELID_CAVES, -1, 1, 4}, + {getStringID(LTITLE, TITLE_STR_160_LIBRARY), getStringID(LTITLE, TITLE_STR_161_LIBRARY2), IMG_MP_BASEMENT, LEVELID_LIBRARY, -1, 1, 4}, + {getStringID(LTITLE, TITLE_STR_269_BASEMENT), getStringID(LTITLE, TITLE_STR_270_BASEMENT2), IMG_MP_BASEMENT, LEVELID_BASEMENT, -1, 1, 4}, + {getStringID(LTITLE, TITLE_STR_271_STACK), getStringID(LTITLE, TITLE_STR_272_STACK2), IMG_MP_BASEMENT, LEVELID_STACK, -1, 1, 4}, /* unlocked on level progression */ - {TEXT(LTITLE, TITLE_STR_164), TEXT(LTITLE, TITLE_STR_165), IMG_MP_FACILITY, LEVELID_FACILITY, SP_LEVEL_FACILITY, 1, 4}, - {TEXT(LTITLE, TITLE_STR_166), TEXT(LTITLE, TITLE_STR_167), IMG_MP_BUNKER2, LEVELID_BUNKER2, SP_LEVEL_BUNKER2, 1, 3}, - {TEXT(LTITLE, TITLE_STR_168), TEXT(LTITLE, TITLE_STR_169), IMG_MP_ARCHIVES, LEVELID_ARCHIVES, SP_LEVEL_ARCHIVES, 1, 3}, - {TEXT(LTITLE, TITLE_STR_170), TEXT(LTITLE, TITLE_STR_171), IMG_MP_CAVERNS, LEVELID_CAVERNS, SP_LEVEL_CAVERNS, 1, 3}, - {TEXT(LTITLE, TITLE_STR_172), TEXT(LTITLE, TITLE_STR_173), IMG_MP_EGYPT, LEVELID_EGYPT, SP_LEVEL_EGYPT, 1, 2} - //{TEXT(LTITLE, TITLE_STR_174), TEXT(LTITLE, TITLE_STR_175), IMG_MP_RANDOM, LEVELID_CITADEL, -1, 1, 4}, //Citadel - //{TEXT(LTITLE, TITLE_STR_176), TEXT(LTITLE, TITLE_STR_177), IMG_MP_FRIGATE, LEVELID_FRIGATE, -1, 1, 4}, //dest - //{TEXT(LTITLE, TITLE_STR_178), TEXT(LTITLE, TITLE_STR_179), IMG_MP_STATUE, LEVELID_STATUE, -1, 1, 4}, //stat - //{TEXT(LTITLE, TITLE_STR_180), TEXT(LTITLE, TITLE_STR_181), IMG_MP_CRADLE, LEVELID_CRADLE, -1, 1, 4}, //crad - //{TEXT(LTITLE, TITLE_STR_182), TEXT(LTITLE, TITLE_STR_183), IMG_MP_AZTEC, LEVELID_AZTEC, -1, 1, 4}, //azt - + {getStringID(LTITLE, TITLE_STR_164_FACMP), getStringID(LTITLE, TITLE_STR_165_FACMP22), IMG_MP_FACILITY, LEVELID_FACILITY, SP_LEVEL_FACILITY, 1, 4}, + {getStringID(LTITLE, TITLE_STR_166_SEVERNAYABUNKER), getStringID(LTITLE, TITLE_STR_167_BUNKER), IMG_MP_BUNKER2, LEVELID_BUNKER2, SP_LEVEL_BUNKER2, 1, 3}, + {getStringID(LTITLE, TITLE_STR_168_MILITARYARCHIVES), getStringID(LTITLE, TITLE_STR_169_ARCHIVES), IMG_MP_ARCHIVES, LEVELID_ARCHIVES, SP_LEVEL_ARCHIVES, 1, 3}, + {getStringID(LTITLE, TITLE_STR_170_WATERCAVERNS), getStringID(LTITLE, TITLE_STR_171_CAVERNS), IMG_MP_CAVERNS, LEVELID_CAVERNS, SP_LEVEL_CAVERNS, 1, 3}, + {getStringID(LTITLE, TITLE_STR_172_EGYPTIANTEMPLEMP), getStringID(LTITLE, TITLE_STR_173_EGYPTIANMP), IMG_MP_EGYPT, LEVELID_EGYPT, SP_LEVEL_EGYPT, 1, 2} + //{getStringID(LTITLE, TITLE_STR_174_CITADEL), getStringID(LTITLE, TITLE_STR_175_CITADEL2), IMG_MP_RANDOM, LEVELID_CITADEL, -1, 1, 4}, //Citadel (old format setup) + //{getStringID(LTITLE, TITLE_STR_176_DEST), getStringID(LTITLE, TITLE_STR_177_DEST2), IMG_MP_FRIGATE, LEVELID_FRIGATE, -1, 1, 4}, //dest (needs setup) + //{getStringID(LTITLE, TITLE_STR_178_STAT), getStringID(LTITLE, TITLE_STR_179_STAT2), IMG_MP_STATUE, LEVELID_STATUE, -1, 1, 2}, //stat (works) + //{getStringID(LTITLE, TITLE_STR_180_CRAD), getStringID(LTITLE, TITLE_STR_181_CRADLE2), IMG_MP_CRADLE, LEVELID_CRADLE, -1, 1, 2}, //crad (works) + //{getStringID(LTITLE, TITLE_STR_182_AZT), getStringID(LTITLE, TITLE_STR_183_AZT2), IMG_MP_AZTEC, LEVELID_AZTEC, -1, 1, 4}, //azt (needs setup) + }; s32 num_chars_selectable_mp = 8; #ifdef BUGFIX_R0 struct MP_selectable_chars mp_chr_setup[] = { - {TEXT(LTITLE, TITLE_STR_184), MALE, IMG_MPC_BROSNAN, BODY_Brosnan_Tuxedo, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_191), FEMALE, IMG_MPC_NATALYA, BODY_Natalya_Skirt, HEAD_Male_Brosnan_Tuxedo, 0.96609998}, - {TEXT(LTITLE, TITLE_STR_188), MALE, IMG_MPC_TREVELYAN, BODY_Trevelyan_Janus, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_190), FEMALE, IMG_MPC_XENIA, BODY_Xenia, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_187), MALE, IMG_MPC_OURUMOV, BODY_Ourumov, HEAD_Male_Brosnan_Tuxedo, 1.0778}, - {TEXT(LTITLE, TITLE_STR_186), MALE, IMG_MPC_BORIS, BODY_Boris, HEAD_Male_Brosnan_Tuxedo, 0.9702}, - {TEXT(LTITLE, TITLE_STR_189), MALE, IMG_MPC_VALENTIN, BODY_Valentin_, HEAD_Male_Brosnan_Tuxedo, 0.93239999}, - {TEXT(LTITLE, TITLE_STR_185), MALE, IMG_MPC_MISHKIN, BODY_Siberian_Guard_1_Mishkin, HEAD_Male_Mishkin, 1.0}, - {TEXT(LTITLE, TITLE_STR_194), FEMALE, IMG_MPC_MAYDAY, BODY_Mayday, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_193), MALE, IMG_MPC_JAWS, BODY_Jaws, HEAD_Male_Brosnan_Tuxedo, 1.199}, - {TEXT(LTITLE, TITLE_STR_195), MALE, IMG_MPC_ODDJOB, BODY_Oddjob, HEAD_Male_Brosnan_Tuxedo,0.78780001}, - {TEXT(LTITLE, TITLE_STR_192), MALE, IMG_MPC_BARON, BODY_Baron_Samedi, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_253), MALE, IMG_MPC_RANDOM, BODY_Russian_Soldier, HEAD_Male_Mark, 1.0}, - {TEXT(LTITLE, TITLE_STR_252), MALE, IMG_MPC_RANDOM, BODY_Russian_Infantry, HEAD_Male_Karl, 1.0}, - {TEXT(LTITLE, TITLE_STR_263), MALE, IMG_MPC_RANDOM, BODY_Scientist_1_Male, HEAD_Male_Dave_Dr_Doak, 1.0}, - {TEXT(LTITLE, TITLE_STR_263), FEMALE, IMG_MPC_RANDOM, BODY_Scientist_2_Female, HEAD_Female_Sally, 1.0}, - {TEXT(LTITLE, TITLE_STR_256), MALE, IMG_MPC_RANDOM, BODY_Russian_Commandant, HEAD_Male_Martin, 1.0}, - {TEXT(LTITLE, TITLE_STR_254), MALE, IMG_MPC_RANDOM, BODY_Janus_Marine, HEAD_Male_Steve_Ellis, 1.0}, - {TEXT(LTITLE, TITLE_STR_257), MALE, IMG_MPC_RANDOM, BODY_Naval_Officer, HEAD_Male_Duncan, 1.0}, - {TEXT(LTITLE, TITLE_STR_262), MALE, IMG_MPC_RANDOM, BODY_Helicopter_Pilot, HEAD_Male_Pete, 1.0}, - {TEXT(LTITLE, TITLE_STR_251), MALE, IMG_MPC_RANDOM, BODY_St_Petersburg_Guard, HEAD_Male_Ken, 1.0}, - {TEXT(LTITLE, TITLE_STR_264), FEMALE, IMG_MPC_RANDOM, BODY_Civilian_1_Female, HEAD_Female_Marion_Rosika, 1.0}, - {TEXT(LTITLE, TITLE_STR_264), MALE, IMG_MPC_RANDOM, BODY_Civilian_2, HEAD_Male_Graeme, 1.0}, - {TEXT(LTITLE, TITLE_STR_264), MALE, IMG_MPC_RANDOM, BODY_Civilian_3, HEAD_Male_Grant, 1.0}, - {TEXT(LTITLE, TITLE_STR_264), MALE, IMG_MPC_RANDOM, BODY_Civilian_4, HEAD_Male_Dwayne, 1.0}, - {TEXT(LTITLE, TITLE_STR_258), MALE, IMG_MPC_RANDOM, BODY_Siberian_Guard_1_Mishkin, HEAD_Male_Lee, 1.0}, - {TEXT(LTITLE, TITLE_STR_259), MALE, IMG_MPC_RANDOM, BODY_Arctic_Commando, HEAD_Male_Chris, 1.0}, - {TEXT(LTITLE, TITLE_STR_258), MALE, IMG_MPC_RANDOM, BODY_Siberian_Guard_2, HEAD_Male_Scott, 1.0}, - {TEXT(LTITLE, TITLE_STR_260), MALE, IMG_MPC_RANDOM, BODY_Siberian_Special_Forces, HEAD_Male_Alan, 1.0}, - {TEXT(LTITLE, TITLE_STR_250), MALE, IMG_MPC_RANDOM, BODY_Jungle_Commando, HEAD_Male_Joel, 1.0}, - {TEXT(LTITLE, TITLE_STR_255), MALE, IMG_MPC_RANDOM, BODY_Janus_Special_Forces, HEAD_Male_B, 1.0}, - {TEXT(LTITLE, TITLE_STR_261), MALE, IMG_MPC_RANDOM, BODY_Moonraker_Elite_1_Male, HEAD_Male_Neil, 1.0}, - {TEXT(LTITLE, TITLE_STR_261), FEMALE, IMG_MPC_RANDOM, BODY_Moonraker_Elite_2_Female, HEAD_Female_Vivien, 1.0}, - {TEXT(LTITLE, TITLE_STR_196), FEMALE, IMG_MPC_RANDOM, BODY_Rosika, HEAD_Female_Marion_Rosika, 0.88529998}, - {TEXT(LTITLE, TITLE_STR_197), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Karl, 1.0446}, - {TEXT(LTITLE, TITLE_STR_198), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Martin, 1.0446}, - {TEXT(LTITLE, TITLE_STR_199), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Mark, 1.0446}, - {TEXT(LTITLE, TITLE_STR_200), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Dave_Dr_Doak, 1.0446}, - {TEXT(LTITLE, TITLE_STR_201), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Duncan, 1.0446}, - {TEXT(LTITLE, TITLE_STR_202), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_B, 1.0446}, - {TEXT(LTITLE, TITLE_STR_203), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Steve_Ellis, 1.0446}, - {TEXT(LTITLE, TITLE_STR_204), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Grant, 1.0446}, - {TEXT(LTITLE, TITLE_STR_205), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Graeme, 1.0446}, - {TEXT(LTITLE, TITLE_STR_206), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Ken, 1.0446}, - {TEXT(LTITLE, TITLE_STR_207), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Alan, 1.0446}, - {TEXT(LTITLE, TITLE_STR_208), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Pete, 1.0446}, - {TEXT(LTITLE, TITLE_STR_209), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Shaun, 1.0446}, - {TEXT(LTITLE, TITLE_STR_210), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Dwayne, 1.0446}, - {TEXT(LTITLE, TITLE_STR_211), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Des, 1.0446}, - {TEXT(LTITLE, TITLE_STR_212), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Chris, 1.0446}, - {TEXT(LTITLE, TITLE_STR_213), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Lee, 1.0446}, - {TEXT(LTITLE, TITLE_STR_214), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Neil, 1.0446}, - {TEXT(LTITLE, TITLE_STR_215), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Jim, 1.0446}, - {TEXT(LTITLE, TITLE_STR_216), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Robin, 1.0446}, - {TEXT(LTITLE, TITLE_STR_217), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Steve_H, 1.0446}, - {TEXT(LTITLE, TITLE_STR_218), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Terrorist, 1.0446}, - {TEXT(LTITLE, TITLE_STR_219), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Biker, 1.0446}, - {TEXT(LTITLE, TITLE_STR_220), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Joel, 1.0446}, - {TEXT(LTITLE, TITLE_STR_221), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Scott, 1.0446}, - {TEXT(LTITLE, TITLE_STR_222), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Joe, 1.0446}, - {TEXT(LTITLE, TITLE_STR_223), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Sally, 1.0446}, - {TEXT(LTITLE, TITLE_STR_224), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Marion_Rosika, 1.0446}, - {TEXT(LTITLE, TITLE_STR_225), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Mandy, 1.0446}, - {TEXT(LTITLE, TITLE_STR_226), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Vivien, 1.0446} + {getStringID(LTITLE, TITLE_STR_184_BOND), MALE, IMG_MPC_BROSNAN, BODY_Brosnan_Tuxedo, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_191_NATALYA), FEMALE, IMG_MPC_NATALYA, BODY_Natalya_Skirt, HEAD_Male_Brosnan_Tuxedo, 0.96609998}, + {getStringID(LTITLE, TITLE_STR_188_TREVELYAN), MALE, IMG_MPC_TREVELYAN, BODY_Trevelyan_Janus, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_190_XENIA), FEMALE, IMG_MPC_XENIA, BODY_Xenia, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_187_OURUMOV), MALE, IMG_MPC_OURUMOV, BODY_Ourumov, HEAD_Male_Brosnan_Tuxedo, 1.0778}, + {getStringID(LTITLE, TITLE_STR_186_BORIS), MALE, IMG_MPC_BORIS, BODY_Boris, HEAD_Male_Brosnan_Tuxedo, 0.9702}, + {getStringID(LTITLE, TITLE_STR_189_VALENTIN), MALE, IMG_MPC_VALENTIN, BODY_Valentin_, HEAD_Male_Brosnan_Tuxedo, 0.93239999}, + {getStringID(LTITLE, TITLE_STR_185_MISHKIN), MALE, IMG_MPC_MISHKIN, BODY_Siberian_Guard_1_Mishkin, HEAD_Male_Mishkin, 1.0}, + {getStringID(LTITLE, TITLE_STR_194_MAYDAY), FEMALE, IMG_MPC_MAYDAY, BODY_Mayday, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_193_JAWS), MALE, IMG_MPC_JAWS, BODY_Jaws, HEAD_Male_Brosnan_Tuxedo, 1.199}, + {getStringID(LTITLE, TITLE_STR_195_ODDJOB), MALE, IMG_MPC_ODDJOB, BODY_Oddjob, HEAD_Male_Brosnan_Tuxedo,0.78780001}, + {getStringID(LTITLE, TITLE_STR_192_BARONSAMEDI), MALE, IMG_MPC_BARON, BODY_Baron_Samedi, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_253_RUSSIANSOLDIER), MALE, IMG_MPC_RANDOM, BODY_Russian_Soldier, HEAD_Male_Mark, 1.0}, + {getStringID(LTITLE, TITLE_STR_252_RUSSIANINFANTRY), MALE, IMG_MPC_RANDOM, BODY_Russian_Infantry, HEAD_Male_Karl, 1.0}, + {getStringID(LTITLE, TITLE_STR_263_SCIENTIST), MALE, IMG_MPC_RANDOM, BODY_Scientist_1_Male, HEAD_Male_Dave_Dr_Doak, 1.0}, + {getStringID(LTITLE, TITLE_STR_263_SCIENTIST), FEMALE, IMG_MPC_RANDOM, BODY_Scientist_2_Female, HEAD_Female_Sally, 1.0}, + {getStringID(LTITLE, TITLE_STR_256_RUSSIANCOMMANDANT), MALE, IMG_MPC_RANDOM, BODY_Russian_Commandant, HEAD_Male_Martin, 1.0}, + {getStringID(LTITLE, TITLE_STR_254_JANUSMARINE), MALE, IMG_MPC_RANDOM, BODY_Janus_Marine, HEAD_Male_Steve_Ellis, 1.0}, + {getStringID(LTITLE, TITLE_STR_257_NAVALOFFICER), MALE, IMG_MPC_RANDOM, BODY_Naval_Officer, HEAD_Male_Duncan, 1.0}, + {getStringID(LTITLE, TITLE_STR_262_HELICOPTERPILOT), MALE, IMG_MPC_RANDOM, BODY_Helicopter_Pilot, HEAD_Male_Pete, 1.0}, + {getStringID(LTITLE, TITLE_STR_251_STPETERSBURGGUARD), MALE, IMG_MPC_RANDOM, BODY_St_Petersburg_Guard, HEAD_Male_Ken, 1.0}, + {getStringID(LTITLE, TITLE_STR_264_CIVILIAN), FEMALE, IMG_MPC_RANDOM, BODY_Civilian_1_Female, HEAD_Female_Marion_Rosika, 1.0}, + {getStringID(LTITLE, TITLE_STR_264_CIVILIAN), MALE, IMG_MPC_RANDOM, BODY_Civilian_2, HEAD_Male_Graeme, 1.0}, + {getStringID(LTITLE, TITLE_STR_264_CIVILIAN), MALE, IMG_MPC_RANDOM, BODY_Civilian_3, HEAD_Male_Grant, 1.0}, + {getStringID(LTITLE, TITLE_STR_264_CIVILIAN), MALE, IMG_MPC_RANDOM, BODY_Civilian_4, HEAD_Male_Dwayne, 1.0}, + {getStringID(LTITLE, TITLE_STR_258_SIBERIANGUARD), MALE, IMG_MPC_RANDOM, BODY_Siberian_Guard_1_Mishkin, HEAD_Male_Lee, 1.0}, + {getStringID(LTITLE, TITLE_STR_259_ARCTICCOMMANDO), MALE, IMG_MPC_RANDOM, BODY_Arctic_Commando, HEAD_Male_Chris, 1.0}, + {getStringID(LTITLE, TITLE_STR_258_SIBERIANGUARD), MALE, IMG_MPC_RANDOM, BODY_Siberian_Guard_2, HEAD_Male_Scott, 1.0}, + {getStringID(LTITLE, TITLE_STR_260_SIBERIANSPECIALFORCES), MALE, IMG_MPC_RANDOM, BODY_Siberian_Special_Forces, HEAD_Male_Alan, 1.0}, + {getStringID(LTITLE, TITLE_STR_250_JUNGLECOMMANDO), MALE, IMG_MPC_RANDOM, BODY_Jungle_Commando, HEAD_Male_Joel, 1.0}, + {getStringID(LTITLE, TITLE_STR_255_JANUSSPECIALFORCES), MALE, IMG_MPC_RANDOM, BODY_Janus_Special_Forces, HEAD_Male_B, 1.0}, + {getStringID(LTITLE, TITLE_STR_261_MOOKRAKERELITE), MALE, IMG_MPC_RANDOM, BODY_Moonraker_Elite_1_Male, HEAD_Male_Neil, 1.0}, + {getStringID(LTITLE, TITLE_STR_261_MOOKRAKERELITE), FEMALE, IMG_MPC_RANDOM, BODY_Moonraker_Elite_2_Female, HEAD_Female_Vivien, 1.0}, + {getStringID(LTITLE, TITLE_STR_196_ROSIKA), FEMALE, IMG_MPC_RANDOM, BODY_Rosika, HEAD_Female_Marion_Rosika, 0.88529998}, + {getStringID(LTITLE, TITLE_STR_197_KARL), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Karl, 1.0446}, + {getStringID(LTITLE, TITLE_STR_198_MARTIN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Martin, 1.0446}, + {getStringID(LTITLE, TITLE_STR_199_MARK), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Mark, 1.0446}, + {getStringID(LTITLE, TITLE_STR_200_DAVE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Dave_Dr_Doak, 1.0446}, + {getStringID(LTITLE, TITLE_STR_201_DUNCAN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Duncan, 1.0446}, + {getStringID(LTITLE, TITLE_STR_202_B), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_B, 1.0446}, + {getStringID(LTITLE, TITLE_STR_203_STEVEE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Steve_Ellis, 1.0446}, + {getStringID(LTITLE, TITLE_STR_204_GRANT), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Grant, 1.0446}, + {getStringID(LTITLE, TITLE_STR_205_GRAEME), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Graeme, 1.0446}, + {getStringID(LTITLE, TITLE_STR_206_KEN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Ken, 1.0446}, + {getStringID(LTITLE, TITLE_STR_207_ALAN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Alan, 1.0446}, + {getStringID(LTITLE, TITLE_STR_208_PETE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Pete, 1.0446}, + {getStringID(LTITLE, TITLE_STR_209_SHAUN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Shaun, 1.0446}, + {getStringID(LTITLE, TITLE_STR_210_DWAYNE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Dwayne, 1.0446}, + {getStringID(LTITLE, TITLE_STR_211_DES), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Des, 1.0446}, + {getStringID(LTITLE, TITLE_STR_212_CHRIS), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Chris, 1.0446}, + {getStringID(LTITLE, TITLE_STR_213_LEE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Lee, 1.0446}, + {getStringID(LTITLE, TITLE_STR_214_NEIL), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Neil, 1.0446}, + {getStringID(LTITLE, TITLE_STR_215_JIM), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Jim, 1.0446}, + {getStringID(LTITLE, TITLE_STR_216_ROBIN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Robin, 1.0446}, + {getStringID(LTITLE, TITLE_STR_217_STEVEH), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Steve_H, 1.0446}, + {getStringID(LTITLE, TITLE_STR_218_TERRORIST), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Terrorist, 1.0446}, + {getStringID(LTITLE, TITLE_STR_219_BIKER), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Biker, 1.0446}, + {getStringID(LTITLE, TITLE_STR_220_JOEL), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Joel, 1.0446}, + {getStringID(LTITLE, TITLE_STR_221_SCOTT), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Scott, 1.0446}, + {getStringID(LTITLE, TITLE_STR_222_JOE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Joe, 1.0446}, + {getStringID(LTITLE, TITLE_STR_223_SALLY), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Sally, 1.0446}, + {getStringID(LTITLE, TITLE_STR_224_MARION), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Marion_Rosika, 1.0446}, + {getStringID(LTITLE, TITLE_STR_225_MANDY), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Mandy, 1.0446}, + {getStringID(LTITLE, TITLE_STR_226_VIVIEN), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Vivien, 1.0446} }; -#endif -#if defined(BUGFIX_R1) +#else struct MP_selectable_chars mp_chr_setup[] = { - {TEXT(LTITLE, TITLE_STR_184), MALE, IMG_MPC_BROSNAN, BODY_Brosnan_Tuxedo, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_191), FEMALE, IMG_MPC_NATALYA, BODY_Natalya_Skirt, HEAD_Male_Brosnan_Tuxedo, 0.96609998}, - {TEXT(LTITLE, TITLE_STR_188), MALE, IMG_MPC_TREVELYAN, BODY_Trevelyan_Janus, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_190), FEMALE, IMG_MPC_XENIA, BODY_Xenia, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_187), MALE, IMG_MPC_OURUMOV, BODY_Ourumov, HEAD_Male_Brosnan_Tuxedo, 1.0778}, - {TEXT(LTITLE, TITLE_STR_186), MALE, IMG_MPC_BORIS, BODY_Boris, HEAD_Male_Brosnan_Tuxedo, 0.9702}, - {TEXT(LTITLE, TITLE_STR_189), MALE, IMG_MPC_VALENTIN, BODY_Valentin_, HEAD_Male_Brosnan_Tuxedo, 0.93239999}, - {TEXT(LTITLE, TITLE_STR_185), MALE, IMG_MPC_MISHKIN, BODY_Siberian_Guard_1_Mishkin, HEAD_Male_Mishkin, 1.0}, - {TEXT(LTITLE, TITLE_STR_194), FEMALE, IMG_MPC_MAYDAY, BODY_Mayday, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_193), MALE, IMG_MPC_JAWS, BODY_Jaws, HEAD_Male_Brosnan_Tuxedo, 1.199}, - {TEXT(LTITLE, TITLE_STR_195), MALE, IMG_MPC_ODDJOB, BODY_Oddjob, HEAD_Male_Brosnan_Tuxedo,0.78780001}, - {TEXT(LTITLE, TITLE_STR_192), MALE, IMG_MPC_BARON, BODY_Baron_Samedi, HEAD_Male_Brosnan_Tuxedo, 1.0}, - {TEXT(LTITLE, TITLE_STR_287), MALE, IMG_MPC_RANDOM, BODY_Russian_Soldier, HEAD_Male_Mark, 1.0}, - {TEXT(LTITLE, TITLE_STR_288), MALE, IMG_MPC_RANDOM, BODY_Russian_Infantry, HEAD_Male_Karl, 1.0}, - {TEXT(LTITLE, TITLE_STR_289), MALE, IMG_MPC_RANDOM, BODY_Scientist_1_Male, HEAD_Male_Dave_Dr_Doak, 1.0}, - {TEXT(LTITLE, TITLE_STR_289), FEMALE, IMG_MPC_RANDOM, BODY_Scientist_2_Female, HEAD_Female_Sally, 1.0}, - {TEXT(LTITLE, TITLE_STR_290), MALE, IMG_MPC_RANDOM, BODY_Russian_Commandant, HEAD_Male_Martin, 1.0}, - {TEXT(LTITLE, TITLE_STR_291), MALE, IMG_MPC_RANDOM, BODY_Janus_Marine, HEAD_Male_Steve_Ellis, 1.0}, - {TEXT(LTITLE, TITLE_STR_292), MALE, IMG_MPC_RANDOM, BODY_Naval_Officer, HEAD_Male_Duncan, 1.0}, - {TEXT(LTITLE, TITLE_STR_293), MALE, IMG_MPC_RANDOM, BODY_Helicopter_Pilot, HEAD_Male_Pete, 1.0}, - {TEXT(LTITLE, TITLE_STR_294), MALE, IMG_MPC_RANDOM, BODY_St_Petersburg_Guard, HEAD_Male_Ken, 1.0}, - {TEXT(LTITLE, TITLE_STR_295), FEMALE, IMG_MPC_RANDOM, BODY_Civilian_1_Female, HEAD_Female_Marion_Rosika, 1.0}, - {TEXT(LTITLE, TITLE_STR_295), MALE, IMG_MPC_RANDOM, BODY_Civilian_2, HEAD_Male_Graeme, 1.0}, - {TEXT(LTITLE, TITLE_STR_295), MALE, IMG_MPC_RANDOM, BODY_Civilian_3, HEAD_Male_Grant, 1.0}, - {TEXT(LTITLE, TITLE_STR_295), MALE, IMG_MPC_RANDOM, BODY_Civilian_4, HEAD_Male_Dwayne, 1.0}, - {TEXT(LTITLE, TITLE_STR_296), MALE, IMG_MPC_RANDOM, BODY_Siberian_Guard_1_Mishkin, HEAD_Male_Lee, 1.0}, - {TEXT(LTITLE, TITLE_STR_297), MALE, IMG_MPC_RANDOM, BODY_Arctic_Commando, HEAD_Male_Chris, 1.0}, - {TEXT(LTITLE, TITLE_STR_296), MALE, IMG_MPC_RANDOM, BODY_Siberian_Guard_2, HEAD_Male_Scott, 1.0}, - {TEXT(LTITLE, TITLE_STR_298), MALE, IMG_MPC_RANDOM, BODY_Siberian_Special_Forces, HEAD_Male_Alan, 1.0}, - {TEXT(LTITLE, TITLE_STR_299), MALE, IMG_MPC_RANDOM, BODY_Jungle_Commando, HEAD_Male_Joel, 1.0}, - {TEXT(LTITLE, TITLE_STR_300), MALE, IMG_MPC_RANDOM, BODY_Janus_Special_Forces, HEAD_Male_B, 1.0}, - {TEXT(LTITLE, TITLE_STR_301), MALE, IMG_MPC_RANDOM, BODY_Moonraker_Elite_1_Male, HEAD_Male_Neil, 1.0}, - {TEXT(LTITLE, TITLE_STR_301), FEMALE, IMG_MPC_RANDOM, BODY_Moonraker_Elite_2_Female, HEAD_Female_Vivien, 1.0}, - {TEXT(LTITLE, TITLE_STR_196), FEMALE, IMG_MPC_RANDOM, BODY_Rosika, HEAD_Female_Marion_Rosika, 0.88529998}, - {TEXT(LTITLE, TITLE_STR_197), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Karl, 1.0446}, - {TEXT(LTITLE, TITLE_STR_198), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Martin, 1.0446}, - {TEXT(LTITLE, TITLE_STR_199), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Mark, 1.0446}, - {TEXT(LTITLE, TITLE_STR_200), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Dave_Dr_Doak, 1.0446}, - {TEXT(LTITLE, TITLE_STR_201), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Duncan, 1.0446}, - {TEXT(LTITLE, TITLE_STR_202), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_B, 1.0446}, - {TEXT(LTITLE, TITLE_STR_203), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Steve_Ellis, 1.0446}, - {TEXT(LTITLE, TITLE_STR_204), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Grant, 1.0446}, - {TEXT(LTITLE, TITLE_STR_205), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Graeme, 1.0446}, - {TEXT(LTITLE, TITLE_STR_206), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Ken, 1.0446}, - {TEXT(LTITLE, TITLE_STR_207), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Alan, 1.0446}, - {TEXT(LTITLE, TITLE_STR_208), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Pete, 1.0446}, - {TEXT(LTITLE, TITLE_STR_209), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Shaun, 1.0446}, - {TEXT(LTITLE, TITLE_STR_210), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Dwayne, 1.0446}, - {TEXT(LTITLE, TITLE_STR_211), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Des, 1.0446}, - {TEXT(LTITLE, TITLE_STR_212), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Chris, 1.0446}, - {TEXT(LTITLE, TITLE_STR_213), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Lee, 1.0446}, - {TEXT(LTITLE, TITLE_STR_214), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Neil, 1.0446}, - {TEXT(LTITLE, TITLE_STR_215), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Jim, 1.0446}, - {TEXT(LTITLE, TITLE_STR_216), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Robin, 1.0446}, - {TEXT(LTITLE, TITLE_STR_217), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Steve_H, 1.0446}, - {TEXT(LTITLE, TITLE_STR_218), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Terrorist, 1.0446}, - {TEXT(LTITLE, TITLE_STR_219), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Biker, 1.0446}, - {TEXT(LTITLE, TITLE_STR_220), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Joel, 1.0446}, - {TEXT(LTITLE, TITLE_STR_221), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Scott, 1.0446}, - {TEXT(LTITLE, TITLE_STR_222), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Joe, 1.0446}, - {TEXT(LTITLE, TITLE_STR_223), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Sally, 1.0446}, - {TEXT(LTITLE, TITLE_STR_224), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Marion_Rosika, 1.0446}, - {TEXT(LTITLE, TITLE_STR_225), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Mandy, 1.0446}, - {TEXT(LTITLE, TITLE_STR_226), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Vivien, 1.0446} + {getStringID(LTITLE, TITLE_STR_184_BOND), MALE, IMG_MPC_BROSNAN, BODY_Brosnan_Tuxedo, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_191_NATALYA), FEMALE, IMG_MPC_NATALYA, BODY_Natalya_Skirt, HEAD_Male_Brosnan_Tuxedo, 0.96609998}, + {getStringID(LTITLE, TITLE_STR_188_TREVELYAN), MALE, IMG_MPC_TREVELYAN, BODY_Trevelyan_Janus, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_190_XENIA), FEMALE, IMG_MPC_XENIA, BODY_Xenia, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_187_OURUMOV), MALE, IMG_MPC_OURUMOV, BODY_Ourumov, HEAD_Male_Brosnan_Tuxedo, 1.0778}, + {getStringID(LTITLE, TITLE_STR_186_BORIS), MALE, IMG_MPC_BORIS, BODY_Boris, HEAD_Male_Brosnan_Tuxedo, 0.9702}, + {getStringID(LTITLE, TITLE_STR_189_VALENTIN), MALE, IMG_MPC_VALENTIN, BODY_Valentin_, HEAD_Male_Brosnan_Tuxedo, 0.93239999}, + {getStringID(LTITLE, TITLE_STR_185_MISHKIN), MALE, IMG_MPC_MISHKIN, BODY_Siberian_Guard_1_Mishkin, HEAD_Male_Mishkin, 1.0}, + {getStringID(LTITLE, TITLE_STR_194_MAYDAY), FEMALE, IMG_MPC_MAYDAY, BODY_Mayday, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_193_JAWS), MALE, IMG_MPC_JAWS, BODY_Jaws, HEAD_Male_Brosnan_Tuxedo, 1.199}, + {getStringID(LTITLE, TITLE_STR_195_ODDJOB), MALE, IMG_MPC_ODDJOB, BODY_Oddjob, HEAD_Male_Brosnan_Tuxedo,0.78780001}, + {getStringID(LTITLE, TITLE_STR_192_BARONSAMEDI), MALE, IMG_MPC_BARON, BODY_Baron_Samedi, HEAD_Male_Brosnan_Tuxedo, 1.0}, + {getStringID(LTITLE, TITLE_STR_287_RUSSIANSOLDIER), MALE, IMG_MPC_RANDOM, BODY_Russian_Soldier, HEAD_Male_Mark, 1.0}, + {getStringID(LTITLE, TITLE_STR_288_RUSSIANINFANTRY), MALE, IMG_MPC_RANDOM, BODY_Russian_Infantry, HEAD_Male_Karl, 1.0}, + {getStringID(LTITLE, TITLE_STR_289_SCIENTIST), MALE, IMG_MPC_RANDOM, BODY_Scientist_1_Male, HEAD_Male_Dave_Dr_Doak, 1.0}, + {getStringID(LTITLE, TITLE_STR_289_SCIENTIST), FEMALE, IMG_MPC_RANDOM, BODY_Scientist_2_Female, HEAD_Female_Sally, 1.0}, + {getStringID(LTITLE, TITLE_STR_290), MALE, IMG_MPC_RANDOM, BODY_Russian_Commandant, HEAD_Male_Martin, 1.0}, + {getStringID(LTITLE, TITLE_STR_291), MALE, IMG_MPC_RANDOM, BODY_Janus_Marine, HEAD_Male_Steve_Ellis, 1.0}, + {getStringID(LTITLE, TITLE_STR_292), MALE, IMG_MPC_RANDOM, BODY_Naval_Officer, HEAD_Male_Duncan, 1.0}, + {getStringID(LTITLE, TITLE_STR_293), MALE, IMG_MPC_RANDOM, BODY_Helicopter_Pilot, HEAD_Male_Pete, 1.0}, + {getStringID(LTITLE, TITLE_STR_294), MALE, IMG_MPC_RANDOM, BODY_St_Petersburg_Guard, HEAD_Male_Ken, 1.0}, + {getStringID(LTITLE, TITLE_STR_295), FEMALE, IMG_MPC_RANDOM, BODY_Civilian_1_Female, HEAD_Female_Marion_Rosika, 1.0}, + {getStringID(LTITLE, TITLE_STR_295), MALE, IMG_MPC_RANDOM, BODY_Civilian_2, HEAD_Male_Graeme, 1.0}, + {getStringID(LTITLE, TITLE_STR_295), MALE, IMG_MPC_RANDOM, BODY_Civilian_3, HEAD_Male_Grant, 1.0}, + {getStringID(LTITLE, TITLE_STR_295), MALE, IMG_MPC_RANDOM, BODY_Civilian_4, HEAD_Male_Dwayne, 1.0}, + {getStringID(LTITLE, TITLE_STR_296), MALE, IMG_MPC_RANDOM, BODY_Siberian_Guard_1_Mishkin, HEAD_Male_Lee, 1.0}, + {getStringID(LTITLE, TITLE_STR_297), MALE, IMG_MPC_RANDOM, BODY_Arctic_Commando, HEAD_Male_Chris, 1.0}, + {getStringID(LTITLE, TITLE_STR_296), MALE, IMG_MPC_RANDOM, BODY_Siberian_Guard_2, HEAD_Male_Scott, 1.0}, + {getStringID(LTITLE, TITLE_STR_298), MALE, IMG_MPC_RANDOM, BODY_Siberian_Special_Forces, HEAD_Male_Alan, 1.0}, + {getStringID(LTITLE, TITLE_STR_299), MALE, IMG_MPC_RANDOM, BODY_Jungle_Commando, HEAD_Male_Joel, 1.0}, + {getStringID(LTITLE, TITLE_STR_300), MALE, IMG_MPC_RANDOM, BODY_Janus_Special_Forces, HEAD_Male_B, 1.0}, + {getStringID(LTITLE, TITLE_STR_301), MALE, IMG_MPC_RANDOM, BODY_Moonraker_Elite_1_Male, HEAD_Male_Neil, 1.0}, + {getStringID(LTITLE, TITLE_STR_301), FEMALE, IMG_MPC_RANDOM, BODY_Moonraker_Elite_2_Female, HEAD_Female_Vivien, 1.0}, + {getStringID(LTITLE, TITLE_STR_196_ROSIKA), FEMALE, IMG_MPC_RANDOM, BODY_Rosika, HEAD_Female_Marion_Rosika, 0.88529998}, + {getStringID(LTITLE, TITLE_STR_197_KARL), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Karl, 1.0446}, + {getStringID(LTITLE, TITLE_STR_198_MARTIN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Martin, 1.0446}, + {getStringID(LTITLE, TITLE_STR_199_MARK), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Mark, 1.0446}, + {getStringID(LTITLE, TITLE_STR_200_DAVE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Dave_Dr_Doak, 1.0446}, + {getStringID(LTITLE, TITLE_STR_201_DUNCAN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Duncan, 1.0446}, + {getStringID(LTITLE, TITLE_STR_202_B), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_B, 1.0446}, + {getStringID(LTITLE, TITLE_STR_203_STEVEE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Steve_Ellis, 1.0446}, + {getStringID(LTITLE, TITLE_STR_204_GRANT), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Grant, 1.0446}, + {getStringID(LTITLE, TITLE_STR_205_GRAEME), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Graeme, 1.0446}, + {getStringID(LTITLE, TITLE_STR_206_KEN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Ken, 1.0446}, + {getStringID(LTITLE, TITLE_STR_207_ALAN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Alan, 1.0446}, + {getStringID(LTITLE, TITLE_STR_208_PETE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Pete, 1.0446}, + {getStringID(LTITLE, TITLE_STR_209_SHAUN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Shaun, 1.0446}, + {getStringID(LTITLE, TITLE_STR_210_DWAYNE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Dwayne, 1.0446}, + {getStringID(LTITLE, TITLE_STR_211_DES), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Des, 1.0446}, + {getStringID(LTITLE, TITLE_STR_212_CHRIS), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Chris, 1.0446}, + {getStringID(LTITLE, TITLE_STR_213_LEE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Lee, 1.0446}, + {getStringID(LTITLE, TITLE_STR_214_NEIL), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Neil, 1.0446}, + {getStringID(LTITLE, TITLE_STR_215_JIM), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Jim, 1.0446}, + {getStringID(LTITLE, TITLE_STR_216_ROBIN), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Robin, 1.0446}, + {getStringID(LTITLE, TITLE_STR_217_STEVEH), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Steve_H, 1.0446}, + {getStringID(LTITLE, TITLE_STR_218_TERRORIST), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Terrorist, 1.0446}, + {getStringID(LTITLE, TITLE_STR_219_BIKER), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Biker, 1.0446}, + {getStringID(LTITLE, TITLE_STR_220_JOEL), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Joel, 1.0446}, + {getStringID(LTITLE, TITLE_STR_221_SCOTT), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Scott, 1.0446}, + {getStringID(LTITLE, TITLE_STR_222_JOE), MALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Male_Joe, 1.0446}, + {getStringID(LTITLE, TITLE_STR_223_SALLY), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Sally, 1.0446}, + {getStringID(LTITLE, TITLE_STR_224_MARION), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Marion_Rosika, 1.0446}, + {getStringID(LTITLE, TITLE_STR_225_MANDY), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Mandy, 1.0446}, + {getStringID(LTITLE, TITLE_STR_226_VIVIEN), FEMALE, IMG_MPC_RANDOM, BODY_Brosnan_Tuxedo, HEAD_Female_Vivien, 1.0446} }; #endif struct MP_handicap_menu MP_handicap_table[] = { - {TEXT(LTITLE, TITLE_STR_61), 0, 10.0}, // "Health -10\n(Hero)" - {TEXT(LTITLE, TITLE_STR_62), 0, 2.8560996}, // "Health -4\n(Veteran)" - {TEXT(LTITLE, TITLE_STR_63), 0, 2.1969998}, // "Health -3\n(Veteran)" - {TEXT(LTITLE, TITLE_STR_64), 0, 1.6899998}, // "Health -2\n(Veteran)" - {TEXT(LTITLE, TITLE_STR_65), 0, 1.3}, // "Health -1\n(Veteran)" - {TEXT(LTITLE, TITLE_STR_66), 0, 1.0}, // "Health +0\n(Normal)" - {TEXT(LTITLE, TITLE_STR_67), 0, 0.76923078}, // "Health +1\n(Novice)" - {TEXT(LTITLE, TITLE_STR_68), 0, 0.59171599}, // "Health +2\n(Novice)" - {TEXT(LTITLE, TITLE_STR_69), 0, 0.45516616}, // "Health +3\n(Novice)" - {TEXT(LTITLE, TITLE_STR_70), 0, 0.35012782}, // "Health +4\n(Novice)" - {TEXT(LTITLE, TITLE_STR_71), 0, 0.1} // "Health +10\n(Rookie)" + {getStringID(LTITLE, TITLE_STR_61_HERO), 0, 10.0}, // "Health -10\n(Hero)" + {getStringID(LTITLE, TITLE_STR_62_VET4), 0, 2.8560996}, // "Health -4\n(Veteran)" + {getStringID(LTITLE, TITLE_STR_63_VET3), 0, 2.1969998}, // "Health -3\n(Veteran)" + {getStringID(LTITLE, TITLE_STR_64_VET2), 0, 1.6899998}, // "Health -2\n(Veteran)" + {getStringID(LTITLE, TITLE_STR_65_VET1), 0, 1.3}, // "Health -1\n(Veteran)" + {getStringID(LTITLE, TITLE_STR_66_HEALTH_NORMAL), 0, 1.0}, // "Health +0\n(Normal)" + {getStringID(LTITLE, TITLE_STR_67_NOVICE1), 0, 0.76923078}, // "Health +1\n(Novice)" + {getStringID(LTITLE, TITLE_STR_68_NOVICE2), 0, 0.59171599}, // "Health +2\n(Novice)" + {getStringID(LTITLE, TITLE_STR_69_NOVICE3), 0, 0.45516616}, // "Health +3\n(Novice)" + {getStringID(LTITLE, TITLE_STR_70_NOVICE4), 0, 0.35012782}, // "Health +4\n(Novice)" + {getStringID(LTITLE, TITLE_STR_71_ROOKIE), 0, 0.1} // "Health +10\n(Rookie)" }; struct MP_controller_configuration_menu MP_controller_configuration_table[] = { - {TEXT(LTITLE, TITLE_STR_277), 0, 1}, //1.1 Honey* - {TEXT(LTITLE, TITLE_STR_278), 1, 1}, //1.2 Solitaire* - {TEXT(LTITLE, TITLE_STR_279), 2, 1}, //1.3 Kissy* - {TEXT(LTITLE, TITLE_STR_280), 3, 1}, //1.4 Goodnight* - {TEXT(LTITLE, TITLE_STR_281), 4, 2}, //2.1 Plenty* - {TEXT(LTITLE, TITLE_STR_282), 5, 2}, //2.2 Galore* - {TEXT(LTITLE, TITLE_STR_283), 6, 2}, //2.3 Domino* - {TEXT(LTITLE, TITLE_STR_284), 7, 2} //2.4 Goodhead* + {getStringID(LTITLE, TITLE_STR_277_11HONEY), 0, 1}, //1.1 Honey* + {getStringID(LTITLE, TITLE_STR_278_12SOLITAIRE), 1, 1}, //1.2 Solitaire* + {getStringID(LTITLE, TITLE_STR_279_13KISSY), 2, 1}, //1.3 Kissy* + {getStringID(LTITLE, TITLE_STR_280_14GOODNIGHT), 3, 1}, //1.4 Goodnight* + {getStringID(LTITLE, TITLE_STR_281_21PLENTY), 4, 2}, //2.1 Plenty* + {getStringID(LTITLE, TITLE_STR_282_22GALORE), 5, 2}, //2.2 Galore* + {getStringID(LTITLE, TITLE_STR_283_23DOMINO), 6, 2}, //2.3 Domino* + {getStringID(LTITLE, TITLE_STR_284_24GOODHEAD), 7, 2} //2.4 Goodhead* }; struct MP_sight_aim_settings mp_sight_adjust_table[] = { - {TEXT(LTITLE, TITLE_STR_72), 0, 0}, // "Sight OFF, Auto Aim OFF" - {TEXT(LTITLE, TITLE_STR_73), 1, 0}, // "Sight ON, Auto Aim OFF" - {TEXT(LTITLE, TITLE_STR_74), 0, 1}, // "Sight OFF, Auto Aim ON" - {TEXT(LTITLE, TITLE_STR_75), 1, 1} // "Sight ON, Auto Aim ON" + {getStringID(LTITLE, TITLE_STR_72_SOFFAOFF), 0, 0}, // "Sight OFF, Auto Aim OFF" + {getStringID(LTITLE, TITLE_STR_73_SONAOFF), 1, 0}, // "Sight ON, Auto Aim OFF" + {getStringID(LTITLE, TITLE_STR_74_SOFFAON), 0, 1}, // "Sight OFF, Auto Aim ON" + {getStringID(LTITLE, TITLE_STR_75_SONAON), 1, 1} // "Sight ON, Auto Aim ON" }; s32 selected_num_players = 0; @@ -678,40 +770,40 @@ struct Model *cast_model_weapon = NULL; u32 full_actor_intro = 0; struct intro_char intro_char_table[] = { - {BODY_Brosnan_Tuxedo, HEAD_Male_Brosnan_Tuxedo, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_228), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Special_Operations_Uniform, HEAD_Male_Brosnan_Boiler, TEXT(LTITLE, TITLE_STR_229), TEXT(LTITLE, TITLE_STR_232), TEXT(LTITLE, TITLE_STR_233), 0, 0}, - {BODY_Natalya_Skirt, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_229), TEXT(LTITLE, TITLE_STR_234), TEXT(LTITLE, TITLE_STR_227), 0, 0}, - {BODY_Trevelyan_006, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_229), TEXT(LTITLE, TITLE_STR_235), TEXT(LTITLE, TITLE_STR_236), 0, 0}, - {BODY_Xenia, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_230), TEXT(LTITLE, TITLE_STR_237), TEXT(LTITLE, TITLE_STR_238), 0, 0}, - {BODY_Ourumov, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_230), TEXT(LTITLE, TITLE_STR_239), TEXT(LTITLE, TITLE_STR_240), 0, 0}, - {BODY_Boris, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_230), TEXT(LTITLE, TITLE_STR_241), TEXT(LTITLE, TITLE_STR_227), 0, 0}, - {BODY_Valentin_, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_230), TEXT(LTITLE, TITLE_STR_242), TEXT(LTITLE, TITLE_STR_243), 0, 0}, - {BODY_Siberian_Guard_1_Mishkin, 0x45, TEXT(LTITLE, TITLE_STR_230), TEXT(LTITLE, TITLE_STR_244), TEXT(LTITLE, TITLE_STR_245), 0, 0}, - {BODY_Russian_Soldier, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_253), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Russian_Infantry, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_252), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Scientist_1_Male, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_263), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Scientist_2_Female, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_263), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Russian_Commandant, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_256), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Janus_Marine, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_254), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Naval_Officer, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_257), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Helicopter_Pilot, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_262), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_St_Petersburg_Guard, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_251), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Civilian_1_Female, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_264), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Civilian_2, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_264), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Civilian_3, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_264), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Civilian_4, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_264), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Siberian_Guard_1_Mishkin, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_258), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Arctic_Commando, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_259), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Siberian_Guard_2, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_258), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Siberian_Special_Forces, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_260), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Jungle_Commando, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_250), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Janus_Special_Forces, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_255), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Moonraker_Elite_1_Male, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_261), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Moonraker_Elite_2_Female, 0xFFFFFF9F, TEXT(LTITLE, TITLE_STR_227), TEXT(LTITLE, TITLE_STR_261), TEXT(LTITLE, TITLE_STR_227), 0, 1}, - {BODY_Mayday, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_231), TEXT(LTITLE, TITLE_STR_246), TEXT(LTITLE, TITLE_STR_227), 0, 0}, - {BODY_Jaws, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_231), TEXT(LTITLE, TITLE_STR_247), TEXT(LTITLE, TITLE_STR_227), 0, 0}, - {BODY_Oddjob, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_231), TEXT(LTITLE, TITLE_STR_248), TEXT(LTITLE, TITLE_STR_227), 0, 0}, - {BODY_Baron_Samedi, 0xFFFFFFFF, TEXT(LTITLE, TITLE_STR_231), TEXT(LTITLE, TITLE_STR_249), TEXT(LTITLE, TITLE_STR_227), 0, 0}, + {BODY_Brosnan_Tuxedo, HEAD_Male_Brosnan_Tuxedo, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_228_THEACTORS), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Special_Operations_Uniform, HEAD_Male_Brosnan_Boiler, getStringID(LTITLE, TITLE_STR_229_STARRING), getStringID(LTITLE, TITLE_STR_232_007), getStringID(LTITLE, TITLE_STR_233_JAMESBOND), 0, 0}, + {BODY_Natalya_Skirt, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_229_STARRING), getStringID(LTITLE, TITLE_STR_234_NATALYASIMONOVA), getStringID(LTITLE, TITLE_STR_227_LF), 0, 0}, + {BODY_Trevelyan_006, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_229_STARRING), getStringID(LTITLE, TITLE_STR_235_006), getStringID(LTITLE, TITLE_STR_236_ALECTREVELYAN), 0, 0}, + {BODY_Xenia, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_230_ALSOFEATURING), getStringID(LTITLE, TITLE_STR_237_JANUSOPPERATIVE), getStringID(LTITLE, TITLE_STR_238_XENIAONPTOPP), 0, 0}, + {BODY_Ourumov, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_230_ALSOFEATURING), getStringID(LTITLE, TITLE_STR_239_GENERAL), getStringID(LTITLE, TITLE_STR_240_ARKADYOURUMOV), 0, 0}, + {BODY_Boris, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_230_ALSOFEATURING), getStringID(LTITLE, TITLE_STR_241_BORISGRISHENKO), getStringID(LTITLE, TITLE_STR_227_LF), 0, 0}, + {BODY_Valentin_, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_230_ALSOFEATURING), getStringID(LTITLE, TITLE_STR_242_EXKGBAGENT), getStringID(LTITLE, TITLE_STR_243_VELENTINZUKOVSKY), 0, 0}, + {BODY_Siberian_Guard_1_Mishkin, 0x45, getStringID(LTITLE, TITLE_STR_230_ALSOFEATURING), getStringID(LTITLE, TITLE_STR_244_DEFENSEMINISTER), getStringID(LTITLE, TITLE_STR_245_DIMITRIMISHKIN), 0, 0}, + {BODY_Russian_Soldier, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_253_RUSSIANSOLDIER), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Russian_Infantry, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_252_RUSSIANINFANTRY), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Scientist_1_Male, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_263_SCIENTIST), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Scientist_2_Female, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_263_SCIENTIST), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Russian_Commandant, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_256_RUSSIANCOMMANDANT), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Janus_Marine, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_254_JANUSMARINE), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Naval_Officer, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_257_NAVALOFFICER), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Helicopter_Pilot, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_262_HELICOPTERPILOT), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_St_Petersburg_Guard, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_251_STPETERSBURGGUARD), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Civilian_1_Female, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_264_CIVILIAN), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Civilian_2, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_264_CIVILIAN), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Civilian_3, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_264_CIVILIAN), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Civilian_4, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_264_CIVILIAN), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Siberian_Guard_1_Mishkin, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_258_SIBERIANGUARD), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Arctic_Commando, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_259_ARCTICCOMMANDO), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Siberian_Guard_2, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_258_SIBERIANGUARD), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Siberian_Special_Forces, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_260_SIBERIANSPECIALFORCES), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Jungle_Commando, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_250_JUNGLECOMMANDO), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Janus_Special_Forces, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_255_JANUSSPECIALFORCES), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Moonraker_Elite_1_Male, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_261_MOOKRAKERELITE), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Moonraker_Elite_2_Female, 0xFFFFFF9F, getStringID(LTITLE, TITLE_STR_227_LF), getStringID(LTITLE, TITLE_STR_261_MOOKRAKERELITE), getStringID(LTITLE, TITLE_STR_227_LF), 0, 1}, + {BODY_Mayday, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_231_GUESTSTAR), getStringID(LTITLE, TITLE_STR_246_MAYDAY), getStringID(LTITLE, TITLE_STR_227_LF), 0, 0}, + {BODY_Jaws, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_231_GUESTSTAR), getStringID(LTITLE, TITLE_STR_247_JAWS), getStringID(LTITLE, TITLE_STR_227_LF), 0, 0}, + {BODY_Oddjob, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_231_GUESTSTAR), getStringID(LTITLE, TITLE_STR_248_ODDJOB), getStringID(LTITLE, TITLE_STR_227_LF), 0, 0}, + {BODY_Baron_Samedi, 0xFFFFFFFF, getStringID(LTITLE, TITLE_STR_231_GUESTSTAR), getStringID(LTITLE, TITLE_STR_249_BERONSAMEDI), getStringID(LTITLE, TITLE_STR_227_LF), 0, 0}, {0xFFFFFFFF, 0, 0, 0, 0, 0, 0} }; @@ -780,7 +872,26 @@ struct coord3d D_8002BA78 = { 0.0f, 0.0f, 1.0f }; struct coord3d D_8002BA84 = { 0.0f, 0.0f, 0.0f }; struct coord3d D_8002BA90 = { 0.0f, 1.0f, 0.0f }; -struct unk_joint_list D_8002BA9C = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData D_8002BA9C = {NULL, + TRUE, + 0x00000003, + NULL, + + NULL, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; + struct coord3d D_8002BADC = { 0.0f, 40.0f, 25.0f }; @@ -792,7 +903,7 @@ u16 color_palette_entries_50_percent[] = {1, 0x1F, 0x3C1, 0x3DF, 0x7801, 0x781F, // forward declarations -Gfx* add_tab3_previous(Gfx* DL); +Gfx* frontAddPreviousTabText(Gfx* DL); s32 check_if_stage_completed_on_difficulty(int stage, DIFFICULTY difficulty); s32 get_highest_unlocked_difficulty_for_level(s32 arg0); Gfx *constructor_menu00_legalscreen(Gfx *DL); @@ -832,7 +943,7 @@ void set_cursor_pos_difficulty(int difficulty); -Gfx *write_text_at_abs_coord(Gfx *gdl, s32 *x, s32 *y, s8 *text, s32 second_font_table, s32 first_font_table, s32 arg6, s32 view_x, s32 view_y, s32 arg9, s32 arga) +Gfx *frontPrintText(Gfx *gdl, s32 *x, s32 *y, s8 *text, s32 second_font_table, s32 first_font_table, s32 arg6, s32 view_x, s32 view_y, s32 arg9, s32 arga) { if (j_text_trigger != 0) { @@ -853,16 +964,16 @@ Gfx *write_text_at_abs_coord(Gfx *gdl, s32 *x, s32 *y, s8 *text, s32 second_font else { gdl = textRender( - gdl, - x, - y, - text, - second_font_table, - first_font_table, - arg6, - view_x, - view_y, - arg9, + gdl, + x, + y, + text, + second_font_table, + first_font_table, + arg6, + view_x, + view_y, + arg9, arga); } @@ -873,20 +984,20 @@ Gfx *write_text_at_abs_coord(Gfx *gdl, s32 *x, s32 *y, s8 *text, s32 second_font -s32 check_if_cheat_available(s32 cheat) +s32 frontCheckIfCheatIsUnlocked(s32 cheat) { switch(cheat) { case CHEAT_EXTRA_MP_CHARS: case CHEAT_MAXAMMO: - case CHEAT_DEBUG_RETURN_SAVED_RA: + case CHEAT_DEBUG_UNK5: case CHEAT_DEACTIVATE_INVINCIBILITY: case CHEAT_LINEMODE: case CHEAT_2X_HEALTH: case CHEAT_2X_ARMOR: case CHEAT_EXTRA_WEAPONS: case CHEAT_10X_HEALTH: - case CHEAT_INVISIBILITY_MP: + case CHEAT_BONDPHASE: case CHEAT_DEBUG_POS: case CHEAT_UNLOCK_PAINTBALL: case CHEAT_UNLOCK_INVINCIBLE: @@ -1001,20 +1112,19 @@ s32 check_if_cheat_available(s32 cheat) default: do { - /* WARNING: Do nothing block with infinite loop */ } while( 1 ); } } -int getplayerfavoredweapon(int player,int hand) { +int frontGetPlayersFavoriteWeaponInHand(int player,int hand) { return get_ptr_long_watch_text_for_item(array_favweapon[player][hand]); } -void menu_control_stick_tracking(void) { +void frontUpdateControlStickPosition(void) { s8 stickx = joyGetStickX(PLAYER_1); s8 sticky = -joyGetStickY(PLAYER_1); @@ -1091,7 +1201,7 @@ void menu_control_stick_tracking(void) { -Gfx *load_draw_selected_icon_folder_select(Gfx *DL) +Gfx *frontDrawCursor(Gfx *DL) { f32 xypos[2]; f32 halfedxy[2]; @@ -1110,7 +1220,7 @@ Gfx *load_draw_selected_icon_folder_select(Gfx *DL) image = mainfolderimages + IMG_DEL; } - likely_generate_DL_for_image_declaration(&DL, image, 4, 0, 0); + texSelect(&DL, image, 4, 0, 0); xypos[0] = floorFloat(cursor_h_pos + 0.5f); xypos[1] = floorFloat(cursor_v_pos + 0.5f); @@ -1118,47 +1228,51 @@ Gfx *load_draw_selected_icon_folder_select(Gfx *DL) halfedxy[0] = image->width * 0.5f; halfedxy[1] = image->height * 0.5f; - display_image_at_on_screen_coord(&DL, &xypos, &halfedxy, image->width, image->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xDC, (image->level > 0), 0); + display_image_at_position(&DL, &xypos, &halfedxy, image->width, image->height, 0, 0, 1, 255, 255, 255, 220, (image->level > 0), 0); return DL; } +//******************************************************************************************************** +// TABS +//******************************************************************************************************** -Gfx* add_tab1_start(Gfx* DL) +Gfx* frontAddStartTabText(Gfx* DL) { - s32 x; - s32 y; + s32 v; + s32 h; - s32 y2; - s32 x2; + s32 textWidth; + s32 textHeight; - g_textPtrTAB1 = langGet(TEXT(LTITLE, TITLE_STR_04)); + g_textPtrTAB1 = langGet(getStringID(LTITLE, TITLE_STR_04_START)); setTextSpacingInverted(TRUE); - x2 = 0; - y2 = 0; - textMeasure(&y2, &x2, g_textPtrTAB1, ptrFontBankGothicChars, ptrFontBankGothic, 0); - x = 51; - y = 411 - (y2 / 2); + textHeight = 0; + textWidth = 0; + //text is sideways so textWidth and textHeight are flipped + textMeasure(&textWidth, &textHeight, g_textPtrTAB1, ptrFontBankGothicChars, ptrFontBankGothic, 0); + v = STARTTAB_TEXT_TOP; + h = TABS_RIGHT_EDGE - (textWidth / 2); if (tab_start_highlight) { - DL = microcode_constructor_related_to_menus(DL, (y - y2) + 1, 51, y, 117, 50); + DL = microcode_constructor_related_to_menus(DL, (h - textWidth) + 1, STARTTAB_TEXT_TOP, h, STARTTAB_TEXT_BOTTOM, 50); } - setTextOrientation(1); + setTextOrientation(ROT_90CW); - x = 84 - (x2 / 2); - DL = textRender(DL, &x, &y, g_textPtrTAB1, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF, viGetY(), viGetX(), 0, 0); - setTextOrientation(0); + v = STARTTAB_TEXT_HALF - (textHeight / 2); + DL = textRender(DL, &v, &h, g_textPtrTAB1, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF, viGetY(), viGetX(), 0, 0); + setTextOrientation(ROT_NORMAL); setTextSpacingInverted(FALSE); return DL; } -s32 isontab1(void) +s32 frontCheckCursorOnStartTab(void) { - if ((390.0f < cursor_h_pos) && (cursor_v_pos <= 130.5f)) + if ((TABS_LEFT_EDGE < cursor_h_pos) && (cursor_v_pos <= STARTTAB_TAB_BOTTOM)) { return TRUE; } @@ -1167,41 +1281,42 @@ s32 isontab1(void) } -Gfx* add_tab3_previous(Gfx* DL) +Gfx* frontAddPreviousTabText(Gfx* DL) { - s32 x; - s32 y; + s32 v; + s32 h; - s32 y2; - s32 sp48; + s32 textWidth; + s32 textHeight; - g_textPtrTAB3 = langGet(TEXT(LTITLE, TITLE_STR_06)); + g_textPtrTAB3 = langGet(getStringID(LTITLE, TITLE_STR_06_PREVIOUS)); setTextSpacingInverted(TRUE); - sp48 = 0; - y2 = 0; - textMeasure(&y2, &sp48, g_textPtrTAB3, ptrFontBankGothicChars, ptrFontBankGothic, 0); - x = 236; - y = 411 - (y2 / 2); + textHeight = 0; + textWidth = 0; + //text is sideways so textWidth and textHeight are flipped + textMeasure(&textWidth, &textHeight, g_textPtrTAB3, ptrFontBankGothicChars, ptrFontBankGothic, 0); + v = PREVTAB_TEXT_TOP; + h = TABS_RIGHT_EDGE - (textWidth / 2); if (tab_prev_highlight != 0) { - DL = microcode_constructor_related_to_menus(DL, (y - y2) + 1, 236, y, 302, 50); + DL = microcode_constructor_related_to_menus(DL, (h - textWidth) + 1, PREVTAB_TEXT_TOP, h, PREVTAB_TEXT_BOTTOM, 50); } - setTextOrientation(1); + setTextOrientation(ROT_90CW); - x = 269 - (sp48 / 2); - DL = textRender(DL, &x, &y, g_textPtrTAB3, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF, viGetY(), viGetX(), 0, 0); - setTextOrientation(0); + v = PREVTAB_TEXT_HALF - (textHeight / 2); + DL = textRender(DL, &v, &h, g_textPtrTAB3, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF, viGetY(), viGetX(), 0, 0); + setTextOrientation(ROT_NORMAL); setTextSpacingInverted(FALSE); return DL; } -u32 isontab3(void) +u32 frontCheckCursorOnPreviousTab(void) { - if ((390.0f < cursor_h_pos) && (223.0f < cursor_v_pos)) + if ((TABS_LEFT_EDGE < cursor_h_pos) && (PREVTAB_TAB_TOP < cursor_v_pos)) { return 1; } @@ -1211,47 +1326,48 @@ u32 isontab3(void) } } -void set_cursor_pos_tab2(void) +void frontSetCursorPositionToNextTab(void) { - cursor_h_pos = 399.0f; - cursor_v_pos = 144.0f; + cursor_h_pos = NEXTTAB_CURSOR_HPOS; + cursor_v_pos = NEXTTAB_CURSOR_VPOS; } -Gfx* add_tab2_next(Gfx* DL) +Gfx* frontAddNextTabText(Gfx* DL) { - s32 x; - s32 y; + s32 v; + s32 h; - s32 sp4C; - s32 sp48; + s32 textWidth; + s32 textHeight; - g_textPtrTAB2 = langGet(TEXT(LTITLE, TITLE_STR_05)); //"NEXT\n" + g_textPtrTAB2 = langGet(getStringID(LTITLE, TITLE_STR_05_NEXT)); //"NEXT\n" setTextSpacingInverted(TRUE); - sp48 = 0; - sp4C = 0; - textMeasure(&sp4C, &sp48, g_textPtrTAB2, ptrFontBankGothicChars, ptrFontBankGothic, 0); - x = 144; - y = 411 - (sp4C / 2); + textHeight = 0; + textWidth = 0; + //text is sideways so textWidth and textHeight are flipped + textMeasure(&textWidth, &textHeight, g_textPtrTAB2, ptrFontBankGothicChars, ptrFontBankGothic, 0); + v = NEXTTAB_TEXT_TOP; + h = TABS_RIGHT_EDGE - (textWidth / 2); if (tab_next_highlight != 0) { - DL = microcode_constructor_related_to_menus(DL, (y - sp4C) + 1, 144, y, 210, 50); + DL = microcode_constructor_related_to_menus(DL, (h - textWidth) + 1, NEXTTAB_TEXT_TOP, h, NEXTTAB_TEXT_BOTTOM, 50); } - setTextOrientation(1); + setTextOrientation(ROT_90CW); - x = 177 - (sp48 / 2); - DL = textRender(DL, &x, &y, g_textPtrTAB2, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF, viGetY(), viGetX(), 0, 0); - setTextOrientation(0); + v = NEXTTAB_TEXT_HALF - (textHeight / 2); + DL = textRender(DL, &v, &h, g_textPtrTAB2, ptrFontBankGothicChars, ptrFontBankGothic, 0xFF, viGetY(), viGetX(), 0, 0); + setTextOrientation(ROT_NORMAL); setTextSpacingInverted(FALSE); return DL; } -u32 isontab2(void) +u32 frontCheckCursorOnNextTab(void) { - if (((390.0f < cursor_h_pos) && (130.5f < cursor_v_pos)) && (cursor_v_pos <= 223.0f)) + if (((TABS_LEFT_EDGE < cursor_h_pos) && (NEXTTAB_TAB_TOP < cursor_v_pos)) && (cursor_v_pos <= PREVTAB_TAB_TOP)) { return TRUE; } @@ -1281,6 +1397,9 @@ void init_menu00_legalscreen(void) modelCalculateRwDataLen(PitemZ_entries[PROP_LEGALPAGE].header); logoinst = get_obj_instance_controller_for_header(PitemZ_entries[PROP_LEGALPAGE].header); + #ifdef DEBUG + assert(logoinst); + #endif modelSetScale(logoinst, 1.0f); setsuboffset(logoinst, &pos); fileValidateSaves(); @@ -1364,19 +1483,19 @@ Gfx *display_aligned_white_text_to_screen(Gfx *dl, s32 arg1, s32 arg2, s32 halig #ifdef NONMATCHING /** * https://decomp.me/scratch/hx7ye 99.27% - * + * * decomp notes: * compiles: yes * stack resize: match * instructions match: yes * resgisters match: false - * + * * decomp notes: match down to regalloc in final loop. */ Gfx *constructor_menu00_legalscreen(Gfx *DL) { s32 padding; - struct unk_joint_list spE4; + ModelRenderData spE4; Mtxf *temp; Mtxf spA0; s32 i; @@ -1385,7 +1504,7 @@ Gfx *constructor_menu00_legalscreen(Gfx *DL) struct legal_screen_text *legal_text_ptr; spE4 = D_8002AABC; - + DL = insert_imageDL(DL); matrix_4x4_7F059694(&spA0, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); spE4.unk_matrix = &spA0; @@ -1669,7 +1788,7 @@ void interface_menu01_nintendo(void) } else { - prev_keypresses = 1; + prev_keypresses = TRUE; frontChangeMenu(MENU_RAREWARE_LOGO, TRUE); } } @@ -1678,12 +1797,12 @@ void interface_menu01_nintendo(void) Gfx *constructor_menu01_nintendo(Gfx *DL) { - struct unk_joint_list sp128; + ModelRenderData sp128; s32 padding; s32 var_v1; Mtxf spE0; s32 i; - + sp128 = D_8002AB08; DL = insert_imageDL(DL); @@ -1693,11 +1812,11 @@ Gfx *constructor_menu01_nintendo(Gfx *DL) gSPLight(DL++, &ninlogolight.l[0], 1); \ gSPLight(DL++, &ninlogolight, 2); -#if defined(VERSION_EU) - // 0x100000000 − 0xFFFECD34 = 0x132CC (78540 decimal) +#if defined(VERSION_EU) + // 0x100000000 ? 0xFFFECD34 = 0x132CC (78540 decimal) var_v1 = 0xFF - ((s32) ((g_MenuTimer * 0xFF) + 0xFFFECD34) / 83); #else - // 0x100000000 − 0xFFFE8F72 = 0x1708E (94350 decimal) + // 0x100000000 ? 0xFFFE8F72 = 0x1708E (94350 decimal) var_v1 = 0xFF - ((s32) ((g_MenuTimer * 0xFF) + 0xFFFE8F72) / 100); #endif if (var_v1 >= 0x100) @@ -1727,10 +1846,10 @@ Gfx *constructor_menu01_nintendo(Gfx *DL) if(1) { Mtxf sp90; - + matrix_4x4_set_rotation_around_y(ninLogoRotRate, &sp90); matrix_scalar_multiply_3(ninLogoScale, (f32*)&sp90); - + #if defined(VERSION_EU) ninLogoScale *= 1.09647190571f; #else @@ -1740,14 +1859,14 @@ Gfx *constructor_menu01_nintendo(Gfx *DL) { ninLogoScale = 1.1f; } - + matrix_4x4_7F059694(&spE0, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); matrix_4x4_multiply_in_place(&spE0, &sp90); matrix_4x4_copy(&sp90, &spE0); } sp128.unk_matrix = &spE0; - + sp128.mtxlist = dynAllocate(logoinst->obj->numMatrices << 6); matrix_4x4_copy(&spE0, sp128.mtxlist); @@ -1756,8 +1875,8 @@ Gfx *constructor_menu01_nintendo(Gfx *DL) sub_GAME_7F06EFC4(logoinst); - sp128.unk08 = 3; - sp128.unk04 = 0; + sp128.flags = 3; + sp128.zbufferenabled = FALSE; sp128.gdl = DL; subdraw(&sp128, logoinst); @@ -1768,11 +1887,11 @@ Gfx *constructor_menu01_nintendo(Gfx *DL) { Mtxf sp50; s32 padding2; - + // hack: source address steps by sizeof(Mtxf), but can't get that to match matrix_4x4_copy(&((s8*)logoinst->render_pos)[i*0x40], &sp50); matrix_4x4_f32_to_s32(&sp50, &((Mtxf*)logoinst->render_pos)[i]); - + if(i); } @@ -1818,7 +1937,7 @@ void interface_menu02_rareware(void) frontChangeMenu(MENU_FILE_SELECT, TRUE); return; } - prev_keypresses = 1; + prev_keypresses = TRUE; frontChangeMenu(MENU_EYE_INTRO, TRUE); } } @@ -1841,7 +1960,7 @@ Gfx * constructor_menu02_rareware(Gfx * DL) { //GUNBARREL //******************************************************************************************************** void init_menu03_eyeintro(void) { - sub_GAME_7F008E80(ptr_logo_and_walletbond_DL, 0x78000); + initializeGunBarrelIntro(ptr_logo_and_walletbond_DL, 0x78000); musicTrack1Play(M_INTRO); maybe_is_in_menu = TRUE; } @@ -1861,7 +1980,7 @@ void interface_menu03_eye(void) { frontChangeMenu(MENU_FILE_SELECT, TRUE); return; } - prev_keypresses = 1; + prev_keypresses = TRUE; frontChangeMenu(MENU_GOLDENEYE_LOGO, TRUE); } } @@ -1885,6 +2004,10 @@ void init_menu04_goldeneyelogo(void) load_object_fill_header(PitemZ_entries[PROP_GOLDENEYELOGO].header, PitemZ_entries[PROP_GOLDENEYELOGO].filename, ptr_logo_and_walletbond_DL, 0x3c000, 0); modelCalculateRwDataLen(PitemZ_entries[PROP_GOLDENEYELOGO].header); logoinst = get_obj_instance_controller_for_header(PitemZ_entries[PROP_GOLDENEYELOGO].header); + #ifdef DEBUG + assert(logoinst); + #endif + modelSetScale(logoinst, 1.0f); setsuboffset(logoinst, &pos); } @@ -1941,7 +2064,7 @@ void interface_menu04_goldeneyelogo(void) Gfx *constructor_menu04_goldeneyelogo(Gfx *DL) { - struct unk_joint_list sp140; + ModelRenderData sp140; s32 padding[2]; Mtxf spF8; s32 i; @@ -1973,9 +2096,9 @@ Gfx *constructor_menu04_goldeneyelogo(Gfx *DL) logoinst->render_pos = (union RenderPosView*)sp140.mtxlist; sub_GAME_7F06EFC4(logoinst); - - sp140.unk08 = 3; - sp140.unk04 = 0; + + sp140.flags = 3; + sp140.zbufferenabled = FALSE; sp140.gdl = DL; subdraw(&sp140, logoinst); @@ -1986,11 +2109,11 @@ Gfx *constructor_menu04_goldeneyelogo(Gfx *DL) { Mtxf sp50; s32 padding2; - + // hack: source address steps by sizeof(Mtxf), but can't get that to match matrix_4x4_copy(&((s8*)logoinst->render_pos)[i*0x40], &sp50); matrix_4x4_f32_to_s32(&sp50, &((Mtxf*)logoinst->render_pos)[i]); - + if(i); } @@ -2012,7 +2135,7 @@ void disable_all_switches(Model *arg0) { union ModelRwData *unmrd; struct ModelRwData_SwitchRecord *srecord; - + unmrd = modelGetNodeRwData(arg0, mnode); srecord = (struct ModelRwData_SwitchRecord *)unmrd; srecord->visible = 0; @@ -2037,33 +2160,40 @@ void set_item_visibility_in_objinstance(Model* objinstance, s32 item, s32 mode) void select_load_bond_picture(Model *objinstance, u32 bondID) { - set_item_visibility_in_objinstance(objinstance,SW_BROSNAN,1); //brosnan picture - set_item_visibility_in_objinstance(objinstance,SW_CONNERY,0); - set_item_visibility_in_objinstance(objinstance,SW_DALTON,0); - set_item_visibility_in_objinstance(objinstance,SW_MOORE,0); - set_item_visibility_in_objinstance(objinstance,SW_BROSNANCOVER,1); //bigger brosnan picture - set_item_visibility_in_objinstance(objinstance,SW_CONNERYCOVER,0); - set_item_visibility_in_objinstance(objinstance,SW_DALTONCOVER,0); - set_item_visibility_in_objinstance(objinstance,SW_MOORECOVER,0); +#ifdef ALL_BONDS + set_item_visibility_in_objinstance(objinstance, SW_BROSNAN, (bondID == BOND_BROSNAN)); //brosnan picture + set_item_visibility_in_objinstance(objinstance, SW_CONNERY, (bondID == BOND_CONNERY)); + set_item_visibility_in_objinstance(objinstance, SW_DALTON, (bondID == BOND_DALTON)); + set_item_visibility_in_objinstance(objinstance, SW_MOORE, (bondID == BOND_MOORE)); + set_item_visibility_in_objinstance(objinstance, SW_BROSNANCOVER, (bondID == BOND_BROSNAN)); //bigger brosnan picture + set_item_visibility_in_objinstance(objinstance, SW_CONNERYCOVER, (bondID == BOND_CONNERY)); + set_item_visibility_in_objinstance(objinstance, SW_DALTONCOVER, (bondID == BOND_DALTON)); + set_item_visibility_in_objinstance(objinstance, SW_MOORECOVER, (bondID == BOND_MOORE)); +#else + set_item_visibility_in_objinstance(objinstance,SW_BROSNAN,TRUE); //brosnan picture + set_item_visibility_in_objinstance(objinstance,SW_CONNERY,FALSE); + set_item_visibility_in_objinstance(objinstance,SW_DALTON,FALSE); + set_item_visibility_in_objinstance(objinstance,SW_MOORE,FALSE); + set_item_visibility_in_objinstance(objinstance,SW_BROSNANCOVER,TRUE); //bigger brosnan picture + set_item_visibility_in_objinstance(objinstance,SW_CONNERYCOVER,FALSE); + set_item_visibility_in_objinstance(objinstance,SW_DALTONCOVER,FALSE); + set_item_visibility_in_objinstance(objinstance,SW_MOORECOVER,FALSE); +#endif } struct unk_walletbond_struct { - s32 unk00; + s32 Primary; s32 unk04; s32 unk08; s32 unk0C; s32 unk10; s32 unk14; s32 unk18; - s32 unk1C; + s32 BaseAddr; }; -struct unk_walletbond_struct_b { - s32 unk00; - struct unk_walletbond_struct *unk04; -}; /** * Address 0x7F00B8AC NTSC @@ -2081,28 +2211,31 @@ void load_walletbond(void) (u8*)ptr_logo_and_walletbond_DL, 0xA000, 0); - + modelCalculateRwDataLen(PitemZ_entries[PROP_WALLETBOND].header); - for (i = 0; i < 4; i++) + for (i = FOLDER1; i < MAX_FOLDER_COUNT; i++) { walletinst[i] = get_aircraft_obj_instance_controller(PitemZ_entries[PROP_WALLETBOND].header); + #ifdef DEBUG + assert(walletinst[i]); + #endif modelSetScale(walletinst[i], 1.0f); } - mnode = PitemZ_entries[PROP_WALLETBOND].header->Switches[0x15]; - + mnode = PitemZ_entries[PROP_WALLETBOND].header->Switches[GFXHIT0_PICS]; + if (mnode != NULL) { struct unk_walletbond_struct *srecord; - struct unk_walletbond_struct_b *b; - s32 arg0; - - b = (struct unk_walletbond_struct_b *)mnode; - srecord = b->unk04; + struct ModelNode *b; + Gfx *arg0; - arg0 = srecord->unk1C + (srecord->unk00 & 0xffffff); - bgLoadFromDynamicCCRMLUT(arg0, 0, 8); + b = (struct ModelNode *)mnode; + srecord = b->Data; + + arg0 = (s32)srecord->BaseAddr + (srecord->Primary & 0xffffff); + bgLoadFromDynamicCCRMLUT(arg0, NULL, CCRMLUT_WALLETBOND); } } } @@ -2110,12 +2243,14 @@ void load_walletbond(void) -void sub_GAME_7F00B990(void) +void frontCleanUpWalletBond(void) { s32 i; - for (i = 0; i < 4; i++) { + for (i = FOLDER1; i < MAX_FOLDER_COUNT; i++) + { if (walletinst[i] == NULL) { continue; } + clear_aircraft_model_obj(walletinst[i]); walletinst[i] = NULL; } @@ -2132,17 +2267,17 @@ void init_menu05_fileselect(void) Gfx* sp20 = (s32)(ptr_logo_and_walletbond_DL) + (s32)(4096*10); int i; - prev_keypresses = 0; - - - if (selected_folder_num < 0) + prev_keypresses = FALSE; + + + if (selected_folder_num < FOLDER1) { - selected_folder_num = 0; + selected_folder_num = FOLDER1; } tab_next_selected = FALSE; tab_prev_selected = FALSE; - folder_selected_for_deletion = -1; - folder_selected_for_deletion_choice = 1; + folder_selected_for_deletion = FOLDER_INVALID; + folder_selected_for_deletion_choice = FOLDER2; sub_GAME_7F008DE4(&sp20, &sp24); load_walletbond(); if (maybe_is_in_menu){ @@ -2151,7 +2286,7 @@ void init_menu05_fileselect(void) } g_MenuTimer = 0; for(i=1;i= 6)) || (joyGetStickY(0) < -5)) || (joyGetStickY(0) >= 6)) { g_MenuTimer = 0; @@ -2225,7 +2360,7 @@ s32 interface_menu05_fileselect(void) for (i1 = 0; i1 < 4; i1++) { sp54 = &D_8002AB94[i1]; - + matrix_4x4_7F059694(&spC8, 0.0f, 0.0f, 4000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f); matrix_4x4_set_identity_and_position(sp54, &sp88); matrix_scalar_multiply(0.37f, (f32*)&sp88); @@ -2245,16 +2380,16 @@ s32 interface_menu05_fileselect(void) set_item_visibility_in_objinstance(walletinst[i1], 0xD, 1); } - if (selected_folder_num >= 0) + if (selected_folder_num >= FOLDER1) { - if (selected_folder_num == 0x64) + if (selected_folder_num == RAMROM_FOLDERNUM) { selected_folder_num = selected_folder_num_copy; } - if ((selected_folder_num < 0) || (selected_folder_num >= 4)) + if ((selected_folder_num < FOLDER1) || (selected_folder_num >= MAX_FOLDER_COUNT)) { - selected_folder_num = 0; + selected_folder_num = FOLDER1; } toggle_deletion_menu_for_folder(selected_folder_num); @@ -2306,28 +2441,28 @@ s32 interface_menu05_fileselect(void) } else { - for (i2 = 0; i2 < 4; i2++) + for (i2 = FOLDER1; i2 < MAX_FOLDER_COUNT; i2++) { f32 sp80; f32 sp7C; f32 sp78; f32 sp74; - + struct rectbbox sp64; - + LEVEL_SOLO_SEQUENCE sp60; DIFFICULTY sp5C; - + sub_GAME_7F03F90C(walletinst[i2], &sp80, &sp7C, &sp78, &sp74); sub_GAME_7F03F948(&dword_CODE_bss_80069620[i2], &sp7C, &sp74, &sp64.right, &sp64.left); - if ((sp64.right <= cursor_h_pos) - && (cursor_h_pos <= sp64.left) + if ((sp64.right <= cursor_h_pos) + && (cursor_h_pos <= sp64.left) && (sp64.down <= cursor_v_pos) && (cursor_v_pos <= sp64.up)) { fileGetHighestStageDifficultyCompletedForFolder(i2, &sp60, &sp5C); - + if (joyGetButtonsPressedThisFrame(0, A_BUTTON | Z_TRIG | START_BUTTON) != 0) { if (folder_selection_screen_option_icon == 0) @@ -2337,7 +2472,7 @@ s32 interface_menu05_fileselect(void) } else if (folder_selection_screen_option_icon == 1) { - sub_GAME_7F01EDA0(i2); + fileCopyFolderToFirstFree(i2); folder_selection_screen_option_icon = 0; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, COPY_FILE_SFX, NULL); } @@ -2348,29 +2483,29 @@ s32 interface_menu05_fileselect(void) folder_selected_for_deletion = i2; folder_selected_for_deletion_choice = 1; } - + folder_selection_screen_option_icon = 0; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, OPTION_CLICK2_SFX, NULL); } - - break; - } + + break; + } } } if (joyGetButtonsPressedThisFrame(0, A_BUTTON | Z_TRIG | START_BUTTON) != 0) { - if ((folder_option_COPY_bound.left <= cursor_h_pos) - && (cursor_h_pos <= folder_option_COPY_bound.right) - && (folder_option_COPY_bound.up <= cursor_v_pos) + if ((folder_option_COPY_bound.left <= cursor_h_pos) + && (cursor_h_pos <= folder_option_COPY_bound.right) + && (folder_option_COPY_bound.up <= cursor_v_pos) && (cursor_v_pos <= folder_option_COPY_bound.down)) { folder_selection_screen_option_icon = 1; sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, DOOR_LOCK_SFX, NULL); } - else if ((folder_option_ERASE_bound.left <= cursor_h_pos) - && (cursor_h_pos <= folder_option_ERASE_bound.right) - && (folder_option_ERASE_bound.up <= cursor_v_pos) + else if ((folder_option_ERASE_bound.left <= cursor_h_pos) + && (cursor_h_pos <= folder_option_ERASE_bound.right) + && (folder_option_ERASE_bound.up <= cursor_v_pos) && (cursor_v_pos <= folder_option_ERASE_bound.down)) { folder_selection_screen_option_icon = 2; @@ -2382,31 +2517,31 @@ s32 interface_menu05_fileselect(void) sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, GUN_M60AMMGUN_3_SFX, NULL); } } - else if ((joyGetButtonsPressedThisFrame(0, B_BUTTON) != 0) + else if ((joyGetButtonsPressedThisFrame(0, B_BUTTON) != 0) && (folder_selection_screen_option_icon != 0)) { folder_selection_screen_option_icon = 0; sndPlaySfx((struct ALBankAlt_s *)g_musicSfxBufferPtr, GUN_M60AMMGUN_3_SFX, NULL); } - - menu_control_stick_tracking(); + + frontUpdateControlStickPosition(); } - if (selected_folder_num >= 0) + if (selected_folder_num >= FOLDER1) { - frontChangeMenu(MENU_MODE_SELECT, 0); + frontChangeMenu(MENU_MODE_SELECT, FALSE); setCursorPOSforMode(0); - + return; } - + #if defined(VERSION_EU) if (g_MenuTimer >= 1501) // PAL (50fps): 30 seconds + 1 frame #else if (g_MenuTimer >= 1801) // NTSC (60fps): 30 seconds + 1 frame #endif { - frontChangeMenu(MENU_LEGAL_SCREEN, 1); + frontChangeMenu(MENU_LEGAL_SCREEN, TRUE); } } @@ -2418,16 +2553,16 @@ char* get_ptr_difficulty_name(s32 difficulty) switch (difficulty) { case 0: - text = langGet(TEXT(LTITLE, TITLE_STR_19)); //Agent + text = langGet(getStringID(LTITLE, TITLE_STR_19_AGENT)); //Agent break; case 1: - text = langGet(TEXT(LTITLE, TITLE_STR_20)); //Secret Agent + text = langGet(getStringID(LTITLE, TITLE_STR_20_SECRETAGENT)); //Secret Agent break; case 2: - text = langGet(TEXT(LTITLE, TITLE_STR_21)); //00 Agent + text = langGet(getStringID(LTITLE, TITLE_STR_21_00AGENT)); //00 Agent break; case 3: - text = langGet(TEXT(LTITLE, TITLE_STR_22)); //007 + text = langGet(getStringID(LTITLE, TITLE_STR_22_007)); //007 break; } return text; @@ -2447,7 +2582,7 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) s32 i; u8 *langp; s32 var_s2_2; - struct unk_joint_list sp14C; + ModelRenderData sp14C; s32 var_s1_2; Mtxf sp108; f32 temp_f4; @@ -2456,31 +2591,31 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) LEVEL_SOLO_SEQUENCE spF0; DIFFICULTY spEC; struct coord2d spE4; - + sp1A8 = unknown_folderselect_constructor; sp19C = unknown_folderselect_constructor_0; DL = insert_imageDL(DL); - + gDPSetCombineLERP(DL++, TEXEL0, PRIMITIVE, ENV_ALPHA, PRIMITIVE, 0, 0, 0, PRIMITIVE, TEXEL0, PRIMITIVE, ENV_ALPHA, PRIMITIVE, 0, 0, 0, PRIMITIVE); gDPSetEnvColor(DL++, 0xFF, 0xFF, 0xFF, 0x14); - + DL = sub_GAME_7F007CC8(DL, (s32) floorFloat(((f32) viGetX() * -80.0f) / 1280.0f), &sp1A8, &sp19C); - gSPDisplayList(DL++, &fontDL_0x000); - gSPDisplayList(DL++, &fontDL_0x040); + gSPDisplayList(DL++, &dlBasicGeometry); + gSPDisplayList(DL++, &dlFastPipelineSetup); for (j = 3; j >= 0; j--) { // struct copy sp14C = unknown_folderselect; - - sp14C.unk08 = 3; - sp14C.unk04 = 0; + + sp14C.flags = 3; + sp14C.zbufferenabled = FALSE; sp14C.gdl = DL; subdraw(&sp14C, walletinst[j]); - + DL = sp14C.gdl; for (i=0; i < walletinst[j]->obj->numMatrices; i++) @@ -2494,11 +2629,11 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) } } - + DL = microcode_constructor(DL); setTextSpacingInverted(0); - for (sp1B4 = 0; sp1B4 < 4; sp1B4++) + for (sp1B4 = FOLDER1; sp1B4 < MAX_FOLDER_COUNT; sp1B4++) { // HACK: char spD0[4]; // this needs to be at least 14 characters. @@ -2507,8 +2642,8 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) struct coord3d * sp74; sp74 = &dword_CODE_bss_80069620[sp1B4]; - - sub_GAME_7F077FF4(sp74, &spE4); + + transform3Dto2DCoords(sp74, &spE4); if (sp1B4 == folder_selected_for_deletion) { @@ -2517,14 +2652,14 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) DL = microcode_constructor_related_to_menus(DL, spFC.p[1], spFC.p[0], spFC.p[1] + 0x63, spFC.p[0] + 0x2A, 0x32); - langp = langGet(0x9C17); + langp = langGet(getStringID(LTITLE, TITLE_STR_23_ERASEFILE)); spFC.p[1] = (s32) floorFloat(spE4.f[0]) - 0x2F; spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x1E; // 0xEBD879FF DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); - langp = langGet(0x9C18); + langp = langGet(getStringID(LTITLE, TITLE_STR_24_CANCEL)); spFC.p[1] = (s32) floorFloat(spE4.f[0]) - 0x2F; spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x32; @@ -2540,13 +2675,13 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) { DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); } - - langp = langGet(0x9C19); + + langp = langGet(getStringID(LTITLE, TITLE_STR_25_CONFIRM)); temp_f4 = floorFloat(spE4.f[0]); spFC.p[1] = (((j_text_trigger != 0) ? 0x17 : -1) + (s32) temp_f4) - 1; spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x32; - + if (folder_selected_for_deletion_choice != 0) { DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); @@ -2563,33 +2698,33 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) } else { - + fileGetHighestStageDifficultyCompletedForFolder(sp1B4, &spF0, &spEC); - + if ((spF0 >= SP_LEVEL_DAM) && (spEC >= DIFFICULTY_AGENT)) { langp = get_ptr_difficulty_name(spEC); - + if (langp != NULL) { strcpy((char *)&spD0, langp); strcat((char *)&spD0, "\n"); - + spF4.p[0] = 0; spF4.p[1] = 0; - + textMeasure(&spF4.p[1], &spF4.p[0], (char *)&spD0, ptrFontZurichBoldChars, ptrFontZurichBold, 0); spFC.p[1] = ((s32) floorFloat(spE4.f[0]) - (spF4.p[0] / 2)) - 1; spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x15; DL = textRender(DL, &spFC.p[1], &spFC.p[0], (char *)&spD0, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); } - + if (spEC != DIFFICULTY_007) { var_s2_2 = -1; - - strcpy(spBC, langGet(0x9C1A)); - + + strcpy(spBC, langGet(getStringID(LTITLE, TITLE_STR_26_MISSION))); + for (var_s1_2 = 0; mission_folder_setup_entries[var_s1_2].folder_text_preset != 0; var_s1_2++) { if (spF0 == mission_folder_setup_entries[var_s1_2].mission_num) @@ -2598,22 +2733,22 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) break; } } - + if (var_s2_2 >= 0) { strcat((char *)spBC, (char *)mission_folder_setup_entries[var_s2_2].string_ptr); strcat((char *)spBC, "."); } - + strcat((char *)spBC, (char *)mission_folder_setup_entries[var_s1_2].string_ptr); strcat((char *)spBC, "\n"); spF4.p[0] = 0; spF4.p[1] = 0; - + textMeasure(&spF4.p[1], &spF4.p[0], (char *)spBC, ptrFontZurichBoldChars, ptrFontZurichBold, 0); spFC.p[1] = ((s32) floorFloat(spE4.f[0]) - (spF4.p[0] / 2)) - 1; spFC.p[0] = (s32) floorFloat(spE4.f[1]) + 0x2D; - + DL = textRender(DL, &spFC.p[1], &spFC.p[0], (char *)spBC, ptrFontZurichBoldChars, ptrFontZurichBold, 0xEBD879FF, viGetX(), viGetY(), 0, 0); } } @@ -2630,77 +2765,77 @@ Gfx *constructor_menu05_fileselect(Gfx *DL) struct coord2d sp94; struct coord2d sp8C; struct coord2d sp84; - + setTextSpacingInverted(0); - - langp = langGet(0x9C1B); - + + langp = langGet(getStringID(LTITLE, TITLE_STR_27_COPY)); + spF4.p[0] = 0; spF4.p[1] = 0; - + textMeasure(&spF4.p[1], &spF4.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - + spFC.p[0] = 0x11D - (spF4.p[1] / 2); spFC.p[1] = 0xF7; - + DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); folder_option_COPY_bound.right = (f32) (spF4.p[0] + spFC.p[1]); - - langp = langGet(0x9C1C); - + + langp = langGet(getStringID(LTITLE, TITLE_STR_28_ERASE)); + spF4.p[0] = 0; spF4.p[1] = 0; - + textMeasure(&spF4.p[1], &spF4.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - + spFC.p[1] = 0x165; spFC.p[0] = 0x11D - (spF4.p[1] / 2); - + DL = textRender(DL, &spFC.p[1], &spFC.p[0], langp, ptrFontZurichBoldChars, ptrFontZurichBold, -1, viGetX(), viGetY(), 0, 0); - + folder_option_ERASE_bound.right = (f32) (spF4.p[0] + spFC.p[1]); spAC.f[0] = 225.0f; spAC.f[1] = 285.0f; - + spA4.f[0] = (f32) (mainfolderimages + IMG_COPY)->width * 0.5f; spA4.f[1] = (f32) (mainfolderimages + IMG_COPY)->height * 0.5f; - - likely_generate_DL_for_image_declaration(&DL, mainfolderimages, 4, 0, 0); - display_image_at_on_screen_coord(&DL, &spAC.f[0], &spA4.f[0], mainfolderimages->width, mainfolderimages->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) mainfolderimages->level > 0, 0); - + + texSelect(&DL, mainfolderimages, 4, 0, 0); + display_image_at_position(&DL, &spAC.f[0], &spA4.f[0], mainfolderimages->width, mainfolderimages->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) mainfolderimages->level > 0, 0); + folder_option_COPY_bound.left = spAC.f[0] - spA4.f[0]; folder_option_COPY_bound.up = spAC.f[1] - spA4.f[1]; folder_option_COPY_bound.down = spAC.f[1] + spA4.f[1]; sp9C.f[0] = 335.0f; sp9C.f[1] = 285.0f; - + sp94.f[0] = (mainfolderimages + IMG_DEL)->width * 0.5f; sp94.f[1] = (mainfolderimages + IMG_DEL)->height * 0.5f; - - likely_generate_DL_for_image_declaration(&DL, mainfolderimages + IMG_DEL, 4, 0, 0); - display_image_at_on_screen_coord(&DL, &sp9C.f[0], &sp94.f[0], (mainfolderimages + IMG_DEL)->width, (mainfolderimages + IMG_DEL)->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) (mainfolderimages + IMG_DEL)->level > 0, 0); - + + texSelect(&DL, mainfolderimages + IMG_DEL, 4, 0, 0); + display_image_at_position(&DL, &sp9C.f[0], &sp94.f[0], (mainfolderimages + IMG_DEL)->width, (mainfolderimages + IMG_DEL)->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) (mainfolderimages + IMG_DEL)->level > 0, 0); + folder_option_ERASE_bound.left = (f32) (sp9C.f[0] - sp94.f[0]); folder_option_ERASE_bound.up = (f32) (sp9C.f[1] - sp94.f[1]); folder_option_ERASE_bound.down = (f32) (sp9C.f[1] + sp94.f[1]); sp8C.f[0] = 110.0f; sp8C.f[1] = 285.0f; - + sp84.f[0] = (mainfolderimages + IMG_SEL)->width * 0.5f; sp84.f[1] = (mainfolderimages + IMG_SEL)->height * 0.5f; - - likely_generate_DL_for_image_declaration(&DL, mainfolderimages + IMG_SEL, 4, 0, 0); - display_image_at_on_screen_coord(&DL, &sp8C.f[0], &sp84.f[0], (mainfolderimages + IMG_SEL)->width, (mainfolderimages + IMG_SEL)->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) (mainfolderimages + IMG_SEL)->level > 0, 0); + + texSelect(&DL, mainfolderimages + IMG_SEL, 4, 0, 0); + display_image_at_position(&DL, &sp8C.f[0], &sp84.f[0], (mainfolderimages + IMG_SEL)->width, (mainfolderimages + IMG_SEL)->height, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, (s32) (mainfolderimages + IMG_SEL)->level > 0, 0); } - + if (folder_selected_for_deletion < 0) { - DL = load_draw_selected_icon_folder_select(DL); + DL = frontDrawCursor(DL); } - + return DL; } @@ -2715,7 +2850,7 @@ void init_menu06_modeselect(void) tab_next_selected = FALSE; tab_prev_selected = FALSE; load_walletbond(); - copyCurrentEEPROMtoStack(); + fileUpdateBondInCurrentFolder(); } void update_menu06_modesel(void) { @@ -2728,9 +2863,9 @@ void interface_menu06_modesel(void) u32 i; is_cheat_menu_available = FALSE; - for (i=1; i != 75; i++) + for (i=CHEAT_EXTRA_MP_CHARS; i != CHEAT_INVALID; i++) { - if (check_if_cheat_available(i)) + if (frontCheckIfCheatIsUnlocked(i)) { cheat_available[i] = TRUE; is_cheat_menu_available = TRUE; @@ -2754,7 +2889,7 @@ void interface_menu06_modesel(void) set_item_visibility_in_objinstance(walletinst[0], SW_EYESONLY, 1); tab_prev_highlight = FALSE; mission_difficulty_highlighted = DIFFICULTY_MULTI; - if (isontab3()) + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = TRUE; if (joyGetButtonsPressedThisFrame(PLAYER_1, START_BUTTON|Z_TRIG|A_BUTTON)) @@ -2796,7 +2931,7 @@ void interface_menu06_modesel(void) tab_prev_selected = TRUE; sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, 0); } - menu_control_stick_tracking(); + frontUpdateControlStickPosition(); if (gamemode == GAMEMODE_SOLO) { frontChangeMenu(MENU_MISSION_SELECT, FALSE); @@ -2821,12 +2956,12 @@ void interface_menu06_modesel(void) // Address 0x7F00D5E8 NTSC -Gfx *sub_GAME_7F00D5E8(Gfx *DL) +Gfx *frontSetupMenuBackground(Gfx *DL) { s32 padding; f32 temp_f0; f32 temp_f2; - struct unk_joint_list sp10C; + ModelRenderData sp10C; s32 i; Mtxf spC8; Mtxf sp88; @@ -2834,27 +2969,27 @@ Gfx *sub_GAME_7F00D5E8(Gfx *DL) temp_f0 = D_8002AB94[selected_folder_num].f[0]; temp_f2 = D_8002AB94[selected_folder_num].f[1]; - + sp10C = D_8002AF84; temp_f0 += D_8002AFC4; temp_f2 += D_8002AFC8; - + matrix_4x4_7F059694(&spC8, temp_f0, temp_f2, 4000.0f + D_8002AFCC, temp_f0, temp_f2, 0.0f, 0.0f, 1.0f, 0.0f); matrix_4x4_set_identity_and_position(&D_8002AB94[selected_folder_num], &sp88); matrix_scalar_multiply(0.25f, sp88.m[0]); matrix_4x4_multiply_in_place(&spC8, &sp88); sp10C.unk_matrix = &sp88; - + sp10C.mtxlist = dynAllocate(walletinst[0]->obj->numMatrices << 6); matrix_4x4_copy(&sp88, sp10C.mtxlist); walletinst[0]->render_pos = (union RenderPosView*)sp10C.mtxlist; - sp10C.unk08 = 3; - sp10C.unk04 = 0; + sp10C.flags = 3; + sp10C.zbufferenabled = FALSE; sp10C.gdl = DL; subdraw(&sp10C, walletinst[0]); @@ -2868,7 +3003,7 @@ Gfx *sub_GAME_7F00D5E8(Gfx *DL) matrix_4x4_f32_to_s32(&sp48, &((Mtxf*)walletinst[0]->render_pos)[i]); } - + return DL; } @@ -2898,14 +3033,14 @@ Gfx* constructor_menu06_modesel(Gfx* DL) DL = viFillScreen(DL); DL = viFillScreen(DL); #endif - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); x = 0x96; y = 0xdc; - DL = write_text_at_abs_coord(DL, &x, &y, "1.\n", ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, "1.\n", ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - textstring = langGet((g_AppendCheatSinglePlayer != 0) ? TEXT(LTITLE, TITLE_STR_117) : TEXT(LTITLE, TITLE_STR_29)); + textstring = langGet((g_AppendCheatSinglePlayer != 0) ? getStringID(LTITLE, TITLE_STR_117_CHEATSELECTMISSION) : getStringID(LTITLE, TITLE_STR_29_SELECTMISSION)); textMeasure(&x2, &y2, textstring, ptrFontZurichBoldChars, ptrFontZurichBold, 0); @@ -2916,7 +3051,7 @@ Gfx* constructor_menu06_modesel(Gfx* DL) DL = microcode_constructor_related_to_menus(DL, 0x94, 0xDA, y2 + 0xAF, 0xEA, 0x32); } - DL = write_text_at_abs_coord(DL, &x, &y, textstring, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, textstring, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); x = 0x96; y = 0xFC; @@ -2928,9 +3063,9 @@ Gfx* constructor_menu06_modesel(Gfx* DL) { text_color = 0x70; } - DL = write_text_at_abs_coord(DL, &x, &y, "2.\n", ptrFontZurichBoldChars, ptrFontZurichBold, text_color, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, "2.\n", ptrFontZurichBoldChars, ptrFontZurichBold, text_color, viGetX(), viGetY(), 0, 0); - textstring = langGet((g_AppendCheatMultiPlayer != 0) ? TEXT(LTITLE, TITLE_STR_276) : TEXT(LTITLE, TITLE_STR_30)); + textstring = langGet((g_AppendCheatMultiPlayer != 0) ? getStringID(LTITLE, TITLE_STR_276_CHEATMULTIPLAYER) : getStringID(LTITLE, TITLE_STR_30_MULTIPLAYER)); textMeasure(&x2, &y2, textstring, ptrFontZurichBoldChars, ptrFontZurichBold, 0); @@ -2940,14 +3075,14 @@ Gfx* constructor_menu06_modesel(Gfx* DL) { DL = microcode_constructor_related_to_menus(DL, 0x94, 0xFA, y2 + 0xAF, 0x10A, 0x32); } - DL = write_text_at_abs_coord(DL, &x, &y, textstring, ptrFontZurichBoldChars, ptrFontZurichBold, text_color, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, textstring, ptrFontZurichBoldChars, ptrFontZurichBold, text_color, viGetX(), viGetY(), 0, 0); if (is_cheat_menu_available != 0) { x = 0x96; y = 0x11C; - DL = write_text_at_abs_coord(DL, &x, &y, "3.\n", ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - textstring = langGet(TEXT(LTITLE, TITLE_STR_31)); + DL = frontPrintText(DL, &x, &y, "3.\n", ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + textstring = langGet(getStringID(LTITLE, TITLE_STR_31_CHEATOPTIONS)); textMeasure(&x2, &y2, textstring, ptrFontZurichBoldChars, ptrFontZurichBold, 0); @@ -2957,11 +3092,11 @@ Gfx* constructor_menu06_modesel(Gfx* DL) { DL = microcode_constructor_related_to_menus(DL, 0x94, 0x11A, y2 + 0xAF, 0x12A, 0x32); } - DL = write_text_at_abs_coord(DL, &x, &y, textstring, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, textstring, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } - - DL = add_tab3_previous(DL); - DL = load_draw_selected_icon_folder_select(DL); + + DL = frontAddPreviousTabText(DL); + DL = frontDrawCursor(DL); return DL; } @@ -3038,14 +3173,14 @@ s32 get_highest_unlocked_difficulty_for_level(s32 arg0) //******************************************************************************************************** void init_menu07_missionselect(void) { - selected_stage = -1; - briefingpage = -1; - tab_next_selected = 0; - tab_prev_selected = 0; - if (maybe_is_in_menu != 0) + selected_stage = LEVELID_NONE; + briefingpage = BRIEFING_INVALID; + tab_next_selected = FALSE; + tab_prev_selected = FALSE; + if (maybe_is_in_menu) { musicTrack1Play(M_FOLDERS); - maybe_is_in_menu = 0; + maybe_is_in_menu = FALSE; } load_walletbond(); } @@ -3071,7 +3206,7 @@ void interface_menu07_missionsel(void) struct ModelRoData_DisplayList_CollisionRecord *temp_s4; ModelNode *mnode; s32 padding; - + viSetFovY(60.0f); viSetAspect(1.3333334f); viSetZRange(100.0f, 10000.0f); @@ -3083,7 +3218,7 @@ void interface_menu07_missionsel(void) tab_prev_highlight = 0; mission_difficulty_highlighted = -1; - if (isontab3() != 0) + if (frontCheckCursorOnPreviousTab() != 0) { tab_prev_highlight = 1; } @@ -3099,7 +3234,7 @@ void interface_menu07_missionsel(void) continue; } } - + break; } @@ -3126,7 +3261,7 @@ void interface_menu07_missionsel(void) break; } } - + if (var_s1 < 5) { break; @@ -3153,7 +3288,7 @@ void interface_menu07_missionsel(void) } } } - + mission_difficulty_highlighted = (var_s2 * 5) + var_s4; } @@ -3205,7 +3340,7 @@ void interface_menu07_missionsel(void) if (tab_prev_highlight != 0) { tab_prev_selected = 1; - + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } else if (mission_difficulty_highlighted >= 0) @@ -3213,19 +3348,19 @@ void interface_menu07_missionsel(void) briefingpage = pull_and_display_text_for_folder_a0(mission_difficulty_highlighted); selected_stage = mission_folder_setup_entries[briefingpage].stage_id; tab_next_selected = 1; - + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } } else if (joyGetButtonsPressedThisFrame(0, B_BUTTON) != 0) { tab_prev_selected = 1; - + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } - - menu_control_stick_tracking(); - + + frontUpdateControlStickPosition(); + if (tab_next_selected != 0) { frontChangeMenu(MENU_DIFFICULTY, 0); @@ -3238,7 +3373,7 @@ void interface_menu07_missionsel(void) else #endif { - set_cursor_pos_difficulty(get_highest_unlocked_difficulty_for_level(mission_folder_setup_entries[briefingpage].mission_num)); + set_cursor_pos_difficulty(get_highest_unlocked_difficulty_for_level(mission_folder_setup_entries[briefingpage].mission_num)); } } else if (tab_prev_selected != 0) @@ -3272,15 +3407,15 @@ Gfx *constructor_menu07_missionsel(Gfx *DL) s32 temp_v0_3; u8 *var_v0; s32 var_s3; - + DL = viSetFillColor(DL, 0, 0, 0); DL = viFillScreen(DL); gDPSetFogColor(DL++, 0xFF, 0xFF, 0xFF, 0xFF); - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); for (spD8 = 0; spD8 < 5; spD8++) - { + { var_s3 = spD8; for (i = 0; i < 4 ; i++, var_s3 += 5) @@ -3290,7 +3425,7 @@ Gfx *constructor_menu07_missionsel(Gfx *DL) if (get_highest_unlocked_difficulty_for_level(var_s3) >= 0) { var_s5 = 0x96969600; - + if (var_s3 == mission_difficulty_highlighted) { var_s5 = -0x100; @@ -3318,9 +3453,9 @@ Gfx *constructor_menu07_missionsel(Gfx *DL) } strcat(sp90, "\n"); - + spC4 = 0; - spC8 = 0; + spC8 = 0; textMeasure(&spC8, &spC4, sp90, ptrFontBankGothicChars, ptrFontBankGothic, 0); @@ -3339,8 +3474,8 @@ Gfx *constructor_menu07_missionsel(Gfx *DL) } } - DL = add_tab3_previous(DL); - DL = load_draw_selected_icon_folder_select(DL); + DL = frontAddPreviousTabText(DL); + DL = frontDrawCursor(DL); } @@ -3377,8 +3512,8 @@ void interface_menu08_difficulty(void) set_item_visibility_in_objinstance(walletinst[0], SW_CONFIDENTIAL, 1); tab_prev_highlight = FALSE; mission_difficulty_highlighted = DIFFICULTY_MULTI; - - if (isontab3()) + + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = TRUE; } @@ -3424,20 +3559,20 @@ void interface_menu08_difficulty(void) sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } - menu_control_stick_tracking(); + frontUpdateControlStickPosition(); if (tab_next_selected) { if (selected_difficulty == DIFFICULTY_007) { frontChangeMenu(MENU_007_OPTIONS, FALSE); - set_cursor_pos_tab2(); + frontSetCursorPositionToNextTab(); return; } frontChangeMenu(MENU_BRIEFING, FALSE); - set_cursor_pos_tab2(); + frontSetCursorPositionToNextTab(); return; } @@ -3459,33 +3594,33 @@ Gfx * print_current_solo_briefing_stage_name(Gfx *DL, char *text) if (selected_difficulty >= DIFFICULTY_AGENT) { strcpy(text, get_ptr_difficulty_name(selected_difficulty)); - strcat(text, langGet(TEXT(LTITLE, TITLE_STR_32))); + strcat(text, langGet(getStringID(LTITLE, TITLE_STR_32_JB))); x = 0x37; y = 0x57; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); } chapter = get_chapter_briefing_entry(briefingpage); if (chapter >=0 ) { - strcpy(text, langGet(TEXT(LTITLE, TITLE_STR_33))); + strcpy(text, langGet(getStringID(LTITLE, TITLE_STR_33_MISSION2))); strcat(text, mission_folder_setup_entries[chapter].string_ptr); strcat(text, ": "); strcat(text, langGet(mission_folder_setup_entries[chapter].folder_text_preset)); strcat(text, "\n"); x = 0x37; y = 0x67; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); } - strcpy(text, langGet(TEXT(LTITLE, TITLE_STR_34))); + strcpy(text, langGet(getStringID(LTITLE, TITLE_STR_34_PART))); strcat(text, mission_folder_setup_entries[briefingpage].string_ptr); strcat(text, ": "); strcat(text, langGet(mission_folder_setup_entries[briefingpage].folder_text_preset)); strcat(text, "\n"); x = 0x37; y = 0x77; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); return DL; } @@ -3520,7 +3655,7 @@ Gfx *constructor_menu08_difficulty(Gfx *DL) u8 *text_sp3172; s32 x; // sp3168 s32 y; // sp3164 (sp164 + 3000) - + // This should be a `u8 [3000]`, see notes below. struct MatchHack_front_rodata_3000 stagename_struct; @@ -3528,7 +3663,7 @@ Gfx *constructor_menu08_difficulty(Gfx *DL) s32 sp9C; // sp156 s32 sp98; // sp152 f32 xypos[2]; // sp144 - f32 halfedxy[2]; // sp136 + f32 halfedxy[2]; // sp136 struct sImageTableEntry *image; // sp ?? s32 i; @@ -3540,12 +3675,12 @@ Gfx *constructor_menu08_difficulty(Gfx *DL) DL = viFillScreen(DL); DL = viFillScreen(DL); #endif - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); #ifndef VERSION_EU /** * MatchHack notes: - * + * * There is a chunk of auto generated code that copies 3000 characters * into the `stagename` variable. These 3000 characters are .rodata. * It would make sense that this is an array initialization spot, @@ -3564,11 +3699,11 @@ Gfx *constructor_menu08_difficulty(Gfx *DL) DL = print_current_solo_briefing_stage_name(DL, &stagename_struct); // "DIFFICULTY:\n" - text_sp3180 = langGet(TEXT(LTITLE, TITLE_STR_35)); + text_sp3180 = langGet(getStringID(LTITLE, TITLE_STR_35_DIFFICULTY)); x = 0x37; y = 0x8F; - DL = write_text_at_abs_coord(DL, &x, &y, text_sp3180, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - + DL = frontPrintText(DL, &x, &y, text_sp3180, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + if (mission_difficulty_highlighted >= 0) { DL = microcode_constructor_related_to_menus( @@ -3593,16 +3728,16 @@ Gfx *constructor_menu08_difficulty(Gfx *DL) switch (i) { case 0: - text_sp160 = langGet(TEXT(LTITLE, TITLE_STR_265)); // "1.\n" + text_sp160 = langGet(getStringID(LTITLE, TITLE_STR_265_1DOT)); // "1.\n" break; case 1: - text_sp160 = langGet(TEXT(LTITLE, TITLE_STR_266)); // "2.\n" + text_sp160 = langGet(getStringID(LTITLE, TITLE_STR_266_2DOT)); // "2.\n" break; case 2: - text_sp160 = langGet(TEXT(LTITLE, TITLE_STR_267)); // "3.\n" + text_sp160 = langGet(getStringID(LTITLE, TITLE_STR_267_3DOT)); // "3.\n" break; case 3: - text_sp160 = langGet(TEXT(LTITLE, TITLE_STR_268)); // "4.\n" + text_sp160 = langGet(getStringID(LTITLE, TITLE_STR_268_4DOT)); // "4.\n" break; } } @@ -3616,31 +3751,31 @@ Gfx *constructor_menu08_difficulty(Gfx *DL) x = 0x82 - (j_text_trigger ? (sp9C - 0xA) : 0); y = (i * 0x1E) + 0xB4; - DL = write_text_at_abs_coord(DL, &x, &y, text_sp160, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - + DL = frontPrintText(DL, &x, &y, text_sp160, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + switch (i) { case 0: - text_sp160 = langGet(TEXT(LTITLE, TITLE_STR_36)); // "Agent\n" + text_sp160 = langGet(getStringID(LTITLE, TITLE_STR_36_AGENT2)); // "Agent\n" break; case 1: - text_sp160 = langGet(TEXT(LTITLE, TITLE_STR_37)); // "Secret Agent\n" + text_sp160 = langGet(getStringID(LTITLE, TITLE_STR_37_SECRETAGENT2)); // "Secret Agent\n" break; case 2: - text_sp160 = langGet(TEXT(LTITLE, TITLE_STR_38)); // "00 Agent\n" + text_sp160 = langGet(getStringID(LTITLE, TITLE_STR_38_00AGENT2)); // "00 Agent\n" break; case 3: - text_sp160 = langGet(TEXT(LTITLE, TITLE_STR_39)); // "007\n" + text_sp160 = langGet(getStringID(LTITLE, TITLE_STR_39_0072)); // "007\n" break; } x = 0x96; y = (i * 0x1E) + 0xB4; - DL = write_text_at_abs_coord(DL, &x, &y, text_sp160, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text_sp160, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } } - DL = add_tab3_previous(DL); + DL = frontAddPreviousTabText(DL); /** * Draw the checkmark for completed difficulties. @@ -3658,12 +3793,12 @@ Gfx *constructor_menu08_difficulty(Gfx *DL) halfedxy[0] = image->width * 0.5f; halfedxy[1] = image->height * 0.5f; - likely_generate_DL_for_image_declaration(&DL, image, 4, 0, 0); - display_image_at_on_screen_coord(&DL, &xypos, &halfedxy, image->width, image->height, 0, 0, 1, 0xB4, 0, 0, 0xFF, image->level > 0, 0); + texSelect(&DL, image, 4, 0, 0); + display_image_at_position(&DL, &xypos, &halfedxy, image->width, image->height, 0, 0, 1, 0xB4, 0, 0, 0xFF, image->level > 0, 0); } } - DL = load_draw_selected_icon_folder_select(DL); + DL = frontDrawCursor(DL); return DL; } @@ -3709,16 +3844,16 @@ void interface_menu09_007options(void) highlight_enemy_health = FALSE; highlight_enemy_accuracy = FALSE; highlight_enemy_damage = FALSE; - if (isontab3()) + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = TRUE; } - else if (isontab2()) + else if (frontCheckCursorOnNextTab()) { tab_next_highlight = TRUE; } - else if (isontab1()) + else if (frontCheckCursorOnStartTab()) { tab_start_highlight = TRUE; } @@ -3806,7 +3941,7 @@ void interface_menu09_007options(void) set_item_visibility_in_objinstance(walletinst[0], SW_PAPER, 1); set_item_visibility_in_objinstance(walletinst[0], SW_OHMSS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_CLASSIFIED, 1); - menu_control_stick_tracking(); + frontUpdateControlStickPosition(); if (tab_start_selected) { frontChangeMenu(MENU_RUN_STAGE, TRUE); @@ -3847,23 +3982,23 @@ Gfx *constructor_menu09_007options(Gfx *DL) DL = viFillScreen(DL); DL = viFillScreen(DL); #endif - DL = sub_GAME_7F00D5E8(DL); - + DL = frontSetupMenuBackground(DL); + #if !defined(VERSION_EU) sp54 = asc_D_80050074; #endif - + DL = microcode_constructor(DL); DL = print_current_solo_briefing_stage_name(DL, (char*)&sp54); - spC14 = langGet(TEXT(LTITLE, TITLE_STR_40)); - + spC14 = langGet(getStringID(LTITLE, TITLE_STR_40_SPECOPS)); + spC10 = 0x37; spC0C = 0x8f; - DL = write_text_at_abs_coord(DL, &spC10, &spC0C, (s8 *)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC10, &spC0C, (s8 *)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - spC14 = langGet(TEXT(LTITLE, TITLE_STR_42)); + spC14 = langGet(getStringID(LTITLE, TITLE_STR_42_HEALTH)); spC10 = 0x39; spC0C = 0xA4; @@ -3877,25 +4012,25 @@ Gfx *constructor_menu09_007options(Gfx *DL) DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C - 1, 0xC7, spC0C + 0xE, 0x32); } - DL = write_text_at_abs_coord(DL, &spC10, &spC0C, (s8 *)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC10, &spC0C, (s8 *)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf((char*)&sp54, "%d%%\n", (s32) (slider_007_mode_health * 100.0f)); sp4C = 0; sp50 = 0; - + textMeasure(&sp50, &sp4C, (char*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0); spC10 = 0x11D - sp4C; spC0C = 0xA4; - - DL = write_text_at_abs_coord(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - spC14 = langGet(TEXT(LTITLE, TITLE_STR_43)); + DL = frontPrintText(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + + spC14 = langGet(getStringID(LTITLE, TITLE_STR_43_DAMAGE)); spC10 = 0x39; spC0C = 0xC5; - + DL = microcode_constructor_related_to_menus(DL, 0x37, 0xD6, 0x163, 0xE1, 0x32); val = (sqrtf(slider_007_mode_accuracy / 10.0f)) * 300.0f; DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C + 0x11, val + 0x37, spC0C + 0x1c, 0x64); @@ -3905,25 +4040,25 @@ Gfx *constructor_menu09_007options(Gfx *DL) DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C - 1, 0xC7, spC0C + 0xE, 0x32); } - DL = write_text_at_abs_coord(DL, &spC10, &spC0C, (s8*)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC10, &spC0C, (s8*)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf((char*)&sp54, "%d%%\n", (s32) (slider_007_mode_accuracy * 100.0f)); sp4C = 0; sp50 = 0; - + textMeasure(&sp50, &sp4C, (char*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - + spC10 = 0x11D - sp4C; spC0C = 0xC5; - DL = write_text_at_abs_coord(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - spC14 = langGet(TEXT(LTITLE, TITLE_STR_44)); + spC14 = langGet(getStringID(LTITLE, TITLE_STR_44_ACCURACY)); spC10 = 0x39; spC0C = 0xE6; - + DL = microcode_constructor_related_to_menus(DL, 0x37, 0xF7, 0x163, 0x102, 0x32); val = (sqrtf(slider_007_mode_damage / 10.0f)) * 300.0f; DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C + 0x11, val + 0x37, spC0C + 0x1c, 0x64); @@ -3933,25 +4068,25 @@ Gfx *constructor_menu09_007options(Gfx *DL) DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C - 1, 0xC7, spC0C + 0xE, 0x32); } - DL = write_text_at_abs_coord(DL, &spC10, &spC0C, (s8*)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC10, &spC0C, (s8*)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf((char*)&sp54, "%d%%\n", (s32) (slider_007_mode_damage * 10.0f)); sp4C = 0; sp50 = 0; - + textMeasure(&sp50, &sp4C, (char*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - + spC10 = 0x11D - sp4C; spC0C = 0xE6; - DL = write_text_at_abs_coord(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - spC14 = langGet(TEXT(LTITLE, TITLE_STR_41)); + spC14 = langGet(getStringID(LTITLE, TITLE_STR_41_REACTION)); spC10 = 0x39; spC0C = 0x107; - + DL = microcode_constructor_related_to_menus(DL, 0x37, 0x118, 0x163, 0x123, 0x32); DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C + 0x11, (s32) (slider_007_mode_reaction * 300.0f * 1) + 0x37, spC0C + 0x1c, 0x64); @@ -3960,25 +4095,25 @@ Gfx *constructor_menu09_007options(Gfx *DL) DL = microcode_constructor_related_to_menus(DL, 0x37, spC0C - 1, 0xC7, spC0C + 0xE, 0x32); } - DL = write_text_at_abs_coord(DL, &spC10, &spC0C, (s8*)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC10, &spC0C, (s8*)spC14, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf((char*)&sp54, "%d%%\n", (s32) (slider_007_mode_reaction * 100.0f)); sp4C = 0; sp50 = 0; - + textMeasure(&sp50, &sp4C, (char*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - + spC10 = 0x11D - sp4C; spC0C = 0x107; - DL = write_text_at_abs_coord(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC10, &spC0C, (s8*)&sp54, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + + DL = frontAddStartTabText(DL); + DL = frontAddPreviousTabText(DL); + DL = frontAddNextTabText(DL); + DL = frontDrawCursor(DL); - DL = add_tab1_start(DL); - DL = add_tab3_previous(DL); - DL = add_tab2_next(DL); - DL = load_draw_selected_icon_folder_select(DL); - return DL; } @@ -4186,7 +4321,7 @@ void init_mp_options_for_scenario(s32 numplayers) { numplayers = 2; } - + selected_num_players = numplayers; for (i=0; i < selected_num_players; i++) @@ -4196,19 +4331,19 @@ void init_mp_options_for_scenario(s32 numplayers) player_char[i] = i; player_handicap[i] = 5; } - + if ((numplayers >= 3) && (controlstyle_player[i] >= CONTROLLER_CONFIG_PLENTY)) { controlstyle_player[i] = CONTROLLER_CONFIG_HONEY; } } - + if ((mp_player_counts[scenario].max < selected_num_players) || (selected_num_players < mp_player_counts[scenario].min)) { reset_mp_options_for_scenario(SCENARIO_NORMAL); - + } - + if (multi_stage_setups[MP_stage_selected].max_player < selected_num_players) { MP_stage_selected = MP_STAGE_TEMPLE; @@ -4283,23 +4418,23 @@ void interface_menu0E_mpoptions(void) s32 sp24 = 0; s32 sp20 = 0; s32 sp1C = 0; - + viSetFovY(FOV_Y_F); viSetAspect(ASPECT_RATIO_SD); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); - + if (joyGetControllerCount() < 2) { frontChangeMenu(MENU_MODE_SELECT, 0); setCursorPOSforMode(gamemode); } - + if (joyGetControllerCount() < selected_num_players) { init_mp_options_for_scenario(joyGetControllerCount()); } - + if (joyGetButtons(PLAYER_1, Z_TRIG|A_BUTTON) == 0) { tab_prev_highlight = 0; @@ -4314,12 +4449,12 @@ void interface_menu0E_mpoptions(void) highlight_health = 0; highlight_controlstyle = 0; highlight_aimadjustment = 0; - - if (isontab3()) + + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = 1; } - else if (isontab1()) + else if (frontCheckCursorOnStartTab()) { tab_start_highlight = 1; } @@ -4376,7 +4511,7 @@ void interface_menu0E_mpoptions(void) { tab_prev_selected = 1; } - + if (tab_start_highlight) { tab_start_selected = 1; @@ -4417,7 +4552,7 @@ void interface_menu0E_mpoptions(void) { sp1C = 1; } - + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } else if (joyGetButtonsPressedThisFrame(PLAYER_1, B_BUTTON)) @@ -4431,8 +4566,8 @@ void interface_menu0E_mpoptions(void) set_item_visibility_in_objinstance(walletinst[0], SW_PAPER, 1); set_item_visibility_in_objinstance(walletinst[0], SW_OHMSS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_CONFIDENTIAL2, 1); - menu_control_stick_tracking(); - + frontUpdateControlStickPosition(); + if (tab_prev_selected) { frontChangeMenu(MENU_MODE_SELECT, 0); @@ -4455,10 +4590,10 @@ void interface_menu0E_mpoptions(void) { selected_stage = multi_stage_setups[MP_stage_selected].stage_id; } - + briefingpage = -1; frontChangeMenu(MENU_RUN_STAGE, 1); - + return; } @@ -4474,9 +4609,9 @@ void interface_menu0E_mpoptions(void) { temp_v1 = selected_num_players + 1; } - + init_mp_options_for_scenario(temp_v1); - + return; } if (sp38) @@ -4541,32 +4676,32 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) DL = viFillScreen(DL); DL = viFillScreen(DL); #endif - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); - text = langGet(TEXT(LTITLE, TITLE_STR_76)); + text = langGet(getStringID(LTITLE, TITLE_STR_76_MPOPTIONS)); x = 0x37; y = 0x5f; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_77)); + text = langGet(getStringID(LTITLE, TITLE_STR_77_PLAYERS)); textMeasure(&iStack24,&iStack28,text,ptrFontZurichBoldChars,ptrFontZurichBold,0); x = 0x39; y = 0x79; if (highlight_players) { DL = microcode_constructor_related_to_menus(DL,0x37,0x78,iStack28 + 0x3c,0x87,0x32); } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,0xff,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,0xff,viGetX(),viGetY(),0,0); - text = langGet(TEXT(LTITLE, TITLE_STR_78)); + text = langGet(getStringID(LTITLE, TITLE_STR_78_SCENARIO)); textMeasure(&iStack24,&iStack28,text,ptrFontZurichBoldChars,ptrFontZurichBold,0); x = 0x39; y = 0x8d; if (highlight_scenario) { DL = microcode_constructor_related_to_menus(DL,0x37,0x8c,iStack28 + 0x3c,0x9b,0x32); } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,0xff,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,0xff,viGetX(),viGetY(),0,0); - text = langGet(TEXT(LTITLE, TITLE_STR_79)); + text = langGet(getStringID(LTITLE, TITLE_STR_79_LEVEL)); textMeasure(&iStack24,&iStack28,text,ptrFontZurichBoldChars,ptrFontZurichBold,0); x = 0x39; y = 0xa1; @@ -4579,9 +4714,9 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); - text = langGet(TEXT(LTITLE, TITLE_STR_80)); + text = langGet(getStringID(LTITLE, TITLE_STR_80_GAMELENGTH)); textMeasure(&iStack24,&iStack28,text,ptrFontZurichBoldChars,ptrFontZurichBold,0); x = 0x39; y = 0xb5; @@ -4594,9 +4729,9 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); - text = langGet(TEXT(LTITLE, TITLE_STR_81)); + text = langGet(getStringID(LTITLE, TITLE_STR_81_WEAPONS)); textMeasure(&iStack24,&iStack28,text,ptrFontZurichBoldChars,ptrFontZurichBold,0); x = 0x39; y = 0xc9; @@ -4609,9 +4744,9 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); - text = langGet(TEXT(LTITLE, TITLE_STR_82)); + text = langGet(getStringID(LTITLE, TITLE_STR_82_CHARACTER)); textMeasure(&iStack24,&iStack28,text,ptrFontZurichBoldChars,ptrFontZurichBold,0); x = 0x39; y = 0xdd; @@ -4624,9 +4759,9 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); - text = langGet(TEXT(LTITLE, TITLE_STR_83)); + text = langGet(getStringID(LTITLE, TITLE_STR_83_HEALTH)); textMeasure(&iStack24,&iStack28,text,ptrFontZurichBoldChars,ptrFontZurichBold,0); x = 0x39; y = 0xf1; @@ -4639,9 +4774,9 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); - text = langGet(0x9d1e); + text = langGet(getStringID(LTITLE, TITLE_STR_286_CONTROLSTYLE)); textMeasure(&iStack24,&iStack28,text,ptrFontZurichBoldChars,ptrFontZurichBold,0); x = 0x39; y = 0x105; @@ -4654,9 +4789,9 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); - text = langGet(TEXT(LTITLE, TITLE_STR_84)); + text = langGet(getStringID(LTITLE, TITLE_STR_84_AIM)); textMeasure(&iStack24,&iStack28,text,ptrFontZurichBoldChars,ptrFontZurichBold,0); x = 0x39; y = 0x119; @@ -4669,17 +4804,17 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); sprintf(acStack12,"%d",selected_num_players); x = 0xa0; y = 0x79; - DL = write_text_at_abs_coord(DL, &x, &y, acStack12, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, acStack12, ptrFontZurichBoldChars, ptrFontZurichBold, 0xff, viGetX(), viGetY(), 0, 0); text = langGet(mp_player_counts[scenario].stage); x = 0xa0; y = 0x8d; - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,0xff,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,0xff,viGetX(),viGetY(),0,0); text = langGet(multi_stage_setups[MP_stage_selected].folder_text_preset); x = 0xa0; @@ -4690,7 +4825,7 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); text = langGet(multi_game_lengths[game_length].text_preset); x = 0xa0; @@ -4701,7 +4836,7 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); text = langGet(*(getPtrMPWeaponSetTextID())); @@ -4713,7 +4848,7 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); text = langGet(mp_sight_adjust_table[aim_sight_adjustment].anonymous_0); x = 0xa0; @@ -4724,10 +4859,10 @@ Gfx * constructor_menu0E_mpoptions(Gfx *DL) else { entry = 0x70; } - DL = write_text_at_abs_coord(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); - DL = add_tab3_previous(DL); - DL = add_tab1_start(DL); - DL = load_draw_selected_icon_folder_select(DL); + DL = frontPrintText(DL,&x,&y,text,ptrFontZurichBoldChars,ptrFontZurichBold,entry,viGetX(),viGetY(),0,0); + DL = frontAddPreviousTabText(DL); + DL = frontAddStartTabText(DL); + DL = frontDrawCursor(DL); return DL; } @@ -4754,7 +4889,7 @@ bool get_players_who_have_selected_mp_char(s32 character) void init_menu0f_mpcharsel(void) { s32 i; - + tab_start_selected = 0; tab_next_selected = 0; tab_prev_selected = 0; @@ -4792,7 +4927,7 @@ void init_menu0f_mpcharsel(void) texLoadFromTextureNum(mpcharselimages[selected_photo * 4 + 3].index, 0); } } - + if (num_chars_selectable_mp != 0x40) { if (fileIsStageUnlockedAtDifficulty(selected_folder_num, SP_LEVEL_CRADLE, DIFFICULTY_AGENT) == STAGESTATUS_COMPLETED) @@ -4858,7 +4993,7 @@ void interface_menu0F_mpcharsel(void) s32 padding2; s32 i; s32 temp_v1_3; - + numplayers = get_selected_num_players(); ready_players = 0; viSetFovY(60.0f); @@ -4892,7 +5027,7 @@ void interface_menu0F_mpcharsel(void) { if (mp_char_cur_select_player[i] > 0) { - mp_char_cur_select_player[i]--; + mp_char_cur_select_player[i]--; } } else if (joyGetButtonsPressedThisFrame(i, R_JPAD|R_CBUTTONS)) // 0x101 @@ -4909,7 +5044,7 @@ void interface_menu0F_mpcharsel(void) player_char[i] = mp_char_cur_select_player[i]; size_mp_select_image_player[i] = 1; player_has_selected_char[i] = 1; - + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } } @@ -4927,7 +5062,7 @@ void interface_menu0F_mpcharsel(void) { if (mp_char_cur_select_player[i] > 0) { - mp_char_cur_select_player[i]--; + mp_char_cur_select_player[i]--; } } } @@ -4962,8 +5097,8 @@ void interface_menu0F_mpcharsel(void) disable_all_switches(walletinst[0]); set_item_visibility_in_objinstance(walletinst[0], SW_TABS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_BLANK, 1); - menu_control_stick_tracking(); - + frontUpdateControlStickPosition(); + if (ready_players == numplayers) { frontChangeMenu(MENU_MP_OPTIONS, 0); @@ -4972,7 +5107,7 @@ void interface_menu0F_mpcharsel(void) -s32 sub_GAME_7F0122A8(s32 arg0, s32 arg1, s32 arg2) +s32 frontCalculateCharacterImageAlpha(s32 arg0, s32 arg1, s32 arg2) { if ((arg1 >= arg0) || (arg0 >= arg2)) { @@ -4994,7 +5129,7 @@ s32 sub_GAME_7F0122A8(s32 arg0, s32 arg1, s32 arg2) // Address 0x7F01231C NTSC -Gfx *sub_GAME_7F01231C(Gfx *DL, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6) +Gfx *frontRenderCharacterPortrait(Gfx *DL, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6) { Mtx* spD4; Mtx* spD0; @@ -5012,12 +5147,12 @@ Gfx *sub_GAME_7F01231C(Gfx *DL, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5 struct sImageTableEntry *simage; s32 j; s32 i; - + spD4 = dynAllocateMatrix(); spD0 = dynAllocateMatrix(); spCC = dynAllocate7F0BD6C4(16); DL = microcode_constructor(DL); - + guOrtho(spD4, 0.0f, 440.0f, 0.0f, 330.0f, 1.0f, 10.0f, 1.0f); guRotate(spD0, 3.1415927f, 1.0f, 0.0f, 0.0f); @@ -5028,7 +5163,7 @@ Gfx *sub_GAME_7F01231C(Gfx *DL, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5 sp58 = arg6 + 0x23; sp54 = 0x14A - arg4; sp50 = arg6 + 0x2a; - + for (j = 0; j < 4; j++) { var_s3 = (j >= 2) ? j - 1 : j; @@ -5069,10 +5204,10 @@ Gfx *sub_GAME_7F01231C(Gfx *DL, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5 spCC[vtx_index].r = var_v0; spCC[vtx_index].g = var_v0; spCC[vtx_index].b = var_v0; - + if (arg6 == 0) { - spCC[vtx_index].a = sub_GAME_7F0122A8(spCC[vtx_index].coord.AsArray[0], arg1, arg2); + spCC[vtx_index].a = frontCalculateCharacterImageAlpha(spCC[vtx_index].coord.AsArray[0], arg1, arg2); } else { @@ -5082,33 +5217,33 @@ Gfx *sub_GAME_7F01231C(Gfx *DL, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5 vtx_index++; } } - + gSPMatrix(DL++, OS_PHYSICAL_TO_K0(spD4), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION); gSPMatrix(DL++, OS_PHYSICAL_TO_K0(spD0), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - + gSPVertex(DL++, spCC, 16, 0); selected_photo = mp_chr_setup[arg5].select_photo * 4; simage = &mpcharselimages[mp_chr_setup[arg5].select_photo * 4]; - likely_generate_DL_for_image_declaration(&DL, simage + 2, 2, 0, 2); + texSelect(&DL, simage + 2, 2, 0, 2); gSP1Triangle(DL++, 0, 1, 4, 0); gSP1Triangle(DL++, 4, 1, 5, 0); selected_photo = mp_chr_setup[arg5].select_photo * 4; simage = &mpcharselimages[mp_chr_setup[arg5].select_photo * 4]; - likely_generate_DL_for_image_declaration(&DL, simage + 3, 2, 0, 2); + texSelect(&DL, simage + 3, 2, 0, 2); gSP1Triangle(DL++, 2, 3, 6, 0); gSP1Triangle(DL++, 6, 3, 7, 0); selected_photo = mp_chr_setup[arg5].select_photo * 4; simage = &mpcharselimages[mp_chr_setup[arg5].select_photo * 4]; - likely_generate_DL_for_image_declaration(&DL, simage + 0, 2, 0, 2); + texSelect(&DL, simage + 0, 2, 0, 2); gSP1Triangle(DL++, 8, 9, 12, 0); gSP1Triangle(DL++, 12, 9, 13, 0); selected_photo = mp_chr_setup[arg5].select_photo * 4; simage = &mpcharselimages[mp_chr_setup[arg5].select_photo * 4]; - likely_generate_DL_for_image_declaration(&DL, simage + 1, 2, 0, 2); + texSelect(&DL, simage + 1, 2, 0, 2); gSP1Triangle(DL++, 10, 11, 14, 0); gSP1Triangle(DL++, 14, 11, 15, 0); @@ -5147,7 +5282,7 @@ Gfx * constructor_menu0F_mpcharsel(Gfx *DL) DL = viSetFillColor(DL, 0, 0, 0); DL = viFillScreen(DL); - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); DL = microcode_constructor_related_to_menus(DL, 0x26, 0xA9, 0x184, 0xAB, 0x90); @@ -5162,7 +5297,7 @@ Gfx * constructor_menu0F_mpcharsel(Gfx *DL) { var_s2 = 0x26; var_s4 = 0x15E; - + if (i > 0) { var_v1 = 0x8c; @@ -5199,18 +5334,18 @@ Gfx * constructor_menu0F_mpcharsel(Gfx *DL) } gDPSetScissor(DL++, G_SC_NON_INTERLACE, (var_s2 + 6), var_s7 + 5, (var_s2 + var_s4 - 6), (var_s7 + 0x87)); - + if ((player_has_selected_char[i] == 0) && (size_mp_select_image_player[i] == 0)) { - + text = langGet(0x9C55U); textMeasure(&spBC, &spB8, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); spB4 = ((var_s4 >> 1) + var_s2) - (spB8 >> 1); spB0 = var_s7 + 5; - + DL = microcode_constructor(DL); - DL = write_text_at_abs_coord(DL, &spB4, &spB0, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spB4, &spB0, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } text = langGet(mp_chr_setup[mp_char_cur_select_player[i]].text_preset); @@ -5220,39 +5355,39 @@ Gfx * constructor_menu0F_mpcharsel(Gfx *DL) sp9C = var_s7 + 0x78; DL = microcode_constructor(DL); - DL = write_text_at_abs_coord(DL, &spA0, &sp9C, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - DL = sub_GAME_7F01231C(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, (var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i], var_s7 + 0x46, mp_char_prev_select_player[i], size_mp_select_image_player[i]); + DL = frontPrintText(DL, &spA0, &sp9C, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, (var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i], var_s7 + 0x46, mp_char_prev_select_player[i], size_mp_select_image_player[i]); if ((player_has_selected_char[i] == 0 && size_mp_select_image_player[i] == 0) || (mp_char_prev_select_player[i] != mp_char_cur_select_player[i])) { if (mp_char_prev_select_player[i] >= 3) { - DL = sub_GAME_7F01231C(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) - 0xFC, var_s7 + 0x46, mp_char_prev_select_player[i] - 3, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) - 0xFC, var_s7 + 0x46, mp_char_prev_select_player[i] - 3, size_mp_select_image_player[i]); } - + if (mp_char_prev_select_player[i] >= 2) { - DL = sub_GAME_7F01231C(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) - 0xA8, var_s7 + 0x46, mp_char_prev_select_player[i] - 2, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) - 0xA8, var_s7 + 0x46, mp_char_prev_select_player[i] - 2, size_mp_select_image_player[i]); } - + if (mp_char_prev_select_player[i] >= 1) { - DL = sub_GAME_7F01231C(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) - 0x54, var_s7 + 0x46, mp_char_prev_select_player[i] - 1, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) - 0x54, var_s7 + 0x46, mp_char_prev_select_player[i] - 1, size_mp_select_image_player[i]); } if (mp_char_prev_select_player[i] < num_chars_selectable_mp - 1) { - DL = sub_GAME_7F01231C(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) + 0x54, var_s7 + 0x46, mp_char_prev_select_player[i] + 1, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) + 0x54, var_s7 + 0x46, mp_char_prev_select_player[i] + 1, size_mp_select_image_player[i]); } - + if (mp_char_prev_select_player[i] < num_chars_selectable_mp - 2) { - DL = sub_GAME_7F01231C(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) + 0xA8, var_s7 + 0x46, mp_char_prev_select_player[i] + 2, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) + 0xA8, var_s7 + 0x46, mp_char_prev_select_player[i] + 2, size_mp_select_image_player[i]); } - + if (mp_char_prev_select_player[i] < num_chars_selectable_mp - 3) { - DL = sub_GAME_7F01231C(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) + 0xFC, var_s7 + 0x46, mp_char_prev_select_player[i] + 3, size_mp_select_image_player[i]); + DL = frontRenderCharacterPortrait(DL, var_s2 + 0xD, var_s2 + var_s4 - 0xE, ((var_s4 >> 1) + var_s2 - dword_CODE_bss_80069730[i]) + 0xFC, var_s7 + 0x46, mp_char_prev_select_player[i] + 3, size_mp_select_image_player[i]); } } } @@ -5287,7 +5422,7 @@ glabel constructor_menu0F_mpcharsel /* 047310 7F0127E0 00003825 */ move $a3, $zero /* 047314 7F0127E4 0C000FBE */ jal viFillScreen /* 047318 7F0127E8 00402025 */ move $a0, $v0 -/* 04731C 7F0127EC 0FC0357A */ jal sub_GAME_7F00D5E8 +/* 04731C 7F0127EC 0FC0357A */ jal frontSetupMenuBackground /* 047320 7F0127F0 00402025 */ move $a0, $v0 /* 047324 7F0127F4 0FC2B366 */ jal microcode_constructor /* 047328 7F0127F8 00402025 */ move $a0, $v0 @@ -5461,7 +5596,7 @@ glabel constructor_menu0F_mpcharsel /* 0475A4 7F012A74 AFA00024 */ sw $zero, 0x24($sp) /* 0475A8 7F012A78 AFA00028 */ sw $zero, 0x28($sp) /* 0475AC 7F012A7C AFAC0014 */ sw $t4, 0x14($sp) -/* 0475B0 7F012A80 0FC025D8 */ jal write_text_at_abs_coord +/* 0475B0 7F012A80 0FC025D8 */ jal frontPrintText /* 0475B4 7F012A84 AFAB0010 */ sw $t3, 0x10($sp) /* 0475B8 7F012A88 00408825 */ move $s1, $v0 /* 0475BC 7F012A8C 8FAE0080 */ lw $t6, 0x80($sp) @@ -5516,7 +5651,7 @@ glabel constructor_menu0F_mpcharsel /* 04767C 7F012B4C AFA00024 */ sw $zero, 0x24($sp) /* 047680 7F012B50 AFA00028 */ sw $zero, 0x28($sp) /* 047684 7F012B54 AFAF0014 */ sw $t7, 0x14($sp) -/* 047688 7F012B58 0FC025D8 */ jal write_text_at_abs_coord +/* 047688 7F012B58 0FC025D8 */ jal frontPrintText /* 04768C 7F012B5C AFAA0010 */ sw $t2, 0x10($sp) /* 047690 7F012B60 8FB90074 */ lw $t9, 0x74($sp) /* 047694 7F012B64 8FAB0070 */ lw $t3, 0x70($sp) @@ -5533,7 +5668,7 @@ glabel constructor_menu0F_mpcharsel /* 0476C0 7F012B90 00402025 */ move $a0, $v0 /* 0476C4 7F012B94 02C93823 */ subu $a3, $s6, $t1 /* 0476C8 7F012B98 AFAD0018 */ sw $t5, 0x18($sp) -/* 0476CC 7F012B9C 0FC048C7 */ jal sub_GAME_7F01231C +/* 0476CC 7F012B9C 0FC048C7 */ jal frontRenderCharacterPortrait /* 0476D0 7F012BA0 AFAC0014 */ sw $t4, 0x14($sp) /* 0476D4 7F012BA4 8FAE0088 */ lw $t6, 0x88($sp) /* 0476D8 7F012BA8 00408825 */ move $s1, $v0 @@ -5566,7 +5701,7 @@ glabel constructor_menu0F_mpcharsel /* 04773C 7F012C0C 02CE3823 */ subu $a3, $s6, $t6 /* 047740 7F012C10 24E7FF04 */ addiu $a3, $a3, -0xfc /* 047744 7F012C14 AFB50010 */ sw $s5, 0x10($sp) -/* 047748 7F012C18 0FC048C7 */ jal sub_GAME_7F01231C +/* 047748 7F012C18 0FC048C7 */ jal frontRenderCharacterPortrait /* 04774C 7F012C1C AFAF0018 */ sw $t7, 0x18($sp) /* 047750 7F012C20 8FB80070 */ lw $t8, 0x70($sp) /* 047754 7F012C24 00408825 */ move $s1, $v0 @@ -5585,7 +5720,7 @@ glabel constructor_menu0F_mpcharsel /* 047784 7F012C54 24E7FF58 */ addiu $a3, $a3, -0xa8 /* 047788 7F012C58 02602825 */ move $a1, $s3 /* 04778C 7F012C5C 02803025 */ move $a2, $s4 -/* 047790 7F012C60 0FC048C7 */ jal sub_GAME_7F01231C +/* 047790 7F012C60 0FC048C7 */ jal frontRenderCharacterPortrait /* 047794 7F012C64 AFAC0018 */ sw $t4, 0x18($sp) /* 047798 7F012C68 8FAD0070 */ lw $t5, 0x70($sp) /* 04779C 7F012C6C 00408825 */ move $s1, $v0 @@ -5603,7 +5738,7 @@ glabel constructor_menu0F_mpcharsel /* 0477C8 7F012C98 24E7FFAC */ addiu $a3, $a3, -0x54 /* 0477CC 7F012C9C 02602825 */ move $a1, $s3 /* 0477D0 7F012CA0 02803025 */ move $a2, $s4 -/* 0477D4 7F012CA4 0FC048C7 */ jal sub_GAME_7F01231C +/* 0477D4 7F012CA4 0FC048C7 */ jal frontRenderCharacterPortrait /* 0477D8 7F012CA8 AFB80018 */ sw $t8, 0x18($sp) /* 0477DC 7F012CAC 8FA90070 */ lw $t1, 0x70($sp) /* 0477E0 7F012CB0 00408825 */ move $s1, $v0 @@ -5625,7 +5760,7 @@ glabel constructor_menu0F_mpcharsel /* 04781C 7F012CEC AFB50010 */ sw $s5, 0x10($sp) /* 047820 7F012CF0 02CC3823 */ subu $a3, $s6, $t4 /* 047824 7F012CF4 24E70054 */ addiu $a3, $a3, 0x54 -/* 047828 7F012CF8 0FC048C7 */ jal sub_GAME_7F01231C +/* 047828 7F012CF8 0FC048C7 */ jal frontRenderCharacterPortrait /* 04782C 7F012CFC AFAE0018 */ sw $t6, 0x18($sp) /* 047830 7F012D00 8FAA0070 */ lw $t2, 0x70($sp) /* 047834 7F012D04 3C038003 */ lui $v1, %hi(num_chars_selectable_mp) @@ -5647,7 +5782,7 @@ glabel constructor_menu0F_mpcharsel /* 047870 7F012D40 24E700A8 */ addiu $a3, $a3, 0xa8 /* 047874 7F012D44 02602825 */ move $a1, $s3 /* 047878 7F012D48 02803025 */ move $a2, $s4 -/* 04787C 7F012D4C 0FC048C7 */ jal sub_GAME_7F01231C +/* 04787C 7F012D4C 0FC048C7 */ jal frontRenderCharacterPortrait /* 047880 7F012D50 AFAB0018 */ sw $t3, 0x18($sp) /* 047884 7F012D54 8FAC0070 */ lw $t4, 0x70($sp) /* 047888 7F012D58 3C038003 */ lui $v1, %hi(num_chars_selectable_mp) @@ -5669,7 +5804,7 @@ glabel constructor_menu0F_mpcharsel /* 0478C4 7F012D94 24E700FC */ addiu $a3, $a3, 0xfc /* 0478C8 7F012D98 02602825 */ move $a1, $s3 /* 0478CC 7F012D9C 02803025 */ move $a2, $s4 -/* 0478D0 7F012DA0 0FC048C7 */ jal sub_GAME_7F01231C +/* 0478D0 7F012DA0 0FC048C7 */ jal frontRenderCharacterPortrait /* 0478D4 7F012DA4 AFB80018 */ sw $t8, 0x18($sp) /* 0478D8 7F012DA8 00408825 */ move $s1, $v0 .L7F012DAC: @@ -5804,8 +5939,8 @@ void interface_menu10_mphandicap(void) disable_all_switches(walletinst[0]); set_item_visibility_in_objinstance(walletinst[0], SW_TABS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_BLANK, 1); - menu_control_stick_tracking(); - + frontUpdateControlStickPosition(); + if (var_fp == sp44) { frontChangeMenu(MENU_MP_OPTIONS, 0); @@ -5842,7 +5977,7 @@ Gfx * constructor_menu10_mphandicap(Gfx *DL) DL = viSetFillColor(DL, 0, 0, 0); DL = viFillScreen(DL); - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); DL = microcode_constructor_related_to_menus(DL, 0x26, 0xA9, 0x184, 0xAB, 0x90); @@ -5878,17 +6013,17 @@ Gfx * constructor_menu10_mphandicap(Gfx *DL) padding2 = ((var_s5 >> 1) + var_s3); padding5 = var_s2 + 0x46; - + if (player_has_selected_char[i] == 0) { - text = langGet(0x9C56U); + text = langGet(getStringID(LTITLE, TITLE_STR_86_SELECTHANDICAP)); textMeasure(&spA4, &spA0, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); sp9C = padding2 - (spA0 >> 1); sp98 = padding5 - (spA4 >> 1) - 0xf; - + DL = microcode_constructor(DL); - DL = write_text_at_abs_coord(DL, &sp9C, &sp98, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp9C, &sp98, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } { @@ -5896,9 +6031,9 @@ Gfx * constructor_menu10_mphandicap(Gfx *DL) textMeasure(&sp90, &sp8C, text2, ptrFontZurichBoldChars, ptrFontZurichBold, 0); sp88 = padding2 - (sp8C >> 1); sp84 = padding5 - (sp90 >> 1) + 0xf; - + DL = microcode_constructor(DL); - DL = write_text_at_abs_coord(DL, &sp88, &sp84, (s8*)text2, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp88, &sp84, (s8*)text2, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } } @@ -5954,17 +6089,15 @@ void interface_menu11_mpcontrols(void) viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); -#if defined(VERSION_JP) || defined(VERSION_EU) +#if defined(BUGFIX_R1) #define MAYBE_OR_JOYCOUNT_NOT_4 || joyGetControllerCount() != 4 #define MAYBE_AND_JOYCOUNT_4 && joyGetControllerCount() == 4 -#endif - -#if defined(VERSION_US) +#else #define MAYBE_OR_JOYCOUNT_NOT_4 #define MAYBE_AND_JOYCOUNT_4 #endif - + for (i = 0; i < sp44; i++) { if (player_has_selected_char[i] && joyGetButtonsPressedThisFrame(i, B_BUTTON)) @@ -6034,7 +6167,7 @@ void interface_menu11_mpcontrols(void) { controlstyle_player[PLAYER_1] = CONTROLLER_CONFIG_HONEY; } - + if (controlstyle_player[PLAYER_2] >= CONTROLLER_CONFIG_PLENTY) { controlstyle_player[PLAYER_2] = CONTROLLER_CONFIG_HONEY; @@ -6061,8 +6194,8 @@ void interface_menu11_mpcontrols(void) disable_all_switches(walletinst[0]); set_item_visibility_in_objinstance(walletinst[0], SW_TABS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_BLANK, 1); - menu_control_stick_tracking(); - + frontUpdateControlStickPosition(); + if (var_fp == sp44) { frontChangeMenu(MENU_MP_OPTIONS, 0); @@ -6102,7 +6235,7 @@ Gfx * constructor_menu11_mpcontrol(Gfx *DL) DL = viSetFillColor(DL, 0, 0, 0); DL = viFillScreen(DL); - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); DL = microcode_constructor_related_to_menus(DL, 0x26, 0xA9, 0x184, 0xAB, 0x90); @@ -6138,17 +6271,17 @@ Gfx * constructor_menu11_mpcontrol(Gfx *DL) padding2 = ((var_s5 >> 1) + var_s3); padding5 = var_s2 + 0x46; - + if (player_has_selected_char[i] == 0) { - text = langGet(0x9D1DU); + text = langGet(getStringID(LTITLE, TITLE_STR_285_SELECTCONTROLSTYLE)); textMeasure(&spA4, &spA0, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); sp9C = padding2 - (spA0 >> 1); sp98 = padding5 - (spA4 >> 1) - 0xf; - + DL = microcode_constructor(DL); - DL = write_text_at_abs_coord(DL, &sp9C, &sp98, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp9C, &sp98, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } { @@ -6156,9 +6289,9 @@ Gfx * constructor_menu11_mpcontrol(Gfx *DL) textMeasure(&sp90, &sp8C, text2, ptrFontZurichBoldChars, ptrFontZurichBold, 0); sp88 = padding2 - (sp8C >> 1); sp84 = padding5 - (sp90 >> 1) + 0xf; - + DL = microcode_constructor(DL); - DL = write_text_at_abs_coord(DL, &sp88, &sp84, (s8*)text2, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp88, &sp84, (s8*)text2, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } } @@ -6204,7 +6337,7 @@ void interface_menu12_mpstage(void) tab_prev_highlight = FALSE; tab_next_highlight = FALSE; tab_start_highlight = FALSE; - if (isontab3()) + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = TRUE; } @@ -6271,7 +6404,7 @@ void interface_menu12_mpstage(void) set_item_visibility_in_objinstance(walletinst[0], SW_TABS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_BLANK, 1); set_item_visibility_in_objinstance(walletinst[0], SW_OHMSS, 1); - menu_control_stick_tracking(); + frontUpdateControlStickPosition(); if (tab_next_selected) { frontChangeMenu(MENU_MP_OPTIONS, FALSE); @@ -6308,15 +6441,15 @@ Gfx * constructor_menu12_mpstage(Gfx *DL) s32 count_2; s32 padding; s32 spB4; - - + + DL = viSetFillColor(DL, 0, 0, 0); DL = viFillScreen(DL); - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); for (i_1 = 0; i_1 != 3; i_1++) - { + { DL = microcode_constructor_related_to_menus(DL, 0x25, 0x6c + (i_1 * 0x46), 0x185, 0xa0 + (i_1 * 0x46), 0x101010FF); } @@ -6325,7 +6458,7 @@ Gfx * constructor_menu12_mpstage(Gfx *DL) gDPSetTextureFilter(DL++, G_TF_POINT); simage = mainfolderimages + 5; - likely_generate_DL_for_image_declaration(&DL, simage, 1, 0, 2); // IMAGE_DOT + texSelect(&DL, simage, 1, 0, 2); // IMAGE_DOT spF8.f[0] = 176.0f; spF8.f[1] = 4.0f; @@ -6334,9 +6467,9 @@ Gfx * constructor_menu12_mpstage(Gfx *DL) for (i_2 = 0; i_2 < 3; i_2++) { - display_image_at_on_screen_coord(&DL, &sp100.f[0], &spF8.f[0], 0x2F0, 0x12, 0, 0, 1, 0x6B, 0x67, 0x53, 0xFF, simage->level > 0, 0); + display_image_at_position(&DL, &sp100.f[0], &spF8.f[0], 0x2F0, 0x12, 0, 0, 1, 0x6B, 0x67, 0x53, 0xFF, simage->level > 0, 0); sp100.f[1] += 60.0f; - display_image_at_on_screen_coord(&DL, &sp100.f[0], &spF8.f[0], 0x2F0, 0x12, 0, 0, 1, 0x6B, 0x67, 0x53, 0xFF, simage->level > 0, 0); + display_image_at_position(&DL, &sp100.f[0], &spF8.f[0], 0x2F0, 0x12, 0, 0, 1, 0x6B, 0x67, 0x53, 0xFF, simage->level > 0, 0); sp100.f[1] -= 60.0f; sp100.f[1] += 70.0f; } @@ -6346,37 +6479,37 @@ Gfx * constructor_menu12_mpstage(Gfx *DL) spD8.f[1] = spD0.f[1] + 108.0f + 4.0f; count = 0; - + for (spB4 = 0; spB4 != 3; spB4++) - { + { spD8.f[0] = 86.0f; - + for (i_3 = 0; i_3 < 4; i_3++) - { + { if (count < 12) { simage = &mpstageselimages[multi_stage_setups[count].photo]; - likely_generate_DL_for_image_declaration(&DL, simage, 1, 0, 2); + texSelect(&DL, simage, 1, 0, 2); if (count == current_mp_stage_highlighted) { gDPSetCycleType(DL++, G_CYC_2CYCLE); gDPSetFogColor(DL++, 0xff, 0xff, 0xff, 0x0a); gDPSetRenderMode(DL++, G_RM_FOG_PRIM_A, G_RM_AA_OPA_SURF2); - - display_image_at_on_screen_coord(&DL, &spD8.f[0], &spD0.f[0], 0x44, 0x2C, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, simage->level > 0, 1); + + display_image_at_position(&DL, &spD8.f[0], &spD0.f[0], 0x44, 0x2C, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0xFF, simage->level > 0, 1); } else if (check_if_mp_stage_unlocked(count) != 0) { - display_image_at_on_screen_coord(&DL, &spD8.f[0], &spD0.f[0], 0x44, 0x2C, 0, 0, 1, 0x6E, 0x6E, 0x6E, 0xFF, simage->level > 0, 0); + display_image_at_position(&DL, &spD8.f[0], &spD0.f[0], 0x44, 0x2C, 0, 0, 1, 0x6E, 0x6E, 0x6E, 0xFF, simage->level > 0, 0); } else { - display_image_at_on_screen_coord(&DL, &spD8.f[0], &spD0.f[0], 0x44, 0x2C, 0, 0, 1, 0xF, 0xF, 0xF, 0xFF, simage->level > 0, 0); + display_image_at_position(&DL, &spD8.f[0], &spD0.f[0], 0x44, 0x2C, 0, 0, 1, 0xF, 0xF, 0xF, 0xFF, simage->level > 0, 0); } } - + spD8.f[0] += 85.0f; count++; } @@ -6397,51 +6530,51 @@ Gfx * constructor_menu12_mpstage(Gfx *DL) s32 padding7; s32 sp90; s32 padding8; - + sp90 = 0x97; - + for (sp9C = 0; sp9C != 3; sp9C++) { var_s6 = 0x56; - + for (i_4 = 0; i_4 < 4; i_4++) { if (count_2 < 12 && check_if_mp_stage_unlocked(count_2)) { var_s2_2 = 0x96969600; - + if (count_2 == current_mp_stage_highlighted) { var_s2_2 = -0x100; } - + textMeasure(&sp128, &sp124, langGet(multi_stage_setups[count_2].select_screen_text_preset), ptrFontBankGothicChars, ptrFontBankGothic, 0); - + sp130 = var_s6 - 0x1F; sp12C = sp90 - sp128; - + DL = microcode_constructor_related_to_menus(DL, sp130, sp12C, sp130 + sp124, sp12C + sp128, 0); - + DL = textRender(DL, &sp130, &sp12C, langGet(multi_stage_setups[count_2].select_screen_text_preset), ptrFontBankGothicChars, ptrFontBankGothic, var_s2_2 | 0xFF, viGetX(), viGetY(), 0, 0); - + sp130 = var_s6 - 0x1F; sp12C = sp90 - sp128; - + DL = textRender(DL, &sp130, &sp12C, langGet(multi_stage_setups[count_2].select_screen_text_preset), ptrFontBankGothicChars, ptrFontBankGothic, var_s2_2 | 0x64, viGetX(), viGetY(), 0, 0); } - + var_s6 += 0x55; count_2++; } - + sp90 += 0x46; } } - + DL = microcode_constructor(DL); - DL = add_tab3_previous(DL); - DL = load_draw_selected_icon_folder_select(DL); - + DL = frontAddPreviousTabText(DL); + DL = frontDrawCursor(DL); + return DL; } @@ -6494,7 +6627,7 @@ void interface_menu13_mpscenario(void) tab_next_highlight = FALSE; tab_start_highlight = FALSE; - if (isontab3()) + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = TRUE; dword_CODE_bss_80069780 = SCENARIO_NORMAL; @@ -6507,7 +6640,7 @@ void interface_menu13_mpscenario(void) { if ( (s32)cursor_v_pos >= (0x83 + (-i * -0x16)) - && (mp_player_counts[i].min <= get_selected_num_players()) + && (mp_player_counts[i].min <= get_selected_num_players()) && (get_selected_num_players() <= mp_player_counts[i].max)) { dword_CODE_bss_80069780 = i + 1; @@ -6526,7 +6659,7 @@ void interface_menu13_mpscenario(void) else { scenarioid = dword_CODE_bss_80069780 - 1; - + if ((scenarioid == SCENARIO_2v2) || (scenarioid == SCENARIO_3v1) || (scenarioid == SCENARIO_2v1)) { reset_mp_options_for_scenario(scenarioid); @@ -6538,7 +6671,7 @@ void interface_menu13_mpscenario(void) tab_prev_selected = TRUE; } } - + sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } else if (joyGetButtonsPressedThisFrame(PLAYER_1, B_BUTTON)) @@ -6546,20 +6679,20 @@ void interface_menu13_mpscenario(void) tab_prev_selected = TRUE; sndPlaySfx(g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } - + disable_all_switches(walletinst[0]); set_item_visibility_in_objinstance(walletinst[0], SW_TABS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_PAPER, 1); set_item_visibility_in_objinstance(walletinst[0], SW_OHMSS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_CLASSIFIED, 1); - menu_control_stick_tracking(); - + frontUpdateControlStickPosition(); + if (isTeam) { frontChangeMenu(MENU_MP_TEAMS, FALSE); return; } - + if (tab_prev_selected) { frontChangeMenu(MENU_MP_OPTIONS, FALSE); @@ -6589,24 +6722,24 @@ Gfx * constructor_menu13_mpscenario(Gfx *DL) DL = viFillScreen(DL); DL = viFillScreen(DL); #endif - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); - text = langGet(0x9C57); - + text = langGet(getStringID(LTITLE, TITLE_STR_87_SCENARIO2)); + x = 0x37; y = 0x66; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); for (i = 0; i < 8; i++) { var_s3 = 0xff; - + if (((s32) mp_player_counts[i].max < get_selected_num_players()) || (get_selected_num_players() < (s32) mp_player_counts[i].min)) { var_s3 = 0x70; } - + text = langGet(mp_player_counts[i].stage); textMeasure(&sp7C, &sp78, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); @@ -6618,11 +6751,11 @@ Gfx * constructor_menu13_mpscenario(Gfx *DL) DL = microcode_constructor_related_to_menus(DL, 0x37, y - 1, sp78 + 0x3C, y + 0xE, 0x32); } - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, var_s3, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, var_s3, viGetX(), viGetY(), 0, 0); } - DL = add_tab3_previous(DL); - DL = load_draw_selected_icon_folder_select(DL); + DL = frontAddPreviousTabText(DL); + DL = frontDrawCursor(DL); return DL; } @@ -6676,12 +6809,12 @@ void interface_menu14_mpteams(void) { s32 i; s32 var_a1; - + viSetFovY(60.0f); viSetAspect(1.3333334f); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); - + D_8002B560 = (s32) (D_8002B560 + 1) % 20; // 0x101 @@ -6756,7 +6889,7 @@ void interface_menu14_mpteams(void) disable_all_switches(walletinst[0]); set_item_visibility_in_objinstance(walletinst[0], SW_TABS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_BLANK, 1); - menu_control_stick_tracking(); + frontUpdateControlStickPosition(); if (joyGetButtonsPressedThisFrame(0, A_BUTTON|Z_TRIG|START_BUTTON)) // 0xb000 { @@ -6764,7 +6897,7 @@ void interface_menu14_mpteams(void) { if (scenario == SCENARIO_2v2) { - + if (i == 0 || i == teamsize) { var_a1 = 0; @@ -6773,7 +6906,7 @@ void interface_menu14_mpteams(void) { var_a1 = 1; } - + set_players_team_or_scenario_item_flag(i, var_a1); } else @@ -6786,11 +6919,11 @@ void interface_menu14_mpteams(void) { var_a1 = 1; } - + set_players_team_or_scenario_item_flag(i, var_a1); } } - + frontChangeMenu(MENU_MP_OPTIONS, 0); sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } @@ -6799,7 +6932,7 @@ void interface_menu14_mpteams(void) // Address 0x7F015138 NTSC #ifdef NONMATCHING -// https://decomp.me/scratch/N4sd9 99.55% +// https://decomp.me/scratch/N4sd9 99.55% // Just down to regalloc. Need a break from this one, not sure how much is fake match improvement. Gfx * constructor_menu14_mpteams(Gfx *DL) { @@ -6828,38 +6961,38 @@ Gfx * constructor_menu14_mpteams(Gfx *DL) DL = viSetFillColor(DL,0,0,0); DL = viFillScreen(DL); - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); DL = microcode_constructor_related_to_menus(DL, 0x26, 0xA9, 0x184, 0xAB, 0x90); if (spCC >= 3) { - DL = microcode_constructor_related_to_menus(DL, 0xD4, 0x1E, 0xD6, 0x136, 0x80); + DL = microcode_constructor_related_to_menus(DL, 0xD4, 0x1E, 0xD6, 0x136, 0x80); } for (i = 0; i < spCC; i++) - { + { var_v0 = (i >= 2) ? 0x8C : 0; temp_s6 = (var_v0) + 0x1E; // nonmatching: Problem line. var_v0 = ((i & 1) ? 0xAF : 0) + 0; - + gDPSetScissor(DL++, G_SC_NON_INTERLACE, (var_v0 + 0x2c), temp_s6 + 5, var_v0 + 0xcf, temp_s6 + 0x87); // nonmatching: Problem line ?? spB4 = var_v0 + 0x7d; if (i == 0) - { + { text = langGet(0x9C58); textMeasure(&spA4, &spA0, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - + sp98 = temp_s6 + 5; sp9C = spB4 - (spA0 >> 1); - - DL = write_text_at_abs_coord(DL, &sp9C, &sp98, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + + DL = frontPrintText(DL, &sp9C, &sp98, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } if (scenario == 5) @@ -6873,22 +7006,22 @@ Gfx * constructor_menu14_mpteams(Gfx *DL) text = var_s0 ? langGet(0x9C59) : langGet(0x9C5A); var_s2 = var_s0 ? -0xFFFF01 : 0xFFFF; - + // nonmatching: Basic block, yes or no ?? if (1) { textMeasure(&sp90, &sp8C, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - + sp88 = spB4 - (sp8C >> 1); sp84 = (temp_s6 - (sp90 >> 1)) + 0x46; - + if ((i != teamsize) || ((i == teamsize) && (D_8002B560 < 0xA))) { - DL = write_text_at_abs_coord(DL, &sp88, &sp84, text, ptrFontZurichBoldChars, ptrFontZurichBold, var_s2, viGetX(), viGetY(), 0, 0); - } + DL = frontPrintText(DL, &sp88, &sp84, text, ptrFontZurichBoldChars, ptrFontZurichBold, var_s2, viGetX(), viGetY(), 0, 0); + } } } - + DL = combiner_bayer_lod_perspective(DL); return DL; @@ -6920,7 +7053,7 @@ glabel constructor_menu14_mpteams /* 049CB4 7F015184 00003825 */ move $a3, $zero /* 049CB8 7F015188 0C000FBE */ jal viFillScreen /* 049CBC 7F01518C 00402025 */ move $a0, $v0 -/* 049CC0 7F015190 0FC0357A */ jal sub_GAME_7F00D5E8 +/* 049CC0 7F015190 0FC0357A */ jal frontSetupMenuBackground /* 049CC4 7F015194 00402025 */ move $a0, $v0 /* 049CC8 7F015198 0FC2B366 */ jal microcode_constructor /* 049CCC 7F01519C 00402025 */ move $a0, $v0 @@ -7049,7 +7182,7 @@ glabel constructor_menu14_mpteams /* 049EA0 7F015370 AFA00024 */ sw $zero, 0x24($sp) /* 049EA4 7F015374 AFA00028 */ sw $zero, 0x28($sp) /* 049EA8 7F015378 AFA80010 */ sw $t0, 0x10($sp) -/* 049EAC 7F01537C 0FC025D8 */ jal write_text_at_abs_coord +/* 049EAC 7F01537C 0FC025D8 */ jal frontPrintText /* 049EB0 7F015380 AFB80014 */ sw $t8, 0x14($sp) /* 049EB4 7F015384 0040A825 */ move $s5, $v0 .L7F015388: @@ -7137,7 +7270,7 @@ glabel constructor_menu14_mpteams /* 049FDC 7F0154AC AFA00024 */ sw $zero, 0x24($sp) /* 049FE0 7F0154B0 AFA00028 */ sw $zero, 0x28($sp) /* 049FE4 7F0154B4 AFAE0010 */ sw $t6, 0x10($sp) -/* 049FE8 7F0154B8 0FC025D8 */ jal write_text_at_abs_coord +/* 049FE8 7F0154B8 0FC025D8 */ jal frontPrintText /* 049FEC 7F0154BC AFAD0014 */ sw $t5, 0x14($sp) /* 049FF0 7F0154C0 0040A825 */ move $s5, $v0 .L7F0154C4: @@ -7194,7 +7327,7 @@ void load_briefing_text_for_stage(void) // what is this temp_s0 += argg / 8; - + // what is this argg *= 879; @@ -7228,7 +7361,7 @@ void update_menu0A_briefing(void) { langClearBank(langGetLangBankIndexFromStagenum(mission_folder_setup_entries[briefingpage].stage_id)); if (-1 < menu_update) { - sub_GAME_7F00B990(); + frontCleanUpWalletBond(); } } @@ -7242,15 +7375,15 @@ void interface_menu0A_briefing(void) tab_prev_highlight = FALSE; tab_next_highlight = FALSE; tab_start_highlight = FALSE; - if (isontab3()) + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = TRUE; } - else if ((isontab2()) && (current_menu_briefing_page < (final_menu_briefing_page - 1))) + else if ((frontCheckCursorOnNextTab()) && (current_menu_briefing_page < (final_menu_briefing_page - 1))) { tab_next_highlight = TRUE; } - else if (isontab1()) + else if (frontCheckCursorOnStartTab()) { tab_start_highlight = TRUE; } @@ -7309,7 +7442,7 @@ void interface_menu0A_briefing(void) set_item_visibility_in_objinstance(walletinst[0], SW_PAPER, 1); set_item_visibility_in_objinstance(walletinst[0], SW_OHMSS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_CLASSIFIED, 1); - menu_control_stick_tracking(); + frontUpdateControlStickPosition(); if (tab_next_selected) { frontChangeMenu(MENU_RUN_STAGE, TRUE); @@ -7338,12 +7471,12 @@ Gfx *print_objectives_and_status_to_menu(Gfx *DL, s32 arg1, u8 *arg2, s32 arg3) s32 var_fp; u8* text; s32 v1; - + sp98 = 0; var_fp = 0; i = 0; v1 = 0; - + for (i = 0; i < OBJECTIVES_MAX; i++) { if (ptrbriefingdata->objective[i].textid != 0 && selected_difficulty >= ptrbriefingdata->objective[i].enabled_difficulty) @@ -7356,15 +7489,15 @@ Gfx *print_objectives_and_status_to_menu(Gfx *DL, s32 arg1, u8 *arg2, s32 arg3) sp94 = 0; sp90 = 0; textMeasure(&sp94, &sp90, (u8*)arg2, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - + sp8C = 0x37; sp88 = (sp94 * var_fp) + arg1 + (i*0); - DL = write_text_at_abs_coord(DL, &sp8C, &sp88, (s8*)arg2, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp8C, &sp88, (s8*)arg2, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sp8C = 0x4B; sp88 = (sp94 * var_fp) + arg1 + (i*0); - + if (arg3 != 0) { setTextWordWrap(2); @@ -7376,35 +7509,35 @@ Gfx *print_objectives_and_status_to_menu(Gfx *DL, s32 arg1, u8 *arg2, s32 arg3) sub_GAME_7F0AEB64(0x140, (s8*)text, (s8*)arg2, ptrFontZurichBoldChars, ptrFontZurichBold); } - DL = write_text_at_abs_coord(DL, &sp8C, &sp88, (s8*)arg2, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp8C, &sp88, (s8*)arg2, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); if (arg3) { switch (get_status_of_objective(i)) { - case 1: - text = langGet(0x9C5BU); - var_s2 = 0xFF; - break; - default: - case 0: - case 2: - text = langGet(0x9C5CU); - var_s2 = 0x780000FF; - break; + case 1: + text = langGet(getStringID(LTITLE, TITLE_STR_91_COMPLETED)); + var_s2 = 0xFF; + break; + default: + case 0: + case 2: + text = langGet(getStringID(LTITLE, TITLE_STR_92_FAILED)); + var_s2 = 0x780000FF; + break; } - + sp8C = 0x136; sp88 = (sp94 * var_fp) + arg1 + (i*0); - DL = write_text_at_abs_coord(DL, &sp8C, &sp88, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, var_s2, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp8C, &sp88, (s8*)text, ptrFontZurichBoldChars, ptrFontZurichBold, var_s2, viGetX(), viGetY(), 0, 0); } var_fp += sub_GAME_7F0AC0E8(arg2); sp98++; } } - + return DL; } @@ -7427,41 +7560,41 @@ Gfx *constructor_menu0A_briefing(Gfx *DL) DL = viFillScreen(DL); DL = viFillScreen(DL); #endif - DL = sub_GAME_7F00D5E8(DL); - + DL = frontSetupMenuBackground(DL); + #if !defined(VERSION_EU) sp4C = asc_D_80050C54; #endif - + DL = microcode_constructor(DL); DL = print_current_solo_briefing_stage_name(DL, (char*)&sp4C); switch (current_menu_briefing_page) { case BRIEFING_TITLE: - spC0C = langGet(0x9C5DU); - break; + spC0C = langGet(getStringID(LTITLE, TITLE_STR_93_PRIMARYOBJECTIVES )); + break; case BRIEFING_OVERVIEW: - spC0C = langGet(0x9C5EU); - break; - + spC0C = langGet(getStringID(LTITLE, TITLE_STR_94_BACKGROUND)); + break; + case BRIEFING_M: - spC0C = langGet(0x9C5FU); - break; - + spC0C = langGet(getStringID(LTITLE, TITLE_STR_95_MBRIEFING)); + break; + case BRIEFING_Q: - spC0C = langGet(0x9C60U); - break; - + spC0C = langGet(getStringID(LTITLE, TITLE_STR_96_QBRANCH)); + break; + case BRIEFING_MONEYPENNY: - spC0C = langGet(0x9C61U); - break; + spC0C = langGet(getStringID(LTITLE, TITLE_STR_97_MONEYPENNY)); + break; } spC08 = 0x37; spC04 = 0x8F; - DL = write_text_at_abs_coord(DL, &spC08, &spC04, (s8*)spC0C, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC08, &spC04, (s8*)spC0C, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); if (current_menu_briefing_page == BRIEFING_TITLE) { @@ -7474,15 +7607,15 @@ Gfx *constructor_menu0A_briefing(Gfx *DL) case BRIEFING_OVERVIEW: spC0C = langGet(ptrbriefingdata->brief[0]); break; - + case BRIEFING_M: spC0C = langGet(ptrbriefingdata->brief[1]); break; - + case BRIEFING_Q: spC0C = langGet(ptrbriefingdata->brief[2]); break; - + case BRIEFING_MONEYPENNY: spC0C = langGet(ptrbriefingdata->brief[3]); break; @@ -7492,20 +7625,20 @@ Gfx *constructor_menu0A_briefing(Gfx *DL) spC04 = 0xA7; sub_GAME_7F0AEB64(0x140, (s8*)spC0C, (s8*)&sp4C, ptrFontZurichBoldChars, ptrFontZurichBold); setTextOverlapCorrection(8); - DL = write_text_at_abs_coord(DL, &spC08, &spC04, (s8*)&sp4C, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &spC08, &spC04, (s8*)&sp4C, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); setTextOverlapCorrection(-1); } - DL = add_tab1_start(DL); - DL = add_tab3_previous(DL); - + DL = frontAddStartTabText(DL); + DL = frontAddPreviousTabText(DL); + if (current_menu_briefing_page < BRIEFING_MONEYPENNY) { - DL = add_tab2_next(DL); + DL = frontAddNextTabText(DL); } - - DL = load_draw_selected_icon_folder_select(DL); - + + DL = frontDrawCursor(DL); + return DL; } @@ -7530,7 +7663,7 @@ void init_menu0C_missionfailed(void) tab_prev_selected = FALSE; load_walletbond(); load_briefing_text_for_stage(); - set_cursor_pos_tab2(); + frontSetCursorPositionToNextTab(); if (maybe_is_in_menu != FALSE) { sndApplyVolumeAllSfxSlot(0x7fff); musicTrack1ApplySeqpVol(0x7fff); @@ -7553,13 +7686,13 @@ void interface_menu0C_missionfailed(void) viSetUseZBuf(FALSE); tab_next_highlight = FALSE; tab_prev_highlight = FALSE; - if (isontab3()) + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = TRUE; } else { - if (isontab2()) + if (frontCheckCursorOnNextTab()) { tab_next_highlight = TRUE; } @@ -7597,7 +7730,7 @@ void interface_menu0C_missionfailed(void) set_item_visibility_in_objinstance(walletinst[0], SW_PAPER, 1); set_item_visibility_in_objinstance(walletinst[0], SW_OHMSS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_CLASSIFIED, 1); - menu_control_stick_tracking(); + frontUpdateControlStickPosition(); if (tab_next_selected) { frontChangeMenu(MENU_MISSION_COMPLETE, FALSE); @@ -7658,53 +7791,53 @@ Gfx * constructor_menu0C_missionfailed(Gfx *DL) DL = viFillScreen(DL); DL = viFillScreen(DL); #endif - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); DL = print_current_solo_briefing_stage_name(DL, &stagename); - text = langGet(TEXT(LTITLE, TITLE_STR_98)); //REPORT:* + text = langGet(getStringID(LTITLE, TITLE_STR_98_REPORT)); //REPORT:* x = 0x37; y = 0x8F; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_99)); //Mission status:* + text = langGet(getStringID(LTITLE, TITLE_STR_99_MISSIONSTATUS)); //Mission status:* x2 = 0; y2 = 0; textMeasure(&y2, &x2, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); x = 0x37; y = 0xA7; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); if (g_isBondKIA) { - text = langGet(TEXT(LTITLE, TITLE_STR_100)); // KILLED IN ACTION* + text = langGet(getStringID(LTITLE, TITLE_STR_100_KIA)); // KILLED IN ACTION* phi_v1 = 0x78000000 | 0xFF; } else if (mission_failed_or_aborted) { - text = langGet(TEXT(LTITLE, TITLE_STR_101)); // ABORTED* + text = langGet(getStringID(LTITLE, TITLE_STR_101_ABORTED)); // ABORTED* phi_v1 = 0x78000000 | 0xFF; } else if (frontCompleteAllObjectivesAliveSuccess()) { - text = langGet(TEXT(LTITLE, TITLE_STR_102)); // Completed* + text = langGet(getStringID(LTITLE, TITLE_STR_102_COMPLETED)); // Completed* phi_v1 = 0xFF; } else { - text = langGet(TEXT(LTITLE, TITLE_STR_103)); // FAILED* + text = langGet(getStringID(LTITLE, TITLE_STR_103_FAILED)); // FAILED* phi_v1 = 0x78000000 | 0xFF; } x = x2 + 0x37; y = 0xA7; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, phi_v1, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, phi_v1, viGetX(), viGetY(), 0, 0); DL = print_objectives_and_status_to_menu(DL, 0xBF, &stagename, 1); - DL = add_tab2_next(DL); - DL = add_tab3_previous(DL); - DL = load_draw_selected_icon_folder_select(DL); + DL = frontAddNextTabText(DL); + DL = frontAddPreviousTabText(DL); + DL = frontDrawCursor(DL); return DL; } @@ -7743,14 +7876,14 @@ void interface_menu0D_missioncomplete() viSetUseZBuf(0); tab_prev_highlight = FALSE; tab_next_highlight = FALSE; - - if (isontab3()) + + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = 1; } else { - if (isontab2()) + if (frontCheckCursorOnNextTab()) { tab_next_highlight = 1; } @@ -7784,7 +7917,7 @@ void interface_menu0D_missioncomplete() set_item_visibility_in_objinstance(walletinst[0], SW_PAPER, 1); set_item_visibility_in_objinstance(walletinst[0], SW_OHMSS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_CLASSIFIED, 1); - menu_control_stick_tracking(); + frontUpdateControlStickPosition(); if (tab_next_selected) { @@ -7812,13 +7945,13 @@ void interface_menu0D_missioncomplete() entry++; } - + if (mission_folder_setup_entries[entry].folder_text_preset) { briefingpage = entry; selected_stage = mission_folder_setup_entries[entry].stage_id; } - + frontChangeMenu(MENU_BRIEFING, FALSE); } } @@ -7832,7 +7965,7 @@ void interface_menu0D_missioncomplete() frontChangeMenu(MENU_MISSION_SELECT, FALSE); set_cursor_to_stage_solo((s32)mission_folder_setup_entries[briefingpage].mission_num); } - + return; } @@ -7855,19 +7988,19 @@ Gfx *constructor_menu0D_missioncomplete(Gfx *DL) s32 reg6; s32 hitshots; s32 allhits; - + s32 missiontime; s32 temp; s32 besttime; s32 targettime; s32 difficulty; f32 hitPct; - + DL = viSetFillColor(DL, 0,0,0); DL = viFillScreen(DL); - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); missiontimer = getMissiontimer(); @@ -7886,19 +8019,19 @@ Gfx *constructor_menu0D_missioncomplete(Gfx *DL) } DL = print_current_solo_briefing_stage_name(DL, stagename); - text = langGet(TEXT(LTITLE, TITLE_STR_104)); //STATISTICS:* + text = langGet(getStringID(LTITLE, TITLE_STR_104_STATS)); //STATISTICS:* x = 0x37; y = 0x8F; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); x2 = 0; y2 = 0; textMeasure(&y2, &x2, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_105)); //Time:* + text = langGet(getStringID(LTITLE, TITLE_STR_105_TIME)); //Time:* x = 0x37; y = 0xA7; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); besttime = fileGetSaveStageDifficultyTime( fileGetSaveForFoldernum(selected_folder_num), mission_folder_setup_entries[briefingpage].mission_num, selected_difficulty); if ((besttime == 0) || (!(besttime < 0x3FF))) { @@ -7916,59 +8049,59 @@ Gfx *constructor_menu0D_missioncomplete(Gfx *DL) sprintf(stagename, "%02d:%02d", missiontime / 60, missiontime % 60); x = 0x82; y = 0xA7; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); if (g_NewCheatUnlocked) { stagename[0] = '\0'; - sprintf(stagename, " [%s]", langGet(TEXT(LTITLE, TITLE_STR_275))); //New Cheat Available - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xA00000FF, viGetX(), viGetY(), 0, 0); + sprintf(stagename, " [%s]", langGet(getStringID(LTITLE, TITLE_STR_275_NEWCHEATAVAILABLE))); //New Cheat Available + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xA00000FF, viGetX(), viGetY(), 0, 0); } if ((targettime > 0) && (selected_difficulty != DIFFICULTY_007)) { - text = langGet(TEXT(LTITLE, TITLE_STR_274)); //Target: + text = langGet(getStringID(LTITLE, TITLE_STR_274_TARGET)); //Target: x = 0x37; y = y2 + 0xA9; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); stagename[0] = '\0'; sprintf(stagename, "%02d:%02d", targettime / 60, targettime % 60); x = 0x82; y = y2 + 0xA9; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); if (besttime >= 0) { if (besttime < 0x3FF) { stagename[0] = '\0'; if (besttime >= 0) { - sprintf(stagename, " (%s %02d:%02d)", langGet(TEXT(LTITLE, TITLE_STR_273)), besttime / 60, besttime % 60); //Best Time: + sprintf(stagename, " (%s %02d:%02d)", langGet(getStringID(LTITLE, TITLE_STR_273_BESTTIME)), besttime / 60, besttime % 60); //Best Time: } else { sprintf(stagename, ""); } - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } } } else { if (besttime >= 0) { if (besttime < 0x3FF) { - text = langGet(TEXT(LTITLE, TITLE_STR_273)); //Best Time: + text = langGet(getStringID(LTITLE, TITLE_STR_273_BESTTIME)); //Best Time: x = 0x37; y = y2 + 0xA9; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); stagename[0] = '\0'; sprintf(stagename, "%02d:%02d", besttime / 60, besttime % 60); x = 0x82; y = y2 + 0xA9; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); } } } - text = langGet(TEXT(LTITLE, TITLE_STR_106)); //Accuracy:* + text = langGet(getStringID(LTITLE, TITLE_STR_106_ACCURACY)); //Accuracy:* x = 0x37; y = 0xCC; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); if (shotsfired > 0) { hitPct = (hitshots * 100.0f) / shotsfired; } @@ -7978,14 +8111,14 @@ Gfx *constructor_menu0D_missioncomplete(Gfx *DL) sprintf(stagename, "%.1f%%", hitPct); x = 0x82; y = 0xCC; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_107)); //Weapon of choice:* + text = langGet(getStringID(LTITLE, TITLE_STR_107_WEAPONOFCHOICE)); //Weapon of choice:* x = 0x37; y = 0xDC; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - strcpy(stagename, getplayerfavoredweapon(0, 0)); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + strcpy(stagename, frontGetPlayersFavoriteWeaponInHand(0, 0)); if ((array_favweapon[0][0] > 0) && (array_favweapon[0][1] == array_favweapon[0][0])) { temp = strlen(stagename)-1; @@ -7993,73 +8126,73 @@ Gfx *constructor_menu0D_missioncomplete(Gfx *DL) } x = 0xBE; y = 0xDC; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_108)); //Shot total:* + text = langGet(getStringID(LTITLE, TITLE_STR_108_SHOTTOTAL)); //Shot total:* x = 0x37; y = 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf(stagename, "%d", shotsfired); x = 0x82; y = 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_109)); //Head hits:* + text = langGet(getStringID(LTITLE, TITLE_STR_109_HEADHITS)); //Head hits:* x = 0xB4; y = 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf(stagename, "%d (%d%%)", headshots, (s32)(floorFloat(((headshots * 100.0f) / allhits) + 0.5f))); x = 0x12C; y = 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_110)); //Body hits:* + text = langGet(getStringID(LTITLE, TITLE_STR_110_BODYHITS)); //Body hits:* x = 0xB4; y = y2 + 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf(stagename, "%d (%d%%)", bodyshots, (s32)floorFloat(((bodyshots * 100.0f) / allhits) + 0.5f)); x = 0x12C; y = y2 + 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_111)); //Limb hits:* + text = langGet(getStringID(LTITLE, TITLE_STR_111_LIMBHITS)); //Limb hits:* x = 0xB4; y = (y2 * 2) + 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf(stagename, "%d (%d%%)", limbshots, (s32)floorFloat(((limbshots * 100.0f) / allhits) + 0.5f)); x = 0x12C; y = (y2 * 2) + 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_112)); //Others:* + text = langGet(getStringID(LTITLE, TITLE_STR_112_OTHER)); //Others:* x = 0xB4; y = (y2 * 3) + 0xF4; temp = reg5 + reg4; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf(stagename, "%d (%d%%)", temp, (s32)floorFloat(((temp * 100.0f) / allhits) + 0.5f)); x = 0x12C; y = (y2 * 3) + 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - text = langGet(TEXT(LTITLE, TITLE_STR_113)); //Kill total:* + text = langGet(getStringID(LTITLE, TITLE_STR_113_KILLTOTAL)); //Kill total:* x = 0x37; y = y2 + 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); sprintf(stagename, "%d", killcount); x = 0x82; y = y2 + 0xF4; - DL = write_text_at_abs_coord(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &x, &y, stagename, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - DL = add_tab2_next(DL); - DL = add_tab3_previous(DL); - DL = load_draw_selected_icon_folder_select(DL); + DL = frontAddNextTabText(DL); + DL = frontAddPreviousTabText(DL); + DL = frontDrawCursor(DL); } @@ -8123,12 +8256,12 @@ void update_menu15_cheat(void) void interface_menu15_cheat(void) { s32 i; - + viSetFovY(60.0f); viSetAspect(1.3333334f); viSetZRange(100.0f, 10000.0f); viSetUseZBuf(0); - + MP_menu_selected_option = 0; if (joyGetButtons(PLAYER_1, A_BUTTON|Z_TRIG) == 0) @@ -8137,8 +8270,8 @@ void interface_menu15_cheat(void) tab_next_highlight = 0; tab_start_highlight = 0; D_8002B5E0 = 0; - - if (isontab3()) + + if (frontCheckCursorOnPreviousTab()) { tab_prev_highlight = 1; } @@ -8177,7 +8310,7 @@ void interface_menu15_cheat(void) } } } - + if (joyGetButtonsPressedThisFrame(PLAYER_1, A_BUTTON|Z_TRIG)) { if (tab_prev_highlight != 0) @@ -8188,7 +8321,7 @@ void interface_menu15_cheat(void) { MP_menu_selected_option = 1; } - + sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } else if (joyGetButtonsPressedThisFrame(0, 0x4000U) != 0) @@ -8196,20 +8329,20 @@ void interface_menu15_cheat(void) tab_prev_selected = 1; sndPlaySfx((struct ALBankAlt_s *) g_musicSfxBufferPtr, DOOR_METAL_CLOSE2_SFX, NULL); } - + disable_all_switches(walletinst[0]); set_item_visibility_in_objinstance(walletinst[0], SW_TABS, 1); set_item_visibility_in_objinstance(walletinst[0], SW_BLANK, 1); set_item_visibility_in_objinstance(walletinst[0], SW_CLASSIFIED, 1); - menu_control_stick_tracking(); - + frontUpdateControlStickPosition(); + if (tab_prev_selected) { frontChangeMenu(MENU_MODE_SELECT, 0); setCursorPOSforMode(gamemode); return; } - + if (MP_menu_selected_option) { i = arrayUnlockedCheats[D_8002B5E0]; @@ -8224,7 +8357,7 @@ void interface_menu15_cheat(void) Gfx * constructor_menu15_cheat(Gfx *DL) { s32 padding; - s32 var_s1; + s32 strID; s32 var_fp; s32 sp88; s32 sp84; @@ -8240,7 +8373,7 @@ Gfx * constructor_menu15_cheat(Gfx *DL) DL = viFillScreen(DL); DL = viFillScreen(DL); #endif - DL = sub_GAME_7F00D5E8(DL); + DL = frontSetupMenuBackground(DL); DL = microcode_constructor(DL); for (var_fp = 0; var_fp < ((totalunlockedcheats >= 0xD) ? 0xC : totalunlockedcheats); var_fp++) @@ -8250,21 +8383,21 @@ Gfx * constructor_menu15_cheat(Gfx *DL) sp88 = 0x37; sp84 = (var_fp * 0x14) + 0x35; - if ((var_fp == D_8002B5E0) && (isontab3() == 0)) + if ((var_fp == D_8002B5E0) && (frontCheckCursorOnPreviousTab() == 0)) { DL = microcode_constructor_related_to_menus(DL, sp88 - 2, sp84 - 1, sp88 + sp7C + 5, sp84 + 0xE, 0x32); } - DL = write_text_at_abs_coord(DL, &sp88, &sp84, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp88, &sp84, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - var_s1 = (g_CheatActivated[arrayUnlockedCheats[var_fp]]) ? 0x9C73 : 0x9C74; - temp_v0 = langGet(var_s1); + strID = (g_CheatActivated[arrayUnlockedCheats[var_fp]]) ? getStringID(LTITLE, TITLE_STR_115_ON) : getStringID(LTITLE, TITLE_STR_116_OFF); + temp_v0 = langGet(strID); textMeasure(&sp80, &sp7C, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, 0); sp88 = 0xB3; sp84 = (var_fp * 0x14) + 0x35; - DL = write_text_at_abs_coord(DL, &sp88, &sp84, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, (g_CheatActivated[arrayUnlockedCheats[var_fp]]) ? 0xA00000FF : 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp88, &sp84, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, (g_CheatActivated[arrayUnlockedCheats[var_fp]]) ? 0xA00000FF : 0xFF, viGetX(), viGetY(), 0, 0); } if (totalunlockedcheats >= 0xd) @@ -8276,28 +8409,28 @@ Gfx * constructor_menu15_cheat(Gfx *DL) sp88 = 0xDC; sp84 = (var_fp * 0x14) + 0x35; - if ((var_fp + 0xc == D_8002B5E0) && (isontab3() == 0)) + if ((var_fp + 0xc == D_8002B5E0) && (frontCheckCursorOnPreviousTab() == 0)) { DL = microcode_constructor_related_to_menus(DL, sp88 - 2, sp84 - 1, sp88 + sp7C + 5, sp84 + 0xE, 0x32); } - DL = write_text_at_abs_coord(DL, &sp88, &sp84, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp88, &sp84, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, 0xFF, viGetX(), viGetY(), 0, 0); - var_s1 = (g_CheatActivated[arrayUnlockedCheats[var_fp + 12]]) ? 0x9C73 : 0x9C74; - temp_v0 = langGet(var_s1); + strID = (g_CheatActivated[arrayUnlockedCheats[var_fp + 12]]) ? getStringID(LTITLE, TITLE_STR_115_ON) : getStringID(LTITLE, TITLE_STR_116_OFF); + temp_v0 = langGet(strID); textMeasure(&sp80, &sp7C, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, 0); sp88 = 0x158; sp84 = (var_fp * 0x14) + 0x35; - var_s1 = (g_CheatActivated[arrayUnlockedCheats[var_fp + 12]]) ? 0xA00000FF : 0xFF; + strID = (g_CheatActivated[arrayUnlockedCheats[var_fp + 12]]) ? 0xA00000FF : 0xFF; - DL = write_text_at_abs_coord(DL, &sp88, &sp84, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, var_s1, viGetX(), viGetY(), 0, 0); + DL = frontPrintText(DL, &sp88, &sp84, temp_v0, ptrFontZurichBoldChars, ptrFontZurichBold, strID, viGetX(), viGetY(), 0, 0); } } - DL = add_tab3_previous(DL); - - DL = load_draw_selected_icon_folder_select(DL); + DL = frontAddPreviousTabText(DL); + + DL = frontDrawCursor(DL); return DL; } @@ -8348,7 +8481,7 @@ Gfx *constructor_menu16_nocontrollers(Gfx *DL) if ((numContCon == 0) || (numContCon == 1) || (numContCon == 2) || (numContCon == 3)) { - text = langGet(TEXT(LTITLE, TITLE_STR_118)); //NO CONTROLLER IN CONTROLLER SOCKET 1 + text = langGet(getStringID(LTITLE, TITLE_STR_118_NOCONT)); //NO CONTROLLER IN CONTROLLER SOCKET 1 } textMeasure(&y2, &x2, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); x = 0xDC - (x2 >> 1); @@ -8366,7 +8499,7 @@ Gfx *constructor_menu16_nocontrollers(Gfx *DL) if ((numContCon == 0) || (numContCon == 1) || (numContCon == 2) || (numContCon == 3)) { - text = langGet(TEXT(LTITLE, TITLE_STR_119)); //PLEASE POWER OFF AND ATTACH A CONTROLLER + text = langGet(getStringID(LTITLE, TITLE_STR_119_ATTACHCONT)); //PLEASE POWER OFF AND ATTACH A CONTROLLER } textMeasure(&y2, &x2, text, ptrFontZurichBoldChars, ptrFontZurichBold, 0); x = 0xDC - (x2 >> 1); @@ -8505,12 +8638,12 @@ void init_menu18_displaycast(void) } // begin problem area - + temp_t0 = 0x19000; spB0 = 0x18160 + temp_t0; if(0); - + zbufSetBuffer(ALIGN64_V2(spB4 + spB0), 440, 330); texInitPool(&sp90, spB4, temp_t0); @@ -8520,7 +8653,7 @@ void init_menu18_displaycast(void) sp80 = c_item_entries[sp8C].header; // can't get subu a3,a3,v1 - + load_object_fill_header(c_item_entries[sp8C].header, c_item_entries[sp8C].filename, spB4, spB0, &sp90); temp_t0 = ALIGN64_V2(get_pc_buffer_remaining_value(c_item_entries[sp8C].filename)); @@ -8532,12 +8665,12 @@ void init_menu18_displaycast(void) if (sp88 >= 0) { sp7C = c_item_entries[sp88].header; - + load_object_fill_header(c_item_entries[sp88].header, c_item_entries[sp88].filename, spB4, spB0, &sp90); temp_t0 = ALIGN64_V2(get_pc_buffer_remaining_value(c_item_entries[sp88].filename)); - + spB0 -= temp_t0; - spB4 += temp_t0; + spB4 += temp_t0; } cast_model = setup_chr_instance(sp8C, sp88, sp80, sp7C, 0); @@ -8586,7 +8719,7 @@ void init_menu18_displaycast(void) //temp_v0_4 = &PitemZ_entries[sp84]; sp78 = PitemZ_entries[sp84].header; - + load_object_fill_header(sp78, PitemZ_entries[sp84].filename, spB4, spB0, &sp90); temp_t0 = ALIGN64_V2(get_pc_buffer_remaining_value(PitemZ_entries[sp84].filename)); spB0 -= temp_t0; @@ -8621,9 +8754,9 @@ void init_menu18_displaycast(void) intro_animation_table[randomly_selected_intro_animation].startframeoffset, intro_animation_table[randomly_selected_intro_animation].playback_speed, 0.0f); - + g_MenuTimer = 0; - + flt_CODE_bss_800695A4 = (RANDOMGETNEXT_F32() * 80.0f) + 70.0f; flt_CODE_bss_800695A8 = (RANDOMGETNEXT_F32() * 80.0f) + 70.0f; flt_CODE_bss_800695B0 = (RANDOMGETNEXT_F32() - 0.5f) * 6.2831855f; @@ -8648,6 +8781,8 @@ glabel jpt_intro_bond_head .word .L7F018830 .word .L7F018844 .word .L7F018858 + .size jpt_intro_bond_head, . - jpt_intro_bond_head + glabel D_80051B00 .word 0x40C90FDB /*6.2831855;*/ glabel D_80051B04 @@ -9242,6 +9377,7 @@ glabel jpt_intro_bond_head .word .L7F018830 .word .L7F018844 .word .L7F018858 + .size jpt_intro_bond_head, . - jpt_intro_bond_head glabel D_80051B00 .word 0x40C90FDB /*6.2831855;*/ glabel D_80051B04 @@ -9852,7 +9988,7 @@ void update_menu18_displaycast(void) { void interface_menu18_displaycast(void) { s32 f; - + viSetFovY(46.0f); viSetZRange(10.0f, 2000.0f); viSetUseZBuf(TRUE); @@ -9861,21 +9997,20 @@ void interface_menu18_displaycast(void) viSetViewSize(440, 330); set_cur_player_viewport_size(0, 0); viSetViewPosition(0, 0); - + g_MenuTimer += g_ClockTimer; -#if defined(VERSION_US) || defined(VERSION_JP) -#define INTERFACE_MENU18_TIMER 181 -#endif -#if defined(VERSION_EU) +#if defined(REFRESH_PAL) #define INTERFACE_MENU18_TIMER 151 +#else +#define INTERFACE_MENU18_TIMER 181 #endif if (g_MenuTimer >= INTERFACE_MENU18_TIMER) { -#undef INTERFACE_MENU18_TIMER +#undef INTERFACE_MENU18_TIMER intro_character_index++; - + while (1) { if (intro_char_table[intro_character_index].flag && full_actor_intro == 0 && 1) @@ -9924,7 +10059,7 @@ void interface_menu18_displaycast(void) } f = intro_character_index; - + if (intro_char_table[f].body < 0) { intro_character_index = 0; @@ -9946,7 +10081,7 @@ void interface_menu18_displaycast(void) select_ramrom_to_play(); } } - + else if ((joyGetButtonsPressedThisFrame(PLAYER_1, 0xFFFF) != 0) && (!full_actor_intro)) { frontChangeMenu(MENU_FILE_SELECT, TRUE); @@ -9972,7 +10107,7 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) struct coord3d sp22C; s32 padding; Mtxf sp1E8; - struct unk_joint_list sp1A8; + ModelRenderData sp1A8; s32 padding3; Mtxf sp160; s32 sp15C; @@ -10028,7 +10163,7 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) flt_CODE_bss_800695A0 = ((flt_CODE_bss_800695A8 - flt_CODE_bss_800695A4) * sp148) + flt_CODE_bss_800695A4; flt_CODE_bss_800695AC = ((flt_CODE_bss_800695B4 - flt_CODE_bss_800695B0) * sp148) + flt_CODE_bss_800695B0; flt_CODE_bss_800695B8 = ((flt_CODE_bss_800695C0 - flt_CODE_bss_800695BC) * sp148) + flt_CODE_bss_800695BC; - + if (flt_CODE_bss_800695AC < 0.0f) { flt_CODE_bss_800695AC += 6.2831855f; @@ -10057,7 +10192,7 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) if (cast_model_weapon != NULL) { mnode = cast_model_weapon->obj->Switches[0]; - + if (mnode != NULL) { unmrd = modelGetNodeRwData(cast_model_weapon, mnode); @@ -10065,11 +10200,11 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) srecord->val = 0; } } - + if (cast_model_weapon != NULL) { mnode = cast_model_weapon->obj->Switches[2]; - + if (mnode != NULL) { unmrd = modelGetNodeRwData(cast_model_weapon, mnode); @@ -10176,7 +10311,7 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) sp1A8.unk_matrix = &sp1E8; sp1A8.mtxlist = dynAllocate(cast_model->obj->numMatrices << 6); - subcalcmatrices((struct unk_joint_list *) &sp1A8, cast_model); + subcalcmatrices((ModelRenderData *) &sp1A8, cast_model); if (cast_model_weapon != NULL) { @@ -10190,20 +10325,20 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) } sp1A8.mtxlist = dynAllocate(cast_model_weapon->obj->numMatrices << 6); - instcalcmatrices((struct unk_joint_list *) &sp1A8, cast_model_weapon); + instcalcmatrices((ModelRenderData *) &sp1A8, cast_model_weapon); } sp1A8.unk20 = 7; sp1A8.unk04 = 1; sp1A8.gdl = DL++; sp1A8.unk08 = 3; - subdraw((struct unk_joint_list *) &sp1A8, cast_model); - + subdraw((ModelRenderData *) &sp1A8, cast_model); + if (cast_model_weapon != NULL) { - subdraw((struct unk_joint_list *) &sp1A8, cast_model_weapon); + subdraw((ModelRenderData *) &sp1A8, cast_model_weapon); } - + modelSetDistanceDisabled(0); for (; var_s1obj->numMatrices; var_s1++) @@ -10222,7 +10357,7 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) matrix_4x4_f32_to_s32(&sp160, &((Mtxf*)cast_model_weapon->render_pos)[i]); } } - + gDPSetScissor(DL++, G_SC_NON_INTERLACE, 0, 0, 440, 330); gDPPipeSync(DL++); gDPSetCycleType(DL++, G_CYC_1CYCLE); @@ -10282,7 +10417,7 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) { var_t4 = -1; } - + DL = textRender(DL, &sp15C, &sp158, temp_v0_6, ptrFontZurichBoldChars, ptrFontZurichBold, var_t4 | ~0xFF, viGetX(), viGetY(), 0, 0); } /* @@ -10306,7 +10441,7 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) } } */ - + temp_v0_6 = langGet(intro_char_table[intro_character_index].text2); textMeasure(&sp150, &sp154, temp_v0_6, ptrFontZurichBoldChars, ptrFontZurichBold, 0); sp158 = 0x98; @@ -10320,7 +10455,7 @@ Gfx * constructor_menu18_displaycast(Gfx *DL) sp15C = 0x13B - (sp154 / 2); DL = microcode_constructor_related_to_menus(DL, sp15C, 0xAE, sp15C + sp154 + 1, sp150 + 0xAF, 0); DL = textRender(DL, &sp15C, &sp158, temp_v0_6, ptrFontZurichBoldChars, ptrFontZurichBold, var_t4 | ~0xFF, viGetX(), viGetY(), 0, 0); - + return DL; } @@ -12704,7 +12839,7 @@ MENU get_currentmenu(void) void menu_init(void) { s32 var_v0; - + if (current_menu == MENU_SWITCH_SCREENS) { if (spectrum_related_flag != 0) @@ -12736,7 +12871,7 @@ void menu_init(void) { viSetFrameBuf2(ptr_menu_videobuffer); } - + viSetAspect(MENU_INIT_ASPECT_440); viSetXY(440, 330); viSetBuf(440, 330); @@ -12873,7 +13008,7 @@ void menu_init(void) } else { - frontChangeMenu(MENU_MISSION_FAILED, 1); + frontChangeMenu(MENU_MISSION_FAILED, 1); } } @@ -12961,7 +13096,7 @@ Gfx * menu_jump_constructor_handler(Gfx *DL) case MENU_SPECTRUM_EMU: DL = constructor_menu19_spectrum(DL); } - + return DL; } diff --git a/src/game/front.h b/src/game/front.h index 2488fef..cf83cf6 100644 --- a/src/game/front.h +++ b/src/game/front.h @@ -4,6 +4,36 @@ #include #include + +#define TABS_LEFT_EDGE 390.0f +#define TABS_RIGHT_EDGE 411 + +#define NEXTTAB_CURSOR_HPOS 399.0f +#define NEXTTAB_CURSOR_VPOS 144.0f + +#define STARTTAB_TAB_TOP 40.0f +#define STARTTAB_TEXT_TOP 51 +//#define STARTTAB_TEXT_HALF 84 +#define STARTTAB_TEXT_HALF (STARTTAB_TEXT_TOP + ((STARTTAB_TEXT_BOTTOM-STARTTAB_TEXT_TOP)/2)) +#define STARTTAB_TEXT_BOTTOM 117 +#define STARTTAB_TAB_BOTTOM 130.5f + +#define NEXTTAB_TAB_TOP 130.5f +#define NEXTTAB_TEXT_TOP 144 +//#define NEXTTAB_TEXT_HALF 177 +#define NEXTTAB_TEXT_HALF (NEXTTAB_TEXT_TOP + ((NEXTTAB_TEXT_BOTTOM-NEXTTAB_TEXT_TOP)/2)) +#define NEXTTAB_TEXT_BOTTOM 210 +#define NEXTTAB_TAB_BOTTOM 223.0f + +#define PREVTAB_TAB_TOP 223.0f +#define PREVTAB_TEXT_TOP 236 +//#define PREVTAB_TEXT_HALF 269 +#define PREVTAB_TEXT_HALF (PREVTAB_TEXT_TOP + ((PREVTAB_TEXT_BOTTOM-PREVTAB_TEXT_TOP)/2)) +#define PREVTAB_TEXT_BOTTOM 302 +#define PREVTAB_TAB_BOTTOM 315.0f + + + struct legal_screen_text { s32 h_pos; s32 v_pos; @@ -311,7 +341,7 @@ int get_mp_timelimit(void); int get_mp_pointlimit(void); void reset_mp_options_for_scenario(MPSCENARIOS scenarioid); void copy_aim_settings_to_playerdata(void); -void menu_init(); +void menu_init(void); Gfx * menu_jump_constructor_handler(Gfx *DL); void unlock_all_mp_chars(void); u8 get_player_mp_char_gender(int player); diff --git a/src/game/gun.c b/src/game/gun.c index e857c47..f8a096f 100644 --- a/src/game/gun.c +++ b/src/game/gun.c @@ -57,7 +57,7 @@ s32 dword_CODE_bss_80076A48; #define WATCH_SOUND_DURATION_TICKS 300 #endif - + // data @@ -469,7 +469,23 @@ u32 D_80035CC0 = 0; //D:80035CC4 u32 D_80035CC4[] = { 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -// struct unk_joint_list D_8002CCBC = {0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +/* ModelRenderData D_8002CCBC = {NULL, + TRUE, + 0x00000003, + NULL, + NULL, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + {0, 0, 0, 0}, + {0, 0, 0, 0}, + CULLMODE_BOTH}; +*/ //D:80035D00 u32 D_80035D00 = 0; //D:80035D04 @@ -815,7 +831,7 @@ void copy_item_in_hand(coord3d *pos) void copy_item_in_hand_to_main_list(coord3d *pos) { - + WeaponStats *stats; ITEM_IDS item; @@ -1703,10 +1719,10 @@ void sub_GAME_7F05EB0C(ObjectRecord *obj, coord3d *pos, StandTile *stan, Mtxf *m chrpropEnable(temp_s1); matrix_scalar_multiply(obj->model->scale, matrix); objChangeShading(obj, pos, matrix, stan); - + // loadobjectmodel.c setupUpdateObjectRoomPosition(obj); - + chrobjCollisionRelated(obj); sub_GAME_7F03FDA8(temp_s1); @@ -1778,7 +1794,7 @@ void sub_GAME_7F05EC1C(void) temp_s0->unk10, arg1->unk0, arg1->unk8, - 0x1F, + CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, temp_f14, phi_f16, 0.0f, @@ -2042,7 +2058,7 @@ void generate_player_thrown_grenade(s32 hand) if ((wor->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) != 0) { wor->projectile->flags = (s32) (wor->projectile->flags | 2); - + wor->projectile->unk8C = 0.3f; wor->projectile->unk94 = 0.13333333f; wor->projectile->refreshrate = THROWN_ITEM_REFRESH_RATE; @@ -2127,10 +2143,10 @@ void generate_player_thrown_knife(s32 hand) if ((wor->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) != 0) { wor->projectile->flags = (s32) (wor->projectile->flags | 2); - + wor->projectile->unk8C = 0.1f; wor->projectile->refreshrate = THROWN_ITEM_REFRESH_RATE; - + wor->runtime_bitflags |= RUNTIMEBITFLAG_THROWING_KNIFE_RELATED; } @@ -2322,7 +2338,7 @@ void generate_player_thrown_object(s32 hand) if ((wor->runtime_bitflags & RUNTIMEBITFLAG_DEPOSIT) != 0) { wor->projectile->flags = (s32) (wor->projectile->flags | 2); - + wor->projectile->unk8C = 0.1f; wor->projectile->refreshrate = THROWN_ITEM_REFRESH_RATE; @@ -2523,7 +2539,7 @@ glabel sub_GAME_7F05F73C /* 092644 7F05FC54 0FC1A25D */ jal bullet_path_from_screen_center /* 092648 7F05FC58 8FA600E8 */ lw $a2, 0xe8($sp) /* 09264C 7F05FC5C 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 092650 7F05FC60 00000000 */ nop +/* 092650 7F05FC60 00000000 */ nop /* 092654 7F05FC64 00402025 */ move $a0, $v0 /* 092658 7F05FC68 0FC16220 */ jal mtx4RotateVecInPlace /* 09265C 7F05FC6C 27A50038 */ addiu $a1, $sp, 0x38 @@ -2621,7 +2637,7 @@ glabel sub_GAME_7F05F73C .L7F05FDD4: /* 0927C4 7F05FDD4 27BD00E8 */ addiu $sp, $sp, 0xe8 /* 0927C8 7F05FDD8 03E00008 */ jr $ra -/* 0927CC 7F05FDDC 00000000 */ nop +/* 0927CC 7F05FDDC 00000000 */ nop ) #endif #endif @@ -2795,7 +2811,7 @@ glabel sub_GAME_7F05F928 /* 0928BC 7F05FECC 0FC16390 */ jal matrix_4x4_set_position /* 0928C0 7F05FED0 02402825 */ move $a1, $s2 /* 0928C4 7F05FED4 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 0928C8 7F05FED8 00000000 */ nop +/* 0928C8 7F05FED8 00000000 */ nop /* 0928CC 7F05FEDC 00402025 */ move $a0, $v0 /* 0928D0 7F05FEE0 02402825 */ move $a1, $s2 /* 0928D4 7F05FEE4 0FC1618D */ jal matrix_4x4_multiply_homogeneous @@ -3216,7 +3232,7 @@ glabel gunFireTankShell /* 092A7C 7F06008C 1501005E */ bne $t0, $at, .L7F060208 /* 092A80 7F060090 27A5004C */ addiu $a1, $sp, 0x4c /* 092A84 7F060094 0FC1F3D6 */ jal get_ptr_for_players_tank -/* 092A88 7F060098 00000000 */ nop +/* 092A88 7F060098 00000000 */ nop /* 092A8C 7F06009C 10400009 */ beqz $v0, .L7F0600C4 /* 092A90 7F0600A0 AFA20030 */ sw $v0, 0x30($sp) /* 092A94 7F0600A4 90490001 */ lbu $t1, 1($v0) @@ -3226,14 +3242,14 @@ glabel gunFireTankShell /* 092AA4 7F0600B4 0FC1F3E1 */ jal bondviewSet3dCoord7F07CEB0 /* 092AA8 7F0600B8 27A4004C */ addiu $a0, $sp, 0x4c /* 092AAC 7F0600BC 10000009 */ b .L7F0600E4 -/* 092AB0 7F0600C0 00000000 */ nop +/* 092AB0 7F0600C0 00000000 */ nop .L7F0600C4: /* 092AB4 7F0600C4 27A40058 */ addiu $a0, $sp, 0x58 .L7F0600C8: /* 092AB8 7F0600C8 0FC1A24E */ jal sub_GAME_7F068190 /* 092ABC 7F0600CC 27A5004C */ addiu $a1, $sp, 0x4c /* 092AC0 7F0600D0 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 092AC4 7F0600D4 00000000 */ nop +/* 092AC4 7F0600D4 00000000 */ nop /* 092AC8 7F0600D8 00402025 */ move $a0, $v0 /* 092ACC 7F0600DC 0FC16220 */ jal mtx4RotateVecInPlace /* 092AD0 7F0600E0 27A5004C */ addiu $a1, $sp, 0x4c @@ -3301,7 +3317,7 @@ glabel gunFireTankShell /* 092BC0 7F0601D0 0FC16247 */ jal mtx4TransformVecInPlace /* 092BC4 7F0601D4 27A50034 */ addiu $a1, $sp, 0x34 /* 092BC8 7F0601D8 10000007 */ b .L7F0601F8 -/* 092BCC 7F0601DC 00000000 */ nop +/* 092BCC 7F0601DC 00000000 */ nop /* 092BD0 7F0601E0 C4520008 */ lwc1 $f18, 8($v0) .L7F0601E4: /* 092BD4 7F0601E4 E7B20034 */ swc1 $f18, 0x34($sp) @@ -3311,14 +3327,14 @@ glabel gunFireTankShell /* 092BE4 7F0601F4 E7B0003C */ swc1 $f16, 0x3c($sp) .L7F0601F8: /* 092BE8 7F0601F8 0FC26F30 */ jal setSixExplosionAndSmokeEntries -/* 092BEC 7F0601FC 00000000 */ nop +/* 092BEC 7F0601FC 00000000 */ nop /* 092BF0 7F060200 1000003A */ b .L7F0602EC -/* 092BF4 7F060204 00000000 */ nop +/* 092BF4 7F060204 00000000 */ nop .L7F060208: /* 092BF8 7F060208 0FC1A25D */ jal bullet_path_from_screen_center /* 092BFC 7F06020C 8FA60108 */ lw $a2, 0x108($sp) /* 092C00 7F060210 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 092C04 7F060214 00000000 */ nop +/* 092C04 7F060214 00000000 */ nop /* 092C08 7F060218 00402025 */ move $a0, $v0 /* 092C0C 7F06021C 0FC16220 */ jal mtx4RotateVecInPlace /* 092C10 7F060220 27A5004C */ addiu $a1, $sp, 0x4c @@ -3389,7 +3405,7 @@ glabel gunFireTankShell /* 092D10 7F060320 8C620220 */ lw $v0, 0x220($v1) /* 092D14 7F060324 240400CA */ li $a0, 202 /* 092D18 7F060328 10400004 */ beqz $v0, .L7F06033C -/* 092D1C 7F06032C 00000000 */ nop +/* 092D1C 7F06032C 00000000 */ nop /* 092D20 7F060330 00402025 */ move $a0, $v0 /* 092D24 7F060334 10000004 */ b .L7F060348 /* 092D28 7F060338 AC6D0224 */ sw $t5, 0x224($v1) @@ -3478,7 +3494,7 @@ glabel gunFireTankShell .L7F060474: /* 092E64 7F060474 27BD0108 */ addiu $sp, $sp, 0x108 /* 092E68 7F060478 03E00008 */ jr $ra -/* 092E6C 7F06047C 00000000 */ nop +/* 092E6C 7F06047C 00000000 */ nop ) #endif #endif @@ -3563,6 +3579,7 @@ glabel jpt_weapon_bullet_type .word weapon_bullet_type_pistol .word weapon_bullet_type_none .word weapon_bullet_type_none +.size jpt_weapon_bullet_type, . - jpt_weapon_bullet_type .text glabel handles_firing_or_throwing_weapon_in_hand @@ -5348,6 +5365,8 @@ glabel jpt_weapon_bullet_type .word weapon_bullet_type_pistol .word weapon_bullet_type_none .word weapon_bullet_type_none +.size jpt_weapon_bullet_type, . - jpt_weapon_bullet_type + .text glabel handles_firing_or_throwing_weapon_in_hand /* 095058 7F0604E8 27BDFD58 */ addiu $sp, $sp, -0x2a8 @@ -7134,6 +7153,7 @@ glabel jpt_weapon_bullet_type .word weapon_bullet_type_pistol .word weapon_bullet_type_none .word weapon_bullet_type_none +.size jpt_weapon_bullet_type, . - jpt_weapon_bullet_type .text glabel handles_firing_or_throwing_weapon_in_hand @@ -8872,17 +8892,17 @@ void bondwalkFireBothHands(void) * @param item: * @param arg2: * @param arg3: - * + * * Address 0x7F061948. - * + * * This function adjusts the length of the bullet beam that's rendered on screen. * This function is used for both player and guard beams. - * + * * The watch laser has a very short beam, in accordance with its range. * The laser also has a shortened one, but it appears this is to avoid graphical glitches. * Other weapons have their bullet beam capped at 10000 max length, otherwise if the player * fires into the void, there may be graphical glitches with the beam. - * + * */ void CapBeamLengthAndDecideIfRendered(struct ChrRecord_f180 *arg0, ITEM_IDS item, coord3d *arg2, coord3d *arg3) { @@ -8897,12 +8917,12 @@ void CapBeamLengthAndDecideIfRendered(struct ChrRecord_f180 *arg0, ITEM_IDS item //arg0->delta.z = arg3->z - arg2->z; //phi_f12_2 = sqrtf((arg0->delta.f[0] * arg0->delta.f[0]) + (arg0->delta.f[1] * arg0->delta.f[1]) + (arg0->delta.f[2] * arg0->delta.f[2])); - + //arg0->delta.x *= 1.0f / phi_f12_2; //arg0->delta.y *= 1.0f / phi_f12_2; //arg0->delta.z *= 1.0f / phi_f12_2; - + arg0->pos.f[0] = arg2->f[0]; arg0->pos.f[1] = arg2->f[1]; arg0->pos.f[2] = arg2->f[2]; @@ -9472,7 +9492,7 @@ glabel sub_GAME_7F061E18 /* 096F38 7F062408 46007087 */ neg.s $f2, $f14 /* 096F3C 7F06240C 44051000 */ mfc1 $a1, $f2 /* 096F40 7F062410 E7A0008C */ swc1 $f0, 0x8c($sp) -/* 096F44 7F062414 0FC1E03C */ jal sub_GAME_7F0780F0 +/* 096F44 7F062414 0FC1E03C */ jal divide3DCoordinates /* 096F48 7F062418 E7A00088 */ swc1 $f0, 0x88($sp) /* 096F4C 7F06241C 3C014000 */ li $at, 0x40000000 # 2.000000 /* 096F50 7F062420 C7B00090 */ lwc1 $f16, 0x90($sp) @@ -9856,7 +9876,7 @@ glabel sub_GAME_7F061E18 /* 097524 7F0629F4 27A40160 */ addiu $a0, $sp, 0x160 /* 097528 7F0629F8 8D050000 */ lw $a1, ($t0) /* 09752C 7F0629FC 24060004 */ li $a2, 4 -/* 097530 7F062A00 0FC1DB5A */ jal likely_generate_DL_for_image_declaration +/* 097530 7F062A00 0FC1DB5A */ jal texSelect /* 097534 7F062A04 8FA70168 */ lw $a3, 0x168($sp) /* 097538 7F062A08 8FB10160 */ lw $s1, 0x160($sp) /* 09753C 7F062A0C 3C0D0470 */ lui $t5, (0x04700080 >> 16) # lui $t5, 0x470 @@ -9880,7 +9900,7 @@ glabel sub_GAME_7F061E18 /* 097584 7F062A54 8FA70168 */ lw $a3, 0x168($sp) /* 097588 7F062A58 8FA500B0 */ lw $a1, 0xb0($sp) /* 09758C 7F062A5C 27A40160 */ addiu $a0, $sp, 0x160 -/* 097590 7F062A60 0FC1DB5A */ jal likely_generate_DL_for_image_declaration +/* 097590 7F062A60 0FC1DB5A */ jal texSelect /* 097594 7F062A64 24060004 */ li $a2, 4 /* 097598 7F062A68 8FAA0160 */ lw $t2, 0x160($sp) /* 09759C 7F062A6C 3C0FB100 */ lui $t7, (0xB1000013 >> 16) # lui $t7, 0xb100 # gSP4Triangles(0,2,3,3,2,1,1,0,0,0,0 @@ -9895,7 +9915,7 @@ glabel sub_GAME_7F061E18 /* 0975BC 7F062A8C 24190002 */ li $t9, 2 /* 0975C0 7F062A90 AFB90010 */ sw $t9, 0x10($sp) /* 0975C4 7F062A94 24060004 */ li $a2, 4 -/* 0975C8 7F062A98 0FC1DB5A */ jal likely_generate_DL_for_image_declaration +/* 0975C8 7F062A98 0FC1DB5A */ jal texSelect /* 0975CC 7F062A9C 8FA70168 */ lw $a3, 0x168($sp) /* 0975D0 7F062AA0 8FB10160 */ lw $s1, 0x160($sp) /* 0975D4 7F062AA4 3C180430 */ lui $t8, (0x04300040 >> 16) # lui $t8, 0x430 @@ -10050,7 +10070,7 @@ glabel sub_GAME_7F061E18 .L7F06245C: /* 094E4C 7F06245C 3C0141F0 */ li $at, 0x41F00000 # 30.000000 /* 094E50 7F062460 44815000 */ mtc1 $at, $f10 -/* 094E54 7F062464 00000000 */ nop +/* 094E54 7F062464 00000000 */ nop /* 094E58 7F062468 E7AA00F4 */ swc1 $f10, 0xf4($sp) .L7F06246C: /* 094E5C 7F06246C C6240004 */ lwc1 $f4, 4($s1) @@ -10086,7 +10106,7 @@ glabel sub_GAME_7F061E18 /* 094EC8 7F0624D8 46140100 */ add.s $f4, $f0, $f20 /* 094ECC 7F0624DC C622001C */ lwc1 $f2, 0x1c($s1) /* 094ED0 7F0624E0 4604103C */ c.lt.s $f2, $f4 -/* 094ED4 7F0624E4 00000000 */ nop +/* 094ED4 7F0624E4 00000000 */ nop /* 094ED8 7F0624E8 45020003 */ bc1fl .L7F0624F8 /* 094EDC 7F0624EC C62C0018 */ lwc1 $f12, 0x18($s1) /* 094EE0 7F0624F0 46001501 */ sub.s $f20, $f2, $f0 @@ -10120,7 +10140,7 @@ glabel sub_GAME_7F061E18 /* 094F4C 7F06255C 46062180 */ add.s $f6, $f4, $f6 /* 094F50 7F062560 46064201 */ sub.s $f8, $f8, $f6 /* 094F54 7F062564 46086182 */ mul.s $f6, $f12, $f8 -/* 094F58 7F062568 00000000 */ nop +/* 094F58 7F062568 00000000 */ nop /* 094F5C 7F06256C 46146202 */ mul.s $f8, $f12, $f20 /* 094F60 7F062570 460A4200 */ add.s $f8, $f8, $f10 /* 094F64 7F062574 C44A0008 */ lwc1 $f10, 8($v0) @@ -10136,7 +10156,7 @@ glabel sub_GAME_7F061E18 /* 094F8C 7F06259C C4480004 */ lwc1 $f8, 4($v0) /* 094F90 7F0625A0 46064201 */ sub.s $f8, $f8, $f6 /* 094F94 7F0625A4 46080182 */ mul.s $f6, $f0, $f8 -/* 094F98 7F0625A8 00000000 */ nop +/* 094F98 7F0625A8 00000000 */ nop /* 094F9C 7F0625AC 46140202 */ mul.s $f8, $f0, $f20 /* 094FA0 7F0625B0 46044200 */ add.s $f8, $f8, $f4 /* 094FA4 7F0625B4 C4440000 */ lwc1 $f4, ($v0) @@ -10147,13 +10167,13 @@ glabel sub_GAME_7F061E18 /* 094FB8 7F0625C8 46067032 */ c.eq.s $f14, $f6 /* 094FBC 7F0625CC E7A400D8 */ swc1 $f4, 0xd8($sp) /* 094FC0 7F0625D0 45000008 */ bc1f .L7F0625F4 -/* 094FC4 7F0625D4 00000000 */ nop +/* 094FC4 7F0625D4 00000000 */ nop /* 094FC8 7F0625D8 460A7032 */ c.eq.s $f14, $f10 -/* 094FCC 7F0625DC 00000000 */ nop +/* 094FCC 7F0625DC 00000000 */ nop /* 094FD0 7F0625E0 45020005 */ bc1fl .L7F0625F8 /* 094FD4 7F0625E4 27A400D0 */ addiu $a0, $sp, 0xd0 /* 094FD8 7F0625E8 46047032 */ c.eq.s $f14, $f4 -/* 094FDC 7F0625EC 00000000 */ nop +/* 094FDC 7F0625EC 00000000 */ nop /* 094FE0 7F0625F0 4501000F */ bc1t .L7F062630 .L7F0625F4: /* 094FE4 7F0625F4 27A400D0 */ addiu $a0, $sp, 0xd0 @@ -10194,7 +10214,7 @@ glabel sub_GAME_7F061E18 /* 095064 7F062674 E7AA0038 */ swc1 $f10, 0x38($sp) /* 095068 7F062678 C62A0010 */ lwc1 $f10, 0x10($s1) /* 09506C 7F06267C 46062102 */ mul.s $f4, $f4, $f6 -/* 095070 7F062680 00000000 */ nop +/* 095070 7F062680 00000000 */ nop /* 095074 7F062684 460A4202 */ mul.s $f8, $f8, $f10 /* 095078 7F062688 46082281 */ sub.s $f10, $f4, $f8 /* 09507C 7F06268C C7A80038 */ lwc1 $f8, 0x38($sp) @@ -10219,7 +10239,7 @@ glabel sub_GAME_7F061E18 /* 0950C8 7F0626D8 E7AA00E4 */ swc1 $f10, 0xe4($sp) /* 0950CC 7F0626DC 822A0001 */ lb $t2, 1($s1) /* 0950D0 7F0626E0 15410005 */ bne $t2, $at, .L7F0626F8 -/* 0950D4 7F0626E4 00000000 */ nop +/* 0950D4 7F0626E4 00000000 */ nop /* 0950D8 7F0626E8 0FC2F29D */ jal dynAllocate7F0BD6C4 /* 0950DC 7F0626EC 24040008 */ li $a0, 8 /* 0950E0 7F0626F0 10000004 */ b .L7F062704 @@ -10230,7 +10250,7 @@ glabel sub_GAME_7F061E18 /* 0950F0 7F062700 00408025 */ move $s0, $v0 .L7F062704: /* 0950F4 7F062704 0FC2F2A4 */ jal dynAllocateMatrix -/* 0950F8 7F062708 00000000 */ nop +/* 0950F8 7F062708 00000000 */ nop /* 0950FC 7F06270C AFA20158 */ sw $v0, 0x158($sp) /* 095100 7F062710 27A400FC */ addiu $a0, $sp, 0xfc /* 095104 7F062714 0FC16383 */ jal matrix_4x4_set_identity_and_position @@ -10347,32 +10367,32 @@ glabel sub_GAME_7F061E18 /* 0952BC 7F0628CC 46007087 */ neg.s $f2, $f14 /* 0952C0 7F0628D0 44051000 */ mfc1 $a1, $f2 /* 0952C4 7F0628D4 E7A0008C */ swc1 $f0, 0x8c($sp) -/* 0952C8 7F0628D8 0FC1E05C */ jal sub_GAME_7F0780F0 +/* 0952C8 7F0628D8 0FC1E05C */ jal divide3DCoordinates /* 0952CC 7F0628DC E7A00088 */ swc1 $f0, 0x88($sp) /* 0952D0 7F0628E0 3C014000 */ li $at, 0x40000000 # 2.000000 /* 0952D4 7F0628E4 C7B00090 */ lwc1 $f16, 0x90($sp) /* 0952D8 7F0628E8 44812000 */ mtc1 $at, $f4 /* 0952DC 7F0628EC 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 0952E0 7F0628F0 4604803C */ c.lt.s $f16, $f4 -/* 0952E4 7F0628F4 00000000 */ nop +/* 0952E4 7F0628F4 00000000 */ nop /* 0952E8 7F0628F8 4500000E */ bc1f .L7F062934 -/* 0952EC 7F0628FC 00000000 */ nop +/* 0952EC 7F0628FC 00000000 */ nop /* 0952F0 7F062900 44815000 */ mtc1 $at, $f10 /* 0952F4 7F062904 C7A2009C */ lwc1 $f2, 0x9c($sp) /* 0952F8 7F062908 C7AC00A0 */ lwc1 $f12, 0xa0($sp) /* 0952FC 7F06290C 460A8002 */ mul.s $f0, $f16, $f10 /* 095300 7F062910 C7AE00A4 */ lwc1 $f14, 0xa4($sp) /* 095304 7F062914 46001082 */ mul.s $f2, $f2, $f0 -/* 095308 7F062918 00000000 */ nop +/* 095308 7F062918 00000000 */ nop /* 09530C 7F06291C 46006302 */ mul.s $f12, $f12, $f0 -/* 095310 7F062920 00000000 */ nop +/* 095310 7F062920 00000000 */ nop /* 095314 7F062924 46007382 */ mul.s $f14, $f14, $f0 /* 095318 7F062928 E7A2009C */ swc1 $f2, 0x9c($sp) /* 09531C 7F06292C E7AC00A0 */ swc1 $f12, 0xa0($sp) /* 095320 7F062930 E7AE00A4 */ swc1 $f14, 0xa4($sp) .L7F062934: /* 095324 7F062934 0FC1E131 */ jal currentPlayerGetMatrix10D4 -/* 095328 7F062938 00000000 */ nop +/* 095328 7F062938 00000000 */ nop /* 09532C 7F06293C 00402025 */ move $a0, $v0 /* 095330 7F062940 0FC16247 */ jal mtx4TransformVecInPlace /* 095334 7F062944 27A5009C */ addiu $a1, $sp, 0x9c @@ -10402,7 +10422,7 @@ glabel sub_GAME_7F061E18 /* 095390 7F0629A0 44812000 */ mtc1 $at, $f4 /* 095394 7F0629A4 C62A0010 */ lwc1 $f10, 0x10($s1) /* 095398 7F0629A8 4604A002 */ mul.s $f0, $f20, $f4 -/* 09539C 7F0629AC 00000000 */ nop +/* 09539C 7F0629AC 00000000 */ nop /* 0953A0 7F0629B0 46005202 */ mul.s $f8, $f10, $f0 /* 0953A4 7F0629B4 E7A800C4 */ swc1 $f8, 0xc4($sp) /* 0953A8 7F0629B8 C6260014 */ lwc1 $f6, 0x14($s1) @@ -10417,17 +10437,17 @@ glabel sub_GAME_7F061E18 /* 0953C8 7F0629D8 3C018005 */ lui $at, %hi(D_80053EB4) # $at, 0x8005 /* 0953CC 7F0629DC 4600310D */ trunc.w.s $f4, $f6 /* 0953D0 7F0629E0 44192000 */ mfc1 $t9, $f4 -/* 0953D4 7F0629E4 00000000 */ nop +/* 0953D4 7F0629E4 00000000 */ nop /* 0953D8 7F0629E8 A6190000 */ sh $t9, ($s0) /* 0953DC 7F0629EC C7AA00D4 */ lwc1 $f10, 0xd4($sp) /* 0953E0 7F0629F0 4600520D */ trunc.w.s $f8, $f10 /* 0953E4 7F0629F4 440E4000 */ mfc1 $t6, $f8 -/* 0953E8 7F0629F8 00000000 */ nop +/* 0953E8 7F0629F8 00000000 */ nop /* 0953EC 7F0629FC A60E0002 */ sh $t6, 2($s0) /* 0953F0 7F062A00 C7A600D8 */ lwc1 $f6, 0xd8($sp) /* 0953F4 7F062A04 4600310D */ trunc.w.s $f4, $f6 /* 0953F8 7F062A08 44092000 */ mfc1 $t1, $f4 -/* 0953FC 7F062A0C 00000000 */ nop +/* 0953FC 7F062A0C 00000000 */ nop /* 095400 7F062A10 A6090004 */ sh $t1, 4($s0) /* 095404 7F062A14 90AA0004 */ lbu $t2, 4($a1) /* 095408 7F062A18 A600000A */ sh $zero, 0xa($s0) @@ -10437,13 +10457,13 @@ glabel sub_GAME_7F061E18 /* 095418 7F062A28 46005207 */ neg.s $f8, $f10 /* 09541C 7F062A2C 4600418D */ trunc.w.s $f6, $f8 /* 095420 7F062A30 440D3000 */ mfc1 $t5, $f6 -/* 095424 7F062A34 00000000 */ nop +/* 095424 7F062A34 00000000 */ nop /* 095428 7F062A38 A60D0010 */ sh $t5, 0x10($s0) /* 09542C 7F062A3C C7A400D4 */ lwc1 $f4, 0xd4($sp) /* 095430 7F062A40 46002287 */ neg.s $f10, $f4 /* 095434 7F062A44 4600520D */ trunc.w.s $f8, $f10 /* 095438 7F062A48 440B4000 */ mfc1 $t3, $f8 -/* 09543C 7F062A4C 00000000 */ nop +/* 09543C 7F062A4C 00000000 */ nop /* 095440 7F062A50 A60B0012 */ sh $t3, 0x12($s0) /* 095444 7F062A54 C7A600D8 */ lwc1 $f6, 0xd8($sp) /* 095448 7F062A58 A6000018 */ sh $zero, 0x18($s0) @@ -10451,7 +10471,7 @@ glabel sub_GAME_7F061E18 /* 095450 7F062A60 46003107 */ neg.s $f4, $f6 /* 095454 7F062A64 4600228D */ trunc.w.s $f10, $f4 /* 095458 7F062A68 44185000 */ mfc1 $t8, $f10 -/* 09545C 7F062A6C 00000000 */ nop +/* 09545C 7F062A6C 00000000 */ nop /* 095460 7F062A70 A6180014 */ sh $t8, 0x14($s0) /* 095464 7F062A74 C7A800D0 */ lwc1 $f8, 0xd0($sp) /* 095468 7F062A78 C4269FF4 */ lwc1 $f6, %lo(D_80053EB4)($at) @@ -10461,7 +10481,7 @@ glabel sub_GAME_7F061E18 /* 095478 7F062A88 460A2200 */ add.s $f8, $f4, $f10 /* 09547C 7F062A8C 4600418D */ trunc.w.s $f6, $f8 /* 095480 7F062A90 440A3000 */ mfc1 $t2, $f6 -/* 095484 7F062A94 00000000 */ nop +/* 095484 7F062A94 00000000 */ nop /* 095488 7F062A98 A60A0020 */ sh $t2, 0x20($s0) /* 09548C 7F062A9C C7A400D4 */ lwc1 $f4, 0xd4($sp) /* 095490 7F062AA0 C42A9FF8 */ lwc1 $f10, %lo(D_80053EB8)($at) @@ -10471,7 +10491,7 @@ glabel sub_GAME_7F061E18 /* 0954A0 7F062AB0 46064100 */ add.s $f4, $f8, $f6 /* 0954A4 7F062AB4 4600228D */ trunc.w.s $f10, $f4 /* 0954A8 7F062AB8 440F5000 */ mfc1 $t7, $f10 -/* 0954AC 7F062ABC 00000000 */ nop +/* 0954AC 7F062ABC 00000000 */ nop /* 0954B0 7F062AC0 A60F0022 */ sh $t7, 0x22($s0) /* 0954B4 7F062AC4 C7A800D8 */ lwc1 $f8, 0xd8($sp) /* 0954B8 7F062AC8 C4269FFC */ lwc1 $f6, %lo(D_80053EBC)($at) @@ -10481,7 +10501,7 @@ glabel sub_GAME_7F061E18 /* 0954C8 7F062AD8 460A2200 */ add.s $f8, $f4, $f10 /* 0954CC 7F062ADC 4600418D */ trunc.w.s $f6, $f8 /* 0954D0 7F062AE0 44193000 */ mfc1 $t9, $f6 -/* 0954D4 7F062AE4 00000000 */ nop +/* 0954D4 7F062AE4 00000000 */ nop /* 0954D8 7F062AE8 A6190024 */ sh $t9, 0x24($s0) /* 0954DC 7F062AEC 90AB0004 */ lbu $t3, 4($a1) /* 0954E0 7F062AF0 000B7140 */ sll $t6, $t3, 5 @@ -10497,7 +10517,7 @@ glabel sub_GAME_7F061E18 /* 095508 7F062B18 46083101 */ sub.s $f4, $f6, $f8 /* 09550C 7F062B1C 4600228D */ trunc.w.s $f10, $f4 /* 095510 7F062B20 440C5000 */ mfc1 $t4, $f10 -/* 095514 7F062B24 00000000 */ nop +/* 095514 7F062B24 00000000 */ nop /* 095518 7F062B28 A60C0030 */ sh $t4, 0x30($s0) /* 09551C 7F062B2C C428A004 */ lwc1 $f8, %lo(D_80053EC4)($at) /* 095520 7F062B30 C7A600D4 */ lwc1 $f6, 0xd4($sp) @@ -10507,7 +10527,7 @@ glabel sub_GAME_7F061E18 /* 095530 7F062B40 46045181 */ sub.s $f6, $f10, $f4 /* 095534 7F062B44 4600320D */ trunc.w.s $f8, $f6 /* 095538 7F062B48 440D4000 */ mfc1 $t5, $f8 -/* 09553C 7F062B4C 00000000 */ nop +/* 09553C 7F062B4C 00000000 */ nop /* 095540 7F062B50 A60D0032 */ sh $t5, 0x32($s0) /* 095544 7F062B54 C424A008 */ lwc1 $f4, %lo(D_80053EC8)($at) /* 095548 7F062B58 C7AA00D8 */ lwc1 $f10, 0xd8($sp) @@ -10518,7 +10538,7 @@ glabel sub_GAME_7F061E18 /* 09555C 7F062B6C 46064281 */ sub.s $f10, $f8, $f6 /* 095560 7F062B70 4600510D */ trunc.w.s $f4, $f10 /* 095564 7F062B74 440B2000 */ mfc1 $t3, $f4 -/* 095568 7F062B78 00000000 */ nop +/* 095568 7F062B78 00000000 */ nop /* 09556C 7F062B7C A60B0034 */ sh $t3, 0x34($s0) /* 095570 7F062B80 90AE0005 */ lbu $t6, 5($a1) /* 095574 7F062B84 000EC140 */ sll $t8, $t6, 5 @@ -10559,7 +10579,7 @@ glabel sub_GAME_7F061E18 /* 095600 7F062C10 46143202 */ mul.s $f8, $f6, $f20 /* 095604 7F062C14 460A4180 */ add.s $f6, $f8, $f10 /* 095608 7F062C18 460E7202 */ mul.s $f8, $f14, $f14 -/* 09560C 7F062C1C 00000000 */ nop +/* 09560C 7F062C1C 00000000 */ nop /* 095610 7F062C20 46108282 */ mul.s $f10, $f16, $f16 /* 095614 7F062C24 46060481 */ sub.s $f18, $f0, $f6 /* 095618 7F062C28 460A4180 */ add.s $f6, $f8, $f10 @@ -10567,9 +10587,9 @@ glabel sub_GAME_7F061E18 /* 095620 7F062C30 46083280 */ add.s $f10, $f6, $f8 /* 095624 7F062C34 C7A600C4 */ lwc1 $f6, 0xc4($sp) /* 095628 7F062C38 4604503C */ c.lt.s $f10, $f4 -/* 09562C 7F062C3C 00000000 */ nop +/* 09562C 7F062C3C 00000000 */ nop /* 095630 7F062C40 4500000B */ bc1f .L7F062C70 -/* 095634 7F062C44 00000000 */ nop +/* 095634 7F062C44 00000000 */ nop /* 095638 7F062C48 C424A00C */ lwc1 $f4, %lo(D_80053ECC)($at) /* 09563C 7F062C4C E7A600B8 */ swc1 $f6, 0xb8($sp) /* 095640 7F062C50 3C018005 */ lui $at, %hi(D_80053ED0) # $at, 0x8005 @@ -10590,7 +10610,7 @@ glabel sub_GAME_7F061E18 /* 095678 7F062C88 46045180 */ add.s $f6, $f10, $f4 /* 09567C 7F062C8C 4600320D */ trunc.w.s $f8, $f6 /* 095680 7F062C90 440F4000 */ mfc1 $t7, $f8 -/* 095684 7F062C94 00000000 */ nop +/* 095684 7F062C94 00000000 */ nop /* 095688 7F062C98 A60F0040 */ sh $t7, 0x40($s0) /* 09568C 7F062C9C C7AA00E0 */ lwc1 $f10, 0xe0($sp) /* 095690 7F062CA0 C7A600BC */ lwc1 $f6, 0xbc($sp) @@ -10598,7 +10618,7 @@ glabel sub_GAME_7F061E18 /* 095698 7F062CA8 46062200 */ add.s $f8, $f4, $f6 /* 09569C 7F062CAC 4600428D */ trunc.w.s $f10, $f8 /* 0956A0 7F062CB0 44195000 */ mfc1 $t9, $f10 -/* 0956A4 7F062CB4 00000000 */ nop +/* 0956A4 7F062CB4 00000000 */ nop /* 0956A8 7F062CB8 A6190042 */ sh $t9, 0x42($s0) /* 0956AC 7F062CBC C7A400E4 */ lwc1 $f4, 0xe4($sp) /* 0956B0 7F062CC0 C7A800C0 */ lwc1 $f8, 0xc0($sp) @@ -10606,7 +10626,7 @@ glabel sub_GAME_7F061E18 /* 0956B8 7F062CC8 46083280 */ add.s $f10, $f6, $f8 /* 0956BC 7F062CCC 4600510D */ trunc.w.s $f4, $f10 /* 0956C0 7F062CD0 440E2000 */ mfc1 $t6, $f4 -/* 0956C4 7F062CD4 00000000 */ nop +/* 0956C4 7F062CD4 00000000 */ nop /* 0956C8 7F062CD8 A60E0044 */ sh $t6, 0x44($s0) /* 0956CC 7F062CDC 8D180000 */ lw $t8, ($t0) /* 0956D0 7F062CE0 93090004 */ lbu $t1, 4($t8) @@ -10622,7 +10642,7 @@ glabel sub_GAME_7F061E18 /* 0956F8 7F062D08 460A3101 */ sub.s $f4, $f6, $f10 /* 0956FC 7F062D0C 4600220D */ trunc.w.s $f8, $f4 /* 095700 7F062D10 440B4000 */ mfc1 $t3, $f8 -/* 095704 7F062D14 00000000 */ nop +/* 095704 7F062D14 00000000 */ nop /* 095708 7F062D18 A60B0050 */ sh $t3, 0x50($s0) /* 09570C 7F062D1C C7AA00E0 */ lwc1 $f10, 0xe0($sp) /* 095710 7F062D20 C7A600BC */ lwc1 $f6, 0xbc($sp) @@ -10630,7 +10650,7 @@ glabel sub_GAME_7F061E18 /* 095718 7F062D28 46043201 */ sub.s $f8, $f6, $f4 /* 09571C 7F062D2C 4600428D */ trunc.w.s $f10, $f8 /* 095720 7F062D30 44185000 */ mfc1 $t8, $f10 -/* 095724 7F062D34 00000000 */ nop +/* 095724 7F062D34 00000000 */ nop /* 095728 7F062D38 A6180052 */ sh $t8, 0x52($s0) /* 09572C 7F062D3C C7A400E4 */ lwc1 $f4, 0xe4($sp) /* 095730 7F062D40 C7A600C0 */ lwc1 $f6, 0xc0($sp) @@ -10640,7 +10660,7 @@ glabel sub_GAME_7F061E18 /* 095740 7F062D50 46083281 */ sub.s $f10, $f6, $f8 /* 095744 7F062D54 4600510D */ trunc.w.s $f4, $f10 /* 095748 7F062D58 440A2000 */ mfc1 $t2, $f4 -/* 09574C 7F062D5C 00000000 */ nop +/* 09574C 7F062D5C 00000000 */ nop /* 095750 7F062D60 A60A0054 */ sh $t2, 0x54($s0) /* 095754 7F062D64 C7A600D0 */ lwc1 $f6, 0xd0($sp) /* 095758 7F062D68 C7AA00B8 */ lwc1 $f10, 0xb8($sp) @@ -10648,7 +10668,7 @@ glabel sub_GAME_7F061E18 /* 095760 7F062D70 460A4100 */ add.s $f4, $f8, $f10 /* 095764 7F062D74 4600218D */ trunc.w.s $f6, $f4 /* 095768 7F062D78 440F3000 */ mfc1 $t7, $f6 -/* 09576C 7F062D7C 00000000 */ nop +/* 09576C 7F062D7C 00000000 */ nop /* 095770 7F062D80 A60F0060 */ sh $t7, 0x60($s0) /* 095774 7F062D84 C7A800D4 */ lwc1 $f8, 0xd4($sp) /* 095778 7F062D88 C7A400BC */ lwc1 $f4, 0xbc($sp) @@ -10656,7 +10676,7 @@ glabel sub_GAME_7F061E18 /* 095780 7F062D90 46045180 */ add.s $f6, $f10, $f4 /* 095784 7F062D94 4600320D */ trunc.w.s $f8, $f6 /* 095788 7F062D98 44194000 */ mfc1 $t9, $f8 -/* 09578C 7F062D9C 00000000 */ nop +/* 09578C 7F062D9C 00000000 */ nop /* 095790 7F062DA0 A6190062 */ sh $t9, 0x62($s0) /* 095794 7F062DA4 C7AA00D8 */ lwc1 $f10, 0xd8($sp) /* 095798 7F062DA8 C7A600C0 */ lwc1 $f6, 0xc0($sp) @@ -10665,7 +10685,7 @@ glabel sub_GAME_7F061E18 /* 0957A4 7F062DB4 46062200 */ add.s $f8, $f4, $f6 /* 0957A8 7F062DB8 4600428D */ trunc.w.s $f10, $f8 /* 0957AC 7F062DBC 440E5000 */ mfc1 $t6, $f10 -/* 0957B0 7F062DC0 00000000 */ nop +/* 0957B0 7F062DC0 00000000 */ nop /* 0957B4 7F062DC4 A60E0064 */ sh $t6, 0x64($s0) /* 0957B8 7F062DC8 8D180000 */ lw $t8, ($t0) /* 0957BC 7F062DCC 93090005 */ lbu $t1, 5($t8) @@ -10677,7 +10697,7 @@ glabel sub_GAME_7F061E18 /* 0957D4 7F062DE4 46082281 */ sub.s $f10, $f4, $f8 /* 0957D8 7F062DE8 4600518D */ trunc.w.s $f6, $f10 /* 0957DC 7F062DEC 440F3000 */ mfc1 $t7, $f6 -/* 0957E0 7F062DF0 00000000 */ nop +/* 0957E0 7F062DF0 00000000 */ nop /* 0957E4 7F062DF4 A60F0070 */ sh $t7, 0x70($s0) /* 0957E8 7F062DF8 C7A800D4 */ lwc1 $f8, 0xd4($sp) /* 0957EC 7F062DFC C7A400BC */ lwc1 $f4, 0xbc($sp) @@ -10685,7 +10705,7 @@ glabel sub_GAME_7F061E18 /* 0957F4 7F062E04 460A2181 */ sub.s $f6, $f4, $f10 /* 0957F8 7F062E08 4600320D */ trunc.w.s $f8, $f6 /* 0957FC 7F062E0C 44194000 */ mfc1 $t9, $f8 -/* 095800 7F062E10 00000000 */ nop +/* 095800 7F062E10 00000000 */ nop /* 095804 7F062E14 A6190072 */ sh $t9, 0x72($s0) /* 095808 7F062E18 C7AA00D8 */ lwc1 $f10, 0xd8($sp) /* 09580C 7F062E1C C7A400C0 */ lwc1 $f4, 0xc0($sp) @@ -10693,7 +10713,7 @@ glabel sub_GAME_7F061E18 /* 095814 7F062E24 46062201 */ sub.s $f8, $f4, $f6 /* 095818 7F062E28 4600428D */ trunc.w.s $f10, $f8 /* 09581C 7F062E2C 440E5000 */ mfc1 $t6, $f10 -/* 095820 7F062E30 00000000 */ nop +/* 095820 7F062E30 00000000 */ nop /* 095824 7F062E34 A60E0074 */ sh $t6, 0x74($s0) /* 095828 7F062E38 8D180000 */ lw $t8, ($t0) /* 09582C 7F062E3C 93090004 */ lbu $t1, 4($t8) @@ -10731,7 +10751,7 @@ glabel sub_GAME_7F061E18 /* 0958A8 7F062EB8 27A40160 */ addiu $a0, $sp, 0x160 /* 0958AC 7F062EBC 8D050000 */ lw $a1, ($t0) /* 0958B0 7F062EC0 24060004 */ li $a2, 4 -/* 0958B4 7F062EC4 0FC1DB7A */ jal likely_generate_DL_for_image_declaration +/* 0958B4 7F062EC4 0FC1DB7A */ jal texSelect /* 0958B8 7F062EC8 8FA70168 */ lw $a3, 0x168($sp) /* 0958BC 7F062ECC 8FB10160 */ lw $s1, 0x160($sp) /* 0958C0 7F062ED0 3C0D0470 */ lui $t5, (0x04700080 >> 16) # lui $t5, 0x470 @@ -10755,7 +10775,7 @@ glabel sub_GAME_7F061E18 /* 095908 7F062F18 8FA70168 */ lw $a3, 0x168($sp) /* 09590C 7F062F1C 8FA500B0 */ lw $a1, 0xb0($sp) /* 095910 7F062F20 27A40160 */ addiu $a0, $sp, 0x160 -/* 095914 7F062F24 0FC1DB7A */ jal likely_generate_DL_for_image_declaration +/* 095914 7F062F24 0FC1DB7A */ jal texSelect /* 095918 7F062F28 24060004 */ li $a2, 4 /* 09591C 7F062F2C 8FAA0160 */ lw $t2, 0x160($sp) /* 095920 7F062F30 3C0FB100 */ lui $t7, (0xB1000013 >> 16) # lui $t7, 0xb100 @@ -10770,7 +10790,7 @@ glabel sub_GAME_7F061E18 /* 095940 7F062F50 24190002 */ li $t9, 2 /* 095944 7F062F54 AFB90010 */ sw $t9, 0x10($sp) /* 095948 7F062F58 24060004 */ li $a2, 4 -/* 09594C 7F062F5C 0FC1DB7A */ jal likely_generate_DL_for_image_declaration +/* 09594C 7F062F5C 0FC1DB7A */ jal texSelect /* 095950 7F062F60 8FA70168 */ lw $a3, 0x168($sp) /* 095954 7F062F64 8FB10160 */ lw $s1, 0x160($sp) /* 095958 7F062F68 3C180430 */ lui $t8, (0x04300040 >> 16) # lui $t8, 0x430 @@ -10801,7 +10821,9 @@ glabel sub_GAME_7F061E18 #endif #endif - +/* +* Address: 0x7F062B00 +*/ void sub_GAME_7F062B00(ChrRecord_f180* arg0) { if (arg0->unk00 >= 0) @@ -11370,7 +11392,7 @@ glabel sub_GAME_7F062BE4 /* 095E28 7F063438 0FC2300F */ jal bondviewTransformManyPosToViewMatrix /* 095E2C 7F06343C 85A5000E */ lh $a1, 0xe($t5) /* 095E30 7F063440 0FC1644C */ jal matrix_4x4_7F058C88 -/* 095E34 7F063444 00000000 */ nop +/* 095E34 7F063444 00000000 */ nop /* 095E38 7F063448 3C0CBC00 */ lui $t4, (0xBC00000E >> 16) # lui $t4, 0xbc00 /* 095E3C 7F06344C 358C000E */ ori $t4, (0xBC00000E & 0xFFFF) # ori $t4, $t4, 0xe /* 095E40 7F063450 02008825 */ move $s1, $s0 @@ -13096,7 +13118,7 @@ void sub_GAME_7F0649D8(enum GUNHAND hand) currentPlayerCreateRocket(hand); return; } - + if ((item_id == ITEM_SHOTGUN) || (item_id == ITEM_AUTOSHOT)) { ammo_in_hands = get_ammo_in_hands_weapon(hand); @@ -13272,6 +13294,7 @@ glabel jpt_80054084 .word Weapon_shooting_throwable .word Weapon_shooting_throwable .word Weapon_shooting_watch_magnet +.size jpt_80054084, . - jpt_80054084 glabel D_80054170 .word 0x40c90fdb /*6.2831855*/ @@ -13356,6 +13379,7 @@ glabel jpt_80054194 .word weapon_playsfx_gun .word weapon_switchstyle_NONE .word weapon_switchstyle_NONE +.size jpt_80054194, . - jpt_80054194 glabel D_8005428C .word 0x3f32b8c3 /*0.69813174*/ @@ -16105,6 +16129,7 @@ glabel jpt_80054084 .word Weapon_shooting_throwable .word Weapon_shooting_throwable .word Weapon_shooting_watch_magnet +.size jpt_80054084, . - jpt_80054084 glabel D_80054170 .word 0x40c90fdb /*6.2831855*/ @@ -16189,6 +16214,7 @@ glabel jpt_80054194 .word weapon_playsfx_gun .word weapon_switchstyle_NONE .word weapon_switchstyle_NONE +.size jpt_80054194, . - jpt_80054194 glabel D_8005428C .word 0x3f32b8c3 /*0.69813174*/ @@ -18963,6 +18989,7 @@ glabel jpt_80054084 .word Weapon_shooting_throwable .word Weapon_shooting_throwable .word Weapon_shooting_watch_magnet +.size jpt_80054084, . - jpt_80054084 glabel D_80054170 .word 0x40c90fdb /*6.2831855*/ @@ -19047,6 +19074,7 @@ glabel jpt_80054194 .word weapon_playsfx_gun .word weapon_switchstyle_NONE .word weapon_switchstyle_NONE +.size jpt_80054194, . - jpt_80054194 glabel D_8005428C .word 0x3f32b8c3 /*0.69813174*/ @@ -21833,15 +21861,15 @@ void analyzeGEKey(void) { if (bondinvHasGEKey()) { - HUDMESSAGEBOTTOM(langGet(TEXT(LGUN, GUN_STR_D8))); //Analyzing the GoldenEye key... - g_CurrentPlayer->copiedgoldeneye = 1; + HUDMESSAGEBOTTOM(langGet(getStringID(LGUN, GUN_STR_D8_ANALYZINGTHEGOLDENEYEKEY_LF))); //Analyzing the GoldenEye key... + g_CurrentPlayer->copiedgoldeneye = TRUE; sndPlaySfx(g_musicSfxBufferPtr, 0xf5, 0x0); currentPlayerEquipWeaponWrapper(GUNRIGHT, ITEM_GOLDENEYEKEY); currentPlayerEquipWeaponWrapper(GUNLEFT, ITEM_UNARMED); } else { - HUDMESSAGEBOTTOM(langGet(TEXT(LGUN, GUN_STR_D9))); //You do not have the GoldenEye key. + HUDMESSAGEBOTTOM(langGet(getStringID(LGUN, GUN_STR_D9_YOUDONOTHAVETHEGOLDENEYEKEY_LF))); //You do not have the GoldenEye key. sub_GAME_7F05D690(); } return; @@ -22047,10 +22075,10 @@ void gunTickGameplay(s32 triggerOn) enum ITEM_IDS sp40; enum GUNHAND sp3C = GUNLEFT; struct rgba_u8 sp38; - + sp48z = D_80035E9C; - + g_CurrentPlayer->field_FD0 = g_CurrentPlayer->field_FCC; g_CurrentPlayer->field_FCC = triggerOn; @@ -22073,7 +22101,7 @@ void gunTickGameplay(s32 triggerOn) if (g_CurrentPlayer->z_trigger_timer > DUAL_WIELD_TRIGGER_SWAP_TICKS) { sp48z.arr[g_CurrentPlayer->field_FD8] = sp3C; - + if (sub_GAME_7F0673B4(1 - g_CurrentPlayer->field_FD8) || g_CurrentPlayer->hands[1 - g_CurrentPlayer->field_FD8].weapon_hold_time) { sp48z.arr[1 - g_CurrentPlayer->field_FD8] = 1; @@ -22081,12 +22109,12 @@ void gunTickGameplay(s32 triggerOn) } else { - if ((g_CurrentPlayer->field_FD0 == 0) && + if ((g_CurrentPlayer->field_FD0 == 0) && ((sub_GAME_7F0673B4(1 - g_CurrentPlayer->field_FD8) != 0) || (sub_GAME_7F0673B4(g_CurrentPlayer->field_FD8) == 0))) { g_CurrentPlayer->field_FD8 = 1 - g_CurrentPlayer->field_FD8; } - + sp48z.arr[g_CurrentPlayer->field_FD8] = 1; sp48z.arr[1 - g_CurrentPlayer->field_FD8] = 0; } @@ -22096,7 +22124,7 @@ void gunTickGameplay(s32 triggerOn) if (g_CurrentPlayer->z_trigger_timer > DUAL_WIELD_SINGLE_TRIGGER_SWAP_TICKS) { sp48z.arr[g_CurrentPlayer->field_FD8] = sp3C; - + if ((sub_GAME_7F0673B4(1 - g_CurrentPlayer->field_FD8) != 0) || g_CurrentPlayer->hands[1 - g_CurrentPlayer->field_FD8].weapon_hold_time != 0) { sp48z.arr[1 - g_CurrentPlayer->field_FD8] = 1; @@ -22105,7 +22133,7 @@ void gunTickGameplay(s32 triggerOn) else { sp3C = bondwalkItemCheckBitflags(sp44, 0x80U) ? GUNRIGHT : GUNLEFT; - + if (sub_GAME_7F0673B4(sp3C) != 0 || g_CurrentPlayer->hands[sp3C].weapon_hold_time != 0) { g_CurrentPlayer->field_FD8 = sp3C; @@ -22121,7 +22149,7 @@ void gunTickGameplay(s32 triggerOn) g_CurrentPlayer->field_FD8 = 1 - g_CurrentPlayer->field_FD8; } } - + sp48z.arr[g_CurrentPlayer->field_FD8] = 1; sp48z.arr[1 - g_CurrentPlayer->field_FD8] = 0; } @@ -22142,7 +22170,7 @@ void gunTickGameplay(s32 triggerOn) { g_CurrentPlayer->field_FD8 = 1 - g_CurrentPlayer->field_FD8; } - + sp48z.arr[g_CurrentPlayer->field_FD8] = 1; sp48z.arr[1 - g_CurrentPlayer->field_FD8] = 0; } @@ -22153,7 +22181,7 @@ void gunTickGameplay(s32 triggerOn) { g_CurrentPlayer->field_FD8 = 1 - g_CurrentPlayer->field_FD8; } - + sp48z.arr[g_CurrentPlayer->field_FD8] = 1; sp48z.arr[1 - g_CurrentPlayer->field_FD8] = 0; } @@ -22168,11 +22196,11 @@ void gunTickGameplay(s32 triggerOn) used_to_load_1st_person_model_on_demand(0); used_to_load_1st_person_model_on_demand(1); sub_GAME_7F0671A4(); - - if (g_CurrentPlayer->resetshadecol != 0) + + if (g_CurrentPlayer->resetshadecol) { set_color_shading_from_tile(get_curplayer_positiondata(), (struct rgba_u8 *) &g_CurrentPlayer->tileColor); - g_CurrentPlayer->resetshadecol = 0; + g_CurrentPlayer->resetshadecol = FALSE; } else { @@ -22207,7 +22235,7 @@ void gunTickGameplay(s32 triggerOn) else { g_CurrentPlayer->magnetattracttime = -1; - + if (sp34->audioHandle != NULL) { if (sndGetPlayingState((struct ALSoundState *) sp34->audioHandle) != 0) @@ -22215,7 +22243,7 @@ void gunTickGameplay(s32 triggerOn) sndDeactivate((struct ALSoundState *) sp34->audioHandle); } } - } + } } } @@ -22318,7 +22346,7 @@ void caclulate_gun_crosshair_position_rotation(f32 turn_x, f32 turn_y, f32 guncr g_CurrentPlayer->field_FFC.x += getPlayer_c_screenleft(); g_CurrentPlayer->field_FFC.y += getPlayer_c_screentop(); - sub_GAME_7F077EEC(&g_CurrentPlayer->field_FFC, &coords, 1000.0f); + transformAndNormalizeByLength2Dto3D(&g_CurrentPlayer->field_FFC, &coords, 1000.0f); sub_GAME_7F067AB4(&coords); } @@ -22368,6 +22396,9 @@ void sub_GAME_7F067FBC(f32 turn_x, f32 turn_y) +/* +* Address: 0x7f068008 +*/ void get_bullet_angle(f32* horizontal_angle, f32* vertical_angle) { *horizontal_angle = g_CurrentPlayer->crosshair_angle.f[0]; *vertical_angle = g_CurrentPlayer->crosshair_angle.f[1]; @@ -22388,7 +22419,7 @@ void sub_GAME_7F06802C(void) g_CurrentPlayer->crosshair_angle.y = tmp; g_CurrentPlayer->field_FFC.y = tmp; - sub_GAME_7F077EEC((coord2d *) &g_CurrentPlayer->field_FFC, &coord, 1000.0f); + transformAndNormalizeByLength2Dto3D((coord2d *) &g_CurrentPlayer->field_FFC, &coord, 1000.0f); sub_GAME_7F067AB4(&coord); } @@ -22406,7 +22437,7 @@ void sub_GAME_7F0680D4(coord3d * coord) tmp.x = g_CurrentPlayer->field_101C.m[2][0] * 1000.0f; tmp.y = g_CurrentPlayer->field_101C.m[2][1] * 1000.0f; tmp.z = g_CurrentPlayer->field_101C.m[2][2] * 1000.0f; - sub_GAME_7F077FF4(&tmp, (coord3d* ) &g_CurrentPlayer->crosshair_angle); + transform3Dto2DCoords(&tmp, (coord3d* ) &g_CurrentPlayer->crosshair_angle); g_CurrentPlayer->field_FFC.x = g_CurrentPlayer->crosshair_angle.x; g_CurrentPlayer->field_FFC.y = g_CurrentPlayer->crosshair_angle.y; @@ -22425,10 +22456,13 @@ void sub_GAME_7F068190(coord3d *zeropos, coord3d *vec) zeropos->y = 0.0f; zeropos->z = 0.0f; - sub_GAME_7F077EEC(&g_CurrentPlayer->crosshair_angle, vec, 1.0f); + transformAndNormalizeByLength2Dto3D(&g_CurrentPlayer->crosshair_angle, vec, 1.0f); } - +/* +* Address: 0x7f0681cc +* This function computes the angle the player's bullets are fired at +*/ void bullet_path_from_screen_center(coord3d* arg0, coord3d* result, enum GUNHAND arg2) { coord2d crosspos; @@ -22460,10 +22494,13 @@ void bullet_path_from_screen_center(coord3d* arg0, coord3d* result, enum GUNHAND // Result is a normalized vector describing the path the bullet will follow // Can be used to compute x,y,z displacement off the center of the screen if done for a projectile - sub_GAME_7F077EEC(&crosspos, result, 1.0f); + transformAndNormalizeByLength2Dto3D(&crosspos, result, 1.0f); } +/* +* Address: 0x7f068420 +*/ CasingRecord* casingCreate(ModelFileHeader* header, Mtxf* mtx) { CasingRecord* entry = g_Casings; @@ -23964,7 +24001,7 @@ glabel sub_GAME_7F068EC4 /* 09C108 7F069718 0FC16390 */ jal matrix_4x4_set_position /* 09C10C 7F06971C 24840004 */ addiu $a0, $a0, 4 /* 09C110 7F069720 0FC1E111 */ jal camGetWorldToScreenMtxf -/* 09C114 7F069724 00000000 */ nop +/* 09C114 7F069724 00000000 */ nop /* 09C118 7F069728 00402025 */ move $a0, $v0 /* 09C11C 7F06972C 27A5003C */ addiu $a1, $sp, 0x3c /* 09C120 7F069730 0FC1618D */ jal matrix_4x4_multiply_homogeneous @@ -23980,16 +24017,16 @@ glabel sub_GAME_7F068EC4 /* 09C144 7F069754 C4600030 */ lwc1 $f0, 0x30($v1) /* 09C148 7F069758 24420004 */ addiu $v0, $v0, 4 /* 09C14C 7F06975C 4600103C */ c.lt.s $f2, $f0 -/* 09C150 7F069760 00000000 */ nop +/* 09C150 7F069760 00000000 */ nop /* 09C154 7F069764 45020004 */ bc1fl .L7F069778 /* 09C158 7F069768 460C003C */ c.lt.s $f0, $f12 /* 09C15C 7F06976C 10000006 */ b .L7F069788 /* 09C160 7F069770 00008025 */ move $s0, $zero /* 09C164 7F069774 460C003C */ c.lt.s $f0, $f12 .L7F069778: -/* 09C168 7F069778 00000000 */ nop +/* 09C168 7F069778 00000000 */ nop /* 09C16C 7F06977C 45000002 */ bc1f .L7F069788 -/* 09C170 7F069780 00000000 */ nop +/* 09C170 7F069780 00000000 */ nop /* 09C174 7F069784 00008025 */ move $s0, $zero .L7F069788: /* 09C178 7F069788 1444FFF2 */ bne $v0, $a0, .L7F069754 @@ -24030,7 +24067,7 @@ glabel sub_GAME_7F068EC4 /* 09C200 7F069810 8FB00018 */ lw $s0, 0x18($sp) /* 09C204 7F069814 27BD00E8 */ addiu $sp, $sp, 0xe8 /* 09C208 7F069818 03E00008 */ jr $ra -/* 09C20C 7F06981C 00000000 */ nop +/* 09C20C 7F06981C 00000000 */ nop ) #endif #endif @@ -24327,8 +24364,8 @@ void *microcode_generation_ammo_related(void *arg0, void *arg1, f32 arg2, f32 ar phi_a2 = 2; } // Node 19 - likely_generate_DL_for_image_declaration(arg3, arg2, &arg0, arg1, phi_a2, 0, 0); - display_image_at_on_screen_coord(&arg0, &spB0, &spA8, arg1->unk4, (s32) arg1->unk5, 0, 0, 1, arg8, arg9, argA, argB, (s32) (0 < arg1->unk6), 0); + texSelect(arg3, arg2, &arg0, arg1, phi_a2, 0, 0); + display_image_at_position(&arg0, &spB0, &spA8, arg1->unk4, (s32) arg1->unk5, 0, 0, 1, arg8, arg9, argA, argB, (s32) (0 < arg1->unk6), 0); arg0 = (void *) (arg0 + 8); arg0->unk4 = 0; *arg0 = 0xe7000000;//gDPPipeSync(glistp++); @@ -24600,7 +24637,7 @@ glabel microcode_generation_ammo_related /* 09E3A4 7F069874 10000001 */ b .L7F06987C /* 09E3A8 7F069878 24060002 */ li $a2, 2 .L7F06987C: -/* 09E3AC 7F06987C 0FC1DB5A */ jal likely_generate_DL_for_image_declaration +/* 09E3AC 7F06987C 0FC1DB5A */ jal texSelect /* 09E3B0 7F069880 AFA00010 */ sw $zero, 0x10($sp) /* 09E3B4 7F069884 92180005 */ lbu $t8, 5($s0) /* 09E3B8 7F069888 92070004 */ lbu $a3, 4($s0) @@ -24623,7 +24660,7 @@ glabel microcode_generation_ammo_related /* 09E3FC 7F0698CC 0009682A */ slt $t5, $zero, $t1 /* 09E400 7F0698D0 AFAD0030 */ sw $t5, 0x30($sp) /* 09E404 7F0698D4 27A500B0 */ addiu $a1, $sp, 0xb0 -/* 09E408 7F0698D8 0FC1ABFA */ jal display_image_at_on_screen_coord +/* 09E408 7F0698D8 0FC1ABFA */ jal display_image_at_position /* 09E40C 7F0698DC 27A600A8 */ addiu $a2, $sp, 0xa8 /* 09E410 7F0698E0 8FAE00B8 */ lw $t6, 0xb8($sp) /* 09E414 7F0698E4 3C18E700 */ lui $t8, 0xe700 @@ -24752,7 +24789,7 @@ Gfx *gunDrawHudString(Gfx *gdl, s8 *text, s32 x, s32 halign, s32 y, s32 valign, y2 = 0; textwidth = 0; textheight = 0; - + textMeasure(&textheight, &textwidth, text, ptrFontBankGothicChars, ptrFontBankGothic, 0); if (halign == HUDHALIGN_LEFT) { // left @@ -25527,7 +25564,7 @@ glabel generate_ammo_total_microcode /* 09CED8 7F06A4E8 AFB90054 */ sw $t9, 0x54($sp) .L7F06A4EC: /* 09CEDC 7F06A4EC 0FC269A4 */ jal get_cur_playernum -/* 09CEE0 7F06A4F0 00000000 */ nop +/* 09CEE0 7F06A4F0 00000000 */ nop /* 09CEE4 7F06A4F4 30480001 */ andi $t0, $v0, 1 /* 09CEE8 7F06A4F8 11000006 */ beqz $t0, .L7F06A514 /* 09CEEC 7F06A4FC 240B003B */ li $t3, 59 @@ -25652,7 +25689,7 @@ glabel generate_ammo_total_microcode /* 09D0B0 7F06A6C0 54400023 */ bnezl $v0, .L7F06A750 /* 09D0B4 7F06A6C4 8FAD0050 */ lw $t5, 0x50($sp) /* 09D0B8 7F06A6C8 0C000FD9 */ jal viGetViewLeft -/* 09D0BC 7F06A6CC 00000000 */ nop +/* 09D0BC 7F06A6CC 00000000 */ nop /* 09D0C0 7F06A6D0 0C000FBB */ jal viGetViewWidth /* 09D0C4 7F06A6D4 A7A2002C */ sh $v0, 0x2c($sp) /* 09D0C8 7F06A6D8 0C000FDD */ jal viGetViewTop @@ -25689,14 +25726,14 @@ glabel generate_ammo_total_microcode .L7F06A750: /* 09D140 7F06A750 8FA40060 */ lw $a0, 0x60($sp) /* 09D144 7F06A754 1DA00005 */ bgtz $t5, .L7F06A76C -/* 09D148 7F06A758 00000000 */ nop +/* 09D148 7F06A758 00000000 */ nop /* 09D14C 7F06A75C 0FC1795B */ jal bondwalkItemCheckBitflags /* 09D150 7F06A760 3C050040 */ lui $a1, 0x40 /* 09D154 7F06A764 10400023 */ beqz $v0, .L7F06A7F4 -/* 09D158 7F06A768 00000000 */ nop +/* 09D158 7F06A768 00000000 */ nop .L7F06A76C: /* 09D15C 7F06A76C 0C000FD9 */ jal viGetViewLeft -/* 09D160 7F06A770 00000000 */ nop +/* 09D160 7F06A770 00000000 */ nop /* 09D164 7F06A774 0C000FBB */ jal viGetViewWidth /* 09D168 7F06A778 A7A2002C */ sh $v0, 0x2c($sp) /* 09D16C 7F06A77C 0C000FDD */ jal viGetViewTop @@ -25740,7 +25777,7 @@ glabel generate_ammo_total_microcode /* 09D1F4 7F06A804 508000AC */ beql $a0, $zero, .L7F06AAB8 /* 09D1F8 7F06A808 8FBF0024 */ lw $ra, 0x24($sp) /* 09D1FC 7F06A80C 0FC1A6F0 */ jal get_ammo_type_for_weapon -/* 09D200 7F06A810 00000000 */ nop +/* 09D200 7F06A810 00000000 */ nop /* 09D204 7F06A814 104000A7 */ beqz $v0, .L7F06AAB4 /* 09D208 7F06A818 AFA2005C */ sw $v0, 0x5c($sp) /* 09D20C 7F06A81C 3C198007 */ lui $t9, %hi(g_CurrentPlayer) # $t9, 0x8007 @@ -25844,7 +25881,7 @@ glabel generate_ammo_total_microcode /* 09D384 7F06A994 5440001F */ bnezl $v0, .L7F06AA14 /* 09D388 7F06A998 8FAC0050 */ lw $t4, 0x50($sp) /* 09D38C 7F06A99C 0C000FD9 */ jal viGetViewLeft -/* 09D390 7F06A9A0 00000000 */ nop +/* 09D390 7F06A9A0 00000000 */ nop /* 09D394 7F06A9A4 0C000FDD */ jal viGetViewTop /* 09D398 7F06A9A8 A7A2002E */ sh $v0, 0x2e($sp) /* 09D39C 7F06A9AC 0C000FBF */ jal viGetViewHeight @@ -25877,14 +25914,14 @@ glabel generate_ammo_total_microcode .L7F06AA14: /* 09D404 7F06AA14 8FA40064 */ lw $a0, 0x64($sp) /* 09D408 7F06AA18 1D800005 */ bgtz $t4, .L7F06AA30 -/* 09D40C 7F06AA1C 00000000 */ nop +/* 09D40C 7F06AA1C 00000000 */ nop /* 09D410 7F06AA20 0FC1795B */ jal bondwalkItemCheckBitflags /* 09D414 7F06AA24 3C050040 */ lui $a1, 0x40 /* 09D418 7F06AA28 1040001F */ beqz $v0, .L7F06AAA8 -/* 09D41C 7F06AA2C 00000000 */ nop +/* 09D41C 7F06AA2C 00000000 */ nop .L7F06AA30: /* 09D420 7F06AA30 0C000FD9 */ jal viGetViewLeft -/* 09D424 7F06AA34 00000000 */ nop +/* 09D424 7F06AA34 00000000 */ nop /* 09D428 7F06AA38 0C000FDD */ jal viGetViewTop /* 09D42C 7F06AA3C A7A2002E */ sh $v0, 0x2e($sp) /* 09D430 7F06AA40 0C000FBF */ jal viGetViewHeight @@ -25924,7 +25961,7 @@ glabel generate_ammo_total_microcode /* 09D4A8 7F06AAB8 8FA20068 */ lw $v0, 0x68($sp) /* 09D4AC 7F06AABC 27BD0068 */ addiu $sp, $sp, 0x68 /* 09D4B0 7F06AAC0 03E00008 */ jr $ra -/* 09D4B4 7F06AAC4 00000000 */ nop +/* 09D4B4 7F06AAC4 00000000 */ nop ) #endif #endif @@ -26285,7 +26322,7 @@ glabel sub_GAME_7F06A334 /* 09D558 7F06AB68 8FA30040 */ lw $v1, 0x40($sp) /* 09D55C 7F06AB6C 3C0A8007 */ lui $t2, %hi(globalbank_rdram_offset) # $t2, 0x8007 /* 09D560 7F06AB70 1060001C */ beqz $v1, .L7F06ABE4 -/* 09D564 7F06AB74 00000000 */ nop +/* 09D564 7F06AB74 00000000 */ nop /* 09D568 7F06AB78 8D4A4490 */ lw $t2, %lo(globalbank_rdram_offset)($t2) /* 09D56C 7F06AB7C 006A1821 */ addu $v1, $v1, $t2 /* 09D570 7F06AB80 0C000FDD */ jal viGetViewTop @@ -26379,7 +26416,7 @@ glabel sub_GAME_7F06A334 /* 09D6B8 7F06ACC8 0FC1795B */ jal bondwalkItemCheckBitflags /* 09D6BC 7F06ACCC 3C050040 */ lui $a1, 0x40 /* 09D6C0 7F06ACD0 10400012 */ beqz $v0, .L7F06AD1C -/* 09D6C4 7F06ACD4 00000000 */ nop +/* 09D6C4 7F06ACD4 00000000 */ nop /* 09D6C8 7F06ACD8 8FA6003C */ lw $a2, 0x3c($sp) .L7F06ACDC: /* 09D6CC 7F06ACDC 240900CD */ li $t1, 205 @@ -26434,9 +26471,9 @@ void gunDrawSight(s32 *gdl) { f32 xypos[2]; f32 halfedxy[2]; - if ((g_CurrentPlayer->gunsightmode == 0) && (g_CurrentPlayer->mpmenuon == 0)) { + if ((g_CurrentPlayer->gunsightmode == 0) && (g_CurrentPlayer->mpmenuon == FALSE)) { sp54 = *gdl; - likely_generate_DL_for_image_declaration(&sp54, crosshairimage, 4, 0, 0); + texSelect(&sp54, crosshairimage, 4, 0, 0); xypos[0] = g_CurrentPlayer->crosshair_angle.f[0]; xypos[1] = g_CurrentPlayer->crosshair_angle.f[1]; @@ -26449,7 +26486,7 @@ void gunDrawSight(s32 *gdl) { #ifdef VERSION_EU halfedxy[1] = halfedxy[1] * 1.19047617912f; #endif - display_image_at_on_screen_coord(&sp54, &xypos, &halfedxy, 0x20, 0x20, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0x6E, (crosshairimage->level > 0), 0); + display_image_at_position(&sp54, &xypos, &halfedxy, 0x20, 0x20, 0, 0, 1, 0xFF, 0xFF, 0xFF, 0x6E, (crosshairimage->level > 0), 0); *gdl = sp54; } } @@ -26496,7 +26533,7 @@ void increment_num_kills_display_text_in_MP(void) if (getPlayerCount() < 2) { return; } mission_time = getMissiontimer(); - sprintf(&buffer, aSD, langGet(TEXT(LGUN, GUN_STR_DA)), g_playerPerm->kill_count); // "kill count" + sprintf(&buffer, aSD, langGet(getStringID(LGUN, GUN_STR_DA_KILLCOUNT)), g_playerPerm->kill_count); // "kill count" #if defined(VERSION_US) hudmsgBottomShow(&buffer); @@ -26567,11 +26604,11 @@ void increment_num_deaths(void) { if (g_CurrentPlayer->deathcount == 1) { - sprintf(buffer, langGet(TEXT(LGUN, GUN_STR_DB))); //died once + sprintf(buffer, langGet(getStringID(LGUN, GUN_STR_DB_DIEDONCE_LF))); //died once } else { - sprintf(buffer, "%s %d %s\n", langGet(TEXT(LGUN, GUN_STR_DC)), g_CurrentPlayer->deathcount, langGet(TEXT(LGUN, GUN_STR_DD))); //died times + sprintf(buffer, "%s %d %s\n", langGet(getStringID(LGUN, GUN_STR_DC_DIED)), g_CurrentPlayer->deathcount, langGet(getStringID(LGUN, GUN_STR_DD_TIMES))); //died times } #if defined(VERSION_JP) || defined(VERSION_EU) jp_hudmsgBottomShow(buffer); @@ -26593,21 +26630,21 @@ void increment_num_suicides_display_MP(void) { char buffer[256]; s32 time_diff; s32 recent_kill_count; - s32 currentTime; + s32 currentTime; g_CurrentPlayer->num_suicides += 1; if (getPlayerCount() >= 2) { - + currentTime = getMissiontimer(); - - sprintf(&buffer, &aSD_0, langGet(TEXT(LGUN, GUN_STR_DE)), g_CurrentPlayer->num_suicides); // "suicide count" + + sprintf(&buffer, &aSD_0, langGet(getStringID(LGUN, GUN_STR_DE_SUICIDECOUNT)), g_CurrentPlayer->num_suicides); // "suicide count" #if defined(VERSION_JP) || defined(VERSION_EU) jp_hudmsgBottomShow(&buffer); #else hudmsgBottomShow(&buffer); #endif - + if (g_playerPerm->kill_count >= 2) { time_diff = currentTime - g_CurrentPlayer->last_kill_time[0]; if (g_playerPerm->max_time_between_kills < time_diff) { @@ -26624,15 +26661,15 @@ void increment_num_suicides_display_MP(void) { g_CurrentPlayer->last_kill_time[0] = currentTime; if ( g_CurrentPlayer->last_kill_time[1] != -1) { - + if ((g_CurrentPlayer->last_kill_time[0] - g_CurrentPlayer->last_kill_time[1]) < 0x78) { - + recent_kill_count += 1; - + if ((g_CurrentPlayer->last_kill_time[2] != -1) && ((g_CurrentPlayer->last_kill_time[0] - g_CurrentPlayer->last_kill_time[2]) < 0x78)) { - + recent_kill_count += 1; - + if ((g_CurrentPlayer->last_kill_time[3] != -1) && ((g_CurrentPlayer->last_kill_time[0] - g_CurrentPlayer->last_kill_time[3]) < 0x78)) { recent_kill_count += 1; } @@ -26648,4 +26685,4 @@ void increment_num_suicides_display_MP(void) { s32 get_curplayer_numsuicides(void) { return g_CurrentPlayer->num_suicides; -} \ No newline at end of file +} diff --git a/src/game/gun.h b/src/game/gun.h index 4b41dce..6520335 100644 --- a/src/game/gun.h +++ b/src/game/gun.h @@ -274,6 +274,9 @@ struct EarWhistleSounds { }; extern CasingRecord g_Casings[20]; +extern u32 size_item_buffer[]; +extern WeaponStats sniperrifle_stats; +extern WeaponStats camera_stats; f32 bondwalkItemGetForceOfImpact(ITEM_IDS item); @@ -305,7 +308,7 @@ s32 get_max_ammo_for_type(s32); void give_cur_player_ammo(s32, s32); s8 bondwalkItemGetAutomaticFiringRate(ITEM_IDS item); void inc_cur_civilian_casualties(void); -void increment_num_kills_display_text_in_MP(); +void increment_num_kills_display_text_in_MP(void); f32 bondwalkItemGetDestructionAmount(ITEM_IDS item); u16 bondwalkItemGetSound(ITEM_IDS item); u8 bondwalkItemGetSoundTriggerRate(ITEM_IDS item); diff --git a/src/game/image.c b/src/game/image.c index 9d66421..46c74aa 100644 --- a/src/game/image.c +++ b/src/game/image.c @@ -530,9 +530,113 @@ s32 texShrinkPaletted(u8 *src, u8 *dst, s32 srcwidth, s32 srcheight, s32 format, #ifdef NONMATCHING -void texFindClosestColourIndexRGBA(void) { +// https://decomp.me/scratch/m2ol7 79.87% +s32 texFindClosestColourIndexRGBA(u16 *palette, s32 numcolours, s32 r, s32 g, s32 b, s32 a) +{ + s32 var_v1; + u16 temp_t6; + s32 temp_t0; + s32 var_a1; + s32 temp_a0; + s32 loop_start; + s32 loop_end; + + s32 bestindex; + s32 bestvalue; + + u16 local_color; + s32 local_r; + s32 local_g; + s32 local_b; + s32 local_a; + s32 temp_s4; + + temp_t6 = ((r << 11) | (g << 6) | (b << 1) | a); + + for (var_v1 = 0; var_v1 < numcolours; var_v1++) + { + if (temp_t6 == palette[var_v1]) + { + return var_v1; + } + } + + temp_t0 = (r * r) + (g * g) + (b * b) + (a * 0x3C1); + var_v1 = numcolours - 1; + var_a1 = 0; + + // binary search for a region + while (var_v1 - var_a1 >= 2) + { + temp_a0 = (s32) (var_v1 + var_a1) >> 1; + + local_color = palette[temp_a0 * 4]; + local_r = ((s32) local_color >> 0xB) & 0x1F; + local_g = ((s32) local_color >> 0x6) & 0x1F; + local_b = ((s32) local_color >> 0x1) & 0x1F; + local_a = local_color & 1; + + temp_s4 = (local_r * local_r) + (local_g * local_g) + (local_b * local_b) + (local_a * 0x3C1); + + if (temp_s4 < temp_t0) + { + var_a1 = temp_a0; + } + else + { + if (temp_t0 < temp_s4) + { + var_v1 = temp_a0; + } + else + { + var_v1 = temp_a0; + var_a1 = temp_a0; + } + } + } + + loop_start = var_v1 - 4; + if (loop_start < 0) + { + loop_start = 0; + } + + loop_end = var_v1 + 4; + if (loop_end >= numcolours) + { + loop_end = numcolours - 1; + } + + bestindex = 0; + bestvalue = 999999; + + // search for best within the region + for (var_v1 = loop_start; var_v1 < loop_end; var_v1++) + { + local_color = palette[var_v1 * 4]; + local_r = (((s32) local_color >> 0xB) & 0x1F) - r; + local_g = (((s32) local_color >> 0x6) & 0x1F) - g; + local_b = (((s32) local_color >> 0x1) & 0x1F) - b; + local_a = 0x3C1; + if (a == (local_color & 1)) + { + local_a = 0; + } + + temp_s4 = (local_r * local_r) + (local_g * local_g) + (local_b * local_b) + (local_a); + + if (temp_s4 < bestvalue) + { + bestindex = var_v1; + bestvalue = temp_s4; + } + } + + return bestindex; } + #else GLOBAL_ASM( .text @@ -839,103 +943,104 @@ glabel texFindClosestColourIndexRGBA #ifdef NONMATCHING -// 99.38% : regalloc problems - +// https://decomp.me/scratch/tmXxj 99.64% s32 texFindClosestColourIndexIA(u16 *palette, s32 numcolours, s32 intensity, s32 alpha) { s32 loop_start; s32 loop_end; + s32 i; + s32 j; + + s32 bestindex; + s32 bestvalue; + + s32 low; + s32 colour; + + s32 value; + s32 a; + s32 b; + s32 sum; + + u32 sum2; // is this real? // check palette for existing color + colour = (intensity << 8) | alpha; + for (i = 0; i < numcolours; i++) { - s32 i; - s32 colour; - colour = (intensity << 8) | alpha; - for (i = 0; i < numcolours; i++) + if (palette[i] == (colour & 0xFFFFU)) { - if (palette[i] == (colour & 0xFFFFU)) - { - return i; - } + return i; } } // binary search for a region + low = 0; + loop_end = numcolours - 1; + colour = (intensity * intensity) + (alpha * alpha); + + while ((loop_end - low) >= 2) { - s32 low; - s32 colour; - s32 a; - s32 b; - s32 sum; s32 index; - s32 value; - - low = 0; - loop_end = numcolours - 1; - colour = (intensity * intensity) + (alpha * alpha); - - while ((loop_end - low) >= 2) + + index = (loop_end + low) >> 1; + value = palette[index]; + a = (((s32) value) >> 8) & 0xFF; + b = value & 0xFF; + sum = (a * a) + (b * b); + if (sum < colour) { - index = (loop_end + low) >> 1; - value = palette[index]; - a = (((s32) value) >> 8) & 0xFF; - b = value & 0xFF; - sum = (a * a) + (b * b); - if (sum < colour) - { - low = index; - continue; - } - if (colour < sum) - { - loop_end = index; - } - else - { - low = index; - loop_end = index; - } + low = index; + continue; } + if (colour < sum) + { + loop_end = index; + } + else + { + low = index; + loop_end = index; + } + } - loop_start = loop_end - 4; - if (loop_start < 0) { loop_start = 0; } + loop_start = loop_end - 4; + if (loop_start < 0) + { + loop_start = 0; + } - loop_end += 4; - if (loop_end >= numcolours) { loop_end = numcolours - 1; } + loop_end += 4; + if (loop_end >= numcolours) + { + loop_end = numcolours - 1; } // search for best within the region + bestindex = 0; + bestvalue = 999999; + + for (j = loop_start; j <= loop_end; j++) { - s32 bestindex; - s32 bestvalue; - s32 value; - s32 a; - s32 b; - u32 sum2; - s32 sum; - s32 index; + value = palette[j]; + a = ((value >> 8) & 0xff) - intensity; + b = (value & 0xff) - alpha; + sum = (a * a) + (b * b); - bestindex = 0; - bestvalue = 999999; + sum2 = sum; - for (index = loop_start; index <= loop_end; index++) + if (sum < bestvalue) { - value = palette[index]; - a = ((value >> 8) & 0xff) - intensity; - b = (value & 0xff) - alpha; - sum2 = (a * a) + (b * b); - sum = sum2; - if (sum < bestvalue) - { - bestindex = index; - bestvalue = sum; - } + bestindex = j; + bestvalue = sum; } - return bestindex; + // Seems to need to be any variable used in the loop here? + if (j); } -} + return bestindex; +} #else GLOBAL_ASM( .text diff --git a/src/game/image.h b/src/game/image.h index cebcaaa..9d8c19c 100644 --- a/src/game/image.h +++ b/src/game/image.h @@ -2,6 +2,7 @@ #define _IMAGE_H_ #include #include +#include #define TEXFORMAT_RGBA32 0x00 // 32-bit RGBA (8/8/8/8) #define TEXFORMAT_RGBA16 0x01 // 16-bit RGBA (5/5/5/1) @@ -92,5 +93,6 @@ s32 texInflateZlib(u8 *src, u8 *dst, s32 arg2, s32 forcenumimages, struct texpoo void texLoad(s32 *updateword, struct texpool *pool); void texInitPool(struct texpool *arg0, u8 *arg1, s32 arg2); void texLoadFromTextureNum(s32 texturenum, struct texpool *arg1); +void texLoadFromModelFileHeader(ModelFileHeader* arg0, struct texpool* arg1); #endif diff --git a/src/game/image_bank.c b/src/game/image_bank.c index 1d45f4e..32f46cc 100644 --- a/src/game/image_bank.c +++ b/src/game/image_bank.c @@ -170,7 +170,7 @@ void texReset(void) s32 i; size = (u32)&_GlobalimagetableSegmentEnd - (u32)&_GlobalimagetableSegmentStart; - pGlobalimagetable = mempAllocBytesInBank(size + 0x1000, 4U); + pGlobalimagetable = mempAllocBytesInBank(size + 0x1000, MEMPOOL_STAGE); pGlobalimagetable = ((u32)pGlobalimagetable + 0xFFFU) & 0xFFFFF000; romCopy(pGlobalimagetable, &_GlobalimagetableSegmentRomStart, size); diff --git a/src/game/image_bank.h b/src/game/image_bank.h index 3ae5c4b..31f055f 100644 --- a/src/game/image_bank.h +++ b/src/game/image_bank.h @@ -12,9 +12,12 @@ extern struct sImageTableEntry *genericimage; extern struct sImageTableEntry *skywaterimages; extern struct sImageTableEntry *monitorimages; extern struct sImageTableEntry *mpcharselimages; +extern struct sImageTableEntry *mpradarimages; +extern struct sImageTableEntry *impactimages; extern u8* img_curpos; extern s32 img_bitcount; +extern s32 *pGlobalimagetable; void texReset(void); u32 texReadBits(s32 bitCount); diff --git a/src/game/indy_commands.c b/src/game/indy_commands.c index 3002347..3274c59 100644 --- a/src/game/indy_commands.c +++ b/src/game/indy_commands.c @@ -1,6 +1,7 @@ #include #include "indy_commands.h" #include +#include #include "rmon.h" // data //D:8004EAC0 @@ -29,8 +30,8 @@ void indy_buffer_read_command(u8 *buffer,u32 size) void indy_buffer_write_command(u8 *buffer,u32 size) { - int i; - + int i; + for (i = 0; i != 100000; i += 4){} osWriteHost(buffer, size); @@ -41,160 +42,84 @@ void indy_buffer_write_command(u8 *buffer,u32 size) +// /include/PR/region.h +// #define ALIGN(s, align) (((u32)(s) + (align-1)) & ~(align-1)) -#ifdef NONMATCHING -s32 indycmdSendCommand(indy_resource_entry_header *cmd,u32 size) +s32 indycmdSendCommand(u8 *buffer, u32 size) { - s32 i; - u32 uVar1; + u8 sp40[0x500]; u8 *address; + u32 i; + u8 *source; u8 *pbuffer; - u8 buffer [1280]; - u32 *id; - - pbuffer = buffer; - if ((cmd->resourceID & 7) != 0) { - if (0x500 < size) { + u8 *padding1; + u8 *end; + u8 *padding5; + + address = sp40; // var_v1 + pbuffer = sp40; // var_a3 + + // if argument isn't 8 byte aligned + if ((s32)(buffer) & 7) + { + if (size > 0x500) + { return 0; } - if ((*buffer & 7) != 0) { - pbuffer = buffer + 4; - } - for (address = pbuffer; address < pbuffer + size; address = address + 1) { - id = &cmd->resourceID; - cmd = &cmd->resourceID + 1; - *address = *id; - } - if (((indy_status & 0x20) != 0) && (size != 0)) { - for (i = 1; (size & 3) != i; i += 1) {} + + // if local buffer isn't 8 byte aligned + if ((s32)(pbuffer) & 7) + { + address += 4; // var_v1 = var_a3; + pbuffer += 4; // var_a3 = &sp44; } - indy_buffer_write_command(pbuffer,size + 3 & 0xfffffffc); + if(pbuffer); + + end = address + size; + for (source = buffer; address < end; ) + { + *address++ = *source++; + } + + if (indy_status & 0x20) + { + for (i = 0; i < size; i++) + { + } + } + + indy_buffer_write_command(pbuffer, ALIGN(size, 4)); + return 1; } - if (((indy_status & 0x20) != 0) && (size != 0)) { - - for (i = 1; (size & 3) != i; i += 1) {} - + else // else it is aligned + { + if (indy_status & 0x20) + { + for (i = 0; i < size; i++) + { + } + } + + indy_buffer_write_command(buffer, ALIGN(size, 4)); + + return 1; } - - indy_buffer_write_command(cmd,size + 3 & 0xfffffffc); - return 1; } -//#ifdef NONMATCHING -#else -GLOBAL_ASM( -.text -glabel indycmdSendCommand -/* 104D50 7F0D0220 27BDFAC0 */ addiu $sp, $sp, -0x540 -/* 104D54 7F0D0224 27A20040 */ addiu $v0, $sp, 0x40 -/* 104D58 7F0D0228 308F0007 */ andi $t7, $a0, 7 -/* 104D5C 7F0D022C AFBF0014 */ sw $ra, 0x14($sp) -/* 104D60 7F0D0230 AFA40540 */ sw $a0, 0x540($sp) -/* 104D64 7F0D0234 00A03025 */ move $a2, $a1 -/* 104D68 7F0D0238 00401825 */ move $v1, $v0 -/* 104D6C 7F0D023C 11E0002B */ beqz $t7, .L7F0D02EC -/* 104D70 7F0D0240 00403825 */ move $a3, $v0 -/* 104D74 7F0D0244 2CA10501 */ sltiu $at, $a1, 0x501 -/* 104D78 7F0D0248 14200003 */ bnez $at, .L7F0D0258 -/* 104D7C 7F0D024C 30580007 */ andi $t8, $v0, 7 -/* 104D80 7F0D0250 1000003D */ b .L7F0D0348 -/* 104D84 7F0D0254 00001025 */ move $v0, $zero -.L7F0D0258: -/* 104D88 7F0D0258 13000003 */ beqz $t8, .L7F0D0268 -/* 104D8C 7F0D025C 3C088005 */ lui $t0, %hi(indy_status) -/* 104D90 7F0D0260 27A70044 */ addiu $a3, $sp, 0x44 -/* 104D94 7F0D0264 00E01825 */ move $v1, $a3 -.L7F0D0268: -/* 104D98 7F0D0268 00662021 */ addu $a0, $v1, $a2 -/* 104D9C 7F0D026C 0064082B */ sltu $at, $v1, $a0 -/* 104DA0 7F0D0270 10200007 */ beqz $at, .L7F0D0290 -/* 104DA4 7F0D0274 8FA20540 */ lw $v0, 0x540($sp) -.L7F0D0278: -/* 104DA8 7F0D0278 90590000 */ lbu $t9, ($v0) -/* 104DAC 7F0D027C 24630001 */ addiu $v1, $v1, 1 -/* 104DB0 7F0D0280 0064082B */ sltu $at, $v1, $a0 -/* 104DB4 7F0D0284 24420001 */ addiu $v0, $v0, 1 -/* 104DB8 7F0D0288 1420FFFB */ bnez $at, .L7F0D0278 -/* 104DBC 7F0D028C A079FFFF */ sb $t9, -1($v1) -.L7F0D0290: -/* 104DC0 7F0D0290 8D08EAC4 */ lw $t0, %lo(indy_status)($t0) -/* 104DC4 7F0D0294 24C50003 */ addiu $a1, $a2, 3 -/* 104DC8 7F0D0298 2401FFFC */ li $at, -4 -/* 104DCC 7F0D029C 31090020 */ andi $t1, $t0, 0x20 -/* 104DD0 7F0D02A0 1120000D */ beqz $t1, .L7F0D02D8 -/* 104DD4 7F0D02A4 00A15024 */ and $t2, $a1, $at -/* 104DD8 7F0D02A8 10C0000B */ beqz $a2, .L7F0D02D8 -/* 104DDC 7F0D02AC 00001025 */ move $v0, $zero -/* 104DE0 7F0D02B0 30C40003 */ andi $a0, $a2, 3 -/* 104DE4 7F0D02B4 10800005 */ beqz $a0, .L7F0D02CC -/* 104DE8 7F0D02B8 00801825 */ move $v1, $a0 -/* 104DEC 7F0D02BC 24420001 */ addiu $v0, $v0, 1 -.L7F0D02C0: -/* 104DF0 7F0D02C0 5462FFFF */ bnel $v1, $v0, .L7F0D02C0 -/* 104DF4 7F0D02C4 24420001 */ addiu $v0, $v0, 1 -/* 104DF8 7F0D02C8 10460003 */ beq $v0, $a2, .L7F0D02D8 -.L7F0D02CC: -/* 104DFC 7F0D02CC 24420004 */ addiu $v0, $v0, 4 -.L7F0D02D0: -/* 104E00 7F0D02D0 5446FFFF */ bnel $v0, $a2, .L7F0D02D0 -/* 104E04 7F0D02D4 24420004 */ addiu $v0, $v0, 4 -.L7F0D02D8: -/* 104E08 7F0D02D8 00E02025 */ move $a0, $a3 -/* 104E0C 7F0D02DC 0FC34074 */ jal indy_buffer_write_command -/* 104E10 7F0D02E0 01402825 */ move $a1, $t2 -/* 104E14 7F0D02E4 10000018 */ b .L7F0D0348 -/* 104E18 7F0D02E8 24020001 */ li $v0, 1 -.L7F0D02EC: -/* 104E1C 7F0D02EC 3C0B8005 */ lui $t3, %hi(indy_status) -/* 104E20 7F0D02F0 8D6BEAC4 */ lw $t3, %lo(indy_status)($t3) -/* 104E24 7F0D02F4 24C50003 */ addiu $a1, $a2, 3 -/* 104E28 7F0D02F8 2401FFFC */ li $at, -4 -/* 104E2C 7F0D02FC 316C0020 */ andi $t4, $t3, 0x20 -/* 104E30 7F0D0300 1180000D */ beqz $t4, .L7F0D0338 -/* 104E34 7F0D0304 00A16824 */ and $t5, $a1, $at -/* 104E38 7F0D0308 10C0000B */ beqz $a2, .L7F0D0338 -/* 104E3C 7F0D030C 00001025 */ move $v0, $zero -/* 104E40 7F0D0310 30C40003 */ andi $a0, $a2, 3 -/* 104E44 7F0D0314 10800005 */ beqz $a0, .L7F0D032C -/* 104E48 7F0D0318 00801825 */ move $v1, $a0 -/* 104E4C 7F0D031C 24420001 */ addiu $v0, $v0, 1 -.L7F0D0320: -/* 104E50 7F0D0320 5462FFFF */ bnel $v1, $v0, .L7F0D0320 -/* 104E54 7F0D0324 24420001 */ addiu $v0, $v0, 1 -/* 104E58 7F0D0328 10460003 */ beq $v0, $a2, .L7F0D0338 -.L7F0D032C: -/* 104E5C 7F0D032C 24420004 */ addiu $v0, $v0, 4 -.L7F0D0330: -/* 104E60 7F0D0330 5446FFFF */ bnel $v0, $a2, .L7F0D0330 -/* 104E64 7F0D0334 24420004 */ addiu $v0, $v0, 4 -.L7F0D0338: -/* 104E68 7F0D0338 8FA40540 */ lw $a0, 0x540($sp) -/* 104E6C 7F0D033C 0FC34074 */ jal indy_buffer_write_command -/* 104E70 7F0D0340 01A02825 */ move $a1, $t5 -/* 104E74 7F0D0344 24020001 */ li $v0, 1 -.L7F0D0348: -/* 104E78 7F0D0348 8FBF0014 */ lw $ra, 0x14($sp) -/* 104E7C 7F0D034C 27BD0540 */ addiu $sp, $sp, 0x540 -/* 104E80 7F0D0350 03E00008 */ jr $ra -/* 104E84 7F0D0354 00000000 */ nop -) -#endif - - - s32 send2indyresourcecommands(indy_resource_entry_header * entry1, u32 size1, indy_resource_entry_header * entry2, u32 size2) { - indycmdSendCommand(entry1,size1); - indycmdSendCommand(entry2,size2); + indycmdSendCommand((u8 *)entry1, size1); + indycmdSendCommand((u8 *)entry2, size2); + return TRUE; } -void indyrescmdStartCmdSeq(s32 readsize,s32 writesize) +void indyrescmdStartCmdSeq(s32 readsize, s32 writesize) { indy_resource_entry_type1 cmd; @@ -203,7 +128,8 @@ void indyrescmdStartCmdSeq(s32 readsize,s32 writesize) cmd.entry.size = sizeof(cmd); cmd.entry.readsize = readsize; cmd.entry.writesize = writesize; - indycmdSendCommand(&cmd,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd, sizeof(cmd)); } @@ -216,7 +142,8 @@ void indyrescmdEndCmdSeq(s32 readsize,s32 writesize) cmd.entry.size = sizeof(cmd); cmd.entry.readsize = readsize; cmd.entry.writesize = writesize; - indycmdSendCommand(&cmd,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd, sizeof(cmd)); } @@ -228,7 +155,8 @@ void indyrescmdInit(s32 readsize,s32 writesize) cmd.entry.size = sizeof(indy_resource_entry_type0); cmd.entry.readsize = readsize; cmd.entry.writesize = writesize; - indycmdSendCommand(&cmd,sizeof(indy_resource_entry_type0)); + + indycmdSendCommand((u8 *)&cmd, sizeof(indy_resource_entry_type0)); } void post_type3_indyrescmd(s32 rsize,s32 wsize,char *strptr) @@ -242,7 +170,8 @@ void post_type3_indyrescmd(s32 rsize,s32 wsize,char *strptr) cmd.entry.writesize = wsize; strncpy(cmd.strbuffer,strptr, sizeof(cmd.strbuffer)); cmd.strbuffer[255] = 0; - indycmdSendCommand(&cmd.entry,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd.entry, sizeof(cmd)); } @@ -256,22 +185,24 @@ void post_type4_indyrescmd_data_recieved(s32 readsize,s32 writesize,s32 data) cmd.entry.readsize = readsize; cmd.entry.writesize = writesize; cmd.data = data; - indycmdSendCommand(&cmd.entry,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd.entry, sizeof(cmd)); } void indyrescmdCheckFileExists(s32 rsize,s32 wsize,char *name) { - indy_resource_entry_type5 cmd; - - cmd.entry.resourceID = INDYMAGIC; - cmd.entry.type = INDY_SENDCHECKFILEEXISTS; - cmd.entry.size = sizeof(cmd); - cmd.entry.readsize = rsize; - cmd.entry.writesize = wsize; - strncpy(cmd.strbuffer,name,sizeof(cmd.strbuffer)); - cmd.strbuffer[255] = '\0'; - indycmdSendCommand(&cmd,sizeof(cmd)); + indy_resource_entry_type5 cmd; + + cmd.entry.resourceID = INDYMAGIC; + cmd.entry.type = INDY_SENDCHECKFILEEXISTS; + cmd.entry.size = sizeof(cmd); + cmd.entry.readsize = rsize; + cmd.entry.writesize = wsize; + strncpy(cmd.strbuffer,name,sizeof(cmd.strbuffer)); + cmd.strbuffer[255] = '\0'; + + indycmdSendCommand((u8 *)&cmd, sizeof(cmd)); } @@ -286,7 +217,8 @@ void post_type6_indyrescmd_printfrecieved(s32 readsize,s32 writesize,u32 data1,u cmd.entry.writesize = writesize; cmd.data1 = data1; cmd.data2 = data2; - indycmdSendCommand(&cmd.entry,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd.entry, sizeof(cmd)); } @@ -302,7 +234,8 @@ void indyrescmdSendFileLoad(u32 rsize,u32 wsize,u8 *filename,u32 size) strncpy(cmd.strbuffer,filename,sizeof(cmd.strbuffer)); cmd.strbuffer[255] = '\0'; cmd.size = size; - indycmdSendCommand(&cmd,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd, sizeof(cmd)); } @@ -320,6 +253,7 @@ void post_type8_indyrescmd_log_recieved(s32 rsize,s32 wsize,u32 data1,u32 data2, cmd.data1 = data1; cmd.size = cmd2size; cmd.data2 = data2; + send2indyresourcecommands(&cmd,sizeof(indy_resource_entry_type8),cmd2,cmd2size); } @@ -337,6 +271,7 @@ void indyrescmdSendDump(s32 rsize,s32 wsize,char *strptr,u32 size2,struct indy_r strncpy(cmd.strbuffer,strptr,sizeof(cmd.strbuffer)); cmd.strbuffer[255] = '\0'; + send2indyresourcecommands(&cmd,sizeof(indy_resource_entry_type9),cmd2,size2); } @@ -352,7 +287,8 @@ void post_typeA_indyrescmd_app_command_recieved(s32 readsize,s32 writesize,u32 d cmd.entry.readsize = readsize; cmd.entry.writesize = writesize; cmd.data = data; - indycmdSendCommand(&cmd.entry,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd.entry, sizeof(cmd)); } @@ -370,7 +306,7 @@ void indyrescmdRamRomLoad(u32 rsize,u32 wsize,char *name,u32 filesize,u32 ptarge cmd.size = filesize; cmd.hwaddress = ptarget; - indycmdSendCommand(&cmd,sizeof(cmd)); + indycmdSendCommand((u8 *)&cmd, sizeof(cmd)); } @@ -387,7 +323,8 @@ void post_type10_indyrescmd_fault_ack_by_host(s32 rsize,s32 wsize,u32 data1,u32 cmd.data1 = data1; cmd.data2 = data2; cmd.data3 = data3; - indycmdSendCommand(&cmd,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd, sizeof(cmd)); } @@ -404,7 +341,8 @@ void indyrescmdSendExportFile(u32 rsize,u32 wsize,u8 *ptrstr,u32 size,u8 *hwaddr cmd.strbuffer[255] = '\0'; cmd.size = size; cmd.hwaddress = hwaddress; - indycmdSendCommand(&cmd,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd, sizeof(cmd)); } @@ -418,7 +356,8 @@ void post_typeE_indyrescmd_prof_recv(s32 readsize,s32 writesize,u32 data) cmd.entry.readsize = readsize; cmd.entry.writesize = writesize; cmd.data = data; - indycmdSendCommand(&cmd.entry,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd.entry, sizeof(cmd)); } @@ -433,7 +372,8 @@ void indyrescmdSendHostCmd(s32 rsize,s32 wsize,char *strptr) cmd.entry.writesize = wsize; strncpy(cmd.strbuffer,strptr,sizeof(cmd.strbuffer)); cmd.strbuffer[1023] = '\0'; - indycmdSendCommand(&cmd,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd, sizeof(cmd)); } @@ -447,7 +387,8 @@ void post_typeC_indyrescmd_prof_send(s32 readsize,s32 writesize,u32 data) cmd.entry.readsize = readsize; cmd.entry.writesize = writesize; cmd.data = data; - indycmdSendCommand(&cmd.entry,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd.entry, sizeof(cmd)); } @@ -461,7 +402,8 @@ void post_typeA_indyrescmd_app_data_recieved(s32 readsize,s32 writesize,u32 data cmd.entry.readsize = readsize; cmd.entry.writesize = writesize; cmd.data = data; - indycmdSendCommand(&cmd.entry,sizeof(cmd)); + + indycmdSendCommand((u8 *)&cmd.entry, sizeof(cmd)); } @@ -470,6 +412,7 @@ s32 indycmdSendInitPacket(void) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_type0),sizeof(indy_resource_entry_type0)); indyrescmdInit(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End)); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -479,6 +422,7 @@ s32 post_indyrescmd_game_data_send(char *strptr) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_type3),sizeof(indy_resource_entry_type3)); post_type3_indyrescmd(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),strptr); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -488,6 +432,7 @@ s32 post_indyrescmd_debug_data_recv(u32 data) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_type4),sizeof(indy_resource_entry_type4)); post_type4_indyrescmd_data_recieved(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),data); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -497,6 +442,7 @@ s32 indycmdSendHostCheckFileExists(char *strptr) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_type5),sizeof(indy_resource_entry_type5)); indyrescmdCheckFileExists(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),strptr); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -506,6 +452,7 @@ s32 post_indyrescmd_debug_printf_recv(u32 data1,u32 data2) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_type6),sizeof(indy_resource_entry_type6)); post_type6_indyrescmd_printfrecieved(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),data1,data2); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -515,6 +462,7 @@ s32 indycmdSendLoadFile(u8 *filename,u32 size) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_type7),sizeof(indy_resource_entry_type7)); indyrescmdSendFileLoad(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),filename,size); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -524,6 +472,7 @@ s32 post_indyrescmd_1_8_2(u32 data1,u32 data2,u32 size2,struct indy_resource_ent indyrescmdStartCmdSeq((size2 + 3 & 0xfffffffc) + sizeof(indy_resource_entry_type8),sizeof(indy_resource_entry_type8)); post_type8_indyrescmd_log_recieved(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),data1,data2,size2,cmd2); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -533,6 +482,7 @@ s32 indycmdSendDump(char *string, u32 size, struct indy_resource_entry_header *d indyrescmdStartCmdSeq((size + 3 & 0xfffffffc) + sizeof(indy_resource_entry_type9),sizeof(indy_resource_entry_type9)); indyrescmdSendDump(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),string,size,data); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -542,6 +492,7 @@ s32 post_indyrescmd_recv_capture_data_success(u32 data) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_typeA),sizeof(indy_resource_entry_typeA)); post_typeA_indyrescmd_app_command_recieved(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),data); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -551,6 +502,7 @@ s32 indycmdSendRamRomLoad(char *strptr,u32 ptarget,u32 filesize) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_typeF),sizeof(indy_resource_entry_typeF)); indyrescmdRamRomLoad(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),strptr,filesize,ptarget); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -560,6 +512,7 @@ s32 post_indyrescmd_1_10_2(u32 param_1,u32 param_2,u32 param_3) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_type10),sizeof(indy_resource_entry_type10)); post_type10_indyrescmd_fault_ack_by_host(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),param_1,param_2,param_3); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -569,6 +522,7 @@ s32 indycmdSendHostExportFile(char *strptr,u8 *phwaddr,u32 size) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_typeD),sizeof(indy_resource_entry_typeD)); indyrescmdSendExportFile(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),strptr,size,phwaddr); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -578,6 +532,7 @@ s32 post_indyrescmd_host_prof_recv(u32 data) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_typeE),sizeof(indy_resource_entry_typeE)); post_typeE_indyrescmd_prof_recv(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),data); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -587,6 +542,7 @@ s32 indycmdSendHostCmdPacket(char *strptr) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_typeB),sizeof(indy_resource_entry_typeB)); indyrescmdSendHostCmd(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),strptr); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -596,6 +552,7 @@ s32 post_indyrescmd_1_C_2(u32 data) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_typeC),sizeof(indy_resource_entry_typeC)); post_typeC_indyrescmd_prof_send(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),data); indyrescmdEndCmdSeq(0,0); + return TRUE; } @@ -605,187 +562,73 @@ s32 post_indyrescmd_1_A_2(u32 data) indyrescmdStartCmdSeq(sizeof(indy_resource_entry_typeA),sizeof(indy_resource_entry_typeA)); post_typeA_indyrescmd_app_data_recieved(sizeof(s_indyResCmd02End),sizeof(s_indyResCmd02End),data); indyrescmdEndCmdSeq(0,0); + return TRUE; } - - -#ifdef NONMATCHING -s32 indycmdRecieveCommand(struct indy_resource_entry_header *resource,u32 size) - +s32 indycmdRecieveCommand(u8 *buffer, u32 size) { - uint uVar1; - u32 uVar2; - u8 *buffer; - u8 *puVar3; - u8 auStack1024 [1024]; - - - buffer = auStack1024; - if ((resource & 7) == 0) { - indy_buffer_read_command(resource,size + 3 & 0xfffffffc); - if ((indy_status & 0x10) == 0) { - return 1; + u8 sp40[0x400]; + u8 *address; + u32 i; + u8 *dest; + u8 *pbuffer; + u8 *padding1; + u8 *end; + u8 *padding5; + + address = sp40; // var_v1 + pbuffer = sp40; // var_a3 + + // if argument isn't 8 byte aligned + if ((s32)(buffer) & 7) + { + if (size > 0x400) + { + return 0; } - if (size != 0) { - if ((size & 3) == 0) { - uVar2 = 4; - } - else { - for (uVar1 = 1; (size & 3) != uVar1; uVar1 += 1) { - } - uVar2 = uVar1 + 4; - if (uVar1 == size) { - return 1; - } - } - for (; uVar2 != size; uVar2 += 4) { + + // if local buffer isn't 8 byte aligned + if ((s32)(pbuffer) & 7) + { + pbuffer += 4; // var_a3 = &sp44; + address += 4; // var_v1 = var_a3; + } + + indy_buffer_read_command(pbuffer, ALIGN(size, 4)); + + end = address + size; + for (dest = buffer; address < end; ) + { + *dest++ = *address++; + } + + if (indy_status & 0x10) + { + for (i = 0; i < size; i++) + { } } + return 1; } - if (0x400 < size) { - return 0; - } - if (false) { - buffer = auStack1020; - } - indy_buffer_read_command(buffer,size + 3 & 0xfffffffc); - puVar3 = buffer + size; - for (; buffer < puVar3; buffer = buffer + 1) { - *&resource->resourceID = *buffer; - resource = &resource->resourceID + 1; - } - if (((indy_status & 0x10) != 0) && (size != 0)) { - if ((size & 3) == 0) { - uVar2 = 4; - } - else { - for (uVar1 = 1; (size & 3) != uVar1; uVar1 += 1) { - } - uVar2 = uVar1 + 4; - if (uVar1 == size) { - return 1; + else // else it is aligned + { + indy_buffer_read_command(buffer, ALIGN(size, 4)); + + if (indy_status & 0x10) + { + for (i = 0; i < size; i++) + { } } - for (; uVar2 != size; uVar2 += 4) { - } + + return 1; } - return 1; } -#else -GLOBAL_ASM( -.text -glabel indycmdRecieveCommand -/* 105A7C 7F0D0F4C 27BDFBC0 */ addiu $sp, $sp, -0x440 -/* 105A80 7F0D0F50 27A20040 */ addiu $v0, $sp, 0x40 -/* 105A84 7F0D0F54 308F0007 */ andi $t7, $a0, 7 -/* 105A88 7F0D0F58 AFBF0014 */ sw $ra, 0x14($sp) -/* 105A8C 7F0D0F5C AFA40440 */ sw $a0, 0x440($sp) -/* 105A90 7F0D0F60 00A03025 */ move $a2, $a1 -/* 105A94 7F0D0F64 00401825 */ move $v1, $v0 -/* 105A98 7F0D0F68 11E00031 */ beqz $t7, .L7F0D1030 -/* 105A9C 7F0D0F6C 00403825 */ move $a3, $v0 -/* 105AA0 7F0D0F70 2CA10401 */ sltiu $at, $a1, 0x401 -/* 105AA4 7F0D0F74 14200003 */ bnez $at, .L7F0D0F84 -/* 105AA8 7F0D0F78 30580007 */ andi $t8, $v0, 7 -/* 105AAC 7F0D0F7C 10000046 */ b .L7F0D1098 -/* 105AB0 7F0D0F80 00001025 */ move $v0, $zero -.L7F0D0F84: -/* 105AB4 7F0D0F84 13000003 */ beqz $t8, .L7F0D0F94 -/* 105AB8 7F0D0F88 24C50003 */ addiu $a1, $a2, 3 -/* 105ABC 7F0D0F8C 27A30044 */ addiu $v1, $sp, 0x44 -/* 105AC0 7F0D0F90 00603825 */ move $a3, $v1 -.L7F0D0F94: -/* 105AC4 7F0D0F94 2401FFFC */ li $at, -4 -/* 105AC8 7F0D0F98 00A1C824 */ and $t9, $a1, $at -/* 105ACC 7F0D0F9C 03202825 */ move $a1, $t9 -/* 105AD0 7F0D0FA0 00E02025 */ move $a0, $a3 -/* 105AD4 7F0D0FA4 AFA3003C */ sw $v1, 0x3c($sp) -/* 105AD8 7F0D0FA8 0FC34060 */ jal indy_buffer_read_command -/* 105ADC 7F0D0FAC AFA60444 */ sw $a2, 0x444($sp) -/* 105AE0 7F0D0FB0 8FA3003C */ lw $v1, 0x3c($sp) -/* 105AE4 7F0D0FB4 8FA60444 */ lw $a2, 0x444($sp) -/* 105AE8 7F0D0FB8 8FA20440 */ lw $v0, 0x440($sp) -/* 105AEC 7F0D0FBC 3C098005 */ lui $t1, %hi(indy_status) -/* 105AF0 7F0D0FC0 00662021 */ addu $a0, $v1, $a2 -/* 105AF4 7F0D0FC4 0064082B */ sltu $at, $v1, $a0 -/* 105AF8 7F0D0FC8 10200007 */ beqz $at, .L7F0D0FE8 -/* 105AFC 7F0D0FCC 00000000 */ nop -.L7F0D0FD0: -/* 105B00 7F0D0FD0 90680000 */ lbu $t0, ($v1) -/* 105B04 7F0D0FD4 24630001 */ addiu $v1, $v1, 1 -/* 105B08 7F0D0FD8 0064082B */ sltu $at, $v1, $a0 -/* 105B0C 7F0D0FDC 24420001 */ addiu $v0, $v0, 1 -/* 105B10 7F0D0FE0 1420FFFB */ bnez $at, .L7F0D0FD0 -/* 105B14 7F0D0FE4 A048FFFF */ sb $t0, -1($v0) -.L7F0D0FE8: -/* 105B18 7F0D0FE8 8D29EAC4 */ lw $t1, %lo(indy_status)($t1) -/* 105B1C 7F0D0FEC 312A0010 */ andi $t2, $t1, 0x10 -/* 105B20 7F0D0FF0 1140000D */ beqz $t2, .L7F0D1028 -/* 105B24 7F0D0FF4 00000000 */ nop -/* 105B28 7F0D0FF8 10C0000B */ beqz $a2, .L7F0D1028 -/* 105B2C 7F0D0FFC 00001025 */ move $v0, $zero -/* 105B30 7F0D1000 30C40003 */ andi $a0, $a2, 3 -/* 105B34 7F0D1004 10800005 */ beqz $a0, .L7F0D101C -/* 105B38 7F0D1008 00801825 */ move $v1, $a0 -/* 105B3C 7F0D100C 24420001 */ addiu $v0, $v0, 1 -.L7F0D1010: -/* 105B40 7F0D1010 5462FFFF */ bnel $v1, $v0, .L7F0D1010 -/* 105B44 7F0D1014 24420001 */ addiu $v0, $v0, 1 -/* 105B48 7F0D1018 10460003 */ beq $v0, $a2, .L7F0D1028 -.L7F0D101C: -/* 105B4C 7F0D101C 24420004 */ addiu $v0, $v0, 4 -.L7F0D1020: -/* 105B50 7F0D1020 5446FFFF */ bnel $v0, $a2, .L7F0D1020 -/* 105B54 7F0D1024 24420004 */ addiu $v0, $v0, 4 -.L7F0D1028: -/* 105B58 7F0D1028 1000001B */ b .L7F0D1098 -/* 105B5C 7F0D102C 24020001 */ li $v0, 1 -.L7F0D1030: -/* 105B60 7F0D1030 24C50003 */ addiu $a1, $a2, 3 -/* 105B64 7F0D1034 2401FFFC */ li $at, -4 -/* 105B68 7F0D1038 00A15824 */ and $t3, $a1, $at -/* 105B6C 7F0D103C 01602825 */ move $a1, $t3 -/* 105B70 7F0D1040 8FA40440 */ lw $a0, 0x440($sp) -/* 105B74 7F0D1044 0FC34060 */ jal indy_buffer_read_command -/* 105B78 7F0D1048 AFA60444 */ sw $a2, 0x444($sp) -/* 105B7C 7F0D104C 3C0C8005 */ lui $t4, %hi(indy_status) -/* 105B80 7F0D1050 8D8CEAC4 */ lw $t4, %lo(indy_status)($t4) -/* 105B84 7F0D1054 8FA60444 */ lw $a2, 0x444($sp) -/* 105B88 7F0D1058 318D0010 */ andi $t5, $t4, 0x10 -/* 105B8C 7F0D105C 51A0000E */ beql $t5, $zero, .L7F0D1098 -/* 105B90 7F0D1060 24020001 */ li $v0, 1 -/* 105B94 7F0D1064 10C0000B */ beqz $a2, .L7F0D1094 -/* 105B98 7F0D1068 00001025 */ move $v0, $zero -/* 105B9C 7F0D106C 30C40003 */ andi $a0, $a2, 3 -/* 105BA0 7F0D1070 10800005 */ beqz $a0, .L7F0D1088 -/* 105BA4 7F0D1074 00801825 */ move $v1, $a0 -/* 105BA8 7F0D1078 24420001 */ addiu $v0, $v0, 1 -.L7F0D107C: -/* 105BAC 7F0D107C 5462FFFF */ bnel $v1, $v0, .L7F0D107C -/* 105BB0 7F0D1080 24420001 */ addiu $v0, $v0, 1 -/* 105BB4 7F0D1084 10460003 */ beq $v0, $a2, .L7F0D1094 -.L7F0D1088: -/* 105BB8 7F0D1088 24420004 */ addiu $v0, $v0, 4 -.L7F0D108C: -/* 105BBC 7F0D108C 5446FFFF */ bnel $v0, $a2, .L7F0D108C -/* 105BC0 7F0D1090 24420004 */ addiu $v0, $v0, 4 -.L7F0D1094: -/* 105BC4 7F0D1094 24020001 */ li $v0, 1 -.L7F0D1098: -/* 105BC8 7F0D1098 8FBF0014 */ lw $ra, 0x14($sp) -/* 105BCC 7F0D109C 27BD0440 */ addiu $sp, $sp, 0x440 -/* 105BD0 7F0D10A0 03E00008 */ jr $ra -/* 105BD4 7F0D10A4 00000000 */ nop -) -#endif - - - @@ -801,27 +644,33 @@ s32 indyrescmdResponseSize(s32 readsize, s32 writesize) { struct indy_resource_entry_header cmd; - indycmdRecieveCommand(&cmd, 0x14); + indycmdRecieveCommand((u8 *)&cmd, 0x14); + if (cmd.resourceID != INDYMAGIC) { return FALSE; } + if (cmd.type != 1) { return FALSE; } + if (cmd.size != 0x14) { return FALSE; } + if ((readsize != 0) && (cmd.readsize != readsize)) { return FALSE; } + if (cmd.writesize != writesize) { return FALSE; } + return TRUE; } @@ -830,27 +679,33 @@ s32 indyrescmdResponseEnd(s32 readsize, s32 writesize) { struct indy_resource_entry_header cmd; - indycmdRecieveCommand(&cmd, 0x14); + indycmdRecieveCommand((u8 *)&cmd, 0x14); + if (cmd.resourceID != INDYMAGIC) { return FALSE; } + if (cmd.type != 2) { return FALSE; } + if (cmd.size != 0x14) { return FALSE; } + if (cmd.readsize != readsize) { return FALSE; } + if (cmd.writesize != writesize) { return FALSE; } + return TRUE; } @@ -860,28 +715,35 @@ s32 post_indyrescmd_istype4_correctvalue(s32 readsize, s32 writesize, u32 *respo { struct indy_resource_entry_type4 cmd; - indycmdRecieveCommand(&cmd, 0x18); + indycmdRecieveCommand((u8 *)&cmd, 0x18); + if (cmd.entry.resourceID != INDYMAGIC) { return FALSE; } + if (cmd.entry.type != 4) { return FALSE; } + if (cmd.entry.size != 0x18) { return FALSE; } + if (cmd.entry.readsize != readsize) { return FALSE; } + if (cmd.entry.writesize != writesize) { return FALSE; } + *response = cmd.data; + return TRUE; } @@ -890,29 +752,36 @@ s32 indyrescmdResponseFileExists(s32 readsize, s32 writesize, u32 *response1, u3 { struct indy_resource_entry_type6 cmd; - indycmdRecieveCommand(&cmd, 0x1C); + indycmdRecieveCommand((u8 *)&cmd, 0x1C); + if (cmd.entry.resourceID != INDYMAGIC) { return FALSE; } + if (cmd.entry.type != 6) { return FALSE; } + if (cmd.entry.size != 0x1C) { return FALSE; } + if (cmd.entry.readsize != readsize) { return FALSE; } + if (cmd.entry.writesize != writesize) { return FALSE; } + *response1 = cmd.data1; *response2 = cmd.data2; + return TRUE; } @@ -921,31 +790,39 @@ s32 indyrescmdResponseRecieveFile(s32 readsize, s32 writesize, u32 *response1, u { struct indy_resource_entry_type8 cmd; - indycmdRecieveCommand(&cmd, 0x20); + indycmdRecieveCommand((u8 *)&cmd, 0x20); + if (cmd.entry.resourceID != INDYMAGIC) { return FALSE; } + if (cmd.entry.type != 8) { return FALSE; } - if (cmd.entry.size != (((cmd.size + 3) & ~3) + 0x20)) + + if (cmd.entry.size != (ALIGN(cmd.size, 4) + 0x20)) { return FALSE; } + if (cmd.entry.readsize != readsize) { return FALSE; } + if (cmd.entry.writesize != writesize) { return FALSE; } + *response1 = cmd.data1; *response2 = cmd.data2; *childsize = cmd.size; - indycmdRecieveCommand(child, (cmd.size + 3) & ~3); + + indycmdRecieveCommand((u8 *)child, ALIGN(cmd.size, 4)); + return TRUE; } @@ -954,28 +831,35 @@ s32 indyrescmdResponseSendDump(s32 readsize, s32 writesize, u32 *response) { struct indy_resource_entry_typeA cmd; - indycmdRecieveCommand(&cmd, 0x18); + indycmdRecieveCommand((u8 *)&cmd, 0x18); + if (cmd.entry.resourceID != INDYMAGIC) { return FALSE; } + if (cmd.entry.type != 0xA) { return FALSE; } + if (cmd.entry.size != 0x18) { return FALSE; } + if (cmd.entry.readsize != readsize) { return FALSE; } + if (cmd.entry.writesize != writesize) { return FALSE; } + *response = cmd.data; + return TRUE; } @@ -984,30 +868,37 @@ s32 indyrescmdResponseRecieveRamRom(s32 readsize, s32 writesize, u32 *data1, u32 { struct indy_resource_entry_type10 cmd; - indycmdRecieveCommand(&cmd, 0x20); + indycmdRecieveCommand((u8 *)&cmd, 0x20); + if (cmd.entry.resourceID != INDYMAGIC) { return FALSE; } + if (cmd.entry.type != 0x10) { return FALSE; } + if (cmd.entry.size != 0x20) { return FALSE; } + if (cmd.entry.readsize != readsize) { return FALSE; } + if (cmd.entry.writesize != writesize) { return FALSE; } + *data1 = cmd.data1; *data2 = cmd.data2; *data3 = cmd.data3; + return TRUE; } @@ -1016,28 +907,35 @@ s32 indyrescmdResponseHostExportFile(s32 readsize, s32 writesize, u32 *response) { indy_resource_entry_typeE cmd; - indycmdRecieveCommand(&cmd, 0x18); + indycmdRecieveCommand((u8 *)&cmd, 0x18); + if (cmd.entry.resourceID != INDYMAGIC) { return FALSE; } + if (cmd.entry.type != 0xE) { return FALSE; } + if (cmd.entry.size != 0x18) { return FALSE; } + if (cmd.entry.readsize != readsize) { return FALSE; } + if (cmd.entry.writesize != writesize) { return FALSE; } + *response = cmd.data; + return TRUE; } @@ -1046,28 +944,35 @@ s32 indyrescmdResponseHostCmdPacket(s32 readsize, s32 writesize, u32 *response) { indy_resource_entry_typeC cmd; - indycmdRecieveCommand(&cmd, 0x18); + indycmdRecieveCommand((u8 *)&cmd, 0x18); + if (cmd.entry.resourceID != INDYMAGIC) { return FALSE; } + if (cmd.entry.type != 0xC) { return FALSE; } + if (cmd.entry.size != 0x18) { return FALSE; } + if (cmd.entry.readsize != readsize) { return FALSE; } + if (cmd.entry.writesize != writesize) { return FALSE; } + *response = cmd.data; + return TRUE; } @@ -1077,6 +982,7 @@ s32 response_indyrescmd_1_4_2(u8 *response) indyrescmdResponseSize(0x18,0x18); post_indyrescmd_istype4_correctvalue(0x14,0x14,response); indyrescmdResponseEnd(0,0); + return TRUE; } @@ -1086,6 +992,7 @@ s32 indycmdAckHostCheckFileExists(u8 *response1,u8 *response2) indyrescmdResponseSize(0x1c,0x1c); indyrescmdResponseFileExists(0x14,0x14,response1,response2); indyrescmdResponseEnd(0,0); + return TRUE; } @@ -1095,6 +1002,7 @@ s32 indycmdReceiveFile(u8 *response1,u8 *response2,u32 childsize,u8 *child) indyrescmdResponseSize(0,0x20); indyrescmdResponseRecieveFile(0x14,0x14,response1,response2,childsize,child); indyrescmdResponseEnd(0,0); + return TRUE; } @@ -1104,6 +1012,7 @@ s32 indycmdAckSendDump(u8 *param_1) indyrescmdResponseSize(0x18,0x18); indyrescmdResponseSendDump(0x14,0x14,param_1); indyrescmdResponseEnd(0,0); + return TRUE; } @@ -1113,6 +1022,7 @@ s32 indycmdReceiveRamRom(u32 *param_1,u32 *param_2,u32 *param_3) indyrescmdResponseSize(0x20,0x20); indyrescmdResponseRecieveRamRom(0x14,0x14,param_1,param_2,param_3); indyrescmdResponseEnd(0,0); + return TRUE; } @@ -1122,6 +1032,7 @@ s32 indycmdAckHostExportFile(u8 *response) indyrescmdResponseSize(0x18,0x18); indyrescmdResponseHostExportFile(0x14,0x14,response); indyrescmdResponseEnd(0,0); + return TRUE; } @@ -1131,6 +1042,7 @@ s32 indycmdAckHostCmdPacket(u8 *response) indyrescmdResponseSize(0x18,0x18); indyrescmdResponseHostCmdPacket(0x14,0x14,response); indyrescmdResponseEnd(0,0); + return TRUE; } @@ -1139,19 +1051,22 @@ s32 response_indyrescmd_curr_matches_expected(s32 readsize, s32 writesize) { struct indy_resource_entry_header cmd; - indycmdRecieveCommand(&cmd, 0x14); + indycmdRecieveCommand((u8 *)&cmd, 0x14); if (cmd.resourceID != INDYMAGIC) { return FALSE; } + if ((readsize != 0) && (cmd.readsize != readsize)) { return FALSE; } + if ((writesize != 0) && (cmd.writesize != writesize)) { return FALSE; } + return TRUE; } diff --git a/src/game/indy_commands.h b/src/game/indy_commands.h index 3213394..87e51e1 100644 --- a/src/game/indy_commands.h +++ b/src/game/indy_commands.h @@ -128,7 +128,7 @@ typedef struct indy_resource_entry_type10 { extern s32 indy_ready; -s32 indycmdSendCommand(struct indy_resource_entry_header *cmd,u32 size); +s32 indycmdSendCommand(u8 *buffer, u32 size); s32 indycmdSendInitPacket(void); s32 indycmdSendHostCheckFileExists(char *strptr); @@ -138,7 +138,7 @@ s32 indycmdSendRamRomLoad(char *strptr,u32 ptarget,u32 filesize); s32 indycmdSendHostExportFile(char *strptr,u8 *phwaddr,u32 size); s32 indycmdSendHostCmdPacket(char *strptr); -s32 indycmdRecieveCommand(struct indy_resource_entry_header *resource,u32 size); +s32 indycmdRecieveCommand(u8 *buffer, u32 size); s32 indycmdAckHostCheckFileExists(u8 *response1,u8 *response2); s32 indycmdReceiveFile(u8 *response1,u8 *response2,u32 childsize,u8 *child); diff --git a/src/game/initBondDATA.c b/src/game/initBondDATA.c index 7465533..80b7578 100644 --- a/src/game/initBondDATA.c +++ b/src/game/initBondDATA.c @@ -1,6 +1,11 @@ #include #include #include "initBondDATA.h" +#include "bondtypes.h" +#include "bondconstants.h" +#include "bondview.h" +#include "gun.h" +#include "player.h" #ifdef REFRESH_PAL @@ -8,111 +13,274 @@ #else #define VALUENAME 19.999996 #endif -struct BONDdata_item_control_blocks hand_data_dummy = { -0, 0xFFFFFFFF, 0, 0x100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 1.0, 0, 0, 0, 0, 1.0, 0, -0, 0, 0, 1.0, 0, 0, 0, 0, 0, 0, -1.0, 0, 1.0, 0, 0, 0, 0, 0, 0, -VALUENAME, 0, -VALUENAME, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1.0, 0, 0, -1.0, 0, 0, --1.0, 0, 0, -1.0, 0, 1.0, 0, 0, 1.0, 0, 0, 1.0, 0, 0, 1.0, 0, 0, 0, 1.0, 1.0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000.0, 0, 0, 0, 0, 0xFF000000, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0, 0, 0 + +struct hand hand_data_dummy = { + 0, // ITEM_IDS weaponnum; + 0xFFFFFFFF, // ITEM_IDS weaponnum_watchmenu; + 0, // ITEM_IDS previous_weapon; + + 0, // s8 weapon_firing_status; + + 0, // s8 field_87D; + 0x1, // s8 field_87E; + 0, // s8 field_87F; + + 0, // s32 weapon_hold_time; + 0, // s32 field_884; + 0, // s32 field_888; + 0, // s32 field_88C; + 0, // s32 field_890; + 0, // s32 when_detonating_mines_is_0; + 0, // s32 weapon_current_animation; + 0, // s32 weapon_ammo_in_magazine; + 0, // s32 field_8A0; + 0, // s32 field_8A4; + 0, // s32 field_8A8; + 0, // s32 weapon_next_weapon; + 0, // s32 field_8B0; + 0, // s32 weapon_animation_trigger; + 0, // s32 field_8B8; + 0, // s32 field_8BC; + 0, // s32 field_8C0; + 0, // s32 field_8C4; + 0, // s32 field_8C8; + 0, // s32 field_8CC; + 0, // s32 field_8D0; + 0, // s32 field_8D4; + 0, // s32 field_8D8; + 0, // s32 field_8DC; + 0, // s32 field_8E0; + 0, // s32 field_8E4; + 0, // s32 field_8E8; + + // Mtxf field_8EC; + 1.0f,0,0,0, + 0,1.0f,0,0, + 0,0,1.0f,0, + 0,0,0,1.0f, + + 0, // s32 field_92C; + 0, // s32 field_930; + 0, // s32 field_934; + 0, // s32 field_938; + 0, // s32 field_93C; + 0, // s32 field_940; + -1.0f, // s32 field_944; + 0, // s32 field_948; + 1.0f, // s32 field_94C; + 0, // s32 field_950; + 0, // s32 field_954; + 0, // s32 field_958; + 0, // s32 field_95C; + 0, // s32 field_960; + 0, // s32 field_964; + -VALUENAME, // f32 field_968; + 0, // s32 field_96C; + VALUENAME, // f32 field_970; + 0, // s32 field_974; + + // coord3d blendpos[4]; + 0,0,0, + 0,0,0, + 0,0,0, + 0,0,0, + + // coord3d blendlook[4]; + 0,0,-1.0f, + 0,0,-1.0f, + 0,0,-1.0f, + 0,0,-1.0f, + + // coord3d blendup[4]; + 0,1.0f,0, + 0,1.0f,0, + 0,1.0f,0, + 0,1.0f,0, + + 0, // s32 curblendpos; + 0, // f32 dampt; + 1.0f, // f32 blendscale; + 1.0f, // f32 blendscale1; + 0, // s32 sideflag; + 0, // f32 weapon_theta_displacement; + 0, // f32 weapon_verta_displacement; + 0, // s32 field_A24; + 0, // s32 field_A28; + 0, // s32 field_A2C; + 0, // f32 field_A30; + 0, // f32 field_A34; + 0, // f32 field_A38; + 0, // f32 field_A3C; + 1000.0f, // f32 field_A40; + NULL, // ALSoundState * audioHandle; + 0, // s32 field_A48; + 0, // s32 field_A4C; + 0, // s32 field_A50; + + // // struct ChrRecord_f180 { + { + 0xff, // s8 unk00; + 0, // s8 item_id; // type ITEM_IDS + 0, // char unk02; + 0, // char unk03; + + // coord3d pos; + 0,0,0, + + // /** + // * Offset 0x10 + // */ + // struct coord3d delta; + 0,0,0, + + 0, // f32 unk1c; + + 0, // f32 unk20; + 0, // f32 unk24; + 0 // f32 unk28; + }, + // // } + + 0, // f32 noise; + 0, // f32 field_A84; + 0, // f32 field_A88; + 0, // s32 field_A8C; + NULL, // ObjectRecord* rocket; + 0, // s32 firedrocket; + 0, // s32 field_A98; + 0, // s32 field_A9C; + 0, // s32 field_AA0; + 0, // s32 field_AA4; + 0, // s32 field_AA8; + 0, // s32 field_AAC; + 0, // s32 field_AB0; + 0, // s32 field_AB4; + 0, // s32 field_AB8; + 0, // s32 field_ABC; + 0, // s32 field_AC0; + 0, // s32 field_AC4; + 0, // s32 field_AC8; + 0, // s32 field_ACC; + 0, // s32 field_AD0; + 0, // s32 field_AD4; + + // // offset 0xad8 + // Mtxf throw_item_pos_related; + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + + 0, // s32 field_B18; + 0, // s32 field_B1C; + 0, // s32 field_B20; + 0, // s32 field_B24; + 0, // s32 field_B28; + 0, // s32 field_B2C; + 0, // s32 field_B30; + 0, // s32 field_B34; + 0, // s32 field_B38; + 0, // s32 field_B3C; + 0, // s32 field_B40; + 0, // s32 field_B44; + 0, // s32 field_B48; + 0, // s32 field_B4C; + 0, // s32 field_B50; + 0, // s32 field_B54; + + // coord3d field_B58; + 0,0,0, + + 0, // f32 field_B64; + 0, // s32 field_B68; + 0, // s32 field_B6C; + 0, // s32 field_B70; + 0, // s32 field_B74; + 0, // s32 field_B78; + 0, // s32 field_B7C; + 0, // s32 field_B80; + 0, // s32 field_B84; + 0, // s32 field_B88; + 0, // s32 field_B8C; + 0, // s32 field_B90; + 0, // s32 field_B94; + 0, // s32 field_B98; + 0, // s32 field_B9C; + 0, // s32 field_BA0; + 0, // s32 field_BA4; + 0, // s32 field_BA8; + 0, // s32 field_BAC; + 0, // s32 field_BB0; + 0, // s32 field_BB4; + 0, // s32 field_BB8; + 0, // s32 field_BBC; + 0, // s32 field_BC0; + 0, // s32 field_BC4; + 0, // s32 field_BC8; + 0, // s32 field_BCC; + 0, // s32 field_BD0; + 0, // s32 field_BD4; + 0, // s32 field_BD8; + 0, // s32 field_BDC; + 0, // s32 field_BE0; + 0, // s32 field_BE4; + 0, // s32 field_BE8; + 0, // s32 field_BEC; + 0, // s32 field_BF0; + 0, // s32 field_BF4; + 0, // s32 field_BF8; + 0, // s32 field_BFC; + 0, // s32 field_C00; + 0, // s32 field_C04; + 0, // s32 volley; // Number of bullets discharged in a row. For pistols, it's always 1 even if the fire button is held. + // coord3d item_related; + 0,0,0 }; +void init_player_BONDdata_stats(void) +{ + s32 i; + struct hand sp24; + sp24 = hand_data_dummy; - - - -#ifdef NONMATCHING -void init_player_BONDdata_stats(void) { - s32 sp24; - s32 temp_v0; - s32 temp_v0_2; - s32* temp_t0; - s32* temp_t4; - s32* temp_t6; - s32* temp_t7; - void* temp_t1; - void* temp_t5; - s32* phi_t7; - s32* phi_t6; - s32* phi_t4; - void* phi_t1; - s32* phi_t0; - void* phi_t5; - s32 phi_v0; - - phi_t7 = &BONDdata_item_control_blocks_initdata; - phi_t6 = &sp24; - do { - temp_t7 = phi_t7 + 0xC; - temp_t6 = phi_t6 + 0xC; - temp_t6->unk-C = (s32) *phi_t7; - temp_t6->unk-8 = (s32) temp_t7->unk-8; - temp_t6->unk-4 = (s32) temp_t7->unk-4; - phi_t7 = temp_t7; - phi_t6 = temp_t6; - } while (temp_t7 != (&BONDdata_item_control_blocks_initdata + 0x3A8)); - g_CurrentPlayer->hand_item[0] = mempAllocBytesInBank(size_item_buffer, 4); - if (getPlayerCount() == 1) { - g_CurrentPlayer->hand_item[1] = mempAllocBytesInBank(*(&size_item_buffer + 4), 4); + g_CurrentPlayer->ptr_hand_weapon_buffer[GUNRIGHT] = mempAllocBytesInBank(size_item_buffer[0], MEMPOOL_STAGE); + + if (getPlayerCount() == 1) + { + g_CurrentPlayer->ptr_hand_weapon_buffer[GUNLEFT] = mempAllocBytesInBank(size_item_buffer[1], MEMPOOL_STAGE); } - g_CurrentPlayer->hand_invisible[0] = 0; - g_CurrentPlayer->hand_invisible[1] = 0; - g_CurrentPlayer->hand_item[0] = 0; - g_CurrentPlayer->hand_item[1] = 0; - g_CurrentPlayer->field_2A44[0] = -1; - g_CurrentPlayer->field_2A44[1] = -1; - g_CurrentPlayer->lock_hand_model[0] = 0; - g_CurrentPlayer->lock_hand_model[1] = 0; - phi_t4 = &sp24; - phi_t1 = g_CurrentPlayer; - phi_t0 = &sp24; - phi_v0 = 0; - do { - temp_t4 = phi_t4 + 0xC; - temp_t1 = phi_t1 + 0xC; - temp_t1->right_item_related1 = (s32) *phi_t4; - temp_t1->right_item_related2 = (s32) temp_t4->unk-8; - temp_t1->right_item_related3 = (s32) temp_t4->unk-4; - phi_t4 = temp_t4; - phi_t1 = temp_t1; - } while (temp_t4 != (&sp24 + 0x3A8)); - phi_t5 = g_CurrentPlayer; - do { - temp_t0 = phi_t0 + 0xC; - temp_t5 = phi_t5 + 0xC; - temp_t5->item_related1 = (s32) *phi_t0; - temp_t5->item_related2 = (s32) temp_t0->unk-8; - temp_t5->item_related3 = (s32) temp_t0->unk-4; - phi_t0 = temp_t0; - phi_t5 = temp_t5; - } while (temp_t0 != (&sp24 + 0x3A8)); - do { - temp_v0 = phi_v0 + 4; - (g_CurrentPlayer + phi_v0)->unk1130 = 0; - phi_v0 = temp_v0; - } while (temp_v0 < 0x78); - temp_v0_2 = 3 * 4; - g_playerPerm->pos[0] = 0; - g_playerPerm->pos[1] = 0; - g_playerPerm->pos[2] = 0; - *(g_playerPerm + temp_v0_2) = 0; - (g_playerPerm + temp_v0_2)->unk4 = 0; - (g_playerPerm + temp_v0_2)->unk8 = 0; - (g_playerPerm + temp_v0_2)->unkC = 0; - g_playerPerm->field_6C = 0; - g_playerPerm->unk1C = 0; - g_playerPerm->unk20 = 0; + + g_CurrentPlayer->hand_invisible[GUNRIGHT] = 0; + g_CurrentPlayer->hand_invisible[GUNLEFT] = 0; + g_CurrentPlayer->hand_item[GUNRIGHT] = ITEM_UNARMED; + g_CurrentPlayer->hand_item[GUNLEFT] = ITEM_UNARMED; + g_CurrentPlayer->field_2A44[GUNRIGHT] = -1; + g_CurrentPlayer->field_2A44[GUNLEFT] = -1; + g_CurrentPlayer->lock_hand_model[GUNRIGHT] = 0; + g_CurrentPlayer->lock_hand_model[GUNLEFT] = 0; + + g_CurrentPlayer->hands[0] = sp24; + g_CurrentPlayer->hands[1] = sp24; + + for (i=0; i<30; i++) + { + g_CurrentPlayer->ammoheldarr[i] = 0; + } + + for (i=0; i<7; i++) + { + g_playerPerm->shot_count[i] = 0; + } + + g_playerPerm->killed_civilians = 0; + g_playerPerm->kill_count = 0; + g_playerPerm->killed_gg_owner_count = 0; g_CurrentPlayer->deathcount = 0; g_CurrentPlayer->num_suicides = 0; - g_CurrentPlayer->gunposamplitude = 1; - g_CurrentPlayer->gunxamplitude = 1; + g_CurrentPlayer->gunposamplitude = 1.0f; + g_CurrentPlayer->gunxamplitude = 1.0f; g_CurrentPlayer->field_FC8 = 0; g_CurrentPlayer->field_FCC = 0; g_CurrentPlayer->field_FD0 = 0; @@ -122,21 +290,21 @@ void init_player_BONDdata_stats(void) { g_CurrentPlayer->tileColor.rgba[1] = 0xFF; g_CurrentPlayer->tileColor.rgba[2] = 0xFF; g_CurrentPlayer->tileColor.rgba[3] = 0; - g_CurrentPlayer->resetshadecol = 1; + g_CurrentPlayer->resetshadecol = TRUE; g_CurrentPlayer->aimtype = 0; - g_CurrentPlayer->crosshair_angle[] = 0.0f; - g_CurrentPlayer->crosshair_angle[] = 0.0f; + g_CurrentPlayer->crosshair_angle.f[0] = 0.0f; + g_CurrentPlayer->crosshair_angle.f[1] = 0.0f; g_CurrentPlayer->crosshair_x_pos = 0.0f; g_CurrentPlayer->crosshair_y_pos = 0.0f; g_CurrentPlayer->guncrossdamp = 0.9f; - g_CurrentPlayer->field_FFC.x = 0.0f; - g_CurrentPlayer->field_FFC.y = 0.0f; + g_CurrentPlayer->field_FFC.f[0] = 0.0f; + g_CurrentPlayer->field_FFC.f[1] = 0.0f; g_CurrentPlayer->gun_azimuth_angle = 0.0f; g_CurrentPlayer->gun_azimuth_turning = 0.0f; g_CurrentPlayer->gunaimdamp = 0.9f; - g_CurrentPlayer->field_1010 = 0.0f; - g_CurrentPlayer->holds_neg_pi = -M_PI_F; - g_CurrentPlayer->unk1018 = 0.0f; + g_CurrentPlayer->field_1010.f[0] = 0.0f; + g_CurrentPlayer->field_1010.f[1] = -3.1415927f; + g_CurrentPlayer->field_1010.f[2] = 0.0f; g_CurrentPlayer->copiedgoldeneye = FALSE; g_CurrentPlayer->magnetattracttime = -1; g_CurrentPlayer->gunsync = 0.0f; @@ -151,488 +319,8 @@ void init_player_BONDdata_stats(void) { bgunCalculateBlend(GUNLEFT); bgunCalculateBlend(GUNLEFT); bgunCalculateBlend(GUNLEFT); - g_CurrentPlayer->gunammooff = 0; - g_CurrentPlayer->gunsightmode = 2; //GUNSIGHTREASON_AIMING + g_CurrentPlayer->gunammooff = FALSE; + g_CurrentPlayer->gunsightmode = 2; g_CurrentPlayer->sniper_zoom = sniperrifle_stats.Zoom; g_CurrentPlayer->camera_zoom = camera_stats.Zoom; } -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8004F0E0 -.word 0x3f666666 -glabel fl_neg_pi -.word 0xc0490fdb -.text -glabel init_player_BONDdata_stats -/* 039C00 7F0050D0 27BDFC30 */ addiu $sp, $sp, -0x3d0 -/* 039C04 7F0050D4 3C0F8003 */ lui $t7, %hi(hand_data_dummy) -/* 039C08 7F0050D8 25EFA3D0 */ addiu $t7, %lo(hand_data_dummy) # addiu $t7, $t7, -0x5c30 -/* 039C0C 7F0050DC AFBF001C */ sw $ra, 0x1c($sp) -/* 039C10 7F0050E0 AFB00018 */ sw $s0, 0x18($sp) -/* 039C14 7F0050E4 25E803A8 */ addiu $t0, $t7, 0x3a8 -/* 039C18 7F0050E8 27AE0024 */ addiu $t6, $sp, 0x24 -.L7F0050EC: -/* 039C1C 7F0050EC 8DE10000 */ lw $at, ($t7) -/* 039C20 7F0050F0 25EF000C */ addiu $t7, $t7, 0xc -/* 039C24 7F0050F4 25CE000C */ addiu $t6, $t6, 0xc -/* 039C28 7F0050F8 ADC1FFF4 */ sw $at, -0xc($t6) -/* 039C2C 7F0050FC 8DE1FFF8 */ lw $at, -8($t7) -/* 039C30 7F005100 ADC1FFF8 */ sw $at, -8($t6) -/* 039C34 7F005104 8DE1FFFC */ lw $at, -4($t7) -/* 039C38 7F005108 15E8FFF8 */ bne $t7, $t0, .L7F0050EC -/* 039C3C 7F00510C ADC1FFFC */ sw $at, -4($t6) -/* 039C40 7F005110 3C048003 */ lui $a0, %hi(size_item_buffer) -/* 039C44 7F005114 8C84245C */ lw $a0, %lo(size_item_buffer)($a0) -/* 039C48 7F005118 0C0025C8 */ jal mempAllocBytesInBank -/* 039C4C 7F00511C 24050004 */ li $a1, 4 -/* 039C50 7F005120 3C108008 */ lui $s0, %hi(g_CurrentPlayer) -/* 039C54 7F005124 2610A0B0 */ addiu $s0, %lo(g_CurrentPlayer) # addiu $s0, $s0, -0x5f50 -/* 039C58 7F005128 8E090000 */ lw $t1, ($s0) -/* 039C5C 7F00512C 0FC26919 */ jal getPlayerCount -/* 039C60 7F005130 AD220808 */ sw $v0, 0x808($t1) -/* 039C64 7F005134 24010001 */ li $at, 1 -/* 039C68 7F005138 14410006 */ bne $v0, $at, .L7F005154 -/* 039C6C 7F00513C 3C048003 */ lui $a0, %hi(size_item_buffer+0x4) -/* 039C70 7F005140 8C842460 */ lw $a0, %lo(size_item_buffer+0x4)($a0) -/* 039C74 7F005144 0C0025C8 */ jal mempAllocBytesInBank -/* 039C78 7F005148 24050004 */ li $a1, 4 -/* 039C7C 7F00514C 8E0A0000 */ lw $t2, ($s0) -/* 039C80 7F005150 AD42080C */ sw $v0, 0x80c($t2) -.L7F005154: -/* 039C84 7F005154 8E0B0000 */ lw $t3, ($s0) -/* 039C88 7F005158 2405FFFF */ li $a1, -1 -/* 039C8C 7F00515C 27A30024 */ addiu $v1, $sp, 0x24 -/* 039C90 7F005160 AD6007F8 */ sw $zero, 0x7f8($t3) -/* 039C94 7F005164 8E0C0000 */ lw $t4, ($s0) -/* 039C98 7F005168 246B03A8 */ addiu $t3, $v1, 0x3a8 -/* 039C9C 7F00516C 00001025 */ move $v0, $zero -/* 039CA0 7F005170 AD8007FC */ sw $zero, 0x7fc($t4) -/* 039CA4 7F005174 8E0D0000 */ lw $t5, ($s0) -/* 039CA8 7F005178 00606025 */ move $t4, $v1 -/* 039CAC 7F00517C ADA00800 */ sw $zero, 0x800($t5) -/* 039CB0 7F005180 8E190000 */ lw $t9, ($s0) -/* 039CB4 7F005184 AF200804 */ sw $zero, 0x804($t9) -/* 039CB8 7F005188 8E180000 */ lw $t8, ($s0) -/* 039CBC 7F00518C AF052A44 */ sw $a1, 0x2a44($t8) -/* 039CC0 7F005190 8E080000 */ lw $t0, ($s0) -/* 039CC4 7F005194 247803A8 */ addiu $t8, $v1, 0x3a8 -/* 039CC8 7F005198 AD052A48 */ sw $a1, 0x2a48($t0) -/* 039CCC 7F00519C 8E0F0000 */ lw $t7, ($s0) -/* 039CD0 7F0051A0 00604025 */ move $t0, $v1 -/* 039CD4 7F0051A4 3C038008 */ lui $v1, %hi(g_playerPerm) -/* 039CD8 7F0051A8 ADE02A50 */ sw $zero, 0x2a50($t7) -/* 039CDC 7F0051AC 8E0E0000 */ lw $t6, ($s0) -/* 039CE0 7F0051B0 2463A0B4 */ addiu $v1, %lo(g_playerPerm) # addiu $v1, $v1, -0x5f4c -/* 039CE4 7F0051B4 ADC02A54 */ sw $zero, 0x2a54($t6) -/* 039CE8 7F0051B8 8E090000 */ lw $t1, ($s0) -.L7F0051BC: -/* 039CEC 7F0051BC 8D810000 */ lw $at, ($t4) -/* 039CF0 7F0051C0 258C000C */ addiu $t4, $t4, 0xc -/* 039CF4 7F0051C4 2529000C */ addiu $t1, $t1, 0xc -/* 039CF8 7F0051C8 AD210864 */ sw $at, 0x864($t1) -/* 039CFC 7F0051CC 8D81FFF8 */ lw $at, -8($t4) -/* 039D00 7F0051D0 AD210868 */ sw $at, 0x868($t1) -/* 039D04 7F0051D4 8D81FFFC */ lw $at, -4($t4) -/* 039D08 7F0051D8 158BFFF8 */ bne $t4, $t3, .L7F0051BC -/* 039D0C 7F0051DC AD21086C */ sw $at, 0x86c($t1) -/* 039D10 7F0051E0 8E0D0000 */ lw $t5, ($s0) -.L7F0051E4: -/* 039D14 7F0051E4 8D010000 */ lw $at, ($t0) -/* 039D18 7F0051E8 2508000C */ addiu $t0, $t0, 0xc -/* 039D1C 7F0051EC 25AD000C */ addiu $t5, $t5, 0xc -/* 039D20 7F0051F0 ADA10C0C */ sw $at, 0xc0c($t5) -/* 039D24 7F0051F4 8D01FFF8 */ lw $at, -8($t0) -/* 039D28 7F0051F8 ADA10C10 */ sw $at, 0xc10($t5) -/* 039D2C 7F0051FC 8D01FFFC */ lw $at, -4($t0) -/* 039D30 7F005200 1518FFF8 */ bne $t0, $t8, .L7F0051E4 -/* 039D34 7F005204 ADA10C14 */ sw $at, 0xc14($t5) -.L7F005208: -/* 039D38 7F005208 8E0F0000 */ lw $t7, ($s0) -/* 039D3C 7F00520C 01E27021 */ addu $t6, $t7, $v0 -/* 039D40 7F005210 24420004 */ addiu $v0, $v0, 4 -/* 039D44 7F005214 28410078 */ slti $at, $v0, 0x78 -/* 039D48 7F005218 1420FFFB */ bnez $at, .L7F005208 -/* 039D4C 7F00521C ADC01130 */ sw $zero, 0x1130($t6) -/* 039D50 7F005220 8C6A0000 */ lw $t2, ($v1) -/* 039D54 7F005224 24040003 */ li $a0, 3 -/* 039D58 7F005228 00041080 */ sll $v0, $a0, 2 -/* 039D5C 7F00522C AD400000 */ sw $zero, ($t2) -/* 039D60 7F005230 8C6B0000 */ lw $t3, ($v1) -/* 039D64 7F005234 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 039D68 7F005238 44811000 */ mtc1 $at, $f2 -/* 039D6C 7F00523C AD600004 */ sw $zero, 4($t3) -/* 039D70 7F005240 8C6C0000 */ lw $t4, ($v1) -/* 039D74 7F005244 3C018005 */ lui $at, %hi(D_8004F0E0) -/* 039D78 7F005248 44800000 */ mtc1 $zero, $f0 -/* 039D7C 7F00524C AD800008 */ sw $zero, 8($t4) -/* 039D80 7F005250 8C690000 */ lw $t1, ($v1) -/* 039D84 7F005254 00002025 */ move $a0, $zero -/* 039D88 7F005258 0122C821 */ addu $t9, $t1, $v0 -/* 039D8C 7F00525C AF200000 */ sw $zero, ($t9) -/* 039D90 7F005260 8C780000 */ lw $t8, ($v1) -/* 039D94 7F005264 03024021 */ addu $t0, $t8, $v0 -/* 039D98 7F005268 AD000004 */ sw $zero, 4($t0) -/* 039D9C 7F00526C 8C6D0000 */ lw $t5, ($v1) -/* 039DA0 7F005270 01A27821 */ addu $t7, $t5, $v0 -/* 039DA4 7F005274 ADE00008 */ sw $zero, 8($t7) -/* 039DA8 7F005278 8C6E0000 */ lw $t6, ($v1) -/* 039DAC 7F00527C 01C25021 */ addu $t2, $t6, $v0 -/* 039DB0 7F005280 AD40000C */ sw $zero, 0xc($t2) -/* 039DB4 7F005284 8C6B0000 */ lw $t3, ($v1) -/* 039DB8 7F005288 C42CF0E0 */ lwc1 $f12, %lo(D_8004F0E0)($at) -/* 039DBC 7F00528C 240200FF */ li $v0, 255 -/* 039DC0 7F005290 AD60006C */ sw $zero, 0x6c($t3) -/* 039DC4 7F005294 8C6C0000 */ lw $t4, ($v1) -/* 039DC8 7F005298 3C018005 */ lui $at, %hi(fl_neg_pi) -/* 039DCC 7F00529C AD80001C */ sw $zero, 0x1c($t4) -/* 039DD0 7F0052A0 8C690000 */ lw $t1, ($v1) -/* 039DD4 7F0052A4 AD200020 */ sw $zero, 0x20($t1) -/* 039DD8 7F0052A8 8E190000 */ lw $t9, ($s0) -/* 039DDC 7F0052AC AF2029D8 */ sw $zero, 0x29d8($t9) -/* 039DE0 7F0052B0 8E180000 */ lw $t8, ($s0) -/* 039DE4 7F0052B4 AF0029DC */ sw $zero, 0x29dc($t8) -/* 039DE8 7F0052B8 8E080000 */ lw $t0, ($s0) -/* 039DEC 7F0052BC E5020FC0 */ swc1 $f2, 0xfc0($t0) -/* 039DF0 7F0052C0 8E0D0000 */ lw $t5, ($s0) -/* 039DF4 7F0052C4 E5A20FC4 */ swc1 $f2, 0xfc4($t5) -/* 039DF8 7F0052C8 8E0F0000 */ lw $t7, ($s0) -/* 039DFC 7F0052CC 240D0001 */ li $t5, 1 -/* 039E00 7F0052D0 ADE00FC8 */ sw $zero, 0xfc8($t7) -/* 039E04 7F0052D4 8E0E0000 */ lw $t6, ($s0) -/* 039E08 7F0052D8 ADC00FCC */ sw $zero, 0xfcc($t6) -/* 039E0C 7F0052DC 8E0A0000 */ lw $t2, ($s0) -/* 039E10 7F0052E0 AD400FD0 */ sw $zero, 0xfd0($t2) -/* 039E14 7F0052E4 8E0B0000 */ lw $t3, ($s0) -/* 039E18 7F0052E8 AD600FD4 */ sw $zero, 0xfd4($t3) -/* 039E1C 7F0052EC 8E0C0000 */ lw $t4, ($s0) -/* 039E20 7F0052F0 AD800FD8 */ sw $zero, 0xfd8($t4) -/* 039E24 7F0052F4 8E090000 */ lw $t1, ($s0) -/* 039E28 7F0052F8 A1220FDC */ sb $v0, 0xfdc($t1) -/* 039E2C 7F0052FC 8E190000 */ lw $t9, ($s0) -/* 039E30 7F005300 A3220FDD */ sb $v0, 0xfdd($t9) -/* 039E34 7F005304 8E180000 */ lw $t8, ($s0) -/* 039E38 7F005308 A3020FDE */ sb $v0, 0xfde($t8) -/* 039E3C 7F00530C 8E080000 */ lw $t0, ($s0) -/* 039E40 7F005310 A1000FDF */ sb $zero, 0xfdf($t0) -/* 039E44 7F005314 8E0F0000 */ lw $t7, ($s0) -/* 039E48 7F005318 ADED0FE0 */ sw $t5, 0xfe0($t7) -/* 039E4C 7F00531C 8E0E0000 */ lw $t6, ($s0) -/* 039E50 7F005320 ADC00FE4 */ sw $zero, 0xfe4($t6) -/* 039E54 7F005324 8E0A0000 */ lw $t2, ($s0) -/* 039E58 7F005328 E5400FE8 */ swc1 $f0, 0xfe8($t2) -/* 039E5C 7F00532C 8E0B0000 */ lw $t3, ($s0) -/* 039E60 7F005330 E5600FEC */ swc1 $f0, 0xfec($t3) -/* 039E64 7F005334 8E0C0000 */ lw $t4, ($s0) -/* 039E68 7F005338 E5800FF0 */ swc1 $f0, 0xff0($t4) -/* 039E6C 7F00533C 8E090000 */ lw $t1, ($s0) -/* 039E70 7F005340 E5200FF4 */ swc1 $f0, 0xff4($t1) -/* 039E74 7F005344 8E190000 */ lw $t9, ($s0) -/* 039E78 7F005348 E72C0FF8 */ swc1 $f12, 0xff8($t9) -/* 039E7C 7F00534C 8E180000 */ lw $t8, ($s0) -/* 039E80 7F005350 E7000FFC */ swc1 $f0, 0xffc($t8) -/* 039E84 7F005354 8E080000 */ lw $t0, ($s0) -/* 039E88 7F005358 E5001000 */ swc1 $f0, 0x1000($t0) -/* 039E8C 7F00535C 8E0D0000 */ lw $t5, ($s0) -/* 039E90 7F005360 E5A01004 */ swc1 $f0, 0x1004($t5) -/* 039E94 7F005364 8E0F0000 */ lw $t7, ($s0) -/* 039E98 7F005368 E5E01008 */ swc1 $f0, 0x1008($t7) -/* 039E9C 7F00536C 8E0E0000 */ lw $t6, ($s0) -/* 039EA0 7F005370 E5CC100C */ swc1 $f12, 0x100c($t6) -/* 039EA4 7F005374 8E0A0000 */ lw $t2, ($s0) -/* 039EA8 7F005378 E5401010 */ swc1 $f0, 0x1010($t2) -/* 039EAC 7F00537C 8E0B0000 */ lw $t3, ($s0) -/* 039EB0 7F005380 C424F0E4 */ lwc1 $f4, %lo(fl_neg_pi)($at) -/* 039EB4 7F005384 E5641014 */ swc1 $f4, 0x1014($t3) -/* 039EB8 7F005388 8E0C0000 */ lw $t4, ($s0) -/* 039EBC 7F00538C E5801018 */ swc1 $f0, 0x1018($t4) -/* 039EC0 7F005390 8E090000 */ lw $t1, ($s0) -/* 039EC4 7F005394 AD201060 */ sw $zero, 0x1060($t1) -/* 039EC8 7F005398 8E190000 */ lw $t9, ($s0) -/* 039ECC 7F00539C AF251270 */ sw $a1, 0x1270($t9) -/* 039ED0 7F0053A0 8E180000 */ lw $t8, ($s0) -/* 039ED4 7F0053A4 E700106C */ swc1 $f0, 0x106c($t8) -/* 039ED8 7F0053A8 8E080000 */ lw $t0, ($s0) -/* 039EDC 7F0053AC E5001070 */ swc1 $f0, 0x1070($t0) -/* 039EE0 7F0053B0 8E0D0000 */ lw $t5, ($s0) -/* 039EE4 7F0053B4 E5A01074 */ swc1 $f0, 0x1074($t5) -/* 039EE8 7F0053B8 8E0F0000 */ lw $t7, ($s0) -/* 039EEC 7F0053BC ADE01078 */ sw $zero, 0x1078($t7) -/* 039EF0 7F0053C0 8E0E0000 */ lw $t6, ($s0) -/* 039EF4 7F0053C4 E5C0107C */ swc1 $f0, 0x107c($t6) -/* 039EF8 7F0053C8 8E0A0000 */ lw $t2, ($s0) -/* 039EFC 7F0053CC 0FC17260 */ jal bgunCalculateBlend -/* 039F00 7F0053D0 E5401080 */ swc1 $f0, 0x1080($t2) -/* 039F04 7F0053D4 0FC17260 */ jal bgunCalculateBlend -/* 039F08 7F0053D8 00002025 */ move $a0, $zero -/* 039F0C 7F0053DC 0FC17260 */ jal bgunCalculateBlend -/* 039F10 7F0053E0 00002025 */ move $a0, $zero -/* 039F14 7F0053E4 0FC17260 */ jal bgunCalculateBlend -/* 039F18 7F0053E8 24040001 */ li $a0, 1 -/* 039F1C 7F0053EC 0FC17260 */ jal bgunCalculateBlend -/* 039F20 7F0053F0 24040001 */ li $a0, 1 -/* 039F24 7F0053F4 0FC17260 */ jal bgunCalculateBlend -/* 039F28 7F0053F8 24040001 */ li $a0, 1 -/* 039F2C 7F0053FC 8E0B0000 */ lw $t3, ($s0) -/* 039F30 7F005400 240C0002 */ li $t4, 2 -/* 039F34 7F005404 3C018003 */ lui $at, %hi(sniperrifle_stats+52) -/* 039F38 7F005408 AD601064 */ sw $zero, 0x1064($t3) -/* 039F3C 7F00540C 8E090000 */ lw $t1, ($s0) -/* 039F40 7F005410 AD2C1128 */ sw $t4, 0x1128($t1) -/* 039F44 7F005414 8E190000 */ lw $t9, ($s0) -/* 039F48 7F005418 C4262C38 */ lwc1 $f6, %lo(sniperrifle_stats+52)($at) -/* 039F4C 7F00541C 3C018003 */ lui $at, %hi(camera_stats+52) -/* 039F50 7F005420 E7261084 */ swc1 $f6, 0x1084($t9) -/* 039F54 7F005424 8E180000 */ lw $t8, ($s0) -/* 039F58 7F005428 C42836B8 */ lwc1 $f8, %lo(camera_stats+52)($at) -/* 039F5C 7F00542C E7081088 */ swc1 $f8, 0x1088($t8) -/* 039F60 7F005430 8FBF001C */ lw $ra, 0x1c($sp) -/* 039F64 7F005434 8FB00018 */ lw $s0, 0x18($sp) -/* 039F68 7F005438 27BD03D0 */ addiu $sp, $sp, 0x3d0 -/* 039F6C 7F00543C 03E00008 */ jr $ra -/* 039F70 7F005440 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8004F0E0 -.word 0x3f666666 -glabel fl_neg_pi -.word 0xc0490fdb - -.text -glabel init_player_BONDdata_stats -/* 037A60 7F005070 27BDFC30 */ addiu $sp, $sp, -0x3d0 -/* 037A64 7F005074 3C0F8002 */ lui $t7, %hi(hand_data_dummy) # $t7, 0x8002 -/* 037A68 7F005078 25EF5920 */ addiu $t7, %lo(hand_data_dummy) # addiu $t7, $t7, 0x5920 -/* 037A6C 7F00507C AFBF001C */ sw $ra, 0x1c($sp) -/* 037A70 7F005080 AFB00018 */ sw $s0, 0x18($sp) -/* 037A74 7F005084 25E803A8 */ addiu $t0, $t7, 0x3a8 -/* 037A78 7F005088 27AE0024 */ addiu $t6, $sp, 0x24 -.L7F00508C: -/* 037A7C 7F00508C 8DE10000 */ lw $at, ($t7) -/* 037A80 7F005090 25EF000C */ addiu $t7, $t7, 0xc -/* 037A84 7F005094 25CE000C */ addiu $t6, $t6, 0xc -/* 037A88 7F005098 ADC1FFF4 */ sw $at, -0xc($t6) -/* 037A8C 7F00509C 8DE1FFF8 */ lw $at, -8($t7) -/* 037A90 7F0050A0 ADC1FFF8 */ sw $at, -8($t6) -/* 037A94 7F0050A4 8DE1FFFC */ lw $at, -4($t7) -/* 037A98 7F0050A8 15E8FFF8 */ bne $t7, $t0, .L7F00508C -/* 037A9C 7F0050AC ADC1FFFC */ sw $at, -4($t6) -/* 037AA0 7F0050B0 3C048003 */ lui $a0, %hi(size_item_buffer) # $a0, 0x8003 -/* 037AA4 7F0050B4 8C84D9AC */ lw $a0, %lo(size_item_buffer)($a0) -/* 037AA8 7F0050B8 0C0022E0 */ jal mempAllocBytesInBank -/* 037AAC 7F0050BC 24050004 */ li $a1, 4 -/* 037AB0 7F0050C0 3C108007 */ lui $s0, %hi(g_CurrentPlayer) # $s0, 0x8007 -/* 037AB4 7F0050C4 26108BC0 */ addiu $s0, %lo(g_CurrentPlayer) # addiu $s0, $s0, -0x7440 -/* 037AB8 7F0050C8 8E090000 */ lw $t1, ($s0) -/* 037ABC 7F0050CC 0FC26669 */ jal getPlayerCount -/* 037AC0 7F0050D0 AD220808 */ sw $v0, 0x808($t1) -/* 037AC4 7F0050D4 24010001 */ li $at, 1 -/* 037AC8 7F0050D8 14410006 */ bne $v0, $at, .L7F0050F4 -/* 037ACC 7F0050DC 3C048003 */ lui $a0, %hi(size_item_buffer+0x4) # $a0, 0x8003 -/* 037AD0 7F0050E0 8C84D9B0 */ lw $a0, %lo(size_item_buffer+0x4)($a0) -/* 037AD4 7F0050E4 0C0022E0 */ jal mempAllocBytesInBank -/* 037AD8 7F0050E8 24050004 */ li $a1, 4 -/* 037ADC 7F0050EC 8E0A0000 */ lw $t2, ($s0) -/* 037AE0 7F0050F0 AD42080C */ sw $v0, 0x80c($t2) -.L7F0050F4: -/* 037AE4 7F0050F4 8E0B0000 */ lw $t3, ($s0) -/* 037AE8 7F0050F8 2405FFFF */ li $a1, -1 -/* 037AEC 7F0050FC 27A30024 */ addiu $v1, $sp, 0x24 -/* 037AF0 7F005100 AD6007F8 */ sw $zero, 0x7f8($t3) -/* 037AF4 7F005104 8E0C0000 */ lw $t4, ($s0) -/* 037AF8 7F005108 246B03A8 */ addiu $t3, $v1, 0x3a8 -/* 037AFC 7F00510C 00001025 */ move $v0, $zero -/* 037B00 7F005110 AD8007FC */ sw $zero, 0x7fc($t4) -/* 037B04 7F005114 8E0D0000 */ lw $t5, ($s0) -/* 037B08 7F005118 00606025 */ move $t4, $v1 -/* 037B0C 7F00511C ADA00800 */ sw $zero, 0x800($t5) -/* 037B10 7F005120 8E190000 */ lw $t9, ($s0) -/* 037B14 7F005124 AF200804 */ sw $zero, 0x804($t9) -/* 037B18 7F005128 8E180000 */ lw $t8, ($s0) -/* 037B1C 7F00512C AF052A3C */ sw $a1, 0x2a3c($t8) -/* 037B20 7F005130 8E080000 */ lw $t0, ($s0) -/* 037B24 7F005134 247803A8 */ addiu $t8, $v1, 0x3a8 -/* 037B28 7F005138 AD052A40 */ sw $a1, 0x2a40($t0) -/* 037B2C 7F00513C 8E0F0000 */ lw $t7, ($s0) -/* 037B30 7F005140 00604025 */ move $t0, $v1 -/* 037B34 7F005144 3C038007 */ lui $v1, %hi(g_playerPerm) # $v1, 0x8007 -/* 037B38 7F005148 ADE02A48 */ sw $zero, 0x2a48($t7) -/* 037B3C 7F00514C 8E0E0000 */ lw $t6, ($s0) -/* 037B40 7F005150 24638BC4 */ addiu $v1, %lo(g_playerPerm) # addiu $v1, $v1, -0x743c -/* 037B44 7F005154 ADC02A4C */ sw $zero, 0x2a4c($t6) -/* 037B48 7F005158 8E090000 */ lw $t1, ($s0) -.L7F00515C: -/* 037B4C 7F00515C 8D810000 */ lw $at, ($t4) -/* 037B50 7F005160 258C000C */ addiu $t4, $t4, 0xc -/* 037B54 7F005164 2529000C */ addiu $t1, $t1, 0xc -/* 037B58 7F005168 AD21085C */ sw $at, 0x85c($t1) -/* 037B5C 7F00516C 8D81FFF8 */ lw $at, -8($t4) -/* 037B60 7F005170 AD210860 */ sw $at, 0x860($t1) -/* 037B64 7F005174 8D81FFFC */ lw $at, -4($t4) -/* 037B68 7F005178 158BFFF8 */ bne $t4, $t3, .L7F00515C -/* 037B6C 7F00517C AD210864 */ sw $at, 0x864($t1) -/* 037B70 7F005180 8E0D0000 */ lw $t5, ($s0) -.L7F005184: -/* 037B74 7F005184 8D010000 */ lw $at, ($t0) -/* 037B78 7F005188 2508000C */ addiu $t0, $t0, 0xc -/* 037B7C 7F00518C 25AD000C */ addiu $t5, $t5, 0xc -/* 037B80 7F005190 ADA10C04 */ sw $at, 0xc04($t5) -/* 037B84 7F005194 8D01FFF8 */ lw $at, -8($t0) -/* 037B88 7F005198 ADA10C08 */ sw $at, 0xc08($t5) -/* 037B8C 7F00519C 8D01FFFC */ lw $at, -4($t0) -/* 037B90 7F0051A0 1518FFF8 */ bne $t0, $t8, .L7F005184 -/* 037B94 7F0051A4 ADA10C0C */ sw $at, 0xc0c($t5) -.L7F0051A8: -/* 037B98 7F0051A8 8E0F0000 */ lw $t7, ($s0) -/* 037B9C 7F0051AC 01E27021 */ addu $t6, $t7, $v0 -/* 037BA0 7F0051B0 24420004 */ addiu $v0, $v0, 4 -/* 037BA4 7F0051B4 28410078 */ slti $at, $v0, 0x78 -/* 037BA8 7F0051B8 1420FFFB */ bnez $at, .L7F0051A8 -/* 037BAC 7F0051BC ADC01128 */ sw $zero, 0x1128($t6) -/* 037BB0 7F0051C0 8C6A0000 */ lw $t2, ($v1) -/* 037BB4 7F0051C4 24040003 */ li $a0, 3 -/* 037BB8 7F0051C8 00041080 */ sll $v0, $a0, 2 -/* 037BBC 7F0051CC AD400000 */ sw $zero, ($t2) -/* 037BC0 7F0051D0 8C6B0000 */ lw $t3, ($v1) -/* 037BC4 7F0051D4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 037BC8 7F0051D8 44811000 */ mtc1 $at, $f2 -/* 037BCC 7F0051DC AD600004 */ sw $zero, 4($t3) -/* 037BD0 7F0051E0 8C6C0000 */ lw $t4, ($v1) -/* 037BD4 7F0051E4 3C018004 */ lui $at, %hi(D_8004F0E0) # $at, 0x8004 -/* 037BD8 7F0051E8 44800000 */ mtc1 $zero, $f0 -/* 037BDC 7F0051EC AD800008 */ sw $zero, 8($t4) -/* 037BE0 7F0051F0 8C690000 */ lw $t1, ($v1) -/* 037BE4 7F0051F4 00002025 */ move $a0, $zero -/* 037BE8 7F0051F8 0122C821 */ addu $t9, $t1, $v0 -/* 037BEC 7F0051FC AF200000 */ sw $zero, ($t9) -/* 037BF0 7F005200 8C780000 */ lw $t8, ($v1) -/* 037BF4 7F005204 03024021 */ addu $t0, $t8, $v0 -/* 037BF8 7F005208 AD000004 */ sw $zero, 4($t0) -/* 037BFC 7F00520C 8C6D0000 */ lw $t5, ($v1) -/* 037C00 7F005210 01A27821 */ addu $t7, $t5, $v0 -/* 037C04 7F005214 ADE00008 */ sw $zero, 8($t7) -/* 037C08 7F005218 8C6E0000 */ lw $t6, ($v1) -/* 037C0C 7F00521C 01C25021 */ addu $t2, $t6, $v0 -/* 037C10 7F005220 AD40000C */ sw $zero, 0xc($t2) -/* 037C14 7F005224 8C6B0000 */ lw $t3, ($v1) -/* 037C18 7F005228 C42C7530 */ lwc1 $f12, %lo(D_8004F0E0)($at) -/* 037C1C 7F00522C 240200FF */ li $v0, 255 -/* 037C20 7F005230 AD60006C */ sw $zero, 0x6c($t3) -/* 037C24 7F005234 8C6C0000 */ lw $t4, ($v1) -/* 037C28 7F005238 3C018004 */ lui $at, %hi(fl_neg_pi) # $at, 0x8004 -/* 037C2C 7F00523C AD80001C */ sw $zero, 0x1c($t4) -/* 037C30 7F005240 8C690000 */ lw $t1, ($v1) -/* 037C34 7F005244 AD200020 */ sw $zero, 0x20($t1) -/* 037C38 7F005248 8E190000 */ lw $t9, ($s0) -/* 037C3C 7F00524C AF2029D0 */ sw $zero, 0x29d0($t9) -/* 037C40 7F005250 8E180000 */ lw $t8, ($s0) -/* 037C44 7F005254 AF0029D4 */ sw $zero, 0x29d4($t8) -/* 037C48 7F005258 8E080000 */ lw $t0, ($s0) -/* 037C4C 7F00525C E5020FB8 */ swc1 $f2, 0xfb8($t0) -/* 037C50 7F005260 8E0D0000 */ lw $t5, ($s0) -/* 037C54 7F005264 E5A20FBC */ swc1 $f2, 0xfbc($t5) -/* 037C58 7F005268 8E0F0000 */ lw $t7, ($s0) -/* 037C5C 7F00526C 240D0001 */ li $t5, 1 -/* 037C60 7F005270 ADE00FC0 */ sw $zero, 0xfc0($t7) -/* 037C64 7F005274 8E0E0000 */ lw $t6, ($s0) -/* 037C68 7F005278 ADC00FC4 */ sw $zero, 0xfc4($t6) -/* 037C6C 7F00527C 8E0A0000 */ lw $t2, ($s0) -/* 037C70 7F005280 AD400FC8 */ sw $zero, 0xfc8($t2) -/* 037C74 7F005284 8E0B0000 */ lw $t3, ($s0) -/* 037C78 7F005288 AD600FCC */ sw $zero, 0xfcc($t3) -/* 037C7C 7F00528C 8E0C0000 */ lw $t4, ($s0) -/* 037C80 7F005290 AD800FD0 */ sw $zero, 0xfd0($t4) -/* 037C84 7F005294 8E090000 */ lw $t1, ($s0) -/* 037C88 7F005298 A1220FD4 */ sb $v0, 0xfd4($t1) -/* 037C8C 7F00529C 8E190000 */ lw $t9, ($s0) -/* 037C90 7F0052A0 A3220FD5 */ sb $v0, 0xfd5($t9) -/* 037C94 7F0052A4 8E180000 */ lw $t8, ($s0) -/* 037C98 7F0052A8 A3020FD6 */ sb $v0, 0xfd6($t8) -/* 037C9C 7F0052AC 8E080000 */ lw $t0, ($s0) -/* 037CA0 7F0052B0 A1000FD7 */ sb $zero, 0xfd7($t0) -/* 037CA4 7F0052B4 8E0F0000 */ lw $t7, ($s0) -/* 037CA8 7F0052B8 ADED0FD8 */ sw $t5, 0xfd8($t7) -/* 037CAC 7F0052BC 8E0E0000 */ lw $t6, ($s0) -/* 037CB0 7F0052C0 ADC00FDC */ sw $zero, 0xfdc($t6) -/* 037CB4 7F0052C4 8E0A0000 */ lw $t2, ($s0) -/* 037CB8 7F0052C8 E5400FE0 */ swc1 $f0, 0xfe0($t2) -/* 037CBC 7F0052CC 8E0B0000 */ lw $t3, ($s0) -/* 037CC0 7F0052D0 E5600FE4 */ swc1 $f0, 0xfe4($t3) -/* 037CC4 7F0052D4 8E0C0000 */ lw $t4, ($s0) -/* 037CC8 7F0052D8 E5800FE8 */ swc1 $f0, 0xfe8($t4) -/* 037CCC 7F0052DC 8E090000 */ lw $t1, ($s0) -/* 037CD0 7F0052E0 E5200FEC */ swc1 $f0, 0xfec($t1) -/* 037CD4 7F0052E4 8E190000 */ lw $t9, ($s0) -/* 037CD8 7F0052E8 E72C0FF0 */ swc1 $f12, 0xff0($t9) -/* 037CDC 7F0052EC 8E180000 */ lw $t8, ($s0) -/* 037CE0 7F0052F0 E7000FF4 */ swc1 $f0, 0xff4($t8) -/* 037CE4 7F0052F4 8E080000 */ lw $t0, ($s0) -/* 037CE8 7F0052F8 E5000FF8 */ swc1 $f0, 0xff8($t0) -/* 037CEC 7F0052FC 8E0D0000 */ lw $t5, ($s0) -/* 037CF0 7F005300 E5A00FFC */ swc1 $f0, 0xffc($t5) -/* 037CF4 7F005304 8E0F0000 */ lw $t7, ($s0) -/* 037CF8 7F005308 E5E01000 */ swc1 $f0, 0x1000($t7) -/* 037CFC 7F00530C 8E0E0000 */ lw $t6, ($s0) -/* 037D00 7F005310 E5CC1004 */ swc1 $f12, 0x1004($t6) -/* 037D04 7F005314 8E0A0000 */ lw $t2, ($s0) -/* 037D08 7F005318 E5401008 */ swc1 $f0, 0x1008($t2) -/* 037D0C 7F00531C 8E0B0000 */ lw $t3, ($s0) -/* 037D10 7F005320 C4247534 */ lwc1 $f4, %lo(fl_neg_pi)($at) -/* 037D14 7F005324 E564100C */ swc1 $f4, 0x100c($t3) -/* 037D18 7F005328 8E0C0000 */ lw $t4, ($s0) -/* 037D1C 7F00532C E5801010 */ swc1 $f0, 0x1010($t4) -/* 037D20 7F005330 8E090000 */ lw $t1, ($s0) -/* 037D24 7F005334 AD201058 */ sw $zero, 0x1058($t1) -/* 037D28 7F005338 8E190000 */ lw $t9, ($s0) -/* 037D2C 7F00533C AF251268 */ sw $a1, 0x1268($t9) -/* 037D30 7F005340 8E180000 */ lw $t8, ($s0) -/* 037D34 7F005344 E7001064 */ swc1 $f0, 0x1064($t8) -/* 037D38 7F005348 8E080000 */ lw $t0, ($s0) -/* 037D3C 7F00534C E5001068 */ swc1 $f0, 0x1068($t0) -/* 037D40 7F005350 8E0D0000 */ lw $t5, ($s0) -/* 037D44 7F005354 E5A0106C */ swc1 $f0, 0x106c($t5) -/* 037D48 7F005358 8E0F0000 */ lw $t7, ($s0) -/* 037D4C 7F00535C ADE01070 */ sw $zero, 0x1070($t7) -/* 037D50 7F005360 8E0E0000 */ lw $t6, ($s0) -/* 037D54 7F005364 E5C01074 */ swc1 $f0, 0x1074($t6) -/* 037D58 7F005368 8E0A0000 */ lw $t2, ($s0) -/* 037D5C 7F00536C 0FC1738C */ jal bgunCalculateBlend -/* 037D60 7F005370 E5401078 */ swc1 $f0, 0x1078($t2) -/* 037D64 7F005374 0FC1738C */ jal bgunCalculateBlend -/* 037D68 7F005378 00002025 */ move $a0, $zero -/* 037D6C 7F00537C 0FC1738C */ jal bgunCalculateBlend -/* 037D70 7F005380 00002025 */ move $a0, $zero -/* 037D74 7F005384 0FC1738C */ jal bgunCalculateBlend -/* 037D78 7F005388 24040001 */ li $a0, 1 -/* 037D7C 7F00538C 0FC1738C */ jal bgunCalculateBlend -/* 037D80 7F005390 24040001 */ li $a0, 1 -/* 037D84 7F005394 0FC1738C */ jal bgunCalculateBlend -/* 037D88 7F005398 24040001 */ li $a0, 1 -/* 037D8C 7F00539C 8E0B0000 */ lw $t3, ($s0) -/* 037D90 7F0053A0 240C0002 */ li $t4, 2 -/* 037D94 7F0053A4 3C018003 */ lui $at, %hi(sniperrifle_stats+52) # $at, 0x8003 -/* 037D98 7F0053A8 AD60105C */ sw $zero, 0x105c($t3) -/* 037D9C 7F0053AC 8E090000 */ lw $t1, ($s0) -/* 037DA0 7F0053B0 AD2C1120 */ sw $t4, 0x1120($t1) -/* 037DA4 7F0053B4 8E190000 */ lw $t9, ($s0) -/* 037DA8 7F0053B8 C426E188 */ lwc1 $f6, %lo(sniperrifle_stats+52)($at) -/* 037DAC 7F0053BC 3C018003 */ lui $at, %hi(camera_stats+52) # $at, 0x8003 -/* 037DB0 7F0053C0 E726107C */ swc1 $f6, 0x107c($t9) -/* 037DB4 7F0053C4 8E180000 */ lw $t8, ($s0) -/* 037DB8 7F0053C8 C428EC08 */ lwc1 $f8, %lo(camera_stats+52)($at) -/* 037DBC 7F0053CC E7081080 */ swc1 $f8, 0x1080($t8) -/* 037DC0 7F0053D0 8FBF001C */ lw $ra, 0x1c($sp) -/* 037DC4 7F0053D4 8FB00018 */ lw $s0, 0x18($sp) -/* 037DC8 7F0053D8 27BD03D0 */ addiu $sp, $sp, 0x3d0 -/* 037DCC 7F0053DC 03E00008 */ jr $ra -/* 037DD0 7F0053E0 00000000 */ nop -) -#endif -#endif - diff --git a/src/game/initBondDATA.h b/src/game/initBondDATA.h index da496b9..3127953 100644 --- a/src/game/initBondDATA.h +++ b/src/game/initBondDATA.h @@ -117,7 +117,7 @@ struct BONDdata_item_control_blocks { int field_1B8; int field_1BC; int field_1C0; - int field_1C4; + int timer_1C4; int field_1C8; int field_1CC; float field_1D0; diff --git a/src/game/initBondDATAdefaults.c b/src/game/initBondDATAdefaults.c index ad4e845..60889a3 100644 --- a/src/game/initBondDATAdefaults.c +++ b/src/game/initBondDATAdefaults.c @@ -11,7 +11,26 @@ //data -struct unk_joint_list D_8002A790 = {NULL, 1, 3, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, {0, 0, 0, 0}, 0}; +ModelRenderData D_8002A790 = { + NULL, + TRUE, + 0x00000003, + NULL, + + NULL, + 0, + 0, + 0, + + 0, + 0, + 0, + 0, + + 0, + {0,0,0,0}, + {0,0,0,0}, + CULLMODE_BOTH}; // forward declarations @@ -28,7 +47,7 @@ void sub_GAME_7F0062C0(void *anim, s32 arg1, s32 arg2, s32 *arg3); * @param arg1: * @param arg2: * @param arg3: unknown type. - * + * * Address 0x7F0062C0. */ void sub_GAME_7F0062C0(void *anim, s32 arg1, s32 arg2, s32 *arg3) @@ -66,7 +85,7 @@ void sets_a_bunch_of_BONDdata_values_to_default(void) { s32 i; s32 spD0[3]; - struct unk_joint_list sp90; + ModelRenderData sp90; Mtxf sp50; #ifdef LEFTOVERDEBUG @@ -110,9 +129,9 @@ void sets_a_bunch_of_BONDdata_values_to_default(void) g_CurrentPlayer->headupsum.f[0] = 0.0f; g_CurrentPlayer->headupsum.f[1] = HEADSUM; g_CurrentPlayer->headupsum.f[2] = 0.0f; - g_CurrentPlayer->resetheadpos = 1; - g_CurrentPlayer->resetheadrot = 1; - g_CurrentPlayer->resetheadtick = 1; + g_CurrentPlayer->resetheadpos = TRUE; + g_CurrentPlayer->resetheadrot = TRUE; + g_CurrentPlayer->resetheadtick = TRUE; g_CurrentPlayer->headbodyoffset.f[0] = 0.0f; g_CurrentPlayer->headbodyoffset.f[1] = 0.0f; g_CurrentPlayer->headbodyoffset.f[2] = 0.0f; @@ -144,7 +163,7 @@ void sets_a_bunch_of_BONDdata_values_to_default(void) (s32)g_BondMoveAnimationSetup[i].endframe, &spD0); - g_BondMoveAnimationSetup[i].unk0C = (f32) (((f32) spD0[2] * IDO_POINT_ONE) / (g_BondMoveAnimationSetup[i].endframe - g_BondMoveAnimationSetup[i].loopframe)); + g_BondMoveAnimationSetup[i].speedMultiplier = (f32) (((f32) spD0[2] * IDO_POINT_ONE) / (g_BondMoveAnimationSetup[i].endframe - g_BondMoveAnimationSetup[i].loopframe)); } sp90 = D_8002A790; diff --git a/src/game/initBondDATAdefaults.h b/src/game/initBondDATAdefaults.h index 96426b5..cbefb13 100644 --- a/src/game/initBondDATAdefaults.h +++ b/src/game/initBondDATAdefaults.h @@ -3,5 +3,8 @@ #include void sets_a_bunch_of_BONDdata_values_to_default(void); +#ifdef LEFTOVERDEBUG +extern void exit(void); +#endif #endif diff --git a/src/game/initactorpropstuff.c b/src/game/initactorpropstuff.c index 2600d1c..daea758 100644 --- a/src/game/initactorpropstuff.c +++ b/src/game/initactorpropstuff.c @@ -32,25 +32,18 @@ void reset_counter_rand_body_head(void) } -u32 sub_GAME_7F0001F0(void *ani,int aniid,int param_3) -{ - short asStack8 [4]; - u32 uVar1; - u32 i; - - - i = 0; - while (aniid < param_3) { - uVar1 = sub_GAME_7F06D2E4(0,0,&skeleton_guard,ani,aniid,asStack8); - i = i + uVar1 & 0xffff; - aniid=1+aniid; - - } - return i; +u32 sub_GAME_7F0001F0(void *ani, int aniid, int param_3) { + short asStack8[4]; + u16 result = 0; + + while (aniid < param_3) { + result += sub_GAME_7F06D2E4(0, 0, &skeleton_guard, ani, aniid, asStack8); + aniid++; + } + return result; } - #ifdef NONMATCHING void sub_GAME_7F000290(void) { diff --git a/src/game/initanitable.c b/src/game/initanitable.c index 56fb289..db97a22 100644 --- a/src/game/initanitable.c +++ b/src/game/initanitable.c @@ -2,19 +2,26 @@ #include #include "initanitable.h" #include "objecthandler.h" +#include "bondgame.h" //bss -char dword_CODE_bss_80069170[0x2D0]; + +// Where animation frames are saved. Can possibly hold as much as nine, but the game will ever store four at maximum. +char animations_frame_buffer[0x2D0]; + +// Msg Queue stuff (unused) OSMesgQueue animMsgQ; -char dword_CODE_bss_80069458[0xC0]; +char dword_CODE_bss_80069458[0xC0]; // Unused. Possibly meant for unused message queue. OSMesg animMesg[8]; + +// Animation table ptr struct animation_table_data * ptr_animation_table; //data struct bondstruct_unk_animation_related D_80029D60 = { NULL, - &dword_CODE_bss_80069170, - &dword_CODE_bss_80069170 + &animations_frame_buffer, // Two pointers. One always points to the start of the buffer, the other can be modified. + &animations_frame_buffer }; s32 animation_table_ptrs1[] = { @@ -213,8 +220,47 @@ struct ModelAnimation *animation_table_ptrs2[] = { #ifdef NONMATCHING -void expand_ani_table_entries(void) { +struct anim_data_entry +{ + void *unk00; + s32 unk04; + void *unk08; + s32 unk0C; + void *unk10; +}; +/** + * https://decomp.me/scratch/n0qGM 82.91% +*/ +void expand_ani_table_entries(s32** arg0) +{ + s32 **var_v0; + struct anim_data_entry *temp_t7; + s32 intval; + + for (var_v0 = arg0; *var_v0 != 0; var_v0++) + { + //var_v1 = *var_v0; + if (*var_v0 != (s32*)1) + { + temp_t7 = (struct anim_data_entry *)(&ptr_animation_table->data[(s32)*var_v0]); + //temp_t7->unk00 = (s32*)temp_t7; + //*var_v0 = (s32*)temp_t7; + intval = *(s32*)temp_t7->unk08; + temp_t7->unk08 = &ptr_animation_table->data[intval]; + intval = *(s32*)temp_t7->unk10; + temp_t7->unk10 = &ptr_animation_table->data[intval]; + } + } + + for (var_v0 = arg0; *var_v0 != 0; var_v0++) + { + //var_v1 = *var_v0; + if (*var_v0 != (s32*)1) + { + **var_v0 += (s32)&_animation_entriesSegmentRomStart; + } + } } #else GLOBAL_ASM( @@ -272,71 +318,18 @@ glabel expand_ani_table_entries ) #endif -extern u8* _animation_dataSegmentRomStart; -extern u8* _animation_dataSegmentStart; -extern u8* _animation_dataSegmentEnd; -#ifdef NONMATCHING -void alloc_load_expand_ani_table(void) { - //u32 sp18; - u32 size; - //void *temp_v0; - - osCreateMesgQueue(&animMsgQ, &animMesg, 8); +void alloc_load_expand_ani_table(void) +{ + s32 animsDataSegmentSize; + + osCreateMesgQueue(&animMsgQ, animMesg, 8); sub_GAME_7F0009E0(&D_80029D60, &animMsgQ, &dword_CODE_bss_80069458); - size = ((u32)_animation_dataSegmentEnd - (u32)_animation_dataSegmentStart); - //sp18 = size; - //temp_v0 = mempAllocBytesInBank(size, 6U); - ptr_animation_table = mempAllocBytesInBank(size, 6U); - romCopy(ptr_animation_table, &_animation_dataSegmentRomStart, size); - expand_ani_table_entries(&animation_table_ptrs1); - expand_ani_table_entries(&animation_table_ptrs2); -} -#else -GLOBAL_ASM( -.text -glabel alloc_load_expand_ani_table -/* 0355DC 7F000AAC 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0355E0 7F000AB0 AFBF0014 */ sw $ra, 0x14($sp) -/* 0355E4 7F000AB4 3C048007 */ lui $a0, %hi(animMsgQ) -/* 0355E8 7F000AB8 3C058007 */ lui $a1, %hi(animMesg) -/* 0355EC 7F000ABC 24A59518 */ addiu $a1, %lo(animMesg) # addiu $a1, $a1, -0x6ae8 -/* 0355F0 7F000AC0 24849440 */ addiu $a0, %lo(animMsgQ) # addiu $a0, $a0, -0x6bc0 -/* 0355F4 7F000AC4 0C0035B4 */ jal osCreateMesgQueue -/* 0355F8 7F000AC8 24060008 */ li $a2, 8 -/* 0355FC 7F000ACC 3C048003 */ lui $a0, %hi(D_80029D60) -/* 035600 7F000AD0 3C058007 */ lui $a1, %hi(animMsgQ) -/* 035604 7F000AD4 3C068007 */ lui $a2, %hi(dword_CODE_bss_80069458) -/* 035608 7F000AD8 24C69458 */ addiu $a2, %lo(dword_CODE_bss_80069458) # addiu $a2, $a2, -0x6ba8 -/* 03560C 7F000ADC 24A59440 */ addiu $a1, %lo(animMsgQ) # addiu $a1, $a1, -0x6bc0 -/* 035610 7F000AE0 0FC00278 */ jal sub_GAME_7F0009E0 -/* 035614 7F000AE4 24849D60 */ addiu $a0, %lo(D_80029D60) # addiu $a0, $a0, -0x62a0 -/* 035618 7F000AE8 3C0E0001 */ lui $t6, %hi(0x0000E7E0) # $t6, 1 -/* 03561C 7F000AEC 3C0F0000 */ lui $t7, 0 -/* 035620 7F000AF0 25EF0000 */ addiu $t7, $t7, 0 -/* 035624 7F000AF4 25CEE7E0 */ addiu $t6, %lo(0x0000E7E0) # addiu $t6, $t6, -0x1820 -/* 035628 7F000AF8 01CF3023 */ subu $a2, $t6, $t7 -/* 03562C 7F000AFC 00C02025 */ move $a0, $a2 -/* 035630 7F000B00 AFA60018 */ sw $a2, 0x18($sp) -/* 035634 7F000B04 0C0025C8 */ jal mempAllocBytesInBank -/* 035638 7F000B08 24050006 */ li $a1, 6 -/* 03563C 7F000B0C 3C038007 */ lui $v1, %hi(ptr_animation_table) -/* 035640 7F000B10 24639538 */ addiu $v1, %lo(ptr_animation_table) # addiu $v1, $v1, -0x6ac8 -/* 035644 7F000B14 3C050029 */ lui $a1, %hi(_animation_dataSegmentRomStart) # $a1, 0x29 -/* 035648 7F000B18 AC620000 */ sw $v0, ($v1) -/* 03564C 7F000B1C 8FA60018 */ lw $a2, 0x18($sp) -/* 035650 7F000B20 24A5E980 */ addiu $a1, %lo(_animation_dataSegmentRomStart) # addiu $a1, $a1, -0x1680 -/* 035654 7F000B24 0C001707 */ jal romCopy -/* 035658 7F000B28 00402025 */ move $a0, $v0 -/* 03565C 7F000B2C 3C048003 */ lui $a0, %hi(animation_table_ptrs1) -/* 035660 7F000B30 0FC00280 */ jal expand_ani_table_entries -/* 035664 7F000B34 24849D6C */ addiu $a0, %lo(animation_table_ptrs1) # addiu $a0, $a0, -0x6294 -/* 035668 7F000B38 3C048003 */ lui $a0, %hi(animation_table_ptrs2) -/* 03566C 7F000B3C 0FC00280 */ jal expand_ani_table_entries -/* 035670 7F000B40 2484A04C */ addiu $a0, %lo(animation_table_ptrs2) # addiu $a0, $a0, -0x5fb4 -/* 035674 7F000B44 8FBF0014 */ lw $ra, 0x14($sp) -/* 035678 7F000B48 27BD0020 */ addiu $sp, $sp, 0x20 -/* 03567C 7F000B4C 03E00008 */ jr $ra -/* 035680 7F000B50 00000000 */ nop -) -#endif + + animsDataSegmentSize = (s32)&_animation_dataSegmentEnd - (s32)&_animation_dataSegmentStart; + + ptr_animation_table = mempAllocBytesInBank(animsDataSegmentSize, MEMPOOL_PERMANENT); + romCopy(ptr_animation_table, &_animation_dataSegmentRomStart, animsDataSegmentSize); + expand_ani_table_entries((s32*)&animation_table_ptrs1); + expand_ani_table_entries((s32*)&animation_table_ptrs2); +} diff --git a/src/game/initexplosioncasing.c b/src/game/initexplosioncasing.c index 7984c92..777559b 100644 --- a/src/game/initexplosioncasing.c +++ b/src/game/initexplosioncasing.c @@ -10,53 +10,53 @@ void alloc_explosion_smoke_casing_scorch_impact_buffers(void) s32 i; s32 j; - numExplosionEntries = 0; - numSmokeEntries = 0; - numParticleEntries = 0; - numScorchEntries = 0; - numImpactEntries = 0; - D_80040178 = 1.0f; + g_NumExplosionEntries = 0; + g_NumSmokeEntries = 0; + g_NumParticleEntries = 0; + g_NumScorchEntries = 0; + g_NumImpactEntries = 0; + g_SpExplosionDamageMult = 1.0f; - ptr_explosion_buf = (struct Explosion*)mempAllocBytesInBank(EXPLOSION_BUFFER_LEN * sizeof(struct Explosion), 4); + g_ExplosionBuffer = (struct Explosion *)mempAllocBytesInBank(EXPLOSION_BUFFER_LEN * sizeof(struct Explosion), MEMPOOL_STAGE); for (i=0; i> 1; } - ptr_flying_particles_buf = (struct FlyingParticles*)mempAllocBytesInBank(((max_particles * sizeof(struct FlyingParticles)) + 0xF) & ~0xF, 4); + g_FlyingParticlesBuffer = (struct FlyingParticles *)mempAllocBytesInBank(((max_particles * sizeof(struct FlyingParticles)) + 0xF) & ~0xF, MEMPOOL_STAGE); for (i=0; i i; i++) { g_ChrSlots[i].model = 0; diff --git a/src/game/initimages.c b/src/game/initimages.c index 12af3e1..aaadfe5 100644 --- a/src/game/initimages.c +++ b/src/game/initimages.c @@ -1,82 +1,28 @@ #include +#include "image.h" -extern g_Textures; +/** + * NTSC address 0x7F000BD0. +*/ +void image_entries_load(void) +{ + s32 offset; + s32 next_offset; + s32 temp_t3; + struct image_entry *entryp; -#ifdef NONMATCHING -void image_entries_load(void) { - image_entry *piVar1; - image_entry *piVar2; - uint uVar3; - uint uVar4; - uint uVar5; - uint uVar6; + entryp = g_Textures; + offset = 0; + next_offset = entryp->dataoffset; - piVar1 = g_Textures; - uVar3 = 0; - piVar2 = g_Textures; - if (g_Textures[0].size != -1) //this (& 0xFFFFFF) is auto genrated by bitfield + while (entryp->dataoffset != 0xffff) { - uVar5 = g_Textures[0].size; - uVar4 = g_Textures[0].size; - do - { - uVar6 = (uVar3 ^ uVar4) ^ uVar4; - uVar4 = *(uint *)(piVar1 + 1); - uVar3 += uVar5; - *(uint *)piVar1 = uVar6; - uVar5 = uVar4; - piVar1 = piVar1 + 1; - piVar2 = piVar1; - } while (uVar5 != -1); + temp_t3 = entryp->dataoffset; + entryp->dataoffset = offset; + offset += temp_t3; + entryp++; + next_offset = entryp->dataoffset; } - *(uint *)piVar2 = - (uVar3 ^ *(uint *)piVar2) ^ *(uint *)piVar2; - return; -} -#else -GLOBAL_ASM( -.text -glabel image_entries_load -/* 035700 7F000BD0 3C048005 */ lui $a0, %hi(g_Textures) -/* 035704 7F000BD4 24829300 */ addiu $v0, $a0, %lo(g_Textures) -/* 035708 7F000BD8 8C4E0000 */ lw $t6, ($v0) -/* 03570C 7F000BDC 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff -/* 035710 7F000BE0 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 035714 7F000BE4 3407FFFF */ li $a3, 65535 -/* 035718 7F000BE8 01C17824 */ and $t7, $t6, $at -/* 03571C 7F000BEC 10EF0014 */ beq $a3, $t7, .L7F000C40 -/* 035720 7F000BF0 00001825 */ move $v1, $zero -/* 035724 7F000BF4 3C188005 */ lui $t8, %hi(g_Textures) -/* 035728 7F000BF8 27189300 */ addiu $t8, %lo(g_Textures) # addiu $t8, $t8, -0x6d00 -/* 03572C 7F000BFC 8F050000 */ lw $a1, ($t8) -/* 035730 7F000C00 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff -/* 035734 7F000C04 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 035738 7F000C08 00A13024 */ and $a2, $a1, $at -.L7F000C0C: -/* 03573C 7F000C0C 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff -/* 035740 7F000C10 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 035744 7F000C14 0061C824 */ and $t9, $v1, $at -/* 035748 7F000C18 03254026 */ xor $t0, $t9, $a1 -/* 03574C 7F000C1C 00084A00 */ sll $t1, $t0, 8 -/* 035750 7F000C20 00095202 */ srl $t2, $t1, 8 -/* 035754 7F000C24 01455826 */ xor $t3, $t2, $a1 -/* 035758 7F000C28 8C450008 */ lw $a1, 8($v0) -/* 03575C 7F000C2C 00661821 */ addu $v1, $v1, $a2 -/* 035760 7F000C30 AC4B0000 */ sw $t3, ($v0) -/* 035764 7F000C34 00A13024 */ and $a2, $a1, $at -/* 035768 7F000C38 14E6FFF4 */ bne $a3, $a2, .L7F000C0C -/* 03576C 7F000C3C 24420008 */ addiu $v0, $v0, 8 -.L7F000C40: -/* 035770 7F000C40 8C450000 */ lw $a1, ($v0) -/* 035774 7F000C44 3C0100FF */ lui $at, (0x00FFFFFF >> 16) # lui $at, 0xff -/* 035778 7F000C48 3421FFFF */ ori $at, (0x00FFFFFF & 0xFFFF) # ori $at, $at, 0xffff -/* 03577C 7F000C4C 00616024 */ and $t4, $v1, $at -/* 035780 7F000C50 01856826 */ xor $t5, $t4, $a1 -/* 035784 7F000C54 000D7200 */ sll $t6, $t5, 8 -/* 035788 7F000C58 000E7A02 */ srl $t7, $t6, 8 -/* 03578C 7F000C5C 01E5C026 */ xor $t8, $t7, $a1 -/* 035790 7F000C60 03E00008 */ jr $ra -/* 035794 7F000C64 AC580000 */ sw $t8, ($v0) -) -#endif + entryp->dataoffset = offset; +} diff --git a/src/game/initintromatrices.c b/src/game/initintromatrices.c index 50e7478..066c9f1 100644 --- a/src/game/initintromatrices.c +++ b/src/game/initintromatrices.c @@ -6,13 +6,13 @@ void alloc_intro_matrices(void) { D_8002A7D0 = 0; - matrix_buffer_rarelogo_0 = mempAllocBytesInBank(0x80, 4); - matrix_buffer_gunbarrel_0 = mempAllocBytesInBank(0x40, 4); - matrix_buffer_rarelogo_1 = mempAllocBytesInBank(0x80, 4); - matrix_buffer_rarelogo_2 = mempAllocBytesInBank(0x80, 4); - matrix_buffer_gunbarrel_1 = mempAllocBytesInBank(0x80, 4); - matrix_buffer_intro_backdrop = mempAllocBytesInBank(0x80, 4); - matrix_buffer_intro_bond = mempAllocBytesInBank(0x80, 4); + matrixBufferRareLogo0 = mempAllocBytesInBank(0x80, MEMPOOL_STAGE); + matrixBufferGunbarrel0 = mempAllocBytesInBank(0x40, MEMPOOL_STAGE); + matrixBufferRareLogo1 = mempAllocBytesInBank(0x80, MEMPOOL_STAGE); + matrixBufferRareLogo2 = mempAllocBytesInBank(0x80, MEMPOOL_STAGE); + matrixBufferGunbarrel1 = mempAllocBytesInBank(0x80, MEMPOOL_STAGE); + matrixBufferIntroBackdrop = mempAllocBytesInBank(0x80, MEMPOOL_STAGE); + matrixBufferIntroBond = mempAllocBytesInBank(0x80, MEMPOOL_STAGE); } diff --git a/src/game/inititemslots.c b/src/game/inititemslots.c index d916913..fd7c6a5 100644 --- a/src/game/inititemslots.c +++ b/src/game/inititemslots.c @@ -16,6 +16,6 @@ void reinit_gunheld_totaltime(void) { void alloc_additional_item_slots(s32 additionalentries) { g_CurrentPlayer->equipmaxitems = additionalentries + 0x1e; - g_CurrentPlayer->p_itemcur = mempAllocBytesInBank((g_CurrentPlayer->equipmaxitems * 0x14 + 0xfU | 0xf) ^ 0xf,'\x04'); + g_CurrentPlayer->p_itemcur = mempAllocBytesInBank((g_CurrentPlayer->equipmaxitems * 0x14 + 0xfU | 0xf) ^ 0xf, MEMPOOL_STAGE); bondinvReinitInv(); } diff --git a/src/game/inititemslots.h b/src/game/inititemslots.h index e217356..45aa1f7 100644 --- a/src/game/inititemslots.h +++ b/src/game/inititemslots.h @@ -3,5 +3,6 @@ #include void reinit_gunheld_totaltime(void); +void alloc_additional_item_slots(s32 additionalentries); #endif diff --git a/src/game/initmenus.c b/src/game/initmenus.c index 16af40e..728ab2b 100644 --- a/src/game/initmenus.c +++ b/src/game/initmenus.c @@ -31,12 +31,12 @@ void init_menus_or_reset(void) menu_update = MENU_FILE_SELECT; } - ptr_logo_and_walletbond_DL = (u8 *)mempAllocBytesInBank(0x78000, 4); + ptr_logo_and_walletbond_DL = (u8 *)mempAllocBytesInBank(0x78000, MEMPOOL_STAGE); #if defined(VERSION_EU) - ptr_menu_videobuffer = mempAllocBytesInBank(0x55040, 4); + ptr_menu_videobuffer = mempAllocBytesInBank(0x55040, MEMPOOL_STAGE); #else - ptr_menu_videobuffer = mempAllocBytesInBank(0x4b040, 4); + ptr_menu_videobuffer = mempAllocBytesInBank(0x4b040, MEMPOOL_STAGE); #endif ptr_menu_videobuffer = ALIGN64_V1(ptr_menu_videobuffer); @@ -47,4 +47,4 @@ void init_menus_or_reset(void) } alloc_intro_matrices(); -} \ No newline at end of file +} diff --git a/src/game/initmttex.c b/src/game/initmttex.c index f1418c4..0418f1b 100644 --- a/src/game/initmttex.c +++ b/src/game/initmttex.c @@ -9,8 +9,8 @@ void set_mt_tex_alloc(void) if (tokenFind(1, "-mt")) { - bytes = strtol(tokenFind(1, "-mt"), 0x0, 0) << 10; + bytes = strtol(tokenFind(1, "-mt"), 0x0, 0) * 1024; //get KB } - texInitPool(&ptr_texture_alloc_start, mempAllocBytesInBank(bytes, 4), bytes); + texInitPool(&ptr_texture_alloc_start, mempAllocBytesInBank(bytes, MEMPOOL_STAGE), bytes); } diff --git a/src/game/initobjects.c b/src/game/initobjects.c index 454d587..7f969e4 100644 --- a/src/game/initobjects.c +++ b/src/game/initobjects.c @@ -69,13 +69,13 @@ void alloc_lookup_buffers(void) s32 j; s32 i; - ptr_list_object_lookup_indices = (s16*)mempAllocBytesInBank(PTR_LIST_OBJECT_LOOKUP_INDICES_LEN * sizeof(s16), 4); - RoomPropListChunkIndexes = (s16*)mempAllocBytesInBank((((MaxNumRooms * 4) + 0xF) | 0xF) ^ 0xF, 4); - RoomPropListChunks = (s16*)mempAllocBytesInBank(BSS_8007161C_LEN * sizeof(struct roomproplistchunk), 4); + ptr_list_object_lookup_indices = (s16 *)mempAllocBytesInBank(PTR_LIST_OBJECT_LOOKUP_INDICES_LEN * sizeof(s16), MEMPOOL_STAGE); + RoomPropListChunkIndexes = (s16 *)mempAllocBytesInBank((((g_MaxNumRooms * 4) + 0xF) | 0xF) ^ 0xF, MEMPOOL_STAGE); + RoomPropListChunks = (s16 *)mempAllocBytesInBank(BSS_8007161C_LEN * sizeof(struct roomproplistchunk), MEMPOOL_STAGE); ptr_list_object_lookup_indices[0] = -1; - for (i=0; iflags2) = g_LevelLoadPropSwitch; + arg0->next = g_LevelLoadPropSwitch; g_LevelLoadPropSwitch = arg0; } @@ -176,9 +176,9 @@ void initSetLevelLoadPropSwitch(struct ObjectRecord *arg0) * Called from proplvreset2 when PROPDEF type is PROPDEF_LOCK_DOOR. * Address 0x7F001928. */ -void initSetLevelLoadPropLockDoor(struct ObjectRecord *arg0) +void initSetLevelLoadPropLockDoor(struct LockDoorRecord *arg0) { - *((struct ObjectRecord **)&arg0->flags2) = g_LevelLoadPropLockDoor; + arg0->next = g_LevelLoadPropLockDoor; g_LevelLoadPropLockDoor = arg0; } diff --git a/src/game/initobjects.h b/src/game/initobjects.h index 879c4d4..4c9bf5c 100644 --- a/src/game/initobjects.h +++ b/src/game/initobjects.h @@ -8,5 +8,8 @@ void init_load_objpos_table(void); void reinit_between_menus(void); void init_sound_effects_registers(void); void sub_GAME_7F001910(struct ObjectRecord *arg0); +void initSetLevelLoadPropSwitch(struct LinkRecord *arg0); +void initSetLevelLoadPropLockDoor(struct LockDoorRecord *arg0); +void initSetLevelLoadPropSafeItem(struct ObjectRecord *arg0); #endif diff --git a/src/game/initpathtablelinks.c b/src/game/initpathtablelinks.c index f0038f5..c56f0ba 100644 --- a/src/game/initpathtablelinks.c +++ b/src/game/initpathtablelinks.c @@ -1,12 +1,333 @@ #include #include "initpathtablelinks.h" - +#include "padhalllv.h" #ifdef NONMATCHING -void init_path_table_links(void) { +/*** +* Ryan spent a few minutes looking at this and left some notes about what this function does: +* +* var_s6 is an "error" variable. If set anywhere, the function goes into an infinite loop at the end. +* The first outer loop appears to be verifying that the waypoints don't list themselves as their own neighbour. +* The second outer loop appears to do the same but for waygroups. It also calls sub_GAME_7F08F438, which is a more simple version of PD's waypointFindSegmentIntoGroup, so it's likely verifying that there is a waypoint path between this group and each neighbour. +* The third outer loop is iterating waygroups, then iterating each group's waypoints, and assigning each waypoint's groupNum if it's less than 0. If a value is stored and it's wrong, the error variable is set. +* The fourth outer loop is checking that all waypoints have a groupNum assigned. +* The fifth outer loop I'm not sure about without actually decompiling it and naming stuff. It appears to be using the waypoint->dist property temporary so it can validate something. If it doesn't like it then the error variable is set. +* The final outer loop is the infinite loop which occurs if the error variable is true. +*/ + +/** + * NTSC address 0x7F006890. + * https://decomp.me/scratch/nSCDd 40.03% +*/ +void init_path_table_links(void) +{ + waypoint *spA0; + waypoint *sp9C; + + s32 var_s6; + waypoint *temp_s0; + waygroup *spD8; + + waypoint *var_t5; + s32 var_v0_2; + s32 var_s3; + s32 var_s1; + s32 *temp_a2; + s32 var_a1; + s32 var_a3; + s32 *temp_v0; + s32 var_a0; + s32 *temp_v1; + s32 var_t1; + s32 *var_v1_3; + waypoint *temp_a1_2; + s32 temp_a2_2; + waygroup *var_t3; + s32 *var_v0_4; + s32 var_a3_2; + waypoint *var_a2_2; + s32 var_t4; + s32 var_t0_2; + s32 var_t1_2; + s32 var_v0_5; + s32 var_v1_4; + s32 var_t1_3; + waypoint *temp_a2_3; + s32 var_v1_5; + s32 var_v0_6; + + var_s6 = 0; + + temp_s0 = g_CurrentSetup.pathwaypoints; + spD8 = g_CurrentSetup.waypointgroups; + + if (temp_s0 != NULL) + { + var_a3 = 0; + + var_t5 = temp_s0; + while (var_t5->padID >= 0) + { + temp_v0 = var_t5->neighbours; + + while (*temp_v0 >= 0) + { + if (*temp_v0 == var_a3) + { + var_s6 = 1; + if (g_CurrentSetup.padnames != NULL) + { + // removed + } + } + else + { + var_a0 = 0; + + temp_v1 = temp_s0[*temp_v0].neighbours; + + while (*temp_v1 >= 0) + { + var_a0++; + + if (var_a3 != *temp_v1) + { + continue; + } + + break; + } + + if (var_a3 != temp_s0[*temp_v0].neighbours[var_a0]) + { + var_s6 = 1; + } + } + + temp_v0++; + } + + var_a3++; + var_t5 = &temp_s0[var_a3]; + } + } + + if (spD8 != NULL) + { + var_s1 = 0; + + var_s3 = 0; + var_v0_2 = spD8->neighbours[var_s3]; + + while (var_v0_2 >= 0) + { + if (var_v0_2 == var_s1) + { + var_s6 = 1; + if (g_CurrentSetup.boundpadnames != NULL) + { + // removed + } + } + else + { + var_a1 = 0; + temp_a2 = &spD8->neighbours[var_v0_2]; + + while (*temp_a2 >= 0) + { + var_a1++; + + if (var_s1 != *temp_a2) + { + temp_a2++; + continue; + } + + break; + } + + if (var_s1 != temp_a2[var_a1]) + { + var_s6 = 1; + if (g_CurrentSetup.boundpadnames != NULL) + { + // removed + } + } + else if (g_CurrentSetup.pathwaypoints != NULL) + { + sub_GAME_7F08F438(spD8, &spD8[var_v0_2], &spA0, &sp9C); + + if (spA0 == NULL || sp9C == NULL) + { + var_s6 = 1; + } + } + } + + var_s3++; + var_v0_2 = spD8->neighbours[var_s3]; + } + } + + if ((temp_s0 != NULL) && (spD8 != NULL)) + { + var_t1 = 0; + + var_t3 = spD8; + while (var_t3 != NULL) + { + if (var_t3->neighbours != NULL) + { + var_a3_2 = 0; + var_v1_3 = var_t3->waypoints; + while (*var_v1_3 >= 0) + { + temp_a1_2 = &temp_s0[*var_v1_3]; + temp_a2_2 = temp_a1_2->groupNum; + + if (temp_a2_2 < 0) + { + temp_a1_2->groupNum = var_t1; + var_v0_4 = &var_t3->waypoints[var_a3_2]; + } + else + { + var_v0_4 = &var_t3->waypoints[var_a3_2]; + if (var_t1 != temp_a2_2) + { + var_s6 = 1; + } + } + + var_a3_2++; + + var_v1_3 = var_v0_4 + 1; + } + + var_t1 = 0; + } + + var_t3++; + } + + var_a2_2 = temp_s0; + while (var_a2_2->padID >= 0) + { + var_a2_2 = &temp_s0[var_t1]; + if (var_a2_2->groupNum < 0) + { + var_s6 = 1; + } + var_t1++; + } + + if (spD8->neighbours != NULL) + { + var_t3 = spD8; + + + while (var_t3 != NULL) + { + var_v1_4 = 0; + var_t0_2 = 0; + var_t4 = 0; + var_t1_2 = 0; + + var_v0_5 = *var_t3->waypoints; + while (var_v0_5 >= 0) + { + if (var_t1_2 == 0) + { + temp_s0[var_v0_5].dist = 1; + } + else + { + temp_s0[var_v0_5].dist = 0; + } + + var_v0_5 = var_t3->waypoints[var_t1_2]; + var_t1_2++; + } + + // loop_57 + var_t1_3 = 0; + var_v0_5 = var_t3->waypoints[var_t1_3]; + while (var_v0_5 >= 0) + { + temp_a2_3 = &temp_s0[var_v0_5]; + + if (temp_a2_3->dist == 1) + { + var_v1_5 = 0; + var_v0_6 = temp_a2_3->neighbours[var_v1_5]; + while (var_v0_6 >= 0) //var_v0_6 >= 0 + { + if (temp_s0[var_v0_6].dist != 1) + { + temp_s0[var_v0_6].dist = 1; + var_t0_2 = 1; + } + + var_v1_5++; + var_v0_6 = temp_a2_3->neighbours[var_v1_5]; + } + } + + var_v0_5 = var_t3->waypoints[var_t1_3]; + } + + // loop_67 + var_v0_5 = *var_t3->waypoints; + while (var_v0_5 >= 0) // var_v0_5 >= 0 + { + var_v1_4++; + if (temp_s0[var_v0_5].dist != 1) + { + var_t4 = 1; + break; + } + + var_v0_5 = var_t3->waypoints[var_v1_4]; + } + + //var_v1_4 = 0; + if (var_t0_2 != 0) + { + //var_v0_5 = var_a1_2; + if (var_t4 != 0) + { + //var_t0_2 = 0; + //var_t4 = 0; + + continue; + } + } + + if (var_t4 != 0) + { + var_s6 = 1; + + if (g_CurrentSetup.boundpadnames != NULL) + { + // + } + } + + var_t3++; + } + } + } + + if (var_s6 != 0) + { + while(1); + } } + #else GLOBAL_ASM( .text diff --git a/src/game/initpathtablesomething.c b/src/game/initpathtablesomething.c index d7ba7bb..5915ab6 100644 --- a/src/game/initpathtablesomething.c +++ b/src/game/initpathtablesomething.c @@ -3,90 +3,33 @@ #include "stan.h" - - -#ifdef NONMATCHING -typedef coord3d_s32 { - s32 x; - s32 y; - s32 z; -}; -s32 init_pathtable_something( coord3d_s32 *tilepos, u8 *tilename, StandTilePoint *tilestack) +/** + * NTSC address 0x7F0067C0. +*/ +s32 init_pathtable_something(struct PadRecord *pad, char *tilename, struct StandTile **tile_stack) { - coord3d coord; - + struct coord3d coord; - tilestack = stanMatchTileName(tilename); - if ((tilestack == 0) || (isPointInsideTriStandTileUnscaled_Maybe(tilestack, tilepos->x, tilepos->z) == 0)) + *tile_stack = stanMatchTileName(tilename); + + if ((*tile_stack == NULL) || (isPointInsideTriStandTileUnscaled_Maybe(*tile_stack, pad->pos.f[0], pad->pos.f[2]) == 0)) { - tilestack = sub_GAME_7F0AFB78(coord.x, coord.y, coord.z, 0); - if ((tilestack != 0) && (walkTilesBetweenPoints_NoCallback(tilestack, tilepos->x, tilepos->z, tilepos->x, tilepos->z) != 0)) + coord.f[0] = pad->pos.f[0]; + coord.f[1] = pad->pos.f[1]; + coord.f[2] = pad->pos.f[2]; + + *tile_stack = sub_GAME_7F0AFB78(&coord.f[0], &coord.f[1], &coord.f[2], 0); + + if ((*tile_stack != NULL) && (walkTilesBetweenPoints_NoCallback(tile_stack, coord.f[0], coord.f[2], pad->pos.f[0], pad->pos.f[2]) != 0)) { return 2; } - tilestack = 0; + + *tile_stack = NULL; + return 0; } + return 1; } -#else -GLOBAL_ASM( -.text -glabel init_pathtable_something -/* 03B2F0 7F0067C0 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 03B2F4 7F0067C4 AFB0001C */ sw $s0, 0x1c($sp) -/* 03B2F8 7F0067C8 00808025 */ move $s0, $a0 -/* 03B2FC 7F0067CC AFBF0024 */ sw $ra, 0x24($sp) -/* 03B300 7F0067D0 AFB10020 */ sw $s1, 0x20($sp) -/* 03B304 7F0067D4 00C08825 */ move $s1, $a2 -/* 03B308 7F0067D8 0FC2CB96 */ jal stanMatchTileName -/* 03B30C 7F0067DC 00A02025 */ move $a0, $a1 -/* 03B310 7F0067E0 10400007 */ beqz $v0, .L7F006800 -/* 03B314 7F0067E4 AE220000 */ sw $v0, ($s1) -/* 03B318 7F0067E8 00402025 */ move $a0, $v0 -/* 03B31C 7F0067EC 8E050000 */ lw $a1, ($s0) -/* 03B320 7F0067F0 0FC2C0DB */ jal isPointInsideTriStandTileUnscaled_Maybe -/* 03B324 7F0067F4 8E060008 */ lw $a2, 8($s0) -/* 03B328 7F0067F8 5440001D */ bnezl $v0, .L7F006870 -/* 03B32C 7F0067FC 24020001 */ li $v0, 1 -.L7F006800: -/* 03B330 7F006800 C6040000 */ lwc1 $f4, ($s0) -/* 03B334 7F006804 27A4002C */ addiu $a0, $sp, 0x2c -/* 03B338 7F006808 27A50030 */ addiu $a1, $sp, 0x30 -/* 03B33C 7F00680C E7A4002C */ swc1 $f4, 0x2c($sp) -/* 03B340 7F006810 C6060004 */ lwc1 $f6, 4($s0) -/* 03B344 7F006814 27A60034 */ addiu $a2, $sp, 0x34 -/* 03B348 7F006818 24070000 */ li $a3, 0 -/* 03B34C 7F00681C E7A60030 */ swc1 $f6, 0x30($sp) -/* 03B350 7F006820 C6080008 */ lwc1 $f8, 8($s0) -/* 03B354 7F006824 0FC2BEDE */ jal sub_GAME_7F0AFB78 -/* 03B358 7F006828 E7A80034 */ swc1 $f8, 0x34($sp) -/* 03B35C 7F00682C 1040000C */ beqz $v0, .L7F006860 -/* 03B360 7F006830 AE220000 */ sw $v0, ($s1) -/* 03B364 7F006834 C60A0008 */ lwc1 $f10, 8($s0) -/* 03B368 7F006838 8E070000 */ lw $a3, ($s0) -/* 03B36C 7F00683C 02202025 */ move $a0, $s1 -/* 03B370 7F006840 8FA5002C */ lw $a1, 0x2c($sp) -/* 03B374 7F006844 8FA60034 */ lw $a2, 0x34($sp) -/* 03B378 7F006848 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 03B37C 7F00684C E7AA0010 */ swc1 $f10, 0x10($sp) -/* 03B380 7F006850 50400004 */ beql $v0, $zero, .L7F006864 -/* 03B384 7F006854 AE200000 */ sw $zero, ($s1) -/* 03B388 7F006858 10000005 */ b .L7F006870 -/* 03B38C 7F00685C 24020002 */ li $v0, 2 -.L7F006860: -/* 03B390 7F006860 AE200000 */ sw $zero, ($s1) -.L7F006864: -/* 03B394 7F006864 10000002 */ b .L7F006870 -/* 03B398 7F006868 00001025 */ move $v0, $zero -/* 03B39C 7F00686C 24020001 */ li $v0, 1 -.L7F006870: -/* 03B3A0 7F006870 8FBF0024 */ lw $ra, 0x24($sp) -/* 03B3A4 7F006874 8FB0001C */ lw $s0, 0x1c($sp) -/* 03B3A8 7F006878 8FB10020 */ lw $s1, 0x20($sp) -/* 03B3AC 7F00687C 03E00008 */ jr $ra -/* 03B3B0 7F006880 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - diff --git a/src/game/initpathtablesomething.h b/src/game/initpathtablesomething.h index d536677..7ac65b8 100644 --- a/src/game/initpathtablesomething.h +++ b/src/game/initpathtablesomething.h @@ -2,6 +2,6 @@ #define _INITPATHTABLESOMETHING_H_ #include -void init_pathtable_something(void); +s32 init_pathtable_something(struct PadRecord *pad, char *tilename, struct StandTile **tile_stack); #endif diff --git a/src/game/initunk_0009E0.c b/src/game/initunk_0009E0.c index 05f277b..f706f61 100644 --- a/src/game/initunk_0009E0.c +++ b/src/game/initunk_0009E0.c @@ -1,9 +1,9 @@ #include #include "objecthandler.h" -void sub_GAME_7F0009E0(struct bondstruct_unk_animation_related* arg0, OSMesgQueue* mq, s32 arg2) { - D_80036414 = arg0; - D_80036418 = mq; - D_8003641C = arg2; +void sub_GAME_7F0009E0(struct bondstruct_unk_animation_related* animBuffer, OSMesgQueue* mq, s32 unused) { + D_80036414 = animBuffer; // Data structure with offset and two tables + D_80036418 = mq; // Unused message queue + D_8003641C = unused; // Some unused array } diff --git a/src/game/initunk_005450.c b/src/game/initunk_005450.c index 874a24a..326f58d 100644 --- a/src/game/initunk_005450.c +++ b/src/game/initunk_005450.c @@ -6,8 +6,41 @@ #ifdef NONMATCHING -void sub_GAME_7F005450(void) { +struct unk_7F005450 +{ + s32 unk00; + s32 unk04; + s32 unk08; + s32 unk0c; // prev struct unk_7F005450 ? + + s32 unk10; // next struct unk_7F005450 ? +}; +#define D80076A50_LEN 600 + +extern struct unk_7F005450 *D_80036060; + +struct unk_7F005450 dword_CODE_bss_80076A50[D80076A50_LEN]; + +// There's some loop unrolling, and the type for D_80036060 / dword_CODE_bss_80076A50 isn't known. +// +// https://decomp.me/scratch/W8anf 69% +void sub_GAME_7F005450(void) +{ + s32 i; + + D_80036060 = dword_CODE_bss_80076A50; + + for (i = 0; i < D80076A50_LEN - 2; i++) + { + dword_CODE_bss_80076A50[i].unk04 = &dword_CODE_bss_80076A50[i+2].unk00; + dword_CODE_bss_80076A50[i].unk0c = &dword_CODE_bss_80076A50[i+2].unk00; + dword_CODE_bss_80076A50[i].unk10 = &dword_CODE_bss_80076A50[i+2].unk00; + } + + // target: t8,t8,%lo(dword_CODE_bss_80079908) + // current: t7,t7,%lo(dword_CODE_bss_80076A50+0x2eb8) ----> 0x80076A50 + 0x2eb8 == 0x80079908 + dword_CODE_bss_80076A50[599].unk10 = &dword_CODE_bss_80076A50[598].unk00; } #else GLOBAL_ASM( diff --git a/src/game/initunk_005520.c b/src/game/initunk_005520.c index eefa3c8..b425a1b 100644 --- a/src/game/initunk_005520.c +++ b/src/game/initunk_005520.c @@ -1,7 +1,8 @@ #include #include #include "initunk_005520.h" - +#include "objecthandler.h" +#include "memp.h" extern s32 D_80036070; extern s32 D_80036074; @@ -20,151 +21,61 @@ void set_contents_of_80036078(s32 arg0) { //this may be a file split -#ifdef NONMATCHING -void sub_GAME_7F005540(void) { +/** + * NTSC address 0x7F005540. +*/ +void sub_GAME_7F005540(s32 arg0) +{ + s32 temp_t6; + s32 var_s1; + D_80036074 = arg0 + 30; + + ptr_allocation_1 = mempAllocBytesInBank(D_80036074 * sizeof(struct ptr_1_s), MEMPOOL_STAGE); + + for (var_s1 = 0; var_s1 < D_80036074; var_s1++) + { + ptr_allocation_1[var_s1].unk08 = 0; + + if (var_s1 < arg0) + { + ptr_allocation_1[var_s1].unk10 = NULL; + } + else + { + ptr_allocation_1[var_s1].unk10 = mempAllocBytesInBank(0x50, MEMPOOL_STAGE); + ptr_allocation_1[var_s1].unk02 = 0x14; + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F005540 -/* 03A070 7F005540 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 03A074 7F005544 AFB40024 */ sw $s4, 0x24($sp) -/* 03A078 7F005548 3C148003 */ lui $s4, %hi(D_80036074) -/* 03A07C 7F00554C AFB50028 */ sw $s5, 0x28($sp) -/* 03A080 7F005550 0080A825 */ move $s5, $a0 -/* 03A084 7F005554 26946074 */ addiu $s4, %lo(D_80036074) # addiu $s4, $s4, 0x6074 -/* 03A088 7F005558 AFBF002C */ sw $ra, 0x2c($sp) -/* 03A08C 7F00555C 248E001E */ addiu $t6, $a0, 0x1e -/* 03A090 7F005560 AFB30020 */ sw $s3, 0x20($sp) -/* 03A094 7F005564 AFB2001C */ sw $s2, 0x1c($sp) -/* 03A098 7F005568 AFB10018 */ sw $s1, 0x18($sp) -/* 03A09C 7F00556C AFB00014 */ sw $s0, 0x14($sp) -/* 03A0A0 7F005570 AE8E0000 */ sw $t6, ($s4) -/* 03A0A4 7F005574 000E2140 */ sll $a0, $t6, 5 -/* 03A0A8 7F005578 0C0025C8 */ jal mempAllocBytesInBank -/* 03A0AC 7F00557C 24050004 */ li $a1, 4 -/* 03A0B0 7F005580 8E980000 */ lw $t8, ($s4) -/* 03A0B4 7F005584 3C128008 */ lui $s2, %hi(ptr_allocation_1) -/* 03A0B8 7F005588 26529934 */ addiu $s2, %lo(ptr_allocation_1) # addiu $s2, $s2, -0x66cc -/* 03A0BC 7F00558C AE420000 */ sw $v0, ($s2) -/* 03A0C0 7F005590 1B00001B */ blez $t8, .L7F005600 -/* 03A0C4 7F005594 00008825 */ move $s1, $zero -/* 03A0C8 7F005598 00008025 */ move $s0, $zero -/* 03A0CC 7F00559C 24130014 */ li $s3, 20 -/* 03A0D0 7F0055A0 8E590000 */ lw $t9, ($s2) -.L7F0055A4: -/* 03A0D4 7F0055A4 0235082A */ slt $at, $s1, $s5 -/* 03A0D8 7F0055A8 24040050 */ li $a0, 80 -/* 03A0DC 7F0055AC 03304021 */ addu $t0, $t9, $s0 -/* 03A0E0 7F0055B0 10200005 */ beqz $at, .L7F0055C8 -/* 03A0E4 7F0055B4 AD000008 */ sw $zero, 8($t0) -/* 03A0E8 7F0055B8 8E490000 */ lw $t1, ($s2) -/* 03A0EC 7F0055BC 01305021 */ addu $t2, $t1, $s0 -/* 03A0F0 7F0055C0 10000009 */ b .L7F0055E8 -/* 03A0F4 7F0055C4 AD400010 */ sw $zero, 0x10($t2) -.L7F0055C8: -/* 03A0F8 7F0055C8 0C0025C8 */ jal mempAllocBytesInBank -/* 03A0FC 7F0055CC 24050004 */ li $a1, 4 -/* 03A100 7F0055D0 8E4B0000 */ lw $t3, ($s2) -/* 03A104 7F0055D4 01706021 */ addu $t4, $t3, $s0 -/* 03A108 7F0055D8 AD820010 */ sw $v0, 0x10($t4) -/* 03A10C 7F0055DC 8E4D0000 */ lw $t5, ($s2) -/* 03A110 7F0055E0 01B07021 */ addu $t6, $t5, $s0 -/* 03A114 7F0055E4 A5D30002 */ sh $s3, 2($t6) -.L7F0055E8: -/* 03A118 7F0055E8 8E8F0000 */ lw $t7, ($s4) -/* 03A11C 7F0055EC 26310001 */ addiu $s1, $s1, 1 -/* 03A120 7F0055F0 26100020 */ addiu $s0, $s0, 0x20 -/* 03A124 7F0055F4 022F082A */ slt $at, $s1, $t7 -/* 03A128 7F0055F8 5420FFEA */ bnezl $at, .L7F0055A4 -/* 03A12C 7F0055FC 8E590000 */ lw $t9, ($s2) -.L7F005600: -/* 03A130 7F005600 8FBF002C */ lw $ra, 0x2c($sp) -/* 03A134 7F005604 8FB00014 */ lw $s0, 0x14($sp) -/* 03A138 7F005608 8FB10018 */ lw $s1, 0x18($sp) -/* 03A13C 7F00560C 8FB2001C */ lw $s2, 0x1c($sp) -/* 03A140 7F005610 8FB30020 */ lw $s3, 0x20($sp) -/* 03A144 7F005614 8FB40024 */ lw $s4, 0x24($sp) -/* 03A148 7F005618 8FB50028 */ lw $s5, 0x28($sp) -/* 03A14C 7F00561C 03E00008 */ jr $ra -/* 03A150 7F005620 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif -#ifdef NONMATCHING -void sub_GAME_7F005624(void) { +/** + * NTSC address 0x7F005540. +*/ +void sub_GAME_7F005624(s32 arg0) +{ + s32 temp_t6; + s32 var_s1; + D_80036070 = arg0 + 10; + + // mips2c says: ptr_allocation_0 = mempAllocBytesInBank(temp_t6 * 0xC0, 4); + // however, the pointer is incremented by 0xbc in the loop below. + ptr_allocation_0 = mempAllocBytesInBank(D_80036070 * (4 + sizeof(struct ptr_0_s)), MEMPOOL_STAGE); + + for (var_s1 = 0; var_s1 < D_80036070; var_s1++) + { + ptr_allocation_0[var_s1].unk08 = 0; + + if (var_s1 < arg0) + { + ptr_allocation_0[var_s1].unk10 = NULL; + } + else + { + ptr_allocation_0[var_s1].unk10 = mempAllocBytesInBank(0x230, MEMPOOL_STAGE); + ptr_allocation_0[var_s1].unk02 = 0x8c; + } + } } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F005624 -/* 03A154 7F005624 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 03A158 7F005628 AFB40024 */ sw $s4, 0x24($sp) -/* 03A15C 7F00562C 248E000A */ addiu $t6, $a0, 0xa -/* 03A160 7F005630 3C148003 */ lui $s4, %hi(D_80036070) -/* 03A164 7F005634 AFB50028 */ sw $s5, 0x28($sp) -/* 03A168 7F005638 000E7880 */ sll $t7, $t6, 2 -/* 03A16C 7F00563C 0080A825 */ move $s5, $a0 -/* 03A170 7F005640 26946070 */ addiu $s4, %lo(D_80036070) # addiu $s4, $s4, 0x6070 -/* 03A174 7F005644 AFBF002C */ sw $ra, 0x2c($sp) -/* 03A178 7F005648 01EE7823 */ subu $t7, $t7, $t6 -/* 03A17C 7F00564C AFB30020 */ sw $s3, 0x20($sp) -/* 03A180 7F005650 AFB2001C */ sw $s2, 0x1c($sp) -/* 03A184 7F005654 AFB10018 */ sw $s1, 0x18($sp) -/* 03A188 7F005658 AFB00014 */ sw $s0, 0x14($sp) -/* 03A18C 7F00565C AE8E0000 */ sw $t6, ($s4) -/* 03A190 7F005660 000F2180 */ sll $a0, $t7, 6 -/* 03A194 7F005664 0C0025C8 */ jal mempAllocBytesInBank -/* 03A198 7F005668 24050004 */ li $a1, 4 -/* 03A19C 7F00566C 8E980000 */ lw $t8, ($s4) -/* 03A1A0 7F005670 3C128008 */ lui $s2, %hi(ptr_allocation_0) -/* 03A1A4 7F005674 26529930 */ addiu $s2, %lo(ptr_allocation_0) # addiu $s2, $s2, -0x66d0 -/* 03A1A8 7F005678 AE420000 */ sw $v0, ($s2) -/* 03A1AC 7F00567C 1B00001B */ blez $t8, .L7F0056EC -/* 03A1B0 7F005680 00008825 */ move $s1, $zero -/* 03A1B4 7F005684 00008025 */ move $s0, $zero -/* 03A1B8 7F005688 2413008C */ li $s3, 140 -/* 03A1BC 7F00568C 8E590000 */ lw $t9, ($s2) -.L7F005690: -/* 03A1C0 7F005690 0235082A */ slt $at, $s1, $s5 -/* 03A1C4 7F005694 24040230 */ li $a0, 560 -/* 03A1C8 7F005698 03304021 */ addu $t0, $t9, $s0 -/* 03A1CC 7F00569C 10200005 */ beqz $at, .L7F0056B4 -/* 03A1D0 7F0056A0 AD000008 */ sw $zero, 8($t0) -/* 03A1D4 7F0056A4 8E490000 */ lw $t1, ($s2) -/* 03A1D8 7F0056A8 01305021 */ addu $t2, $t1, $s0 -/* 03A1DC 7F0056AC 10000009 */ b .L7F0056D4 -/* 03A1E0 7F0056B0 AD400010 */ sw $zero, 0x10($t2) -.L7F0056B4: -/* 03A1E4 7F0056B4 0C0025C8 */ jal mempAllocBytesInBank -/* 03A1E8 7F0056B8 24050004 */ li $a1, 4 -/* 03A1EC 7F0056BC 8E4B0000 */ lw $t3, ($s2) -/* 03A1F0 7F0056C0 01706021 */ addu $t4, $t3, $s0 -/* 03A1F4 7F0056C4 AD820010 */ sw $v0, 0x10($t4) -/* 03A1F8 7F0056C8 8E4D0000 */ lw $t5, ($s2) -/* 03A1FC 7F0056CC 01B07021 */ addu $t6, $t5, $s0 -/* 03A200 7F0056D0 A5D30002 */ sh $s3, 2($t6) -.L7F0056D4: -/* 03A204 7F0056D4 8E8F0000 */ lw $t7, ($s4) -/* 03A208 7F0056D8 26310001 */ addiu $s1, $s1, 1 -/* 03A20C 7F0056DC 261000BC */ addiu $s0, $s0, 0xbc -/* 03A210 7F0056E0 022F082A */ slt $at, $s1, $t7 -/* 03A214 7F0056E4 5420FFEA */ bnezl $at, .L7F005690 -/* 03A218 7F0056E8 8E590000 */ lw $t9, ($s2) -.L7F0056EC: -/* 03A21C 7F0056EC 8FBF002C */ lw $ra, 0x2c($sp) -/* 03A220 7F0056F0 8FB00014 */ lw $s0, 0x14($sp) -/* 03A224 7F0056F4 8FB10018 */ lw $s1, 0x18($sp) -/* 03A228 7F0056F8 8FB2001C */ lw $s2, 0x1c($sp) -/* 03A22C 7F0056FC 8FB30020 */ lw $s3, 0x20($sp) -/* 03A230 7F005700 8FB40024 */ lw $s4, 0x24($sp) -/* 03A234 7F005704 8FB50028 */ lw $s5, 0x28($sp) -/* 03A238 7F005708 03E00008 */ jr $ra -/* 03A23C 7F00570C 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif - - diff --git a/src/game/lightfixture.c b/src/game/lightfixture.c index f6461bf..ef60bcd 100644 --- a/src/game/lightfixture.c +++ b/src/game/lightfixture.c @@ -115,7 +115,7 @@ Vtx * return_ptr_vertex_of_entry_room(Gfx * gfx, s32 room_index) // weird memory checking, not sure what's going on here if (((s32) ret & 0xFF000000) == 0x0E000000) { - ret = (s32)array_room_info[room_index].ptr_point_index + ((s32) ret & 0xFFFFFF); + ret = (s32)g_BgRoomInfo[room_index].ptr_point_index + ((s32) ret & 0xFFFFFF); } return ret; @@ -185,7 +185,7 @@ void redarken_lights_in_room(s32 room_index) s32 i; struct s_darkened_light* unk; - vertex = array_room_info[room_index].ptr_point_index; + vertex = g_BgRoomInfo[room_index].ptr_point_index; for (i = 0; i < DARKENED_LIGHT_TABLE_MAX; i++) { @@ -208,7 +208,7 @@ void darken_vertex_in_room(Vtx * vertex, s32 room_index) if (darkened_light_table_contains_vertex(vertex, room_index) != 0) { return; } // weird memory stuff going on here - vtx_index = ((u32)vertex - (u32)array_room_info[room_index].ptr_point_index) >> 4; + vtx_index = ((u32)vertex - (u32)g_BgRoomInfo[room_index].ptr_point_index) >> 4; darkened_light_table[cur_entry_darkened_light_table].room_index = (u16) room_index; darkened_light_table[cur_entry_darkened_light_table].vtx_index = vtx_index; @@ -233,7 +233,7 @@ s32 darkened_light_table_contains_vertex(Vtx * vertex, s32 room_index) s32 i; // weird memory stuff going on here - vtx_index = ((u32)vertex - (u32)array_room_info[room_index].ptr_point_index) >> 4; + vtx_index = ((u32)vertex - (u32)g_BgRoomInfo[room_index].ptr_point_index) >> 4; for (i = 0; i < DARKENED_LIGHT_TABLE_MAX; i++) { @@ -298,7 +298,7 @@ s32 sub_GAME_7F0BBCCC(coord16 * coord, s32 room_index) { if (room_index == darkened_light_table[i].room_index) { - vertex = &array_room_info[room_index].ptr_point_index[darkened_light_table[i].vtx_index]; + vertex = &g_BgRoomInfo[room_index].ptr_point_index[darkened_light_table[i].vtx_index]; var_s0 = vertex->v.ob[0] - coord->AsArray[0]; var_s1 = vertex->v.ob[1] - coord->AsArray[1]; @@ -382,7 +382,7 @@ void sub_GAME_7F0BBE0C(Gfx * gfx, u32 tri_type, s32 room_index) dist_nn = sqrtf((diff_x_13 * diff_x_13) + (diff_y_13 * diff_y_13) + (diff_z_13 * diff_z_13)); inv_dist_13 = 10.0f / (get_room_data_float2() * dist_nn); - sub_GAME_7F0BCA34(light_fixture_table[i].room_index, &origin); + getRoomPositionScaledByIndex(light_fixture_table[i].room_index, &origin); for (dist_tween = 0.0f; dist_tween < 1.0f; dist_tween += inv_dist_12) { diff --git a/src/game/loadobjectmodel.c b/src/game/loadobjectmodel.c index 1454b96..90b2552 100644 --- a/src/game/loadobjectmodel.c +++ b/src/game/loadobjectmodel.c @@ -8,31 +8,38 @@ /** * Address 0x7F056850. + * @brief getposstan */ -s32 sub_GAME_7F056850(PadRecord *arg0, StandTile *arg1, f32 arg2, PadRecord *arg3, StandTile **arg4) +s32 sub_GAME_7F056850(struct coord3d *arg0, StandTile *arg1, f32 arg2, struct coord3d *arg3, StandTile **arg4) { - arg3->pos.f[0] = arg0->pos.f[0]; - arg3->pos.f[1] = arg0->pos.f[1]; - arg3->pos.f[2] = arg0->pos.f[2]; - + arg3->f[0] = arg0->f[0]; + arg3->f[1] = arg0->f[1]; + arg3->f[2] = arg0->f[2]; + *arg4 = arg1; - + if (arg1 == 0) { + #ifdef DEBUG + osSyncPrintf("getposstan: no stan!\n"); + #endif return 0; } - - if ((arg2 > 0.0f) && (stanTestVolume(arg4, arg3->pos.f[0], arg3->pos.f[2], arg2, 0x1F, 0.0f, 1.0f) >= 0)) + + if ((arg2 > 0.0f) && (stanTestVolume(arg4, arg3->f[0], arg3->f[2], arg2, CDTYPE_OBJS | CDTYPE_DOORS | CDTYPE_PLAYERS | CDTYPE_CHRS | CDTYPE_PATHBLOCKER, 0.0f, 1.0f) >= 0)) { + #ifdef DEBUG + osSyncPrintf("getposstan: circle not legal!\n"); + #endif return 0; } - + return 1; } //Todo: finish this func /** - * Get Size of Prop Definition + * Get Size of Prop Definition * @param pdef: Prop Defenition to get size of * @return Size of prop in Words (32bit) */ @@ -129,6 +136,9 @@ s32 sizepropdef(PropDefHeaderRecord *pdef) case PROPDEF_CAMERAPOS: return 7;//return sizeof(GlassRecord) / 4; default: + #ifdef DEBUG + osSyncPrintf("sizepropdef: unknown prop def type %d!!\n",pdef->type); + #endif return sizeof(PropDefHeaderRecord) / 4;; } } @@ -222,9 +232,9 @@ s32 setupGetCommandIndexByProp(struct PropRecord *prop) s32 modelLoad(s32 modelid) { - if (PitemZ_entries[modelid].header->RootNode == NULL) + if (PitemZ_entries[modelid].header->RootNode == NULL) { - fileLoad(PitemZ_entries[modelid].header,PitemZ_entries[modelid].filename); + fileLoad(PitemZ_entries[modelid].header,PitemZ_entries[modelid].filename/*, "prop"*/); modelCalculateRwDataLen(PitemZ_entries[modelid].header); return TRUE; } @@ -315,9 +325,9 @@ void setupUpdateObjectRoomPosition(ObjectRecord *obj) /** * Address 0x7F056EA0. */ -struct ObjectRecord *setupCommandGetObject(s32 stageID, s32 index) + ObjectRecord *setupCommandGetObject(s32 stageID, s32 index) { - struct PropDefHeaderRecord *obj; + PropDefHeaderRecord *obj; obj = setupGetPtrToCommandByIndex(index); @@ -377,7 +387,7 @@ struct ObjectRecord *setupCommandGetObject(s32 stageID, s32 index) break; // not included: - //case PROPDEF_UNK15: //15: + //case PROPDEF_DEBRIS: //15: //case PROPDEF_UNK16: //16: // return ??? } diff --git a/src/game/loadobjectmodel.h b/src/game/loadobjectmodel.h index ff831ef..6b9113e 100644 --- a/src/game/loadobjectmodel.h +++ b/src/game/loadobjectmodel.h @@ -5,9 +5,10 @@ s32 sizepropdef(PropDefHeaderRecord *pdef); void setupUpdateObjectRoomPosition(ObjectRecord *); -s32 sub_GAME_7F056850(PadRecord *arg0, StandTile *arg1, f32 arg2, PadRecord *arg3, StandTile **arg4); +s32 sub_GAME_7F056850(struct coord3d *arg0, StandTile *arg1, f32 arg2, struct coord3d *arg3, StandTile **arg4); ObjectRecord *setupGetPtrToCommandByIndex(s32 index); s32 tagGetCommandIndex(struct ObjectRecord *arg0); s32 modelLoad(s32 modelid); +struct ObjectRecord *setupCommandGetObject(s32 stageID, s32 index); #endif diff --git a/src/game/lvl.c b/src/game/lvl.c index 53c4c48..b3f4ba6 100644 --- a/src/game/lvl.c +++ b/src/game/lvl.c @@ -176,7 +176,7 @@ f32 g_PowerOnTimeSec = 0; /** * Debug variable, seems to track whether user input has changed since * the last time the method was entered. - * + * * Addres 0x800483C0. */ s32 D_800483C0 = 1; @@ -237,7 +237,7 @@ void lvInit(void) debTryAdd(&lvl_c_debug_notice_list, "lv_c_debug"); size = (s32)&_fontdlSegmentRomEnd - (s32)&_fontdlSegmentRomStart; lvl_c_debug_notice_list = 1; - ptr_font_DL = mempAllocBytesInBank(size, 6); + ptr_font_DL = mempAllocBytesInBank(size, MEMPOOL_PERMANENT); romCopy(ptr_font_DL, &_fontdlSegmentRomStart, size); } @@ -293,7 +293,7 @@ void lvlMusicPlayStageTrackOrRandom(void) * Title screen is handled as a special case. * First half of method resets stage and player values (including mutliplayer values) to defaults. * Second part loads stage data (init guards, init guard heads, etc). - * + * * NTSC Address: 0x7F0BDAB0. * NTSC-J Address: 7F0BE660. * PAL Address: 7F0BCE60. @@ -302,7 +302,7 @@ void lvlStageLoad(s32 stage) { s32 i; struct player_data *player_data; - + g_CurrentStageToLoad = stage; // this if block pushes where g_CurrentStageToLoad gets loaded to the @@ -332,7 +332,7 @@ void lvlStageLoad(s32 stage) g_GlobalTimerDelta = 1.f; #endif #if defined(VERSION_EU) - g_GlobalTimerDelta = 1.20000004768f; + g_GlobalTimerDelta = 1.20000004768f; #endif D_80048388 = 0; @@ -359,7 +359,7 @@ void lvlStageLoad(s32 stage) texReset(); load_font_tables(); - /* If title screen, initialize screen and folder setup. + /* If title screen, initialize screen and folder setup. * Otherwise: * - enable cheats for player * - init watch @@ -392,7 +392,7 @@ void lvlStageLoad(s32 stage) load_bg_file(g_CurrentStageToLoad); skySetStageNum(g_CurrentStageToLoad); - + // HACK: This method call is wrong. The function takes one argument, but the asm calls it without // any arguments here. init_watch_at_start_of_stage(); @@ -427,7 +427,7 @@ void lvlStageLoad(s32 stage) { g_playerPlayerData[s3].handicap = get_player_mp_handicap(s3); } - + g_playerPlayerData[s3].player_perspective_height = get_player_mp_char_height(s3); } @@ -481,7 +481,7 @@ void lvlStageLoad(s32 stage) else { s32 s0; - + init_path_table_links(); init_ejected_cartridges(); @@ -502,7 +502,7 @@ void lvlStageLoad(s32 stage) set_contents_of_80036078(0); zbufDeallocate(); - viSetVideoMode(1); + viSetVideoMode(MD_NORMAL); D_80048368 = 1.0f; lvlSetControlsLockedFlag(0); } @@ -521,9 +521,9 @@ s32 lvlGetCurrentStageToLoad(void) * on controller 1 and 2 are used for control flow. * * address 0x7F0BDF10. - * + * * https://decomp.me/scratch/C83v8 90.47% - * + * * decomp status: * - compiles: yes * - stack resize: wrong @@ -594,7 +594,7 @@ Gfx * lvlPortalDebug7F0BDF10(Gfx * arg0) else if (joyGetButtons(PLAYER_1, R_TRIG) | joyGetButtons(PLAYER_2, R_TRIG)) { if ( - (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, D_JPAD)) + (joyGetButtonsPressedThisFrame(PLAYER_1, D_JPAD) | joyGetButtonsPressedThisFrame(PLAYER_2, D_JPAD)) && (bgGetDataPortalsControlBytes1Bit1(g_DebugPortalsD_800483CC) == 0)) { bgToggleDataPortalsContrlBytes1Bit1(g_DebugPortalsD_800483CC, 0); @@ -932,7 +932,7 @@ glabel lvlPortalDebug7F0BDF10 /** * Graphics render method. * Also sets player max ammo if infinite ammo cheat is enabled. - * + * * Address 0x7F0BE30C (VERSION_US). */ @@ -941,8 +941,8 @@ Gfx* lvlRender(Gfx* DL) gSPSegment(DL++, SPSEGMENT_PHYSICAL, NULL); gSPSegment(DL++, SPSEGMENT_UNKNOWN, osVirtualToPhysical(ptr_font_DL)); - gSPDisplayList(DL++, &fontDL_0x040); - gSPDisplayList(DL++, &fontDL_0x020); + gSPDisplayList(DL++, &dlFastPipelineSetup); + gSPDisplayList(DL++, &dlZBufferGeometry); if (g_CurrentStageToLoad == LEVELID_TITLE) { @@ -971,7 +971,7 @@ Gfx* lvlRender(Gfx* DL) DL = viClearZBufCurrentPlayer(DL); DL = video_related_F(DL); - + if (get_debug_render_raster() == DEB_MOVE_VIEW) { DL = sub_GAME_7F091580(DL); @@ -989,7 +989,7 @@ Gfx* lvlRender(Gfx* DL) DL = viSetupScreensForNumPlayers(DL); DL = skyRender(DL); - sub_GAME_7F0B4884(); + bgRoomVisibilityRelated(); determing_type_of_object_and_detection(); chraiUpdateOnscreenPropCount(); chrpropUpdateAutoaimTarget(); @@ -1065,7 +1065,7 @@ Gfx* lvlRender(Gfx* DL) sub_GAME_7F0A4824(&DL, 1); #endif DL = sub_GAME_7F0A2C44(DL); - DL = sub_GAME_7F0A0034(DL); + DL = explosionRenderFlyingParticles(DL); if ( @@ -1105,7 +1105,7 @@ Gfx* lvlRender(Gfx* DL) /** * Sets the modifier values for the level being loaded. * This covers the enemy accuracy, reaction speed, and similar values. - * + * * address 0x7F0BE8D0 */ void lvlSetMultipliersForDifficulty(void) @@ -1132,7 +1132,7 @@ void lvlSetMultipliersForDifficulty(void) g_AiAccuracyModifier = DEFAULT_AGENT_AI_ACCURACY_MODIFIER; g_AiDamageModifier = (DEFAULT_AGENT_AI_DAMAGE_MODIFIER * damageMultiplier); g_AiHealthModifier = 2.0f; - D_80040178 = (f32) (0.25f * damageMultiplier); + g_SpExplosionDamageMult = (f32) (0.25f * damageMultiplier); difficulty = 1.5f; g_SoloAmmoMultiplier = DEFAULT_AGENT_SOLO_AMMO_MULTIPLIER; g_AiReactionSpeed = DEFAULT_AGENT_AI_REACTION_SPEED; @@ -1147,7 +1147,7 @@ void lvlSetMultipliersForDifficulty(void) g_AiAccuracyModifier = DEFAULT_SECRET_AGENT_AI_ACCURACY_MODIFIER; g_AiDamageModifier = DEFAULT_SECRET_AGENT_AI_DAMAGE_MODIFIER; g_AiHealthModifier = 1.0f; - D_80040178 = 0.75f; + g_SpExplosionDamageMult = 0.75f; #if defined(BUGFIX_R1) if (j_text_trigger) @@ -1176,7 +1176,7 @@ void lvlSetMultipliersForDifficulty(void) g_AiAccuracyModifier = DEFAULT_00_AGENT_AI_ACCURACY_MODIFIER; g_AiDamageModifier = DEFAULT_00_AGENT_AI_DAMAGE_MODIFIER; g_AiHealthModifier = 1.0f; - D_80040178 = 1.0f; + g_SpExplosionDamageMult = 1.0f; #if defined(BUGFIX_R1) if (j_text_trigger) @@ -1205,7 +1205,7 @@ void lvlSetMultipliersForDifficulty(void) g_AiAccuracyModifier = DEFAULT_007_AI_ACCURACY_MODIFIER; g_AiDamageModifier = DEFAULT_007_AI_DAMAGE_MODIFIER; g_AiHealthModifier = 1.0f; - D_80040178 = 1.0f; + g_SpExplosionDamageMult = 1.0f; difficulty = 1.0f; g_SoloAmmoMultiplier = DEFAULT_007_SOLO_AMMO_MULTIPLIER; g_AiReactionSpeed = DEFAULT_007_AI_REACTION_SPEED; @@ -1218,17 +1218,21 @@ void lvlSetMultipliersForDifficulty(void) * Multiplayer method. * Tracks you-only-live-twice kills/deaths. * Lots of debug code. - * + * * Address: 0x7F0BEB88 (NTSC). - * + * * decomp status: * - compiles: yes * - stack resize: fail * - identical instructions: fail * - identical registers: fail - * + * * notes: there is one big `if` block that is very wrong. A few places where two instructions are swapped. * Otherwise just lots of regalloc. + * + * mismatch section is probably Perfect Dark void mpCalculateAwards(void) + * + * https://decomp.me/scratch/YWqVR 63.28% */ void lvlManageMpGame(void) { @@ -1305,10 +1309,10 @@ void lvlManageMpGame(void) { p = g_playerPointers[i]; - if (p->bonddead != 0) + if (p->bonddead != FALSE) { mp_alive_count++; - if (p->redbloodfinished != 0) + if (p->redbloodfinished) { mp_player_field424_count++; } @@ -1376,8 +1380,8 @@ void lvlManageMpGame(void) { p = g_playerPointers[i]; - if (p->bonddead != 0 && - (p->redbloodfinished == 0 || p->deathanimfinished == 0 || p->colourfadetimemax60 >= 0.0f)) + if (p->bonddead != FALSE && + (p->redbloodfinished == FALSE || p->deathanimfinished == FALSE || p->colourfadetimemax60 >= 0.0f)) { mp_player_currently_in_dying_animation++; } @@ -1427,7 +1431,7 @@ void lvlManageMpGame(void) { for (j=0; jbonddead == 0) + if (g_playerPointers[j]->bonddead == FALSE) { not_dead_count++; } @@ -1439,28 +1443,28 @@ void lvlManageMpGame(void) { for (j=0; jbonddead == 0) + if (g_playerPointers[PLAYER_1]->bonddead == FALSE) { not_dead_count++; } - if (g_playerPointers[1]->bonddead == 0) + if (g_playerPointers[PLAYER_2]->bonddead == FALSE) { not_dead_count++; } - if (g_playerPointers[2]->bonddead == 0) + if (g_playerPointers[PLAYER_3]->bonddead == FALSE) { not_dead_count++; } - if (g_playerPointers[3]->bonddead == 0) + if (g_playerPointers[PLAYER_4]->bonddead == FALSE) { not_dead_count++; } killed_count = - g_playerPlayerData[0].killed_p1 + - g_playerPlayerData[1].killed_p1 + - g_playerPlayerData[2].killed_p1 + - g_playerPlayerData[3].killed_p1; + g_playerPlayerData[PLAYER_1].killed_p1 + + g_playerPlayerData[PLAYER_2].killed_p1 + + g_playerPlayerData[PLAYER_3].killed_p1 + + g_playerPlayerData[PLAYER_4].killed_p1; } } } @@ -1472,14 +1476,14 @@ void lvlManageMpGame(void) g_playerPlayerData[i].order_out_in_yolt = (u8) (phi_a2_5 + 1); } - if ((g_playerPointers[i]->redbloodfinished != 0) && (g_playerPointers[i]->deathanimfinished != 0) && (g_playerPointers[i]->colourfadetimemax60 < 0.0f)) + if ((g_playerPointers[i]->redbloodfinished) && (g_playerPointers[i]->deathanimfinished) && (g_playerPointers[i]->colourfadetimemax60 < 0.0f)) { phi_ra_2 = phi_ra_3 + 1; } } } //} - + temp_v1_7 = var_player_count2 - 1; if (not_dead_count >= temp_v1_7) { @@ -1539,13 +1543,13 @@ void lvlManageMpGame(void) { sub_GAME_7F09BBBC(); lvlSetMultipliersForDifficulty(); - sub_GAME_7F0BC7D4(); + updateRoomStatusFlags(); sub_GAME_7F092E50(); sub_GAME_7F094438(); update_bullet_sparks_and_dust_clouds(); update_bullet_casings(); update_broken_windows(); - update_gray_flying_particles(); + explosionUpdateFlyingParticles(); handle_mp_respawn_and_some_things(); reset_all_music_slots(); langTick(); @@ -1553,7 +1557,7 @@ void lvlManageMpGame(void) if ((get_debug_joy2detailedit_flag() != 0) && (D_800483C8 == 0)) { s32 i; - D_800483C8 = (struct LvlMpUnknown*)mempAllocBytesInBank(0x3000, 4); + D_800483C8 = (struct LvlMpUnknown *)mempAllocBytesInBank(0x3000, MEMPOOL_STAGE); if (D_800483C8 != 0) { for (i=0; i<3000; i++) @@ -1577,13 +1581,13 @@ void lvlManageMpGame(void) if (joyGetButtonsPressedThisFrame(PLAYER_1, L_CBUTTONS)) { sub_GAME_7F0AF630(-1); - sub_GAME_7F0B2D38(0, 0, 0); + debugStanView(0, 0, 0); } if (joyGetButtonsPressedThisFrame(PLAYER_1, R_CBUTTONS)) { sub_GAME_7F0AF630(1); - sub_GAME_7F0B2D38(0, 0, 0); + debugStanView(0, 0, 0); } } break; @@ -2274,7 +2278,7 @@ glabel lvlManageMpGame /* 0F3E90 7F0BF360 00000000 */ nop /* 0F3E94 7F0BF364 0FC2FA34 */ jal lvlSetMultipliersForDifficulty /* 0F3E98 7F0BF368 00000000 */ nop -/* 0F3E9C 7F0BF36C 0FC2F1F5 */ jal sub_GAME_7F0BC7D4 +/* 0F3E9C 7F0BF36C 0FC2F1F5 */ jal updateRoomStatusFlags /* 0F3EA0 7F0BF370 00000000 */ nop /* 0F3EA4 7F0BF374 0FC24B94 */ jal sub_GAME_7F092E50 /* 0F3EA8 7F0BF378 00000000 */ nop @@ -2286,7 +2290,7 @@ glabel lvlManageMpGame /* 0F3EC0 7F0BF390 00000000 */ nop /* 0F3EC4 7F0BF394 0FC28A35 */ jal update_broken_windows /* 0F3EC8 7F0BF398 00000000 */ nop -/* 0F3ECC 7F0BF39C 0FC27F4F */ jal update_gray_flying_particles +/* 0F3ECC 7F0BF39C 0FC27F4F */ jal explosionUpdateFlyingParticles /* 0F3ED0 7F0BF3A0 00000000 */ nop /* 0F3ED4 7F0BF3A4 0FC0F192 */ jal handle_mp_respawn_and_some_things /* 0F3ED8 7F0BF3A8 00000000 */ nop @@ -2402,7 +2406,7 @@ glabel lvlManageMpGame /* 0F4080 7F0BF550 2404FFFF */ li $a0, -1 /* 0F4084 7F0BF554 00002025 */ move $a0, $zero /* 0F4088 7F0BF558 00002825 */ move $a1, $zero -/* 0F408C 7F0BF55C 0FC2CB4E */ jal sub_GAME_7F0B2D38 +/* 0F408C 7F0BF55C 0FC2CB4E */ jal debugStanView /* 0F4090 7F0BF560 00003025 */ move $a2, $zero /* 0F4094 7F0BF564 00002025 */ move $a0, $zero .L7F0BF568: @@ -2414,7 +2418,7 @@ glabel lvlManageMpGame /* 0F40AC 7F0BF57C 24040001 */ li $a0, 1 /* 0F40B0 7F0BF580 00002025 */ move $a0, $zero /* 0F40B4 7F0BF584 00002825 */ move $a1, $zero -/* 0F40B8 7F0BF588 0FC2CB4E */ jal sub_GAME_7F0B2D38 +/* 0F40B8 7F0BF588 0FC2CB4E */ jal debugStanView /* 0F40BC 7F0BF58C 00003025 */ move $a2, $zero /* 0F40C0 7F0BF590 1000001A */ b .L7F0BF5FC /* 0F40C4 7F0BF594 00000000 */ nop @@ -3165,7 +3169,7 @@ glabel lvlManageMpGame /* 0F4B08 7F0BFF98 00000000 */ nop /* 0F4B0C 7F0BFF9C 0FC2FD2D */ jal lvlSetMultipliersForDifficulty /* 0F4B10 7F0BFFA0 00000000 */ nop -/* 0F4B14 7F0BFFA4 0FC2F4E1 */ jal sub_GAME_7F0BC7D4 +/* 0F4B14 7F0BFFA4 0FC2F4E1 */ jal updateRoomStatusFlags /* 0F4B18 7F0BFFA8 00000000 */ nop /* 0F4B1C 7F0BFFAC 0FC24E7C */ jal sub_GAME_7F092E50 /* 0F4B20 7F0BFFB0 00000000 */ nop @@ -3177,7 +3181,7 @@ glabel lvlManageMpGame /* 0F4B38 7F0BFFC8 00000000 */ nop /* 0F4B3C 7F0BFFCC 0FC28D1D */ jal update_broken_windows /* 0F4B40 7F0BFFD0 00000000 */ nop -/* 0F4B44 7F0BFFD4 0FC28238 */ jal update_gray_flying_particles +/* 0F4B44 7F0BFFD4 0FC28238 */ jal explosionUpdateFlyingParticles /* 0F4B48 7F0BFFD8 00000000 */ nop /* 0F4B4C 7F0BFFDC 0FC0F252 */ jal handle_mp_respawn_and_some_things /* 0F4B50 7F0BFFE0 00000000 */ nop @@ -3293,7 +3297,7 @@ glabel lvlManageMpGame /* 0F4CF8 7F0C0188 2404FFFF */ li $a0, -1 /* 0F4CFC 7F0C018C 00002025 */ move $a0, $zero /* 0F4D00 7F0C0190 00002825 */ move $a1, $zero -/* 0F4D04 7F0C0194 0FC2CE3A */ jal sub_GAME_7F0B2D38 +/* 0F4D04 7F0C0194 0FC2CE3A */ jal debugStanView /* 0F4D08 7F0C0198 00003025 */ move $a2, $zero /* 0F4D0C 7F0C019C 00002025 */ move $a0, $zero .Ljp7F0C01A0: @@ -3305,7 +3309,7 @@ glabel lvlManageMpGame /* 0F4D24 7F0C01B4 24040001 */ li $a0, 1 /* 0F4D28 7F0C01B8 00002025 */ move $a0, $zero /* 0F4D2C 7F0C01BC 00002825 */ move $a1, $zero -/* 0F4D30 7F0C01C0 0FC2CE3A */ jal sub_GAME_7F0B2D38 +/* 0F4D30 7F0C01C0 0FC2CE3A */ jal debugStanView /* 0F4D34 7F0C01C4 00003025 */ move $a2, $zero /* 0F4D38 7F0C01C8 1000001A */ b .Ljp7F0C0234 /* 0F4D3C 7F0C01CC 00000000 */ nop @@ -3508,17 +3512,17 @@ glabel lvlManageMpGame /* 0F099C 7F0BDFAC 27BDFE68 */ addiu $sp, $sp, -0x198 /* 0F09A0 7F0BDFB0 AFBF0014 */ sw $ra, 0x14($sp) /* 0F09A4 7F0BDFB4 0C000744 */ jal tlbmanageResetCurrentEntriesCount -/* 0F09A8 7F0BDFB8 00000000 */ nop +/* 0F09A8 7F0BDFB8 00000000 */ nop /* 0F09AC 7F0BDFBC 3C0E8004 */ lui $t6, %hi(g_ControlsLockedFlag) # $t6, 0x8004 /* 0F09B0 7F0BDFC0 8DCE0FF0 */ lw $t6, %lo(g_ControlsLockedFlag)($t6) /* 0F09B4 7F0BDFC4 3C018004 */ lui $at, %hi(g_ClockTimer) # $at, 0x8004 /* 0F09B8 7F0BDFC8 11C00003 */ beqz $t6, .L7F0BDFD8 -/* 0F09BC 7F0BDFCC 00000000 */ nop +/* 0F09BC 7F0BDFCC 00000000 */ nop /* 0F09C0 7F0BDFD0 10000010 */ b .L7F0BE014 /* 0F09C4 7F0BDFD4 AC200FF4 */ sw $zero, %lo(g_ClockTimer)($at) .L7F0BDFD8: /* 0F09C8 7F0BDFD8 0FC31565 */ jal checkGamePaused -/* 0F09CC 7F0BDFDC 00000000 */ nop +/* 0F09CC 7F0BDFDC 00000000 */ nop /* 0F09D0 7F0BDFE0 10400004 */ beqz $v0, .L7F0BDFF4 /* 0F09D4 7F0BDFE4 3C0F8004 */ lui $t7, %hi(speedgraphframes) # $t7, 0x8004 /* 0F09D8 7F0BDFE8 3C018004 */ lui $at, %hi(g_ClockTimer) # $at, 0x8004 @@ -3557,10 +3561,10 @@ glabel lvlManageMpGame /* 0F0A54 7F0BE064 AC8F0000 */ sw $t7, ($a0) /* 0F0A58 7F0BE068 8F180FE4 */ lw $t8, %lo(g_CurrentStageToLoad)($t8) /* 0F0A5C 7F0BE06C 1301001D */ beq $t8, $at, .L7F0BE0E4 -/* 0F0A60 7F0BE070 00000000 */ nop +/* 0F0A60 7F0BE070 00000000 */ nop /* 0F0A64 7F0BE074 8F391018 */ lw $t9, %lo(D_80048394)($t9) /* 0F0A68 7F0BE078 1720001A */ bnez $t9, .L7F0BE0E4 -/* 0F0A6C 7F0BE07C 00000000 */ nop +/* 0F0A6C 7F0BE07C 00000000 */ nop /* 0F0A70 7F0BE080 18400018 */ blez $v0, .L7F0BE0E4 /* 0F0A74 7F0BE084 3C0E8002 */ lui $t6, %hi(g_AppendCheatSinglePlayer) # $t6, 0x8002 /* 0F0A78 7F0BE088 8DCE5E50 */ lw $t6, %lo(g_AppendCheatSinglePlayer)($t6) @@ -3591,19 +3595,19 @@ glabel lvlManageMpGame /* 0F0AD0 7F0BE0E0 24630001 */ addiu $v1, $v1, 1 .L7F0BE0E4: /* 0F0AD4 7F0BE0E4 0FC26669 */ jal getPlayerCount -/* 0F0AD8 7F0BE0E8 00000000 */ nop +/* 0F0AD8 7F0BE0E8 00000000 */ nop /* 0F0ADC 7F0BE0EC 28410002 */ slti $at, $v0, 2 /* 0F0AE0 7F0BE0F0 1420014C */ bnez $at, .L7F0BE624 /* 0F0AE4 7F0BE0F4 3C188004 */ lui $t8, %hi(g_CurrentStageToLoad) # $t8, 0x8004 /* 0F0AE8 7F0BE0F8 8F180FE4 */ lw $t8, %lo(g_CurrentStageToLoad)($t8) /* 0F0AEC 7F0BE0FC 2401005A */ li $at, 90 /* 0F0AF0 7F0BE100 13010148 */ beq $t8, $at, .L7F0BE624 -/* 0F0AF4 7F0BE104 00000000 */ nop +/* 0F0AF4 7F0BE104 00000000 */ nop /* 0F0AF8 7F0BE108 0FC3003C */ jal get_mission_state -/* 0F0AFC 7F0BE10C 00000000 */ nop +/* 0F0AFC 7F0BE10C 00000000 */ nop /* 0F0B00 7F0BE110 24010006 */ li $at, 6 /* 0F0B04 7F0BE114 14410029 */ bne $v0, $at, .L7F0BE1BC -/* 0F0B08 7F0BE118 00000000 */ nop +/* 0F0B08 7F0BE118 00000000 */ nop /* 0F0B0C 7F0BE11C AFA00190 */ sw $zero, 0x190($sp) /* 0F0B10 7F0BE120 AFA0018C */ sw $zero, 0x18c($sp) /* 0F0B14 7F0BE124 0FC26669 */ jal getPlayerCount @@ -3642,9 +3646,9 @@ glabel lvlManageMpGame /* 0F0B90 7F0BE1A0 8FA60188 */ lw $a2, 0x188($sp) .L7F0BE1A4: /* 0F0B94 7F0BE1A4 18A00005 */ blez $a1, .L7F0BE1BC -/* 0F0B98 7F0BE1A8 00000000 */ nop +/* 0F0B98 7F0BE1A8 00000000 */ nop /* 0F0B9C 7F0BE1AC 14A60003 */ bne $a1, $a2, .L7F0BE1BC -/* 0F0BA0 7F0BE1B0 00000000 */ nop +/* 0F0BA0 7F0BE1B0 00000000 */ nop /* 0F0BA4 7F0BE1B4 0FC3003F */ jal set_missionstate /* 0F0BA8 7F0BE1B8 24040001 */ li $a0, 1 .L7F0BE1BC: @@ -3653,7 +3657,7 @@ glabel lvlManageMpGame /* 0F0BB4 7F0BE1C4 3C028004 */ lui $v0, %hi(D_80048394) # $v0, 0x8004 /* 0F0BB8 7F0BE1C8 3C198004 */ lui $t9, %hi(g_ClockTimer) # $t9, 0x8004 /* 0F0BBC 7F0BE1CC 1860004A */ blez $v1, .Leu7F0BE2F8 -/* 0F0BC0 7F0BE1D0 00000000 */ nop +/* 0F0BC0 7F0BE1D0 00000000 */ nop /* 0F0BC4 7F0BE1D4 8C421018 */ lw $v0, %lo(D_80048394)($v0) /* 0F0BC8 7F0BE1D8 8F390FF4 */ lw $t9, %lo(g_ClockTimer)($t9) /* 0F0BCC 7F0BE1DC 2464F448 */ addiu $a0, $v1, -0xbb8 @@ -3664,11 +3668,11 @@ glabel lvlManageMpGame /* 0F0BE0 7F0BE1F0 AFA20184 */ sw $v0, 0x184($sp) /* 0F0BE4 7F0BE1F4 01C4082A */ slt $at, $t6, $a0 /* 0F0BE8 7F0BE1F8 14200013 */ bnez $at, .L7F0BE248 -/* 0F0BEC 7F0BE1FC 00000000 */ nop +/* 0F0BEC 7F0BE1FC 00000000 */ nop /* 0F0BF0 7F0BE200 0FC26669 */ jal getPlayerCount /* 0F0BF4 7F0BE204 AFA0017C */ sw $zero, 0x17c($sp) /* 0F0BF8 7F0BE208 1840000F */ blez $v0, .L7F0BE248 -/* 0F0BFC 7F0BE20C 00000000 */ nop +/* 0F0BFC 7F0BE20C 00000000 */ nop .L7F0BE210: /* 0F0C00 7F0BE210 0FC26993 */ jal set_cur_player /* 0F0C04 7F0BE214 8FA4017C */ lw $a0, 0x17c($sp) @@ -3683,7 +3687,7 @@ glabel lvlManageMpGame /* 0F0C28 7F0BE238 8FB9017C */ lw $t9, 0x17c($sp) /* 0F0C2C 7F0BE23C 0322082A */ slt $at, $t9, $v0 /* 0F0C30 7F0BE240 1420FFF3 */ bnez $at, .L7F0BE210 -/* 0F0C34 7F0BE244 00000000 */ nop +/* 0F0C34 7F0BE244 00000000 */ nop .L7F0BE248: /* 0F0C38 7F0BE248 3C0F8004 */ lui $t7, %hi(g_MpTime) # $t7, 0x8004 /* 0F0C3C 7F0BE24C 8DEF101C */ lw $t7, %lo(g_MpTime)($t7) @@ -3692,12 +3696,12 @@ glabel lvlManageMpGame /* 0F0C48 7F0BE258 25F8FE0C */ addiu $t8, $t7, -0x1f4 /* 0F0C4C 7F0BE25C 01D8082A */ slt $at, $t6, $t8 /* 0F0C50 7F0BE260 1420000D */ bnez $at, .L7F0BE298 -/* 0F0C54 7F0BE264 00000000 */ nop +/* 0F0C54 7F0BE264 00000000 */ nop /* 0F0C58 7F0BE268 8F391024 */ lw $t9, %lo(g_MpSoundStateRelated)($t9) /* 0F0C5C 7F0BE26C 1720000A */ bnez $t9, .L7F0BE298 -/* 0F0C60 7F0BE270 00000000 */ nop +/* 0F0C60 7F0BE270 00000000 */ nop /* 0F0C64 7F0BE274 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 0F0C68 7F0BE278 00000000 */ nop +/* 0F0C68 7F0BE278 00000000 */ nop /* 0F0C6C 7F0BE27C 14400006 */ bnez $v0, .L7F0BE298 /* 0F0C70 7F0BE280 3C048005 */ lui $a0, %hi(g_musicSfxBufferPtr) # $a0, 0x8005 /* 0F0C74 7F0BE284 3C068004 */ lui $a2, %hi(g_MpSoundStateRelated) # $a2, 0x8004 @@ -3707,14 +3711,14 @@ glabel lvlManageMpGame /* 0F0C84 7F0BE294 240500A1 */ li $a1, 161 .L7F0BE298: /* 0F0C88 7F0BE298 0FC2FC1E */ jal lvlGetControlsLockedFlag -/* 0F0C8C 7F0BE29C 00000000 */ nop +/* 0F0C8C 7F0BE29C 00000000 */ nop /* 0F0C90 7F0BE2A0 1040000A */ beqz $v0, .L7F0BE2CC /* 0F0C94 7F0BE2A4 3C048004 */ lui $a0, %hi(g_MpSoundStateRelated) # $a0, 0x8004 /* 0F0C98 7F0BE2A8 8C841024 */ lw $a0, %lo(g_MpSoundStateRelated)($a0) /* 0F0C9C 7F0BE2AC 10800007 */ beqz $a0, .L7F0BE2CC -/* 0F0CA0 7F0BE2B0 00000000 */ nop +/* 0F0CA0 7F0BE2B0 00000000 */ nop /* 0F0CA4 7F0BE2B4 0C002094 */ jal sndGetPlayingState -/* 0F0CA8 7F0BE2B8 00000000 */ nop +/* 0F0CA8 7F0BE2B8 00000000 */ nop /* 0F0CAC 7F0BE2BC 10400003 */ beqz $v0, .L7F0BE2CC /* 0F0CB0 7F0BE2C0 3C048004 */ lui $a0, %hi(g_MpSoundStateRelated) # $a0, 0x8004 /* 0F0CB4 7F0BE2C4 0C002120 */ jal sndDeactivate @@ -3728,7 +3732,7 @@ glabel lvlManageMpGame /* 0F0CD0 7F0BE2E0 10200005 */ beqz $at, .Leu7F0BE2F8 /* 0F0CD4 7F0BE2E4 01C3082A */ slt $at, $t6, $v1 /* 0F0CD8 7F0BE2E8 14200003 */ bnez $at, .Leu7F0BE2F8 -/* 0F0CDC 7F0BE2EC 00000000 */ nop +/* 0F0CDC 7F0BE2EC 00000000 */ nop /* 0F0CE0 7F0BE2F0 0FC30684 */ jal mpCalculateAwards /* 0F0CE4 7F0BE2F4 00002025 */ move $a0, $zero .Leu7F0BE2F8: @@ -3736,12 +3740,12 @@ glabel lvlManageMpGame /* 0F0CEC 7F0BE2FC 8F181020 */ lw $t8, %lo(g_MpPoint)($t8) /* 0F0CF0 7F0BE300 3C198004 */ lui $t9, %hi(g_ClockTimer) # $t9, 0x8004 /* 0F0CF4 7F0BE304 1B00003D */ blez $t8, .L7F0BE3FC -/* 0F0CF8 7F0BE308 00000000 */ nop +/* 0F0CF8 7F0BE308 00000000 */ nop /* 0F0CFC 7F0BE30C 8F390FF4 */ lw $t9, %lo(g_ClockTimer)($t9) /* 0F0D00 7F0BE310 1320003A */ beqz $t9, .L7F0BE3FC -/* 0F0D04 7F0BE314 00000000 */ nop +/* 0F0D04 7F0BE314 00000000 */ nop /* 0F0D08 7F0BE318 0FC26669 */ jal getPlayerCount -/* 0F0D0C 7F0BE31C 00000000 */ nop +/* 0F0D0C 7F0BE31C 00000000 */ nop /* 0F0D10 7F0BE320 00403825 */ move $a3, $v0 /* 0F0D14 7F0BE324 00002825 */ move $a1, $zero /* 0F0D18 7F0BE328 00003025 */ move $a2, $zero @@ -3763,7 +3767,7 @@ glabel lvlManageMpGame /* 0F0D54 7F0BE364 24A50001 */ addiu $a1, $a1, 1 /* 0F0D58 7F0BE368 C45203E4 */ lwc1 $f18, 0x3e4($v0) /* 0F0D5C 7F0BE36C 4612003E */ c.le.s $f0, $f18 -/* 0F0D60 7F0BE370 00000000 */ nop +/* 0F0D60 7F0BE370 00000000 */ nop /* 0F0D64 7F0BE374 45020003 */ bc1fl .L7F0BE384 /* 0F0D68 7F0BE378 AFA3001C */ sw $v1, 0x1c($sp) /* 0F0D6C 7F0BE37C 24A50001 */ addiu $a1, $a1, 1 @@ -3793,27 +3797,27 @@ glabel lvlManageMpGame /* 0F0DC0 7F0BE3D0 24630004 */ addiu $v1, $v1, 4 .L7F0BE3D4: /* 0F0DC4 7F0BE3D4 18C00009 */ blez $a2, .L7F0BE3FC -/* 0F0DC8 7F0BE3D8 00000000 */ nop +/* 0F0DC8 7F0BE3D8 00000000 */ nop /* 0F0DCC 7F0BE3DC 14A00005 */ bnez $a1, .L7F0BE3F4 -/* 0F0DD0 7F0BE3E0 00000000 */ nop +/* 0F0DD0 7F0BE3E0 00000000 */ nop /* 0F0DD4 7F0BE3E4 0FC30684 */ jal mpCalculateAwards /* 0F0DD8 7F0BE3E8 00002025 */ move $a0, $zero /* 0F0DDC 7F0BE3EC 10000003 */ b .L7F0BE3FC -/* 0F0DE0 7F0BE3F0 00000000 */ nop +/* 0F0DE0 7F0BE3F0 00000000 */ nop .L7F0BE3F4: /* 0F0DE4 7F0BE3F4 0FC30680 */ jal mpwatchSetStopPlayFlag -/* 0F0DE8 7F0BE3F8 00000000 */ nop +/* 0F0DE8 7F0BE3F8 00000000 */ nop .L7F0BE3FC: /* 0F0DEC 7F0BE3FC 0FC051B2 */ jal get_scenario -/* 0F0DF0 7F0BE400 00000000 */ nop +/* 0F0DF0 7F0BE400 00000000 */ nop /* 0F0DF4 7F0BE404 24010001 */ li $at, 1 /* 0F0DF8 7F0BE408 14410086 */ bne $v0, $at, .L7F0BE624 /* 0F0DFC 7F0BE40C 3C0F8004 */ lui $t7, %hi(g_ClockTimer) # $t7, 0x8004 /* 0F0E00 7F0BE410 8DEF0FF4 */ lw $t7, %lo(g_ClockTimer)($t7) /* 0F0E04 7F0BE414 11E00083 */ beqz $t7, .L7F0BE624 -/* 0F0E08 7F0BE418 00000000 */ nop +/* 0F0E08 7F0BE418 00000000 */ nop /* 0F0E0C 7F0BE41C 0FC26669 */ jal getPlayerCount -/* 0F0E10 7F0BE420 00000000 */ nop +/* 0F0E10 7F0BE420 00000000 */ nop /* 0F0E14 7F0BE424 44800000 */ mtc1 $zero, $f0 /* 0F0E18 7F0BE428 00405025 */ move $t2, $v0 /* 0F0E1C 7F0BE42C 00006825 */ move $t5, $zero @@ -3932,7 +3936,7 @@ glabel lvlManageMpGame /* 0F0FB4 7F0BE5C4 258C0001 */ addiu $t4, $t4, 1 /* 0F0FB8 7F0BE5C8 C46403E4 */ lwc1 $f4, 0x3e4($v1) /* 0F0FBC 7F0BE5CC 4600203C */ c.lt.s $f4, $f0 -/* 0F0FC0 7F0BE5D0 00000000 */ nop +/* 0F0FC0 7F0BE5D0 00000000 */ nop /* 0F0FC4 7F0BE5D4 45020003 */ bc1fl .L7F0BE5E4 /* 0F0FC8 7F0BE5D8 258C0001 */ addiu $t4, $t4, 1 /* 0F0FCC 7F0BE5DC 27FF0001 */ addiu $ra, $ra, 1 @@ -3950,13 +3954,13 @@ glabel lvlManageMpGame /* 0F0FF0 7F0BE600 0FC30684 */ jal mpCalculateAwards /* 0F0FF4 7F0BE604 00002025 */ move $a0, $zero /* 0F0FF8 7F0BE608 10000006 */ b .L7F0BE624 -/* 0F0FFC 7F0BE60C 00000000 */ nop +/* 0F0FFC 7F0BE60C 00000000 */ nop /* 0F1000 7F0BE610 01A3082A */ slt $at, $t5, $v1 .L7F0BE614: /* 0F1004 7F0BE614 14200003 */ bnez $at, .L7F0BE624 -/* 0F1008 7F0BE618 00000000 */ nop +/* 0F1008 7F0BE618 00000000 */ nop /* 0F100C 7F0BE61C 0FC30680 */ jal mpwatchSetStopPlayFlag -/* 0F1010 7F0BE620 00000000 */ nop +/* 0F1010 7F0BE620 00000000 */ nop .L7F0BE624: /* 0F1014 7F0BE624 3C028004 */ lui $v0, %hi(g_ClockTimer) # $v0, 0x8004 /* 0F1018 7F0BE628 3C0F8004 */ lui $t7, %hi(D_80048394) # $t7, 0x8004 @@ -4015,7 +4019,7 @@ glabel lvlManageMpGame /* 0F10E4 7F0BE6F4 3C038004 */ lui $v1, %hi(D_8004838C) # $v1, 0x8004 /* 0F10E8 7F0BE6F8 24631010 */ addiu $v1, %lo(D_8004838C) # addiu $v1, $v1, 0x1010 /* 0F10EC 7F0BE6FC 11C00005 */ beqz $t6, .L7F0BE714 -/* 0F10F0 7F0BE700 00000000 */ nop +/* 0F10F0 7F0BE700 00000000 */ nop /* 0F10F4 7F0BE704 8C790000 */ lw $t9, ($v1) /* 0F10F8 7F0BE708 0322C021 */ addu $t8, $t9, $v0 /* 0F10FC 7F0BE70C 10000015 */ b .L7F0BE764 @@ -4048,49 +4052,49 @@ glabel lvlManageMpGame /* 0F1160 7F0BE770 8F390FE4 */ lw $t9, %lo(g_CurrentStageToLoad)($t9) /* 0F1164 7F0BE774 2401005A */ li $at, 90 /* 0F1168 7F0BE778 17210009 */ bne $t9, $at, .L7F0BE7A0 -/* 0F116C 7F0BE77C 00000000 */ nop +/* 0F116C 7F0BE77C 00000000 */ nop /* 0F1170 7F0BE780 0FC2436F */ jal cheat_buttons_mp_related -/* 0F1174 7F0BE784 00000000 */ nop +/* 0F1174 7F0BE784 00000000 */ nop /* 0F1178 7F0BE788 0FC06920 */ jal menu_init -/* 0F117C 7F0BE78C 00000000 */ nop +/* 0F117C 7F0BE78C 00000000 */ nop /* 0F1180 7F0BE790 0FC30388 */ jal langTick -/* 0F1184 7F0BE794 00000000 */ nop +/* 0F1184 7F0BE794 00000000 */ nop /* 0F1188 7F0BE798 100000A9 */ b .L7F0BEA40 -/* 0F118C 7F0BE79C 00000000 */ nop +/* 0F118C 7F0BE79C 00000000 */ nop .L7F0BE7A0: /* 0F1190 7F0BE7A0 0FC26C3F */ jal sub_GAME_7F09BBBC -/* 0F1194 7F0BE7A4 00000000 */ nop +/* 0F1194 7F0BE7A4 00000000 */ nop /* 0F1198 7F0BE7A8 0FC2F72D */ jal lvlSetMultipliersForDifficulty -/* 0F119C 7F0BE7AC 00000000 */ nop -/* 0F11A0 7F0BE7B0 0FC2EEF5 */ jal sub_GAME_7F0BC7D4 -/* 0F11A4 7F0BE7B4 00000000 */ nop +/* 0F119C 7F0BE7AC 00000000 */ nop +/* 0F11A0 7F0BE7B0 0FC2EEF5 */ jal updateRoomStatusFlags +/* 0F11A4 7F0BE7B4 00000000 */ nop /* 0F11A8 7F0BE7B8 0FC248E4 */ jal sub_GAME_7F092E50 -/* 0F11AC 7F0BE7BC 00000000 */ nop +/* 0F11AC 7F0BE7BC 00000000 */ nop /* 0F11B0 7F0BE7C0 0FC24E5E */ jal sub_GAME_7F094438 -/* 0F11B4 7F0BE7C4 00000000 */ nop +/* 0F11B4 7F0BE7C4 00000000 */ nop /* 0F11B8 7F0BE7C8 0FC28ECE */ jal sub_GAME_7F0A4600 -/* 0F11BC 7F0BE7CC 00000000 */ nop +/* 0F11BC 7F0BE7CC 00000000 */ nop /* 0F11C0 7F0BE7D0 0FC1A580 */ jal update_bullet_casings -/* 0F11C4 7F0BE7D4 00000000 */ nop +/* 0F11C4 7F0BE7D4 00000000 */ nop /* 0F11C8 7F0BE7D8 0FC28785 */ jal update_broken_windows -/* 0F11CC 7F0BE7DC 00000000 */ nop -/* 0F11D0 7F0BE7E0 0FC27CA0 */ jal update_gray_flying_particles -/* 0F11D4 7F0BE7E4 00000000 */ nop +/* 0F11CC 7F0BE7DC 00000000 */ nop +/* 0F11D0 7F0BE7E0 0FC27CA0 */ jal explosionUpdateFlyingParticles +/* 0F11D4 7F0BE7E4 00000000 */ nop /* 0F11D8 7F0BE7E8 0FC0F1C2 */ jal handle_mp_respawn_and_some_things -/* 0F11DC 7F0BE7EC 00000000 */ nop +/* 0F11DC 7F0BE7EC 00000000 */ nop /* 0F11E0 7F0BE7F0 0FC3022A */ jal reset_all_music_slots -/* 0F11E4 7F0BE7F4 00000000 */ nop +/* 0F11E4 7F0BE7F4 00000000 */ nop /* 0F11E8 7F0BE7F8 0FC30388 */ jal langTick -/* 0F11EC 7F0BE7FC 00000000 */ nop +/* 0F11EC 7F0BE7FC 00000000 */ nop /* 0F11F0 7F0BE800 0FC24116 */ jal get_debug_joy2detailedit_flag -/* 0F11F4 7F0BE804 00000000 */ nop +/* 0F11F4 7F0BE804 00000000 */ nop /* 0F11F8 7F0BE808 1040004D */ beqz $v0, .L7F0BE940 /* 0F11FC 7F0BE80C 3C068004 */ lui $a2, %hi(D_800483C8) # $a2, 0x8004 /* 0F1200 7F0BE810 24C6104C */ addiu $a2, %lo(D_800483C8) # addiu $a2, $a2, 0x104c /* 0F1204 7F0BE814 8CD80000 */ lw $t8, ($a2) /* 0F1208 7F0BE818 24043000 */ li $a0, 12288 /* 0F120C 7F0BE81C 17000048 */ bnez $t8, .L7F0BE940 -/* 0F1210 7F0BE820 00000000 */ nop +/* 0F1210 7F0BE820 00000000 */ nop /* 0F1214 7F0BE824 0C0022E0 */ jal mempAllocBytesInBank /* 0F1218 7F0BE828 24050004 */ li $a1, 4 /* 0F121C 7F0BE82C 3C068004 */ lui $a2, %hi(D_800483C8) # $a2, 0x8004 @@ -4165,14 +4169,14 @@ glabel lvlManageMpGame /* 0F132C 7F0BE93C A04F000D */ sb $t7, 0xd($v0) .L7F0BE940: /* 0F1330 7F0BE940 0FC2413C */ jal get_debug_portal_flag -/* 0F1334 7F0BE944 00000000 */ nop +/* 0F1334 7F0BE944 00000000 */ nop /* 0F1338 7F0BE948 10400003 */ beqz $v0, .L7F0BE958 -/* 0F133C 7F0BE94C 00000000 */ nop +/* 0F133C 7F0BE94C 00000000 */ nop /* 0F1340 7F0BE950 0FC2F4B4 */ jal lvlPortalDebug7F0BDF10 /* 0F1344 7F0BE954 00002025 */ move $a0, $zero .L7F0BE958: /* 0F1348 7F0BE958 0FC240FC */ jal getDebugMode -/* 0F134C 7F0BE95C 00000000 */ nop +/* 0F134C 7F0BE95C 00000000 */ nop /* 0F1350 7F0BE960 24010004 */ li $at, 4 /* 0F1354 7F0BE964 10410006 */ beq $v0, $at, .L7F0BE980 /* 0F1358 7F0BE968 00002025 */ move $a0, $zero @@ -4180,7 +4184,7 @@ glabel lvlManageMpGame /* 0F1360 7F0BE970 1041001A */ beq $v0, $at, .L7F0BE9DC /* 0F1364 7F0BE974 00002025 */ move $a0, $zero /* 0F1368 7F0BE978 10000031 */ b .L7F0BEA40 -/* 0F136C 7F0BE97C 00000000 */ nop +/* 0F136C 7F0BE97C 00000000 */ nop .L7F0BE980: /* 0F1370 7F0BE980 0C002C48 */ jal joyGetButtonsPressedThisFrame /* 0F1374 7F0BE984 24050002 */ li $a1, 2 @@ -4190,29 +4194,29 @@ glabel lvlManageMpGame /* 0F1384 7F0BE994 2404FFFF */ li $a0, -1 /* 0F1388 7F0BE998 00002025 */ move $a0, $zero /* 0F138C 7F0BE99C 00002825 */ move $a1, $zero -/* 0F1390 7F0BE9A0 0FC2C7FE */ jal sub_GAME_7F0B2D38 +/* 0F1390 7F0BE9A0 0FC2C7FE */ jal debugStanView /* 0F1394 7F0BE9A4 00003025 */ move $a2, $zero /* 0F1398 7F0BE9A8 00002025 */ move $a0, $zero .L7F0BE9AC: /* 0F139C 7F0BE9AC 0C002C48 */ jal joyGetButtonsPressedThisFrame /* 0F13A0 7F0BE9B0 24050001 */ li $a1, 1 /* 0F13A4 7F0BE9B4 10400022 */ beqz $v0, .L7F0BEA40 -/* 0F13A8 7F0BE9B8 00000000 */ nop +/* 0F13A8 7F0BE9B8 00000000 */ nop /* 0F13AC 7F0BE9BC 0FC2BA3C */ jal sub_GAME_7F0AF630 /* 0F13B0 7F0BE9C0 24040001 */ li $a0, 1 /* 0F13B4 7F0BE9C4 00002025 */ move $a0, $zero /* 0F13B8 7F0BE9C8 00002825 */ move $a1, $zero -/* 0F13BC 7F0BE9CC 0FC2C7FE */ jal sub_GAME_7F0B2D38 +/* 0F13BC 7F0BE9CC 0FC2C7FE */ jal debugStanView /* 0F13C0 7F0BE9D0 00003025 */ move $a2, $zero /* 0F13C4 7F0BE9D4 1000001A */ b .L7F0BEA40 -/* 0F13C8 7F0BE9D8 00000000 */ nop +/* 0F13C8 7F0BE9D8 00000000 */ nop .L7F0BE9DC: /* 0F13CC 7F0BE9DC 0C002C48 */ jal joyGetButtonsPressedThisFrame /* 0F13D0 7F0BE9E0 24050002 */ li $a1, 2 /* 0F13D4 7F0BE9E4 50400004 */ beql $v0, $zero, .L7F0BE9F8 /* 0F13D8 7F0BE9E8 00002025 */ move $a0, $zero /* 0F13DC 7F0BE9EC 0FC08B7E */ jal chrDecrementAnimationTablePointerCount -/* 0F13E0 7F0BE9F0 00000000 */ nop +/* 0F13E0 7F0BE9F0 00000000 */ nop /* 0F13E4 7F0BE9F4 00002025 */ move $a0, $zero .L7F0BE9F8: /* 0F13E8 7F0BE9F8 0C002C48 */ jal joyGetButtonsPressedThisFrame @@ -4220,7 +4224,7 @@ glabel lvlManageMpGame /* 0F13F0 7F0BEA00 50400004 */ beql $v0, $zero, .L7F0BEA14 /* 0F13F4 7F0BEA04 00002025 */ move $a0, $zero /* 0F13F8 7F0BEA08 0FC08B96 */ jal chrIncrementAnimationTablePointerCount -/* 0F13FC 7F0BEA0C 00000000 */ nop +/* 0F13FC 7F0BEA0C 00000000 */ nop /* 0F1400 7F0BEA10 00002025 */ move $a0, $zero .L7F0BEA14: /* 0F1404 7F0BEA14 0C002C48 */ jal joyGetButtonsPressedThisFrame @@ -4228,7 +4232,7 @@ glabel lvlManageMpGame /* 0F140C 7F0BEA1C 50400004 */ beql $v0, $zero, .L7F0BEA30 /* 0F1410 7F0BEA20 00002025 */ move $a0, $zero /* 0F1414 7F0BEA24 0FC08BA4 */ jal chrToggleD_8002C90C -/* 0F1418 7F0BEA28 00000000 */ nop +/* 0F1418 7F0BEA28 00000000 */ nop /* 0F141C 7F0BEA2C 00002025 */ move $a0, $zero .L7F0BEA30: /* 0F1420 7F0BEA30 0C002C20 */ jal joyGetButtons @@ -4237,7 +4241,7 @@ glabel lvlManageMpGame /* 0F142C 7F0BEA3C 0002202B */ sltu $a0, $zero, $v0 .L7F0BEA40: /* 0F1430 7F0BEA40 0FC240FC */ jal getDebugMode -/* 0F1434 7F0BEA44 00000000 */ nop +/* 0F1434 7F0BEA44 00000000 */ nop /* 0F1438 7F0BEA48 2401000C */ li $at, 12 /* 0F143C 7F0BEA4C 1041002E */ beq $v0, $at, .L7F0BEB08 /* 0F1440 7F0BEA50 00002025 */ move $a0, $zero @@ -4248,7 +4252,7 @@ glabel lvlManageMpGame /* 0F1454 7F0BEA64 54410074 */ bnel $v0, $at, .L7F0BEC38 /* 0F1458 7F0BEA68 8FBF0014 */ lw $ra, 0x14($sp) /* 0F145C 7F0BEA6C 0C000F7E */ jal viGetHorizontalOffset -/* 0F1460 7F0BEA70 00000000 */ nop +/* 0F1460 7F0BEA70 00000000 */ nop /* 0F1464 7F0BEA74 0C000F78 */ jal viGet800232A0 /* 0F1468 7F0BEA78 AFA20030 */ sw $v0, 0x30($sp) /* 0F146C 7F0BEA7C AFA2002C */ sw $v0, 0x2c($sp) @@ -4296,7 +4300,7 @@ glabel lvlManageMpGame /* 0F1500 7F0BEB10 50400004 */ beql $v0, $zero, .L7F0BEB24 /* 0F1504 7F0BEB14 00002025 */ move $a0, $zero /* 0F1508 7F0BEB18 0FC2F37A */ jal lvlMusicAppendPlayEndTheme -/* 0F150C 7F0BEB1C 00000000 */ nop +/* 0F150C 7F0BEB1C 00000000 */ nop /* 0F1510 7F0BEB20 00002025 */ move $a0, $zero .L7F0BEB24: /* 0F1514 7F0BEB24 0C002C48 */ jal joyGetButtonsPressedThisFrame @@ -4304,7 +4308,7 @@ glabel lvlManageMpGame /* 0F151C 7F0BEB2C 50400004 */ beql $v0, $zero, .L7F0BEB40 /* 0F1520 7F0BEB30 00002025 */ move $a0, $zero /* 0F1524 7F0BEB34 0FC2F367 */ jal lvlMusicAppendPlaySoloDeathShort -/* 0F1528 7F0BEB38 00000000 */ nop +/* 0F1528 7F0BEB38 00000000 */ nop /* 0F152C 7F0BEB3C 00002025 */ move $a0, $zero .L7F0BEB40: /* 0F1530 7F0BEB40 0C002C48 */ jal joyGetButtonsPressedThisFrame @@ -4312,7 +4316,7 @@ glabel lvlManageMpGame /* 0F1538 7F0BEB48 50400004 */ beql $v0, $zero, .L7F0BEB5C /* 0F153C 7F0BEB4C 00002025 */ move $a0, $zero /* 0F1540 7F0BEB50 0C00190C */ jal musicTrack1Stop -/* 0F1544 7F0BEB54 00000000 */ nop +/* 0F1544 7F0BEB54 00000000 */ nop /* 0F1548 7F0BEB58 00002025 */ move $a0, $zero .L7F0BEB5C: /* 0F154C 7F0BEB5C 0C002C48 */ jal joyGetButtonsPressedThisFrame @@ -4320,7 +4324,7 @@ glabel lvlManageMpGame /* 0F1554 7F0BEB64 50400034 */ beql $v0, $zero, .L7F0BEC38 /* 0F1558 7F0BEB68 8FBF0014 */ lw $ra, 0x14($sp) /* 0F155C 7F0BEB6C 0C001940 */ jal musicTrack1SaveCurrentVolumeAsTrackDefault -/* 0F1560 7F0BEB70 00000000 */ nop +/* 0F1560 7F0BEB70 00000000 */ nop /* 0F1564 7F0BEB74 10000030 */ b .L7F0BEC38 /* 0F1568 7F0BEB78 8FBF0014 */ lw $ra, 0x14($sp) .L7F0BEB7C: @@ -4361,7 +4365,7 @@ glabel lvlManageMpGame /* 0F15EC 7F0BEBFC 50400004 */ beql $v0, $zero, .L7F0BEC10 /* 0F15F0 7F0BEC00 00002025 */ move $a0, $zero /* 0F15F4 7F0BEC04 0C002161 */ jal sndDeactivateAllSfxByFlag_1 -/* 0F15F8 7F0BEC08 00000000 */ nop +/* 0F15F8 7F0BEC08 00000000 */ nop /* 0F15FC 7F0BEC0C 00002025 */ move $a0, $zero .L7F0BEC10: /* 0F1600 7F0BEC10 0C002C48 */ jal joyGetButtonsPressedThisFrame @@ -4378,7 +4382,7 @@ glabel lvlManageMpGame .L7F0BEC38: /* 0F1628 7F0BEC38 27BD0198 */ addiu $sp, $sp, 0x198 /* 0F162C 7F0BEC3C 03E00008 */ jr $ra -/* 0F1630 7F0BEC40 00000000 */ nop +/* 0F1630 7F0BEC40 00000000 */ nop ) #endif @@ -4389,10 +4393,10 @@ glabel lvlManageMpGame * Assumes a debug mode is present, and handles debug edit intro, debug stan edit, debug bond "view." * By default, the DEB_BOND_VIEW path is chosen without debug info. * This updates the player viewport(s), and handles player movement. - * + * * Multiplayer: * Updates distance_traveled and possibly (depending on scenario) have_token_or_goldengun. - * + * * US Address 0x7F0BF800. * EU address 7F0BEC44. */ @@ -4412,11 +4416,11 @@ void lvlViewMoveTick(void) { if ((getDebugMode() == DEB_MOVE_VIEW) || ((getDebugMode() == DEB_INTRO_EDIT) && (D_80036ABC < 0))) { - sub_GAME_7F091080(joyGetStickX(local_player_number), joyGetStickY(local_player_number), joyGetButtons(local_player_number, ANY_BUTTON)); + debugFreeCamera(joyGetStickX(local_player_number), joyGetStickY(local_player_number), joyGetButtons(local_player_number, ANY_BUTTON)); } else { - sub_GAME_7F091080(joyGetStickX(local_player_number), joyGetStickY(local_player_number), 0); + debugFreeCamera(joyGetStickX(local_player_number), joyGetStickY(local_player_number), 0); } } break; @@ -4425,11 +4429,11 @@ void lvlViewMoveTick(void) { if (getDebugMode() == DEB_STAN_VIEW) { - sub_GAME_7F0B2D38(joyGetStickX(local_player_number), joyGetStickY(local_player_number), joyGetButtons(local_player_number, ANY_BUTTON)); + debugStanView(joyGetStickX(local_player_number), joyGetStickY(local_player_number), joyGetButtons(local_player_number, ANY_BUTTON)); } else { - sub_GAME_7F0B2D38(joyGetStickX(local_player_number), joyGetStickY(local_player_number), 0); + debugStanView(joyGetStickX(local_player_number), joyGetStickY(local_player_number), 0); } } break; @@ -4464,13 +4468,13 @@ void lvlViewMoveTick(void) currentPlayerEquipWeaponWrapper(GUNRIGHT, ITEM_TOKEN); if(1); - + if (g_CurrentPlayer->hands[GUNRIGHT].when_detonating_mines_is_0 == 2) { g_CurrentPlayer->hands[GUNRIGHT].when_detonating_mines_is_0 = 5; } } - + g_playerPerm->flag_counter += g_ClockTimer; g_playerPerm->have_token_or_goldengun = 1; } diff --git a/src/game/lvl_text.c b/src/game/lvl_text.c index 605b9b4..d97e570 100644 --- a/src/game/lvl_text.c +++ b/src/game/lvl_text.c @@ -11,7 +11,7 @@ s32 g_LangBanks[45]; //CODE.bss:8008C6F4 struct jpncharpixels* g_JpnCharCachePixels; -//CODE.bss:8008C6F8 +//CODE.bss:8008C6F8 canonically jloaddata struct jpncacheitem *g_JpnCacheCacheItems; @@ -125,6 +125,7 @@ void *LnameX_lookuptable[45][2] = { {"LmiscP", "LmiscJ"}}; /* Cheat options */ #endif +// cannonically gettextloadnum LEVELID langGetLangBankIndexFromStagenum(LEVELID level) { LEVELID return_id; @@ -214,6 +215,9 @@ LEVELID langGetLangBankIndexFromStagenum(LEVELID level) break; default: { + #ifdef DEBUG + osSyncPrintf("gettextloadnum: level %d unknown. (HANG now.)\n",level); + #endif /* infinite loop on invalid text bank */ while(1) {}; } @@ -248,15 +252,22 @@ void langInit(void) { } - -void langTick(void) { +//assert here reveals this file is language.c +void langTick(void) +{ s32 i; - if (j_text_trigger) { - for (i = 0; i < 0x7c; i++) { - if (g_JpnCacheCacheItems[i].ttl) { - g_JpnCacheCacheItems[i].ttl--; - } + if (j_text_trigger) + { + for (i = 0; i < 0x7c; i++) + { + if (g_JpnCacheCacheItems[i].ttl) + { + g_JpnCacheCacheItems[i].ttl--; + } + #ifdef DEBUG + assert(jloaddata[i].timeleft<=3); + #endif } } } @@ -356,7 +367,11 @@ void langClearBank(s32 textBank) { g_LangBanks[textBank] = 0; } - +/** + * Get pointer of a string based on language of game (E/J) + * @param slotID: UniqueID of string (a combination of Bank ID and string index) + * @return char* string. + */ u8 * langGet(s32 slotID) { u32 * textbank_ptr = g_LangBanks[slotID >> 10]; /* get the text file bank ID index the text ptr table */ @@ -364,5 +379,8 @@ u8 * langGet(s32 slotID) u32 output_slot = textslot_offset; /* add the text slot offset to the base ptr to get the ptr to text file's slot */ output_slot += (u32)textbank_ptr; + #ifdef DEBUG + return (textslot_offset != 0) ? (u8 *)output_slot : "Sorry, string not loaded."; + #endif return (textslot_offset != 0) ? (u8*)output_slot : NULL; -} \ No newline at end of file +} diff --git a/src/game/lvl_text.h b/src/game/lvl_text.h index c48472d..61cb690 100644 --- a/src/game/lvl_text.h +++ b/src/game/lvl_text.h @@ -10,13 +10,14 @@ struct jpncharpixels { }; struct jpncacheitem { - u16 ttl : 2; + u16 ttl : 2; //cannonically timeleft u16 codepoint : 14; }; extern s32 j_text_trigger; +void langLoadToAddr(u32 id); void langTick(void); u8 * langGet(s32 slotID); void langLoadToBank(int id, u8 *target, int size); diff --git a/src/game/math_sincos.s b/src/game/math_sincos.s index 16c61cf..c48bed5 100644 --- a/src/game/math_sincos.s +++ b/src/game/math_sincos.s @@ -46,7 +46,7 @@ glabel cosf /* 08C9D0 7F057EA0 3C018005 */ lui $at, %hi(D_800536C0) /* 08C9D4 7F057EA4 C42A36C0 */ lwc1 $f10, %lo(D_800536C0)($at) /* 08C9D8 7F057EA8 460A6300 */ add.s $f12, $f12, $f10 - +.size cosf, . - cosf # ################################################################ glabel sinf @@ -125,4 +125,4 @@ glabel sinf .L7F057FC4: /* 08CAF4 7F057FC4 03E00008 */ jr $ra /* 08CAF8 7F057FC8 00000000 */ nop - +.size sinf, . - sinf diff --git a/src/game/matrixmath_misc.c b/src/game/matrixmath_misc.c index 6bdb53a..5f1fac7 100644 --- a/src/game/matrixmath_misc.c +++ b/src/game/matrixmath_misc.c @@ -68,9 +68,11 @@ void sub_GAME_7F05AEFC(coord3d *arg0, coord3d *arg1, coord3d *arg2, coord3d *arg * - stack resize: fail * - identical instructions: fail * - identical registers: fail + * + * https://decomp.me/scratch/EHA1A 74.55 % */ #ifdef NONMATCHING -void sub_GAME_7F05B024(f32 *arg0, f32 *arg1, f32 *arg2, f32 *arg3, f32 arg4, f32 arg5, f32 *result) +void sub_GAME_7F05B024(coord3d *arg0, coord3d *arg1, coord3d *arg2, coord3d *arg3, f32 arg4, f32 arg5, coord3d *result) { f32 square; f32 cube; @@ -86,9 +88,9 @@ void sub_GAME_7F05B024(f32 *arg0, f32 *arg1, f32 *arg2, f32 *arg3, f32 arg4, f32 temp_f18 = ((2.0f - arg5) * cube) + (square * (arg5 - 3.0f)) + 1.0f; temp_f8 = ((arg5 - 2.0f) * cube) + (square * (3.0f - (2.0f * arg5))) + (arg4 * arg5); - result[0] = (arg3[0] * temp_f6) + ((temp_f16 * arg0[0]) + (temp_f18 * arg1[0]) + (temp_f8 * arg2[0])); - result[1] = (arg3[1] * temp_f6) + ((temp_f16 * arg0[1]) + (temp_f18 * arg1[1]) + (temp_f8 * arg2[1])); - result[2] = (arg3[2] * temp_f6) + ((temp_f16 * arg0[2]) + (temp_f18 * arg1[2]) + (temp_f8 * arg2[2])); + result->f[0] = temp_f16 * arg0->f[0] + temp_f18 * arg1->f[0] + temp_f8 * arg2->f[0] + temp_f6 * arg3->f[0]; + result->f[1] = temp_f16 * arg0->f[1] + temp_f18 * arg1->f[1] + temp_f8 * arg2->f[1] + temp_f6 * arg3->f[1]; + result->f[2] = temp_f16 * arg0->f[2] + temp_f18 * arg1->f[2] + temp_f8 * arg2->f[2] + temp_f6 * arg3->f[2]; } #else GLOBAL_ASM( diff --git a/src/game/model.c b/src/game/model.c index 4fa4ce6..05ed75d 100644 --- a/src/game/model.c +++ b/src/game/model.c @@ -17,7 +17,7 @@ void sub_GAME_7F06D490(struct Model *arg0, struct ModelNode *arg1); void sub_GAME_7F0755B0(void); -s32 sub_GAME_7F0754BC(struct ModelAnimation *, s32, struct ModelSkeleton*); +s32 loadAnimationFrame(struct ModelAnimation *, s32, struct ModelSkeleton*); // end forward declarations @@ -28,22 +28,24 @@ s32 sub_GAME_7F0754BC(struct ModelAnimation *, s32, struct ModelSkeleton*); //newfile per EU bool modelmgrCanSlotFitRwdata(Model *modelslot, ModelFileHeader *modeldef) { - return modeldef->numRecords <= 0 - || (modelslot->datas != NULL && modelslot->Type >= modeldef->numRecords); + return modeldef->numRecords <= 0 + || (modelslot->datas != NULL && modelslot->Type >= modeldef->numRecords); } #ifdef NONMATCHING struct PropRecord * get_obj_instance_controller_for_header(struct ModelFileHeader* arg0) { - + #ifdef DEBUG + if (arg0 + 5 > 19) osSyncPrintf("WARNING: increase OISAVESIZE to %d!\n", *(arg0 + 5)); + #endif } #else GLOBAL_ASM( .text glabel get_obj_instance_controller_for_header /* 0A0BC4 7F06C094 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0A0BC8 7F06C098 3C0F8003 */ lui $t7, %hi(D_80036078) +/* 0A0BC8 7F06C098 3C0F8003 */ lui $t7, %hi(D_80036078) /* 0A0BCC 7F06C09C 8DEF6078 */ lw $t7, %lo(D_80036078)($t7) /* 0A0BD0 7F06C0A0 AFB60030 */ sw $s6, 0x30($sp) /* 0A0BD4 7F06C0A4 AFB5002C */ sw $s5, 0x2c($sp) @@ -167,13 +169,15 @@ void clear_model_obj(Model* model) #ifdef NONMATCHING void get_aircraft_obj_instance_controller(void) { - + #ifdef DEBUG + if (arg0 + 0x14 > 140) osSyncPrintf("WARNING: increase OISAVESIZE to %d!\n", *(arg0 + 0x14)); + #endif } #else GLOBAL_ASM( .text glabel get_aircraft_obj_instance_controller -/* 0A0D6C 7F06C23C 3C0E8003 */ lui $t6, %hi(D_80036078) +/* 0A0D6C 7F06C23C 3C0E8003 */ lui $t6, %hi(D_80036078) /* 0A0D70 7F06C240 8DCE6078 */ lw $t6, %lo(D_80036078)($t6) /* 0A0D74 7F06C244 27BDFFD0 */ addiu $sp, $sp, -0x30 /* 0A0D78 7F06C248 AFB00018 */ sw $s0, 0x18($sp) @@ -189,7 +193,7 @@ glabel get_aircraft_obj_instance_controller /* 0A0DA0 7F06C270 3C078008 */ lui $a3, %hi(ptr_allocation_0) /* 0A0DA4 7F06C274 24A5FFF6 */ addiu $a1, $a1, -0xa /* 0A0DA8 7F06C278 18A0000D */ blez $a1, .L7F06C2B0 -/* 0A0DAC 7F06C27C 00000000 */ nop +/* 0A0DAC 7F06C27C 00000000 */ nop /* 0A0DB0 7F06C280 8CE79930 */ lw $a3, %lo(ptr_allocation_0)($a3) /* 0A0DB4 7F06C284 00002025 */ move $a0, $zero /* 0A0DB8 7F06C288 00E01825 */ move $v1, $a3 @@ -288,6 +292,10 @@ glabel get_aircraft_obj_instance_controller void modelAttachHead(Model *model, ModelNode *node, ModelFileHeader *head) { modelAttachPart(model,model->obj,node,head); +#ifdef DEBUG + if (model + 0x14 > 140 && g_ModelDistanceScale == 0) osSyncPrintf("WARNING: increase OASAVESIZE to %d!\n", *(model + 0x14)); +#endif + modelInitRwData(model,head->RootNode); } @@ -337,7 +345,7 @@ glabel sub_GAME_7F06C418 /* 0A0F80 7F06C450 1444FFF5 */ bne $v0, $a0, .L7F06C428 /* 0A0F84 7F06C454 AC79FFFC */ sw $t9, -4($v1) /* 0A0F88 7F06C458 03E00008 */ jr $ra -/* 0A0F8C 7F06C45C 00000000 */ nop +/* 0A0F8C 7F06C45C 00000000 */ nop ) #endif @@ -556,7 +564,7 @@ union ModelRwData* modelGetNodeRwData(Model *Objinst, ModelNode *root) root = root->Parent; if ((root->Opcode & 0xFF) == MODELNODE_OPCODE_HEAD) { - ModelRwData_HeadPlaceholderRecord *tmp = modelGetNodeRwData(Objinst, root); + ModelRwData_HeadPlaceholderRecord *tmp = modelGetNodeRwData(Objinst, root); data = tmp->RwDatas; break; } @@ -739,7 +747,7 @@ void setsuboffset(Model *objinst, coord3d *offset) //#MATCH f32 getsubroty(Model *objinst) { ModelNode *root; - + #if defined(LEFTOVERDEBUG) if(0) { @@ -839,9 +847,9 @@ void modelSetScale(Model *objinst, f32 scale) } -void sub_GAME_7F06CE84(Model* arg0, f32 arg1) +void sub_GAME_7F06CE84(Model* self, f32 arg1) { - arg0->unkb8 = arg1; + self->unkb8 = arg1; } @@ -937,14 +945,14 @@ f32 getinstsize(Model *arg0) osSyncPrintf("getinstsize: no objinst!\n"); return_null(); } - + if (arg0->obj == NULL) { osSyncPrintf("getinstsize: no objdesc!\n"); return_null(); } #endif - + return arg0->obj->BoundingVolumeRadius * arg0->scale; } @@ -1201,24 +1209,24 @@ glabel sub_GAME_7F06D3F4 /* 0A1F44 7F06D414 8FA30044 */ lw $v1, 0x44($sp) /* 0A1F48 7F06D418 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 0A1F4C 7F06D41C 44982000 */ mtc1 $t8, $f4 -/* 0A1F50 7F06D420 00000000 */ nop +/* 0A1F50 7F06D420 00000000 */ nop /* 0A1F54 7F06D424 468021A0 */ cvt.s.w $f6, $f4 /* 0A1F58 7F06D428 44822000 */ mtc1 $v0, $f4 /* 0A1F5C 7F06D42C E4660000 */ swc1 $f6, ($v1) /* 0A1F60 7F06D430 87B9002A */ lh $t9, 0x2a($sp) /* 0A1F64 7F06D434 468021A0 */ cvt.s.w $f6, $f4 /* 0A1F68 7F06D438 44994000 */ mtc1 $t9, $f8 -/* 0A1F6C 7F06D43C 00000000 */ nop +/* 0A1F6C 7F06D43C 00000000 */ nop /* 0A1F70 7F06D440 468042A0 */ cvt.s.w $f10, $f8 /* 0A1F74 7F06D444 E46A0004 */ swc1 $f10, 4($v1) /* 0A1F78 7F06D448 87A8002C */ lh $t0, 0x2c($sp) /* 0A1F7C 7F06D44C 44888000 */ mtc1 $t0, $f16 -/* 0A1F80 7F06D450 00000000 */ nop +/* 0A1F80 7F06D450 00000000 */ nop /* 0A1F84 7F06D454 468084A0 */ cvt.s.w $f18, $f16 /* 0A1F88 7F06D458 04410004 */ bgez $v0, .L7F06D46C /* 0A1F8C 7F06D45C E4720008 */ swc1 $f18, 8($v1) /* 0A1F90 7F06D460 44814000 */ mtc1 $at, $f8 -/* 0A1F94 7F06D464 00000000 */ nop +/* 0A1F94 7F06D464 00000000 */ nop /* 0A1F98 7F06D468 46083180 */ add.s $f6, $f6, $f8 .L7F06D46C: /* 0A1F9C 7F06D46C 3C018005 */ lui $at, %hi(D_80054BC0) @@ -1266,7 +1274,7 @@ glabel sub_GAME_7F06D490 /* 0A2008 7F06D4D8 E44A0014 */ swc1 $f10, 0x14($v0) /* 0A200C 7F06D4DC C620002C */ lwc1 $f0, 0x2c($s1) /* 0A2010 7F06D4E0 46007032 */ c.eq.s $f14, $f0 -/* 0A2014 7F06D4E4 00000000 */ nop +/* 0A2014 7F06D4E4 00000000 */ nop /* 0A2018 7F06D4E8 4503000F */ bc1tl .L7F06D528 /* 0A201C 7F06D4EC 8E380054 */ lw $t8, 0x54($s1) /* 0A2020 7F06D4F0 804F0001 */ lb $t7, 1($v0) @@ -1290,7 +1298,7 @@ glabel sub_GAME_7F06D490 /* 0A2064 7F06D534 27A6002C */ addiu $a2, $sp, 0x2c /* 0A2068 7F06D538 C6300084 */ lwc1 $f16, 0x84($s1) /* 0A206C 7F06D53C 46107032 */ c.eq.s $f14, $f16 -/* 0A2070 7F06D540 00000000 */ nop +/* 0A2070 7F06D540 00000000 */ nop /* 0A2074 7F06D544 45030015 */ bc1tl .L7F06D59C /* 0A2078 7F06D548 C7A40038 */ lwc1 $f4, 0x38($sp) .L7F06D54C: @@ -1302,7 +1310,7 @@ glabel sub_GAME_7F06D490 /* 0A2090 7F06D560 C6000050 */ lwc1 $f0, 0x50($s0) /* 0A2094 7F06D564 C62C0084 */ lwc1 $f12, 0x84($s1) /* 0A2098 7F06D568 46027032 */ c.eq.s $f14, $f2 -/* 0A209C 7F06D56C 00000000 */ nop +/* 0A209C 7F06D56C 00000000 */ nop /* 0A20A0 7F06D570 45030006 */ bc1tl .L7F06D58C /* 0A20A4 7F06D574 46080281 */ sub.s $f10, $f0, $f8 /* 0A20A8 7F06D578 C6120044 */ lwc1 $f18, 0x44($s0) @@ -1450,7 +1458,7 @@ void process_01_group_heading(ModelRenderData* renderdata, Model* model, ModelNo } else { - var_a3 = renderdata->unk00; + var_a3 = renderdata->unk_matrix; } if (rwdata->Header.unk18 != 0.0f) @@ -1620,15 +1628,15 @@ glabel sub_GAME_7F06D8B0 /* 0A2590 7F06DA60 3C018005 */ lui $at, %hi(D_80054BC8) /* 0A2594 7F06DA64 8FA50028 */ lw $a1, 0x28($sp) /* 0A2598 7F06DA68 4604603C */ c.lt.s $f12, $f4 -/* 0A259C 7F06DA6C 00000000 */ nop +/* 0A259C 7F06DA6C 00000000 */ nop /* 0A25A0 7F06DA70 45000007 */ bc1f .L7F06DA90 -/* 0A25A4 7F06DA74 00000000 */ nop +/* 0A25A4 7F06DA74 00000000 */ nop /* 0A25A8 7F06DA78 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 0A25AC 7F06DA7C 44813000 */ mtc1 $at, $f6 -/* 0A25B0 7F06DA80 00000000 */ nop +/* 0A25B0 7F06DA80 00000000 */ nop /* 0A25B4 7F06DA84 46066302 */ mul.s $f12, $f12, $f6 /* 0A25B8 7F06DA88 10000009 */ b .L7F06DAB0 -/* 0A25BC 7F06DA8C 00000000 */ nop +/* 0A25BC 7F06DA8C 00000000 */ nop .L7F06DA90: /* 0A25C0 7F06DA90 C4284BC8 */ lwc1 $f8, %lo(D_80054BC8)($at) /* 0A25C4 7F06DA94 3C013F00 */ li $at, 0x3F000000 # 0.500000 @@ -1646,9 +1654,9 @@ glabel sub_GAME_7F06D8B0 /* 0A25F0 7F06DAC0 C4264BD0 */ lwc1 $f6, %lo(D_80054BD0)($at) /* 0A25F4 7F06DAC4 3C018005 */ lui $at, %hi(D_80054BD4) /* 0A25F8 7F06DAC8 460C303E */ c.le.s $f6, $f12 -/* 0A25FC 7F06DACC 00000000 */ nop +/* 0A25FC 7F06DACC 00000000 */ nop /* 0A2600 7F06DAD0 45000003 */ bc1f .L7F06DAE0 -/* 0A2604 7F06DAD4 00000000 */ nop +/* 0A2604 7F06DAD4 00000000 */ nop /* 0A2608 7F06DAD8 C4284BD4 */ lwc1 $f8, %lo(D_80054BD4)($at) /* 0A260C 7F06DADC 460C4301 */ sub.s $f12, $f8, $f12 .L7F06DAE0: @@ -1656,16 +1664,16 @@ glabel sub_GAME_7F06D8B0 /* 0A2614 7F06DAE4 C42A4BD8 */ lwc1 $f10, %lo(D_80054BD8)($at) /* 0A2618 7F06DAE8 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 /* 0A261C 7F06DAEC 460A603C */ c.lt.s $f12, $f10 -/* 0A2620 7F06DAF0 00000000 */ nop +/* 0A2620 7F06DAF0 00000000 */ nop /* 0A2624 7F06DAF4 45020006 */ bc1fl .L7F06DB10 /* 0A2628 7F06DAF8 44816000 */ mtc1 $at, $f12 /* 0A262C 7F06DAFC 0FC16A78 */ jal sub_GAME_7F05A9E0 -/* 0A2630 7F06DB00 00000000 */ nop +/* 0A2630 7F06DB00 00000000 */ nop /* 0A2634 7F06DB04 10000003 */ b .L7F06DB14 /* 0A2638 7F06DB08 46000306 */ mov.s $f12, $f0 /* 0A263C 7F06DB0C 44816000 */ mtc1 $at, $f12 .L7F06DB10: -/* 0A2640 7F06DB10 00000000 */ nop +/* 0A2640 7F06DB10 00000000 */ nop .L7F06DB14: /* 0A2644 7F06DB14 0FC16293 */ jal matrix_column_3_scalar_multiply_2 /* 0A2648 7F06DB18 8FA50028 */ lw $a1, 0x28($sp) @@ -1686,7 +1694,7 @@ glabel sub_GAME_7F06D8B0 .L7F06DB50: /* 0A2680 7F06DB50 27BD00B8 */ addiu $sp, $sp, 0xb8 /* 0A2684 7F06DB54 03E00008 */ jr $ra -/* 0A2688 7F06DB58 00000000 */ nop +/* 0A2688 7F06DB58 00000000 */ nop ) #endif @@ -1833,15 +1841,15 @@ glabel sub_GAME_7F06DB5C /* 0A2838 7F06DD08 3C018005 */ lui $at, %hi(D_80054BE0) /* 0A283C 7F06DD0C 8FA50028 */ lw $a1, 0x28($sp) /* 0A2840 7F06DD10 4604103C */ c.lt.s $f2, $f4 -/* 0A2844 7F06DD14 00000000 */ nop +/* 0A2844 7F06DD14 00000000 */ nop /* 0A2848 7F06DD18 45000007 */ bc1f .L7F06DD38 -/* 0A284C 7F06DD1C 00000000 */ nop +/* 0A284C 7F06DD1C 00000000 */ nop /* 0A2850 7F06DD20 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 0A2854 7F06DD24 44813000 */ mtc1 $at, $f6 -/* 0A2858 7F06DD28 00000000 */ nop +/* 0A2858 7F06DD28 00000000 */ nop /* 0A285C 7F06DD2C 46061302 */ mul.s $f12, $f2, $f6 /* 0A2860 7F06DD30 10000009 */ b .L7F06DD58 -/* 0A2864 7F06DD34 00000000 */ nop +/* 0A2864 7F06DD34 00000000 */ nop .L7F06DD38: /* 0A2868 7F06DD38 C4284BE0 */ lwc1 $f8, %lo(D_80054BE0)($at) /* 0A286C 7F06DD3C 3C013F00 */ li $at, 0x3F000000 # 0.500000 @@ -1859,9 +1867,9 @@ glabel sub_GAME_7F06DB5C /* 0A2898 7F06DD68 C4264BE8 */ lwc1 $f6, %lo(D_80054BE8)($at) /* 0A289C 7F06DD6C 3C018005 */ lui $at, %hi(D_80054BEC) /* 0A28A0 7F06DD70 460C303E */ c.le.s $f6, $f12 -/* 0A28A4 7F06DD74 00000000 */ nop +/* 0A28A4 7F06DD74 00000000 */ nop /* 0A28A8 7F06DD78 45000003 */ bc1f .L7F06DD88 -/* 0A28AC 7F06DD7C 00000000 */ nop +/* 0A28AC 7F06DD7C 00000000 */ nop /* 0A28B0 7F06DD80 C4284BEC */ lwc1 $f8, %lo(D_80054BEC)($at) /* 0A28B4 7F06DD84 460C4301 */ sub.s $f12, $f8, $f12 .L7F06DD88: @@ -1869,16 +1877,16 @@ glabel sub_GAME_7F06DB5C /* 0A28BC 7F06DD8C C42A4BF0 */ lwc1 $f10, %lo(D_80054BF0)($at) /* 0A28C0 7F06DD90 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 /* 0A28C4 7F06DD94 460A603C */ c.lt.s $f12, $f10 -/* 0A28C8 7F06DD98 00000000 */ nop +/* 0A28C8 7F06DD98 00000000 */ nop /* 0A28CC 7F06DD9C 45020006 */ bc1fl .L7F06DDB8 /* 0A28D0 7F06DDA0 44816000 */ mtc1 $at, $f12 /* 0A28D4 7F06DDA4 0FC16A78 */ jal sub_GAME_7F05A9E0 -/* 0A28D8 7F06DDA8 00000000 */ nop +/* 0A28D8 7F06DDA8 00000000 */ nop /* 0A28DC 7F06DDAC 10000003 */ b .L7F06DDBC /* 0A28E0 7F06DDB0 46000306 */ mov.s $f12, $f0 /* 0A28E4 7F06DDB4 44816000 */ mtc1 $at, $f12 .L7F06DDB8: -/* 0A28E8 7F06DDB8 00000000 */ nop +/* 0A28E8 7F06DDB8 00000000 */ nop .L7F06DDBC: /* 0A28EC 7F06DDBC 0FC16293 */ jal matrix_column_3_scalar_multiply_2 /* 0A28F0 7F06DDC0 8FA50028 */ lw $a1, 0x28($sp) @@ -1899,7 +1907,7 @@ glabel sub_GAME_7F06DB5C .L7F06DDF8: /* 0A2928 7F06DDF8 27BD00A8 */ addiu $sp, $sp, 0xa8 /* 0A292C 7F06DDFC 03E00008 */ jr $ra -/* 0A2930 7F06DE00 00000000 */ nop +/* 0A2930 7F06DE00 00000000 */ nop ) #endif @@ -2010,8 +2018,8 @@ glabel sub_GAME_7F06DEC0 /* 0A2A4C 7F06DF1C 95AE0002 */ lhu $t6, 2($t5) /* 0A2A50 7F06DF20 01D00019 */ multu $t6, $s0 /* 0A2A54 7F06DF24 00003012 */ mflo $a2 -/* 0A2A58 7F06DF28 00000000 */ nop -/* 0A2A5C 7F06DF2C 00000000 */ nop +/* 0A2A58 7F06DF28 00000000 */ nop +/* 0A2A5C 7F06DF2C 00000000 */ nop /* 0A2A60 7F06DF30 8FA40040 */ lw $a0, 0x40($sp) .L7F06DF34: /* 0A2A64 7F06DF34 320500FF */ andi $a1, $s0, 0xff @@ -2042,7 +2050,7 @@ glabel sub_GAME_7F06DEC0 /* 0A2AC8 7F06DF98 468021A0 */ cvt.s.w $f6, $f4 /* 0A2ACC 7F06DF9C 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 /* 0A2AD0 7F06DFA0 44814000 */ mtc1 $at, $f8 -/* 0A2AD4 7F06DFA4 00000000 */ nop +/* 0A2AD4 7F06DFA4 00000000 */ nop /* 0A2AD8 7F06DFA8 46083180 */ add.s $f6, $f6, $f8 .L7F06DFAC: /* 0A2ADC 7F06DFAC 46003282 */ mul.s $f10, $f6, $f0 @@ -2057,7 +2065,7 @@ glabel sub_GAME_7F06DEC0 /* 0A2B00 7F06DFD0 3C190001 */ lui $t9, 1 /* 0A2B04 7F06DFD4 03224023 */ subu $t0, $t9, $v0 /* 0A2B08 7F06DFD8 44889000 */ mtc1 $t0, $f18 -/* 0A2B0C 7F06DFDC 00000000 */ nop +/* 0A2B0C 7F06DFDC 00000000 */ nop /* 0A2B10 7F06DFE0 46809120 */ cvt.s.w $f4, $f18 /* 0A2B14 7F06DFE4 46002202 */ mul.s $f8, $f4, $f0 /* 0A2B18 7F06DFE8 46024183 */ div.s $f6, $f8, $f2 @@ -2065,7 +2073,7 @@ glabel sub_GAME_7F06DEC0 /* 0A2B20 7F06DFF0 E4660004 */ swc1 $f6, 4($v1) .L7F06DFF4: /* 0A2B24 7F06DFF4 44805000 */ mtc1 $zero, $f10 -/* 0A2B28 7F06DFF8 00000000 */ nop +/* 0A2B28 7F06DFF8 00000000 */ nop /* 0A2B2C 7F06DFFC E46A0004 */ swc1 $f10, 4($v1) .L7F06E000: /* 0A2B30 7F06E000 97A20028 */ lhu $v0, 0x28($sp) @@ -2073,7 +2081,7 @@ glabel sub_GAME_7F06DEC0 /* 0A2B38 7F06E008 10400008 */ beqz $v0, .L7F06E02C /* 0A2B3C 7F06E00C 01225023 */ subu $t2, $t1, $v0 /* 0A2B40 7F06E010 448A8000 */ mtc1 $t2, $f16 -/* 0A2B44 7F06E014 00000000 */ nop +/* 0A2B44 7F06E014 00000000 */ nop /* 0A2B48 7F06E018 468084A0 */ cvt.s.w $f18, $f16 /* 0A2B4C 7F06E01C 46009102 */ mul.s $f4, $f18, $f0 /* 0A2B50 7F06E020 46022203 */ div.s $f8, $f4, $f2 @@ -2089,7 +2097,7 @@ glabel sub_GAME_7F06DEC0 /* 0A2B70 7F06E040 05610004 */ bgez $t3, .L7F06E054 /* 0A2B74 7F06E044 46805420 */ cvt.s.w $f16, $f10 /* 0A2B78 7F06E048 44819000 */ mtc1 $at, $f18 -/* 0A2B7C 7F06E04C 00000000 */ nop +/* 0A2B7C 7F06E04C 00000000 */ nop /* 0A2B80 7F06E050 46128400 */ add.s $f16, $f16, $f18 .L7F06E054: /* 0A2B84 7F06E054 46008102 */ mul.s $f4, $f16, $f0 @@ -2101,7 +2109,7 @@ glabel sub_GAME_7F06DEC0 /* 0A2B9C 7F06E06C 05810004 */ bgez $t4, .L7F06E080 /* 0A2BA0 7F06E070 468032A0 */ cvt.s.w $f10, $f6 /* 0A2BA4 7F06E074 44819000 */ mtc1 $at, $f18 -/* 0A2BA8 7F06E078 00000000 */ nop +/* 0A2BA8 7F06E078 00000000 */ nop /* 0A2BAC 7F06E07C 46125280 */ add.s $f10, $f10, $f18 .L7F06E080: /* 0A2BB0 7F06E080 46005402 */ mul.s $f16, $f10, $f0 @@ -2112,7 +2120,7 @@ glabel sub_GAME_7F06DEC0 /* 0A2BC0 7F06E090 8FB00018 */ lw $s0, 0x18($sp) /* 0A2BC4 7F06E094 27BD0030 */ addiu $sp, $sp, 0x30 /* 0A2BC8 7F06E098 03E00008 */ jr $ra -/* 0A2BCC 7F06E09C 00000000 */ nop +/* 0A2BCC 7F06E09C 00000000 */ nop ) #endif @@ -2134,7 +2142,7 @@ glabel process_02_position /* 0A2BD8 7F06E0A8 AFB00020 */ sw $s0, 0x20($sp) /* 0A2BDC 7F06E0AC AFA40098 */ sw $a0, 0x98($sp) /* 0A2BE0 7F06E0B0 AFA600A0 */ sw $a2, 0xa0($sp) -/* 0A2BE4 7F06E0B4 3C188003 */ lui $t8, %hi(D_80036094) +/* 0A2BE4 7F06E0B4 3C188003 */ lui $t8, %hi(D_80036094) /* 0A2BE8 7F06E0B8 8CC20004 */ lw $v0, 4($a2) /* 0A2BEC 7F06E0BC 8CAF0008 */ lw $t7, 8($a1) /* 0A2BF0 7F06E0C0 27186094 */ addiu $t8, %lo(D_80036094) # addiu $t8, $t8, 0x6094 @@ -2158,10 +2166,10 @@ glabel process_02_position /* 0A2C38 7F06E108 AFAA0010 */ sw $t2, 0x10($sp) /* 0A2C3C 7F06E10C 44802000 */ mtc1 $zero, $f4 /* 0A2C40 7F06E110 C606002C */ lwc1 $f6, 0x2c($s0) -/* 0A2C44 7F06E114 3C0B8003 */ lui $t3, %hi(D_800360A0) +/* 0A2C44 7F06E114 3C0B8003 */ lui $t3, %hi(D_800360A0) /* 0A2C48 7F06E118 256B60A0 */ addiu $t3, %lo(D_800360A0) # addiu $t3, $t3, 0x60a0 /* 0A2C4C 7F06E11C 46062032 */ c.eq.s $f4, $f6 -/* 0A2C50 7F06E120 00000000 */ nop +/* 0A2C50 7F06E120 00000000 */ nop /* 0A2C54 7F06E124 45030015 */ bc1tl .L7F06E17C /* 0A2C58 7F06E128 44804000 */ mtc1 $zero, $f8 /* 0A2C5C 7F06E12C 8D610000 */ lw $at, ($t3) @@ -2186,14 +2194,14 @@ glabel process_02_position /* 0A2CA8 7F06E178 44804000 */ mtc1 $zero, $f8 .L7F06E17C: /* 0A2CAC 7F06E17C C60A0084 */ lwc1 $f10, 0x84($s0) -/* 0A2CB0 7F06E180 3C0F8003 */ lui $t7, %hi(D_800360AC) +/* 0A2CB0 7F06E180 3C0F8003 */ lui $t7, %hi(D_800360AC) /* 0A2CB4 7F06E184 25EF60AC */ addiu $t7, %lo(D_800360AC) # addiu $t7, $t7, 0x60ac /* 0A2CB8 7F06E188 460A4032 */ c.eq.s $f8, $f10 /* 0A2CBC 7F06E18C 8FA40098 */ lw $a0, 0x98($sp) /* 0A2CC0 7F06E190 02002825 */ move $a1, $s0 /* 0A2CC4 7F06E194 8FA600A0 */ lw $a2, 0xa0($sp) /* 0A2CC8 7F06E198 45010040 */ bc1t .L7F06E29C -/* 0A2CCC 7F06E19C 00000000 */ nop +/* 0A2CCC 7F06E19C 00000000 */ nop /* 0A2CD0 7F06E1A0 8DE10000 */ lw $at, ($t7) /* 0A2CD4 7F06E1A4 27A20068 */ addiu $v0, $sp, 0x68 /* 0A2CD8 7F06E1A8 AC410000 */ sw $at, ($v0) @@ -2211,10 +2219,10 @@ glabel process_02_position /* 0A2D08 7F06E1D8 AFB80010 */ sw $t8, 0x10($sp) /* 0A2D0C 7F06E1DC 44808000 */ mtc1 $zero, $f16 /* 0A2D10 7F06E1E0 C612005C */ lwc1 $f18, 0x5c($s0) -/* 0A2D14 7F06E1E4 3C098003 */ lui $t1, %hi(D_800360B8) +/* 0A2D14 7F06E1E4 3C098003 */ lui $t1, %hi(D_800360B8) /* 0A2D18 7F06E1E8 252960B8 */ addiu $t1, %lo(D_800360B8) # addiu $t1, $t1, 0x60b8 /* 0A2D1C 7F06E1EC 46128032 */ c.eq.s $f16, $f18 -/* 0A2D20 7F06E1F0 00000000 */ nop +/* 0A2D20 7F06E1F0 00000000 */ nop /* 0A2D24 7F06E1F4 45030015 */ bc1tl .L7F06E24C /* 0A2D28 7F06E1F8 27A40080 */ addiu $a0, $sp, 0x80 /* 0A2D2C 7F06E1FC 8D210000 */ lw $at, ($t1) @@ -2266,7 +2274,7 @@ glabel process_02_position /* 0A2DD8 7F06E2A8 8FB00020 */ lw $s0, 0x20($sp) /* 0A2DDC 7F06E2AC 27BD0098 */ addiu $sp, $sp, 0x98 /* 0A2DE0 7F06E2B0 03E00008 */ jr $ra -/* 0A2DE4 7F06E2B4 00000000 */ nop +/* 0A2DE4 7F06E2B4 00000000 */ nop ) #endif @@ -2357,7 +2365,7 @@ glabel sub_GAME_7F06E2B8 /* 0A2EC4 7F06E394 14400003 */ bnez $v0, .L7F06E3A4 /* 0A2EC8 7F06E398 33030200 */ andi $v1, $t8, 0x200 /* 0A2ECC 7F06E39C 10600017 */ beqz $v1, .L7F06E3FC -/* 0A2ED0 7F06E3A0 00000000 */ nop +/* 0A2ED0 7F06E3A0 00000000 */ nop .L7F06E3A4: /* 0A2ED4 7F06E3A4 C4244BF8 */ lwc1 $f4, %lo(D_80054BF8)($at) /* 0A2ED8 7F06E3A8 8FA3009C */ lw $v1, 0x9c($sp) @@ -2366,13 +2374,13 @@ glabel sub_GAME_7F06E2B8 /* 0A2EE4 7F06E3B4 30680200 */ andi $t0, $v1, 0x200 /* 0A2EE8 7F06E3B8 01001825 */ move $v1, $t0 /* 0A2EEC 7F06E3BC 45000007 */ bc1f .L7F06E3DC -/* 0A2EF0 7F06E3C0 00000000 */ nop +/* 0A2EF0 7F06E3C0 00000000 */ nop /* 0A2EF4 7F06E3C4 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 0A2EF8 7F06E3C8 44813000 */ mtc1 $at, $f6 -/* 0A2EFC 7F06E3CC 00000000 */ nop +/* 0A2EFC 7F06E3CC 00000000 */ nop /* 0A2F00 7F06E3D0 4606A502 */ mul.s $f20, $f20, $f6 /* 0A2F04 7F06E3D4 10000009 */ b .L7F06E3FC -/* 0A2F08 7F06E3D8 00000000 */ nop +/* 0A2F08 7F06E3D8 00000000 */ nop .L7F06E3DC: /* 0A2F0C 7F06E3DC C4284BFC */ lwc1 $f8, %lo(D_80054BFC)($at) /* 0A2F10 7F06E3E0 3C013F00 */ li $at, 0x3F000000 # 0.500000 @@ -2384,7 +2392,7 @@ glabel sub_GAME_7F06E2B8 /* 0A2F28 7F06E3F8 46122501 */ sub.s $f20, $f4, $f18 .L7F06E3FC: /* 0A2F2C 7F06E3FC 10400019 */ beqz $v0, .L7F06E464 -/* 0A2F30 7F06E400 00000000 */ nop +/* 0A2F30 7F06E400 00000000 */ nop /* 0A2F34 7F06E404 1140000F */ beqz $t2, .L7F06E444 /* 0A2F38 7F06E408 8FA40098 */ lw $a0, 0x98($sp) /* 0A2F3C 7F06E40C 4405A000 */ mfc1 $a1, $f20 @@ -2431,9 +2439,9 @@ glabel sub_GAME_7F06E2B8 /* 0A2FD0 7F06E4A0 C4264C04 */ lwc1 $f6, %lo(D_80054C04)($at) /* 0A2FD4 7F06E4A4 3C018005 */ lui $at, %hi(D_80054C08) /* 0A2FD8 7F06E4A8 4614303E */ c.le.s $f6, $f20 -/* 0A2FDC 7F06E4AC 00000000 */ nop +/* 0A2FDC 7F06E4AC 00000000 */ nop /* 0A2FE0 7F06E4B0 45000003 */ bc1f .L7F06E4C0 -/* 0A2FE4 7F06E4B4 00000000 */ nop +/* 0A2FE4 7F06E4B4 00000000 */ nop /* 0A2FE8 7F06E4B8 C4284C08 */ lwc1 $f8, %lo(D_80054C08)($at) /* 0A2FEC 7F06E4BC 46144501 */ sub.s $f20, $f8, $f20 .L7F06E4C0: @@ -2441,7 +2449,7 @@ glabel sub_GAME_7F06E2B8 /* 0A2FF4 7F06E4C4 C42A4C0C */ lwc1 $f10, %lo(D_80054C0C)($at) /* 0A2FF8 7F06E4C8 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 /* 0A2FFC 7F06E4CC 460AA03C */ c.lt.s $f20, $f10 -/* 0A3000 7F06E4D0 00000000 */ nop +/* 0A3000 7F06E4D0 00000000 */ nop /* 0A3004 7F06E4D4 45020006 */ bc1fl .L7F06E4F0 /* 0A3008 7F06E4D8 44816000 */ mtc1 $at, $f12 /* 0A300C 7F06E4DC 0FC16A78 */ jal sub_GAME_7F05A9E0 @@ -2450,7 +2458,7 @@ glabel sub_GAME_7F06E2B8 /* 0A3018 7F06E4E8 46000306 */ mov.s $f12, $f0 /* 0A301C 7F06E4EC 44816000 */ mtc1 $at, $f12 .L7F06E4F0: -/* 0A3020 7F06E4F0 00000000 */ nop +/* 0A3020 7F06E4F0 00000000 */ nop .L7F06E4F4: /* 0A3024 7F06E4F4 0FC16293 */ jal matrix_column_3_scalar_multiply_2 /* 0A3028 7F06E4F8 8FA50030 */ lw $a1, 0x30($sp) @@ -2471,7 +2479,7 @@ glabel sub_GAME_7F06E2B8 /* 0A3060 7F06E530 D7B40010 */ ldc1 $f20, 0x10($sp) /* 0A3064 7F06E534 27BD00A0 */ addiu $sp, $sp, 0xa0 /* 0A3068 7F06E538 03E00008 */ jr $ra -/* 0A306C 7F06E53C 00000000 */ nop +/* 0A306C 7F06E53C 00000000 */ nop ) #endif @@ -2522,8 +2530,8 @@ glabel sub_GAME_7F06E540 /* 0A30D8 7F06E5A8 95F80002 */ lhu $t8, 2($t7) /* 0A30DC 7F06E5AC 03190019 */ multu $t8, $t9 /* 0A30E0 7F06E5B0 00003012 */ mflo $a2 -/* 0A30E4 7F06E5B4 00000000 */ nop -/* 0A30E8 7F06E5B8 00000000 */ nop +/* 0A30E4 7F06E5B4 00000000 */ nop +/* 0A30E8 7F06E5B8 00000000 */ nop /* 0A30EC 7F06E5BC 8FA40038 */ lw $a0, 0x38($sp) .L7F06E5C0: /* 0A30F0 7F06E5C0 93A5001F */ lbu $a1, 0x1f($sp) @@ -2552,7 +2560,7 @@ glabel sub_GAME_7F06E540 /* 0A3148 7F06E618 04410004 */ bgez $v0, .L7F06E62C /* 0A314C 7F06E61C 46809120 */ cvt.s.w $f4, $f18 /* 0A3150 7F06E620 44813000 */ mtc1 $at, $f6 -/* 0A3154 7F06E624 00000000 */ nop +/* 0A3154 7F06E624 00000000 */ nop /* 0A3158 7F06E628 46062100 */ add.s $f4, $f4, $f6 .L7F06E62C: /* 0A315C 7F06E62C 3C018005 */ lui $at, %hi(D_80054C14) @@ -2624,7 +2632,7 @@ glabel process_03_unknown /* 0A321C 7F06E6EC 02202025 */ move $a0, $s1 /* 0A3220 7F06E6F0 02403025 */ move $a2, $s2 /* 0A3224 7F06E6F4 460A4032 */ c.eq.s $f8, $f10 -/* 0A3228 7F06E6F8 00000000 */ nop +/* 0A3228 7F06E6F8 00000000 */ nop /* 0A322C 7F06E6FC 4503001F */ bc1tl .L7F06E77C /* 0A3230 7F06E700 4407A000 */ mfc1 $a3, $f20 /* 0A3234 7F06E704 8E080064 */ lw $t0, 0x64($s0) @@ -2638,7 +2646,7 @@ glabel process_03_unknown /* 0A3254 7F06E724 02202025 */ move $a0, $s1 /* 0A3258 7F06E728 02403025 */ move $a2, $s2 /* 0A325C 7F06E72C 46128032 */ c.eq.s $f16, $f18 -/* 0A3260 7F06E730 00000000 */ nop +/* 0A3260 7F06E730 00000000 */ nop /* 0A3264 7F06E734 4503000C */ bc1tl .L7F06E768 /* 0A3268 7F06E738 4600A306 */ mov.s $f12, $f20 /* 0A326C 7F06E73C 8E090068 */ lw $t1, 0x68($s0) @@ -2688,7 +2696,7 @@ void process_15_subposition(ModelRenderData* arg0, Model *model, ModelNode *node } else { - sp68 = arg0->unk00; + sp68 = arg0->unk_matrix; } if (sp68) @@ -3155,7 +3163,7 @@ void modelUpdateMatrices(ModelRenderData *arg0, Model *model) } -void instcalcmatrices(struct unk_joint_list* arg0, Model* arg1) +void instcalcmatrices(ModelRenderData* arg0, Model* arg1) { #if defined(LEFTOVERDEBUG) if (arg1 == NULL) @@ -3186,7 +3194,7 @@ void instcalcmatrices(struct unk_joint_list* arg0, Model* arg1) * Address 0x7F06F2F8 (VERSION_US, VERSION_JP) * Address 0x7F06F670 (VERSION_EU) */ -void subcalcmatrices(struct unk_joint_list *arg0, struct Model *arg1) +void subcalcmatrices(ModelRenderData *arg0, struct Model *arg1) { #if defined(LEFTOVERDEBUG) if (arg1 == NULL) @@ -3253,7 +3261,7 @@ void subcalcmatrices(struct unk_joint_list *arg0, struct Model *arg1) } if ( - (arg1->anim2 == NULL) + (arg1->anim2 == NULL) || ( (arg1->anim2 != NULL) && (arg1->frame2b >= 0) @@ -3270,20 +3278,20 @@ void subcalcmatrices(struct unk_joint_list *arg0, struct Model *arg1) } #endif - arg1->unk34 = sub_GAME_7F0754BC(arg1->anim, arg1->framea, arg1->obj->Skeleton); + arg1->unk34 = loadAnimationFrame(arg1->anim, arg1->framea, arg1->obj->Skeleton); if (arg1->unk2c != 0.0f) { - arg1->unk38 = sub_GAME_7F0754BC(arg1->anim, arg1->frameb, arg1->obj->Skeleton); + arg1->unk38 = loadAnimationFrame(arg1->anim, arg1->frameb, arg1->obj->Skeleton); } if (arg1->anim2 != NULL) { - arg1->unk64 = sub_GAME_7F0754BC(arg1->anim2, arg1->frame2a, arg1->obj->Skeleton); + arg1->unk64 = loadAnimationFrame(arg1->anim2, arg1->frame2a, arg1->obj->Skeleton); if (arg1->unk5c != 0.0f) { - arg1->unk68 = sub_GAME_7F0754BC(arg1->anim2, arg1->frame2b, arg1->obj->Skeleton); + arg1->unk68 = loadAnimationFrame(arg1->anim2, arg1->frame2b, arg1->obj->Skeleton); } } @@ -3324,7 +3332,7 @@ f32 sub_GAME_7F06F5C4(Model *model) } modelAnimation = model->anim; - + if (modelAnimation != NULL) { return modelAnimation->unk04 - 1; @@ -3348,12 +3356,12 @@ f32 modelGetAbsAnimSpeed(Model *model) f32 speed; speed = model->speed; - + if (speed < 0.0f) { speed = -speed; } - + return speed; } @@ -3418,21 +3426,21 @@ glabel modelConstrainOrWrapAnimFrame /* 0A41AC 7F06F67C 90AE0007 */ lbu $t6, 7($a1) /* 0A41B0 7F06F680 31CF0001 */ andi $t7, $t6, 1 /* 0A41B4 7F06F684 11E00011 */ beqz $t7, .L7F06F6CC -/* 0A41B8 7F06F688 00000000 */ nop +/* 0A41B8 7F06F688 00000000 */ nop /* 0A41BC 7F06F68C 94A20004 */ lhu $v0, 4($a1) /* 0A41C0 7F06F690 0004C023 */ negu $t8, $a0 /* 0A41C4 7F06F694 0302001A */ div $zero, $t8, $v0 /* 0A41C8 7F06F698 0000C810 */ mfhi $t9 /* 0A41CC 7F06F69C 00592023 */ subu $a0, $v0, $t9 /* 0A41D0 7F06F6A0 14400002 */ bnez $v0, .L7F06F6AC -/* 0A41D4 7F06F6A4 00000000 */ nop +/* 0A41D4 7F06F6A4 00000000 */ nop /* 0A41D8 7F06F6A8 0007000D */ break 7 .L7F06F6AC: /* 0A41DC 7F06F6AC 2401FFFF */ li $at, -1 /* 0A41E0 7F06F6B0 14410004 */ bne $v0, $at, .L7F06F6C4 /* 0A41E4 7F06F6B4 3C018000 */ lui $at, 0x8000 /* 0A41E8 7F06F6B8 17010002 */ bne $t8, $at, .L7F06F6C4 -/* 0A41EC 7F06F6BC 00000000 */ nop +/* 0A41EC 7F06F6BC 00000000 */ nop /* 0A41F0 7F06F6C0 0006000D */ break 6 .L7F06F6C4: /* 0A41F4 7F06F6C4 1000002A */ b .L7F06F770 @@ -3442,19 +3450,19 @@ glabel modelConstrainOrWrapAnimFrame /* 0A4200 7F06F6D0 00002025 */ move $a0, $zero .L7F06F6D4: /* 0A4204 7F06F6D4 44802000 */ mtc1 $zero, $f4 -/* 0A4208 7F06F6D8 00000000 */ nop +/* 0A4208 7F06F6D8 00000000 */ nop /* 0A420C 7F06F6DC 460C203E */ c.le.s $f4, $f12 -/* 0A4210 7F06F6E0 00000000 */ nop +/* 0A4210 7F06F6E0 00000000 */ nop /* 0A4214 7F06F6E4 4502000C */ bc1fl .L7F06F718 /* 0A4218 7F06F6E8 94A20004 */ lhu $v0, 4($a1) /* 0A421C 7F06F6EC 4600618D */ trunc.w.s $f6, $f12 /* 0A4220 7F06F6F0 44093000 */ mfc1 $t1, $f6 -/* 0A4224 7F06F6F4 00000000 */ nop +/* 0A4224 7F06F6F4 00000000 */ nop /* 0A4228 7F06F6F8 0124082A */ slt $at, $t1, $a0 /* 0A422C 7F06F6FC 50200006 */ beql $at, $zero, .L7F06F718 /* 0A4230 7F06F700 94A20004 */ lhu $v0, 4($a1) /* 0A4234 7F06F704 0FC1712E */ jal ceilFloatToInt -/* 0A4238 7F06F708 00000000 */ nop +/* 0A4238 7F06F708 00000000 */ nop /* 0A423C 7F06F70C 10000017 */ b .L7F06F76C /* 0A4240 7F06F710 00402025 */ move $a0, $v0 /* 0A4244 7F06F714 94A20004 */ lhu $v0, 4($a1) @@ -3468,14 +3476,14 @@ glabel modelConstrainOrWrapAnimFrame /* 0A4260 7F06F730 2444FFFF */ addiu $a0, $v0, -1 /* 0A4264 7F06F734 0082001A */ div $zero, $a0, $v0 /* 0A4268 7F06F738 14400002 */ bnez $v0, .L7F06F744 -/* 0A426C 7F06F73C 00000000 */ nop +/* 0A426C 7F06F73C 00000000 */ nop /* 0A4270 7F06F740 0007000D */ break 7 .L7F06F744: /* 0A4274 7F06F744 2401FFFF */ li $at, -1 /* 0A4278 7F06F748 14410004 */ bne $v0, $at, .L7F06F75C /* 0A427C 7F06F74C 3C018000 */ lui $at, 0x8000 /* 0A4280 7F06F750 14810002 */ bne $a0, $at, .L7F06F75C -/* 0A4284 7F06F754 00000000 */ nop +/* 0A4284 7F06F754 00000000 */ nop /* 0A4288 7F06F758 0006000D */ break 6 .L7F06F75C: /* 0A428C 7F06F75C 00002010 */ mfhi $a0 @@ -3488,7 +3496,7 @@ glabel modelConstrainOrWrapAnimFrame /* 0A42A0 7F06F770 27BD0018 */ addiu $sp, $sp, 0x18 /* 0A42A4 7F06F774 00801025 */ move $v0, $a0 /* 0A42A8 7F06F778 03E00008 */ jr $ra -/* 0A42AC 7F06F77C 00000000 */ nop +/* 0A42AC 7F06F77C 00000000 */ nop ) #endif @@ -3507,7 +3515,7 @@ void modelCopyAnimForMerge(Model *model, f32 arg1) f32 temp_f6; f32 temp_f8; modeldata_root *temp_v0_2; - + if ((arg1 > 0.0f) && (model->anim != 0)) { temp_a1 = model->obj->RootNode; @@ -3555,7 +3563,7 @@ glabel modelCopyAnimForMerge /* 0A42B8 7F06F788 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 0A42BC 7F06F78C AFBF0014 */ sw $ra, 0x14($sp) /* 0A42C0 7F06F790 460C203C */ c.lt.s $f4, $f12 -/* 0A42C4 7F06F794 00000000 */ nop +/* 0A42C4 7F06F794 00000000 */ nop /* 0A42C8 7F06F798 45020033 */ bc1fl .L7F06F868 /* 0A42CC 7F06F79C AC800054 */ sw $zero, 0x54($a0) /* 0A42D0 7F06F7A0 8C820020 */ lw $v0, 0x20($a0) @@ -3591,7 +3599,7 @@ glabel modelCopyAnimForMerge /* 0A4348 7F06F818 15E10013 */ bne $t7, $at, .L7F06F868 /* 0A434C 7F06F81C E488006C */ swc1 $f8, 0x6c($a0) /* 0A4350 7F06F820 0FC1B1E7 */ jal modelGetNodeRwData -/* 0A4354 7F06F824 00000000 */ nop +/* 0A4354 7F06F824 00000000 */ nop /* 0A4358 7F06F828 C44A0034 */ lwc1 $f10, 0x34($v0) /* 0A435C 7F06F82C C4500038 */ lwc1 $f16, 0x38($v0) /* 0A4360 7F06F830 C452003C */ lwc1 $f18, 0x3c($v0) @@ -3612,7 +3620,7 @@ glabel modelCopyAnimForMerge /* 0A4398 7F06F868 8FBF0014 */ lw $ra, 0x14($sp) /* 0A439C 7F06F86C 27BD0018 */ addiu $sp, $sp, 0x18 /* 0A43A0 7F06F870 03E00008 */ jr $ra -/* 0A43A4 7F06F874 00000000 */ nop +/* 0A43A4 7F06F874 00000000 */ nop ) #endif @@ -3824,7 +3832,7 @@ glabel modelSetAnimation2 /* 0A4460 7F06F930 02202025 */ move $a0, $s1 /* 0A4464 7F06F934 0FC1B1E7 */ jal modelGetNodeRwData /* 0A4468 7F06F938 AFA90080 */ sw $t1, 0x80($sp) -/* 0A446C 7F06F93C 3C0C8003 */ lui $t4, %hi(D_80036244) +/* 0A446C 7F06F93C 3C0C8003 */ lui $t4, %hi(D_80036244) /* 0A4470 7F06F940 8FAA0080 */ lw $t2, 0x80($sp) /* 0A4474 7F06F944 8E2B0008 */ lw $t3, 8($s1) /* 0A4478 7F06F948 258C6244 */ addiu $t4, %lo(D_80036244) # addiu $t4, $t4, 0x6244 @@ -3854,9 +3862,9 @@ glabel modelSetAnimation2 /* 0A44D8 7F06F9A8 E7A00058 */ swc1 $f0, 0x58($sp) /* 0A44DC 7F06F9AC C7AA005C */ lwc1 $f10, 0x5c($sp) /* 0A44E0 7F06F9B0 46081032 */ c.eq.s $f2, $f8 -/* 0A44E4 7F06F9B4 00000000 */ nop +/* 0A44E4 7F06F9B4 00000000 */ nop /* 0A44E8 7F06F9B8 45010009 */ bc1t .L7F06F9E0 -/* 0A44EC 7F06F9BC 00000000 */ nop +/* 0A44EC 7F06F9BC 00000000 */ nop /* 0A44F0 7F06F9C0 46025102 */ mul.s $f4, $f10, $f2 /* 0A44F4 7F06F9C4 C7A60060 */ lwc1 $f6, 0x60($sp) /* 0A44F8 7F06F9C8 C7AA0064 */ lwc1 $f10, 0x64($sp) @@ -3879,7 +3887,7 @@ glabel modelSetAnimation2 /* 0A4538 7F06FA08 C7A60064 */ lwc1 $f6, 0x64($sp) /* 0A453C 7F06FA0C C7AA005C */ lwc1 $f10, 0x5c($sp) /* 0A4540 7F06FA10 45000032 */ bc1f .L7F06FADC -/* 0A4544 7F06FA14 00000000 */ nop +/* 0A4544 7F06FA14 00000000 */ nop /* 0A4548 7F06FA18 C608000C */ lwc1 $f8, 0xc($s0) /* 0A454C 7F06FA1C C60A0004 */ lwc1 $f10, 4($s0) /* 0A4550 7F06FA20 C6020008 */ lwc1 $f2, 8($s0) @@ -3893,7 +3901,7 @@ glabel modelSetAnimation2 /* 0A4570 7F06FA40 C7AA0064 */ lwc1 $f10, 0x64($sp) /* 0A4574 7F06FA44 C7A6005C */ lwc1 $f6, 0x5c($sp) /* 0A4578 7F06FA48 46005102 */ mul.s $f4, $f10, $f0 -/* 0A457C 7F06FA4C 00000000 */ nop +/* 0A457C 7F06FA4C 00000000 */ nop /* 0A4580 7F06FA50 46123202 */ mul.s $f8, $f6, $f18 /* 0A4584 7F06FA54 46081200 */ add.s $f8, $f2, $f8 /* 0A4588 7F06FA58 46003182 */ mul.s $f6, $f6, $f0 @@ -3923,7 +3931,7 @@ glabel modelSetAnimation2 /* 0A45E8 7F06FAB8 4600103E */ c.le.s $f2, $f0 /* 0A45EC 7F06FABC E6000020 */ swc1 $f0, 0x20($s0) /* 0A45F0 7F06FAC0 45000004 */ bc1f .L7F06FAD4 -/* 0A45F4 7F06FAC4 00000000 */ nop +/* 0A45F4 7F06FAC4 00000000 */ nop /* 0A45F8 7F06FAC8 C60A0020 */ lwc1 $f10, 0x20($s0) /* 0A45FC 7F06FACC 46025101 */ sub.s $f4, $f10, $f2 /* 0A4600 7F06FAD0 E6040020 */ swc1 $f4, 0x20($s0) @@ -3941,7 +3949,7 @@ glabel modelSetAnimation2 /* 0A4628 7F06FAF8 46002182 */ mul.s $f6, $f4, $f0 /* 0A462C 7F06FAFC 46064280 */ add.s $f10, $f8, $f6 /* 0A4630 7F06FB00 44814000 */ mtc1 $at, $f8 -/* 0A4634 7F06FB04 00000000 */ nop +/* 0A4634 7F06FB04 00000000 */ nop /* 0A4638 7F06FB08 46024181 */ sub.s $f6, $f8, $f2 /* 0A463C 7F06FB0C E7AA0030 */ swc1 $f10, 0x30($sp) /* 0A4640 7F06FB10 C6040008 */ lwc1 $f4, 8($s0) @@ -3986,9 +3994,9 @@ glabel modelSetAnimation2 /* 0A46DC 7F06FBAC C7A80058 */ lwc1 $f8, 0x58($sp) /* 0A46E0 7F06FBB0 46086381 */ sub.s $f14, $f12, $f8 /* 0A46E4 7F06FBB4 4606703C */ c.lt.s $f14, $f6 -/* 0A46E8 7F06FBB8 00000000 */ nop +/* 0A46E8 7F06FBB8 00000000 */ nop /* 0A46EC 7F06FBBC 45000003 */ bc1f .L7F06FBCC -/* 0A46F0 7F06FBC0 00000000 */ nop +/* 0A46F0 7F06FBC0 00000000 */ nop /* 0A46F4 7F06FBC4 C4244D44 */ lwc1 $f4, %lo(D_80054D44)($at) /* 0A46F8 7F06FBC8 46047380 */ add.s $f14, $f14, $f4 .L7F06FBCC: @@ -4123,7 +4131,7 @@ void modelSetAnimLooping(Model *model, f32 loopframe, f32 loopmerge) { void modelSetAnimEndFrame(Model *model, f32 endframe) { ModelAnimation *modelAnimation = model->anim; - + if ((modelAnimation != NULL) && (endframe < (modelAnimation->unk04 - 1))) { model->endframe = endframe; } else { @@ -4144,7 +4152,7 @@ void sub_GAME_7F06FE44(Model *model, s32 arg1) { } void modelSetAnimSpeed(Model *model, f32 anim_speed, f32 startframe) { - + if (startframe > 0.0f) { model->timespeed = startframe; model->newspeed = anim_speed; @@ -4161,7 +4169,7 @@ void modelSetAnimSpeed(Model *model, f32 anim_speed, f32 startframe) { * @param arg0: * @param arg1: * @param arg2: must be non-zero. - * + * * Address 0x7F06FE90. */ void sub_GAME_7F06FE90(Model *model, f32 arg1, f32 arg2) @@ -4171,7 +4179,7 @@ void sub_GAME_7F06FE90(Model *model, f32 arg1, f32 arg2) f32 t; temp_f0 = model->unk28; - + if (temp_f0 <= arg1) { phi_f2 = arg1 - temp_f0; @@ -4180,7 +4188,7 @@ void sub_GAME_7F06FE90(Model *model, f32 arg1, f32 arg2) { phi_f2 = ( (f32)model->anim->unk04 - temp_f0) + arg1; } - + t = model->speed + ((2.0f * phi_f2) / arg2); modelSetAnimSpeed(model, t, arg2); } @@ -4337,7 +4345,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A4D88 7F070258 5700020A */ bnezl $t8, .L7F070A84 /* 0A4D8C 7F07025C C7B40108 */ lwc1 $f20, 0x108($sp) /* 0A4D90 7F070260 96590000 */ lhu $t9, ($s2) -/* 0A4D94 7F070264 3C0B8003 */ lui $t3, %hi(D_80036254) +/* 0A4D94 7F070264 3C0B8003 */ lui $t3, %hi(D_80036254) /* 0A4D98 7F070268 256B6254 */ addiu $t3, %lo(D_80036254) # addiu $t3, $t3, 0x6254 /* 0A4D9C 7F07026C AFB900E4 */ sw $t9, 0xe4($sp) /* 0A4DA0 7F070270 8E280008 */ lw $t0, 8($s1) @@ -4375,14 +4383,14 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A4E20 7F0702F0 AFAF0094 */ sw $t7, 0x94($sp) /* 0A4E24 7F0702F4 C63E0040 */ lwc1 $f30, 0x40($s1) /* 0A4E28 7F0702F8 4618F03C */ c.lt.s $f30, $f24 -/* 0A4E2C 7F0702FC 00000000 */ nop +/* 0A4E2C 7F0702FC 00000000 */ nop /* 0A4E30 7F070300 45020003 */ bc1fl .L7F070310 /* 0A4E34 7F070304 C6200070 */ lwc1 $f0, 0x70($s1) /* 0A4E38 7F070308 4600F787 */ neg.s $f30, $f30 /* 0A4E3C 7F07030C C6200070 */ lwc1 $f0, 0x70($s1) .L7F070310: /* 0A4E40 7F070310 4618003C */ c.lt.s $f0, $f24 -/* 0A4E44 7F070314 00000000 */ nop +/* 0A4E44 7F070314 00000000 */ nop /* 0A4E48 7F070318 45020003 */ bc1fl .L7F070328 /* 0A4E4C 7F07031C 4610A03E */ c.le.s $f20, $f16 /* 0A4E50 7F070320 46000007 */ neg.s $f0, $f0 @@ -4390,7 +4398,7 @@ glabel modelSetAnimFrame2WithChrStuff .L7F070328: /* 0A4E58 7F070328 00009825 */ move $s3, $zero /* 0A4E5C 7F07032C 45000002 */ bc1f .L7F070338 -/* 0A4E60 7F070330 00000000 */ nop +/* 0A4E60 7F070330 00000000 */ nop /* 0A4E64 7F070334 24130001 */ li $s3, 1 .L7F070338: /* 0A4E68 7F070338 5260000A */ beql $s3, $zero, .L7F070364 @@ -4446,9 +4454,9 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A4F1C 7F0703EC E7A600B4 */ swc1 $f6, 0xb4($sp) /* 0A4F20 7F0703F0 C6080018 */ lwc1 $f8, 0x18($s0) /* 0A4F24 7F0703F4 4608C032 */ c.eq.s $f24, $f8 -/* 0A4F28 7F0703F8 00000000 */ nop +/* 0A4F28 7F0703F8 00000000 */ nop /* 0A4F2C 7F0703FC 45000046 */ bc1f .L7F070518 -/* 0A4F30 7F070400 00000000 */ nop +/* 0A4F30 7F070400 00000000 */ nop /* 0A4F34 7F070404 10000044 */ b .L7F070518 /* 0A4F38 7F070408 C7BC0098 */ lwc1 $f28, 0x98($sp) .L7F07040C: @@ -4470,7 +4478,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A4F78 7F070448 460A1082 */ mul.s $f2, $f2, $f10 /* 0A4F7C 7F07044C C7AC00D0 */ lwc1 $f12, 0xd0($sp) /* 0A4F80 7F070450 460A9102 */ mul.s $f4, $f18, $f10 -/* 0A4F84 7F070454 00000000 */ nop +/* 0A4F84 7F070454 00000000 */ nop /* 0A4F88 7F070458 460A6302 */ mul.s $f12, $f12, $f10 /* 0A4F8C 7F07045C E7A200C8 */ swc1 $f2, 0xc8($sp) /* 0A4F90 7F070460 E7A400CC */ swc1 $f4, 0xcc($sp) @@ -4496,7 +4504,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A4FD8 7F0704A8 C7B000D0 */ lwc1 $f16, 0xd0($sp) /* 0A4FDC 7F0704AC C7AA00AC */ lwc1 $f10, 0xac($sp) /* 0A4FE0 7F0704B0 46143202 */ mul.s $f8, $f6, $f20 -/* 0A4FE4 7F0704B4 00000000 */ nop +/* 0A4FE4 7F0704B4 00000000 */ nop /* 0A4FE8 7F0704B8 46008482 */ mul.s $f18, $f16, $f0 /* 0A4FEC 7F0704BC 46124100 */ add.s $f4, $f8, $f18 /* 0A4FF0 7F0704C0 C7B200CC */ lwc1 $f18, 0xcc($sp) @@ -4512,14 +4520,14 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A5018 7F0704E8 E7AA00B4 */ swc1 $f10, 0xb4($sp) /* 0A501C 7F0704EC C6100018 */ lwc1 $f16, 0x18($s0) /* 0A5020 7F0704F0 4610C032 */ c.eq.s $f24, $f16 -/* 0A5024 7F0704F4 00000000 */ nop +/* 0A5024 7F0704F4 00000000 */ nop /* 0A5028 7F0704F8 45000007 */ bc1f .L7F070518 -/* 0A502C 7F0704FC 00000000 */ nop +/* 0A502C 7F0704FC 00000000 */ nop /* 0A5030 7F070500 4616E700 */ add.s $f28, $f28, $f22 /* 0A5034 7F070504 461CD03E */ c.le.s $f26, $f28 -/* 0A5038 7F070508 00000000 */ nop +/* 0A5038 7F070508 00000000 */ nop /* 0A503C 7F07050C 45000002 */ bc1f .L7F070518 -/* 0A5040 7F070510 00000000 */ nop +/* 0A5040 7F070510 00000000 */ nop /* 0A5044 7F070514 461AE701 */ sub.s $f28, $f28, $f26 .L7F070518: /* 0A5048 7F070518 52600004 */ beql $s3, $zero, .L7F07052C @@ -4558,7 +4566,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A50C8 7F070598 46041082 */ mul.s $f2, $f2, $f4 /* 0A50CC 7F07059C C7AC00D0 */ lwc1 $f12, 0xd0($sp) /* 0A50D0 7F0705A0 46043482 */ mul.s $f18, $f6, $f4 -/* 0A50D4 7F0705A4 00000000 */ nop +/* 0A50D4 7F0705A4 00000000 */ nop /* 0A50D8 7F0705A8 46046302 */ mul.s $f12, $f12, $f4 /* 0A50DC 7F0705AC E7A200C8 */ swc1 $f2, 0xc8($sp) /* 0A50E0 7F0705B0 E7B200CC */ swc1 $f18, 0xcc($sp) @@ -4580,15 +4588,15 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A5118 7F0705E8 46000506 */ mov.s $f20, $f0 /* 0A511C 7F0705EC 0FC15FAB */ jal sinf /* 0A5120 7F0705F0 C60C0030 */ lwc1 $f12, 0x30($s0) -/* 0A5124 7F0705F4 3C0A8003 */ lui $t2, %hi(g_ModelAnimMergingEnabled) +/* 0A5124 7F0705F4 3C0A8003 */ lui $t2, %hi(g_ModelAnimMergingEnabled) /* 0A5128 7F0705F8 8D4A6250 */ lw $t2, %lo(g_ModelAnimMergingEnabled)($t2) /* 0A512C 7F0705FC C7A200C8 */ lwc1 $f2, 0xc8($sp) /* 0A5130 7F070600 C7AC00D0 */ lwc1 $f12, 0xd0($sp) /* 0A5134 7F070604 11400056 */ beqz $t2, .L7F070760 -/* 0A5138 7F070608 00000000 */ nop +/* 0A5138 7F070608 00000000 */ nop /* 0A513C 7F07060C 8E2B0054 */ lw $t3, 0x54($s1) /* 0A5140 7F070610 11600053 */ beqz $t3, .L7F070760 -/* 0A5144 7F070614 00000000 */ nop +/* 0A5144 7F070614 00000000 */ nop /* 0A5148 7F070618 C7AC00D0 */ lwc1 $f12, 0xd0($sp) /* 0A514C 7F07061C C7A200C8 */ lwc1 $f2, 0xc8($sp) /* 0A5150 7F070620 461EC03C */ c.lt.s $f24, $f30 @@ -4596,9 +4604,9 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A5158 7F070628 46001187 */ neg.s $f6, $f2 /* 0A515C 7F07062C 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 0A5160 7F070630 46141402 */ mul.s $f16, $f2, $f20 -/* 0A5164 7F070634 00000000 */ nop +/* 0A5164 7F070634 00000000 */ nop /* 0A5168 7F070638 46146102 */ mul.s $f4, $f12, $f20 -/* 0A516C 7F07063C 00000000 */ nop +/* 0A516C 7F07063C 00000000 */ nop /* 0A5170 7F070640 46003482 */ mul.s $f18, $f6, $f0 /* 0A5174 7F070644 46105200 */ add.s $f8, $f10, $f16 /* 0A5178 7F070648 E7A8009C */ swc1 $f8, 0x9c($sp) @@ -4612,7 +4620,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A5198 7F070668 46068103 */ div.s $f4, $f16, $f6 /* 0A519C 7F07066C 46041001 */ sub.s $f0, $f2, $f4 /* 0A51A0 7F070670 4618003C */ c.lt.s $f0, $f24 -/* 0A51A4 7F070674 00000000 */ nop +/* 0A51A4 7F070674 00000000 */ nop /* 0A51A8 7F070678 45020003 */ bc1fl .L7F070688 /* 0A51AC 7F07067C 46001480 */ add.s $f18, $f2, $f0 /* 0A51B0 7F070680 4600C006 */ mov.s $f0, $f24 @@ -4624,7 +4632,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A51C4 7F070694 C7A40088 */ lwc1 $f4, 0x88($sp) /* 0A51C8 7F070698 46104181 */ sub.s $f6, $f8, $f16 /* 0A51CC 7F07069C 460A9002 */ mul.s $f0, $f18, $f10 -/* 0A51D0 7F0706A0 00000000 */ nop +/* 0A51D0 7F0706A0 00000000 */ nop /* 0A51D4 7F0706A4 46043482 */ mul.s $f18, $f6, $f4 /* 0A51D8 7F0706A8 461E9283 */ div.s $f10, $f18, $f30 /* 0A51DC 7F0706AC E7AA007C */ swc1 $f10, 0x7c($sp) @@ -4692,7 +4700,7 @@ glabel modelSetAnimFrame2WithChrStuff .L7F070798: /* 0A52C8 7F070798 C600005C */ lwc1 $f0, 0x5c($s0) /* 0A52CC 7F07079C 4600C03C */ c.lt.s $f24, $f0 -/* 0A52D0 7F0707A0 00000000 */ nop +/* 0A52D0 7F0707A0 00000000 */ nop /* 0A52D4 7F0707A4 45020020 */ bc1fl .L7F070828 /* 0A52D8 7F0707A8 C6100018 */ lwc1 $f16, 0x18($s0) /* 0A52DC 7F0707AC 461EC03C */ c.lt.s $f24, $f30 @@ -4700,7 +4708,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A52E4 7F0707B4 4502001C */ bc1fl .L7F070828 /* 0A52E8 7F0707B8 C6100018 */ lwc1 $f16, 0x18($s0) /* 0A52EC 7F0707BC 44813000 */ mtc1 $at, $f6 -/* 0A52F0 7F0707C0 00000000 */ nop +/* 0A52F0 7F0707C0 00000000 */ nop /* 0A52F4 7F0707C4 461E3083 */ div.s $f2, $f6, $f30 /* 0A52F8 7F0707C8 4602003C */ c.lt.s $f0, $f2 /* 0A52FC 7F0707CC 46001306 */ mov.s $f12, $f2 @@ -4717,14 +4725,14 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A5320 7F0707F0 460C2482 */ mul.s $f18, $f4, $f12 /* 0A5324 7F0707F4 4612B580 */ add.s $f22, $f22, $f18 /* 0A5328 7F0707F8 4618B03C */ c.lt.s $f22, $f24 -/* 0A532C 7F0707FC 00000000 */ nop +/* 0A532C 7F0707FC 00000000 */ nop /* 0A5330 7F070800 45020004 */ bc1fl .L7F070814 /* 0A5334 7F070804 4616D03E */ c.le.s $f26, $f22 /* 0A5338 7F070808 10000006 */ b .L7F070824 /* 0A533C 7F07080C 461AB580 */ add.s $f22, $f22, $f26 /* 0A5340 7F070810 4616D03E */ c.le.s $f26, $f22 .L7F070814: -/* 0A5344 7F070814 00000000 */ nop +/* 0A5344 7F070814 00000000 */ nop /* 0A5348 7F070818 45020003 */ bc1fl .L7F070828 /* 0A534C 7F07081C C6100018 */ lwc1 $f16, 0x18($s0) /* 0A5350 7F070820 461AB581 */ sub.s $f22, $f22, $f26 @@ -4732,14 +4740,14 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A5354 7F070824 C6100018 */ lwc1 $f16, 0x18($s0) .L7F070828: /* 0A5358 7F070828 4610C032 */ c.eq.s $f24, $f16 -/* 0A535C 7F07082C 00000000 */ nop +/* 0A535C 7F07082C 00000000 */ nop /* 0A5360 7F070830 45000008 */ bc1f .L7F070854 -/* 0A5364 7F070834 00000000 */ nop +/* 0A5364 7F070834 00000000 */ nop /* 0A5368 7F070838 4616E000 */ add.s $f0, $f28, $f22 /* 0A536C 7F07083C 4600D03E */ c.le.s $f26, $f0 /* 0A5370 7F070840 E7A00098 */ swc1 $f0, 0x98($sp) /* 0A5374 7F070844 45000003 */ bc1f .L7F070854 -/* 0A5378 7F070848 00000000 */ nop +/* 0A5378 7F070848 00000000 */ nop /* 0A537C 7F07084C 461A0201 */ sub.s $f8, $f0, $f26 /* 0A5380 7F070850 E7A80098 */ swc1 $f8, 0x98($sp) .L7F070854: @@ -4764,7 +4772,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A53C8 7F070898 86220030 */ lh $v0, 0x30($s1) /* 0A53CC 7F07089C 86230032 */ lh $v1, 0x32($s1) /* 0A53D0 7F0708A0 14620006 */ bne $v1, $v0, .L7F0708BC -/* 0A53D4 7F0708A4 00000000 */ nop +/* 0A53D4 7F0708A4 00000000 */ nop /* 0A53D8 7F0708A8 44825000 */ mtc1 $v0, $f10 /* 0A53DC 7F0708AC E638002C */ swc1 $f24, 0x2c($s1) /* 0A53E0 7F0708B0 46805120 */ cvt.s.w $f4, $f10 @@ -4799,7 +4807,7 @@ glabel modelSetAnimFrame2WithChrStuff .L7F07091C: /* 0A544C 7F07091C 8E2E0054 */ lw $t6, 0x54($s1) /* 0A5450 7F070920 11C00055 */ beqz $t6, .L7F070A78 -/* 0A5454 7F070924 00000000 */ nop +/* 0A5454 7F070924 00000000 */ nop /* 0A5458 7F070928 0FC170F6 */ jal floorFloatToInt /* 0A545C 7F07092C C7AC0104 */ lwc1 $f12, 0x104($sp) /* 0A5460 7F070930 C7B40108 */ lwc1 $f20, 0x108($sp) @@ -4851,7 +4859,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A5508 7F0709D8 C7AC00DC */ lwc1 $f12, 0xdc($sp) /* 0A550C 7F0709DC C7A400CC */ lwc1 $f4, 0xcc($sp) /* 0A5510 7F0709E0 46026032 */ c.eq.s $f12, $f2 -/* 0A5514 7F0709E4 00000000 */ nop +/* 0A5514 7F0709E4 00000000 */ nop /* 0A5518 7F0709E8 45030004 */ bc1tl .L7F0709FC /* 0A551C 7F0709EC C7B000CC */ lwc1 $f16, 0xcc($sp) /* 0A5520 7F0709F0 460C2282 */ mul.s $f10, $f4, $f12 @@ -4883,7 +4891,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A5578 7F070A48 862C0062 */ lh $t4, 0x62($s1) /* 0A557C 7F070A4C 468084A0 */ cvt.s.w $f18, $f16 /* 0A5580 7F070A50 448C3000 */ mtc1 $t4, $f6 -/* 0A5584 7F070A54 00000000 */ nop +/* 0A5584 7F070A54 00000000 */ nop /* 0A5588 7F070A58 46803120 */ cvt.s.w $f4, $f6 /* 0A558C 7F070A5C 4612A201 */ sub.s $f8, $f20, $f18 /* 0A5590 7F070A60 46081001 */ sub.s $f0, $f2, $f8 @@ -4901,7 +4909,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A55B8 7F070A88 8FA50100 */ lw $a1, 0x100($sp) /* 0A55BC 7F070A8C 4406A000 */ mfc1 $a2, $f20 /* 0A55C0 7F070A90 0FC1C024 */ jal modelSetAnimFrame2 -/* 0A55C4 7F070A94 00000000 */ nop +/* 0A55C4 7F070A94 00000000 */ nop /* 0A55C8 7F070A98 10000008 */ b .L7F070ABC /* 0A55CC 7F070A9C 8FBF005C */ lw $ra, 0x5c($sp) /* 0A55D0 7F070AA0 C7B40108 */ lwc1 $f20, 0x108($sp) @@ -4910,7 +4918,7 @@ glabel modelSetAnimFrame2WithChrStuff /* 0A55D8 7F070AA8 8FA50100 */ lw $a1, 0x100($sp) /* 0A55DC 7F070AAC 4406A000 */ mfc1 $a2, $f20 /* 0A55E0 7F070AB0 0FC1C024 */ jal modelSetAnimFrame2 -/* 0A55E4 7F070AB4 00000000 */ nop +/* 0A55E4 7F070AB4 00000000 */ nop .L7F070AB8: /* 0A55E8 7F070AB8 8FBF005C */ lw $ra, 0x5c($sp) .L7F070ABC: @@ -4961,22 +4969,22 @@ glabel modelTickAnimQuarterSpeed /* 0A5660 7F070B30 58A000E6 */ blezl $a1, .L7F070ECC /* 0A5664 7F070B34 8FAB0090 */ lw $t3, 0x90($sp) /* 0A5668 7F070B38 4480C000 */ mtc1 $zero, $f24 -/* 0A566C 7F070B3C 00000000 */ nop +/* 0A566C 7F070B3C 00000000 */ nop /* 0A5670 7F070B40 C60200B0 */ lwc1 $f2, 0xb0($s0) .L7F070B44: /* 0A5674 7F070B44 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0A5678 7F070B48 4602C03C */ c.lt.s $f24, $f2 -/* 0A567C 7F070B4C 00000000 */ nop +/* 0A567C 7F070B4C 00000000 */ nop /* 0A5680 7F070B50 45020017 */ bc1fl .L7F070BB0 /* 0A5684 7F070B54 C6080088 */ lwc1 $f8, 0x88($s0) /* 0A5688 7F070B58 C60600B4 */ lwc1 $f6, 0xb4($s0) /* 0A568C 7F070B5C 44814000 */ mtc1 $at, $f8 -/* 0A5690 7F070B60 00000000 */ nop +/* 0A5690 7F070B60 00000000 */ nop /* 0A5694 7F070B64 46083280 */ add.s $f10, $f6, $f8 /* 0A5698 7F070B68 E60A00B4 */ swc1 $f10, 0xb4($s0) /* 0A569C 7F070B6C C60C00B4 */ lwc1 $f12, 0xb4($s0) /* 0A56A0 7F070B70 4602603C */ c.lt.s $f12, $f2 -/* 0A56A4 7F070B74 00000000 */ nop +/* 0A56A4 7F070B74 00000000 */ nop /* 0A56A8 7F070B78 4502000A */ bc1fl .L7F070BA4 /* 0A56AC 7F070B7C C60600A8 */ lwc1 $f6, 0xa8($s0) /* 0A56B0 7F070B80 C60000AC */ lwc1 $f0, 0xac($s0) @@ -4996,7 +5004,7 @@ glabel modelTickAnimQuarterSpeed .L7F070BB0: /* 0A56E0 7F070BB0 C60200A4 */ lwc1 $f2, 0xa4($s0) /* 0A56E4 7F070BB4 4608C03C */ c.lt.s $f24, $f8 -/* 0A56E8 7F070BB8 00000000 */ nop +/* 0A56E8 7F070BB8 00000000 */ nop /* 0A56EC 7F070BBC 4502001D */ bc1fl .L7F070C34 /* 0A56F0 7F070BC0 C60C004C */ lwc1 $f12, 0x4c($s0) /* 0A56F4 7F070BC4 C60A008C */ lwc1 $f10, 0x8c($s0) @@ -5005,7 +5013,7 @@ glabel modelTickAnimQuarterSpeed /* 0A5700 7F070BD0 E604008C */ swc1 $f4, 0x8c($s0) /* 0A5704 7F070BD4 C60C008C */ lwc1 $f12, 0x8c($s0) /* 0A5708 7F070BD8 460CC032 */ c.eq.s $f24, $f12 -/* 0A570C 7F070BDC 00000000 */ nop +/* 0A570C 7F070BDC 00000000 */ nop /* 0A5710 7F070BE0 45020006 */ bc1fl .L7F070BFC /* 0A5714 7F070BE4 C6000088 */ lwc1 $f0, 0x88($s0) /* 0A5718 7F070BE8 44813000 */ mtc1 $at, $f6 @@ -5015,7 +5023,7 @@ glabel modelTickAnimQuarterSpeed /* 0A5728 7F070BF8 C6000088 */ lwc1 $f0, 0x88($s0) .L7F070BFC: /* 0A572C 7F070BFC 4600603C */ c.lt.s $f12, $f0 -/* 0A5730 7F070C00 00000000 */ nop +/* 0A5730 7F070C00 00000000 */ nop /* 0A5734 7F070C04 45020007 */ bc1fl .L7F070C24 /* 0A5738 7F070C08 E6180088 */ swc1 $f24, 0x88($s0) /* 0A573C 7F070C0C 460C0201 */ sub.s $f8, $f0, $f12 @@ -5032,7 +5040,7 @@ glabel modelTickAnimQuarterSpeed /* 0A5760 7F070C30 C60C004C */ lwc1 $f12, 0x4c($s0) .L7F070C34: /* 0A5764 7F070C34 460CC03C */ c.lt.s $f24, $f12 -/* 0A5768 7F070C38 00000000 */ nop +/* 0A5768 7F070C38 00000000 */ nop /* 0A576C 7F070C3C 45020017 */ bc1fl .L7F070C9C /* 0A5770 7F070C40 C6100040 */ lwc1 $f16, 0x40($s0) /* 0A5774 7F070C44 C6040050 */ lwc1 $f4, 0x50($s0) @@ -5040,7 +5048,7 @@ glabel modelTickAnimQuarterSpeed /* 0A577C 7F070C4C E6060050 */ swc1 $f6, 0x50($s0) /* 0A5780 7F070C50 C60E0050 */ lwc1 $f14, 0x50($s0) /* 0A5784 7F070C54 460C703C */ c.lt.s $f14, $f12 -/* 0A5788 7F070C58 00000000 */ nop +/* 0A5788 7F070C58 00000000 */ nop /* 0A578C 7F070C5C 4502000B */ bc1fl .L7F070C8C /* 0A5790 7F070C60 C60A0044 */ lwc1 $f10, 0x44($s0) /* 0A5794 7F070C64 C6000048 */ lwc1 $f0, 0x48($s0) @@ -5066,7 +5074,7 @@ glabel modelTickAnimQuarterSpeed /* 0A57D8 7F070CA8 46049480 */ add.s $f18, $f18, $f4 /* 0A57DC 7F070CAC C60C007C */ lwc1 $f12, 0x7c($s0) /* 0A57E0 7F070CB0 460CC03C */ c.lt.s $f24, $f12 -/* 0A57E4 7F070CB4 00000000 */ nop +/* 0A57E4 7F070CB4 00000000 */ nop /* 0A57E8 7F070CB8 45020017 */ bc1fl .L7F070D18 /* 0A57EC 7F070CBC C6000070 */ lwc1 $f0, 0x70($s0) /* 0A57F0 7F070CC0 C6060080 */ lwc1 $f6, 0x80($s0) @@ -5074,7 +5082,7 @@ glabel modelTickAnimQuarterSpeed /* 0A57F8 7F070CC8 E6080080 */ swc1 $f8, 0x80($s0) /* 0A57FC 7F070CCC C60E0080 */ lwc1 $f14, 0x80($s0) /* 0A5800 7F070CD0 460C703C */ c.lt.s $f14, $f12 -/* 0A5804 7F070CD4 00000000 */ nop +/* 0A5804 7F070CD4 00000000 */ nop /* 0A5808 7F070CD8 4502000B */ bc1fl .L7F070D08 /* 0A580C 7F070CDC C6040074 */ lwc1 $f4, 0x74($s0) /* 0A5810 7F070CE0 C6000078 */ lwc1 $f0, 0x78($s0) @@ -5117,7 +5125,7 @@ glabel modelTickAnimQuarterSpeed /* 0A5894 7F070D64 45020012 */ bc1fl .L7F070DB0 /* 0A5898 7F070D68 4610C03E */ c.le.s $f24, $f16 /* 0A589C 7F070D6C 4600B03C */ c.lt.s $f22, $f0 -/* 0A58A0 7F070D70 00000000 */ nop +/* 0A58A0 7F070D70 00000000 */ nop /* 0A58A4 7F070D74 4502000E */ bc1fl .L7F070DB0 /* 0A58A8 7F070D78 4610C03E */ c.le.s $f24, $f16 /* 0A58AC 7F070D7C 1000000B */ b .L7F070DAC @@ -5129,27 +5137,27 @@ glabel modelTickAnimQuarterSpeed /* 0A58C0 7F070D90 45020007 */ bc1fl .L7F070DB0 /* 0A58C4 7F070D94 4610C03E */ c.le.s $f24, $f16 /* 0A58C8 7F070D98 4600B03C */ c.lt.s $f22, $f0 -/* 0A58CC 7F070D9C 00000000 */ nop +/* 0A58CC 7F070D9C 00000000 */ nop /* 0A58D0 7F070DA0 45020003 */ bc1fl .L7F070DB0 /* 0A58D4 7F070DA4 4610C03E */ c.le.s $f24, $f16 /* 0A58D8 7F070DA8 4600B686 */ mov.s $f26, $f22 .L7F070DAC: /* 0A58DC 7F070DAC 4610C03E */ c.le.s $f24, $f16 .L7F070DB0: -/* 0A58E0 7F070DB0 00000000 */ nop +/* 0A58E0 7F070DB0 00000000 */ nop /* 0A58E4 7F070DB4 45020006 */ bc1fl .L7F070DD0 /* 0A58E8 7F070DB8 4618803C */ c.lt.s $f16, $f24 /* 0A58EC 7F070DBC 4612A03E */ c.le.s $f20, $f18 -/* 0A58F0 7F070DC0 00000000 */ nop +/* 0A58F0 7F070DC0 00000000 */ nop /* 0A58F4 7F070DC4 4503000A */ bc1tl .L7F070DF0 /* 0A58F8 7F070DC8 C606004C */ lwc1 $f6, 0x4c($s0) /* 0A58FC 7F070DCC 4618803C */ c.lt.s $f16, $f24 .L7F070DD0: -/* 0A5900 7F070DD0 00000000 */ nop +/* 0A5900 7F070DD0 00000000 */ nop /* 0A5904 7F070DD4 4502003A */ bc1fl .L7F070EC0 /* 0A5908 7F070DD8 2631FFFF */ addiu $s1, $s1, -1 /* 0A590C 7F070DDC 4614903E */ c.le.s $f18, $f20 -/* 0A5910 7F070DE0 00000000 */ nop +/* 0A5910 7F070DE0 00000000 */ nop /* 0A5914 7F070DE4 45020036 */ bc1fl .L7F070EC0 /* 0A5918 7F070DE8 2631FFFF */ addiu $s1, $s1, -1 /* 0A591C 7F070DEC C606004C */ lwc1 $f6, 0x4c($s0) @@ -5216,7 +5224,7 @@ glabel modelTickAnimQuarterSpeed /* 0A59FC 7F070ECC 4480C000 */ mtc1 $zero, $f24 /* 0A5A00 7F070ED0 8E020054 */ lw $v0, 0x54($s0) /* 0A5A04 7F070ED4 11600014 */ beqz $t3, .L7F070F28 -/* 0A5A08 7F070ED8 00000000 */ nop +/* 0A5A08 7F070ED8 00000000 */ nop /* 0A5A0C 7F070EDC 1040000A */ beqz $v0, .L7F070F08 /* 0A5A10 7F070EE0 C6000028 */ lwc1 $f0, 0x28($s0) /* 0A5A14 7F070EE4 C7A40080 */ lwc1 $f4, 0x80($sp) @@ -5266,7 +5274,10 @@ glabel modelTickAnimQuarterSpeed ) #endif - +/** + * @brief Model Type 1: 1Cycle No Secondary + * @param[in,out] renderdata append cycle, CC and RM to display List + */ void modelApplyRenderModeType1(ModelRenderData *renderdata) { gDPPipeSync(renderdata->gdl++); @@ -5284,161 +5295,31 @@ void modelApplyRenderModeType1(ModelRenderData *renderdata) gDPSetCombineMode(renderdata->gdl++, G_CC_MODULATEIA, G_CC_MODULATEIA); } - -/* ---Copy/Paste from Doc -DisplayList Setups Depend on Object Type, Prop Guard or Gun. -These are applied to each part of an object at runtime and can be overridden. loading the next part will use these values once more. -GeometryMode is not in setup and is persistent accross parts. - - -7F072A0C Read Displaylist 18 Model Type -7F072A1C Read Displaylist 18 Model Type -7F072A24 Check model type 1 -7F072A2C Call to do model type 1 7F070F80 -7F072A40 Check model type 3 -7F072A48 Call to do model type 3 7F071030 -7F072A5C Check model type 4 -7F072A64 Call to do model type 4 7F071B44 -7F072A78 Check model type 2 -7F072A80 Call to do model type 2 7F072644 - -7F0727F8 Read Displaylist 04 Model Type - -A1 is primary = 1, secondary = 0 -Inside the T8 or whatever temporary register indicates gun or not gun (0 = gun, or UseZ = 1), for different render mode - -Bool UseZ //guns = false -Bool - - -Model Type 0: NoSetup. - type 0 Has No DL Setup and will use whaterver is currently set. - -Model Type 1: 1Cycle No Sec - E700000000000000 pipesync() - BA00140200000000 CycleType(1c) - if UseZ - B900031D00552078 SetRendermode(AA_ZB_OPA_1) //cin ain cmem amem - else - B900031D00552048 SetRendermode(AA_OPA_1) //cin ain cmem amem - end if - FC121824FF33FFFF SetCombine(MODULATERGBA) - No Secondary - -Model Type 2: 2Cycle No Sec - E700000000000000 pipesync() - BA00140200100000 CycleType(2c) - if UseZ - B900031D0C192078 SetRendermode(AA_ZB_OPA_2) // cin 0 cin 1 //colour only - else - B900031D0C192048 SetRendermode(AA_OPA_2) // cin 0 cin 1 //colour only - end if - FC26A0041F1093FF SetCombine(TRILERP, MODULATERGBA) - No Secondary -Model Type 3: GunLighting - Reduced Secondary Commands (guns) - This Type Uses Vertex Alpha for Secondary Surfaces and uses the FOG Alpha value for applying Fog/"Lighting". - Primary - E700000000000000 pipesync() - BA00140200100000 CycleType(2c) - F800000000000026 SetFogColor(0,0,0,38) - if dltype = full - if guard - FB0000005A0000FF SetEnvColor(90,0,0,255) - FC1598045FFEDBF8 SetCombine(((Texel0-Env)*ShadeA+Env) - ((Texel0-Env)*Shade+Env), - MODULATERGB_DECALA) - else if prop - FB000000FFFFFFFF SetEnvColor(255,255,255,255) - FA00000000000000 SetPrimColor(0,0,0,0) - FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A) - endif - else - FC26A0041F1093FF SetCombine(TRILERP, MODULATERGBA) - endif - if UseZ - B900031DC4112078 SetRendermode(AA_ZB_OPA_StanFOG_2) - else - B900031DC4112048 SetRendermode(AA_OPA_StanFOG_2) //acvg - endif - - Secondary - if UseZ - B900031DC41049D8 SetRendermode(AA_Zcmp_XLU_StanFOG_2) - else - B900031DC41041C8 SetRendermode(AA_OPA_StanFOG_2)//FcBl ClrOnCvg - endif - -Model Type 4: Normal Fog/Lighting object - This Type Uses Vertex Alpha for Secondary Surfaces and uses the FOG Alpha value for applying Fog/"Lighting". - Primary - E700000000000000 pipesync() - BA00140200100000 CycleType(2c) - F800000000000026 SetFogColor(0,0,0,38) - if dltype = full - if guard - FB0000005A0000FF SetEnvColor(90,0,0,255) - FC1598045FFEDBF8 SetCombine(((Texel0-Env)*ShadeA+Env) - ((Texel0-Env)*Shade+Env), - MODULATERGB_DECALA) - else if prop - FB000000FFFFFFFF SetEnvColor(255,255,255,255) - FA00000000000000 SetPrimColor(0,0,0,0) - FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A) - endif - else - FC26A0041F1093FF SetCombine(TRILERP, MODULATERGBA) - endif - if UseZ - B900031DC4112078 SetRendermode(AA_ZB_OPA_StanFOG_2) - else - B900031DC4112048 SetRendermode(AA_OPA_StanFOG_2) //acvg - endif - - Secondary - E700000000000000 pipesync() - BA00140200100000 CycleType(2c) - F800000000000026 SetFogColor(0,0,0,38) - if dltype = full - if guard - FB0000005A0000FF SetEnvColor(90,0,0,255) - FC1598045FFEDBF8 SetCombine(((Texel0-Env)*ShadeA+Env) - ((Texel0-Env)*Shade+Env), - MODULATERGB_DECALA) - else if prop - FB000000FFFFFFFF SetEnvColor(255,255,255,255) - FA00000000000000 SetPrimColor(0,0,0,0) - FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A) - endif - else - FA00000000000000 SetPrimColor(0,0,0,0) - FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A) - endif - if UseZ - B900031DC41049D8 SetRendermode(AA_Zcmp_XLU_StanFOG_2) - else - B900031DC41041C8 SetRendermode(AA_OPA_StanFOG_2)//FcBl ClrOnCvg - endif -*/ -void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) +/** + * @brief Model Type 3: GunLighting - Reduced Secondary Commands (guns) + This Type Uses Vertex Alpha for Secondary Surfaces and uses the FOG Alpha value for applying Fog/"Lighting". + * @param renderdata + * @param isPrimary + */ +void modelApplyRenderModeType3(ModelRenderData *renderdata, bool isPrimary) { - if (renderdata->unk30 == 7) + if (renderdata->PropType == PROP_TYPE_VIEWER+1) { - if (arg1) + if (isPrimary) { u8 r, g, b, a; gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); - r = _SHIFTR(renderdata->fogcolour, 24, 8); - g = _SHIFTR(renderdata->fogcolour, 16, 8); - b = _SHIFTR(renderdata->fogcolour, 8, 8); - a = _SHIFTR(renderdata->fogcolour, 0, 8); + r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPSetFogColor(renderdata->gdl++, r, g, b, a); - r = _SHIFTR(renderdata->envcolour, 24, 8); - g = _SHIFTR(renderdata->envcolour, 16, 8); - b = _SHIFTR(renderdata->envcolour, 8, 8); + r = _SHIFTR(renderdata->envcolour.word, 24, 8); + g = _SHIFTR(renderdata->envcolour.word, 16, 8); + b = _SHIFTR(renderdata->envcolour.word, 8, 8); a = 0xFF; gDPSetEnvColor(renderdata->gdl++, r, g, b, a); @@ -5465,24 +5346,24 @@ void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) } } } - else if (renderdata->unk30 == 8) + else if (renderdata->PropType == PROP_TYPE_EXPLOSION+1) { - if (arg1) + if (isPrimary) { u8 r, g, b, a; gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); - r = _SHIFTR(renderdata->fogcolour, 24, 8); - g = _SHIFTR(renderdata->fogcolour, 16, 8); - b = _SHIFTR(renderdata->fogcolour, 8, 8); - a = _SHIFTR(renderdata->fogcolour, 0, 8); + r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPSetFogColor(renderdata->gdl++, r, g, b, a); - r = _SHIFTR(renderdata->envcolour, 24, 8); - g = _SHIFTR(renderdata->envcolour, 16, 8); - b = _SHIFTR(renderdata->envcolour, 8, 8); - a = _SHIFTR(renderdata->envcolour, 0, 8); + r = _SHIFTR(renderdata->envcolour.word, 24, 8); + g = _SHIFTR(renderdata->envcolour.word, 16, 8); + b = _SHIFTR(renderdata->envcolour.word, 8, 8); + a = _SHIFTR(renderdata->envcolour.word, 0, 8); gDPSetEnvColor(renderdata->gdl++, r, g, b, a); gDPSetCombineLERP(renderdata->gdl++, TEXEL0, ENVIRONMENT, SHADE_ALPHA, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED); @@ -5497,22 +5378,22 @@ void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) } } } - else if (renderdata->unk30 == 9) + else if (renderdata->PropType == PROP_TYPE_SMOKE+1) { - if ((renderdata->envcolour & 0xFF) == 0) + if ((renderdata->envcolour.word & 0xFF) == 0) { - if (arg1) + if (isPrimary) { - u8 r = _SHIFTR(renderdata->fogcolour, 24, 8); - u8 g = _SHIFTR(renderdata->fogcolour, 16, 8); - u8 b = _SHIFTR(renderdata->fogcolour, 8, 8); - u8 a = _SHIFTR(renderdata->fogcolour, 0, 8); + u8 r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + u8 g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + u8 b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + u8 a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); gDPSetFogColor(renderdata->gdl++, r, g, b, a); gDPSetEnvColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, 0xFF); - gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour >> 8) & 0xFF); + gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour.word >> 8) & 0xFF); gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, PRIMITIVE); @@ -5539,17 +5420,17 @@ void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) } else { - if (arg1) + if (isPrimary) { - u8 r = _SHIFTR(renderdata->fogcolour, 24, 8); - u8 g = _SHIFTR(renderdata->fogcolour, 16, 8); - u8 b = _SHIFTR(renderdata->fogcolour, 8, 8); - u8 a = _SHIFTR(renderdata->fogcolour, 0, 8); + u8 r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + u8 g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + u8 b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + u8 a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); gDPSetFogColor(renderdata->gdl++, r, g, b, a); - gDPSetEnvColor(renderdata->gdl++, 0, 0, 0, renderdata->envcolour & 0xFF); + gDPSetEnvColor(renderdata->gdl++, 0, 0, 0, renderdata->envcolour.word & 0xFF); gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, 0, SHADE, ENVIRONMENT, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED); @@ -5564,7 +5445,7 @@ void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) } else { - gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour >> 8) & 0xFF); + gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour.word >> 8) & 0xFF); gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, SHADE, ENVIRONMENT, TEXEL0, 0, COMBINED, 0, SHADE, 0, 1, 0, PRIMITIVE, COMBINED); if (renderdata->zbufferenabled) @@ -5578,14 +5459,14 @@ void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) } } } - else if (renderdata->unk30 == 4) + else if (renderdata->PropType == PROP_TYPE_CHR+1) { - if (arg1) + if (isPrimary) { - u8 r = _SHIFTR(renderdata->envcolour, 24, 8); - u8 g = _SHIFTR(renderdata->envcolour, 16, 8); - u8 b = _SHIFTR(renderdata->envcolour, 8, 8); - u8 a = _SHIFTR(renderdata->envcolour, 0, 8); + u8 r = _SHIFTR(renderdata->envcolour.word, 24, 8); + u8 g = _SHIFTR(renderdata->envcolour.word, 16, 8); + u8 b = _SHIFTR(renderdata->envcolour.word, 8, 8); + u8 a = _SHIFTR(renderdata->envcolour.word, 0, 8); gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); @@ -5614,27 +5495,27 @@ void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) } } } - else if (renderdata->unk30 == 5) + else if (renderdata->PropType == PROP_TYPE_WEAPON+1) { u8 r, g, b, a; - if (arg1) + if (isPrimary) { gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); - r = _SHIFTR(renderdata->fogcolour, 24, 8); - g = _SHIFTR(renderdata->fogcolour, 16, 8); - b = _SHIFTR(renderdata->fogcolour, 8, 8); - a = _SHIFTR(renderdata->fogcolour, 0, 8); + r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPSetFogColor(renderdata->gdl++, r, g, b, a); - a = renderdata->envcolour & 0xFF; + a = renderdata->envcolour.word & 0xFF; if (a < 255) { gDPSetEnvColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, a); - if (renderdata->envcolour & 0xFF00) + if (renderdata->envcolour.word & 0xFF00) { gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, SHADE, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0); } @@ -5659,7 +5540,7 @@ void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) } else { - a = renderdata->envcolour & 0xFF; + a = renderdata->envcolour.word & 0xFF; if (a < 255) { @@ -5673,7 +5554,7 @@ void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) } else { - if (arg1) + if (isPrimary) { gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); @@ -5702,30 +5583,35 @@ void modelApplyRenderModeType3(ModelRenderData *renderdata, bool arg1) } } - -void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) +/** + * @brief Model Type 4: Normal Fog/Lighting object + This Type Uses Vertex Alpha for Secondary Surfaces and uses the FOG Alpha value for applying Fog/"Lighting". + * @param renderdata + * @param isPrimary Type of DisplayList + */ +void modelApplyRenderModeType4(ModelRenderData *renderdata, bool isPrimary) { - if (renderdata->unk30 == 7) + if (renderdata->PropType == PROP_TYPE_VIEWER+1) { u8 r, g, b, a; gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); - r = _SHIFTR(renderdata->fogcolour, 24, 8); - g = _SHIFTR(renderdata->fogcolour, 16, 8); - b = _SHIFTR(renderdata->fogcolour, 8, 8); - a = _SHIFTR(renderdata->fogcolour, 0, 8); + r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPSetFogColor(renderdata->gdl++, r, g, b, a); - r = _SHIFTR(renderdata->envcolour, 24, 8); - g = _SHIFTR(renderdata->envcolour, 16, 8); - b = _SHIFTR(renderdata->envcolour, 8, 8); + r = _SHIFTR(renderdata->envcolour.word, 24, 8); + g = _SHIFTR(renderdata->envcolour.word, 16, 8); + b = _SHIFTR(renderdata->envcolour.word, 8, 8); a = 0xFF; gDPSetEnvColor(renderdata->gdl++, r, g, b, a); gDPSetCombineLERP(renderdata->gdl++, TEXEL0, ENVIRONMENT, SHADE_ALPHA, ENVIRONMENT, TEXEL0, ENVIRONMENT, SHADE, ENVIRONMENT, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED); - if (arg1) + if (isPrimary) { if (renderdata->zbufferenabled) { @@ -5748,22 +5634,22 @@ void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) } } } - else if (renderdata->unk30 == 8) + else if (renderdata->PropType == PROP_TYPE_EXPLOSION+1) { u8 r, g, b, a; gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); - r = _SHIFTR(renderdata->fogcolour, 24, 8); - g = _SHIFTR(renderdata->fogcolour, 16, 8); - b = _SHIFTR(renderdata->fogcolour, 8, 8); - a = _SHIFTR(renderdata->fogcolour, 0, 8); + r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPSetFogColor(renderdata->gdl++, r, g, b, a); - r = _SHIFTR(renderdata->envcolour, 24, 8); - g = _SHIFTR(renderdata->envcolour, 16, 8); - b = _SHIFTR(renderdata->envcolour, 8, 8); - a = _SHIFTR(renderdata->envcolour, 0, 8); + r = _SHIFTR(renderdata->envcolour.word, 24, 8); + g = _SHIFTR(renderdata->envcolour.word, 16, 8); + b = _SHIFTR(renderdata->envcolour.word, 8, 8); + a = _SHIFTR(renderdata->envcolour.word, 0, 8); gDPSetEnvColor(renderdata->gdl++, r, g, b, a); gDPSetCombineLERP(renderdata->gdl++, TEXEL0, ENVIRONMENT, SHADE_ALPHA, ENVIRONMENT, TEXEL0, 0, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED); @@ -5777,22 +5663,22 @@ void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) gDPSetRenderMode(renderdata->gdl++, G_RM_FOG_PRIM_A, G_RM_AA_XLU_SURF2); } } - else if (renderdata->unk30 == 9) + else if (renderdata->PropType == PROP_TYPE_SMOKE+1) { - if ((renderdata->envcolour & 0xFF) == 0) + if ((renderdata->envcolour.word & 0xFF) == 0) { - u8 r = _SHIFTR(renderdata->fogcolour, 24, 8); - u8 g = _SHIFTR(renderdata->fogcolour, 16, 8); - u8 b = _SHIFTR(renderdata->fogcolour, 8, 8); - u8 a = _SHIFTR(renderdata->fogcolour, 0, 8); + u8 r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + u8 g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + u8 b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + u8 a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); gDPSetFogColor(renderdata->gdl++, r, g, b, a); gDPSetEnvColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, 0xFF); - gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour >> 8) & 0xFF); + gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, ((renderdata->envcolour.word >> 8 ) & 0xFF)); - if (arg1) + if (isPrimary) { gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, PRIMITIVE); @@ -5821,17 +5707,17 @@ void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) } else { - u8 r = _SHIFTR(renderdata->fogcolour, 24, 8); - u8 g = _SHIFTR(renderdata->fogcolour, 16, 8); - u8 b = _SHIFTR(renderdata->fogcolour, 8, 8); - u8 a = _SHIFTR(renderdata->fogcolour, 0, 8); + u8 r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + u8 g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + u8 b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + u8 a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); gDPSetFogColor(renderdata->gdl++, r, g, b, a); - gDPSetEnvColor(renderdata->gdl++, 0, 0, 0, renderdata->envcolour & 0xFF); + gDPSetEnvColor(renderdata->gdl++, 0, 0, 0, renderdata->envcolour.word & 0xFF); - if (arg1) + if (isPrimary) { gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, 0, SHADE, ENVIRONMENT, COMBINED, 0, SHADE, 0, 0, 0, 0, COMBINED); @@ -5846,7 +5732,7 @@ void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) } else { - gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour >> 8) & 0xFF); + gDPSetPrimColor(renderdata->gdl++, 0, 0, 0, 0, 0, (renderdata->envcolour.word >> 8) & 0xFF); gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, SHADE, ENVIRONMENT, TEXEL0, 0, COMBINED, 0, SHADE, 0, 1, 0, PRIMITIVE, COMBINED); if (renderdata->zbufferenabled) @@ -5860,12 +5746,12 @@ void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) } } } - else if (renderdata->unk30 == 4) + else if (renderdata->PropType == PROP_TYPE_CHR+1) { - u8 r = _SHIFTR(renderdata->envcolour, 24, 8); - u8 g = _SHIFTR(renderdata->envcolour, 16, 8); - u8 b = _SHIFTR(renderdata->envcolour, 8, 8); - u8 a = _SHIFTR(renderdata->envcolour, 0, 8); + u8 r = _SHIFTR(renderdata->envcolour.word, 24, 8); + u8 g = _SHIFTR(renderdata->envcolour.word, 16, 8); + u8 b = _SHIFTR(renderdata->envcolour.word, 8, 8); + u8 a = _SHIFTR(renderdata->envcolour.word, 0, 8); gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); @@ -5873,7 +5759,7 @@ void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2); - if (arg1) + if (isPrimary) { if (renderdata->zbufferenabled) { @@ -5896,28 +5782,28 @@ void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) } } } - else if (renderdata->unk30 == 5) + else if (renderdata->PropType == PROP_TYPE_WEAPON+1) { u8 r, g, b, a; gDPPipeSync(renderdata->gdl++); gDPSetCycleType(renderdata->gdl++, G_CYC_2CYCLE); - r = _SHIFTR(renderdata->fogcolour, 24, 8); - g = _SHIFTR(renderdata->fogcolour, 16, 8); - b = _SHIFTR(renderdata->fogcolour, 8, 8); - a = _SHIFTR(renderdata->fogcolour, 0, 8); + r = _SHIFTR(renderdata->fogcolour.word, 24, 8); + g = _SHIFTR(renderdata->fogcolour.word, 16, 8); + b = _SHIFTR(renderdata->fogcolour.word, 8, 8); + a = _SHIFTR(renderdata->fogcolour.word, 0, 8); gDPSetFogColor(renderdata->gdl++, r, g, b, a); - a = renderdata->envcolour & 0xFF; + a = renderdata->envcolour.word & 0xFF; if (a < 255) { gDPSetEnvColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, a); - if (arg1) + if (isPrimary) { - if (renderdata->envcolour & 0xFF00) + if (renderdata->envcolour.word & 0xFF00) //apply inverse vertex alpha if any { gDPSetCombineLERP(renderdata->gdl++, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, 1, SHADE, ENVIRONMENT, 0, COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0); } @@ -5952,7 +5838,7 @@ void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) gDPSetFogColor(renderdata->gdl++, 0xFF, 0xFF, 0xFF, 0x00); gDPSetCombineMode(renderdata->gdl++, G_CC_TRILERP, G_CC_MODULATEIA2); - if (arg1) + if (isPrimary) { if (renderdata->zbufferenabled) { @@ -5977,7 +5863,10 @@ void modelApplyRenderModeType4(ModelRenderData *renderdata, bool arg1) } } - +/** + * @brief Model Type 2: 2Cycle No Secondary + * @param[in,out] renderdata append cycle, CC and RM to display List + */ void modelApplyRenderModeType2(ModelRenderData *renderdata) { gDPPipeSync(renderdata->gdl++); @@ -6069,7 +5958,130 @@ void modelRenderNodeGundl(ModelRenderData* renderdata, ModelNode* arg1) } } +/* +A1 is primary = 1, secondary = 0 +Inside the T8 or whatever temporary register indicates gun or not gun (0 = gun, or UseZ = 1), for different render mode + +Bool UseZ //guns = false +Bool + + +Model Type 0: NoSetup. + type 0 Has No DL Setup and will use whaterver is currently set. + +Model Type 1: 1Cycle No Sec + E700000000000000 pipesync() + BA00140200000000 CycleType(1c) + if UseZ + B900031D00552078 SetRendermode(AA_ZB_OPA_1) //cin ain cmem amem + else + B900031D00552048 SetRendermode(AA_OPA_1) //cin ain cmem amem + end if + FC121824FF33FFFF SetCombine(MODULATERGBA) + No Secondary + +Model Type 2: 2Cycle No Sec + E700000000000000 pipesync() + BA00140200100000 CycleType(2c) + if UseZ + B900031D0C192078 SetRendermode(AA_ZB_OPA_2) // cin 0 cin 1 //colour only + else + B900031D0C192048 SetRendermode(AA_OPA_2) // cin 0 cin 1 //colour only + end if + FC26A0041F1093FF SetCombine(TRILERP, MODULATERGBA) + No Secondary +Model Type 3: GunLighting - Reduced Secondary Commands (guns) + This Type Uses Vertex Alpha for Secondary Surfaces and uses the FOG Alpha value for applying Fog/"Lighting". + Primary + E700000000000000 pipesync() + BA00140200100000 CycleType(2c) + F800000000000026 SetFogColor(0,0,0,38) + if dltype = full + if guard + FB0000005A0000FF SetEnvColor(90,0,0,255) + FC1598045FFEDBF8 SetCombine(((Texel0-Env)*ShadeA+Env) + ((Texel0-Env)*Shade+Env), + MODULATERGB_DECALA) + else if prop + FB000000FFFFFFFF SetEnvColor(255,255,255,255) + FA00000000000000 SetPrimColor(0,0,0,0) + FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A) + endif + else + FC26A0041F1093FF SetCombine(TRILERP, MODULATERGBA) + endif + if UseZ + B900031DC4112078 SetRendermode(AA_ZB_OPA_StanFOG_2) + else + B900031DC4112048 SetRendermode(AA_OPA_StanFOG_2) //acvg + endif + + Secondary + if UseZ + B900031DC41049D8 SetRendermode(AA_Zcmp_XLU_StanFOG_2) + else + B900031DC41041C8 SetRendermode(AA_OPA_StanFOG_2)//FcBl ClrOnCvg + endif + +Model Type 4: Normal Fog/Lighting object + This Type Uses Vertex Alpha for Secondary Surfaces and uses the FOG Alpha value for applying Fog/"Lighting". + Primary + E700000000000000 pipesync() + BA00140200100000 CycleType(2c) + F800000000000026 SetFogColor(0,0,0,38) + if dltype = full + if guard + FB0000005A0000FF SetEnvColor(90,0,0,255) + FC1598045FFEDBF8 SetCombine(((Texel0-Env)*ShadeA+Env) + ((Texel0-Env)*Shade+Env), + MODULATERGB_DECALA) + else if prop + FB000000FFFFFFFF SetEnvColor(255,255,255,255) + FA00000000000000 SetPrimColor(0,0,0,0) + FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A) + endif + else + FC26A0041F1093FF SetCombine(TRILERP, MODULATERGBA) + endif + if UseZ + B900031DC4112078 SetRendermode(AA_ZB_OPA_StanFOG_2) + else + B900031DC4112048 SetRendermode(AA_OPA_StanFOG_2) //acvg + endif + + Secondary + E700000000000000 pipesync() + BA00140200100000 CycleType(2c) + F800000000000026 SetFogColor(0,0,0,38) + if dltype = full + if guard + FB0000005A0000FF SetEnvColor(90,0,0,255) + FC1598045FFEDBF8 SetCombine(((Texel0-Env)*ShadeA+Env) + ((Texel0-Env)*Shade+Env), + MODULATERGB_DECALA) + else if prop + FB000000FFFFFFFF SetEnvColor(255,255,255,255) + FA00000000000000 SetPrimColor(0,0,0,0) + FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A) + endif + else + FA00000000000000 SetPrimColor(0,0,0,0) + FC26A0041F1093FB SetCombine(TRILERP, MODULATERGB_ADDPRIM_A) + endif + if UseZ + B900031DC41049D8 SetRendermode(AA_Zcmp_XLU_StanFOG_2) + else + B900031DC41041C8 SetRendermode(AA_OPA_StanFOG_2)//FcBl ClrOnCvg + endif +*/ + +/** +* 7F072A0C +* DisplayList Setups Depend on Object Type, Prop Guard or Gun. +These are applied to each part of an object at runtime and can be overridden. loading the next part will use these values once more. +GeometryMode is not in setup and is persistent accross parts. +*/ void modelRenderNodeDl(ModelRenderData *renderdata, Model *model, ModelNode *node) { union ModelRoData *rodata = node->Data; @@ -6240,7 +6252,7 @@ void dorottex(ModelRenderData *renderdata, ModelNode *node) void sub_GAME_7F073038(ModelRenderData *renderdata, struct sImageTableEntry *tconfig, s32 arg2) { - likely_generate_DL_for_image_declaration(&renderdata->gdl, tconfig, arg2, renderdata->zbufferenabled, 2); + texSelect(&renderdata->gdl, tconfig, arg2, renderdata->zbufferenabled, 2); } @@ -6711,7 +6723,7 @@ glabel doshadow /* 0A8B20 7F073FF0 AFA60080 */ sw $a2, 0x80($sp) /* 0A8B24 7F073FF4 19C00142 */ blez $t6, .L7F074500 /* 0A8B28 7F073FF8 00A03825 */ move $a3, $a1 -/* 0A8B2C 7F073FFC 3C198003 */ lui $t9, %hi(D_800363F8) +/* 0A8B2C 7F073FFC 3C198003 */ lui $t9, %hi(D_800363F8) /* 0A8B30 7F074000 273963F8 */ addiu $t9, %lo(D_800363F8) # addiu $t9, $t9, 0x63f8 /* 0A8B34 7F074004 8F210000 */ lw $at, ($t9) /* 0A8B38 7F074008 8F290004 */ lw $t1, 4($t9) @@ -6754,8 +6766,8 @@ glabel doshadow /* 0A8BC8 7F074098 318D00FF */ andi $t5, $t4, 0xff /* 0A8BCC 7F07409C 01AE0019 */ multu $t5, $t6 /* 0A8BD0 7F0740A0 00001012 */ mflo $v0 -/* 0A8BD4 7F0740A4 00000000 */ nop -/* 0A8BD8 7F0740A8 00000000 */ nop +/* 0A8BD4 7F0740A4 00000000 */ nop +/* 0A8BD8 7F0740A8 00000000 */ nop /* 0A8BDC 7F0740AC 0041001B */ divu $zero, $v0, $at /* 0A8BE0 7F0740B0 00004012 */ mflo $t0 /* 0A8BE4 7F0740B4 A3A80067 */ sb $t0, 0x67($sp) @@ -6791,7 +6803,7 @@ glabel doshadow /* 0A8C54 7F074124 46125103 */ div.s $f4, $f10, $f18 /* 0A8C58 7F074128 4600218D */ trunc.w.s $f6, $f4 /* 0A8C5C 7F07412C 44033000 */ mfc1 $v1, $f6 -/* 0A8C60 7F074130 00000000 */ nop +/* 0A8C60 7F074130 00000000 */ nop /* 0A8C64 7F074134 00036C00 */ sll $t5, $v1, 0x10 /* 0A8C68 7F074138 10000009 */ b .L7F074160 /* 0A8C6C 7F07413C 000D1C03 */ sra $v1, $t5, 0x10 @@ -6801,7 +6813,7 @@ glabel doshadow /* 0A8C78 7F074148 460A4483 */ div.s $f18, $f8, $f10 /* 0A8C7C 7F07414C 4600910D */ trunc.w.s $f4, $f18 /* 0A8C80 7F074150 44032000 */ mfc1 $v1, $f4 -/* 0A8C84 7F074154 00000000 */ nop +/* 0A8C84 7F074154 00000000 */ nop /* 0A8C88 7F074158 00034400 */ sll $t0, $v1, 0x10 /* 0A8C8C 7F07415C 00081C03 */ sra $v1, $t0, 0x10 .L7F074160: @@ -6815,17 +6827,17 @@ glabel doshadow /* 0A8CAC 7F07417C 44818000 */ mtc1 $at, $f16 /* 0A8CB0 7F074180 3C013FA0 */ li $at, 0x3FA00000 # 1.250000 /* 0A8CB4 7F074184 44810000 */ mtc1 $at, $f0 -/* 0A8CB8 7F074188 00000000 */ nop +/* 0A8CB8 7F074188 00000000 */ nop /* 0A8CBC 7F07418C 46006302 */ mul.s $f12, $f12, $f0 -/* 0A8CC0 7F074190 00000000 */ nop +/* 0A8CC0 7F074190 00000000 */ nop /* 0A8CC4 7F074194 46007382 */ mul.s $f14, $f14, $f0 /* 0A8CC8 7F074198 10000012 */ b .L7F0741E4 -/* 0A8CCC 7F07419C 00000000 */ nop +/* 0A8CCC 7F07419C 00000000 */ nop /* 0A8CD0 7F0741A0 44818000 */ mtc1 $at, $f16 .L7F0741A4: /* 0A8CD4 7F0741A4 3C014348 */ li $at, 0x43480000 # 200.000000 /* 0A8CD8 7F0741A8 4602803C */ c.lt.s $f16, $f2 -/* 0A8CDC 7F0741AC 00000000 */ nop +/* 0A8CDC 7F0741AC 00000000 */ nop /* 0A8CE0 7F0741B0 45020005 */ bc1fl .L7F0741C8 /* 0A8CE4 7F0741B4 46028201 */ sub.s $f8, $f16, $f2 /* 0A8CE8 7F0741B8 44807000 */ mtc1 $zero, $f14 @@ -6834,12 +6846,12 @@ glabel doshadow /* 0A8CF4 7F0741C4 46028201 */ sub.s $f8, $f16, $f2 .L7F0741C8: /* 0A8CF8 7F0741C8 44815000 */ mtc1 $at, $f10 -/* 0A8CFC 7F0741CC 00000000 */ nop +/* 0A8CFC 7F0741CC 00000000 */ nop /* 0A8D00 7F0741D0 460A4003 */ div.s $f0, $f8, $f10 /* 0A8D04 7F0741D4 46006302 */ mul.s $f12, $f12, $f0 -/* 0A8D08 7F0741D8 00000000 */ nop +/* 0A8D08 7F0741D8 00000000 */ nop /* 0A8D0C 7F0741DC 46007382 */ mul.s $f14, $f14, $f0 -/* 0A8D10 7F0741E0 00000000 */ nop +/* 0A8D10 7F0741E0 00000000 */ nop .L7F0741E4: /* 0A8D14 7F0741E4 8C42608C */ lw $v0, %lo(vtxallocator)($v0) /* 0A8D18 7F0741E8 5440000F */ bnezl $v0, .L7F074228 @@ -6850,7 +6862,7 @@ glabel doshadow /* 0A8D2C 7F0741FC 0C0033D1 */ jal osSyncPrintf /* 0A8D30 7F074200 E7AE0044 */ swc1 $f14, 0x44($sp) /* 0A8D34 7F074204 0FC1B11B */ jal return_null -/* 0A8D38 7F074208 00000000 */ nop +/* 0A8D38 7F074208 00000000 */ nop /* 0A8D3C 7F07420C 3C028003 */ lui $v0, %hi(vtxallocator) /* 0A8D40 7F074210 8C42608C */ lw $v0, %lo(vtxallocator)($v0) /* 0A8D44 7F074214 87A30052 */ lh $v1, 0x52($sp) @@ -6906,26 +6918,26 @@ glabel doshadow /* 0A8E08 7F0742D8 460C9101 */ sub.s $f4, $f18, $f12 /* 0A8E0C 7F0742DC 4600218D */ trunc.w.s $f6, $f4 /* 0A8E10 7F0742E0 440C3000 */ mfc1 $t4, $f6 -/* 0A8E14 7F0742E4 00000000 */ nop +/* 0A8E14 7F0742E4 00000000 */ nop /* 0A8E18 7F0742E8 A44C0000 */ sh $t4, ($v0) /* 0A8E1C 7F0742EC C4C80004 */ lwc1 $f8, 4($a2) /* 0A8E20 7F0742F0 460E4281 */ sub.s $f10, $f8, $f14 /* 0A8E24 7F0742F4 4600548D */ trunc.w.s $f18, $f10 /* 0A8E28 7F0742F8 440D9000 */ mfc1 $t5, $f18 -/* 0A8E2C 7F0742FC 00000000 */ nop +/* 0A8E2C 7F0742FC 00000000 */ nop /* 0A8E30 7F074300 A44D0004 */ sh $t5, 4($v0) /* 0A8E34 7F074304 C4C40000 */ lwc1 $f4, ($a2) /* 0A8E38 7F074308 A4430012 */ sh $v1, 0x12($v0) /* 0A8E3C 7F07430C 460C2181 */ sub.s $f6, $f4, $f12 /* 0A8E40 7F074310 4600320D */ trunc.w.s $f8, $f6 /* 0A8E44 7F074314 440E4000 */ mfc1 $t6, $f8 -/* 0A8E48 7F074318 00000000 */ nop +/* 0A8E48 7F074318 00000000 */ nop /* 0A8E4C 7F07431C A44E0010 */ sh $t6, 0x10($v0) /* 0A8E50 7F074320 C4CA0004 */ lwc1 $f10, 4($a2) /* 0A8E54 7F074324 460E5480 */ add.s $f18, $f10, $f14 /* 0A8E58 7F074328 4600910D */ trunc.w.s $f4, $f18 /* 0A8E5C 7F07432C 44092000 */ mfc1 $t1, $f4 -/* 0A8E60 7F074330 00000000 */ nop +/* 0A8E60 7F074330 00000000 */ nop /* 0A8E64 7F074334 A4490014 */ sh $t1, 0x14($v0) /* 0A8E68 7F074338 C4C60000 */ lwc1 $f6, ($a2) /* 0A8E6C 7F07433C A4430022 */ sh $v1, 0x22($v0) @@ -6934,26 +6946,26 @@ glabel doshadow /* 0A8E78 7F074348 35291406 */ ori $t1, (0xBC001406 & 0xFFFF) # ori $t1, $t1, 0x1406 /* 0A8E7C 7F07434C 4600428D */ trunc.w.s $f10, $f8 /* 0A8E80 7F074350 44195000 */ mfc1 $t9, $f10 -/* 0A8E84 7F074354 00000000 */ nop +/* 0A8E84 7F074354 00000000 */ nop /* 0A8E88 7F074358 A4590020 */ sh $t9, 0x20($v0) /* 0A8E8C 7F07435C C4D20004 */ lwc1 $f18, 4($a2) /* 0A8E90 7F074360 460E9100 */ add.s $f4, $f18, $f14 /* 0A8E94 7F074364 4600218D */ trunc.w.s $f6, $f4 /* 0A8E98 7F074368 440C3000 */ mfc1 $t4, $f6 -/* 0A8E9C 7F07436C 00000000 */ nop +/* 0A8E9C 7F07436C 00000000 */ nop /* 0A8EA0 7F074370 A44C0024 */ sh $t4, 0x24($v0) /* 0A8EA4 7F074374 C4C80000 */ lwc1 $f8, ($a2) /* 0A8EA8 7F074378 A4430032 */ sh $v1, 0x32($v0) /* 0A8EAC 7F07437C 460C4280 */ add.s $f10, $f8, $f12 /* 0A8EB0 7F074380 4600548D */ trunc.w.s $f18, $f10 /* 0A8EB4 7F074384 440D9000 */ mfc1 $t5, $f18 -/* 0A8EB8 7F074388 00000000 */ nop +/* 0A8EB8 7F074388 00000000 */ nop /* 0A8EBC 7F07438C A44D0030 */ sh $t5, 0x30($v0) /* 0A8EC0 7F074390 C4C40004 */ lwc1 $f4, 4($a2) /* 0A8EC4 7F074394 460E2181 */ sub.s $f6, $f4, $f14 /* 0A8EC8 7F074398 4600320D */ trunc.w.s $f8, $f6 /* 0A8ECC 7F07439C 440E4000 */ mfc1 $t6, $f8 -/* 0A8ED0 7F0743A0 00000000 */ nop +/* 0A8ED0 7F0743A0 00000000 */ nop /* 0A8ED4 7F0743A4 A44E0034 */ sh $t6, 0x34($v0) /* 0A8ED8 7F0743A8 8E03000C */ lw $v1, 0xc($s0) /* 0A8EDC 7F0743AC 24680008 */ addiu $t0, $v1, 8 @@ -7048,7 +7060,7 @@ glabel doshadow /* 0A9034 7F074504 8FB00018 */ lw $s0, 0x18($sp) /* 0A9038 7F074508 27BD0078 */ addiu $sp, $sp, 0x78 /* 0A903C 7F07450C 03E00008 */ jr $ra -/* 0A9040 7F074510 00000000 */ nop +/* 0A9040 7F074510 00000000 */ nop ) #endif #ifdef VERSION_EU @@ -7108,8 +7120,8 @@ glabel doshadow /* 0A6B9C 7F0741AC 31AE00FF */ andi $t6, $t5, 0xff /* 0A6BA0 7F0741B0 01CF0019 */ multu $t6, $t7 /* 0A6BA4 7F0741B4 00001012 */ mflo $v0 -/* 0A6BA8 7F0741B8 00000000 */ nop -/* 0A6BAC 7F0741BC 00000000 */ nop +/* 0A6BA8 7F0741B8 00000000 */ nop +/* 0A6BAC 7F0741BC 00000000 */ nop /* 0A6BB0 7F0741C0 0041001B */ divu $zero, $v0, $at /* 0A6BB4 7F0741C4 0000C012 */ mflo $t8 /* 0A6BB8 7F0741C8 A3B80067 */ sb $t8, 0x67($sp) @@ -7145,7 +7157,7 @@ glabel doshadow /* 0A6C28 7F074238 46125103 */ div.s $f4, $f10, $f18 /* 0A6C2C 7F07423C 4600218D */ trunc.w.s $f6, $f4 /* 0A6C30 7F074240 44033000 */ mfc1 $v1, $f6 -/* 0A6C34 7F074244 00000000 */ nop +/* 0A6C34 7F074244 00000000 */ nop /* 0A6C38 7F074248 00037C00 */ sll $t7, $v1, 0x10 /* 0A6C3C 7F07424C 10000009 */ b .L7F074274 /* 0A6C40 7F074250 000F1C03 */ sra $v1, $t7, 0x10 @@ -7155,7 +7167,7 @@ glabel doshadow /* 0A6C4C 7F07425C 460A4483 */ div.s $f18, $f8, $f10 /* 0A6C50 7F074260 4600910D */ trunc.w.s $f4, $f18 /* 0A6C54 7F074264 44032000 */ mfc1 $v1, $f4 -/* 0A6C58 7F074268 00000000 */ nop +/* 0A6C58 7F074268 00000000 */ nop /* 0A6C5C 7F07426C 0003CC00 */ sll $t9, $v1, 0x10 /* 0A6C60 7F074270 00191C03 */ sra $v1, $t9, 0x10 .L7F074274: @@ -7164,22 +7176,22 @@ glabel doshadow /* 0A6C6C 7F07427C 3C014396 */ li $at, 0x43960000 # 300.000000 /* 0A6C70 7F074280 3C198003 */ lui $t9, %hi(vtxallocator) # $t9, 0x8003 /* 0A6C74 7F074284 4606703C */ c.lt.s $f14, $f6 -/* 0A6C78 7F074288 00000000 */ nop +/* 0A6C78 7F074288 00000000 */ nop /* 0A6C7C 7F07428C 4502000A */ bc1fl .L7F0742B8 /* 0A6C80 7F074290 44818000 */ mtc1 $at, $f16 /* 0A6C84 7F074294 3C013FA0 */ li $at, 0x3FA00000 # 1.250000 /* 0A6C88 7F074298 44810000 */ mtc1 $at, $f0 -/* 0A6C8C 7F07429C 00000000 */ nop +/* 0A6C8C 7F07429C 00000000 */ nop /* 0A6C90 7F0742A0 46001082 */ mul.s $f2, $f2, $f0 -/* 0A6C94 7F0742A4 00000000 */ nop +/* 0A6C94 7F0742A4 00000000 */ nop /* 0A6C98 7F0742A8 46006302 */ mul.s $f12, $f12, $f0 /* 0A6C9C 7F0742AC 10000012 */ b .L7F0742F8 -/* 0A6CA0 7F0742B0 00000000 */ nop +/* 0A6CA0 7F0742B0 00000000 */ nop /* 0A6CA4 7F0742B4 44818000 */ mtc1 $at, $f16 .L7F0742B8: /* 0A6CA8 7F0742B8 3C014348 */ li $at, 0x43480000 # 200.000000 /* 0A6CAC 7F0742BC 460E803C */ c.lt.s $f16, $f14 -/* 0A6CB0 7F0742C0 00000000 */ nop +/* 0A6CB0 7F0742C0 00000000 */ nop /* 0A6CB4 7F0742C4 45020005 */ bc1fl .L7F0742DC /* 0A6CB8 7F0742C8 460E8201 */ sub.s $f8, $f16, $f14 /* 0A6CBC 7F0742CC 44806000 */ mtc1 $zero, $f12 @@ -7188,12 +7200,12 @@ glabel doshadow /* 0A6CC8 7F0742D8 460E8201 */ sub.s $f8, $f16, $f14 .L7F0742DC: /* 0A6CCC 7F0742DC 44815000 */ mtc1 $at, $f10 -/* 0A6CD0 7F0742E0 00000000 */ nop +/* 0A6CD0 7F0742E0 00000000 */ nop /* 0A6CD4 7F0742E4 460A4003 */ div.s $f0, $f8, $f10 /* 0A6CD8 7F0742E8 46001082 */ mul.s $f2, $f2, $f0 -/* 0A6CDC 7F0742EC 00000000 */ nop +/* 0A6CDC 7F0742EC 00000000 */ nop /* 0A6CE0 7F0742F0 46006302 */ mul.s $f12, $f12, $f0 -/* 0A6CE4 7F0742F4 00000000 */ nop +/* 0A6CE4 7F0742F4 00000000 */ nop .L7F0742F8: /* 0A6CE8 7F0742F8 8F3915DC */ lw $t9, %lo(vtxallocator)($t9) /* 0A6CEC 7F0742FC A7A30052 */ sh $v1, 0x52($sp) @@ -7245,52 +7257,52 @@ glabel doshadow /* 0A6DA4 7F0743B4 35AD1406 */ ori $t5, (0xBC001406 & 0xFFFF) # ori $t5, $t5, 0x1406 /* 0A6DA8 7F0743B8 4600218D */ trunc.w.s $f6, $f4 /* 0A6DAC 7F0743BC 440E3000 */ mfc1 $t6, $f6 -/* 0A6DB0 7F0743C0 00000000 */ nop +/* 0A6DB0 7F0743C0 00000000 */ nop /* 0A6DB4 7F0743C4 A44E0000 */ sh $t6, ($v0) /* 0A6DB8 7F0743C8 C4C80004 */ lwc1 $f8, 4($a2) /* 0A6DBC 7F0743CC 460C4281 */ sub.s $f10, $f8, $f12 /* 0A6DC0 7F0743D0 4600548D */ trunc.w.s $f18, $f10 /* 0A6DC4 7F0743D4 440A9000 */ mfc1 $t2, $f18 -/* 0A6DC8 7F0743D8 00000000 */ nop +/* 0A6DC8 7F0743D8 00000000 */ nop /* 0A6DCC 7F0743DC A44A0004 */ sh $t2, 4($v0) /* 0A6DD0 7F0743E0 C4C40000 */ lwc1 $f4, ($a2) /* 0A6DD4 7F0743E4 A4430012 */ sh $v1, 0x12($v0) /* 0A6DD8 7F0743E8 46022181 */ sub.s $f6, $f4, $f2 /* 0A6DDC 7F0743EC 4600320D */ trunc.w.s $f8, $f6 /* 0A6DE0 7F0743F0 44194000 */ mfc1 $t9, $f8 -/* 0A6DE4 7F0743F4 00000000 */ nop +/* 0A6DE4 7F0743F4 00000000 */ nop /* 0A6DE8 7F0743F8 A4590010 */ sh $t9, 0x10($v0) /* 0A6DEC 7F0743FC C4CA0004 */ lwc1 $f10, 4($a2) /* 0A6DF0 7F074400 460C5480 */ add.s $f18, $f10, $f12 /* 0A6DF4 7F074404 4600910D */ trunc.w.s $f4, $f18 /* 0A6DF8 7F074408 440C2000 */ mfc1 $t4, $f4 -/* 0A6DFC 7F07440C 00000000 */ nop +/* 0A6DFC 7F07440C 00000000 */ nop /* 0A6E00 7F074410 A44C0014 */ sh $t4, 0x14($v0) /* 0A6E04 7F074414 C4C60000 */ lwc1 $f6, ($a2) /* 0A6E08 7F074418 A4430022 */ sh $v1, 0x22($v0) /* 0A6E0C 7F07441C 46023200 */ add.s $f8, $f6, $f2 /* 0A6E10 7F074420 4600428D */ trunc.w.s $f10, $f8 /* 0A6E14 7F074424 440F5000 */ mfc1 $t7, $f10 -/* 0A6E18 7F074428 00000000 */ nop +/* 0A6E18 7F074428 00000000 */ nop /* 0A6E1C 7F07442C A44F0020 */ sh $t7, 0x20($v0) /* 0A6E20 7F074430 C4D20004 */ lwc1 $f18, 4($a2) /* 0A6E24 7F074434 460C9100 */ add.s $f4, $f18, $f12 /* 0A6E28 7F074438 4600218D */ trunc.w.s $f6, $f4 /* 0A6E2C 7F07443C 44093000 */ mfc1 $t1, $f6 -/* 0A6E30 7F074440 00000000 */ nop +/* 0A6E30 7F074440 00000000 */ nop /* 0A6E34 7F074444 A4490024 */ sh $t1, 0x24($v0) /* 0A6E38 7F074448 C4C80000 */ lwc1 $f8, ($a2) /* 0A6E3C 7F07444C A4430032 */ sh $v1, 0x32($v0) /* 0A6E40 7F074450 46024280 */ add.s $f10, $f8, $f2 /* 0A6E44 7F074454 4600548D */ trunc.w.s $f18, $f10 /* 0A6E48 7F074458 44189000 */ mfc1 $t8, $f18 -/* 0A6E4C 7F07445C 00000000 */ nop +/* 0A6E4C 7F07445C 00000000 */ nop /* 0A6E50 7F074460 A4580030 */ sh $t8, 0x30($v0) /* 0A6E54 7F074464 C4C40004 */ lwc1 $f4, 4($a2) /* 0A6E58 7F074468 460C2181 */ sub.s $f6, $f4, $f12 /* 0A6E5C 7F07446C 4600320D */ trunc.w.s $f8, $f6 /* 0A6E60 7F074470 440B4000 */ mfc1 $t3, $f8 -/* 0A6E64 7F074474 00000000 */ nop +/* 0A6E64 7F074474 00000000 */ nop /* 0A6E68 7F074478 A44B0034 */ sh $t3, 0x34($v0) /* 0A6E6C 7F07447C 8E03000C */ lw $v1, 0xc($s0) /* 0A6E70 7F074480 246C0008 */ addiu $t4, $v1, 8 @@ -7385,7 +7397,7 @@ glabel doshadow /* 0A6FC8 7F0745D8 8FB00018 */ lw $s0, 0x18($sp) /* 0A6FCC 7F0745DC 27BD0078 */ addiu $sp, $sp, 0x78 /* 0A6FD0 7F0745E0 03E00008 */ jr $ra -/* 0A6FD4 7F0745E4 00000000 */ nop +/* 0A6FD4 7F0745E4 00000000 */ nop ) #endif #endif @@ -7506,21 +7518,21 @@ glabel subdraw /* 0A91E4 7F0746B4 0C0033D1 */ jal osSyncPrintf /* 0A91E8 7F0746B8 24844AB4 */ addiu $a0, %lo(aSubdrawNoGfxlist) # addiu $a0, $a0, 0x4ab4 /* 0A91EC 7F0746BC 0FC1B11B */ jal return_null -/* 0A91F0 7F0746C0 00000000 */ nop +/* 0A91F0 7F0746C0 00000000 */ nop /* 0A91F4 7F0746C4 8E420008 */ lw $v0, 8($s2) .L7F0746C8: /* 0A91F8 7F0746C8 8C4F001C */ lw $t7, 0x1c($v0) /* 0A91FC 7F0746CC 3C048005 */ lui $a0, %hi(aSubdrawObjectNotInitialised0xX) /* 0A9200 7F0746D0 24844ACC */ addiu $a0, %lo(aSubdrawObjectNotInitialised0xX) # addiu $a0, $a0, 0x4acc /* 0A9204 7F0746D4 11E00003 */ beqz $t7, .L7F0746E4 -/* 0A9208 7F0746D8 00000000 */ nop +/* 0A9208 7F0746D8 00000000 */ nop /* 0A920C 7F0746DC 10000006 */ b .L7F0746F8 /* 0A9210 7F0746E0 8E22000C */ lw $v0, 0xc($s1) .L7F0746E4: /* 0A9214 7F0746E4 0C0033D1 */ jal osSyncPrintf /* 0A9218 7F0746E8 00402825 */ move $a1, $v0 /* 0A921C 7F0746EC 0FC1B11B */ jal return_null -/* 0A9220 7F0746F0 00000000 */ nop +/* 0A9220 7F0746F0 00000000 */ nop /* 0A9224 7F0746F4 8E22000C */ lw $v0, 0xc($s1) .L7F0746F8: /* 0A9228 7F0746F8 24580008 */ addiu $t8, $v0, 8 @@ -7541,12 +7553,12 @@ glabel subdraw /* 0A9260 7F074730 02003025 */ move $a2, $s0 /* 0A9264 7F074734 8E020014 */ lw $v0, 0x14($s0) /* 0A9268 7F074738 10400003 */ beqz $v0, .L7F074748 -/* 0A926C 7F07473C 00000000 */ nop +/* 0A926C 7F07473C 00000000 */ nop /* 0A9270 7F074740 1000000B */ b .L7F074770 /* 0A9274 7F074744 00408025 */ move $s0, $v0 .L7F074748: /* 0A9278 7F074748 12000009 */ beqz $s0, .L7F074770 -/* 0A927C 7F07474C 00000000 */ nop +/* 0A927C 7F07474C 00000000 */ nop /* 0A9280 7F074750 8E02000C */ lw $v0, 0xc($s0) .L7F074754: /* 0A9284 7F074754 50400004 */ beql $v0, $zero, .L7F074768 @@ -7601,12 +7613,12 @@ glabel subdraw /* 0A71A8 7F0747B8 02003025 */ move $a2, $s0 /* 0A71AC 7F0747BC 8E020014 */ lw $v0, 0x14($s0) /* 0A71B0 7F0747C0 10400003 */ beqz $v0, .L7F0747D0 -/* 0A71B4 7F0747C4 00000000 */ nop +/* 0A71B4 7F0747C4 00000000 */ nop /* 0A71B8 7F0747C8 1000000B */ b .L7F0747F8 /* 0A71BC 7F0747CC 00408025 */ move $s0, $v0 .L7F0747D0: /* 0A71C0 7F0747D0 12000009 */ beqz $s0, .L7F0747F8 -/* 0A71C4 7F0747D4 00000000 */ nop +/* 0A71C4 7F0747D4 00000000 */ nop /* 0A71C8 7F0747D8 8E02000C */ lw $v0, 0xc($s0) .L7F0747DC: /* 0A71CC 7F0747DC 50400004 */ beql $v0, $zero, .L7F0747F0 @@ -7632,7 +7644,7 @@ glabel subdraw #endif -void sub_GAME_7F074790(struct unk_joint_list* arg0, Model* arg1) +void sub_GAME_7F074790(ModelRenderData* arg0, Model* arg1) { subcalcpos(arg1); subcalcmatrices(arg0, arg1); @@ -7652,7 +7664,7 @@ glabel sub_GAME_7F0747D0 /* 0A9304 7F0747D4 C4A20004 */ lwc1 $f2, 4($a1) /* 0A9308 7F0747D8 27BDFF48 */ addiu $sp, $sp, -0xb8 /* 0A930C 7F0747DC 46000402 */ mul.s $f16, $f0, $f0 -/* 0A9310 7F0747E0 00000000 */ nop +/* 0A9310 7F0747E0 00000000 */ nop /* 0A9314 7F0747E4 46021102 */ mul.s $f4, $f2, $f2 /* 0A9318 7F0747E8 E7A400B0 */ swc1 $f4, 0xb0($sp) /* 0A931C 7F0747EC C4AC0008 */ lwc1 $f12, 8($a1) @@ -7719,11 +7731,11 @@ glabel sub_GAME_7F0747D0 /* 0A9410 7F0748E0 46000007 */ neg.s $f0, $f0 .L7F0748E4: /* 0A9414 7F0748E4 460C903C */ c.lt.s $f18, $f12 -/* 0A9418 7F0748E8 00000000 */ nop +/* 0A9418 7F0748E8 00000000 */ nop /* 0A941C 7F0748EC 45020008 */ bc1fl .L7F074910 /* 0A9420 7F0748F0 4612003C */ c.lt.s $f0, $f18 /* 0A9424 7F0748F4 460C003C */ c.lt.s $f0, $f12 -/* 0A9428 7F0748F8 00000000 */ nop +/* 0A9428 7F0748F8 00000000 */ nop /* 0A942C 7F0748FC 45020004 */ bc1fl .L7F074910 /* 0A9430 7F074900 4612003C */ c.lt.s $f0, $f18 /* 0A9434 7F074904 100000D6 */ b .L7F074C60 @@ -7791,11 +7803,11 @@ glabel sub_GAME_7F0747D0 /* 0A9524 7F0749F4 46000007 */ neg.s $f0, $f0 .L7F0749F8: /* 0A9528 7F0749F8 460C803C */ c.lt.s $f16, $f12 -/* 0A952C 7F0749FC 00000000 */ nop +/* 0A952C 7F0749FC 00000000 */ nop /* 0A9530 7F074A00 45020008 */ bc1fl .L7F074A24 /* 0A9534 7F074A04 4610003C */ c.lt.s $f0, $f16 /* 0A9538 7F074A08 460C003C */ c.lt.s $f0, $f12 -/* 0A953C 7F074A0C 00000000 */ nop +/* 0A953C 7F074A0C 00000000 */ nop /* 0A9540 7F074A10 45020004 */ bc1fl .L7F074A24 /* 0A9544 7F074A14 4610003C */ c.lt.s $f0, $f16 /* 0A9548 7F074A18 10000091 */ b .L7F074C60 @@ -7804,21 +7816,21 @@ glabel sub_GAME_7F0747D0 .L7F074A24: /* 0A9554 7F074A24 C7A80094 */ lwc1 $f8, 0x94($sp) /* 0A9558 7F074A28 45000004 */ bc1f .L7F074A3C -/* 0A955C 7F074A2C 00000000 */ nop +/* 0A955C 7F074A2C 00000000 */ nop /* 0A9560 7F074A30 46008086 */ mov.s $f2, $f16 /* 0A9564 7F074A34 46000406 */ mov.s $f16, $f0 /* 0A9568 7F074A38 46001006 */ mov.s $f0, $f2 .L7F074A3C: /* 0A956C 7F074A3C 46048302 */ mul.s $f12, $f16, $f4 -/* 0A9570 7F074A40 00000000 */ nop +/* 0A9570 7F074A40 00000000 */ nop /* 0A9574 7F074A44 460E9082 */ mul.s $f2, $f18, $f14 /* 0A9578 7F074A48 4602603C */ c.lt.s $f12, $f2 -/* 0A957C 7F074A4C 00000000 */ nop +/* 0A957C 7F074A4C 00000000 */ nop /* 0A9580 7F074A50 4500000E */ bc1f .L7F074A8C -/* 0A9584 7F074A54 00000000 */ nop +/* 0A9584 7F074A54 00000000 */ nop /* 0A9588 7F074A58 46040302 */ mul.s $f12, $f0, $f4 /* 0A958C 7F074A5C 4602603C */ c.lt.s $f12, $f2 -/* 0A9590 7F074A60 00000000 */ nop +/* 0A9590 7F074A60 00000000 */ nop /* 0A9594 7F074A64 45020004 */ bc1fl .L7F074A78 /* 0A9598 7F074A68 C7A60094 */ lwc1 $f6, 0x94($sp) /* 0A959C 7F074A6C 1000007C */ b .L7F074C60 @@ -7833,7 +7845,7 @@ glabel sub_GAME_7F0747D0 .L7F074A8C: /* 0A95BC 7F074A8C 460E4082 */ mul.s $f2, $f8, $f14 /* 0A95C0 7F074A90 460C103C */ c.lt.s $f2, $f12 -/* 0A95C4 7F074A94 00000000 */ nop +/* 0A95C4 7F074A94 00000000 */ nop /* 0A95C8 7F074A98 45020004 */ bc1fl .L7F074AAC /* 0A95CC 7F074A9C C7A4009C */ lwc1 $f4, 0x9c($sp) /* 0A95D0 7F074AA0 1000006F */ b .L7F074C60 @@ -7843,7 +7855,7 @@ glabel sub_GAME_7F0747D0 /* 0A95DC 7F074AAC E7B0005C */ swc1 $f16, 0x5c($sp) /* 0A95E0 7F074AB0 E7AE0058 */ swc1 $f14, 0x58($sp) /* 0A95E4 7F074AB4 46040302 */ mul.s $f12, $f0, $f4 -/* 0A95E8 7F074AB8 00000000 */ nop +/* 0A95E8 7F074AB8 00000000 */ nop .L7F074ABC: /* 0A95EC 7F074ABC 460C103C */ c.lt.s $f2, $f12 /* 0A95F0 7F074AC0 C7AA0094 */ lwc1 $f10, 0x94($sp) @@ -7860,7 +7872,7 @@ glabel sub_GAME_7F0747D0 /* 0A9614 7F074AE4 C4A00020 */ lwc1 $f0, 0x20($a1) /* 0A9618 7F074AE8 C4A20024 */ lwc1 $f2, 0x24($a1) /* 0A961C 7F074AEC 46000482 */ mul.s $f18, $f0, $f0 -/* 0A9620 7F074AF0 00000000 */ nop +/* 0A9620 7F074AF0 00000000 */ nop /* 0A9624 7F074AF4 46021202 */ mul.s $f8, $f2, $f2 /* 0A9628 7F074AF8 E7A80040 */ swc1 $f8, 0x40($sp) /* 0A962C 7F074AFC C4AC0028 */ lwc1 $f12, 0x28($a1) @@ -7891,7 +7903,7 @@ glabel sub_GAME_7F0747D0 /* 0A9690 7F074B60 E7A8002C */ swc1 $f8, 0x2c($sp) /* 0A9694 7F074B64 46041182 */ mul.s $f6, $f2, $f4 /* 0A9698 7F074B68 44801000 */ mtc1 $zero, $f2 -/* 0A969C 7F074B6C 00000000 */ nop +/* 0A969C 7F074B6C 00000000 */ nop /* 0A96A0 7F074B70 4602403C */ c.lt.s $f8, $f2 /* 0A96A4 7F074B74 46065100 */ add.s $f4, $f10, $f6 /* 0A96A8 7F074B78 C7AA0008 */ lwc1 $f10, 8($sp) @@ -7915,7 +7927,7 @@ glabel sub_GAME_7F0747D0 /* 0A96EC 7F074BBC 45020008 */ bc1fl .L7F074BE0 /* 0A96F0 7F074BC0 460E003C */ c.lt.s $f0, $f14 /* 0A96F4 7F074BC4 4602003C */ c.lt.s $f0, $f2 -/* 0A96F8 7F074BC8 00000000 */ nop +/* 0A96F8 7F074BC8 00000000 */ nop /* 0A96FC 7F074BCC 45020004 */ bc1fl .L7F074BE0 /* 0A9700 7F074BD0 460E003C */ c.lt.s $f0, $f14 /* 0A9704 7F074BD4 10000022 */ b .L7F074C60 @@ -7924,33 +7936,33 @@ glabel sub_GAME_7F0747D0 .L7F074BE0: /* 0A9710 7F074BE0 C7A60058 */ lwc1 $f6, 0x58($sp) /* 0A9714 7F074BE4 45000004 */ bc1f .L7F074BF8 -/* 0A9718 7F074BE8 00000000 */ nop +/* 0A9718 7F074BE8 00000000 */ nop /* 0A971C 7F074BEC 46007086 */ mov.s $f2, $f14 /* 0A9720 7F074BF0 46000386 */ mov.s $f14, $f0 /* 0A9724 7F074BF4 46001006 */ mov.s $f0, $f2 .L7F074BF8: /* 0A9728 7F074BF8 460C2082 */ mul.s $f2, $f4, $f12 -/* 0A972C 7F074BFC 00000000 */ nop +/* 0A972C 7F074BFC 00000000 */ nop /* 0A9730 7F074C00 46087282 */ mul.s $f10, $f14, $f8 /* 0A9734 7F074C04 460A103C */ c.lt.s $f2, $f10 -/* 0A9738 7F074C08 00000000 */ nop +/* 0A9738 7F074C08 00000000 */ nop /* 0A973C 7F074C0C 4500000C */ bc1f .L7F074C40 -/* 0A9740 7F074C10 00000000 */ nop +/* 0A9740 7F074C10 00000000 */ nop /* 0A9744 7F074C14 C7A60054 */ lwc1 $f6, 0x54($sp) /* 0A9748 7F074C18 C7A80050 */ lwc1 $f8, 0x50($sp) /* 0A974C 7F074C1C 460C3102 */ mul.s $f4, $f6, $f12 -/* 0A9750 7F074C20 00000000 */ nop +/* 0A9750 7F074C20 00000000 */ nop /* 0A9754 7F074C24 46087282 */ mul.s $f10, $f14, $f8 /* 0A9758 7F074C28 460A203C */ c.lt.s $f4, $f10 -/* 0A975C 7F074C2C 00000000 */ nop +/* 0A975C 7F074C2C 00000000 */ nop /* 0A9760 7F074C30 4500000A */ bc1f .L7F074C5C -/* 0A9764 7F074C34 00000000 */ nop +/* 0A9764 7F074C34 00000000 */ nop /* 0A9768 7F074C38 10000009 */ b .L7F074C60 /* 0A976C 7F074C3C 00001025 */ move $v0, $zero .L7F074C40: /* 0A9770 7F074C40 46060202 */ mul.s $f8, $f0, $f6 /* 0A9774 7F074C44 4602403C */ c.lt.s $f8, $f2 -/* 0A9778 7F074C48 00000000 */ nop +/* 0A9778 7F074C48 00000000 */ nop /* 0A977C 7F074C4C 45020004 */ bc1fl .L7F074C60 /* 0A9780 7F074C50 24020001 */ li $v0, 1 /* 0A9784 7F074C54 10000002 */ b .L7F074C60 @@ -7991,7 +8003,7 @@ glabel sub_GAME_7F074C68 /* 0A97CC 7F074C9C 8FBF0014 */ lw $ra, 0x14($sp) /* 0A97D0 7F074CA0 27BD0020 */ addiu $sp, $sp, 0x20 /* 0A97D4 7F074CA4 03E00008 */ jr $ra -/* 0A97D8 7F074CA8 00000000 */ nop +/* 0A97D8 7F074CA8 00000000 */ nop ) #endif @@ -8018,7 +8030,7 @@ glabel sub_GAME_7F074CAC /* 0A97FC 7F074CCC AFA500B4 */ sw $a1, 0xb4($sp) /* 0A9800 7F074CD0 0FC1B198 */ jal modelFindNodeMtx /* 0A9804 7F074CD4 AFA800AC */ sw $t0, 0xac($sp) -/* 0A9808 7F074CD8 3C0B8003 */ lui $t3, %hi(D_80036408) +/* 0A9808 7F074CD8 3C0B8003 */ lui $t3, %hi(D_80036408) /* 0A980C 7F074CDC 256B6408 */ addiu $t3, %lo(D_80036408) # addiu $t3, $t3, 0x6408 /* 0A9810 7F074CE0 8D610000 */ lw $at, ($t3) /* 0A9814 7F074CE4 8FA700BC */ lw $a3, 0xbc($sp) @@ -8189,7 +8201,7 @@ glabel sub_GAME_7F074CAC /* 0A9A98 7F074F68 C7AA0020 */ lwc1 $f10, 0x20($sp) /* 0A9A9C 7F074F6C 46085280 */ add.s $f10, $f10, $f8 /* 0A9AA0 7F074F70 460C5082 */ mul.s $f2, $f10, $f12 -/* 0A9AA4 7F074F74 00000000 */ nop +/* 0A9AA4 7F074F74 00000000 */ nop /* 0A9AA8 7F074F78 46020202 */ mul.s $f8, $f0, $f2 /* 0A9AAC 7F074F7C 46044280 */ add.s $f10, $f8, $f4 /* 0A9AB0 7F074F80 E7AA009C */ swc1 $f10, 0x9c($sp) @@ -8220,7 +8232,7 @@ glabel sub_GAME_7F074CAC /* 0A9B14 7F074FE4 C7A60030 */ lwc1 $f6, 0x30($sp) /* 0A9B18 7F074FE8 46043180 */ add.s $f6, $f6, $f4 /* 0A9B1C 7F074FEC 460C3382 */ mul.s $f14, $f6, $f12 -/* 0A9B20 7F074FF0 00000000 */ nop +/* 0A9B20 7F074FF0 00000000 */ nop /* 0A9B24 7F074FF4 460E0102 */ mul.s $f4, $f0, $f14 /* 0A9B28 7F074FF8 460A2180 */ add.s $f6, $f4, $f10 /* 0A9B2C 7F074FFC E7A60090 */ swc1 $f6, 0x90($sp) @@ -8250,7 +8262,7 @@ glabel sub_GAME_7F074CAC /* 0A9B8C 7F07505C 46065280 */ add.s $f10, $f10, $f6 /* 0A9B90 7F075060 C7A60028 */ lwc1 $f6, 0x28($sp) /* 0A9B94 7F075064 46105082 */ mul.s $f2, $f10, $f16 -/* 0A9B98 7F075068 00000000 */ nop +/* 0A9B98 7F075068 00000000 */ nop /* 0A9B9C 7F07506C 46020282 */ mul.s $f10, $f0, $f2 /* 0A9BA0 7F075070 46065280 */ add.s $f10, $f10, $f6 /* 0A9BA4 7F075074 E7AA009C */ swc1 $f10, 0x9c($sp) @@ -8276,7 +8288,7 @@ glabel sub_GAME_7F074CAC /* 0A9BF4 7F0750C4 46045280 */ add.s $f10, $f10, $f4 /* 0A9BF8 7F0750C8 C7A40030 */ lwc1 $f4, 0x30($sp) /* 0A9BFC 7F0750CC 46105302 */ mul.s $f12, $f10, $f16 -/* 0A9C00 7F0750D0 00000000 */ nop +/* 0A9C00 7F0750D0 00000000 */ nop /* 0A9C04 7F0750D4 460C0282 */ mul.s $f10, $f0, $f12 /* 0A9C08 7F0750D8 46045280 */ add.s $f10, $f10, $f4 /* 0A9C0C 7F0750DC E7AA0090 */ swc1 $f10, 0x90($sp) @@ -8390,20 +8402,20 @@ glabel sub_GAME_7F074CAC /* 0A9D9C 7F07526C 46105102 */ mul.s $f4, $f10, $f16 /* 0A9DA0 7F075270 46062080 */ add.s $f2, $f4, $f6 /* 0A9DA4 7F075274 44802000 */ mtc1 $zero, $f4 -/* 0A9DA8 7F075278 00000000 */ nop +/* 0A9DA8 7F075278 00000000 */ nop /* 0A9DAC 7F07527C 4602203C */ c.lt.s $f4, $f2 -/* 0A9DB0 7F075280 00000000 */ nop +/* 0A9DB0 7F075280 00000000 */ nop /* 0A9DB4 7F075284 4500001A */ bc1f .L7F0752F0 -/* 0A9DB8 7F075288 00000000 */ nop +/* 0A9DB8 7F075288 00000000 */ nop /* 0A9DBC 7F07528C 46129182 */ mul.s $f6, $f18, $f18 -/* 0A9DC0 7F075290 00000000 */ nop +/* 0A9DC0 7F075290 00000000 */ nop /* 0A9DC4 7F075294 460E7102 */ mul.s $f4, $f14, $f14 /* 0A9DC8 7F075298 46043180 */ add.s $f6, $f6, $f4 /* 0A9DCC 7F07529C 46108102 */ mul.s $f4, $f16, $f16 /* 0A9DD0 7F0752A0 46062000 */ add.s $f0, $f4, $f6 /* 0A9DD4 7F0752A4 C7A40030 */ lwc1 $f4, 0x30($sp) /* 0A9DD8 7F0752A8 46042182 */ mul.s $f6, $f4, $f4 -/* 0A9DDC 7F0752AC 00000000 */ nop +/* 0A9DDC 7F0752AC 00000000 */ nop /* 0A9DE0 7F0752B0 46084102 */ mul.s $f4, $f8, $f8 /* 0A9DE4 7F0752B4 46043200 */ add.s $f8, $f6, $f4 /* 0A9DE8 7F0752B8 460A5182 */ mul.s $f6, $f10, $f10 @@ -8413,9 +8425,9 @@ glabel sub_GAME_7F074CAC /* 0A9DF8 7F0752C8 460A6181 */ sub.s $f6, $f12, $f10 /* 0A9DFC 7F0752CC 46003202 */ mul.s $f8, $f6, $f0 /* 0A9E00 7F0752D0 4604403E */ c.le.s $f8, $f4 -/* 0A9E04 7F0752D4 00000000 */ nop +/* 0A9E04 7F0752D4 00000000 */ nop /* 0A9E08 7F0752D8 45000003 */ bc1f .L7F0752E8 -/* 0A9E0C 7F0752DC 00000000 */ nop +/* 0A9E0C 7F0752DC 00000000 */ nop /* 0A9E10 7F0752E0 10000003 */ b .L7F0752F0 /* 0A9E14 7F0752E4 24020001 */ li $v0, 1 .L7F0752E8: @@ -8493,15 +8505,15 @@ glabel sub_GAME_7F0752FC /* 0A9E7C 7F07534C 00001025 */ move $v0, $zero .L7F075350: /* 0A9E80 7F075350 12200006 */ beqz $s1, .L7F07536C -/* 0A9E84 7F075354 00000000 */ nop +/* 0A9E84 7F075354 00000000 */ nop /* 0A9E88 7F075358 8E020014 */ lw $v0, 0x14($s0) /* 0A9E8C 7F07535C 10400003 */ beqz $v0, .L7F07536C -/* 0A9E90 7F075360 00000000 */ nop +/* 0A9E90 7F075360 00000000 */ nop /* 0A9E94 7F075364 1000000D */ b .L7F07539C /* 0A9E98 7F075368 00408025 */ move $s0, $v0 .L7F07536C: /* 0A9E9C 7F07536C 12000009 */ beqz $s0, .L7F075394 -/* 0A9EA0 7F075370 00000000 */ nop +/* 0A9EA0 7F075370 00000000 */ nop /* 0A9EA4 7F075374 8E02000C */ lw $v0, 0xc($s0) .L7F075378: /* 0A9EA8 7F075378 50400004 */ beql $v0, $zero, .L7F07538C @@ -8528,7 +8540,7 @@ glabel sub_GAME_7F0752FC /* 0A9EF0 7F0753C0 8C394DB4 */ lw $t9, %lo(jpt_80054DB4)($at) .L7F0753C4: /* 0A9EF4 7F0753C4 03200008 */ jr $t9 -/* 0A9EF8 7F0753C8 00000000 */ nop +/* 0A9EF8 7F0753C8 00000000 */ nop .L7F0753CC: /* 0A9EFC 7F0753CC 02402025 */ move $a0, $s2 /* 0A9F00 7F0753D0 02002825 */ move $a1, $s0 @@ -8536,7 +8548,7 @@ glabel sub_GAME_7F0752FC /* 0A9F08 7F0753D8 0FC1D31A */ jal sub_GAME_7F074C68 /* 0A9F0C 7F0753DC 02803825 */ move $a3, $s4 /* 0A9F10 7F0753E0 10400006 */ beqz $v0, .L7F0753FC -/* 0A9F14 7F0753E4 00000000 */ nop +/* 0A9F14 7F0753E4 00000000 */ nop /* 0A9F18 7F0753E8 8FA8003C */ lw $t0, 0x3c($sp) /* 0A9F1C 7F0753EC AD100000 */ sw $s0, ($t0) /* 0A9F20 7F0753F0 8E090004 */ lw $t1, 4($s0) @@ -8552,7 +8564,7 @@ glabel sub_GAME_7F0752FC /* 0A9F40 7F075410 0FC1D32B */ jal sub_GAME_7F074CAC /* 0A9F44 7F075414 02803825 */ move $a3, $s4 /* 0A9F48 7F075418 10400006 */ beqz $v0, .L7F075434 -/* 0A9F4C 7F07541C 00000000 */ nop +/* 0A9F4C 7F07541C 00000000 */ nop /* 0A9F50 7F075420 8FAA003C */ lw $t2, 0x3c($sp) /* 0A9F54 7F075424 AD500000 */ sw $s0, ($t2) /* 0A9F58 7F075428 8E0B0004 */ lw $t3, 4($s0) @@ -8566,13 +8578,13 @@ glabel sub_GAME_7F0752FC /* 0A9F70 7F075440 0FC1BA5C */ jal modelApplyDistanceRelations /* 0A9F74 7F075444 02002825 */ move $a1, $s0 /* 0A9F78 7F075448 10000009 */ b .L7F075470 -/* 0A9F7C 7F07544C 00000000 */ nop +/* 0A9F7C 7F07544C 00000000 */ nop .L7F075450: /* 0A9F80 7F075450 02402025 */ move $a0, $s2 /* 0A9F84 7F075454 0FC1BA6F */ jal modelApplyToggleRelations /* 0A9F88 7F075458 02002825 */ move $a1, $s0 /* 0A9F8C 7F07545C 10000004 */ b .L7F075470 -/* 0A9F90 7F075460 00000000 */ nop +/* 0A9F90 7F075460 00000000 */ nop .L7F075464: /* 0A9F94 7F075464 02402025 */ move $a0, $s2 /* 0A9F98 7F075468 0FC1BA82 */ jal modelApplyHeadRelations @@ -8580,7 +8592,7 @@ glabel sub_GAME_7F0752FC def_7F0753C4: .L7F075470: /* 0A9FA0 7F075470 1600FFB7 */ bnez $s0, .L7F075350 -/* 0A9FA4 7F075474 00000000 */ nop +/* 0A9FA4 7F075474 00000000 */ nop /* 0A9FA8 7F075478 00001025 */ move $v0, $zero .L7F07547C: /* 0A9FAC 7F07547C 8FBF002C */ lw $ra, 0x2c($sp) @@ -8616,52 +8628,73 @@ glabel sub_GAME_7F07549C /* 0A9FDC 7F0754AC 8FBF0014 */ lw $ra, 0x14($sp) /* 0A9FE0 7F0754B0 27BD0018 */ addiu $sp, $sp, 0x18 /* 0A9FE4 7F0754B4 03E00008 */ jr $ra -/* 0A9FE8 7F0754B8 00000000 */ nop +/* 0A9FE8 7F0754B8 00000000 */ nop ) #endif -s32 sub_GAME_7F0754BC(ModelAnimation* arg0, s32 arg1, ModelSkeleton* arg2) +/** + * Address 7F0754BC. + * Copy animation from ROM to RAM +*/ +s32 loadAnimationFrame(ModelAnimation* anim, s32 frame, ModelSkeleton* unused) { s32 ret; - s32 var_a1; - s32 shiftede; - u32 tmp; - u32 temp_a2_2; + s32 source; + s32 frameSize; + u32 dest; + u32 size; ret = 0; - shiftede = arg0->unk0E >> 3; + frameSize = anim->unk0E >> 3; // divide by 8 - if (arg0->unk00 & 0x80000000) + if (anim->address & 0x80000000) // If animation's address is in RAM { - ret = arg0->unk00 + (arg1 * shiftede); + // Load that frame from RAM + ret = anim->address + (frame * frameSize); } - else if (D_80036414 != NULL) + else if (D_80036414 != NULL) // should never be NULL after sub_GAME_7F0009E0 is called { - tmp = ((u32) (D_80036414->unk08 + 0xF) >> 4) * 0x10; - ret = tmp; - var_a1 = arg0->unk00 + (arg1 * shiftede); - if (var_a1 & 1) + // Get dest from this D_80036414 which points to an array. Align to 16 bytes. + dest = ((u32) (D_80036414->animBufferPtr2 + 15) >> 4) * 16; + ret = dest; + + // Get source of this animation in ROM with the offset of the frame we'll load + source = anim->address + (frame * frameSize); + if (source & 1) { - var_a1--; - shiftede++; + source--; + frameSize++; ret++; } - temp_a2_2 = ((u32) (shiftede + 0xF) >> 4) * 0x10; - romCopy((void* ) tmp, (void* ) var_a1, temp_a2_2); - D_80036414->unk00 += 1; - D_80036414->unk08 = tmp + temp_a2_2; + + // Size of frame but 16-bytes aligned. Observed to be 80 bytes. Might differ for non-guards. + size = ((u32) (frameSize + 15) >> 4) * 16; + + // This copies one animation frame from ROM to the destination in RAM + romCopy((void* ) dest, (void* ) source, size); + + // Increment this which serves nothing + D_80036414->uselessPointer += 1; + + // Set this to point to the end of the copied frame + // This allows to copy another frame after this one + D_80036414->animBufferPtr2 = dest + size; } return ret; } +/** + * Address 7F0755B0. +*/ void sub_GAME_7F0755B0(void) { - if (D_80036414 != NULL) + if (D_80036414 != NULL) // should never be NULL after sub_GAME_7F0009E0 is called { - D_80036414->unk08 = D_80036414->unk04; - D_80036414->unk00 = NULL; + // Reset the pointer to point to the start of the array + D_80036414->animBufferPtr2 = D_80036414->animBufferPtr1; + D_80036414->uselessPointer = NULL; } } @@ -8867,7 +8900,9 @@ void modelPromoteNodeOffsetsToPointers(ModelNode *node, u32 vma, u32 fileramaddr } } - +/** + * Address 7F075A90. +*/ void sub_GAME_7F075A90(ModelFileHeader *header, s32 vma, u32 addr) { s32 diff = addr - vma; s32 i; @@ -8879,6 +8914,9 @@ void sub_GAME_7F075A90(ModelFileHeader *header, s32 vma, u32 addr) { modelPromoteNodeOffsetsToPointers(header->RootNode, vma, addr); } +/** + * Address 7F075B08. +*/ void REMOVED_sub_GAME_7F075B08(s32 param_1,s32 param_2,s32 param_3,s32 param_4) { return; @@ -9178,7 +9216,7 @@ void modelInit(struct Model *objinst, struct ModelFileHeader *header, u32 *data) // PD: animInit void animInit(struct Model *objinst, struct ModelFileHeader *header, u32 *data) -{ +{ modelInit(objinst, header, data); objinst->anim = NULL; objinst->anim2 = NULL; diff --git a/src/game/mp_music.c b/src/game/mp_music.c index fc2eb3b..8772d6e 100644 --- a/src/game/mp_music.c +++ b/src/game/mp_music.c @@ -3,6 +3,7 @@ #include "music_0D2720.h" #include "watch.h" #include "mp_music.h" +#include "lvl.h" #ifdef VERSION_EU #define MP_MUSIC_FRAMERATE 50 @@ -17,31 +18,13 @@ s32 stageMusicID; s32 dword_CODE_bss_8008C604; //CODE.bss:8008C608 -s32 music_slot_active_0; -//CODE.bss:8008C60C -s32 music_slot_active_1; -//CODE.bss:8008C610 -s32 music_slot_active_2; -//CODE.bss:8008C614 -s32 music_slot_active_3; +s32 music_slot_active_0[4]; //CODE.bss:8008C618 -s32 music_slot_minutes_0; -//CODE.bss:8008C61C -s32 music_slot_minutes_1; -//CODE.bss:8008C620 -s32 music_slot_minutes_2; -//CODE.bss:8008C624 -s32 music_slot_minutes_3; +s32 music_slot_minutes_0[4]; //CODE.bss:8008C628 -s32 music_slot_seconds_0; -//CODE.bss:8008C62C -s32 music_slot_seconds_1; -//CODE.bss:8008C630 -s32 music_slot_seconds_2; -//CODE.bss:8008C634 -s32 music_slot_seconds_3; +s32 music_slot_seconds_0[4]; // data @@ -50,1745 +33,279 @@ s32 mission_state = MISSION_STATE_0; -u16 sub_GAME_7F0C0BF0(void) { +u16 sub_GAME_7F0C0BF0(void) +{ get_mTrack2Vol(); } -s32 sub_GAME_7F0C0C10(void) { +u16 sub_GAME_7F0C0C10(void) +{ return call_sndGetSfxSlotFirstNaturalVolume(); } -MISSION_STATE_ID get_mission_state(void) { +MISSION_STATE_ID get_mission_state(void) +{ return mission_state; } - - - -#ifdef NONMATCHING -//close, minor reg at beginning, tiny chunk missing at end, i gave up on for now void set_missionstate(MISSION_STATE_ID arg0) { - switch (mission_state) + s32 old_mission_state = mission_state; + + mission_state = arg0; + + switch (old_mission_state) { - case MISSION_STATE_0: - mission_state = arg0; + case MISSION_STATE_0: switch (arg0) { - case MISSION_STATE_0: - return; - case MISSION_STATE_1: - musicTrack1ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack1Fade = 0; - musicTrack1Play(getmusictrack_or_randomtrack(stageMusicID)); - return; - case MISSION_STATE_2: - break; - case MISSION_STATE_3: - break; - case MISSION_STATE_4: // switch 2 - musicTrack1ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack1Fade = 0; - musicTrack1Play(getmusictrack_or_randomtrack(stageMusicID)); - musicTrack3ApplySeqpVol(sub_GAME_7F0C0C10()); - g_musicXTrack3Fade = 0; - musicTrack3Play(musicGetBgTrackForStage(stageMusicID)); - return; - case MISSION_STATE_5: - break; - case MISSION_STATE_6: - break; +#if defined(VERSION_US) + case MISSION_STATE_0: + return; + case MISSION_STATE_1: + musicTrack1ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack1Fade = 0; + musicTrack1Play(getmusictrack_or_randomtrack(stageMusicID)); + return; + case MISSION_STATE_2: + break; + case MISSION_STATE_3: + break; + case MISSION_STATE_4: // switch 2 + musicTrack1ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack1Fade = 0; + musicTrack1Play(getmusictrack_or_randomtrack(stageMusicID)); + musicTrack3ApplySeqpVol(sub_GAME_7F0C0C10()); + g_musicXTrack3Fade = 0; + musicTrack3Play(musicGetBgTrackForStage(stageMusicID)); + return; + case MISSION_STATE_5: + break; + case MISSION_STATE_6: + break; +#endif + +#if defined(VERSION_JP) || defined(VERSION_EU) + case MISSION_STATE_0: + musicTrack1Stop(); + musicTrack2Stop(); + musicTrack3Stop(); + return; + case MISSION_STATE_1: // switch 2 + musicTrack1ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack1Fade = 0; + musicTrack1Play(getmusictrack_or_randomtrack(stageMusicID)); + return; + case MISSION_STATE_2: + break; + case MISSION_STATE_3: + break; + case MISSION_STATE_4: + musicTrack1ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack1Fade = 0; + musicTrack1Play(getmusictrack_or_randomtrack(stageMusicID)); + musicTrack3ApplySeqpVol(sub_GAME_7F0C0C10()); + g_musicXTrack3Fade = 0; + musicTrack3Play(musicGetBgTrackForStage(stageMusicID)); + return; + break; + case MISSION_STATE_5: + break; + case MISSION_STATE_6: + break; +#endif } - break; - case MISSION_STATE_1: - mission_state = arg0; + + case MISSION_STATE_1: switch (arg0) { - case MISSION_STATE_0: - musicTrack1Stop(); - musicTrack2Stop(); - musicTrack3Stop(); - return; - case MISSION_STATE_1: - break; - case MISSION_STATE_2: - musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack2Fade = 0; - musicTrack2Play(musicGetXTrackForStage(stageMusicID)); - musicTrack1FadeOut(0.5f); - return; - case MISSION_STATE_3: - musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack2Fade = 0; - musicTrack2Play(0x18); - musicTrack1FadeOut(0.5f); - return; - case MISSION_STATE_5: - return; - case MISSION_STATE_6: - musicTrack1FadeOut(0.02f); - musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack2Fade = 0; - musicTrack2Play(0x3A); - return; + case MISSION_STATE_0: + musicTrack1Stop(); + musicTrack2Stop(); + musicTrack3Stop(); + return; + case MISSION_STATE_1: + break; + case MISSION_STATE_2: + musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack2Fade = 0; + musicTrack2Play(musicGetXTrackForStage(stageMusicID)); + musicTrack1FadeOut(0.5f); + return; + case MISSION_STATE_3: + musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack2Fade = 0; + musicTrack2Play(0x18); + musicTrack1FadeOut(0.5f); + return; + case MISSION_STATE_5: + break; + case MISSION_STATE_6: + musicTrack1FadeOut(0.02f); + musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack2Fade = 0; + musicTrack2Play(0x3A); + return; } - break; - case MISSION_STATE_2: - mission_state = arg0; + + case MISSION_STATE_2: switch (arg0) { - case MISSION_STATE_0: - musicTrack1Stop(); - musicTrack2Stop(); - musicTrack3Stop(); - return; - case MISSION_STATE_1: - musicTrack1FadeIn(0.5f, sub_GAME_7F0C0BF0()); - musicTrack2FadeOut(0.5f); - return; - case MISSION_STATE_2: - return; + case MISSION_STATE_0: + musicTrack1Stop(); + musicTrack2Stop(); + musicTrack3Stop(); + return; + case MISSION_STATE_1: + musicTrack1FadeIn(0.5f, sub_GAME_7F0C0BF0()); + musicTrack2FadeOut(0.5f); + return; + case MISSION_STATE_2: + return; + case MISSION_STATE_3: + musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack2Fade = 0; + musicTrack2Play(0x18); + return; + case MISSION_STATE_4: + break; + case MISSION_STATE_5: + break; + case MISSION_STATE_6: + break; + } + case MISSION_STATE_3: - musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack2Fade = 0; - musicTrack2Play(0x18); - return; + switch (arg0) + { + case MISSION_STATE_0: + musicTrack1Stop(); + musicTrack2Stop(); + musicTrack3Stop(); + return; + case MISSION_STATE_1: + musicTrack1FadeIn(1.0f, sub_GAME_7F0C0BF0()); + musicTrack2FadeOut(1.0f); + return; + case MISSION_STATE_2: + musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack2Fade = 0; + musicTrack2Play(musicGetXTrackForStage(stageMusicID)); + return; + case MISSION_STATE_3: + break; + case MISSION_STATE_4: + musicTrack1FadeIn(1.0f, sub_GAME_7F0C0BF0()); + musicTrack3FadeIn(1.0f, sub_GAME_7F0C0C10()); + musicTrack2FadeOut(1.0f); + return; + case MISSION_STATE_5: + musicTrack3FadeIn(1.0f, sub_GAME_7F0C0C10()); + musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack2Fade = 0; + musicTrack2Play(musicGetXTrackForStage(stageMusicID)); + return; + case MISSION_STATE_6: + break; + } + case MISSION_STATE_4: - return; - case MISSION_STATE_5: - return; - case MISSION_STATE_6: - return; - } - break; - case MISSION_STATE_3: - mission_state = arg0; switch (arg0) { - case MISSION_STATE_0: - musicTrack1Stop(); - musicTrack2Stop(); - musicTrack3Stop(); - return; - case MISSION_STATE_1: - musicTrack1FadeIn(1.0f, sub_GAME_7F0C0BF0()); - musicTrack2FadeOut(1.0f); - return; - case MISSION_STATE_2: - musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack2Fade = 0; - musicTrack2Play(musicGetXTrackForStage(stageMusicID)); - return; - case MISSION_STATE_3: - return; - case MISSION_STATE_4: - musicTrack1FadeIn(1.0f, sub_GAME_7F0C0BF0()); - musicTrack3FadeIn(1.0f, sub_GAME_7F0C0C10()); - musicTrack2FadeOut(1.0f); - return; - case MISSION_STATE_5: - musicTrack3FadeIn(1.0f, sub_GAME_7F0C0C10()); - musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack2Fade = 0; - musicTrack2Play(musicGetXTrackForStage(stageMusicID)); - return; - case MISSION_STATE_6: - return; + case MISSION_STATE_0: + musicTrack1Stop(); + musicTrack2Stop(); + musicTrack3Stop(); + return; + case MISSION_STATE_1: + break; + case MISSION_STATE_2: + break; + case MISSION_STATE_3: + musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack2Fade = 0; + musicTrack2Play(0x18); + musicTrack1FadeOut(0.5f); + musicTrack3FadeOut(0.5f); + return; + case MISSION_STATE_4: + break; + case MISSION_STATE_5: + musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack2Fade = 0; + musicTrack2Play(musicGetXTrackForStage(stageMusicID)); + musicTrack1FadeOut(0.5f); + return; + case MISSION_STATE_6: + break; } - break; - case MISSION_STATE_4: - mission_state = arg0; + + case MISSION_STATE_5: switch (arg0) { - case MISSION_STATE_0: - musicTrack1Stop(); - musicTrack2Stop(); - musicTrack3Stop(); - return; - case MISSION_STATE_1: - return; - case MISSION_STATE_2: - return; - case MISSION_STATE_3: - musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack2Fade = 0; - musicTrack2Play(0x18); - musicTrack1FadeOut(0.5f); - musicTrack3FadeOut(0.5f); - return; - case MISSION_STATE_4: - return; - case MISSION_STATE_5: - musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack2Fade = 0; - musicTrack2Play(musicGetXTrackForStage(stageMusicID)); - musicTrack1FadeOut(0.5f); - return; - case MISSION_STATE_6: - return; + case MISSION_STATE_0: + musicTrack1Stop(); + musicTrack2Stop(); + musicTrack3Stop(); + return; + case MISSION_STATE_1: + break; + case MISSION_STATE_2: + break; + case MISSION_STATE_3: + musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); + g_musicXTrack2Fade = 0; + musicTrack2Play(0x18); + musicTrack3FadeOut(0.5f); + return; + case MISSION_STATE_4: + musicTrack1FadeIn(0.5f, sub_GAME_7F0C0BF0()); + musicTrack2FadeOut(0.5f); + return; + case MISSION_STATE_5: + break; + case MISSION_STATE_6: + break; } - break; - case MISSION_STATE_5: - mission_state = arg0; + + case MISSION_STATE_6: switch (arg0) { - case MISSION_STATE_0: - musicTrack1Stop(); - musicTrack2Stop(); - musicTrack3Stop(); - return; - case MISSION_STATE_1: - return; - case MISSION_STATE_2: - return; - case MISSION_STATE_3: - musicTrack2ApplySeqpVol(sub_GAME_7F0C0BF0()); - g_musicXTrack2Fade = 0; - musicTrack2Play(0x18); - musicTrack3FadeOut(0.5f); - return; - case MISSION_STATE_4: - musicTrack1FadeIn(0.5f, sub_GAME_7F0C0BF0()); - musicTrack2FadeOut(0.5f); - return; - case MISSION_STATE_5: - return; - case MISSION_STATE_6: - return; - } - break; - case MISSION_STATE_6: - mission_state = arg0; - switch (arg0) - { - case MISSION_STATE_0: - musicTrack1Stop(); - musicTrack2Stop(); - musicTrack3Stop(); - return; - case MISSION_STATE_1: - musicTrack1FadeIn(2.0f, sub_GAME_7F0C0BF0()); - musicTrack2FadeOut(2.0f); - return; - case MISSION_STATE_2: - return; - case MISSION_STATE_3: - return; - case MISSION_STATE_4: - return; - case MISSION_STATE_5: - return; - case MISSION_STATE_6: - g_musicXTrack2Fade = 0; - musicTrack2Play(0x3A); - return; + case MISSION_STATE_0: + musicTrack1Stop(); + musicTrack2Stop(); + musicTrack3Stop(); + return; + case MISSION_STATE_1: + musicTrack1FadeIn(2.0f, sub_GAME_7F0C0BF0()); + musicTrack2FadeOut(2.0f); + return; + case MISSION_STATE_2: + break; + case MISSION_STATE_3: + break; + case MISSION_STATE_4: + break; + case MISSION_STATE_5: + break; + case MISSION_STATE_6: + g_musicXTrack2Fade = 0; + musicTrack2Play(0x3A); + return; } + + default: break; } + + while(1) + { + // error + } } -#else -#ifdef VERSION_US -GLOBAL_ASM( -.late_rodata -/*D:8005B790*/ -glabel jpt_8005B790 -.word .L7F0C0C74 -.word .L7F0C0D28 -.word .L7F0C0E18 -.word .L7F0C0EB0 -.word .L7F0C0FE8 -.word .L7F0C10B4 -.word .L7F0C115C - -/*D:8005B7AC*/ -glabel jpt_8005B7AC -.word .L7F0C11EC -.word .L7F0C0C94 -.word .L7F0C0D28 -.word .L7F0C0D28 -.word .L7F0C0CC8 -.word .L7F0C0D28 -.word .L7F0C0D28 - -/*D:8005B7C8*/ -glabel jpt_8005B7C8 -.word .L7F0C0D48 -.word .L7F0C0E18 -.word .L7F0C0D68 -.word .L7F0C0DAC -.word .L7F0C0E18 -.word .L7F0C0E18 -.word .L7F0C0DE4 - -glabel music_rate_8005B7E4 -.word 0x3ca3d70a /*0.02*/ - -/*D:8005B7E8*/ -glabel jpt_8005B7E8 -.word .L7F0C0E38 -.word .L7F0C0E58 -.word .L7F0C11EC -.word .L7F0C0E88 -.word .L7F0C0EB0 -.word .L7F0C0EB0 -.word .L7F0C0EB0 - -/*D:8005B804*/ -glabel jpt_8005B804 -.word .L7F0C0ED0 -.word .L7F0C0EF0 -.word .L7F0C0F20 -.word .L7F0C0FE8 -.word .L7F0C0F54 -.word .L7F0C0F9C -.word .L7F0C0FE8 - -/*D:8005B820*/ -glabel jpt_8005B820 -.word .L7F0C1008 -.word .L7F0C10B4 -.word .L7F0C10B4 -.word .L7F0C1028 -.word .L7F0C10B4 -.word .L7F0C1070 -.word .L7F0C10B4 - -/*D:8005B83C*/ -glabel jpt_8005B83C -.word .L7F0C10D4 -.word .L7F0C115C -.word .L7F0C115C -.word .L7F0C10F4 -.word .L7F0C112C -.word .L7F0C115C -.word .L7F0C115C - -/*D:8005B858*/ -glabel jpt_8005B858 -.word .L7F0C117C -.word .L7F0C119C -.word .L7F0C11E4 -.word .L7F0C11E4 -.word .L7F0C11E4 -.word .L7F0C11E4 -.word .L7F0C11CC - - -.text -glabel set_missionstate -/* 0F576C set_missionstate 3C038005 */ lui $v1, %hi(mission_state) -/* 0F5770 7F0C0C40 246384C0 */ addiu $v1, %lo(mission_state) # addiu $v1, $v1, -0x7b40 -/* 0F5774 7F0C0C44 8C620000 */ lw $v0, ($v1) -/* 0F5778 7F0C0C48 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0F577C 7F0C0C4C AFBF0014 */ sw $ra, 0x14($sp) -/* 0F5780 7F0C0C50 2C410007 */ sltiu $at, $v0, 7 -/* 0F5784 7F0C0C54 10200163 */ beqz $at, .L7F0C11E4 -/* 0F5788 7F0C0C58 AC640000 */ sw $a0, ($v1) -/* 0F578C 7F0C0C5C 00027080 */ sll $t6, $v0, 2 -/* 0F5790 7F0C0C60 3C018006 */ lui $at, %hi(jpt_8005B790) -/* 0F5794 7F0C0C64 002E0821 */ addu $at, $at, $t6 -/* 0F5798 7F0C0C68 8C2EB790 */ lw $t6, %lo(jpt_8005B790)($at) -/* 0F579C 7F0C0C6C 01C00008 */ jr $t6 -/* 0F57A0 7F0C0C70 00000000 */ nop -.L7F0C0C74: -/* 0F57A4 7F0C0C74 2C810007 */ sltiu $at, $a0, 7 -/* 0F57A8 7F0C0C78 1020002B */ beqz $at, .L7F0C0D28 -/* 0F57AC 7F0C0C7C 00047880 */ sll $t7, $a0, 2 -/* 0F57B0 7F0C0C80 3C018006 */ lui $at, %hi(jpt_8005B7AC) -/* 0F57B4 7F0C0C84 002F0821 */ addu $at, $at, $t7 -/* 0F57B8 7F0C0C88 8C2FB7AC */ lw $t7, %lo(jpt_8005B7AC)($at) -/* 0F57BC 7F0C0C8C 01E00008 */ jr $t7 -/* 0F57C0 7F0C0C90 00000000 */ nop -.L7F0C0C94: -/* 0F57C4 7F0C0C94 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F57C8 7F0C0C98 00000000 */ nop -/* 0F57CC 7F0C0C9C 0C001C0F */ jal musicTrack1ApplySeqpVol -/* 0F57D0 7F0C0CA0 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F57D4 7F0C0CA4 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) -/* 0F57D8 7F0C0CA8 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F57DC 7F0C0CAC AC20434C */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 0F57E0 7F0C0CB0 0FC349C8 */ jal getmusictrack_or_randomtrack -/* 0F57E4 7F0C0CB4 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F57E8 7F0C0CB8 0C001B9F */ jal musicTrack1Play -/* 0F57EC 7F0C0CBC 00402025 */ move $a0, $v0 -/* 0F57F0 7F0C0CC0 1000014B */ b .L7F0C11F0 -/* 0F57F4 7F0C0CC4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0CC8: -/* 0F57F8 7F0C0CC8 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F57FC 7F0C0CCC 00000000 */ nop -/* 0F5800 7F0C0CD0 0C001C0F */ jal musicTrack1ApplySeqpVol -/* 0F5804 7F0C0CD4 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5808 7F0C0CD8 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) -/* 0F580C 7F0C0CDC 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F5810 7F0C0CE0 AC20434C */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 0F5814 7F0C0CE4 0FC349C8 */ jal getmusictrack_or_randomtrack -/* 0F5818 7F0C0CE8 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F581C 7F0C0CEC 0C001B9F */ jal musicTrack1Play -/* 0F5820 7F0C0CF0 00402025 */ move $a0, $v0 -/* 0F5824 7F0C0CF4 0FC30304 */ jal sub_GAME_7F0C0C10 -/* 0F5828 7F0C0CF8 00000000 */ nop -/* 0F582C 7F0C0CFC 0C001DD3 */ jal musicTrack3ApplySeqpVol -/* 0F5830 7F0C0D00 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5834 7F0C0D04 3C018002 */ lui $at, %hi(g_musicXTrack3Fade) -/* 0F5838 7F0C0D08 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F583C 7F0C0D0C AC204354 */ sw $zero, %lo(g_musicXTrack3Fade)($at) -/* 0F5840 7F0C0D10 0FC34A12 */ jal musicGetBgTrackForStage -/* 0F5844 7F0C0D14 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F5848 7F0C0D18 0C001D63 */ jal musicTrack3Play -/* 0F584C 7F0C0D1C 00402025 */ move $a0, $v0 -/* 0F5850 7F0C0D20 10000133 */ b .L7F0C11F0 -/* 0F5854 7F0C0D24 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0D28: -/* 0F5858 7F0C0D28 2C810007 */ sltiu $at, $a0, 7 -/* 0F585C 7F0C0D2C 1020003A */ beqz $at, .L7F0C0E18 -/* 0F5860 7F0C0D30 0004C080 */ sll $t8, $a0, 2 -/* 0F5864 7F0C0D34 3C018006 */ lui $at, %hi(jpt_8005B7C8) -/* 0F5868 7F0C0D38 00380821 */ addu $at, $at, $t8 -/* 0F586C 7F0C0D3C 8C38B7C8 */ lw $t8, %lo(jpt_8005B7C8)($at) -/* 0F5870 7F0C0D40 03000008 */ jr $t8 -/* 0F5874 7F0C0D44 00000000 */ nop -.L7F0C0D48: -/* 0F5878 7F0C0D48 0C001BF4 */ jal musicTrack1Stop -/* 0F587C 7F0C0D4C 00000000 */ nop -/* 0F5880 7F0C0D50 0C001CD6 */ jal musicTrack2Stop -/* 0F5884 7F0C0D54 00000000 */ nop -/* 0F5888 7F0C0D58 0C001DB8 */ jal musicTrack3Stop -/* 0F588C 7F0C0D5C 00000000 */ nop -/* 0F5890 7F0C0D60 10000123 */ b .L7F0C11F0 -/* 0F5894 7F0C0D64 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0D68: -/* 0F5898 7F0C0D68 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F589C 7F0C0D6C 00000000 */ nop -/* 0F58A0 7F0C0D70 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F58A4 7F0C0D74 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F58A8 7F0C0D78 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F58AC 7F0C0D7C 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F58B0 7F0C0D80 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F58B4 7F0C0D84 0FC34A24 */ jal musicGetXTrackForStage -/* 0F58B8 7F0C0D88 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F58BC 7F0C0D8C 0C001C81 */ jal musicTrack2Play -/* 0F58C0 7F0C0D90 00402025 */ move $a0, $v0 -/* 0F58C4 7F0C0D94 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F58C8 7F0C0D98 44816000 */ mtc1 $at, $f12 -/* 0F58CC 7F0C0D9C 0C001C3E */ jal musicTrack1FadeOut -/* 0F58D0 7F0C0DA0 00000000 */ nop -/* 0F58D4 7F0C0DA4 10000112 */ b .L7F0C11F0 -/* 0F58D8 7F0C0DA8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0DAC: -/* 0F58DC 7F0C0DAC 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F58E0 7F0C0DB0 00000000 */ nop -/* 0F58E4 7F0C0DB4 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F58E8 7F0C0DB8 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F58EC 7F0C0DBC 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F58F0 7F0C0DC0 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F58F4 7F0C0DC4 0C001C81 */ jal musicTrack2Play -/* 0F58F8 7F0C0DC8 24040018 */ li $a0, 24 -/* 0F58FC 7F0C0DCC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5900 7F0C0DD0 44816000 */ mtc1 $at, $f12 -/* 0F5904 7F0C0DD4 0C001C3E */ jal musicTrack1FadeOut -/* 0F5908 7F0C0DD8 00000000 */ nop -/* 0F590C 7F0C0DDC 10000104 */ b .L7F0C11F0 -/* 0F5910 7F0C0DE0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0DE4: -/* 0F5914 7F0C0DE4 3C018006 */ lui $at, %hi(music_rate_8005B7E4) -/* 0F5918 7F0C0DE8 0C001C3E */ jal musicTrack1FadeOut -/* 0F591C 7F0C0DEC C42CB7E4 */ lwc1 $f12, %lo(music_rate_8005B7E4)($at) -/* 0F5920 7F0C0DF0 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5924 7F0C0DF4 00000000 */ nop -/* 0F5928 7F0C0DF8 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F592C 7F0C0DFC 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5930 7F0C0E00 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5934 7F0C0E04 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5938 7F0C0E08 0C001C81 */ jal musicTrack2Play -/* 0F593C 7F0C0E0C 2404003A */ li $a0, 58 -/* 0F5940 7F0C0E10 100000F7 */ b .L7F0C11F0 -/* 0F5944 7F0C0E14 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0E18: -/* 0F5948 7F0C0E18 2C810007 */ sltiu $at, $a0, 7 -/* 0F594C 7F0C0E1C 10200024 */ beqz $at, .L7F0C0EB0 -/* 0F5950 7F0C0E20 0004C880 */ sll $t9, $a0, 2 -/* 0F5954 7F0C0E24 3C018006 */ lui $at, %hi(jpt_8005B7E8) -/* 0F5958 7F0C0E28 00390821 */ addu $at, $at, $t9 -/* 0F595C 7F0C0E2C 8C39B7E8 */ lw $t9, %lo(jpt_8005B7E8)($at) -/* 0F5960 7F0C0E30 03200008 */ jr $t9 -/* 0F5964 7F0C0E34 00000000 */ nop -.L7F0C0E38: -/* 0F5968 7F0C0E38 0C001BF4 */ jal musicTrack1Stop -/* 0F596C 7F0C0E3C 00000000 */ nop -/* 0F5970 7F0C0E40 0C001CD6 */ jal musicTrack2Stop -/* 0F5974 7F0C0E44 00000000 */ nop -/* 0F5978 7F0C0E48 0C001DB8 */ jal musicTrack3Stop -/* 0F597C 7F0C0E4C 00000000 */ nop -/* 0F5980 7F0C0E50 100000E7 */ b .L7F0C11F0 -/* 0F5984 7F0C0E54 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0E58: -/* 0F5988 7F0C0E58 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F598C 7F0C0E5C 00000000 */ nop -/* 0F5990 7F0C0E60 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5994 7F0C0E64 44816000 */ mtc1 $at, $f12 -/* 0F5998 7F0C0E68 0C001C5A */ jal musicTrack1FadeIn -/* 0F599C 7F0C0E6C 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F59A0 7F0C0E70 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F59A4 7F0C0E74 44816000 */ mtc1 $at, $f12 -/* 0F59A8 7F0C0E78 0C001D20 */ jal musicTrack2FadeOut -/* 0F59AC 7F0C0E7C 00000000 */ nop -/* 0F59B0 7F0C0E80 100000DB */ b .L7F0C11F0 -/* 0F59B4 7F0C0E84 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0E88: -/* 0F59B8 7F0C0E88 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F59BC 7F0C0E8C 00000000 */ nop -/* 0F59C0 7F0C0E90 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F59C4 7F0C0E94 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F59C8 7F0C0E98 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F59CC 7F0C0E9C AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F59D0 7F0C0EA0 0C001C81 */ jal musicTrack2Play -/* 0F59D4 7F0C0EA4 24040018 */ li $a0, 24 -/* 0F59D8 7F0C0EA8 100000D1 */ b .L7F0C11F0 -/* 0F59DC 7F0C0EAC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0EB0: -/* 0F59E0 7F0C0EB0 2C810007 */ sltiu $at, $a0, 7 -/* 0F59E4 7F0C0EB4 1020004C */ beqz $at, .L7F0C0FE8 -/* 0F59E8 7F0C0EB8 00044080 */ sll $t0, $a0, 2 -/* 0F59EC 7F0C0EBC 3C018006 */ lui $at, %hi(jpt_8005B804) -/* 0F59F0 7F0C0EC0 00280821 */ addu $at, $at, $t0 -/* 0F59F4 7F0C0EC4 8C28B804 */ lw $t0, %lo(jpt_8005B804)($at) -/* 0F59F8 7F0C0EC8 01000008 */ jr $t0 -/* 0F59FC 7F0C0ECC 00000000 */ nop -.L7F0C0ED0: -/* 0F5A00 7F0C0ED0 0C001BF4 */ jal musicTrack1Stop -/* 0F5A04 7F0C0ED4 00000000 */ nop -/* 0F5A08 7F0C0ED8 0C001CD6 */ jal musicTrack2Stop -/* 0F5A0C 7F0C0EDC 00000000 */ nop -/* 0F5A10 7F0C0EE0 0C001DB8 */ jal musicTrack3Stop -/* 0F5A14 7F0C0EE4 00000000 */ nop -/* 0F5A18 7F0C0EE8 100000C1 */ b .L7F0C11F0 -/* 0F5A1C 7F0C0EEC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0EF0: -/* 0F5A20 7F0C0EF0 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5A24 7F0C0EF4 00000000 */ nop -/* 0F5A28 7F0C0EF8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5A2C 7F0C0EFC 44816000 */ mtc1 $at, $f12 -/* 0F5A30 7F0C0F00 0C001C5A */ jal musicTrack1FadeIn -/* 0F5A34 7F0C0F04 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5A38 7F0C0F08 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5A3C 7F0C0F0C 44816000 */ mtc1 $at, $f12 -/* 0F5A40 7F0C0F10 0C001D20 */ jal musicTrack2FadeOut -/* 0F5A44 7F0C0F14 00000000 */ nop -/* 0F5A48 7F0C0F18 100000B5 */ b .L7F0C11F0 -/* 0F5A4C 7F0C0F1C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0F20: -/* 0F5A50 7F0C0F20 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5A54 7F0C0F24 00000000 */ nop -/* 0F5A58 7F0C0F28 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5A5C 7F0C0F2C 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5A60 7F0C0F30 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5A64 7F0C0F34 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F5A68 7F0C0F38 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5A6C 7F0C0F3C 0FC34A24 */ jal musicGetXTrackForStage -/* 0F5A70 7F0C0F40 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F5A74 7F0C0F44 0C001C81 */ jal musicTrack2Play -/* 0F5A78 7F0C0F48 00402025 */ move $a0, $v0 -/* 0F5A7C 7F0C0F4C 100000A8 */ b .L7F0C11F0 -/* 0F5A80 7F0C0F50 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0F54: -/* 0F5A84 7F0C0F54 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5A88 7F0C0F58 00000000 */ nop -/* 0F5A8C 7F0C0F5C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5A90 7F0C0F60 44816000 */ mtc1 $at, $f12 -/* 0F5A94 7F0C0F64 0C001C5A */ jal musicTrack1FadeIn -/* 0F5A98 7F0C0F68 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5A9C 7F0C0F6C 0FC30304 */ jal sub_GAME_7F0C0C10 -/* 0F5AA0 7F0C0F70 00000000 */ nop -/* 0F5AA4 7F0C0F74 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5AA8 7F0C0F78 44816000 */ mtc1 $at, $f12 -/* 0F5AAC 7F0C0F7C 0C001E1E */ jal musicTrack3FadeIn -/* 0F5AB0 7F0C0F80 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5AB4 7F0C0F84 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5AB8 7F0C0F88 44816000 */ mtc1 $at, $f12 -/* 0F5ABC 7F0C0F8C 0C001D20 */ jal musicTrack2FadeOut -/* 0F5AC0 7F0C0F90 00000000 */ nop -/* 0F5AC4 7F0C0F94 10000096 */ b .L7F0C11F0 -/* 0F5AC8 7F0C0F98 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0F9C: -/* 0F5ACC 7F0C0F9C 0FC30304 */ jal sub_GAME_7F0C0C10 -/* 0F5AD0 7F0C0FA0 00000000 */ nop -/* 0F5AD4 7F0C0FA4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5AD8 7F0C0FA8 44816000 */ mtc1 $at, $f12 -/* 0F5ADC 7F0C0FAC 0C001E1E */ jal musicTrack3FadeIn -/* 0F5AE0 7F0C0FB0 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5AE4 7F0C0FB4 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5AE8 7F0C0FB8 00000000 */ nop -/* 0F5AEC 7F0C0FBC 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5AF0 7F0C0FC0 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5AF4 7F0C0FC4 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5AF8 7F0C0FC8 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F5AFC 7F0C0FCC AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5B00 7F0C0FD0 0FC34A24 */ jal musicGetXTrackForStage -/* 0F5B04 7F0C0FD4 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F5B08 7F0C0FD8 0C001C81 */ jal musicTrack2Play -/* 0F5B0C 7F0C0FDC 00402025 */ move $a0, $v0 -/* 0F5B10 7F0C0FE0 10000083 */ b .L7F0C11F0 -/* 0F5B14 7F0C0FE4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0FE8: -/* 0F5B18 7F0C0FE8 2C810007 */ sltiu $at, $a0, 7 -/* 0F5B1C 7F0C0FEC 10200031 */ beqz $at, .L7F0C10B4 -/* 0F5B20 7F0C0FF0 00044880 */ sll $t1, $a0, 2 -/* 0F5B24 7F0C0FF4 3C018006 */ lui $at, %hi(jpt_8005B820) -/* 0F5B28 7F0C0FF8 00290821 */ addu $at, $at, $t1 -/* 0F5B2C 7F0C0FFC 8C29B820 */ lw $t1, %lo(jpt_8005B820)($at) -/* 0F5B30 7F0C1000 01200008 */ jr $t1 -/* 0F5B34 7F0C1004 00000000 */ nop -.L7F0C1008: -/* 0F5B38 7F0C1008 0C001BF4 */ jal musicTrack1Stop -/* 0F5B3C 7F0C100C 00000000 */ nop -/* 0F5B40 7F0C1010 0C001CD6 */ jal musicTrack2Stop -/* 0F5B44 7F0C1014 00000000 */ nop -/* 0F5B48 7F0C1018 0C001DB8 */ jal musicTrack3Stop -/* 0F5B4C 7F0C101C 00000000 */ nop -/* 0F5B50 7F0C1020 10000073 */ b .L7F0C11F0 -/* 0F5B54 7F0C1024 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C1028: -/* 0F5B58 7F0C1028 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5B5C 7F0C102C 00000000 */ nop -/* 0F5B60 7F0C1030 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5B64 7F0C1034 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5B68 7F0C1038 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5B6C 7F0C103C AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5B70 7F0C1040 0C001C81 */ jal musicTrack2Play -/* 0F5B74 7F0C1044 24040018 */ li $a0, 24 -/* 0F5B78 7F0C1048 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5B7C 7F0C104C 44816000 */ mtc1 $at, $f12 -/* 0F5B80 7F0C1050 0C001C3E */ jal musicTrack1FadeOut -/* 0F5B84 7F0C1054 00000000 */ nop -/* 0F5B88 7F0C1058 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5B8C 7F0C105C 44816000 */ mtc1 $at, $f12 -/* 0F5B90 7F0C1060 0C001E02 */ jal musicTrack3FadeOut -/* 0F5B94 7F0C1064 00000000 */ nop -/* 0F5B98 7F0C1068 10000061 */ b .L7F0C11F0 -/* 0F5B9C 7F0C106C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C1070: -/* 0F5BA0 7F0C1070 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5BA4 7F0C1074 00000000 */ nop -/* 0F5BA8 7F0C1078 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5BAC 7F0C107C 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5BB0 7F0C1080 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5BB4 7F0C1084 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F5BB8 7F0C1088 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5BBC 7F0C108C 0FC34A24 */ jal musicGetXTrackForStage -/* 0F5BC0 7F0C1090 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F5BC4 7F0C1094 0C001C81 */ jal musicTrack2Play -/* 0F5BC8 7F0C1098 00402025 */ move $a0, $v0 -/* 0F5BCC 7F0C109C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5BD0 7F0C10A0 44816000 */ mtc1 $at, $f12 -/* 0F5BD4 7F0C10A4 0C001C3E */ jal musicTrack1FadeOut -/* 0F5BD8 7F0C10A8 00000000 */ nop -/* 0F5BDC 7F0C10AC 10000050 */ b .L7F0C11F0 -/* 0F5BE0 7F0C10B0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C10B4: -/* 0F5BE4 7F0C10B4 2C810007 */ sltiu $at, $a0, 7 -/* 0F5BE8 7F0C10B8 10200028 */ beqz $at, .L7F0C115C -/* 0F5BEC 7F0C10BC 00045080 */ sll $t2, $a0, 2 -/* 0F5BF0 7F0C10C0 3C018006 */ lui $at, %hi(jpt_8005B83C) -/* 0F5BF4 7F0C10C4 002A0821 */ addu $at, $at, $t2 -/* 0F5BF8 7F0C10C8 8C2AB83C */ lw $t2, %lo(jpt_8005B83C)($at) -/* 0F5BFC 7F0C10CC 01400008 */ jr $t2 -/* 0F5C00 7F0C10D0 00000000 */ nop -.L7F0C10D4: -/* 0F5C04 7F0C10D4 0C001BF4 */ jal musicTrack1Stop -/* 0F5C08 7F0C10D8 00000000 */ nop -/* 0F5C0C 7F0C10DC 0C001CD6 */ jal musicTrack2Stop -/* 0F5C10 7F0C10E0 00000000 */ nop -/* 0F5C14 7F0C10E4 0C001DB8 */ jal musicTrack3Stop -/* 0F5C18 7F0C10E8 00000000 */ nop -/* 0F5C1C 7F0C10EC 10000040 */ b .L7F0C11F0 -/* 0F5C20 7F0C10F0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C10F4: -/* 0F5C24 7F0C10F4 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5C28 7F0C10F8 00000000 */ nop -/* 0F5C2C 7F0C10FC 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5C30 7F0C1100 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5C34 7F0C1104 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5C38 7F0C1108 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5C3C 7F0C110C 0C001C81 */ jal musicTrack2Play -/* 0F5C40 7F0C1110 24040018 */ li $a0, 24 -/* 0F5C44 7F0C1114 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5C48 7F0C1118 44816000 */ mtc1 $at, $f12 -/* 0F5C4C 7F0C111C 0C001E02 */ jal musicTrack3FadeOut -/* 0F5C50 7F0C1120 00000000 */ nop -/* 0F5C54 7F0C1124 10000032 */ b .L7F0C11F0 -/* 0F5C58 7F0C1128 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C112C: -/* 0F5C5C 7F0C112C 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5C60 7F0C1130 00000000 */ nop -/* 0F5C64 7F0C1134 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5C68 7F0C1138 44816000 */ mtc1 $at, $f12 -/* 0F5C6C 7F0C113C 0C001C5A */ jal musicTrack1FadeIn -/* 0F5C70 7F0C1140 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5C74 7F0C1144 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5C78 7F0C1148 44816000 */ mtc1 $at, $f12 -/* 0F5C7C 7F0C114C 0C001D20 */ jal musicTrack2FadeOut -/* 0F5C80 7F0C1150 00000000 */ nop -/* 0F5C84 7F0C1154 10000026 */ b .L7F0C11F0 -/* 0F5C88 7F0C1158 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C115C: -/* 0F5C8C 7F0C115C 2C810007 */ sltiu $at, $a0, 7 -/* 0F5C90 7F0C1160 10200020 */ beqz $at, .L7F0C11E4 -/* 0F5C94 7F0C1164 00045880 */ sll $t3, $a0, 2 -/* 0F5C98 7F0C1168 3C018006 */ lui $at, %hi(jpt_8005B858) -/* 0F5C9C 7F0C116C 002B0821 */ addu $at, $at, $t3 -/* 0F5CA0 7F0C1170 8C2BB858 */ lw $t3, %lo(jpt_8005B858)($at) -/* 0F5CA4 7F0C1174 01600008 */ jr $t3 -/* 0F5CA8 7F0C1178 00000000 */ nop -.L7F0C117C: -/* 0F5CAC 7F0C117C 0C001BF4 */ jal musicTrack1Stop -/* 0F5CB0 7F0C1180 00000000 */ nop -/* 0F5CB4 7F0C1184 0C001CD6 */ jal musicTrack2Stop -/* 0F5CB8 7F0C1188 00000000 */ nop -/* 0F5CBC 7F0C118C 0C001DB8 */ jal musicTrack3Stop -/* 0F5CC0 7F0C1190 00000000 */ nop -/* 0F5CC4 7F0C1194 10000016 */ b .L7F0C11F0 -/* 0F5CC8 7F0C1198 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C119C: -/* 0F5CCC 7F0C119C 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5CD0 7F0C11A0 00000000 */ nop -/* 0F5CD4 7F0C11A4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0F5CD8 7F0C11A8 44816000 */ mtc1 $at, $f12 -/* 0F5CDC 7F0C11AC 0C001C5A */ jal musicTrack1FadeIn -/* 0F5CE0 7F0C11B0 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5CE4 7F0C11B4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0F5CE8 7F0C11B8 44816000 */ mtc1 $at, $f12 -/* 0F5CEC 7F0C11BC 0C001D20 */ jal musicTrack2FadeOut -/* 0F5CF0 7F0C11C0 00000000 */ nop -/* 0F5CF4 7F0C11C4 1000000A */ b .L7F0C11F0 -/* 0F5CF8 7F0C11C8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C11CC: -/* 0F5CFC 7F0C11CC 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5D00 7F0C11D0 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5D04 7F0C11D4 0C001C81 */ jal musicTrack2Play -/* 0F5D08 7F0C11D8 2404003A */ li $a0, 58 -/* 0F5D0C 7F0C11DC 10000004 */ b .L7F0C11F0 -/* 0F5D10 7F0C11E0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C11E4: -/* 0F5D14 7F0C11E4 1000FFFF */ b .L7F0C11E4 -/* 0F5D18 7F0C11E8 00000000 */ nop -.L7F0C11EC: -/* 0F5D1C 7F0C11EC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C11F0: -/* 0F5D20 7F0C11F0 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0F5D24 7F0C11F4 03E00008 */ jr $ra -/* 0F5D28 7F0C11F8 00000000 */ nop -) -#endif - -#ifdef VERSION_JP -GLOBAL_ASM( - .late_rodata -/*D:8005B790*/ -glabel jpt_8005B790 -.word .Ljp7F0C1904 -.word .Ljp7F0C19D8 -.word .Ljp7F0C1AC8 -.word .Ljp7F0C1B60 -.word .Ljp7F0C1C98 -.word .Ljp7F0C1D64 -.word .Ljp7F0C1E0C - -/*D:8005B7AC*/ -glabel jpt_8005B7AC -.word .Ljp7F0C1924 -.word .Ljp7F0C1944 -.word .Ljp7F0C19D8 -.word .Ljp7F0C19D8 -.word .Ljp7F0C1978 -.word .Ljp7F0C19D8 -.word .Ljp7F0C19D8 - - -/*D:8005B7C8*/ -glabel jpt_8005B7C8 -.word .Ljp7F0C19F8 -.word .Ljp7F0C1AC8 -.word .Ljp7F0C1A18 -.word .Ljp7F0C1A5C -.word .Ljp7F0C1AC8 -.word .Ljp7F0C1AC8 -.word .Ljp7F0C1A94 - -glabel music_rate_8005B7E4 -.word 0x3ca3d70a /*0.02*/ - -/*D:8005B7E8*/ -glabel jpt_8005B7E8 -.word .Ljp7F0C1AE8 -.word .Ljp7F0C1B08 -.word .Ljp7F0C1E9C -.word .Ljp7F0C1B38 -.word .Ljp7F0C1B60 -.word .Ljp7F0C1B60 -.word .Ljp7F0C1B60 - -/*D:8005B804*/ -glabel jpt_8005B804 -.word .Ljp7F0C1B80 -.word .Ljp7F0C1BA0 -.word .Ljp7F0C1BD0 -.word .Ljp7F0C1C98 -.word .Ljp7F0C1C04 -.word .Ljp7F0C1C4C -.word .Ljp7F0C1C98 - -/*D:8005B820*/ -glabel jpt_8005B820 -.word .Ljp7F0C1CB8 -.word .Ljp7F0C1D64 -.word .Ljp7F0C1D64 -.word .Ljp7F0C1CD8 -.word .Ljp7F0C1D64 -.word .Ljp7F0C1D20 -.word .Ljp7F0C1D64 - -/*D:8005B83C*/ -glabel jpt_8005B83C -.word .Ljp7F0C1D84 -.word .Ljp7F0C1E0C -.word .Ljp7F0C1E0C -.word .Ljp7F0C1DA4 -.word .Ljp7F0C1DDC -.word .Ljp7F0C1E0C -.word .Ljp7F0C1E0C - -/*D:8005B858*/ -glabel jpt_8005B858 -.word .Ljp7F0C1E2C -.word .Ljp7F0C1E4C -.word .Ljp7F0C1E94 -.word .Ljp7F0C1E94 -.word .Ljp7F0C1E94 -.word .Ljp7F0C1E94 -.word .Ljp7F0C1E7C - -.text -glabel set_missionstate -/* 0F643C 7F0C18CC 3C038005 */ lui $v1, %hi(mission_state) # $v1, 0x8005 -/* 0F6440 7F0C18D0 246384F0 */ addiu $v1, %lo(mission_state) # addiu $v1, $v1, -0x7b10 -/* 0F6444 7F0C18D4 8C620000 */ lw $v0, ($v1) -/* 0F6448 7F0C18D8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0F644C 7F0C18DC AFBF0014 */ sw $ra, 0x14($sp) -/* 0F6450 7F0C18E0 2C410007 */ sltiu $at, $v0, 7 -/* 0F6454 7F0C18E4 1020016B */ beqz $at, .Ljp7F0C1E94 -/* 0F6458 7F0C18E8 AC640000 */ sw $a0, ($v1) -/* 0F645C 7F0C18EC 00027080 */ sll $t6, $v0, 2 -/* 0F6460 7F0C18F0 3C018006 */ lui $at, %hi(jpt_8005B790) -/* 0F6464 7F0C18F4 002E0821 */ addu $at, $at, $t6 -/* 0F6468 7F0C18F8 8C2EB7D0 */ lw $t6, %lo(jpt_8005B790)($at) -/* 0F646C 7F0C18FC 01C00008 */ jr $t6 -/* 0F6470 7F0C1900 00000000 */ nop -.Ljp7F0C1904: -/* 0F6474 7F0C1904 2C810007 */ sltiu $at, $a0, 7 -/* 0F6478 7F0C1908 10200033 */ beqz $at, .Ljp7F0C19D8 -/* 0F647C 7F0C190C 00047880 */ sll $t7, $a0, 2 -/* 0F6480 7F0C1910 3C018006 */ lui $at, %hi(jpt_8005B7AC) -/* 0F6484 7F0C1914 002F0821 */ addu $at, $at, $t7 -/* 0F6488 7F0C1918 8C2FB7EC */ lw $t7, %lo(jpt_8005B7AC)($at) -/* 0F648C 7F0C191C 01E00008 */ jr $t7 -/* 0F6490 7F0C1920 00000000 */ nop -.Ljp7F0C1924: -/* 0F6494 7F0C1924 0C001BF8 */ jal musicTrack1Stop -/* 0F6498 7F0C1928 00000000 */ nop -/* 0F649C 7F0C192C 0C001CDA */ jal musicTrack2Stop -/* 0F64A0 7F0C1930 00000000 */ nop -/* 0F64A4 7F0C1934 0C001DBC */ jal musicTrack3Stop -/* 0F64A8 7F0C1938 00000000 */ nop -/* 0F64AC 7F0C193C 10000158 */ b .Ljp7F0C1EA0 -/* 0F64B0 7F0C1940 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1944: -/* 0F64B4 7F0C1944 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F64B8 7F0C1948 00000000 */ nop -/* 0F64BC 7F0C194C 0C001C13 */ jal musicTrack1ApplySeqpVol -/* 0F64C0 7F0C1950 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F64C4 7F0C1954 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) # $at, 0x8002 -/* 0F64C8 7F0C1958 3C048009 */ lui $a0, %hi(stageMusicID) # $a0, 0x8009 -/* 0F64CC 7F0C195C AC20438C */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 0F64D0 7F0C1960 0FC34D00 */ jal getmusictrack_or_randomtrack -/* 0F64D4 7F0C1964 8C84C670 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F64D8 7F0C1968 0C001BA3 */ jal musicTrack1Play -/* 0F64DC 7F0C196C 00402025 */ move $a0, $v0 -/* 0F64E0 7F0C1970 1000014B */ b .Ljp7F0C1EA0 -/* 0F64E4 7F0C1974 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1978: -/* 0F64E8 7F0C1978 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F64EC 7F0C197C 00000000 */ nop -/* 0F64F0 7F0C1980 0C001C13 */ jal musicTrack1ApplySeqpVol -/* 0F64F4 7F0C1984 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F64F8 7F0C1988 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) # $at, 0x8002 -/* 0F64FC 7F0C198C 3C048009 */ lui $a0, %hi(stageMusicID) # $a0, 0x8009 -/* 0F6500 7F0C1990 AC20438C */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 0F6504 7F0C1994 0FC34D00 */ jal getmusictrack_or_randomtrack -/* 0F6508 7F0C1998 8C84C670 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F650C 7F0C199C 0C001BA3 */ jal musicTrack1Play -/* 0F6510 7F0C19A0 00402025 */ move $a0, $v0 -/* 0F6514 7F0C19A4 0FC30628 */ jal sub_GAME_7F0C0C10 -/* 0F6518 7F0C19A8 00000000 */ nop -/* 0F651C 7F0C19AC 0C001DD7 */ jal musicTrack3ApplySeqpVol -/* 0F6520 7F0C19B0 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F6524 7F0C19B4 3C018002 */ lui $at, %hi(g_musicXTrack3Fade) # $at, 0x8002 -/* 0F6528 7F0C19B8 3C048009 */ lui $a0, %hi(stageMusicID) # $a0, 0x8009 -/* 0F652C 7F0C19BC AC204394 */ sw $zero, %lo(g_musicXTrack3Fade)($at) -/* 0F6530 7F0C19C0 0FC34D4A */ jal musicGetBgTrackForStage -/* 0F6534 7F0C19C4 8C84C670 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F6538 7F0C19C8 0C001D67 */ jal musicTrack3Play -/* 0F653C 7F0C19CC 00402025 */ move $a0, $v0 -/* 0F6540 7F0C19D0 10000133 */ b .Ljp7F0C1EA0 -/* 0F6544 7F0C19D4 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C19D8: -/* 0F6548 7F0C19D8 2C810007 */ sltiu $at, $a0, 7 -/* 0F654C 7F0C19DC 1020003A */ beqz $at, .Ljp7F0C1AC8 -/* 0F6550 7F0C19E0 0004C080 */ sll $t8, $a0, 2 -/* 0F6554 7F0C19E4 3C018006 */ lui $at, %hi(jpt_8005B7C8) -/* 0F6558 7F0C19E8 00380821 */ addu $at, $at, $t8 -/* 0F655C 7F0C19EC 8C38B808 */ lw $t8, %lo(jpt_8005B7C8)($at) -/* 0F6560 7F0C19F0 03000008 */ jr $t8 -/* 0F6564 7F0C19F4 00000000 */ nop -.Ljp7F0C19F8: -/* 0F6568 7F0C19F8 0C001BF8 */ jal musicTrack1Stop -/* 0F656C 7F0C19FC 00000000 */ nop -/* 0F6570 7F0C1A00 0C001CDA */ jal musicTrack2Stop -/* 0F6574 7F0C1A04 00000000 */ nop -/* 0F6578 7F0C1A08 0C001DBC */ jal musicTrack3Stop -/* 0F657C 7F0C1A0C 00000000 */ nop -/* 0F6580 7F0C1A10 10000123 */ b .Ljp7F0C1EA0 -/* 0F6584 7F0C1A14 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1A18: -/* 0F6588 7F0C1A18 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F658C 7F0C1A1C 00000000 */ nop -/* 0F6590 7F0C1A20 0C001CF5 */ jal musicTrack2ApplySeqpVol -/* 0F6594 7F0C1A24 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F6598 7F0C1A28 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F659C 7F0C1A2C 3C048009 */ lui $a0, %hi(stageMusicID) # $a0, 0x8009 -/* 0F65A0 7F0C1A30 AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F65A4 7F0C1A34 0FC34D5C */ jal musicGetXTrackForStage -/* 0F65A8 7F0C1A38 8C84C670 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F65AC 7F0C1A3C 0C001C85 */ jal musicTrack2Play -/* 0F65B0 7F0C1A40 00402025 */ move $a0, $v0 -/* 0F65B4 7F0C1A44 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F65B8 7F0C1A48 44816000 */ mtc1 $at, $f12 -/* 0F65BC 7F0C1A4C 0C001C42 */ jal musicTrack1FadeOut -/* 0F65C0 7F0C1A50 00000000 */ nop -/* 0F65C4 7F0C1A54 10000112 */ b .Ljp7F0C1EA0 -/* 0F65C8 7F0C1A58 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1A5C: -/* 0F65CC 7F0C1A5C 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F65D0 7F0C1A60 00000000 */ nop -/* 0F65D4 7F0C1A64 0C001CF5 */ jal musicTrack2ApplySeqpVol -/* 0F65D8 7F0C1A68 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F65DC 7F0C1A6C 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F65E0 7F0C1A70 AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F65E4 7F0C1A74 0C001C85 */ jal musicTrack2Play -/* 0F65E8 7F0C1A78 24040018 */ li $a0, 24 -/* 0F65EC 7F0C1A7C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F65F0 7F0C1A80 44816000 */ mtc1 $at, $f12 -/* 0F65F4 7F0C1A84 0C001C42 */ jal musicTrack1FadeOut -/* 0F65F8 7F0C1A88 00000000 */ nop -/* 0F65FC 7F0C1A8C 10000104 */ b .Ljp7F0C1EA0 -/* 0F6600 7F0C1A90 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1A94: -/* 0F6604 7F0C1A94 3C018006 */ lui $at, %hi(music_rate_8005B7E4) # $at, 0x8006 -/* 0F6608 7F0C1A98 0C001C42 */ jal musicTrack1FadeOut -/* 0F660C 7F0C1A9C C42CB824 */ lwc1 $f12, %lo(music_rate_8005B7E4)($at) -/* 0F6610 7F0C1AA0 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F6614 7F0C1AA4 00000000 */ nop -/* 0F6618 7F0C1AA8 0C001CF5 */ jal musicTrack2ApplySeqpVol -/* 0F661C 7F0C1AAC 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F6620 7F0C1AB0 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F6624 7F0C1AB4 AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F6628 7F0C1AB8 0C001C85 */ jal musicTrack2Play -/* 0F662C 7F0C1ABC 2404003A */ li $a0, 58 -/* 0F6630 7F0C1AC0 100000F7 */ b .Ljp7F0C1EA0 -/* 0F6634 7F0C1AC4 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1AC8: -/* 0F6638 7F0C1AC8 2C810007 */ sltiu $at, $a0, 7 -/* 0F663C 7F0C1ACC 10200024 */ beqz $at, .Ljp7F0C1B60 -/* 0F6640 7F0C1AD0 0004C880 */ sll $t9, $a0, 2 -/* 0F6644 7F0C1AD4 3C018006 */ lui $at, 0x8006 -/* 0F6648 7F0C1AD8 00390821 */ addu $at, $at, $t9 -/* 0F664C 7F0C1ADC 8C39B828 */ lw $t9, -0x47d8($at) -/* 0F6650 7F0C1AE0 03200008 */ jr $t9 -/* 0F6654 7F0C1AE4 00000000 */ nop -.Ljp7F0C1AE8: -/* 0F6658 7F0C1AE8 0C001BF8 */ jal musicTrack1Stop -/* 0F665C 7F0C1AEC 00000000 */ nop -/* 0F6660 7F0C1AF0 0C001CDA */ jal musicTrack2Stop -/* 0F6664 7F0C1AF4 00000000 */ nop -/* 0F6668 7F0C1AF8 0C001DBC */ jal musicTrack3Stop -/* 0F666C 7F0C1AFC 00000000 */ nop -/* 0F6670 7F0C1B00 100000E7 */ b .Ljp7F0C1EA0 -/* 0F6674 7F0C1B04 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1B08: -/* 0F6678 7F0C1B08 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F667C 7F0C1B0C 00000000 */ nop -/* 0F6680 7F0C1B10 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F6684 7F0C1B14 44816000 */ mtc1 $at, $f12 -/* 0F6688 7F0C1B18 0C001C5E */ jal musicTrack1FadeIn -/* 0F668C 7F0C1B1C 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F6690 7F0C1B20 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F6694 7F0C1B24 44816000 */ mtc1 $at, $f12 -/* 0F6698 7F0C1B28 0C001D24 */ jal musicTrack2FadeOut -/* 0F669C 7F0C1B2C 00000000 */ nop -/* 0F66A0 7F0C1B30 100000DB */ b .Ljp7F0C1EA0 -/* 0F66A4 7F0C1B34 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1B38: -/* 0F66A8 7F0C1B38 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F66AC 7F0C1B3C 00000000 */ nop -/* 0F66B0 7F0C1B40 0C001CF5 */ jal musicTrack2ApplySeqpVol -/* 0F66B4 7F0C1B44 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F66B8 7F0C1B48 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F66BC 7F0C1B4C AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F66C0 7F0C1B50 0C001C85 */ jal musicTrack2Play -/* 0F66C4 7F0C1B54 24040018 */ li $a0, 24 -/* 0F66C8 7F0C1B58 100000D1 */ b .Ljp7F0C1EA0 -/* 0F66CC 7F0C1B5C 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1B60: -/* 0F66D0 7F0C1B60 2C810007 */ sltiu $at, $a0, 7 -/* 0F66D4 7F0C1B64 1020004C */ beqz $at, .Ljp7F0C1C98 -/* 0F66D8 7F0C1B68 00044080 */ sll $t0, $a0, 2 -/* 0F66DC 7F0C1B6C 3C018006 */ lui $at, %hi(jpt_8005B804) -/* 0F66E0 7F0C1B70 00280821 */ addu $at, $at, $t0 -/* 0F66E4 7F0C1B74 8C28B844 */ lw $t0, %lo(jpt_8005B804)($at) -/* 0F66E8 7F0C1B78 01000008 */ jr $t0 -/* 0F66EC 7F0C1B7C 00000000 */ nop -.Ljp7F0C1B80: -/* 0F66F0 7F0C1B80 0C001BF8 */ jal musicTrack1Stop -/* 0F66F4 7F0C1B84 00000000 */ nop -/* 0F66F8 7F0C1B88 0C001CDA */ jal musicTrack2Stop -/* 0F66FC 7F0C1B8C 00000000 */ nop -/* 0F6700 7F0C1B90 0C001DBC */ jal musicTrack3Stop -/* 0F6704 7F0C1B94 00000000 */ nop -/* 0F6708 7F0C1B98 100000C1 */ b .Ljp7F0C1EA0 -/* 0F670C 7F0C1B9C 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1BA0: -/* 0F6710 7F0C1BA0 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F6714 7F0C1BA4 00000000 */ nop -/* 0F6718 7F0C1BA8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F671C 7F0C1BAC 44816000 */ mtc1 $at, $f12 -/* 0F6720 7F0C1BB0 0C001C5E */ jal musicTrack1FadeIn -/* 0F6724 7F0C1BB4 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F6728 7F0C1BB8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F672C 7F0C1BBC 44816000 */ mtc1 $at, $f12 -/* 0F6730 7F0C1BC0 0C001D24 */ jal musicTrack2FadeOut -/* 0F6734 7F0C1BC4 00000000 */ nop -/* 0F6738 7F0C1BC8 100000B5 */ b .Ljp7F0C1EA0 -/* 0F673C 7F0C1BCC 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1BD0: -/* 0F6740 7F0C1BD0 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F6744 7F0C1BD4 00000000 */ nop -/* 0F6748 7F0C1BD8 0C001CF5 */ jal musicTrack2ApplySeqpVol -/* 0F674C 7F0C1BDC 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F6750 7F0C1BE0 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F6754 7F0C1BE4 3C048009 */ lui $a0, %hi(stageMusicID) # $a0, 0x8009 -/* 0F6758 7F0C1BE8 AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F675C 7F0C1BEC 0FC34D5C */ jal musicGetXTrackForStage -/* 0F6760 7F0C1BF0 8C84C670 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F6764 7F0C1BF4 0C001C85 */ jal musicTrack2Play -/* 0F6768 7F0C1BF8 00402025 */ move $a0, $v0 -/* 0F676C 7F0C1BFC 100000A8 */ b .Ljp7F0C1EA0 -/* 0F6770 7F0C1C00 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1C04: -/* 0F6774 7F0C1C04 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F6778 7F0C1C08 00000000 */ nop -/* 0F677C 7F0C1C0C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F6780 7F0C1C10 44816000 */ mtc1 $at, $f12 -/* 0F6784 7F0C1C14 0C001C5E */ jal musicTrack1FadeIn -/* 0F6788 7F0C1C18 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F678C 7F0C1C1C 0FC30628 */ jal sub_GAME_7F0C0C10 -/* 0F6790 7F0C1C20 00000000 */ nop -/* 0F6794 7F0C1C24 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F6798 7F0C1C28 44816000 */ mtc1 $at, $f12 -/* 0F679C 7F0C1C2C 0C001E22 */ jal musicTrack3FadeIn -/* 0F67A0 7F0C1C30 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F67A4 7F0C1C34 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F67A8 7F0C1C38 44816000 */ mtc1 $at, $f12 -/* 0F67AC 7F0C1C3C 0C001D24 */ jal musicTrack2FadeOut -/* 0F67B0 7F0C1C40 00000000 */ nop -/* 0F67B4 7F0C1C44 10000096 */ b .Ljp7F0C1EA0 -/* 0F67B8 7F0C1C48 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1C4C: -/* 0F67BC 7F0C1C4C 0FC30628 */ jal sub_GAME_7F0C0C10 -/* 0F67C0 7F0C1C50 00000000 */ nop -/* 0F67C4 7F0C1C54 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F67C8 7F0C1C58 44816000 */ mtc1 $at, $f12 -/* 0F67CC 7F0C1C5C 0C001E22 */ jal musicTrack3FadeIn -/* 0F67D0 7F0C1C60 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F67D4 7F0C1C64 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F67D8 7F0C1C68 00000000 */ nop -/* 0F67DC 7F0C1C6C 0C001CF5 */ jal musicTrack2ApplySeqpVol -/* 0F67E0 7F0C1C70 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F67E4 7F0C1C74 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F67E8 7F0C1C78 3C048009 */ lui $a0, %hi(stageMusicID) # $a0, 0x8009 -/* 0F67EC 7F0C1C7C AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F67F0 7F0C1C80 0FC34D5C */ jal musicGetXTrackForStage -/* 0F67F4 7F0C1C84 8C84C670 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F67F8 7F0C1C88 0C001C85 */ jal musicTrack2Play -/* 0F67FC 7F0C1C8C 00402025 */ move $a0, $v0 -/* 0F6800 7F0C1C90 10000083 */ b .Ljp7F0C1EA0 -/* 0F6804 7F0C1C94 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1C98: -/* 0F6808 7F0C1C98 2C810007 */ sltiu $at, $a0, 7 -/* 0F680C 7F0C1C9C 10200031 */ beqz $at, .Ljp7F0C1D64 -/* 0F6810 7F0C1CA0 00044880 */ sll $t1, $a0, 2 -/* 0F6814 7F0C1CA4 3C018006 */ lui $at, 0x8006 -/* 0F6818 7F0C1CA8 00290821 */ addu $at, $at, $t1 -/* 0F681C 7F0C1CAC 8C29B860 */ lw $t1, -0x47a0($at) -/* 0F6820 7F0C1CB0 01200008 */ jr $t1 -/* 0F6824 7F0C1CB4 00000000 */ nop -.Ljp7F0C1CB8: -/* 0F6828 7F0C1CB8 0C001BF8 */ jal musicTrack1Stop -/* 0F682C 7F0C1CBC 00000000 */ nop -/* 0F6830 7F0C1CC0 0C001CDA */ jal musicTrack2Stop -/* 0F6834 7F0C1CC4 00000000 */ nop -/* 0F6838 7F0C1CC8 0C001DBC */ jal musicTrack3Stop -/* 0F683C 7F0C1CCC 00000000 */ nop -/* 0F6840 7F0C1CD0 10000073 */ b .Ljp7F0C1EA0 -/* 0F6844 7F0C1CD4 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1CD8: -/* 0F6848 7F0C1CD8 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F684C 7F0C1CDC 00000000 */ nop -/* 0F6850 7F0C1CE0 0C001CF5 */ jal musicTrack2ApplySeqpVol -/* 0F6854 7F0C1CE4 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F6858 7F0C1CE8 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F685C 7F0C1CEC AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F6860 7F0C1CF0 0C001C85 */ jal musicTrack2Play -/* 0F6864 7F0C1CF4 24040018 */ li $a0, 24 -/* 0F6868 7F0C1CF8 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F686C 7F0C1CFC 44816000 */ mtc1 $at, $f12 -/* 0F6870 7F0C1D00 0C001C42 */ jal musicTrack1FadeOut -/* 0F6874 7F0C1D04 00000000 */ nop -/* 0F6878 7F0C1D08 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F687C 7F0C1D0C 44816000 */ mtc1 $at, $f12 -/* 0F6880 7F0C1D10 0C001E06 */ jal musicTrack3FadeOut -/* 0F6884 7F0C1D14 00000000 */ nop -/* 0F6888 7F0C1D18 10000061 */ b .Ljp7F0C1EA0 -/* 0F688C 7F0C1D1C 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1D20: -/* 0F6890 7F0C1D20 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F6894 7F0C1D24 00000000 */ nop -/* 0F6898 7F0C1D28 0C001CF5 */ jal musicTrack2ApplySeqpVol -/* 0F689C 7F0C1D2C 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F68A0 7F0C1D30 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F68A4 7F0C1D34 3C048009 */ lui $a0, %hi(stageMusicID) # $a0, 0x8009 -/* 0F68A8 7F0C1D38 AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F68AC 7F0C1D3C 0FC34D5C */ jal musicGetXTrackForStage -/* 0F68B0 7F0C1D40 8C84C670 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F68B4 7F0C1D44 0C001C85 */ jal musicTrack2Play -/* 0F68B8 7F0C1D48 00402025 */ move $a0, $v0 -/* 0F68BC 7F0C1D4C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F68C0 7F0C1D50 44816000 */ mtc1 $at, $f12 -/* 0F68C4 7F0C1D54 0C001C42 */ jal musicTrack1FadeOut -/* 0F68C8 7F0C1D58 00000000 */ nop -/* 0F68CC 7F0C1D5C 10000050 */ b .Ljp7F0C1EA0 -/* 0F68D0 7F0C1D60 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1D64: -/* 0F68D4 7F0C1D64 2C810007 */ sltiu $at, $a0, 7 -/* 0F68D8 7F0C1D68 10200028 */ beqz $at, .Ljp7F0C1E0C -/* 0F68DC 7F0C1D6C 00045080 */ sll $t2, $a0, 2 -/* 0F68E0 7F0C1D70 3C018006 */ lui $at, %hi(jpt_8005B83C) -/* 0F68E4 7F0C1D74 002A0821 */ addu $at, $at, $t2 -/* 0F68E8 7F0C1D78 8C2AB87C */ lw $t2, %lo(jpt_8005B83C)($at) -/* 0F68EC 7F0C1D7C 01400008 */ jr $t2 -/* 0F68F0 7F0C1D80 00000000 */ nop -.Ljp7F0C1D84: -/* 0F68F4 7F0C1D84 0C001BF8 */ jal musicTrack1Stop -/* 0F68F8 7F0C1D88 00000000 */ nop -/* 0F68FC 7F0C1D8C 0C001CDA */ jal musicTrack2Stop -/* 0F6900 7F0C1D90 00000000 */ nop -/* 0F6904 7F0C1D94 0C001DBC */ jal musicTrack3Stop -/* 0F6908 7F0C1D98 00000000 */ nop -/* 0F690C 7F0C1D9C 10000040 */ b .Ljp7F0C1EA0 -/* 0F6910 7F0C1DA0 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1DA4: -/* 0F6914 7F0C1DA4 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F6918 7F0C1DA8 00000000 */ nop -/* 0F691C 7F0C1DAC 0C001CF5 */ jal musicTrack2ApplySeqpVol -/* 0F6920 7F0C1DB0 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F6924 7F0C1DB4 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F6928 7F0C1DB8 AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F692C 7F0C1DBC 0C001C85 */ jal musicTrack2Play -/* 0F6930 7F0C1DC0 24040018 */ li $a0, 24 -/* 0F6934 7F0C1DC4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F6938 7F0C1DC8 44816000 */ mtc1 $at, $f12 -/* 0F693C 7F0C1DCC 0C001E06 */ jal musicTrack3FadeOut -/* 0F6940 7F0C1DD0 00000000 */ nop -/* 0F6944 7F0C1DD4 10000032 */ b .Ljp7F0C1EA0 -/* 0F6948 7F0C1DD8 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1DDC: -/* 0F694C 7F0C1DDC 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F6950 7F0C1DE0 00000000 */ nop -/* 0F6954 7F0C1DE4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F6958 7F0C1DE8 44816000 */ mtc1 $at, $f12 -/* 0F695C 7F0C1DEC 0C001C5E */ jal musicTrack1FadeIn -/* 0F6960 7F0C1DF0 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F6964 7F0C1DF4 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F6968 7F0C1DF8 44816000 */ mtc1 $at, $f12 -/* 0F696C 7F0C1DFC 0C001D24 */ jal musicTrack2FadeOut -/* 0F6970 7F0C1E00 00000000 */ nop -/* 0F6974 7F0C1E04 10000026 */ b .Ljp7F0C1EA0 -/* 0F6978 7F0C1E08 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1E0C: -/* 0F697C 7F0C1E0C 2C810007 */ sltiu $at, $a0, 7 -/* 0F6980 7F0C1E10 10200020 */ beqz $at, .Ljp7F0C1E94 -/* 0F6984 7F0C1E14 00045880 */ sll $t3, $a0, 2 -/* 0F6988 7F0C1E18 3C018006 */ lui $at, %hi(jpt_8005B858) -/* 0F698C 7F0C1E1C 002B0821 */ addu $at, $at, $t3 -/* 0F6990 7F0C1E20 8C2BB898 */ lw $t3, %lo(jpt_8005B858)($at) -/* 0F6994 7F0C1E24 01600008 */ jr $t3 -/* 0F6998 7F0C1E28 00000000 */ nop -.Ljp7F0C1E2C: -/* 0F699C 7F0C1E2C 0C001BF8 */ jal musicTrack1Stop -/* 0F69A0 7F0C1E30 00000000 */ nop -/* 0F69A4 7F0C1E34 0C001CDA */ jal musicTrack2Stop -/* 0F69A8 7F0C1E38 00000000 */ nop -/* 0F69AC 7F0C1E3C 0C001DBC */ jal musicTrack3Stop -/* 0F69B0 7F0C1E40 00000000 */ nop -/* 0F69B4 7F0C1E44 10000016 */ b .Ljp7F0C1EA0 -/* 0F69B8 7F0C1E48 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1E4C: -/* 0F69BC 7F0C1E4C 0FC30620 */ jal sub_GAME_7F0C0BF0 -/* 0F69C0 7F0C1E50 00000000 */ nop -/* 0F69C4 7F0C1E54 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0F69C8 7F0C1E58 44816000 */ mtc1 $at, $f12 -/* 0F69CC 7F0C1E5C 0C001C5E */ jal musicTrack1FadeIn -/* 0F69D0 7F0C1E60 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F69D4 7F0C1E64 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0F69D8 7F0C1E68 44816000 */ mtc1 $at, $f12 -/* 0F69DC 7F0C1E6C 0C001D24 */ jal musicTrack2FadeOut -/* 0F69E0 7F0C1E70 00000000 */ nop -/* 0F69E4 7F0C1E74 1000000A */ b .Ljp7F0C1EA0 -/* 0F69E8 7F0C1E78 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1E7C: -/* 0F69EC 7F0C1E7C 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) # $at, 0x8002 -/* 0F69F0 7F0C1E80 AC204390 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F69F4 7F0C1E84 0C001C85 */ jal musicTrack2Play -/* 0F69F8 7F0C1E88 2404003A */ li $a0, 58 -/* 0F69FC 7F0C1E8C 10000004 */ b .Ljp7F0C1EA0 -/* 0F6A00 7F0C1E90 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1E94: -/* 0F6A04 7F0C1E94 1000FFFF */ b .Ljp7F0C1E94 -/* 0F6A08 7F0C1E98 00000000 */ nop -.Ljp7F0C1E9C: -/* 0F6A0C 7F0C1E9C 8FBF0014 */ lw $ra, 0x14($sp) -.Ljp7F0C1EA0: -/* 0F6A10 7F0C1EA0 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0F6A14 7F0C1EA4 03E00008 */ jr $ra -/* 0F6A18 7F0C1EA8 00000000 */ nop -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -/*D:8005B790*/ -glabel jpt_8005B790 -.word .L7F0C0C74 -.word .L7F0C0D28 -.word .L7F0C0E18 -.word .L7F0C0EB0 -.word .L7F0C0FE8 -.word .L7F0C10B4 -.word .L7F0C115C - -/*D:8005B7AC*/ -glabel jpt_8005B7AC -.word .L7F0C11EC_01 /***/ -.word .L7F0C0C94_01 /***/ -.word .L7F0C0D28 -.word .L7F0C0D28 -.word .L7F0C0C94_02 /***/ -.word .L7F0C0D28 -.word .L7F0C0D28 - -/*D:8005B7C8*/ -glabel jpt_8005B7C8 -.word .L7F0C0D48 -.word .L7F0C0E18 -.word .L7F0C0D68 -.word .L7F0C0DAC -.word .L7F0C0E18 -.word .L7F0C0E18 -.word .L7F0C0DE4 - -glabel music_rate_8005B7E4 -.word 0x3ca3d70a /*0.02*/ - -/*D:8005B7E8*/ -glabel jpt_8005B7E8 -.word .L7F0C0E38 -.word .L7F0C0E58 -.word .L7F0C11EC -.word .L7F0C0E88 -.word .L7F0C0EB0 -.word .L7F0C0EB0 -.word .L7F0C0EB0 - -/*D:8005B804*/ -glabel jpt_8005B804 -.word .L7F0C0ED0 -.word .L7F0C0EF0 -.word .L7F0C0F20 -.word .L7F0C0FE8 -.word .L7F0C0F54 -.word .L7F0C0F9C -.word .L7F0C0FE8 - -/*D:8005B820*/ -glabel jpt_8005B820 -.word .L7F0C1008 -.word .L7F0C10B4 -.word .L7F0C10B4 -.word .L7F0C1028 -.word .L7F0C10B4 -.word .L7F0C1070 -.word .L7F0C10B4 - -/*D:8005B83C*/ -glabel jpt_8005B83C -.word .L7F0C10D4 -.word .L7F0C115C -.word .L7F0C115C -.word .L7F0C10F4 -.word .L7F0C112C -.word .L7F0C115C -.word .L7F0C115C - -/*D:8005B858*/ -glabel jpt_8005B858 -.word .L7F0C117C -.word .L7F0C119C -.word .L7F0C11E4 -.word .L7F0C11E4 -.word .L7F0C11E4 -.word .L7F0C11E4 -.word .L7F0C11CC - - -.text -glabel set_missionstate -/* 0F576C set_missionstate 3C038005 */ lui $v1, %hi(mission_state) -/* 0F5770 7F0C0C40 246384C0 */ addiu $v1, %lo(mission_state) # addiu $v1, $v1, -0x7b40 -/* 0F5774 7F0C0C44 8C620000 */ lw $v0, ($v1) -/* 0F5778 7F0C0C48 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0F577C 7F0C0C4C AFBF0014 */ sw $ra, 0x14($sp) -/* 0F5780 7F0C0C50 2C410007 */ sltiu $at, $v0, 7 -/* 0F5784 7F0C0C54 10200163 */ beqz $at, .L7F0C11E4 -/* 0F5788 7F0C0C58 AC640000 */ sw $a0, ($v1) -/* 0F578C 7F0C0C5C 00027080 */ sll $t6, $v0, 2 -/* 0F5790 7F0C0C60 3C018006 */ lui $at, %hi(jpt_8005B790) -/* 0F5794 7F0C0C64 002E0821 */ addu $at, $at, $t6 -/* 0F5798 7F0C0C68 8C2EB790 */ lw $t6, %lo(jpt_8005B790)($at) -/* 0F579C 7F0C0C6C 01C00008 */ jr $t6 -/* 0F57A0 7F0C0C70 00000000 */ nop -.L7F0C0C74: -/* 0F57A4 7F0C0C74 2C810007 */ sltiu $at, $a0, 7 -/* 0F57A8 7F0C0C78 1020002B */ beqz $at, .L7F0C0D28 -/* 0F57AC 7F0C0C7C 00047880 */ sll $t7, $a0, 2 -/* 0F57B0 7F0C0C80 3C018006 */ lui $at, %hi(jpt_8005B7AC) -/* 0F57B4 7F0C0C84 002F0821 */ addu $at, $at, $t7 -/* 0F57B8 7F0C0C88 8C2FB7AC */ lw $t7, %lo(jpt_8005B7AC)($at) -/* 0F57BC 7F0C0C8C 01E00008 */ jr $t7 -/* 0F57C0 7F0C0C90 00000000 */ nop -.L7F0C11EC_01: -.L7F0C0C94: -/* 0F2B44 7F0C0154 0C00190C */ jal musicTrack1Stop -/* 0F2B48 7F0C0158 00000000 */ nop -/* 0F2B4C 7F0C015C 0C0019EE */ jal musicTrack2Stop -/* 0F2B50 7F0C0160 00000000 */ nop -/* 0F2B54 7F0C0164 0C001AD0 */ jal musicTrack3Stop -/* 0F2B58 7F0C0168 00000000 */ nop -/* 0F2B5C 7F0C016C 10000158 */ b .L7F0C11F0 -/* 0F2B60 7F0C0170 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0C94_01: -/* 0F2B64 7F0C0174 0FC3002C */ jal sub_GAME_7F0C0BF0 -/* 0F2B68 7F0C0178 00000000 */ nop -/* 0F2B6C 7F0C017C 0C001927 */ jal musicTrack1ApplySeqpVol -/* 0F2B70 7F0C0180 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F2B74 7F0C0184 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) # $at, 0x8002 -/* 0F2B78 7F0C0188 3C048007 */ lui $a0, %hi(stageMusicID) # $a0, 0x8007 -/* 0F2B7C 7F0C018C AC2021DC */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 0F2B80 7F0C0190 0FC34710 */ jal getmusictrack_or_randomtrack -/* 0F2B84 7F0C0194 8C8439E0 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F2B88 7F0C0198 0C0018B7 */ jal musicTrack1Play -/* 0F2B8C 7F0C019C 00402025 */ move $a0, $v0 -/* 0F2B90 7F0C01A0 1000014B */ b .L7F0C11F0 -/* 0F2B94 7F0C01A4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0C94_02: -/* 0F2B98 7F0C01A8 0FC3002C */ jal sub_GAME_7F0C0BF0 -/* 0F2B9C 7F0C01AC 00000000 */ nop -/* 0F2BA0 7F0C01B0 0C001927 */ jal musicTrack1ApplySeqpVol -/* 0F2BA4 7F0C01B4 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F2BA8 7F0C01B8 3C018002 */ lui $at, %hi(g_musicXTrack1Fade) # $at, 0x8002 -/* 0F2BAC 7F0C01BC 3C048007 */ lui $a0, %hi(stageMusicID) # $a0, 0x8007 -/* 0F2BB0 7F0C01C0 AC2021DC */ sw $zero, %lo(g_musicXTrack1Fade)($at) -/* 0F2BB4 7F0C01C4 0FC34710 */ jal getmusictrack_or_randomtrack -/* 0F2BB8 7F0C01C8 8C8439E0 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F2BBC 7F0C01CC 0C0018B7 */ jal musicTrack1Play -/* 0F2BC0 7F0C01D0 00402025 */ move $a0, $v0 -/* 0F2BC4 7F0C01D4 0FC30034 */ jal sub_GAME_7F0C0C10 -/* 0F2BC8 7F0C01D8 00000000 */ nop -/* 0F2BCC 7F0C01DC 0C001AEB */ jal musicTrack3ApplySeqpVol -/* 0F2BD0 7F0C01E0 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F2BD4 7F0C01E4 3C018002 */ lui $at, %hi(g_musicXTrack3Fade) # $at, 0x8002 -/* 0F2BD8 7F0C01E8 3C048007 */ lui $a0, %hi(stageMusicID) # $a0, 0x8007 -/* 0F2BDC 7F0C01EC AC2021E4 */ sw $zero, %lo(g_musicXTrack3Fade)($at) -/* 0F2BE0 7F0C01F0 0FC3475A */ jal musicGetBgTrackForStage -/* 0F2BE4 7F0C01F4 8C8439E0 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F2BE8 7F0C01F8 0C001A7B */ jal musicTrack3Play -/* 0F2BEC 7F0C01FC 00402025 */ move $a0, $v0 -/* 0F2BF0 7F0C0200 10000133 */ b .L7F0C11F0 -/* 0F2BF4 7F0C0204 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0D28: -/* 0F5858 7F0C0D28 2C810007 */ sltiu $at, $a0, 7 -/* 0F585C 7F0C0D2C 1020003A */ beqz $at, .L7F0C0E18 -/* 0F5860 7F0C0D30 0004C080 */ sll $t8, $a0, 2 -/* 0F5864 7F0C0D34 3C018006 */ lui $at, %hi(jpt_8005B7C8) -/* 0F5868 7F0C0D38 00380821 */ addu $at, $at, $t8 -/* 0F586C 7F0C0D3C 8C38B7C8 */ lw $t8, %lo(jpt_8005B7C8)($at) -/* 0F5870 7F0C0D40 03000008 */ jr $t8 -/* 0F5874 7F0C0D44 00000000 */ nop -.L7F0C0D48: -/* 0F5878 7F0C0D48 0C001BF4 */ jal musicTrack1Stop -/* 0F587C 7F0C0D4C 00000000 */ nop -/* 0F5880 7F0C0D50 0C001CD6 */ jal musicTrack2Stop -/* 0F5884 7F0C0D54 00000000 */ nop -/* 0F5888 7F0C0D58 0C001DB8 */ jal musicTrack3Stop -/* 0F588C 7F0C0D5C 00000000 */ nop -/* 0F5890 7F0C0D60 10000123 */ b .L7F0C11F0 -/* 0F5894 7F0C0D64 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0D68: -/* 0F5898 7F0C0D68 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F589C 7F0C0D6C 00000000 */ nop -/* 0F58A0 7F0C0D70 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F58A4 7F0C0D74 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F58A8 7F0C0D78 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F58AC 7F0C0D7C 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F58B0 7F0C0D80 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F58B4 7F0C0D84 0FC34A24 */ jal musicGetXTrackForStage -/* 0F58B8 7F0C0D88 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F58BC 7F0C0D8C 0C001C81 */ jal musicTrack2Play -/* 0F58C0 7F0C0D90 00402025 */ move $a0, $v0 -/* 0F58C4 7F0C0D94 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F58C8 7F0C0D98 44816000 */ mtc1 $at, $f12 -/* 0F58CC 7F0C0D9C 0C001C3E */ jal musicTrack1FadeOut -/* 0F58D0 7F0C0DA0 00000000 */ nop -/* 0F58D4 7F0C0DA4 10000112 */ b .L7F0C11F0 -/* 0F58D8 7F0C0DA8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0DAC: -/* 0F58DC 7F0C0DAC 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F58E0 7F0C0DB0 00000000 */ nop -/* 0F58E4 7F0C0DB4 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F58E8 7F0C0DB8 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F58EC 7F0C0DBC 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F58F0 7F0C0DC0 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F58F4 7F0C0DC4 0C001C81 */ jal musicTrack2Play -/* 0F58F8 7F0C0DC8 24040018 */ li $a0, 24 -/* 0F58FC 7F0C0DCC 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5900 7F0C0DD0 44816000 */ mtc1 $at, $f12 -/* 0F5904 7F0C0DD4 0C001C3E */ jal musicTrack1FadeOut -/* 0F5908 7F0C0DD8 00000000 */ nop -/* 0F590C 7F0C0DDC 10000104 */ b .L7F0C11F0 -/* 0F5910 7F0C0DE0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0DE4: -/* 0F5914 7F0C0DE4 3C018006 */ lui $at, %hi(music_rate_8005B7E4) -/* 0F5918 7F0C0DE8 0C001C3E */ jal musicTrack1FadeOut -/* 0F591C 7F0C0DEC C42CB7E4 */ lwc1 $f12, %lo(music_rate_8005B7E4)($at) -/* 0F5920 7F0C0DF0 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5924 7F0C0DF4 00000000 */ nop -/* 0F5928 7F0C0DF8 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F592C 7F0C0DFC 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5930 7F0C0E00 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5934 7F0C0E04 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5938 7F0C0E08 0C001C81 */ jal musicTrack2Play -/* 0F593C 7F0C0E0C 2404003A */ li $a0, 58 -/* 0F5940 7F0C0E10 100000F7 */ b .L7F0C11F0 -/* 0F5944 7F0C0E14 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0E18: -/* 0F5948 7F0C0E18 2C810007 */ sltiu $at, $a0, 7 -/* 0F594C 7F0C0E1C 10200024 */ beqz $at, .L7F0C0EB0 -/* 0F5950 7F0C0E20 0004C880 */ sll $t9, $a0, 2 -/* 0F5954 7F0C0E24 3C018006 */ lui $at, %hi(jpt_8005B7E8) -/* 0F5958 7F0C0E28 00390821 */ addu $at, $at, $t9 -/* 0F595C 7F0C0E2C 8C39B7E8 */ lw $t9, %lo(jpt_8005B7E8)($at) -/* 0F5960 7F0C0E30 03200008 */ jr $t9 -/* 0F5964 7F0C0E34 00000000 */ nop -.L7F0C0E38: -/* 0F5968 7F0C0E38 0C001BF4 */ jal musicTrack1Stop -/* 0F596C 7F0C0E3C 00000000 */ nop -/* 0F5970 7F0C0E40 0C001CD6 */ jal musicTrack2Stop -/* 0F5974 7F0C0E44 00000000 */ nop -/* 0F5978 7F0C0E48 0C001DB8 */ jal musicTrack3Stop -/* 0F597C 7F0C0E4C 00000000 */ nop -/* 0F5980 7F0C0E50 100000E7 */ b .L7F0C11F0 -/* 0F5984 7F0C0E54 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0E58: -/* 0F5988 7F0C0E58 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F598C 7F0C0E5C 00000000 */ nop -/* 0F5990 7F0C0E60 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5994 7F0C0E64 44816000 */ mtc1 $at, $f12 -/* 0F5998 7F0C0E68 0C001C5A */ jal musicTrack1FadeIn -/* 0F599C 7F0C0E6C 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F59A0 7F0C0E70 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F59A4 7F0C0E74 44816000 */ mtc1 $at, $f12 -/* 0F59A8 7F0C0E78 0C001D20 */ jal musicTrack2FadeOut -/* 0F59AC 7F0C0E7C 00000000 */ nop -/* 0F59B0 7F0C0E80 100000DB */ b .L7F0C11F0 -/* 0F59B4 7F0C0E84 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0E88: -/* 0F59B8 7F0C0E88 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F59BC 7F0C0E8C 00000000 */ nop -/* 0F59C0 7F0C0E90 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F59C4 7F0C0E94 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F59C8 7F0C0E98 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F59CC 7F0C0E9C AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F59D0 7F0C0EA0 0C001C81 */ jal musicTrack2Play -/* 0F59D4 7F0C0EA4 24040018 */ li $a0, 24 -/* 0F59D8 7F0C0EA8 100000D1 */ b .L7F0C11F0 -/* 0F59DC 7F0C0EAC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0EB0: -/* 0F59E0 7F0C0EB0 2C810007 */ sltiu $at, $a0, 7 -/* 0F59E4 7F0C0EB4 1020004C */ beqz $at, .L7F0C0FE8 -/* 0F59E8 7F0C0EB8 00044080 */ sll $t0, $a0, 2 -/* 0F59EC 7F0C0EBC 3C018006 */ lui $at, %hi(jpt_8005B804) -/* 0F59F0 7F0C0EC0 00280821 */ addu $at, $at, $t0 -/* 0F59F4 7F0C0EC4 8C28B804 */ lw $t0, %lo(jpt_8005B804)($at) -/* 0F59F8 7F0C0EC8 01000008 */ jr $t0 -/* 0F59FC 7F0C0ECC 00000000 */ nop -.L7F0C0ED0: -/* 0F5A00 7F0C0ED0 0C001BF4 */ jal musicTrack1Stop -/* 0F5A04 7F0C0ED4 00000000 */ nop -/* 0F5A08 7F0C0ED8 0C001CD6 */ jal musicTrack2Stop -/* 0F5A0C 7F0C0EDC 00000000 */ nop -/* 0F5A10 7F0C0EE0 0C001DB8 */ jal musicTrack3Stop -/* 0F5A14 7F0C0EE4 00000000 */ nop -/* 0F5A18 7F0C0EE8 100000C1 */ b .L7F0C11F0 -/* 0F5A1C 7F0C0EEC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0EF0: -/* 0F5A20 7F0C0EF0 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5A24 7F0C0EF4 00000000 */ nop -/* 0F5A28 7F0C0EF8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5A2C 7F0C0EFC 44816000 */ mtc1 $at, $f12 -/* 0F5A30 7F0C0F00 0C001C5A */ jal musicTrack1FadeIn -/* 0F5A34 7F0C0F04 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5A38 7F0C0F08 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5A3C 7F0C0F0C 44816000 */ mtc1 $at, $f12 -/* 0F5A40 7F0C0F10 0C001D20 */ jal musicTrack2FadeOut -/* 0F5A44 7F0C0F14 00000000 */ nop -/* 0F5A48 7F0C0F18 100000B5 */ b .L7F0C11F0 -/* 0F5A4C 7F0C0F1C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0F20: -/* 0F5A50 7F0C0F20 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5A54 7F0C0F24 00000000 */ nop -/* 0F5A58 7F0C0F28 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5A5C 7F0C0F2C 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5A60 7F0C0F30 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5A64 7F0C0F34 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F5A68 7F0C0F38 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5A6C 7F0C0F3C 0FC34A24 */ jal musicGetXTrackForStage -/* 0F5A70 7F0C0F40 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F5A74 7F0C0F44 0C001C81 */ jal musicTrack2Play -/* 0F5A78 7F0C0F48 00402025 */ move $a0, $v0 -/* 0F5A7C 7F0C0F4C 100000A8 */ b .L7F0C11F0 -/* 0F5A80 7F0C0F50 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0F54: -/* 0F5A84 7F0C0F54 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5A88 7F0C0F58 00000000 */ nop -/* 0F5A8C 7F0C0F5C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5A90 7F0C0F60 44816000 */ mtc1 $at, $f12 -/* 0F5A94 7F0C0F64 0C001C5A */ jal musicTrack1FadeIn -/* 0F5A98 7F0C0F68 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5A9C 7F0C0F6C 0FC30304 */ jal sub_GAME_7F0C0C10 -/* 0F5AA0 7F0C0F70 00000000 */ nop -/* 0F5AA4 7F0C0F74 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5AA8 7F0C0F78 44816000 */ mtc1 $at, $f12 -/* 0F5AAC 7F0C0F7C 0C001E1E */ jal musicTrack3FadeIn -/* 0F5AB0 7F0C0F80 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5AB4 7F0C0F84 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5AB8 7F0C0F88 44816000 */ mtc1 $at, $f12 -/* 0F5ABC 7F0C0F8C 0C001D20 */ jal musicTrack2FadeOut -/* 0F5AC0 7F0C0F90 00000000 */ nop -/* 0F5AC4 7F0C0F94 10000096 */ b .L7F0C11F0 -/* 0F5AC8 7F0C0F98 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0F9C: -/* 0F5ACC 7F0C0F9C 0FC30304 */ jal sub_GAME_7F0C0C10 -/* 0F5AD0 7F0C0FA0 00000000 */ nop -/* 0F5AD4 7F0C0FA4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0F5AD8 7F0C0FA8 44816000 */ mtc1 $at, $f12 -/* 0F5ADC 7F0C0FAC 0C001E1E */ jal musicTrack3FadeIn -/* 0F5AE0 7F0C0FB0 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5AE4 7F0C0FB4 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5AE8 7F0C0FB8 00000000 */ nop -/* 0F5AEC 7F0C0FBC 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5AF0 7F0C0FC0 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5AF4 7F0C0FC4 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5AF8 7F0C0FC8 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F5AFC 7F0C0FCC AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5B00 7F0C0FD0 0FC34A24 */ jal musicGetXTrackForStage -/* 0F5B04 7F0C0FD4 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F5B08 7F0C0FD8 0C001C81 */ jal musicTrack2Play -/* 0F5B0C 7F0C0FDC 00402025 */ move $a0, $v0 -/* 0F5B10 7F0C0FE0 10000083 */ b .L7F0C11F0 -/* 0F5B14 7F0C0FE4 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C0FE8: -/* 0F5B18 7F0C0FE8 2C810007 */ sltiu $at, $a0, 7 -/* 0F5B1C 7F0C0FEC 10200031 */ beqz $at, .L7F0C10B4 -/* 0F5B20 7F0C0FF0 00044880 */ sll $t1, $a0, 2 -/* 0F5B24 7F0C0FF4 3C018006 */ lui $at, %hi(jpt_8005B820) -/* 0F5B28 7F0C0FF8 00290821 */ addu $at, $at, $t1 -/* 0F5B2C 7F0C0FFC 8C29B820 */ lw $t1, %lo(jpt_8005B820)($at) -/* 0F5B30 7F0C1000 01200008 */ jr $t1 -/* 0F5B34 7F0C1004 00000000 */ nop -.L7F0C1008: -/* 0F5B38 7F0C1008 0C001BF4 */ jal musicTrack1Stop -/* 0F5B3C 7F0C100C 00000000 */ nop -/* 0F5B40 7F0C1010 0C001CD6 */ jal musicTrack2Stop -/* 0F5B44 7F0C1014 00000000 */ nop -/* 0F5B48 7F0C1018 0C001DB8 */ jal musicTrack3Stop -/* 0F5B4C 7F0C101C 00000000 */ nop -/* 0F5B50 7F0C1020 10000073 */ b .L7F0C11F0 -/* 0F5B54 7F0C1024 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C1028: -/* 0F5B58 7F0C1028 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5B5C 7F0C102C 00000000 */ nop -/* 0F5B60 7F0C1030 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5B64 7F0C1034 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5B68 7F0C1038 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5B6C 7F0C103C AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5B70 7F0C1040 0C001C81 */ jal musicTrack2Play -/* 0F5B74 7F0C1044 24040018 */ li $a0, 24 -/* 0F5B78 7F0C1048 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5B7C 7F0C104C 44816000 */ mtc1 $at, $f12 -/* 0F5B80 7F0C1050 0C001C3E */ jal musicTrack1FadeOut -/* 0F5B84 7F0C1054 00000000 */ nop -/* 0F5B88 7F0C1058 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5B8C 7F0C105C 44816000 */ mtc1 $at, $f12 -/* 0F5B90 7F0C1060 0C001E02 */ jal musicTrack3FadeOut -/* 0F5B94 7F0C1064 00000000 */ nop -/* 0F5B98 7F0C1068 10000061 */ b .L7F0C11F0 -/* 0F5B9C 7F0C106C 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C1070: -/* 0F5BA0 7F0C1070 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5BA4 7F0C1074 00000000 */ nop -/* 0F5BA8 7F0C1078 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5BAC 7F0C107C 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5BB0 7F0C1080 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5BB4 7F0C1084 3C048009 */ lui $a0, %hi(stageMusicID) -/* 0F5BB8 7F0C1088 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5BBC 7F0C108C 0FC34A24 */ jal musicGetXTrackForStage -/* 0F5BC0 7F0C1090 8C84C600 */ lw $a0, %lo(stageMusicID)($a0) -/* 0F5BC4 7F0C1094 0C001C81 */ jal musicTrack2Play -/* 0F5BC8 7F0C1098 00402025 */ move $a0, $v0 -/* 0F5BCC 7F0C109C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5BD0 7F0C10A0 44816000 */ mtc1 $at, $f12 -/* 0F5BD4 7F0C10A4 0C001C3E */ jal musicTrack1FadeOut -/* 0F5BD8 7F0C10A8 00000000 */ nop -/* 0F5BDC 7F0C10AC 10000050 */ b .L7F0C11F0 -/* 0F5BE0 7F0C10B0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C10B4: -/* 0F5BE4 7F0C10B4 2C810007 */ sltiu $at, $a0, 7 -/* 0F5BE8 7F0C10B8 10200028 */ beqz $at, .L7F0C115C -/* 0F5BEC 7F0C10BC 00045080 */ sll $t2, $a0, 2 -/* 0F5BF0 7F0C10C0 3C018006 */ lui $at, %hi(jpt_8005B83C) -/* 0F5BF4 7F0C10C4 002A0821 */ addu $at, $at, $t2 -/* 0F5BF8 7F0C10C8 8C2AB83C */ lw $t2, %lo(jpt_8005B83C)($at) -/* 0F5BFC 7F0C10CC 01400008 */ jr $t2 -/* 0F5C00 7F0C10D0 00000000 */ nop -.L7F0C10D4: -/* 0F5C04 7F0C10D4 0C001BF4 */ jal musicTrack1Stop -/* 0F5C08 7F0C10D8 00000000 */ nop -/* 0F5C0C 7F0C10DC 0C001CD6 */ jal musicTrack2Stop -/* 0F5C10 7F0C10E0 00000000 */ nop -/* 0F5C14 7F0C10E4 0C001DB8 */ jal musicTrack3Stop -/* 0F5C18 7F0C10E8 00000000 */ nop -/* 0F5C1C 7F0C10EC 10000040 */ b .L7F0C11F0 -/* 0F5C20 7F0C10F0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C10F4: -/* 0F5C24 7F0C10F4 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5C28 7F0C10F8 00000000 */ nop -/* 0F5C2C 7F0C10FC 0C001CF1 */ jal musicTrack2ApplySeqpVol -/* 0F5C30 7F0C1100 3044FFFF */ andi $a0, $v0, 0xffff -/* 0F5C34 7F0C1104 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5C38 7F0C1108 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5C3C 7F0C110C 0C001C81 */ jal musicTrack2Play -/* 0F5C40 7F0C1110 24040018 */ li $a0, 24 -/* 0F5C44 7F0C1114 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5C48 7F0C1118 44816000 */ mtc1 $at, $f12 -/* 0F5C4C 7F0C111C 0C001E02 */ jal musicTrack3FadeOut -/* 0F5C50 7F0C1120 00000000 */ nop -/* 0F5C54 7F0C1124 10000032 */ b .L7F0C11F0 -/* 0F5C58 7F0C1128 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C112C: -/* 0F5C5C 7F0C112C 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5C60 7F0C1130 00000000 */ nop -/* 0F5C64 7F0C1134 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5C68 7F0C1138 44816000 */ mtc1 $at, $f12 -/* 0F5C6C 7F0C113C 0C001C5A */ jal musicTrack1FadeIn -/* 0F5C70 7F0C1140 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5C74 7F0C1144 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0F5C78 7F0C1148 44816000 */ mtc1 $at, $f12 -/* 0F5C7C 7F0C114C 0C001D20 */ jal musicTrack2FadeOut -/* 0F5C80 7F0C1150 00000000 */ nop -/* 0F5C84 7F0C1154 10000026 */ b .L7F0C11F0 -/* 0F5C88 7F0C1158 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C115C: -/* 0F5C8C 7F0C115C 2C810007 */ sltiu $at, $a0, 7 -/* 0F5C90 7F0C1160 10200020 */ beqz $at, .L7F0C11E4 -/* 0F5C94 7F0C1164 00045880 */ sll $t3, $a0, 2 -/* 0F5C98 7F0C1168 3C018006 */ lui $at, %hi(jpt_8005B858) -/* 0F5C9C 7F0C116C 002B0821 */ addu $at, $at, $t3 -/* 0F5CA0 7F0C1170 8C2BB858 */ lw $t3, %lo(jpt_8005B858)($at) -/* 0F5CA4 7F0C1174 01600008 */ jr $t3 -/* 0F5CA8 7F0C1178 00000000 */ nop -.L7F0C117C: -/* 0F5CAC 7F0C117C 0C001BF4 */ jal musicTrack1Stop -/* 0F5CB0 7F0C1180 00000000 */ nop -/* 0F5CB4 7F0C1184 0C001CD6 */ jal musicTrack2Stop -/* 0F5CB8 7F0C1188 00000000 */ nop -/* 0F5CBC 7F0C118C 0C001DB8 */ jal musicTrack3Stop -/* 0F5CC0 7F0C1190 00000000 */ nop -/* 0F5CC4 7F0C1194 10000016 */ b .L7F0C11F0 -/* 0F5CC8 7F0C1198 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C119C: -/* 0F5CCC 7F0C119C 0FC302FC */ jal sub_GAME_7F0C0BF0 -/* 0F5CD0 7F0C11A0 00000000 */ nop -/* 0F5CD4 7F0C11A4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0F5CD8 7F0C11A8 44816000 */ mtc1 $at, $f12 -/* 0F5CDC 7F0C11AC 0C001C5A */ jal musicTrack1FadeIn -/* 0F5CE0 7F0C11B0 3045FFFF */ andi $a1, $v0, 0xffff -/* 0F5CE4 7F0C11B4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 0F5CE8 7F0C11B8 44816000 */ mtc1 $at, $f12 -/* 0F5CEC 7F0C11BC 0C001D20 */ jal musicTrack2FadeOut -/* 0F5CF0 7F0C11C0 00000000 */ nop -/* 0F5CF4 7F0C11C4 1000000A */ b .L7F0C11F0 -/* 0F5CF8 7F0C11C8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C11CC: -/* 0F5CFC 7F0C11CC 3C018002 */ lui $at, %hi(g_musicXTrack2Fade) -/* 0F5D00 7F0C11D0 AC204350 */ sw $zero, %lo(g_musicXTrack2Fade)($at) -/* 0F5D04 7F0C11D4 0C001C81 */ jal musicTrack2Play -/* 0F5D08 7F0C11D8 2404003A */ li $a0, 58 -/* 0F5D0C 7F0C11DC 10000004 */ b .L7F0C11F0 -/* 0F5D10 7F0C11E0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C11E4: -/* 0F5D14 7F0C11E4 1000FFFF */ b .L7F0C11E4 -/* 0F5D18 7F0C11E8 00000000 */ nop -.L7F0C11EC: -/* 0F5D1C 7F0C11EC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C11F0: -/* 0F5D20 7F0C11F0 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0F5D24 7F0C11F4 03E00008 */ jr $ra -/* 0F5D28 7F0C11F8 00000000 */ nop -) -#endif - -#endif @@ -1800,69 +317,69 @@ void sub_GAME_7F0C11FC(s32 stagenum) musicTrack3Stop(); mission_state = MISSION_STATE_0; stageMusicID = stagenum; - if (musicGetBgTrackForStage(stageMusicID) < 0) { + + if (musicGetBgTrackForStage(stageMusicID) < 0) + { set_missionstate(MISSION_STATE_1); } - else { + else + { set_missionstate(MISSION_STATE_4); } + return; } void set_missionstate_zero(void) { - set_missionstate(MISSION_STATE_0); + set_missionstate(MISSION_STATE_0); } void sub_GAME_7F0C1288(void) { - if (musicGetBgTrackForStage(stageMusicID) < 0) - { - set_missionstate(MISSION_STATE_2); - } - else - { - set_missionstate(MISSION_STATE_5); - } + if (musicGetBgTrackForStage(stageMusicID) < 0) + { + set_missionstate(MISSION_STATE_2); + } + else + { + set_missionstate(MISSION_STATE_5); + } } void sub_GAME_7F0C12CC(void) { - if (musicGetBgTrackForStage(stageMusicID) < 0) - { - set_missionstate(MISSION_STATE_1); - } - else - { - set_missionstate(MISSION_STATE_4); - } + if (musicGetBgTrackForStage(stageMusicID) < 0) + { + set_missionstate(MISSION_STATE_1); + } + else + { + set_missionstate(MISSION_STATE_4); + } } void sub_GAME_7F0C1310(void) { - dword_CODE_bss_8008C604 = mission_state; - set_missionstate(MISSION_STATE_3); + dword_CODE_bss_8008C604 = mission_state; + set_missionstate(MISSION_STATE_3); } void sub_GAME_7F0C1340(void) { - set_missionstate(dword_CODE_bss_8008C604); + set_missionstate(dword_CODE_bss_8008C604); } void sub_GAME_7F0C1364(void) { - music_slot_active_0 = 0; - music_slot_minutes_0 = 0; - music_slot_seconds_0 = 0; - music_slot_active_1 = 0; - music_slot_minutes_1 = 0; - music_slot_seconds_1 = 0; - music_slot_active_2 = 0; - music_slot_minutes_2 = 0; - music_slot_seconds_2 = 0; - music_slot_active_3 = 0; - music_slot_minutes_3 = 0; - music_slot_seconds_3 = 0; + s32 i; + + for (i=0; i<4; i++) + { + music_slot_active_0[i] = 0; + music_slot_minutes_0[i] = 0; + music_slot_seconds_0[i] = 0; + } } @@ -1870,106 +387,68 @@ void sub_GAME_7F0C1364(void) -#ifdef NONMATCHING -void reset_all_music_slots(void) { +void reset_all_music_slots(void) +{ + s32 i; + s32 var_t2; + var_t2 = 0; + + for (i=0; i<4; i++) + { + if (music_slot_active_0[i] || music_slot_minutes_0[i] > 0) + { + if (music_slot_minutes_0[i] >= g_ClockTimer) + { + music_slot_minutes_0[i] -= g_ClockTimer; + } + else + { + music_slot_minutes_0[i] = 0; + } + + if (music_slot_seconds_0[i]) + { + if (music_slot_seconds_0[i] >= g_ClockTimer) + { + music_slot_seconds_0[i] -= g_ClockTimer; + } + else + { + music_slot_seconds_0[i] = 0; + } + + if (music_slot_seconds_0[i]) + { + if ((music_slot_active_0[i]) || (music_slot_minutes_0[i])) + { + var_t2 = 1; + } + } + else + { + music_slot_active_0[i] = 0; + } + } + } + } + + if (g_ClockTimer != 0) + { + if ((get_mission_state() == MISSION_STATE_2) || (get_mission_state() == MISSION_STATE_5)) + { + if (var_t2 == 0) + { + sub_GAME_7F0C12CC(); + } + } + else if (var_t2 != 0) + { + sub_GAME_7F0C1288(); + } + } + } -#else -GLOBAL_ASM( -.text -glabel reset_all_music_slots -/* 0F5EF8 7F0C13C8 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0F5EFC 7F0C13CC 3C078009 */ lui $a3, %hi(music_slot_active_0) -/* 0F5F00 7F0C13D0 3C048009 */ lui $a0, %hi(music_slot_minutes_0) -/* 0F5F04 7F0C13D4 3C068005 */ lui $a2, %hi(g_ClockTimer) -/* 0F5F08 7F0C13D8 3C098009 */ lui $t1, %hi(music_slot_seconds_0) -/* 0F5F0C 7F0C13DC AFBF0014 */ sw $ra, 0x14($sp) -/* 0F5F10 7F0C13E0 00005025 */ move $t2, $zero -/* 0F5F14 7F0C13E4 2529C628 */ addiu $t1, %lo(music_slot_seconds_0) # addiu $t1, $t1, -0x39d8 -/* 0F5F18 7F0C13E8 8CC68374 */ lw $a2, %lo(g_ClockTimer)($a2) -/* 0F5F1C 7F0C13EC 2484C618 */ addiu $a0, %lo(music_slot_minutes_0) # addiu $a0, $a0, -0x39e8 -/* 0F5F20 7F0C13F0 24E7C608 */ addiu $a3, %lo(music_slot_active_0) # addiu $a3, $a3, -0x39f8 -/* 0F5F24 7F0C13F4 00004025 */ move $t0, $zero -.L7F0C13F8: -/* 0F5F28 7F0C13F8 8CE50000 */ lw $a1, ($a3) -/* 0F5F2C 7F0C13FC 54A00005 */ bnezl $a1, .L7F0C1414 -/* 0F5F30 7F0C1400 8C820000 */ lw $v0, ($a0) -/* 0F5F34 7F0C1404 8C8E0000 */ lw $t6, ($a0) -/* 0F5F38 7F0C1408 59C0001F */ blezl $t6, .L7F0C1488 -/* 0F5F3C 7F0C140C 24840004 */ addiu $a0, $a0, 4 -/* 0F5F40 7F0C1410 8C820000 */ lw $v0, ($a0) -.L7F0C1414: -/* 0F5F44 7F0C1414 3C0F8009 */ lui $t7, %hi(music_slot_seconds_0) -/* 0F5F48 7F0C1418 25EFC628 */ addiu $t7, %lo(music_slot_seconds_0) # addiu $t7, $t7, -0x39d8 -/* 0F5F4C 7F0C141C 0046082A */ slt $at, $v0, $a2 -/* 0F5F50 7F0C1420 14200004 */ bnez $at, .L7F0C1434 -/* 0F5F54 7F0C1424 010F1821 */ addu $v1, $t0, $t7 -/* 0F5F58 7F0C1428 0046C023 */ subu $t8, $v0, $a2 -/* 0F5F5C 7F0C142C 10000002 */ b .L7F0C1438 -/* 0F5F60 7F0C1430 AC980000 */ sw $t8, ($a0) -.L7F0C1434: -/* 0F5F64 7F0C1434 AC800000 */ sw $zero, ($a0) -.L7F0C1438: -/* 0F5F68 7F0C1438 8C620000 */ lw $v0, ($v1) -/* 0F5F6C 7F0C143C 10400011 */ beqz $v0, .L7F0C1484 -/* 0F5F70 7F0C1440 0046082A */ slt $at, $v0, $a2 -/* 0F5F74 7F0C1444 14200003 */ bnez $at, .L7F0C1454 -/* 0F5F78 7F0C1448 0046C823 */ subu $t9, $v0, $a2 -/* 0F5F7C 7F0C144C 10000002 */ b .L7F0C1458 -/* 0F5F80 7F0C1450 AC790000 */ sw $t9, ($v1) -.L7F0C1454: -/* 0F5F84 7F0C1454 AC600000 */ sw $zero, ($v1) -.L7F0C1458: -/* 0F5F88 7F0C1458 8C6B0000 */ lw $t3, ($v1) -/* 0F5F8C 7F0C145C 51600009 */ beql $t3, $zero, .L7F0C1484 -/* 0F5F90 7F0C1460 ACE00000 */ sw $zero, ($a3) -/* 0F5F94 7F0C1464 14A00004 */ bnez $a1, .L7F0C1478 -/* 0F5F98 7F0C1468 00000000 */ nop -/* 0F5F9C 7F0C146C 8C8C0000 */ lw $t4, ($a0) -/* 0F5FA0 7F0C1470 51800005 */ beql $t4, $zero, .L7F0C1488 -/* 0F5FA4 7F0C1474 24840004 */ addiu $a0, $a0, 4 -.L7F0C1478: -/* 0F5FA8 7F0C1478 10000002 */ b .L7F0C1484 -/* 0F5FAC 7F0C147C 240A0001 */ li $t2, 1 -/* 0F5FB0 7F0C1480 ACE00000 */ sw $zero, ($a3) -.L7F0C1484: -/* 0F5FB4 7F0C1484 24840004 */ addiu $a0, $a0, 4 -.L7F0C1488: -/* 0F5FB8 7F0C1488 25080004 */ addiu $t0, $t0, 4 -/* 0F5FBC 7F0C148C 1489FFDA */ bne $a0, $t1, .L7F0C13F8 -/* 0F5FC0 7F0C1490 24E70004 */ addiu $a3, $a3, 4 -/* 0F5FC4 7F0C1494 50C00016 */ beql $a2, $zero, .L7F0C14F0 -/* 0F5FC8 7F0C1498 8FBF0014 */ lw $ra, 0x14($sp) -/* 0F5FCC 7F0C149C 0FC3030C */ jal get_mission_state -/* 0F5FD0 7F0C14A0 AFAA0018 */ sw $t2, 0x18($sp) -/* 0F5FD4 7F0C14A4 24010002 */ li $at, 2 -/* 0F5FD8 7F0C14A8 10410006 */ beq $v0, $at, .L7F0C14C4 -/* 0F5FDC 7F0C14AC 8FAA0018 */ lw $t2, 0x18($sp) -/* 0F5FE0 7F0C14B0 0FC3030C */ jal get_mission_state -/* 0F5FE4 7F0C14B4 AFAA0018 */ sw $t2, 0x18($sp) -/* 0F5FE8 7F0C14B8 24010005 */ li $at, 5 -/* 0F5FEC 7F0C14BC 14410007 */ bne $v0, $at, .L7F0C14DC -/* 0F5FF0 7F0C14C0 8FAA0018 */ lw $t2, 0x18($sp) -.L7F0C14C4: -/* 0F5FF4 7F0C14C4 5540000A */ bnezl $t2, .L7F0C14F0 -/* 0F5FF8 7F0C14C8 8FBF0014 */ lw $ra, 0x14($sp) -/* 0F5FFC 7F0C14CC 0FC304B3 */ jal sub_GAME_7F0C12CC -/* 0F6000 7F0C14D0 00000000 */ nop -/* 0F6004 7F0C14D4 10000006 */ b .L7F0C14F0 -/* 0F6008 7F0C14D8 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C14DC: -/* 0F600C 7F0C14DC 51400004 */ beql $t2, $zero, .L7F0C14F0 -/* 0F6010 7F0C14E0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0F6014 7F0C14E4 0FC304A2 */ jal sub_GAME_7F0C1288 -/* 0F6018 7F0C14E8 00000000 */ nop -/* 0F601C 7F0C14EC 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0C14F0: -/* 0F6020 7F0C14F0 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0F6024 7F0C14F4 03E00008 */ jr $ra -/* 0F6028 7F0C14F8 00000000 */ nop -) -#endif - @@ -1978,34 +457,31 @@ glabel reset_all_music_slots void musicPlaySlot(s32 slot, s32 min, s32 sec) { #ifdef DEBUG - osSyncPrintf("ai_ifmusicqueueemptyjumpf : %s, State=%x (getlvleveltime60=%f)\n", MUSIC_TRACK_ToString[slot], (&music_slot_active_0)[slot], getlvleveltime60); + osSyncPrintf("ai_ifmusicqueueemptyjumpf : %s, State=%x (getlvleveltime60=%f)\n", MUSIC_TRACK_ToString[slot], (music_slot_active_0)[slot], getlvleveltime60); #endif - if ((&music_slot_active_0)[slot] == FALSE) + if ((music_slot_active_0)[slot] == FALSE) { - (&music_slot_active_0)[slot] = TRUE; - (&music_slot_minutes_0)[slot] = min * MP_MUSIC_FRAMERATE; - (&music_slot_seconds_0)[slot] = sec * MP_MUSIC_FRAMERATE; + (music_slot_active_0)[slot] = TRUE; + (music_slot_minutes_0)[slot] = min * MP_MUSIC_FRAMERATE; + (music_slot_seconds_0)[slot] = sec * MP_MUSIC_FRAMERATE; } } void musicStopSlot(s32 slot) { + s32 i; + if (-1 < slot) { - (&music_slot_active_0)[slot] = 0; + (music_slot_active_0)[slot] = 0; return; } - music_slot_active_0 = 0; - music_slot_minutes_0 = 0; - music_slot_seconds_0 = 0; - music_slot_active_1 = 0; - music_slot_minutes_1 = 0; - music_slot_seconds_1 = 0; - music_slot_active_2 = 0; - music_slot_minutes_2 = 0; - music_slot_seconds_2 = 0; - music_slot_active_3 = 0; - music_slot_minutes_3 = 0; - music_slot_seconds_3 = 0; + + for (i=0; i<4; i++) + { + music_slot_active_0[i] = 0; + music_slot_minutes_0[i] = 0; + music_slot_seconds_0[i] = 0; + } } diff --git a/src/game/mp_watch.c b/src/game/mp_watch.c index a0ac604..dd894c1 100644 --- a/src/game/mp_watch.c +++ b/src/game/mp_watch.c @@ -31,19 +31,12 @@ s32 who_paused; // data u16 g_AwardNames[] = { - TEXT(LMPMENU, MPMENU_STR_00),TEXT(LMPMENU, MPMENU_STR_01),TEXT(LMPMENU, MPMENU_STR_02),TEXT(LMPMENU, MPMENU_STR_03),TEXT(LMPMENU, MPMENU_STR_04),TEXT(LMPMENU, MPMENU_STR_05), - TEXT(LMPMENU, MPMENU_STR_06),TEXT(LMPMENU, MPMENU_STR_07),TEXT(LMPMENU, MPMENU_STR_08),TEXT(LMPMENU, MPMENU_STR_09),TEXT(LMPMENU, MPMENU_STR_0A),TEXT(LMPMENU, MPMENU_STR_0B), - TEXT(LMPMENU, MPMENU_STR_0C),TEXT(LMPMENU, MPMENU_STR_0D),TEXT(LMPMENU, MPMENU_STR_0E),TEXT(LMPMENU, MPMENU_STR_0F),TEXT(LMPMENU, MPMENU_STR_10) + getStringID(LMPMENU, MPMENU_STR_00_LEMMINGAWARD),getStringID(LMPMENU, MPMENU_STR_01_WHERESTHEAMMO),getStringID(LMPMENU, MPMENU_STR_02_WHERESTHEARMOR),getStringID(LMPMENU, MPMENU_STR_03_AC10AWARD),getStringID(LMPMENU, MPMENU_STR_04_MARKSMANSHIPAWARD),getStringID(LMPMENU, MPMENU_STR_05_MOSTPROFESSIONAL), + getStringID(LMPMENU, MPMENU_STR_06_MOSTDEADLY),getStringID(LMPMENU, MPMENU_STR_07_MOSTLYHARMLESS),getStringID(LMPMENU, MPMENU_STR_08_MOSTCOWARD),getStringID(LMPMENU, MPMENU_STR_09_MOSTFRANTIC),getStringID(LMPMENU, MPMENU_STR_0A_MOSTHONORABLE),getStringID(LMPMENU, MPMENU_STR_0B_MOSTDISHONORABLE), + getStringID(LMPMENU, MPMENU_STR_0C_SHORTESTINNINGS),getStringID(LMPMENU, MPMENU_STR_0D_LONGESTINNINGS),getStringID(LMPMENU, MPMENU_STR_0E_DOUBLEKILL),getStringID(LMPMENU, MPMENU_STR_0F_TRIPLEKILL),getStringID(LMPMENU, MPMENU_STR_10_QUADKILL) }; -//rodata -/*8005BC20*/ -const char ascii_MP_watch_menu_percentd[] = "%d"; -const char ascii_MP_watch_menu_BLANK[] = ""; -const char ascii_MP_watch_menu_left_chevron[] = "<"; -const char ascii_MP_watch_menu_right_chevron[] = ">"; -const char ascii_pnum_KILLS[] = "%s%d %s"; -const char ascii_pnum_LOSSES[] = "%s%d %s"; + // rodata @@ -268,7 +261,7 @@ s32 mpFindMinFloat(s32 numplayers, f32 arg1, f32 arg2, f32 arg3, f32 arg4) void pauseAndLockControls(void) { lvlSetControlsLockedFlag(1); - g_pausedFlag = 1; + g_pausedFlag = TRUE; } @@ -276,26 +269,26 @@ s32 disablePlayerActionsWhenPausedOrInMpMenu(void) { if (getPlayerCount() == 1) { - return 1; + return TRUE; } if (g_stopPlayFlag) { - return 0; + return FALSE; } if (g_CurrentPlayer->mpmenuon) { - return 0; + return FALSE; } - return 1; + return TRUE; } void mpwatchSetStopPlayFlag(void) { - g_stopPlayFlag = 1; + g_stopPlayFlag = TRUE; } @@ -346,7 +339,7 @@ void mpCalculateAwards(s32 arg0) set_cur_player(i); - g_CurrentPlayer->mpmenuon = 1; + g_CurrentPlayer->mpmenuon = TRUE; g_CurrentPlayer->mpmenumode = 3; g_CurrentPlayer->ptr_text_first_mp_award = 0; g_CurrentPlayer->ptr_text_second_mp_award = 0; @@ -405,7 +398,7 @@ void mpCalculateAwards(s32 arg0) if (metrics[i].body_armor_pickups <= 2.0f) { - metrics[i].awards |= AWARD_WHERESTHEARMOR; + metrics[i].awards |= AWARD_WHERESTHEARMOUR; } i = mpFindMaxFloat(player_count, metrics[0].body_armor_pickups, metrics[1].body_armor_pickups, metrics[2].body_armor_pickups, metrics[3].body_armor_pickups); @@ -556,9 +549,9 @@ void sub_GAME_7F0C2E80(void) if (player_count != 1) { - if ((g_CurrentPlayer->bonddead != 0) && (g_gameOverFlag == 0)) + if ((g_CurrentPlayer->bonddead != FALSE) && (g_gameOverFlag == FALSE)) { - g_CurrentPlayer->mpmenuon = 0; + g_CurrentPlayer->mpmenuon = FALSE; g_CurrentPlayer->healthdisplaytime = 0; return; } @@ -593,7 +586,7 @@ void sub_GAME_7F0C2E80(void) g_playerPerm->longest_inning = getMissiontimer() - g_CurrentPlayer->field_29F4; } - if (g_CurrentPlayer->mpmenuon != 0) + if (g_CurrentPlayer->mpmenuon != FALSE) { if (mpwatchIsPlayerPressingRight(player_num) && mpwatchMenuCanGoRight()) { @@ -635,7 +628,7 @@ void sub_GAME_7F0C2E80(void) if (joyGetButtonsPressedThisFrame(player_num, 0x4000U)) { mpwatchPlayBeep(); - g_CurrentPlayer->mpmenuon = 1; + g_CurrentPlayer->mpmenuon = TRUE; g_CurrentPlayer->mpmenumode = 3; } } @@ -662,7 +655,7 @@ void sub_GAME_7F0C2E80(void) } else { - g_CurrentPlayer->mpmenuon = 0; + g_CurrentPlayer->mpmenuon = FALSE; g_CurrentPlayer->healthdisplaytime = (PAL ? 0x32 : 0x3C); if (get_cur_playernum() == who_paused) { @@ -682,7 +675,7 @@ void sub_GAME_7F0C2E80(void) if ((g_CurrentPlayer->mpmenumode == 6) && (g_CurrentPlayer->mpquitconfirm == 1)) { mpwatchPlayBeep(); - g_CurrentPlayer->mpmenuon = 0; + g_CurrentPlayer->mpmenuon = FALSE; g_CurrentPlayer->healthdisplaytime = 0; mpCalculateAwards(0); } @@ -701,7 +694,7 @@ void sub_GAME_7F0C2E80(void) if (joyGetButtonsPressedThisFrame(player_num, 0x1000U) != 0) { mpwatchPlayBeep(); - g_CurrentPlayer->mpmenuon = 1; + g_CurrentPlayer->mpmenuon = TRUE; g_CurrentPlayer->mpmenumode = 3; g_CurrentPlayer->mpjoywascentre = 1; g_CurrentPlayer->apparenthealth = g_CurrentPlayer->bondhealth; @@ -712,6 +705,7 @@ void sub_GAME_7F0C2E80(void) } + Gfx *display_text_for_playerdata_on_MP_menu(Gfx *gdl, s32 x, s32 y, u16* arg3, TEXTCOLORS text_color) { s32 sp5C; @@ -723,7 +717,7 @@ Gfx *display_text_for_playerdata_on_MP_menu(Gfx *gdl, s32 x, s32 y, u16* arg3, T s16 viX; s32 viY; - sprintf(&sp48, &ascii_MP_watch_menu_percentd, arg3); + sprintf(&sp48, "%d", arg3); textMeasure(&sp50, &sp54, &sp48, ptrFontBankGothicChars, ptrFontBankGothic, 0); @@ -773,7 +767,13 @@ Gfx *display_text_for_playerdata_on_MP_menu(Gfx *gdl, s32 x, s32 y, u16* arg3, T } - +//rodata +/*8005BC20*/ +const char ascii_MP_watch_menu_BLANK[] = ""; +const char ascii_MP_watch_menu_left_chevron[] = "<"; +const char ascii_MP_watch_menu_right_chevron[] = ">"; +const char ascii_pnum_KILLS[] = "%s%d %s"; +const char ascii_pnum_LOSSES[] = "%s%d %s"; #ifdef NONMATCHING @@ -793,6 +793,7 @@ glabel jpt_MP_overlays_scoring .word team_player_kills .word team_player_kills .word team_player_kills +.size jpt_MP_overlays_scoring, . - jpt_MP_overlays_scoring .text glabel get_points_for_mp_player @@ -1306,7 +1307,6 @@ s32 mpwatchShouldDisplayRank(s32 param_1) return param_1 ? 0 : 1; default: do { - /* WARNING: Do nothing block with infinite loop */ } while(1); } } @@ -1329,7 +1329,6 @@ s32 mpwatchShouldDisplayScore(s32 param_1) break; default: do { - /* WARNING: Do nothing block with infinite loop */ } while(1); } } @@ -1355,6 +1354,7 @@ glabel jpt_MP_menu_window_text .word text_exit .word text_exit .word text_blank +.size jpt_MP_menu_window_text, . - jpt_MP_menu_window_text .text glabel mp_watch_menu_display @@ -3003,7 +3003,7 @@ def_7F0C40C0: /* 0FA3B8 7F0C5888 AFAF0010 */ sw $t7, 0x10($sp) /* 0FA3BC 7F0C588C 00408825 */ move $s1, $v0 /* 0FA3C0 7F0C5890 8FA400D4 */ lw $a0, 0xd4($sp) -/* 0FA3C4 7F0C5894 0FC026D4 */ jal getplayerfavoredweapon +/* 0FA3C4 7F0C5894 0FC026D4 */ jal frontGetPlayersFavoriteWeaponInHand /* 0FA3C8 7F0C5898 00002825 */ move $a1, $zero /* 0FA3CC 7F0C589C 3C188004 */ lui $t8, %hi(ptrFontBankGothic) /* 0FA3D0 7F0C58A0 8F180EAC */ lw $t8, %lo(ptrFontBankGothic)($t8) @@ -3513,6 +3513,7 @@ def_7F0C40C0: /* 0FAB6C 7F0C603C 8FB10038 */ lw $s1, 0x38($sp) /* 0FAB70 7F0C6040 03E00008 */ jr $ra /* 0FAB74 7F0C6044 27BD00D8 */ addiu $sp, $sp, 0xd8 +.size mp_watch_menu_display, . - mp_watch_menu_display ) #endif @@ -5178,7 +5179,7 @@ def_7F0C40C0: /* 0FB0A8 7F0C6538 AFAF0010 */ sw $t7, 0x10($sp) /* 0FB0AC 7F0C653C 00408825 */ move $s1, $v0 /* 0FB0B0 7F0C6540 8FA400D4 */ lw $a0, 0xd4($sp) -/* 0FB0B4 7F0C6544 0FC026DC */ jal getplayerfavoredweapon +/* 0FB0B4 7F0C6544 0FC026DC */ jal frontGetPlayersFavoriteWeaponInHand /* 0FB0B8 7F0C6548 00002825 */ move $a1, $zero /* 0FB0BC 7F0C654C 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 /* 0FB0C0 7F0C6550 8F390EDC */ lw $t9, %lo(ptrFontBankGothic)($t9) @@ -7365,7 +7366,7 @@ text_exit: /* 0F7758 7F0C4D68 AFAF0010 */ sw $t7, 0x10($sp) /* 0F775C 7F0C4D6C 00408825 */ move $s1, $v0 /* 0F7760 7F0C4D70 8FA400D4 */ lw $a0, 0xd4($sp) -/* 0F7764 7F0C4D74 0FC02694 */ jal getplayerfavoredweapon +/* 0F7764 7F0C4D74 0FC02694 */ jal frontGetPlayersFavoriteWeaponInHand /* 0F7768 7F0C4D78 00002825 */ move $a1, $zero /* 0F776C 7F0C4D7C 3C198004 */ lui $t9, %hi(ptrFontBankGothic) # $t9, 0x8004 /* 0F7770 7F0C4D80 8F39AAFC */ lw $t9, %lo(ptrFontBankGothic)($t9) @@ -7896,7 +7897,7 @@ text_exit: s32 sub_GAME_7F0C6048(void) { - return g_gameOverFlag ? 0 : (g_CurrentPlayer->mpmenuon | (g_CurrentPlayer->healthdisplaytime > 0)); + return g_gameOverFlag ? FALSE : (g_CurrentPlayer->mpmenuon | (g_CurrentPlayer->healthdisplaytime > 0)); } s32 checkGamePaused(void) { diff --git a/src/game/mp_weapon.c b/src/game/mp_weapon.c index d3a49a4..63fa1d9 100644 --- a/src/game/mp_weapon.c +++ b/src/game/mp_weapon.c @@ -199,20 +199,20 @@ struct s_mp_weapon_set mp_weapon_set_golden[] = //D:800490F0 struct s_mp_weapon_set_text mp_weapon_set_text_table[] = { - {TEXT(LMPWEAPONS, MPWEAPON_STR_00), mp_weapon_set_slaps}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_01), mp_weapon_set_pistols}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_0D), mp_weapon_set_knife}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_02), mp_weapon_set_auto}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_03), mp_weapon_set_power}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_04), mp_weapon_set_sniper}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_05), mp_weapon_set_grenade}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_06), mp_weapon_set_remote_m}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_07), mp_weapon_set_glaunch}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_08), mp_weapon_set_timed_m}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_09), mp_weapon_set_prox_m}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_0A), mp_weapon_set_rockets}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_0B), mp_weapon_set_lasers}, - {TEXT(LMPWEAPONS, MPWEAPON_STR_0C), mp_weapon_set_golden} + {getStringID(LMPWEAPONS, MPWEAPON_STR_00_SLAPPERSONLY), mp_weapon_set_slaps}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_01_PISTOLS), mp_weapon_set_pistols}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_0D_THROWINGKNIVES), mp_weapon_set_knife}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_02_AUTOMATICS), mp_weapon_set_auto}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_03_POWERWEAPONS), mp_weapon_set_power}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_04_SNIPERRIFLES), mp_weapon_set_sniper}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_05_GRENADES), mp_weapon_set_grenade}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_06_REMOTEMINES), mp_weapon_set_remote_m}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_07_GRENADELAUNCHERS), mp_weapon_set_glaunch}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_08_TIMEDMINES), mp_weapon_set_timed_m}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_09_PROXIMITYMINES), mp_weapon_set_prox_m}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_0A_ROCKETS), mp_weapon_set_rockets}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_0B_LASERS), mp_weapon_set_lasers}, + {getStringID(LMPWEAPONS, MPWEAPON_STR_0C_GOLDENGUN), mp_weapon_set_golden} }; s32 mp_weapon_set = 0xB; diff --git a/src/game/mp_weapon.h b/src/game/mp_weapon.h index 2d8e85c..cb8652a 100644 --- a/src/game/mp_weapon.h +++ b/src/game/mp_weapon.h @@ -16,11 +16,19 @@ struct s_mp_weapon_set * enum PROP */ s16 propID; - s8 size; - /** - * Decimal portion of size, normalized to one byte. That is, 0x80 means 0.5. - */ - s8 size_frac; + union + { + struct + { + s8 size; + /** + * Decimal portion of size, normalized to one byte. That is, 0x80 means 0.5. + */ + s8 size_frac; + }; + + s16 size16; + }; #else /** * enum ITEM_IDS diff --git a/src/game/music_0D2720.c b/src/game/music_0D2720.c index 2ac3541..4bc292f 100644 --- a/src/game/music_0D2720.c +++ b/src/game/music_0D2720.c @@ -1,5 +1,6 @@ #include #include "bondconstants.h" +#include "random.h" struct music_setup { @@ -87,103 +88,53 @@ s16 random_tracks[] = { }; +/** + * NTSC address 0x7F0D2720. +*/ +s32 getmusictrack_or_randomtrack(s32 arg0) +{ + s32 index; + + for (index = 0; music_setup_entries[index].stage_id != 0; index++) + { + if (music_setup_entries[index].stage_id == arg0) + { + s32 count; + s32 result; + + if (music_setup_entries[index].main_music == -1) + { + count = 0; + while (random_tracks[count] != M_NONE) + { + count++; + } -#ifdef NONMATCHING -void getmusictrack_or_randomtrack(void) { + result = random_tracks[randomGetNext() % count]; + return result; + } + result = music_setup_entries[index].main_music; + return result; + } + } + + if(1) + { + s32 count; + s32 result; + + count = 0; + + while (random_tracks[count] != M_NONE) + { + count++; + } + + result = random_tracks[randomGetNext() % count]; + return result; + } } -#else -GLOBAL_ASM( -.text -glabel getmusictrack_or_randomtrack -/* 107250 7F0D2720 3C0E8005 */ lui $t6, %hi(music_setup_entries) -/* 107254 7F0D2724 85CEEB10 */ lh $t6, %lo(music_setup_entries)($t6) -/* 107258 7F0D2728 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 10725C 7F0D272C AFBF0014 */ sw $ra, 0x14($sp) -/* 107260 7F0D2730 11C0002A */ beqz $t6, .L7F0D27DC -/* 107264 7F0D2734 3C0A8005 */ lui $t2, %hi(random_tracks) -/* 107268 7F0D2738 3C0F8005 */ lui $t7, %hi(music_setup_entries) -/* 10726C 7F0D273C 25E2EB10 */ addiu $v0, $t7, %lo(music_setup_entries) -/* 107270 7F0D2740 84430000 */ lh $v1, ($v0) -.L7F0D2744: -/* 107274 7F0D2744 54830022 */ bnel $a0, $v1, .L7F0D27D0 -/* 107278 7F0D2748 84430008 */ lh $v1, 8($v0) -/* 10727C 7F0D274C 84430002 */ lh $v1, 2($v0) -/* 107280 7F0D2750 2401FFFF */ li $at, -1 -/* 107284 7F0D2754 3C188005 */ lui $t8, %hi(random_tracks) -/* 107288 7F0D2758 1461001A */ bne $v1, $at, .L7F0D27C4 -/* 10728C 7F0D275C 00000000 */ nop -/* 107290 7F0D2760 8718EBD0 */ lh $t8, %lo(random_tracks)($t8) -/* 107294 7F0D2764 3C028005 */ lui $v0, %hi(random_tracks) -/* 107298 7F0D2768 00001825 */ move $v1, $zero -/* 10729C 7F0D276C 13000006 */ beqz $t8, .L7F0D2788 -/* 1072A0 7F0D2770 2442EBD0 */ addiu $v0, %lo(random_tracks) # addiu $v0, $v0, -0x1430 -/* 1072A4 7F0D2774 84590002 */ lh $t9, 2($v0) -.L7F0D2778: -/* 1072A8 7F0D2778 24630001 */ addiu $v1, $v1, 1 -/* 1072AC 7F0D277C 24420002 */ addiu $v0, $v0, 2 -/* 1072B0 7F0D2780 5720FFFD */ bnezl $t9, .L7F0D2778 -/* 1072B4 7F0D2784 84590002 */ lh $t9, 2($v0) -.L7F0D2788: -/* 1072B8 7F0D2788 0C002914 */ jal randomGetNext -/* 1072BC 7F0D278C AFA30020 */ sw $v1, 0x20($sp) -/* 1072C0 7F0D2790 8FA30020 */ lw $v1, 0x20($sp) -/* 1072C4 7F0D2794 3C048005 */ lui $a0, %hi(random_tracks) -/* 1072C8 7F0D2798 0043001B */ divu $zero, $v0, $v1 -/* 1072CC 7F0D279C 00004010 */ mfhi $t0 -/* 1072D0 7F0D27A0 00084840 */ sll $t1, $t0, 1 -/* 1072D4 7F0D27A4 00892021 */ addu $a0, $a0, $t1 -/* 1072D8 7F0D27A8 8484EBD0 */ lh $a0, %lo(random_tracks)($a0) -/* 1072DC 7F0D27AC 14600002 */ bnez $v1, .L7F0D27B8 -/* 1072E0 7F0D27B0 00000000 */ nop -/* 1072E4 7F0D27B4 0007000D */ break 7 -.L7F0D27B8: -/* 1072E8 7F0D27B8 00801025 */ move $v0, $a0 -/* 1072EC 7F0D27BC 1000001F */ b .L7F0D283C -/* 1072F0 7F0D27C0 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0D27C4: -/* 1072F4 7F0D27C4 1000001C */ b .L7F0D2838 -/* 1072F8 7F0D27C8 00601025 */ move $v0, $v1 -/* 1072FC 7F0D27CC 84430008 */ lh $v1, 8($v0) -.L7F0D27D0: -/* 107300 7F0D27D0 24420008 */ addiu $v0, $v0, 8 -/* 107304 7F0D27D4 1460FFDB */ bnez $v1, .L7F0D2744 -/* 107308 7F0D27D8 00000000 */ nop -.L7F0D27DC: -/* 10730C 7F0D27DC 854AEBD0 */ lh $t2, %lo(random_tracks)($t2) -/* 107310 7F0D27E0 3C028005 */ lui $v0, %hi(random_tracks) -/* 107314 7F0D27E4 00001825 */ move $v1, $zero -/* 107318 7F0D27E8 11400006 */ beqz $t2, .L7F0D2804 -/* 10731C 7F0D27EC 2442EBD0 */ addiu $v0, %lo(random_tracks) # addiu $v0, $v0, -0x1430 -/* 107320 7F0D27F0 844B0002 */ lh $t3, 2($v0) -.L7F0D27F4: -/* 107324 7F0D27F4 24630001 */ addiu $v1, $v1, 1 -/* 107328 7F0D27F8 24420002 */ addiu $v0, $v0, 2 -/* 10732C 7F0D27FC 5560FFFD */ bnezl $t3, .L7F0D27F4 -/* 107330 7F0D2800 844B0002 */ lh $t3, 2($v0) -.L7F0D2804: -/* 107334 7F0D2804 0C002914 */ jal randomGetNext -/* 107338 7F0D2808 AFA30018 */ sw $v1, 0x18($sp) -/* 10733C 7F0D280C 8FA30018 */ lw $v1, 0x18($sp) -/* 107340 7F0D2810 3C048005 */ lui $a0, %hi(random_tracks) -/* 107344 7F0D2814 0043001B */ divu $zero, $v0, $v1 -/* 107348 7F0D2818 00006010 */ mfhi $t4 -/* 10734C 7F0D281C 000C6840 */ sll $t5, $t4, 1 -/* 107350 7F0D2820 008D2021 */ addu $a0, $a0, $t5 -/* 107354 7F0D2824 8484EBD0 */ lh $a0, %lo(random_tracks)($a0) -/* 107358 7F0D2828 14600002 */ bnez $v1, .L7F0D2834 -/* 10735C 7F0D282C 00000000 */ nop -/* 107360 7F0D2830 0007000D */ break 7 -.L7F0D2834: -/* 107364 7F0D2834 00801025 */ move $v0, $a0 -.L7F0D2838: -/* 107368 7F0D2838 8FBF0014 */ lw $ra, 0x14($sp) -.L7F0D283C: -/* 10736C 7F0D283C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 107370 7F0D2840 03E00008 */ jr $ra -/* 107374 7F0D2844 00000000 */ nop -) -#endif @@ -216,4 +167,4 @@ s32 musicGetXTrackForStage(s32 stageID) } return -1; -} \ No newline at end of file +} diff --git a/src/game/music_0D2720.h b/src/game/music_0D2720.h index 0fd3f87..072b0a5 100644 --- a/src/game/music_0D2720.h +++ b/src/game/music_0D2720.h @@ -4,5 +4,6 @@ s32 musicGetBgTrackForStage(s32 stageID); s32 musicGetXTrackForStage(s32 stageID); +s32 getmusictrack_or_randomtrack(s32 arg0); #endif diff --git a/src/game/ob.c b/src/game/ob.c index 71fc275..6c0ad0a 100644 --- a/src/game/ob.c +++ b/src/game/ob.c @@ -19,7 +19,7 @@ s32 ob_c_debug_notice_list_entry = 0; #include -/* struct fileentry file_resource_table[] = +/* struct fileentry file_resource_table[] = { blah; }; @@ -37,7 +37,7 @@ void load_resource(u8 *ptrdata, s32 bytes, fileentry *srcfile, resource_lookup u8 *source; u8 buffer[0x2100]; s32 unused; - + if (bytes == 0) { @@ -113,7 +113,7 @@ void resource_load_from_indy(u8 *ptrdata, s32 bytes, fileentry *srcfile, resou void obInit(void) { s32 i; - + debTryAdd(&ob_c_debug_notice_list_entry,"ob_c_debug"); for (i = file_entry_max-1; i > 1 ; i--) { @@ -150,7 +150,7 @@ glabel obInit /* 0F1790 7F0BCC60 3C028009 */ lui $v0, %hi(resource_lookup_data_array+0x14) /* 0F1794 7F0BCC64 00037080 */ sll $t6, $v1, 2 /* 0F1798 7F0BCC68 01C37021 */ addu $t6, $t6, $v1 -/* 0F179C 7F0BCC6C 3C0F8009 */ lui $t7, %hi(resource_lookup_data_array) +/* 0F179C 7F0BCC6C 3C0F8009 */ lui $t7, %hi(resource_lookup_data_array) /* 0F17A0 7F0BCC70 25EF88B0 */ addiu $t7, %lo(resource_lookup_data_array) # addiu $t7, $t7, -0x7750 /* 0F17A4 7F0BCC74 000E7080 */ sll $t6, $t6, 2 /* 0F17A8 7F0BCC78 01CF2821 */ addu $a1, $t6, $t7 @@ -171,7 +171,7 @@ glabel obInit /* 0F17DC 7F0BCCAC 8FBF0014 */ lw $ra, 0x14($sp) /* 0F17E0 7F0BCCB0 27BD0018 */ addiu $sp, $sp, 0x18 /* 0F17E4 7F0BCCB4 03E00008 */ jr $ra -/* 0F17E8 7F0BCCB8 00000000 */ nop +/* 0F17E8 7F0BCCB8 00000000 */ nop ) #endif @@ -186,7 +186,7 @@ void obLoadBGFileBytesAtOffset(u8 *bgname, u8 *target, s32 offset, s32 len) index = fileGetIndex(bgname); fileentry = &file_resource_table[index]; - + if (resource_lookup_data_array[index].rom_size != 0) { //if the size of offset data would exceed file size, loop forever @@ -239,7 +239,7 @@ void obLoadBGFileBytesAtOffset(u8 *bgname, u8 *target, s32 offset, s32 len) index = fileGetIndex(bgname); fileentry = &file_resource_table[index]; - + if (resource_lookup_data_array[index].rom_size != 0) { //if the size of offset data would exceed file size, loop forever @@ -272,10 +272,10 @@ void *fileIndexLoadToBank(s32 index, FILELOADMETHOD loadMethod, s32 size, u8 ban // info->poolRemaining = bytes; } // bytes = info->poolRemaining; - ptrdata = mempAllocBytesInBank(info->poolRemaining, bank); // get pointer to allocated space + ptrdata = mempAllocBytesInBank(info->poolRemaining, bank); // get pointer to allocated space in bank info->rom_remaining = info->poolRemaining; - if (file_resource_table[index].hw_address == 0) + if (file_resource_table[index].hw_address == 0) //IF NULL, check indy { resource_load_from_indy(ptrdata, info->poolRemaining, &file_resource_table[index], info); } @@ -392,7 +392,7 @@ void fileSetSize(s32 filenum, u8* ptr, u32 size, s32 reallocate) resource_lookup_data_array[filenum].rom_remaining = size; if (reallocate != 0) { - mempAddEntryOfSizeToBank(ptr, resource_lookup_data_array[filenum].poolRemaining, 4U); + mempAddEntryOfSizeToBank(ptr, resource_lookup_data_array[filenum].poolRemaining, MEMPOOL_STAGE); } } @@ -400,7 +400,7 @@ void fileSetSize(s32 filenum, u8* ptr, u32 size, s32 reallocate) s32 get_pc_buffer_remaining_value(u8 *name) { int index; - + index = fileGetIndex(name); return resource_lookup_data_array[index].poolRemaining; } @@ -436,7 +436,7 @@ int fileGetIndex(u8 *resname) //if file exists, return index for (i = 1; i < file_entry_max; i++) { - if ((file_resource_table[i].filename) && + if ((file_resource_table[i].filename) && (strcmp(resname,file_resource_table[i].filename) == 0)); { return i; @@ -519,13 +519,13 @@ glabel fileGetIndex /* 0F1E30 7F0BD300 00001025 */ move $v0, $zero .L7F0BD304: /* 0F1E34 7F0BD304 01F17823 */ subu $t7, $t7, $s1 -/* 0F1E38 7F0BD308 3C188004 */ lui $t8, %hi(file_resource_table) +/* 0F1E38 7F0BD308 3C188004 */ lui $t8, %hi(file_resource_table) /* 0F1E3C 7F0BD30C 27186054 */ addiu $t8, %lo(file_resource_table) # addiu $t8, $t8, 0x6054 /* 0F1E40 7F0BD310 000F7880 */ sll $t7, $t7, 2 /* 0F1E44 7F0BD314 0011C880 */ sll $t9, $s1, 2 /* 0F1E48 7F0BD318 01F88021 */ addu $s0, $t7, $t8 /* 0F1E4C 7F0BD31C 0331C821 */ addu $t9, $t9, $s1 -/* 0F1E50 7F0BD320 3C088009 */ lui $t0, %hi(resource_lookup_data_array) +/* 0F1E50 7F0BD320 3C088009 */ lui $t0, %hi(resource_lookup_data_array) /* 0F1E54 7F0BD324 250888B0 */ addiu $t0, %lo(resource_lookup_data_array) # addiu $t0, $t0, -0x7750 /* 0F1E58 7F0BD328 0019C880 */ sll $t9, $t9, 2 /* 0F1E5C 7F0BD32C AE110000 */ sw $s1, ($s0) @@ -665,7 +665,7 @@ void removed_loop_handle_filetable_entries(void) void removed_loop_filetableentries(void) { int i; - + for (i = 1; (i < file_entry_max); i++) { ; @@ -681,8 +681,8 @@ void removed_loop_filetableentries(void) void sub_GAME_7F0BD410(void) { struct resource_lookup_data_entry *entry= &resource_lookup_data_array[1]; - - if (file_entry_max > 1) + + if (file_entry_max > 1) { for (;&resource_lookup_data_array[file_entry_max] > entry;entry++) { @@ -703,7 +703,7 @@ glabel sub_GAME_7F0BD410 /* 0F1F54 7F0BD424 1420000A */ bnez $at, .L7F0BD450 /* 0F1F58 7F0BD428 00037080 */ sll $t6, $v1, 2 /* 0F1F5C 7F0BD42C 01C37021 */ addu $t6, $t6, $v1 -/* 0F1F60 7F0BD430 3C0F8009 */ lui $t7, %hi(resource_lookup_data_array) +/* 0F1F60 7F0BD430 3C0F8009 */ lui $t7, %hi(resource_lookup_data_array) /* 0F1F64 7F0BD434 25EF88B0 */ addiu $t7, %lo(resource_lookup_data_array) # addiu $t7, $t7, -0x7750 /* 0F1F68 7F0BD438 000E7080 */ sll $t6, $t6, 2 /* 0F1F6C 7F0BD43C 01CF2021 */ addu $a0, $t6, $t7 @@ -714,9 +714,9 @@ glabel sub_GAME_7F0BD410 /* 0F1F7C 7F0BD44C 24420014 */ addiu $v0, $v0, 0x14 .L7F0BD450: /* 0F1F80 7F0BD450 03E00008 */ jr $ra -/* 0F1F84 7F0BD454 00000000 */ nop +/* 0F1F84 7F0BD454 00000000 */ nop ) #endif - + diff --git a/src/game/ob.h b/src/game/ob.h index 14f53f7..e034f9a 100644 --- a/src/game/ob.h +++ b/src/game/ob.h @@ -45,5 +45,9 @@ void *_fileIndexLoadToBank(s32 index, FILELOADMETHOD param_2, s32 size, u8 bank) #endif s32 get_pc_buffer_remaining_value(u8 *name); +s32 get_rom_remaining_buffer_for_index(s32 index); +s32 get_pc_remaining_buffer_for_index(s32 index); +s32 fileGetIndex(char *resname); +s32 get_pc_remaining_buffer_for_index(s32 index); #endif diff --git a/src/game/objecthandler.c b/src/game/objecthandler.c index 46893fb..1805618 100644 --- a/src/game/objecthandler.c +++ b/src/game/objecthandler.c @@ -51,9 +51,9 @@ char dword_CODE_bss_80076AE0[0x2E28]; char dword_CODE_bss_80079908[0x28]; //CODE.bss:80079930 -void * ptr_allocation_0; +struct ptr_0_s *ptr_allocation_0; //CODE.bss:80079934 -void * ptr_allocation_1; +struct ptr_1_s *ptr_allocation_1; // data @@ -347,7 +347,7 @@ glabel sub_GAME_7F06B120 /* 09FC94 7F06B164 00380821 */ addu $at, $at, $t8 /* 09FC98 7F06B168 8C384490 */ lw $t8, %lo(jpt_80054490)($at) /* 09FC9C 7F06B16C 03000008 */ jr $t8 -/* 09FCA0 7F06B170 00000000 */ nop +/* 09FCA0 7F06B170 00000000 */ nop loc_CODE_7F06B174: /* 09FCA4 7F06B174 AC650000 */ sw $a1, ($v1) /* 09FCA8 7F06B178 AC620004 */ sw $v0, 4($v1) @@ -359,12 +359,12 @@ def_7F06B16C: /* 09FCB8 7F06B188 8C440014 */ lw $a0, 0x14($v0) .L7F06B18C: /* 09FCBC 7F06B18C 10800003 */ beqz $a0, .L7F06B19C -/* 09FCC0 7F06B190 00000000 */ nop +/* 09FCC0 7F06B190 00000000 */ nop /* 09FCC4 7F06B194 1000000B */ b .L7F06B1C4 /* 09FCC8 7F06B198 00801025 */ move $v0, $a0 .L7F06B19C: /* 09FCCC 7F06B19C 10400009 */ beqz $v0, .L7F06B1C4 -/* 09FCD0 7F06B1A0 00000000 */ nop +/* 09FCD0 7F06B1A0 00000000 */ nop /* 09FCD4 7F06B1A4 8C44000C */ lw $a0, 0xc($v0) .L7F06B1A8: /* 09FCD8 7F06B1A8 50800004 */ beql $a0, $zero, .L7F06B1BC @@ -383,7 +383,7 @@ def_7F06B16C: /* 09FD04 7F06B1D4 8CE20000 */ lw $v0, ($a3) .L7F06B1D8: /* 09FD08 7F06B1D8 10620019 */ beq $v1, $v0, .L7F06B240 -/* 09FD0C 7F06B1DC 00000000 */ nop +/* 09FD0C 7F06B1DC 00000000 */ nop /* 09FD10 7F06B1E0 50C0000F */ beql $a2, $zero, .L7F06B220 /* 09FD14 7F06B1E4 00403025 */ move $a2, $v0 /* 09FD18 7F06B1E8 8CD9000C */ lw $t9, 0xc($a2) @@ -452,7 +452,7 @@ glabel sub_GAME_7F06B248 /* 09FDC0 7F06B290 ACC40000 */ sw $a0, ($a2) .L7F06B294: /* 09FDC4 7F06B294 03E00008 */ jr $ra -/* 09FDC8 7F06B298 00000000 */ nop +/* 09FDC8 7F06B298 00000000 */ nop ) #endif @@ -490,6 +490,7 @@ glabel jpt_800544E4 .word .L7F06B6A4 .word .L7F06B6A4 .word .L7F06B428 +.size jpt_800544E4, . - jpt_800544E4 .text glabel sub_GAME_7F06B29C @@ -504,7 +505,7 @@ glabel sub_GAME_7F06B29C /* 09FDEC 7F06B2BC AFA00110 */ sw $zero, 0x110($sp) /* 09FDF0 7F06B2C0 3C013F00 */ li $at, 0x3F000000 # 0.500000 /* 09FDF4 7F06B2C4 4481A000 */ mtc1 $at, $f20 -/* 09FDF8 7F06B2C8 00000000 */ nop +/* 09FDF8 7F06B2C8 00000000 */ nop /* 09FDFC 7F06B2CC 8E300004 */ lw $s0, 4($s1) .L7F06B2D0: /* 09FE00 7F06B2D0 96020000 */ lhu $v0, ($s0) @@ -518,7 +519,7 @@ glabel sub_GAME_7F06B29C /* 09FE20 7F06B2F0 8C3944E4 */ lw $t9, %lo(jpt_800544E4)($at) .L7F06B2F4: /* 09FE24 7F06B2F4 03200008 */ jr $t9 -/* 09FE28 7F06B2F8 00000000 */ nop +/* 09FE28 7F06B2F8 00000000 */ nop .L7F06B2FC: /* 09FE2C 7F06B2FC 8E020004 */ lw $v0, 4($s0) /* 09FE30 7F06B300 8E240000 */ lw $a0, ($s1) @@ -662,9 +663,9 @@ glabel sub_GAME_7F06B29C /* 0A0038 7F06B508 460A0480 */ add.s $f18, $f0, $f10 /* 0A003C 7F06B50C 46009487 */ neg.s $f18, $f18 /* 0A0040 7F06B510 4612803C */ c.lt.s $f16, $f18 -/* 0A0044 7F06B514 00000000 */ nop +/* 0A0044 7F06B514 00000000 */ nop /* 0A0048 7F06B518 45000003 */ bc1f .L7F06B528 -/* 0A004C 7F06B51C 00000000 */ nop +/* 0A004C 7F06B51C 00000000 */ nop /* 0A0050 7F06B520 10000060 */ b .L7F06B6A4 /* 0A0054 7F06B524 E6300008 */ swc1 $f16, 8($s1) .L7F06B528: @@ -814,11 +815,11 @@ def_7F06B2F4: /* 0A0278 7F06B748 8C640004 */ lw $a0, 4($v1) .L7F06B74C: /* 0A027C 7F06B74C 16240002 */ bne $s1, $a0, .L7F06B758 -/* 0A0280 7F06B750 00000000 */ nop +/* 0A0280 7F06B750 00000000 */ nop /* 0A0284 7F06B754 00605025 */ move $t2, $v1 .L7F06B758: /* 0A0288 7F06B758 14E40002 */ bne $a3, $a0, .L7F06B764 -/* 0A028C 7F06B75C 00000000 */ nop +/* 0A028C 7F06B75C 00000000 */ nop /* 0A0290 7F06B760 00604825 */ move $t1, $v1 .L7F06B764: /* 0A0294 7F06B764 55040003 */ bnel $t0, $a0, .L7F06B774 @@ -907,13 +908,13 @@ def_7F06B2F4: /* 0A03D8 7F06B8A8 C7A60050 */ lwc1 $f6, 0x50($sp) /* 0A03DC 7F06B8AC 46062202 */ mul.s $f8, $f4, $f6 /* 0A03E0 7F06B8B0 44802000 */ mtc1 $zero, $f4 -/* 0A03E4 7F06B8B4 00000000 */ nop +/* 0A03E4 7F06B8B4 00000000 */ nop /* 0A03E8 7F06B8B8 4604103C */ c.lt.s $f2, $f4 /* 0A03EC 7F06B8BC 460A4480 */ add.s $f18, $f8, $f10 /* 0A03F0 7F06B8C0 45020018 */ bc1fl .L7F06B924 /* 0A03F4 7F06B8C4 44803000 */ mtc1 $zero, $f6 /* 0A03F8 7F06B8C8 460E803C */ c.lt.s $f16, $f14 -/* 0A03FC 7F06B8CC 00000000 */ nop +/* 0A03FC 7F06B8CC 00000000 */ nop /* 0A0400 7F06B8D0 4502000B */ bc1fl .L7F06B900 /* 0A0404 7F06B8D4 4614703C */ c.lt.s $f14, $f20 /* 0A0408 7F06B8D8 4614803C */ c.lt.s $f16, $f20 @@ -937,9 +938,9 @@ def_7F06B2F4: /* 0A044C 7F06B91C E5A40008 */ swc1 $f4, 8($t5) /* 0A0450 7F06B920 44803000 */ mtc1 $zero, $f6 .L7F06B924: -/* 0A0454 7F06B924 00000000 */ nop +/* 0A0454 7F06B924 00000000 */ nop /* 0A0458 7F06B928 4602303E */ c.le.s $f6, $f2 -/* 0A045C 7F06B92C 00000000 */ nop +/* 0A045C 7F06B92C 00000000 */ nop /* 0A0460 7F06B930 4502001C */ bc1fl .L7F06B9A4 /* 0A0464 7F06B934 44802000 */ mtc1 $zero, $f4 /* 0A0468 7F06B938 460EA03C */ c.lt.s $f20, $f14 @@ -947,12 +948,12 @@ def_7F06B2F4: /* 0A0470 7F06B940 45020006 */ bc1fl .L7F06B95C /* 0A0474 7F06B944 4610A03C */ c.lt.s $f20, $f16 /* 0A0478 7F06B948 44814000 */ mtc1 $at, $f8 -/* 0A047C 7F06B94C 00000000 */ nop +/* 0A047C 7F06B94C 00000000 */ nop /* 0A0480 7F06B950 4608A281 */ sub.s $f10, $f20, $f8 /* 0A0484 7F06B954 E54A0008 */ swc1 $f10, 8($t2) /* 0A0488 7F06B958 4610A03C */ c.lt.s $f20, $f16 .L7F06B95C: -/* 0A048C 7F06B95C 00000000 */ nop +/* 0A048C 7F06B95C 00000000 */ nop /* 0A0490 7F06B960 45020010 */ bc1fl .L7F06B9A4 /* 0A0494 7F06B964 44802000 */ mtc1 $zero, $f4 /* 0A0498 7F06B968 460E803C */ c.lt.s $f16, $f14 @@ -961,13 +962,13 @@ def_7F06B2F4: /* 0A04A4 7F06B974 44814000 */ mtc1 $at, $f8 /* 0A04A8 7F06B978 3C0138C0 */ li $at, 0x38C00000 # 0.000092 /* 0A04AC 7F06B97C 44812000 */ mtc1 $at, $f4 -/* 0A04B0 7F06B980 00000000 */ nop +/* 0A04B0 7F06B980 00000000 */ nop /* 0A04B4 7F06B984 4604A181 */ sub.s $f6, $f20, $f4 /* 0A04B8 7F06B988 10000005 */ b .L7F06B9A0 /* 0A04BC 7F06B98C E5660008 */ swc1 $f6, 8($t3) /* 0A04C0 7F06B990 44814000 */ mtc1 $at, $f8 .L7F06B994: -/* 0A04C4 7F06B994 00000000 */ nop +/* 0A04C4 7F06B994 00000000 */ nop /* 0A04C8 7F06B998 4608A281 */ sub.s $f10, $f20, $f8 /* 0A04CC 7F06B99C E56A0008 */ swc1 $f10, 8($t3) .L7F06B9A0: @@ -975,17 +976,17 @@ def_7F06B2F4: .L7F06B9A4: /* 0A04D4 7F06B9A4 8FAE0110 */ lw $t6, 0x110($sp) /* 0A04D8 7F06B9A8 4604903C */ c.lt.s $f18, $f4 -/* 0A04DC 7F06B9AC 00000000 */ nop +/* 0A04DC 7F06B9AC 00000000 */ nop /* 0A04E0 7F06B9B0 45020033 */ bc1fl .L7F06BA80 /* 0A04E4 7F06B9B4 44802000 */ mtc1 $zero, $f4 /* 0A04E8 7F06B9B8 C5C20008 */ lwc1 $f2, 8($t6) /* 0A04EC 7F06B9BC 4602603C */ c.lt.s $f12, $f2 -/* 0A04F0 7F06B9C0 00000000 */ nop +/* 0A04F0 7F06B9C0 00000000 */ nop /* 0A04F4 7F06B9C4 45020053 */ bc1fl .L7F06BB14 /* 0A04F8 7F06B9C8 8FBF0024 */ lw $ra, 0x24($sp) /* 0A04FC 7F06B9CC C5400008 */ lwc1 $f0, 8($t2) /* 0A0500 7F06B9D0 4602003C */ c.lt.s $f0, $f2 -/* 0A0504 7F06B9D4 00000000 */ nop +/* 0A0504 7F06B9D4 00000000 */ nop /* 0A0508 7F06B9D8 4502000C */ bc1fl .L7F06BA0C /* 0A050C 7F06B9DC C5600008 */ lwc1 $f0, 8($t3) /* 0A0510 7F06B9E0 4600603C */ c.lt.s $f12, $f0 @@ -993,7 +994,7 @@ def_7F06B2F4: /* 0A0518 7F06B9E8 45020008 */ bc1fl .L7F06BA0C /* 0A051C 7F06B9EC C5600008 */ lwc1 $f0, 8($t3) /* 0A0520 7F06B9F0 44813000 */ mtc1 $at, $f6 -/* 0A0524 7F06B9F4 00000000 */ nop +/* 0A0524 7F06B9F4 00000000 */ nop /* 0A0528 7F06B9F8 46066201 */ sub.s $f8, $f12, $f6 /* 0A052C 7F06B9FC E5480008 */ swc1 $f8, 8($t2) /* 0A0530 7F06BA00 8FAF0110 */ lw $t7, 0x110($sp) @@ -1001,11 +1002,11 @@ def_7F06B2F4: /* 0A0538 7F06BA08 C5600008 */ lwc1 $f0, 8($t3) .L7F06BA0C: /* 0A053C 7F06BA0C 4602003C */ c.lt.s $f0, $f2 -/* 0A0540 7F06BA10 00000000 */ nop +/* 0A0540 7F06BA10 00000000 */ nop /* 0A0544 7F06BA14 45020014 */ bc1fl .L7F06BA68 /* 0A0548 7F06BA18 3C013780 */ lui $at, 0x3780 /* 0A054C 7F06BA1C 4600603C */ c.lt.s $f12, $f0 -/* 0A0550 7F06BA20 00000000 */ nop +/* 0A0550 7F06BA20 00000000 */ nop /* 0A0554 7F06BA24 45020010 */ bc1fl .L7F06BA68 /* 0A0558 7F06BA28 3C013780 */ li $at, 0x37800000 # 0.000015 /* 0A055C 7F06BA2C 460E803C */ c.lt.s $f16, $f14 @@ -1014,13 +1015,13 @@ def_7F06B2F4: /* 0A0568 7F06BA38 44813000 */ mtc1 $at, $f6 /* 0A056C 7F06BA3C 3C0138C0 */ li $at, 0x38C00000 # 0.000092 /* 0A0570 7F06BA40 44815000 */ mtc1 $at, $f10 -/* 0A0574 7F06BA44 00000000 */ nop +/* 0A0574 7F06BA44 00000000 */ nop /* 0A0578 7F06BA48 460A6101 */ sub.s $f4, $f12, $f10 /* 0A057C 7F06BA4C 10000005 */ b .L7F06BA64 /* 0A0580 7F06BA50 E5640008 */ swc1 $f4, 8($t3) /* 0A0584 7F06BA54 44813000 */ mtc1 $at, $f6 .L7F06BA58: -/* 0A0588 7F06BA58 00000000 */ nop +/* 0A0588 7F06BA58 00000000 */ nop /* 0A058C 7F06BA5C 46066201 */ sub.s $f8, $f12, $f6 /* 0A0590 7F06BA60 E5680008 */ swc1 $f8, 8($t3) .L7F06BA64: @@ -1035,13 +1036,13 @@ def_7F06B2F4: .L7F06BA80: /* 0A05B0 7F06BA80 8FB90110 */ lw $t9, 0x110($sp) /* 0A05B4 7F06BA84 4612203E */ c.le.s $f4, $f18 -/* 0A05B8 7F06BA88 00000000 */ nop +/* 0A05B8 7F06BA88 00000000 */ nop /* 0A05BC 7F06BA8C 45020021 */ bc1fl .L7F06BB14 /* 0A05C0 7F06BA90 8FBF0024 */ lw $ra, 0x24($sp) /* 0A05C4 7F06BA94 C7220008 */ lwc1 $f2, 8($t9) /* 0A05C8 7F06BA98 3C013780 */ li $at, 0x37800000 # 0.000015 /* 0A05CC 7F06BA9C 460C103C */ c.lt.s $f2, $f12 -/* 0A05D0 7F06BAA0 00000000 */ nop +/* 0A05D0 7F06BAA0 00000000 */ nop /* 0A05D4 7F06BAA4 4502001B */ bc1fl .L7F06BB14 /* 0A05D8 7F06BAA8 8FBF0024 */ lw $ra, 0x24($sp) /* 0A05DC 7F06BAAC 44819000 */ mtc1 $at, $f18 @@ -1052,7 +1053,7 @@ def_7F06B2F4: /* 0A05F0 7F06BAC0 C5400008 */ lwc1 $f0, 8($t2) /* 0A05F4 7F06BAC4 C5280008 */ lwc1 $f8, 8($t1) /* 0A05F8 7F06BAC8 4608003C */ c.lt.s $f0, $f8 -/* 0A05FC 7F06BACC 00000000 */ nop +/* 0A05FC 7F06BACC 00000000 */ nop /* 0A0600 7F06BAD0 45020004 */ bc1fl .L7F06BAE4 /* 0A0604 7F06BAD4 4610603C */ c.lt.s $f12, $f16 /* 0A0608 7F06BAD8 46120281 */ sub.s $f10, $f0, $f18 @@ -1060,13 +1061,13 @@ def_7F06B2F4: .L7F06BAE0: /* 0A0610 7F06BAE0 4610603C */ c.lt.s $f12, $f16 .L7F06BAE4: -/* 0A0614 7F06BAE4 00000000 */ nop +/* 0A0614 7F06BAE4 00000000 */ nop /* 0A0618 7F06BAE8 4502000A */ bc1fl .L7F06BB14 /* 0A061C 7F06BAEC 8FBF0024 */ lw $ra, 0x24($sp) /* 0A0620 7F06BAF0 C5600008 */ lwc1 $f0, 8($t3) /* 0A0624 7F06BAF4 C5240008 */ lwc1 $f4, 8($t1) /* 0A0628 7F06BAF8 4604003C */ c.lt.s $f0, $f4 -/* 0A062C 7F06BAFC 00000000 */ nop +/* 0A062C 7F06BAFC 00000000 */ nop /* 0A0630 7F06BB00 45020004 */ bc1fl .L7F06BB14 /* 0A0634 7F06BB04 8FBF0024 */ lw $ra, 0x24($sp) /* 0A0638 7F06BB08 46120181 */ sub.s $f6, $f0, $f18 @@ -1123,7 +1124,7 @@ glabel sub_GAME_7F06BB28 /* 0A06B4 7F06BB84 C4820008 */ lwc1 $f2, 8($a0) .L7F06BB88: /* 0A06B8 7F06BB88 4602003C */ c.lt.s $f0, $f2 -/* 0A06BC 7F06BB8C 00000000 */ nop +/* 0A06BC 7F06BB8C 00000000 */ nop /* 0A06C0 7F06BB90 45020004 */ bc1fl .L7F06BBA4 /* 0A06C4 7F06BB94 8C84000C */ lw $a0, 0xc($a0) /* 0A06C8 7F06BB98 46001006 */ mov.s $f0, $f2 @@ -1134,7 +1135,7 @@ glabel sub_GAME_7F06BB28 /* 0A06D8 7F06BBA8 C4820008 */ lwc1 $f2, 8($a0) .L7F06BBAC: /* 0A06DC 7F06BBAC 1040000E */ beqz $v0, .L7F06BBE8 -/* 0A06E0 7F06BBB0 00000000 */ nop +/* 0A06E0 7F06BBB0 00000000 */ nop /* 0A06E4 7F06BBB4 8C4F0010 */ lw $t7, 0x10($v0) /* 0A06E8 7F06BBB8 8C58000C */ lw $t8, 0xc($v0) /* 0A06EC 7F06BBBC 00402825 */ move $a1, $v0 @@ -1176,9 +1177,124 @@ const char aDrawjointlistObjectNotInitialised0[] = "drawjointlist: object not in #endif #ifdef NONMATCHING -void drawjointlist(void) { +void drawjointlist(ModelRenderData *mrData, void *field_20) +{ + Model *temp_a2; + ModelFileHeader *mfhModel; + ModelNode *temp_s1; + ModelNode *temp_v0_2; + ModelNode *temp_v0_3; + ModelNode *var_s0; + s32 temp_t3; + s32 var_s2; + u64 *temp_v0; + + + if (mrData->gdl == NULL) + { + osSyncPrintf(&aDrawjointlistNoGfxlist); + exit(); + } + if (field_20 != NULL) + { + do + { + temp_a2 = field_20->unk0; + temp_s1 = field_20->unk4; + mfhModel = temp_a2->obj; + var_s0 = temp_s1; + if (mfhModel == NULL) + { + osSyncPrintf(&aDrawjointlistNoObject0xX, temp_a2, temp_a2); + exit(); + mfhModel = field_20->unk0->obj; + } + if (mfhModel->isLoaded == 0) + { + osSyncPrintf(&aDrawjointlistObjectNotInitialised0, mfhModel); + exit(); + } + if (mrData->unk18 != 0) + { + if (field_20->unk8 < getjointsize(field_20->unk0, temp_s1)) + { + var_s0 = NULL; + } + } + else + { + temp_v0 = mrData->gdl; + mrData->gdl = temp_v0 + 8; + temp_v0->unk0 = 0xBC000C06; + temp_v0->unk4 = osVirtualToPhysical(field_20->unk0->unk0c, temp_s1); + } + if (var_s0 != NULL) + { + do + { + var_s2 = 1; + temp_t3 = var_s0->Opcode & 0xFF; + switch (temp_t3) + { + case 1: + case 2: + case 3: + case 11: + case 12: + case 13: + case 14: + case 15: + case 16: + case 21: + if (var_s0 == temp_s1) + { + sub_GAME_7F074534(mrData, field_20->unk0, var_s0); + } + else + { + var_s2 = 0; + } + break; + default: + sub_GAME_7F074534(mrData, field_20->unk0, var_s0); + break; + } + if ((var_s2 != 0) && (temp_v0_2 = var_s0->Child, (temp_v0_2 != NULL))) + { + var_s0 = temp_v0_2; + } + else if (var_s0 != NULL) + { +loop_22: + if (var_s0 == temp_s1) + { + var_s0 = NULL; + } + else + { + temp_v0_3 = var_s0->Next; + if (temp_v0_3 != NULL) + { + var_s0 = temp_v0_3; + } + else + { + var_s0 = var_s0->Parent; + if (var_s0 != NULL) + { + goto loop_22; + } + } + } + } + } while (var_s0 != NULL); + } + field_20 = field_20->unkC; + } while (field_20 != NULL); + } } + #else #ifndef VERSION_EU GLOBAL_ASM( @@ -1227,7 +1343,7 @@ glabel drawjointlist /* 0A076C 7F06BC3C 0C0033D1 */ jal osSyncPrintf /* 0A0770 7F06BC40 24844420 */ addiu $a0, %lo(aDrawjointlistNoGfxlist) # addiu $a0, $a0, 0x4420 /* 0A0774 7F06BC44 0FC1B11B */ jal return_null -/* 0A0778 7F06BC48 00000000 */ nop +/* 0A0778 7F06BC48 00000000 */ nop .L7F06BC4C: /* 0A077C 7F06BC4C 52600065 */ beql $s3, $zero, .L7F06BDE4 /* 0A0780 7F06BC50 8FBF002C */ lw $ra, 0x2c($sp) @@ -1243,7 +1359,7 @@ glabel drawjointlist /* 0A07A4 7F06BC74 0C0033D1 */ jal osSyncPrintf /* 0A07A8 7F06BC78 00C02825 */ move $a1, $a2 /* 0A07AC 7F06BC7C 0FC1B11B */ jal return_null -/* 0A07B0 7F06BC80 00000000 */ nop +/* 0A07B0 7F06BC80 00000000 */ nop /* 0A07B4 7F06BC84 8E6F0000 */ lw $t7, ($s3) /* 0A07B8 7F06BC88 8DE50008 */ lw $a1, 8($t7) /* 0A07BC 7F06BC8C 8CB8001C */ lw $t8, 0x1c($a1) @@ -1254,7 +1370,7 @@ glabel drawjointlist /* 0A07CC 7F06BC9C 0C0033D1 */ jal osSyncPrintf /* 0A07D0 7F06BCA0 24844460 */ addiu $a0, %lo(aDrawjointlistObjectNotInitialised0) # addiu $a0, $a0, 0x4460 /* 0A07D4 7F06BCA4 0FC1B11B */ jal return_null -/* 0A07D8 7F06BCA8 00000000 */ nop +/* 0A07D8 7F06BCA8 00000000 */ nop /* 0A07DC 7F06BCAC 8E990018 */ lw $t9, 0x18($s4) .L7F06BCB0: /* 0A07E0 7F06BCB0 02202825 */ move $a1, $s1 @@ -1264,9 +1380,9 @@ glabel drawjointlist /* 0A07F0 7F06BCC0 8E640000 */ lw $a0, ($s3) /* 0A07F4 7F06BCC4 C6640008 */ lwc1 $f4, 8($s3) /* 0A07F8 7F06BCC8 4600203C */ c.lt.s $f4, $f0 -/* 0A07FC 7F06BCCC 00000000 */ nop +/* 0A07FC 7F06BCCC 00000000 */ nop /* 0A0800 7F06BCD0 4500000E */ bc1f .L7F06BD0C -/* 0A0804 7F06BCD4 00000000 */ nop +/* 0A0804 7F06BCD4 00000000 */ nop /* 0A0808 7F06BCD8 1000000C */ b .L7F06BD0C /* 0A080C 7F06BCDC 00008025 */ move $s0, $zero /* 0A0810 7F06BCE0 8E82000C */ lw $v0, 0xc($s4) @@ -1297,7 +1413,7 @@ glabel drawjointlist /* 0A0868 7F06BD38 8C2C4538 */ lw $t4, %lo(obj_table_jointlist)($at) .L7F06BD3C: /* 0A086C 7F06BD3C 01800008 */ jr $t4 -/* 0A0870 7F06BD40 00000000 */ nop +/* 0A0870 7F06BD40 00000000 */ nop .L7F06BD44: /* 0A0874 7F06BD44 16110006 */ bne $s0, $s1, .L7F06BD60 /* 0A0878 7F06BD48 02802025 */ move $a0, $s4 @@ -1305,7 +1421,7 @@ glabel drawjointlist /* 0A0880 7F06BD50 0FC1D14D */ jal sub_GAME_7F074534 /* 0A0884 7F06BD54 02003025 */ move $a2, $s0 /* 0A0888 7F06BD58 10000007 */ b .L7F06BD78 -/* 0A088C 7F06BD5C 00000000 */ nop +/* 0A088C 7F06BD5C 00000000 */ nop .L7F06BD60: /* 0A0890 7F06BD60 10000005 */ b .L7F06BD78 /* 0A0894 7F06BD64 00009025 */ move $s2, $zero @@ -1317,15 +1433,15 @@ def_7F06BD3C: /* 0A08A4 7F06BD74 02003025 */ move $a2, $s0 .L7F06BD78: /* 0A08A8 7F06BD78 12400006 */ beqz $s2, .L7F06BD94 -/* 0A08AC 7F06BD7C 00000000 */ nop +/* 0A08AC 7F06BD7C 00000000 */ nop /* 0A08B0 7F06BD80 8E020014 */ lw $v0, 0x14($s0) /* 0A08B4 7F06BD84 10400003 */ beqz $v0, .L7F06BD94 -/* 0A08B8 7F06BD88 00000000 */ nop +/* 0A08B8 7F06BD88 00000000 */ nop /* 0A08BC 7F06BD8C 1000000F */ b .L7F06BDCC /* 0A08C0 7F06BD90 00408025 */ move $s0, $v0 .L7F06BD94: /* 0A08C4 7F06BD94 1200000D */ beqz $s0, .L7F06BDCC -/* 0A08C8 7F06BD98 00000000 */ nop +/* 0A08C8 7F06BD98 00000000 */ nop .L7F06BD9C: /* 0A08CC 7F06BD9C 56110004 */ bnel $s0, $s1, .L7F06BDB0 /* 0A08D0 7F06BDA0 8E02000C */ lw $v0, 0xc($s0) @@ -1340,7 +1456,7 @@ def_7F06BD3C: /* 0A08F0 7F06BDC0 8E100008 */ lw $s0, 8($s0) .L7F06BDC4: /* 0A08F4 7F06BDC4 1600FFF5 */ bnez $s0, .L7F06BD9C -/* 0A08F8 7F06BDC8 00000000 */ nop +/* 0A08F8 7F06BDC8 00000000 */ nop .L7F06BDCC: /* 0A08FC 7F06BDCC 5600FFD2 */ bnezl $s0, .L7F06BD18 /* 0A0900 7F06BDD0 96020000 */ lhu $v0, ($s0) @@ -1412,9 +1528,9 @@ glabel drawjointlist /* 09EDEC 7F06C3FC 02202825 */ move $a1, $s1 /* 09EDF0 7F06C400 C6640008 */ lwc1 $f4, 8($s3) /* 09EDF4 7F06C404 4600203C */ c.lt.s $f4, $f0 -/* 09EDF8 7F06C408 00000000 */ nop +/* 09EDF8 7F06C408 00000000 */ nop /* 09EDFC 7F06C40C 4500000E */ bc1f .L7F06C448 -/* 09EE00 7F06C410 00000000 */ nop +/* 09EE00 7F06C410 00000000 */ nop /* 09EE04 7F06C414 1000000C */ b .L7F06C448 /* 09EE08 7F06C418 00008025 */ move $s0, $zero .L7F06C41C: @@ -1445,7 +1561,7 @@ glabel drawjointlist /* 09EE64 7F06C474 8C29A608 */ lw $t1, %lo(obj_table_jointlist)($at) .L7F06BD3C: /* 09EE68 7F06C478 01200008 */ jr $t1 -/* 09EE6C 7F06C47C 00000000 */ nop +/* 09EE6C 7F06C47C 00000000 */ nop .L7F06BD44: /* 09EE70 7F06C480 16110006 */ bne $s0, $s1, .L7F06C49C /* 09EE74 7F06C484 02802025 */ move $a0, $s4 @@ -1453,7 +1569,7 @@ glabel drawjointlist /* 09EE7C 7F06C48C 0FC1D182 */ jal sub_GAME_7F074534 /* 09EE80 7F06C490 02003025 */ move $a2, $s0 /* 09EE84 7F06C494 10000007 */ b .L7F06C4B4 -/* 09EE88 7F06C498 00000000 */ nop +/* 09EE88 7F06C498 00000000 */ nop .L7F06C49C: /* 09EE8C 7F06C49C 10000005 */ b .L7F06C4B4 /* 09EE90 7F06C4A0 00009025 */ move $s2, $zero @@ -1465,15 +1581,15 @@ glabel drawjointlist /* 09EEA0 7F06C4B0 02003025 */ move $a2, $s0 .L7F06C4B4: /* 09EEA4 7F06C4B4 12400006 */ beqz $s2, .L7F06C4D0 -/* 09EEA8 7F06C4B8 00000000 */ nop +/* 09EEA8 7F06C4B8 00000000 */ nop /* 09EEAC 7F06C4BC 8E020014 */ lw $v0, 0x14($s0) /* 09EEB0 7F06C4C0 10400003 */ beqz $v0, .L7F06C4D0 -/* 09EEB4 7F06C4C4 00000000 */ nop +/* 09EEB4 7F06C4C4 00000000 */ nop /* 09EEB8 7F06C4C8 1000000F */ b .L7F06C508 /* 09EEBC 7F06C4CC 00408025 */ move $s0, $v0 .L7F06C4D0: /* 09EEC0 7F06C4D0 1200000D */ beqz $s0, .L7F06C508 -/* 09EEC4 7F06C4D4 00000000 */ nop +/* 09EEC4 7F06C4D4 00000000 */ nop .L7F06C4D8: /* 09EEC8 7F06C4D8 56110004 */ bnel $s0, $s1, .L7F06C4EC /* 09EECC 7F06C4DC 8E02000C */ lw $v0, 0xc($s0) @@ -1488,7 +1604,7 @@ glabel drawjointlist /* 09EEEC 7F06C4FC 8E100008 */ lw $s0, 8($s0) .L7F06C500: /* 09EEF0 7F06C500 1600FFF5 */ bnez $s0, .L7F06C4D8 -/* 09EEF4 7F06C504 00000000 */ nop +/* 09EEF4 7F06C504 00000000 */ nop .L7F06C508: /* 09EEF8 7F06C508 5600FFD2 */ bnezl $s0, .L7F06C454 /* 09EEFC 7F06C50C 96020000 */ lhu $v0, ($s0) @@ -1545,6 +1661,7 @@ glabel jpt_damage_detail .word .L7F06BFC8 .word .L7F06BFBC .word .L7F06BFC8 +.size jpt_damage_detail, . - jpt_damage_detail /*D:800545F8*/ glabel D_800545F8 @@ -1582,15 +1699,15 @@ glabel probably_damage_detail_blood_effect_related /* 0A0994 7F06BE64 8E730010 */ lw $s3, 0x10($s3) .L7F06BE68: /* 0A0998 7F06BE68 12200006 */ beqz $s1, .L7F06BE84 -/* 0A099C 7F06BE6C 00000000 */ nop +/* 0A099C 7F06BE6C 00000000 */ nop /* 0A09A0 7F06BE70 8E020014 */ lw $v0, 0x14($s0) /* 0A09A4 7F06BE74 10400003 */ beqz $v0, .L7F06BE84 -/* 0A09A8 7F06BE78 00000000 */ nop +/* 0A09A8 7F06BE78 00000000 */ nop /* 0A09AC 7F06BE7C 10000011 */ b .L7F06BEC4 /* 0A09B0 7F06BE80 00408025 */ move $s0, $v0 .L7F06BE84: /* 0A09B4 7F06BE84 1200000D */ beqz $s0, .L7F06BEBC -/* 0A09B8 7F06BE88 00000000 */ nop +/* 0A09B8 7F06BE88 00000000 */ nop .L7F06BE8C: /* 0A09BC 7F06BE8C 56120004 */ bnel $s0, $s2, .L7F06BEA0 /* 0A09C0 7F06BE90 8E02000C */ lw $v0, 0xc($s0) @@ -1605,7 +1722,7 @@ glabel probably_damage_detail_blood_effect_related /* 0A09E0 7F06BEB0 8E100008 */ lw $s0, 8($s0) .L7F06BEB4: /* 0A09E4 7F06BEB4 1600FFF5 */ bnez $s0, .L7F06BE8C -/* 0A09E8 7F06BEB8 00000000 */ nop +/* 0A09E8 7F06BEB8 00000000 */ nop .L7F06BEBC: /* 0A09EC 7F06BEBC 52000045 */ beql $s0, $zero, .L7F06BFD4 /* 0A09F0 7F06BEC0 8E730010 */ lw $s3, 0x10($s3) @@ -1622,7 +1739,7 @@ glabel probably_damage_detail_blood_effect_related /* 0A0A18 7F06BEE8 8C384598 */ lw $t8, %lo(jpt_damage_detail)($at) .L7F06BEEC: /* 0A0A1C 7F06BEEC 03000008 */ jr $t8 -/* 0A0A20 7F06BEF0 00000000 */ nop +/* 0A0A20 7F06BEF0 00000000 */ nop .L7F06BEF4: /* 0A0A24 7F06BEF4 10000034 */ b .L7F06BFC8 /* 0A0A28 7F06BEF8 00008825 */ move $s1, $zero @@ -1636,7 +1753,7 @@ glabel probably_damage_detail_blood_effect_related /* 0A0A40 7F06BF10 0FC1D31A */ jal sub_GAME_7F074C68 /* 0A0A44 7F06BF14 02A03825 */ move $a3, $s5 /* 0A0A48 7F06BF18 1040000A */ beqz $v0, .L7F06BF44 -/* 0A0A4C 7F06BF1C 00000000 */ nop +/* 0A0A4C 7F06BF1C 00000000 */ nop /* 0A0A50 7F06BF20 8E790000 */ lw $t9, ($s3) /* 0A0A54 7F06BF24 8FA80044 */ lw $t0, 0x44($sp) /* 0A0A58 7F06BF28 AD190000 */ sw $t9, ($t0) @@ -1656,7 +1773,7 @@ glabel probably_damage_detail_blood_effect_related /* 0A0A88 7F06BF58 0FC1D32B */ jal sub_GAME_7F074CAC /* 0A0A8C 7F06BF5C 02A03825 */ move $a3, $s5 /* 0A0A90 7F06BF60 1040000A */ beqz $v0, .L7F06BF8C -/* 0A0A94 7F06BF64 00000000 */ nop +/* 0A0A94 7F06BF64 00000000 */ nop /* 0A0A98 7F06BF68 8E6B0000 */ lw $t3, ($s3) /* 0A0A9C 7F06BF6C 8FAC0044 */ lw $t4, 0x44($sp) /* 0A0AA0 7F06BF70 AD8B0000 */ sw $t3, ($t4) @@ -1674,13 +1791,13 @@ glabel probably_damage_detail_blood_effect_related /* 0A0AC8 7F06BF98 0FC1BA5C */ jal modelApplyDistanceRelations /* 0A0ACC 7F06BF9C 02002825 */ move $a1, $s0 /* 0A0AD0 7F06BFA0 10000009 */ b .L7F06BFC8 -/* 0A0AD4 7F06BFA4 00000000 */ nop +/* 0A0AD4 7F06BFA4 00000000 */ nop .L7F06BFA8: /* 0A0AD8 7F06BFA8 8E640000 */ lw $a0, ($s3) /* 0A0ADC 7F06BFAC 0FC1BA6F */ jal modelApplyToggleRelations /* 0A0AE0 7F06BFB0 02002825 */ move $a1, $s0 /* 0A0AE4 7F06BFB4 10000004 */ b .L7F06BFC8 -/* 0A0AE8 7F06BFB8 00000000 */ nop +/* 0A0AE8 7F06BFB8 00000000 */ nop .L7F06BFBC: /* 0A0AEC 7F06BFBC 8E640000 */ lw $a0, ($s3) /* 0A0AF0 7F06BFC0 0FC1BA82 */ jal modelApplyHeadRelations @@ -1688,7 +1805,7 @@ glabel probably_damage_detail_blood_effect_related def_7F06BEEC: .L7F06BFC8: /* 0A0AF8 7F06BFC8 1600FFA7 */ bnez $s0, .L7F06BE68 -/* 0A0AFC 7F06BFCC 00000000 */ nop +/* 0A0AFC 7F06BFCC 00000000 */ nop /* 0A0B00 7F06BFD0 8E730010 */ lw $s3, 0x10($s3) .L7F06BFD4: /* 0A0B04 7F06BFD4 5660FF9B */ bnezl $s3, .L7F06BE44 @@ -1716,7 +1833,11 @@ def_7F06BEEC: #ifdef NONMATCHING -void sub_GAME_7F06C010(void) { +/* +* Address: 0x7F06C010 +* https://decomp.me/scratch/IDiXU +*/ +void sub_GAME_7F06C010(ModelNode **head, /*s32 unused, s32 unused2,*/ s32 *arg3, s32 *arg4) { } #else @@ -1744,7 +1865,7 @@ glabel sub_GAME_7F06C010 /* 0A0B80 7F06C050 8FBF001C */ lw $ra, 0x1c($sp) /* 0A0B84 7F06C054 27BD0020 */ addiu $sp, $sp, 0x20 /* 0A0B88 7F06C058 03E00008 */ jr $ra -/* 0A0B8C 7F06C05C 00000000 */ nop +/* 0A0B8C 7F06C05C 00000000 */ nop ) #endif diff --git a/src/game/objecthandler.h b/src/game/objecthandler.h index 2a34df9..b9fc151 100644 --- a/src/game/objecthandler.h +++ b/src/game/objecthandler.h @@ -2,11 +2,12 @@ #define _OBJECTHANDLER_ #include #include +#include struct bondstruct_unk_animation_related { - char* unk00; - char* unk04; - char* unk08; + char* uselessPointer; // Is incremented like a count when an animation is copied from ROM to RAM but it's never read + char* animBufferPtr1; + char* animBufferPtr2; }; struct bondstruct_unk_op07_related { @@ -15,6 +16,75 @@ struct bondstruct_unk_op07_related { s32 unk0C; }; +struct ptr_0_s { + s16 unk00; + s16 unk02; + s32 unk04; + s32 unk08; + s32 unk0c; + void *unk10; + s32 unk14; + s32 unk18; + s32 unk1c; + s32 unk20; + s32 unk24; + s32 unk28; + s32 unk2c; + s32 unk30; + s32 unk34; + s32 unk38; + s32 unk3c; + s32 unk40; + s32 unk44; + s32 unk48; + s32 unk4c; + s32 unk50; + s32 unk54; + s32 unk58; + s32 unk5c; + s32 unk60; + s32 unk64; + s32 unk68; + s32 unk6c; + s32 unk70; + s32 unk74; + s32 unk78; + s32 unk7c; + s32 unk80; + s32 unk84; + s32 unk88; + s32 unk8c; + s32 unk90; + s32 unk94; + s32 unk98; + s32 unk9c; + s32 unka0; + s32 unka4; + s32 unka8; + s32 unkac; + s32 unkb0; + s32 unkb4; + s32 unkb8; + + // is this struct size 0xbc or 0xc0 ? + //s32 unkbc; +}; + +struct ptr_1_s { + s16 unk00; + s16 unk02; + s32 unk04; + s32 unk08; + s32 unk0c; + void *unk10; + s32 unk14; + s32 unk18; + s32 unk1c; +}; + +extern struct ptr_0_s *ptr_allocation_0; +extern struct ptr_1_s *ptr_allocation_1; + extern s32 g_ModelDistanceDisabled; extern f32 g_ModelDistanceScale; extern u32 g_ModelAnimMergingEnabled; @@ -81,7 +151,7 @@ Mtxf* modelFindNodeMtx(Model *arg0, ModelNode *arg1, s32 arg2); // called with struct ChrRecord->field_20 void sub_GAME_7F06B248(void *arg0); -void drawjointlist(struct unk_joint_list *arg0, void* arg1); +void drawjointlist(ModelRenderData *arg0, void* arg1); void sub_GAME_7F073FC8(s32); void modelSetAnimMergingEnabled(s32 arg0); u32 modelIsAnimMergingEnabled(void); @@ -92,11 +162,11 @@ void sub_GAME_7F06D2E4(s32, s32, ModelSkeleton*, void* anim, s32, s16*); void modelInit(struct Model *, struct ModelFileHeader *, u32 *); void animInit(struct Model *, struct ModelFileHeader *, u32 *); void modelSetAnimFlipFunction(Model *, void *); -void subcalcmatrices(struct unk_joint_list *, Model *); -void instcalcmatrices(struct unk_joint_list *arg0, Model *arg1); -void load_object_fill_header(struct ModelFileHeader *objheader, u8 *name, void *targetloc, s32 sizeleft, struct texpool * buffer); +void subcalcmatrices(ModelRenderData *, Model *); +void instcalcmatrices(ModelRenderData *arg0, Model *arg1); +void load_object_fill_header(struct ModelFileHeader *objheader, u8 *name, u8* dst, s32 size, struct texpool * buffer); void* get_obj_instance_controller_for_header(struct ModelFileHeader* arg0); -void subdraw(struct unk_joint_list *arg0, struct Model *); +void subdraw(ModelRenderData *arg0, struct Model *); void sub_GAME_7F06EFC4(struct Model *); void modelAttachPart(Model *pmodel, ModelFileHeader *pmodeldef, ModelNode *pnode, ModelFileHeader *cmodeldef); void modelInitRwData(Model *model, ModelNode *startnode); @@ -108,4 +178,8 @@ void modelApplyToggleRelations(Model* model, ModelNode* node); void return_null(void); #endif +void modelIterateDisplayLists(ModelFileHeader *fileheader, ModelNode **nodeptr, Gfx **gdlptr); +void modelNodeReplaceGdl(u32 arg0, ModelNode *node, Gfx *find, Gfx *replacement); + + #endif diff --git a/src/game/objecthandler_2.c b/src/game/objecthandler_2.c index 48ebaa9..6aa25b5 100644 --- a/src/game/objecthandler_2.c +++ b/src/game/objecthandler_2.c @@ -6,11 +6,88 @@ #include "math_unk_05A9E0.h" #include "chrobjdata.h" #include "ob.h" +#include "objecthandler.h" +#include "unk_0CC4C0.h" +#include "image.h" //file split per EU #ifdef NONMATCHING -void sub_GAME_7F0762E0(void) { +/*** + * Perfect Dark: + * void modeldef0f1a7560(struct modeldef *modeldef, u16 filenum, u32 arg2, struct modeldef *modeldef2, struct texpool *texpool, bool arg5) + * + * NTSC address 0x7F0762E0. +*/ +// https://decomp.me/scratch/9a4EO 69.88 +void sub_GAME_7F0762E0(ModelFileHeader *arg0, char *arg1, void *arg2, s32 arg3) +{ + ModelNode *sp74; + uintptr_t gdl; // sp6C + uintptr_t sp58; + ModelNode **sp54; + s32 sp50; + s32 temp_fp; + s32 temp_s0; + Gfx *var_s3; + Gfx *temp_a0; + uintptr_t temp_a2; + uintptr_t temp_a1; + s32 var_s1; + s32 var_s2; + + sp54 = arg0->Switches; + sp50 = fileGetIndex(arg1); + temp_s0 = get_rom_remaining_buffer_for_index(sp50); + temp_fp = get_pc_remaining_buffer_for_index(sp50); + sp74 = NULL; + modelIterateDisplayLists(arg0, &sp74, (Gfx**)&gdl); + + if (gdl) + { + var_s3 = gdl; + + //temp_a0 = ((s32)arg0->Switches + ((s32) gdl & 0xFFFFFF)); + temp_a2 = ((s32)temp_fp - (s32)((s32)arg0->Switches + ((s32) gdl & 0xFFFFFF))) + (s32)sp54; + temp_a1 = ((s32)temp_s0 + (s32)sp54) - (s32)temp_a2; + + sp58 = (s32)temp_a1 - (s32)((s32)arg0->Switches + ((s32) gdl & 0xFFFFFF)); + + // texCopyGdls + sub_GAME_7F0CE794(((s32)arg0->Switches + ((s32) gdl & 0xFFFFFF)), temp_a1, (s32) temp_a2); + + texLoadFromModelFileHeader(arg0, arg3); + + while (sp74 != NULL) + { + modelIterateDisplayLists(arg0, &sp74, (Gfx**)&gdl); + + if (gdl) + { + var_s2 = (s32) gdl * 0; + var_s1 = (s32) gdl & 0xFFFFFF; + } + else + { + var_s1 = (s32) gdl & 0xFFFFFF; + var_s2 = (temp_fp + (s32)arg0->Switches - (s32)arg0->Switches) - (var_s1); + } + + modelNodeReplaceGdl((u32) arg0, sp74, gdl, var_s3); + + var_s3 += texLoadFromGdl( + (Gfx *)((uintptr_t)arg0->Switches + ((s32)(var_s1) + (s32)sp58)), + var_s2, + (Gfx *)((uintptr_t)arg0->Switches + ((s32) var_s3 & 0xFFFFFF)), + arg3); + } + + fileSetSize( + sp50, + (u8*)sp54, + (((u32)((s32)arg0->Switches + ((s32) var_s3 & 0xFFFFFF)) - (u32)sp54) + 0xf) & ~0xf, + arg2 == NULL); + } } #else GLOBAL_ASM( @@ -60,7 +137,7 @@ glabel sub_GAME_7F0762E0 /* 0AAEB4 7F076384 01262823 */ subu $a1, $t1, $a2 /* 0AAEB8 7F076388 00A45023 */ subu $t2, $a1, $a0 /* 0AAEBC 7F07638C 02E09825 */ move $s3, $s7 -/* 0AAEC0 7F076390 0FC339E5 */ jal sub_GAME_7F0CE794 +/* 0AAEC0 7F076390 0FC339E5 */ jal texCopyGdls /* 0AAEC4 7F076394 AFAA0058 */ sw $t2, 0x58($sp) /* 0AAEC8 7F076398 02A02025 */ move $a0, $s5 /* 0AAECC 7F07639C 0FC32F94 */ jal texLoadFromModelFileHeader @@ -100,7 +177,7 @@ glabel sub_GAME_7F0762E0 /* 0AAF48 7F076418 02402825 */ move $a1, $s2 /* 0AAF4C 7F07641C 8FA70084 */ lw $a3, 0x84($sp) /* 0AAF50 7F076420 00483021 */ addu $a2, $v0, $t0 -/* 0AAF54 7F076424 0FC33846 */ jal process_microcode_sort_display_modes_expand_image_calls +/* 0AAF54 7F076424 0FC33846 */ jal texLoadFromGdl /* 0AAF58 7F076428 01F92021 */ addu $a0, $t7, $t9 /* 0AAF5C 7F07642C 8FA90074 */ lw $t1, 0x74($sp) /* 0AAF60 7F076430 02629821 */ addu $s3, $s3, $v0 @@ -140,12 +217,12 @@ glabel sub_GAME_7F0762E0 - -#ifdef NONMATCHING -void load_object_fill_header(struct ModelFileHeader *objheader, s8 *name, u8* dst, s32 size, struct texpool * buffer) +/*** + * NTSC addres 0x7F0764A4. +*/ +void load_object_fill_header(struct ModelFileHeader *objheader, u8 *name, u8* dst, s32 size, struct texpool * buffer) { - - struct ModelNode *filedata; + void *filedata; if (dst != 0) { @@ -155,65 +232,18 @@ void load_object_fill_header(struct ModelFileHeader *objheader, s8 *name, u8* ds { filedata = _fileNameLoadToBank(name, 0, 0x100, 4); } - objheader->Switches = filedata; - objheader->Textures = &filedata[objheader->numSwitches]; - objheader->RootNode = objheader->Textures[objheader->numtextures]; + + objheader->Switches = (struct ModelNode **)filedata; + + // hmmmmmmmmmmmm + objheader->Textures = (struct ModelFileTextures *)&((s32*)filedata)[objheader->numSwitches]; + + objheader->RootNode = (struct ModelNode *)&objheader->Textures[objheader->numtextures]; + sub_GAME_7F075A90(objheader, 0x5000000, filedata); sub_GAME_7F0762E0(objheader, name, dst, buffer); } -#else -GLOBAL_ASM( -.text -glabel load_object_fill_header -/* 0AAFD4 7F0764A4 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 0AAFD8 7F0764A8 AFB00018 */ sw $s0, 0x18($sp) -/* 0AAFDC 7F0764AC 00808025 */ move $s0, $a0 -/* 0AAFE0 7F0764B0 AFBF001C */ sw $ra, 0x1c($sp) -/* 0AAFE4 7F0764B4 AFA50024 */ sw $a1, 0x24($sp) -/* 0AAFE8 7F0764B8 10C00006 */ beqz $a2, .L7F0764D4 -/* 0AAFEC 7F0764BC AFA60028 */ sw $a2, 0x28($sp) -/* 0AAFF0 7F0764C0 00A02025 */ move $a0, $a1 -/* 0AAFF4 7F0764C4 0FC2F350 */ jal _fileNameLoadToAddr -/* 0AAFF8 7F0764C8 00002825 */ move $a1, $zero -/* 0AAFFC 7F0764CC 10000007 */ b .L7F0764EC -/* 0AB000 7F0764D0 00403025 */ move $a2, $v0 -.L7F0764D4: -/* 0AB004 7F0764D4 8FA40024 */ lw $a0, 0x24($sp) -/* 0AB008 7F0764D8 00002825 */ move $a1, $zero -/* 0AB00C 7F0764DC 24060100 */ li $a2, 256 -/* 0AB010 7F0764E0 0FC2F341 */ jal _fileNameLoadToBank -/* 0AB014 7F0764E4 24070004 */ li $a3, 4 -/* 0AB018 7F0764E8 00403025 */ move $a2, $v0 -.L7F0764EC: -/* 0AB01C 7F0764EC 86190016 */ lh $t9, 0x16($s0) -/* 0AB020 7F0764F0 860F000C */ lh $t7, 0xc($s0) -/* 0AB024 7F0764F4 AE060008 */ sw $a2, 8($s0) -/* 0AB028 7F0764F8 00194080 */ sll $t0, $t9, 2 -/* 0AB02C 7F0764FC 01194023 */ subu $t0, $t0, $t9 -/* 0AB030 7F076500 000FC080 */ sll $t8, $t7, 2 -/* 0AB034 7F076504 00D81021 */ addu $v0, $a2, $t8 -/* 0AB038 7F076508 00084080 */ sll $t0, $t0, 2 -/* 0AB03C 7F07650C 00484821 */ addu $t1, $v0, $t0 -/* 0AB040 7F076510 AE020018 */ sw $v0, 0x18($s0) -/* 0AB044 7F076514 AE090000 */ sw $t1, ($s0) -/* 0AB048 7F076518 02002025 */ move $a0, $s0 -/* 0AB04C 7F07651C 0FC1D6A4 */ jal sub_GAME_7F075A90 -/* 0AB050 7F076520 3C050500 */ lui $a1, 0x500 -/* 0AB054 7F076524 02002025 */ move $a0, $s0 -/* 0AB058 7F076528 8FA50024 */ lw $a1, 0x24($sp) -/* 0AB05C 7F07652C 8FA60028 */ lw $a2, 0x28($sp) -/* 0AB060 7F076530 0FC1D8B8 */ jal sub_GAME_7F0762E0 -/* 0AB064 7F076534 8FA70030 */ lw $a3, 0x30($sp) -/* 0AB068 7F076538 8FBF001C */ lw $ra, 0x1c($sp) -/* 0AB06C 7F07653C 8FB00018 */ lw $s0, 0x18($sp) -/* 0AB070 7F076540 27BD0020 */ addiu $sp, $sp, 0x20 -/* 0AB074 7F076544 03E00008 */ jr $ra -/* 0AB078 7F076548 00000000 */ nop -) -#endif - - diff --git a/src/game/objective.c b/src/game/objective.c index 6575e17..0367f9e 100644 --- a/src/game/objective.c +++ b/src/game/objective.c @@ -4,294 +4,61 @@ #include "objective_status.h" -#ifdef NONMATCHING -//CODE.bss:80075D30 -extern struct objective_entry *objective_ptrs[OBJECTIVES_MAX]; -extern OBJECTIVESTATUS dword_CODE_bss_80075D58[OBJECTIVES_MAX]; //This is an array of 10 OBJECTIVESTATUS, - -//CODE.bss:80075D80 -extern u32 *ptr_last_tag_entry_type16; -//CODE.bss:80075D84 -extern u32 *ptr_last_briefing_setup_entry_type23; -//CODE.bss:80075D88 -struct criteria_roomentered *ptr_last_enter_room_subobject_entry_type20; -//CODE.bss:80075D8C -extern struct criteria_deposit *ptr_last_deposit_in_room_subobject_entry_type21; -//CODE.bss:80075D90 -extern u32 *ptr_last_photo_obj_in_room_subobject_entry_type1E; -// data -extern s32 objective_count; -extern s32 objective_count_related; /* - * Clears Objectives and states - * Note: this matches in everthing except that calling the var "dword_CODE_bss_80075D58" - * as-is means the var is offset by 1 word. - * somewhere along the line either the var will change or the func will need re-doing. - * https://decomp.me/scratch/ecX06 + * Clears Objectives and states. + * + * NTSC address 0x7F004EC0. */ -void something_with_stage_objectives() //#99% MATCH +void something_with_stage_objectives(void) { s32 i; + OBJECTIVESTATUS *start; + OBJECTIVESTATUS *end; + if (bossGetStageNum() != LEVELID_TITLE) { objective_count = -1; - //dword_CODE_bss_80075D58 = NULL; - //dword_CODE_bss_80075D58+4 = NULL; - //*dword_CODE_bss_80075D58+8 = *clear2; - //dword_CODE_bss_80075D58[0] = OBJECTIVESTATUS_INCOMPLETE; - for (i = 1; i <= 10; i++) //using 0-10 causes mismatch + + for (i = 0; i < OBJECTIVES_MAX; i++) { - dword_CODE_bss_80075D58[i] = OBJECTIVESTATUS_INCOMPLETE; + objectiveStatuses[i] = OBJECTIVESTATUS_INCOMPLETE; } } - for (i = 1; i <= 10; i++) //using 0-10 causes mismatch +#if defined(VERSION_JP) || defined(VERSION_EU) + objective_count_related = 0; +#endif + + for (i = 0; i < OBJECTIVES_MAX; i++) { objective_ptrs[i] = NULL; } - ptr_last_tag_entry_type16 = NULL; - ptr_last_briefing_setup_entry_type23 = NULL; - ptr_last_enter_room_subobject_entry_type20 = NULL; - ptr_last_deposit_in_room_subobject_entry_type21 = NULL; + + ptr_last_tag_entry_type16 = NULL; + ptr_last_briefing_setup_entry_type23 = NULL; + ptr_last_enter_room_subobject_entry_type20 = NULL; + ptr_last_deposit_in_room_subobject_entry_type21 = NULL; ptr_last_photo_obj_in_room_subobject_entry_type1E = NULL; } -#else -#ifdef VERSION_US -GLOBAL_ASM( -.text -glabel something_with_stage_objectives -/* 0399F0 7F004EC0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0399F4 7F004EC4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0399F8 7F004EC8 0C001A57 */ jal bossGetStageNum -/* 0399FC 7F004ECC 00000000 */ nop -/* 039A00 7F004ED0 2401005A */ li $at, 90 -/* 039A04 7F004ED4 10410011 */ beq $v0, $at, .L7F004F1C -/* 039A08 7F004ED8 240EFFFF */ li $t6, -1 -/* 039A0C 7F004EDC 3C018003 */ lui $at, %hi(objective_count) -/* 039A10 7F004EE0 AC2E22F0 */ sw $t6, %lo(objective_count)($at) -/* 039A14 7F004EE4 3C018007 */ lui $at, %hi(dword_CODE_bss_80075D58) -/* 039A18 7F004EE8 AC205D58 */ sw $zero, %lo(dword_CODE_bss_80075D58)($at) -/* 039A1C 7F004EEC 3C018007 */ lui $at, %hi(dword_CODE_bss_80075D58+4) -/* 039A20 7F004EF0 3C028007 */ lui $v0, %hi(dword_CODE_bss_80075D58+8) -/* 039A24 7F004EF4 3C038007 */ lui $v1, %hi(ptr_last_tag_entry_type16) -/* 039A28 7F004EF8 24635D80 */ addiu $v1, %lo(ptr_last_tag_entry_type16) # addiu $v1, $v1, 0x5d80 -/* 039A2C 7F004EFC 24425D60 */ addiu $v0, %lo(dword_CODE_bss_80075D58+8) # addiu $v0, $v0, 0x5d60 -/* 039A30 7F004F00 AC205D5C */ sw $zero, %lo(dword_CODE_bss_80075D58+4)($at) -.L7F004F04: -/* 039A34 7F004F04 24420010 */ addiu $v0, $v0, 0x10 -/* 039A38 7F004F08 AC40FFF4 */ sw $zero, -0xc($v0) -/* 039A3C 7F004F0C AC40FFF8 */ sw $zero, -8($v0) -/* 039A40 7F004F10 AC40FFFC */ sw $zero, -4($v0) -/* 039A44 7F004F14 1443FFFB */ bne $v0, $v1, .L7F004F04 -/* 039A48 7F004F18 AC40FFF0 */ sw $zero, -0x10($v0) -.L7F004F1C: -/* 039A4C 7F004F1C 3C018007 */ lui $at, %hi(objective_ptrs) -/* 039A50 7F004F20 AC205D30 */ sw $zero, %lo(objective_ptrs)($at) -/* 039A54 7F004F24 3C018007 */ lui $at, %hi(objective_ptrs+4) -/* 039A58 7F004F28 3C028007 */ lui $v0, %hi(objective_ptrs+8) -/* 039A5C 7F004F2C 3C038007 */ lui $v1, %hi(dword_CODE_bss_80075D58) -/* 039A60 7F004F30 24635D58 */ addiu $v1, %lo(dword_CODE_bss_80075D58) # addiu $v1, $v1, 0x5d58 -/* 039A64 7F004F34 24425D38 */ addiu $v0, %lo(objective_ptrs+8) # addiu $v0, $v0, 0x5d38 -/* 039A68 7F004F38 AC205D34 */ sw $zero, %lo(objective_ptrs+4)($at) -.L7F004F3C: -/* 039A6C 7F004F3C 24420010 */ addiu $v0, $v0, 0x10 -/* 039A70 7F004F40 AC40FFF4 */ sw $zero, -0xc($v0) -/* 039A74 7F004F44 AC40FFF8 */ sw $zero, -8($v0) -/* 039A78 7F004F48 AC40FFFC */ sw $zero, -4($v0) -/* 039A7C 7F004F4C 1443FFFB */ bne $v0, $v1, .L7F004F3C -/* 039A80 7F004F50 AC40FFF0 */ sw $zero, -0x10($v0) -/* 039A84 7F004F54 3C018007 */ lui $at, %hi(ptr_last_tag_entry_type16) -/* 039A88 7F004F58 AC205D80 */ sw $zero, %lo(ptr_last_tag_entry_type16)($at) -/* 039A8C 7F004F5C 3C018007 */ lui $at, %hi(ptr_last_briefing_setup_entry_type23) -/* 039A90 7F004F60 AC205D84 */ sw $zero, %lo(ptr_last_briefing_setup_entry_type23)($at) -/* 039A94 7F004F64 3C018007 */ lui $at, %hi(ptr_last_enter_room_subobject_entry_type20) -/* 039A98 7F004F68 AC205D88 */ sw $zero, %lo(ptr_last_enter_room_subobject_entry_type20)($at) -/* 039A9C 7F004F6C 8FBF0014 */ lw $ra, 0x14($sp) -/* 039AA0 7F004F70 3C018007 */ lui $at, %hi(ptr_last_deposit_in_room_subobject_entry_type21) -/* 039AA4 7F004F74 AC205D8C */ sw $zero, %lo(ptr_last_deposit_in_room_subobject_entry_type21)($at) -/* 039AA8 7F004F78 3C018007 */ lui $at, %hi(ptr_last_photo_obj_in_room_subobject_entry_type1E) -/* 039AAC 7F004F7C AC205D90 */ sw $zero, %lo(ptr_last_photo_obj_in_room_subobject_entry_type1E)($at) -/* 039AB0 7F004F80 03E00008 */ jr $ra -/* 039AB4 7F004F84 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif - -#ifdef VERSION_JP -GLOBAL_ASM( -.text -glabel something_with_stage_objectives -/* 039A40 7F004ED0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 039A44 7F004ED4 AFBF0014 */ sw $ra, 0x14($sp) -/* 039A48 7F004ED8 0C001A57 */ jal bossGetStageNum -/* 039A4C 7F004EDC 00000000 */ nop -/* 039A50 7F004EE0 2401005A */ li $at, 90 -/* 039A54 7F004EE4 10410011 */ beq $v0, $at, .L7F004F2C -/* 039A58 7F004EE8 240EFFFF */ li $t6, -1 -/* 039A5C 7F004EEC 3C018003 */ lui $at, %hi(objective_count) # $at, 0x8003 -/* 039A60 7F004EF0 AC2E2330 */ sw $t6, %lo(objective_count)($at) -/* 039A64 7F004EF4 3C018007 */ lui $at, %hi(dword_CODE_bss_80075D58) # $at, 0x8007 -/* 039A68 7F004EF8 AC205D98 */ sw $zero, %lo(dword_CODE_bss_80075D58)($at) -/* 039A6C 7F004EFC 3C018007 */ lui $at, %hi(dword_CODE_bss_80075D58+4) # $at, 0x8007 -/* 039A70 7F004F00 3C028007 */ lui $v0, %hi(dword_CODE_bss_80075D58+8) # $v0, 0x8007 -/* 039A74 7F004F04 3C038007 */ lui $v1, %hi(ptr_last_tag_entry_type16) # $v1, 0x8007 -/* 039A78 7F004F08 24635DC0 */ addiu $v1, %lo(ptr_last_tag_entry_type16) # addiu $v1, $v1, 0x5dc0 -/* 039A7C 7F004F0C 24425DA0 */ addiu $v0, %lo(dword_CODE_bss_80075D58+8) # addiu $v0, $v0, 0x5da0 -/* 039A80 7F004F10 AC205D9C */ sw $zero, %lo(dword_CODE_bss_80075D58+4)($at) -.L7F004F14: -/* 039A84 7F004F14 24420010 */ addiu $v0, $v0, 0x10 -/* 039A88 7F004F18 AC40FFF4 */ sw $zero, -0xc($v0) -/* 039A8C 7F004F1C AC40FFF8 */ sw $zero, -8($v0) -/* 039A90 7F004F20 AC40FFFC */ sw $zero, -4($v0) -/* 039A94 7F004F24 1443FFFB */ bne $v0, $v1, .L7F004F14 -/* 039A98 7F004F28 AC40FFF0 */ sw $zero, -0x10($v0) -.L7F004F2C: -/* 039A9C 7F004F2C 3C018003 */ lui $at, %hi(objective_count+4) # $at, 0x8003 -/* 039AA0 7F004F30 AC202334 */ sw $zero, %lo(objective_count+4)($at) -/* 039AA4 7F004F34 3C018007 */ lui $at, %hi(objective_ptrs) # $at, 0x8007 -/* 039AA8 7F004F38 AC205D70 */ sw $zero, %lo(objective_ptrs)($at) -/* 039AAC 7F004F3C 3C018007 */ lui $at, %hi(objective_ptrs+4) # $at, 0x8007 -/* 039AB0 7F004F40 3C028007 */ lui $v0, %hi(objective_ptrs+8) # $v0, 0x8007 -/* 039AB4 7F004F44 3C038007 */ lui $v1, %hi(dword_CODE_bss_80075D58) # $v1, 0x8007 -/* 039AB8 7F004F48 24635D98 */ addiu $v1, %lo(dword_CODE_bss_80075D58) # addiu $v1, $v1, 0x5d98 -/* 039ABC 7F004F4C 24425D78 */ addiu $v0, %lo(objective_ptrs+8) # addiu $v0, $v0, 0x5d78 -/* 039AC0 7F004F50 AC205D74 */ sw $zero, %lo(objective_ptrs+4)($at) -.L7F004F54: -/* 039AC4 7F004F54 24420010 */ addiu $v0, $v0, 0x10 -/* 039AC8 7F004F58 AC40FFF4 */ sw $zero, -0xc($v0) -/* 039ACC 7F004F5C AC40FFF8 */ sw $zero, -8($v0) -/* 039AD0 7F004F60 AC40FFFC */ sw $zero, -4($v0) -/* 039AD4 7F004F64 1443FFFB */ bne $v0, $v1, .L7F004F54 -/* 039AD8 7F004F68 AC40FFF0 */ sw $zero, -0x10($v0) -/* 039ADC 7F004F6C 3C018007 */ lui $at, %hi(ptr_last_tag_entry_type16) # $at, 0x8007 -/* 039AE0 7F004F70 AC205DC0 */ sw $zero, %lo(ptr_last_tag_entry_type16)($at) -/* 039AE4 7F004F74 3C018007 */ lui $at, %hi(ptr_last_briefing_setup_entry_type23) # $at, 0x8007 -/* 039AE8 7F004F78 AC205DC4 */ sw $zero, %lo(ptr_last_briefing_setup_entry_type23)($at) -/* 039AEC 7F004F7C 3C018007 */ lui $at, %hi(ptr_last_enter_room_subobject_entry_type20) # $at, 0x8007 -/* 039AF0 7F004F80 AC205DC8 */ sw $zero, %lo(ptr_last_enter_room_subobject_entry_type20)($at) -/* 039AF4 7F004F84 8FBF0014 */ lw $ra, 0x14($sp) -/* 039AF8 7F004F88 3C018007 */ lui $at, %hi(ptr_last_deposit_in_room_subobject_entry_type21) # $at, 0x8007 -/* 039AFC 7F004F8C AC205DCC */ sw $zero, %lo(ptr_last_deposit_in_room_subobject_entry_type21)($at) -/* 039B00 7F004F90 3C018007 */ lui $at, %hi(ptr_last_photo_obj_in_room_subobject_entry_type1E) # $at, 0x8007 -/* 039B04 7F004F94 AC205DD0 */ sw $zero, %lo(ptr_last_photo_obj_in_room_subobject_entry_type1E)($at) -/* 039B08 7F004F98 03E00008 */ jr $ra -/* 039B0C 7F004F9C 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif - -#ifdef VERSION_EU -GLOBAL_ASM( -.text -glabel something_with_stage_objectives -/* 039A40 7F004ED0 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 039A44 7F004ED4 AFBF0014 */ sw $ra, 0x14($sp) -/* 039A48 7F004ED8 0C001A57 */ jal bossGetStageNum -/* 039A4C 7F004EDC 00000000 */ nop -/* 039A50 7F004EE0 2401005A */ li $at, 90 -/* 039A54 7F004EE4 10410011 */ beq $v0, $at, .L7F004F2C -/* 039A58 7F004EE8 240EFFFF */ li $t6, -1 -/* 039A5C 7F004EEC 3C018003 */ lui $at, %hi(objective_count) # $at, 0x8003 -/* 039A60 7F004EF0 AC2E2330 */ sw $t6, %lo(objective_count)($at) -/* 039A64 7F004EF4 3C018007 */ lui $at, %hi(dword_CODE_bss_80075D58) # $at, 0x8007 -/* 039A68 7F004EF8 AC205D98 */ sw $zero, %lo(dword_CODE_bss_80075D58)($at) -/* 039A6C 7F004EFC 3C018007 */ lui $at, %hi(dword_CODE_bss_80075D58+4) # $at, 0x8007 -/* 039A70 7F004F00 3C028007 */ lui $v0, %hi(dword_CODE_bss_80075D58+8) # $v0, 0x8007 -/* 039A74 7F004F04 3C038007 */ lui $v1, %hi(ptr_last_tag_entry_type16) # $v1, 0x8007 -/* 039A78 7F004F08 24635DC0 */ addiu $v1, %lo(ptr_last_tag_entry_type16) # addiu $v1, $v1, 0x5dc0 -/* 039A7C 7F004F0C 24425DA0 */ addiu $v0, %lo(dword_CODE_bss_80075D58+8) # addiu $v0, $v0, 0x5da0 -/* 039A80 7F004F10 AC205D9C */ sw $zero, %lo(dword_CODE_bss_80075D58+4)($at) -.L7F004F14: -/* 039A84 7F004F14 24420010 */ addiu $v0, $v0, 0x10 -/* 039A88 7F004F18 AC40FFF4 */ sw $zero, -0xc($v0) -/* 039A8C 7F004F1C AC40FFF8 */ sw $zero, -8($v0) -/* 039A90 7F004F20 AC40FFFC */ sw $zero, -4($v0) -/* 039A94 7F004F24 1443FFFB */ bne $v0, $v1, .L7F004F14 -/* 039A98 7F004F28 AC40FFF0 */ sw $zero, -0x10($v0) -.L7F004F2C: -/* 039A9C 7F004F2C 3C018003 */ lui $at, %hi(objective_count+4) # $at, 0x8003 -/* 039AA0 7F004F30 AC202334 */ sw $zero, %lo(objective_count+4)($at) -/* 039AA4 7F004F34 3C018007 */ lui $at, %hi(objective_ptrs) # $at, 0x8007 -/* 039AA8 7F004F38 AC205D70 */ sw $zero, %lo(objective_ptrs)($at) -/* 039AAC 7F004F3C 3C018007 */ lui $at, %hi(objective_ptrs+4) # $at, 0x8007 -/* 039AB0 7F004F40 3C028007 */ lui $v0, %hi(objective_ptrs+8) # $v0, 0x8007 -/* 039AB4 7F004F44 3C038007 */ lui $v1, %hi(dword_CODE_bss_80075D58) # $v1, 0x8007 -/* 039AB8 7F004F48 24635D98 */ addiu $v1, %lo(dword_CODE_bss_80075D58) # addiu $v1, $v1, 0x5d98 -/* 039ABC 7F004F4C 24425D78 */ addiu $v0, %lo(objective_ptrs+8) # addiu $v0, $v0, 0x5d78 -/* 039AC0 7F004F50 AC205D74 */ sw $zero, %lo(objective_ptrs+4)($at) -.L7F004F54: -/* 039AC4 7F004F54 24420010 */ addiu $v0, $v0, 0x10 -/* 039AC8 7F004F58 AC40FFF4 */ sw $zero, -0xc($v0) -/* 039ACC 7F004F5C AC40FFF8 */ sw $zero, -8($v0) -/* 039AD0 7F004F60 AC40FFFC */ sw $zero, -4($v0) -/* 039AD4 7F004F64 1443FFFB */ bne $v0, $v1, .L7F004F54 -/* 039AD8 7F004F68 AC40FFF0 */ sw $zero, -0x10($v0) -/* 039ADC 7F004F6C 3C018007 */ lui $at, %hi(ptr_last_tag_entry_type16) # $at, 0x8007 -/* 039AE0 7F004F70 AC205DC0 */ sw $zero, %lo(ptr_last_tag_entry_type16)($at) -/* 039AE4 7F004F74 3C018007 */ lui $at, %hi(ptr_last_briefing_setup_entry_type23) # $at, 0x8007 -/* 039AE8 7F004F78 AC205DC4 */ sw $zero, %lo(ptr_last_briefing_setup_entry_type23)($at) -/* 039AEC 7F004F7C 3C018007 */ lui $at, %hi(ptr_last_enter_room_subobject_entry_type20) # $at, 0x8007 -/* 039AF0 7F004F80 AC205DC8 */ sw $zero, %lo(ptr_last_enter_room_subobject_entry_type20)($at) -/* 039AF4 7F004F84 8FBF0014 */ lw $ra, 0x14($sp) -/* 039AF8 7F004F88 3C018007 */ lui $at, %hi(ptr_last_deposit_in_room_subobject_entry_type21) # $at, 0x8007 -/* 039AFC 7F004F8C AC205DCC */ sw $zero, %lo(ptr_last_deposit_in_room_subobject_entry_type21)($at) -/* 039B00 7F004F90 3C018007 */ lui $at, %hi(ptr_last_photo_obj_in_room_subobject_entry_type1E) # $at, 0x8007 -/* 039B04 7F004F94 AC205DD0 */ sw $zero, %lo(ptr_last_photo_obj_in_room_subobject_entry_type1E)($at) -/* 039B08 7F004F98 03E00008 */ jr $ra -/* 039B0C 7F004F9C 27BD0018 */ addiu $sp, $sp, 0x18 -) -#endif - -#endif - - -#ifdef NONMATCHING -void *set_parent_cur_tag_entry(void *arg0) { - // Node 0 - arg0->unk8 = (void *) ptr_last_tag_entry_type16; +void set_parent_cur_tag_entry(struct TagObjectRecord *arg0) +{ + arg0->NextTag = ptr_last_tag_entry_type16; ptr_last_tag_entry_type16 = arg0; - return; - // (possible return value: &ptr_last_tag_entry_type16) } -#else -GLOBAL_ASM( -.text -glabel set_parent_cur_tag_entry -/* 039AB8 7F004F88 3C028007 */ lui $v0, %hi(ptr_last_tag_entry_type16) -/* 039ABC 7F004F8C 24425D80 */ addiu $v0, %lo(ptr_last_tag_entry_type16) # addiu $v0, $v0, 0x5d80 -/* 039AC0 7F004F90 8C4E0000 */ lw $t6, ($v0) -/* 039AC4 7F004F94 AC8E0008 */ sw $t6, 8($a0) -/* 039AC8 7F004F98 03E00008 */ jr $ra -/* 039ACC 7F004F9C AC440000 */ sw $a0, ($v0) -) -#endif - - -#ifdef NONMATCHING -void *setup_briefing_text_entry_parent(void *arg0) { - // Node 0 - arg0->unkC = (void *) ptr_last_briefing_setup_entry_type23; +void setup_briefing_text_entry_parent(struct setup_objective_text *arg0) +{ + arg0->next = ptr_last_briefing_setup_entry_type23; ptr_last_briefing_setup_entry_type23 = arg0; - return; - // (possible return value: &ptr_last_briefing_setup_entry_type23) } -#else -GLOBAL_ASM( -.text -glabel setup_briefing_text_entry_parent -/* 039AD0 7F004FA0 3C028007 */ lui $v0, %hi(ptr_last_briefing_setup_entry_type23) -/* 039AD4 7F004FA4 24425D84 */ addiu $v0, %lo(ptr_last_briefing_setup_entry_type23) # addiu $v0, $v0, 0x5d84 -/* 039AD8 7F004FA8 8C4E0000 */ lw $t6, ($v0) -/* 039ADC 7F004FAC AC8E000C */ sw $t6, 0xc($a0) -/* 039AE0 7F004FB0 03E00008 */ jr $ra -/* 039AE4 7F004FB4 AC440000 */ sw $a0, ($v0) -) -#endif - +/* +* Address: 0x7f004fb8 +*/ void add_ptr_to_objective(struct objective_entry* objective) { objective_ptrs[objective->menu] = objective; @@ -302,73 +69,22 @@ void add_ptr_to_objective(struct objective_entry* objective) } } - -#ifdef NONMATCHING -void *set_parent_cur_obj_enter_room(void *arg0) { - // Node 0 - arg0->unkC = (void *) ptr_last_enter_room_subobject_entry_type20; +void set_parent_cur_obj_enter_room(struct criteria_roomentered *arg0) +{ + arg0->next = ptr_last_enter_room_subobject_entry_type20; ptr_last_enter_room_subobject_entry_type20 = arg0; - return; - // (possible return value: &ptr_last_enter_room_subobject_entry_type20) } -#else -GLOBAL_ASM( -.text -glabel set_parent_cur_obj_enter_room -/* 039B24 7F004FF4 3C028007 */ lui $v0, %hi(ptr_last_enter_room_subobject_entry_type20) -/* 039B28 7F004FF8 24425D88 */ addiu $v0, %lo(ptr_last_enter_room_subobject_entry_type20) # addiu $v0, $v0, 0x5d88 -/* 039B2C 7F004FFC 8C4E0000 */ lw $t6, ($v0) -/* 039B30 7F005000 AC8E000C */ sw $t6, 0xc($a0) -/* 039B34 7F005004 03E00008 */ jr $ra -/* 039B38 7F005008 AC440000 */ sw $a0, ($v0) -) -#endif - - -#ifdef NONMATCHING -void *set_parent_cur_obj_deposited_in_room(void *arg0) { - // Node 0 - arg0->unk10 = (void *) ptr_last_deposit_in_room_subobject_entry_type21; +void set_parent_cur_obj_deposited_in_room(struct criteria_deposit *arg0) +{ + arg0->next = ptr_last_deposit_in_room_subobject_entry_type21; ptr_last_deposit_in_room_subobject_entry_type21 = arg0; - return; - // (possible return value: &ptr_last_deposit_in_room_subobject_entry_type21) } -#else -GLOBAL_ASM( -.text -glabel set_parent_cur_obj_deposited_in_room -/* 039B3C 7F00500C 3C028007 */ lui $v0, %hi(ptr_last_deposit_in_room_subobject_entry_type21) -/* 039B40 7F005010 24425D8C */ addiu $v0, %lo(ptr_last_deposit_in_room_subobject_entry_type21) # addiu $v0, $v0, 0x5d8c -/* 039B44 7F005014 8C4E0000 */ lw $t6, ($v0) -/* 039B48 7F005018 AC8E0010 */ sw $t6, 0x10($a0) -/* 039B4C 7F00501C 03E00008 */ jr $ra -/* 039B50 7F005020 AC440000 */ sw $a0, ($v0) -) -#endif - -#ifdef NONMATCHING -void *set_parent_cur_obj_photograph(void *arg0) { - // Node 0 - arg0->unkC = (void *) ptr_last_photo_obj_in_room_subobject_entry_type1E; +void set_parent_cur_obj_photograph(struct criteria_picture *arg0) +{ + arg0->next = ptr_last_photo_obj_in_room_subobject_entry_type1E; ptr_last_photo_obj_in_room_subobject_entry_type1E = arg0; - return; - // (possible return value: &ptr_last_photo_obj_in_room_subobject_entry_type1E) } -#else -GLOBAL_ASM( -.text -glabel set_parent_cur_obj_photograph -/* 039B54 7F005024 3C028007 */ lui $v0, %hi(ptr_last_photo_obj_in_room_subobject_entry_type1E) -/* 039B58 7F005028 24425D90 */ addiu $v0, %lo(ptr_last_photo_obj_in_room_subobject_entry_type1E) # addiu $v0, $v0, 0x5d90 -/* 039B5C 7F00502C 8C4E0000 */ lw $t6, ($v0) -/* 039B60 7F005030 AC8E000C */ sw $t6, 0xc($a0) -/* 039B64 7F005034 03E00008 */ jr $ra -/* 039B68 7F005038 AC440000 */ sw $a0, ($v0) -) -#endif - - diff --git a/src/game/objective.h b/src/game/objective.h index 873e113..576616b 100644 --- a/src/game/objective.h +++ b/src/game/objective.h @@ -4,4 +4,10 @@ void something_with_stage_objectives(void); +void set_parent_cur_tag_entry(struct TagObjectRecord *arg0); +void setup_briefing_text_entry_parent(struct setup_objective_text *arg0); +void set_parent_cur_obj_enter_room(struct criteria_roomentered *arg0); +void set_parent_cur_obj_deposited_in_room(struct criteria_deposit *arg0); +void set_parent_cur_obj_photograph(struct criteria_picture *arg0); + #endif diff --git a/src/game/objective_status.c b/src/game/objective_status.c index 58334ab..fe90e6d 100644 --- a/src/game/objective_status.c +++ b/src/game/objective_status.c @@ -12,7 +12,7 @@ // bss //CODE.bss:80075D30 struct objective_entry * objective_ptrs[OBJECTIVES_MAX]; -OBJECTIVESTATUS dword_CODE_bss_80075D58[OBJECTIVES_MAX]; //This is an array of 10 OBJECTIVESTATUS, +OBJECTIVESTATUS objectiveStatuses[OBJECTIVES_MAX]; //This is an array of 10 OBJECTIVESTATUS, //CODE.bss:80075D80 u32 *ptr_last_tag_entry_type16; @@ -23,7 +23,7 @@ struct criteria_roomentered *ptr_last_enter_room_subobject_entry_type20; //CODE.bss:80075D8C struct criteria_deposit *ptr_last_deposit_in_room_subobject_entry_type21; //CODE.bss:80075D90 -u32 *ptr_last_photo_obj_in_room_subobject_entry_type1E; +struct criteria_picture *ptr_last_photo_obj_in_room_subobject_entry_type1E; // data s32 objective_count = 0xFFFFFFFF; @@ -75,6 +75,9 @@ ObjectRecord *objFindByTagId(s32 TagID) //#MATCH +/* +* Address: 0x7f057104 +*/ u8 * get_ptr_text_for_watch_breifing_page(WATCH_BRIEFING_PAGE page) { struct watchMenuObjectiveText * curentry; @@ -95,15 +98,15 @@ u8 * get_ptr_text_for_watch_breifing_page(WATCH_BRIEFING_PAGE page) { if (page == 0) { - textptr = langGet(TEXT(LMISC, MISC_STR_29)); //"E R R O R\n" + textptr = langGet(getStringID(LMISC, MISC_STR_29_ERROR_LF)); //"E R R O R\n" } else if (page == 1) { - textptr = langGet(TEXT(LMISC, MISC_STR_2A)); //"no briefing for this mission\n" + textptr = langGet(getStringID(LMISC, MISC_STR_2A_NOBRIEFING_LF)); //"no briefing for this mission\n" } else { - textptr = langGet(TEXT(LMISC, MISC_STR_2B)); //"\n" + textptr = langGet(getStringID(LMISC, MISC_STR_2B_LF)); //"\n" } } @@ -155,7 +158,7 @@ s32 get_difficulty_for_objective(s32 objectiveIndex) /* * Return Status of objective. * Note: This matches but may not in future depending on the result of var - * "OBJECTIVESTATUS *dword_CODE_bss_80075D58". + * "OBJECTIVESTATUS *objectiveStatuses". * https://decomp.me/scratch/MF31e */ OBJECTIVESTATUS get_status_of_objective(s32 objectiveNum) //#MATCH @@ -168,7 +171,7 @@ OBJECTIVESTATUS get_status_of_objective(s32 objectiveNum) //#MATCH { if (!&objective_ptrs[objectiveNum]->id) { - status = dword_CODE_bss_80075D58[objectiveNum]; + status = objectiveStatuses[objectiveNum]; } else { @@ -347,20 +350,28 @@ void display_objective_status_text_on_status_change(void) { for (i = 0; i <= objective_count; i++) { status = get_status_of_objective(i); - if (dword_CODE_bss_80075D58[i] != status) { - dword_CODE_bss_80075D58[i] = status; + if (objectiveStatuses[i] != status) { + objectiveStatuses[i] = status; if (get_difficulty_for_objective(i) <= lvlGetSelectedDifficulty()) { - if (j_text_trigger != 0) { - sprintf(&buffer, "%s \x80%c ", langGet(0xB02C), availableindex + 0x1A); - } else { - sprintf(&buffer, "%s %c: ", langGet(0xB02C), availableindex + 0x61); + if (j_text_trigger != 0) + { + sprintf(&buffer, "%s \x80%c ", langGet(getStringID(LMISC, MISC_STR_2C_OBJECTIVE)), availableindex + 0x1A); } - if (status == OBJECTIVESTATUS_COMPLETE) { - strcat(&buffer, langGet(0xB02D)); - } else if (status == OBJECTIVESTATUS_INCOMPLETE) { - strcat(&buffer, langGet(0xB02E)); - } else if (status == OBJECTIVESTATUS_FAILED) { - strcat(&buffer, langGet(0xB02F)); + else + { + sprintf(&buffer, "%s %c: ", langGet(getStringID(LMISC, MISC_STR_2C_OBJECTIVE)), availableindex + 0x61); + } + if (status == OBJECTIVESTATUS_COMPLETE) + { + strcat(&buffer, langGet(getStringID(LMISC, MISC_STR_2D_COMPLETED_LF))); + } + else if (status == OBJECTIVESTATUS_INCOMPLETE) + { + strcat(&buffer, langGet(getStringID(LMISC, MISC_STR_2E_INCOMPLETE_LF))); + } + else if (status == OBJECTIVESTATUS_FAILED) + { + strcat(&buffer, langGet(getStringID(LMISC, MISC_STR_2F_FAILED_LF))); } #ifdef VERSION_US hudmsgBottomShow(&buffer); @@ -454,159 +465,60 @@ void objectivestatusCheckDeposit(s32 weaponnum, s32 roomid) +/** + * NTSC address 0x7F057898. +*/ +void objectiveTakePictureHandler(void) +{ + ObjectRecord *target_object; + PropRecord *target_prop; + struct coord3d sp84; + struct coord2d sp7C; + struct coord2d sp74; + struct rectbbox sp64; + s32 padding2[2]; + struct criteria_picture *criteria; -#ifdef NONMATCHING -void objectiveTakePictureHandler(void) { - + criteria = ptr_last_photo_obj_in_room_subobject_entry_type1E; + for (; criteria != NULL; criteria = criteria->next) + { + if (criteria->flag == 0) + { + target_object = objFindByTagId(criteria->tag_id); + + if (target_object != NULL) + { + target_prop = target_object->prop; + + if ((target_prop != NULL) + && (target_prop->flags & PROPFLAG_ONSCREEN) + && (target_prop->zDepth >= 0.0f) // draw/render distance + && (objIsHealthy(target_object) != 0) + && (sub_GAME_7F050D30(target_object->prop, &sp84, &sp7C, &sp74) != 0)) + { + sub_GAME_7F03F948(&sp84, &sp7C, &sp74, &sp64.right, &sp64.left); + + if (getPlayer_c_screenleft() < sp64.right) + { + if ((sp64.right < (getPlayer_c_screenleft() + getPlayer_c_screenwidth())) && (getPlayer_c_screenleft() < sp64.left)) + { + if ((sp64.left < (getPlayer_c_screenleft() + getPlayer_c_screenwidth())) && (getPlayer_c_screentop() < sp64.down)) + { + if ((sp64.down < (getPlayer_c_screentop() + getPlayer_c_screenheight())) && (getPlayer_c_screentop() < sp64.up)) + { + if (sp64.up < (getPlayer_c_screentop() + getPlayer_c_screenheight())) + { + criteria->flag = 1; + } + } + } + } + } + } + } + } + } } -#else -GLOBAL_ASM( -.text -glabel objectiveTakePictureHandler -/* 08C3C8 7F057898 27BDFF68 */ addiu $sp, $sp, -0x98 -/* 08C3CC 7F05789C AFB10034 */ sw $s1, 0x34($sp) -/* 08C3D0 7F0578A0 3C118007 */ lui $s1, %hi(ptr_last_photo_obj_in_room_subobject_entry_type1E) -/* 08C3D4 7F0578A4 8E315D90 */ lw $s1, %lo(ptr_last_photo_obj_in_room_subobject_entry_type1E)($s1) -/* 08C3D8 7F0578A8 AFBF004C */ sw $ra, 0x4c($sp) -/* 08C3DC 7F0578AC AFB60048 */ sw $s6, 0x48($sp) -/* 08C3E0 7F0578B0 AFB50044 */ sw $s5, 0x44($sp) -/* 08C3E4 7F0578B4 AFB40040 */ sw $s4, 0x40($sp) -/* 08C3E8 7F0578B8 AFB3003C */ sw $s3, 0x3c($sp) -/* 08C3EC 7F0578BC AFB20038 */ sw $s2, 0x38($sp) -/* 08C3F0 7F0578C0 AFB00030 */ sw $s0, 0x30($sp) -/* 08C3F4 7F0578C4 F7B60028 */ sdc1 $f22, 0x28($sp) -/* 08C3F8 7F0578C8 12200071 */ beqz $s1, .L7F057A90 -/* 08C3FC 7F0578CC F7B40020 */ sdc1 $f20, 0x20($sp) -/* 08C400 7F0578D0 4480B000 */ mtc1 $zero, $f22 -/* 08C404 7F0578D4 24160001 */ li $s6, 1 -/* 08C408 7F0578D8 27B50064 */ addiu $s5, $sp, 0x64 -/* 08C40C 7F0578DC 27B40074 */ addiu $s4, $sp, 0x74 -/* 08C410 7F0578E0 27B3007C */ addiu $s3, $sp, 0x7c -/* 08C414 7F0578E4 27B20084 */ addiu $s2, $sp, 0x84 -/* 08C418 7F0578E8 8E2E0008 */ lw $t6, 8($s1) -.L7F0578EC: -/* 08C41C 7F0578EC 55C00066 */ bnezl $t6, .L7F057A88 -/* 08C420 7F0578F0 8E31000C */ lw $s1, 0xc($s1) -/* 08C424 7F0578F4 0FC15C30 */ jal objFindByTagId -/* 08C428 7F0578F8 8E240004 */ lw $a0, 4($s1) -/* 08C42C 7F0578FC 10400061 */ beqz $v0, .L7F057A84 -/* 08C430 7F057900 00408025 */ move $s0, $v0 -/* 08C434 7F057904 8C430010 */ lw $v1, 0x10($v0) -/* 08C438 7F057908 5060005F */ beql $v1, $zero, .L7F057A88 -/* 08C43C 7F05790C 8E31000C */ lw $s1, 0xc($s1) -/* 08C440 7F057910 906F0001 */ lbu $t7, 1($v1) -/* 08C444 7F057914 31F80002 */ andi $t8, $t7, 2 -/* 08C448 7F057918 5300005B */ beql $t8, $zero, .L7F057A88 -/* 08C44C 7F05791C 8E31000C */ lw $s1, 0xc($s1) -/* 08C450 7F057920 C4640018 */ lwc1 $f4, 0x18($v1) -/* 08C454 7F057924 4604B03E */ c.le.s $f22, $f4 -/* 08C458 7F057928 00000000 */ nop -/* 08C45C 7F05792C 45020056 */ bc1fl .L7F057A88 -/* 08C460 7F057930 8E31000C */ lw $s1, 0xc($s1) -/* 08C464 7F057934 0FC13BCD */ jal objIsHealthy -/* 08C468 7F057938 00402025 */ move $a0, $v0 -/* 08C46C 7F05793C 10400051 */ beqz $v0, .L7F057A84 -/* 08C470 7F057940 02402825 */ move $a1, $s2 -/* 08C474 7F057944 8E040010 */ lw $a0, 0x10($s0) -/* 08C478 7F057948 02603025 */ move $a2, $s3 -/* 08C47C 7F05794C 0FC1434C */ jal sub_GAME_7F050D30 -/* 08C480 7F057950 02803825 */ move $a3, $s4 -/* 08C484 7F057954 1040004B */ beqz $v0, .L7F057A84 -/* 08C488 7F057958 02402025 */ move $a0, $s2 -/* 08C48C 7F05795C 02602825 */ move $a1, $s3 -/* 08C490 7F057960 02803025 */ move $a2, $s4 -/* 08C494 7F057964 27A7006C */ addiu $a3, $sp, 0x6c -/* 08C498 7F057968 0FC0FE52 */ jal sub_GAME_7F03F948 -/* 08C49C 7F05796C AFB50010 */ sw $s5, 0x10($sp) -/* 08C4A0 7F057970 0FC1E131 */ jal getPlayer_c_screenleft -/* 08C4A4 7F057974 00000000 */ nop -/* 08C4A8 7F057978 C7A6006C */ lwc1 $f6, 0x6c($sp) -/* 08C4AC 7F05797C 4606003C */ c.lt.s $f0, $f6 -/* 08C4B0 7F057980 00000000 */ nop -/* 08C4B4 7F057984 45020040 */ bc1fl .L7F057A88 -/* 08C4B8 7F057988 8E31000C */ lw $s1, 0xc($s1) -/* 08C4BC 7F05798C 0FC1E131 */ jal getPlayer_c_screenleft -/* 08C4C0 7F057990 00000000 */ nop -/* 08C4C4 7F057994 0FC1E129 */ jal getPlayer_c_screenwidth -/* 08C4C8 7F057998 46000506 */ mov.s $f20, $f0 -/* 08C4CC 7F05799C 46140280 */ add.s $f10, $f0, $f20 -/* 08C4D0 7F0579A0 C7A8006C */ lwc1 $f8, 0x6c($sp) -/* 08C4D4 7F0579A4 460A403C */ c.lt.s $f8, $f10 -/* 08C4D8 7F0579A8 00000000 */ nop -/* 08C4DC 7F0579AC 45020036 */ bc1fl .L7F057A88 -/* 08C4E0 7F0579B0 8E31000C */ lw $s1, 0xc($s1) -/* 08C4E4 7F0579B4 0FC1E131 */ jal getPlayer_c_screenleft -/* 08C4E8 7F0579B8 00000000 */ nop -/* 08C4EC 7F0579BC C7B00064 */ lwc1 $f16, 0x64($sp) -/* 08C4F0 7F0579C0 4610003C */ c.lt.s $f0, $f16 -/* 08C4F4 7F0579C4 00000000 */ nop -/* 08C4F8 7F0579C8 4502002F */ bc1fl .L7F057A88 -/* 08C4FC 7F0579CC 8E31000C */ lw $s1, 0xc($s1) -/* 08C500 7F0579D0 0FC1E131 */ jal getPlayer_c_screenleft -/* 08C504 7F0579D4 00000000 */ nop -/* 08C508 7F0579D8 0FC1E129 */ jal getPlayer_c_screenwidth -/* 08C50C 7F0579DC 46000506 */ mov.s $f20, $f0 -/* 08C510 7F0579E0 46140100 */ add.s $f4, $f0, $f20 -/* 08C514 7F0579E4 C7B20064 */ lwc1 $f18, 0x64($sp) -/* 08C518 7F0579E8 4604903C */ c.lt.s $f18, $f4 -/* 08C51C 7F0579EC 00000000 */ nop -/* 08C520 7F0579F0 45020025 */ bc1fl .L7F057A88 -/* 08C524 7F0579F4 8E31000C */ lw $s1, 0xc($s1) -/* 08C528 7F0579F8 0FC1E135 */ jal getPlayer_c_screentop -/* 08C52C 7F0579FC 00000000 */ nop -/* 08C530 7F057A00 C7A60070 */ lwc1 $f6, 0x70($sp) -/* 08C534 7F057A04 4606003C */ c.lt.s $f0, $f6 -/* 08C538 7F057A08 00000000 */ nop -/* 08C53C 7F057A0C 4502001E */ bc1fl .L7F057A88 -/* 08C540 7F057A10 8E31000C */ lw $s1, 0xc($s1) -/* 08C544 7F057A14 0FC1E135 */ jal getPlayer_c_screentop -/* 08C548 7F057A18 00000000 */ nop -/* 08C54C 7F057A1C 0FC1E12D */ jal getPlayer_c_screenheight -/* 08C550 7F057A20 46000506 */ mov.s $f20, $f0 -/* 08C554 7F057A24 46140280 */ add.s $f10, $f0, $f20 -/* 08C558 7F057A28 C7A80070 */ lwc1 $f8, 0x70($sp) -/* 08C55C 7F057A2C 460A403C */ c.lt.s $f8, $f10 -/* 08C560 7F057A30 00000000 */ nop -/* 08C564 7F057A34 45020014 */ bc1fl .L7F057A88 -/* 08C568 7F057A38 8E31000C */ lw $s1, 0xc($s1) -/* 08C56C 7F057A3C 0FC1E135 */ jal getPlayer_c_screentop -/* 08C570 7F057A40 00000000 */ nop -/* 08C574 7F057A44 C7B00068 */ lwc1 $f16, 0x68($sp) -/* 08C578 7F057A48 4610003C */ c.lt.s $f0, $f16 -/* 08C57C 7F057A4C 00000000 */ nop -/* 08C580 7F057A50 4502000D */ bc1fl .L7F057A88 -/* 08C584 7F057A54 8E31000C */ lw $s1, 0xc($s1) -/* 08C588 7F057A58 0FC1E135 */ jal getPlayer_c_screentop -/* 08C58C 7F057A5C 00000000 */ nop -/* 08C590 7F057A60 0FC1E12D */ jal getPlayer_c_screenheight -/* 08C594 7F057A64 46000506 */ mov.s $f20, $f0 -/* 08C598 7F057A68 46140100 */ add.s $f4, $f0, $f20 -/* 08C59C 7F057A6C C7B20068 */ lwc1 $f18, 0x68($sp) -/* 08C5A0 7F057A70 4604903C */ c.lt.s $f18, $f4 -/* 08C5A4 7F057A74 00000000 */ nop -/* 08C5A8 7F057A78 45020003 */ bc1fl .L7F057A88 -/* 08C5AC 7F057A7C 8E31000C */ lw $s1, 0xc($s1) -/* 08C5B0 7F057A80 AE360008 */ sw $s6, 8($s1) -.L7F057A84: -/* 08C5B4 7F057A84 8E31000C */ lw $s1, 0xc($s1) -.L7F057A88: -/* 08C5B8 7F057A88 5620FF98 */ bnezl $s1, .L7F0578EC -/* 08C5BC 7F057A8C 8E2E0008 */ lw $t6, 8($s1) -.L7F057A90: -/* 08C5C0 7F057A90 8FBF004C */ lw $ra, 0x4c($sp) -/* 08C5C4 7F057A94 D7B40020 */ ldc1 $f20, 0x20($sp) -/* 08C5C8 7F057A98 D7B60028 */ ldc1 $f22, 0x28($sp) -/* 08C5CC 7F057A9C 8FB00030 */ lw $s0, 0x30($sp) -/* 08C5D0 7F057AA0 8FB10034 */ lw $s1, 0x34($sp) -/* 08C5D4 7F057AA4 8FB20038 */ lw $s2, 0x38($sp) -/* 08C5D8 7F057AA8 8FB3003C */ lw $s3, 0x3c($sp) -/* 08C5DC 7F057AAC 8FB40040 */ lw $s4, 0x40($sp) -/* 08C5E0 7F057AB0 8FB50044 */ lw $s5, 0x44($sp) -/* 08C5E4 7F057AB4 8FB60048 */ lw $s6, 0x48($sp) -/* 08C5E8 7F057AB8 03E00008 */ jr $ra -/* 08C5EC 7F057ABC 27BD0098 */ addiu $sp, $sp, 0x98 -) -#endif //filebreak diff --git a/src/game/objective_status.h b/src/game/objective_status.h index 40992f1..aa87a04 100644 --- a/src/game/objective_status.h +++ b/src/game/objective_status.h @@ -3,11 +3,19 @@ #include #include -extern struct objective_entry * objective_ptrs[]; +extern struct objective_entry * objective_ptrs[OBJECTIVES_MAX]; +extern OBJECTIVESTATUS objectiveStatuses[OBJECTIVES_MAX]; //This is an array of 10 OBJECTIVESTATUS, + +extern u32 *ptr_last_tag_entry_type16; +extern struct watchMenuObjectiveText *ptr_last_briefing_setup_entry_type23; +extern struct criteria_roomentered *ptr_last_enter_room_subobject_entry_type20; +extern struct criteria_deposit *ptr_last_deposit_in_room_subobject_entry_type21; +extern struct criteria_picture *ptr_last_photo_obj_in_room_subobject_entry_type1E; + extern s32 objective_count; extern s32 objective_count_related; -void objectiveTakePictureHandler(); +void objectiveTakePictureHandler(void); bool objectiveIsAllComplete(void); TagObjectRecord *sub_GAME_7F057080(s32 TagID); s32 objectiveGetCount(void); diff --git a/src/game/objective_status2.c b/src/game/objective_status2.c index 57c9aba..1857fad 100644 --- a/src/game/objective_status2.c +++ b/src/game/objective_status2.c @@ -70,4 +70,4 @@ void sub_GAME_7F057E58(f32* arg0, f32* arg1, struct Mtxf* arg2, struct Mtxf* arg { sub_GAME_7F057D88(arg0, arg1, (f32) arg4); sub_GAME_7F057DF8(arg2, arg3, arg4); -} \ No newline at end of file +} diff --git a/src/game/othermodemicrocode.c b/src/game/othermodemicrocode.c index f53b720..db72f08 100644 --- a/src/game/othermodemicrocode.c +++ b/src/game/othermodemicrocode.c @@ -1,36 +1,46 @@ #include - - - +#include +#include "unk_0CC4C0.h" +#include "image.h" +#include "bondtypes.h" +#include "othermodemicrocode.h" +#include "gbi_extension.h" s32 is_less_than_certain_power_of_2(int number) - { - if (number < 2) { - return 0; - } - if (number < 3) { - return 1; - } - if (number < 5) { - return 2; - } - if (number < 9) { - return 3; - } - if (number < 0x11) { - return 4; - } - if (number < 0x21) { - return 5; - } - if (number < 0x41) { - return 6; - } - if (number < 0x81) { - return 7; - } - return 8; + if (number < 2) { + return 0; + } + + if (number < 3) { + return 1; + } + + if (number < 5) { + return 2; + } + + if (number < 9) { + return 3; + } + + if (number < 0x11) { + return 4; + } + + if (number < 0x21) { + return 5; + } + + if (number < 0x41) { + return 6; + } + + if (number < 0x81) { + return 7; + } + + return 8; } @@ -301,1386 +311,383 @@ void texSetRenderMode(Gfx **gdlptr, s32 arg1, s32 numcycles, s32 arg3) } -#ifdef NONMATCHING +/** + * Perfect Dark texSelect. + * NTSC address 0x7F076D68. +*/ +void texSelect(Gfx **gdlptr, struct sImageTableEntry *tconfig, u32 arg2, s32 arg3, u32 ulst) +{ + Gfx *gdl; + struct tex *tex; + s32 tile; -// First pass mips2c output (initial guess at variables, everything compiles). -// Display list commands are probably correct, but almost every single one has wrong arguments. -// https://decomp.me/scratch/Q6Ss8 28% -void likely_generate_DL_for_image_declaration(Gfx **arg0, sImageTableEntry *arg1, s32 arg2, s32 arg3, s32 arg4) -{ - Gfx *sp16C; - u32 sp144; - s32 sp140; - s32 sp13C; - s32 sp138; - s32 sp134; - s32 spD0; - s32 spCC; - s32 spCA; - s32 spC4; - s32 spC0; - s32 spBC; + gdl = *gdlptr; - struct tex *temp_s6; - - u8 var_s1; - u8 var_s2; - s32 var_s3; - u8 var_s4; - u8 var_s5; - s32 var_a2; - s32 var_v0; - s32 var_s0; - - sp16C = *arg0; - - if (arg1 == NULL) + if (tconfig == NULL) { - texSetRenderMode(&sp16C, arg2, 1, arg3); + texSetRenderMode(&gdl, arg2, 1, arg3); if (arg3 >= 2) { - gSPTexture(sp16C++, 0xffff, 0xffff, arg3, G_TX_RENDERTILE, G_ON); + gSPTextureL(gdl++, 0xffff, 0xffff, 0, arg3, G_TX_RENDERTILE, G_ON); } else { - gSPTexture(sp16C++, 0xffff, 0xffff, 0, G_TX_RENDERTILE, G_ON); + gSPTextureL(gdl++, 0xffff, 0xffff, 0, 0, G_TX_RENDERTILE, G_ON); } - gDPSetCombineMode(sp16C++, G_CC_SHADE, G_CC_SHADE); + gDPSetCombineMode(gdl++, G_CC_SHADE, G_CC_SHADE); } else { - var_s5 = arg1->width; - var_s4 = arg1->height; + s32 width; + s32 height; - if ((u32) arg1->index < 0xBB9U) + u8 format; + u8 depth; + s32 stack_padding; + s32 lutmode; + s32 depth2; + s32 lrs; + s32 sp138; + s32 line; + + u16* aa; + + tex = NULL; + + width = tconfig->width; + height = tconfig->height; + + if ((u32) tconfig->index < NUM_TEXTURES) { - texLoad((s32 *) arg1, NULL); + texLoad((s32 *)tconfig, NULL); } - temp_s6 = texFindInPool((s32) (arg1->index | 0x80000000) - 8, NULL); + aa = PHYS_TO_K0(tconfig->index); + tex = texFindInPool((aa)[-4], NULL); - if (arg1->level == 0) + if (tconfig->level == 0) { - if (temp_s6 != NULL) + if (tex != NULL) { - var_s1 = temp_s6->gbiformat; - var_s2 = temp_s6->depth; - sp144 = temp_s6->next; + format = tex->gbiformat; + depth = tex->depth; + lutmode = tex->lutmodeindex << G_MDSFT_TEXTLUT; } else { - var_s1 = arg1->format; - var_s2 = arg1->depth; + format = tconfig->format; + depth = tconfig->depth; } - switch (var_s2) + switch (depth) { - default: /* switch 1 */ - var_s3 = sp13C; + default: break; - case 3: /* switch 1 */ - sp140 = 3; - var_s3 = sub_GAME_7F076928((s32) var_s5, (s32) var_s4, 1) - 1; - sp138 = ceil1000((s32) var_s5); - sp134 = (s32) (var_s5 + 3) >> 2; + case G_IM_SIZ_32b: + depth2 = G_IM_SIZ_32b; + lrs = sub_GAME_7F076928(width, height, 1) - 1; + sp138 = ceil1000(width); + line = (s32) (width + 3) >> 2; break; - case 2: /* switch 1 */ - sp140 = 2; - var_s3 = sub_GAME_7F0768B8((s32) var_s5, (s32) var_s4, 1) - 1; - sp138 = ceil2000((s32) var_s5); - sp134 = (s32) (var_s5 + 3) >> 2; + case G_IM_SIZ_16b: + depth2 = G_IM_SIZ_16b; + lrs = sub_GAME_7F0768B8(width, height, 1) - 1; + sp138 = ceil2000(width); + line = (s32) (width + 3) >> 2; break; - case 1: /* switch 1 */ - sp140 = 2; - var_s3 = sub_GAME_7F076848((s32) var_s5, (s32) var_s4, 1) - 1; - sp138 = ceil4000((s32) var_s5); - sp134 = (s32) (var_s5 + 7) >> 3; + case G_IM_SIZ_8b: + depth2 = G_IM_SIZ_16b; + lrs = sub_GAME_7F076848(width, height, 1) - 1; + sp138 = ceil4000(width); + line = (s32) (width + 7) >> 3; break; - case 0: /* switch 1 */ - sp140 = 2; - var_s3 = sub_GAME_7F0767D8((s32) var_s5, (s32) var_s4, 1) - 1; - sp138 = ceil8000((s32) var_s5); - sp134 = (s32) (var_s5 + 0xF) >> 4; + case G_IM_SIZ_4b: + depth2 = G_IM_SIZ_16b; + lrs = sub_GAME_7F0767D8(width, height, 1) - 1; + sp138 = ceil8000(width); + line = (s32) (width + 0xF) >> 4; break; } - texSetRenderMode(&sp16C, arg2, 1, arg3); + texSetRenderMode(&gdl, arg2, 1, arg3); if (arg3 >= 2) { - gSPTexture(sp16C++, 0xffff, 0xffff, arg3, G_TX_RENDERTILE, G_ON); + gSPTextureL(gdl++, 0xffff, 0xffff, 0, arg3, G_TX_RENDERTILE, G_ON); } else { - gSPTexture(sp16C++, 0xffff, 0xffff, 0, G_TX_RENDERTILE, G_ON); + gSPTextureL(gdl++, 0xffff, 0xffff, 0, 0, G_TX_RENDERTILE, G_ON); } - gSPTexture(sp16C++, 0, 0, 2, G_TX_RENDERTILE, G_ON); + gDPSetTextureLOD(gdl++, G_TL_TILE); - // line 206 - switch (var_s1) + switch (format) { - case 0: - gDPSetCombineMode(sp16C++, G_CC_MODULATEIA, G_CC_MODULATEIA); + case G_IM_FMT_RGBA: + gDPSetCombineMode(gdl++, G_CC_MODULATEIA, G_CC_MODULATEIA); break; - case 3: - gDPSetCombineMode(sp16C++, G_CC_MODULATEIA, G_CC_MODULATEIA); + case G_IM_FMT_IA: + gDPSetCombineMode(gdl++, G_CC_MODULATEIA, G_CC_MODULATEIA); break; - case 4: - gDPSetCombineLERP(sp16C++, TEXEL0, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, SHADE, COMBINED, 0, COMBINED, 0, SHADE); + case G_IM_FMT_I: + gDPSetCombineMode(gdl++, G_CC_MODULATEI, G_CC_MODULATEI); break; - case 2: - switch (sp144) + case G_IM_FMT_CI: + switch (lutmode) { - case 0x8000: - gDPSetCombineMode(sp16C++, G_CC_MODULATEIA, G_CC_MODULATEIA); + case G_TT_RGBA16: + gDPSetCombineMode(gdl++, G_CC_MODULATEIA, G_CC_MODULATEIA); break; - case 0xc000: - gDPSetCombineMode(sp16C++, G_CC_MODULATEIA, G_CC_MODULATEIA); + case G_TT_IA16: + gDPSetCombineMode(gdl++, G_CC_MODULATEIA, G_CC_MODULATEIA); break; } break; } - // line 264 - // temp_v0_4->words.w0 = (var_s1 & 7) << 0x15 | 0xFD000000 | (sp140 & 3) << 0x13; - // temp_v0_4->words.w1 = arg1->index; - gDPSetTextureImage(sp16C++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 1, arg1->index); + gDPSetTextureImage(gdl++, format, depth2, 1, tconfig->index); - // temp_a1->words.w0 = (var_s1 & 7) << 0x15 | 0xF5000000 | (sp140 & 3) << 0x13; - // temp_a1->words.w1 = ((arg1->flagsT & 3) << 0x12) | 0x07000000U | ((arg1->flagsS & 3) << 8); - gDPSetTile(sp16C++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gdl++, format, depth2, 0, 0, G_TX_LOADTILE, 0, + tconfig->flagsT, G_TX_NOMASK, G_TX_NOLOD, + tconfig->flagsS, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(sp16C++); + gDPLoadSync(gdl++); - //if (var_s3 < 0x7FF) - //{ - // var_a3 = var_s3; - //} + gDPLoadBlock(gdl++, G_TX_LOADTILE, 0, 0, lrs, sp138); + + gDPPipeSync(gdl++); - // temp_t0->words.w0 = 0xF3000000; - // temp_t0->words.w1 = ((var_a3 & 0xFFF) << 0xC) | 0x07000000U | (sp138 & 0xFFF); - gDPLoadBlock(sp16C++, G_TX_LOADTILE, 0, 0, 0, 0); - - gDPPipeSync(sp16C++); - - if (var_s1 == 2) + if (format == G_IM_FMT_CI) { - gDPSetTile(sp16C++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0100, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(sp16C++); + u32 a3 = lrs + 1; + u32 t0 = (0x3ff - tex->unk0a) < a3 ? (0x3ff - tex->unk0a) : 0; - // temp_a0_2->words.w0 = ((temp_a2 & 0x3FF) << 0xE) | 0xF0000000 | temp_t6_3; - // temp_a0_2->words.w1 = (((temp_s6->unk0a + temp_a2) & 0x3FF) << 0xE) | 0x07000000U | temp_t6_3; - gDPLoadTLUTCmd(sp16C++, G_TX_LOADTILE, 0); - gDPPipeSync(sp16C++); + a3 -= t0; + + gDPSetTile(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0100, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadSync(gdl++); - // temp_t8_8->words.w0 = 0xBA000E02; - // temp_t8_8->words.w1 = sp144; - gDPSetTextureLUT(sp16C++, sp144); + gDPLoadTLUT07(gdl++, a3, t0, tex->unk0a + a3, t0); + gDPPipeSync(gdl++); + + gDPSetTextureLUT(gdl++, lutmode); } else { - gDPSetTextureLUT(sp16C++, G_TT_NONE); + gDPSetTextureLUT(gdl++, G_TT_NONE); } - // temp_s0->words.w0 = (var_s1 & 7) << 0x15 | 0xF5000000 | ((var_s2 & 3) << 0x13) | ((sp134 & 0x1FF) << 9); - // temp_s0->words.w1 = ((is_less_than_certain_power_of_2((s32) var_s5) & 0xF) * 0x10) | ((arg1->flagsT & 3) << 0x12) | ((sp58 & 0xF) << 0xE) | ((arg1->flagsS & 3) << 8); - gDPSetTile(sp16C++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gdl++, format, depth, line, 0, G_TX_RENDERTILE, 0, + tconfig->flagsT, is_less_than_certain_power_of_2(height), G_TX_NOLOD, + tconfig->flagsS, is_less_than_certain_power_of_2(width), G_TX_NOLOD); - // temp_v1_2->words.w0 = (temp_a0_3 << 0xC) | 0xF2000000 | temp_a0_3; - // temp_v1_2->words.w1 = (((((var_s5 - 1) * 4) + arg4) & 0xFFF) << 0xC) | ((((var_s4 - 1) * 4) + arg4) & 0xFFF); - gDPSetTileSize(sp16C++, G_TX_RENDERTILE, 0, 0, 0, 0); + gDPSetTileSize(gdl++, G_TX_RENDERTILE, ulst, ulst, (((width - 1) << 2) + ulst), (((height - 1) << 2) + ulst)); } else { - spD0 = 0; - spCC = (s32) arg1->level; + s32 tmem; // spd0 + s32 lod; + u8 format; + u8 depth; + s32 lutmode; + s32 depth2; + s32 lrs; - if (temp_s6 != NULL) + tmem = 0; + lod = (s32)tconfig->level; + + if (tex != NULL) { - var_s1 = temp_s6->gbiformat; - var_s2 = temp_s6->depth; - spCA = temp_s6->maxlod; + format = tex->gbiformat; + depth = tex->depth; + lutmode = tex->lutmodeindex << G_MDSFT_TEXTLUT; } else { - var_s1 = arg1->format; - var_s2 = spC4; - spCA = arg1->depth; + format = tconfig->format; + depth = tconfig->depth; } - // line 362 - if ((temp_s6 != NULL) && (temp_s6->next & 0x20000000)) + if ((tex != NULL) && (tex->unk0c_02)) { - sub_GAME_7F0CC9D4(temp_s6, &spC0, &spBC); + texGetDepthAndSize(tex, &depth2, &lrs); } - else if (spCA == 0) + else { - spC0 = 2; - spBC = sub_GAME_7F0767D8((s32) var_s5, (s32) var_s4, spCC) - 1; - } - else if (spCA == 1) - { - spC0 = 2; - spBC = sub_GAME_7F076848((s32) var_s5, (s32) var_s4, spCC) - 1; - } - else if (spCA == 2) - { - spC0 = 2; - spBC = sub_GAME_7F0768B8((s32) var_s5, (s32) var_s4, spCC) - 1; - } - else if (spCA == 3) - { - spC0 = 3; - spBC = sub_GAME_7F076928((s32) var_s5, (s32) var_s4, spCC) - 1; + switch (depth) + { + case G_IM_SIZ_32b: + depth2 = G_IM_SIZ_32b; + lrs = sub_GAME_7F076928(width, height, lod) - 1; + break; + + case G_IM_SIZ_16b: + depth2 = G_IM_SIZ_16b; + lrs = sub_GAME_7F0768B8(width, height, lod) - 1; + break; + + case G_IM_SIZ_8b: + depth2 = G_IM_SIZ_16b; + lrs = sub_GAME_7F076848(width, height, lod) - 1; + break; + + case G_IM_SIZ_4b: + depth2 = G_IM_SIZ_16b; + lrs = sub_GAME_7F0767D8(width, height, lod) - 1; + break; + } } - texSetRenderMode(&sp16C, arg2, 2, arg3); + texSetRenderMode(&gdl, arg2, 2, arg3); - // line 400 if (arg3 >= 2) { - gSPTexture(sp16C++, 0xffff, 0xffff, 0, G_TX_RENDERTILE, G_OFF); + gSPTextureL(gdl++, 0xffff, 0xffff, lod - 1, arg3, G_TX_RENDERTILE, G_ON); } else { - gSPTexture(sp16C++, 0xffff, 0xffff, 1, G_TX_RENDERTILE, G_OFF); + gSPTexture(gdl++, 0xffff, 0xffff, lod - 1, G_TX_RENDERTILE, G_ON); } + gDPSetTextureLOD(gdl++, G_TL_LOD); + // line 417 - switch (var_s1) + switch (format) { - case 0: - gDPSetCombineMode(sp16C++, G_CC_MODULATEIA, G_CC_MODULATEIA); + case G_IM_FMT_RGBA: + gDPSetCombineMode(gdl++, G_CC_TRILERP, G_CC_MODULATEIA2); break; - case 3: - gDPSetCombineMode(sp16C++, G_CC_MODULATEIA, G_CC_MODULATEIA); + case G_IM_FMT_IA: + gDPSetCombineMode(gdl++, G_CC_TRILERP, G_CC_MODULATEIA2); break; - case 4: - gDPSetCombineLERP(sp16C++, TEXEL0, 0, SHADE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, SHADE, COMBINED, 0, COMBINED, 0, SHADE); + case G_IM_FMT_I: + gDPSetCombineMode(gdl++, G_CC_TRILERP, G_CC_MODULATEI2); break; - case 2: - switch (var_s2) + case G_IM_FMT_CI: + switch (lutmode) { - case 0x8000: - gDPSetCombineMode(sp16C++, G_CC_MODULATEIA, G_CC_MODULATEIA); + case G_TT_RGBA16: + gDPSetCombineMode(gdl++, G_CC_MODULATEIA, G_CC_MODULATEIA); break; - case 0xc000: - gDPSetCombineMode(sp16C++, G_CC_MODULATEIA, G_CC_MODULATEIA); + case G_TT_IA16: + gDPSetCombineMode(gdl++, G_CC_MODULATEIA, G_CC_MODULATEIA); break; } break; } - // line 478 - // temp_v0_8->words.w0 = (var_s1_2 & 7) << 0x15 | 0xFD000000 | ((spC0 & 3) << 0x13); - // temp_v0_8->words.w1 = arg1->index; - gDPSetTextureImage(sp16C++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 1, arg1->index); + gDPSetTextureImage(gdl++, format, depth2, 1, tconfig->index); - // temp_a0_4->words.w0 = (var_s1_2 & 7) << 0x15 | 0xF5000000 | ((spC0 & 3) << 0x13); - // temp_a0_4->words.w1 = 0x07000000; - gDPSetTile(sp16C++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0000, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPSetTile(gdl++, format, depth2, 0, 0, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + + gDPLoadSync(gdl++); - gDPLoadSync(sp16C++); + gDPLoadBlock(gdl++, G_TX_LOADTILE, 0, 0, lrs, 0); - // line 496 - // if (spBC < 0x7FF) - // { - // var_a3_2 = spBC; - // } + gDPPipeSync(gdl++); - // temp_a2_2->words.w0 = 0xF3000000; - // temp_a2_2->words.w1 = ((var_a3_2 & 0xFFF) << 0xC) | 0x07000000U; - gDPLoadBlock(sp16C++, G_TX_LOADTILE, 0, 0, 0, 0); - - gDPPipeSync(sp16C++); - - // line 505 - if (var_s1 == 2) + if (format == 2) { - gDPSetTile(sp16C++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0100, G_TX_LOADTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPLoadSync(sp16C++); + u32 a2 = lrs + 1; + u32 a3 = (0x3ff - tex->unk0a) < a2 ? (0x3ff - tex->unk0a) : 0; - // temp_a2_4 = temp_a2_3 - var_a3_3; + a2 -= a3; - // temp_a0_5->words.w0 = ((temp_a2_4 & 0x3FF) << 0xE) | 0xF0000000 | (var_a3_3 & 0x3FF) * 4; - // temp_a0_5->words.w1 = (((temp_s6->unk0a + temp_a2_4) & 0x3FF) << 0xE) | 0x07000000U | (var_a3_3 & 0x3FF) * 4; - gDPLoadTLUTCmd(sp16C++, G_TX_LOADTILE, 0); - gDPPipeSync(sp16C++); + gDPSetTile(gdl++, G_IM_FMT_RGBA, G_IM_SIZ_4b, 0, 0x0100, G_TX_LOADTILE, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + gDPLoadSync(gdl++); - // temp_t9_4->words.w0 = 0xBA000E02; - // temp_t9_4->words.w1 = var_s2_2; - gDPSetTextureLUT(sp16C++, var_s2); + gDPLoadTLUT07(gdl++, a2, a3, tex->unk0a + a2, a3); + gDPPipeSync(gdl++); + + gDPSetTextureLUT(gdl++, lutmode); } else { - gDPSetTextureLUT(sp16C++, G_TT_NONE); + gDPSetTextureLUT(gdl++, G_TT_NONE); } - - for (var_s1 = 0; var_s1 < spCC; var_s1++) + + for (tile = 0; tile < lod; tile++) { - if (var_s1 > 0) + s32 line; + + if (tile > 0) { - if ((temp_s6 != NULL) && (temp_s6->next & 0x20000000)) + if ((tex != NULL) && (tex->unk0c_02)) + { + width = texGetWidthAtLod(tex, tile); + height = texGetHeightAtLod(tex, tile); + } + else + { + if (width >= 2) { - var_s5 = texGetWidthAtLod(temp_s6, var_s1); - var_s4 = texGetHeightAtLod(temp_s6, var_s1); + width >>= 1; } - else + + if (height >= 2) { - if ((s32) var_s5 >= 2) - { - var_s5 = (u8) ((s32) var_s5 >> 1); - } - - if ((s32) var_s4 >= 2) - { - var_s4 = (u8) ((s32) var_s4 >> 1); - } + height >>= 1; } + } } - switch (spCA) + switch (depth) { default: - var_v0 = ((var_s0 & 0x1FF) << 9); - var_a2 = var_s0 * var_s4; break; - case 3: - var_s0 = (s32) (var_s5 + 3) / 4; - var_v0 = ((var_s0 & 0x1FF) << 9); - var_a2 = var_s0 * var_s4; + case G_IM_SIZ_32b: + line = (s32) (width + 3) / 4; break; - case 2: - var_s0 = (s32) (var_s5 + 3) / 4; - var_v0 = ((var_s0 & 0x1FF) << 9); - var_a2 = var_s0 * var_s4; + case G_IM_SIZ_16b: + line = (s32) (width + 3) / 4; break; - case 1: - var_s0 = (s32) (var_s5 + 7) / 8; - var_v0 = ((var_s0 & 0x1FF) << 9); - var_a2 = var_s0 * var_s4; + case G_IM_SIZ_8b: + line = (s32) (width + 7) / 8; break; - case 0: - var_s0 = (s32) (var_s5 + 0xF) / 16; - var_v0 = ((var_s0 & 0x1FF) << 9); - var_a2 = var_s0 * var_s4; + case G_IM_SIZ_4b: + line = (s32) (width + 0xF) / 16; break; } - gDPSetTile(sp16C++, G_IM_FMT_RGBA, G_IM_SIZ_4b, is_less_than_certain_power_of_2(var_s5), 0x0000, G_TX_RENDERTILE, var_v0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); - gDPSetTileSize(sp16C++, G_TX_RENDERTILE, 0, arg4, var_s5 - 1, var_s4 - 1); + gDPSetTile(gdl++, format, depth, line, tmem, tile, 0, + tconfig->flagsT, is_less_than_certain_power_of_2(height), tile, + tconfig->flagsS, is_less_than_certain_power_of_2(width), tile); - spD0 += var_a2; + gDPSetTileSize(gdl++, tile, ulst, ulst, (((width - 1) << 2) + ulst), (((height - 1) << 2) + ulst)); + + tmem += line * height; } } } - *arg0 = sp16C; + *gdlptr = gdl; } -#else -GLOBAL_ASM( -.text -glabel likely_generate_DL_for_image_declaration -/* 0AB898 7F076D68 27BDFE90 */ addiu $sp, $sp, -0x170 -/* 0AB89C 7F076D6C AFBF0034 */ sw $ra, 0x34($sp) -/* 0AB8A0 7F076D70 AFB70030 */ sw $s7, 0x30($sp) -/* 0AB8A4 7F076D74 AFB6002C */ sw $s6, 0x2c($sp) -/* 0AB8A8 7F076D78 AFB50028 */ sw $s5, 0x28($sp) -/* 0AB8AC 7F076D7C AFB40024 */ sw $s4, 0x24($sp) -/* 0AB8B0 7F076D80 AFB30020 */ sw $s3, 0x20($sp) -/* 0AB8B4 7F076D84 AFB2001C */ sw $s2, 0x1c($sp) -/* 0AB8B8 7F076D88 AFB10018 */ sw $s1, 0x18($sp) -/* 0AB8BC 7F076D8C AFB00014 */ sw $s0, 0x14($sp) -/* 0AB8C0 7F076D90 AFA40170 */ sw $a0, 0x170($sp) -/* 0AB8C4 7F076D94 AFA60178 */ sw $a2, 0x178($sp) -/* 0AB8C8 7F076D98 8C8F0000 */ lw $t7, ($a0) -/* 0AB8CC 7F076D9C 00E08025 */ move $s0, $a3 -/* 0AB8D0 7F076DA0 00A0B825 */ move $s7, $a1 -/* 0AB8D4 7F076DA4 14A00025 */ bnez $a1, .L7F076E3C -/* 0AB8D8 7F076DA8 AFAF016C */ sw $t7, 0x16c($sp) -/* 0AB8DC 7F076DAC 00C02825 */ move $a1, $a2 -/* 0AB8E0 7F076DB0 24060001 */ li $a2, 1 -/* 0AB8E4 7F076DB4 0FC1DA66 */ jal texSetRenderMode -/* 0AB8E8 7F076DB8 27A4016C */ addiu $a0, $sp, 0x16c -/* 0AB8EC 7F076DBC 2A010002 */ slti $at, $s0, 2 -/* 0AB8F0 7F076DC0 1420000D */ bnez $at, .L7F076DF8 -/* 0AB8F4 7F076DC4 8FAF016C */ lw $t7, 0x16c($sp) -/* 0AB8F8 7F076DC8 8FA2016C */ lw $v0, 0x16c($sp) -/* 0AB8FC 7F076DCC 320E00FF */ andi $t6, $s0, 0xff -/* 0AB900 7F076DD0 000E7C00 */ sll $t7, $t6, 0x10 -/* 0AB904 7F076DD4 3C01BB00 */ lui $at, 0xbb00 -/* 0AB908 7F076DD8 24590008 */ addiu $t9, $v0, 8 -/* 0AB90C 7F076DDC AFB9016C */ sw $t9, 0x16c($sp) -/* 0AB910 7F076DE0 01E1C025 */ or $t8, $t7, $at -/* 0AB914 7F076DE4 37190001 */ ori $t9, $t8, 1 -/* 0AB918 7F076DE8 240EFFFF */ li $t6, -1 -/* 0AB91C 7F076DEC AC4E0004 */ sw $t6, 4($v0) -/* 0AB920 7F076DF0 10000008 */ b .L7F076E14 -/* 0AB924 7F076DF4 AC590000 */ sw $t9, ($v0) -.L7F076DF8: -/* 0AB928 7F076DF8 25F80008 */ addiu $t8, $t7, 8 -/* 0AB92C 7F076DFC AFB8016C */ sw $t8, 0x16c($sp) -/* 0AB930 7F076E00 3C19BB00 */ lui $t9, (0xBB000001 >> 16) # lui $t9, 0xbb00 # -/* 0AB934 7F076E04 37390001 */ ori $t9, (0xBB000001 & 0xFFFF) # ori $t9, $t9, 1 # -/* 0AB938 7F076E08 240EFFFF */ li $t6, -1 -/* 0AB93C 7F076E0C ADEE0004 */ sw $t6, 4($t7) # As with above gbi, I forgot to include *dl since I dont know where it is saving the Gfx array (*dl) -/* 0AB940 7F076E10 ADF90000 */ sw $t9, ($t7) #gSPTexture(*dl, 0xFFFF, 0xFFFF, 1, 0, G_ON) #use FFFF since 1.0 cannot be represented directly -.L7F076E14: -/* 0AB944 7F076E14 8FAF016C */ lw $t7, 0x16c($sp) -/* 0AB948 7F076E18 3C19FCFF */ lui $t9, (0xFCFFFFFF >> 16) # lui $t9, 0xfcff # -/* 0AB94C 7F076E1C 3C0EFFFE */ lui $t6, (0xFFFE793C >> 16) # lui $t6, 0xfffe #FCFFFFFFFFFE793C -/* 0AB950 7F076E20 25F80008 */ addiu $t8, $t7, 8 -/* 0AB954 7F076E24 AFB8016C */ sw $t8, 0x16c($sp) -/* 0AB958 7F076E28 35CE793C */ ori $t6, (0xFFFE793C & 0xFFFF) # ori $t6, $t6, 0x793c # -/* 0AB95C 7F076E2C 3739FFFF */ ori $t9, (0xFCFFFFFF & 0xFFFF) # ori $t9, $t9, 0xffff # -/* 0AB960 7F076E30 ADF90000 */ sw $t9, ($t7) # -/* 0AB964 7F076E34 10000352 */ b .L7F077B80 -/* 0AB968 7F076E38 ADEE0004 */ sw $t6, 4($t7) #gDPSetCombineMode() -.L7F076E3C: -/* 0AB96C 7F076E3C 8EE20000 */ lw $v0, ($s7) -/* 0AB970 7F076E40 92F50004 */ lbu $s5, 4($s7) -/* 0AB974 7F076E44 92F40005 */ lbu $s4, 5($s7) -/* 0AB978 7F076E48 2C410BB9 */ sltiu $at, $v0, 0xbb9 -/* 0AB97C 7F076E4C 10200004 */ beqz $at, .L7F076E60 -/* 0AB980 7F076E50 02E02025 */ move $a0, $s7 -/* 0AB984 7F076E54 0FC32F06 */ jal texLoad -/* 0AB988 7F076E58 00002825 */ move $a1, $zero -/* 0AB98C 7F076E5C 8EE20000 */ lw $v0, ($s7) -.L7F076E60: -/* 0AB990 7F076E60 3C018000 */ lui $at, 0x8000 -/* 0AB994 7F076E64 00411825 */ or $v1, $v0, $at -/* 0AB998 7F076E68 9464FFF8 */ lhu $a0, -8($v1) -/* 0AB99C 7F076E6C 0FC32EC3 */ jal texFindInPool -/* 0AB9A0 7F076E70 00002825 */ move $a1, $zero -/* 0AB9A4 7F076E74 92E30006 */ lbu $v1, 6($s7) -/* 0AB9A8 7F076E78 0040B025 */ move $s6, $v0 -/* 0AB9AC 7F076E7C 54600167 */ bnezl $v1, .L7F07741C -/* 0AB9B0 7F076E80 AFA000D0 */ sw $zero, 0xd0($sp) -/* 0AB9B4 7F076E84 5040000D */ beql $v0, $zero, .L7F076EBC -/* 0AB9B8 7F076E88 92F10007 */ lbu $s1, 7($s7) -/* 0AB9BC 7F076E8C 8C520008 */ lw $s2, 8($v0) -/* 0AB9C0 7F076E90 8C4E000C */ lw $t6, 0xc($v0) -/* 0AB9C4 7F076E94 00128EC0 */ sll $s1, $s2, 0x1b -/* 0AB9C8 7F076E98 00117F42 */ srl $t7, $s1, 0x1d -/* 0AB9CC 7F076E9C 31F100FF */ andi $s1, $t7, 0xff -/* 0AB9D0 7F076EA0 000E7F82 */ srl $t7, $t6, 0x1e -/* 0AB9D4 7F076EA4 000FC380 */ sll $t8, $t7, 0xe -/* 0AB9D8 7F076EA8 32590003 */ andi $t9, $s2, 3 -/* 0AB9DC 7F076EAC 03209025 */ move $s2, $t9 -/* 0AB9E0 7F076EB0 10000003 */ b .L7F076EC0 -/* 0AB9E4 7F076EB4 AFB80144 */ sw $t8, 0x144($sp) -/* 0AB9E8 7F076EB8 92F10007 */ lbu $s1, 7($s7) -.L7F076EBC: -/* 0AB9EC 7F076EBC 92F20008 */ lbu $s2, 8($s7) -.L7F076EC0: -/* 0AB9F0 7F076EC0 12400033 */ beqz $s2, .L7F076F90 -/* 0AB9F4 7F076EC4 02401025 */ move $v0, $s2 -/* 0AB9F8 7F076EC8 24010001 */ li $at, 1 -/* 0AB9FC 7F076ECC 10410023 */ beq $v0, $at, .L7F076F5C -/* 0ABA00 7F076ED0 240F0002 */ li $t7, 2 -/* 0ABA04 7F076ED4 24010002 */ li $at, 2 -/* 0ABA08 7F076ED8 10410013 */ beq $v0, $at, .L7F076F28 -/* 0ABA0C 7F076EDC 24180002 */ li $t8, 2 -/* 0ABA10 7F076EE0 24010003 */ li $at, 3 -/* 0ABA14 7F076EE4 10410003 */ beq $v0, $at, .L7F076EF4 -/* 0ABA18 7F076EE8 24190003 */ li $t9, 3 -/* 0ABA1C 7F076EEC 10000035 */ b .L7F076FC4 -/* 0ABA20 7F076EF0 8FB3013C */ lw $s3, 0x13c($sp) -.L7F076EF4: -/* 0ABA24 7F076EF4 AFB90140 */ sw $t9, 0x140($sp) -/* 0ABA28 7F076EF8 02A02025 */ move $a0, $s5 -/* 0ABA2C 7F076EFC 02802825 */ move $a1, $s4 -/* 0ABA30 7F076F00 0FC1DA4A */ jal sub_GAME_7F076928 -/* 0ABA34 7F076F04 24060001 */ li $a2, 1 -/* 0ABA38 7F076F08 2453FFFF */ addiu $s3, $v0, -1 -/* 0ABA3C 7F076F0C 0FC1D9DD */ jal ceil1000 -/* 0ABA40 7F076F10 02A02025 */ move $a0, $s5 -/* 0ABA44 7F076F14 26AE0003 */ addiu $t6, $s5, 3 -/* 0ABA48 7F076F18 000E7883 */ sra $t7, $t6, 2 -/* 0ABA4C 7F076F1C AFA20138 */ sw $v0, 0x138($sp) -/* 0ABA50 7F076F20 10000028 */ b .L7F076FC4 -/* 0ABA54 7F076F24 AFAF0134 */ sw $t7, 0x134($sp) -.L7F076F28: -/* 0ABA58 7F076F28 AFB80140 */ sw $t8, 0x140($sp) -/* 0ABA5C 7F076F2C 02A02025 */ move $a0, $s5 -/* 0ABA60 7F076F30 02802825 */ move $a1, $s4 -/* 0ABA64 7F076F34 0FC1DA2E */ jal sub_GAME_7F0768B8 -/* 0ABA68 7F076F38 24060001 */ li $a2, 1 -/* 0ABA6C 7F076F3C 2453FFFF */ addiu $s3, $v0, -1 -/* 0ABA70 7F076F40 0FC1D9C4 */ jal ceil2000 -/* 0ABA74 7F076F44 02A02025 */ move $a0, $s5 -/* 0ABA78 7F076F48 26B90003 */ addiu $t9, $s5, 3 -/* 0ABA7C 7F076F4C 00197083 */ sra $t6, $t9, 2 -/* 0ABA80 7F076F50 AFA20138 */ sw $v0, 0x138($sp) -/* 0ABA84 7F076F54 1000001B */ b .L7F076FC4 -/* 0ABA88 7F076F58 AFAE0134 */ sw $t6, 0x134($sp) -.L7F076F5C: -/* 0ABA8C 7F076F5C AFAF0140 */ sw $t7, 0x140($sp) -/* 0ABA90 7F076F60 02A02025 */ move $a0, $s5 -/* 0ABA94 7F076F64 02802825 */ move $a1, $s4 -/* 0ABA98 7F076F68 0FC1DA12 */ jal sub_GAME_7F076848 -/* 0ABA9C 7F076F6C 24060001 */ li $a2, 1 -/* 0ABAA0 7F076F70 2453FFFF */ addiu $s3, $v0, -1 -/* 0ABAA4 7F076F74 0FC1D9AB */ jal ceil4000 -/* 0ABAA8 7F076F78 02A02025 */ move $a0, $s5 -/* 0ABAAC 7F076F7C 26B80007 */ addiu $t8, $s5, 7 -/* 0ABAB0 7F076F80 0018C8C3 */ sra $t9, $t8, 3 -/* 0ABAB4 7F076F84 AFA20138 */ sw $v0, 0x138($sp) -/* 0ABAB8 7F076F88 1000000E */ b .L7F076FC4 -/* 0ABABC 7F076F8C AFB90134 */ sw $t9, 0x134($sp) -.L7F076F90: -/* 0ABAC0 7F076F90 240E0002 */ li $t6, 2 -/* 0ABAC4 7F076F94 AFAE0140 */ sw $t6, 0x140($sp) -/* 0ABAC8 7F076F98 02A02025 */ move $a0, $s5 -/* 0ABACC 7F076F9C 02802825 */ move $a1, $s4 -/* 0ABAD0 7F076FA0 0FC1D9F6 */ jal sub_GAME_7F0767D8 -/* 0ABAD4 7F076FA4 24060001 */ li $a2, 1 -/* 0ABAD8 7F076FA8 2453FFFF */ addiu $s3, $v0, -1 -/* 0ABADC 7F076FAC 0FC1D992 */ jal ceil8000 -/* 0ABAE0 7F076FB0 02A02025 */ move $a0, $s5 -/* 0ABAE4 7F076FB4 26AF000F */ addiu $t7, $s5, 0xf -/* 0ABAE8 7F076FB8 000FC103 */ sra $t8, $t7, 4 -/* 0ABAEC 7F076FBC AFA20138 */ sw $v0, 0x138($sp) -/* 0ABAF0 7F076FC0 AFB80134 */ sw $t8, 0x134($sp) -.L7F076FC4: -/* 0ABAF4 7F076FC4 27A4016C */ addiu $a0, $sp, 0x16c -/* 0ABAF8 7F076FC8 8FA50178 */ lw $a1, 0x178($sp) -/* 0ABAFC 7F076FCC 24060001 */ li $a2, 1 -/* 0ABB00 7F076FD0 0FC1DA66 */ jal texSetRenderMode -/* 0ABB04 7F076FD4 02003825 */ move $a3, $s0 -/* 0ABB08 7F076FD8 2A010002 */ slti $at, $s0, 2 -/* 0ABB0C 7F076FDC 1420000D */ bnez $at, .L7F077014 -/* 0ABB10 7F076FE0 02204825 */ move $t1, $s1 -/* 0ABB14 7F076FE4 8FA2016C */ lw $v0, 0x16c($sp) -/* 0ABB18 7F076FE8 320F00FF */ andi $t7, $s0, 0xff -/* 0ABB1C 7F076FEC 000FC400 */ sll $t8, $t7, 0x10 -/* 0ABB20 7F076FF0 3C01BB00 */ lui $at, 0xbb00 -/* 0ABB24 7F076FF4 244E0008 */ addiu $t6, $v0, 8 -/* 0ABB28 7F076FF8 AFAE016C */ sw $t6, 0x16c($sp) -/* 0ABB2C 7F076FFC 0301C825 */ or $t9, $t8, $at -/* 0ABB30 7F077000 372E0001 */ ori $t6, $t9, 1 -/* 0ABB34 7F077004 240FFFFF */ li $t7, -1 -/* 0ABB38 7F077008 AC4F0004 */ sw $t7, 4($v0) -/* 0ABB3C 7F07700C 10000009 */ b .L7F077034 -/* 0ABB40 7F077010 AC4E0000 */ sw $t6, ($v0) -.L7F077014: -/* 0ABB44 7F077014 8FB8016C */ lw $t8, 0x16c($sp) -/* 0ABB48 7F077018 3C0EBB00 */ lui $t6, (0xBB000001 >> 16) # lui $t6, 0xbb00 # -/* 0ABB4C 7F07701C 35CE0001 */ ori $t6, (0xBB000001 & 0xFFFF) # ori $t6, $t6, 1 # -/* 0ABB50 7F077020 27190008 */ addiu $t9, $t8, 8 -/* 0ABB54 7F077024 AFB9016C */ sw $t9, 0x16c($sp) -/* 0ABB58 7F077028 240FFFFF */ li $t7, -1 # -/* 0ABB5C 7F07702C AF0F0004 */ sw $t7, 4($t8) # -/* 0ABB60 7F077030 AF0E0000 */ sw $t6, ($t8) #gSPTexture(*dl, 0xFFFF, 0xFFFF, 1, 0, G_ON) #use FFFF since 1.0 cannot be represented directly -.L7F077034: -/* 0ABB64 7F077034 8FB8016C */ lw $t8, 0x16c($sp) -/* 0ABB68 7F077038 3C0EBA00 */ lui $t6, (0xBA001001 >> 16) # lui $t6, 0xba00 # -/* 0ABB6C 7F07703C 35CE1001 */ ori $t6, (0xBA001001 & 0xFFFF) # ori $t6, $t6, 0x1001 # -/* 0ABB70 7F077040 27190008 */ addiu $t9, $t8, 8 -/* 0ABB74 7F077044 AFB9016C */ sw $t9, 0x16c($sp) -/* 0ABB78 7F077048 AF000004 */ sw $zero, 4($t8) -/* 0ABB7C 7F07704C 1220000C */ beqz $s1, .L7F077080 -/* 0ABB80 7F077050 AF0E0000 */ sw $t6, ($t8) #gDPSetTextureLOD(G_TL_TILE) -/* 0ABB84 7F077054 24010002 */ li $at, 2 -/* 0ABB88 7F077058 11210024 */ beq $t1, $at, .L7F0770EC -/* 0ABB8C 7F07705C 8FAF0144 */ lw $t7, 0x144($sp) -/* 0ABB90 7F077060 24010003 */ li $at, 3 -/* 0ABB94 7F077064 11210010 */ beq $t1, $at, .L7F0770A8 -/* 0ABB98 7F077068 8FAF016C */ lw $t7, 0x16c($sp) -/* 0ABB9C 7F07706C 24010004 */ li $at, 4 -/* 0ABBA0 7F077070 11210016 */ beq $t1, $at, .L7F0770CC -/* 0ABBA4 7F077074 8FAF016C */ lw $t7, 0x16c($sp) -/* 0ABBA8 7F077078 10000036 */ b .L7F077154 -/* 0ABBAC 7F07707C 8FA2016C */ lw $v0, 0x16c($sp) -.L7F077080: -/* 0ABBB0 7F077080 8FAF016C */ lw $t7, 0x16c($sp) -/* 0ABBB4 7F077084 3C19FC12 */ lui $t9, (0xFC121824 >> 16) # lui $t9, 0xfc12 # -/* 0ABBB8 7F077088 3C0EFF33 */ lui $t6, (0xFF33FFFF >> 16) # lui $t6, 0xff33 # -/* 0ABBBC 7F07708C 25F80008 */ addiu $t8, $t7, 8 -/* 0ABBC0 7F077090 AFB8016C */ sw $t8, 0x16c($sp) -/* 0ABBC4 7F077094 35CEFFFF */ ori $t6, (0xFF33FFFF & 0xFFFF) # ori $t6, $t6, 0xffff # -/* 0ABBC8 7F077098 37391824 */ ori $t9, (0xFC121824 & 0xFFFF) # ori $t9, $t9, 0x1824 # -/* 0ABBCC 7F07709C ADF90000 */ sw $t9, ($t7) -/* 0ABBD0 7F0770A0 1000002B */ b .L7F077150 -/* 0ABBD4 7F0770A4 ADEE0004 */ sw $t6, 4($t7) #gDPSetCombineMode() -.L7F0770A8: -/* 0ABBD8 7F0770A8 25F80008 */ addiu $t8, $t7, 8 -/* 0ABBDC 7F0770AC 3C19FC12 */ lui $t9, (0xFC121824 >> 16) # lui $t9, 0xfc12 # -/* 0ABBE0 7F0770B0 3C0EFF33 */ lui $t6, (0xFF33FFFF >> 16) # lui $t6, 0xff33 # -/* 0ABBE4 7F0770B4 35CEFFFF */ ori $t6, (0xFF33FFFF & 0xFFFF) # ori $t6, $t6, 0xffff # -/* 0ABBE8 7F0770B8 37391824 */ ori $t9, (0xFC121824 & 0xFFFF) # ori $t9, $t9, 0x1824 # -/* 0ABBEC 7F0770BC AFB8016C */ sw $t8, 0x16c($sp) -/* 0ABBF0 7F0770C0 ADEE0004 */ sw $t6, 4($t7) -/* 0ABBF4 7F0770C4 10000022 */ b .L7F077150 -/* 0ABBF8 7F0770C8 ADF90000 */ sw $t9, ($t7) #gDPSetCombineMode() -.L7F0770CC: -/* 0ABBFC 7F0770CC 25F80008 */ addiu $t8, $t7, 8 -/* 0ABC00 7F0770D0 3C19FC12 */ lui $t9, (0xFC127E24 >> 16) # lui $t9, 0xfc12 # -/* 0ABC04 7F0770D4 37397E24 */ ori $t9, (0xFC127E24 & 0xFFFF) # ori $t9, $t9, 0x7e24 # -/* 0ABC08 7F0770D8 AFB8016C */ sw $t8, 0x16c($sp) -/* 0ABC0C 7F0770DC 240EF9FC */ li $t6, -1540 -/* 0ABC10 7F0770E0 ADEE0004 */ sw $t6, 4($t7) -/* 0ABC14 7F0770E4 1000001A */ b .L7F077150 -/* 0ABC18 7F0770E8 ADF90000 */ sw $t9, ($t7) #gDPSetCombineMode() -.L7F0770EC: -/* 0ABC1C 7F0770EC 34018000 */ li $at, 32768 -/* 0ABC20 7F0770F0 11E10006 */ beq $t7, $at, .L7F07710C -/* 0ABC24 7F0770F4 8FB8016C */ lw $t8, 0x16c($sp) -/* 0ABC28 7F0770F8 3401C000 */ li $at, 49152 -/* 0ABC2C 7F0770FC 11E1000C */ beq $t7, $at, .L7F077130 -/* 0ABC30 7F077100 8FB8016C */ lw $t8, 0x16c($sp) -/* 0ABC34 7F077104 10000013 */ b .L7F077154 -/* 0ABC38 7F077108 8FA2016C */ lw $v0, 0x16c($sp) -.L7F07710C: -/* 0ABC3C 7F07710C 27190008 */ addiu $t9, $t8, 8 -/* 0ABC40 7F077110 3C0EFC12 */ lui $t6, (0xFC121824 >> 16) # lui $t6, 0xfc12 # -/* 0ABC44 7F077114 3C0FFF33 */ lui $t7, (0xFF33FFFF >> 16) # lui $t7, 0xff33 # -/* 0ABC48 7F077118 35EFFFFF */ ori $t7, (0xFF33FFFF & 0xFFFF) # ori $t7, $t7, 0xffff # -/* 0ABC4C 7F07711C 35CE1824 */ ori $t6, (0xFC121824 & 0xFFFF) # ori $t6, $t6, 0x1824 # -/* 0ABC50 7F077120 AFB9016C */ sw $t9, 0x16c($sp) -/* 0ABC54 7F077124 AF0F0004 */ sw $t7, 4($t8) -/* 0ABC58 7F077128 10000009 */ b .L7F077150 -/* 0ABC5C 7F07712C AF0E0000 */ sw $t6, ($t8) #gDPSetCombineMode() -.L7F077130: -/* 0ABC60 7F077130 27190008 */ addiu $t9, $t8, 8 -/* 0ABC64 7F077134 AFB9016C */ sw $t9, 0x16c($sp) -/* 0ABC68 7F077138 3C0EFC12 */ lui $t6, (0xFC121824 >> 16) # lui $t6, 0xfc12 # -/* 0ABC6C 7F07713C 3C0FFF33 */ lui $t7, (0xFF33FFFF >> 16) # lui $t7, 0xff33 # -/* 0ABC70 7F077140 35EFFFFF */ ori $t7, (0xFF33FFFF & 0xFFFF) # ori $t7, $t7, 0xffff # -/* 0ABC74 7F077144 35CE1824 */ ori $t6, (0xFC121824 & 0xFFFF) # ori $t6, $t6, 0x1824 # -/* 0ABC78 7F077148 AF0E0000 */ sw $t6, ($t8) -/* 0ABC7C 7F07714C AF0F0004 */ sw $t7, 4($t8) #gDPSetCombineMode() -.L7F077150: -/* 0ABC80 7F077150 8FA2016C */ lw $v0, 0x16c($sp) -.L7F077154: -/* 0ABC84 7F077154 8FA40140 */ lw $a0, 0x140($sp) -/* 0ABC88 7F077158 32230007 */ andi $v1, $s1, 7 -/* 0ABC8C 7F07715C 00037540 */ sll $t6, $v1, 0x15 -/* 0ABC90 7F077160 24590008 */ addiu $t9, $v0, 8 -/* 0ABC94 7F077164 AFB9016C */ sw $t9, 0x16c($sp) -/* 0ABC98 7F077168 3C01FD00 */ lui $at, 0xfd00 -/* 0ABC9C 7F07716C 308F0003 */ andi $t7, $a0, 3 -/* 0ABCA0 7F077170 000F24C0 */ sll $a0, $t7, 0x13 -/* 0ABCA4 7F077174 01C1C825 */ or $t9, $t6, $at -/* 0ABCA8 7F077178 01C01825 */ move $v1, $t6 -/* 0ABCAC 7F07717C 03247025 */ or $t6, $t9, $a0 -/* 0ABCB0 7F077180 AC4E0000 */ sw $t6, ($v0) -/* 0ABCB4 7F077184 8EEF0000 */ lw $t7, ($s7) -/* 0ABCB8 7F077188 3C01F500 */ lui $at, 0xf500 -/* 0ABCBC 7F07718C 00615825 */ or $t3, $v1, $at -/* 0ABCC0 7F077190 AC4F0004 */ sw $t7, 4($v0) -/* 0ABCC4 7F077194 8FA5016C */ lw $a1, 0x16c($sp) -/* 0ABCC8 7F077198 01647025 */ or $t6, $t3, $a0 -/* 0ABCCC 7F07719C 3C0A0700 */ lui $t2, 0x700 -/* 0ABCD0 7F0771A0 24B90008 */ addiu $t9, $a1, 8 -/* 0ABCD4 7F0771A4 AFB9016C */ sw $t9, 0x16c($sp) -/* 0ABCD8 7F0771A8 ACAE0000 */ sw $t6, ($a1) -/* 0ABCDC 7F0771AC 92EF000A */ lbu $t7, 0xa($s7) -/* 0ABCE0 7F0771B0 3C0DE600 */ lui $t5, 0xe600 -/* 0ABCE4 7F0771B4 2A6107FF */ slti $at, $s3, 0x7ff -/* 0ABCE8 7F0771B8 31F80003 */ andi $t8, $t7, 3 -/* 0ABCEC 7F0771BC 92EF0009 */ lbu $t7, 9($s7) -/* 0ABCF0 7F0771C0 0018CC80 */ sll $t9, $t8, 0x12 -/* 0ABCF4 7F0771C4 032A7025 */ or $t6, $t9, $t2 -/* 0ABCF8 7F0771C8 31F80003 */ andi $t8, $t7, 3 -/* 0ABCFC 7F0771CC 0018CA00 */ sll $t9, $t8, 8 -/* 0ABD00 7F0771D0 01D97825 */ or $t7, $t6, $t9 -/* 0ABD04 7F0771D4 ACAF0004 */ sw $t7, 4($a1) -/* 0ABD08 7F0771D8 8FB8016C */ lw $t8, 0x16c($sp) -/* 0ABD0C 7F0771DC 240707FF */ li $a3, 2047 -/* 0ABD10 7F0771E0 270E0008 */ addiu $t6, $t8, 8 -/* 0ABD14 7F0771E4 AFAE016C */ sw $t6, 0x16c($sp) -/* 0ABD18 7F0771E8 AF000004 */ sw $zero, 4($t8) -/* 0ABD1C 7F0771EC AF0D0000 */ sw $t5, ($t8) -/* 0ABD20 7F0771F0 8FA8016C */ lw $t0, 0x16c($sp) -/* 0ABD24 7F0771F4 3C18F300 */ lui $t8, 0xf300 -/* 0ABD28 7F0771F8 250F0008 */ addiu $t7, $t0, 8 -/* 0ABD2C 7F0771FC AFAF016C */ sw $t7, 0x16c($sp) -/* 0ABD30 7F077200 10200003 */ beqz $at, .L7F077210 -/* 0ABD34 7F077204 AD180000 */ sw $t8, ($t0) -/* 0ABD38 7F077208 10000001 */ b .L7F077210 -/* 0ABD3C 7F07720C 02603825 */ move $a3, $s3 -.L7F077210: -/* 0ABD40 7F077210 8FB80138 */ lw $t8, 0x138($sp) -/* 0ABD44 7F077214 30EE0FFF */ andi $t6, $a3, 0xfff -/* 0ABD48 7F077218 000ECB00 */ sll $t9, $t6, 0xc -/* 0ABD4C 7F07721C 032A7825 */ or $t7, $t9, $t2 -/* 0ABD50 7F077220 330E0FFF */ andi $t6, $t8, 0xfff -/* 0ABD54 7F077224 01EEC825 */ or $t9, $t7, $t6 -/* 0ABD58 7F077228 AD190004 */ sw $t9, 4($t0) -/* 0ABD5C 7F07722C 8FB8016C */ lw $t8, 0x16c($sp) -/* 0ABD60 7F077230 3C0CE700 */ lui $t4, 0xe700 -/* 0ABD64 7F077234 24010002 */ li $at, 2 -/* 0ABD68 7F077238 270F0008 */ addiu $t7, $t8, 8 -/* 0ABD6C 7F07723C AFAF016C */ sw $t7, 0x16c($sp) -/* 0ABD70 7F077240 AF000004 */ sw $zero, 4($t8) -/* 0ABD74 7F077244 15210038 */ bne $t1, $at, .L7F077328 -/* 0ABD78 7F077248 AF0C0000 */ sw $t4, ($t8) -/* 0ABD7C 7F07724C 92CE000A */ lbu $t6, 0xa($s6) -/* 0ABD80 7F077250 241903FF */ li $t9, 1023 -/* 0ABD84 7F077254 26670001 */ addiu $a3, $s3, 1 -/* 0ABD88 7F077258 032E1023 */ subu $v0, $t9, $t6 -/* 0ABD8C 7F07725C 0047082B */ sltu $at, $v0, $a3 -/* 0ABD90 7F077260 10200003 */ beqz $at, .L7F077270 -/* 0ABD94 7F077264 8FB8016C */ lw $t8, 0x16c($sp) -/* 0ABD98 7F077268 10000002 */ b .L7F077274 -/* 0ABD9C 7F07726C 00404025 */ move $t0, $v0 -.L7F077270: -/* 0ABDA0 7F077270 00004025 */ move $t0, $zero -.L7F077274: -/* 0ABDA4 7F077274 270F0008 */ addiu $t7, $t8, 8 -/* 0ABDA8 7F077278 AFAF016C */ sw $t7, 0x16c($sp) -/* 0ABDAC 7F07727C 3C19F500 */ lui $t9, (0xF5000100 >> 16) # lui $t9, 0xf500 # -/* 0ABDB0 7F077280 37390100 */ ori $t9, (0xF5000100 & 0xFFFF) # ori $t9, $t9, 0x100 #gDPSetTile() -/* 0ABDB4 7F077284 AF190000 */ sw $t9, ($t8) -/* 0ABDB8 7F077288 AF0A0004 */ sw $t2, 4($t8) -/* 0ABDBC 7F07728C 8FAE016C */ lw $t6, 0x16c($sp) -/* 0ABDC0 7F077290 00E83023 */ subu $a2, $a3, $t0 -/* 0ABDC4 7F077294 310503FF */ andi $a1, $t0, 0x3ff -/* 0ABDC8 7F077298 25D80008 */ addiu $t8, $t6, 8 -/* 0ABDCC 7F07729C AFB8016C */ sw $t8, 0x16c($sp) -/* 0ABDD0 7F0772A0 ADC00004 */ sw $zero, 4($t6) -/* 0ABDD4 7F0772A4 ADCD0000 */ sw $t5, ($t6) -/* 0ABDD8 7F0772A8 8FA4016C */ lw $a0, 0x16c($sp) -/* 0ABDDC 7F0772AC 30D803FF */ andi $t8, $a2, 0x3ff -/* 0ABDE0 7F0772B0 00187B80 */ sll $t7, $t8, 0xe -/* 0ABDE4 7F0772B4 24990008 */ addiu $t9, $a0, 8 -/* 0ABDE8 7F0772B8 AFB9016C */ sw $t9, 0x16c($sp) -/* 0ABDEC 7F0772BC 00057080 */ sll $t6, $a1, 2 -/* 0ABDF0 7F0772C0 3C01F000 */ lui $at, 0xf000 -/* 0ABDF4 7F0772C4 01E1C825 */ or $t9, $t7, $at -/* 0ABDF8 7F0772C8 01C02825 */ move $a1, $t6 -/* 0ABDFC 7F0772CC 032E7025 */ or $t6, $t9, $t6 -/* 0ABE00 7F0772D0 AC8E0000 */ sw $t6, ($a0) -/* 0ABE04 7F0772D4 92D8000A */ lbu $t8, 0xa($s6) -/* 0ABE08 7F0772D8 03067821 */ addu $t7, $t8, $a2 -/* 0ABE0C 7F0772DC 31F903FF */ andi $t9, $t7, 0x3ff -/* 0ABE10 7F0772E0 00197380 */ sll $t6, $t9, 0xe -/* 0ABE14 7F0772E4 01CAC025 */ or $t8, $t6, $t2 -/* 0ABE18 7F0772E8 03057825 */ or $t7, $t8, $a1 -/* 0ABE1C 7F0772EC AC8F0004 */ sw $t7, 4($a0) -/* 0ABE20 7F0772F0 8FB9016C */ lw $t9, 0x16c($sp) -/* 0ABE24 7F0772F4 272E0008 */ addiu $t6, $t9, 8 -/* 0ABE28 7F0772F8 AFAE016C */ sw $t6, 0x16c($sp) -/* 0ABE2C 7F0772FC AF200004 */ sw $zero, 4($t9) -/* 0ABE30 7F077300 AF2C0000 */ sw $t4, ($t9) -/* 0ABE34 7F077304 8FB8016C */ lw $t8, 0x16c($sp) -/* 0ABE38 7F077308 3C19BA00 */ lui $t9, (0xBA000E02 >> 16) # lui $t9, 0xba00 # -/* 0ABE3C 7F07730C 37390E02 */ ori $t9, (0xBA000E02 & 0xFFFF) # ori $t9, $t9, 0xe02 #gDPSetTextureLUT() -/* 0ABE40 7F077310 270F0008 */ addiu $t7, $t8, 8 -/* 0ABE44 7F077314 AFAF016C */ sw $t7, 0x16c($sp) -/* 0ABE48 7F077318 AF190000 */ sw $t9, ($t8) -/* 0ABE4C 7F07731C 8FAE0144 */ lw $t6, 0x144($sp) -/* 0ABE50 7F077320 10000008 */ b .L7F077344 -/* 0ABE54 7F077324 AF0E0004 */ sw $t6, 4($t8) -.L7F077328: -/* 0ABE58 7F077328 8FB8016C */ lw $t8, 0x16c($sp) -/* 0ABE5C 7F07732C 3C19BA00 */ lui $t9, (0xBA000E02 >> 16) # lui $t9, 0xba00 # -/* 0ABE60 7F077330 37390E02 */ ori $t9, (0xBA000E02 & 0xFFFF) # ori $t9, $t9, 0xe02 #gDPSetTextureLUT() -/* 0ABE64 7F077334 270F0008 */ addiu $t7, $t8, 8 -/* 0ABE68 7F077338 AFAF016C */ sw $t7, 0x16c($sp) -/* 0ABE6C 7F07733C AF000004 */ sw $zero, 4($t8) -/* 0ABE70 7F077340 AF190000 */ sw $t9, ($t8) -.L7F077344: -/* 0ABE74 7F077344 8FB0016C */ lw $s0, 0x16c($sp) -/* 0ABE78 7F077348 324F0003 */ andi $t7, $s2, 3 -/* 0ABE7C 7F07734C 000FCCC0 */ sll $t9, $t7, 0x13 -/* 0ABE80 7F077350 26180008 */ addiu $t8, $s0, 8 -/* 0ABE84 7F077354 AFB8016C */ sw $t8, 0x16c($sp) -/* 0ABE88 7F077358 8FB80134 */ lw $t8, 0x134($sp) -/* 0ABE8C 7F07735C 01797025 */ or $t6, $t3, $t9 -/* 0ABE90 7F077360 02802025 */ move $a0, $s4 -/* 0ABE94 7F077364 330F01FF */ andi $t7, $t8, 0x1ff -/* 0ABE98 7F077368 000FCA40 */ sll $t9, $t7, 9 -/* 0ABE9C 7F07736C 01D9C025 */ or $t8, $t6, $t9 -/* 0ABEA0 7F077370 0FC1D968 */ jal is_less_than_certain_power_of_2 -/* 0ABEA4 7F077374 AE180000 */ sw $t8, ($s0) -/* 0ABEA8 7F077378 02A02025 */ move $a0, $s5 -/* 0ABEAC 7F07737C 0FC1D968 */ jal is_less_than_certain_power_of_2 -/* 0ABEB0 7F077380 AFA20058 */ sw $v0, 0x58($sp) -/* 0ABEB4 7F077384 92F9000A */ lbu $t9, 0xa($s7) -/* 0ABEB8 7F077388 304F000F */ andi $t7, $v0, 0xf -/* 0ABEBC 7F07738C 8FA70058 */ lw $a3, 0x58($sp) -/* 0ABEC0 7F077390 000F7100 */ sll $t6, $t7, 4 -/* 0ABEC4 7F077394 33380003 */ andi $t8, $t9, 3 -/* 0ABEC8 7F077398 00187C80 */ sll $t7, $t8, 0x12 -/* 0ABECC 7F07739C 01CFC825 */ or $t9, $t6, $t7 -/* 0ABED0 7F0773A0 30F8000F */ andi $t8, $a3, 0xf -/* 0ABED4 7F0773A4 00187380 */ sll $t6, $t8, 0xe -/* 0ABED8 7F0773A8 92F80009 */ lbu $t8, 9($s7) -/* 0ABEDC 7F0773AC 032E7825 */ or $t7, $t9, $t6 -/* 0ABEE0 7F0773B0 8FA50180 */ lw $a1, 0x180($sp) -/* 0ABEE4 7F0773B4 33190003 */ andi $t9, $t8, 3 -/* 0ABEE8 7F0773B8 00197200 */ sll $t6, $t9, 8 -/* 0ABEEC 7F0773BC 01EEC025 */ or $t8, $t7, $t6 -/* 0ABEF0 7F0773C0 AE180004 */ sw $t8, 4($s0) -/* 0ABEF4 7F0773C4 8FA3016C */ lw $v1, 0x16c($sp) -/* 0ABEF8 7F0773C8 30A40FFF */ andi $a0, $a1, 0xfff -/* 0ABEFC 7F0773CC 00047300 */ sll $t6, $a0, 0xc -/* 0ABF00 7F0773D0 3C01F200 */ lui $at, 0xf200 -/* 0ABF04 7F0773D4 246F0008 */ addiu $t7, $v1, 8 -/* 0ABF08 7F0773D8 AFAF016C */ sw $t7, 0x16c($sp) -/* 0ABF0C 7F0773DC 01C1C025 */ or $t8, $t6, $at -/* 0ABF10 7F0773E0 0304C825 */ or $t9, $t8, $a0 -/* 0ABF14 7F0773E4 26AFFFFF */ addiu $t7, $s5, -1 -/* 0ABF18 7F0773E8 000F7080 */ sll $t6, $t7, 2 -/* 0ABF1C 7F0773EC 01C5C021 */ addu $t8, $t6, $a1 -/* 0ABF20 7F0773F0 AC790000 */ sw $t9, ($v1) -/* 0ABF24 7F0773F4 33190FFF */ andi $t9, $t8, 0xfff -/* 0ABF28 7F0773F8 268EFFFF */ addiu $t6, $s4, -1 -/* 0ABF2C 7F0773FC 000EC080 */ sll $t8, $t6, 2 -/* 0ABF30 7F077400 00197B00 */ sll $t7, $t9, 0xc -/* 0ABF34 7F077404 0305C821 */ addu $t9, $t8, $a1 -/* 0ABF38 7F077408 332E0FFF */ andi $t6, $t9, 0xfff -/* 0ABF3C 7F07740C 01EEC025 */ or $t8, $t7, $t6 -/* 0ABF40 7F077410 100001DB */ b .L7F077B80 -/* 0ABF44 7F077414 AC780004 */ sw $t8, 4($v1) -/* 0ABF48 7F077418 AFA000D0 */ sw $zero, 0xd0($sp) -.L7F07741C: -/* 0ABF4C 7F07741C 1040000B */ beqz $v0, .L7F07744C -/* 0ABF50 7F077420 AFA300CC */ sw $v1, 0xcc($sp) -/* 0ABF54 7F077424 8C430008 */ lw $v1, 8($v0) -/* 0ABF58 7F077428 306E0003 */ andi $t6, $v1, 3 -/* 0ABF5C 7F07742C A3AE00CA */ sb $t6, 0xca($sp) -/* 0ABF60 7F077430 8C52000C */ lw $s2, 0xc($v0) -/* 0ABF64 7F077434 00038EC0 */ sll $s1, $v1, 0x1b -/* 0ABF68 7F077438 0011CF42 */ srl $t9, $s1, 0x1d -/* 0ABF6C 7F07743C 0012C782 */ srl $t8, $s2, 0x1e -/* 0ABF70 7F077440 333100FF */ andi $s1, $t9, 0xff -/* 0ABF74 7F077444 10000005 */ b .L7F07745C -/* 0ABF78 7F077448 00189380 */ sll $s2, $t8, 0xe -.L7F07744C: -/* 0ABF7C 7F07744C 92EF0008 */ lbu $t7, 8($s7) -/* 0ABF80 7F077450 92F10007 */ lbu $s1, 7($s7) -/* 0ABF84 7F077454 8FB200C4 */ lw $s2, 0xc4($sp) -/* 0ABF88 7F077458 A3AF00CA */ sb $t7, 0xca($sp) -.L7F07745C: -/* 0ABF8C 7F07745C 1040000B */ beqz $v0, .L7F07748C -/* 0ABF90 7F077460 93B300CA */ lbu $s3, 0xca($sp) -/* 0ABF94 7F077464 8C4E000C */ lw $t6, 0xc($v0) -/* 0ABF98 7F077468 02C02025 */ move $a0, $s6 -/* 0ABF9C 7F07746C 27A500C0 */ addiu $a1, $sp, 0xc0 -/* 0ABFA0 7F077470 000EC880 */ sll $t9, $t6, 2 -/* 0ABFA4 7F077474 07210005 */ bgez $t9, .L7F07748C -/* 0ABFA8 7F077478 00000000 */ nop -/* 0ABFAC 7F07747C 0FC33275 */ jal sub_GAME_7F0CC9D4 -/* 0ABFB0 7F077480 27A600BC */ addiu $a2, $sp, 0xbc -/* 0ABFB4 7F077484 1000002C */ b .L7F077538 -/* 0ABFB8 7F077488 27A4016C */ addiu $a0, $sp, 0x16c -.L7F07748C: -/* 0ABFBC 7F07748C 12600022 */ beqz $s3, .L7F077518 -/* 0ABFC0 7F077490 24180002 */ li $t8, 2 -/* 0ABFC4 7F077494 24010001 */ li $at, 1 -/* 0ABFC8 7F077498 12610017 */ beq $s3, $at, .L7F0774F8 -/* 0ABFCC 7F07749C 240F0002 */ li $t7, 2 -/* 0ABFD0 7F0774A0 24010002 */ li $at, 2 -/* 0ABFD4 7F0774A4 1261000C */ beq $s3, $at, .L7F0774D8 -/* 0ABFD8 7F0774A8 24180002 */ li $t8, 2 -/* 0ABFDC 7F0774AC 24010003 */ li $at, 3 -/* 0ABFE0 7F0774B0 16610020 */ bne $s3, $at, .L7F077534 -/* 0ABFE4 7F0774B4 240F0003 */ li $t7, 3 -/* 0ABFE8 7F0774B8 AFAF00C0 */ sw $t7, 0xc0($sp) -/* 0ABFEC 7F0774BC 02A02025 */ move $a0, $s5 -/* 0ABFF0 7F0774C0 02802825 */ move $a1, $s4 -/* 0ABFF4 7F0774C4 0FC1DA4A */ jal sub_GAME_7F076928 -/* 0ABFF8 7F0774C8 8FA600CC */ lw $a2, 0xcc($sp) -/* 0ABFFC 7F0774CC 244EFFFF */ addiu $t6, $v0, -1 -/* 0AC000 7F0774D0 10000018 */ b .L7F077534 -/* 0AC004 7F0774D4 AFAE00BC */ sw $t6, 0xbc($sp) -.L7F0774D8: -/* 0AC008 7F0774D8 AFB800C0 */ sw $t8, 0xc0($sp) -/* 0AC00C 7F0774DC 02A02025 */ move $a0, $s5 -/* 0AC010 7F0774E0 02802825 */ move $a1, $s4 -/* 0AC014 7F0774E4 0FC1DA2E */ jal sub_GAME_7F0768B8 -/* 0AC018 7F0774E8 8FA600CC */ lw $a2, 0xcc($sp) -/* 0AC01C 7F0774EC 2459FFFF */ addiu $t9, $v0, -1 -/* 0AC020 7F0774F0 10000010 */ b .L7F077534 -/* 0AC024 7F0774F4 AFB900BC */ sw $t9, 0xbc($sp) -.L7F0774F8: -/* 0AC028 7F0774F8 AFAF00C0 */ sw $t7, 0xc0($sp) -/* 0AC02C 7F0774FC 02A02025 */ move $a0, $s5 -/* 0AC030 7F077500 02802825 */ move $a1, $s4 -/* 0AC034 7F077504 0FC1DA12 */ jal sub_GAME_7F076848 -/* 0AC038 7F077508 8FA600CC */ lw $a2, 0xcc($sp) -/* 0AC03C 7F07750C 244EFFFF */ addiu $t6, $v0, -1 -/* 0AC040 7F077510 10000008 */ b .L7F077534 -/* 0AC044 7F077514 AFAE00BC */ sw $t6, 0xbc($sp) -.L7F077518: -/* 0AC048 7F077518 AFB800C0 */ sw $t8, 0xc0($sp) -/* 0AC04C 7F07751C 02A02025 */ move $a0, $s5 -/* 0AC050 7F077520 02802825 */ move $a1, $s4 -/* 0AC054 7F077524 0FC1D9F6 */ jal sub_GAME_7F0767D8 -/* 0AC058 7F077528 8FA600CC */ lw $a2, 0xcc($sp) -/* 0AC05C 7F07752C 2459FFFF */ addiu $t9, $v0, -1 -/* 0AC060 7F077530 AFB900BC */ sw $t9, 0xbc($sp) -.L7F077534: -/* 0AC064 7F077534 27A4016C */ addiu $a0, $sp, 0x16c -.L7F077538: -/* 0AC068 7F077538 8FA50178 */ lw $a1, 0x178($sp) -/* 0AC06C 7F07753C 24060002 */ li $a2, 2 -/* 0AC070 7F077540 0FC1DA66 */ jal texSetRenderMode -/* 0AC074 7F077544 02003825 */ move $a3, $s0 -/* 0AC078 7F077548 2A010002 */ slti $at, $s0, 2 -/* 0AC07C 7F07754C 14200012 */ bnez $at, .L7F077598 -/* 0AC080 7F077550 02204025 */ move $t0, $s1 -/* 0AC084 7F077554 8FA2016C */ lw $v0, 0x16c($sp) -/* 0AC088 7F077558 321800FF */ andi $t8, $s0, 0xff -/* 0AC08C 7F07755C 0018CC00 */ sll $t9, $t8, 0x10 -/* 0AC090 7F077560 244E0008 */ addiu $t6, $v0, 8 -/* 0AC094 7F077564 AFAE016C */ sw $t6, 0x16c($sp) -/* 0AC098 7F077568 8FAE00CC */ lw $t6, 0xcc($sp) -/* 0AC09C 7F07756C 3C01BB00 */ lui $at, 0xbb00 -/* 0AC0A0 7F077570 03217825 */ or $t7, $t9, $at -/* 0AC0A4 7F077574 25D8FFFF */ addiu $t8, $t6, -1 -/* 0AC0A8 7F077578 33190007 */ andi $t9, $t8, 7 -/* 0AC0AC 7F07757C 001972C0 */ sll $t6, $t9, 0xb -/* 0AC0B0 7F077580 01EEC025 */ or $t8, $t7, $t6 -/* 0AC0B4 7F077584 37190001 */ ori $t9, $t8, 1 -/* 0AC0B8 7F077588 240FFFFF */ li $t7, -1 -/* 0AC0BC 7F07758C AC4F0004 */ sw $t7, 4($v0) -/* 0AC0C0 7F077590 1000000E */ b .L7F0775CC -/* 0AC0C4 7F077594 AC590000 */ sw $t9, ($v0) -.L7F077598: -/* 0AC0C8 7F077598 8FA2016C */ lw $v0, 0x16c($sp) -/* 0AC0CC 7F07759C 8FB900CC */ lw $t9, 0xcc($sp) -/* 0AC0D0 7F0775A0 3C01BB00 */ lui $at, 0xbb00 -/* 0AC0D4 7F0775A4 24580008 */ addiu $t8, $v0, 8 -/* 0AC0D8 7F0775A8 272FFFFF */ addiu $t7, $t9, -1 -/* 0AC0DC 7F0775AC 31EE0007 */ andi $t6, $t7, 7 -/* 0AC0E0 7F0775B0 AFB8016C */ sw $t8, 0x16c($sp) -/* 0AC0E4 7F0775B4 000EC2C0 */ sll $t8, $t6, 0xb -/* 0AC0E8 7F0775B8 0301C825 */ or $t9, $t8, $at -/* 0AC0EC 7F0775BC 372F0001 */ ori $t7, $t9, 1 -/* 0AC0F0 7F0775C0 240EFFFF */ li $t6, -1 -/* 0AC0F4 7F0775C4 AC4E0004 */ sw $t6, 4($v0) -/* 0AC0F8 7F0775C8 AC4F0000 */ sw $t7, ($v0) -.L7F0775CC: -/* 0AC0FC 7F0775CC 8FB8016C */ lw $t8, 0x16c($sp) -/* 0AC100 7F0775D0 3C0FBA00 */ lui $t7, (0xBA001001 >> 16) # lui $t7, 0xba00 # -/* 0AC104 7F0775D4 35EF1001 */ ori $t7, (0xBA001001 & 0xFFFF) # ori $t7, $t7, 0x1001 # -/* 0AC108 7F0775D8 27190008 */ addiu $t9, $t8, 8 -/* 0AC10C 7F0775DC AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC110 7F0775E0 3C0E0001 */ lui $t6, 1 -/* 0AC114 7F0775E4 AF0E0004 */ sw $t6, 4($t8) -/* 0AC118 7F0775E8 1220000B */ beqz $s1, .L7F077618 -/* 0AC11C 7F0775EC AF0F0000 */ sw $t7, ($t8) #gDPSetTextureLOD(G_TL_LOD) -/* 0AC120 7F0775F0 24010002 */ li $at, 2 -/* 0AC124 7F0775F4 11010024 */ beq $t0, $at, .L7F077688 -/* 0AC128 7F0775F8 24010003 */ li $at, 3 -/* 0AC12C 7F0775FC 11010010 */ beq $t0, $at, .L7F077640 -/* 0AC130 7F077600 8FB8016C */ lw $t8, 0x16c($sp) -/* 0AC134 7F077604 24010004 */ li $at, 4 -/* 0AC138 7F077608 11010016 */ beq $t0, $at, .L7F077664 -/* 0AC13C 7F07760C 8FB8016C */ lw $t8, 0x16c($sp) -/* 0AC140 7F077610 10000037 */ b .L7F0776F0 -/* 0AC144 7F077614 8FA2016C */ lw $v0, 0x16c($sp) -.L7F077618: -/* 0AC148 7F077618 8FB8016C */ lw $t8, 0x16c($sp) -/* 0AC14C 7F07761C 3C0FFC26 */ lui $t7, (0xFC26A004 >> 16) # lui $t7, 0xfc26 # -/* 0AC150 7F077620 3C0E1F10 */ lui $t6, (0x1F1093FF >> 16) # lui $t6, 0x1f10 # -/* 0AC154 7F077624 27190008 */ addiu $t9, $t8, 8 -/* 0AC158 7F077628 AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC15C 7F07762C 35CE93FF */ ori $t6, (0x1F1093FF & 0xFFFF) # ori $t6, $t6, 0x93ff # -/* 0AC160 7F077630 35EFA004 */ ori $t7, (0xFC26A004 & 0xFFFF) # ori $t7, $t7, 0xa004 # -/* 0AC164 7F077634 AF0F0000 */ sw $t7, ($t8) -/* 0AC168 7F077638 1000002C */ b .L7F0776EC -/* 0AC16C 7F07763C AF0E0004 */ sw $t6, 4($t8) #gDPSetCombineMode() -.L7F077640: -/* 0AC170 7F077640 27190008 */ addiu $t9, $t8, 8 -/* 0AC174 7F077644 3C0FFC26 */ lui $t7, (0xFC26A004 >> 16) # lui $t7, 0xfc26 -/* 0AC178 7F077648 3C0E1F10 */ lui $t6, (0x1F1093FF >> 16) # lui $t6, 0x1f10 -/* 0AC17C 7F07764C 35CE93FF */ ori $t6, (0x1F1093FF & 0xFFFF) # ori $t6, $t6, 0x93ff -/* 0AC180 7F077650 35EFA004 */ ori $t7, (0xFC26A004 & 0xFFFF) # ori $t7, $t7, 0xa004 -/* 0AC184 7F077654 AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC188 7F077658 AF0E0004 */ sw $t6, 4($t8) -/* 0AC18C 7F07765C 10000023 */ b .L7F0776EC -/* 0AC190 7F077660 AF0F0000 */ sw $t7, ($t8) #gDPSetCombineMode() -.L7F077664: -/* 0AC194 7F077664 27190008 */ addiu $t9, $t8, 8 -/* 0AC198 7F077668 3C0FFC26 */ lui $t7, (0xFC26A004 >> 16) # lui $t7, 0xfc26 -/* 0AC19C 7F07766C 3C0E1FFC */ lui $t6, (0x1FFC93FC >> 16) # lui $t6, 0x1ffc -/* 0AC1A0 7F077670 35CE93FC */ ori $t6, (0x1FFC93FC & 0xFFFF) # ori $t6, $t6, 0x93fc -/* 0AC1A4 7F077674 35EFA004 */ ori $t7, (0xFC26A004 & 0xFFFF) # ori $t7, $t7, 0xa004 -/* 0AC1A8 7F077678 AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC1AC 7F07767C AF0E0004 */ sw $t6, 4($t8) -/* 0AC1B0 7F077680 1000001A */ b .L7F0776EC -/* 0AC1B4 7F077684 AF0F0000 */ sw $t7, ($t8) #gDPSetCombineMode() -.L7F077688: -/* 0AC1B8 7F077688 34018000 */ li $at, 32768 -/* 0AC1BC 7F07768C 12410006 */ beq $s2, $at, .L7F0776A8 -/* 0AC1C0 7F077690 8FB8016C */ lw $t8, 0x16c($sp) -/* 0AC1C4 7F077694 3401C000 */ li $at, 49152 -/* 0AC1C8 7F077698 1241000C */ beq $s2, $at, .L7F0776CC -/* 0AC1CC 7F07769C 8FB8016C */ lw $t8, 0x16c($sp) -/* 0AC1D0 7F0776A0 10000013 */ b .L7F0776F0 -/* 0AC1D4 7F0776A4 8FA2016C */ lw $v0, 0x16c($sp) -.L7F0776A8: -/* 0AC1D8 7F0776A8 27190008 */ addiu $t9, $t8, 8 -/* 0AC1DC 7F0776AC 3C0FFC12 */ lui $t7, (0xFC121824 >> 16) # lui $t7, 0xfc12 -/* 0AC1E0 7F0776B0 3C0EFF33 */ lui $t6, (0xFF33FFFF >> 16) # lui $t6, 0xff33 -/* 0AC1E4 7F0776B4 35CEFFFF */ ori $t6, (0xFF33FFFF & 0xFFFF) # ori $t6, $t6, 0xffff -/* 0AC1E8 7F0776B8 35EF1824 */ ori $t7, (0xFC121824 & 0xFFFF) # ori $t7, $t7, 0x1824 -/* 0AC1EC 7F0776BC AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC1F0 7F0776C0 AF0E0004 */ sw $t6, 4($t8) -/* 0AC1F4 7F0776C4 10000009 */ b .L7F0776EC -/* 0AC1F8 7F0776C8 AF0F0000 */ sw $t7, ($t8) #gDPSetCombineMode() -.L7F0776CC: -/* 0AC1FC 7F0776CC 27190008 */ addiu $t9, $t8, 8 -/* 0AC200 7F0776D0 AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC204 7F0776D4 3C0FFC12 */ lui $t7, (0xFC121824 >> 16) # lui $t7, 0xfc12 -/* 0AC208 7F0776D8 3C0EFF33 */ lui $t6, (0xFF33FFFF >> 16) # lui $t6, 0xff33 -/* 0AC20C 7F0776DC 35CEFFFF */ ori $t6, (0xFF33FFFF & 0xFFFF) # ori $t6, $t6, 0xffff -/* 0AC210 7F0776E0 35EF1824 */ ori $t7, (0xFC121824 & 0xFFFF) # ori $t7, $t7, 0x1824 -/* 0AC214 7F0776E4 AF0F0000 */ sw $t7, ($t8) -/* 0AC218 7F0776E8 AF0E0004 */ sw $t6, 4($t8) #gDPSetCombineMode() -.L7F0776EC: -/* 0AC21C 7F0776EC 8FA2016C */ lw $v0, 0x16c($sp) -.L7F0776F0: -/* 0AC220 7F0776F0 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0AC224 7F0776F4 32230007 */ andi $v1, $s1, 7 -/* 0AC228 7F0776F8 00037D40 */ sll $t7, $v1, 0x15 -/* 0AC22C 7F0776FC 24590008 */ addiu $t9, $v0, 8 -/* 0AC230 7F077700 AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC234 7F077704 3C01FD00 */ lui $at, 0xfd00 -/* 0AC238 7F077708 01E17025 */ or $t6, $t7, $at -/* 0AC23C 7F07770C 01E01825 */ move $v1, $t7 -/* 0AC240 7F077710 33190003 */ andi $t9, $t8, 3 -/* 0AC244 7F077714 00197CC0 */ sll $t7, $t9, 0x13 -/* 0AC248 7F077718 01CFC025 */ or $t8, $t6, $t7 -/* 0AC24C 7F07771C AC580000 */ sw $t8, ($v0) -/* 0AC250 7F077720 8EF90000 */ lw $t9, ($s7) -/* 0AC254 7F077724 3C01F500 */ lui $at, 0xf500 -/* 0AC258 7F077728 00614825 */ or $t1, $v1, $at -/* 0AC25C 7F07772C AC590004 */ sw $t9, 4($v0) -/* 0AC260 7F077730 8FA4016C */ lw $a0, 0x16c($sp) -/* 0AC264 7F077734 8FB800C0 */ lw $t8, 0xc0($sp) -/* 0AC268 7F077738 3C0A0700 */ lui $t2, 0x700 -/* 0AC26C 7F07773C 248F0008 */ addiu $t7, $a0, 8 -/* 0AC270 7F077740 AFAF016C */ sw $t7, 0x16c($sp) -/* 0AC274 7F077744 33190003 */ andi $t9, $t8, 3 -/* 0AC278 7F077748 001974C0 */ sll $t6, $t9, 0x13 -/* 0AC27C 7F07774C 012E7825 */ or $t7, $t1, $t6 -/* 0AC280 7F077750 AC8F0000 */ sw $t7, ($a0) -/* 0AC284 7F077754 AC8A0004 */ sw $t2, 4($a0) -/* 0AC288 7F077758 8FB8016C */ lw $t8, 0x16c($sp) -/* 0AC28C 7F07775C 3C0DE600 */ lui $t5, 0xe600 -/* 0AC290 7F077760 240707FF */ li $a3, 2047 -/* 0AC294 7F077764 27190008 */ addiu $t9, $t8, 8 -/* 0AC298 7F077768 AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC29C 7F07776C AF000004 */ sw $zero, 4($t8) -/* 0AC2A0 7F077770 AF0D0000 */ sw $t5, ($t8) -/* 0AC2A4 7F077774 8FA6016C */ lw $a2, 0x16c($sp) -/* 0AC2A8 7F077778 3C18F300 */ lui $t8, 0xf300 -/* 0AC2AC 7F07777C 24CF0008 */ addiu $t7, $a2, 8 -/* 0AC2B0 7F077780 AFAF016C */ sw $t7, 0x16c($sp) -/* 0AC2B4 7F077784 ACD80000 */ sw $t8, ($a2) -/* 0AC2B8 7F077788 8FB900BC */ lw $t9, 0xbc($sp) -/* 0AC2BC 7F07778C 2B2107FF */ slti $at, $t9, 0x7ff -/* 0AC2C0 7F077790 10200003 */ beqz $at, .L7F0777A0 -/* 0AC2C4 7F077794 00000000 */ nop -/* 0AC2C8 7F077798 10000001 */ b .L7F0777A0 -/* 0AC2CC 7F07779C 03203825 */ move $a3, $t9 -.L7F0777A0: -/* 0AC2D0 7F0777A0 30EE0FFF */ andi $t6, $a3, 0xfff -/* 0AC2D4 7F0777A4 000E7B00 */ sll $t7, $t6, 0xc -/* 0AC2D8 7F0777A8 01EAC025 */ or $t8, $t7, $t2 -/* 0AC2DC 7F0777AC ACD80004 */ sw $t8, 4($a2) -/* 0AC2E0 7F0777B0 8FB9016C */ lw $t9, 0x16c($sp) -/* 0AC2E4 7F0777B4 3C0CE700 */ lui $t4, 0xe700 -/* 0AC2E8 7F0777B8 24010002 */ li $at, 2 -/* 0AC2EC 7F0777BC 272E0008 */ addiu $t6, $t9, 8 -/* 0AC2F0 7F0777C0 AFAE016C */ sw $t6, 0x16c($sp) -/* 0AC2F4 7F0777C4 AF200004 */ sw $zero, 4($t9) -/* 0AC2F8 7F0777C8 15010038 */ bne $t0, $at, .L7F0778AC -/* 0AC2FC 7F0777CC AF2C0000 */ sw $t4, ($t9) -/* 0AC300 7F0777D0 8FA300BC */ lw $v1, 0xbc($sp) -/* 0AC304 7F0777D4 92CF000A */ lbu $t7, 0xa($s6) -/* 0AC308 7F0777D8 241803FF */ li $t8, 1023 -/* 0AC30C 7F0777DC 24660001 */ addiu $a2, $v1, 1 -/* 0AC310 7F0777E0 030F1023 */ subu $v0, $t8, $t7 -/* 0AC314 7F0777E4 0046082B */ sltu $at, $v0, $a2 -/* 0AC318 7F0777E8 10200003 */ beqz $at, .L7F0777F8 -/* 0AC31C 7F0777EC 8FB9016C */ lw $t9, 0x16c($sp) -/* 0AC320 7F0777F0 10000002 */ b .L7F0777FC -/* 0AC324 7F0777F4 00403825 */ move $a3, $v0 -.L7F0777F8: -/* 0AC328 7F0777F8 00003825 */ move $a3, $zero -.L7F0777FC: -/* 0AC32C 7F0777FC 272E0008 */ addiu $t6, $t9, 8 -/* 0AC330 7F077800 AFAE016C */ sw $t6, 0x16c($sp) -/* 0AC334 7F077804 3C18F500 */ lui $t8, (0xF5000100 >> 16) # lui $t8, 0xf500 # -/* 0AC338 7F077808 37180100 */ ori $t8, (0xF5000100 & 0xFFFF) # ori $t8, $t8, 0x100 #gDPSetTile() -/* 0AC33C 7F07780C AF380000 */ sw $t8, ($t9) -/* 0AC340 7F077810 AF2A0004 */ sw $t2, 4($t9) -/* 0AC344 7F077814 8FAF016C */ lw $t7, 0x16c($sp) -/* 0AC348 7F077818 00C73023 */ subu $a2, $a2, $a3 -/* 0AC34C 7F07781C 30E503FF */ andi $a1, $a3, 0x3ff -/* 0AC350 7F077820 25F90008 */ addiu $t9, $t7, 8 -/* 0AC354 7F077824 AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC358 7F077828 ADE00004 */ sw $zero, 4($t7) -/* 0AC35C 7F07782C ADED0000 */ sw $t5, ($t7) -/* 0AC360 7F077830 8FA4016C */ lw $a0, 0x16c($sp) -/* 0AC364 7F077834 30D903FF */ andi $t9, $a2, 0x3ff -/* 0AC368 7F077838 00197380 */ sll $t6, $t9, 0xe -/* 0AC36C 7F07783C 24980008 */ addiu $t8, $a0, 8 -/* 0AC370 7F077840 AFB8016C */ sw $t8, 0x16c($sp) -/* 0AC374 7F077844 00057880 */ sll $t7, $a1, 2 -/* 0AC378 7F077848 3C01F000 */ lui $at, 0xf000 -/* 0AC37C 7F07784C 01C1C025 */ or $t8, $t6, $at -/* 0AC380 7F077850 01E02825 */ move $a1, $t7 -/* 0AC384 7F077854 030F7825 */ or $t7, $t8, $t7 -/* 0AC388 7F077858 AC8F0000 */ sw $t7, ($a0) -/* 0AC38C 7F07785C 92D9000A */ lbu $t9, 0xa($s6) -/* 0AC390 7F077860 03267021 */ addu $t6, $t9, $a2 -/* 0AC394 7F077864 31D803FF */ andi $t8, $t6, 0x3ff -/* 0AC398 7F077868 00187B80 */ sll $t7, $t8, 0xe -/* 0AC39C 7F07786C 01EAC825 */ or $t9, $t7, $t2 -/* 0AC3A0 7F077870 03257025 */ or $t6, $t9, $a1 -/* 0AC3A4 7F077874 AC8E0004 */ sw $t6, 4($a0) -/* 0AC3A8 7F077878 8FB8016C */ lw $t8, 0x16c($sp) -/* 0AC3AC 7F07787C 270F0008 */ addiu $t7, $t8, 8 -/* 0AC3B0 7F077880 AFAF016C */ sw $t7, 0x16c($sp) -/* 0AC3B4 7F077884 AF000004 */ sw $zero, 4($t8) -/* 0AC3B8 7F077888 AF0C0000 */ sw $t4, ($t8) -/* 0AC3BC 7F07788C 8FB9016C */ lw $t9, 0x16c($sp) -/* 0AC3C0 7F077890 3C18BA00 */ lui $t8, (0xBA000E02 >> 16) # lui $t8, 0xba00 # -/* 0AC3C4 7F077894 37180E02 */ ori $t8, (0xBA000E02 & 0xFFFF) # ori $t8, $t8, 0xe02 #gDPSetTextureLUT() -/* 0AC3C8 7F077898 272E0008 */ addiu $t6, $t9, 8 -/* 0AC3CC 7F07789C AFAE016C */ sw $t6, 0x16c($sp) -/* 0AC3D0 7F0778A0 AF320004 */ sw $s2, 4($t9) -/* 0AC3D4 7F0778A4 10000008 */ b .L7F0778C8 -/* 0AC3D8 7F0778A8 AF380000 */ sw $t8, ($t9) -.L7F0778AC: -/* 0AC3DC 7F0778AC 8FAF016C */ lw $t7, 0x16c($sp) -/* 0AC3E0 7F0778B0 3C0EBA00 */ lui $t6, (0xBA000E02 >> 16) # lui $t6, 0xba00 # -/* 0AC3E4 7F0778B4 35CE0E02 */ ori $t6, (0xBA000E02 & 0xFFFF) # ori $t6, $t6, 0xe02 #gDPSetTextureLUT() -/* 0AC3E8 7F0778B8 25F90008 */ addiu $t9, $t7, 8 -/* 0AC3EC 7F0778BC AFB9016C */ sw $t9, 0x16c($sp) -/* 0AC3F0 7F0778C0 ADE00004 */ sw $zero, 4($t7) -/* 0AC3F4 7F0778C4 ADEE0000 */ sw $t6, ($t7) -.L7F0778C8: -/* 0AC3F8 7F0778C8 8FB800CC */ lw $t8, 0xcc($sp) -/* 0AC3FC 7F0778CC 8FA70180 */ lw $a3, 0x180($sp) -/* 0AC400 7F0778D0 00008825 */ move $s1, $zero -/* 0AC404 7F0778D4 1B0000AA */ blez $t8, .L7F077B80 -/* 0AC408 7F0778D8 30E40FFF */ andi $a0, $a3, 0xfff -/* 0AC40C 7F0778DC 93B300CA */ lbu $s3, 0xca($sp) -/* 0AC410 7F0778E0 00047B00 */ sll $t7, $a0, 0xc -/* 0AC414 7F0778E4 3C01F200 */ lui $at, 0xf200 -/* 0AC418 7F0778E8 01E1C825 */ or $t9, $t7, $at -/* 0AC41C 7F0778EC 03247025 */ or $t6, $t9, $a0 -/* 0AC420 7F0778F0 326F0003 */ andi $t7, $s3, 3 -/* 0AC424 7F0778F4 000FCCC0 */ sll $t9, $t7, 0x13 -/* 0AC428 7F0778F8 01399025 */ or $s2, $t1, $t9 -/* 0AC42C 7F0778FC AFAE0050 */ sw $t6, 0x50($sp) -/* 0AC430 7F077900 8FB00064 */ lw $s0, 0x64($sp) -.L7F077904: -/* 0AC434 7F077904 1A200018 */ blez $s1, .L7F077968 -/* 0AC438 7F077908 8FA70180 */ lw $a3, 0x180($sp) -/* 0AC43C 7F07790C 12C0000F */ beqz $s6, .L7F07794C -/* 0AC440 7F077910 2AA10002 */ slti $at, $s5, 2 -/* 0AC444 7F077914 8ECE000C */ lw $t6, 0xc($s6) -/* 0AC448 7F077918 02C02025 */ move $a0, $s6 -/* 0AC44C 7F07791C 000E7880 */ sll $t7, $t6, 2 -/* 0AC450 7F077920 05E1000A */ bgez $t7, .L7F07794C -/* 0AC454 7F077924 00000000 */ nop -/* 0AC458 7F077928 0FC331C5 */ jal texGetWidthAtLod -/* 0AC45C 7F07792C 02202825 */ move $a1, $s1 -/* 0AC460 7F077930 0040A825 */ move $s5, $v0 -/* 0AC464 7F077934 02C02025 */ move $a0, $s6 -/* 0AC468 7F077938 0FC331FF */ jal texGetHeightAtLod -/* 0AC46C 7F07793C 02202825 */ move $a1, $s1 -/* 0AC470 7F077940 0040A025 */ move $s4, $v0 -/* 0AC474 7F077944 10000008 */ b .L7F077968 -/* 0AC478 7F077948 8FA70180 */ lw $a3, 0x180($sp) -.L7F07794C: -/* 0AC47C 7F07794C 14200002 */ bnez $at, .L7F077958 -/* 0AC480 7F077950 0015C843 */ sra $t9, $s5, 1 -/* 0AC484 7F077954 0320A825 */ move $s5, $t9 -.L7F077958: -/* 0AC488 7F077958 2A810002 */ slti $at, $s4, 2 -/* 0AC48C 7F07795C 14200002 */ bnez $at, .L7F077968 -/* 0AC490 7F077960 00147043 */ sra $t6, $s4, 1 -/* 0AC494 7F077964 01C0A025 */ move $s4, $t6 -.L7F077968: -/* 0AC498 7F077968 26B8FFFF */ addiu $t8, $s5, -1 -/* 0AC49C 7F07796C 00187880 */ sll $t7, $t8, 2 -/* 0AC4A0 7F077970 01E7C821 */ addu $t9, $t7, $a3 -/* 0AC4A4 7F077974 332E0FFF */ andi $t6, $t9, 0xfff -/* 0AC4A8 7F077978 000EC300 */ sll $t8, $t6, 0xc -/* 0AC4AC 7F07797C 268FFFFF */ addiu $t7, $s4, -1 -/* 0AC4B0 7F077980 000FC880 */ sll $t9, $t7, 2 -/* 0AC4B4 7F077984 03277021 */ addu $t6, $t9, $a3 -/* 0AC4B8 7F077988 AFB80054 */ sw $t8, 0x54($sp) -/* 0AC4BC 7F07798C 31D80FFF */ andi $t8, $t6, 0xfff -/* 0AC4C0 7F077990 12600036 */ beqz $s3, .L7F077A6C -/* 0AC4C4 7F077994 AFB8004C */ sw $t8, 0x4c($sp) -/* 0AC4C8 7F077998 24010001 */ li $at, 1 -/* 0AC4CC 7F07799C 12610026 */ beq $s3, $at, .L7F077A38 -/* 0AC4D0 7F0779A0 24010002 */ li $at, 2 -/* 0AC4D4 7F0779A4 12610017 */ beq $s3, $at, .L7F077A04 -/* 0AC4D8 7F0779A8 24010003 */ li $at, 3 -/* 0AC4DC 7F0779AC 52610009 */ beql $s3, $at, .L7F0779D4 -/* 0AC4E0 7F0779B0 26B00003 */ addiu $s0, $s5, 3 -/* 0AC4E4 7F0779B4 02140019 */ multu $s0, $s4 -/* 0AC4E8 7F0779B8 320F01FF */ andi $t7, $s0, 0x1ff -/* 0AC4EC 7F0779BC 000FCA40 */ sll $t9, $t7, 9 -/* 0AC4F0 7F0779C0 02591025 */ or $v0, $s2, $t9 -/* 0AC4F4 7F0779C4 00003012 */ mflo $a2 -/* 0AC4F8 7F0779C8 10000036 */ b .L7F077AA4 -/* 0AC4FC 7F0779CC 8FA3016C */ lw $v1, 0x16c($sp) -/* 0AC500 7F0779D0 26B00003 */ addiu $s0, $s5, 3 -.L7F0779D4: -/* 0AC504 7F0779D4 06010003 */ bgez $s0, .L7F0779E4 -/* 0AC508 7F0779D8 00107083 */ sra $t6, $s0, 2 -/* 0AC50C 7F0779DC 26010003 */ addiu $at, $s0, 3 -/* 0AC510 7F0779E0 00017083 */ sra $t6, $at, 2 -.L7F0779E4: -/* 0AC514 7F0779E4 01D40019 */ multu $t6, $s4 -/* 0AC518 7F0779E8 31D801FF */ andi $t8, $t6, 0x1ff -/* 0AC51C 7F0779EC 00187A40 */ sll $t7, $t8, 9 -/* 0AC520 7F0779F0 01C08025 */ move $s0, $t6 -/* 0AC524 7F0779F4 024F1025 */ or $v0, $s2, $t7 -/* 0AC528 7F0779F8 00003012 */ mflo $a2 -/* 0AC52C 7F0779FC 10000029 */ b .L7F077AA4 -/* 0AC530 7F077A00 8FA3016C */ lw $v1, 0x16c($sp) -.L7F077A04: -/* 0AC534 7F077A04 26B00003 */ addiu $s0, $s5, 3 -/* 0AC538 7F077A08 06010003 */ bgez $s0, .L7F077A18 -/* 0AC53C 7F077A0C 0010C883 */ sra $t9, $s0, 2 -/* 0AC540 7F077A10 26010003 */ addiu $at, $s0, 3 -/* 0AC544 7F077A14 0001C883 */ sra $t9, $at, 2 -.L7F077A18: -/* 0AC548 7F077A18 03340019 */ multu $t9, $s4 -/* 0AC54C 7F077A1C 332E01FF */ andi $t6, $t9, 0x1ff -/* 0AC550 7F077A20 000EC240 */ sll $t8, $t6, 9 -/* 0AC554 7F077A24 03208025 */ move $s0, $t9 -/* 0AC558 7F077A28 02581025 */ or $v0, $s2, $t8 -/* 0AC55C 7F077A2C 00003012 */ mflo $a2 -/* 0AC560 7F077A30 1000001C */ b .L7F077AA4 -/* 0AC564 7F077A34 8FA3016C */ lw $v1, 0x16c($sp) -.L7F077A38: -/* 0AC568 7F077A38 26B00007 */ addiu $s0, $s5, 7 -/* 0AC56C 7F077A3C 06010003 */ bgez $s0, .L7F077A4C -/* 0AC570 7F077A40 001078C3 */ sra $t7, $s0, 3 -/* 0AC574 7F077A44 26010007 */ addiu $at, $s0, 7 -/* 0AC578 7F077A48 000178C3 */ sra $t7, $at, 3 -.L7F077A4C: -/* 0AC57C 7F077A4C 01F40019 */ multu $t7, $s4 -/* 0AC580 7F077A50 31F901FF */ andi $t9, $t7, 0x1ff -/* 0AC584 7F077A54 00197240 */ sll $t6, $t9, 9 -/* 0AC588 7F077A58 01E08025 */ move $s0, $t7 -/* 0AC58C 7F077A5C 024E1025 */ or $v0, $s2, $t6 -/* 0AC590 7F077A60 00003012 */ mflo $a2 -/* 0AC594 7F077A64 1000000F */ b .L7F077AA4 -/* 0AC598 7F077A68 8FA3016C */ lw $v1, 0x16c($sp) -.L7F077A6C: -/* 0AC59C 7F077A6C 26B0000F */ addiu $s0, $s5, 0xf -/* 0AC5A0 7F077A70 06010003 */ bgez $s0, .L7F077A80 -/* 0AC5A4 7F077A74 0010C103 */ sra $t8, $s0, 4 -/* 0AC5A8 7F077A78 2601000F */ addiu $at, $s0, 0xf -/* 0AC5AC 7F077A7C 0001C103 */ sra $t8, $at, 4 -.L7F077A80: -/* 0AC5B0 7F077A80 03140019 */ multu $t8, $s4 -/* 0AC5B4 7F077A84 330F01FF */ andi $t7, $t8, 0x1ff -/* 0AC5B8 7F077A88 000FCA40 */ sll $t9, $t7, 9 -/* 0AC5BC 7F077A8C 03008025 */ move $s0, $t8 -/* 0AC5C0 7F077A90 02591025 */ or $v0, $s2, $t9 -/* 0AC5C4 7F077A94 00003012 */ mflo $a2 -/* 0AC5C8 7F077A98 00000000 */ nop -/* 0AC5CC 7F077A9C 00000000 */ nop -/* 0AC5D0 7F077AA0 8FA3016C */ lw $v1, 0x16c($sp) -.L7F077AA4: -/* 0AC5D4 7F077AA4 8FAF00D0 */ lw $t7, 0xd0($sp) -/* 0AC5D8 7F077AA8 02802025 */ move $a0, $s4 -/* 0AC5DC 7F077AAC 24780008 */ addiu $t8, $v1, 8 -/* 0AC5E0 7F077AB0 31F901FF */ andi $t9, $t7, 0x1ff -/* 0AC5E4 7F077AB4 00597025 */ or $t6, $v0, $t9 -/* 0AC5E8 7F077AB8 AFB8016C */ sw $t8, 0x16c($sp) -/* 0AC5EC 7F077ABC AC6E0000 */ sw $t6, ($v1) -/* 0AC5F0 7F077AC0 AFA6003C */ sw $a2, 0x3c($sp) -/* 0AC5F4 7F077AC4 0FC1D968 */ jal is_less_than_certain_power_of_2 -/* 0AC5F8 7F077AC8 AFA30060 */ sw $v1, 0x60($sp) -/* 0AC5FC 7F077ACC 02A02025 */ move $a0, $s5 -/* 0AC600 7F077AD0 0FC1D968 */ jal is_less_than_certain_power_of_2 -/* 0AC604 7F077AD4 AFA20058 */ sw $v0, 0x58($sp) -/* 0AC608 7F077AD8 32230007 */ andi $v1, $s1, 7 -/* 0AC60C 7F077ADC 0003C600 */ sll $t8, $v1, 0x18 -/* 0AC610 7F077AE0 304F000F */ andi $t7, $v0, 0xf -/* 0AC614 7F077AE4 000FC900 */ sll $t9, $t7, 4 -/* 0AC618 7F077AE8 03387025 */ or $t6, $t9, $t8 -/* 0AC61C 7F077AEC 03001825 */ move $v1, $t8 -/* 0AC620 7F077AF0 92F8000A */ lbu $t8, 0xa($s7) -/* 0AC624 7F077AF4 8FA70058 */ lw $a3, 0x58($sp) -/* 0AC628 7F077AF8 3224000F */ andi $a0, $s1, 0xf -/* 0AC62C 7F077AFC 330F0003 */ andi $t7, $t8, 3 -/* 0AC630 7F077B00 000FCC80 */ sll $t9, $t7, 0x12 -/* 0AC634 7F077B04 01D9C025 */ or $t8, $t6, $t9 -/* 0AC638 7F077B08 30EF000F */ andi $t7, $a3, 0xf -/* 0AC63C 7F077B0C 000F7380 */ sll $t6, $t7, 0xe -/* 0AC640 7F077B10 030EC825 */ or $t9, $t8, $t6 -/* 0AC644 7F077B14 92EE0009 */ lbu $t6, 9($s7) -/* 0AC648 7F077B18 00047A80 */ sll $t7, $a0, 0xa -/* 0AC64C 7F077B1C 032FC025 */ or $t8, $t9, $t7 -/* 0AC650 7F077B20 31D90003 */ andi $t9, $t6, 3 -/* 0AC654 7F077B24 00197A00 */ sll $t7, $t9, 8 -/* 0AC658 7F077B28 030F7025 */ or $t6, $t8, $t7 -/* 0AC65C 7F077B2C 8FB80060 */ lw $t8, 0x60($sp) -/* 0AC660 7F077B30 8FA6003C */ lw $a2, 0x3c($sp) -/* 0AC664 7F077B34 01C4C825 */ or $t9, $t6, $a0 -/* 0AC668 7F077B38 AF190004 */ sw $t9, 4($t8) -/* 0AC66C 7F077B3C 8FA5016C */ lw $a1, 0x16c($sp) -/* 0AC670 7F077B40 8FB90050 */ lw $t9, 0x50($sp) -/* 0AC674 7F077B44 26310001 */ addiu $s1, $s1, 1 -/* 0AC678 7F077B48 24AE0008 */ addiu $t6, $a1, 8 -/* 0AC67C 7F077B4C AFAE016C */ sw $t6, 0x16c($sp) -/* 0AC680 7F077B50 ACB90000 */ sw $t9, ($a1) -/* 0AC684 7F077B54 8FB80054 */ lw $t8, 0x54($sp) -/* 0AC688 7F077B58 8FAE004C */ lw $t6, 0x4c($sp) -/* 0AC68C 7F077B5C 00787825 */ or $t7, $v1, $t8 -/* 0AC690 7F077B60 01EEC825 */ or $t9, $t7, $t6 -/* 0AC694 7F077B64 ACB90004 */ sw $t9, 4($a1) -/* 0AC698 7F077B68 8FB800D0 */ lw $t8, 0xd0($sp) -/* 0AC69C 7F077B6C 8FAE00CC */ lw $t6, 0xcc($sp) -/* 0AC6A0 7F077B70 03067821 */ addu $t7, $t8, $a2 -/* 0AC6A4 7F077B74 162EFF63 */ bne $s1, $t6, .L7F077904 -/* 0AC6A8 7F077B78 AFAF00D0 */ sw $t7, 0xd0($sp) -/* 0AC6AC 7F077B7C AFB00064 */ sw $s0, 0x64($sp) -.L7F077B80: -/* 0AC6B0 7F077B80 8FB9016C */ lw $t9, 0x16c($sp) -/* 0AC6B4 7F077B84 8FB80170 */ lw $t8, 0x170($sp) -/* 0AC6B8 7F077B88 AF190000 */ sw $t9, ($t8) -/* 0AC6BC 7F077B8C 8FBF0034 */ lw $ra, 0x34($sp) -/* 0AC6C0 7F077B90 8FB70030 */ lw $s7, 0x30($sp) -/* 0AC6C4 7F077B94 8FB6002C */ lw $s6, 0x2c($sp) -/* 0AC6C8 7F077B98 8FB50028 */ lw $s5, 0x28($sp) -/* 0AC6CC 7F077B9C 8FB40024 */ lw $s4, 0x24($sp) -/* 0AC6D0 7F077BA0 8FB30020 */ lw $s3, 0x20($sp) -/* 0AC6D4 7F077BA4 8FB2001C */ lw $s2, 0x1c($sp) -/* 0AC6D8 7F077BA8 8FB10018 */ lw $s1, 0x18($sp) -/* 0AC6DC 7F077BAC 8FB00014 */ lw $s0, 0x14($sp) -/* 0AC6E0 7F077BB0 03E00008 */ jr $ra -/* 0AC6E4 7F077BB4 27BD0170 */ addiu $sp, $sp, 0x170 -) -#endif - - -void sub_GAME_7F077BB8(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { +/** + * Unreferenced. +*/ +void sub_GAME_7F077BB8(s32 arg0, s32 arg1, s32 arg2, s32 arg3) +{ return; } diff --git a/src/game/othermodemicrocode.h b/src/game/othermodemicrocode.h index 070f81b..6aaee35 100644 --- a/src/game/othermodemicrocode.h +++ b/src/game/othermodemicrocode.h @@ -3,6 +3,11 @@ #include #include "bondview.h" -void likely_generate_DL_for_image_declaration(Gfx**, struct sImageTableEntry*, s32, s32, s32); +#include "bondtypes.h" + + +#define NUM_TEXTURES 0xBB9U + +void texSelect(Gfx **gdlptr, struct sImageTableEntry *tconfig, u32 arg2, s32 arg3, u32 ulst); #endif diff --git a/src/game/padhalllv.h b/src/game/padhalllv.h index 89f8b0a..e1323b7 100644 --- a/src/game/padhalllv.h +++ b/src/game/padhalllv.h @@ -1,7 +1,8 @@ #ifndef _PADHALLLV_H_ #define _PADHALLLV_H_ #include +#include "bondtypes.h" - +void sub_GAME_7F08F438(waygroup *groupa, waygroup *groupb, waypoint **pointa, waypoint **pointb); #endif diff --git a/src/game/player.c b/src/game/player.c index 18d8404..962f095 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -44,7 +44,7 @@ void sub_GAME_7F093880(f32 offset_x, f32 offset_y, coord3d* out) { coords.x = getPlayer_c_screenleft() + offset_x; screen_top = getPlayer_c_screentop(); coords.y = fogGetCurrentEnvironmentp()->WaterConcavity + (offset_y + screen_top); - sub_GAME_7F077EEC(&coords, out, 100.0f); + transformAndNormalizeByLength2Dto3D(&coords, out, 100.0f); mtx4RotateVecInPlace(player_mtxf, out->f); } @@ -840,7 +840,7 @@ Gfx *skyRender(Gfx *gdl) { gDPPipeSync(gdl++); - likely_generate_DL_for_image_declaration(&gdl, &skywaterimages[fogGetCurrentEnvironmentp()->WaterImageId], 1, 0, 2); + texSelect(&gdl, &skywaterimages[fogGetCurrentEnvironmentp()->WaterImageId], 1, 0, 2); gdl = sub_GAME_7F09343C(gdl, 0); // ??? gDPSetRenderMode(gdl++, G_RM_OPA_SURF, G_RM_OPA_SURF2); @@ -1259,7 +1259,7 @@ Gfx *skyRender(Gfx *gdl) gDPPipeSync(gdl++); - likely_generate_DL_for_image_declaration(&gdl, &skywaterimages[fogGetCurrentEnvironmentp()->SkyImageId], 1, 0, 2); + texSelect(&gdl, &skywaterimages[fogGetCurrentEnvironmentp()->SkyImageId], 1, 0, 2); if (1); diff --git a/src/game/player_2.c b/src/game/player_2.c index 737a43e..60f544f 100644 --- a/src/game/player_2.c +++ b/src/game/player_2.c @@ -37,40 +37,40 @@ void default_player_perspective_and_height(void) if (0) { } - g_playerPlayerData[0].player_perspective_height = value; - g_playerPlayerData[0].handicap = value; - g_playerPlayerData[1].player_perspective_height = value; - g_playerPlayerData[1].handicap = value; - g_playerPlayerData[2].player_perspective_height = value; - g_playerPlayerData[2].handicap = value; - g_playerPlayerData[3].player_perspective_height = value; - g_playerPlayerData[3].handicap = value; + g_playerPlayerData[PLAYER_1].player_perspective_height = value; + g_playerPlayerData[PLAYER_1].handicap = value; + g_playerPlayerData[PLAYER_2].player_perspective_height = value; + g_playerPlayerData[PLAYER_2].handicap = value; + g_playerPlayerData[PLAYER_3].player_perspective_height = value; + g_playerPlayerData[PLAYER_3].handicap = value; + g_playerPlayerData[PLAYER_4].player_perspective_height = value; + g_playerPlayerData[PLAYER_4].handicap = value; } -void reset_play_data_ptrs(void) +void reset_play_data_ptrs(void) { - g_playerPointers[0] = 0; - g_playerPointers[1] = 0; - g_playerPointers[2] = 0; - g_playerPointers[3] = 0; - g_CurrentPlayer = 0; - g_playerPerm = 0; - player_num = 0; + g_playerPointers[PLAYER_1] = NULL; + g_playerPointers[PLAYER_2] = NULL; + g_playerPointers[PLAYER_3] = NULL; + g_playerPointers[PLAYER_4] = NULL; + g_CurrentPlayer = NULL; + g_playerPerm = NULL; + player_num = PLAYER_1; random_byte = 0; - array_PLAYER_IDs[0] = 0; - array_PLAYER_IDs[1] = 1; - array_PLAYER_IDs[2] = 2; - array_PLAYER_IDs[3] = 3; + array_PLAYER_IDs[PLAYER_1] = 0; + array_PLAYER_IDs[PLAYER_2] = 1; + array_PLAYER_IDs[PLAYER_3] = 2; + array_PLAYER_IDs[PLAYER_4] = 3; } void init_player_data_ptrs_construct_viewports(s32 playercount) { s32 i; - g_playerPointers[0] = NULL; - g_playerPointers[1] = NULL; - g_playerPointers[2] = NULL; - g_playerPointers[3] = NULL; + g_playerPointers[PLAYER_1] = NULL; + g_playerPointers[PLAYER_2] = NULL; + g_playerPointers[PLAYER_3] = NULL; + g_playerPointers[PLAYER_4] = NULL; random_byte = (s32) (randomGetNext() & 0xFF); if (playercount > 0) { @@ -78,11 +78,11 @@ void init_player_data_ptrs_construct_viewports(s32 playercount) { initBONDdataforPlayer(i); } - set_cur_player(0); + set_cur_player(PLAYER_1); return; } - initBONDdataforPlayer(0); - set_cur_player(0); + initBONDdataforPlayer(PLAYER_1); + set_cur_player(PLAYER_1); set_cur_player_screen_size(viGetViewWidth(), viGetViewHeight()); set_cur_player_viewport_size(viGetViewLeft(), viGetViewTop()); } @@ -104,12 +104,18 @@ void initBONDdataforPlayer(s32 player_num) s32 i; struct hand default_hand; s32 one; - +#ifdef DEBUG + assert(players[num]==NULL); //according to assert, this file name is "player.c" +#endif default_hand = *((struct hand*)D_8003FDA0); #if defined(VERSION_US) || defined(VERSION_JP) - g_playerPointers[player_num] = mempAllocBytesInBank(0x2A80U, 4U); + g_playerPointers[player_num] = mempAllocBytesInBank(0x2A80U, MEMPOOL_STAGE); #elif defined(VERSION_EU) - g_playerPointers[player_num] = mempAllocBytesInBank(0x2A70U, 4U); + g_playerPointers[player_num] = mempAllocBytesInBank(0x2A70U, MEMPOOL_STAGE); +#endif + +#ifdef DEBUG + assert(players[num]!=NULL); #endif g_playerPointers[player_num]->unknown = 0; @@ -150,15 +156,15 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->swaytarget = 0.0f; g_playerPointers[player_num]->swayoffset0 = 0.0f; g_playerPointers[player_num]->swayoffset2 = 0.0f; - g_playerPointers[player_num]->crouchpos = 2; - g_playerPointers[player_num]->autocrouchpos = 2; + g_playerPointers[player_num]->crouchpos = CROUCH_STAND; + g_playerPointers[player_num]->autocrouchpos = CROUCH_STAND; g_playerPointers[player_num]->ducking_height_offset = 0.0f; g_playerPointers[player_num]->field_A4 = 0.0f; g_playerPointers[player_num]->prop = NULL; g_playerPointers[player_num]->field_AC = 1; g_playerPointers[player_num]->field_D0 = 0; g_playerPointers[player_num]->ptr_char_objectinstance = NULL; - g_playerPointers[player_num]->bonddead = 0; + g_playerPointers[player_num]->bonddead = FALSE; g_playerPointers[player_num]->bondhealth = 1.0f; g_playerPointers[player_num]->bondarmour = 0.0f; g_playerPointers[player_num]->oldhealth = 1.0f; @@ -170,17 +176,17 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->field_104 = 0; g_playerPointers[player_num]->field_108 = 0; g_playerPointers[player_num]->field_10C = 0; - g_playerPointers[player_num]->movecentrerelease = 0; - g_playerPointers[player_num]->lookaheadcentreenabled = 1; - g_playerPointers[player_num]->automovecentreenabled = 1; - g_playerPointers[player_num]->fastmovecentreenabled = 0; - g_playerPointers[player_num]->automovecentre = 1; - g_playerPointers[player_num]->insightaimmode = 0; - g_playerPointers[player_num]->autoyaimenabled = 1; + g_playerPointers[player_num]->movecentrerelease = FALSE; + g_playerPointers[player_num]->lookaheadcentreenabled = TRUE; + g_playerPointers[player_num]->automovecentreenabled = TRUE; + g_playerPointers[player_num]->fastmovecentreenabled = FALSE; + g_playerPointers[player_num]->automovecentre = TRUE; + g_playerPointers[player_num]->insightaimmode = FALSE; + g_playerPointers[player_num]->autoyaimenabled = TRUE; g_playerPointers[player_num]->autoaimy = 0.0f; g_playerPointers[player_num]->autoaim_target_y = NULL; g_playerPointers[player_num]->autoyaimtime60 = -1; - g_playerPointers[player_num]->autoxaimenabled = 1; + g_playerPointers[player_num]->autoxaimenabled = TRUE; g_playerPointers[player_num]->autoaimx = 0.0f; g_playerPointers[player_num]->autoaim_target_x = NULL; g_playerPointers[player_num]->autoxaimtime60 = -1; @@ -199,7 +205,7 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->speedsideways = 0.0f; g_playerPointers[player_num]->speedstrafe = 0.0f; g_playerPointers[player_num]->speedforwards = 0.0f; - g_playerPointers[player_num]->field_2A4C = 0.0f; + g_playerPointers[player_num]->speedgo = 0.0f; g_playerPointers[player_num]->speedboost = 1.0f; g_playerPointers[player_num]->bondshotspeed.x = 0.0f; g_playerPointers[player_num]->bondshotspeed.y = 0.0f; @@ -211,10 +217,10 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->bondbreathing = 0.0f; g_playerPointers[player_num]->field_1A0 = 0; g_playerPointers[player_num]->watch_pause_time = 0; - g_playerPointers[player_num]->field_1C4 = 0; - g_playerPointers[player_num]->watch_animation_state = 0; - g_playerPointers[player_num]->outside_watch_menu = 1; - g_playerPointers[player_num]->open_close_solo_watch_menu = 0; + g_playerPointers[player_num]->timer_1C4 = 0; + g_playerPointers[player_num]->watch_animation_state = WATCH_ANIMATION_0x0; + g_playerPointers[player_num]->outside_watch_menu = TRUE; + g_playerPointers[player_num]->open_close_solo_watch_menu = FALSE; g_playerPointers[player_num]->field_1D4 = 0.0f; g_playerPointers[player_num]->field_1D8 = 0.0f; g_playerPointers[player_num]->pause_watch_position = -25; @@ -224,7 +230,7 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->field_1EC = 0.0f; g_playerPointers[player_num]->field_1F0 = 0.0f; g_playerPointers[player_num]->field_1F4 = 1.0f; - g_playerPointers[player_num]->pausing_flag = 0; + g_playerPointers[player_num]->pausing_flag = FALSE; g_playerPointers[player_num]->pause_starting_angle = 0.0f; g_playerPointers[player_num]->pause_related = 0.0f; g_playerPointers[player_num]->pause_target_angle = 0.0f; @@ -256,15 +262,15 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->colourfadebluenew = 0xFF; g_playerPointers[player_num]->colourfadefracold = 0.0f; g_playerPointers[player_num]->colourfadefracnew = 0.0f; - g_playerPointers[player_num]->bondtype = 0; - g_playerPointers[player_num]->startnewbonddie = 1; - g_playerPointers[player_num]->redbloodfinished = 0; - g_playerPointers[player_num]->deathanimfinished = 0; + g_playerPointers[player_num]->bondtype = CUFF_BLUE; + g_playerPointers[player_num]->startnewbonddie = TRUE; + g_playerPointers[player_num]->redbloodfinished = FALSE; + g_playerPointers[player_num]->deathanimfinished = FALSE; g_playerPointers[player_num]->field_42c = 2; - g_playerPointers[player_num]->controldef = 0; - g_playerPointers[player_num]->resetheadpos = 1; - g_playerPointers[player_num]->resetheadrot = 1; - g_playerPointers[player_num]->resetheadtick = 1; + g_playerPointers[player_num]->controldef = CONTROLLER_CONFIG_HONEY; + g_playerPointers[player_num]->resetheadpos = TRUE; + g_playerPointers[player_num]->resetheadrot = TRUE; + g_playerPointers[player_num]->resetheadtick = TRUE; g_playerPointers[player_num]->headanim = 0; g_playerPointers[player_num]->headdamp = DEFAULT_HEADDAMP; g_playerPointers[player_num]->headwalkingtime60 = 0; @@ -326,19 +332,19 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->viewy = 0x64; g_playerPointers[player_num]->viewleft = 0; g_playerPointers[player_num]->viewtop = 0; - g_playerPointers[player_num]->hand_invisible[0] = 0; - g_playerPointers[player_num]->hand_invisible[1] = 0; - g_playerPointers[player_num]->hand_item[0] = 0; - g_playerPointers[player_num]->hand_item[1] = 0; - g_playerPointers[player_num]->field_2A44[0] = -1; - g_playerPointers[player_num]->field_2A44[1] = -1; - g_playerPointers[player_num]->lock_hand_model[0] = 0; - g_playerPointers[player_num]->lock_hand_model[1] = 0; - g_playerPointers[player_num]->ptr_hand_weapon_buffer[0] = NULL; - g_playerPointers[player_num]->ptr_hand_weapon_buffer[1] = NULL; + g_playerPointers[player_num]->hand_invisible[GUNRIGHT] = 0; + g_playerPointers[player_num]->hand_invisible[GUNLEFT] = 0; + g_playerPointers[player_num]->hand_item[GUNRIGHT] = ITEM_UNARMED; + g_playerPointers[player_num]->hand_item[GUNLEFT] = ITEM_UNARMED; + g_playerPointers[player_num]->field_2A44[GUNRIGHT] = -1; + g_playerPointers[player_num]->field_2A44[GUNLEFT] = -1; + g_playerPointers[player_num]->lock_hand_model[GUNRIGHT] = FALSE; + g_playerPointers[player_num]->lock_hand_model[GUNLEFT] = FALSE; + g_playerPointers[player_num]->ptr_hand_weapon_buffer[GUNRIGHT] = NULL; + g_playerPointers[player_num]->ptr_hand_weapon_buffer[GUNLEFT] = NULL; - g_playerPointers[player_num]->hands[0] = default_hand; - g_playerPointers[player_num]->hands[1] = default_hand; + g_playerPointers[player_num]->hands[GUNRIGHT] = default_hand; + g_playerPointers[player_num]->hands[GUNLEFT] = default_hand; g_playerPointers[player_num]->gunposamplitude = 1.0f; g_playerPointers[player_num]->gunxamplitude = 1.0f; @@ -351,7 +357,7 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->tileColor.rgba[1] = 0xFF; g_playerPointers[player_num]->tileColor.rgba[2] = 0xFF; g_playerPointers[player_num]->tileColor.rgba[3] = 0; - g_playerPointers[player_num]->resetshadecol = 1; + g_playerPointers[player_num]->resetshadecol = TRUE; g_playerPointers[player_num]->aimtype = 0; g_playerPointers[player_num]->crosshair_angle.x = 0.0f; g_playerPointers[player_num]->crosshair_angle.y = 0.0f; @@ -367,8 +373,8 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->field_1010.y = -M_PI_F; g_playerPointers[player_num]->field_1010.z = 0.0f; g_playerPointers[player_num]->last_z_trigger_timer = 0; - g_playerPointers[player_num]->copiedgoldeneye = 0; - g_playerPointers[player_num]->gunammooff = 0; + g_playerPointers[player_num]->copiedgoldeneye = FALSE; + g_playerPointers[player_num]->gunammooff = FALSE; g_playerPointers[player_num]->gunsync = 0.0f; g_playerPointers[player_num]->syncchange = 0.0f; g_playerPointers[player_num]->synccount = 0.0f; @@ -377,7 +383,7 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->field_1080 = 0.0f; g_playerPointers[player_num]->sniper_zoom = 60.0f; g_playerPointers[player_num]->camera_zoom = 60.0f; - g_playerPointers[player_num]->field_108C = -1; + g_playerPointers[player_num]->curRoomIndex = -1; g_playerPointers[player_num]->c_screenwidth = 320.0f; g_playerPointers[player_num]->c_screenheight = DEFAULT_C_SCREENHEIGHT; g_playerPointers[player_num]->c_screenleft = 0.0f; @@ -421,23 +427,23 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->zoominfovynew = 60.0f; g_playerPointers[player_num]->fovy = 60.0f; g_playerPointers[player_num]->aspect = DEFAULT_ASPECT; - g_playerPointers[player_num]->hudmessoff = 0; + g_playerPointers[player_num]->hudmessoff = FALSE; g_playerPointers[player_num]->bondmesscnt = -1; g_playerPointers[player_num]->ptr_inventory_first_in_cycle = NULL; g_playerPointers[player_num]->p_itemcur = NULL; - g_playerPointers[player_num]->equipmaxitems = 0; - g_playerPointers[player_num]->equipallguns = 0; + g_playerPointers[player_num]->equipmaxitems = FALSE; + g_playerPointers[player_num]->equipallguns = FALSE; one = 1; - g_playerPointers[player_num]->equipcuritem = 0; + g_playerPointers[player_num]->equipcuritem = ITEM_UNARMED; g_playerPointers[player_num]->textoverrides = NULL; g_playerPointers[player_num]->field_1280 = 0.0f; g_playerPointers[player_num]->players_cur_animation = 0; g_playerPointers[player_num]->field_1288 = 0.0f; - g_playerPointers[player_num]->bondinvincible = 0; + g_playerPointers[player_num]->bondinvincible = FALSE; g_playerPointers[player_num]->healthDamageType = 7; g_playerPointers[player_num]->field_29BC = 1.0f; g_playerPointers[player_num]->field_29C0 = 0.0f; - g_playerPointers[player_num]->mpmenuon = 0; + g_playerPointers[player_num]->mpmenuon = FALSE; g_playerPointers[player_num]->damagetype = 7; g_playerPointers[player_num]->deathcount = 0; g_playerPointers[player_num]->field_29E0 = random_byte++; @@ -448,24 +454,30 @@ void initBONDdataforPlayer(s32 player_num) g_playerPointers[player_num]->healthdisplaytime = 0; g_playerPointers[player_num]->field_2A30 = 0; g_playerPointers[player_num]->field_2A34 = 0; - g_playerPointers[player_num]->cur_item_weapon_getname = 1; + g_playerPointers[player_num]->cur_item_weapon_getname = ITEM_FIST; g_playerPointers[player_num]->actual_health = 1.0f; g_playerPointers[player_num]->actual_armor = 1.0f; - g_playerPointers[player_num]->cur_player_control_type_0 = 0; - g_playerPointers[player_num]->cur_player_control_type_1 = 0; - g_playerPointers[player_num]->cur_player_control_type_2 = 0.0f; + g_playerPointers[player_num]->cur_player_control_type_0 = CONTROLLER_CONFIG_HONEY; + g_playerPointers[player_num]->cur_player_control_type_1 = CONTROLLER_CONFIG_HONEY; + g_playerPointers[player_num]->cur_player_control_type_2 = 0.0f; //CONTROLLER_CONFIG_HONEY g_playerPointers[player_num]->neg_vspacing_for_control_type_entry = 0; g_playerPointers[player_num]->has_set_control_type_data = one; g_playerPointers[player_num]->field_2A6C = 0; g_playerPointers[player_num]->field_2A70 = NULL; - g_VisibleToGuardsFlag = 1; - obj_collision_flag = 1; + g_VisibleToGuardsFlag = TRUE; + obj_collision_flag = TRUE; } void set_cur_player(s32 playernum) { +#ifdef DEBUG + assert(num>=0); + assert(num<4); + assert(players[num]!=NULL); //player.c +#endif + player_num = playernum; g_CurrentPlayer = g_playerPointers[playernum]; g_playerPerm = &g_playerPlayerData[playernum]; @@ -492,9 +504,7 @@ s32 getPlayerPointerIndex(PropRecord* prop) void set_cur_player_screen_size(u32 width, u32 height) { #ifdef XBLADEBUG - if (g_CurrentPlayer == NULL) { - assertPrint_8291E690(".\\ported\\player.cpp",0x25a,"Assertion failed: g_CurrentPlayer"); - } + assert(currentplayer); #endif g_CurrentPlayer->viewx = width; g_CurrentPlayer->viewy = height; @@ -502,9 +512,7 @@ void set_cur_player_screen_size(u32 width, u32 height) { void set_cur_player_viewport_size(u32 ulx, u32 uly) { #ifdef XBLADEBUG - if (g_CurrentPlayer == NULL) { - assertPrint_8291E690(".\\ported\\player.cpp",0x262,"Assertion failed: g_CurrentPlayer"); - } + assert(currentplayer); #endif g_CurrentPlayer->viewleft = ulx; g_CurrentPlayer->viewtop = uly; @@ -512,27 +520,21 @@ void set_cur_player_viewport_size(u32 ulx, u32 uly) { void set_cur_player_fovy(f32 fovy) { #ifdef XBLADEBUG - if (g_CurrentPlayer == NULL) { - assertPrint_8291E690(".\\ported\\player.cpp",0x26a,"Assertion failed: g_CurrentPlayer"); - } + assert(currentplayer); #endif g_CurrentPlayer->fovy = fovy; } void set_cur_player_aspect(f32 aspect) { #ifdef XBLADEBUG - if (g_CurrentPlayer == NULL) { - assertPrint_8291E690(".\\ported\\player.cpp",0x271,"Assertion failed: g_CurrentPlayer"); - } + assert(currentplayer); #endif g_CurrentPlayer->aspect = aspect; } f32 get_cur_player_fovy(void) { #ifdef XBLADEBUG - if (g_CurrentPlayer == NULL) { - assertPrint_8291E690(".\\ported\\player.cpp",0x278,"Assertion failed: g_CurrentPlayer"); - } + assert(currentplayer); #endif return g_CurrentPlayer->fovy; } diff --git a/src/game/prop.c b/src/game/prop.c index 7f03ca4..051d551 100644 --- a/src/game/prop.c +++ b/src/game/prop.c @@ -1,18 +1,30 @@ #include #include -#include "stan.h" +#include "game/mp_weapon.h" +#include "game/player_2.h" +#include "game/bondview_r.h" +#include "bg.h" +#include "bondview_r.h" +#include "chr.h" #include "chrai.h" #include "chrlv.h" #include "chrobjhandler.h" -#include "game/mp_weapon.h" -#include "game/player_2.h" +#include "inititemslots.h" +#include "initobjects.h" +#include "initpathtablesomething.h" +#include "limits.h" #include "loadobjectmodel.h" +#include "lvl_text.h" #include "math_atan2f.h" #include "matrixmath.h" +#include "mp_weapon.h" +#include "ob.h" +#include "objective.h" +#include "objective_status.h" #include "objecthandler.h" +#include "player.h" #include "prop.h" -#include "bg.h" -#include "limits.h" +#include "stan.h" /** * EU .bss 0x80068480 @@ -35,9 +47,21 @@ const u32 only_read_by_stageload[] = { const char aMp_[] = "mp_"; +// forward declarations +s32 load_proptype(PROPDEF_TYPE type); void sub_GAME_7F001BD4(struct BoundPadRecord *pad, struct coord3d *arg1); +void domakedefaultobj(s32 arg0, ObjectRecord *arg1, s32 cmdindex); +void weaponAssignToHome(s32 arg0, WeaponObjRecord* weapon, s32 cmdindex); +void setupHat(s32 arg0, ObjectRecord* hat, s32 cmdindex); +void setupKey(s32 arg0, ObjectRecord* key, s32 cmdindex); +void setupCctv(s32 arg0, CCTVRecord *arg1, s32 cmdindex); +void setupAutogun(s32 stageID, AutogunRecord *autogun, s32 cmdindex); +void setupHangingMonitors(s32 arg0, ObjectRecord* rack, s32 cmdindex); +void setupSingleMonitor(s32 stageID, MonitorObjRecord *monitor, s32 cmdindex); +void setupMultiMonitor(s32 stageID, MultiMonitorObjRecord* monitor, s32 cmdindex); void sub_GAME_7F00324C(struct BoundPadRecord *arg0, s32 *arg1, s32 *arg2, struct coord3d *arg3, struct coord3d *arg4); +void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2); s32 load_proptype(PROPDEF_TYPE type) @@ -45,8 +69,6 @@ s32 load_proptype(PROPDEF_TYPE type) PropDefHeaderRecord *propdef = (PropDefHeaderRecord *) g_CurrentSetup.propDefs; s32 count = 0; - - if (propdef != NULL) { while (propdef->type != PROPDEF_END) @@ -62,556 +84,395 @@ s32 load_proptype(PROPDEF_TYPE type) } - -#ifdef NONMATCHING - -// decomp.me 72% https://decomp.me/scratch/ygs4O - -// perfect dark padGetCentre (pad.c) -void sub_GAME_7F001BD4(struct pad3d *pad, struct coord3d *arg1) +/** + * perfect dark padGetCentre (pad.c) + * + * NTSC address 0x7F001BD4. +*/ +void sub_GAME_7F001BD4(struct BoundPadRecord *pad, struct coord3d *arg1) { - f32 temp_f12; - f32 temp_f14; - f32 temp_f16; - struct coord3d normal; f32 scale; + struct bbox bb; + f32 temp; - normal.f[0] = (pad->up.f[1] * pad->look.f[2]) - (pad->look.f[1] * pad->up.f[2]); - normal.f[1] = (pad->up.f[2] * pad->look.f[0]) - (pad->look.f[2] * pad->up.f[0]); - normal.f[2] = (pad->up.f[0] * pad->look.f[1]) - (pad->look.f[0] * pad->up.f[1]); + bb.zmax = pad->bbox.xmin; + bb.zmin = pad->bbox.xmax; + bb.ymax = pad->bbox.ymin; + bb.ymin = pad->bbox.ymax; + bb.xmax = pad->bbox.zmin; + bb.xmin = pad->bbox.zmax; - scale = 1.0f / sqrtf((normal.f[0] * normal.f[0]) + ((normal.f[1] * normal.f[1]) + (normal.f[2] * normal.f[2]))); + normal.f[0] = (pad->up.f[1] * pad->look.f[2]) - (pad->up.f[2] * pad->look.f[1]); + normal.f[1] = (pad->up.f[2] * pad->look.f[0]) - (pad->up.f[0] * pad->look.f[2]); + normal.f[2] = (pad->up.f[0] * pad->look.f[1]) - (pad->up.f[1] * pad->look.f[0]); + + temp = (normal.f[0] * normal.f[0]) + (normal.f[1] * normal.f[1]) + (normal.f[2] * normal.f[2]); + scale = 1.0f / sqrtf(temp); normal.f[0] *= scale; normal.f[1] *= scale; normal.f[2] *= scale; - temp_f16 = pad->bbox.xmin + pad->bbox.xmax; - temp_f14 = pad->bbox.ymin + pad->bbox.ymax; - temp_f12 = pad->bbox.zmin + pad->bbox.zmax; - arg1->f[0] = pad->pos.f[0] + ( - (temp_f16) * normal.f[0] + - (temp_f14) * pad->up.f[0] + - (temp_f12) * pad->look.f[0]) * 0.5f; + (bb.zmax + bb.zmin) * normal.f[0] + + (bb.ymax + bb.ymin) * pad->up.f[0] + + (bb.xmax + bb.xmin) * pad->look.f[0]) * 0.5f; arg1->f[1] = pad->pos.f[1] + ( - (temp_f16) * normal.f[1] + - (temp_f14) * pad->up.f[1] + - (temp_f12) * pad->look.f[1]) * 0.5f; + (bb.zmax + bb.zmin) * normal.f[1] + + (bb.ymax + bb.ymin) * pad->up.f[1] + + (bb.xmax + bb.xmin) * pad->look.f[1]) * 0.5f; arg1->f[2] = pad->pos.f[2] + ( - (temp_f16) * normal.f[2] + - (temp_f14) * pad->up.f[2] + - (temp_f12) * pad->look.f[2]) * 0.5f; + (bb.zmax + bb.zmin) * normal.f[2] + + (bb.ymax + bb.ymin) * pad->up.f[2] + + (bb.xmax + bb.xmin) * pad->look.f[2]) * 0.5f; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F001BD4 -/* 036704 7F001BD4 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 036708 7F001BD8 AFBF0014 */ sw $ra, 0x14($sp) -/* 03670C 7F001BDC C484002C */ lwc1 $f4, 0x2c($a0) -/* 036710 7F001BE0 E7A40034 */ swc1 $f4, 0x34($sp) -/* 036714 7F001BE4 C4860030 */ lwc1 $f6, 0x30($a0) -/* 036718 7F001BE8 E7A60030 */ swc1 $f6, 0x30($sp) -/* 03671C 7F001BEC C48A0034 */ lwc1 $f10, 0x34($a0) -/* 036720 7F001BF0 E7AA002C */ swc1 $f10, 0x2c($sp) -/* 036724 7F001BF4 C4880038 */ lwc1 $f8, 0x38($a0) -/* 036728 7F001BF8 E7A80028 */ swc1 $f8, 0x28($sp) -/* 03672C 7F001BFC C484003C */ lwc1 $f4, 0x3c($a0) -/* 036730 7F001C00 E7A40024 */ swc1 $f4, 0x24($sp) -/* 036734 7F001C04 C4860040 */ lwc1 $f6, 0x40($a0) -/* 036738 7F001C08 E7A60020 */ swc1 $f6, 0x20($sp) -/* 03673C 7F001C0C C48A0010 */ lwc1 $f10, 0x10($a0) -/* 036740 7F001C10 C4880020 */ lwc1 $f8, 0x20($a0) -/* 036744 7F001C14 C486001C */ lwc1 $f6, 0x1c($a0) -/* 036748 7F001C18 46085102 */ mul.s $f4, $f10, $f8 -/* 03674C 7F001C1C C48A0014 */ lwc1 $f10, 0x14($a0) -/* 036750 7F001C20 460A3202 */ mul.s $f8, $f6, $f10 -/* 036754 7F001C24 46082181 */ sub.s $f6, $f4, $f8 -/* 036758 7F001C28 E7A6003C */ swc1 $f6, 0x3c($sp) -/* 03675C 7F001C2C C4840018 */ lwc1 $f4, 0x18($a0) -/* 036760 7F001C30 C48A0014 */ lwc1 $f10, 0x14($a0) -/* 036764 7F001C34 46045202 */ mul.s $f8, $f10, $f4 -/* 036768 7F001C38 C484000C */ lwc1 $f4, 0xc($a0) -/* 03676C 7F001C3C C48A0020 */ lwc1 $f10, 0x20($a0) -/* 036770 7F001C40 46045282 */ mul.s $f10, $f10, $f4 -/* 036774 7F001C44 460A4101 */ sub.s $f4, $f8, $f10 -/* 036778 7F001C48 E7A40040 */ swc1 $f4, 0x40($sp) -/* 03677C 7F001C4C C48A001C */ lwc1 $f10, 0x1c($a0) -/* 036780 7F001C50 C488000C */ lwc1 $f8, 0xc($a0) -/* 036784 7F001C54 460A4202 */ mul.s $f8, $f8, $f10 -/* 036788 7F001C58 C48A0018 */ lwc1 $f10, 0x18($a0) -/* 03678C 7F001C5C E7A60018 */ swc1 $f6, 0x18($sp) -/* 036790 7F001C60 C4860010 */ lwc1 $f6, 0x10($a0) -/* 036794 7F001C64 AFA5004C */ sw $a1, 0x4c($sp) -/* 036798 7F001C68 AFA40048 */ sw $a0, 0x48($sp) -/* 03679C 7F001C6C 46065282 */ mul.s $f10, $f10, $f6 -/* 0367A0 7F001C70 460A4181 */ sub.s $f6, $f8, $f10 -/* 0367A4 7F001C74 C7A80018 */ lwc1 $f8, 0x18($sp) -/* 0367A8 7F001C78 46084282 */ mul.s $f10, $f8, $f8 -/* 0367AC 7F001C7C E7A60044 */ swc1 $f6, 0x44($sp) -/* 0367B0 7F001C80 46042202 */ mul.s $f8, $f4, $f4 -/* 0367B4 7F001C84 46085100 */ add.s $f4, $f10, $f8 -/* 0367B8 7F001C88 46063282 */ mul.s $f10, $f6, $f6 -/* 0367BC 7F001C8C 0C007DF8 */ jal sqrtf -/* 0367C0 7F001C90 46045300 */ add.s $f12, $f10, $f4 -/* 0367C4 7F001C94 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0367C8 7F001C98 44819000 */ mtc1 $at, $f18 -/* 0367CC 7F001C9C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0367D0 7F001CA0 44814000 */ mtc1 $at, $f8 -/* 0367D4 7F001CA4 C7A6003C */ lwc1 $f6, 0x3c($sp) -/* 0367D8 7F001CA8 C7A40040 */ lwc1 $f4, 0x40($sp) -/* 0367DC 7F001CAC 46004083 */ div.s $f2, $f8, $f0 -/* 0367E0 7F001CB0 8FA40048 */ lw $a0, 0x48($sp) -/* 0367E4 7F001CB4 8FA5004C */ lw $a1, 0x4c($sp) -/* 0367E8 7F001CB8 46023282 */ mul.s $f10, $f6, $f2 -/* 0367EC 7F001CBC C7A60044 */ lwc1 $f6, 0x44($sp) -/* 0367F0 7F001CC0 46022202 */ mul.s $f8, $f4, $f2 -/* 0367F4 7F001CC4 E7AA003C */ swc1 $f10, 0x3c($sp) -/* 0367F8 7F001CC8 46023102 */ mul.s $f4, $f6, $f2 -/* 0367FC 7F001CCC C7A60020 */ lwc1 $f6, 0x20($sp) -/* 036800 7F001CD0 E7A80040 */ swc1 $f8, 0x40($sp) -/* 036804 7F001CD4 C7A80024 */ lwc1 $f8, 0x24($sp) -/* 036808 7F001CD8 46064300 */ add.s $f12, $f8, $f6 -/* 03680C 7F001CDC E7A40044 */ swc1 $f4, 0x44($sp) -/* 036810 7F001CE0 C7A40034 */ lwc1 $f4, 0x34($sp) -/* 036814 7F001CE4 C7A80030 */ lwc1 $f8, 0x30($sp) -/* 036818 7F001CE8 C7A6002C */ lwc1 $f6, 0x2c($sp) -/* 03681C 7F001CEC 46082380 */ add.s $f14, $f4, $f8 -/* 036820 7F001CF0 C7A40028 */ lwc1 $f4, 0x28($sp) -/* 036824 7F001CF4 46043400 */ add.s $f16, $f6, $f4 -/* 036828 7F001CF8 460A7202 */ mul.s $f8, $f14, $f10 -/* 03682C 7F001CFC C486000C */ lwc1 $f6, 0xc($a0) -/* 036830 7F001D00 46068102 */ mul.s $f4, $f16, $f6 -/* 036834 7F001D04 C4860018 */ lwc1 $f6, 0x18($a0) -/* 036838 7F001D08 46044280 */ add.s $f10, $f8, $f4 -/* 03683C 7F001D0C 460C3202 */ mul.s $f8, $f6, $f12 -/* 036840 7F001D10 460A4100 */ add.s $f4, $f8, $f10 -/* 036844 7F001D14 C4880000 */ lwc1 $f8, ($a0) -/* 036848 7F001D18 46122182 */ mul.s $f6, $f4, $f18 -/* 03684C 7F001D1C 46083280 */ add.s $f10, $f6, $f8 -/* 036850 7F001D20 E4AA0000 */ swc1 $f10, ($a1) -/* 036854 7F001D24 C7A40040 */ lwc1 $f4, 0x40($sp) -/* 036858 7F001D28 C4880010 */ lwc1 $f8, 0x10($a0) -/* 03685C 7F001D2C 46047182 */ mul.s $f6, $f14, $f4 -/* 036860 7F001D30 00000000 */ nop -/* 036864 7F001D34 46088282 */ mul.s $f10, $f16, $f8 -/* 036868 7F001D38 C488001C */ lwc1 $f8, 0x1c($a0) -/* 03686C 7F001D3C 460A3100 */ add.s $f4, $f6, $f10 -/* 036870 7F001D40 460C4182 */ mul.s $f6, $f8, $f12 -/* 036874 7F001D44 46043280 */ add.s $f10, $f6, $f4 -/* 036878 7F001D48 C4860004 */ lwc1 $f6, 4($a0) -/* 03687C 7F001D4C 46125202 */ mul.s $f8, $f10, $f18 -/* 036880 7F001D50 46064100 */ add.s $f4, $f8, $f6 -/* 036884 7F001D54 E4A40004 */ swc1 $f4, 4($a1) -/* 036888 7F001D58 C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 03688C 7F001D5C C4860014 */ lwc1 $f6, 0x14($a0) -/* 036890 7F001D60 460A7202 */ mul.s $f8, $f14, $f10 -/* 036894 7F001D64 00000000 */ nop -/* 036898 7F001D68 46068102 */ mul.s $f4, $f16, $f6 -/* 03689C 7F001D6C C4860020 */ lwc1 $f6, 0x20($a0) -/* 0368A0 7F001D70 46044280 */ add.s $f10, $f8, $f4 -/* 0368A4 7F001D74 460C3202 */ mul.s $f8, $f6, $f12 -/* 0368A8 7F001D78 460A4100 */ add.s $f4, $f8, $f10 -/* 0368AC 7F001D7C C4880008 */ lwc1 $f8, 8($a0) -/* 0368B0 7F001D80 46122182 */ mul.s $f6, $f4, $f18 -/* 0368B4 7F001D84 46083280 */ add.s $f10, $f6, $f8 -/* 0368B8 7F001D88 E4AA0008 */ swc1 $f10, 8($a1) -/* 0368BC 7F001D8C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0368C0 7F001D90 27BD0048 */ addiu $sp, $sp, 0x48 -/* 0368C4 7F001D94 03E00008 */ jr $ra -/* 0368C8 7F001D98 00000000 */ nop -) -#endif - - -#ifdef NONMATCHING -// maybe domakedefaultobj +/** + * NTSC address 0x7F001D9C. +*/ void domakedefaultobj(s32 arg0, ObjectRecord *arg1, s32 cmdindex) { + s32 padding; s32 spF0; - ? spE0; - StandTile * spDC; - f32 spD8; - f32 spD4; - f32 spD0; - StandTile * spCC; - Mtxf sp8C; - f32 sp88; - f32 sp84; - f32 sp80; - f32 sp78; - s32 sp74; - ChrRecord * sp6C; - PadRecord * sp64; - PropRecord *sp60; - f32 sp58; - f32 sp54; - f32 sp50; - f32 sp48; - ChrRecord * temp_v0; - Model * monitor->model; - Model * temp_a0_3; - Model * temp_a0_5; - Model * temp_a0_6; - PadRecord * temp_v0_2; - StandTile **temp_a0_4; - f32 temp_f0; - f32 temp_f0_2; - f32 temp_f0_3; - f32 temp_f0_4; - f32 temp_f0_5; - f32 temp_f0_6; - f32 temp_f12; - f32 temp_f12_2; - f32 temp_f12_3; - f32 temp_f16; - f32 temp_f18; - f32 temp_f2; - f32 temp_f2_2; - f32 temp_f2_3; - f32 temp_f2_4; - f32 temp_f2_5; - f32 temp_f2_6; - f32 temp_f6; - s16 temp_a0; - s16 temp_v1_2; - u16 temp_t6; - u32 temp_v1; - u32 temp_v1_3; - u32 temp_v1_4; - void * temp_s0; - void * temp_v0_3; - f32 phi_f6; - s32 phi_v1; - PropRecord *phi_v0; - PropRecord *phi_v0_2; - void * phi_s0; - f32 phi_f6_2; - f32 phi_f16; - f32 phi_f18; - f32 phi_f0; - f32 phi_f14; - f32 phi_f12; - f32 phi_f14_2; - f32 phi_f16_2; - f32 phi_f18_2; - f32 phi_f16_3; - f32 phi_f18_3; - f32 phi_f12_2; - f32 phi_f0_2; + f32 var_f0; + struct coord3d spE0; + struct StandTile *spDC; + struct coord3d spD0; + StandTile *spCC; + Mtxf sp8C; + struct coord3d sp80; + struct PropRecord *var_v0; + f32 sp78; + s32 sp74; + struct BoundPadRecord *var_s0; + ChrRecord *sp6C; + ModelRoData_BoundingBoxRecord *temp_v0_3; + struct PadRecord *sp64; + struct PropRecord *sp60; + s32 padding2; + f32 sp58; + f32 sp54; + f32 sp50; + s32 padding3; + f32 sp48; + + spF0 = arg1->obj; + var_s0 = NULL; + + modelLoad(spF0); + + sp78 = arg1->extrascale * 0.00390625f; + + arg1->damage = *(s32*)&arg1->damage / 65536.0f; - temp_a0 = arg1->obj; - spF0 = temp_a0; - load_model(temp_a0); - temp_t6 = arg1->extrascale; - temp_f6 = temp_t6; - phi_f6 = temp_f6; - phi_s0 = NULL; - if (temp_t6 < 0) - { - phi_f6 = temp_f6 + 4294967296.0f; - } - sp78 = phi_f6 * 0.00390625f; - arg1->mtx.m[1][3] = (bitwise s32)(arg1->mtx.m[1][3] / M_U16_MAX_VALUE_F); - phi_v1 = 1; if (getPlayerCount() >= 2) { sp74 = 1; - if ((get_scenario() == 2) && (arg1->obj == 0x14D)) + + if ((get_scenario() == SCENARIO_TLD) && (arg1->obj == PROP_FLAG)) { - goto block_8; + sp74 = 0; } - sp74 = 1; - if ((get_scenario() == 3) && (arg1->obj == 0xD0)) + else if ((get_scenario() == SCENARIO_MWTGG) && (arg1->obj == PROP_CHRGOLDEN)) { -block_8: - phi_v1 = 0; + sp74 = 0; } - if (phi_v1 != 0) + + if (sp74 != 0) { - arg1->state |= 4; + arg1->state |= 4; // respawn enabled } } - temp_v1 = arg1->flags; - if ((temp_v1 & 0x8000) != 0) + + if (arg1->flags & PROPFLAG_INSIDEANOTHEROBJ) { - if (arg1->type == 8) + if (arg1->type == PROP_TYPE_SMOKE) { - sub_GAME_7F051DD8(arg1, PitemZ_entries[spF0].Header); + sub_GAME_7F051DD8(arg1, PitemZ_entries[spF0].header); } else { - objInitWithModelDef(arg1, PitemZ_entries[spF0].Header); + objInitWithModelDef(arg1, PitemZ_entries[spF0].header); } - monitor->model = arg1->model; - modelSetScale(monitor->model, monitor->model->scale * sp78); - return; + + modelSetScale(arg1->model, arg1->model->scale * sp78); } - if ((temp_v1 & 0x4000) != 0) + else if (arg1->flags & PROPFLAG_ASSIGNEDTOCHR) { - temp_v0 = chrFindByLiteralId(arg1->pad); - sp6C = temp_v0; - if ((temp_v0 != 0) && (temp_v0->prop != 0) && (temp_v0->model != 0)) + sp6C = chrFindByLiteralId(arg1->pad); + + if ((sp6C != NULL) && (sp6C->prop != NULL) && (sp6C->model != NULL)) { - if (arg1->Head.type == 8) + if (arg1->type == 8) { - phi_v0 = sub_GAME_7F051DD8(arg1, PitemZ_entries[spF0].Header); + var_v0 = sub_GAME_7F051DD8(arg1, PitemZ_entries[spF0].header); } else { - phi_v0 = objInitWithModelDef(arg1, PitemZ_entries[spF0].Header); + var_v0 = objInitWithModelDef(arg1, PitemZ_entries[spF0].header); } - temp_a0_3 = arg1->model; - modelSetScale(temp_a0_3, temp_a0_3->scale * sp78); - attachNewChild(phi_v0, sp6C->prop); + + modelSetScale(arg1->model, arg1->model->scale * sp78); + chrpropReparent(var_v0, sp6C->prop); } + #ifdef DEBUG + else + { + osSyncPrintf("domakedefaultobj: no chr number %d for obj number %d!\n",arg1->pad,cmdindex + 1); + } + #endif } else { - temp_v1_2 = arg1->pad; - if (temp_v1_2 < 0x2710) + if (isNotBoundPad(arg1->pad)) { - temp_v0_2 = &g_CurrentSetup.pads[temp_v1_2]; - sp64 = temp_v0_2; - matrix_4x4_7F059908(&sp8C, 0.0f, 0.0f, 0.0f, -temp_v0_2->target.AsArray[0], -temp_v0_2->target.AsArray[1], -temp_v0_2->target.AsArray[2], temp_v0_2->up.AsArray[0], temp_v0_2->up.AsArray[1], temp_v0_2->up.AsArray[2]); - spD0 = sp64->pos.AsArray[0]; - spD4 = sp64->pos.AsArray[1]; - spD8 = sp64->pos.AsArray[2]; - if ((arg1->flags & 2) != 0) + sp64 = &g_CurrentSetup.pads[arg1->pad]; + + matrix_4x4_7F059908(&sp8C, 0.0f, 0.0f, 0.0f, -sp64->look.f[0], -sp64->look.f[1], -sp64->look.f[2], sp64->up.f[0], sp64->up.f[1], sp64->up.f[2]); + + spD0.f[0] = sp64->pos.f[0]; + spD0.f[1] = sp64->pos.f[1]; + spD0.f[2] = sp64->pos.f[2]; + + if (arg1->flags & PROPFLAG_ONSCREEN) { - sp80 = sp64->pos.AsArray[0]; - sp84 = sp64->pos.AsArray[1]; - sp88 = sp64->pos.AsArray[2]; + sp80.f[0] = sp64->pos.f[0]; + sp80.f[1] = sp64->pos.f[1]; + sp80.f[2] = sp64->pos.f[2]; } else { - sp80 = sp64->pos.AsArray[0]; - sp84 = sp64->pos.AsArray[1]; - sp88 = sp64->pos.AsArray[2]; + // same as above? + + sp80.f[0] = sp64->pos.f[0]; + sp80.f[1] = sp64->pos.f[1]; + sp80.f[2] = sp64->pos.f[2]; } + spCC = sp64->stan; } else { - temp_s0 = &g_CurrentSetup.boundpads[temp_v1_2] + 0xFFF59FC0; - matrix_4x4_7F059908(&sp8C, 0.0f, 0.0f, 0.0f, -temp_s0->unk18, -temp_s0->unk1C, -temp_s0->unk20, temp_s0->unkC, temp_s0->unk10, temp_s0->unk14); - phi_s0 = temp_s0; - if ((arg1->flags2 & 1) == 0) + var_s0 = &g_CurrentSetup.boundpads[getBoundPadNum(arg1->pad)]; + + matrix_4x4_7F059908(&sp8C, 0.0f, 0.0f, 0.0f, -var_s0->look.f[0], -var_s0->look.f[1], -var_s0->look.f[2], var_s0->up.f[0], var_s0->up.f[1], var_s0->up.f[2]); + + if (!(arg1->flags2 & PROPFLAG2_00000001)) { - sub_GAME_7F001BD4(temp_s0, &spD0); - temp_a0_4 = &spCC; - sp80 = (temp_s0->unkC * ((temp_s0->unk34 - temp_s0->unk38) * 0.5f)) + spD0; - sp84 = (temp_s0->unk10 * ((temp_s0->unk34 - temp_s0->unk38) * 0.5f)) + spD4; - sp88 = (temp_s0->unk14 * ((temp_s0->unk34 - temp_s0->unk38) * 0.5f)) + spD8; - spCC = temp_s0->unk28; - if (walkTilesBetweenPoints_NoCallback(temp_a0_4, temp_s0->unk0, temp_s0->unk8, spD0, spD8) == 0) + sub_GAME_7F001BD4(var_s0, &spD0); + + sp80.f[0] = spD0.f[0] + (var_s0->up.f[0] * ((var_s0->bbox.ymin - var_s0->bbox.ymax) * 0.5f)); + sp80.f[1] = spD0.f[1] + (var_s0->up.f[1] * ((var_s0->bbox.ymin - var_s0->bbox.ymax) * 0.5f)); + sp80.f[2] = spD0.f[2] + (var_s0->up.f[2] * ((var_s0->bbox.ymin - var_s0->bbox.ymax) * 0.5f)); + + spCC = var_s0->stan; + + if (walkTilesBetweenPoints_NoCallback(&spCC, var_s0->pos.f[0], var_s0->pos.f[2], spD0.f[0], spD0.f[2]) == 0) { - spD0 = temp_s0->unk0; - spD4 = temp_s0->unk4; - spD8 = temp_s0->unk8; - spCC = temp_s0->unk28; - temp_v1_3 = arg1->flags; - if (((temp_v1_3 & 2) == 0) && ((temp_v1_3 & 0x1000) == 0)) + spD0.f[0] = var_s0->pos.f[0]; + spD0.f[1] = var_s0->pos.f[1]; + spD0.f[2] = var_s0->pos.f[2]; + + spCC = var_s0->stan; + + if (!(arg1->flags & PROPFLAG_ONSCREEN) && !(arg1->flags & PROPFLAG_00001000)) { + // removed + #ifdef DEBUG + osSyncPrintf("object number %d not positioned correctly!\n",cmdindex + 1); + #endif } } } else { - spD0 = temp_s0->unk0; - spD4 = temp_s0->unk4; - spD8 = temp_s0->unk8; - spCC = temp_s0->unk28; - sub_GAME_7F001BD4(temp_s0, &sp80); - sp80 += (temp_s0->unk34 - temp_s0->unk38) * 0.5f * temp_s0->unkC; - sp84 += (temp_s0->unk34 - temp_s0->unk38) * 0.5f * temp_s0->unk10; - sp88 += (temp_s0->unk34 - temp_s0->unk38) * 0.5f * temp_s0->unk14; + spD0.f[0] = var_s0->pos.f[0]; + spD0.f[1] = var_s0->pos.f[1]; + spD0.f[2] = var_s0->pos.f[2]; + + spCC = var_s0->stan; + + sub_GAME_7F001BD4(var_s0, &sp80); + + sp80.f[0] += (var_s0->bbox.ymin - var_s0->bbox.ymax) * 0.5f * var_s0->up.f[0]; + sp80.f[1] += (var_s0->bbox.ymin - var_s0->bbox.ymax) * 0.5f * var_s0->up.f[1]; + sp80.f[2] += (var_s0->bbox.ymin - var_s0->bbox.ymax) * 0.5f * var_s0->up.f[2]; } } - if (sub_GAME_7F056850(&spD0, spCC, 0, &spE0, &spDC) != 0) + + if (sub_GAME_7F056850(&spD0, spCC, 0.0f, &spE0, &spDC) != 0) { - if (arg1->Head.type == 8) + if (arg1->type == PROP_TYPE_SMOKE) { - phi_v0_2 = sub_GAME_7F051DD8(arg1, PitemZ_entries[spF0].Header); + sp60 = sub_GAME_7F051DD8(arg1, PitemZ_entries[spF0].header); } else { - phi_v0_2 = objInitWithAutoModel(arg1); + sp60 = objInitWithAutoModel(arg1); } - sp60 = phi_v0_2; - if (phi_s0 != 0) + + if (var_s0 != NULL) { temp_v0_3 = chrobjGetBboxFromObjectRecord(arg1); - if (temp_v0_3 != 0) + if (temp_v0_3 != NULL) { - sp58 = 1.0f; - temp_v1_4 = arg1->flags; - phi_f16_3 = 1.0f; - phi_f18_3 = 1.0f; - phi_f16 = 1.0f; - phi_f18 = 1.0f; - if ((temp_v1_4 & 0x30) != 0) + sp58 = 1.0f; + sp54 = 1.0f; + sp50 = 1.0f; + + if (arg1->flags & (PROPFLAG_00000010 | PROPFLAG_00000020)) { - temp_f2 = temp_v0_3->unk4; - temp_f0 = temp_v0_3->unk8; - if (temp_f2 < temp_f0) + if (temp_v0_3->Bounds.xmin < temp_v0_3->Bounds.xmax) { - if ((temp_v1_4 & 2) != 0) + if (arg1->flags & PROPFLAG_ONSCREEN) { - phi_f6_2 = (phi_s0->unk30 - phi_s0->unk2C) / ((temp_f0 - temp_f2) * arg1->model->scale); + sp58 = (var_s0->bbox.xmax - var_s0->bbox.xmin) / ((temp_v0_3->Bounds.xmax - temp_v0_3->Bounds.xmin) * arg1->model->scale); } else { - phi_f6_2 = (phi_s0->unk30 - phi_s0->unk2C) / ((temp_f0 - temp_f2) * arg1->model->scale); + sp58 = (var_s0->bbox.xmax - var_s0->bbox.xmin) / ((temp_v0_3->Bounds.xmax - temp_v0_3->Bounds.xmin) * arg1->model->scale); } - sp58 = phi_f6_2; } } - if ((temp_v1_4 & 0x50) != 0) + + if (arg1->flags & (PROPFLAG_00000010 | PROPFLAG_00000040)) { - temp_f2_2 = temp_v0_3->unkC; - temp_f0_2 = temp_v0_3->unk10; - if (temp_f2_2 < temp_f0_2) + if (temp_v0_3->Bounds.ymin < temp_v0_3->Bounds.ymax) { - temp_f12 = arg1->model->scale; - if ((temp_v1_4 & 2) != 0) + if (arg1->flags & PROPFLAG_ONSCREEN) { - phi_f18 = (phi_s0->unk40 - phi_s0->unk3C) / ((temp_f0_2 - temp_f2_2) * temp_f12); + sp50 = (var_s0->bbox.zmax - var_s0->bbox.zmin) / ((temp_v0_3->Bounds.ymax - temp_v0_3->Bounds.ymin) * arg1->model->scale); } else { - phi_f16 = (phi_s0->unk38 - phi_s0->unk34) / ((temp_f0_2 - temp_f2_2) * temp_f12); + sp54 = (var_s0->bbox.ymax - var_s0->bbox.ymin) / ((temp_v0_3->Bounds.ymax - temp_v0_3->Bounds.ymin) * arg1->model->scale); } } } - if ((temp_v1_4 & 0x90) != 0) + + if (arg1->flags & (PROPFLAG_00000010 | PROPFLAG_00000080)) { - temp_f2_3 = temp_v0_3->unk14; - temp_f0_3 = temp_v0_3->unk18; - if (temp_f2_3 < temp_f0_3) + if (temp_v0_3->Bounds.zmin < temp_v0_3->Bounds.zmax) { - temp_f12_2 = arg1->model->scale; - if ((temp_v1_4 & 2) != 0) + if (arg1->flags & PROPFLAG_ONSCREEN) { - phi_f16 = (phi_s0->unk38 - phi_s0->unk34) / ((temp_f0_3 - temp_f2_3) * temp_f12_2); + sp54 = (var_s0->bbox.ymax - var_s0->bbox.ymin) / ((temp_v0_3->Bounds.zmax - temp_v0_3->Bounds.zmin) * arg1->model->scale); } else { - phi_f18 = (phi_s0->unk40 - phi_s0->unk3C) / ((temp_f0_3 - temp_f2_3) * temp_f12_2); + sp50 = (var_s0->bbox.zmax - var_s0->bbox.zmin) / ((temp_v0_3->Bounds.zmax - temp_v0_3->Bounds.zmin) * arg1->model->scale); } } } - phi_f0 = sp58; - phi_f12 = sp58; - phi_f16_2 = phi_f16; - phi_f18_2 = phi_f18; - if (phi_f16 < sp58) + + var_f0 = sp58; + + if (sp54 < var_f0) { - phi_f0 = phi_f16; + var_f0 = sp54; } - phi_f0_2 = phi_f0; - if (phi_f18 < phi_f0) + + if (sp50 < var_f0) { - phi_f0_2 = phi_f18; + var_f0 = sp50; } - phi_f14 = sp58; - if (sp58 < phi_f16) + + sp48 = sp58; + + if (sp58 < sp54) { - phi_f14 = phi_f16; + sp48 = sp54; } - phi_f14_2 = phi_f14; - if (phi_f14 < phi_f18) + + if (sp48 < sp50) { - phi_f14_2 = phi_f18; + sp48 = sp50; } - if ((temp_v1_4 & 0x10) != 0) + + if (arg1->flags & PROPFLAG_00000010) { - phi_f12 = phi_f0_2; - phi_f16_2 = phi_f0_2; - phi_f18_2 = phi_f0_2; + sp50 = var_f0; + sp54 = var_f0; + sp58 = var_f0; } else { - if ((temp_v1_4 & 0x20) == 0) + if (!(arg1->flags & PROPFLAG_00000020)) { - temp_f0_4 = temp_v0_3->unk8; - temp_f2_4 = temp_v0_3->unk4; - if ((temp_v1_4 & 2) != 0) + if (arg1->flags & PROPFLAG_ONSCREEN) { - if (temp_f2_4 == temp_f0_4) + if (temp_v0_3->Bounds.xmax == temp_v0_3->Bounds.xmin) { - goto block_72; + sp58 = sp48; } } - else if (temp_f2_4 == temp_f0_4) + else if (temp_v0_3->Bounds.xmax == temp_v0_3->Bounds.xmin) { -block_72: - phi_f12 = phi_f14_2; + sp58 = sp48; } } - if ((temp_v1_4 & 0x40) == 0) + + if (!(arg1->flags & PROPFLAG_00000040)) { - temp_f0_5 = temp_v0_3->unk10; - temp_f2_5 = temp_v0_3->unkC; - if ((temp_v1_4 & 2) != 0) + if (arg1->flags & PROPFLAG_ONSCREEN) { - if (temp_f2_5 == temp_f0_5) + if (temp_v0_3->Bounds.ymax == temp_v0_3->Bounds.ymin) { - phi_f18_2 = phi_f14_2; + sp50 = sp48; } } - else if (temp_f2_5 == temp_f0_5) + else if (temp_v0_3->Bounds.ymax == temp_v0_3->Bounds.ymin) { - phi_f16_2 = phi_f14_2; + sp54 = sp48; } } - if ((temp_v1_4 & 0x80) == 0) + + if (!(arg1->flags & PROPFLAG_00000080)) { - temp_f0_6 = temp_v0_3->unk18; - temp_f2_6 = temp_v0_3->unk14; - if ((temp_v1_4 & 2) != 0) + if (arg1->flags & PROPFLAG_ONSCREEN) { - if (temp_f2_6 == temp_f0_6) + if (temp_v0_3->Bounds.zmax == temp_v0_3->Bounds.zmin) { - phi_f16_2 = phi_f14_2; + sp54 = sp48; } } - else if (temp_f2_6 == temp_f0_6) + else if (temp_v0_3->Bounds.zmax == temp_v0_3->Bounds.zmin) { - phi_f18_2 = phi_f14_2; + sp50 = sp48; } } } - temp_f12_3 = phi_f12 / phi_f14_2; - temp_f16 = phi_f16_2 / phi_f14_2; - temp_f18 = phi_f18_2 / phi_f14_2; - phi_f16_3 = temp_f16; - phi_f18_3 = temp_f18; - phi_f12_2 = temp_f12_3; - if ((temp_f12_3 <= 0.000001f) || (temp_f16 <= 0.000001f) || (temp_f18 <= 0.000001f)) + + sp58 /= sp48; + sp54 /= sp48; + sp50 /= sp48; + + if ((sp58 <= 0.000001f) || (sp54 <= 0.000001f) || (sp50 <= 0.000001f)) { - phi_f12_2 = 1.0f; + #ifdef DEBUG + osSyncPrintf("Scale warning: object number %d has a small scale: %f,%f,%f\n",cmdindex +1, sp58,sp54,sp50); + #endif + sp50 = 1.0f; + sp54 = 1.0f; + sp58 = 1.0f; } - sp48 = phi_f14_2; - sp54 = phi_f16_3; - sp50 = phi_f18_3; - matrix_column_1_scalar_multiply(phi_f12_2, phi_f14_2, &sp8C); - matrix_column_2_scalar_multiply(sp54, &sp8C); - matrix_column_3_scalar_multiply_2(sp50, &sp8C); - temp_a0_5 = arg1->model; - modelSetScale(temp_a0_5, temp_a0_5->scale * sp48); + + matrix_column_1_scalar_multiply(sp58, sp8C.m[0]); + matrix_column_2_scalar_multiply(sp54, sp8C.m[0]); + matrix_column_3_scalar_multiply_2(sp50, sp8C.m[0]); + + modelSetScale(arg1->model, arg1->model->scale * sp48); } } - temp_a0_6 = arg1->model; - modelSetScale(temp_a0_6, temp_a0_6->scale * sp78); - matrix_scalar_multiply(arg1->model->scale, &sp8C); - if ((arg1->flags & 2) != 0) + + modelSetScale(arg1->model, arg1->model->scale * sp78); + matrix_scalar_multiply(arg1->model->scale, sp8C.m[0]); + + if (arg1->flags & PROPFLAG_ONSCREEN) { sub_GAME_7F040BA0(arg1, &spE0, &sp8C, spDC, &sp80); } @@ -619,1174 +480,142 @@ block_72: { sub_GAME_7F04088C(arg1, &spE0, &sp8C, spDC, &sp80); } + setupUpdateObjectRoomPosition(arg1); - set_current_objposdata_plus_0x28(sp60); - set_stateflag_0x04_for_posdata(sp60); + chrpropActivate(sp60); + chrpropEnable(sp60); } + #ifdef DEBUG + else + { + osSyncPrintf("domakedefaultobj: prop obj number %d not reset!\n",cmdindex + 1); + } + #endif } } -#else -void domakedefaultobj(s32 arg0, ObjectRecord *arg1, s32 cmdindex); -GLOBAL_ASM( -.late_rodata -glabel D_8004EEB4 -.word 0x358637bd -.text -glabel domakedefaultobj -/* 0368CC 7F001D9C 27BDFF08 */ addiu $sp, $sp, -0xf8 -/* 0368D0 7F001DA0 AFBF0034 */ sw $ra, 0x34($sp) -/* 0368D4 7F001DA4 AFB10030 */ sw $s1, 0x30($sp) -/* 0368D8 7F001DA8 AFB0002C */ sw $s0, 0x2c($sp) -/* 0368DC 7F001DAC AFA400F8 */ sw $a0, 0xf8($sp) -/* 0368E0 7F001DB0 AFA60100 */ sw $a2, 0x100($sp) -/* 0368E4 7F001DB4 84A40004 */ lh $a0, 4($a1) -/* 0368E8 7F001DB8 00A08825 */ move $s1, $a1 -/* 0368EC 7F001DBC 00008025 */ move $s0, $zero -/* 0368F0 7F001DC0 0FC15B0E */ jal modelLoad -/* 0368F4 7F001DC4 AFA400F0 */ sw $a0, 0xf0($sp) -/* 0368F8 7F001DC8 962E0000 */ lhu $t6, ($s1) -/* 0368FC 7F001DCC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 036900 7F001DD0 448E2000 */ mtc1 $t6, $f4 -/* 036904 7F001DD4 05C10004 */ bgez $t6, .L7F001DE8 -/* 036908 7F001DD8 468021A0 */ cvt.s.w $f6, $f4 -/* 03690C 7F001DDC 44814000 */ mtc1 $at, $f8 -/* 036910 7F001DE0 00000000 */ nop -/* 036914 7F001DE4 46083180 */ add.s $f6, $f6, $f8 -.L7F001DE8: -/* 036918 7F001DE8 3C013B80 */ li $at, 0x3B800000 # 0.003906 -/* 03691C 7F001DEC 44815000 */ mtc1 $at, $f10 -/* 036920 7F001DF0 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 036924 7F001DF4 460A3102 */ mul.s $f4, $f6, $f10 -/* 036928 7F001DF8 44815000 */ mtc1 $at, $f10 -/* 03692C 7F001DFC E7A40078 */ swc1 $f4, 0x78($sp) -/* 036930 7F001E00 8E2F0074 */ lw $t7, 0x74($s1) -/* 036934 7F001E04 448F4000 */ mtc1 $t7, $f8 -/* 036938 7F001E08 00000000 */ nop -/* 03693C 7F001E0C 468041A0 */ cvt.s.w $f6, $f8 -/* 036940 7F001E10 460A3103 */ div.s $f4, $f6, $f10 -/* 036944 7F001E14 0FC26919 */ jal getPlayerCount -/* 036948 7F001E18 E6240074 */ swc1 $f4, 0x74($s1) -/* 03694C 7F001E1C 28410002 */ slti $at, $v0, 2 -/* 036950 7F001E20 1420001B */ bnez $at, .L7F001E90 -/* 036954 7F001E24 24030001 */ li $v1, 1 -/* 036958 7F001E28 0FC051D6 */ jal get_scenario -/* 03695C 7F001E2C AFA30074 */ sw $v1, 0x74($sp) -/* 036960 7F001E30 24010002 */ li $at, 2 -/* 036964 7F001E34 14410007 */ bne $v0, $at, .L7F001E54 -/* 036968 7F001E38 8FA30074 */ lw $v1, 0x74($sp) -/* 03696C 7F001E3C 86380004 */ lh $t8, 4($s1) -/* 036970 7F001E40 2401014D */ li $at, 333 -/* 036974 7F001E44 17010003 */ bne $t8, $at, .L7F001E54 -/* 036978 7F001E48 00000000 */ nop -/* 03697C 7F001E4C 1000000B */ b .L7F001E7C -/* 036980 7F001E50 00001825 */ move $v1, $zero -.L7F001E54: -/* 036984 7F001E54 0FC051D6 */ jal get_scenario -/* 036988 7F001E58 AFA30074 */ sw $v1, 0x74($sp) -/* 03698C 7F001E5C 24010003 */ li $at, 3 -/* 036990 7F001E60 14410006 */ bne $v0, $at, .L7F001E7C -/* 036994 7F001E64 8FA30074 */ lw $v1, 0x74($sp) -/* 036998 7F001E68 86390004 */ lh $t9, 4($s1) -/* 03699C 7F001E6C 240100D0 */ li $at, 208 -/* 0369A0 7F001E70 17210002 */ bne $t9, $at, .L7F001E7C -/* 0369A4 7F001E74 00000000 */ nop -/* 0369A8 7F001E78 00001825 */ move $v1, $zero -.L7F001E7C: -/* 0369AC 7F001E7C 50600005 */ beql $v1, $zero, .L7F001E94 -/* 0369B0 7F001E80 8E230008 */ lw $v1, 8($s1) -/* 0369B4 7F001E84 92280002 */ lbu $t0, 2($s1) -/* 0369B8 7F001E88 35090004 */ ori $t1, $t0, 4 -/* 0369BC 7F001E8C A2290002 */ sb $t1, 2($s1) -.L7F001E90: -/* 0369C0 7F001E90 8E230008 */ lw $v1, 8($s1) -.L7F001E94: -/* 0369C4 7F001E94 306A8000 */ andi $t2, $v1, 0x8000 -/* 0369C8 7F001E98 11400021 */ beqz $t2, .L7F001F20 -/* 0369CC 7F001E9C 30784000 */ andi $t8, $v1, 0x4000 -/* 0369D0 7F001EA0 922B0003 */ lbu $t3, 3($s1) -/* 0369D4 7F001EA4 8FAE00F0 */ lw $t6, 0xf0($sp) -/* 0369D8 7F001EA8 24010008 */ li $at, 8 -/* 0369DC 7F001EAC 1561000C */ bne $t3, $at, .L7F001EE0 -/* 0369E0 7F001EB0 000E7880 */ sll $t7, $t6, 2 -/* 0369E4 7F001EB4 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 0369E8 7F001EB8 3C058004 */ lui $a1, %hi(PitemZ_entries) -/* 0369EC 7F001EBC 02202025 */ move $a0, $s1 -/* 0369F0 7F001EC0 000C6880 */ sll $t5, $t4, 2 -/* 0369F4 7F001EC4 01AC6823 */ subu $t5, $t5, $t4 -/* 0369F8 7F001EC8 000D6880 */ sll $t5, $t5, 2 -/* 0369FC 7F001ECC 00AD2821 */ addu $a1, $a1, $t5 -/* 036A00 7F001ED0 0FC14776 */ jal sub_GAME_7F051DD8 -/* 036A04 7F001ED4 8CA5A228 */ lw $a1, %lo(PitemZ_entries)($a1) -/* 036A08 7F001ED8 10000009 */ b .L7F001F00 -/* 036A0C 7F001EDC 8E240014 */ lw $a0, 0x14($s1) -.L7F001EE0: -/* 036A10 7F001EE0 01EE7823 */ subu $t7, $t7, $t6 -/* 036A14 7F001EE4 000F7880 */ sll $t7, $t7, 2 -/* 036A18 7F001EE8 3C058004 */ lui $a1, %hi(PitemZ_entries) -/* 036A1C 7F001EEC 00AF2821 */ addu $a1, $a1, $t7 -/* 036A20 7F001EF0 8CA5A228 */ lw $a1, %lo(PitemZ_entries)($a1) -/* 036A24 7F001EF4 0FC101BE */ jal objInitWithModelDef -/* 036A28 7F001EF8 02202025 */ move $a0, $s1 -/* 036A2C 7F001EFC 8E240014 */ lw $a0, 0x14($s1) -.L7F001F00: -/* 036A30 7F001F00 C7A60078 */ lwc1 $f6, 0x78($sp) -/* 036A34 7F001F04 C4880014 */ lwc1 $f8, 0x14($a0) -/* 036A38 7F001F08 46064282 */ mul.s $f10, $f8, $f6 -/* 036A3C 7F001F0C 44055000 */ mfc1 $a1, $f10 -/* 036A40 7F001F10 0FC1B39E */ jal modelSetScale -/* 036A44 7F001F14 00000000 */ nop -/* 036A48 7F001F18 10000203 */ b .L7F002728 -/* 036A4C 7F001F1C 8FBF0034 */ lw $ra, 0x34($sp) -.L7F001F20: -/* 036A50 7F001F20 53000031 */ beql $t8, $zero, .L7F001FE8 -/* 036A54 7F001F24 86230006 */ lh $v1, 6($s1) -/* 036A58 7F001F28 0FC08BF2 */ jal chrFindByLiteralId -/* 036A5C 7F001F2C 86240006 */ lh $a0, 6($s1) -/* 036A60 7F001F30 104001FC */ beqz $v0, .L7F002724 -/* 036A64 7F001F34 AFA2006C */ sw $v0, 0x6c($sp) -/* 036A68 7F001F38 8C590018 */ lw $t9, 0x18($v0) -/* 036A6C 7F001F3C 532001FA */ beql $t9, $zero, .L7F002728 -/* 036A70 7F001F40 8FBF0034 */ lw $ra, 0x34($sp) -/* 036A74 7F001F44 8C48001C */ lw $t0, 0x1c($v0) -/* 036A78 7F001F48 510001F7 */ beql $t0, $zero, .L7F002728 -/* 036A7C 7F001F4C 8FBF0034 */ lw $ra, 0x34($sp) -/* 036A80 7F001F50 92290003 */ lbu $t1, 3($s1) -/* 036A84 7F001F54 8FAC00F0 */ lw $t4, 0xf0($sp) -/* 036A88 7F001F58 24010008 */ li $at, 8 -/* 036A8C 7F001F5C 1521000C */ bne $t1, $at, .L7F001F90 -/* 036A90 7F001F60 000C6880 */ sll $t5, $t4, 2 -/* 036A94 7F001F64 8FAA00F0 */ lw $t2, 0xf0($sp) -/* 036A98 7F001F68 3C058004 */ lui $a1, %hi(PitemZ_entries) -/* 036A9C 7F001F6C 02202025 */ move $a0, $s1 -/* 036AA0 7F001F70 000A5880 */ sll $t3, $t2, 2 -/* 036AA4 7F001F74 016A5823 */ subu $t3, $t3, $t2 -/* 036AA8 7F001F78 000B5880 */ sll $t3, $t3, 2 -/* 036AAC 7F001F7C 00AB2821 */ addu $a1, $a1, $t3 -/* 036AB0 7F001F80 0FC14776 */ jal sub_GAME_7F051DD8 -/* 036AB4 7F001F84 8CA5A228 */ lw $a1, %lo(PitemZ_entries)($a1) -/* 036AB8 7F001F88 10000009 */ b .L7F001FB0 -/* 036ABC 7F001F8C 00408025 */ move $s0, $v0 -.L7F001F90: -/* 036AC0 7F001F90 01AC6823 */ subu $t5, $t5, $t4 -/* 036AC4 7F001F94 000D6880 */ sll $t5, $t5, 2 -/* 036AC8 7F001F98 3C058004 */ lui $a1, %hi(PitemZ_entries) -/* 036ACC 7F001F9C 00AD2821 */ addu $a1, $a1, $t5 -/* 036AD0 7F001FA0 8CA5A228 */ lw $a1, %lo(PitemZ_entries)($a1) -/* 036AD4 7F001FA4 0FC101BE */ jal objInitWithModelDef -/* 036AD8 7F001FA8 02202025 */ move $a0, $s1 -/* 036ADC 7F001FAC 00408025 */ move $s0, $v0 -.L7F001FB0: -/* 036AE0 7F001FB0 8E240014 */ lw $a0, 0x14($s1) -/* 036AE4 7F001FB4 C7A80078 */ lwc1 $f8, 0x78($sp) -/* 036AE8 7F001FB8 C4840014 */ lwc1 $f4, 0x14($a0) -/* 036AEC 7F001FBC 46082182 */ mul.s $f6, $f4, $f8 -/* 036AF0 7F001FC0 44053000 */ mfc1 $a1, $f6 -/* 036AF4 7F001FC4 0FC1B39E */ jal modelSetScale -/* 036AF8 7F001FC8 00000000 */ nop -/* 036AFC 7F001FCC 8FAE006C */ lw $t6, 0x6c($sp) -/* 036B00 7F001FD0 02002025 */ move $a0, $s0 -/* 036B04 7F001FD4 0FC0E969 */ jal chrpropReparent -/* 036B08 7F001FD8 8DC50018 */ lw $a1, 0x18($t6) -/* 036B0C 7F001FDC 100001D2 */ b .L7F002728 -/* 036B10 7F001FE0 8FBF0034 */ lw $ra, 0x34($sp) -/* 036B14 7F001FE4 86230006 */ lh $v1, 6($s1) -.L7F001FE8: -/* 036B18 7F001FE8 3C188007 */ lui $t8, %hi(g_CurrentSetup+0x18) -/* 036B1C 7F001FEC 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x1C) -/* 036B20 7F001FF0 28612710 */ slti $at, $v1, 0x2710 -/* 036B24 7F001FF4 10200039 */ beqz $at, .L7F0020DC -/* 036B28 7F001FF8 00035100 */ sll $t2, $v1, 4 -/* 036B2C 7F001FFC 00037880 */ sll $t7, $v1, 2 -/* 036B30 7F002000 01E37823 */ subu $t7, $t7, $v1 -/* 036B34 7F002004 8F185D18 */ lw $t8, %lo(g_CurrentSetup+0x18)($t8) -/* 036B38 7F002008 000F7880 */ sll $t7, $t7, 2 -/* 036B3C 7F00200C 01E37823 */ subu $t7, $t7, $v1 -/* 036B40 7F002010 000F7880 */ sll $t7, $t7, 2 -/* 036B44 7F002014 01F81021 */ addu $v0, $t7, $t8 -/* 036B48 7F002018 C44A0018 */ lwc1 $f10, 0x18($v0) -/* 036B4C 7F00201C 44800000 */ mtc1 $zero, $f0 -/* 036B50 7F002020 27A4008C */ addiu $a0, $sp, 0x8c -/* 036B54 7F002024 46005107 */ neg.s $f4, $f10 -/* 036B58 7F002028 44050000 */ mfc1 $a1, $f0 -/* 036B5C 7F00202C E7A40010 */ swc1 $f4, 0x10($sp) -/* 036B60 7F002030 C448001C */ lwc1 $f8, 0x1c($v0) -/* 036B64 7F002034 44060000 */ mfc1 $a2, $f0 -/* 036B68 7F002038 44070000 */ mfc1 $a3, $f0 -/* 036B6C 7F00203C 46004187 */ neg.s $f6, $f8 -/* 036B70 7F002040 E7A60014 */ swc1 $f6, 0x14($sp) -/* 036B74 7F002044 C44A0020 */ lwc1 $f10, 0x20($v0) -/* 036B78 7F002048 46005107 */ neg.s $f4, $f10 -/* 036B7C 7F00204C E7A40018 */ swc1 $f4, 0x18($sp) -/* 036B80 7F002050 C448000C */ lwc1 $f8, 0xc($v0) -/* 036B84 7F002054 E7A8001C */ swc1 $f8, 0x1c($sp) -/* 036B88 7F002058 C4460010 */ lwc1 $f6, 0x10($v0) -/* 036B8C 7F00205C E7A60020 */ swc1 $f6, 0x20($sp) -/* 036B90 7F002060 C44A0014 */ lwc1 $f10, 0x14($v0) -/* 036B94 7F002064 AFA20064 */ sw $v0, 0x64($sp) -/* 036B98 7F002068 0FC16642 */ jal matrix_4x4_7F059908 -/* 036B9C 7F00206C E7AA0024 */ swc1 $f10, 0x24($sp) -/* 036BA0 7F002070 8FA20064 */ lw $v0, 0x64($sp) -/* 036BA4 7F002074 C4440000 */ lwc1 $f4, ($v0) -/* 036BA8 7F002078 E7A400D0 */ swc1 $f4, 0xd0($sp) -/* 036BAC 7F00207C C4480004 */ lwc1 $f8, 4($v0) -/* 036BB0 7F002080 E7A800D4 */ swc1 $f8, 0xd4($sp) -/* 036BB4 7F002084 C4460008 */ lwc1 $f6, 8($v0) -/* 036BB8 7F002088 E7A600D8 */ swc1 $f6, 0xd8($sp) -/* 036BBC 7F00208C 8E390008 */ lw $t9, 8($s1) -/* 036BC0 7F002090 33280002 */ andi $t0, $t9, 2 -/* 036BC4 7F002094 51000009 */ beql $t0, $zero, .L7F0020BC -/* 036BC8 7F002098 C4460000 */ lwc1 $f6, ($v0) -/* 036BCC 7F00209C C44A0000 */ lwc1 $f10, ($v0) -/* 036BD0 7F0020A0 E7AA0080 */ swc1 $f10, 0x80($sp) -/* 036BD4 7F0020A4 C4440004 */ lwc1 $f4, 4($v0) -/* 036BD8 7F0020A8 E7A40084 */ swc1 $f4, 0x84($sp) -/* 036BDC 7F0020AC C4480008 */ lwc1 $f8, 8($v0) -/* 036BE0 7F0020B0 10000007 */ b .L7F0020D0 -/* 036BE4 7F0020B4 E7A80088 */ swc1 $f8, 0x88($sp) -/* 036BE8 7F0020B8 C4460000 */ lwc1 $f6, ($v0) -.L7F0020BC: -/* 036BEC 7F0020BC E7A60080 */ swc1 $f6, 0x80($sp) -/* 036BF0 7F0020C0 C44A0004 */ lwc1 $f10, 4($v0) -/* 036BF4 7F0020C4 E7AA0084 */ swc1 $f10, 0x84($sp) -/* 036BF8 7F0020C8 C4440008 */ lwc1 $f4, 8($v0) -/* 036BFC 7F0020CC E7A40088 */ swc1 $f4, 0x88($sp) -.L7F0020D0: -/* 036C00 7F0020D0 8C490028 */ lw $t1, 0x28($v0) -/* 036C04 7F0020D4 10000085 */ b .L7F0022EC -/* 036C08 7F0020D8 AFA900CC */ sw $t1, 0xcc($sp) -.L7F0020DC: -/* 036C0C 7F0020DC 8D6B5D1C */ lw $t3, %lo(g_CurrentSetup+0x1C)($t3) -/* 036C10 7F0020E0 01435021 */ addu $t2, $t2, $v1 -/* 036C14 7F0020E4 000A5080 */ sll $t2, $t2, 2 -/* 036C18 7F0020E8 3C01FFF5 */ lui $at, (0xFFF59FC0 >> 16) # lui $at, 0xfff5 -/* 036C1C 7F0020EC 34219FC0 */ ori $at, (0xFFF59FC0 & 0xFFFF) # ori $at, $at, 0x9fc0 -/* 036C20 7F0020F0 014B8021 */ addu $s0, $t2, $t3 -/* 036C24 7F0020F4 02018021 */ addu $s0, $s0, $at -/* 036C28 7F0020F8 C6080018 */ lwc1 $f8, 0x18($s0) -/* 036C2C 7F0020FC 44800000 */ mtc1 $zero, $f0 -/* 036C30 7F002100 27A4008C */ addiu $a0, $sp, 0x8c -/* 036C34 7F002104 46004187 */ neg.s $f6, $f8 -/* 036C38 7F002108 44050000 */ mfc1 $a1, $f0 -/* 036C3C 7F00210C E7A60010 */ swc1 $f6, 0x10($sp) -/* 036C40 7F002110 C60A001C */ lwc1 $f10, 0x1c($s0) -/* 036C44 7F002114 44060000 */ mfc1 $a2, $f0 -/* 036C48 7F002118 44070000 */ mfc1 $a3, $f0 -/* 036C4C 7F00211C 46005107 */ neg.s $f4, $f10 -/* 036C50 7F002120 E7A40014 */ swc1 $f4, 0x14($sp) -/* 036C54 7F002124 C6080020 */ lwc1 $f8, 0x20($s0) -/* 036C58 7F002128 46004187 */ neg.s $f6, $f8 -/* 036C5C 7F00212C E7A60018 */ swc1 $f6, 0x18($sp) -/* 036C60 7F002130 C60A000C */ lwc1 $f10, 0xc($s0) -/* 036C64 7F002134 E7AA001C */ swc1 $f10, 0x1c($sp) -/* 036C68 7F002138 C6040010 */ lwc1 $f4, 0x10($s0) -/* 036C6C 7F00213C E7A40020 */ swc1 $f4, 0x20($sp) -/* 036C70 7F002140 C6080014 */ lwc1 $f8, 0x14($s0) -/* 036C74 7F002144 0FC16642 */ jal matrix_4x4_7F059908 -/* 036C78 7F002148 E7A80024 */ swc1 $f8, 0x24($sp) -/* 036C7C 7F00214C 8E2C000C */ lw $t4, 0xc($s1) -/* 036C80 7F002150 02002025 */ move $a0, $s0 -/* 036C84 7F002154 318D0001 */ andi $t5, $t4, 1 -/* 036C88 7F002158 55A0003D */ bnezl $t5, .L7F002250 -/* 036C8C 7F00215C C60A0000 */ lwc1 $f10, ($s0) -/* 036C90 7F002160 0FC006F5 */ jal sub_GAME_7F001BD4 -/* 036C94 7F002164 27A500D0 */ addiu $a1, $sp, 0xd0 -/* 036C98 7F002168 C6060034 */ lwc1 $f6, 0x34($s0) -/* 036C9C 7F00216C C60A0038 */ lwc1 $f10, 0x38($s0) -/* 036CA0 7F002170 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 036CA4 7F002174 44810000 */ mtc1 $at, $f0 -/* 036CA8 7F002178 460A3101 */ sub.s $f4, $f6, $f10 -/* 036CAC 7F00217C C606000C */ lwc1 $f6, 0xc($s0) -/* 036CB0 7F002180 27A400CC */ addiu $a0, $sp, 0xcc -/* 036CB4 7F002184 46002202 */ mul.s $f8, $f4, $f0 -/* 036CB8 7F002188 C7A400D0 */ lwc1 $f4, 0xd0($sp) -/* 036CBC 7F00218C 44072000 */ mfc1 $a3, $f4 -/* 036CC0 7F002190 46083282 */ mul.s $f10, $f6, $f8 -/* 036CC4 7F002194 46045180 */ add.s $f6, $f10, $f4 -/* 036CC8 7F002198 E7A60080 */ swc1 $f6, 0x80($sp) -/* 036CCC 7F00219C C60A0038 */ lwc1 $f10, 0x38($s0) -/* 036CD0 7F0021A0 C6080034 */ lwc1 $f8, 0x34($s0) -/* 036CD4 7F0021A4 460A4181 */ sub.s $f6, $f8, $f10 -/* 036CD8 7F0021A8 C60A0010 */ lwc1 $f10, 0x10($s0) -/* 036CDC 7F0021AC 46003202 */ mul.s $f8, $f6, $f0 -/* 036CE0 7F0021B0 00000000 */ nop -/* 036CE4 7F0021B4 46085182 */ mul.s $f6, $f10, $f8 -/* 036CE8 7F0021B8 C7AA00D4 */ lwc1 $f10, 0xd4($sp) -/* 036CEC 7F0021BC 460A3200 */ add.s $f8, $f6, $f10 -/* 036CF0 7F0021C0 E7A80084 */ swc1 $f8, 0x84($sp) -/* 036CF4 7F0021C4 C60A0038 */ lwc1 $f10, 0x38($s0) -/* 036CF8 7F0021C8 C6060034 */ lwc1 $f6, 0x34($s0) -/* 036CFC 7F0021CC 460A3201 */ sub.s $f8, $f6, $f10 -/* 036D00 7F0021D0 C60A0014 */ lwc1 $f10, 0x14($s0) -/* 036D04 7F0021D4 46004182 */ mul.s $f6, $f8, $f0 -/* 036D08 7F0021D8 00000000 */ nop -/* 036D0C 7F0021DC 46065202 */ mul.s $f8, $f10, $f6 -/* 036D10 7F0021E0 C7AA00D8 */ lwc1 $f10, 0xd8($sp) -/* 036D14 7F0021E4 460A4180 */ add.s $f6, $f8, $f10 -/* 036D18 7F0021E8 E7A60088 */ swc1 $f6, 0x88($sp) -/* 036D1C 7F0021EC 8E0E0028 */ lw $t6, 0x28($s0) -/* 036D20 7F0021F0 AFAE00CC */ sw $t6, 0xcc($sp) -/* 036D24 7F0021F4 8E060008 */ lw $a2, 8($s0) -/* 036D28 7F0021F8 8E050000 */ lw $a1, ($s0) -/* 036D2C 7F0021FC 0FC2C2F9 */ jal walkTilesBetweenPoints_NoCallback -/* 036D30 7F002200 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 036D34 7F002204 5440003A */ bnezl $v0, .L7F0022F0 -/* 036D38 7F002208 27A900DC */ addiu $t1, $sp, 0xdc -/* 036D3C 7F00220C C6080000 */ lwc1 $f8, ($s0) -/* 036D40 7F002210 E7A800D0 */ swc1 $f8, 0xd0($sp) -/* 036D44 7F002214 C6060004 */ lwc1 $f6, 4($s0) -/* 036D48 7F002218 E7A600D4 */ swc1 $f6, 0xd4($sp) -/* 036D4C 7F00221C C6040008 */ lwc1 $f4, 8($s0) -/* 036D50 7F002220 E7A400D8 */ swc1 $f4, 0xd8($sp) -/* 036D54 7F002224 8E0F0028 */ lw $t7, 0x28($s0) -/* 036D58 7F002228 AFAF00CC */ sw $t7, 0xcc($sp) -/* 036D5C 7F00222C 8E230008 */ lw $v1, 8($s1) -/* 036D60 7F002230 30780002 */ andi $t8, $v1, 2 -/* 036D64 7F002234 1700002D */ bnez $t8, .L7F0022EC -/* 036D68 7F002238 30791000 */ andi $t9, $v1, 0x1000 -/* 036D6C 7F00223C 5720002C */ bnezl $t9, .L7F0022F0 -/* 036D70 7F002240 27A900DC */ addiu $t1, $sp, 0xdc -/* 036D74 7F002244 1000002A */ b .L7F0022F0 -/* 036D78 7F002248 27A900DC */ addiu $t1, $sp, 0xdc -/* 036D7C 7F00224C C60A0000 */ lwc1 $f10, ($s0) -.L7F002250: -/* 036D80 7F002250 02002025 */ move $a0, $s0 -/* 036D84 7F002254 27A50080 */ addiu $a1, $sp, 0x80 -/* 036D88 7F002258 E7AA00D0 */ swc1 $f10, 0xd0($sp) -/* 036D8C 7F00225C C6080004 */ lwc1 $f8, 4($s0) -/* 036D90 7F002260 E7A800D4 */ swc1 $f8, 0xd4($sp) -/* 036D94 7F002264 C6060008 */ lwc1 $f6, 8($s0) -/* 036D98 7F002268 E7A600D8 */ swc1 $f6, 0xd8($sp) -/* 036D9C 7F00226C 8E080028 */ lw $t0, 0x28($s0) -/* 036DA0 7F002270 0FC006F5 */ jal sub_GAME_7F001BD4 -/* 036DA4 7F002274 AFA800CC */ sw $t0, 0xcc($sp) -/* 036DA8 7F002278 C6040034 */ lwc1 $f4, 0x34($s0) -/* 036DAC 7F00227C C60A0038 */ lwc1 $f10, 0x38($s0) -/* 036DB0 7F002280 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 036DB4 7F002284 44810000 */ mtc1 $at, $f0 -/* 036DB8 7F002288 460A2201 */ sub.s $f8, $f4, $f10 -/* 036DBC 7F00228C C604000C */ lwc1 $f4, 0xc($s0) -/* 036DC0 7F002290 46004182 */ mul.s $f6, $f8, $f0 -/* 036DC4 7F002294 C7A80080 */ lwc1 $f8, 0x80($sp) -/* 036DC8 7F002298 46043282 */ mul.s $f10, $f6, $f4 -/* 036DCC 7F00229C 460A4180 */ add.s $f6, $f8, $f10 -/* 036DD0 7F0022A0 E7A60080 */ swc1 $f6, 0x80($sp) -/* 036DD4 7F0022A4 C6080038 */ lwc1 $f8, 0x38($s0) -/* 036DD8 7F0022A8 C6040034 */ lwc1 $f4, 0x34($s0) -/* 036DDC 7F0022AC 46082281 */ sub.s $f10, $f4, $f8 -/* 036DE0 7F0022B0 C6040010 */ lwc1 $f4, 0x10($s0) -/* 036DE4 7F0022B4 46005182 */ mul.s $f6, $f10, $f0 -/* 036DE8 7F0022B8 C7AA0084 */ lwc1 $f10, 0x84($sp) -/* 036DEC 7F0022BC 46043202 */ mul.s $f8, $f6, $f4 -/* 036DF0 7F0022C0 46085180 */ add.s $f6, $f10, $f8 -/* 036DF4 7F0022C4 E7A60084 */ swc1 $f6, 0x84($sp) -/* 036DF8 7F0022C8 C60A0038 */ lwc1 $f10, 0x38($s0) -/* 036DFC 7F0022CC C6040034 */ lwc1 $f4, 0x34($s0) -/* 036E00 7F0022D0 460A2201 */ sub.s $f8, $f4, $f10 -/* 036E04 7F0022D4 C6040014 */ lwc1 $f4, 0x14($s0) -/* 036E08 7F0022D8 46004182 */ mul.s $f6, $f8, $f0 -/* 036E0C 7F0022DC C7A80088 */ lwc1 $f8, 0x88($sp) -/* 036E10 7F0022E0 46043282 */ mul.s $f10, $f6, $f4 -/* 036E14 7F0022E4 460A4180 */ add.s $f6, $f8, $f10 -/* 036E18 7F0022E8 E7A60088 */ swc1 $f6, 0x88($sp) -.L7F0022EC: -/* 036E1C 7F0022EC 27A900DC */ addiu $t1, $sp, 0xdc -.L7F0022F0: -/* 036E20 7F0022F0 AFA90010 */ sw $t1, 0x10($sp) -/* 036E24 7F0022F4 27A400D0 */ addiu $a0, $sp, 0xd0 -/* 036E28 7F0022F8 8FA500CC */ lw $a1, 0xcc($sp) -/* 036E2C 7F0022FC 24060000 */ li $a2, 0 -/* 036E30 7F002300 0FC15A14 */ jal sub_GAME_7F056850 -/* 036E34 7F002304 27A700E0 */ addiu $a3, $sp, 0xe0 -/* 036E38 7F002308 50400107 */ beql $v0, $zero, .L7F002728 -/* 036E3C 7F00230C 8FBF0034 */ lw $ra, 0x34($sp) -/* 036E40 7F002310 922A0003 */ lbu $t2, 3($s1) -/* 036E44 7F002314 8FAB00F0 */ lw $t3, 0xf0($sp) -/* 036E48 7F002318 24010008 */ li $at, 8 -/* 036E4C 7F00231C 1541000A */ bne $t2, $at, .L7F002348 -/* 036E50 7F002320 000B6080 */ sll $t4, $t3, 2 -/* 036E54 7F002324 018B6023 */ subu $t4, $t4, $t3 -/* 036E58 7F002328 000C6080 */ sll $t4, $t4, 2 -/* 036E5C 7F00232C 3C058004 */ lui $a1, %hi(PitemZ_entries) -/* 036E60 7F002330 00AC2821 */ addu $a1, $a1, $t4 -/* 036E64 7F002334 8CA5A228 */ lw $a1, %lo(PitemZ_entries)($a1) -/* 036E68 7F002338 0FC14776 */ jal sub_GAME_7F051DD8 -/* 036E6C 7F00233C 02202025 */ move $a0, $s1 -/* 036E70 7F002340 10000004 */ b .L7F002354 -/* 036E74 7F002344 AFA20060 */ sw $v0, 0x60($sp) -.L7F002348: -/* 036E78 7F002348 0FC101C7 */ jal objInitWithAutoModel -/* 036E7C 7F00234C 02202025 */ move $a0, $s1 -/* 036E80 7F002350 AFA20060 */ sw $v0, 0x60($sp) -.L7F002354: -/* 036E84 7F002354 520000D0 */ beql $s0, $zero, .L7F002698 -/* 036E88 7F002358 8E240014 */ lw $a0, 0x14($s1) -/* 036E8C 7F00235C 0FC1001E */ jal chrobjGetBboxFromObjectRecord -/* 036E90 7F002360 02202025 */ move $a0, $s1 -/* 036E94 7F002364 104000CB */ beqz $v0, .L7F002694 -/* 036E98 7F002368 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 036E9C 7F00236C 44819000 */ mtc1 $at, $f18 -/* 036EA0 7F002370 27A5008C */ addiu $a1, $sp, 0x8c -/* 036EA4 7F002374 E7B20058 */ swc1 $f18, 0x58($sp) -/* 036EA8 7F002378 8E230008 */ lw $v1, 8($s1) -/* 036EAC 7F00237C 46009406 */ mov.s $f16, $f18 -/* 036EB0 7F002380 306D0030 */ andi $t5, $v1, 0x30 -/* 036EB4 7F002384 11A0001D */ beqz $t5, .L7F0023FC -/* 036EB8 7F002388 30790050 */ andi $t9, $v1, 0x50 -/* 036EBC 7F00238C C4420004 */ lwc1 $f2, 4($v0) -/* 036EC0 7F002390 C4400008 */ lwc1 $f0, 8($v0) -/* 036EC4 7F002394 306E0002 */ andi $t6, $v1, 2 -/* 036EC8 7F002398 4600103C */ c.lt.s $f2, $f0 -/* 036ECC 7F00239C 00000000 */ nop -/* 036ED0 7F0023A0 45000016 */ bc1f .L7F0023FC -/* 036ED4 7F0023A4 00000000 */ nop -/* 036ED8 7F0023A8 51C0000C */ beql $t6, $zero, .L7F0023DC -/* 036EDC 7F0023AC C6040030 */ lwc1 $f4, 0x30($s0) -/* 036EE0 7F0023B0 C6040030 */ lwc1 $f4, 0x30($s0) -/* 036EE4 7F0023B4 C608002C */ lwc1 $f8, 0x2c($s0) -/* 036EE8 7F0023B8 8E2F0014 */ lw $t7, 0x14($s1) -/* 036EEC 7F0023BC 46020181 */ sub.s $f6, $f0, $f2 -/* 036EF0 7F0023C0 46082281 */ sub.s $f10, $f4, $f8 -/* 036EF4 7F0023C4 C5E40014 */ lwc1 $f4, 0x14($t7) -/* 036EF8 7F0023C8 46043202 */ mul.s $f8, $f6, $f4 -/* 036EFC 7F0023CC 46085183 */ div.s $f6, $f10, $f8 -/* 036F00 7F0023D0 1000000A */ b .L7F0023FC -/* 036F04 7F0023D4 E7A60058 */ swc1 $f6, 0x58($sp) -/* 036F08 7F0023D8 C6040030 */ lwc1 $f4, 0x30($s0) -.L7F0023DC: -/* 036F0C 7F0023DC C60A002C */ lwc1 $f10, 0x2c($s0) -/* 036F10 7F0023E0 8E380014 */ lw $t8, 0x14($s1) -/* 036F14 7F0023E4 46020181 */ sub.s $f6, $f0, $f2 -/* 036F18 7F0023E8 460A2201 */ sub.s $f8, $f4, $f10 -/* 036F1C 7F0023EC C7040014 */ lwc1 $f4, 0x14($t8) -/* 036F20 7F0023F0 46043282 */ mul.s $f10, $f6, $f4 -/* 036F24 7F0023F4 460A4183 */ div.s $f6, $f8, $f10 -/* 036F28 7F0023F8 E7A60058 */ swc1 $f6, 0x58($sp) -.L7F0023FC: -/* 036F2C 7F0023FC 13200018 */ beqz $t9, .L7F002460 -/* 036F30 7F002400 306A0090 */ andi $t2, $v1, 0x90 -/* 036F34 7F002404 C442000C */ lwc1 $f2, 0xc($v0) -/* 036F38 7F002408 C4400010 */ lwc1 $f0, 0x10($v0) -/* 036F3C 7F00240C 4600103C */ c.lt.s $f2, $f0 -/* 036F40 7F002410 00000000 */ nop -/* 036F44 7F002414 45000012 */ bc1f .L7F002460 -/* 036F48 7F002418 00000000 */ nop -/* 036F4C 7F00241C 8E280014 */ lw $t0, 0x14($s1) -/* 036F50 7F002420 30690002 */ andi $t1, $v1, 2 -/* 036F54 7F002424 11200008 */ beqz $t1, .L7F002448 -/* 036F58 7F002428 C50C0014 */ lwc1 $f12, 0x14($t0) -/* 036F5C 7F00242C 46020181 */ sub.s $f6, $f0, $f2 -/* 036F60 7F002430 C6040040 */ lwc1 $f4, 0x40($s0) -/* 036F64 7F002434 C608003C */ lwc1 $f8, 0x3c($s0) -/* 036F68 7F002438 46082281 */ sub.s $f10, $f4, $f8 -/* 036F6C 7F00243C 460C3102 */ mul.s $f4, $f6, $f12 -/* 036F70 7F002440 10000007 */ b .L7F002460 -/* 036F74 7F002444 46045483 */ div.s $f18, $f10, $f4 -.L7F002448: -/* 036F78 7F002448 46020101 */ sub.s $f4, $f0, $f2 -/* 036F7C 7F00244C C6080038 */ lwc1 $f8, 0x38($s0) -/* 036F80 7F002450 C6060034 */ lwc1 $f6, 0x34($s0) -/* 036F84 7F002454 46064281 */ sub.s $f10, $f8, $f6 -/* 036F88 7F002458 460C2202 */ mul.s $f8, $f4, $f12 -/* 036F8C 7F00245C 46085403 */ div.s $f16, $f10, $f8 -.L7F002460: -/* 036F90 7F002460 11400018 */ beqz $t2, .L7F0024C4 -/* 036F94 7F002464 306D0010 */ andi $t5, $v1, 0x10 -/* 036F98 7F002468 C4420014 */ lwc1 $f2, 0x14($v0) -/* 036F9C 7F00246C C4400018 */ lwc1 $f0, 0x18($v0) -/* 036FA0 7F002470 4600103C */ c.lt.s $f2, $f0 -/* 036FA4 7F002474 00000000 */ nop -/* 036FA8 7F002478 45020013 */ bc1fl .L7F0024C8 -/* 036FAC 7F00247C C7A00058 */ lwc1 $f0, 0x58($sp) -/* 036FB0 7F002480 8E2B0014 */ lw $t3, 0x14($s1) -/* 036FB4 7F002484 306C0002 */ andi $t4, $v1, 2 -/* 036FB8 7F002488 11800008 */ beqz $t4, .L7F0024AC -/* 036FBC 7F00248C C56C0014 */ lwc1 $f12, 0x14($t3) -/* 036FC0 7F002490 46020201 */ sub.s $f8, $f0, $f2 -/* 036FC4 7F002494 C6060038 */ lwc1 $f6, 0x38($s0) -/* 036FC8 7F002498 C6040034 */ lwc1 $f4, 0x34($s0) -/* 036FCC 7F00249C 46043281 */ sub.s $f10, $f6, $f4 -/* 036FD0 7F0024A0 460C4182 */ mul.s $f6, $f8, $f12 -/* 036FD4 7F0024A4 10000007 */ b .L7F0024C4 -/* 036FD8 7F0024A8 46065403 */ div.s $f16, $f10, $f6 -.L7F0024AC: -/* 036FDC 7F0024AC 46020181 */ sub.s $f6, $f0, $f2 -/* 036FE0 7F0024B0 C6040040 */ lwc1 $f4, 0x40($s0) -/* 036FE4 7F0024B4 C608003C */ lwc1 $f8, 0x3c($s0) -/* 036FE8 7F0024B8 46082281 */ sub.s $f10, $f4, $f8 -/* 036FEC 7F0024BC 460C3102 */ mul.s $f4, $f6, $f12 -/* 036FF0 7F0024C0 46045483 */ div.s $f18, $f10, $f4 -.L7F0024C4: -/* 036FF4 7F0024C4 C7A00058 */ lwc1 $f0, 0x58($sp) -.L7F0024C8: -/* 036FF8 7F0024C8 C7AC0058 */ lwc1 $f12, 0x58($sp) -/* 036FFC 7F0024CC 4600803C */ c.lt.s $f16, $f0 -/* 037000 7F0024D0 00000000 */ nop -/* 037004 7F0024D4 45020003 */ bc1fl .L7F0024E4 -/* 037008 7F0024D8 4600903C */ c.lt.s $f18, $f0 -/* 03700C 7F0024DC 46008006 */ mov.s $f0, $f16 -/* 037010 7F0024E0 4600903C */ c.lt.s $f18, $f0 -.L7F0024E4: -/* 037014 7F0024E4 00000000 */ nop -/* 037018 7F0024E8 45020003 */ bc1fl .L7F0024F8 -/* 03701C 7F0024EC 4610603C */ c.lt.s $f12, $f16 -/* 037020 7F0024F0 46009006 */ mov.s $f0, $f18 -/* 037024 7F0024F4 4610603C */ c.lt.s $f12, $f16 -.L7F0024F8: -/* 037028 7F0024F8 46006386 */ mov.s $f14, $f12 -/* 03702C 7F0024FC 306E0020 */ andi $t6, $v1, 0x20 -/* 037030 7F002500 30780040 */ andi $t8, $v1, 0x40 -/* 037034 7F002504 45020003 */ bc1fl .L7F002514 -/* 037038 7F002508 4612703C */ c.lt.s $f14, $f18 -/* 03703C 7F00250C 46008386 */ mov.s $f14, $f16 -/* 037040 7F002510 4612703C */ c.lt.s $f14, $f18 -.L7F002514: -/* 037044 7F002514 30680080 */ andi $t0, $v1, 0x80 -/* 037048 7F002518 45000002 */ bc1f .L7F002524 -/* 03704C 7F00251C 00000000 */ nop -/* 037050 7F002520 46009386 */ mov.s $f14, $f18 -.L7F002524: -/* 037054 7F002524 11A00005 */ beqz $t5, .L7F00253C -/* 037058 7F002528 00000000 */ nop -/* 03705C 7F00252C 46000486 */ mov.s $f18, $f0 -/* 037060 7F002530 46000406 */ mov.s $f16, $f0 -/* 037064 7F002534 10000031 */ b .L7F0025FC -/* 037068 7F002538 46000306 */ mov.s $f12, $f0 -.L7F00253C: -/* 03706C 7F00253C 15C0000F */ bnez $t6, .L7F00257C -/* 037070 7F002540 306F0002 */ andi $t7, $v1, 2 -/* 037074 7F002544 C4400008 */ lwc1 $f0, 8($v0) -/* 037078 7F002548 11E00007 */ beqz $t7, .L7F002568 -/* 03707C 7F00254C C4420004 */ lwc1 $f2, 4($v0) -/* 037080 7F002550 46001032 */ c.eq.s $f2, $f0 -/* 037084 7F002554 00000000 */ nop -/* 037088 7F002558 45000008 */ bc1f .L7F00257C -/* 03708C 7F00255C 00000000 */ nop -/* 037090 7F002560 10000006 */ b .L7F00257C -/* 037094 7F002564 46007306 */ mov.s $f12, $f14 -.L7F002568: -/* 037098 7F002568 46001032 */ c.eq.s $f2, $f0 -/* 03709C 7F00256C 00000000 */ nop -/* 0370A0 7F002570 45000002 */ bc1f .L7F00257C -/* 0370A4 7F002574 00000000 */ nop -/* 0370A8 7F002578 46007306 */ mov.s $f12, $f14 -.L7F00257C: -/* 0370AC 7F00257C 1700000F */ bnez $t8, .L7F0025BC -/* 0370B0 7F002580 30790002 */ andi $t9, $v1, 2 -/* 0370B4 7F002584 C4400010 */ lwc1 $f0, 0x10($v0) -/* 0370B8 7F002588 13200007 */ beqz $t9, .L7F0025A8 -/* 0370BC 7F00258C C442000C */ lwc1 $f2, 0xc($v0) -/* 0370C0 7F002590 46001032 */ c.eq.s $f2, $f0 -/* 0370C4 7F002594 00000000 */ nop -/* 0370C8 7F002598 45000008 */ bc1f .L7F0025BC -/* 0370CC 7F00259C 00000000 */ nop -/* 0370D0 7F0025A0 10000006 */ b .L7F0025BC -/* 0370D4 7F0025A4 46007486 */ mov.s $f18, $f14 -.L7F0025A8: -/* 0370D8 7F0025A8 46001032 */ c.eq.s $f2, $f0 -/* 0370DC 7F0025AC 00000000 */ nop -/* 0370E0 7F0025B0 45000002 */ bc1f .L7F0025BC -/* 0370E4 7F0025B4 00000000 */ nop -/* 0370E8 7F0025B8 46007406 */ mov.s $f16, $f14 -.L7F0025BC: -/* 0370EC 7F0025BC 1500000F */ bnez $t0, .L7F0025FC -/* 0370F0 7F0025C0 30690002 */ andi $t1, $v1, 2 -/* 0370F4 7F0025C4 C4400018 */ lwc1 $f0, 0x18($v0) -/* 0370F8 7F0025C8 11200007 */ beqz $t1, .L7F0025E8 -/* 0370FC 7F0025CC C4420014 */ lwc1 $f2, 0x14($v0) -/* 037100 7F0025D0 46001032 */ c.eq.s $f2, $f0 -/* 037104 7F0025D4 00000000 */ nop -/* 037108 7F0025D8 45020009 */ bc1fl .L7F002600 -/* 03710C 7F0025DC 460E6303 */ div.s $f12, $f12, $f14 -/* 037110 7F0025E0 10000006 */ b .L7F0025FC -/* 037114 7F0025E4 46007406 */ mov.s $f16, $f14 -.L7F0025E8: -/* 037118 7F0025E8 46001032 */ c.eq.s $f2, $f0 -/* 03711C 7F0025EC 00000000 */ nop -/* 037120 7F0025F0 45020003 */ bc1fl .L7F002600 -/* 037124 7F0025F4 460E6303 */ div.s $f12, $f12, $f14 -/* 037128 7F0025F8 46007486 */ mov.s $f18, $f14 -.L7F0025FC: -/* 03712C 7F0025FC 460E6303 */ div.s $f12, $f12, $f14 -.L7F002600: -/* 037130 7F002600 3C018005 */ lui $at, %hi(D_8004EEB4) -/* 037134 7F002604 C420EEB4 */ lwc1 $f0, %lo(D_8004EEB4)($at) -/* 037138 7F002608 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 03713C 7F00260C 460E8403 */ div.s $f16, $f16, $f14 -/* 037140 7F002610 4600603E */ c.le.s $f12, $f0 -/* 037144 7F002614 00000000 */ nop -/* 037148 7F002618 45010009 */ bc1t .L7F002640 -/* 03714C 7F00261C 460E9483 */ div.s $f18, $f18, $f14 -/* 037150 7F002620 4600803E */ c.le.s $f16, $f0 -/* 037154 7F002624 00000000 */ nop -/* 037158 7F002628 45030006 */ bc1tl .L7F002644 -/* 03715C 7F00262C 44816000 */ mtc1 $at, $f12 -/* 037160 7F002630 4600903E */ c.le.s $f18, $f0 -/* 037164 7F002634 00000000 */ nop -/* 037168 7F002638 45020006 */ bc1fl .L7F002654 -/* 03716C 7F00263C E7AE0048 */ swc1 $f14, 0x48($sp) -.L7F002640: -/* 037170 7F002640 44816000 */ mtc1 $at, $f12 -.L7F002644: -/* 037174 7F002644 00000000 */ nop -/* 037178 7F002648 46006486 */ mov.s $f18, $f12 -/* 03717C 7F00264C 46006406 */ mov.s $f16, $f12 -/* 037180 7F002650 E7AE0048 */ swc1 $f14, 0x48($sp) -.L7F002654: -/* 037184 7F002654 E7B00054 */ swc1 $f16, 0x54($sp) -/* 037188 7F002658 0FC1626D */ jal matrix_column_1_scalar_multiply -/* 03718C 7F00265C E7B20050 */ swc1 $f18, 0x50($sp) -/* 037190 7F002660 C7AC0054 */ lwc1 $f12, 0x54($sp) -/* 037194 7F002664 0FC16279 */ jal matrix_column_2_scalar_multiply -/* 037198 7F002668 27A5008C */ addiu $a1, $sp, 0x8c -/* 03719C 7F00266C C7AC0050 */ lwc1 $f12, 0x50($sp) -/* 0371A0 7F002670 0FC16293 */ jal matrix_column_3_scalar_multiply_2 -/* 0371A4 7F002674 27A5008C */ addiu $a1, $sp, 0x8c -/* 0371A8 7F002678 8E240014 */ lw $a0, 0x14($s1) -/* 0371AC 7F00267C C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 0371B0 7F002680 C4860014 */ lwc1 $f6, 0x14($a0) -/* 0371B4 7F002684 460E3282 */ mul.s $f10, $f6, $f14 -/* 0371B8 7F002688 44055000 */ mfc1 $a1, $f10 -/* 0371BC 7F00268C 0FC1B39E */ jal modelSetScale -/* 0371C0 7F002690 00000000 */ nop -.L7F002694: -/* 0371C4 7F002694 8E240014 */ lw $a0, 0x14($s1) -.L7F002698: -/* 0371C8 7F002698 C7A80078 */ lwc1 $f8, 0x78($sp) -/* 0371CC 7F00269C C4840014 */ lwc1 $f4, 0x14($a0) -/* 0371D0 7F0026A0 46082182 */ mul.s $f6, $f4, $f8 -/* 0371D4 7F0026A4 44053000 */ mfc1 $a1, $f6 -/* 0371D8 7F0026A8 0FC1B39E */ jal modelSetScale -/* 0371DC 7F0026AC 00000000 */ nop -/* 0371E0 7F0026B0 8E2A0014 */ lw $t2, 0x14($s1) -/* 0371E4 7F0026B4 27A5008C */ addiu $a1, $sp, 0x8c -/* 0371E8 7F0026B8 0FC1629F */ jal matrix_scalar_multiply -/* 0371EC 7F0026BC C54C0014 */ lwc1 $f12, 0x14($t2) -/* 0371F0 7F0026C0 8E2B0008 */ lw $t3, 8($s1) -/* 0371F4 7F0026C4 02202025 */ move $a0, $s1 -/* 0371F8 7F0026C8 27A500E0 */ addiu $a1, $sp, 0xe0 -/* 0371FC 7F0026CC 316C0002 */ andi $t4, $t3, 2 -/* 037200 7F0026D0 1180000A */ beqz $t4, .L7F0026FC -/* 037204 7F0026D4 27A6008C */ addiu $a2, $sp, 0x8c -/* 037208 7F0026D8 27AD0080 */ addiu $t5, $sp, 0x80 -/* 03720C 7F0026DC AFAD0010 */ sw $t5, 0x10($sp) -/* 037210 7F0026E0 02202025 */ move $a0, $s1 -/* 037214 7F0026E4 27A500E0 */ addiu $a1, $sp, 0xe0 -/* 037218 7F0026E8 27A6008C */ addiu $a2, $sp, 0x8c -/* 03721C 7F0026EC 0FC102E8 */ jal sub_GAME_7F040BA0 -/* 037220 7F0026F0 8FA700DC */ lw $a3, 0xdc($sp) -/* 037224 7F0026F4 10000005 */ b .L7F00270C -/* 037228 7F0026F8 00000000 */ nop -.L7F0026FC: -/* 03722C 7F0026FC 27AE0080 */ addiu $t6, $sp, 0x80 -/* 037230 7F002700 AFAE0010 */ sw $t6, 0x10($sp) -/* 037234 7F002704 0FC10223 */ jal sub_GAME_7F04088C -/* 037238 7F002708 8FA700DC */ lw $a3, 0xdc($sp) -.L7F00270C: -/* 03723C 7F00270C 0FC15B28 */ jal setupUpdateObjectRoomPosition -/* 037240 7F002710 02202025 */ move $a0, $s1 -/* 037244 7F002714 0FC0E929 */ jal chrpropActivate -/* 037248 7F002718 8FA40060 */ lw $a0, 0x60($sp) -/* 03724C 7F00271C 0FC0E901 */ jal chrpropEnable -/* 037250 7F002720 8FA40060 */ lw $a0, 0x60($sp) -.L7F002724: -/* 037254 7F002724 8FBF0034 */ lw $ra, 0x34($sp) -.L7F002728: -/* 037258 7F002728 8FB0002C */ lw $s0, 0x2c($sp) -/* 03725C 7F00272C 8FB10030 */ lw $s1, 0x30($sp) -/* 037260 7F002730 03E00008 */ jr $ra -/* 037264 7F002734 27BD00F8 */ addiu $sp, $sp, 0xf8 -) -#endif - - -#ifdef NONMATCHING +/** + * NTSC address 0x7F002738. + * PAL address 0x7F002738. +*/ void weaponAssignToHome(s32 arg0, WeaponObjRecord* weapon, s32 cmdindex) { - if ((weapon->flags & PROPFLAG_ASSIGNEDTOCHR)) { - - ChrRecord* chr = chrFindByLiteralId(weapon->pad); - - if (chr && chr->prop && chr->model) { + s32 padding; + bool hastoken; + ChrRecord* chr; + bool giveweapon; + s32 temp_a0; + struct s_mp_weapon_set* weapon_set; + + if ((weapon->flags & PROPFLAG_ASSIGNEDTOCHR)) + { + chr = chrFindByLiteralId(weapon->pad); + + if (chr && chr->prop && chr->model) + { if (cheatIsActive(CHEAT_ENEMY_ROCKETS)) { switch ((s8)weapon->weaponnum) { - case ITEM_KNIFE: - case ITEM_THROWKNIFE: - case ITEM_WPPK: - case ITEM_WPPKSIL: - case ITEM_TT33: - case ITEM_SKORPION: - case ITEM_AK47: - case ITEM_UZI: - case ITEM_MP5K: - case ITEM_MP5KSIL: - case ITEM_SPECTRE: - case ITEM_M16: - case ITEM_FNP90: - case ITEM_SHOTGUN: - case ITEM_AUTOSHOT: - case ITEM_SNIPERRIFLE: - case ITEM_RUGER: - case ITEM_GOLDENGUN: - case ITEM_SILVERWPPK: - case ITEM_GOLDWPPK: - case ITEM_LASER: - case ITEM_WATCHLASER: - case ITEM_REMOTEMINE: - case ITEM_TRIGGER: - case ITEM_TASER: - weapon->weaponnum = ITEM_ROCKETLAUNCH; - weapon->obj = PROP_CHRROCKETLAUNCH; - weapon->extrascale = 256; - break; + case ITEM_KNIFE: + case ITEM_THROWKNIFE: + case ITEM_WPPK: + case ITEM_WPPKSIL: + case ITEM_TT33: + case ITEM_SKORPION: + case ITEM_AK47: + case ITEM_UZI: + case ITEM_MP5K: + case ITEM_MP5KSIL: + case ITEM_SPECTRE: + case ITEM_M16: + case ITEM_FNP90: + case ITEM_SHOTGUN: + case ITEM_AUTOSHOT: + case ITEM_SNIPERRIFLE: + case ITEM_RUGER: + case ITEM_GOLDENGUN: + case ITEM_SILVERWPPK: + case ITEM_GOLDWPPK: + case ITEM_LASER: + case ITEM_WATCHLASER: + case ITEM_REMOTEMINE: + case ITEM_TRIGGER: + case ITEM_TASER: + weapon->weaponnum = ITEM_ROCKETLAUNCH; + weapon->obj = PROP_CHRROCKETLAUNCH; + weapon->extrascale = 256; + break; } } + weaponLoadProjectileModels((s8)weapon->weaponnum); sub_GAME_7F052030(weapon, chr); } - } else + #ifdef DEBUG + else + { + osSyncPrintf("domakeweaponobj: no chr number %d for obj number %d!\n",weapon->pad, cmdindex + 1); + } + #endif + } + else { - bool hastoken = 1; - bool giveweapon = 1; + hastoken = 1; + giveweapon = 1; + if (getPlayerCount() >= 2) { - struct s_mp_weapon_set* mpweapon; - - *(&lastmpweaponnum) = -1; + lastmpweaponnum = -1; + switch ((u8)weapon->weaponnum) { - case ITEM_UNARMED + 0xF0: - case ITEM_FIST + 0xF0: - case ITEM_KNIFE + 0xF0: - case ITEM_THROWKNIFE + 0xF0: - case ITEM_WPPK + 0xF0: - case ITEM_WPPKSIL + 0xF0: - case ITEM_TT33 + 0xF0: - case ITEM_SKORPION + 0xF0: - mpweapon = getPtrMPWeaponSetData(); - *(&lastmpweaponnum) = (u8)weapon->weaponnum - 0xF0; - - mpweapon = &(mpweapon)[lastmpweaponnum]; - weapon->weaponnum = (u8)mpweapon->itemID; - weapon->obj = (s16)mpweapon->propID; - weapon->extrascale = (u16)(mpweapon->size * 256.0f); - giveweapon = mpweapon->allowpickup; - break; - case ITEM_TOKEN: - hastoken = 1; - if (get_scenario() != SCENARIO_TLD) - { - giveweapon = 0; - } - break; + case ITEM_UNARMED + 0xF0: + case ITEM_FIST + 0xF0: + case ITEM_KNIFE + 0xF0: + case ITEM_THROWKNIFE + 0xF0: + case ITEM_WPPK + 0xF0: + case ITEM_WPPKSIL + 0xF0: + case ITEM_TT33 + 0xF0: + case ITEM_SKORPION + 0xF0: + weapon_set = getPtrMPWeaponSetData(); + + temp_a0 = (u8)weapon->weaponnum - 0xF0; + lastmpweaponnum = temp_a0; + + weapon->weaponnum = weapon_set[temp_a0].itemID; + weapon->obj = weapon_set[temp_a0].propID; +#if defined(VERSION_EU) + weapon->extrascale = (weapon_set[temp_a0].size16); +#else + weapon->extrascale = (weapon_set[temp_a0].size * 256.0f); +#endif + + giveweapon = weapon_set[temp_a0].allowpickup; + + break; + + case ITEM_TOKEN: + + hastoken = 1; + giveweapon = 1; + + if (get_scenario() != SCENARIO_TLD) + { + giveweapon = 0; + } + break; } } + if ((weapon->weaponnum != ITEM_UNARMED) && giveweapon) { weaponLoadProjectileModels(weapon->weaponnum); - domakedefaultobj(arg0, weapon, cmdindex); + domakedefaultobj(arg0, (struct ObjectRecord*)weapon, cmdindex); } } } -#else -#ifndef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel jpt_8004EEB8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027E0 -.word .L7F0027E0 -.word .L7F0027E0 -.word .L7F0027E0 -.word .L7F0027E0 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 - -glabel jpt_mp_ammo_crate_expansion -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.text -glabel weaponAssignToHome -/* 037268 7F002738 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 03726C 7F00273C AFBF0014 */ sw $ra, 0x14($sp) -/* 037270 7F002740 AFA40028 */ sw $a0, 0x28($sp) -/* 037274 7F002744 AFA60030 */ sw $a2, 0x30($sp) -/* 037278 7F002748 8CAE0008 */ lw $t6, 8($a1) -/* 03727C 7F00274C 00A03825 */ move $a3, $a1 -/* 037280 7F002750 31CF4000 */ andi $t7, $t6, 0x4000 -/* 037284 7F002754 51E0002B */ beql $t7, $zero, .L7F002804 -/* 037288 7F002758 24050001 */ li $a1, 1 -/* 03728C 7F00275C 84A40006 */ lh $a0, 6($a1) -/* 037290 7F002760 0FC08BF2 */ jal chrFindByLiteralId -/* 037294 7F002764 AFA5002C */ sw $a1, 0x2c($sp) -/* 037298 7F002768 8FA7002C */ lw $a3, 0x2c($sp) -/* 03729C 7F00276C 1040008A */ beqz $v0, .L7F002998 -/* 0372A0 7F002770 AFA2001C */ sw $v0, 0x1c($sp) -/* 0372A4 7F002774 8C580018 */ lw $t8, 0x18($v0) -/* 0372A8 7F002778 53000088 */ beql $t8, $zero, .L7F00299C -/* 0372AC 7F00277C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0372B0 7F002780 8C59001C */ lw $t9, 0x1c($v0) -/* 0372B4 7F002784 2404001C */ li $a0, 28 -/* 0372B8 7F002788 53200084 */ beql $t9, $zero, .L7F00299C -/* 0372BC 7F00278C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0372C0 7F002790 0FC249EF */ jal cheatIsActive -/* 0372C4 7F002794 AFA7002C */ sw $a3, 0x2c($sp) -/* 0372C8 7F002798 10400011 */ beqz $v0, .L7F0027E0 -/* 0372CC 7F00279C 8FA7002C */ lw $a3, 0x2c($sp) -/* 0372D0 7F0027A0 80E80080 */ lb $t0, 0x80($a3) -/* 0372D4 7F0027A4 2509FFFE */ addiu $t1, $t0, -2 -/* 0372D8 7F0027A8 2D21001E */ sltiu $at, $t1, 0x1e -/* 0372DC 7F0027AC 1020000C */ beqz $at, .L7F0027E0 -/* 0372E0 7F0027B0 00094880 */ sll $t1, $t1, 2 -/* 0372E4 7F0027B4 3C018005 */ lui $at, %hi(jpt_8004EEB8) -/* 0372E8 7F0027B8 00290821 */ addu $at, $at, $t1 -/* 0372EC 7F0027BC 8C29EEB8 */ lw $t1, %lo(jpt_8004EEB8)($at) -/* 0372F0 7F0027C0 01200008 */ jr $t1 -/* 0372F4 7F0027C4 00000000 */ nop -.L7F0027C8: -/* 0372F8 7F0027C8 240A0019 */ li $t2, 25 -/* 0372FC 7F0027CC 240B00D3 */ li $t3, 211 -/* 037300 7F0027D0 240C0100 */ li $t4, 256 -/* 037304 7F0027D4 A0EA0080 */ sb $t2, 0x80($a3) -/* 037308 7F0027D8 A4EB0004 */ sh $t3, 4($a3) -/* 03730C 7F0027DC A4EC0000 */ sh $t4, ($a3) -.L7F0027E0: -/* 037310 7F0027E0 80E40080 */ lb $a0, 0x80($a3) -/* 037314 7F0027E4 0FC015C4 */ jal weaponLoadProjectileModels -/* 037318 7F0027E8 AFA7002C */ sw $a3, 0x2c($sp) -/* 03731C 7F0027EC 8FA4002C */ lw $a0, 0x2c($sp) -/* 037320 7F0027F0 0FC1480C */ jal sub_GAME_7F052030 -/* 037324 7F0027F4 8FA5001C */ lw $a1, 0x1c($sp) -/* 037328 7F0027F8 10000068 */ b .L7F00299C -/* 03732C 7F0027FC 8FBF0014 */ lw $ra, 0x14($sp) -/* 037330 7F002800 24050001 */ li $a1, 1 -.L7F002804: -/* 037334 7F002804 AFA50018 */ sw $a1, 0x18($sp) -/* 037338 7F002808 0FC26919 */ jal getPlayerCount -/* 03733C 7F00280C AFA7002C */ sw $a3, 0x2c($sp) -/* 037340 7F002810 28410002 */ slti $at, $v0, 2 -/* 037344 7F002814 8FA50018 */ lw $a1, 0x18($sp) -/* 037348 7F002818 14200054 */ bnez $at, .L7F00296C -/* 03734C 7F00281C 8FA7002C */ lw $a3, 0x2c($sp) -/* 037350 7F002820 240DFFFF */ li $t5, -1 -/* 037354 7F002824 3C018007 */ lui $at, %hi(lastmpweaponnum) -/* 037358 7F002828 AC2D9540 */ sw $t5, %lo(lastmpweaponnum)($at) -/* 03735C 7F00282C 90E20080 */ lbu $v0, 0x80($a3) -/* 037360 7F002830 28410059 */ slti $at, $v0, 0x59 -/* 037364 7F002834 14200009 */ bnez $at, .L7F00285C -/* 037368 7F002838 244EFF10 */ addiu $t6, $v0, -0xf0 -/* 03736C 7F00283C 2DC10008 */ sltiu $at, $t6, 8 -/* 037370 7F002840 1020004A */ beqz $at, .L7F00296C -/* 037374 7F002844 000E7080 */ sll $t6, $t6, 2 -/* 037378 7F002848 3C018005 */ lui $at, %hi(jpt_mp_ammo_crate_expansion) -/* 03737C 7F00284C 002E0821 */ addu $at, $at, $t6 -/* 037380 7F002850 8C2EEF30 */ lw $t6, %lo(jpt_mp_ammo_crate_expansion)($at) -/* 037384 7F002854 01C00008 */ jr $t6 -/* 037388 7F002858 00000000 */ nop -.L7F00285C: -/* 03738C 7F00285C 24010058 */ li $at, 88 -/* 037390 7F002860 5041003B */ beql $v0, $at, .L7F002950 -/* 037394 7F002864 AFA50018 */ sw $a1, 0x18($sp) -/* 037398 7F002868 10000041 */ b .L7F002970 -/* 03739C 7F00286C 80E40080 */ lb $a0, 0x80($a3) -.L7F002870: -/* 0373A0 7F002870 0FC31985 */ jal getPtrMPWeaponSetData -/* 0373A4 7F002874 AFA7002C */ sw $a3, 0x2c($sp) -/* 0373A8 7F002878 8FA7002C */ lw $a3, 0x2c($sp) -/* 0373AC 7F00287C 3C018007 */ lui $at, %hi(lastmpweaponnum) -/* 0373B0 7F002880 24090001 */ li $t1, 1 -/* 0373B4 7F002884 90E40080 */ lbu $a0, 0x80($a3) -/* 0373B8 7F002888 2484FF10 */ addiu $a0, $a0, -0xf0 -/* 0373BC 7F00288C 00047880 */ sll $t7, $a0, 2 -/* 0373C0 7F002890 01E47823 */ subu $t7, $t7, $a0 -/* 0373C4 7F002894 000F78C0 */ sll $t7, $t7, 3 -/* 0373C8 7F002898 AC249540 */ sw $a0, %lo(lastmpweaponnum)($at) -/* 0373CC 7F00289C 004F1821 */ addu $v1, $v0, $t7 -/* 0373D0 7F0028A0 8C780000 */ lw $t8, ($v1) -/* 0373D4 7F0028A4 3C014380 */ li $at, 0x43800000 # 256.000000 -/* 0373D8 7F0028A8 44813000 */ mtc1 $at, $f6 -/* 0373DC 7F0028AC A0F80080 */ sb $t8, 0x80($a3) -/* 0373E0 7F0028B0 8C790004 */ lw $t9, 4($v1) -/* 0373E4 7F0028B4 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0373E8 7F0028B8 A4F90004 */ sh $t9, 4($a3) -/* 0373EC 7F0028BC C4640008 */ lwc1 $f4, 8($v1) -/* 0373F0 7F0028C0 46062202 */ mul.s $f8, $f4, $f6 -/* 0373F4 7F0028C4 4448F800 */ cfc1 $t0, $31 -/* 0373F8 7F0028C8 44C9F800 */ ctc1 $t1, $31 -/* 0373FC 7F0028CC 00000000 */ nop -/* 037400 7F0028D0 460042A4 */ cvt.w.s $f10, $f8 -/* 037404 7F0028D4 4449F800 */ cfc1 $t1, $31 -/* 037408 7F0028D8 00000000 */ nop -/* 03740C 7F0028DC 31290078 */ andi $t1, $t1, 0x78 -/* 037410 7F0028E0 51200013 */ beql $t1, $zero, .L7F002930 -/* 037414 7F0028E4 44095000 */ mfc1 $t1, $f10 -/* 037418 7F0028E8 44815000 */ mtc1 $at, $f10 -/* 03741C 7F0028EC 24090001 */ li $t1, 1 -/* 037420 7F0028F0 460A4281 */ sub.s $f10, $f8, $f10 -/* 037424 7F0028F4 44C9F800 */ ctc1 $t1, $31 -/* 037428 7F0028F8 00000000 */ nop -/* 03742C 7F0028FC 460052A4 */ cvt.w.s $f10, $f10 -/* 037430 7F002900 4449F800 */ cfc1 $t1, $31 -/* 037434 7F002904 00000000 */ nop -/* 037438 7F002908 31290078 */ andi $t1, $t1, 0x78 -/* 03743C 7F00290C 15200005 */ bnez $t1, .L7F002924 -/* 037440 7F002910 00000000 */ nop -/* 037444 7F002914 44095000 */ mfc1 $t1, $f10 -/* 037448 7F002918 3C018000 */ lui $at, 0x8000 -/* 03744C 7F00291C 10000007 */ b .L7F00293C -/* 037450 7F002920 01214825 */ or $t1, $t1, $at -.L7F002924: -/* 037454 7F002924 10000005 */ b .L7F00293C -/* 037458 7F002928 2409FFFF */ li $t1, -1 -/* 03745C 7F00292C 44095000 */ mfc1 $t1, $f10 -.L7F002930: -/* 037460 7F002930 00000000 */ nop -/* 037464 7F002934 0520FFFB */ bltz $t1, .L7F002924 -/* 037468 7F002938 00000000 */ nop -.L7F00293C: -/* 03746C 7F00293C 44C8F800 */ ctc1 $t0, $31 -/* 037470 7F002940 A4E90000 */ sh $t1, ($a3) -/* 037474 7F002944 10000009 */ b .L7F00296C -/* 037478 7F002948 8C650014 */ lw $a1, 0x14($v1) -/* 03747C 7F00294C AFA50018 */ sw $a1, 0x18($sp) -.L7F002950: -/* 037480 7F002950 0FC051D6 */ jal get_scenario -/* 037484 7F002954 AFA7002C */ sw $a3, 0x2c($sp) -/* 037488 7F002958 24010002 */ li $at, 2 -/* 03748C 7F00295C 8FA50018 */ lw $a1, 0x18($sp) -/* 037490 7F002960 10410002 */ beq $v0, $at, .L7F00296C -/* 037494 7F002964 8FA7002C */ lw $a3, 0x2c($sp) -/* 037498 7F002968 00002825 */ move $a1, $zero -def_7F002854: -.L7F00296C: -/* 03749C 7F00296C 80E40080 */ lb $a0, 0x80($a3) -.L7F002970: -/* 0374A0 7F002970 5080000A */ beql $a0, $zero, .L7F00299C -/* 0374A4 7F002974 8FBF0014 */ lw $ra, 0x14($sp) -/* 0374A8 7F002978 50A00008 */ beql $a1, $zero, .L7F00299C -/* 0374AC 7F00297C 8FBF0014 */ lw $ra, 0x14($sp) -/* 0374B0 7F002980 0FC015C4 */ jal weaponLoadProjectileModels -/* 0374B4 7F002984 AFA7002C */ sw $a3, 0x2c($sp) -/* 0374B8 7F002988 8FA5002C */ lw $a1, 0x2c($sp) -/* 0374BC 7F00298C 8FA40028 */ lw $a0, 0x28($sp) -/* 0374C0 7F002990 0FC00767 */ jal domakedefaultobj -/* 0374C4 7F002994 8FA60030 */ lw $a2, 0x30($sp) -.L7F002998: -/* 0374C8 7F002998 8FBF0014 */ lw $ra, 0x14($sp) -.L7F00299C: -/* 0374CC 7F00299C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0374D0 7F0029A0 03E00008 */ jr $ra -/* 0374D4 7F0029A4 00000000 */ nop -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel jpt_8004EEB8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027E0 -.word .L7F0027E0 -.word .L7F0027E0 -.word .L7F0027E0 -.word .L7F0027E0 -.word .L7F0027C8 -.word .L7F0027C8 -.word .L7F0027C8 -glabel jpt_mp_ammo_crate_expansion -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.word .L7F002870 -.text -glabel weaponAssignToHome -/* 035128 7F002738 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 03512C 7F00273C AFBF0014 */ sw $ra, 0x14($sp) -/* 035130 7F002740 AFA40028 */ sw $a0, 0x28($sp) -/* 035134 7F002744 AFA60030 */ sw $a2, 0x30($sp) -/* 035138 7F002748 8CAE0008 */ lw $t6, 8($a1) -/* 03513C 7F00274C 00A03825 */ move $a3, $a1 -/* 035140 7F002750 31CF4000 */ andi $t7, $t6, 0x4000 -/* 035144 7F002754 51E0002B */ beql $t7, $zero, .L7F002804 -/* 035148 7F002758 24050001 */ li $a1, 1 -/* 03514C 7F00275C 84A40006 */ lh $a0, 6($a1) -/* 035150 7F002760 0FC08BE4 */ jal chrFindByLiteralId -/* 035154 7F002764 AFA5002C */ sw $a1, 0x2c($sp) -/* 035158 7F002768 8FA7002C */ lw $a3, 0x2c($sp) -/* 03515C 7F00276C 10400064 */ beqz $v0, .L7F002900 -/* 035160 7F002770 AFA2001C */ sw $v0, 0x1c($sp) -/* 035164 7F002774 8C580018 */ lw $t8, 0x18($v0) -/* 035168 7F002778 53000062 */ beql $t8, $zero, .L7F002904 -/* 03516C 7F00277C 8FBF0014 */ lw $ra, 0x14($sp) -/* 035170 7F002780 8C59001C */ lw $t9, 0x1c($v0) -/* 035174 7F002784 2404001C */ li $a0, 28 -/* 035178 7F002788 5320005E */ beql $t9, $zero, .L7F002904 -/* 03517C 7F00278C 8FBF0014 */ lw $ra, 0x14($sp) -/* 035180 7F002790 0FC24737 */ jal cheatIsActive -/* 035184 7F002794 AFA7002C */ sw $a3, 0x2c($sp) -/* 035188 7F002798 10400011 */ beqz $v0, .L7F0027E0 -/* 03518C 7F00279C 8FA7002C */ lw $a3, 0x2c($sp) -/* 035190 7F0027A0 80E80080 */ lb $t0, 0x80($a3) -/* 035194 7F0027A4 2509FFFE */ addiu $t1, $t0, -2 -/* 035198 7F0027A8 2D21001E */ sltiu $at, $t1, 0x1e -/* 03519C 7F0027AC 1020000C */ beqz $at, .L7F0027E0 -/* 0351A0 7F0027B0 00094880 */ sll $t1, $t1, 2 -/* 0351A4 7F0027B4 3C018004 */ lui $at, %hi(jpt_8004EEB8) -/* 0351A8 7F0027B8 00290821 */ addu $at, $at, $t1 -/* 0351AC 7F0027BC 8C2972F8 */ lw $t1, %lo(jpt_8004EEB8)($at) -/* 0351B0 7F0027C0 01200008 */ jr $t1 -/* 0351B4 7F0027C4 00000000 */ nop -.L7F0027C8: -/* 0351B8 7F0027C8 240A0019 */ li $t2, 25 -/* 0351BC 7F0027CC 240B00D3 */ li $t3, 211 -/* 0351C0 7F0027D0 240C0100 */ li $t4, 256 -/* 0351C4 7F0027D4 A0EA0080 */ sb $t2, 0x80($a3) -/* 0351C8 7F0027D8 A4EB0004 */ sh $t3, 4($a3) -/* 0351CC 7F0027DC A4EC0000 */ sh $t4, ($a3) -.L7F0027E0: -/* 0351D0 7F0027E0 80E40080 */ lb $a0, 0x80($a3) -/* 0351D4 7F0027E4 0FC015AC */ jal weaponLoadProjectileModels -/* 0351D8 7F0027E8 AFA7002C */ sw $a3, 0x2c($sp) -/* 0351DC 7F0027EC 8FA4002C */ lw $a0, 0x2c($sp) -/* 0351E0 7F0027F0 0FC148C4 */ jal sub_GAME_7F052030 -/* 0351E4 7F0027F4 8FA5001C */ lw $a1, 0x1c($sp) -/* 0351E8 7F0027F8 10000042 */ b .L7F002904 -/* 0351EC 7F0027FC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0351F0 7F002800 24050001 */ li $a1, 1 -.L7F002804: -/* 0351F4 7F002804 AFA50018 */ sw $a1, 0x18($sp) -/* 0351F8 7F002808 0FC26669 */ jal getPlayerCount -/* 0351FC 7F00280C AFA7002C */ sw $a3, 0x2c($sp) -/* 035200 7F002810 28410002 */ slti $at, $v0, 2 -/* 035204 7F002814 8FA50018 */ lw $a1, 0x18($sp) -/* 035208 7F002818 1420002E */ bnez $at, .L7F0028D4 -/* 03520C 7F00281C 8FA7002C */ lw $a3, 0x2c($sp) -/* 035210 7F002820 240DFFFF */ li $t5, -1 -/* 035214 7F002824 3C018006 */ lui $at, %hi(lastmpweaponnum) # $at, 0x8006 -/* 035218 7F002828 AC2D8480 */ sw $t5, %lo(lastmpweaponnum)($at) -/* 03521C 7F00282C 90E20080 */ lbu $v0, 0x80($a3) -/* 035220 7F002830 28410059 */ slti $at, $v0, 0x59 -/* 035224 7F002834 14200009 */ bnez $at, .L7F00285C -/* 035228 7F002838 244EFF10 */ addiu $t6, $v0, -0xf0 -/* 03522C 7F00283C 2DC10008 */ sltiu $at, $t6, 8 -/* 035230 7F002840 10200024 */ beqz $at, .L7F0028D4 -/* 035234 7F002844 000E7080 */ sll $t6, $t6, 2 -/* 035238 7F002848 3C018004 */ lui $at, %hi(jpt_mp_ammo_crate_expansion) -/* 03523C 7F00284C 002E0821 */ addu $at, $at, $t6 -/* 035240 7F002850 8C2E7370 */ lw $t6, %lo(jpt_mp_ammo_crate_expansion)($at) -/* 035244 7F002854 01C00008 */ jr $t6 -/* 035248 7F002858 00000000 */ nop -.L7F00285C: -/* 03524C 7F00285C 24010058 */ li $at, 88 -/* 035250 7F002860 50410015 */ beql $v0, $at, .L7F0028B8 -/* 035254 7F002864 AFA50018 */ sw $a1, 0x18($sp) -/* 035258 7F002868 1000001B */ b .L7F0028D8 -/* 03525C 7F00286C 80E40080 */ lb $a0, 0x80($a3) -.L7F002870: -/* 035260 7F002870 0FC316CD */ jal getPtrMPWeaponSetData -/* 035264 7F002874 AFA7002C */ sw $a3, 0x2c($sp) -/* 035268 7F002878 8FA7002C */ lw $a3, 0x2c($sp) -/* 03526C 7F00287C 3C018006 */ lui $at, %hi(lastmpweaponnum) # $at, 0x8006 -/* 035270 7F002880 90E40080 */ lbu $a0, 0x80($a3) -/* 035274 7F002884 2484FF10 */ addiu $a0, $a0, -0xf0 -/* 035278 7F002888 000478C0 */ sll $t7, $a0, 3 -/* 03527C 7F00288C AC248480 */ sw $a0, %lo(lastmpweaponnum)($at) -/* 035280 7F002890 004F1821 */ addu $v1, $v0, $t7 -/* 035284 7F002894 80780000 */ lb $t8, ($v1) -/* 035288 7F002898 A0F80080 */ sb $t8, 0x80($a3) -/* 03528C 7F00289C 84790004 */ lh $t9, 4($v1) -/* 035290 7F0028A0 A4F90004 */ sh $t9, 4($a3) -/* 035294 7F0028A4 84680006 */ lh $t0, 6($v1) -/* 035298 7F0028A8 A4E80000 */ sh $t0, ($a3) -/* 03529C 7F0028AC 10000009 */ b .L7F0028D4 -/* 0352A0 7F0028B0 80650003 */ lb $a1, 3($v1) -/* 0352A4 7F0028B4 AFA50018 */ sw $a1, 0x18($sp) -.L7F0028B8: -/* 0352A8 7F0028B8 0FC051B2 */ jal get_scenario -/* 0352AC 7F0028BC AFA7002C */ sw $a3, 0x2c($sp) -/* 0352B0 7F0028C0 24010002 */ li $at, 2 -/* 0352B4 7F0028C4 8FA50018 */ lw $a1, 0x18($sp) -/* 0352B8 7F0028C8 10410002 */ beq $v0, $at, .L7F0028D4 -/* 0352BC 7F0028CC 8FA7002C */ lw $a3, 0x2c($sp) -/* 0352C0 7F0028D0 00002825 */ move $a1, $zero -.L7F0028D4: -/* 0352C4 7F0028D4 80E40080 */ lb $a0, 0x80($a3) -.L7F0028D8: -/* 0352C8 7F0028D8 5080000A */ beql $a0, $zero, .L7F002904 -/* 0352CC 7F0028DC 8FBF0014 */ lw $ra, 0x14($sp) -/* 0352D0 7F0028E0 50A00008 */ beql $a1, $zero, .L7F002904 -/* 0352D4 7F0028E4 8FBF0014 */ lw $ra, 0x14($sp) -/* 0352D8 7F0028E8 0FC015AC */ jal weaponLoadProjectileModels -/* 0352DC 7F0028EC AFA7002C */ sw $a3, 0x2c($sp) -/* 0352E0 7F0028F0 8FA5002C */ lw $a1, 0x2c($sp) -/* 0352E4 7F0028F4 8FA40028 */ lw $a0, 0x28($sp) -/* 0352E8 7F0028F8 0FC00767 */ jal domakedefaultobj -/* 0352EC 7F0028FC 8FA60030 */ lw $a2, 0x30($sp) -.L7F002900: -/* 0352F0 7F002900 8FBF0014 */ lw $ra, 0x14($sp) -.L7F002904: -/* 0352F4 7F002904 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0352F8 7F002908 03E00008 */ jr $ra -/* 0352FC 7F00290C 00000000 */ nop -) -#endif -#endif - //i should be object hat void setupHat(s32 arg0, ObjectRecord* hat, s32 cmdindex) { @@ -1795,6 +624,12 @@ void setupHat(s32 arg0, ObjectRecord* hat, s32 cmdindex) if (chr && chr->prop && chr->model) { hatAssignToChr(hat, chr); } + #ifdef DEBUG + else + { + osSyncPrintf("domakehatobj: no chr number %d for obj number %d!\n",hat->pad, cmdindex + 1); + } + #endif } else { domakedefaultobj(arg0, hat, cmdindex); } @@ -1807,161 +642,62 @@ void setupKey(s32 arg0, ObjectRecord* key, s32 cmdindex) } +/** + * NTSC address 0x7F002A3C. +*/ +void setupCctv(s32 arg0, CCTVRecord *arg1, s32 cmdindex) +{ + struct coord3d *temp_a2; + struct PadRecord *sp50; + struct coord3d sp44; + Mtxf *sp3C; -#ifdef NONMATCHING -void setupCctv(void) { + domakedefaultobj(arg0, (struct ObjectRecord*)arg1, cmdindex); + if (arg1->pad >= 0) + { + temp_a2 = (struct coord3d*)arg1->model->obj->Switches[0]->Data; + + if (isNotBoundPad(arg1->pad)) + { + sp50 = &g_CurrentSetup.pads[arg1->pad]; + } + else + { + sp50 = (struct PadRecord *)&g_CurrentSetup.boundpads[getBoundPadNum(arg1->pad)]; + } + + sp44.f[0] = temp_a2->f[0]; + sp44.f[1] = temp_a2->f[1]; + sp44.f[2] = temp_a2->f[2]; + + mtx4RotateVecInPlace(&arg1->mtx, &sp44); + + sp3C = &arg1->unk84; + + sp44.f[0] += arg1->prop->pos.f[0]; + sp44.f[1] += arg1->prop->pos.f[1]; + sp44.f[2] += arg1->prop->pos.f[2]; + + matrix_4x4_7F059908(sp3C, 0.0f, 0.0f, 0.0f, sp44.f[0] - sp50->pos.f[0], sp44.f[1] - sp50->pos.f[1], sp44.f[2] - sp50->pos.f[2], 0.0f, 1.0f, 0.0f); + matrix_scalar_multiply(arg1->model->scale, sp3C->m[0]); + + if (arg1->convert_to_f32 == 0) + { + arg1->convert_to_f32 = 1; + arg1->unkCC = (*(s32*)&arg1->unkCC * M_TAU_F) / 65536.0f; + arg1->unkD0 = (*(s32*)&arg1->unkD0 * M_TAU_F) / 65536.0f; + arg1->unkDC = (*(s32*)&arg1->unkDC * M_TAU_F) / 65536.0f; + arg1->unkE8 = *(s32*)&arg1->unkE8; + } + + arg1->unkD4 = 0; + arg1->unkD8 = 0.0f; + arg1->unkC8 = arg1->unkCC; + arg1->unkC4 = atan2f(sp44.f[0] - sp50->pos.f[0], sp44.f[2] - sp50->pos.f[2]); + arg1->timer = 0; + } } -#else -GLOBAL_ASM( -.late_rodata -glabel D_8004EF50 -.word 0x40c90fdb - - -.text -glabel setupCctv -/* 03756C 7F002A3C 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 037570 7F002A40 AFBF0034 */ sw $ra, 0x34($sp) -/* 037574 7F002A44 AFB00030 */ sw $s0, 0x30($sp) -/* 037578 7F002A48 0FC00767 */ jal domakedefaultobj -/* 03757C 7F002A4C 00A08025 */ move $s0, $a1 -/* 037580 7F002A50 8E020080 */ lw $v0, 0x80($s0) -/* 037584 7F002A54 0442007C */ bltzl $v0, .L7F002C48 -/* 037588 7F002A58 8FBF0034 */ lw $ra, 0x34($sp) -/* 03758C 7F002A5C 8E0E0014 */ lw $t6, 0x14($s0) -/* 037590 7F002A60 00025100 */ sll $t2, $v0, 4 -/* 037594 7F002A64 28412710 */ slti $at, $v0, 0x2710 -/* 037598 7F002A68 8DCF0008 */ lw $t7, 8($t6) -/* 03759C 7F002A6C 00024080 */ sll $t0, $v0, 2 -/* 0375A0 7F002A70 01425021 */ addu $t2, $t2, $v0 -/* 0375A4 7F002A74 8DF80008 */ lw $t8, 8($t7) -/* 0375A8 7F002A78 01024023 */ subu $t0, $t0, $v0 -/* 0375AC 7F002A7C 000A5080 */ sll $t2, $t2, 2 -/* 0375B0 7F002A80 8F190000 */ lw $t9, ($t8) -/* 0375B4 7F002A84 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x1C) -/* 0375B8 7F002A88 10200008 */ beqz $at, .L7F002AAC -/* 0375BC 7F002A8C 8F260004 */ lw $a2, 4($t9) -/* 0375C0 7F002A90 00084080 */ sll $t0, $t0, 2 -/* 0375C4 7F002A94 3C098007 */ lui $t1, %hi(g_CurrentSetup+0x18) -/* 0375C8 7F002A98 8D295D18 */ lw $t1, %lo(g_CurrentSetup+0x18)($t1) -/* 0375CC 7F002A9C 01024023 */ subu $t0, $t0, $v0 -/* 0375D0 7F002AA0 00084080 */ sll $t0, $t0, 2 -/* 0375D4 7F002AA4 10000006 */ b .L7F002AC0 -/* 0375D8 7F002AA8 01091821 */ addu $v1, $t0, $t1 -.L7F002AAC: -/* 0375DC 7F002AAC 8D6B5D1C */ lw $t3, %lo(g_CurrentSetup+0x1C)($t3) -/* 0375E0 7F002AB0 3C01FFF5 */ lui $at, (0xFFF59FC0 >> 16) # lui $at, 0xfff5 -/* 0375E4 7F002AB4 34219FC0 */ ori $at, (0xFFF59FC0 & 0xFFFF) # ori $at, $at, 0x9fc0 -/* 0375E8 7F002AB8 014B1821 */ addu $v1, $t2, $t3 -/* 0375EC 7F002ABC 00611821 */ addu $v1, $v1, $at -.L7F002AC0: -/* 0375F0 7F002AC0 C4C40000 */ lwc1 $f4, ($a2) -/* 0375F4 7F002AC4 26040018 */ addiu $a0, $s0, 0x18 -/* 0375F8 7F002AC8 27A50044 */ addiu $a1, $sp, 0x44 -/* 0375FC 7F002ACC E7A40044 */ swc1 $f4, 0x44($sp) -/* 037600 7F002AD0 C4C60004 */ lwc1 $f6, 4($a2) -/* 037604 7F002AD4 E7A60048 */ swc1 $f6, 0x48($sp) -/* 037608 7F002AD8 C4C80008 */ lwc1 $f8, 8($a2) -/* 03760C 7F002ADC AFA30050 */ sw $v1, 0x50($sp) -/* 037610 7F002AE0 0FC160F6 */ jal mtx4RotateVecInPlace -/* 037614 7F002AE4 E7A8004C */ swc1 $f8, 0x4c($sp) -/* 037618 7F002AE8 8E0C0010 */ lw $t4, 0x10($s0) -/* 03761C 7F002AEC C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 037620 7F002AF0 C7A40048 */ lwc1 $f4, 0x48($sp) -/* 037624 7F002AF4 C5900008 */ lwc1 $f16, 8($t4) -/* 037628 7F002AF8 8FA30050 */ lw $v1, 0x50($sp) -/* 03762C 7F002AFC 44800000 */ mtc1 $zero, $f0 -/* 037630 7F002B00 46105480 */ add.s $f18, $f10, $f16 -/* 037634 7F002B04 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 037638 7F002B08 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 03763C 7F002B0C 26040084 */ addiu $a0, $s0, 0x84 -/* 037640 7F002B10 E7B20044 */ swc1 $f18, 0x44($sp) -/* 037644 7F002B14 8E0D0010 */ lw $t5, 0x10($s0) -/* 037648 7F002B18 44050000 */ mfc1 $a1, $f0 -/* 03764C 7F002B1C 44060000 */ mfc1 $a2, $f0 -/* 037650 7F002B20 C5A6000C */ lwc1 $f6, 0xc($t5) -/* 037654 7F002B24 44070000 */ mfc1 $a3, $f0 -/* 037658 7F002B28 46062200 */ add.s $f8, $f4, $f6 -/* 03765C 7F002B2C E7A80048 */ swc1 $f8, 0x48($sp) -/* 037660 7F002B30 8E0E0010 */ lw $t6, 0x10($s0) -/* 037664 7F002B34 C5D00010 */ lwc1 $f16, 0x10($t6) -/* 037668 7F002B38 46105100 */ add.s $f4, $f10, $f16 -/* 03766C 7F002B3C E7A4004C */ swc1 $f4, 0x4c($sp) -/* 037670 7F002B40 C4660000 */ lwc1 $f6, ($v1) -/* 037674 7F002B44 46069281 */ sub.s $f10, $f18, $f6 -/* 037678 7F002B48 E7AA0010 */ swc1 $f10, 0x10($sp) -/* 03767C 7F002B4C C4700004 */ lwc1 $f16, 4($v1) -/* 037680 7F002B50 46104481 */ sub.s $f18, $f8, $f16 -/* 037684 7F002B54 44814000 */ mtc1 $at, $f8 -/* 037688 7F002B58 E7B20014 */ swc1 $f18, 0x14($sp) -/* 03768C 7F002B5C C4660008 */ lwc1 $f6, 8($v1) -/* 037690 7F002B60 AFA4003C */ sw $a0, 0x3c($sp) -/* 037694 7F002B64 E7A00024 */ swc1 $f0, 0x24($sp) -/* 037698 7F002B68 46062281 */ sub.s $f10, $f4, $f6 -/* 03769C 7F002B6C E7A0001C */ swc1 $f0, 0x1c($sp) -/* 0376A0 7F002B70 E7A80020 */ swc1 $f8, 0x20($sp) -/* 0376A4 7F002B74 0FC16642 */ jal matrix_4x4_7F059908 -/* 0376A8 7F002B78 E7AA0018 */ swc1 $f10, 0x18($sp) -/* 0376AC 7F002B7C 8E0F0014 */ lw $t7, 0x14($s0) -/* 0376B0 7F002B80 8FA5003C */ lw $a1, 0x3c($sp) -/* 0376B4 7F002B84 0FC1629F */ jal matrix_scalar_multiply -/* 0376B8 7F002B88 C5EC0014 */ lwc1 $f12, 0x14($t7) -/* 0376BC 7F002B8C 8E1800E4 */ lw $t8, 0xe4($s0) -/* 0376C0 7F002B90 44800000 */ mtc1 $zero, $f0 -/* 0376C4 7F002B94 8FA30050 */ lw $v1, 0x50($sp) -/* 0376C8 7F002B98 5700001E */ bnezl $t8, .L7F002C14 -/* 0376CC 7F002B9C C60400CC */ lwc1 $f4, 0xcc($s0) -/* 0376D0 7F002BA0 8E0800CC */ lw $t0, 0xcc($s0) -/* 0376D4 7F002BA4 3C018005 */ lui $at, %hi(D_8004EF50) -/* 0376D8 7F002BA8 C422EF50 */ lwc1 $f2, %lo(D_8004EF50)($at) -/* 0376DC 7F002BAC 44888000 */ mtc1 $t0, $f16 -/* 0376E0 7F002BB0 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 0376E4 7F002BB4 44816000 */ mtc1 $at, $f12 -/* 0376E8 7F002BB8 468084A0 */ cvt.s.w $f18, $f16 -/* 0376EC 7F002BBC 8E0900D0 */ lw $t1, 0xd0($s0) -/* 0376F0 7F002BC0 8E0A00DC */ lw $t2, 0xdc($s0) -/* 0376F4 7F002BC4 8E0B00E8 */ lw $t3, 0xe8($s0) -/* 0376F8 7F002BC8 44895000 */ mtc1 $t1, $f10 -/* 0376FC 7F002BCC 24190001 */ li $t9, 1 -/* 037700 7F002BD0 46029102 */ mul.s $f4, $f18, $f2 -/* 037704 7F002BD4 AE1900E4 */ sw $t9, 0xe4($s0) -/* 037708 7F002BD8 46805220 */ cvt.s.w $f8, $f10 -/* 03770C 7F002BDC 460C2183 */ div.s $f6, $f4, $f12 -/* 037710 7F002BE0 448A2000 */ mtc1 $t2, $f4 -/* 037714 7F002BE4 46024402 */ mul.s $f16, $f8, $f2 -/* 037718 7F002BE8 460C8483 */ div.s $f18, $f16, $f12 -/* 03771C 7F002BEC E60600CC */ swc1 $f6, 0xcc($s0) -/* 037720 7F002BF0 448B8000 */ mtc1 $t3, $f16 -/* 037724 7F002BF4 468021A0 */ cvt.s.w $f6, $f4 -/* 037728 7F002BF8 46023282 */ mul.s $f10, $f6, $f2 -/* 03772C 7F002BFC E61200D0 */ swc1 $f18, 0xd0($s0) -/* 037730 7F002C00 468084A0 */ cvt.s.w $f18, $f16 -/* 037734 7F002C04 460C5203 */ div.s $f8, $f10, $f12 -/* 037738 7F002C08 E61200E8 */ swc1 $f18, 0xe8($s0) -/* 03773C 7F002C0C E60800DC */ swc1 $f8, 0xdc($s0) -/* 037740 7F002C10 C60400CC */ lwc1 $f4, 0xcc($s0) -.L7F002C14: -/* 037744 7F002C14 AE0000D4 */ sw $zero, 0xd4($s0) -/* 037748 7F002C18 E60000D8 */ swc1 $f0, 0xd8($s0) -/* 03774C 7F002C1C E60400C8 */ swc1 $f4, 0xc8($s0) -/* 037750 7F002C20 C4700008 */ lwc1 $f16, 8($v1) -/* 037754 7F002C24 C7A8004C */ lwc1 $f8, 0x4c($sp) -/* 037758 7F002C28 C46A0000 */ lwc1 $f10, ($v1) -/* 03775C 7F002C2C C7A60044 */ lwc1 $f6, 0x44($sp) -/* 037760 7F002C30 46104381 */ sub.s $f14, $f8, $f16 -/* 037764 7F002C34 0FC16A8C */ jal atan2f -/* 037768 7F002C38 460A3301 */ sub.s $f12, $f6, $f10 -/* 03776C 7F002C3C E60000C4 */ swc1 $f0, 0xc4($s0) -/* 037770 7F002C40 AE0000E0 */ sw $zero, 0xe0($s0) -/* 037774 7F002C44 8FBF0034 */ lw $ra, 0x34($sp) -.L7F002C48: -/* 037778 7F002C48 8FB00030 */ lw $s0, 0x30($sp) -/* 03777C 7F002C4C 27BD0058 */ addiu $sp, $sp, 0x58 -/* 037780 7F002C50 03E00008 */ jr $ra -/* 037784 7F002C54 00000000 */ nop -) -#endif void setupAutogun(s32 stageID, AutogunRecord *autogun, s32 cmdindex) { @@ -1998,7 +734,7 @@ void setupAutogun(s32 stageID, AutogunRecord *autogun, s32 cmdindex) autogun->unk8C = ((*((s32 *) (&autogun->unk8C))) * M_TAU_F) / 65536.0f; #endif - beam = mempAllocBytesInBank(0x30U, 4U); + beam = mempAllocBytesInBank(0x30U, MEMPOOL_STAGE); autogun->beam = beam; *beam = -1; @@ -2134,7 +870,7 @@ void setupMultiMonitor(s32 stageID, MultiMonitorObjRecord* monitor, s32 cmdindex void sub_GAME_7F00324C(struct BoundPadRecord *arg0, s32 *arg1, s32 *arg2, struct coord3d *arg3, struct coord3d *arg4) { StandTile *sp4C; - struct coord3d normal; + struct coord3d normal; s32 padding; struct coord3d center; StandTile *sp2C; @@ -2142,7 +878,7 @@ void sub_GAME_7F00324C(struct BoundPadRecord *arg0, s32 *arg1, s32 *arg2, struct sub_GAME_7F001BD4(arg0, ¢er); sp2C = (StandTile *)arg0->stan; - + if (walkTilesBetweenPoints_NoCallback(&sp2C, arg0->pos.f[0], arg0->pos.f[2], center.f[0], center.f[2]) == 0) { sp2C = (StandTile *)arg0->stan; @@ -2157,33 +893,33 @@ void sub_GAME_7F00324C(struct BoundPadRecord *arg0, s32 *arg1, s32 *arg2, struct scale = 1.0f / sqrtf(((normal.f[0] * normal.f[0]) + (normal.f[1] * normal.f[1])) + (normal.f[2] * normal.f[2])); sp4C = sp2C; - + normal.f[0] *= scale; normal.f[1] *= scale; normal.f[2] *= scale; - + arg3->f[0] = center.f[0] + (normal.f[0] * 50.0f); arg3->f[1] = center.f[1]; arg3->f[2] = center.f[2] + (normal.f[2] * 50.0f); - - + + walkTilesBetweenPoints_NoCallback(&sp4C, center.f[0], center.f[2], arg3->f[0], arg3->f[2]); - + if (1); - + *arg1 = (s32) sp4C->room; sp4C = sp2C; - + arg4->f[0] = center.f[0] - (normal.f[0] * 50.0f); arg4->f[1] = center.f[1]; arg4->f[2] = center.f[2] - (normal.f[2] * 50.0f); - + walkTilesBetweenPoints_NoCallback(&sp4C, center.f[0], center.f[2], arg4->f[0], arg4->f[2]); - + if (1); - + *arg2 = (s32) sp4C->room; - + if (*arg2 == *arg1) { *arg2 = -1; @@ -2193,7 +929,7 @@ void sub_GAME_7F00324C(struct BoundPadRecord *arg0, s32 *arg1, s32 *arg2, struct extern f32 g_DoorScale; /** - * + * * NTSC ADDRESS: 7F003480 * PAL ADDRESS: 7F0033F0 * Perfect Dark: void setupCreateDoor(struct doorobj *door, s32 cmdindex) @@ -2222,7 +958,7 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) StandTile *sp114_stan; Mtxf spD4; struct coord3d spC8; - Mtxf sp88; + Mtxf sp88; struct coord3d sp7C; struct bbox bb2; f32 xscale; @@ -2233,7 +969,7 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) u8 *padding2; modelnum = door->obj; - + portalnum = -1; sp1B0 = -1; sp1AC = -1; @@ -2241,26 +977,26 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) modelLoad(modelnum); pad = &(g_CurrentSetup.boundpads[door->pad]); - + if ((door->flags & PROPFLAG_CULL_BEHIND_DOOR) || (door->flags & PROPFLAG_NO_PORTAL_CLOSE)) { sub_GAME_7F00324C(pad, &sp1B0, &sp1AC, &sp1A0, &sp194); - + if ((door->flags & PROPFLAG_CULL_BEHIND_DOOR) && (sp1B0 >= 0) && (sp1AC >= 0)) { portalnum = sub_GAME_7F0B9CC8(sp1B0, sp1AC, &sp1A0, &sp194); } } - + if (g_DoorScale != 1.0f) { if (portalnum >= 0) { sub_GAME_7F0B96CC(portalnum, &sp180); sp180.min *= get_room_data_float2(); - + temp_f2 = (pad->pos.f[0] * sp180.normal.f[0]) + (pad->pos.f[1] * sp180.normal.f[1]) + (pad->pos.f[2] * sp180.normal.f[2]); - + if (g_DoorScale < 1.0f) { temp_f2 = (temp_f2 - sp180.min) * (1.0f - g_DoorScale); @@ -2275,7 +1011,7 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) sp170.f[1] = pad->pos.f[1] + (sp180.normal.f[1] * temp_f2); sp170.f[2] = pad->pos.f[2] + (sp180.normal.f[2] * temp_f2); } - + sp16C = pad->stan; if (walkTilesBetweenPoints_NoCallback(&sp16C, pad->pos.f[0], pad->pos.f[2], sp170.f[0], sp170.f[2]) != 0) { @@ -2286,6 +1022,12 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) pad->bbox.xmin *= g_DoorScale; pad->bbox.xmax *= g_DoorScale; } + #ifdef DEBUG + else + { + osSyncPrintf("volume for door object number %d did not have depth changed!\n",arg2 + 1); + } + #endif } else { @@ -2293,8 +1035,8 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) pad->bbox.xmax *= g_DoorScale; } } - - if (sub_GAME_7F056850((PadRecord *)pad, pad->stan, 0.0f, &sp1B8, &sp1C8_stan) != 0) + + if (sub_GAME_7F056850(&pad->pos, pad->stan, 0.0f, &sp1B8, &sp1C8_stan) != 0) { matrix_4x4_7F059908(&sp12C, 0, 0, 0, -pad->look.f[0], -pad->look.f[1], -pad->look.f[2], pad->up.f[0], pad->up.f[1], pad->up.f[2]); sp124 = PitemZ_entries[modelnum].header; @@ -2318,22 +1060,25 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) xscale = (bb2.ymin - bb2.ymax) / (temp_v0->Bounds.xmax - temp_v0->Bounds.xmin); yscale = (bb2.xmin - bb2.xmax) / (temp_v0->Bounds.ymax - temp_v0->Bounds.ymin); zscale = (bb2.zmin - bb2.zmax) / (temp_v0->Bounds.zmax - temp_v0->Bounds.zmin); - + if ((xscale <= 0.000001f) || (yscale <= 0.000001f) || (zscale <= 0.000001f)) { - xscale = - yscale = + #ifdef DEBUG + osSyncPrintf("Scale warning: door object number %d has a small scale: %f,%f,%f\n",arg2 +1, xscale,yscale,zscale); + #endif + xscale = + yscale = zscale = 1.0f; } matrix_column_1_scalar_multiply(xscale, spD4.m[0]); matrix_column_2_scalar_multiply(yscale, spD4.m[0]); matrix_column_3_scalar_multiply_2(zscale, spD4.m[0]); - + spC8.f[0] = sp118.f[0]; spC8.f[1] = sp118.f[1]; spC8.f[2] = sp118.f[2]; - + if (!(door->flags2 & 1)) { if (walkTilesBetweenPoints_NoCallback(&sp114_stan, sp1B8.f[0], sp1B8.f[2], sp118.f[0], sp118.f[2]) != 0) @@ -2344,10 +1089,13 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) { sp118.f[0] = sp1B8.f[0]; sp118.f[2] = sp1B8.f[2]; - + if (!(door->flags & 0x1000)) // prop flag PROPFLAG_00001000 "Absolute Position" { - // + #ifdef DEBUG + osSyncPrintf("door object number %d not positioned correctly!\n",arg2 +1); + #endif + } } } @@ -2379,13 +1127,13 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) #if defined(VERSION_EU) door->accel = (*(s32 *) &door->accel) * 1.2f / 65536.0f; door->decel = (*(s32 *) &door->decel) * 1.2f / 65536.0f; - door->maxSpeed = (*(s32 *) &door->maxSpeed) * 1.2f / 65536.0f; + door->maxSpeed = (*(s32 *) &door->maxSpeed) * 1.2f / 65536.0f; #else door->accel = (*(s32 *) &door->accel) / 65536.0f; door->decel = (*(s32 *) &door->decel) / 65536.0f; - door->maxSpeed = (*(s32 *) &door->maxSpeed) / 65536.0f; + door->maxSpeed = (*(s32 *) &door->maxSpeed) / 65536.0f; #endif - + prop = doorInit(door, &sp118, &spD4, sp1C8_stan, &sp7C, &spC8); if (door->flags & PROPFLAG_CULL_BEHIND_DOOR) { @@ -2394,8 +1142,14 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) { doorDeactivatePortal(door); } + #ifdef DEBUG + else + { + osSyncPrintf("No portal for door object number %d ",arg2 + 1); + } + #endif } - + prop->rooms[0] = prop->stan->room; chrpropRegisterRoom(prop, prop->stan->room); prop->rooms[1] = 0xFFU; @@ -2416,17 +1170,29 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) prop->rooms[1] = sp1AC; chrpropRegisterRoom(prop, sp1AC); } - + if (prop->rooms[1] != 0xff && 1) { - if (prop->stan->room); + if (!prop->stan->room) + { + #ifdef DEBUG + osSyncPrintf("3 rooms for door object number %d\n",arg2 + 1); + #endif + } + } + #ifdef DEBUG + else + { + osSyncPrintf("No 2nd room for door object number %d\n",arg2 + 1); + } + #endif } - + if (door->model != NULL) { scale = xscale; - + if (scale < yscale) { scale = yscale; @@ -2436,10 +1202,10 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) { scale = zscale; } - + modelSetScale(door->model, door->model->scale * scale); } - + chrpropActivate(prop); chrpropEnable(prop); @@ -2451,6 +1217,9 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) else { door->prop = NULL; + #ifdef DEBUG + osSyncPrintf("proplvreset: prop door object number %d not reset!\n",arg2 + 1); + #endif } } @@ -2458,10 +1227,877 @@ void setupDoor(s32 arg0, struct DoorRecord *door, s32 arg2) #ifdef NONMATCHING -// https://decomp.me/scratch/lwIUY 68.9% -void proplvreset2(void) { +// https://decomp.me/scratch/abV9k 99.64% + +/* +* mismatch seems to be related to the index variables. +* here are some macros to test theories. +*/ +#define DECLARE_i_01_TOP s32 i1 = 0; +#define DECLARE_i_01_LOCAL +#define V_i_01 i1 +#define DECLARE_i_02_TOP s32 i2 = 0; +#define DECLARE_i_02_LOCAL +#define V_i_02 i2 +#define DECLARE_i_03_TOP s32 i3 = 0; +#define DECLARE_i_03_LOCAL +#define V_i_03 i3 +#define DECLARE_i_04_TOP +#define DECLARE_i_04_LOCAL +#define V_i_04 i1 +#define DECLARE_i_05_TOP s32 i5 = 0; +#define DECLARE_i_05_LOCAL +#define V_i_05 i5 +#define DECLARE_i_06_TOP +#define DECLARE_i_06_LOCAL +#define V_i_06 i1 +#define DECLARE_i_07_TOP +#define DECLARE_i_07_LOCAL +#define V_i_07 i1 +#define DECLARE_i_08_TOP s32 i8; +#define DECLARE_i_08_LOCAL +#define V_i_08 i8 +#define DECLARE_i_09 s32 i9; +#define V_i_09 i9 + +// Perfect Dark void setupLoadFiles(s32 stagenum) +void proplvreset2(enum LEVELID stageId) +{ + ItemModelFileRecord *pitem; + s32 withchrs; + s32 withobjs; + + withchrs = (tokenFind(1, "-nochr") == NULL && tokenFind(1, "-noprop") == NULL); + withobjs = (tokenFind(1, "-noobj") == NULL && tokenFind(1, "-noprop") == NULL); + + g_DoorScale = 1.0f; + + for (pitem = PitemZ_entries; pitem < &PitemZ_entries[sizeof(PitemZ_entries) / sizeof(ItemModelFileRecord) -1]; pitem++) + { + pitem->header->RootNode = NULL; // modelstate + } + + if (stageId <= LEVELID_MAX + 1 && setup_text_pointers[stageId]) + { + char strResource[0x100] = ""; // new empty string + s32 guardcount = 0; + s32 collectcount = 0; + + DECLARE_i_01_TOP + DECLARE_i_02_TOP + DECLARE_i_03_TOP + DECLARE_i_04_TOP + f32 roompos_1; // sp 0x15c + DECLARE_i_05_TOP + DECLARE_i_06_TOP + DECLARE_i_07_TOP + DECLARE_i_08_TOP + f32 roompos_2; // sp 0x150 + + struct stagesetup *local_stage; + + strResource[0] = setup_text_pointers[stageId][0]; // Get U from "U"setupxxxZ + strResource[1] = 0; // make sure string is terminated + + if (getPlayerCount() >= 2) + { + strcat(strResource, "mp_"); // U + "mp_" + } + + strcat(strResource, setup_text_pointers[stageId] + 1); // Add remaining text back U[mp_] + setupxxxZ + + g_ptrStageSetupFile = _fileNameLoadToBank(strResource, FILELOADMETHOD_DEFAULT, 256, 4); // FILELOADMETHOD_DEFAULT get pointer to setup object (10 words) + local_stage = g_ptrStageSetupFile; + + langLoadToAddr(langGetLangBankIndexFromStagenum(stageId)); + + // deep copy struct, need to manually itterate, as g_CurrentSetup = resource doesnt work + // Remember Setups store "Offsets" so we need to convert to RAM Address + g_CurrentSetup.pathwaypoints = TRANSFORM3(pathwaypoints); + g_CurrentSetup.waypointgroups = TRANSFORM3(waypointgroups); + g_CurrentSetup.intro = TRANSFORM3(intro); + g_CurrentSetup.propDefs = TRANSFORM3(propDefs); + g_CurrentSetup.patrolpaths = TRANSFORM3(patrolpaths); + g_CurrentSetup.ailists = TRANSFORM3(ailists); + g_CurrentSetup.pads = TRANSFORM3(pads); + g_CurrentSetup.boundpads = TRANSFORM3(boundpads); + + if (local_stage->padnames != 0) + { + g_CurrentSetup.padnames = TRANSFORM3(padnames); + } + else + { + g_CurrentSetup.padnames = NULL; + } + + if (local_stage->boundpadnames != 0) + { + g_CurrentSetup.boundpadnames = TRANSFORM3(boundpadnames); + } + else + { + g_CurrentSetup.boundpadnames = NULL; + } + + // -------------------------------- + + if (g_CurrentSetup.pathwaypoints) + { + DECLARE_i_01_LOCAL + + for (V_i_01 = 0; g_CurrentSetup.pathwaypoints[V_i_01].padID >= 0; V_i_01++) + { + g_CurrentSetup.pathwaypoints[V_i_01].neighbours = TRANSFORM4(g_CurrentSetup.pathwaypoints[V_i_01].neighbours); + } + } + + if (g_CurrentSetup.waypointgroups) + { + DECLARE_i_02_LOCAL + + for (V_i_02 = 0; g_CurrentSetup.waypointgroups[V_i_02].neighbours; V_i_02++) + { + g_CurrentSetup.waypointgroups[V_i_02].neighbours = TRANSFORM4(g_CurrentSetup.waypointgroups[V_i_02].neighbours); + g_CurrentSetup.waypointgroups[V_i_02].waypoints = TRANSFORM4(g_CurrentSetup.waypointgroups[V_i_02].waypoints); + } + } + + // Convert ailist pointers from file-local to proper pointers + if (g_CurrentSetup.ailists) + { + DECLARE_i_03_LOCAL + + for (V_i_03 = 0; g_CurrentSetup.ailists[V_i_03].ailist != 0; V_i_03++) + { + g_CurrentSetup.ailists[V_i_03].ailist = TRANSFORM4(g_CurrentSetup.ailists[V_i_03].ailist); + } + } + + if (g_CurrentSetup.patrolpaths) + { + DECLARE_i_04_LOCAL + + for (V_i_04 = 0; g_CurrentSetup.patrolpaths[V_i_04].waypoints != NULL; V_i_04++) + { + DECLARE_i_05_LOCAL + + g_CurrentSetup.patrolpaths[V_i_04].waypoints = TRANSFORM4(g_CurrentSetup.patrolpaths[V_i_04].waypoints); + + for (V_i_05 = 0; g_CurrentSetup.patrolpaths[V_i_04].waypoints[V_i_05] >= 0; V_i_05++) + { + } + + g_CurrentSetup.patrolpaths[V_i_04].len = V_i_05; + } + } + + // -------------------------------- + + if (g_CurrentSetup.pads) + { + //f32 roompos_1; // sp 0x15c + struct PadRecord *pad; + //s32 uVar3; + + roompos_1 = get_room_data_float2(); + pad = g_CurrentSetup.pads; + + for (; pad->plink != NULL; pad++) + { + pad->plink = TRANSFORM4(pad->plink); + pad->pos.f[0] *= roompos_1; + pad->pos.f[1] *= roompos_1; + pad->pos.f[2] *= roompos_1; + + init_pathtable_something(pad, pad->plink, &pad->stan); + + if (1); + //if(pad); +#ifdef DEBUG + if (uVar3 == 0) + { + osSyncPrintf("pad number %d has no stan! (%s)\n", i, pad[i].plink); + } + else if (uVar3 == 2) + { + osSyncPrintf("pad number %d changed stan from %s to %s\n", i, pad[i].plink, GetStanName(pad[i].stan)); + } +#endif + } + } + + + if (g_CurrentSetup.boundpads) + { + struct BoundPadRecord *vol; + //f32 roompos_2; // sp 0x150 + //s32 uVar3; + + roompos_2 = get_room_data_float2(); + vol = g_CurrentSetup.boundpads; + + for (; vol->plink != NULL; vol++) + { + vol->plink = TRANSFORM4(vol->plink); + + vol->pos.f[0] *= roompos_2; + vol->pos.f[1] *= roompos_2; + vol->pos.f[2] *= roompos_2; + vol->bbox.xmin *= roompos_2; + vol->bbox.xmax *= roompos_2; + vol->bbox.ymin *= roompos_2; + vol->bbox.ymax *= roompos_2; + vol->bbox.zmin *= roompos_2; + vol->bbox.zmax *= roompos_2; + + init_pathtable_something((struct PadRecord*)vol, vol->plink, &vol->stan); + + if(1); + //if (vol); + +#ifdef DEBUG + if (uVar3 == 0) + { + osSyncPrintf("vol number %d has no stan! (%s)\n", i, vol[i].plink); + } + else if (uVar3 == 2) + { + osSyncPrintf("vol number %d changed stan from %s to %s\n", i, vol[i].plink, GetStanName(vol[i].stan)); + } +#endif + } + } + + { + DECLARE_i_06_LOCAL + DECLARE_i_07_LOCAL + + if (g_CurrentSetup.padnames) + { + for (V_i_06 = 0; g_CurrentSetup.padnames[V_i_06].p; V_i_06++) + { + g_CurrentSetup.padnames[V_i_06].p = TRANSFORM4(g_CurrentSetup.padnames[V_i_06].p); + } + } + + if (g_CurrentSetup.boundpadnames) + { + for (V_i_07 = 0; g_CurrentSetup.boundpadnames[V_i_07].p; V_i_07++) + { + g_CurrentSetup.boundpadnames[V_i_07].p = TRANSFORM4(g_CurrentSetup.boundpadnames[V_i_07].p); + } + } + } + + // PD rejoins here + + + if (withchrs) + { + alloc_init_GUARDdata_entries(load_proptype(PROPDEF_GUARD)); + guardcount += load_proptype(PROPDEF_GUARD); + collectcount += load_proptype(PROPDEF_COLLECTABLE); + collectcount += load_proptype(PROPDEF_KEY); + collectcount += load_proptype(PROPDEF_HAT); + } + else + { + alloc_init_GUARDdata_entries(0); // chrmgrConfigure + } + + if (withobjs) + { + // load std props for all stages + collectcount += load_proptype(PROPDEF_DOOR); + collectcount += load_proptype(PROPDEF_CCTV); + collectcount += load_proptype(PROPDEF_AUTOGUN); + collectcount += load_proptype(PROPDEF_RACK); + collectcount += load_proptype(PROPDEF_MONITOR); + collectcount += load_proptype(PROPDEF_MULTI_MONITOR); + collectcount += load_proptype(PROPDEF_ARMOUR); + collectcount += load_proptype(PROPDEF_PROP); + collectcount += load_proptype(PROPDEF_GLASS); + collectcount += load_proptype(PROPDEF_TINTED_GLASS); + collectcount += load_proptype(PROPDEF_SAFE); + collectcount += load_proptype(PROPDEF_UNK41); + collectcount += load_proptype(PROPDEF_GAS_RELEASING); + collectcount += load_proptype(PROPDEF_ALARM); + collectcount += load_proptype(PROPDEF_MAGAZINE); + collectcount += load_proptype(PROPDEF_AMMO); + collectcount += load_proptype(PROPDEF_VEHICHLE); + collectcount += load_proptype(PROPDEF_TANK); + guardcount += load_proptype(PROPDEF_AIRCRAFT); + } + + sub_GAME_7F005540(collectcount); // without plane + sub_GAME_7F005624(guardcount); + + //if (1) + { + DECLARE_i_08_LOCAL + + for (V_i_08 = 0; V_i_08 < getPlayerCount(); V_i_08++) + { + set_cur_player(V_i_08); + alloc_additional_item_slots(load_proptype(PROPDEF_LINK)); + } + } + + if (g_CurrentSetup.propDefs) + { + PropDefHeaderRecord *phead; + s32 flags; + s32 pdefIndex; + //s32 padding; + + flags = 1 << (lvlGetSelectedDifficulty() + 4); + + if (getPlayerCount() >= 2) + { + flags |= 1 << (getPlayerCount() + 20); + } + + phead = g_CurrentSetup.propDefs; + pdefIndex = 0; + + while (phead->type != PROPDEF_END) + { + switch (phead->type) + { + // switch 1 + case PROPDEF_GUARD_ATTRIBUTE: // switch 1 + { + GuardAttributeRecord *pdef_guarda; + u8 prob; + ChrRecord *chr; + + pdef_guarda = (GuardAttributeRecord *)phead; + prob = (u8)pdef_guarda->GrenadeProb; + chr = chrFindByLiteralId(pdef_guarda->chrnum); + + if (chr && chr->prop && chr->model) + { + chr->grenadeprob = prob; + } +#ifdef DEBUG + else + { + osSyncPrintf("grenade prob: no chr number %d for obj number %d! ", phead->unkB, pdefIndex + 1); + } +#endif + break; + } + case PROPDEF_GUARD: // switch 1 + if (withchrs) + { + expand_09_characters(stageId, (struct GuardRecord *)phead, pdefIndex); + } + break; + case PROPDEF_DOOR: // switch 1 + if (withobjs && !(((struct DoorRecord *)phead)->flags2 & flags)) + { + setupDoor(stageId, (struct DoorRecord *)phead, pdefIndex); + } + break; + case PROPDEF_DOOR_SCALE: // switch 1 + g_DoorScale = ((struct GlobalDoorScaleRecord *)phead)->Scale / 65536.0f; + break; + case PROPDEF_COLLECTABLE: // switch 1 + if (withchrs && !(((struct WeaponObjRecord *)phead)->flags2 & flags)) + { + weaponAssignToHome(stageId, (struct WeaponObjRecord *)phead, pdefIndex); + } + break; + case PROPDEF_KEY: // switch 1 + if (withchrs && !(((struct KeyRecord *)phead)->flags2 & flags)) + { + setupKey(stageId, (struct ObjectRecord *)phead, pdefIndex); + } + break; + case PROPDEF_HAT: // switch 1 + if (withchrs && !(((struct ObjectRecord *)phead)->flags2 & flags)) + { + setupHat(stageId, (struct ObjectRecord *)phead, pdefIndex); + } + break; + case PROPDEF_CCTV: // switch 1 + if (withobjs && !(((struct CCTVRecord *)phead)->flags2 & flags)) + { + setupCctv(stageId, (struct CCTVRecord *)phead, pdefIndex); + } + break; + case PROPDEF_AUTOGUN: // switch 1 + if (withobjs && !(((struct AutogunRecord *)phead)->flags2 & flags)) + { + setupAutogun(stageId, (struct AutogunRecord *)phead, pdefIndex); + } + break; + case PROPDEF_RACK: // switch 1 + if (withobjs && !(((struct ObjectRecord *)phead)->flags2 & flags)) + { + setupHangingMonitors(stageId, (struct ObjectRecord *)phead, pdefIndex); + } + break; + case PROPDEF_MONITOR: // switch 1 + if (withobjs && !(((struct MonitorObjRecord *)phead)->flags2 & flags)) + { + setupSingleMonitor(stageId, (struct MonitorObjRecord *)phead, pdefIndex); + } + break; + case PROPDEF_MULTI_MONITOR: // switch 1 + if (withobjs && !(((struct MultiMonitorObjRecord *)phead)->flags2 & flags)) + { + setupMultiMonitor(stageId, (struct MultiMonitorObjRecord *)phead, pdefIndex); + } + break; + case PROPDEF_ARMOUR: // switch 1 + { + struct BodyArmourRecord *pdef_ba = (struct BodyArmourRecord *)phead; + +#if defined(VERSION_US) + if (withobjs && (pdef_ba->flags2 & flags) == 0) +#elif defined(VERSION_JP) || defined(VERSION_EU) + if (withobjs && ((pdef_ba->flags2 & flags) == 0 || j_text_trigger)) +#else + #error version +#endif + { + pdef_ba->initialamount = *(s32 *)&pdef_ba->initialamount / 65536.0f; + pdef_ba->amount = pdef_ba->initialamount; + + domakedefaultobj(stageId, (struct ObjectRecord *)phead, pdefIndex); + } + break; + } + case PROPDEF_TINTED_GLASS: // switch 1 + { + struct TintedGlassRecord *pdef_tintg = (struct TintedGlassRecord *)phead; + if (withobjs && !((pdef_tintg)->flags2 & flags)) + { + if (pdef_tintg->flags & PROPFLAG_GLASS_HASPORTAL) + { + if (!(isNotBoundPad(pdef_tintg->pad))) + { + struct coord3d up; + struct coord3d up2; + BoundPadRecord *pad3d; + f32 scale; + + pad3d = &g_CurrentSetup.boundpads[getBoundPadNum(pdef_tintg->pad)]; + + sub_GAME_7F001BD4(pad3d, &up); + + if(pad3d); + + scale = 10.0f; + + up2.x = (scale * pad3d->up.x) + up.x; + up2.y = (scale * pad3d->up.y) + up.y; + up2.z = (scale * pad3d->up.z) + up.z; + up.x -= scale * pad3d->up.x; + up.y -= scale * pad3d->up.y; + up.z -= scale * pad3d->up.z; + pdef_tintg->portalnum = sub_GAME_7F0B9E04(&up, &up2); + pdef_tintg->unk90 = *(s32 *)&pdef_tintg->unk90 / 65536.0f; + } + } + domakedefaultobj(stageId, (struct ObjectRecord *)pdef_tintg, pdefIndex); + } + break; + } + case PROPDEF_PROP: // switch 1 + case PROPDEF_ALARM: // switch 1 + case PROPDEF_MAGAZINE: // switch 1 + case PROPDEF_GAS_RELEASING: // switch 1 + case PROPDEF_UNK41: // switch 1 + case PROPDEF_GLASS: // switch 1 + case PROPDEF_SAFE: // switch 1 + if (withobjs && !(((ObjectRecord *)phead)->flags2 & flags)) + { + domakedefaultobj(stageId, (struct ObjectRecord *)phead, pdefIndex); + } + break; + case PROPDEF_AMMO: // switch 1 + { + struct MultiAmmoCrateRecord *pdef_macr = (struct MultiAmmoCrateRecord *)phead; + + s32 ammoqty = 1; + DECLARE_i_09 + + if (getPlayerCount() >= 2) + { + struct s_mp_weapon_set *mpweapon = &getPtrMPWeaponSetData()[lastmpweaponnum]; + + ammoqty = mpweapon->ammoamount; + if(mpweapon->ammotype); + pdef_macr->slots[mpweapon->ammotype - 1].quantity = ammoqty; + } + + if ((ammoqty > 0) && withobjs && !(pdef_macr->flags2 & flags)) + { + for (V_i_09 = 0; V_i_09 < (AMMOTYPE_GLOBAL_MAX ); V_i_09++) + { + if (pdef_macr->slots[V_i_09].quantity > 0 && pdef_macr->slots[V_i_09].modelnum != 0xFFFF) + { + modelLoad(pdef_macr->slots[V_i_09].modelnum); + } + } + + domakedefaultobj(stageId, (struct ObjectRecord *)pdef_macr, pdefIndex); + } + break; + } + case PROPDEF_TANK: // switch 1 + if (withobjs && !(((struct TankRecord *)phead)->flags2 & flags)) + { + struct TankRecord *pdef_tank = (struct TankRecord *)phead; + struct PropRecord *tank_prop; + f32 stan_y = 0.0f; + s32 paddinggg[4]; + + weaponLoadProjectileModels(0x20); + domakedefaultobj(stageId, (struct ObjectRecord *)pdef_tank, pdefIndex); + pdef_tank->turret_vertical_angle = 0.0f; + pdef_tank->turret_orientation_angle = 0.0f; + pdef_tank->tank_orientation_angle = M_TAU_F - atan2f(pdef_tank->mtx.m[2][0], pdef_tank->mtx.m[2][2]); + tank_prop = pdef_tank->prop; + if (tank_prop) + { + stan_y = stanGetPositionYValue(tank_prop->stan, tank_prop->pos.f[0], tank_prop->pos.f[2]); + } + pdef_tank->stan_y = stan_y; + pdef_tank->unkD0 = stan_y / 0.17000002f; + } + break; + case PROPDEF_VEHICHLE: // switch 1 + if (withobjs && !(((struct VehichleRecord *)phead)->flags2 & flags)) + { + struct VehichleRecord *pdef_veh = (struct VehichleRecord *)phead; + //struct Model *model; + domakedefaultobj(stageId, (struct ObjectRecord *)pdef_veh, pdefIndex); + + //model = pdef_veh->model; + if (pdef_veh->model != NULL) + { + if (pdef_veh->model->obj->Switches[5] != NULL) + { + modelGetNodeRwData(pdef_veh->model, pdef_veh->model->obj->Switches[5])->Raw.unk00 = (pdef_veh->flags & 0x10000000) == 0; + } + } + + pdef_veh->speed = 0.0f; + pdef_veh->wheelxrot = 0.0f; + pdef_veh->wheelyrot = 0.0f; + pdef_veh->speedaim = 0.0f; + pdef_veh->turnrot60 = 0.0f; + pdef_veh->roty = 0.0f; + pdef_veh->speedtime60 = -1.0f; + pdef_veh->ailist = ailistFindById(pdef_veh->ailist); + pdef_veh->aioffset = 0; + pdef_veh->aireturnlist = -1; + pdef_veh->path = 0; + pdef_veh->nextstep = 0; + pdef_veh->Sound = 0; + } + break; + case PROPDEF_AIRCRAFT: // switch 1 + if (withobjs && !(((struct AircraftRecord *)phead)->flags2 & flags)) + { + struct AircraftRecord *pdef_air = (struct AircraftRecord *)phead; + domakedefaultobj(stageId, (struct ObjectRecord *)pdef_air, pdefIndex); + pdef_air->speed = 0.0f; + pdef_air->speedaim = 0.0f; + pdef_air->rotoryrot = 0.0f; + pdef_air->rotaryspeed = 0.0f; + pdef_air->rotaryspeedaim = 0.0f; + pdef_air->yrot = 0.0f; + pdef_air->speedtime60 = -1.0f; + pdef_air->rotaryspeedtime = -1.0f; + pdef_air->ailist = ailistFindById(pdef_air->ailist); + pdef_air->aioffset = 0; + pdef_air->aireturnlist = -1; + pdef_air->nextstep = 0; + pdef_air->path = 0; + pdef_air->Sound = 0; + } + break; + case PROPDEF_TAG: // switch 1 + { + struct TagObjectRecord *pdef_tag; + struct ObjectRecord *taggedobj; + + pdef_tag = (struct TagObjectRecord *)phead; + taggedobj = setupCommandGetObject(stageId, (s32)pdef_tag->OffsetToObj + pdefIndex); + pdef_tag->TaggedObject = taggedobj; + if (taggedobj) + { + taggedobj->runtime_bitflags |= 0x10; // RUNTIMEBITFLAG_TAGGED + } + set_parent_cur_tag_entry(pdef_tag); + break; + } + case PROPDEF_RENAME: // switch 1 + { + struct RenameObjectRecord *pdef_ren; + struct ObjectRecord *targetobj; + + pdef_ren = (struct RenameObjectRecord *)phead; + targetobj = setupCommandGetObject(stageId, pdef_ren->TagID + pdefIndex); + pdef_ren->renobj = targetobj; + if (targetobj) + { + targetobj->runtime_bitflags |= 0x400; // RUNTIMEBITFLAG_HASTEXTOVERRIDE + } + bondinvAddTextOverride((struct textoverride *)pdef_ren); + break; + } + case PROPDEF_WATCH_MENU_OBJECTIVE_TEXT: // switch 1 + setup_briefing_text_entry_parent((struct setup_objective_text *)phead); + break; + case PROPDEF_CAMERAPOS: // switch 1 + { + struct CutsceneRecord *pdef_cam = (struct CutsceneRecord *)phead; + pdef_cam->pos.f[0] = *(s32 *)&pdef_cam->pos.f[0] / 100.0f; + pdef_cam->pos.f[1] = *(s32 *)&pdef_cam->pos.f[1] / 100.0f; + pdef_cam->pos.f[2] = *(s32 *)&pdef_cam->pos.f[2] / 100.0f; + pdef_cam->theta = *(s32 *)&pdef_cam->theta / 65536.0f; + pdef_cam->verta = *(s32 *)&pdef_cam->verta / 65536.0f; + break; + } + case PROPDEF_OBJECTIVE_START: // switch 1 + add_ptr_to_objective((struct objective_entry*)phead); + break; + case PROPDEF_OBJECTIVE_ENTER_ROOM: // switch 1 + set_parent_cur_obj_enter_room((struct criteria_roomentered *)phead); + break; + case PROPDEF_OBJECTIVE_DEPOSIT_OBJECT_IN_ROOM: // switch 1 + set_parent_cur_obj_deposited_in_room((struct criteria_deposit *)phead); + break; + case PROPDEF_OBJECTIVE_PHOTOGRAPH: // switch 1 + set_parent_cur_obj_photograph((struct criteria_picture *)phead); + break; + } + //phead = sizepropdef(phead) + phead; + phead = (PropDefHeaderRecord *)((u32*)phead + sizepropdef(phead)); + + pdefIndex++; + } + + phead = g_CurrentSetup.propDefs; + pdefIndex = 0; + + while (phead->type != PROPDEF_END) + { + switch (phead->type) + { + case PROPDEF_PROP: + case PROPDEF_KEY: + case PROPDEF_MAGAZINE: + case PROPDEF_COLLECTABLE: + case PROPDEF_MONITOR: + case PROPDEF_AMMO: + case PROPDEF_ARMOUR: + case PROPDEF_GAS_RELEASING: + case PROPDEF_UNK41: + case PROPDEF_GLASS: + case PROPDEF_SAFE: + case PROPDEF_TINTED_GLASS: + { + struct ObjectRecord *pdef_tintg = (struct ObjectRecord *)phead; + + if (pdef_tintg->prop && (pdef_tintg->flags & PROPFLAG_INSIDEANOTHEROBJ)) // PROPFLAG_INSIDEANOTHEROBJ + { + s32 offset = pdef_tintg->pad; + struct ObjectRecord *inobj = setupCommandGetObject(stageId, offset + pdefIndex); + + if (inobj && inobj->prop) + { + //struct Model *inobjmdl = pdef_tintg->model; + pdef_tintg->runtime_bitflags |= RUNTIMEBITFLAG_HASOWNER; // RUNTIMEBITFLAG_HASOWNER + modelSetScale(pdef_tintg->model, pdef_tintg->model->scale); + chrpropReparent(pdef_tintg->prop, inobj->prop); + } +#ifdef DEBUG + + else + { + osSyncPrintf("inobj link not found for object number %d\n", pdefIndex + 1); + } +#endif + } + break; + } + case PROPDEF_LINK: + { + struct LinkRecord *pdef_link = (struct LinkRecord *)phead; + struct WeaponObjRecord *guna = (struct WeaponObjRecord *)setupGetPtrToCommandByIndex(pdef_link->Index1 + pdefIndex); + struct WeaponObjRecord *gunb = (struct WeaponObjRecord *)setupGetPtrToCommandByIndex(pdef_link->Index2 + pdefIndex); + if (guna && gunb) + { + if (guna->type == PROPDEF_COLLECTABLE && gunb->type == PROPDEF_COLLECTABLE) + { + propweaponSetDual(guna, gunb); + } +#ifdef DEBUG + else + { + osSyncPrintf("link type wrong for doublegun object number %d\n", pdefIndex + 1); + } + } + else + { + osSyncPrintf("link not found for doublegun object number %d\n", pdefIndex + 1); + +#endif + } + break; + } + case PROPDEF_SWITCH: + { + struct LinkRecord *pdef_switch; + struct ObjectRecord *doorA; + struct ObjectRecord *doorB; + + s32 index1; + s32 index2; + + pdef_switch = (struct LinkRecord *)phead; + + index1 = pdef_switch->Index1; + index2 = pdef_switch->Index2; + + doorA = (struct ObjectRecord *)setupCommandGetObject(stageId, pdefIndex + index1); + doorB = (struct ObjectRecord *)setupGetPtrToCommandByIndex(pdefIndex + index2); + + if (doorA && doorA->prop && doorB && doorB->type == PROPDEF_DOOR && doorB->prop) + { + pdef_switch->first = doorA->prop; + pdef_switch->second = doorB->prop; + initSetLevelLoadPropSwitch(pdef_switch); + doorA->runtime_bitflags |= RUNTIMEBITFLAG_00000001; // linkeddoor + } + +#ifdef DEBUG + else + { + osSyncPrintf("doorlink object number %d not initialised\n", pdefIndex + 1); + } +#endif + break; + } + case PROPDEF_SAFE_ITEM: + { + + s32 index1; + struct SafeObjectRecord *pdef_safe; + s32 index2; + s32 index3; + struct ObjectRecord *safe_item; + struct SafeRecord *safe; + struct DoorRecord *door; + + pdef_safe = (struct SafeObjectRecord *)phead; + + index1 = pdef_safe->Index1; + index2 = pdef_safe->Index2; + index3 = pdef_safe->Index3; + + safe_item = setupCommandGetObject(stageId, pdefIndex + index1); + safe = (struct SafeRecord *)setupCommandGetObject(stageId, pdefIndex + index2); + door = (struct DoorRecord *)setupCommandGetObject(stageId, pdefIndex + index3); + + if (safe_item + && safe_item->prop + && safe + && safe->prop + && safe->type == PROPDEF_SAFE + && door + && door->prop + && door->type == PROPDEF_DOOR) + { + pdef_safe->item = safe_item; + pdef_safe->safe = safe; + pdef_safe->door = door; + + initSetLevelLoadPropSafeItem((struct ObjectRecord *)pdef_safe); + safe_item->flags2 |= PROPFLAG2_LINKEDTOSAFE; // OBJFLAG2_LINKEDTOSAFE + door->flags2 |= PROPFLAG2_LINKEDTOSAFE; + } +#ifdef DEBUG + else + { + osSyncPrintf("safelink object number %d not initialised\n", pdefIndex + 1); + } +#endif + break; + } + case PROPDEF_LOCK_DOOR: + { + struct LockDoorRecord *pdef_lock_door; + struct DoorRecord *door; + struct ObjectRecord *lock; + s32 index1; + s32 index2; + + + pdef_lock_door = (struct LockDoorRecord *)phead; + + index1 = pdef_lock_door->Index1; + index2 = pdef_lock_door->Index2; + + door = (struct DoorRecord *)setupCommandGetObject(stageId, pdefIndex + index1); + lock = setupCommandGetObject(stageId, pdefIndex + index2); + + if (door + && door->prop + && lock + && lock->prop + && door->type == PROPDEF_DOOR) + { + pdef_lock_door->door = door; + pdef_lock_door->lock = lock; + initSetLevelLoadPropLockDoor(pdef_lock_door); + door->runtime_bitflags |= RUNTIMEBITFLAG_PADLOCKEDDOOR; // padlock + } +#ifdef DEBUG + else + { + osSyncPrintf("doorlock object number %d not initialised\n", pdefIndex + 1); + } +#endif + break; + } + } + //phead = sizepropdef(phead) + phead; + phead = (PropDefHeaderRecord *)((u32*)phead + sizepropdef(phead)); + + pdefIndex += 1; + } //while !PDEF_END + + } //if setup.pdef + } + else + { + g_CurrentSetup.pathwaypoints = NULL; + g_CurrentSetup.waypointgroups = NULL; + g_CurrentSetup.intro = 0; + g_CurrentSetup.propDefs = 0; + g_CurrentSetup.patrolpaths = NULL; + g_CurrentSetup.ailists = NULL; + g_CurrentSetup.pads = NULL; + g_CurrentSetup.boundpads = NULL; + g_CurrentSetup.padnames = NULL; + g_CurrentSetup.boundpadnames = NULL; + alloc_init_GUARDdata_entries(0); + sub_GAME_7F005540(0); + sub_GAME_7F005624(0); + } + + alloc_false_GUARDdata_to_exec_global_action(); } + #else #ifdef VERSION_US @@ -2626,11 +2262,11 @@ glabel proplvreset2 /* 0387E8 7F003CB8 2AA1003B */ slti $at, $s5, 0x3b /* 0387EC 7F003CBC 10200454 */ beqz $at, .L7F004E10 /* 0387F0 7F003CC0 00157880 */ sll $t7, $s5, 2 -/* 0387F4 7F003CC4 3C188003 */ lui $t8, %hi(setup_text_pointers) +/* 0387F4 7F003CC4 3C188003 */ lui $t8, %hi(setup_text_pointers) /* 0387F8 7F003CC8 271874E4 */ addiu $t8, %lo(setup_text_pointers) # addiu $t8, $t8, 0x74e4 /* 0387FC 7F003CCC 01F88021 */ addu $s0, $t7, $t8 /* 038800 7F003CD0 8E020000 */ lw $v0, ($s0) -/* 038804 7F003CD4 3C198005 */ lui $t9, %hi(only_read_by_stageload) +/* 038804 7F003CD4 3C198005 */ lui $t9, %hi(only_read_by_stageload) /* 038808 7F003CD8 27B10174 */ addiu $s1, $sp, 0x174 /* 03880C 7F003CDC 1040044C */ beqz $v0, .L7F004E10 /* 038810 7F003CE0 2739EDB0 */ addiu $t9, %lo(only_read_by_stageload) # addiu $t9, $t9, -0x1250 @@ -2821,15 +2457,15 @@ glabel proplvreset2 /* 038AB8 7F003F88 8CEA0018 */ lw $t2, 0x18($a3) .L7F003F8C: /* 038ABC 7F003F8C 1140001D */ beqz $t2, .L7F004004 -/* 038AC0 7F003F90 00000000 */ nop +/* 038AC0 7F003F90 00000000 */ nop /* 038AC4 7F003F94 0FC2D20C */ jal get_room_data_float2 -/* 038AC8 7F003F98 00000000 */ nop +/* 038AC8 7F003F98 00000000 */ nop /* 038ACC 7F003F9C 3C108007 */ lui $s0, %hi(g_CurrentSetup+0x18) /* 038AD0 7F003FA0 8E105D18 */ lw $s0, %lo(g_CurrentSetup+0x18)($s0) /* 038AD4 7F003FA4 46000086 */ mov.s $f2, $f0 /* 038AD8 7F003FA8 8E020024 */ lw $v0, 0x24($s0) /* 038ADC 7F003FAC 10400015 */ beqz $v0, .L7F004004 -/* 038AE0 7F003FB0 00000000 */ nop +/* 038AE0 7F003FB0 00000000 */ nop /* 038AE4 7F003FB4 C6060000 */ lwc1 $f6, ($s0) .L7F003FB8: /* 038AE8 7F003FB8 C60A0004 */ lwc1 $f10, 4($s0) @@ -2858,7 +2494,7 @@ glabel proplvreset2 /* 038B40 7F004010 51800033 */ beql $t4, $zero, .L7F0040E0 /* 038B44 7F004014 8CE50020 */ lw $a1, 0x20($a3) /* 038B48 7F004018 0FC2D20C */ jal get_room_data_float2 -/* 038B4C 7F00401C 00000000 */ nop +/* 038B4C 7F00401C 00000000 */ nop /* 038B50 7F004020 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) /* 038B54 7F004024 24E75D00 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d00 /* 038B58 7F004028 8CF0001C */ lw $s0, 0x1c($a3) @@ -2948,7 +2584,7 @@ glabel proplvreset2 /* 038C90 7F004160 8FAA0278 */ lw $t2, 0x278($sp) .L7F004164: /* 038C94 7F004164 11400012 */ beqz $t2, .L7F0041B0 -/* 038C98 7F004168 00000000 */ nop +/* 038C98 7F004168 00000000 */ nop /* 038C9C 7F00416C 0FC006D4 */ jal load_proptype /* 038CA0 7F004170 24040009 */ li $a0, 9 /* 038CA4 7F004174 0FC003AE */ jal alloc_init_GUARDdata_entries @@ -2971,7 +2607,7 @@ glabel proplvreset2 /* 038CE4 7F0041B4 00002025 */ move $a0, $zero .L7F0041B8: /* 038CE8 7F0041B8 13C0003A */ beqz $fp, .L7F0042A4 -/* 038CEC 7F0041BC 00000000 */ nop +/* 038CEC 7F0041BC 00000000 */ nop /* 038CF0 7F0041C0 0FC006D4 */ jal load_proptype /* 038CF4 7F0041C4 24040001 */ li $a0, 1 /* 038CF8 7F0041C8 02629821 */ addu $s3, $s3, $v0 @@ -3037,7 +2673,7 @@ glabel proplvreset2 /* 038DE4 7F0042B4 0FC26919 */ jal getPlayerCount /* 038DE8 7F0042B8 00008025 */ move $s0, $zero /* 038DEC 7F0042BC 1840000C */ blez $v0, .L7F0042F0 -/* 038DF0 7F0042C0 00000000 */ nop +/* 038DF0 7F0042C0 00000000 */ nop .L7F0042C4: /* 038DF4 7F0042C4 0FC26C43 */ jal set_cur_player /* 038DF8 7F0042C8 02002025 */ move $a0, $s0 @@ -3049,23 +2685,23 @@ glabel proplvreset2 /* 038E10 7F0042E0 26100001 */ addiu $s0, $s0, 1 /* 038E14 7F0042E4 0202082A */ slt $at, $s0, $v0 /* 038E18 7F0042E8 1420FFF6 */ bnez $at, .L7F0042C4 -/* 038E1C 7F0042EC 00000000 */ nop +/* 038E1C 7F0042EC 00000000 */ nop .L7F0042F0: -/* 038E20 7F0042F0 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x0c) +/* 038E20 7F0042F0 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x0c) /* 038E24 7F0042F4 8D6B5D0C */ lw $t3, %lo(g_CurrentSetup+0x0c)($t3) /* 038E28 7F0042F8 116002DF */ beqz $t3, .L7F004E78 -/* 038E2C 7F0042FC 00000000 */ nop +/* 038E2C 7F0042FC 00000000 */ nop /* 038E30 7F004300 0FC2FF04 */ jal lvlGetSelectedDifficulty -/* 038E34 7F004304 00000000 */ nop +/* 038E34 7F004304 00000000 */ nop /* 038E38 7F004308 244C0004 */ addiu $t4, $v0, 4 /* 038E3C 7F00430C 240D0001 */ li $t5, 1 /* 038E40 7F004310 0FC26919 */ jal getPlayerCount /* 038E44 7F004314 018DA004 */ sllv $s4, $t5, $t4 /* 038E48 7F004318 28410002 */ slti $at, $v0, 2 /* 038E4C 7F00431C 14200007 */ bnez $at, .L7F00433C -/* 038E50 7F004320 00000000 */ nop +/* 038E50 7F004320 00000000 */ nop /* 038E54 7F004324 0FC26919 */ jal getPlayerCount -/* 038E58 7F004328 00000000 */ nop +/* 038E58 7F004328 00000000 */ nop /* 038E5C 7F00432C 244E0014 */ addiu $t6, $v0, 0x14 /* 038E60 7F004330 240F0001 */ li $t7, 1 /* 038E64 7F004334 01CFC004 */ sllv $t8, $t7, $t6 @@ -3090,19 +2726,19 @@ glabel proplvreset2 /* 038EA8 7F004378 00280821 */ addu $at, $at, $t0 /* 038EAC 7F00437C 8C28EF68 */ lw $t0, %lo(jpt_object_type_expansion)($at) /* 038EB0 7F004380 01000008 */ jr $t0 -/* 038EB4 7F004384 00000000 */ nop +/* 038EB4 7F004384 00000000 */ nop actor_attr_expand: /* 038EB8 7F004388 9250000B */ lbu $s0, 0xb($s2) /* 038EBC 7F00438C 0FC08BF2 */ jal chrFindByLiteralId /* 038EC0 7F004390 8E440004 */ lw $a0, 4($s2) /* 038EC4 7F004394 104001D9 */ beqz $v0, other_obj_expand -/* 038EC8 7F004398 00000000 */ nop +/* 038EC8 7F004398 00000000 */ nop /* 038ECC 7F00439C 8C490018 */ lw $t1, 0x18($v0) /* 038ED0 7F0043A0 112001D6 */ beqz $t1, other_obj_expand -/* 038ED4 7F0043A4 00000000 */ nop +/* 038ED4 7F0043A4 00000000 */ nop /* 038ED8 7F0043A8 8C59001C */ lw $t9, 0x1c($v0) /* 038EDC 7F0043AC 132001D3 */ beqz $t9, other_obj_expand -/* 038EE0 7F0043B0 00000000 */ nop +/* 038EE0 7F0043B0 00000000 */ nop /* 038EE4 7F0043B4 100001D1 */ b other_obj_expand /* 038EE8 7F0043B8 A0500010 */ sb $s0, 0x10($v0) actor_expand: @@ -3110,24 +2746,24 @@ actor_expand: /* 038EF0 7F0043C0 02A02025 */ move $a0, $s5 /* 038EF4 7F0043C4 02402825 */ move $a1, $s2 /* 038EF8 7F0043C8 114001CC */ beqz $t2, other_obj_expand -/* 038EFC 7F0043CC 00000000 */ nop +/* 038EFC 7F0043CC 00000000 */ nop /* 038F00 7F0043D0 0FC08DC3 */ jal expand_09_characters /* 038F04 7F0043D4 02603025 */ move $a2, $s3 /* 038F08 7F0043D8 100001C8 */ b other_obj_expand -/* 038F0C 7F0043DC 00000000 */ nop +/* 038F0C 7F0043DC 00000000 */ nop door_expand: /* 038F10 7F0043E0 13C001C6 */ beqz $fp, other_obj_expand -/* 038F14 7F0043E4 00000000 */ nop +/* 038F14 7F0043E4 00000000 */ nop /* 038F18 7F0043E8 8E4B000C */ lw $t3, 0xc($s2) /* 038F1C 7F0043EC 02A02025 */ move $a0, $s5 /* 038F20 7F0043F0 02402825 */ move $a1, $s2 /* 038F24 7F0043F4 01746824 */ and $t5, $t3, $s4 /* 038F28 7F0043F8 15A001C0 */ bnez $t5, other_obj_expand -/* 038F2C 7F0043FC 00000000 */ nop +/* 038F2C 7F0043FC 00000000 */ nop /* 038F30 7F004400 0FC00D20 */ jal setupDoor /* 038F34 7F004404 02603025 */ move $a2, $s3 /* 038F38 7F004408 100001BC */ b other_obj_expand -/* 038F3C 7F00440C 00000000 */ nop +/* 038F3C 7F00440C 00000000 */ nop door_scale_expand: /* 038F40 7F004410 8E4C0004 */ lw $t4, 4($s2) /* 038F44 7F004414 3C014780 */ li $at, 0x47800000 # 65536.000000 @@ -3141,117 +2777,117 @@ door_scale_expand: item_expand: /* 038F64 7F004434 8FAF0278 */ lw $t7, 0x278($sp) /* 038F68 7F004438 11E001B0 */ beqz $t7, other_obj_expand -/* 038F6C 7F00443C 00000000 */ nop +/* 038F6C 7F00443C 00000000 */ nop /* 038F70 7F004440 8E4E000C */ lw $t6, 0xc($s2) /* 038F74 7F004444 02A02025 */ move $a0, $s5 /* 038F78 7F004448 02402825 */ move $a1, $s2 /* 038F7C 7F00444C 01D4C024 */ and $t8, $t6, $s4 /* 038F80 7F004450 170001AA */ bnez $t8, other_obj_expand -/* 038F84 7F004454 00000000 */ nop +/* 038F84 7F004454 00000000 */ nop /* 038F88 7F004458 0FC009CE */ jal weaponAssignToHome /* 038F8C 7F00445C 02603025 */ move $a2, $s3 /* 038F90 7F004460 100001A6 */ b other_obj_expand -/* 038F94 7F004464 00000000 */ nop +/* 038F94 7F004464 00000000 */ nop key_expand: /* 038F98 7F004468 8FA80278 */ lw $t0, 0x278($sp) /* 038F9C 7F00446C 110001A3 */ beqz $t0, other_obj_expand -/* 038FA0 7F004470 00000000 */ nop +/* 038FA0 7F004470 00000000 */ nop /* 038FA4 7F004474 8E49000C */ lw $t1, 0xc($s2) /* 038FA8 7F004478 02A02025 */ move $a0, $s5 /* 038FAC 7F00447C 02402825 */ move $a1, $s2 /* 038FB0 7F004480 0134C824 */ and $t9, $t1, $s4 /* 038FB4 7F004484 1720019D */ bnez $t9, other_obj_expand -/* 038FB8 7F004488 00000000 */ nop +/* 038FB8 7F004488 00000000 */ nop /* 038FBC 7F00448C 0FC00A87 */ jal setupKey /* 038FC0 7F004490 02603025 */ move $a2, $s3 /* 038FC4 7F004494 10000199 */ b other_obj_expand -/* 038FC8 7F004498 00000000 */ nop +/* 038FC8 7F004498 00000000 */ nop hat_expand: /* 038FCC 7F00449C 8FAA0278 */ lw $t2, 0x278($sp) /* 038FD0 7F0044A0 11400196 */ beqz $t2, other_obj_expand -/* 038FD4 7F0044A4 00000000 */ nop +/* 038FD4 7F0044A4 00000000 */ nop /* 038FD8 7F0044A8 8E4B000C */ lw $t3, 0xc($s2) /* 038FDC 7F0044AC 02A02025 */ move $a0, $s5 /* 038FE0 7F0044B0 02402825 */ move $a1, $s2 /* 038FE4 7F0044B4 01746824 */ and $t5, $t3, $s4 /* 038FE8 7F0044B8 15A00190 */ bnez $t5, other_obj_expand -/* 038FEC 7F0044BC 00000000 */ nop +/* 038FEC 7F0044BC 00000000 */ nop /* 038FF0 7F0044C0 0FC00A6A */ jal setupHat /* 038FF4 7F0044C4 02603025 */ move $a2, $s3 /* 038FF8 7F0044C8 1000018C */ b other_obj_expand -/* 038FFC 7F0044CC 00000000 */ nop +/* 038FFC 7F0044CC 00000000 */ nop surv_camera_expand: /* 039000 7F0044D0 13C0018A */ beqz $fp, other_obj_expand -/* 039004 7F0044D4 00000000 */ nop +/* 039004 7F0044D4 00000000 */ nop /* 039008 7F0044D8 8E4C000C */ lw $t4, 0xc($s2) /* 03900C 7F0044DC 02A02025 */ move $a0, $s5 /* 039010 7F0044E0 02402825 */ move $a1, $s2 /* 039014 7F0044E4 01947824 */ and $t7, $t4, $s4 /* 039018 7F0044E8 15E00184 */ bnez $t7, other_obj_expand -/* 03901C 7F0044EC 00000000 */ nop +/* 03901C 7F0044EC 00000000 */ nop /* 039020 7F0044F0 0FC00A8F */ jal setupCctv /* 039024 7F0044F4 02603025 */ move $a2, $s3 /* 039028 7F0044F8 10000180 */ b other_obj_expand -/* 03902C 7F0044FC 00000000 */ nop +/* 03902C 7F0044FC 00000000 */ nop autogun_expand: /* 039030 7F004500 13C0017E */ beqz $fp, other_obj_expand -/* 039034 7F004504 00000000 */ nop +/* 039034 7F004504 00000000 */ nop /* 039038 7F004508 8E4E000C */ lw $t6, 0xc($s2) /* 03903C 7F00450C 02A02025 */ move $a0, $s5 /* 039040 7F004510 02402825 */ move $a1, $s2 /* 039044 7F004514 01D4C024 */ and $t8, $t6, $s4 /* 039048 7F004518 17000178 */ bnez $t8, other_obj_expand -/* 03904C 7F00451C 00000000 */ nop +/* 03904C 7F00451C 00000000 */ nop /* 039050 7F004520 0FC00B16 */ jal setupAutogun /* 039054 7F004524 02603025 */ move $a2, $s3 /* 039058 7F004528 10000174 */ b other_obj_expand -/* 03905C 7F00452C 00000000 */ nop +/* 03905C 7F00452C 00000000 */ nop rack_expand: /* 039060 7F004530 13C00172 */ beqz $fp, other_obj_expand -/* 039064 7F004534 00000000 */ nop +/* 039064 7F004534 00000000 */ nop /* 039068 7F004538 8E48000C */ lw $t0, 0xc($s2) /* 03906C 7F00453C 02A02025 */ move $a0, $s5 /* 039070 7F004540 02402825 */ move $a1, $s2 /* 039074 7F004544 01144824 */ and $t1, $t0, $s4 /* 039078 7F004548 1520016C */ bnez $t1, other_obj_expand -/* 03907C 7F00454C 00000000 */ nop +/* 03907C 7F00454C 00000000 */ nop /* 039080 7F004550 0FC00B87 */ jal setupHangingMonitors /* 039084 7F004554 02603025 */ move $a2, $s3 /* 039088 7F004558 10000168 */ b other_obj_expand -/* 03908C 7F00455C 00000000 */ nop +/* 03908C 7F00455C 00000000 */ nop single_screen_display_expand: /* 039090 7F004560 13C00166 */ beqz $fp, other_obj_expand -/* 039094 7F004564 00000000 */ nop +/* 039094 7F004564 00000000 */ nop /* 039098 7F004568 8E59000C */ lw $t9, 0xc($s2) /* 03909C 7F00456C 02A02025 */ move $a0, $s5 /* 0390A0 7F004570 02402825 */ move $a1, $s2 /* 0390A4 7F004574 03345024 */ and $t2, $t9, $s4 /* 0390A8 7F004578 15400160 */ bnez $t2, other_obj_expand -/* 0390AC 7F00457C 00000000 */ nop +/* 0390AC 7F00457C 00000000 */ nop /* 0390B0 7F004580 0FC00B8F */ jal setupSingleMonitor /* 0390B4 7F004584 02603025 */ move $a2, $s3 /* 0390B8 7F004588 1000015C */ b other_obj_expand -/* 0390BC 7F00458C 00000000 */ nop +/* 0390BC 7F00458C 00000000 */ nop multi_screen_display_expand: /* 0390C0 7F004590 13C0015A */ beqz $fp, other_obj_expand -/* 0390C4 7F004594 00000000 */ nop +/* 0390C4 7F004594 00000000 */ nop /* 0390C8 7F004598 8E4B000C */ lw $t3, 0xc($s2) /* 0390CC 7F00459C 02A02025 */ move $a0, $s5 /* 0390D0 7F0045A0 02402825 */ move $a1, $s2 /* 0390D4 7F0045A4 01746824 */ and $t5, $t3, $s4 /* 0390D8 7F0045A8 15A00154 */ bnez $t5, other_obj_expand -/* 0390DC 7F0045AC 00000000 */ nop +/* 0390DC 7F0045AC 00000000 */ nop /* 0390E0 7F0045B0 0FC00C34 */ jal setupMultiMonitor /* 0390E4 7F0045B4 02603025 */ move $a2, $s3 /* 0390E8 7F0045B8 10000150 */ b other_obj_expand -/* 0390EC 7F0045BC 00000000 */ nop +/* 0390EC 7F0045BC 00000000 */ nop body_armor_expand: /* 0390F0 7F0045C0 13C0014E */ beqz $fp, other_obj_expand -/* 0390F4 7F0045C4 00000000 */ nop +/* 0390F4 7F0045C4 00000000 */ nop /* 0390F8 7F0045C8 8E4C000C */ lw $t4, 0xc($s2) /* 0390FC 7F0045CC 01947824 */ and $t7, $t4, $s4 /* 039100 7F0045D0 15E0014A */ bnez $t7, other_obj_expand -/* 039104 7F0045D4 00000000 */ nop +/* 039104 7F0045D4 00000000 */ nop /* 039108 7F0045D8 8E4E0080 */ lw $t6, 0x80($s2) /* 03910C 7F0045DC 3C014780 */ li $at, 0x47800000 # 65536.000000 /* 039110 7F0045E0 44813000 */ mtc1 $at, $f6 @@ -3266,20 +2902,20 @@ body_armor_expand: /* 039134 7F004604 0FC00767 */ jal domakedefaultobj /* 039138 7F004608 E64A0084 */ swc1 $f10, 0x84($s2) /* 03913C 7F00460C 1000013B */ b other_obj_expand -/* 039140 7F004610 00000000 */ nop +/* 039140 7F004610 00000000 */ nop type2F_tinted_glass: /* 039144 7F004614 13C00139 */ beqz $fp, other_obj_expand -/* 039148 7F004618 00000000 */ nop +/* 039148 7F004618 00000000 */ nop /* 03914C 7F00461C 8E58000C */ lw $t8, 0xc($s2) /* 039150 7F004620 03144024 */ and $t0, $t8, $s4 /* 039154 7F004624 15000135 */ bnez $t0, other_obj_expand -/* 039158 7F004628 00000000 */ nop +/* 039158 7F004628 00000000 */ nop /* 03915C 7F00462C 8E490008 */ lw $t1, 8($s2) /* 039160 7F004630 0009C8C0 */ sll $t9, $t1, 3 /* 039164 7F004634 07230039 */ bgezl $t9, .L7F00471C /* 039168 7F004638 02A02025 */ move $a0, $s5 /* 03916C 7F00463C 86420006 */ lh $v0, 6($s2) -/* 039170 7F004640 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x1C) +/* 039170 7F004640 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x1C) /* 039174 7F004644 27A50118 */ addiu $a1, $sp, 0x118 /* 039178 7F004648 28412710 */ slti $at, $v0, 0x2710 /* 03917C 7F00464C 14200032 */ bnez $at, .L7F004718 @@ -3340,29 +2976,29 @@ type2F_tinted_glass: /* 039250 7F004720 0FC00767 */ jal domakedefaultobj /* 039254 7F004724 02603025 */ move $a2, $s3 /* 039258 7F004728 100000F4 */ b other_obj_expand -/* 03925C 7F00472C 00000000 */ nop +/* 03925C 7F00472C 00000000 */ nop obj_03_expand: /* 039260 7F004730 13C000F2 */ beqz $fp, other_obj_expand -/* 039264 7F004734 00000000 */ nop +/* 039264 7F004734 00000000 */ nop /* 039268 7F004738 8E4C000C */ lw $t4, 0xc($s2) /* 03926C 7F00473C 02A02025 */ move $a0, $s5 /* 039270 7F004740 02402825 */ move $a1, $s2 /* 039274 7F004744 01947824 */ and $t7, $t4, $s4 /* 039278 7F004748 15E000EC */ bnez $t7, other_obj_expand -/* 03927C 7F00474C 00000000 */ nop +/* 03927C 7F00474C 00000000 */ nop /* 039280 7F004750 0FC00767 */ jal domakedefaultobj /* 039284 7F004754 02603025 */ move $a2, $s3 /* 039288 7F004758 100000E8 */ b other_obj_expand -/* 03928C 7F00475C 00000000 */ nop +/* 03928C 7F00475C 00000000 */ nop ammo_box_expand: /* 039290 7F004760 0FC26919 */ jal getPlayerCount /* 039294 7F004764 24100001 */ li $s0, 1 /* 039298 7F004768 28410002 */ slti $at, $v0, 2 /* 03929C 7F00476C 1420000E */ bnez $at, .L7F0047A8 -/* 0392A0 7F004770 00000000 */ nop +/* 0392A0 7F004770 00000000 */ nop /* 0392A4 7F004774 0FC31985 */ jal getPtrMPWeaponSetData -/* 0392A8 7F004778 00000000 */ nop -/* 0392AC 7F00477C 3C0E8007 */ lui $t6, %hi(lastmpweaponnum) +/* 0392A8 7F004778 00000000 */ nop +/* 0392AC 7F00477C 3C0E8007 */ lui $t6, %hi(lastmpweaponnum) /* 0392B0 7F004780 8DCE9540 */ lw $t6, %lo(lastmpweaponnum)($t6) /* 0392B4 7F004784 000EC080 */ sll $t8, $t6, 2 /* 0392B8 7F004788 030EC023 */ subu $t8, $t8, $t6 @@ -3375,15 +3011,15 @@ ammo_box_expand: /* 0392D4 7F0047A4 A530007E */ sh $s0, 0x7e($t1) .L7F0047A8: /* 0392D8 7F0047A8 1A0000D4 */ blez $s0, other_obj_expand -/* 0392DC 7F0047AC 00000000 */ nop +/* 0392DC 7F0047AC 00000000 */ nop /* 0392E0 7F0047B0 13C000D2 */ beqz $fp, other_obj_expand -/* 0392E4 7F0047B4 00000000 */ nop +/* 0392E4 7F0047B4 00000000 */ nop /* 0392E8 7F0047B8 8E59000C */ lw $t9, 0xc($s2) /* 0392EC 7F0047BC 00008825 */ move $s1, $zero /* 0392F0 7F0047C0 02408025 */ move $s0, $s2 /* 0392F4 7F0047C4 03345024 */ and $t2, $t9, $s4 /* 0392F8 7F0047C8 154000CC */ bnez $t2, other_obj_expand -/* 0392FC 7F0047CC 00000000 */ nop +/* 0392FC 7F0047CC 00000000 */ nop .L7F0047D0: /* 039300 7F0047D0 960B0082 */ lhu $t3, 0x82($s0) /* 039304 7F0047D4 59600007 */ blezl $t3, .L7F0047F4 @@ -3392,7 +3028,7 @@ ammo_box_expand: /* 039310 7F0047E0 52C40004 */ beql $s6, $a0, .L7F0047F4 /* 039314 7F0047E4 26310004 */ addiu $s1, $s1, 4 /* 039318 7F0047E8 0FC15B0E */ jal modelLoad -/* 03931C 7F0047EC 00000000 */ nop +/* 03931C 7F0047EC 00000000 */ nop /* 039320 7F0047F0 26310004 */ addiu $s1, $s1, 4 .L7F0047F4: /* 039324 7F0047F4 1637FFF6 */ bne $s1, $s7, .L7F0047D0 @@ -3402,15 +3038,15 @@ ammo_box_expand: /* 039334 7F004804 0FC00767 */ jal domakedefaultobj /* 039338 7F004808 02603025 */ move $a2, $s3 /* 03933C 7F00480C 100000BB */ b other_obj_expand -/* 039340 7F004810 00000000 */ nop +/* 039340 7F004810 00000000 */ nop type2D_tank: /* 039344 7F004814 13C000B9 */ beqz $fp, other_obj_expand -/* 039348 7F004818 00000000 */ nop +/* 039348 7F004818 00000000 */ nop /* 03934C 7F00481C 8E4D000C */ lw $t5, 0xc($s2) /* 039350 7F004820 24040020 */ li $a0, 32 /* 039354 7F004824 01B46024 */ and $t4, $t5, $s4 /* 039358 7F004828 158000B4 */ bnez $t4, other_obj_expand -/* 03935C 7F00482C 00000000 */ nop +/* 03935C 7F00482C 00000000 */ nop /* 039360 7F004830 0FC015C4 */ jal weaponLoadProjectileModels /* 039364 7F004834 E7B400E8 */ swc1 $f20, 0xe8($sp) /* 039368 7F004838 02A02025 */ move $a0, $s5 @@ -3443,13 +3079,13 @@ type2D_tank: /* 0393D0 7F0048A0 E64800D0 */ swc1 $f8, 0xd0($s2) type27_wheeled_vehicle: /* 0393D4 7F0048A4 13C00095 */ beqz $fp, other_obj_expand -/* 0393D8 7F0048A8 00000000 */ nop +/* 0393D8 7F0048A8 00000000 */ nop /* 0393DC 7F0048AC 8E4F000C */ lw $t7, 0xc($s2) /* 0393E0 7F0048B0 02A02025 */ move $a0, $s5 /* 0393E4 7F0048B4 02402825 */ move $a1, $s2 /* 0393E8 7F0048B8 01F47024 */ and $t6, $t7, $s4 /* 0393EC 7F0048BC 15C0008F */ bnez $t6, other_obj_expand -/* 0393F0 7F0048C0 00000000 */ nop +/* 0393F0 7F0048C0 00000000 */ nop /* 0393F4 7F0048C4 0FC00767 */ jal domakedefaultobj /* 0393F8 7F0048C8 02603025 */ move $a2, $s3 /* 0393FC 7F0048CC 8E440014 */ lw $a0, 0x14($s2) @@ -3461,7 +3097,7 @@ type27_wheeled_vehicle: /* 039414 7F0048E4 50A00009 */ beql $a1, $zero, .L7F00490C /* 039418 7F0048E8 3C01BF80 */ lui $at, 0xbf80 /* 03941C 7F0048EC 0FC1B1E7 */ jal modelGetNodeRwData -/* 039420 7F0048F0 00000000 */ nop +/* 039420 7F0048F0 00000000 */ nop /* 039424 7F0048F4 8E490008 */ lw $t1, 8($s2) /* 039428 7F0048F8 3C011000 */ li $at, 0x10000000 # 0.000000 /* 03942C 7F0048FC 0121C824 */ and $t9, $t1, $at @@ -3489,13 +3125,13 @@ type27_wheeled_vehicle: /* 039480 7F004950 AE4000AC */ sw $zero, 0xac($s2) type28_aircraft: /* 039484 7F004954 13C00069 */ beqz $fp, other_obj_expand -/* 039488 7F004958 00000000 */ nop +/* 039488 7F004958 00000000 */ nop /* 03948C 7F00495C 8E4D000C */ lw $t5, 0xc($s2) /* 039490 7F004960 02A02025 */ move $a0, $s5 /* 039494 7F004964 02402825 */ move $a1, $s2 /* 039498 7F004968 01B46024 */ and $t4, $t5, $s4 /* 03949C 7F00496C 15800063 */ bnez $t4, other_obj_expand -/* 0394A0 7F004970 00000000 */ nop +/* 0394A0 7F004970 00000000 */ nop /* 0394A4 7F004974 0FC00767 */ jal domakedefaultobj /* 0394A8 7F004978 02603025 */ move $a2, $s3 /* 0394AC 7F00497C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 @@ -3532,7 +3168,7 @@ tag_expand: /* 039520 7F0049F0 0FC013E2 */ jal set_parent_cur_tag_entry /* 039524 7F0049F4 02402025 */ move $a0, $s2 /* 039528 7F0049F8 10000040 */ b other_obj_expand -/* 03952C 7F0049FC 00000000 */ nop +/* 03952C 7F0049FC 00000000 */ nop type25_rename: /* 039530 7F004A00 8E490004 */ lw $t1, 4($s2) /* 039534 7F004A04 02A02025 */ move $a0, $s5 @@ -3547,12 +3183,12 @@ type25_rename: /* 039554 7F004A24 0FC23628 */ jal bondinvAddTextOverride /* 039558 7F004A28 02402025 */ move $a0, $s2 /* 03955C 7F004A2C 10000033 */ b other_obj_expand -/* 039560 7F004A30 00000000 */ nop +/* 039560 7F004A30 00000000 */ nop type23_solo_brief_text: /* 039564 7F004A34 0FC013E8 */ jal setup_briefing_text_entry_parent /* 039568 7F004A38 02402025 */ move $a0, $s2 /* 03956C 7F004A3C 1000002F */ b other_obj_expand -/* 039570 7F004A40 00000000 */ nop +/* 039570 7F004A40 00000000 */ nop type2E_viewport_pos: /* 039574 7F004A44 8E4B0004 */ lw $t3, 4($s2) /* 039578 7F004A48 3C0142C8 */ li $at, 0x42C80000 # 100.000000 @@ -3578,7 +3214,7 @@ type2E_viewport_pos: /* 0395C8 7F004A98 448E3000 */ mtc1 $t6, $f6 /* 0395CC 7F004A9C E6520008 */ swc1 $f18, 8($s2) /* 0395D0 7F004AA0 44819000 */ mtc1 $at, $f18 -/* 0395D4 7F004AA4 00000000 */ nop +/* 0395D4 7F004AA4 00000000 */ nop /* 0395D8 7F004AA8 46124283 */ div.s $f10, $f8, $f18 /* 0395DC 7F004AAC E650000C */ swc1 $f16, 0xc($s2) /* 0395E0 7F004AB0 46803420 */ cvt.s.w $f16, $f6 @@ -3590,17 +3226,17 @@ type17_objective_expand: /* 0395F4 7F004AC4 0FC013EE */ jal add_ptr_to_objective /* 0395F8 7F004AC8 02402025 */ move $a0, $s2 /* 0395FC 7F004ACC 1000000B */ b other_obj_expand -/* 039600 7F004AD0 00000000 */ nop +/* 039600 7F004AD0 00000000 */ nop type20_subobjective_expand: /* 039604 7F004AD4 0FC013FD */ jal set_parent_cur_obj_enter_room /* 039608 7F004AD8 02402025 */ move $a0, $s2 /* 03960C 7F004ADC 10000007 */ b other_obj_expand -/* 039610 7F004AE0 00000000 */ nop +/* 039610 7F004AE0 00000000 */ nop type21_subobjective_expand: /* 039614 7F004AE4 0FC01403 */ jal set_parent_cur_obj_deposited_in_room /* 039618 7F004AE8 02402025 */ move $a0, $s2 /* 03961C 7F004AEC 10000003 */ b other_obj_expand -/* 039620 7F004AF0 00000000 */ nop +/* 039620 7F004AF0 00000000 */ nop type1E_subobjective_expand: /* 039624 7F004AF4 0FC01409 */ jal set_parent_cur_obj_photograph /* 039628 7F004AF8 02402025 */ move $a0, $s2 @@ -3634,15 +3270,15 @@ other_obj_expand: /* 03968C 7F004B5C 00280821 */ addu $at, $at, $t0 /* 039690 7F004B60 8C28F02C */ lw $t0, %lo(jpt_8004F02C)($at) /* 039694 7F004B64 01000008 */ jr $t0 -/* 039698 7F004B68 00000000 */ nop +/* 039698 7F004B68 00000000 */ nop .L7F004B6C: /* 03969C 7F004B6C 8E490010 */ lw $t1, 0x10($s2) /* 0396A0 7F004B70 1120009C */ beqz $t1, .L7F004DE4 -/* 0396A4 7F004B74 00000000 */ nop +/* 0396A4 7F004B74 00000000 */ nop /* 0396A8 7F004B78 8E590008 */ lw $t9, 8($s2) /* 0396AC 7F004B7C 332A8000 */ andi $t2, $t9, 0x8000 /* 0396B0 7F004B80 11400098 */ beqz $t2, .L7F004DE4 -/* 0396B4 7F004B84 00000000 */ nop +/* 0396B4 7F004B84 00000000 */ nop /* 0396B8 7F004B88 86420006 */ lh $v0, 6($s2) /* 0396BC 7F004B8C 02A02025 */ move $a0, $s5 /* 0396C0 7F004B90 0FC15BA8 */ jal setupCommandGetObject @@ -3651,7 +3287,7 @@ other_obj_expand: /* 0396CC 7F004B9C 00408025 */ move $s0, $v0 /* 0396D0 7F004BA0 8C4B0010 */ lw $t3, 0x10($v0) /* 0396D4 7F004BA4 1160008F */ beqz $t3, .L7F004DE4 -/* 0396D8 7F004BA8 00000000 */ nop +/* 0396D8 7F004BA8 00000000 */ nop /* 0396DC 7F004BAC 8E4D0064 */ lw $t5, 0x64($s2) /* 0396E0 7F004BB0 8E440014 */ lw $a0, 0x14($s2) /* 0396E4 7F004BB4 01B76025 */ or $t4, $t5, $s7 @@ -3662,7 +3298,7 @@ other_obj_expand: /* 0396F8 7F004BC8 0FC0E969 */ jal chrpropReparent /* 0396FC 7F004BCC 8E050010 */ lw $a1, 0x10($s0) /* 039700 7F004BD0 10000084 */ b .L7F004DE4 -/* 039704 7F004BD4 00000000 */ nop +/* 039704 7F004BD4 00000000 */ nop .L7F004BD8: /* 039708 7F004BD8 8E4F0004 */ lw $t7, 4($s2) /* 03970C 7F004BDC 0FC15AA2 */ jal setupGetPtrToCommandByIndex @@ -3674,17 +3310,17 @@ other_obj_expand: /* 039724 7F004BF4 1200007B */ beqz $s0, .L7F004DE4 /* 039728 7F004BF8 00402825 */ move $a1, $v0 /* 03972C 7F004BFC 10400079 */ beqz $v0, .L7F004DE4 -/* 039730 7F004C00 00000000 */ nop +/* 039730 7F004C00 00000000 */ nop /* 039734 7F004C04 92180003 */ lbu $t8, 3($s0) /* 039738 7F004C08 16D80076 */ bne $s6, $t8, .L7F004DE4 -/* 03973C 7F004C0C 00000000 */ nop +/* 03973C 7F004C0C 00000000 */ nop /* 039740 7F004C10 90480003 */ lbu $t0, 3($v0) /* 039744 7F004C14 16C80073 */ bne $s6, $t0, .L7F004DE4 -/* 039748 7F004C18 00000000 */ nop +/* 039748 7F004C18 00000000 */ nop /* 03974C 7F004C1C 0FC1475D */ jal propweaponSetDual /* 039750 7F004C20 02002025 */ move $a0, $s0 /* 039754 7F004C24 1000006F */ b .L7F004DE4 -/* 039758 7F004C28 00000000 */ nop +/* 039758 7F004C28 00000000 */ nop .L7F004C2C: /* 03975C 7F004C2C 8E420004 */ lw $v0, 4($s2) /* 039760 7F004C30 8E510008 */ lw $s1, 8($s2) @@ -3695,18 +3331,18 @@ other_obj_expand: /* 039774 7F004C44 0FC15AA2 */ jal setupGetPtrToCommandByIndex /* 039778 7F004C48 02712021 */ addu $a0, $s3, $s1 /* 03977C 7F004C4C 12000065 */ beqz $s0, .L7F004DE4 -/* 039780 7F004C50 00000000 */ nop +/* 039780 7F004C50 00000000 */ nop /* 039784 7F004C54 8E030010 */ lw $v1, 0x10($s0) /* 039788 7F004C58 10600062 */ beqz $v1, .L7F004DE4 -/* 03978C 7F004C5C 00000000 */ nop +/* 03978C 7F004C5C 00000000 */ nop /* 039790 7F004C60 10400060 */ beqz $v0, .L7F004DE4 -/* 039794 7F004C64 00000000 */ nop +/* 039794 7F004C64 00000000 */ nop /* 039798 7F004C68 90490003 */ lbu $t1, 3($v0) /* 03979C 7F004C6C 1689005D */ bne $s4, $t1, .L7F004DE4 -/* 0397A0 7F004C70 00000000 */ nop +/* 0397A0 7F004C70 00000000 */ nop /* 0397A4 7F004C74 8C590010 */ lw $t9, 0x10($v0) /* 0397A8 7F004C78 1320005A */ beqz $t9, .L7F004DE4 -/* 0397AC 7F004C7C 00000000 */ nop +/* 0397AC 7F004C7C 00000000 */ nop /* 0397B0 7F004C80 AE430004 */ sw $v1, 4($s2) /* 0397B4 7F004C84 8C4A0010 */ lw $t2, 0x10($v0) /* 0397B8 7F004C88 02402025 */ move $a0, $s2 @@ -3734,27 +3370,27 @@ other_obj_expand: /* 03980C 7F004CDC 0FC15BA8 */ jal setupCommandGetObject /* 039810 7F004CE0 026F2821 */ addu $a1, $s3, $t7 /* 039814 7F004CE4 1200003F */ beqz $s0, .L7F004DE4 -/* 039818 7F004CE8 00000000 */ nop +/* 039818 7F004CE8 00000000 */ nop /* 03981C 7F004CEC 8E0E0010 */ lw $t6, 0x10($s0) /* 039820 7F004CF0 11C0003C */ beqz $t6, .L7F004DE4 -/* 039824 7F004CF4 00000000 */ nop +/* 039824 7F004CF4 00000000 */ nop /* 039828 7F004CF8 1220003A */ beqz $s1, .L7F004DE4 -/* 03982C 7F004CFC 00000000 */ nop +/* 03982C 7F004CFC 00000000 */ nop /* 039830 7F004D00 8E380010 */ lw $t8, 0x10($s1) /* 039834 7F004D04 13000037 */ beqz $t8, .L7F004DE4 -/* 039838 7F004D08 00000000 */ nop +/* 039838 7F004D08 00000000 */ nop /* 03983C 7F004D0C 92280003 */ lbu $t0, 3($s1) /* 039840 7F004D10 17C80034 */ bne $fp, $t0, .L7F004DE4 -/* 039844 7F004D14 00000000 */ nop +/* 039844 7F004D14 00000000 */ nop /* 039848 7F004D18 10400032 */ beqz $v0, .L7F004DE4 -/* 03984C 7F004D1C 00000000 */ nop +/* 03984C 7F004D1C 00000000 */ nop /* 039850 7F004D20 8C490010 */ lw $t1, 0x10($v0) /* 039854 7F004D24 1120002F */ beqz $t1, .L7F004DE4 -/* 039858 7F004D28 00000000 */ nop +/* 039858 7F004D28 00000000 */ nop /* 03985C 7F004D2C 90590003 */ lbu $t9, 3($v0) /* 039860 7F004D30 02402025 */ move $a0, $s2 /* 039864 7F004D34 1699002B */ bne $s4, $t9, .L7F004DE4 -/* 039868 7F004D38 00000000 */ nop +/* 039868 7F004D38 00000000 */ nop /* 03986C 7F004D3C AE500004 */ sw $s0, 4($s2) /* 039870 7F004D40 AE510008 */ sw $s1, 8($s2) /* 039874 7F004D44 AE42000C */ sw $v0, 0xc($s2) @@ -3779,19 +3415,19 @@ other_obj_expand: /* 0398BC 7F004D8C 0FC15BA8 */ jal setupCommandGetObject /* 0398C0 7F004D90 02712821 */ addu $a1, $s3, $s1 /* 0398C4 7F004D94 12000013 */ beqz $s0, .L7F004DE4 -/* 0398C8 7F004D98 00000000 */ nop +/* 0398C8 7F004D98 00000000 */ nop /* 0398CC 7F004D9C 8E0F0010 */ lw $t7, 0x10($s0) /* 0398D0 7F004DA0 11E00010 */ beqz $t7, .L7F004DE4 -/* 0398D4 7F004DA4 00000000 */ nop +/* 0398D4 7F004DA4 00000000 */ nop /* 0398D8 7F004DA8 1040000E */ beqz $v0, .L7F004DE4 -/* 0398DC 7F004DAC 00000000 */ nop +/* 0398DC 7F004DAC 00000000 */ nop /* 0398E0 7F004DB0 8C4E0010 */ lw $t6, 0x10($v0) /* 0398E4 7F004DB4 11C0000B */ beqz $t6, .L7F004DE4 -/* 0398E8 7F004DB8 00000000 */ nop +/* 0398E8 7F004DB8 00000000 */ nop /* 0398EC 7F004DBC 92180003 */ lbu $t8, 3($s0) /* 0398F0 7F004DC0 02402025 */ move $a0, $s2 /* 0398F4 7F004DC4 16980007 */ bne $s4, $t8, .L7F004DE4 -/* 0398F8 7F004DC8 00000000 */ nop +/* 0398F8 7F004DC8 00000000 */ nop /* 0398FC 7F004DCC AE500004 */ sw $s0, 4($s2) /* 039900 7F004DD0 0FC0064A */ jal initSetLevelLoadPropLockDoor /* 039904 7F004DD4 AE420008 */ sw $v0, 8($s2) @@ -3809,7 +3445,7 @@ other_obj_expand: /* 039930 7F004E00 5461FF52 */ bnel $v1, $at, .L7F004B4C /* 039934 7F004E04 2468FFFD */ addiu $t0, $v1, -3 /* 039938 7F004E08 1000001B */ b .L7F004E78 -/* 03993C 7F004E0C 00000000 */ nop +/* 03993C 7F004E0C 00000000 */ nop .L7F004E10: /* 039940 7F004E10 3C018007 */ lui $at, %hi(g_CurrentSetup+0) /* 039944 7F004E14 AC205D00 */ sw $zero, %lo(g_CurrentSetup+0)($at) @@ -3839,7 +3475,7 @@ other_obj_expand: /* 0399A4 7F004E74 00002025 */ move $a0, $zero .L7F004E78: /* 0399A8 7F004E78 0FC00417 */ jal alloc_false_GUARDdata_to_exec_global_action -/* 0399AC 7F004E7C 00000000 */ nop +/* 0399AC 7F004E7C 00000000 */ nop /* 0399B0 7F004E80 8FBF0044 */ lw $ra, 0x44($sp) /* 0399B4 7F004E84 D7B40018 */ ldc1 $f20, 0x18($sp) /* 0399B8 7F004E88 8FB00020 */ lw $s0, 0x20($sp) @@ -3854,7 +3490,7 @@ other_obj_expand: /* 0399DC 7F004EAC 03E00008 */ jr $ra /* 0399E0 7F004EB0 27BD0280 */ addiu $sp, $sp, 0x280 ) -#endif +#endif #ifdef VERSION_JP GLOBAL_ASM( @@ -4214,15 +3850,15 @@ glabel jpt_8004F02C /* 038AF8 7F003F88 8CEA0018 */ lw $t2, 0x18($a3) .L7F003F8C: /* 038AFC 7F003F8C 1140001D */ beqz $t2, .L7F004004 -/* 038B00 7F003F90 00000000 */ nop +/* 038B00 7F003F90 00000000 */ nop /* 038B04 7F003F94 0FC2D4F8 */ jal get_room_data_float2 -/* 038B08 7F003F98 00000000 */ nop +/* 038B08 7F003F98 00000000 */ nop /* 038B0C 7F003F9C 3C108007 */ lui $s0, %hi(g_CurrentSetup+0x18) # $s0, 0x8007 /* 038B10 7F003FA0 8E105D58 */ lw $s0, %lo(g_CurrentSetup+0x18)($s0) /* 038B14 7F003FA4 46000086 */ mov.s $f2, $f0 /* 038B18 7F003FA8 8E020024 */ lw $v0, 0x24($s0) /* 038B1C 7F003FAC 10400015 */ beqz $v0, .L7F004004 -/* 038B20 7F003FB0 00000000 */ nop +/* 038B20 7F003FB0 00000000 */ nop /* 038B24 7F003FB4 C6060000 */ lwc1 $f6, ($s0) .L7F003FB8: /* 038B28 7F003FB8 C60A0004 */ lwc1 $f10, 4($s0) @@ -4251,7 +3887,7 @@ glabel jpt_8004F02C /* 038B80 7F004010 51800033 */ beql $t4, $zero, .L7F0040E0 /* 038B84 7F004014 8CE50020 */ lw $a1, 0x20($a3) /* 038B88 7F004018 0FC2D4F8 */ jal get_room_data_float2 -/* 038B8C 7F00401C 00000000 */ nop +/* 038B8C 7F00401C 00000000 */ nop /* 038B90 7F004020 3C078007 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8007 /* 038B94 7F004024 24E75D40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x5d40 /* 038B98 7F004028 8CF0001C */ lw $s0, 0x1c($a3) @@ -4341,7 +3977,7 @@ glabel jpt_8004F02C /* 038CD0 7F004160 8FAA0278 */ lw $t2, 0x278($sp) .L7F004164: /* 038CD4 7F004164 11400012 */ beqz $t2, .L7F0041B0 -/* 038CD8 7F004168 00000000 */ nop +/* 038CD8 7F004168 00000000 */ nop /* 038CDC 7F00416C 0FC006D4 */ jal load_proptype /* 038CE0 7F004170 24040009 */ li $a0, 9 /* 038CE4 7F004174 0FC003AE */ jal alloc_init_GUARDdata_entries @@ -4364,7 +4000,7 @@ glabel jpt_8004F02C /* 038D24 7F0041B4 00002025 */ move $a0, $zero .L7F0041B8: /* 038D28 7F0041B8 13C0003A */ beqz $fp, .L7F0042A4 -/* 038D2C 7F0041BC 00000000 */ nop +/* 038D2C 7F0041BC 00000000 */ nop /* 038D30 7F0041C0 0FC006D4 */ jal load_proptype /* 038D34 7F0041C4 24040001 */ li $a0, 1 /* 038D38 7F0041C8 02629821 */ addu $s3, $s3, $v0 @@ -4430,7 +4066,7 @@ glabel jpt_8004F02C /* 038E24 7F0042B4 0FC26C01 */ jal getPlayerCount /* 038E28 7F0042B8 00008025 */ move $s0, $zero /* 038E2C 7F0042BC 1840000C */ blez $v0, .L7F0042F0 -/* 038E30 7F0042C0 00000000 */ nop +/* 038E30 7F0042C0 00000000 */ nop .L7F0042C4: /* 038E34 7F0042C4 0FC26F2B */ jal set_cur_player /* 038E38 7F0042C8 02002025 */ move $a0, $s0 @@ -4442,23 +4078,23 @@ glabel jpt_8004F02C /* 038E50 7F0042E0 26100001 */ addiu $s0, $s0, 1 /* 038E54 7F0042E4 0202082A */ slt $at, $s0, $v0 /* 038E58 7F0042E8 1420FFF6 */ bnez $at, .L7F0042C4 -/* 038E5C 7F0042EC 00000000 */ nop +/* 038E5C 7F0042EC 00000000 */ nop .L7F0042F0: /* 038E60 7F0042F0 3C0B8007 */ lui $t3, %hi(g_CurrentSetup+0x0c) # $t3, 0x8007 /* 038E64 7F0042F4 8D6B5D4C */ lw $t3, %lo(g_CurrentSetup+0x0c)($t3) /* 038E68 7F0042F8 116002E3 */ beqz $t3, .L7F004E88 -/* 038E6C 7F0042FC 00000000 */ nop +/* 038E6C 7F0042FC 00000000 */ nop /* 038E70 7F004300 0FC3021E */ jal lvlGetSelectedDifficulty -/* 038E74 7F004304 00000000 */ nop +/* 038E74 7F004304 00000000 */ nop /* 038E78 7F004308 244C0004 */ addiu $t4, $v0, 4 /* 038E7C 7F00430C 240D0001 */ li $t5, 1 /* 038E80 7F004310 0FC26C01 */ jal getPlayerCount /* 038E84 7F004314 018DA004 */ sllv $s4, $t5, $t4 /* 038E88 7F004318 28410002 */ slti $at, $v0, 2 /* 038E8C 7F00431C 14200007 */ bnez $at, .L7F00433C -/* 038E90 7F004320 00000000 */ nop +/* 038E90 7F004320 00000000 */ nop /* 038E94 7F004324 0FC26C01 */ jal getPlayerCount -/* 038E98 7F004328 00000000 */ nop +/* 038E98 7F004328 00000000 */ nop /* 038E9C 7F00432C 244E0014 */ addiu $t6, $v0, 0x14 /* 038EA0 7F004330 240F0001 */ li $t7, 1 /* 038EA4 7F004334 01CFC004 */ sllv $t8, $t7, $t6 @@ -4483,19 +4119,19 @@ glabel jpt_8004F02C /* 038EE8 7F004378 00280821 */ addu $at, $at, $t0 /* 038EEC 7F00437C 8C28EF98 */ lw $t0, %lo(jpt_object_type_expansion)($at) /* 038EF0 7F004380 01000008 */ jr $t0 -/* 038EF4 7F004384 00000000 */ nop +/* 038EF4 7F004384 00000000 */ nop actor_attr_expand: /* 038EF8 7F004388 9250000B */ lbu $s0, 0xb($s2) /* 038EFC 7F00438C 0FC08CAC */ jal chrFindByLiteralId /* 038F00 7F004390 8E440004 */ lw $a0, 4($s2) /* 038F04 7F004394 104001DD */ beqz $v0, other_obj_expand -/* 038F08 7F004398 00000000 */ nop +/* 038F08 7F004398 00000000 */ nop /* 038F0C 7F00439C 8C490018 */ lw $t1, 0x18($v0) /* 038F10 7F0043A0 112001DA */ beqz $t1, other_obj_expand -/* 038F14 7F0043A4 00000000 */ nop +/* 038F14 7F0043A4 00000000 */ nop /* 038F18 7F0043A8 8C59001C */ lw $t9, 0x1c($v0) /* 038F1C 7F0043AC 132001D7 */ beqz $t9, other_obj_expand -/* 038F20 7F0043B0 00000000 */ nop +/* 038F20 7F0043B0 00000000 */ nop /* 038F24 7F0043B4 100001D5 */ b other_obj_expand /* 038F28 7F0043B8 A0500010 */ sb $s0, 0x10($v0) actor_expand: @@ -4503,24 +4139,24 @@ actor_expand: /* 038F30 7F0043C0 02A02025 */ move $a0, $s5 /* 038F34 7F0043C4 02402825 */ move $a1, $s2 /* 038F38 7F0043C8 114001D0 */ beqz $t2, other_obj_expand -/* 038F3C 7F0043CC 00000000 */ nop +/* 038F3C 7F0043CC 00000000 */ nop /* 038F40 7F0043D0 0FC08E83 */ jal expand_09_characters /* 038F44 7F0043D4 02603025 */ move $a2, $s3 /* 038F48 7F0043D8 100001CC */ b other_obj_expand -/* 038F4C 7F0043DC 00000000 */ nop +/* 038F4C 7F0043DC 00000000 */ nop door_expand: /* 038F50 7F0043E0 13C001CA */ beqz $fp, other_obj_expand -/* 038F54 7F0043E4 00000000 */ nop +/* 038F54 7F0043E4 00000000 */ nop /* 038F58 7F0043E8 8E4B000C */ lw $t3, 0xc($s2) /* 038F5C 7F0043EC 02A02025 */ move $a0, $s5 /* 038F60 7F0043F0 02402825 */ move $a1, $s2 /* 038F64 7F0043F4 01746824 */ and $t5, $t3, $s4 /* 038F68 7F0043F8 15A001C4 */ bnez $t5, other_obj_expand -/* 038F6C 7F0043FC 00000000 */ nop +/* 038F6C 7F0043FC 00000000 */ nop /* 038F70 7F004400 0FC00D20 */ jal setupDoor /* 038F74 7F004404 02603025 */ move $a2, $s3 /* 038F78 7F004408 100001C0 */ b other_obj_expand -/* 038F7C 7F00440C 00000000 */ nop +/* 038F7C 7F00440C 00000000 */ nop door_scale_expand: /* 038F80 7F004410 8E4C0004 */ lw $t4, 4($s2) /* 038F84 7F004414 3C014780 */ li $at, 0x47800000 # 65536.000000 @@ -4534,113 +4170,113 @@ door_scale_expand: item_expand: /* 038FA4 7F004434 8FAF0278 */ lw $t7, 0x278($sp) /* 038FA8 7F004438 11E001B4 */ beqz $t7, other_obj_expand -/* 038FAC 7F00443C 00000000 */ nop +/* 038FAC 7F00443C 00000000 */ nop /* 038FB0 7F004440 8E4E000C */ lw $t6, 0xc($s2) /* 038FB4 7F004444 02A02025 */ move $a0, $s5 /* 038FB8 7F004448 02402825 */ move $a1, $s2 /* 038FBC 7F00444C 01D4C024 */ and $t8, $t6, $s4 /* 038FC0 7F004450 170001AE */ bnez $t8, other_obj_expand -/* 038FC4 7F004454 00000000 */ nop +/* 038FC4 7F004454 00000000 */ nop /* 038FC8 7F004458 0FC009CE */ jal weaponAssignToHome /* 038FCC 7F00445C 02603025 */ move $a2, $s3 /* 038FD0 7F004460 100001AA */ b other_obj_expand -/* 038FD4 7F004464 00000000 */ nop +/* 038FD4 7F004464 00000000 */ nop key_expand: /* 038FD8 7F004468 8FA80278 */ lw $t0, 0x278($sp) /* 038FDC 7F00446C 110001A7 */ beqz $t0, other_obj_expand -/* 038FE0 7F004470 00000000 */ nop +/* 038FE0 7F004470 00000000 */ nop /* 038FE4 7F004474 8E49000C */ lw $t1, 0xc($s2) /* 038FE8 7F004478 02A02025 */ move $a0, $s5 /* 038FEC 7F00447C 02402825 */ move $a1, $s2 /* 038FF0 7F004480 0134C824 */ and $t9, $t1, $s4 /* 038FF4 7F004484 172001A1 */ bnez $t9, other_obj_expand -/* 038FF8 7F004488 00000000 */ nop +/* 038FF8 7F004488 00000000 */ nop /* 038FFC 7F00448C 0FC00A87 */ jal setupKey /* 039000 7F004490 02603025 */ move $a2, $s3 /* 039004 7F004494 1000019D */ b other_obj_expand -/* 039008 7F004498 00000000 */ nop +/* 039008 7F004498 00000000 */ nop hat_expand: /* 03900C 7F00449C 8FAA0278 */ lw $t2, 0x278($sp) /* 039010 7F0044A0 1140019A */ beqz $t2, other_obj_expand -/* 039014 7F0044A4 00000000 */ nop +/* 039014 7F0044A4 00000000 */ nop /* 039018 7F0044A8 8E4B000C */ lw $t3, 0xc($s2) /* 03901C 7F0044AC 02A02025 */ move $a0, $s5 /* 039020 7F0044B0 02402825 */ move $a1, $s2 /* 039024 7F0044B4 01746824 */ and $t5, $t3, $s4 /* 039028 7F0044B8 15A00194 */ bnez $t5, other_obj_expand -/* 03902C 7F0044BC 00000000 */ nop +/* 03902C 7F0044BC 00000000 */ nop /* 039030 7F0044C0 0FC00A6A */ jal setupHat /* 039034 7F0044C4 02603025 */ move $a2, $s3 /* 039038 7F0044C8 10000190 */ b other_obj_expand -/* 03903C 7F0044CC 00000000 */ nop +/* 03903C 7F0044CC 00000000 */ nop surv_camera_expand: /* 039040 7F0044D0 13C0018E */ beqz $fp, other_obj_expand -/* 039044 7F0044D4 00000000 */ nop +/* 039044 7F0044D4 00000000 */ nop /* 039048 7F0044D8 8E4C000C */ lw $t4, 0xc($s2) /* 03904C 7F0044DC 02A02025 */ move $a0, $s5 /* 039050 7F0044E0 02402825 */ move $a1, $s2 /* 039054 7F0044E4 01947824 */ and $t7, $t4, $s4 /* 039058 7F0044E8 15E00188 */ bnez $t7, other_obj_expand -/* 03905C 7F0044EC 00000000 */ nop +/* 03905C 7F0044EC 00000000 */ nop /* 039060 7F0044F0 0FC00A8F */ jal setupCctv /* 039064 7F0044F4 02603025 */ move $a2, $s3 /* 039068 7F0044F8 10000184 */ b other_obj_expand -/* 03906C 7F0044FC 00000000 */ nop +/* 03906C 7F0044FC 00000000 */ nop autogun_expand: /* 039070 7F004500 13C00182 */ beqz $fp, other_obj_expand -/* 039074 7F004504 00000000 */ nop +/* 039074 7F004504 00000000 */ nop /* 039078 7F004508 8E4E000C */ lw $t6, 0xc($s2) /* 03907C 7F00450C 02A02025 */ move $a0, $s5 /* 039080 7F004510 02402825 */ move $a1, $s2 /* 039084 7F004514 01D4C024 */ and $t8, $t6, $s4 /* 039088 7F004518 1700017C */ bnez $t8, other_obj_expand -/* 03908C 7F00451C 00000000 */ nop +/* 03908C 7F00451C 00000000 */ nop /* 039090 7F004520 0FC00B16 */ jal setupAutogun /* 039094 7F004524 02603025 */ move $a2, $s3 /* 039098 7F004528 10000178 */ b other_obj_expand -/* 03909C 7F00452C 00000000 */ nop +/* 03909C 7F00452C 00000000 */ nop rack_expand: /* 0390A0 7F004530 13C00176 */ beqz $fp, other_obj_expand -/* 0390A4 7F004534 00000000 */ nop +/* 0390A4 7F004534 00000000 */ nop /* 0390A8 7F004538 8E48000C */ lw $t0, 0xc($s2) /* 0390AC 7F00453C 02A02025 */ move $a0, $s5 /* 0390B0 7F004540 02402825 */ move $a1, $s2 /* 0390B4 7F004544 01144824 */ and $t1, $t0, $s4 /* 0390B8 7F004548 15200170 */ bnez $t1, other_obj_expand -/* 0390BC 7F00454C 00000000 */ nop +/* 0390BC 7F00454C 00000000 */ nop /* 0390C0 7F004550 0FC00B87 */ jal setupHangingMonitors /* 0390C4 7F004554 02603025 */ move $a2, $s3 /* 0390C8 7F004558 1000016C */ b other_obj_expand -/* 0390CC 7F00455C 00000000 */ nop +/* 0390CC 7F00455C 00000000 */ nop single_screen_display_expand: /* 0390D0 7F004560 13C0016A */ beqz $fp, other_obj_expand -/* 0390D4 7F004564 00000000 */ nop +/* 0390D4 7F004564 00000000 */ nop /* 0390D8 7F004568 8E59000C */ lw $t9, 0xc($s2) /* 0390DC 7F00456C 02A02025 */ move $a0, $s5 /* 0390E0 7F004570 02402825 */ move $a1, $s2 /* 0390E4 7F004574 03345024 */ and $t2, $t9, $s4 /* 0390E8 7F004578 15400164 */ bnez $t2, other_obj_expand -/* 0390EC 7F00457C 00000000 */ nop +/* 0390EC 7F00457C 00000000 */ nop /* 0390F0 7F004580 0FC00B8F */ jal setupSingleMonitor /* 0390F4 7F004584 02603025 */ move $a2, $s3 /* 0390F8 7F004588 10000160 */ b other_obj_expand -/* 0390FC 7F00458C 00000000 */ nop +/* 0390FC 7F00458C 00000000 */ nop multi_screen_display_expand: /* 039100 7F004590 13C0015E */ beqz $fp, other_obj_expand -/* 039104 7F004594 00000000 */ nop +/* 039104 7F004594 00000000 */ nop /* 039108 7F004598 8E4B000C */ lw $t3, 0xc($s2) /* 03910C 7F00459C 02A02025 */ move $a0, $s5 /* 039110 7F0045A0 02402825 */ move $a1, $s2 /* 039114 7F0045A4 01746824 */ and $t5, $t3, $s4 /* 039118 7F0045A8 15A00158 */ bnez $t5, other_obj_expand -/* 03911C 7F0045AC 00000000 */ nop +/* 03911C 7F0045AC 00000000 */ nop /* 039120 7F0045B0 0FC00C34 */ jal setupMultiMonitor /* 039124 7F0045B4 02603025 */ move $a2, $s3 /* 039128 7F0045B8 10000154 */ b other_obj_expand -/* 03912C 7F0045BC 00000000 */ nop +/* 03912C 7F0045BC 00000000 */ nop body_armor_expand: /* 039130 7F0045C0 13C00152 */ beqz $fp, other_obj_expand -/* 039134 7F0045C4 00000000 */ nop +/* 039134 7F0045C4 00000000 */ nop /* 039138 7F0045C8 8E4C000C */ lw $t4, 0xc($s2) /* 03913C 7F0045CC 3C0E8005 */ lui $t6, %hi(j_text_trigger) # $t6, 0x8005 /* 039140 7F0045D0 01947824 */ and $t7, $t4, $s4 @@ -4648,7 +4284,7 @@ body_armor_expand: /* 039148 7F0045D8 8E580080 */ lw $t8, 0x80($s2) /* 03914C 7F0045DC 8DCE8500 */ lw $t6, %lo(j_text_trigger)($t6) /* 039150 7F0045E0 11C0014A */ beqz $t6, other_obj_expand -/* 039154 7F0045E4 00000000 */ nop +/* 039154 7F0045E4 00000000 */ nop /* 039158 7F0045E8 8E580080 */ lw $t8, 0x80($s2) .L7F0045EC: /* 03915C 7F0045EC 3C014780 */ li $at, 0x47800000 # 65536.000000 @@ -4664,14 +4300,14 @@ body_armor_expand: /* 039184 7F004614 0FC00767 */ jal domakedefaultobj /* 039188 7F004618 E64A0084 */ swc1 $f10, 0x84($s2) /* 03918C 7F00461C 1000013B */ b other_obj_expand -/* 039190 7F004620 00000000 */ nop +/* 039190 7F004620 00000000 */ nop type2F_tinted_glass: /* 039194 7F004624 13C00139 */ beqz $fp, other_obj_expand -/* 039198 7F004628 00000000 */ nop +/* 039198 7F004628 00000000 */ nop /* 03919C 7F00462C 8E48000C */ lw $t0, 0xc($s2) /* 0391A0 7F004630 01144824 */ and $t1, $t0, $s4 /* 0391A4 7F004634 15200135 */ bnez $t1, other_obj_expand -/* 0391A8 7F004638 00000000 */ nop +/* 0391A8 7F004638 00000000 */ nop /* 0391AC 7F00463C 8E590008 */ lw $t9, 8($s2) /* 0391B0 7F004640 001950C0 */ sll $t2, $t9, 3 /* 0391B4 7F004644 05430039 */ bgezl $t2, .L7F00472C @@ -4738,28 +4374,28 @@ type2F_tinted_glass: /* 0392A0 7F004730 0FC00767 */ jal domakedefaultobj /* 0392A4 7F004734 02603025 */ move $a2, $s3 /* 0392A8 7F004738 100000F4 */ b other_obj_expand -/* 0392AC 7F00473C 00000000 */ nop +/* 0392AC 7F00473C 00000000 */ nop obj_03_expand: /* 0392B0 7F004740 13C000F2 */ beqz $fp, other_obj_expand -/* 0392B4 7F004744 00000000 */ nop +/* 0392B4 7F004744 00000000 */ nop /* 0392B8 7F004748 8E4F000C */ lw $t7, 0xc($s2) /* 0392BC 7F00474C 02A02025 */ move $a0, $s5 /* 0392C0 7F004750 02402825 */ move $a1, $s2 /* 0392C4 7F004754 01F47024 */ and $t6, $t7, $s4 /* 0392C8 7F004758 15C000EC */ bnez $t6, other_obj_expand -/* 0392CC 7F00475C 00000000 */ nop +/* 0392CC 7F00475C 00000000 */ nop /* 0392D0 7F004760 0FC00767 */ jal domakedefaultobj /* 0392D4 7F004764 02603025 */ move $a2, $s3 /* 0392D8 7F004768 100000E8 */ b other_obj_expand -/* 0392DC 7F00476C 00000000 */ nop +/* 0392DC 7F00476C 00000000 */ nop ammo_box_expand: /* 0392E0 7F004770 0FC26C01 */ jal getPlayerCount /* 0392E4 7F004774 24100001 */ li $s0, 1 /* 0392E8 7F004778 28410002 */ slti $at, $v0, 2 /* 0392EC 7F00477C 1420000E */ bnez $at, .L7F0047B8 -/* 0392F0 7F004780 00000000 */ nop +/* 0392F0 7F004780 00000000 */ nop /* 0392F4 7F004784 0FC31CBD */ jal getPtrMPWeaponSetData -/* 0392F8 7F004788 00000000 */ nop +/* 0392F8 7F004788 00000000 */ nop /* 0392FC 7F00478C 3C188007 */ lui $t8, %hi(lastmpweaponnum) # $t8, 0x8007 /* 039300 7F004790 8F189580 */ lw $t8, %lo(lastmpweaponnum)($t8) /* 039304 7F004794 00184080 */ sll $t0, $t8, 2 @@ -4773,15 +4409,15 @@ ammo_box_expand: /* 039324 7F0047B4 A730007E */ sh $s0, 0x7e($t9) .L7F0047B8: /* 039328 7F0047B8 1A0000D4 */ blez $s0, other_obj_expand -/* 03932C 7F0047BC 00000000 */ nop +/* 03932C 7F0047BC 00000000 */ nop /* 039330 7F0047C0 13C000D2 */ beqz $fp, other_obj_expand -/* 039334 7F0047C4 00000000 */ nop +/* 039334 7F0047C4 00000000 */ nop /* 039338 7F0047C8 8E4A000C */ lw $t2, 0xc($s2) /* 03933C 7F0047CC 00008825 */ move $s1, $zero /* 039340 7F0047D0 02408025 */ move $s0, $s2 /* 039344 7F0047D4 01545824 */ and $t3, $t2, $s4 /* 039348 7F0047D8 156000CC */ bnez $t3, other_obj_expand -/* 03934C 7F0047DC 00000000 */ nop +/* 03934C 7F0047DC 00000000 */ nop .L7F0047E0: /* 039350 7F0047E0 960D0082 */ lhu $t5, 0x82($s0) /* 039354 7F0047E4 59A00007 */ blezl $t5, .L7F004804 @@ -4790,7 +4426,7 @@ ammo_box_expand: /* 039360 7F0047F0 52C40004 */ beql $s6, $a0, .L7F004804 /* 039364 7F0047F4 26310004 */ addiu $s1, $s1, 4 /* 039368 7F0047F8 0FC15C4E */ jal modelLoad -/* 03936C 7F0047FC 00000000 */ nop +/* 03936C 7F0047FC 00000000 */ nop /* 039370 7F004800 26310004 */ addiu $s1, $s1, 4 .L7F004804: /* 039374 7F004804 1637FFF6 */ bne $s1, $s7, .L7F0047E0 @@ -4800,15 +4436,15 @@ ammo_box_expand: /* 039384 7F004814 0FC00767 */ jal domakedefaultobj /* 039388 7F004818 02603025 */ move $a2, $s3 /* 03938C 7F00481C 100000BB */ b other_obj_expand -/* 039390 7F004820 00000000 */ nop +/* 039390 7F004820 00000000 */ nop type2D_tank: /* 039394 7F004824 13C000B9 */ beqz $fp, other_obj_expand -/* 039398 7F004828 00000000 */ nop +/* 039398 7F004828 00000000 */ nop /* 03939C 7F00482C 8E4C000C */ lw $t4, 0xc($s2) /* 0393A0 7F004830 24040020 */ li $a0, 32 /* 0393A4 7F004834 01947824 */ and $t7, $t4, $s4 /* 0393A8 7F004838 15E000B4 */ bnez $t7, other_obj_expand -/* 0393AC 7F00483C 00000000 */ nop +/* 0393AC 7F00483C 00000000 */ nop /* 0393B0 7F004840 0FC015CC */ jal weaponLoadProjectileModels /* 0393B4 7F004844 E7B400E8 */ swc1 $f20, 0xe8($sp) /* 0393B8 7F004848 02A02025 */ move $a0, $s5 @@ -4841,13 +4477,13 @@ type2D_tank: /* 039420 7F0048B0 E64800D0 */ swc1 $f8, 0xd0($s2) type27_wheeled_vehicle: /* 039424 7F0048B4 13C00095 */ beqz $fp, other_obj_expand -/* 039428 7F0048B8 00000000 */ nop +/* 039428 7F0048B8 00000000 */ nop /* 03942C 7F0048BC 8E4E000C */ lw $t6, 0xc($s2) /* 039430 7F0048C0 02A02025 */ move $a0, $s5 /* 039434 7F0048C4 02402825 */ move $a1, $s2 /* 039438 7F0048C8 01D4C024 */ and $t8, $t6, $s4 /* 03943C 7F0048CC 1700008F */ bnez $t8, other_obj_expand -/* 039440 7F0048D0 00000000 */ nop +/* 039440 7F0048D0 00000000 */ nop /* 039444 7F0048D4 0FC00767 */ jal domakedefaultobj /* 039448 7F0048D8 02603025 */ move $a2, $s3 /* 03944C 7F0048DC 8E440014 */ lw $a0, 0x14($s2) @@ -4859,7 +4495,7 @@ type27_wheeled_vehicle: /* 039464 7F0048F4 50A00009 */ beql $a1, $zero, .L7F00491C /* 039468 7F0048F8 3C01BF80 */ lui $at, 0xbf80 /* 03946C 7F0048FC 0FC1B363 */ jal modelGetNodeRwData -/* 039470 7F004900 00000000 */ nop +/* 039470 7F004900 00000000 */ nop /* 039474 7F004904 8E590008 */ lw $t9, 8($s2) /* 039478 7F004908 3C011000 */ li $at, 0x10000000 # 0.000000 /* 03947C 7F00490C 03215024 */ and $t2, $t9, $at @@ -4887,13 +4523,13 @@ type27_wheeled_vehicle: /* 0394D0 7F004960 AE4000AC */ sw $zero, 0xac($s2) type28_aircraft: /* 0394D4 7F004964 13C00069 */ beqz $fp, other_obj_expand -/* 0394D8 7F004968 00000000 */ nop +/* 0394D8 7F004968 00000000 */ nop /* 0394DC 7F00496C 8E4C000C */ lw $t4, 0xc($s2) /* 0394E0 7F004970 02A02025 */ move $a0, $s5 /* 0394E4 7F004974 02402825 */ move $a1, $s2 /* 0394E8 7F004978 01947824 */ and $t7, $t4, $s4 /* 0394EC 7F00497C 15E00063 */ bnez $t7, other_obj_expand -/* 0394F0 7F004980 00000000 */ nop +/* 0394F0 7F004980 00000000 */ nop /* 0394F4 7F004984 0FC00767 */ jal domakedefaultobj /* 0394F8 7F004988 02603025 */ move $a2, $s3 /* 0394FC 7F00498C 3C01BF80 */ li $at, 0xBF800000 # -1.000000 @@ -4930,7 +4566,7 @@ tag_expand: /* 039570 7F004A00 0FC013E8 */ jal set_parent_cur_tag_entry /* 039574 7F004A04 02402025 */ move $a0, $s2 /* 039578 7F004A08 10000040 */ b other_obj_expand -/* 03957C 7F004A0C 00000000 */ nop +/* 03957C 7F004A0C 00000000 */ nop type25_rename: /* 039580 7F004A10 8E590004 */ lw $t9, 4($s2) /* 039584 7F004A14 02A02025 */ move $a0, $s5 @@ -4945,12 +4581,12 @@ type25_rename: /* 0395A4 7F004A34 0FC238E2 */ jal bondinvAddTextOverride /* 0395A8 7F004A38 02402025 */ move $a0, $s2 /* 0395AC 7F004A3C 10000033 */ b other_obj_expand -/* 0395B0 7F004A40 00000000 */ nop +/* 0395B0 7F004A40 00000000 */ nop type23_solo_brief_text: /* 0395B4 7F004A44 0FC013EE */ jal setup_briefing_text_entry_parent /* 0395B8 7F004A48 02402025 */ move $a0, $s2 /* 0395BC 7F004A4C 1000002F */ b other_obj_expand -/* 0395C0 7F004A50 00000000 */ nop +/* 0395C0 7F004A50 00000000 */ nop type2E_viewport_pos: /* 0395C4 7F004A54 8E4D0004 */ lw $t5, 4($s2) /* 0395C8 7F004A58 3C0142C8 */ li $at, 0x42C80000 # 100.000000 @@ -4976,7 +4612,7 @@ type2E_viewport_pos: /* 039618 7F004AA8 44983000 */ mtc1 $t8, $f6 /* 03961C 7F004AAC E6520008 */ swc1 $f18, 8($s2) /* 039620 7F004AB0 44819000 */ mtc1 $at, $f18 -/* 039624 7F004AB4 00000000 */ nop +/* 039624 7F004AB4 00000000 */ nop /* 039628 7F004AB8 46124283 */ div.s $f10, $f8, $f18 /* 03962C 7F004ABC E650000C */ swc1 $f16, 0xc($s2) /* 039630 7F004AC0 46803420 */ cvt.s.w $f16, $f6 @@ -4988,17 +4624,17 @@ type17_objective_expand: /* 039644 7F004AD4 0FC013F4 */ jal add_ptr_to_objective /* 039648 7F004AD8 02402025 */ move $a0, $s2 /* 03964C 7F004ADC 1000000B */ b other_obj_expand -/* 039650 7F004AE0 00000000 */ nop +/* 039650 7F004AE0 00000000 */ nop type20_subobjective_expand: /* 039654 7F004AE4 0FC01403 */ jal set_parent_cur_obj_enter_room /* 039658 7F004AE8 02402025 */ move $a0, $s2 /* 03965C 7F004AEC 10000007 */ b other_obj_expand -/* 039660 7F004AF0 00000000 */ nop +/* 039660 7F004AF0 00000000 */ nop type21_subobjective_expand: /* 039664 7F004AF4 0FC01409 */ jal set_parent_cur_obj_deposited_in_room /* 039668 7F004AF8 02402025 */ move $a0, $s2 /* 03966C 7F004AFC 10000003 */ b other_obj_expand -/* 039670 7F004B00 00000000 */ nop +/* 039670 7F004B00 00000000 */ nop type1E_subobjective_expand: /* 039674 7F004B04 0FC0140F */ jal set_parent_cur_obj_photograph /* 039678 7F004B08 02402025 */ move $a0, $s2 @@ -5032,15 +4668,15 @@ other_obj_expand: /* 0396DC 7F004B6C 00290821 */ addu $at, $at, $t1 /* 0396E0 7F004B70 8C29F05C */ lw $t1, %lo(jpt_8004F02C)($at) /* 0396E4 7F004B74 01200008 */ jr $t1 -/* 0396E8 7F004B78 00000000 */ nop +/* 0396E8 7F004B78 00000000 */ nop .L7F004B7C: /* 0396EC 7F004B7C 8E590010 */ lw $t9, 0x10($s2) /* 0396F0 7F004B80 1320009C */ beqz $t9, .L7F004DF4 -/* 0396F4 7F004B84 00000000 */ nop +/* 0396F4 7F004B84 00000000 */ nop /* 0396F8 7F004B88 8E4A0008 */ lw $t2, 8($s2) /* 0396FC 7F004B8C 314B8000 */ andi $t3, $t2, 0x8000 /* 039700 7F004B90 11600098 */ beqz $t3, .L7F004DF4 -/* 039704 7F004B94 00000000 */ nop +/* 039704 7F004B94 00000000 */ nop /* 039708 7F004B98 86420006 */ lh $v0, 6($s2) /* 03970C 7F004B9C 02A02025 */ move $a0, $s5 /* 039710 7F004BA0 0FC15CE8 */ jal setupCommandGetObject @@ -5049,7 +4685,7 @@ other_obj_expand: /* 03971C 7F004BAC 00408025 */ move $s0, $v0 /* 039720 7F004BB0 8C4D0010 */ lw $t5, 0x10($v0) /* 039724 7F004BB4 11A0008F */ beqz $t5, .L7F004DF4 -/* 039728 7F004BB8 00000000 */ nop +/* 039728 7F004BB8 00000000 */ nop /* 03972C 7F004BBC 8E4C0064 */ lw $t4, 0x64($s2) /* 039730 7F004BC0 8E440014 */ lw $a0, 0x14($s2) /* 039734 7F004BC4 01977825 */ or $t7, $t4, $s7 @@ -5060,7 +4696,7 @@ other_obj_expand: /* 039748 7F004BD8 0FC0EA29 */ jal chrpropReparent /* 03974C 7F004BDC 8E050010 */ lw $a1, 0x10($s0) /* 039750 7F004BE0 10000084 */ b .L7F004DF4 -/* 039754 7F004BE4 00000000 */ nop +/* 039754 7F004BE4 00000000 */ nop .L7F004BE8: /* 039758 7F004BE8 8E4E0004 */ lw $t6, 4($s2) /* 03975C 7F004BEC 0FC15BE2 */ jal setupGetPtrToCommandByIndex @@ -5072,17 +4708,17 @@ other_obj_expand: /* 039774 7F004C04 1200007B */ beqz $s0, .L7F004DF4 /* 039778 7F004C08 00402825 */ move $a1, $v0 /* 03977C 7F004C0C 10400079 */ beqz $v0, .L7F004DF4 -/* 039780 7F004C10 00000000 */ nop +/* 039780 7F004C10 00000000 */ nop /* 039784 7F004C14 92080003 */ lbu $t0, 3($s0) /* 039788 7F004C18 16C80076 */ bne $s6, $t0, .L7F004DF4 -/* 03978C 7F004C1C 00000000 */ nop +/* 03978C 7F004C1C 00000000 */ nop /* 039790 7F004C20 90490003 */ lbu $t1, 3($v0) /* 039794 7F004C24 16C90073 */ bne $s6, $t1, .L7F004DF4 -/* 039798 7F004C28 00000000 */ nop +/* 039798 7F004C28 00000000 */ nop /* 03979C 7F004C2C 0FC1489C */ jal propweaponSetDual /* 0397A0 7F004C30 02002025 */ move $a0, $s0 /* 0397A4 7F004C34 1000006F */ b .L7F004DF4 -/* 0397A8 7F004C38 00000000 */ nop +/* 0397A8 7F004C38 00000000 */ nop .L7F004C3C: /* 0397AC 7F004C3C 8E420004 */ lw $v0, 4($s2) /* 0397B0 7F004C40 8E510008 */ lw $s1, 8($s2) @@ -5093,18 +4729,18 @@ other_obj_expand: /* 0397C4 7F004C54 0FC15BE2 */ jal setupGetPtrToCommandByIndex /* 0397C8 7F004C58 02712021 */ addu $a0, $s3, $s1 /* 0397CC 7F004C5C 12000065 */ beqz $s0, .L7F004DF4 -/* 0397D0 7F004C60 00000000 */ nop +/* 0397D0 7F004C60 00000000 */ nop /* 0397D4 7F004C64 8E030010 */ lw $v1, 0x10($s0) /* 0397D8 7F004C68 10600062 */ beqz $v1, .L7F004DF4 -/* 0397DC 7F004C6C 00000000 */ nop +/* 0397DC 7F004C6C 00000000 */ nop /* 0397E0 7F004C70 10400060 */ beqz $v0, .L7F004DF4 -/* 0397E4 7F004C74 00000000 */ nop +/* 0397E4 7F004C74 00000000 */ nop /* 0397E8 7F004C78 90590003 */ lbu $t9, 3($v0) /* 0397EC 7F004C7C 1699005D */ bne $s4, $t9, .L7F004DF4 -/* 0397F0 7F004C80 00000000 */ nop +/* 0397F0 7F004C80 00000000 */ nop /* 0397F4 7F004C84 8C4A0010 */ lw $t2, 0x10($v0) /* 0397F8 7F004C88 1140005A */ beqz $t2, .L7F004DF4 -/* 0397FC 7F004C8C 00000000 */ nop +/* 0397FC 7F004C8C 00000000 */ nop /* 039800 7F004C90 AE430004 */ sw $v1, 4($s2) /* 039804 7F004C94 8C4B0010 */ lw $t3, 0x10($v0) /* 039808 7F004C98 02402025 */ move $a0, $s2 @@ -5132,27 +4768,27 @@ other_obj_expand: /* 03985C 7F004CEC 0FC15CE8 */ jal setupCommandGetObject /* 039860 7F004CF0 026E2821 */ addu $a1, $s3, $t6 /* 039864 7F004CF4 1200003F */ beqz $s0, .L7F004DF4 -/* 039868 7F004CF8 00000000 */ nop +/* 039868 7F004CF8 00000000 */ nop /* 03986C 7F004CFC 8E180010 */ lw $t8, 0x10($s0) /* 039870 7F004D00 1300003C */ beqz $t8, .L7F004DF4 -/* 039874 7F004D04 00000000 */ nop +/* 039874 7F004D04 00000000 */ nop /* 039878 7F004D08 1220003A */ beqz $s1, .L7F004DF4 -/* 03987C 7F004D0C 00000000 */ nop +/* 03987C 7F004D0C 00000000 */ nop /* 039880 7F004D10 8E280010 */ lw $t0, 0x10($s1) /* 039884 7F004D14 11000037 */ beqz $t0, .L7F004DF4 -/* 039888 7F004D18 00000000 */ nop +/* 039888 7F004D18 00000000 */ nop /* 03988C 7F004D1C 92290003 */ lbu $t1, 3($s1) /* 039890 7F004D20 17C90034 */ bne $fp, $t1, .L7F004DF4 -/* 039894 7F004D24 00000000 */ nop +/* 039894 7F004D24 00000000 */ nop /* 039898 7F004D28 10400032 */ beqz $v0, .L7F004DF4 -/* 03989C 7F004D2C 00000000 */ nop +/* 03989C 7F004D2C 00000000 */ nop /* 0398A0 7F004D30 8C590010 */ lw $t9, 0x10($v0) /* 0398A4 7F004D34 1320002F */ beqz $t9, .L7F004DF4 -/* 0398A8 7F004D38 00000000 */ nop +/* 0398A8 7F004D38 00000000 */ nop /* 0398AC 7F004D3C 904A0003 */ lbu $t2, 3($v0) /* 0398B0 7F004D40 02402025 */ move $a0, $s2 /* 0398B4 7F004D44 168A002B */ bne $s4, $t2, .L7F004DF4 -/* 0398B8 7F004D48 00000000 */ nop +/* 0398B8 7F004D48 00000000 */ nop /* 0398BC 7F004D4C AE500004 */ sw $s0, 4($s2) /* 0398C0 7F004D50 AE510008 */ sw $s1, 8($s2) /* 0398C4 7F004D54 AE42000C */ sw $v0, 0xc($s2) @@ -5177,19 +4813,19 @@ other_obj_expand: /* 03990C 7F004D9C 0FC15CE8 */ jal setupCommandGetObject /* 039910 7F004DA0 02712821 */ addu $a1, $s3, $s1 /* 039914 7F004DA4 12000013 */ beqz $s0, .L7F004DF4 -/* 039918 7F004DA8 00000000 */ nop +/* 039918 7F004DA8 00000000 */ nop /* 03991C 7F004DAC 8E0E0010 */ lw $t6, 0x10($s0) /* 039920 7F004DB0 11C00010 */ beqz $t6, .L7F004DF4 -/* 039924 7F004DB4 00000000 */ nop +/* 039924 7F004DB4 00000000 */ nop /* 039928 7F004DB8 1040000E */ beqz $v0, .L7F004DF4 -/* 03992C 7F004DBC 00000000 */ nop +/* 03992C 7F004DBC 00000000 */ nop /* 039930 7F004DC0 8C580010 */ lw $t8, 0x10($v0) /* 039934 7F004DC4 1300000B */ beqz $t8, .L7F004DF4 -/* 039938 7F004DC8 00000000 */ nop +/* 039938 7F004DC8 00000000 */ nop /* 03993C 7F004DCC 92080003 */ lbu $t0, 3($s0) /* 039940 7F004DD0 02402025 */ move $a0, $s2 /* 039944 7F004DD4 16880007 */ bne $s4, $t0, .L7F004DF4 -/* 039948 7F004DD8 00000000 */ nop +/* 039948 7F004DD8 00000000 */ nop /* 03994C 7F004DDC AE500004 */ sw $s0, 4($s2) /* 039950 7F004DE0 0FC0064A */ jal initSetLevelLoadPropLockDoor /* 039954 7F004DE4 AE420008 */ sw $v0, 8($s2) @@ -5207,7 +4843,7 @@ other_obj_expand: /* 039980 7F004E10 5461FF52 */ bnel $v1, $at, .L7F004B5C /* 039984 7F004E14 2469FFFD */ addiu $t1, $v1, -3 /* 039988 7F004E18 1000001B */ b .L7F004E88 -/* 03998C 7F004E1C 00000000 */ nop +/* 03998C 7F004E1C 00000000 */ nop .L7F004E20: /* 039990 7F004E20 3C018007 */ lui $at, %hi(g_CurrentSetup+0) # $at, 0x8007 /* 039994 7F004E24 AC205D40 */ sw $zero, %lo(g_CurrentSetup+0)($at) @@ -5237,7 +4873,7 @@ other_obj_expand: /* 0399F4 7F004E84 00002025 */ move $a0, $zero .L7F004E88: /* 0399F8 7F004E88 0FC00417 */ jal alloc_false_GUARDdata_to_exec_global_action -/* 0399FC 7F004E8C 00000000 */ nop +/* 0399FC 7F004E8C 00000000 */ nop /* 039A00 7F004E90 8FBF0044 */ lw $ra, 0x44($sp) /* 039A04 7F004E94 D7B40018 */ ldc1 $f20, 0x18($sp) /* 039A08 7F004E98 8FB00020 */ lw $s0, 0x20($sp) @@ -5612,15 +5248,15 @@ glabel proplvreset2 /* 036904 7F003F14 8CEA0018 */ lw $t2, 0x18($a3) .L7F003F18: /* 036908 7F003F18 1140001D */ beqz $t2, .L7F003F90 -/* 03690C 7F003F1C 00000000 */ nop +/* 03690C 7F003F1C 00000000 */ nop /* 036910 7F003F20 0FC2CEDB */ jal get_room_data_float2 -/* 036914 7F003F24 00000000 */ nop +/* 036914 7F003F24 00000000 */ nop /* 036918 7F003F28 3C108006 */ lui $s0, %hi(g_CurrentSetup+0x18) # $s0, 0x8006 /* 03691C 7F003F2C 8E104C58 */ lw $s0, %lo(g_CurrentSetup+0x18)($s0) /* 036920 7F003F30 46000086 */ mov.s $f2, $f0 /* 036924 7F003F34 8E020024 */ lw $v0, 0x24($s0) /* 036928 7F003F38 10400015 */ beqz $v0, .L7F003F90 -/* 03692C 7F003F3C 00000000 */ nop +/* 03692C 7F003F3C 00000000 */ nop /* 036930 7F003F40 C6060000 */ lwc1 $f6, ($s0) .L7F003F44: /* 036934 7F003F44 C60A0004 */ lwc1 $f10, 4($s0) @@ -5649,7 +5285,7 @@ glabel proplvreset2 /* 03698C 7F003F9C 51800033 */ beql $t4, $zero, .L7F00406C /* 036990 7F003FA0 8CE50020 */ lw $a1, 0x20($a3) /* 036994 7F003FA4 0FC2CEDB */ jal get_room_data_float2 -/* 036998 7F003FA8 00000000 */ nop +/* 036998 7F003FA8 00000000 */ nop /* 03699C 7F003FAC 3C078006 */ lui $a3, %hi(g_CurrentSetup+0) # $a3, 0x8006 /* 0369A0 7F003FB0 24E74C40 */ addiu $a3, %lo(g_CurrentSetup+0) # addiu $a3, $a3, 0x4c40 /* 0369A4 7F003FB4 8CF0001C */ lw $s0, 0x1c($a3) @@ -5739,7 +5375,7 @@ glabel proplvreset2 /* 036ADC 7F0040EC 8FAA0278 */ lw $t2, 0x278($sp) .L7F0040F0: /* 036AE0 7F0040F0 11400012 */ beqz $t2, .L7F00413C -/* 036AE4 7F0040F4 00000000 */ nop +/* 036AE4 7F0040F4 00000000 */ nop /* 036AE8 7F0040F8 0FC006D4 */ jal load_proptype /* 036AEC 7F0040FC 24040009 */ li $a0, 9 /* 036AF0 7F004100 0FC003AE */ jal alloc_init_GUARDdata_entries @@ -5762,7 +5398,7 @@ glabel proplvreset2 /* 036B30 7F004140 00002025 */ move $a0, $zero .L7F004144: /* 036B34 7F004144 13C0003A */ beqz $fp, .L7F004230 -/* 036B38 7F004148 00000000 */ nop +/* 036B38 7F004148 00000000 */ nop /* 036B3C 7F00414C 0FC006D4 */ jal load_proptype /* 036B40 7F004150 24040001 */ li $a0, 1 /* 036B44 7F004154 02629821 */ addu $s3, $s3, $v0 @@ -5828,7 +5464,7 @@ glabel proplvreset2 /* 036C30 7F004240 0FC26669 */ jal getPlayerCount /* 036C34 7F004244 00008025 */ move $s0, $zero /* 036C38 7F004248 1840000C */ blez $v0, .L7F00427C -/* 036C3C 7F00424C 00000000 */ nop +/* 036C3C 7F00424C 00000000 */ nop .L7F004250: /* 036C40 7F004250 0FC26993 */ jal set_cur_player /* 036C44 7F004254 02002025 */ move $a0, $s0 @@ -5840,23 +5476,23 @@ glabel proplvreset2 /* 036C5C 7F00426C 26100001 */ addiu $s0, $s0, 1 /* 036C60 7F004270 0202082A */ slt $at, $s0, $v0 /* 036C64 7F004274 1420FFF6 */ bnez $at, .L7F004250 -/* 036C68 7F004278 00000000 */ nop +/* 036C68 7F004278 00000000 */ nop .L7F00427C: /* 036C6C 7F00427C 3C0B8006 */ lui $t3, %hi(g_CurrentSetup+0x0c) # $t3, 0x8006 /* 036C70 7F004280 8D6B4C4C */ lw $t3, %lo(g_CurrentSetup+0x0c)($t3) /* 036C74 7F004284 116002E1 */ beqz $t3, .L7F004E88 -/* 036C78 7F004288 00000000 */ nop +/* 036C78 7F004288 00000000 */ nop /* 036C7C 7F00428C 0FC2FC21 */ jal lvlGetSelectedDifficulty -/* 036C80 7F004290 00000000 */ nop +/* 036C80 7F004290 00000000 */ nop /* 036C84 7F004294 244C0004 */ addiu $t4, $v0, 4 /* 036C88 7F004298 240D0001 */ li $t5, 1 /* 036C8C 7F00429C 0FC26669 */ jal getPlayerCount /* 036C90 7F0042A0 018DA004 */ sllv $s4, $t5, $t4 /* 036C94 7F0042A4 28410002 */ slti $at, $v0, 2 /* 036C98 7F0042A8 14200007 */ bnez $at, .L7F0042C8 -/* 036C9C 7F0042AC 00000000 */ nop +/* 036C9C 7F0042AC 00000000 */ nop /* 036CA0 7F0042B0 0FC26669 */ jal getPlayerCount -/* 036CA4 7F0042B4 00000000 */ nop +/* 036CA4 7F0042B4 00000000 */ nop /* 036CA8 7F0042B8 244E0014 */ addiu $t6, $v0, 0x14 /* 036CAC 7F0042BC 240F0001 */ li $t7, 1 /* 036CB0 7F0042C0 01CFC004 */ sllv $t8, $t7, $t6 @@ -5881,19 +5517,19 @@ glabel proplvreset2 /* 036CF4 7F004304 00280821 */ addu $at, $at, $t0 /* 036CF8 7F004308 8C2873B0 */ lw $t0, %lo(jpt_object_type_expansion)($at) /* 036CFC 7F00430C 01000008 */ jr $t0 -/* 036D00 7F004310 00000000 */ nop +/* 036D00 7F004310 00000000 */ nop actor_attr_expand: /* 036D04 7F004314 9250000B */ lbu $s0, 0xb($s2) /* 036D08 7F004318 0FC08BE4 */ jal chrFindByLiteralId /* 036D0C 7F00431C 8E440004 */ lw $a0, 4($s2) /* 036D10 7F004320 104001DB */ beqz $v0, other_obj_expand -/* 036D14 7F004324 00000000 */ nop +/* 036D14 7F004324 00000000 */ nop /* 036D18 7F004328 8C490018 */ lw $t1, 0x18($v0) /* 036D1C 7F00432C 112001D8 */ beqz $t1, other_obj_expand -/* 036D20 7F004330 00000000 */ nop +/* 036D20 7F004330 00000000 */ nop /* 036D24 7F004334 8C59001C */ lw $t9, 0x1c($v0) /* 036D28 7F004338 132001D5 */ beqz $t9, other_obj_expand -/* 036D2C 7F00433C 00000000 */ nop +/* 036D2C 7F00433C 00000000 */ nop /* 036D30 7F004340 100001D3 */ b other_obj_expand /* 036D34 7F004344 A0500010 */ sb $s0, 0x10($v0) actor_expand: @@ -5901,24 +5537,24 @@ actor_expand: /* 036D3C 7F00434C 02A02025 */ move $a0, $s5 /* 036D40 7F004350 02402825 */ move $a1, $s2 /* 036D44 7F004354 114001CE */ beqz $t2, other_obj_expand -/* 036D48 7F004358 00000000 */ nop +/* 036D48 7F004358 00000000 */ nop /* 036D4C 7F00435C 0FC08DBB */ jal expand_09_characters /* 036D50 7F004360 02603025 */ move $a2, $s3 /* 036D54 7F004364 100001CA */ b other_obj_expand -/* 036D58 7F004368 00000000 */ nop +/* 036D58 7F004368 00000000 */ nop door_expand: /* 036D5C 7F00436C 13C001C8 */ beqz $fp, other_obj_expand -/* 036D60 7F004370 00000000 */ nop +/* 036D60 7F004370 00000000 */ nop /* 036D64 7F004374 8E4B000C */ lw $t3, 0xc($s2) /* 036D68 7F004378 02A02025 */ move $a0, $s5 /* 036D6C 7F00437C 02402825 */ move $a1, $s2 /* 036D70 7F004380 01746824 */ and $t5, $t3, $s4 /* 036D74 7F004384 15A001C2 */ bnez $t5, other_obj_expand -/* 036D78 7F004388 00000000 */ nop +/* 036D78 7F004388 00000000 */ nop /* 036D7C 7F00438C 0FC00CFC */ jal setupDoor /* 036D80 7F004390 02603025 */ move $a2, $s3 /* 036D84 7F004394 100001BE */ b other_obj_expand -/* 036D88 7F004398 00000000 */ nop +/* 036D88 7F004398 00000000 */ nop door_scale_expand: /* 036D8C 7F00439C 8E4C0004 */ lw $t4, 4($s2) /* 036D90 7F0043A0 3C014780 */ li $at, 0x47800000 # 65536.000000 @@ -5932,113 +5568,113 @@ door_scale_expand: item_expand: /* 036DB0 7F0043C0 8FAF0278 */ lw $t7, 0x278($sp) /* 036DB4 7F0043C4 11E001B2 */ beqz $t7, other_obj_expand -/* 036DB8 7F0043C8 00000000 */ nop +/* 036DB8 7F0043C8 00000000 */ nop /* 036DBC 7F0043CC 8E4E000C */ lw $t6, 0xc($s2) /* 036DC0 7F0043D0 02A02025 */ move $a0, $s5 /* 036DC4 7F0043D4 02402825 */ move $a1, $s2 /* 036DC8 7F0043D8 01D4C024 */ and $t8, $t6, $s4 /* 036DCC 7F0043DC 170001AC */ bnez $t8, other_obj_expand -/* 036DD0 7F0043E0 00000000 */ nop +/* 036DD0 7F0043E0 00000000 */ nop /* 036DD4 7F0043E4 0FC009CE */ jal weaponAssignToHome /* 036DD8 7F0043E8 02603025 */ move $a2, $s3 /* 036DDC 7F0043EC 100001A8 */ b other_obj_expand -/* 036DE0 7F0043F0 00000000 */ nop +/* 036DE0 7F0043F0 00000000 */ nop key_expand: /* 036DE4 7F0043F4 8FA80278 */ lw $t0, 0x278($sp) /* 036DE8 7F0043F8 110001A5 */ beqz $t0, other_obj_expand -/* 036DEC 7F0043FC 00000000 */ nop +/* 036DEC 7F0043FC 00000000 */ nop /* 036DF0 7F004400 8E49000C */ lw $t1, 0xc($s2) /* 036DF4 7F004404 02A02025 */ move $a0, $s5 /* 036DF8 7F004408 02402825 */ move $a1, $s2 /* 036DFC 7F00440C 0134C824 */ and $t9, $t1, $s4 /* 036E00 7F004410 1720019F */ bnez $t9, other_obj_expand -/* 036E04 7F004414 00000000 */ nop +/* 036E04 7F004414 00000000 */ nop /* 036E08 7F004418 0FC00A61 */ jal setupKey /* 036E0C 7F00441C 02603025 */ move $a2, $s3 /* 036E10 7F004420 1000019B */ b other_obj_expand -/* 036E14 7F004424 00000000 */ nop +/* 036E14 7F004424 00000000 */ nop hat_expand: /* 036E18 7F004428 8FAA0278 */ lw $t2, 0x278($sp) /* 036E1C 7F00442C 11400198 */ beqz $t2, other_obj_expand -/* 036E20 7F004430 00000000 */ nop +/* 036E20 7F004430 00000000 */ nop /* 036E24 7F004434 8E4B000C */ lw $t3, 0xc($s2) /* 036E28 7F004438 02A02025 */ move $a0, $s5 /* 036E2C 7F00443C 02402825 */ move $a1, $s2 /* 036E30 7F004440 01746824 */ and $t5, $t3, $s4 /* 036E34 7F004444 15A00192 */ bnez $t5, other_obj_expand -/* 036E38 7F004448 00000000 */ nop +/* 036E38 7F004448 00000000 */ nop /* 036E3C 7F00444C 0FC00A44 */ jal setupHat /* 036E40 7F004450 02603025 */ move $a2, $s3 /* 036E44 7F004454 1000018E */ b other_obj_expand -/* 036E48 7F004458 00000000 */ nop +/* 036E48 7F004458 00000000 */ nop surv_camera_expand: /* 036E4C 7F00445C 13C0018C */ beqz $fp, other_obj_expand -/* 036E50 7F004460 00000000 */ nop +/* 036E50 7F004460 00000000 */ nop /* 036E54 7F004464 8E4C000C */ lw $t4, 0xc($s2) /* 036E58 7F004468 02A02025 */ move $a0, $s5 /* 036E5C 7F00446C 02402825 */ move $a1, $s2 /* 036E60 7F004470 01947824 */ and $t7, $t4, $s4 /* 036E64 7F004474 15E00186 */ bnez $t7, other_obj_expand -/* 036E68 7F004478 00000000 */ nop +/* 036E68 7F004478 00000000 */ nop /* 036E6C 7F00447C 0FC00A69 */ jal setupCctv /* 036E70 7F004480 02603025 */ move $a2, $s3 /* 036E74 7F004484 10000182 */ b other_obj_expand -/* 036E78 7F004488 00000000 */ nop +/* 036E78 7F004488 00000000 */ nop autogun_expand: /* 036E7C 7F00448C 13C00180 */ beqz $fp, other_obj_expand -/* 036E80 7F004490 00000000 */ nop +/* 036E80 7F004490 00000000 */ nop /* 036E84 7F004494 8E4E000C */ lw $t6, 0xc($s2) /* 036E88 7F004498 02A02025 */ move $a0, $s5 /* 036E8C 7F00449C 02402825 */ move $a1, $s2 /* 036E90 7F0044A0 01D4C024 */ and $t8, $t6, $s4 /* 036E94 7F0044A4 1700017A */ bnez $t8, other_obj_expand -/* 036E98 7F0044A8 00000000 */ nop +/* 036E98 7F0044A8 00000000 */ nop /* 036E9C 7F0044AC 0FC00AF0 */ jal setupAutogun /* 036EA0 7F0044B0 02603025 */ move $a2, $s3 /* 036EA4 7F0044B4 10000176 */ b other_obj_expand -/* 036EA8 7F0044B8 00000000 */ nop +/* 036EA8 7F0044B8 00000000 */ nop rack_expand: /* 036EAC 7F0044BC 13C00174 */ beqz $fp, other_obj_expand -/* 036EB0 7F0044C0 00000000 */ nop +/* 036EB0 7F0044C0 00000000 */ nop /* 036EB4 7F0044C4 8E48000C */ lw $t0, 0xc($s2) /* 036EB8 7F0044C8 02A02025 */ move $a0, $s5 /* 036EBC 7F0044CC 02402825 */ move $a1, $s2 /* 036EC0 7F0044D0 01144824 */ and $t1, $t0, $s4 /* 036EC4 7F0044D4 1520016E */ bnez $t1, other_obj_expand -/* 036EC8 7F0044D8 00000000 */ nop +/* 036EC8 7F0044D8 00000000 */ nop /* 036ECC 7F0044DC 0FC00B63 */ jal setupHangingMonitors /* 036ED0 7F0044E0 02603025 */ move $a2, $s3 /* 036ED4 7F0044E4 1000016A */ b other_obj_expand -/* 036ED8 7F0044E8 00000000 */ nop +/* 036ED8 7F0044E8 00000000 */ nop single_screen_display_expand: /* 036EDC 7F0044EC 13C00168 */ beqz $fp, other_obj_expand -/* 036EE0 7F0044F0 00000000 */ nop +/* 036EE0 7F0044F0 00000000 */ nop /* 036EE4 7F0044F4 8E59000C */ lw $t9, 0xc($s2) /* 036EE8 7F0044F8 02A02025 */ move $a0, $s5 /* 036EEC 7F0044FC 02402825 */ move $a1, $s2 /* 036EF0 7F004500 03345024 */ and $t2, $t9, $s4 /* 036EF4 7F004504 15400162 */ bnez $t2, other_obj_expand -/* 036EF8 7F004508 00000000 */ nop +/* 036EF8 7F004508 00000000 */ nop /* 036EFC 7F00450C 0FC00B6B */ jal setupSingleMonitor /* 036F00 7F004510 02603025 */ move $a2, $s3 /* 036F04 7F004514 1000015E */ b other_obj_expand -/* 036F08 7F004518 00000000 */ nop +/* 036F08 7F004518 00000000 */ nop multi_screen_display_expand: /* 036F0C 7F00451C 13C0015C */ beqz $fp, other_obj_expand -/* 036F10 7F004520 00000000 */ nop +/* 036F10 7F004520 00000000 */ nop /* 036F14 7F004524 8E4B000C */ lw $t3, 0xc($s2) /* 036F18 7F004528 02A02025 */ move $a0, $s5 /* 036F1C 7F00452C 02402825 */ move $a1, $s2 /* 036F20 7F004530 01746824 */ and $t5, $t3, $s4 /* 036F24 7F004534 15A00156 */ bnez $t5, other_obj_expand -/* 036F28 7F004538 00000000 */ nop +/* 036F28 7F004538 00000000 */ nop /* 036F2C 7F00453C 0FC00C10 */ jal setupMultiMonitor /* 036F30 7F004540 02603025 */ move $a2, $s3 /* 036F34 7F004544 10000152 */ b other_obj_expand -/* 036F38 7F004548 00000000 */ nop +/* 036F38 7F004548 00000000 */ nop .L7F00454C: /* 036F3C 7F00454C 13C00150 */ beqz $fp, other_obj_expand -/* 036F40 7F004550 00000000 */ nop +/* 036F40 7F004550 00000000 */ nop body_armor_expand: /* 036F44 7F004554 8E4C000C */ lw $t4, 0xc($s2) /* 036F48 7F004558 3C0E8004 */ lui $t6, %hi(j_text_trigger) # $t6, 0x8004 @@ -6047,7 +5683,7 @@ body_armor_expand: /* 036F54 7F004564 8E580080 */ lw $t8, 0x80($s2) /* 036F58 7F004568 8DCE1150 */ lw $t6, %lo(j_text_trigger)($t6) /* 036F5C 7F00456C 11C00148 */ beqz $t6, other_obj_expand -/* 036F60 7F004570 00000000 */ nop +/* 036F60 7F004570 00000000 */ nop /* 036F64 7F004574 8E580080 */ lw $t8, 0x80($s2) .L7F0045EC: /* 036F68 7F004578 3C014780 */ li $at, 0x47800000 # 65536.000000 @@ -6063,14 +5699,14 @@ body_armor_expand: /* 036F90 7F0045A0 0FC00767 */ jal domakedefaultobj /* 036F94 7F0045A4 E64A0084 */ swc1 $f10, 0x84($s2) /* 036F98 7F0045A8 10000139 */ b other_obj_expand -/* 036F9C 7F0045AC 00000000 */ nop +/* 036F9C 7F0045AC 00000000 */ nop type2F_tinted_glass: /* 036FA0 7F0045B0 13C00137 */ beqz $fp, other_obj_expand -/* 036FA4 7F0045B4 00000000 */ nop +/* 036FA4 7F0045B4 00000000 */ nop /* 036FA8 7F0045B8 8E48000C */ lw $t0, 0xc($s2) /* 036FAC 7F0045BC 01144824 */ and $t1, $t0, $s4 /* 036FB0 7F0045C0 15200133 */ bnez $t1, other_obj_expand -/* 036FB4 7F0045C4 00000000 */ nop +/* 036FB4 7F0045C4 00000000 */ nop /* 036FB8 7F0045C8 8E590008 */ lw $t9, 8($s2) /* 036FBC 7F0045CC 001950C0 */ sll $t2, $t9, 3 /* 036FC0 7F0045D0 05430039 */ bgezl $t2, .L7F0046B8 @@ -6137,28 +5773,28 @@ type2F_tinted_glass: /* 0370AC 7F0046BC 0FC00767 */ jal domakedefaultobj /* 0370B0 7F0046C0 02603025 */ move $a2, $s3 /* 0370B4 7F0046C4 100000F2 */ b other_obj_expand -/* 0370B8 7F0046C8 00000000 */ nop +/* 0370B8 7F0046C8 00000000 */ nop obj_03_expand: /* 0370BC 7F0046CC 13C000F0 */ beqz $fp, other_obj_expand -/* 0370C0 7F0046D0 00000000 */ nop +/* 0370C0 7F0046D0 00000000 */ nop /* 0370C4 7F0046D4 8E4F000C */ lw $t7, 0xc($s2) /* 0370C8 7F0046D8 02A02025 */ move $a0, $s5 /* 0370CC 7F0046DC 02402825 */ move $a1, $s2 /* 0370D0 7F0046E0 01F47024 */ and $t6, $t7, $s4 /* 0370D4 7F0046E4 15C000EA */ bnez $t6, other_obj_expand -/* 0370D8 7F0046E8 00000000 */ nop +/* 0370D8 7F0046E8 00000000 */ nop /* 0370DC 7F0046EC 0FC00767 */ jal domakedefaultobj /* 0370E0 7F0046F0 02603025 */ move $a2, $s3 /* 0370E4 7F0046F4 100000E6 */ b other_obj_expand -/* 0370E8 7F0046F8 00000000 */ nop +/* 0370E8 7F0046F8 00000000 */ nop ammo_box_expand: /* 0370EC 7F0046FC 0FC26669 */ jal getPlayerCount /* 0370F0 7F004700 24100001 */ li $s0, 1 /* 0370F4 7F004704 28410002 */ slti $at, $v0, 2 /* 0370F8 7F004708 1420000C */ bnez $at, .L7F0047B8 -/* 0370FC 7F00470C 00000000 */ nop +/* 0370FC 7F00470C 00000000 */ nop /* 037100 7F004710 0FC316CD */ jal getPtrMPWeaponSetData -/* 037104 7F004714 00000000 */ nop +/* 037104 7F004714 00000000 */ nop /* 037108 7F004718 3C188006 */ lui $t8, %hi(lastmpweaponnum) # $t8, 0x8006 /* 03710C 7F00471C 8F188480 */ lw $t8, %lo(lastmpweaponnum)($t8) /* 037110 7F004720 001840C0 */ sll $t0, $t8, 3 @@ -6170,15 +5806,15 @@ ammo_box_expand: /* 037128 7F004738 A730007E */ sh $s0, 0x7e($t9) .L7F0047B8: /* 03712C 7F00473C 1A0000D4 */ blez $s0, other_obj_expand -/* 037130 7F004740 00000000 */ nop +/* 037130 7F004740 00000000 */ nop /* 037134 7F004744 13C000D2 */ beqz $fp, other_obj_expand -/* 037138 7F004748 00000000 */ nop +/* 037138 7F004748 00000000 */ nop /* 03713C 7F00474C 8E4A000C */ lw $t2, 0xc($s2) /* 037140 7F004750 00008825 */ move $s1, $zero /* 037144 7F004754 02408025 */ move $s0, $s2 /* 037148 7F004758 01545824 */ and $t3, $t2, $s4 /* 03714C 7F00475C 156000CC */ bnez $t3, other_obj_expand -/* 037150 7F004760 00000000 */ nop +/* 037150 7F004760 00000000 */ nop .L7F0047E0: /* 037154 7F004764 960D0082 */ lhu $t5, 0x82($s0) /* 037158 7F004768 59A00007 */ blezl $t5, .L7F004804 @@ -6187,7 +5823,7 @@ ammo_box_expand: /* 037164 7F004774 52C40004 */ beql $s6, $a0, .L7F004804 /* 037168 7F004778 26310004 */ addiu $s1, $s1, 4 /* 03716C 7F00477C 0FC15BC6 */ jal modelLoad -/* 037170 7F004780 00000000 */ nop +/* 037170 7F004780 00000000 */ nop /* 037174 7F004784 26310004 */ addiu $s1, $s1, 4 .L7F004804: /* 037178 7F004788 1637FFF6 */ bne $s1, $s7, .L7F0047E0 @@ -6197,15 +5833,15 @@ ammo_box_expand: /* 037188 7F004798 0FC00767 */ jal domakedefaultobj /* 03718C 7F00479C 02603025 */ move $a2, $s3 /* 037190 7F0047A0 100000BB */ b other_obj_expand -/* 037194 7F0047A4 00000000 */ nop +/* 037194 7F0047A4 00000000 */ nop type2D_tank: /* 037198 7F0047A8 13C000B9 */ beqz $fp, other_obj_expand -/* 03719C 7F0047AC 00000000 */ nop +/* 03719C 7F0047AC 00000000 */ nop /* 0371A0 7F0047B0 8E4C000C */ lw $t4, 0xc($s2) /* 0371A4 7F0047B4 24040020 */ li $a0, 32 /* 0371A8 7F0047B8 01947824 */ and $t7, $t4, $s4 /* 0371AC 7F0047BC 15E000B4 */ bnez $t7, other_obj_expand -/* 0371B0 7F0047C0 00000000 */ nop +/* 0371B0 7F0047C0 00000000 */ nop /* 0371B4 7F0047C4 0FC015AC */ jal weaponLoadProjectileModels /* 0371B8 7F0047C8 E7B400E8 */ swc1 $f20, 0xe8($sp) /* 0371BC 7F0047CC 02A02025 */ move $a0, $s5 @@ -6238,13 +5874,13 @@ type2D_tank: /* 037224 7F004834 E64800D0 */ swc1 $f8, 0xd0($s2) type27_wheeled_vehicle: /* 037228 7F004838 13C00095 */ beqz $fp, other_obj_expand -/* 03722C 7F00483C 00000000 */ nop +/* 03722C 7F00483C 00000000 */ nop /* 037230 7F004840 8E4E000C */ lw $t6, 0xc($s2) /* 037234 7F004844 02A02025 */ move $a0, $s5 /* 037238 7F004848 02402825 */ move $a1, $s2 /* 03723C 7F00484C 01D4C024 */ and $t8, $t6, $s4 /* 037240 7F004850 1700008F */ bnez $t8, other_obj_expand -/* 037244 7F004854 00000000 */ nop +/* 037244 7F004854 00000000 */ nop /* 037248 7F004858 0FC00767 */ jal domakedefaultobj /* 03724C 7F00485C 02603025 */ move $a2, $s3 /* 037250 7F004860 8E440014 */ lw $a0, 0x14($s2) @@ -6256,7 +5892,7 @@ type27_wheeled_vehicle: /* 037268 7F004878 50A00009 */ beql $a1, $zero, .L7F00491C /* 03726C 7F00487C 3C01BF80 */ lui $at, 0xbf80 /* 037270 7F004880 0FC1B3A3 */ jal modelGetNodeRwData -/* 037274 7F004884 00000000 */ nop +/* 037274 7F004884 00000000 */ nop /* 037278 7F004888 8E590008 */ lw $t9, 8($s2) /* 03727C 7F00488C 3C011000 */ li $at, 0x10000000 # 0.000000 /* 037280 7F004890 03215024 */ and $t2, $t9, $at @@ -6284,13 +5920,13 @@ type27_wheeled_vehicle: /* 0372D4 7F0048E4 AE4000AC */ sw $zero, 0xac($s2) type28_aircraft: /* 0372D8 7F0048E8 13C00069 */ beqz $fp, other_obj_expand -/* 0372DC 7F0048EC 00000000 */ nop +/* 0372DC 7F0048EC 00000000 */ nop /* 0372E0 7F0048F0 8E4C000C */ lw $t4, 0xc($s2) /* 0372E4 7F0048F4 02A02025 */ move $a0, $s5 /* 0372E8 7F0048F8 02402825 */ move $a1, $s2 /* 0372EC 7F0048FC 01947824 */ and $t7, $t4, $s4 /* 0372F0 7F004900 15E00063 */ bnez $t7, other_obj_expand -/* 0372F4 7F004904 00000000 */ nop +/* 0372F4 7F004904 00000000 */ nop /* 0372F8 7F004908 0FC00767 */ jal domakedefaultobj /* 0372FC 7F00490C 02603025 */ move $a2, $s3 /* 037300 7F004910 3C01BF80 */ li $at, 0xBF800000 # -1.000000 @@ -6327,7 +5963,7 @@ tag_expand: /* 037374 7F004984 0FC013C8 */ jal set_parent_cur_tag_entry /* 037378 7F004988 02402025 */ move $a0, $s2 /* 03737C 7F00498C 10000040 */ b other_obj_expand -/* 037380 7F004990 00000000 */ nop +/* 037380 7F004990 00000000 */ nop type25_rename: /* 037384 7F004994 8E590004 */ lw $t9, 4($s2) /* 037388 7F004998 02A02025 */ move $a0, $s5 @@ -6342,12 +5978,12 @@ type25_rename: /* 0373A8 7F0049B8 0FC23782 */ jal bondinvAddTextOverride /* 0373AC 7F0049BC 02402025 */ move $a0, $s2 /* 0373B0 7F0049C0 10000033 */ b other_obj_expand -/* 0373B4 7F0049C4 00000000 */ nop +/* 0373B4 7F0049C4 00000000 */ nop type23_solo_brief_text: /* 0373B8 7F0049C8 0FC013CE */ jal setup_briefing_text_entry_parent /* 0373BC 7F0049CC 02402025 */ move $a0, $s2 /* 0373C0 7F0049D0 1000002F */ b other_obj_expand -/* 0373C4 7F0049D4 00000000 */ nop +/* 0373C4 7F0049D4 00000000 */ nop type2E_viewport_pos: /* 0373C8 7F0049D8 8E4D0004 */ lw $t5, 4($s2) /* 0373CC 7F0049DC 3C0142C8 */ li $at, 0x42C80000 # 100.000000 @@ -6373,7 +6009,7 @@ type2E_viewport_pos: /* 03741C 7F004A2C 44983000 */ mtc1 $t8, $f6 /* 037420 7F004A30 E6520008 */ swc1 $f18, 8($s2) /* 037424 7F004A34 44819000 */ mtc1 $at, $f18 -/* 037428 7F004A38 00000000 */ nop +/* 037428 7F004A38 00000000 */ nop /* 03742C 7F004A3C 46124283 */ div.s $f10, $f8, $f18 /* 037430 7F004A40 E650000C */ swc1 $f16, 0xc($s2) /* 037434 7F004A44 46803420 */ cvt.s.w $f16, $f6 @@ -6385,17 +6021,17 @@ type17_objective_expand: /* 037448 7F004A58 0FC013D4 */ jal add_ptr_to_objective /* 03744C 7F004A5C 02402025 */ move $a0, $s2 /* 037450 7F004A60 1000000B */ b other_obj_expand -/* 037454 7F004A64 00000000 */ nop +/* 037454 7F004A64 00000000 */ nop type20_subobjective_expand: /* 037458 7F004A68 0FC013E3 */ jal set_parent_cur_obj_enter_room /* 03745C 7F004A6C 02402025 */ move $a0, $s2 /* 037460 7F004A70 10000007 */ b other_obj_expand -/* 037464 7F004A74 00000000 */ nop +/* 037464 7F004A74 00000000 */ nop type21_subobjective_expand: /* 037468 7F004A78 0FC013E9 */ jal set_parent_cur_obj_deposited_in_room /* 03746C 7F004A7C 02402025 */ move $a0, $s2 /* 037470 7F004A80 10000003 */ b other_obj_expand -/* 037474 7F004A84 00000000 */ nop +/* 037474 7F004A84 00000000 */ nop type1E_subobjective_expand: /* 037478 7F004A88 0FC013EF */ jal set_parent_cur_obj_photograph /* 03747C 7F004A8C 02402025 */ move $a0, $s2 @@ -6429,15 +6065,15 @@ other_obj_expand: /* 0374E0 7F004AF0 00290821 */ addu $at, $at, $t1 /* 0374E4 7F004AF4 8C297474 */ lw $t1, %lo(jpt_8004F02C)($at) /* 0374E8 7F004AF8 01200008 */ jr $t1 -/* 0374EC 7F004AFC 00000000 */ nop +/* 0374EC 7F004AFC 00000000 */ nop .L7F004B7C: /* 0374F0 7F004B00 8E590010 */ lw $t9, 0x10($s2) /* 0374F4 7F004B04 1320009C */ beqz $t9, .L7F004DF4 -/* 0374F8 7F004B08 00000000 */ nop +/* 0374F8 7F004B08 00000000 */ nop /* 0374FC 7F004B0C 8E4A0008 */ lw $t2, 8($s2) /* 037500 7F004B10 314B8000 */ andi $t3, $t2, 0x8000 /* 037504 7F004B14 11600098 */ beqz $t3, .L7F004DF4 -/* 037508 7F004B18 00000000 */ nop +/* 037508 7F004B18 00000000 */ nop /* 03750C 7F004B1C 86420006 */ lh $v0, 6($s2) /* 037510 7F004B20 02A02025 */ move $a0, $s5 /* 037514 7F004B24 0FC15C60 */ jal setupCommandGetObject @@ -6446,7 +6082,7 @@ other_obj_expand: /* 037520 7F004B30 00408025 */ move $s0, $v0 /* 037524 7F004B34 8C4D0010 */ lw $t5, 0x10($v0) /* 037528 7F004B38 11A0008F */ beqz $t5, .L7F004DF4 -/* 03752C 7F004B3C 00000000 */ nop +/* 03752C 7F004B3C 00000000 */ nop /* 037530 7F004B40 8E4C0064 */ lw $t4, 0x64($s2) /* 037534 7F004B44 8E440014 */ lw $a0, 0x14($s2) /* 037538 7F004B48 01977825 */ or $t7, $t4, $s7 @@ -6457,7 +6093,7 @@ other_obj_expand: /* 03754C 7F004B5C 0FC0E999 */ jal chrpropReparent /* 037550 7F004B60 8E050010 */ lw $a1, 0x10($s0) /* 037554 7F004B64 10000084 */ b .L7F004DF4 -/* 037558 7F004B68 00000000 */ nop +/* 037558 7F004B68 00000000 */ nop .L7F004BE8: /* 03755C 7F004B6C 8E4E0004 */ lw $t6, 4($s2) /* 037560 7F004B70 0FC15B5A */ jal setupGetPtrToCommandByIndex @@ -6469,17 +6105,17 @@ other_obj_expand: /* 037578 7F004B88 1200007B */ beqz $s0, .L7F004DF4 /* 03757C 7F004B8C 00402825 */ move $a1, $v0 /* 037580 7F004B90 10400079 */ beqz $v0, .L7F004DF4 -/* 037584 7F004B94 00000000 */ nop +/* 037584 7F004B94 00000000 */ nop /* 037588 7F004B98 92080003 */ lbu $t0, 3($s0) /* 03758C 7F004B9C 16C80076 */ bne $s6, $t0, .L7F004DF4 -/* 037590 7F004BA0 00000000 */ nop +/* 037590 7F004BA0 00000000 */ nop /* 037594 7F004BA4 90490003 */ lbu $t1, 3($v0) /* 037598 7F004BA8 16C90073 */ bne $s6, $t1, .L7F004DF4 -/* 03759C 7F004BAC 00000000 */ nop +/* 03759C 7F004BAC 00000000 */ nop /* 0375A0 7F004BB0 0FC14815 */ jal propweaponSetDual /* 0375A4 7F004BB4 02002025 */ move $a0, $s0 /* 0375A8 7F004BB8 1000006F */ b .L7F004DF4 -/* 0375AC 7F004BBC 00000000 */ nop +/* 0375AC 7F004BBC 00000000 */ nop .L7F004C3C: /* 0375B0 7F004BC0 8E420004 */ lw $v0, 4($s2) /* 0375B4 7F004BC4 8E510008 */ lw $s1, 8($s2) @@ -6490,18 +6126,18 @@ other_obj_expand: /* 0375C8 7F004BD8 0FC15B5A */ jal setupGetPtrToCommandByIndex /* 0375CC 7F004BDC 02712021 */ addu $a0, $s3, $s1 /* 0375D0 7F004BE0 12000065 */ beqz $s0, .L7F004DF4 -/* 0375D4 7F004BE4 00000000 */ nop +/* 0375D4 7F004BE4 00000000 */ nop /* 0375D8 7F004BE8 8E030010 */ lw $v1, 0x10($s0) /* 0375DC 7F004BEC 10600062 */ beqz $v1, .L7F004DF4 -/* 0375E0 7F004BF0 00000000 */ nop +/* 0375E0 7F004BF0 00000000 */ nop /* 0375E4 7F004BF4 10400060 */ beqz $v0, .L7F004DF4 -/* 0375E8 7F004BF8 00000000 */ nop +/* 0375E8 7F004BF8 00000000 */ nop /* 0375EC 7F004BFC 90590003 */ lbu $t9, 3($v0) /* 0375F0 7F004C00 1699005D */ bne $s4, $t9, .L7F004DF4 -/* 0375F4 7F004C04 00000000 */ nop +/* 0375F4 7F004C04 00000000 */ nop /* 0375F8 7F004C08 8C4A0010 */ lw $t2, 0x10($v0) /* 0375FC 7F004C0C 1140005A */ beqz $t2, .L7F004DF4 -/* 037600 7F004C10 00000000 */ nop +/* 037600 7F004C10 00000000 */ nop /* 037604 7F004C14 AE430004 */ sw $v1, 4($s2) /* 037608 7F004C18 8C4B0010 */ lw $t3, 0x10($v0) /* 03760C 7F004C1C 02402025 */ move $a0, $s2 @@ -6529,27 +6165,27 @@ other_obj_expand: /* 037660 7F004C70 0FC15C60 */ jal setupCommandGetObject /* 037664 7F004C74 026E2821 */ addu $a1, $s3, $t6 /* 037668 7F004C78 1200003F */ beqz $s0, .L7F004DF4 -/* 03766C 7F004C7C 00000000 */ nop +/* 03766C 7F004C7C 00000000 */ nop /* 037670 7F004C80 8E180010 */ lw $t8, 0x10($s0) /* 037674 7F004C84 1300003C */ beqz $t8, .L7F004DF4 -/* 037678 7F004C88 00000000 */ nop +/* 037678 7F004C88 00000000 */ nop /* 03767C 7F004C8C 1220003A */ beqz $s1, .L7F004DF4 -/* 037680 7F004C90 00000000 */ nop +/* 037680 7F004C90 00000000 */ nop /* 037684 7F004C94 8E280010 */ lw $t0, 0x10($s1) /* 037688 7F004C98 11000037 */ beqz $t0, .L7F004DF4 -/* 03768C 7F004C9C 00000000 */ nop +/* 03768C 7F004C9C 00000000 */ nop /* 037690 7F004CA0 92290003 */ lbu $t1, 3($s1) /* 037694 7F004CA4 17C90034 */ bne $fp, $t1, .L7F004DF4 -/* 037698 7F004CA8 00000000 */ nop +/* 037698 7F004CA8 00000000 */ nop /* 03769C 7F004CAC 10400032 */ beqz $v0, .L7F004DF4 -/* 0376A0 7F004CB0 00000000 */ nop +/* 0376A0 7F004CB0 00000000 */ nop /* 0376A4 7F004CB4 8C590010 */ lw $t9, 0x10($v0) /* 0376A8 7F004CB8 1320002F */ beqz $t9, .L7F004DF4 -/* 0376AC 7F004CBC 00000000 */ nop +/* 0376AC 7F004CBC 00000000 */ nop /* 0376B0 7F004CC0 904A0003 */ lbu $t2, 3($v0) /* 0376B4 7F004CC4 02402025 */ move $a0, $s2 /* 0376B8 7F004CC8 168A002B */ bne $s4, $t2, .L7F004DF4 -/* 0376BC 7F004CCC 00000000 */ nop +/* 0376BC 7F004CCC 00000000 */ nop /* 0376C0 7F004CD0 AE500004 */ sw $s0, 4($s2) /* 0376C4 7F004CD4 AE510008 */ sw $s1, 8($s2) /* 0376C8 7F004CD8 AE42000C */ sw $v0, 0xc($s2) @@ -6574,19 +6210,19 @@ other_obj_expand: /* 037710 7F004D20 0FC15C60 */ jal setupCommandGetObject /* 037714 7F004D24 02712821 */ addu $a1, $s3, $s1 /* 037718 7F004D28 12000013 */ beqz $s0, .L7F004DF4 -/* 03771C 7F004D2C 00000000 */ nop +/* 03771C 7F004D2C 00000000 */ nop /* 037720 7F004D30 8E0E0010 */ lw $t6, 0x10($s0) /* 037724 7F004D34 11C00010 */ beqz $t6, .L7F004DF4 -/* 037728 7F004D38 00000000 */ nop +/* 037728 7F004D38 00000000 */ nop /* 03772C 7F004D3C 1040000E */ beqz $v0, .L7F004DF4 -/* 037730 7F004D40 00000000 */ nop +/* 037730 7F004D40 00000000 */ nop /* 037734 7F004D44 8C580010 */ lw $t8, 0x10($v0) /* 037738 7F004D48 1300000B */ beqz $t8, .L7F004DF4 -/* 03773C 7F004D4C 00000000 */ nop +/* 03773C 7F004D4C 00000000 */ nop /* 037740 7F004D50 92080003 */ lbu $t0, 3($s0) /* 037744 7F004D54 02402025 */ move $a0, $s2 /* 037748 7F004D58 16880007 */ bne $s4, $t0, .L7F004DF4 -/* 03774C 7F004D5C 00000000 */ nop +/* 03774C 7F004D5C 00000000 */ nop /* 037750 7F004D60 AE500004 */ sw $s0, 4($s2) /* 037754 7F004D64 0FC0064A */ jal initSetLevelLoadPropLockDoor /* 037758 7F004D68 AE420008 */ sw $v0, 8($s2) @@ -6604,7 +6240,7 @@ other_obj_expand: /* 037784 7F004D94 5461FF52 */ bnel $v1, $at, .L7F004B5C /* 037788 7F004D98 2469FFFD */ addiu $t1, $v1, -3 /* 03778C 7F004D9C 1000001B */ b .L7F004E88 -/* 037790 7F004DA0 00000000 */ nop +/* 037790 7F004DA0 00000000 */ nop .L7F004E20: /* 037794 7F004DA4 3C018006 */ lui $at, %hi(g_CurrentSetup+0) # $at, 0x8006 /* 037798 7F004DA8 AC204C40 */ sw $zero, %lo(g_CurrentSetup+0)($at) @@ -6634,7 +6270,7 @@ other_obj_expand: /* 0377F8 7F004E08 00002025 */ move $a0, $zero .L7F004E88: /* 0377FC 7F004E0C 0FC00417 */ jal alloc_false_GUARDdata_to_exec_global_action -/* 037800 7F004E10 00000000 */ nop +/* 037800 7F004E10 00000000 */ nop /* 037804 7F004E14 8FBF0044 */ lw $ra, 0x44($sp) /* 037808 7F004E18 D7B40018 */ ldc1 $f20, 0x18($sp) /* 03780C 7F004E1C 8FB00020 */ lw $s0, 0x20($sp) diff --git a/src/game/radar.c b/src/game/radar.c index e0ca9a6..06bd9ad 100644 --- a/src/game/radar.c +++ b/src/game/radar.c @@ -1,933 +1,203 @@ #include #include "math_atan2f.h" +#include "textrelated.h" +#include "front.h" +#include "fr.h" +#include "player.h" +#include "player_2.h" +#include "othermodemicrocode.h" +#include "image_bank.h" -// rodata +/** + * NTSC address 0x7F0C6090. + * PAL address 0x7F0C55A0. +*/ - -#ifdef NONMATCHING Gfx *display_red_blue_on_radar(Gfx *DL) { - s32 playerCount_2; - s32 curplayernum; + s32 padding[4]; + s32 player_count; + s32 cur_playernum; + enum MPSCENARIOS current_scenario; + + s32 start_left; + s32 start_top; + s32 dl_color_1; + s32 i; + PropRecord *other_player_prop; + PropRecord *player_prop; + f32 temp_f20; - f32 temp_f20_2; f32 temp_f22; - f32 temp_f24; + s32 temp_f24; f32 temp_f28; f32 temp_f2; - s16 temp_s0; - s32 temp_s0_2; - s32 temp_s3; - s32 scenario; - s32 temp_s5; - s32 temp_s6; - s32 playerCount; - s32 temp_v0_6; - struct player *temp_a0_2; - //struct player *g_CurrentPlayer; - PropRecord *temp_v0_4; - PropRecord *temp_v1; - void *temp_a0; - void *temp_t3; - void *temp_t7; - void *temp_t9; - void *temp_v0_3; - void *temp_v0_5; - void *temp_v0_7; - s32 phi_s5; - ?32 phi_v0; - void *phi_v0_2; - s32 phi_s3; - f32 phi_f22; - ?32 phi_s1; + s32 dl_color_2; + s32 loop_start_left; + s32 loop_start_top; + f32 temp_f16; - scenario = get_scenario(); - curplayernum = get_cur_playernum(); - playerCount = getPlayerCount(); - playerCount_2 = playerCount; - if (playerCount == 1) +#if defined(VERSION_EU) + #define RADAR_TOP_OFFSET 0x1d + #define RADAR_RECT1_OFFSET 0x13 + #define RADAR_RECT1_D 0x355 + #define RADAR_VERT_SCALE 1.2f +#else + #define RADAR_TOP_OFFSET 0x1a + #define RADAR_RECT1_OFFSET 0x10 + #define RADAR_RECT1_D 0x400 + #define RADAR_VERT_SCALE 1.0f +#endif + + current_scenario = get_scenario(); + cur_playernum = get_cur_playernum(); + player_count = getPlayerCount(); + + if (player_count == 1) { return DL; } - g_CurrentPlayer = g_CurrentPlayer; - if (g_CurrentPlayer->mpmenuon || g_CurrentPlayer->bonddead) + + if ((g_CurrentPlayer->mpmenuon != FALSE) || (g_CurrentPlayer->bonddead != FALSE)) { return DL; } - if (cheatIsActive(CHEAT_NORADAR) != 0) + + if (cheatIsActive(CHEAT_NO_RADAR_MP) != 0) { return DL; } - temp_s0 = viGetViewLeft(); - temp_s5 = (viGetViewWidth() + temp_s0) - 0x29; - temp_s6 = viGetViewTop() + 0x1A; - phi_s5 = temp_s5; - if (playerCount_2 >= 3) + + start_left = (viGetViewLeft() + viGetViewWidth()) - 0x29; + start_top = viGetViewTop() + RADAR_TOP_OFFSET; + + if ((player_count >= 3) && !(cur_playernum & 1)) { - phi_s5 = temp_s5; - if ((curplayernum & 1) == 0) + start_left += 0xF; + } + + texSelect(&DL, mpradarimages, 2, 0, 2); + + DL = microcode_constructor(DL); + + gDPSetCombineLERP(DL++, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, TEXEL0, 0, 0, 0, 0, PRIMITIVE, PRIMITIVE, 0, TEXEL0, 0); + gDPSetPrimColor(DL++, 0, 0, 0x00, 0x00, 0x00, 0xA0); + + gSPTextureRectangle( + DL++, + (start_left - 0x10) << 2, + (start_top - RADAR_RECT1_OFFSET) << 2, + (start_left + 0x10) << 2, + (start_top + RADAR_RECT1_OFFSET) << 2, + G_TX_RENDERTILE, + 0x10, + 0x10, + 0x400, + RADAR_RECT1_D); + + DL = microcode_constructor_related_to_menus(DL, start_left - 2, start_top - 2, start_left + 2, start_top + 2, 0x40); + + if ((current_scenario == SCENARIO_2v2) + || (current_scenario == SCENARIO_3v1) + || (current_scenario == SCENARIO_2v1) + || (current_scenario == SCENARIO_TLD) + || (current_scenario == SCENARIO_MWTGG)) + { + if (g_playerPlayerData[cur_playernum].have_token_or_goldengun == 0) { - // phi_s5 and temp_s5 are the same - phi_s5 = temp_s5 + 0xF; - } - } - likely_generate_DL_for_image_declaration(&DL, mpradarimages, 2, 0, 2); - temp_v0_3 = microcode_constructor(DL); - DL = temp_v0_3 + 8; - temp_v0_3->unk0 = 0xFCFFB3FF; - temp_v0_3->unk4 = 0xFF65FEFF; - temp_t7 = DL; - DL = temp_t7 + 8; - temp_t7->unk4 = 0xA0; - temp_t7->unk0 = 0xFA000000; - temp_a0 = DL; - DL = temp_a0 + 8; - temp_a0->unk4 = (s32) (((((phi_s5 - 0x10) * 4) & 0xFFF) << 0xC) | (((temp_s6 - 0x10) * 4) & 0xFFF)); - temp_a0->unk0 = (s32) (((((phi_s5 + 0x10) * 4) & 0xFFF) << 0xC) | 0xE4000000 | (((temp_s6 + 0x10) * 4) & 0xFFF)); - temp_t3 = DL; - DL = temp_t3 + 8; - temp_t3->unk0 = 0xB4000000; - temp_t3->unk4 = 0x100010; - temp_t9 = DL; - DL = temp_t9 + 8; - temp_t9->unk0 = 0xB3000000; - temp_t9->unk4 = 0x4000400; - DL = microcode_constructor_related_to_menus(DL, phi_s5 - 2, temp_s6 - 2, phi_s5 + 2, temp_s6 + 2, 0x40); - if ((scenario == 5) || (scenario == 6) || (scenario == 7) || (scenario == 2) || (scenario == 3)) - { - if (g_playerPlayerData[curplayernum].have_token_or_goldengun == 0) - { - phi_v0 = 0xFF7777FF; + dl_color_1 = 0xFF7777FF; } else { - phi_v0 = 0x8888FFFF; + dl_color_1 = 0x8888FFFF; } - phi_v0_2 = microcode_constructor_related_to_menus(DL, phi_s5 - 1, temp_s6 - 1, phi_s5 + 1, temp_s6 + 1, phi_v0); + + DL = microcode_constructor_related_to_menus(DL, start_left - 1, start_top - 1, start_left + 1, start_top + 1, dl_color_1); } else { - phi_v0_2 = microcode_constructor_related_to_menus(DL, phi_s5 - 1, temp_s6 - 1, phi_s5 + 1, temp_s6 + 1, -0x60); + DL = microcode_constructor_related_to_menus(DL, start_left - 1, start_top - 1, start_left + 1, start_top + 1, -0x60); } - DL = phi_v0_2; - if (playerCount_2 > 0) + + for (i = 0; i < player_count; i++) { - phi_s3 = 0; - // should be a for loop -loop_22: - if (phi_s3 != curplayernum) + if (i != cur_playernum) { - temp_a0_2 = g_playerPointers[phi_s3]; - if (temp_a0_2->bonddead == 0) + if (g_playerPointers[i]->bonddead == FALSE) { - temp_v0_4 = temp_a0_2->prop; - temp_v1 = g_CurrentPlayer->prop; - temp_f20 = temp_v0_4->position.x - temp_v1->position.x; - temp_f22 = temp_v0_4->position.z - temp_v1->position.z; - temp_f24 = (f32) 0x10; - temp_f28 = ((atan2f(temp_f20, temp_f22, temp_a0_2) * 180.0f) / M_PI_F) + g_CurrentPlayer->vv_theta + 180.0f; - temp_f2 = sqrtf((temp_f20 * temp_f20) + (temp_f22 * temp_f22)) * (16.0f / 4000.0f); - if ((scenario == 5) || (scenario == 6) || (scenario == 7) || (scenario == 2) || (scenario == 3)) + f32 tt1; + other_player_prop = g_playerPointers[i]->prop; + player_prop = g_CurrentPlayer->prop; + + temp_f20 = other_player_prop->pos.f[0] - player_prop->pos.f[0]; + temp_f22 = other_player_prop->pos.f[2] - player_prop->pos.f[2]; + + temp_f28 = ((atan2f(temp_f20, temp_f22) * 180.0f) / M_PI_F) + g_CurrentPlayer->vv_theta + 180.0f; + + temp_f24 = 16; + temp_f16 = 4000; + + tt1 = (temp_f24 / temp_f16); + temp_f2 = sqrtf((temp_f20 * temp_f20) + (temp_f22 * temp_f22)) * tt1; + + if ((current_scenario == SCENARIO_2v2) + || (current_scenario == SCENARIO_3v1) + || (current_scenario == SCENARIO_2v1) + || (current_scenario == SCENARIO_TLD) + || (current_scenario == SCENARIO_MWTGG)) { - temp_v0_5 = (((phi_s3 * 8) - phi_s3) * 0x10) + &g_playerPlayerData; if (temp_f2 < temp_f24) { - if (temp_v0_5->unk69 == 0) + if (g_playerPlayerData[i].have_token_or_goldengun == 0) { - phi_f22 = temp_f2; - phi_s1 = 0xFF0000A0; + dl_color_2 = 0xFF0000A0; } else { - phi_f22 = temp_f2; - phi_s1 = 0x2828FFFF; + dl_color_2 = 0x2828FFFF; } } - else if (temp_v0_5->unk69 == 0) - { - phi_f22 = temp_f24; - phi_s1 = 0xFF000060; - } else { - phi_f22 = temp_f24; - phi_s1 = 0x2828FFB0; + temp_f2 = temp_f24; + if (g_playerPlayerData[i].have_token_or_goldengun == 0) + { + dl_color_2 = 0xFF000060; + } + else + { + dl_color_2 = 0x2828FFB0; + } } } - else if (temp_f2 < temp_f24) - { - phi_f22 = temp_f2; - phi_s1 = 0xFFFF00A0; - } else { - phi_f22 = temp_f24; - phi_s1 = 0xFFFF0060; + dl_color_2 = 0xFFFF0060; + if (temp_f2 < temp_f24) + { + dl_color_2 = 0xFFFF00A0; + } + else + { + temp_f2 = temp_f24; + } } - temp_f20_2 = temp_f28 * 0.017453292f; - temp_s0_2 = (s32) (sinf(temp_f20_2) * phi_f22) + phi_s5; - temp_v0_6 = (s32) (cosf(temp_f20_2) * phi_f22) + temp_s6; - temp_v0_7 = microcode_constructor_related_to_menus(DL, temp_s0_2 - 2, temp_v0_6 - 2, temp_s0_2 + 2, temp_v0_6 + 2, 0x40); - DL = temp_v0_7; - DL = microcode_constructor_related_to_menus(temp_v0_7, temp_s0_2 - 1, temp_v0_6 - 1, temp_s0_2 + 1, temp_v0_6 + 1, phi_s1); + + // 0.017453292f = DegToRad(1) + loop_start_left = (s32) (sinf(temp_f28 * 0.017453292f) * temp_f2) + start_left; + loop_start_top = (s32) (cosf(temp_f28 * 0.017453292f) * temp_f2 * RADAR_VERT_SCALE) + start_top; + + DL = microcode_constructor_related_to_menus(DL, loop_start_left - 2, loop_start_top - 2, loop_start_left + 2, loop_start_top + 2, 0x40); + DL = microcode_constructor_related_to_menus(DL, loop_start_left - 1, loop_start_top - 1, loop_start_left + 1, loop_start_top + 1, dl_color_2); } } - temp_s3 = phi_s3 + 1; - phi_s3 = temp_s3; - if (temp_s3 != playerCount_2) - { - goto loop_22; - } } + return combiner_bayer_lod_perspective(DL); + + #undef RADAR_TOP_OFFSET + #undef RADAR_RECT1_OFFSET + #undef RADAR_RECT1_D + #undef RADAR_VERT_SCALE } -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_8005BD20 -.word 0x40490fdb /*3.1415927*/ -glabel D_8005BD24 -.word 0x3c8efa35 /*0.017453292*/ -.text -glabel display_red_blue_on_radar -/* 0FABC0 7F0C6090 27BDFF78 */ addiu $sp, $sp, -0x88 -/* 0FABC4 7F0C6094 AFBF006C */ sw $ra, 0x6c($sp) -/* 0FABC8 7F0C6098 AFB70068 */ sw $s7, 0x68($sp) -/* 0FABCC 7F0C609C AFB60064 */ sw $s6, 0x64($sp) -/* 0FABD0 7F0C60A0 AFB50060 */ sw $s5, 0x60($sp) -/* 0FABD4 7F0C60A4 AFB4005C */ sw $s4, 0x5c($sp) -/* 0FABD8 7F0C60A8 AFB30058 */ sw $s3, 0x58($sp) -/* 0FABDC 7F0C60AC AFB20054 */ sw $s2, 0x54($sp) -/* 0FABE0 7F0C60B0 AFB10050 */ sw $s1, 0x50($sp) -/* 0FABE4 7F0C60B4 AFB0004C */ sw $s0, 0x4c($sp) -/* 0FABE8 7F0C60B8 F7BE0040 */ sdc1 $f30, 0x40($sp) -/* 0FABEC 7F0C60BC F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 0FABF0 7F0C60C0 F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0FABF4 7F0C60C4 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0FABF8 7F0C60C8 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0FABFC 7F0C60CC F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0FAC00 7F0C60D0 0FC051D6 */ jal get_scenario -/* 0FAC04 7F0C60D4 AFA40088 */ sw $a0, 0x88($sp) -/* 0FAC08 7F0C60D8 0FC26C54 */ jal get_cur_playernum -/* 0FAC0C 7F0C60DC 0040A025 */ move $s4, $v0 -/* 0FAC10 7F0C60E0 0FC26919 */ jal getPlayerCount -/* 0FAC14 7F0C60E4 AFA20070 */ sw $v0, 0x70($sp) -/* 0FAC18 7F0C60E8 24010001 */ li $at, 1 -/* 0FAC1C 7F0C60EC 14410003 */ bne $v0, $at, .L7F0C60FC -/* 0FAC20 7F0C60F0 AFA20074 */ sw $v0, 0x74($sp) -/* 0FAC24 7F0C60F4 10000124 */ b .L7F0C6588 -/* 0FAC28 7F0C60F8 8FA20088 */ lw $v0, 0x88($sp) -.L7F0C60FC: -/* 0FAC2C 7F0C60FC 3C178008 */ lui $s7, %hi(g_CurrentPlayer) -/* 0FAC30 7F0C6100 26F7A0B0 */ addiu $s7, %lo(g_CurrentPlayer) # addiu $s7, $s7, -0x5f50 -/* 0FAC34 7F0C6104 8EE20000 */ lw $v0, ($s7) -/* 0FAC38 7F0C6108 8C4E29C4 */ lw $t6, 0x29c4($v0) -/* 0FAC3C 7F0C610C 15C00004 */ bnez $t6, .L7F0C6120 -/* 0FAC40 7F0C6110 00000000 */ nop -/* 0FAC44 7F0C6114 8C4F00D8 */ lw $t7, 0xd8($v0) -/* 0FAC48 7F0C6118 11E00003 */ beqz $t7, .L7F0C6128 -/* 0FAC4C 7F0C611C 00000000 */ nop -.L7F0C6120: -/* 0FAC50 7F0C6120 10000119 */ b .L7F0C6588 -/* 0FAC54 7F0C6124 8FA20088 */ lw $v0, 0x88($sp) -.L7F0C6128: -/* 0FAC58 7F0C6128 0FC249EF */ jal cheatIsActive -/* 0FAC5C 7F0C612C 24040017 */ li $a0, 23 -/* 0FAC60 7F0C6130 10400003 */ beqz $v0, .L7F0C6140 -/* 0FAC64 7F0C6134 00000000 */ nop -/* 0FAC68 7F0C6138 10000113 */ b .L7F0C6588 -/* 0FAC6C 7F0C613C 8FA20088 */ lw $v0, 0x88($sp) -.L7F0C6140: -/* 0FAC70 7F0C6140 0C001145 */ jal viGetViewLeft -/* 0FAC74 7F0C6144 00000000 */ nop -/* 0FAC78 7F0C6148 00028400 */ sll $s0, $v0, 0x10 -/* 0FAC7C 7F0C614C 0010C403 */ sra $t8, $s0, 0x10 -/* 0FAC80 7F0C6150 0C001127 */ jal viGetViewWidth -/* 0FAC84 7F0C6154 03008025 */ move $s0, $t8 -/* 0FAC88 7F0C6158 0050A821 */ addu $s5, $v0, $s0 -/* 0FAC8C 7F0C615C 0C001149 */ jal viGetViewTop -/* 0FAC90 7F0C6160 26B5FFD7 */ addiu $s5, $s5, -0x29 -/* 0FAC94 7F0C6164 8FB90074 */ lw $t9, 0x74($sp) -/* 0FAC98 7F0C6168 2456001A */ addiu $s6, $v0, 0x1a -/* 0FAC9C 7F0C616C 27A40088 */ addiu $a0, $sp, 0x88 -/* 0FACA0 7F0C6170 2B210003 */ slti $at, $t9, 3 -/* 0FACA4 7F0C6174 14200006 */ bnez $at, .L7F0C6190 -/* 0FACA8 7F0C6178 3C058009 */ lui $a1, %hi(mpradarimages) -/* 0FACAC 7F0C617C 8FA90070 */ lw $t1, 0x70($sp) -/* 0FACB0 7F0C6180 312A0001 */ andi $t2, $t1, 1 -/* 0FACB4 7F0C6184 55400003 */ bnezl $t2, .L7F0C6194 -/* 0FACB8 7F0C6188 240B0002 */ li $t3, 2 -/* 0FACBC 7F0C618C 26B5000F */ addiu $s5, $s5, 0xf -.L7F0C6190: -/* 0FACC0 7F0C6190 240B0002 */ li $t3, 2 -.L7F0C6194: -/* 0FACC4 7F0C6194 AFAB0010 */ sw $t3, 0x10($sp) -/* 0FACC8 7F0C6198 8CA5D12C */ lw $a1, %lo(mpradarimages)($a1) -/* 0FACCC 7F0C619C 24060002 */ li $a2, 2 -/* 0FACD0 7F0C61A0 0FC1DB5A */ jal likely_generate_DL_for_image_declaration -/* 0FACD4 7F0C61A4 00003825 */ move $a3, $zero -/* 0FACD8 7F0C61A8 0FC2B366 */ jal microcode_constructor -/* 0FACDC 7F0C61AC 8FA40088 */ lw $a0, 0x88($sp) -/* 0FACE0 7F0C61B0 244C0008 */ addiu $t4, $v0, 8 -/* 0FACE4 7F0C61B4 AFAC0088 */ sw $t4, 0x88($sp) -/* 0FACE8 7F0C61B8 3C0DFCFF */ lui $t5, (0xFCFFB3FF >> 16) # lui $t5, 0xfcff -/* 0FACEC 7F0C61BC 3C0EFF65 */ lui $t6, (0xFF65FEFF >> 16) # lui $t6, 0xff65 -/* 0FACF0 7F0C61C0 35CEFEFF */ ori $t6, (0xFF65FEFF & 0xFFFF) # ori $t6, $t6, 0xfeff -/* 0FACF4 7F0C61C4 35ADB3FF */ ori $t5, (0xFCFFB3FF & 0xFFFF) # ori $t5, $t5, 0xb3ff -/* 0FACF8 7F0C61C8 AC4D0000 */ sw $t5, ($v0) -/* 0FACFC 7F0C61CC AC4E0004 */ sw $t6, 4($v0) -/* 0FAD00 7F0C61D0 8FAF0088 */ lw $t7, 0x88($sp) -/* 0FAD04 7F0C61D4 3C19FA00 */ lui $t9, 0xfa00 -/* 0FAD08 7F0C61D8 240900A0 */ li $t1, 160 -/* 0FAD0C 7F0C61DC 25F80008 */ addiu $t8, $t7, 8 -/* 0FAD10 7F0C61E0 AFB80088 */ sw $t8, 0x88($sp) -/* 0FAD14 7F0C61E4 26AC0010 */ addiu $t4, $s5, 0x10 -/* 0FAD18 7F0C61E8 ADE90004 */ sw $t1, 4($t7) -/* 0FAD1C 7F0C61EC ADF90000 */ sw $t9, ($t7) -/* 0FAD20 7F0C61F0 8FA40088 */ lw $a0, 0x88($sp) -/* 0FAD24 7F0C61F4 000C6880 */ sll $t5, $t4, 2 -/* 0FAD28 7F0C61F8 31AE0FFF */ andi $t6, $t5, 0xfff -/* 0FAD2C 7F0C61FC 26D90010 */ addiu $t9, $s6, 0x10 -/* 0FAD30 7F0C6200 00194880 */ sll $t1, $t9, 2 -/* 0FAD34 7F0C6204 000E7B00 */ sll $t7, $t6, 0xc -/* 0FAD38 7F0C6208 3C01E400 */ lui $at, 0xe400 -/* 0FAD3C 7F0C620C 01E1C025 */ or $t8, $t7, $at -/* 0FAD40 7F0C6210 312A0FFF */ andi $t2, $t1, 0xfff -/* 0FAD44 7F0C6214 26ACFFF0 */ addiu $t4, $s5, -0x10 -/* 0FAD48 7F0C6218 248B0008 */ addiu $t3, $a0, 8 -/* 0FAD4C 7F0C621C AFAB0088 */ sw $t3, 0x88($sp) -/* 0FAD50 7F0C6220 000C6880 */ sll $t5, $t4, 2 -/* 0FAD54 7F0C6224 26D9FFF0 */ addiu $t9, $s6, -0x10 -/* 0FAD58 7F0C6228 00194880 */ sll $t1, $t9, 2 -/* 0FAD5C 7F0C622C 31AE0FFF */ andi $t6, $t5, 0xfff -/* 0FAD60 7F0C6230 030A5825 */ or $t3, $t8, $t2 -/* 0FAD64 7F0C6234 31380FFF */ andi $t8, $t1, 0xfff -/* 0FAD68 7F0C6238 000E7B00 */ sll $t7, $t6, 0xc -/* 0FAD6C 7F0C623C 01F85025 */ or $t2, $t7, $t8 -/* 0FAD70 7F0C6240 AC8A0004 */ sw $t2, 4($a0) -/* 0FAD74 7F0C6244 AC8B0000 */ sw $t3, ($a0) -/* 0FAD78 7F0C6248 8FAB0088 */ lw $t3, 0x88($sp) -/* 0FAD7C 7F0C624C 3C0E0010 */ lui $t6, (0x00100010 >> 16) # lui $t6, 0x10 -/* 0FAD80 7F0C6250 35CE0010 */ ori $t6, (0x00100010 & 0xFFFF) # ori $t6, $t6, 0x10 -/* 0FAD84 7F0C6254 256C0008 */ addiu $t4, $t3, 8 -/* 0FAD88 7F0C6258 AFAC0088 */ sw $t4, 0x88($sp) -/* 0FAD8C 7F0C625C 3C0DB400 */ lui $t5, 0xb400 -/* 0FAD90 7F0C6260 AD6D0000 */ sw $t5, ($t3) -/* 0FAD94 7F0C6264 AD6E0004 */ sw $t6, 4($t3) -/* 0FAD98 7F0C6268 8FB90088 */ lw $t9, 0x88($sp) -/* 0FAD9C 7F0C626C 3C180400 */ lui $t8, (0x04000400 >> 16) # lui $t8, 0x400 -/* 0FADA0 7F0C6270 37180400 */ ori $t8, (0x04000400 & 0xFFFF) # ori $t8, $t8, 0x400 -/* 0FADA4 7F0C6274 27290008 */ addiu $t1, $t9, 8 -/* 0FADA8 7F0C6278 AFA90088 */ sw $t1, 0x88($sp) -/* 0FADAC 7F0C627C 3C0FB300 */ lui $t7, 0xb300 -/* 0FADB0 7F0C6280 AF2F0000 */ sw $t7, ($t9) -/* 0FADB4 7F0C6284 AF380004 */ sw $t8, 4($t9) -/* 0FADB8 7F0C6288 240B0040 */ li $t3, 64 -/* 0FADBC 7F0C628C 26CA0002 */ addiu $t2, $s6, 2 -/* 0FADC0 7F0C6290 AFAA0010 */ sw $t2, 0x10($sp) -/* 0FADC4 7F0C6294 AFAB0014 */ sw $t3, 0x14($sp) -/* 0FADC8 7F0C6298 8FA40088 */ lw $a0, 0x88($sp) -/* 0FADCC 7F0C629C 26A5FFFE */ addiu $a1, $s5, -2 -/* 0FADD0 7F0C62A0 26C6FFFE */ addiu $a2, $s6, -2 -/* 0FADD4 7F0C62A4 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0FADD8 7F0C62A8 26A70002 */ addiu $a3, $s5, 2 -/* 0FADDC 7F0C62AC 24010005 */ li $at, 5 -/* 0FADE0 7F0C62B0 1281000A */ beq $s4, $at, .L7F0C62DC -/* 0FADE4 7F0C62B4 AFA20088 */ sw $v0, 0x88($sp) -/* 0FADE8 7F0C62B8 24010006 */ li $at, 6 -/* 0FADEC 7F0C62BC 12810007 */ beq $s4, $at, .L7F0C62DC -/* 0FADF0 7F0C62C0 24010007 */ li $at, 7 -/* 0FADF4 7F0C62C4 12810005 */ beq $s4, $at, .L7F0C62DC -/* 0FADF8 7F0C62C8 24010002 */ li $at, 2 -/* 0FADFC 7F0C62CC 12810003 */ beq $s4, $at, .L7F0C62DC -/* 0FAE00 7F0C62D0 24010003 */ li $at, 3 -/* 0FAE04 7F0C62D4 16810018 */ bne $s4, $at, .L7F0C6338 -/* 0FAE08 7F0C62D8 8FA40088 */ lw $a0, 0x88($sp) -.L7F0C62DC: -/* 0FAE0C 7F0C62DC 8FAC0070 */ lw $t4, 0x70($sp) -/* 0FAE10 7F0C62E0 3C0E8008 */ lui $t6, %hi(g_playerPlayerData+0x69) -/* 0FAE14 7F0C62E4 8FA40088 */ lw $a0, 0x88($sp) -/* 0FAE18 7F0C62E8 000C68C0 */ sll $t5, $t4, 3 -/* 0FAE1C 7F0C62EC 01AC6823 */ subu $t5, $t5, $t4 -/* 0FAE20 7F0C62F0 000D6900 */ sll $t5, $t5, 4 -/* 0FAE24 7F0C62F4 01CD7021 */ addu $t6, $t6, $t5 -/* 0FAE28 7F0C62F8 91CE9F59 */ lbu $t6, %lo(g_playerPlayerData+0x69)($t6) -/* 0FAE2C 7F0C62FC 26A5FFFF */ addiu $a1, $s5, -1 -/* 0FAE30 7F0C6300 26C6FFFF */ addiu $a2, $s6, -1 -/* 0FAE34 7F0C6304 15C00004 */ bnez $t6, .L7F0C6318 -/* 0FAE38 7F0C6308 26A70001 */ addiu $a3, $s5, 1 -/* 0FAE3C 7F0C630C 3C02FF77 */ lui $v0, (0xFF7777FF >> 16) # lui $v0, 0xff77 -/* 0FAE40 7F0C6310 10000003 */ b .L7F0C6320 -/* 0FAE44 7F0C6314 344277FF */ ori $v0, (0xFF7777FF & 0xFFFF) # ori $v0, $v0, 0x77ff -.L7F0C6318: -/* 0FAE48 7F0C6318 3C028888 */ lui $v0, (0x8888FFFF >> 16) # lui $v0, 0x8888 -/* 0FAE4C 7F0C631C 3442FFFF */ ori $v0, (0x8888FFFF & 0xFFFF) # ori $v0, $v0, 0xffff -.L7F0C6320: -/* 0FAE50 7F0C6320 26D90001 */ addiu $t9, $s6, 1 -/* 0FAE54 7F0C6324 AFB90010 */ sw $t9, 0x10($sp) -/* 0FAE58 7F0C6328 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0FAE5C 7F0C632C AFA20014 */ sw $v0, 0x14($sp) -/* 0FAE60 7F0C6330 1000000A */ b .L7F0C635C -/* 0FAE64 7F0C6334 AFA20088 */ sw $v0, 0x88($sp) -.L7F0C6338: -/* 0FAE68 7F0C6338 26C90001 */ addiu $t1, $s6, 1 -/* 0FAE6C 7F0C633C 240FFFA0 */ li $t7, -96 -/* 0FAE70 7F0C6340 AFAF0014 */ sw $t7, 0x14($sp) -/* 0FAE74 7F0C6344 AFA90010 */ sw $t1, 0x10($sp) -/* 0FAE78 7F0C6348 26A5FFFF */ addiu $a1, $s5, -1 -/* 0FAE7C 7F0C634C 26C6FFFF */ addiu $a2, $s6, -1 -/* 0FAE80 7F0C6350 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0FAE84 7F0C6354 26A70001 */ addiu $a3, $s5, 1 -/* 0FAE88 7F0C6358 AFA20088 */ sw $v0, 0x88($sp) -.L7F0C635C: -/* 0FAE8C 7F0C635C 8FB80074 */ lw $t8, 0x74($sp) -/* 0FAE90 7F0C6360 00009825 */ move $s3, $zero -/* 0FAE94 7F0C6364 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0FAE98 7F0C6368 1B000085 */ blez $t8, .L7F0C6580 -/* 0FAE9C 7F0C636C 00000000 */ nop -/* 0FAEA0 7F0C6370 4481F000 */ mtc1 $at, $f30 -/* 0FAEA4 7F0C6374 00000000 */ nop -/* 0FAEA8 7F0C6378 8FAA0070 */ lw $t2, 0x70($sp) -.L7F0C637C: -/* 0FAEAC 7F0C637C 00135880 */ sll $t3, $s3, 2 -/* 0FAEB0 7F0C6380 3C048008 */ lui $a0, %hi(g_playerPointers) -/* 0FAEB4 7F0C6384 126A007A */ beq $s3, $t2, .L7F0C6570 -/* 0FAEB8 7F0C6388 008B2021 */ addu $a0, $a0, $t3 -/* 0FAEBC 7F0C638C 8C849EE0 */ lw $a0, %lo(g_playerPointers)($a0) -/* 0FAEC0 7F0C6390 8C8C00D8 */ lw $t4, 0xd8($a0) -/* 0FAEC4 7F0C6394 55800077 */ bnezl $t4, .L7F0C6574 -/* 0FAEC8 7F0C6398 8FB80074 */ lw $t8, 0x74($sp) -/* 0FAECC 7F0C639C 8EED0000 */ lw $t5, ($s7) -/* 0FAED0 7F0C63A0 8C8200A8 */ lw $v0, 0xa8($a0) -/* 0FAED4 7F0C63A4 3C014180 */ li $at, 0x41800000 # 16.000000 -/* 0FAED8 7F0C63A8 8DA300A8 */ lw $v1, 0xa8($t5) -/* 0FAEDC 7F0C63AC C45C0008 */ lwc1 $f28, 8($v0) -/* 0FAEE0 7F0C63B0 C4520010 */ lwc1 $f18, 0x10($v0) -/* 0FAEE4 7F0C63B4 C4700008 */ lwc1 $f16, 8($v1) -/* 0FAEE8 7F0C63B8 C46A0010 */ lwc1 $f10, 0x10($v1) -/* 0FAEEC 7F0C63BC 44814000 */ mtc1 $at, $f8 -/* 0FAEF0 7F0C63C0 4610E501 */ sub.s $f20, $f28, $f16 -/* 0FAEF4 7F0C63C4 3C01457A */ li $at, 0x457A0000 # 4000.000000 -/* 0FAEF8 7F0C63C8 44818000 */ mtc1 $at, $f16 -/* 0FAEFC 7F0C63CC 460A9581 */ sub.s $f22, $f18, $f10 -/* 0FAF00 7F0C63D0 240E0010 */ li $t6, 16 -/* 0FAF04 7F0C63D4 448E5000 */ mtc1 $t6, $f10 -/* 0FAF08 7F0C63D8 46104683 */ div.s $f26, $f8, $f16 -/* 0FAF0C 7F0C63DC 4600A306 */ mov.s $f12, $f20 -/* 0FAF10 7F0C63E0 4600B386 */ mov.s $f14, $f22 -/* 0FAF14 7F0C63E4 0FC16A8C */ jal atan2f -/* 0FAF18 7F0C63E8 46805620 */ cvt.s.w $f24, $f10 -/* 0FAF1C 7F0C63EC 461E0182 */ mul.s $f6, $f0, $f30 -/* 0FAF20 7F0C63F0 3C018006 */ lui $at, %hi(D_8005BD20) -/* 0FAF24 7F0C63F4 C428BD20 */ lwc1 $f8, %lo(D_8005BD20)($at) -/* 0FAF28 7F0C63F8 4614A102 */ mul.s $f4, $f20, $f20 -/* 0FAF2C 7F0C63FC 8EF90000 */ lw $t9, ($s7) -/* 0FAF30 7F0C6400 C7300148 */ lwc1 $f16, 0x148($t9) -/* 0FAF34 7F0C6404 46083283 */ div.s $f10, $f6, $f8 -/* 0FAF38 7F0C6408 4616B182 */ mul.s $f6, $f22, $f22 -/* 0FAF3C 7F0C640C 46062300 */ add.s $f12, $f4, $f6 -/* 0FAF40 7F0C6410 46105480 */ add.s $f18, $f10, $f16 -/* 0FAF44 7F0C6414 0C007DF8 */ jal sqrtf -/* 0FAF48 7F0C6418 461E9700 */ add.s $f28, $f18, $f30 -/* 0FAF4C 7F0C641C 461A0082 */ mul.s $f2, $f0, $f26 -/* 0FAF50 7F0C6420 24010005 */ li $at, 5 -/* 0FAF54 7F0C6424 001348C0 */ sll $t1, $s3, 3 -/* 0FAF58 7F0C6428 01334823 */ subu $t1, $t1, $s3 -/* 0FAF5C 7F0C642C 1281000A */ beq $s4, $at, .L7F0C6458 -/* 0FAF60 7F0C6430 46001586 */ mov.s $f22, $f2 -/* 0FAF64 7F0C6434 24010006 */ li $at, 6 -/* 0FAF68 7F0C6438 12810007 */ beq $s4, $at, .L7F0C6458 -/* 0FAF6C 7F0C643C 24010007 */ li $at, 7 -/* 0FAF70 7F0C6440 12810005 */ beq $s4, $at, .L7F0C6458 -/* 0FAF74 7F0C6444 24010002 */ li $at, 2 -/* 0FAF78 7F0C6448 12810003 */ beq $s4, $at, .L7F0C6458 -/* 0FAF7C 7F0C644C 24010003 */ li $at, 3 -/* 0FAF80 7F0C6450 5681001B */ bnel $s4, $at, .L7F0C64C0 -/* 0FAF84 7F0C6454 4618103C */ c.lt.s $f2, $f24 -.L7F0C6458: -/* 0FAF88 7F0C6458 4618103C */ c.lt.s $f2, $f24 -/* 0FAF8C 7F0C645C 3C0F8008 */ lui $t7, %hi(g_playerPlayerData) -/* 0FAF90 7F0C6460 25EF9EF0 */ addiu $t7, %lo(g_playerPlayerData) # addiu $t7, $t7, -0x6110 -/* 0FAF94 7F0C6464 00094900 */ sll $t1, $t1, 4 -/* 0FAF98 7F0C6468 4500000A */ bc1f .L7F0C6494 -/* 0FAF9C 7F0C646C 012F1021 */ addu $v0, $t1, $t7 -/* 0FAFA0 7F0C6470 90580069 */ lbu $t8, 0x69($v0) -/* 0FAFA4 7F0C6474 3C112828 */ lui $s1, 0x2828 -/* 0FAFA8 7F0C6478 17000004 */ bnez $t8, .L7F0C648C -/* 0FAFAC 7F0C647C 00000000 */ nop -/* 0FAFB0 7F0C6480 3C11FF00 */ lui $s1, (0xFF00FFFF >> 16) # lui $s1, 0xff00 -/* 0FAFB4 7F0C6484 10000016 */ b .L7F0C64E0 -/* 0FAFB8 7F0C6488 363100A0 */ ori $s1, (0xFF0000A0 & 0xFFFF) # ori $s1, $s1, 0xa0 -.L7F0C648C: -/* 0FAFBC 7F0C648C 10000014 */ b .L7F0C64E0 -/* 0FAFC0 7F0C6490 3631FFFF */ ori $s1, (0xFF00FFFF & 0xFFFF) # ori $s1, $s1, 0xffff -.L7F0C6494: -/* 0FAFC4 7F0C6494 904A0069 */ lbu $t2, 0x69($v0) -/* 0FAFC8 7F0C6498 4600C586 */ mov.s $f22, $f24 -/* 0FAFCC 7F0C649C 3C112828 */ lui $s1, 0x2828 -/* 0FAFD0 7F0C64A0 15400004 */ bnez $t2, .L7F0C64B4 -/* 0FAFD4 7F0C64A4 00000000 */ nop -/* 0FAFD8 7F0C64A8 3C11FF00 */ lui $s1, (0xFF00FFB0 >> 16) # lui $s1, 0xff00 -/* 0FAFDC 7F0C64AC 1000000C */ b .L7F0C64E0 -/* 0FAFE0 7F0C64B0 36310060 */ ori $s1, (0xFF000060 & 0xFFFF) # ori $s1, $s1, 0x60 -.L7F0C64B4: -/* 0FAFE4 7F0C64B4 1000000A */ b .L7F0C64E0 -/* 0FAFE8 7F0C64B8 3631FFB0 */ ori $s1, (0xFF00FFB0 & 0xFFFF) # ori $s1, $s1, 0xffb0 -/* 0FAFEC 7F0C64BC 4618103C */ c.lt.s $f2, $f24 -.L7F0C64C0: -/* 0FAFF0 7F0C64C0 3C11FFFF */ lui $s1, (0xFFFF0060 >> 16) # lui $s1, 0xffff -/* 0FAFF4 7F0C64C4 36310060 */ ori $s1, (0xFFFF0060 & 0xFFFF) # ori $s1, $s1, 0x60 -/* 0FAFF8 7F0C64C8 45020005 */ bc1fl .L7F0C64E0 -/* 0FAFFC 7F0C64CC 4600C586 */ mov.s $f22, $f24 -/* 0FB000 7F0C64D0 3C11FFFF */ lui $s1, (0xFFFF00A0 >> 16) # lui $s1, 0xffff -/* 0FB004 7F0C64D4 10000002 */ b .L7F0C64E0 -/* 0FB008 7F0C64D8 363100A0 */ ori $s1, (0xFFFF00A0 & 0xFFFF) # ori $s1, $s1, 0xa0 -/* 0FB00C 7F0C64DC 4600C586 */ mov.s $f22, $f24 -.L7F0C64E0: -/* 0FB010 7F0C64E0 3C018006 */ lui $at, %hi(D_8005BD24) -/* 0FB014 7F0C64E4 C428BD24 */ lwc1 $f8, %lo(D_8005BD24)($at) -/* 0FB018 7F0C64E8 4608E502 */ mul.s $f20, $f28, $f8 -/* 0FB01C 7F0C64EC 0FC15FAB */ jal sinf -/* 0FB020 7F0C64F0 4600A306 */ mov.s $f12, $f20 -/* 0FB024 7F0C64F4 46160282 */ mul.s $f10, $f0, $f22 -/* 0FB028 7F0C64F8 4600A306 */ mov.s $f12, $f20 -/* 0FB02C 7F0C64FC 4600540D */ trunc.w.s $f16, $f10 -/* 0FB030 7F0C6500 440C8000 */ mfc1 $t4, $f16 -/* 0FB034 7F0C6504 0FC15FA8 */ jal cosf -/* 0FB038 7F0C6508 01958021 */ addu $s0, $t4, $s5 -/* 0FB03C 7F0C650C 46160482 */ mul.s $f18, $f0, $f22 -/* 0FB040 7F0C6510 24090040 */ li $t1, 64 -/* 0FB044 7F0C6514 AFA90014 */ sw $t1, 0x14($sp) -/* 0FB048 7F0C6518 8FA40088 */ lw $a0, 0x88($sp) -/* 0FB04C 7F0C651C 2605FFFE */ addiu $a1, $s0, -2 -/* 0FB050 7F0C6520 26070002 */ addiu $a3, $s0, 2 -/* 0FB054 7F0C6524 4600910D */ trunc.w.s $f4, $f18 -/* 0FB058 7F0C6528 440E2000 */ mfc1 $t6, $f4 -/* 0FB05C 7F0C652C 00000000 */ nop -/* 0FB060 7F0C6530 01D61021 */ addu $v0, $t6, $s6 -/* 0FB064 7F0C6534 24590002 */ addiu $t9, $v0, 2 -/* 0FB068 7F0C6538 00409025 */ move $s2, $v0 -/* 0FB06C 7F0C653C AFB90010 */ sw $t9, 0x10($sp) -/* 0FB070 7F0C6540 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0FB074 7F0C6544 2446FFFE */ addiu $a2, $v0, -2 -/* 0FB078 7F0C6548 264F0001 */ addiu $t7, $s2, 1 -/* 0FB07C 7F0C654C AFA20088 */ sw $v0, 0x88($sp) -/* 0FB080 7F0C6550 AFAF0010 */ sw $t7, 0x10($sp) -/* 0FB084 7F0C6554 00402025 */ move $a0, $v0 -/* 0FB088 7F0C6558 2605FFFF */ addiu $a1, $s0, -1 -/* 0FB08C 7F0C655C 2646FFFF */ addiu $a2, $s2, -1 -/* 0FB090 7F0C6560 26070001 */ addiu $a3, $s0, 1 -/* 0FB094 7F0C6564 0FC2B405 */ jal microcode_constructor_related_to_menus -/* 0FB098 7F0C6568 AFB10014 */ sw $s1, 0x14($sp) -/* 0FB09C 7F0C656C AFA20088 */ sw $v0, 0x88($sp) -.L7F0C6570: -/* 0FB0A0 7F0C6570 8FB80074 */ lw $t8, 0x74($sp) -.L7F0C6574: -/* 0FB0A4 7F0C6574 26730001 */ addiu $s3, $s3, 1 -/* 0FB0A8 7F0C6578 5678FF80 */ bnel $s3, $t8, .L7F0C637C -/* 0FB0AC 7F0C657C 8FAA0070 */ lw $t2, 0x70($sp) -.L7F0C6580: -/* 0FB0B0 7F0C6580 0FC2B3BC */ jal combiner_bayer_lod_perspective -/* 0FB0B4 7F0C6584 8FA40088 */ lw $a0, 0x88($sp) -.L7F0C6588: -/* 0FB0B8 7F0C6588 8FBF006C */ lw $ra, 0x6c($sp) -/* 0FB0BC 7F0C658C D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0FB0C0 7F0C6590 D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0FB0C4 7F0C6594 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0FB0C8 7F0C6598 D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0FB0CC 7F0C659C D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 0FB0D0 7F0C65A0 D7BE0040 */ ldc1 $f30, 0x40($sp) -/* 0FB0D4 7F0C65A4 8FB0004C */ lw $s0, 0x4c($sp) -/* 0FB0D8 7F0C65A8 8FB10050 */ lw $s1, 0x50($sp) -/* 0FB0DC 7F0C65AC 8FB20054 */ lw $s2, 0x54($sp) -/* 0FB0E0 7F0C65B0 8FB30058 */ lw $s3, 0x58($sp) -/* 0FB0E4 7F0C65B4 8FB4005C */ lw $s4, 0x5c($sp) -/* 0FB0E8 7F0C65B8 8FB50060 */ lw $s5, 0x60($sp) -/* 0FB0EC 7F0C65BC 8FB60064 */ lw $s6, 0x64($sp) -/* 0FB0F0 7F0C65C0 8FB70068 */ lw $s7, 0x68($sp) -/* 0FB0F4 7F0C65C4 03E00008 */ jr $ra -/* 0FB0F8 7F0C65C8 27BD0088 */ addiu $sp, $sp, 0x88 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel D_800508E0 -.word 0x40490fdb /*3.1415927*/ -glabel D_800508E4 -.word 0x3c8efa35 /*0.017453292*/ -glabel D_800508E8 -.word 0x3f99999a - -.text -glabel display_red_blue_on_radar -/* 0F7F90 7F0C55A0 27BDFF78 */ addiu $sp, $sp, -0x88 -/* 0F7F94 7F0C55A4 AFBF006C */ sw $ra, 0x6c($sp) -/* 0F7F98 7F0C55A8 AFB70068 */ sw $s7, 0x68($sp) -/* 0F7F9C 7F0C55AC AFB60064 */ sw $s6, 0x64($sp) -/* 0F7FA0 7F0C55B0 AFB50060 */ sw $s5, 0x60($sp) -/* 0F7FA4 7F0C55B4 AFB4005C */ sw $s4, 0x5c($sp) -/* 0F7FA8 7F0C55B8 AFB30058 */ sw $s3, 0x58($sp) -/* 0F7FAC 7F0C55BC AFB20054 */ sw $s2, 0x54($sp) -/* 0F7FB0 7F0C55C0 AFB10050 */ sw $s1, 0x50($sp) -/* 0F7FB4 7F0C55C4 AFB0004C */ sw $s0, 0x4c($sp) -/* 0F7FB8 7F0C55C8 F7BE0040 */ sdc1 $f30, 0x40($sp) -/* 0F7FBC 7F0C55CC F7BC0038 */ sdc1 $f28, 0x38($sp) -/* 0F7FC0 7F0C55D0 F7BA0030 */ sdc1 $f26, 0x30($sp) -/* 0F7FC4 7F0C55D4 F7B80028 */ sdc1 $f24, 0x28($sp) -/* 0F7FC8 7F0C55D8 F7B60020 */ sdc1 $f22, 0x20($sp) -/* 0F7FCC 7F0C55DC F7B40018 */ sdc1 $f20, 0x18($sp) -/* 0F7FD0 7F0C55E0 0FC051B2 */ jal get_scenario -/* 0F7FD4 7F0C55E4 AFA40088 */ sw $a0, 0x88($sp) -/* 0F7FD8 7F0C55E8 0FC269A4 */ jal get_cur_playernum -/* 0F7FDC 7F0C55EC 0040A025 */ move $s4, $v0 -/* 0F7FE0 7F0C55F0 0FC26669 */ jal getPlayerCount -/* 0F7FE4 7F0C55F4 AFA20070 */ sw $v0, 0x70($sp) -/* 0F7FE8 7F0C55F8 24010001 */ li $at, 1 -/* 0F7FEC 7F0C55FC 14410003 */ bne $v0, $at, .L7F0C560C -/* 0F7FF0 7F0C5600 AFA20074 */ sw $v0, 0x74($sp) -/* 0F7FF4 7F0C5604 10000127 */ b .L7F0C5AA4 -/* 0F7FF8 7F0C5608 8FA20088 */ lw $v0, 0x88($sp) -.L7F0C560C: -/* 0F7FFC 7F0C560C 3C178007 */ lui $s7, %hi(g_CurrentPlayer) # $s7, 0x8007 -/* 0F8000 7F0C5610 26F78BC0 */ addiu $s7, %lo(g_CurrentPlayer) # addiu $s7, $s7, -0x7440 -/* 0F8004 7F0C5614 8EE20000 */ lw $v0, ($s7) -/* 0F8008 7F0C5618 8C4E29BC */ lw $t6, 0x29bc($v0) -/* 0F800C 7F0C561C 15C00004 */ bnez $t6, .L7F0C5630 -/* 0F8010 7F0C5620 00000000 */ nop -/* 0F8014 7F0C5624 8C4F00D8 */ lw $t7, 0xd8($v0) -/* 0F8018 7F0C5628 11E00003 */ beqz $t7, .L7F0C5638 -/* 0F801C 7F0C562C 00000000 */ nop -.L7F0C5630: -/* 0F8020 7F0C5630 1000011C */ b .L7F0C5AA4 -/* 0F8024 7F0C5634 8FA20088 */ lw $v0, 0x88($sp) -.L7F0C5638: -/* 0F8028 7F0C5638 0FC24737 */ jal cheatIsActive -/* 0F802C 7F0C563C 24040017 */ li $a0, 23 -/* 0F8030 7F0C5640 10400003 */ beqz $v0, .L7F0C5650 -/* 0F8034 7F0C5644 00000000 */ nop -/* 0F8038 7F0C5648 10000116 */ b .L7F0C5AA4 -/* 0F803C 7F0C564C 8FA20088 */ lw $v0, 0x88($sp) -.L7F0C5650: -/* 0F8040 7F0C5650 0C000FD9 */ jal viGetViewLeft -/* 0F8044 7F0C5654 00000000 */ nop -/* 0F8048 7F0C5658 00028400 */ sll $s0, $v0, 0x10 -/* 0F804C 7F0C565C 0010C403 */ sra $t8, $s0, 0x10 -/* 0F8050 7F0C5660 0C000FBB */ jal viGetViewWidth -/* 0F8054 7F0C5664 03008025 */ move $s0, $t8 -/* 0F8058 7F0C5668 0050A821 */ addu $s5, $v0, $s0 -/* 0F805C 7F0C566C 0C000FDD */ jal viGetViewTop -/* 0F8060 7F0C5670 26B5FFD7 */ addiu $s5, $s5, -0x29 -/* 0F8064 7F0C5674 8FB90074 */ lw $t9, 0x74($sp) -/* 0F8068 7F0C5678 2456001D */ addiu $s6, $v0, 0x1d -/* 0F806C 7F0C567C 27A40088 */ addiu $a0, $sp, 0x88 -/* 0F8070 7F0C5680 2B210003 */ slti $at, $t9, 3 -/* 0F8074 7F0C5684 14200006 */ bnez $at, .L7F0C56A0 -/* 0F8078 7F0C5688 3C058007 */ lui $a1, %hi(mpradarimages) # $a1, 0x8007 -/* 0F807C 7F0C568C 8FA90070 */ lw $t1, 0x70($sp) -/* 0F8080 7F0C5690 312A0001 */ andi $t2, $t1, 1 -/* 0F8084 7F0C5694 55400003 */ bnezl $t2, .L7F0C56A4 -/* 0F8088 7F0C5698 240B0002 */ li $t3, 2 -/* 0F808C 7F0C569C 26B5000F */ addiu $s5, $s5, 0xf -.L7F0C56A0: -/* 0F8090 7F0C56A0 240B0002 */ li $t3, 2 -.L7F0C56A4: -/* 0F8094 7F0C56A4 AFAB0010 */ sw $t3, 0x10($sp) -/* 0F8098 7F0C56A8 8CA5450C */ lw $a1, %lo(mpradarimages)($a1) -/* 0F809C 7F0C56AC 24060002 */ li $a2, 2 -/* 0F80A0 7F0C56B0 0FC1DB7A */ jal likely_generate_DL_for_image_declaration -/* 0F80A4 7F0C56B4 00003825 */ move $a3, $zero -/* 0F80A8 7F0C56B8 0FC2B016 */ jal microcode_constructor -/* 0F80AC 7F0C56BC 8FA40088 */ lw $a0, 0x88($sp) -/* 0F80B0 7F0C56C0 244C0008 */ addiu $t4, $v0, 8 -/* 0F80B4 7F0C56C4 AFAC0088 */ sw $t4, 0x88($sp) -/* 0F80B8 7F0C56C8 3C0DFCFF */ lui $t5, (0xFCFFB3FF >> 16) # lui $t5, 0xfcff -/* 0F80BC 7F0C56CC 3C0EFF65 */ lui $t6, (0xFF65FEFF >> 16) # lui $t6, 0xff65 -/* 0F80C0 7F0C56D0 35CEFEFF */ ori $t6, (0xFF65FEFF & 0xFFFF) # ori $t6, $t6, 0xfeff -/* 0F80C4 7F0C56D4 35ADB3FF */ ori $t5, (0xFCFFB3FF & 0xFFFF) # ori $t5, $t5, 0xb3ff -/* 0F80C8 7F0C56D8 AC4D0000 */ sw $t5, ($v0) -/* 0F80CC 7F0C56DC AC4E0004 */ sw $t6, 4($v0) -/* 0F80D0 7F0C56E0 8FAF0088 */ lw $t7, 0x88($sp) -/* 0F80D4 7F0C56E4 3C19FA00 */ lui $t9, 0xfa00 -/* 0F80D8 7F0C56E8 240900A0 */ li $t1, 160 -/* 0F80DC 7F0C56EC 25F80008 */ addiu $t8, $t7, 8 -/* 0F80E0 7F0C56F0 AFB80088 */ sw $t8, 0x88($sp) -/* 0F80E4 7F0C56F4 26AC0010 */ addiu $t4, $s5, 0x10 -/* 0F80E8 7F0C56F8 ADE90004 */ sw $t1, 4($t7) -/* 0F80EC 7F0C56FC ADF90000 */ sw $t9, ($t7) -/* 0F80F0 7F0C5700 8FA40088 */ lw $a0, 0x88($sp) -/* 0F80F4 7F0C5704 000C6880 */ sll $t5, $t4, 2 -/* 0F80F8 7F0C5708 31AE0FFF */ andi $t6, $t5, 0xfff -/* 0F80FC 7F0C570C 26D90013 */ addiu $t9, $s6, 0x13 -/* 0F8100 7F0C5710 00194880 */ sll $t1, $t9, 2 -/* 0F8104 7F0C5714 000E7B00 */ sll $t7, $t6, 0xc -/* 0F8108 7F0C5718 3C01E400 */ lui $at, 0xe400 -/* 0F810C 7F0C571C 01E1C025 */ or $t8, $t7, $at -/* 0F8110 7F0C5720 312A0FFF */ andi $t2, $t1, 0xfff -/* 0F8114 7F0C5724 26ACFFF0 */ addiu $t4, $s5, -0x10 -/* 0F8118 7F0C5728 248B0008 */ addiu $t3, $a0, 8 -/* 0F811C 7F0C572C AFAB0088 */ sw $t3, 0x88($sp) -/* 0F8120 7F0C5730 000C6880 */ sll $t5, $t4, 2 -/* 0F8124 7F0C5734 26D9FFED */ addiu $t9, $s6, -0x13 -/* 0F8128 7F0C5738 00194880 */ sll $t1, $t9, 2 -/* 0F812C 7F0C573C 31AE0FFF */ andi $t6, $t5, 0xfff -/* 0F8130 7F0C5740 030A5825 */ or $t3, $t8, $t2 -/* 0F8134 7F0C5744 31380FFF */ andi $t8, $t1, 0xfff -/* 0F8138 7F0C5748 000E7B00 */ sll $t7, $t6, 0xc -/* 0F813C 7F0C574C 01F85025 */ or $t2, $t7, $t8 -/* 0F8140 7F0C5750 AC8A0004 */ sw $t2, 4($a0) -/* 0F8144 7F0C5754 AC8B0000 */ sw $t3, ($a0) -/* 0F8148 7F0C5758 8FAB0088 */ lw $t3, 0x88($sp) -/* 0F814C 7F0C575C 3C0E0010 */ lui $t6, (0x00100010 >> 16) # lui $t6, 0x10 -/* 0F8150 7F0C5760 35CE0010 */ ori $t6, (0x00100010 & 0xFFFF) # ori $t6, $t6, 0x10 -/* 0F8154 7F0C5764 256C0008 */ addiu $t4, $t3, 8 -/* 0F8158 7F0C5768 AFAC0088 */ sw $t4, 0x88($sp) -/* 0F815C 7F0C576C 3C0DB400 */ lui $t5, 0xb400 -/* 0F8160 7F0C5770 AD6D0000 */ sw $t5, ($t3) -/* 0F8164 7F0C5774 AD6E0004 */ sw $t6, 4($t3) -/* 0F8168 7F0C5778 8FB90088 */ lw $t9, 0x88($sp) -/* 0F816C 7F0C577C 3C180400 */ lui $t8, (0x04000355 >> 16) # lui $t8, 0x400 -/* 0F8170 7F0C5780 37180355 */ ori $t8, (0x04000355 & 0xFFFF) # ori $t8, $t8, 0x355 -/* 0F8174 7F0C5784 27290008 */ addiu $t1, $t9, 8 -/* 0F8178 7F0C5788 AFA90088 */ sw $t1, 0x88($sp) -/* 0F817C 7F0C578C 3C0FB300 */ lui $t7, 0xb300 -/* 0F8180 7F0C5790 AF2F0000 */ sw $t7, ($t9) -/* 0F8184 7F0C5794 AF380004 */ sw $t8, 4($t9) -/* 0F8188 7F0C5798 240B0040 */ li $t3, 64 -/* 0F818C 7F0C579C 26CA0002 */ addiu $t2, $s6, 2 -/* 0F8190 7F0C57A0 AFAA0010 */ sw $t2, 0x10($sp) -/* 0F8194 7F0C57A4 AFAB0014 */ sw $t3, 0x14($sp) -/* 0F8198 7F0C57A8 8FA40088 */ lw $a0, 0x88($sp) -/* 0F819C 7F0C57AC 26A5FFFE */ addiu $a1, $s5, -2 -/* 0F81A0 7F0C57B0 26C6FFFE */ addiu $a2, $s6, -2 -/* 0F81A4 7F0C57B4 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0F81A8 7F0C57B8 26A70002 */ addiu $a3, $s5, 2 -/* 0F81AC 7F0C57BC 24010005 */ li $at, 5 -/* 0F81B0 7F0C57C0 1281000A */ beq $s4, $at, .L7F0C57EC -/* 0F81B4 7F0C57C4 AFA20088 */ sw $v0, 0x88($sp) -/* 0F81B8 7F0C57C8 24010006 */ li $at, 6 -/* 0F81BC 7F0C57CC 12810007 */ beq $s4, $at, .L7F0C57EC -/* 0F81C0 7F0C57D0 24010007 */ li $at, 7 -/* 0F81C4 7F0C57D4 12810005 */ beq $s4, $at, .L7F0C57EC -/* 0F81C8 7F0C57D8 24010002 */ li $at, 2 -/* 0F81CC 7F0C57DC 12810003 */ beq $s4, $at, .L7F0C57EC -/* 0F81D0 7F0C57E0 24010003 */ li $at, 3 -/* 0F81D4 7F0C57E4 16810018 */ bne $s4, $at, .L7F0C5848 -/* 0F81D8 7F0C57E8 8FA40088 */ lw $a0, 0x88($sp) -.L7F0C57EC: -/* 0F81DC 7F0C57EC 8FAC0070 */ lw $t4, 0x70($sp) -/* 0F81E0 7F0C57F0 3C0E8007 */ lui $t6, %hi(g_playerPlayerData+0x69) -/* 0F81E4 7F0C57F4 8FA40088 */ lw $a0, 0x88($sp) -/* 0F81E8 7F0C57F8 000C68C0 */ sll $t5, $t4, 3 -/* 0F81EC 7F0C57FC 01AC6823 */ subu $t5, $t5, $t4 -/* 0F81F0 7F0C5800 000D6900 */ sll $t5, $t5, 4 -/* 0F81F4 7F0C5804 01CD7021 */ addu $t6, $t6, $t5 -/* 0F81F8 7F0C5808 91CE8A69 */ lbu $t6, %lo(g_playerPlayerData+0x69)($t6) -/* 0F81FC 7F0C580C 26A5FFFF */ addiu $a1, $s5, -1 -/* 0F8200 7F0C5810 26C6FFFF */ addiu $a2, $s6, -1 -/* 0F8204 7F0C5814 15C00004 */ bnez $t6, .L7F0C5828 -/* 0F8208 7F0C5818 26A70001 */ addiu $a3, $s5, 1 -/* 0F820C 7F0C581C 3C02FF77 */ lui $v0, (0xFF7777FF >> 16) # lui $v0, 0xff77 -/* 0F8210 7F0C5820 10000003 */ b .L7F0C5830 -/* 0F8214 7F0C5824 344277FF */ ori $v0, (0xFF7777FF & 0xFFFF) # ori $v0, $v0, 0x77ff -.L7F0C5828: -/* 0F8218 7F0C5828 3C028888 */ lui $v0, (0x8888FFFF >> 16) # lui $v0, 0x8888 -/* 0F821C 7F0C582C 3442FFFF */ ori $v0, (0x8888FFFF & 0xFFFF) # ori $v0, $v0, 0xffff -.L7F0C5830: -/* 0F8220 7F0C5830 26D90001 */ addiu $t9, $s6, 1 -/* 0F8224 7F0C5834 AFB90010 */ sw $t9, 0x10($sp) -/* 0F8228 7F0C5838 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0F822C 7F0C583C AFA20014 */ sw $v0, 0x14($sp) -/* 0F8230 7F0C5840 1000000A */ b .L7F0C586C -/* 0F8234 7F0C5844 AFA20088 */ sw $v0, 0x88($sp) -.L7F0C5848: -/* 0F8238 7F0C5848 26C90001 */ addiu $t1, $s6, 1 -/* 0F823C 7F0C584C 240FFFA0 */ li $t7, -96 -/* 0F8240 7F0C5850 AFAF0014 */ sw $t7, 0x14($sp) -/* 0F8244 7F0C5854 AFA90010 */ sw $t1, 0x10($sp) -/* 0F8248 7F0C5858 26A5FFFF */ addiu $a1, $s5, -1 -/* 0F824C 7F0C585C 26C6FFFF */ addiu $a2, $s6, -1 -/* 0F8250 7F0C5860 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0F8254 7F0C5864 26A70001 */ addiu $a3, $s5, 1 -/* 0F8258 7F0C5868 AFA20088 */ sw $v0, 0x88($sp) -.L7F0C586C: -/* 0F825C 7F0C586C 8FB80074 */ lw $t8, 0x74($sp) -/* 0F8260 7F0C5870 00009825 */ move $s3, $zero -/* 0F8264 7F0C5874 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 0F8268 7F0C5878 1B000088 */ blez $t8, .L7F0C5A9C -/* 0F826C 7F0C587C 00000000 */ nop -/* 0F8270 7F0C5880 4481F000 */ mtc1 $at, $f30 -/* 0F8274 7F0C5884 00000000 */ nop -/* 0F8278 7F0C5888 8FAA0070 */ lw $t2, 0x70($sp) -.L7F0C588C: -/* 0F827C 7F0C588C 00135880 */ sll $t3, $s3, 2 -/* 0F8280 7F0C5890 3C048007 */ lui $a0, %hi(g_playerPointers) -/* 0F8284 7F0C5894 126A007D */ beq $s3, $t2, .L7F0C5A8C -/* 0F8288 7F0C5898 008B2021 */ addu $a0, $a0, $t3 -/* 0F828C 7F0C589C 8C8489F0 */ lw $a0, %lo(g_playerPointers)($a0) -/* 0F8290 7F0C58A0 8C8C00D8 */ lw $t4, 0xd8($a0) -/* 0F8294 7F0C58A4 5580007A */ bnezl $t4, .L7F0C5A90 -/* 0F8298 7F0C58A8 8FB80074 */ lw $t8, 0x74($sp) -/* 0F829C 7F0C58AC 8EED0000 */ lw $t5, ($s7) -/* 0F82A0 7F0C58B0 8C8200A8 */ lw $v0, 0xa8($a0) -/* 0F82A4 7F0C58B4 3C014180 */ li $at, 0x41800000 # 16.000000 -/* 0F82A8 7F0C58B8 8DA300A8 */ lw $v1, 0xa8($t5) -/* 0F82AC 7F0C58BC C45C0008 */ lwc1 $f28, 8($v0) -/* 0F82B0 7F0C58C0 C4520010 */ lwc1 $f18, 0x10($v0) -/* 0F82B4 7F0C58C4 C4700008 */ lwc1 $f16, 8($v1) -/* 0F82B8 7F0C58C8 C46A0010 */ lwc1 $f10, 0x10($v1) -/* 0F82BC 7F0C58CC 44814000 */ mtc1 $at, $f8 -/* 0F82C0 7F0C58D0 4610E501 */ sub.s $f20, $f28, $f16 -/* 0F82C4 7F0C58D4 3C01457A */ li $at, 0x457A0000 # 4000.000000 -/* 0F82C8 7F0C58D8 44818000 */ mtc1 $at, $f16 -/* 0F82CC 7F0C58DC 460A9581 */ sub.s $f22, $f18, $f10 -/* 0F82D0 7F0C58E0 240E0010 */ li $t6, 16 -/* 0F82D4 7F0C58E4 448E5000 */ mtc1 $t6, $f10 -/* 0F82D8 7F0C58E8 46104683 */ div.s $f26, $f8, $f16 -/* 0F82DC 7F0C58EC 4600A306 */ mov.s $f12, $f20 -/* 0F82E0 7F0C58F0 4600B386 */ mov.s $f14, $f22 -/* 0F82E4 7F0C58F4 0FC16BB8 */ jal atan2f -/* 0F82E8 7F0C58F8 46805620 */ cvt.s.w $f24, $f10 -/* 0F82EC 7F0C58FC 461E0182 */ mul.s $f6, $f0, $f30 -/* 0F82F0 7F0C5900 3C018005 */ lui $at, %hi(D_800508E0) # $at, 0x8005 -/* 0F82F4 7F0C5904 C42808E0 */ lwc1 $f8, %lo(D_800508E0)($at) -/* 0F82F8 7F0C5908 4614A102 */ mul.s $f4, $f20, $f20 -/* 0F82FC 7F0C590C 8EF90000 */ lw $t9, ($s7) -/* 0F8300 7F0C5910 C7300148 */ lwc1 $f16, 0x148($t9) -/* 0F8304 7F0C5914 46083283 */ div.s $f10, $f6, $f8 -/* 0F8308 7F0C5918 4616B182 */ mul.s $f6, $f22, $f22 -/* 0F830C 7F0C591C 46062300 */ add.s $f12, $f4, $f6 -/* 0F8310 7F0C5920 46105480 */ add.s $f18, $f10, $f16 -/* 0F8314 7F0C5924 0C007614 */ jal sqrtf -/* 0F8318 7F0C5928 461E9700 */ add.s $f28, $f18, $f30 -/* 0F831C 7F0C592C 461A0082 */ mul.s $f2, $f0, $f26 -/* 0F8320 7F0C5930 24010005 */ li $at, 5 -/* 0F8324 7F0C5934 001348C0 */ sll $t1, $s3, 3 -/* 0F8328 7F0C5938 01334823 */ subu $t1, $t1, $s3 -/* 0F832C 7F0C593C 1281000A */ beq $s4, $at, .L7F0C5968 -/* 0F8330 7F0C5940 46001586 */ mov.s $f22, $f2 -/* 0F8334 7F0C5944 24010006 */ li $at, 6 -/* 0F8338 7F0C5948 12810007 */ beq $s4, $at, .L7F0C5968 -/* 0F833C 7F0C594C 24010007 */ li $at, 7 -/* 0F8340 7F0C5950 12810005 */ beq $s4, $at, .L7F0C5968 -/* 0F8344 7F0C5954 24010002 */ li $at, 2 -/* 0F8348 7F0C5958 12810003 */ beq $s4, $at, .L7F0C5968 -/* 0F834C 7F0C595C 24010003 */ li $at, 3 -/* 0F8350 7F0C5960 5681001B */ bnel $s4, $at, .L7F0C59D0 -/* 0F8354 7F0C5964 4618103C */ c.lt.s $f2, $f24 -.L7F0C5968: -/* 0F8358 7F0C5968 4618103C */ c.lt.s $f2, $f24 -/* 0F835C 7F0C596C 3C0F8007 */ lui $t7, %hi(g_playerPlayerData) # $t7, 0x8007 -/* 0F8360 7F0C5970 25EF8A00 */ addiu $t7, %lo(g_playerPlayerData) # addiu $t7, $t7, -0x7600 -/* 0F8364 7F0C5974 00094900 */ sll $t1, $t1, 4 -/* 0F8368 7F0C5978 4500000A */ bc1f .L7F0C59A4 -/* 0F836C 7F0C597C 012F1021 */ addu $v0, $t1, $t7 -/* 0F8370 7F0C5980 90580069 */ lbu $t8, 0x69($v0) -/* 0F8374 7F0C5984 3C112828 */ lui $s1, 0x2828 -/* 0F8378 7F0C5988 17000004 */ bnez $t8, .L7F0C599C -/* 0F837C 7F0C598C 00000000 */ nop -/* 0F8380 7F0C5990 3C11FF00 */ lui $s1, (0xFF00FFFF >> 16) # lui $s1, 0xff00 -/* 0F8384 7F0C5994 10000016 */ b .L7F0C59F0 -/* 0F8388 7F0C5998 363100A0 */ ori $s1, (0xFF0000A0 & 0xFFFF) # ori $s1, $s1, 0xa0 -.L7F0C599C: -/* 0F838C 7F0C599C 10000014 */ b .L7F0C59F0 -/* 0F8390 7F0C59A0 3631FFFF */ ori $s1, (0xFF00FFFF & 0xFFFF) # ori $s1, $s1, 0xffff -.L7F0C59A4: -/* 0F8394 7F0C59A4 904A0069 */ lbu $t2, 0x69($v0) -/* 0F8398 7F0C59A8 4600C586 */ mov.s $f22, $f24 -/* 0F839C 7F0C59AC 3C112828 */ lui $s1, 0x2828 -/* 0F83A0 7F0C59B0 15400004 */ bnez $t2, .L7F0C59C4 -/* 0F83A4 7F0C59B4 00000000 */ nop -/* 0F83A8 7F0C59B8 3C11FF00 */ lui $s1, (0xFF00FFB0 >> 16) # lui $s1, 0xff00 -/* 0F83AC 7F0C59BC 1000000C */ b .L7F0C59F0 -/* 0F83B0 7F0C59C0 36310060 */ ori $s1, (0xFF000060 & 0xFFFF) # ori $s1, $s1, 0x60 -.L7F0C59C4: -/* 0F83B4 7F0C59C4 1000000A */ b .L7F0C59F0 -/* 0F83B8 7F0C59C8 3631FFB0 */ ori $s1, (0xFF00FFB0 & 0xFFFF) # ori $s1, $s1, 0xffb0 -/* 0F83BC 7F0C59CC 4618103C */ c.lt.s $f2, $f24 -.L7F0C59D0: -/* 0F83C0 7F0C59D0 3C11FFFF */ lui $s1, (0xFFFF0060 >> 16) # lui $s1, 0xffff -/* 0F83C4 7F0C59D4 36310060 */ ori $s1, (0xFFFF0060 & 0xFFFF) # ori $s1, $s1, 0x60 -/* 0F83C8 7F0C59D8 45020005 */ bc1fl .L7F0C59F0 -/* 0F83CC 7F0C59DC 4600C586 */ mov.s $f22, $f24 -/* 0F83D0 7F0C59E0 3C11FFFF */ lui $s1, (0xFFFF00A0 >> 16) # lui $s1, 0xffff -/* 0F83D4 7F0C59E4 10000002 */ b .L7F0C59F0 -/* 0F83D8 7F0C59E8 363100A0 */ ori $s1, (0xFFFF00A0 & 0xFFFF) # ori $s1, $s1, 0xa0 -/* 0F83DC 7F0C59EC 4600C586 */ mov.s $f22, $f24 -.L7F0C59F0: -/* 0F83E0 7F0C59F0 3C018005 */ lui $at, %hi(D_800508E4) # $at, 0x8005 -/* 0F83E4 7F0C59F4 C42808E4 */ lwc1 $f8, %lo(D_800508E4)($at) -/* 0F83E8 7F0C59F8 4608E502 */ mul.s $f20, $f28, $f8 -/* 0F83EC 7F0C59FC 0FC1606B */ jal sinf -/* 0F83F0 7F0C5A00 4600A306 */ mov.s $f12, $f20 -/* 0F83F4 7F0C5A04 46160282 */ mul.s $f10, $f0, $f22 -/* 0F83F8 7F0C5A08 4600A306 */ mov.s $f12, $f20 -/* 0F83FC 7F0C5A0C 4600540D */ trunc.w.s $f16, $f10 -/* 0F8400 7F0C5A10 440C8000 */ mfc1 $t4, $f16 -/* 0F8404 7F0C5A14 0FC16068 */ jal cosf -/* 0F8408 7F0C5A18 01958021 */ addu $s0, $t4, $s5 -/* 0F840C 7F0C5A1C 46160482 */ mul.s $f18, $f0, $f22 -/* 0F8410 7F0C5A20 3C018005 */ lui $at, %hi(D_800508E8) # $at, 0x8005 -/* 0F8414 7F0C5A24 C42408E8 */ lwc1 $f4, %lo(D_800508E8)($at) -/* 0F8418 7F0C5A28 24090040 */ li $t1, 64 -/* 0F841C 7F0C5A2C AFA90014 */ sw $t1, 0x14($sp) -/* 0F8420 7F0C5A30 8FA40088 */ lw $a0, 0x88($sp) -/* 0F8424 7F0C5A34 2605FFFE */ addiu $a1, $s0, -2 -/* 0F8428 7F0C5A38 46049182 */ mul.s $f6, $f18, $f4 -/* 0F842C 7F0C5A3C 26070002 */ addiu $a3, $s0, 2 -/* 0F8430 7F0C5A40 4600320D */ trunc.w.s $f8, $f6 -/* 0F8434 7F0C5A44 440E4000 */ mfc1 $t6, $f8 -/* 0F8438 7F0C5A48 00000000 */ nop -/* 0F843C 7F0C5A4C 01D61021 */ addu $v0, $t6, $s6 -/* 0F8440 7F0C5A50 24590002 */ addiu $t9, $v0, 2 -/* 0F8444 7F0C5A54 00409025 */ move $s2, $v0 -/* 0F8448 7F0C5A58 AFB90010 */ sw $t9, 0x10($sp) -/* 0F844C 7F0C5A5C 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0F8450 7F0C5A60 2446FFFE */ addiu $a2, $v0, -2 -/* 0F8454 7F0C5A64 264F0001 */ addiu $t7, $s2, 1 -/* 0F8458 7F0C5A68 AFA20088 */ sw $v0, 0x88($sp) -/* 0F845C 7F0C5A6C AFAF0010 */ sw $t7, 0x10($sp) -/* 0F8460 7F0C5A70 00402025 */ move $a0, $v0 -/* 0F8464 7F0C5A74 2605FFFF */ addiu $a1, $s0, -1 -/* 0F8468 7F0C5A78 2646FFFF */ addiu $a2, $s2, -1 -/* 0F846C 7F0C5A7C 26070001 */ addiu $a3, $s0, 1 -/* 0F8470 7F0C5A80 0FC2B0B5 */ jal microcode_constructor_related_to_menus -/* 0F8474 7F0C5A84 AFB10014 */ sw $s1, 0x14($sp) -/* 0F8478 7F0C5A88 AFA20088 */ sw $v0, 0x88($sp) -.L7F0C5A8C: -/* 0F847C 7F0C5A8C 8FB80074 */ lw $t8, 0x74($sp) -.L7F0C5A90: -/* 0F8480 7F0C5A90 26730001 */ addiu $s3, $s3, 1 -/* 0F8484 7F0C5A94 5678FF7D */ bnel $s3, $t8, .L7F0C588C -/* 0F8488 7F0C5A98 8FAA0070 */ lw $t2, 0x70($sp) -.L7F0C5A9C: -/* 0F848C 7F0C5A9C 0FC2B06C */ jal combiner_bayer_lod_perspective -/* 0F8490 7F0C5AA0 8FA40088 */ lw $a0, 0x88($sp) -.L7F0C5AA4: -/* 0F8494 7F0C5AA4 8FBF006C */ lw $ra, 0x6c($sp) -/* 0F8498 7F0C5AA8 D7B40018 */ ldc1 $f20, 0x18($sp) -/* 0F849C 7F0C5AAC D7B60020 */ ldc1 $f22, 0x20($sp) -/* 0F84A0 7F0C5AB0 D7B80028 */ ldc1 $f24, 0x28($sp) -/* 0F84A4 7F0C5AB4 D7BA0030 */ ldc1 $f26, 0x30($sp) -/* 0F84A8 7F0C5AB8 D7BC0038 */ ldc1 $f28, 0x38($sp) -/* 0F84AC 7F0C5ABC D7BE0040 */ ldc1 $f30, 0x40($sp) -/* 0F84B0 7F0C5AC0 8FB0004C */ lw $s0, 0x4c($sp) -/* 0F84B4 7F0C5AC4 8FB10050 */ lw $s1, 0x50($sp) -/* 0F84B8 7F0C5AC8 8FB20054 */ lw $s2, 0x54($sp) -/* 0F84BC 7F0C5ACC 8FB30058 */ lw $s3, 0x58($sp) -/* 0F84C0 7F0C5AD0 8FB4005C */ lw $s4, 0x5c($sp) -/* 0F84C4 7F0C5AD4 8FB50060 */ lw $s5, 0x60($sp) -/* 0F84C8 7F0C5AD8 8FB60064 */ lw $s6, 0x64($sp) -/* 0F84CC 7F0C5ADC 8FB70068 */ lw $s7, 0x68($sp) -/* 0F84D0 7F0C5AE0 03E00008 */ jr $ra -/* 0F84D4 7F0C5AE4 27BD0088 */ addiu $sp, $sp, 0x88 -) -#endif - -#endif - - diff --git a/src/game/ramromreplay.c b/src/game/ramromreplay.c index 17ee085..2d1c2ab 100644 --- a/src/game/ramromreplay.c +++ b/src/game/ramromreplay.c @@ -96,7 +96,7 @@ s32 g_ramromRecordFlag = 0; -void ensureCameraModeA(void); +void ramromFadeToTitle(void); s32 ramrom_replay_handler(struct contsample *arg0, s32 arg1); void record_player_input_as_packet(struct contsample *arg0, s32 arg1, s32 arg2); void copy_current_ingame_registers_before_ramrom_playback(ramromfilestructure *state); @@ -460,21 +460,21 @@ s32 ramrom_replay_handler(struct contsample *arg0, s32 arg1) if (ramrom_blkbuf_2->randseed != (u8)g_randomSeed) { - ensureCameraModeA(); + ramromFadeToTitle(); } var_t0 += (u8)((u8)ramrom_blkbuf_2->speedframes + (u8)ramrom_blkbuf_2->count + ramrom_blkbuf_2->randseed); if (ramrom_blkbuf_2->check != var_t0) { - ensureCameraModeA(); + ramromFadeToTitle(); } joySetContDataIndex(0); if (joyGetButtonsPressedThisFrame(0, 0xFFFFU) != 0) { - ensureCameraModeA(); - prev_keypresses = 1; + ramromFadeToTitle(); + prev_keypresses = TRUE; } joySetContDataIndex(1); @@ -504,7 +504,7 @@ void iterate_ramrom_entries_handle_camera_out(void) var_a3 = ramrom_blkbuf_2->count; if (var_a3 == 0 && ramrom_blkbuf_2->speedframes == 0) { - ensureCameraModeA(); + ramromFadeToTitle(); } else { @@ -512,14 +512,14 @@ void iterate_ramrom_entries_handle_camera_out(void) address_demo_loaded += align_addr_even((ptr_active_demofile->size_cmds * sizeof(struct ramrom_blockbuf) * ramrom_blkbuf_2->count) + 5); } - sub_GAME_7F0C0AA0(ramrom_blkbuf_2->speedframes); + updateFrameCounters(ramrom_blkbuf_2->speedframes); // BUG? Does this need to be adjusted for PAL? temp_v1 = ptr_active_demofile->totaltime_ms - 0x3C; if(0); if ((g_GlobalTimer >= temp_v1) && ((g_GlobalTimer - g_ClockTimer) < temp_v1)) { - ensureCameraModeA(); + ramromFadeToTitle(); } } @@ -658,11 +658,11 @@ void replay_recorded_ramrom_from_indy(void) replay_recorded_ramrom_at_address(INDY_RAMROM_DEMO_ADDRESS); } -void ensureCameraModeA(void) +void ramromFadeToTitle(void) { - if (get_camera_mode() != CAMERAMODE_UNK10) + if (bondviewGetCameraMode() != CAMERAMODE_FADE_TO_TITLE) { - set_camera_mode(CAMERAMODE_UNK10); + bondviewSetCameraMode(CAMERAMODE_FADE_TO_TITLE); } } diff --git a/src/game/room_model_buffer.c b/src/game/room_model_buffer.c deleted file mode 100644 index d591033..0000000 --- a/src/game/room_model_buffer.c +++ /dev/null @@ -1,8 +0,0 @@ -#include - -//TODO this is not correct size afaik, but it fills a gap this way -//shrinking slightly from 0x271CA0 to allow some room for shifting, -// eventually we will know real sizes and other buffers - -//due to where tlb allocated block buffer starts, i have reduced value again -u8 room_model_buffer[0x267CA0]; diff --git a/src/game/room_model_buffer.h b/src/game/room_model_buffer.h deleted file mode 100644 index 63b93ed..0000000 --- a/src/game/room_model_buffer.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef _ROOM_MODEL_BUFFER_H_ -#define _ROOM_MODEL_BUFFER_H_ -#include - -extern u8 room_model_buffer[]; - -#endif diff --git a/src/game/rsp.c b/src/game/rsp.c index 75d462d..ca6959e 100644 --- a/src/game/rsp.c +++ b/src/game/rsp.c @@ -215,7 +215,7 @@ void rspInit(void) void rspAllocateBuffers(void) { - g_gfxRdpOutputBufferStart = mempAllocBytesInBank(RSP_MEMP_ALLOC_SIZE_BYTES, RSP_MEMP_BANK); + g_gfxRdpOutputBufferStart = mempAllocBytesInBank(RSP_MEMP_ALLOC_SIZE_BYTES, MEMPOOL_PERMANENT); g_gfxRdpOutputBufferEnd = g_gfxRdpOutputBufferStart + RSP_MEMP_ALLOC_SIZE_BYTES; } diff --git a/src/game/spectrum.c b/src/game/spectrum.c index cca5588..4cef26b 100644 --- a/src/game/spectrum.c +++ b/src/game/spectrum.c @@ -9227,6 +9227,7 @@ glabel jpt_8005C62C .word spectrum_op_SET_x_L .word spectrum_op_SET_x_HL .word spectrum_op_SET_x_A +.size jpt_8005C62C, . - jpt_8005C62C /*D:8005C64C*/ glabel jpt_8005C64C @@ -9238,6 +9239,7 @@ glabel jpt_8005C64C .word spectrum_op_RES_x_L .word spectrum_op_RES_x_HL .word spectrum_op_RES_x_A +.size jpt_8005C64C, . - jpt_8005C64C /*D:8005C66C*/ glabel jpt_8005C66C @@ -9249,6 +9251,7 @@ glabel jpt_8005C66C .word spectrum_op_BIT_x_L .word spectrum_op_BIT_x_HL .word spectrum_op_BIT_x_A +.size jpt_8005C66C, . - jpt_8005C66C /*D:8005C68C*/ glabel jpt_8005C68C @@ -9260,6 +9263,7 @@ glabel jpt_8005C68C .word .L7F0DC5EC .word .L7F0E27FC .word .L7F0DC5F4 +.size jpt_8005C68C, . - jpt_8005C68C /*D:8005C6AC*/ glabel jpt_8005C6AC @@ -9291,6 +9295,7 @@ glabel jpt_8005C6AC .word spectrum_op_ED_B9 .word spectrum_op_ED_BA .word spectrum_op_ED_BB +.size jpt_8005C6AC, . - jpt_8005C6AC /*D:8005C71C*/ glabel jpt_8005C71C @@ -9357,6 +9362,7 @@ glabel jpt_8005C71C .word spectrum_op_ED_7C .word spectrum_op_ED_7D .word spectrum_op_ED_7E +.size jpt_8005C71C, . - jpt_8005C71C .text glabel spectrum_hw_emulation diff --git a/src/game/speedgraphrenderer.c b/src/game/speedgraphrenderer.c new file mode 100644 index 0000000..43d136d --- /dev/null +++ b/src/game/speedgraphrenderer.c @@ -0,0 +1,261 @@ +#include +#include "speedgraphrenderer.h" + +/** + * @brief The current position on the graph being drawn. + * + * This variable keeps track of the current position in the graph where the next + * bar or line will be drawn. It is used to determine the starting point for + * rendering new elements on the graph. + */ +f32 gCurrentGraphPosition = 0.0f; +/** + * @brief The next position on the graph for rendering. + * + * This variable is incremented as new bars or lines are drawn on the graph. + * It represents the position where the next graphical element will begin, + * allowing for the sequential rendering of the graph. + */ +f32 gNextGraphPosition = 0.0f; + + + + + + + +/** + * @brief Initializes the display list for rendering the speed graph. + * + * This function sets up the graphics pipeline with specific configurations, + * such as disabling the Z-buffer, setting the texture filter to point mode, + * and configuring the cycle type to fill mode. It also resets the graph + * position variables to their initial state. + * + * @param gdl A pointer to the current display list. + * @return A pointer to the next available display list entry. + */ +Gfx * InitializeSpeedGraphDL(Gfx *gdl) +{ + gCurrentGraphPosition = gNextGraphPosition = 0.0f; + + gDPSetTextureFilter(gdl++, G_TF_POINT); + gDPSetColorDither(gdl++, G_CD_DISABLE); + gSPClearGeometryMode(gdl++, G_ZBUFFER ); + gDPPipeSync(gdl++); + gDPSetTexturePersp(gdl++, G_TP_NONE); + gDPSetCycleType(gdl++, G_CYC_FILL); + gDPSetRenderMode(gdl++, G_RM_PASS, G_RM_OPA_SURF2); + gDPPipelineMode(gdl++, G_PM_1PRIMITIVE); + return gdl++; +} + + +/** + * @brief Draws a simple graph bar with specified color and offset. + * + * This function draws a filled rectangle representing a bar in the speed graph, + * with a simple offset and fixed dimensions. The bar is colored using the + * provided RGB values. + * + * @param gdl A pointer to the current display list. + * @param offset The position of the bar. + * @param r The red component of the bar's color (0-255). + * @param g The green component of the bar's color (0-255). + * @param b The blue component of the bar's color (0-255). + * @return A pointer to the next available display list entry. + */ +Gfx *DrawGraphBarWithSimpleOffset(Gfx *gdl, f32 offset, s32 r, s32 g, s32 b) +{ + return DrawGraphBar(gdl, offset, r, g, b, 2, 1); +} + + +/** + * @brief Draws a graph bar with specified dimensions and color. + * + * This function calculates the start and end positions of a graph bar, + * adjusting for segment offsets and ensuring the bar is drawn within the + * screen boundaries. The bar is filled with the specified color. + * + * @param gdl A pointer to the current display list. + * @param offset The position of the bar. + * @param r The red component of the bar's color (0-255). + * @param g The green component of the bar's color (0-255). + * @param b The blue component of the bar's color (0-255). + * @param width The width applied to the bar. + * @param height The height applied to the bar. + * @return A pointer to the next available display list entry. + */ +Gfx *DrawGraphBar(Gfx *gdl, f32 offset, s32 r, s32 g, s32 b, s32 width, s32 height) +{ + f32 nextPosition; + s32 start; + s32 upper; + s32 segmentOffsetX; + s32 i; + s32 ulx; + s32 lrx; + s32 leftSide; + s32 rightSide; + + if (offset > 0) + { + start = (s32) (gNextGraphPosition / 10.0f); + + nextPosition = gNextGraphPosition + offset; + upper = (s32) ((nextPosition) / 10.0f); + + leftSide = (s32) ((gNextGraphPosition * 219.0f) / 10.0f); + rightSide = (s32) (((nextPosition) * 219.0f) / 10.0f); + + gDPSetFillColor(gdl++, (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1)); + + for (i = start; (upper >= i) && (i < 3); i++) + { + segmentOffsetX = (i * 219); + ulx = (leftSide - segmentOffsetX) + 50; + lrx = (rightSide - segmentOffsetX) + 50; + + if (ulx < 50) + { + ulx = 50; + } + + if (lrx >= 270) + { + lrx = 269; + } + + if (lrx >= ulx) + { + gDPFillRectangle(gdl++, ulx, (height + (i * 7) + 18), lrx, (width + height + (i * 7) + 17)); + } + + ulx -= 219; + } + + gNextGraphPosition += offset; + } + + return gdl; +} + + +/** + * @brief Updates the current position of the graph by a specified delta. + * + * This function increments the graph's position by the specified delta, + * allowing for dynamic movement or extension of the graph. + * + * @param delta The amount to increment the graph position by. + */ +void UpdateGraphPosition(f32 delta) { + if (0.0f < delta) { + gNextGraphPosition = (f32) (gNextGraphPosition + delta); + return; + } +} + + +/** + * @brief Draws a graph bar with an adjusted offset. + * + * This unreferenced function draws a graph bar with an offset that accounts + * for the difference between the current and next graph positions. This may + * be used for drawing bars relative to the previous position. + * + * @param gdl A pointer to the current display list. + * @param offset The position of the bar. + * @param r The red component of the bar's color (0-255). + * @param g The green component of the bar's color (0-255). + * @param b The blue component of the bar's color (0-255). + * @return A pointer to the next available display list entry. + */ +Gfx *DrawAdjustedGraphBar(Gfx *gdl, f32 offset, s32 r, s32 g, s32 b) +{ + return DrawGraphBarWithSimpleOffset(gdl, (gCurrentGraphPosition + offset) - gNextGraphPosition, r, g, b); +} + + +/** + * @brief Draws a graph bar with a specified offset and dimensions. + * + * This unreferenced function draws a graph bar with an offset that takes into + * account both the current graph position and the provided width and height + * offsets. + * + * @param gdl A pointer to the current display list. + * @param offset The position of the bar. + * @param r The red component of the bar's color (0-255). + * @param g The green component of the bar's color (0-255). + * @param b The blue component of the bar's color (0-255). + * @param width The width of the bar. + * @param height The height of the bar. + * @return A pointer to the next available display list entry. + */ +Gfx *DrawGraphBarWithOffset(Gfx *gdl, f32 offset, s32 r, s32 g, s32 b, s32 width, s32 height) +{ + return DrawGraphBar(gdl, (gCurrentGraphPosition + offset) - gNextGraphPosition, r, g, b, width, height); +} + + +/** + * @brief Draws vertical lines on the graph. + * + * This function draws vertical lines on the graph, using the specified + * color. The lines are spaced based on the current graph position. + * + * @param gdl A pointer to the current display list. + * @param r The red component of the line color (0-255). + * @param g The green component of the line color (0-255). + * @param b The blue component of the line color (0-255). + * @return A pointer to the next available display list entry. + */ +Gfx *DrawVerticalLines(Gfx *gdl, s32 r, s32 g, s32 b) +{ + s32 start; + s32 i; + s32 j; + + start = (s32) (gNextGraphPosition / 10.0f); + + gDPSetFillColor(gdl++, (GPACK_RGBA5551(r, g, b, 1) << 16) | GPACK_RGBA5551(r, g, b, 1)); + + for (j = 0; start >= j && j < 3; j++) + { + for (i = 0; i < 11; i++) + { + gDPFillRectangle( + gdl++, + (s32) (((f32) i * 219.0f) / 10.0f) + 50, + j*7 + 0x12, + (s32) (((f32) i * 219.0f) / 10.0f) + 50, + j*7 + 0x15); + } + } + + return gdl; +} + + +/** + * @brief Aligns the current graph position to the nearest 10-unit boundary. + * + * This function adjusts the graph's position to align with the nearest 10-unit + * boundary, which may be used to ensure consistent spacing or grid alignment. + */ +void AlignGraphPosition(void) +{ + s32 t; + + t = (s32) (gNextGraphPosition / 10.0f); + t = (t * 10) + 10; + + gNextGraphPosition = t; + gCurrentGraphPosition = gNextGraphPosition; +} + + + + diff --git a/src/game/speedgraphrenderer.h b/src/game/speedgraphrenderer.h new file mode 100644 index 0000000..c467745 --- /dev/null +++ b/src/game/speedgraphrenderer.h @@ -0,0 +1,13 @@ +#ifndef _UNK_0D1AC0_H_ +#define _UNK_0D1AC0_H_ +#include +#include + +Gfx * InitializeSpeedGraphDL(Gfx *DL); +void UpdateGraphPosition(f32 arg0); +void AlignGraphPosition(void); + +Gfx *DrawGraphBar(Gfx *gdl, f32 offset, s32 r, s32 g, s32 b, s32 width, s32 height); +Gfx *DrawVerticalLines(Gfx *gdl, s32 r, s32 g, s32 b); + +#endif diff --git a/src/game/stan.c b/src/game/stan.c index 7517a6e..47e437b 100644 --- a/src/game/stan.c +++ b/src/game/stan.c @@ -6,6 +6,7 @@ #include "chrai.h" #include "chr.h" #include "unk_0B3200.h" +#include "assert.h" // bss struct StanPrefixRecord { @@ -20,11 +21,11 @@ struct StanPrefixRecord stan_prefix; //CODE.bss:8007B128 -s32 dword_CODE_bss_8007B128; +s32 firststaninroom; //CODE.bss:8007B12C s32 dword_CODE_bss_8007B12C; //CODE.bss:8007B130 -s32 dword_CODE_bss_8007B130; +s32 dword_CODE_bss_8007B130; //stanladder s1 //CODE.bss:8007B134 char dword_CODE_bss_8007B134; char dword_CODE_bss_8007B135; @@ -33,10 +34,10 @@ char dword_CODE_bss_8007B137; char dword_CODE_bss_8007B138[0x21C]; //CODE.bss:8007B354 s32 dword_CODE_bss_8007B354; -//CODE.bss:8007B358 +//CODE.bss:8007B358 //stan list array s32 dword_CODE_bss_8007B358[0x1a1]; //CODE.bss:8007B9DC -s32 dword_CODE_bss_8007B9DC; +s32 dword_CODE_bss_8007B9DC; //region? //CODE.bss:8007B9E0 s32 dword_CODE_bss_8007B9E0; @@ -70,11 +71,11 @@ StandTile *bfsTileStack[352]; // data -//D:80040F30 -u8 D_80040F30[] = { - 0x8D, 0x86, 0x04, 0xC5, - 0x9D, 0xA4, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, +//D:80040F30 //stanladder related +u8 D_80040F30[] = { + 0x8D, 0x86, 0x04, 0xC5, + 0x9D, 0xA4, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; @@ -95,13 +96,13 @@ struct StandTile * standTileStart = NULL; //D:80040F5C s32 ptr_firstroom_0 = 0; //D:80040F60 -s32 D_80040F60 = 0; +struct StanPrefixRecord* D_80040F60 = 0; //D:80040F64 s32 D_80040F64[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //D:80040FAC s32 D_80040FAC = 0; //D:80040FB0 -s32 stanLoaded = 0; +s32 m_stanRegion = 0; //D:80040FB4 s32 stanlinelog_flag = 0; @@ -174,6 +175,7 @@ s32 stanBitwiseCastF32(f32 arg0) } #ifdef NONMATCHING +// maybe getstanroomID and returns a string s32 sub_GAME_7F0AEF3C(void *arg0) { s32 sp24; s32 temp_a1; @@ -204,7 +206,7 @@ GLOBAL_ASM( glabel sub_GAME_7F0AEF3C /* 0E3A6C 7F0AEF3C 3C068004 */ lui $a2, %hi(D_80040FAC) /* 0E3A70 7F0AEF40 8CC60FAC */ lw $a2, %lo(D_80040FAC)($a2) -/* 0E3A74 7F0AEF44 3C0F8004 */ lui $t7, %hi(D_80040F64) +/* 0E3A74 7F0AEF44 3C0F8004 */ lui $t7, %hi(D_80040F64) /* 0E3A78 7F0AEF48 27BDFFD8 */ addiu $sp, $sp, -0x28 /* 0E3A7C 7F0AEF4C 000670C0 */ sll $t6, $a2, 3 /* 0E3A80 7F0AEF50 25EF0F64 */ addiu $t7, %lo(D_80040F64) # addiu $t7, $t7, 0xf64 @@ -244,7 +246,7 @@ glabel sub_GAME_7F0AEF3C /* 0E3B00 7F0AEFD0 8FA20024 */ lw $v0, 0x24($sp) /* 0E3B04 7F0AEFD4 27BD0028 */ addiu $sp, $sp, 0x28 /* 0E3B08 7F0AEFD8 03E00008 */ jr $ra -/* 0E3B0C 7F0AEFDC 00000000 */ nop +/* 0E3B0C 7F0AEFDC 00000000 */ nop ) #endif @@ -252,10 +254,21 @@ glabel sub_GAME_7F0AEF3C void sub_GAME_7F0AEFE0(void) { - sub_GAME_7F0AEF3C(); + sub_GAME_7F0AEF3C(); //maybe getstanroomID } +//stanChecksf u32 stanRemovedAnimationRoutine(s32 arg0) { + /* + if (arg0 < g_someinteger) + { + printf("checksf: ERROR line %d %08x<%08x",__LINE__,arg0,g_someInteger); + } + if (arg0 > g_someinteger2) + { + printf("checksf: ERROR line %d %08x>%08x",__LINE__,arg0,g_someinteger2); + } + */ return 0; } @@ -281,8 +294,8 @@ void sub_GAME_7F0AF038(void) { s32 temp_s0_5; void *temp_a0; void *phi_v1; - s32 phi_a1; - void *phi_a0; + s32 curroom; + void *firststan; void *phi_s3; void *phi_s5; s16 phi_s0; @@ -314,46 +327,48 @@ loop_1: if (*stan_prefix.ptr_firstroom != 0) { // Node 3 - phi_a1 = 0xff; - phi_a0 = stan_prefix.ptr_firstroom; - phi_a2 = 0xff; + curroom = 0xff; + firststan = stan_prefix.ptr_firstroom; + curroom = 0xff; loop_4: // Node 4 - temp_s0 = phi_a0->unk3; - phi_a1 = phi_a1; - if (phi_a1 != temp_s0) + temp_s0 = firststan->unk3; + curroom = curroom; + if (curroom != temp_s0) { // Node 5 - temp_a2 = (temp_s0 & 0xff); - if (temp_a2 >= dword_CODE_bss_8007B9DC) + curroom = (temp_s0 & 0xff); + //assert(curroom= dword_CODE_bss_8007B9DC) { // Node 6 - dword_CODE_bss_8007B9DC = (s32) (temp_a2 + 1); + dword_CODE_bss_8007B9DC = (s32) (curroom + 1); } + // assert(firststaninroom[curroom]==NULL); // Node 7 - *(&dword_CODE_bss_8007B128 + (temp_a2 * 4)) = (void *) phi_a0; - temp_s0_2 = (&dword_CODE_bss_8007B358 + (temp_a2 * 0xc)); + *(&firststaninroom + (curroom * 4)) = (void *) firststan; + temp_s0_2 = (&dword_CODE_bss_8007B358 + (curroom * 0xc)); temp_s0_2->unk4 = (u16)0x7fff; temp_s0_2->unkA = (u16)-0x8000; temp_s0_2->unk2 = (s16) temp_s0_2->unk4; *temp_s0_2 = (s16) temp_s0_2->unk4; temp_s0_2->unk8 = (s16) temp_s0_2->unkA; temp_s0_2->unk6 = (s16) temp_s0_2->unkA; - phi_a1 = temp_a2; - phi_a2 = temp_a2; + curroom = curroom; + curroom = curroom; } // Node 8 - temp_s0_4 = (((s32) phi_a0->unk6 >> 0xc) & 0xf); + temp_s0_4 = (((s32) firststan->unk6 >> 0xc) & 0xf); phi_s0_2 = temp_s0_4; if (temp_s0_4 > 0) { // Node 9 phi_v1_2 = 0; - phi_s1 = phi_a0; + phi_s1 = firststan; loop_10: // Node 10 phi_s3 = phi_s1; - phi_s5 = (&dword_CODE_bss_8007B358 + (((phi_a2 * 4) - phi_a2) * 4)); + phi_s5 = (&dword_CODE_bss_8007B358 + (((curroom * 4) - curroom) * 4)); phi_s2 = 0; loop_11: // Node 11 @@ -382,7 +397,7 @@ loop_11: } // Node 16 temp_v1_2 = (phi_v1_2 + 1); - temp_s0_5 = (((s32) phi_a0->unk6 >> 0xc) & 0xf); + temp_s0_5 = (((s32) firststan->unk6 >> 0xc) & 0xf); phi_v1_2 = temp_v1_2; phi_s0_2 = temp_s0_5; phi_s1 = (phi_s1 + 8); @@ -392,9 +407,9 @@ loop_11: } } // Node 17 - temp_a0 = (*(&list_of_tilesizes + phi_s0_2) + phi_a0); - phi_a0 = temp_a0; - phi_a2 = phi_a2; + temp_a0 = (*(&list_of_tilesizes + phi_s0_2) + firststan); + firststan = temp_a0; + curroom = curroom; if (*temp_a0 != 0) { goto loop_4; @@ -413,7 +428,7 @@ glabel sub_GAME_7F0AF038 /* 0E3B70 7F0AF040 24E7B9DC */ addiu $a3, %lo(dword_CODE_bss_8007B9DC) # addiu $a3, $a3, -0x4624 /* 0E3B74 7F0AF044 ACE00000 */ sw $zero, ($a3) /* 0E3B78 7F0AF048 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B12C) -/* 0E3B7C 7F0AF04C AC20B128 */ sw $zero, %lo(dword_CODE_bss_8007B128)($at) +/* 0E3B7C 7F0AF04C AC20B128 */ sw $zero, %lo(firststaninroom)($at) /* 0E3B80 7F0AF050 AC20B12C */ sw $zero, %lo(dword_CODE_bss_8007B12C)($at) /* 0E3B84 7F0AF054 3C018008 */ lui $at, %hi(dword_CODE_bss_8007B130) /* 0E3B88 7F0AF058 3C038008 */ lui $v1, %hi(dword_CODE_bss_8007B134) @@ -435,9 +450,9 @@ glabel sub_GAME_7F0AF038 /* 0E3BC4 7F0AF094 AC60FFF8 */ sw $zero, -8($v1) /* 0E3BC8 7F0AF098 1462FFFB */ bne $v1, $v0, .L7F0AF088 /* 0E3BCC 7F0AF09C AC60FFFC */ sw $zero, -4($v1) -/* 0E3BD0 7F0AF0A0 3C0E8008 */ lui $t6, %hi(stan_prefix) +/* 0E3BD0 7F0AF0A0 3C0E8008 */ lui $t6, %hi(stan_prefix) /* 0E3BD4 7F0AF0A4 8DCEB120 */ lw $t6, %lo(stan_prefix)($t6) -/* 0E3BD8 7F0AF0A8 3C0D8004 */ lui $t5, %hi(list_of_tilesizes) +/* 0E3BD8 7F0AF0A8 3C0D8004 */ lui $t5, %hi(list_of_tilesizes) /* 0E3BDC 7F0AF0AC 25AD0F4C */ addiu $t5, %lo(list_of_tilesizes) # addiu $t5, $t5, 0xf4c /* 0E3BE0 7F0AF0B0 8DC40004 */ lw $a0, 4($t6) /* 0E3BE4 7F0AF0B4 00C02825 */ move $a1, $a2 @@ -446,9 +461,9 @@ glabel sub_GAME_7F0AF038 /* 0E3BF0 7F0AF0C0 240B7FFF */ li $t3, 32767 /* 0E3BF4 7F0AF0C4 240A000C */ li $t2, 12 /* 0E3BF8 7F0AF0C8 11E00048 */ beqz $t7, .L7F0AF1EC -/* 0E3BFC 7F0AF0CC 3C098008 */ lui $t1, %hi(dword_CODE_bss_8007B358) -/* 0E3C00 7F0AF0D0 3C088008 */ lui $t0, %hi(dword_CODE_bss_8007B128) -/* 0E3C04 7F0AF0D4 2508B128 */ addiu $t0, %lo(dword_CODE_bss_8007B128) # addiu $t0, $t0, -0x4ed8 +/* 0E3BFC 7F0AF0CC 3C098008 */ lui $t1, %hi(dword_CODE_bss_8007B358) +/* 0E3C00 7F0AF0D0 3C088008 */ lui $t0, %hi(firststaninroom) +/* 0E3C04 7F0AF0D4 2508B128 */ addiu $t0, %lo(firststaninroom) # addiu $t0, $t0, -0x4ed8 /* 0E3C08 7F0AF0D8 2529B358 */ addiu $t1, %lo(dword_CODE_bss_8007B358) # addiu $t1, $t1, -0x4ca8 /* 0E3C0C 7F0AF0DC 24020006 */ li $v0, 6 /* 0E3C10 7F0AF0E0 90900003 */ lbu $s0, 3($a0) @@ -506,7 +521,7 @@ glabel sub_GAME_7F0AF038 /* 0E3CC8 7F0AF198 26730002 */ addiu $s3, $s3, 2 /* 0E3CCC 7F0AF19C 0330082A */ slt $at, $t9, $s0 /* 0E3CD0 7F0AF1A0 10200002 */ beqz $at, .L7F0AF1AC -/* 0E3CD4 7F0AF1A4 00000000 */ nop +/* 0E3CD4 7F0AF1A4 00000000 */ nop /* 0E3CD8 7F0AF1A8 A6B00006 */ sh $s0, 6($s5) .L7F0AF1AC: /* 0E3CDC 7F0AF1AC 1642FFF1 */ bne $s2, $v0, .L7F0AF174 @@ -543,9 +558,118 @@ glabel sub_GAME_7F0AF038 #ifdef NONMATCHING -void sub_GAME_7F0AF20C(void) { +void sub_GAME_7F0AF20C(void) +{ + float fVar1; + bool bVar2; + int iVar3; + double dVar4; + float *pfStack00000014; + int iStack0000001c; + float *pfStack00000024; + dword local_c0; + dword local_70; + dword local_6c; + int *local_68; + int *local_64; + short local_60; + short local_5e; + short local_5c; + float local_58; + float local_54; + float local_50; + float local_48 [2]; + float local_40; + float local_3c; + uint local_38; + int local_34; + float local_30; + int *local_2c; + int local_28; + float local_24; + qword local_20; + qword local_18; + qword local_10; + dword local_8; + local_68 = NULL; + local_3c = -3.402823e+38; + bVar2 = false; + local_58 = *param_1 * level_scale; + local_54 = param_1[1] * level_scale; + local_50 = param_1[2] * level_scale; + if (32767.0 < local_54) { + local_54 = 32767.0; + } + if (local_54 < -32767.0) { + local_54 = -32767.0; + } + local_20._6_2_ = local_58; + local_60 = local_20._6_2_; + local_18._6_2_ = local_54; + local_5e = local_18._6_2_; + local_10._6_2_ = local_50; + local_5c = local_10._6_2_; + local_38 = 0; + pfStack00000014 = param_1; + iStack0000001c = param_2; + pfStack00000024 = param_3; + do { + if (DAT_83aa0290 <= local_38) { + if ((local_68 != NULL) && (pfStack00000024 != NULL)) { + *pfStack00000024 = local_3c; + } + return local_68; + } + if (((((firststaninroom[local_38] != NULL) && + (stanfileRecord_ARRAY_83aa0a58[local_38].id <= local_60)) && + (local_60 <= stanfileRecord_ARRAY_83aa0a58[local_38].tail)) && + ((stanfileRecord_ARRAY_83aa0a58[local_38].mid <= local_5c && + (local_5c <= *(&stanfileRecord_ARRAY_83aa0a58[local_38].points + 2))))) && + (stanfileRecord_ARRAY_83aa0a58[local_38].id2 <= local_5e)) { + if (iStack0000001c == 0) { +LAB_8238358c: + for (local_2c = firststaninroom[local_38]; (*local_2c != 0 && (*(local_2c + 3) == local_38)) + ; local_2c = getNextStan(local_2c)) { + for (local_28 = 0; local_28 < 3; local_28 = local_28 + 1) { + dVar4 = getShortest2dDispToInfTripleEdge(local_58,local_50,local_2c,local_28); + if (dVar4 < -2.0) goto LAB_823835a8; + if (dVar4 < 2.0) { + bVar2 = true; + } + } + iVar3 = sub_GAME_7F0AF760(local_2c); + if (iVar3 == 0) { + if (bVar2) { + getTileMidPoint(local_2c,local_48); + local_64 = local_2c; + iVar3 = walkTilesBetweenPoints_NoCallback + (local_48[0],local_40,*pfStack00000014,pfStack00000014[2],&local_64) + ; + if ((iVar3 == 0) || (local_64 != local_2c)) goto LAB_823835a8; + } + dVar4 = stanGetPositionYValue(*pfStack00000014,pfStack00000014[2],local_2c); + fVar1 = dVar4; + if ((fVar1 <= pfStack00000014[1]) && (local_3c < fVar1)) { + local_68 = local_2c; + local_3c = fVar1; + } + } +LAB_823835a8: + } + } + else { + for (local_28 = 0; (*(iStack0000001c + local_28) != -1 && (local_28 < 4)); + local_28 = local_28 + 1) { + if (*(iStack0000001c + local_28) == local_38) goto LAB_8238358c; + } + } + } + local_38 = local_38 + 1; + } while( true ); } + + #else GLOBAL_ASM( .late_rodata @@ -582,11 +706,11 @@ glabel sub_GAME_7F0AF20C /* 0E3D94 7F0AF264 C4200F44 */ lwc1 $f0, %lo(level_scale)($at) /* 0E3D98 7F0AF268 C4840000 */ lwc1 $f4, ($a0) /* 0E3D9C 7F0AF26C 0080A025 */ move $s4, $a0 -/* 0E3DA0 7F0AF270 3C178004 */ lui $s7, %hi(list_of_tilesizes) +/* 0E3DA0 7F0AF270 3C178004 */ lui $s7, %hi(list_of_tilesizes) /* 0E3DA4 7F0AF274 46002182 */ mul.s $f6, $f4, $f0 -/* 0E3DA8 7F0AF278 3C0A8008 */ lui $t2, %hi(dword_CODE_bss_8007B128) +/* 0E3DA8 7F0AF278 3C0A8008 */ lui $t2, %hi(firststaninroom) /* 0E3DAC 7F0AF27C 3C018006 */ lui $at, %hi(D_800585D4) -/* 0E3DB0 7F0AF280 254AB128 */ addiu $t2, %lo(dword_CODE_bss_8007B128) # addiu $t2, $t2, -0x4ed8 +/* 0E3DB0 7F0AF280 254AB128 */ addiu $t2, %lo(firststaninroom) # addiu $t2, $t2, -0x4ed8 /* 0E3DB4 7F0AF284 26F70F4C */ addiu $s7, %lo(list_of_tilesizes) # addiu $s7, $s7, 0xf4c /* 0E3DB8 7F0AF288 24130003 */ li $s3, 3 /* 0E3DBC 7F0AF28C 241600FF */ li $s6, 255 @@ -600,7 +724,7 @@ glabel sub_GAME_7F0AF20C /* 0E3DDC 7F0AF2AC 24040004 */ li $a0, 4 /* 0E3DE0 7F0AF2B0 46008482 */ mul.s $f18, $f16, $f0 /* 0E3DE4 7F0AF2B4 4604103C */ c.lt.s $f2, $f4 -/* 0E3DE8 7F0AF2B8 00000000 */ nop +/* 0E3DE8 7F0AF2B8 00000000 */ nop /* 0E3DEC 7F0AF2BC 45000002 */ bc1f .L7F0AF2C8 /* 0E3DF0 7F0AF2C0 E7B200C0 */ swc1 $f18, 0xc0($sp) /* 0E3DF4 7F0AF2C4 E7A200BC */ swc1 $f2, 0xbc($sp) @@ -639,7 +763,7 @@ glabel sub_GAME_7F0AF20C /* 0E3E6C 7F0AF33C 00156080 */ sll $t4, $s5, 2 /* 0E3E70 7F0AF340 01956023 */ subu $t4, $t4, $s5 /* 0E3E74 7F0AF344 8D650000 */ lw $a1, ($t3) -/* 0E3E78 7F0AF348 3C0D8008 */ lui $t5, %hi(dword_CODE_bss_8007B358) +/* 0E3E78 7F0AF348 3C0D8008 */ lui $t5, %hi(dword_CODE_bss_8007B358) /* 0E3E7C 7F0AF34C 25ADB358 */ addiu $t5, %lo(dword_CODE_bss_8007B358) # addiu $t5, $t5, -0x4ca8 /* 0E3E80 7F0AF350 10A0007B */ beqz $a1, .L7F0AF540 /* 0E3E84 7F0AF354 000C6080 */ sll $t4, $t4, 2 @@ -676,7 +800,7 @@ glabel sub_GAME_7F0AF20C /* 0E3F00 7F0AF3D0 00008025 */ move $s0, $zero /* 0E3F04 7F0AF3D4 01C01021 */ addu $v0, $t6, $zero /* 0E3F08 7F0AF3D8 12CF000D */ beq $s6, $t7, .L7F0AF410 -/* 0E3F0C 7F0AF3DC 00000000 */ nop +/* 0E3F0C 7F0AF3DC 00000000 */ nop /* 0E3F10 7F0AF3E0 91C30000 */ lbu $v1, ($t6) .L7F0AF3E4: /* 0E3F14 7F0AF3E4 56A30004 */ bnel $s5, $v1, .L7F0AF3F8 @@ -688,9 +812,9 @@ glabel sub_GAME_7F0AF20C /* 0E3F28 7F0AF3F8 26100001 */ addiu $s0, $s0, 1 /* 0E3F2C 7F0AF3FC 24420001 */ addiu $v0, $v0, 1 /* 0E3F30 7F0AF400 12C30003 */ beq $s6, $v1, .L7F0AF410 -/* 0E3F34 7F0AF404 00000000 */ nop +/* 0E3F34 7F0AF404 00000000 */ nop /* 0E3F38 7F0AF408 1604FFF6 */ bne $s0, $a0, .L7F0AF3E4 -/* 0E3F3C 7F0AF40C 00000000 */ nop +/* 0E3F3C 7F0AF40C 00000000 */ nop .L7F0AF410: /* 0E3F40 7F0AF410 1000004C */ b .L7F0AF544 /* 0E3F44 7F0AF414 8FAE0070 */ lw $t6, 0x70($sp) @@ -698,7 +822,7 @@ glabel sub_GAME_7F0AF20C .L7F0AF41C: /* 0E3F4C 7F0AF41C 00A08825 */ move $s1, $a1 /* 0E3F50 7F0AF420 13000044 */ beqz $t8, .L7F0AF534 -/* 0E3F54 7F0AF424 00000000 */ nop +/* 0E3F54 7F0AF424 00000000 */ nop /* 0E3F58 7F0AF428 90B90003 */ lbu $t9, 3($a1) /* 0E3F5C 7F0AF42C 16B90041 */ bne $s5, $t9, .L7F0AF534 /* 0E3F60 7F0AF430 00008025 */ move $s0, $zero @@ -716,9 +840,9 @@ glabel sub_GAME_7F0AF20C /* 0E3F88 7F0AF458 4503002B */ bc1tl .L7F0AF508 /* 0E3F8C 7F0AF45C 86220006 */ lh $v0, 6($s1) /* 0E3F90 7F0AF460 4616003C */ c.lt.s $f0, $f22 -/* 0E3F94 7F0AF464 00000000 */ nop +/* 0E3F94 7F0AF464 00000000 */ nop /* 0E3F98 7F0AF468 45000002 */ bc1f .L7F0AF474 -/* 0E3F9C 7F0AF46C 00000000 */ nop +/* 0E3F9C 7F0AF46C 00000000 */ nop /* 0E3FA0 7F0AF470 24120001 */ li $s2, 1 .L7F0AF474: /* 0E3FA4 7F0AF474 5613FFF0 */ bnel $s0, $s3, .L7F0AF438 @@ -749,11 +873,11 @@ glabel sub_GAME_7F0AF20C /* 0E4004 7F0AF4D4 8E860008 */ lw $a2, 8($s4) /* 0E4008 7F0AF4D8 C6920004 */ lwc1 $f18, 4($s4) /* 0E400C 7F0AF4DC 4600903C */ c.lt.s $f18, $f0 -/* 0E4010 7F0AF4E0 00000000 */ nop +/* 0E4010 7F0AF4E0 00000000 */ nop /* 0E4014 7F0AF4E4 45030008 */ bc1tl .L7F0AF508 /* 0E4018 7F0AF4E8 86220006 */ lh $v0, 6($s1) /* 0E401C 7F0AF4EC 4600C03C */ c.lt.s $f24, $f0 -/* 0E4020 7F0AF4F0 00000000 */ nop +/* 0E4020 7F0AF4F0 00000000 */ nop /* 0E4024 7F0AF4F4 45020004 */ bc1fl .L7F0AF508 /* 0E4028 7F0AF4F8 86220006 */ lh $v0, 6($s1) /* 0E402C 7F0AF4FC AFB1009C */ sw $s1, 0x9c($sp) @@ -768,7 +892,7 @@ glabel sub_GAME_7F0AF20C /* 0E4048 7F0AF518 01918821 */ addu $s1, $t4, $s1 /* 0E404C 7F0AF51C 8E2D0000 */ lw $t5, ($s1) /* 0E4050 7F0AF520 11A00004 */ beqz $t5, .L7F0AF534 -/* 0E4054 7F0AF524 00000000 */ nop +/* 0E4054 7F0AF524 00000000 */ nop /* 0E4058 7F0AF528 922F0003 */ lbu $t7, 3($s1) /* 0E405C 7F0AF52C 52AFFFC1 */ beql $s5, $t7, .L7F0AF434 /* 0E4060 7F0AF530 00008025 */ move $s0, $zero @@ -818,10 +942,10 @@ glabel sub_GAME_7F0AF20C #ifdef NONMATCHING -void stanLoadFile(void *arg0) { - stanLoaded = 1; +void stanLoadFile(StanPrefixRecord *arg0) { + m_stanRegion = 1; stan_prefix.stanfile = arg0; - standTileStart = (s32) (arg0->unk4 + -0x80); + standTileStart = (s32) (arg0->ptr_firstroom + -0x10); if (tokenFind(1, "-stanlinelog") != 0) { stanlinelog_flag = 1; @@ -836,10 +960,10 @@ GLOBAL_ASM( glabel stanLoadFile /* 0E40E8 7F0AF5B8 3C028008 */ lui $v0, %hi(stan_prefix) /* 0E40EC 7F0AF5BC 240E0001 */ li $t6, 1 -/* 0E40F0 7F0AF5C0 3C018004 */ lui $at, %hi(stanLoaded) +/* 0E40F0 7F0AF5C0 3C018004 */ lui $at, %hi(m_stanRegion) /* 0E40F4 7F0AF5C4 2442B120 */ addiu $v0, %lo(stan_prefix) # addiu $v0, $v0, -0x4ee0 /* 0E40F8 7F0AF5C8 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0E40FC 7F0AF5CC AC2E0FB0 */ sw $t6, %lo(stanLoaded)($at) +/* 0E40FC 7F0AF5CC AC2E0FB0 */ sw $t6, %lo(m_stanRegion)($at) /* 0E4100 7F0AF5D0 AFBF0014 */ sw $ra, 0x14($sp) /* 0E4104 7F0AF5D4 AC440000 */ sw $a0, ($v0) /* 0E4108 7F0AF5D8 8C980004 */ lw $t8, 4($a0) @@ -856,15 +980,15 @@ glabel stanLoadFile /* 0E4134 7F0AF604 AC280FB4 */ sw $t0, %lo(stanlinelog_flag)($at) .L7F0AF608: /* 0E4138 7F0AF608 0FC2BC0E */ jal sub_GAME_7F0AF038 -/* 0E413C 7F0AF60C 00000000 */ nop +/* 0E413C 7F0AF60C 00000000 */ nop /* 0E4140 7F0AF610 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 0E4144 7F0AF614 44816000 */ mtc1 $at, $f12 /* 0E4148 7F0AF618 0FC2CA54 */ jal setLevelScale -/* 0E414C 7F0AF61C 00000000 */ nop +/* 0E414C 7F0AF61C 00000000 */ nop /* 0E4150 7F0AF620 8FBF0014 */ lw $ra, 0x14($sp) /* 0E4154 7F0AF624 27BD0018 */ addiu $sp, $sp, 0x18 /* 0E4158 7F0AF628 03E00008 */ jr $ra -/* 0E415C 7F0AF62C 00000000 */ nop +/* 0E415C 7F0AF62C 00000000 */ nop ) #endif @@ -872,8 +996,31 @@ glabel stanLoadFile +//stanRegion() +void sub_GAME_7F0AF630(s32 arg0) +{ +#ifdef DEBUG -void sub_GAME_7F0AF630(s32 arg0) { + if (arg0 < 0) + { + if (*(stanPrefix->ptr_firstroom)[m_stanRegion - 1]) + { + m_stanRegion --; + } + } + else if (arg0 < 1) + { + if (arg0 == 0) + { + m_stanRegion = 1; + } + } + else if (*(stanPrefix->ptr_firstroom)[m_stanRegion + 1]) + { + m_stanRegion ++; + } + osSyncPrintf("stanRegion(): region=%d",m_stanRegion); +#endif return; } @@ -883,6 +1030,7 @@ void sub_GAME_7F0AF630(s32 arg0) { #ifdef NONMATCHING +//stanFillin() s32 sub_GAME_7F0AF638(s32 arg0, s32 arg1, void *arg2) { s32 temp_s4; void *temp_s3; @@ -995,6 +1143,13 @@ loop_5: } // Node 10 return phi_s7; + + /*somewhere in this function a loop is checked for overflow + if (uStack < local_20) + { + printf("stanFillin: Stack overflow %d>%d",local_20,uStack); + } + */ } #else GLOBAL_ASM( @@ -1039,7 +1194,7 @@ glabel sub_GAME_7F0AF638 /* 0E41F0 7F0AF6C0 00054303 */ sra $t0, $a1, 0xc /* 0E41F4 7F0AF6C4 3105000F */ andi $a1, $t0, 0xf /* 0E41F8 7F0AF6C8 18A00017 */ blez $a1, .L7F0AF728 -/* 0E41FC 7F0AF6CC 00000000 */ nop +/* 0E41FC 7F0AF6CC 00000000 */ nop .L7F0AF6D0: /* 0E4200 7F0AF6D0 9482000E */ lhu $v0, 0xe($a0) /* 0E4204 7F0AF6D4 26100001 */ addiu $s0, $s0, 1 @@ -1109,7 +1264,7 @@ s32 sub_GAME_7F0AF760(StandTile *tile) { struct int3 AB; struct int3 AC; - + iA = (tile->hdrTail >> 0x8 & 0xf); // t1 iB = (tile->hdrTail >> 0x4 & 0xf); // t0 // Actually saving iC somewhere has prevented it being computed early @@ -1123,9 +1278,9 @@ s32 sub_GAME_7F0AF760(StandTile *tile) { AC.x = (tile->points[iC].x - tile->points[iA].x); AC.y = 0; AC.z = (tile->points[iC].z - tile->points[iA].z); - + crossProduct = ((AB.z * AC.x) - (AB.x * AC.z)); // potential overflow. - + return (crossProduct == 0); } @@ -1167,8 +1322,8 @@ glabel sub_GAME_7F0AF760 /* 0E4308 7F0AF7D8 8FAE0014 */ lw $t6, 0x14($sp) /* 0E430C 7F0AF7DC AFB80010 */ sw $t8, 0x10($sp) /* 0E4310 7F0AF7E0 00006012 */ mflo $t4 -/* 0E4314 7F0AF7E4 00000000 */ nop -/* 0E4318 7F0AF7E8 00000000 */ nop +/* 0E4314 7F0AF7E4 00000000 */ nop +/* 0E4318 7F0AF7E8 00000000 */ nop /* 0E431C 7F0AF7EC 030E0019 */ multu $t8, $t6 /* 0E4320 7F0AF7F0 00007812 */ mflo $t7 /* 0E4324 7F0AF7F4 018FC023 */ subu $t8, $t4, $t7 @@ -1228,7 +1383,7 @@ GLOBAL_ASM( .text glabel sub_GAME_7F0AF808 /* 0E4338 7F0AF808 27BDFFA8 */ addiu $sp, $sp, -0x58 -/* 0E433C 7F0AF80C 3C0E8008 */ lui $t6, %hi(stan_prefix) +/* 0E433C 7F0AF80C 3C0E8008 */ lui $t6, %hi(stan_prefix) /* 0E4340 7F0AF810 8DCEB120 */ lw $t6, %lo(stan_prefix)($t6) /* 0E4344 7F0AF814 AFBF0044 */ sw $ra, 0x44($sp) /* 0E4348 7F0AF818 AFB20040 */ sw $s2, 0x40($sp) @@ -1274,7 +1429,7 @@ glabel sub_GAME_7F0AF808 /* 0E43E4 7F0AF8B4 0FC2CA5C */ jal stanGetPositionYValue /* 0E43E8 7F0AF8B8 02002025 */ move $a0, $s0 /* 0E43EC 7F0AF8BC 461A003C */ c.lt.s $f0, $f26 -/* 0E43F0 7F0AF8C0 00000000 */ nop +/* 0E43F0 7F0AF8C0 00000000 */ nop /* 0E43F4 7F0AF8C4 45020004 */ bc1fl .L7F0AF8D8 /* 0E43F8 7F0AF8C8 86020006 */ lh $v0, 6($s0) /* 0E43FC 7F0AF8CC 1000000B */ b .L7F0AF8FC @@ -1361,7 +1516,7 @@ glabel getTileMidPoint /* 0E4498 7F0AF968 008D4021 */ addu $t0, $a0, $t5 /* 0E449C 7F0AF96C 850C0008 */ lh $t4, 8($t0) /* 0E44A0 7F0AF970 468021A0 */ cvt.s.w $f6, $f4 -/* 0E44A4 7F0AF974 3C0B8004 */ lui $t3, %hi(inv_level_scale) +/* 0E44A4 7F0AF974 3C0B8004 */ lui $t3, %hi(inv_level_scale) /* 0E44A8 7F0AF978 448C9000 */ mtc1 $t4, $f18 /* 0E44AC 7F0AF97C 256B0F48 */ addiu $t3, %lo(inv_level_scale) # addiu $t3, $t3, 0xf48 /* 0E44B0 7F0AF980 468042A0 */ cvt.s.w $f10, $f8 @@ -1413,11 +1568,15 @@ glabel getTileMidPoint #ifdef NONMATCHING // Saves a1 (tripleIndex) to the stack completely unnecessarily // Otherwise just regalloc, but maybe that alone fixes it. -void getPointJustInsideOfTileTriple(StandTile *tile, s32 tripleIndex, coord3d* pnt) +void getPointJustInsideOfTileTriple(StandTile *tile, s32 tripleIndex /*canonically c */, coord3d* pnt) { coord3d midPoint; s32 pntIndex; + #ifdef DEBUG + assert(c<3); + #endif + pntIndex = STAN_TRIPLE_TO_PNT_INDEX(tile, tripleIndex); pnt->x = tile->points[pntIndex].x * inv_level_scale; @@ -1464,14 +1623,14 @@ glabel getPointJustInsideOfTileTriple /* 0E4598 7F0AFA68 844B000A */ lh $t3, 0xa($v0) /* 0E459C 7F0AFA6C C4640000 */ lwc1 $f4, ($v1) /* 0E45A0 7F0AFA70 448B8000 */ mtc1 $t3, $f16 -/* 0E45A4 7F0AFA74 00000000 */ nop +/* 0E45A4 7F0AFA74 00000000 */ nop /* 0E45A8 7F0AFA78 468084A0 */ cvt.s.w $f18, $f16 /* 0E45AC 7F0AFA7C 46049182 */ mul.s $f6, $f18, $f4 /* 0E45B0 7F0AFA80 E4C60004 */ swc1 $f6, 4($a2) /* 0E45B4 7F0AFA84 844C000C */ lh $t4, 0xc($v0) /* 0E45B8 7F0AFA88 C4700000 */ lwc1 $f16, ($v1) /* 0E45BC 7F0AFA8C 448C4000 */ mtc1 $t4, $f8 -/* 0E45C0 7F0AFA90 00000000 */ nop +/* 0E45C0 7F0AFA90 00000000 */ nop /* 0E45C4 7F0AFA94 468042A0 */ cvt.s.w $f10, $f8 /* 0E45C8 7F0AFA98 46105482 */ mul.s $f18, $f10, $f16 /* 0E45CC 7F0AFA9C E4D20008 */ swc1 $f18, 8($a2) @@ -1491,21 +1650,21 @@ glabel getPointJustInsideOfTileTriple /* 0E4604 7F0AFAD4 E4D00000 */ swc1 $f16, ($a2) /* 0E4608 7F0AFAD8 C7B20020 */ lwc1 $f18, 0x20($sp) /* 0E460C 7F0AFADC 46009102 */ mul.s $f4, $f18, $f0 -/* 0E4610 7F0AFAE0 00000000 */ nop +/* 0E4610 7F0AFAE0 00000000 */ nop /* 0E4614 7F0AFAE4 46081182 */ mul.s $f6, $f2, $f8 /* 0E4618 7F0AFAE8 C4C80008 */ lwc1 $f8, 8($a2) /* 0E461C 7F0AFAEC 46062280 */ add.s $f10, $f4, $f6 /* 0E4620 7F0AFAF0 E4CA0004 */ swc1 $f10, 4($a2) /* 0E4624 7F0AFAF4 C7B00024 */ lwc1 $f16, 0x24($sp) /* 0E4628 7F0AFAF8 46008482 */ mul.s $f18, $f16, $f0 -/* 0E462C 7F0AFAFC 00000000 */ nop +/* 0E462C 7F0AFAFC 00000000 */ nop /* 0E4630 7F0AFB00 46081102 */ mul.s $f4, $f2, $f8 /* 0E4634 7F0AFB04 46049180 */ add.s $f6, $f18, $f4 /* 0E4638 7F0AFB08 E4C60008 */ swc1 $f6, 8($a2) /* 0E463C 7F0AFB0C 8FBF0014 */ lw $ra, 0x14($sp) /* 0E4640 7F0AFB10 27BD0028 */ addiu $sp, $sp, 0x28 /* 0E4644 7F0AFB14 03E00008 */ jr $ra -/* 0E4648 7F0AFB18 00000000 */ nop +/* 0E4648 7F0AFB18 00000000 */ nop ) #endif @@ -1513,45 +1672,22 @@ glabel getPointJustInsideOfTileTriple -#ifdef NONMATCHING -// Missing addiu sp, sp, -0x10 : I can't get it to use the stack at all. +/* +* Address: 0x7F0AFB1C + */ f32 sub_GAME_7F0AFB1C(coord3d *p,coord3d *q) { - f32 xDiff = q->x - p->x; - f32 yDiff = q->y - p->y; - f32 zDiff = q->z - p->z; - - return xDiff*xDiff + yDiff*yDiff + zDiff*zDiff; + // Should be a coord3d or vec3d, but they used an array which + // causes lots of data reads and writes to the stack. + f32 components[3]; + + components[0] = q->x - p->x; + components[1] = q->y - p->y; + components[2] = q->z - p->z; + + return components[0]*components[0] + components[1]*components[1] + components[2]*components[2]; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0AFB1C -/* 0E464C 7F0AFB1C C4A40000 */ lwc1 $f4, ($a1) -/* 0E4650 7F0AFB20 C4860000 */ lwc1 $f6, ($a0) -/* 0E4654 7F0AFB24 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 0E4658 7F0AFB28 46062201 */ sub.s $f8, $f4, $f6 -/* 0E465C 7F0AFB2C E7A80004 */ swc1 $f8, 4($sp) -/* 0E4660 7F0AFB30 C4900004 */ lwc1 $f16, 4($a0) -/* 0E4664 7F0AFB34 C4AA0004 */ lwc1 $f10, 4($a1) -/* 0E4668 7F0AFB38 46105481 */ sub.s $f18, $f10, $f16 -/* 0E466C 7F0AFB3C C7AA0004 */ lwc1 $f10, 4($sp) -/* 0E4670 7F0AFB40 E7B20008 */ swc1 $f18, 8($sp) -/* 0E4674 7F0AFB44 C4860008 */ lwc1 $f6, 8($a0) -/* 0E4678 7F0AFB48 C4A40008 */ lwc1 $f4, 8($a1) -/* 0E467C 7F0AFB4C 460A5402 */ mul.s $f16, $f10, $f10 -/* 0E4680 7F0AFB50 C7B20008 */ lwc1 $f18, 8($sp) -/* 0E4684 7F0AFB54 46062201 */ sub.s $f8, $f4, $f6 -/* 0E4688 7F0AFB58 46129102 */ mul.s $f4, $f18, $f18 -/* 0E468C 7F0AFB5C E7A8000C */ swc1 $f8, 0xc($sp) -/* 0E4690 7F0AFB60 C7A8000C */ lwc1 $f8, 0xc($sp) -/* 0E4694 7F0AFB64 27BD0010 */ addiu $sp, $sp, 0x10 -/* 0E4698 7F0AFB68 46084282 */ mul.s $f10, $f8, $f8 -/* 0E469C 7F0AFB6C 46048180 */ add.s $f6, $f16, $f4 -/* 0E46A0 7F0AFB70 03E00008 */ jr $ra -/* 0E46A4 7F0AFB74 46065000 */ add.s $f0, $f10, $f6 -) -#endif + @@ -1580,7 +1716,7 @@ glabel sub_GAME_7F0AFB78 /* 0E46D8 7F0AFBA8 F7B40018 */ sdc1 $f20, 0x18($sp) /* 0E46DC 7F0AFBAC AFA00078 */ sw $zero, 0x78($sp) /* 0E46E0 7F0AFBB0 C4840000 */ lwc1 $f4, ($a0) -/* 0E46E4 7F0AFBB4 3C0E8008 */ lui $t6, %hi(stan_prefix) +/* 0E46E4 7F0AFBB4 3C0E8008 */ lui $t6, %hi(stan_prefix) /* 0E46E8 7F0AFBB8 8DCEB120 */ lw $t6, %lo(stan_prefix)($t6) /* 0E46EC 7F0AFBBC E7A40064 */ swc1 $f4, 0x64($sp) /* 0E46F0 7F0AFBC0 C4A60000 */ lwc1 $f6, ($a1) @@ -1635,7 +1771,7 @@ glabel sub_GAME_7F0AFB78 /* 0E47A4 7F0AFC74 0FC2BEC7 */ jal sub_GAME_7F0AFB1C /* 0E47A8 7F0AFC78 27A50064 */ addiu $a1, $sp, 0x64 /* 0E47AC 7F0AFC7C 4614003C */ c.lt.s $f0, $f20 -/* 0E47B0 7F0AFC80 00000000 */ nop +/* 0E47B0 7F0AFC80 00000000 */ nop /* 0E47B4 7F0AFC84 4502000A */ bc1fl .L7F0AFCB0 /* 0E47B8 7F0AFC88 26100001 */ addiu $s0, $s0, 1 /* 0E47BC 7F0AFC8C C7AA0058 */ lwc1 $f10, 0x58($sp) @@ -1650,7 +1786,7 @@ glabel sub_GAME_7F0AFB78 /* 0E47DC 7F0AFCAC 26100001 */ addiu $s0, $s0, 1 .L7F0AFCB0: /* 0E47E0 7F0AFCB0 161EFFDE */ bne $s0, $fp, .L7F0AFC2C -/* 0E47E4 7F0AFCB4 00000000 */ nop +/* 0E47E4 7F0AFCB4 00000000 */ nop .L7F0AFCB8: /* 0E47E8 7F0AFCB8 86220006 */ lh $v0, 6($s1) .L7F0AFCBC: @@ -1687,12 +1823,13 @@ glabel sub_GAME_7F0AFB78 // Returns the shortest distance from (p_x,p_z) to the infinite extention of tile's index-th edge, projected into XZ. // Where the edge is vertical (or degenerate) they just return the distance between the points. +// cannonically tile is sf and index is ei f32 getShortest2dDispToInfTileEdge(StandTile *tile,s32 index,f32 p_x,f32 p_z) { s32 nextIndex; f32 edge_x; f32 edge_z; - f32 edge_len; + f32 edge_len; //canonically d f32 v_x; f32 v_z; @@ -1704,8 +1841,12 @@ f32 getShortest2dDispToInfTileEdge(StandTile *tile,s32 index,f32 p_x,f32 p_z) struct StandTilePoint* nextPnt; f32 UNUSED; + #ifdef DEBUG + assert(ei> 0xC. + // Perhaps the structure isn't correct but this seems much cleaner than doing an explicit >> 0xC. nextIndex = (index + 1) % STAN_TAIL_E(tile); nextPnt = &tile->points[nextIndex]; @@ -1720,10 +1861,14 @@ f32 getShortest2dDispToInfTileEdge(StandTile *tile,s32 index,f32 p_x,f32 p_z) // They just return the distance between the points, which is sensible and the correct value in 3 dimensions. v_x = p_x - (f32)tile->points[nextIndex].x; v_z = p_z - (f32)tile->points[nextIndex].z; - return sqrtf(v_x * v_x + v_z * v_z); + return sqrtf(v_x * v_x + v_z * v_z); } else { + #ifdef DEBUG + assert(d>0.0f); + #endif + // | (AP x AB) / ||AB|| | = ||PA|| sin(a), // so we're returning the SIGNED displacement crossProduct = ( @@ -1733,7 +1878,7 @@ f32 getShortest2dDispToInfTileEdge(StandTile *tile,s32 index,f32 p_x,f32 p_z) ); return crossProduct / edge_len; } - + } @@ -1747,21 +1892,26 @@ f32 getShortest2dDispToInfTripleEdge(StandTile *tile,s32 start3index,f32 p_x,f32 // Similar to getShortest2dDispToInfTileEdge // 2nd arg must be in {0,1,2} // New name needed though: getShortest2dDispToInfTripleEdge +//same as above, tile is sf, index is ei f32 getShortest2dDispToInfTripleEdge(StandTile *tile,s32 start3index,f32 p_x,f32 p_z) { s32 end3index; // types seem correct, changing introduces more instructions f32 edge_x; // 0x40 (8) - f32 edge_z; // 0x3C + f32 edge_z; // 0x3C f32 edge_len; - s32 currPntI; + s32 currPntI; s32 nextPntI; f32 v_x; f32 v_z; f32 crossProduct; + #ifdef DEBUG + assert(eipoints[nextPntI].x; v_z = p_z - (f32)tile->points[nextPntI].z; - return sqrtf(v_x * v_x + v_z * v_z); + return sqrtf(v_x * v_x + v_z * v_z); } else { + #ifdef DEBUG + assert(d>0.0f); + #endif + // - (AP x AB) / ||AB|| = ||PA|| sin(a) crossProduct = ( edge_z * (p_x - (f32)tile->points[currPntI].x) @@ -1870,7 +2024,7 @@ glabel getShortest2dDispToInfTripleEdge /* 0E4A8C 7F0AFF5C 46089001 */ sub.s $f0, $f18, $f8 /* 0E4A90 7F0AFF60 46065081 */ sub.s $f2, $f10, $f6 /* 0E4A94 7F0AFF64 46000202 */ mul.s $f8, $f0, $f0 -/* 0E4A98 7F0AFF68 00000000 */ nop +/* 0E4A98 7F0AFF68 00000000 */ nop /* 0E4A9C 7F0AFF6C 46021102 */ mul.s $f4, $f2, $f2 /* 0E4AA0 7F0AFF70 0C007DF8 */ jal sqrtf /* 0E4AA4 7F0AFF74 46044300 */ add.s $f12, $f8, $f4 @@ -1881,7 +2035,7 @@ glabel getShortest2dDispToInfTripleEdge /* 0E4AB4 7F0AFF84 C7AA0054 */ lwc1 $f10, 0x54($sp) /* 0E4AB8 7F0AFF88 84CD0008 */ lh $t5, 8($a2) /* 0E4ABC 7F0AFF8C 448C3000 */ mtc1 $t4, $f6 -/* 0E4AC0 7F0AFF90 00000000 */ nop +/* 0E4AC0 7F0AFF90 00000000 */ nop /* 0E4AC4 7F0AFF94 46803220 */ cvt.s.w $f8, $f6 /* 0E4AC8 7F0AFF98 46001187 */ neg.s $f6, $f2 /* 0E4ACC 7F0AFF9C 46085101 */ sub.s $f4, $f10, $f8 @@ -1896,7 +2050,7 @@ glabel getShortest2dDispToInfTripleEdge .L7F0AFFC0: /* 0E4AF0 7F0AFFC0 27BD0048 */ addiu $sp, $sp, 0x48 /* 0E4AF4 7F0AFFC4 03E00008 */ jr $ra -/* 0E4AF8 7F0AFFC8 00000000 */ nop +/* 0E4AF8 7F0AFFC8 00000000 */ nop ) #endif @@ -1907,7 +2061,7 @@ glabel getShortest2dDispToInfTripleEdge f32 getShortest2dDispToInfTileEdgeUnscaled(StandTile *tile, int index,f32 x,f32 z) { f32 disp; - + disp = getShortest2dDispToInfTileEdge(tile, index, x * level_scale, z * level_scale); return disp * inv_level_scale; } @@ -1920,7 +2074,7 @@ f32 getShortest2dDispToInfTileEdgeUnscaled(StandTile *tile, int index,f32 x,f32 f32 getShortest2dDispToInfTripleEdgeUnscaled(StandTile *tile,s32 start3index,f32 p_x,f32 p_z) { f32 disp; - + disp = getShortest2dDispToInfTripleEdge(tile, start3index, p_x * level_scale, p_z * level_scale); return disp * inv_level_scale; } @@ -1931,7 +2085,7 @@ f32 getShortest2dDispToInfTripleEdgeUnscaled(StandTile *tile,s32 start3index,f32 f32 distToTilePnt2D(StandTile *tile,int pntI,f32 p_x,f32 p_z) { f32 len; - + p_x -= (f32)tile->points[pntI].x; p_z -= (f32)tile->points[pntI].z; return sqrtf(p_x * p_x + p_z * p_z); @@ -1946,11 +2100,11 @@ f32 sub_GAME_7F0B00C4(StandTile *tile,s32 index,f32 p_x,f32 p_z) f32 v_x; f32 v_z; f32 dist; - + v_x = p_x * level_scale - (f32)tile->points[index].x; v_z = p_z * level_scale - (f32)tile->points[index].z; dist = sqrtf(v_x * v_x + v_z * v_z); - + return dist * inv_level_scale; } #else @@ -1977,7 +2131,7 @@ glabel sub_GAME_7F0B00C4 /* 0E4C38 7F0B0108 46067381 */ sub.s $f14, $f14, $f6 /* 0E4C3C 7F0B010C 460AA501 */ sub.s $f20, $f20, $f10 /* 0E4C40 7F0B0110 460E7402 */ mul.s $f16, $f14, $f14 -/* 0E4C44 7F0B0114 00000000 */ nop +/* 0E4C44 7F0B0114 00000000 */ nop /* 0E4C48 7F0B0118 4614A482 */ mul.s $f18, $f20, $f20 /* 0E4C4C 7F0B011C 0C007DF8 */ jal sqrtf /* 0E4C50 7F0B0120 46128300 */ add.s $f12, $f16, $f18 @@ -2033,7 +2187,7 @@ glabel sub_GAME_7F0B0140 /* 0E4CB8 7F0B0188 46124100 */ add.s $f4, $f8, $f18 /* 0E4CBC 7F0B018C 46062002 */ mul.s $f0, $f4, $f6 /* 0E4CC0 7F0B0190 03E00008 */ jr $ra -/* 0E4CC4 7F0B0194 00000000 */ nop +/* 0E4CC4 7F0B0194 00000000 */ nop ) #endif @@ -2157,14 +2311,14 @@ glabel sub_GAME_7F0B0198 /* 0E4D28 7F0B01F8 46804320 */ cvt.s.w $f12, $f8 /* 0E4D2C 7F0B01FC 468030A0 */ cvt.s.w $f2, $f6 /* 0E4D30 7F0B0200 15400002 */ bnez $t2, .L7F0B020C -/* 0E4D34 7F0B0204 00000000 */ nop +/* 0E4D34 7F0B0204 00000000 */ nop /* 0E4D38 7F0B0208 0007000D */ break 7 .L7F0B020C: /* 0E4D3C 7F0B020C 2401FFFF */ li $at, -1 /* 0E4D40 7F0B0210 15410004 */ bne $t2, $at, .L7F0B0224 /* 0E4D44 7F0B0214 3C018000 */ lui $at, 0x8000 /* 0E4D48 7F0B0218 17210002 */ bne $t9, $at, .L7F0B0224 -/* 0E4D4C 7F0B021C 00000000 */ nop +/* 0E4D4C 7F0B021C 00000000 */ nop /* 0E4D50 7F0B0220 0006000D */ break 6 .L7F0B0224: /* 0E4D54 7F0B0224 468053A0 */ cvt.s.w $f14, $f10 @@ -2181,9 +2335,9 @@ glabel sub_GAME_7F0B0198 /* 0E4D80 7F0B0250 460A4080 */ add.s $f2, $f8, $f10 /* 0E4D84 7F0B0254 46048000 */ add.s $f0, $f16, $f4 /* 0E4D88 7F0B0258 4600103C */ c.lt.s $f2, $f0 -/* 0E4D8C 7F0B025C 00000000 */ nop +/* 0E4D8C 7F0B025C 00000000 */ nop /* 0E4D90 7F0B0260 45000002 */ bc1f .L7F0B026C -/* 0E4D94 7F0B0264 00000000 */ nop +/* 0E4D94 7F0B0264 00000000 */ nop /* 0E4D98 7F0B0268 24020001 */ li $v0, 1 .L7F0B026C: /* 0E4D9C 7F0B026C 5040000B */ beql $v0, $zero, .L7F0B029C @@ -2191,32 +2345,32 @@ glabel sub_GAME_7F0B0198 /* 0E4DA4 7F0B0274 44804000 */ mtc1 $zero, $f8 /* 0E4DA8 7F0B0278 00001025 */ move $v0, $zero /* 0E4DAC 7F0B027C 4608003C */ c.lt.s $f0, $f8 -/* 0E4DB0 7F0B0280 00000000 */ nop +/* 0E4DB0 7F0B0280 00000000 */ nop /* 0E4DB4 7F0B0284 45000002 */ bc1f .L7F0B0290 -/* 0E4DB8 7F0B0288 00000000 */ nop +/* 0E4DB8 7F0B0288 00000000 */ nop /* 0E4DBC 7F0B028C 24020001 */ li $v0, 1 .L7F0B0290: /* 0E4DC0 7F0B0290 1440000F */ bnez $v0, .L7F0B02D0 -/* 0E4DC4 7F0B0294 00000000 */ nop +/* 0E4DC4 7F0B0294 00000000 */ nop /* 0E4DC8 7F0B0298 44805000 */ mtc1 $zero, $f10 .L7F0B029C: /* 0E4DCC 7F0B029C 00001025 */ move $v0, $zero /* 0E4DD0 7F0B02A0 4600503C */ c.lt.s $f10, $f0 -/* 0E4DD4 7F0B02A4 00000000 */ nop +/* 0E4DD4 7F0B02A4 00000000 */ nop /* 0E4DD8 7F0B02A8 45000002 */ bc1f .L7F0B02B4 -/* 0E4DDC 7F0B02AC 00000000 */ nop +/* 0E4DDC 7F0B02AC 00000000 */ nop /* 0E4DE0 7F0B02B0 24020001 */ li $v0, 1 .L7F0B02B4: /* 0E4DE4 7F0B02B4 10400006 */ beqz $v0, .L7F0B02D0 -/* 0E4DE8 7F0B02B8 00000000 */ nop +/* 0E4DE8 7F0B02B8 00000000 */ nop /* 0E4DEC 7F0B02BC 4602003C */ c.lt.s $f0, $f2 /* 0E4DF0 7F0B02C0 00001025 */ move $v0, $zero /* 0E4DF4 7F0B02C4 45000002 */ bc1f .L7F0B02D0 -/* 0E4DF8 7F0B02C8 00000000 */ nop +/* 0E4DF8 7F0B02C8 00000000 */ nop /* 0E4DFC 7F0B02CC 24020001 */ li $v0, 1 .L7F0B02D0: /* 0E4E00 7F0B02D0 03E00008 */ jr $ra -/* 0E4E04 7F0B02D4 00000000 */ nop +/* 0E4E04 7F0B02D4 00000000 */ nop ) #endif @@ -2261,149 +2415,50 @@ s32 isPointInsideTriStandTileUnscaled_Maybe(StandTile *tile, f32 p_x, f32 p_z) } -// Sig for caller matches -f32 sub_GAME_7F0B0400(StandTile *tile, s32 start3index, f32 p_x,f32 p_z); - -#ifdef NONMATCHING -struct stan_7F0B0E24 { - /***/ - s32 unk00; - s32 unk04; - s16 unk08; - s16 unk0A; - s16 unk0C; - s16 unk0E; -}; - -// decomp.me 98.89% https://decomp.me/scratch/tj1r4 +/* +* Address: 0x7F0B0400 +*/ f32 sub_GAME_7F0B0400(StandTile *tile, s32 start3index, f32 p_x, f32 p_z) { f32 temp_f0; f32 temp_f2; f32 temp_f14; s32 var_a0; - s32 padding3; - s32 padding4; - //s32 padding; - f32 tempf; - struct stan_7F0B0E24 *temp_a2; - struct stan_7F0B0E24 *temp_v1; - - if (start3index != 2) - { - var_a0 = start3index + 1; - } - else - { - var_a0 = 0; - } + s32 padding; - var_a0 = tile->tail.half >> (8 - (var_a0 * 4)); - temp_v1 = ((struct stan_7F0B0E24 *)((struct StandTilePoint *)tile + (( var_a0) & 0xF))); - - start3index = tile->tail.half >> (8 - (start3index * 4)); - temp_a2 = ((struct stan_7F0B0E24 *)((struct StandTilePoint *)tile + (( start3index) & 0xF))); - - - temp_f2 = (f32) (temp_v1->unk08 - temp_a2->unk08); - temp_f14 = (f32) (temp_v1->unk0C - temp_a2->unk0C); + f32 tempf; + s32 extra_padding[2]; + + #ifdef DEBUG + assert(eitail.half >> (8 - (start3index << 2))) & 0xF; + var_a0 = (tile->tail.half >> (8 - (var_a0 << 2))) & 0xF; + + temp_f2 = (f32)(tile->points[var_a0].x - tile->points[start3index].x); + temp_f14 = (f32)(tile->points[var_a0].z - tile->points[start3index].z); temp_f0 = sqrtf((temp_f2 * temp_f2) + (temp_f14 * temp_f14)); - if (temp_f0 == 0.0f) - { + if (temp_f0 == 0.0f) { return 0.0f; } - tempf = (((p_z - (f32) temp_a2->unk0C) * -temp_f2) + (temp_f14 * (p_x - (f32) temp_a2->unk08))); + #ifdef DEBUG + assert(d>0.0f); + #endif + + tempf = (temp_f14 * (p_x - tile->points[start3index].x)) + ((p_z - tile->points[start3index].z) * -temp_f2); return tempf / temp_f0; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B0400 -/* 0E4F30 7F0B0400 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0E4F34 7F0B0404 AFA7004C */ sw $a3, 0x4c($sp) -/* 0E4F38 7F0B0408 24010002 */ li $at, 2 -/* 0E4F3C 7F0B040C 00803825 */ move $a3, $a0 -/* 0E4F40 7F0B0410 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E4F44 7F0B0414 AFA40040 */ sw $a0, 0x40($sp) -/* 0E4F48 7F0B0418 10A10003 */ beq $a1, $at, .L7F0B0428 -/* 0E4F4C 7F0B041C AFA60048 */ sw $a2, 0x48($sp) -/* 0E4F50 7F0B0420 10000002 */ b .L7F0B042C -/* 0E4F54 7F0B0424 24A40001 */ addiu $a0, $a1, 1 -.L7F0B0428: -/* 0E4F58 7F0B0428 00002025 */ move $a0, $zero -.L7F0B042C: -/* 0E4F5C 7F0B042C 84E20006 */ lh $v0, 6($a3) -/* 0E4F60 7F0B0430 24080008 */ li $t0, 8 -/* 0E4F64 7F0B0434 00057080 */ sll $t6, $a1, 2 -/* 0E4F68 7F0B0438 0004C880 */ sll $t9, $a0, 2 -/* 0E4F6C 7F0B043C 010E7823 */ subu $t7, $t0, $t6 -/* 0E4F70 7F0B0440 01194823 */ subu $t1, $t0, $t9 -/* 0E4F74 7F0B0444 01E22807 */ srav $a1, $v0, $t7 -/* 0E4F78 7F0B0448 01222007 */ srav $a0, $v0, $t1 -/* 0E4F7C 7F0B044C 30B8000F */ andi $t8, $a1, 0xf -/* 0E4F80 7F0B0450 308A000F */ andi $t2, $a0, 0xf -/* 0E4F84 7F0B0454 000A58C0 */ sll $t3, $t2, 3 -/* 0E4F88 7F0B0458 001860C0 */ sll $t4, $t8, 3 -/* 0E4F8C 7F0B045C 00EC3021 */ addu $a2, $a3, $t4 -/* 0E4F90 7F0B0460 00EB1821 */ addu $v1, $a3, $t3 -/* 0E4F94 7F0B0464 846D0008 */ lh $t5, 8($v1) -/* 0E4F98 7F0B0468 84CE0008 */ lh $t6, 8($a2) -/* 0E4F9C 7F0B046C 8478000C */ lh $t8, 0xc($v1) -/* 0E4FA0 7F0B0470 84D9000C */ lh $t9, 0xc($a2) -/* 0E4FA4 7F0B0474 01AE7823 */ subu $t7, $t5, $t6 -/* 0E4FA8 7F0B0478 448F2000 */ mtc1 $t7, $f4 -/* 0E4FAC 7F0B047C 03194823 */ subu $t1, $t8, $t9 -/* 0E4FB0 7F0B0480 44893000 */ mtc1 $t1, $f6 -/* 0E4FB4 7F0B0484 468020A0 */ cvt.s.w $f2, $f4 -/* 0E4FB8 7F0B0488 AFA6001C */ sw $a2, 0x1c($sp) -/* 0E4FBC 7F0B048C 468033A0 */ cvt.s.w $f14, $f6 -/* 0E4FC0 7F0B0490 46021202 */ mul.s $f8, $f2, $f2 -/* 0E4FC4 7F0B0494 E7A20038 */ swc1 $f2, 0x38($sp) -/* 0E4FC8 7F0B0498 460E7282 */ mul.s $f10, $f14, $f14 -/* 0E4FCC 7F0B049C E7AE0034 */ swc1 $f14, 0x34($sp) -/* 0E4FD0 7F0B04A0 0C007DF8 */ jal sqrtf -/* 0E4FD4 7F0B04A4 460A4300 */ add.s $f12, $f8, $f10 -/* 0E4FD8 7F0B04A8 44806000 */ mtc1 $zero, $f12 -/* 0E4FDC 7F0B04AC 8FA6001C */ lw $a2, 0x1c($sp) -/* 0E4FE0 7F0B04B0 C7A20038 */ lwc1 $f2, 0x38($sp) -/* 0E4FE4 7F0B04B4 460C0032 */ c.eq.s $f0, $f12 -/* 0E4FE8 7F0B04B8 C7AE0034 */ lwc1 $f14, 0x34($sp) -/* 0E4FEC 7F0B04BC 46000406 */ mov.s $f16, $f0 -/* 0E4FF0 7F0B04C0 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E4FF4 7F0B04C4 45020004 */ bc1fl .L7F0B04D8 -/* 0E4FF8 7F0B04C8 84CA000C */ lh $t2, 0xc($a2) -/* 0E4FFC 7F0B04CC 10000010 */ b .L7F0B0510 -/* 0E5000 7F0B04D0 46006006 */ mov.s $f0, $f12 -/* 0E5004 7F0B04D4 84CA000C */ lh $t2, 0xc($a2) -.L7F0B04D8: -/* 0E5008 7F0B04D8 C7B2004C */ lwc1 $f18, 0x4c($sp) -/* 0E500C 7F0B04DC 84CB0008 */ lh $t3, 8($a2) -/* 0E5010 7F0B04E0 448A2000 */ mtc1 $t2, $f4 -/* 0E5014 7F0B04E4 46001287 */ neg.s $f10, $f2 -/* 0E5018 7F0B04E8 468021A0 */ cvt.s.w $f6, $f4 -/* 0E501C 7F0B04EC 46069201 */ sub.s $f8, $f18, $f6 -/* 0E5020 7F0B04F0 448B3000 */ mtc1 $t3, $f6 -/* 0E5024 7F0B04F4 C7B20048 */ lwc1 $f18, 0x48($sp) -/* 0E5028 7F0B04F8 460A4102 */ mul.s $f4, $f8, $f10 -/* 0E502C 7F0B04FC 46803220 */ cvt.s.w $f8, $f6 -/* 0E5030 7F0B0500 46089281 */ sub.s $f10, $f18, $f8 -/* 0E5034 7F0B0504 460A7182 */ mul.s $f6, $f14, $f10 -/* 0E5038 7F0B0508 46062300 */ add.s $f12, $f4, $f6 -/* 0E503C 7F0B050C 46106003 */ div.s $f0, $f12, $f16 -.L7F0B0510: -/* 0E5040 7F0B0510 03E00008 */ jr $ra -/* 0E5044 7F0B0514 27BD0040 */ addiu $sp, $sp, 0x40 -) -#endif - -s32 stanTestPointWithinTileBoundsMaybe(StandTile *tile, f32 p_x, f32 p_z) +bool stanTestPointWithinTileBoundsMaybe(StandTile *tile, f32 p_x, f32 p_z) { f32 unk; s32 i; @@ -2417,11 +2472,11 @@ s32 stanTestPointWithinTileBoundsMaybe(StandTile *tile, f32 p_x, f32 p_z) if (unk < -2) { - return 0; + return FALSE; } } - return 1; + return TRUE; } @@ -2474,7 +2529,7 @@ s32 sub_GAME_7F0B0688(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5 return ( - (getRotationalDirectionBetween(sp1C, sp18, -sp24, -sp20) + (getRotationalDirectionBetween(sp1C, sp18, -sp24, -sp20) * getRotationalDirectionBetween(sp1C, sp18, arg6 - arg0, arg7 - arg1)) < 1) && ( @@ -2582,7 +2637,7 @@ glabel sub_GAME_7F0B07BC /* 0E537C 7F0B084C AFA2002C */ sw $v0, 0x2c($sp) /* 0E5380 7F0B0850 44074000 */ mfc1 $a3, $f8 /* 0E5384 7F0B0854 0FC2C170 */ jal getRotationalDirectionBetween -/* 0E5388 7F0B0858 00000000 */ nop +/* 0E5388 7F0B0858 00000000 */ nop /* 0E538C 7F0B085C 8FAF002C */ lw $t7, 0x2c($sp) /* 0E5390 7F0B0860 C7A60080 */ lwc1 $f6, 0x80($sp) /* 0E5394 7F0B0864 C7B00078 */ lwc1 $f16, 0x78($sp) @@ -2610,7 +2665,7 @@ glabel sub_GAME_7F0B07BC /* 0E53EC 7F0B08BC AFA2002C */ sw $v0, 0x2c($sp) /* 0E53F0 7F0B08C0 44075000 */ mfc1 $a3, $f10 /* 0E53F4 7F0B08C4 0FC2C170 */ jal getRotationalDirectionBetween -/* 0E53F8 7F0B08C8 00000000 */ nop +/* 0E53F8 7F0B08C8 00000000 */ nop /* 0E53FC 7F0B08CC 8FA30088 */ lw $v1, 0x88($sp) /* 0E5400 7F0B08D0 8FB9004C */ lw $t9, 0x4c($sp) /* 0E5404 7F0B08D4 0323082A */ slt $at, $t9, $v1 @@ -2626,7 +2681,7 @@ glabel sub_GAME_7F0B07BC /* 0E5428 7F0B08F8 00004812 */ mflo $t1 /* 0E542C 7F0B08FC 0123082A */ slt $at, $t1, $v1 /* 0E5430 7F0B0900 14200002 */ bnez $at, .L7F0B090C -/* 0E5434 7F0B0904 00000000 */ nop +/* 0E5434 7F0B0904 00000000 */ nop /* 0E5438 7F0B0908 00002025 */ move $a0, $zero .L7F0B090C: /* 0E543C 7F0B090C 03E00008 */ jr $ra @@ -2684,13 +2739,136 @@ s32 sub_GAME_7F0B07BC(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5 // 'walkTilesBetweenPoints_withCallback' // sig declared for caller matches -s32 sub_GAME_7F0B0914(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z, +bool sub_GAME_7F0B0914(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z, standTileWalkCallback_t func, struct StandTileWalkCallbackRecord *funcData); #ifdef NONMATCHING -void sub_GAME_7F0B0914(void) { +bool sub_GAME_7F0B0914(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z, + standTileWalkCallback_t func, struct StandTileWalkCallbackRecord *funcData) +{ + s32 sp8C; + StandTile *tileStackTop; + StandTile *temp_v0_2; + StandTile *var_s0; + StandTile *var_s3; + StandTile *var_s6; + StandTile *var_s7; + f32 scaled_startX; + f32 scaled_startZ; + f32 scaled_destX; + f32 scaled_destZ; + f32 zDist; + f32 xDist; + s16 point2_z; + s16 startpoint2_z; + s16 point2_x; + s16 startpoint2_x; + s32 temp_s2; + s32 temp_t5; + s32 pointcount; + s32 nextTile; + s32 pointcount2; + s32 var_fp; + s32 var_s1; + s32 var_s4; + s32 trynexttile; + u16 temp_v1; + /* + somewhere in here debug has + */ + #ifdef DEBUG + ossyncPrintf("{\"%s\",0x%08x,0x%08x,0x%08x,0x%08x},\t/* %8.3f %8.3f %8.3f %8.3f */\n", GetStanRoomID(*tilestack),start_x,start_z,dest_x,dest_z,start_x,start_z); + #endif + + + scaled_startX = start_x * level_scale; + scaled_startZ = start_z * level_scale; + scaled_destX = dest_x * level_scale; + scaled_destZ = dest_z * level_scale; + tileStackTop = *tileStack; + trynexttile = 0; + sp8C = 0; + zDist = -(scaled_destZ - scaled_startZ); + xDist = scaled_destX - scaled_startX; + var_s1 = 0; + var_s4 = 0; + var_fp = sp98; + var_s3 = tileStackTop; + var_s6 = tileStackTop; + var_s7 = tileStackTop; + + while (true) + { + if (func != NULL) + { + func(var_s3, var_s6, funcData); + } + var_s0 = var_s3; + pointcount = (var_s3->tail.half >> 0xC) & 0xF; //pointcount + pointcount2 = pointcount; + if (pointcount > 0) + { + do + { + temp_s2 = var_s1 + 1; + temp_v0_2 = &var_s3[temp_s2 % pointcount2]; + point2_z = temp_v0_2->unkC; + startpoint2_z = var_s0->unkC; + point2_x = temp_v0_2->unk8; + startpoint2_x = var_s0->unk8; + if (((((point2_z - startpoint2_z) * xDist) + (zDist * (point2_x - startpoint2_x))) <= 0.0f) && (sub_GAME_7F0B07BC(scaled_startX, scaled_startZ, pointcount2, point2_z, scaled_destX, scaled_destZ, startpoint2_x, startpoint2_z, point2_x, point2_z, (var_s0->unkE >> 4) != 0) != 0)) + { + temp_v1 = var_s0->unkE; + var_s4 += 1; + nextTile = (temp_v1 * 8) + standTileStart; + if ((var_s6 != nextTile) && (var_s7 != nextTile)) + { + var_fp = var_s1; + if ((temp_v1 >> 4) != 0) + { + trynexttile = nextTile; + } + else + { + trynexttile = NULL; + } + } + } + var_s1 = temp_s2; + var_s0 += 8; + temp_t5 = (var_s3->tail.half >> 0xC) & 0xF; + pointcount2 = temp_t5; + } while (temp_s2 < temp_t5); + } + var_s7 = var_s6; + var_s6 = var_s3; + var_s3 = trynexttile; + //assert(intersections!=0); + //assert(intersections!=3); + //printf("sf: stanLineDo %d %5.1f %5.1f %5.1f %5.1f %s %s %s\n",3,start_x, start_z,dest_x,dest_z,GetStanRoomID(*tilestack),GetStanRoomID(puVar3)); + if ((var_s3 ^ trynexttile) == 0) + { + var_s4 = 0; + } + if (var_s4 == 0) + { + return TRUE; + } + sp8C += 1; + if ((((sp8C < 0x1F5) ^ 1) != 0) || (trynexttile == 0) || (var_s1 = 0, (var_s4 == 0))) + { + stanSavedColl_tile = var_s6; + stanSavedColl_pointI = var_fp; + #ifdef DEBUG + osSyncPrintf("stanLine: Looping; ret=0\n"); + #endif + return FALSE; + } + *tileStack = trynexttile; + var_s4 = 0; + } } #else GLOBAL_ASM( @@ -2769,25 +2947,25 @@ glabel sub_GAME_7F0B0914 /* 0E5550 7F0B0A20 46803220 */ cvt.s.w $f8, $f6 /* 0E5554 7F0B0A24 44802000 */ mtc1 $zero, $f4 /* 0E5558 7F0B0A28 14800002 */ bnez $a0, .L7F0B0A34 -/* 0E555C 7F0B0A2C 00000000 */ nop +/* 0E555C 7F0B0A2C 00000000 */ nop /* 0E5560 7F0B0A30 0007000D */ break 7 .L7F0B0A34: /* 0E5564 7F0B0A34 2401FFFF */ li $at, -1 /* 0E5568 7F0B0A38 14810004 */ bne $a0, $at, .L7F0B0A4C /* 0E556C 7F0B0A3C 3C018000 */ lui $at, 0x8000 /* 0E5570 7F0B0A40 16410002 */ bne $s2, $at, .L7F0B0A4C -/* 0E5574 7F0B0A44 00000000 */ nop +/* 0E5574 7F0B0A44 00000000 */ nop /* 0E5578 7F0B0A48 0006000D */ break 6 .L7F0B0A4C: /* 0E557C 7F0B0A4C 468084A0 */ cvt.s.w $f18, $f16 /* 0E5580 7F0B0A50 461E4282 */ mul.s $f10, $f8, $f30 -/* 0E5584 7F0B0A54 00000000 */ nop +/* 0E5584 7F0B0A54 00000000 */ nop /* 0E5588 7F0B0A58 4612E182 */ mul.s $f6, $f28, $f18 /* 0E558C 7F0B0A5C 46065200 */ add.s $f8, $f10, $f6 /* 0E5590 7F0B0A60 4604403E */ c.le.s $f8, $f4 -/* 0E5594 7F0B0A64 00000000 */ nop +/* 0E5594 7F0B0A64 00000000 */ nop /* 0E5598 7F0B0A68 45000028 */ bc1f .L7F0B0B0C -/* 0E559C 7F0B0A6C 00000000 */ nop +/* 0E559C 7F0B0A6C 00000000 */ nop /* 0E55A0 7F0B0A70 448A8000 */ mtc1 $t2, $f16 /* 0E55A4 7F0B0A74 44885000 */ mtc1 $t0, $f10 /* 0E55A8 7F0B0A78 44892000 */ mtc1 $t1, $f4 @@ -2812,15 +2990,15 @@ glabel sub_GAME_7F0B0914 /* 0E55F4 7F0B0AC4 50400012 */ beql $v0, $zero, .L7F0B0B10 /* 0E55F8 7F0B0AC8 86640006 */ lh $a0, 6($s3) /* 0E55FC 7F0B0ACC 9603000E */ lhu $v1, 0xe($s0) -/* 0E5600 7F0B0AD0 3C198004 */ lui $t9, %hi(standTileStart) +/* 0E5600 7F0B0AD0 3C198004 */ lui $t9, %hi(standTileStart) /* 0E5604 7F0B0AD4 8F390F58 */ lw $t9, %lo(standTileStart)($t9) /* 0E5608 7F0B0AD8 0003C0C0 */ sll $t8, $v1, 3 /* 0E560C 7F0B0ADC 26940001 */ addiu $s4, $s4, 1 /* 0E5610 7F0B0AE0 03191021 */ addu $v0, $t8, $t9 /* 0E5614 7F0B0AE4 12C20009 */ beq $s6, $v0, .L7F0B0B0C -/* 0E5618 7F0B0AE8 00000000 */ nop +/* 0E5618 7F0B0AE8 00000000 */ nop /* 0E561C 7F0B0AEC 12E20007 */ beq $s7, $v0, .L7F0B0B0C -/* 0E5620 7F0B0AF0 00000000 */ nop +/* 0E5620 7F0B0AF0 00000000 */ nop /* 0E5624 7F0B0AF4 00035903 */ sra $t3, $v1, 4 /* 0E5628 7F0B0AF8 11600003 */ beqz $t3, .L7F0B0B08 /* 0E562C 7F0B0AFC 0220F025 */ move $fp, $s1 @@ -3011,6 +3189,9 @@ s32 sub_GAME_7F0B0D0C(StandTile *tile, f32 start_x, f32 start_z, StandTile **til if (tileStack[0] != unkTile) { bufCount = 0; + #ifdef DEBUG + osSyncPrintf("stan %s(%d) != %s(%d) from=%s\n", GetStanRoomID(tileStack[0]), /*funcForTileNumber(tileStack[0])*/,GetStanRoomID(tile), /*funcForTileNumber(tile)*/,GetStanRoomID(roomBuf)); + #endif } } @@ -3096,38 +3277,28 @@ glabel sub_GAME_7F0B0D0C /* 0E5944 7F0B0E14 8FB00028 */ lw $s0, 0x28($sp) /* 0E5948 7F0B0E18 27BD0048 */ addiu $sp, $sp, 0x48 /* 0E594C 7F0B0E1C 03E00008 */ jr $ra -/* 0E5950 7F0B0E20 00000000 */ nop +/* 0E5950 7F0B0E20 00000000 */ nop ) #endif -// TODO: remove this struct. -// This should be a StanTile, offset 08 onwards are for the points. -struct stan_7F0B0E24 { - /***/ - s32 unk00; - s32 unk04; - s16 unk08; - s16 unk0A; - s16 unk0C; - s16 unk0E; -}; + /** * Can change global variables: - * + * * - D_800413BC * - stanSavedColl_pntA * - stanSavedColl_pntB * - stanSavedColl_tile * - stanSavedColl_pointI * - stanSavedColl_posData - * + * * US address 7F0B0E24. - * + * * 'testLineUnobstructed' */ -s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, s32 objFlags, f32 unkHeight, f32 unkA, f32 unkB, f32 unkC) +s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, s32 cdtypes, f32 unkHeight, f32 unkA, f32 unkB, f32 unkC) { - struct PropRecord *temp_s6; + struct PropRecord *prop; s32 retval; // sp158 StandTile *sp154; // sp154 struct coord2d sp14C; @@ -3160,7 +3331,7 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 sp124 = 0; spCC = (unkA <= unkHeight); already_set = 0; - + sp154 = *pTile; sp14C.f[0] = p_x; sp14C.f[1] = p_z; @@ -3177,41 +3348,38 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 if (retval == 0) { - /// TODO: fix the horrible casts below. - - struct stan_7F0B0E24 * stack_padding_1; - struct stan_7F0B0E24 * stack_padding_2; + s32 padding[2]; - point_index = (stanSavedColl_pointI + 1) % (s32) (((s16) (stanSavedColl_tile)->tail.half >> 0xC) & 0xF); + point_index = (stanSavedColl_pointI + 1) % (s32)((stanSavedColl_tile->tail.half >> 0xC) & 0xF); D_800413BC = 1; - stanSavedColl_pntA.f[0] = (f32) ((struct stan_7F0B0E24 *)((struct StandTilePoint *)stanSavedColl_tile + stanSavedColl_pointI))->unk08 * inv_level_scale; - stanSavedColl_pntA.f[1] = (f32) ((struct stan_7F0B0E24 *)((struct StandTilePoint *)stanSavedColl_tile + stanSavedColl_pointI))->unk0C * inv_level_scale; + stanSavedColl_pntA.f[0] = (f32) stanSavedColl_tile->points[stanSavedColl_pointI].x * inv_level_scale; + stanSavedColl_pntA.f[1] = (f32) stanSavedColl_tile->points[stanSavedColl_pointI].z * inv_level_scale; - stanSavedColl_pntB.f[0] = (f32) ((struct stan_7F0B0E24 *)((struct StandTilePoint *)stanSavedColl_tile + point_index))->unk08 * inv_level_scale; - stanSavedColl_pntB.f[1] = (f32) ((struct stan_7F0B0E24 *)((struct StandTilePoint *)stanSavedColl_tile + point_index))->unk0C * inv_level_scale; - - sp140 = unkGeometry7F0B3200(&sp14C, &sp144, &stanSavedColl_pntA, &stanSavedColl_pntB); + stanSavedColl_pntB.f[0] = (f32) stanSavedColl_tile->points[point_index].x * inv_level_scale; + stanSavedColl_pntB.f[1] = (f32) stanSavedColl_tile->points[point_index].z * inv_level_scale; + + sp140 = calculateLineIntersectionFactor(&sp14C, &sp144, &stanSavedColl_pntA, &stanSavedColl_pntB); } else { // } - + stanSavedColl_posData = NULL; - if (objFlags != 0) + if (cdtypes != 0) { spD0[sp124] = -1; roomGetProps((s32 *)&spD0); for (spB8 = ptr_list_object_lookup_indices; *spB8 >= 0; spB8++) { - temp_s6 = &pos_data_entry[*spB8]; + prop = &pos_data_entry[*spB8]; - if (sub_GAME_7F03DA50(temp_s6, objFlags) != 0) + if (propIsOfCdType(prop, cdtypes) != 0) { - chraiGetCollisionBounds(temp_s6, &spB4, &numvertices0, &spA4, &spA0); + chraiGetCollisionBounds(prop, &spB4, &numvertices0, &spA4, &spA0); if (numvertices0 > 0) { @@ -3225,19 +3393,19 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 sp134.f[1] = spB4->points[i].f[1]; sp12C.f[0] = spB4->points[next].f[0]; sp12C.f[1] = spB4->points[next].f[1]; - - temp_f0 = unkGeometry7F0B3200(&sp14C, &sp144, &sp134, &sp12C); + + temp_f0 = calculateLineIntersectionFactor(&sp14C, &sp144, &sp134, &sp12C); if (temp_f0 < sp140) { loop_flag = 1; - + if (spCC != 0) { if (already_set == 0) { already_set = 1; - + if (unkC <= unkB) { spC4 = unkB - unkHeight; @@ -3255,7 +3423,7 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 dest_z *= sp140; dest_z = p_z + dest_z; } - + temp_f0_2 = stanGetPositionYValue(*pTile, p_x, p_z); unkHeight += temp_f0_2; unkA += temp_f0_2; @@ -3264,7 +3432,7 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 spC4 = temp_f2; } } - + if ((spA4 <= ((spC0 * temp_f0) + unkA)) || (((spC4 * temp_f0) + unkHeight) <= spA0)) { loop_flag = 0; @@ -3280,7 +3448,7 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 stanSavedColl_pntB = sp12C; stanSavedColl_tile = NULL; stanSavedColl_pointI = 0; - stanSavedColl_posData = temp_s6; + stanSavedColl_posData = prop; sp154 = NULL; } } @@ -3302,12 +3470,15 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 dest_z -= p_z; dest_z *= sp140; dest_z = p_z + dest_z; - walkTilesBetweenPoints_NoCallback(&sp154, p_x, p_z, dest_x, dest_z); + /*stanlineret = */ walkTilesBetweenPoints_NoCallback(&sp154, p_x, p_z, dest_x, dest_z); + #ifdef DEBUG + assert(stanlineret==1) + #endif } - + *pTile = sp154; stanSavedColl_someMin = sp140; - + return retval; } @@ -3317,7 +3488,7 @@ s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f3 #ifdef NONMATCHING void sub_GAME_7F0B1410(void) { - + //osSyncPrintf("stanLineDoor: %d rooms is more than %d\n"); } #else GLOBAL_ASM( @@ -3394,12 +3565,12 @@ glabel sub_GAME_7F0B1410 /* 0E6048 7F0B1518 01425023 */ subu $t2, $t2, $v0 /* 0E604C 7F0B151C 000A5080 */ sll $t2, $t2, 2 /* 0E6050 7F0B1520 01425021 */ addu $t2, $t2, $v0 -/* 0E6054 7F0B1524 3C0B8007 */ lui $t3, %hi(pos_data_entry) +/* 0E6054 7F0B1524 3C0B8007 */ lui $t3, %hi(pos_data_entry) /* 0E6058 7F0B1528 256B9C38 */ addiu $t3, %lo(pos_data_entry) # addiu $t3, $t3, -0x63c8 /* 0E605C 7F0B152C 000A5080 */ sll $t2, $t2, 2 /* 0E6060 7F0B1530 014B9821 */ addu $s3, $t2, $t3 /* 0E6064 7F0B1534 02602025 */ move $a0, $s3 -/* 0E6068 7F0B1538 0FC0F694 */ jal sub_GAME_7F03DA50 +/* 0E6068 7F0B1538 0FC0F694 */ jal propIsOfCdType /* 0E606C 7F0B153C 8FA5013C */ lw $a1, 0x13c($sp) /* 0E6070 7F0B1540 10400048 */ beqz $v0, .L7F0B1664 /* 0E6074 7F0B1544 02602025 */ move $a0, $s3 @@ -3429,14 +3600,14 @@ glabel sub_GAME_7F0B1410 /* 0E60D0 7F0B15A0 C4880000 */ lwc1 $f8, ($a0) /* 0E60D4 7F0B15A4 4407E000 */ mfc1 $a3, $f28 /* 0E60D8 7F0B15A8 15800002 */ bnez $t4, .L7F0B15B4 -/* 0E60DC 7F0B15AC 00000000 */ nop +/* 0E60DC 7F0B15AC 00000000 */ nop /* 0E60E0 7F0B15B0 0007000D */ break 7 .L7F0B15B4: /* 0E60E4 7F0B15B4 2401FFFF */ li $at, -1 /* 0E60E8 7F0B15B8 15810004 */ bne $t4, $at, .L7F0B15CC /* 0E60EC 7F0B15BC 3C018000 */ lui $at, 0x8000 /* 0E60F0 7F0B15C0 16410002 */ bne $s2, $at, .L7F0B15CC -/* 0E60F4 7F0B15C4 00000000 */ nop +/* 0E60F4 7F0B15C4 00000000 */ nop /* 0E60F8 7F0B15C8 0006000D */ break 6 .L7F0B15CC: /* 0E60FC 7F0B15CC E7A80018 */ swc1 $f8, 0x18($sp) @@ -3463,10 +3634,10 @@ glabel sub_GAME_7F0B1410 /* 0E6150 7F0B1620 C4440000 */ lwc1 $f4, ($v0) /* 0E6154 7F0B1624 E7A400F8 */ swc1 $f4, 0xf8($sp) /* 0E6158 7F0B1628 C4460004 */ lwc1 $f6, 4($v0) -/* 0E615C 7F0B162C 0FC2CC80 */ jal unkGeometry7F0B3200 +/* 0E615C 7F0B162C 0FC2CC80 */ jal calculateLineIntersectionFactor /* 0E6160 7F0B1630 E7A600FC */ swc1 $f6, 0xfc($sp) /* 0E6164 7F0B1634 4614003C */ c.lt.s $f0, $f20 -/* 0E6168 7F0B1638 00000000 */ nop +/* 0E6168 7F0B1638 00000000 */ nop /* 0E616C 7F0B163C 45020004 */ bc1fl .L7F0B1650 /* 0E6170 7F0B1640 8FA2008C */ lw $v0, 0x8c($sp) /* 0E6174 7F0B1644 46000506 */ mov.s $f20, $f0 @@ -3513,7 +3684,7 @@ glabel sub_GAME_7F0B1410 f32 sub_GAME_7F0B16C4(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3) { u32 stack[8]; - f32 result; + f32 result; //d result = sqrtf((x2 - x1) * (x2 - x1) + (z2 - z1) * (z2 - z1)); @@ -3521,7 +3692,9 @@ f32 sub_GAME_7F0B16C4(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3) { return sqrtf((x3 - x2) * (x3 - x2) + (z3 - z2) * (z3 - z2)); } - + #ifdef DEBUG + assert(d>0.0F); + #endif return ((z2 - z1) * (x3 - x1) + -(x2 - x1) * (z3 - z1)) / result; } @@ -3568,23 +3741,23 @@ bool sub_GAME_7F0B17E4(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3) * - stanSavedColl_tile * - stanSavedColl_pointI * - stanSavedColl_posData - * + * * US address 7F0B18B8. * Perfect Dark cdTestVolume (from context) */ -s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, f32 arg5, f32 arg6) +s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 cdtypes, f32 arg5, f32 arg6) { s32 i; // stack ?? f32 var_f20; // stack ?? f32 var_f24; // stack ?? s32 temp_v0; // stack ?? s32 next; // stack ?? - + s32 sp108; f32 temp_f0; // stack ?? s16 *sp100; s32 spFC; - struct PropRecord *temp_s5; // no stack + struct PropRecord *prop; // no stack s32 spA8[0x14]; struct rect4f *spA4; s32 numvertices0; // spa0 @@ -3597,23 +3770,27 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, f32 s32 padding2; sp108 = (arg6 <= arg5); - + spFC = 0; - - temp_v0 = sub_GAME_7F0B21B0(arg0, arg1, arg2, arg3, &spA8[0], &spFC, 0x14); + + temp_v0 = sub_GAME_7F0B21B0(arg0, arg1, arg2, arg3, &spA8[0], &spFC, 20); if (temp_v0 >= 0) { return temp_v0; } - - if (spFC > 0x14) + + + if (spFC > 20) { - spFC = 0x14; + #ifdef DEBUG + osSyncPrintf("stanCircleLegalXFObjTypeY: %d rooms is more than %d\n",spFC,20); + #endif + spFC = 20; } stanSavedColl_posData = NULL; - if (arg4) + if (cdtypes) { if (sp108) { @@ -3627,15 +3804,15 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, f32 for (sp100 = ptr_list_object_lookup_indices; *sp100 >= 0; sp100++) { - temp_s5 = &pos_data_entry[*sp100]; + prop = &pos_data_entry[*sp100]; - if (sub_GAME_7F03DA50(temp_s5, arg4) != 0) + if (propIsOfCdType(prop, cdtypes) != 0) { - chraiGetCollisionBounds(temp_s5, &spA4, &numvertices0, &sp94, &sp90); + chraiGetCollisionBounds(prop, &spA4, &numvertices0, &sp94, &sp90); if ((numvertices0 > 0) && ((sp108 == 0) || ((sp90 <= arg5) && (arg6 <= sp94)))) { var_f24 = -1.0f; - + i=0; while(1) { @@ -3647,12 +3824,12 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, f32 { var_f20 = -var_f20; } - + if (var_f24 < var_f20) { temp_f0_2 = distBetweenPoints2d(spA4->points[i].f[0], spA4->points[i].f[1], arg1, arg2); temp_f0_3 = distBetweenPoints2d(spA4->points[next].f[0], spA4->points[next].f[1], arg1, arg2); - + if ((var_f20 < arg3) && ( (temp_f0_2 < arg3) @@ -3668,7 +3845,7 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, f32 stanSavedColl_pntB.f[1] = spA4->points[next].f[1]; stanSavedColl_tile = NULL; stanSavedColl_pointI = 0; - stanSavedColl_posData = temp_s5; + stanSavedColl_posData = prop; } } @@ -3676,7 +3853,7 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, f32 { break; } - + i = next; } @@ -3688,24 +3865,33 @@ s32 stanTestVolume(StandTile **arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, f32 } } } - + return -2; } - +//stanResetHits void sub_GAME_7F0B1CC4(void) { stanSavedColl_tile = 0; stanSavedColl_pointI = 0; D_800413BC = 0; } -StandTile *sub_GAME_7F0B1CE0(void) { +StandTile *sub_GAME_7F0B1CE0(void) +{ + #ifdef DEBUG + osSyncPrintf("Don\'t call stanCircleLegalHit()!\n"); + #endif return stanSavedColl_tile; } -s32 sub_GAME_7F0B1CEC(void) { +s32 sub_GAME_7F0B1CEC(void) +{ + #ifdef DEBUG + osSyncPrintf("Don\'t call stanCircleLegalHitEdge()!\n"); + #endif + return stanSavedColl_pointI; } @@ -3720,7 +3906,7 @@ void getTileEdgePoints(StandTile *tile, s32 pointI, coord3d *currPntRtn, coord3d StandTilePoint *tilePntA; StandTilePoint *tilePntB; s32 pointCount; - + tilePntA = &tile->points[pointI]; currPntRtn->x = (f32)tilePntA->x * inv_level_scale; @@ -3734,7 +3920,7 @@ void getTileEdgePoints(StandTile *tile, s32 pointI, coord3d *currPntRtn, coord3d nextPointRtn->x = (f32)tilePntB->x * inv_level_scale; nextPointRtn->y = (f32)tilePntB->y * inv_level_scale; nextPointRtn->z = (f32)tilePntB->z * inv_level_scale; - + } #else GLOBAL_ASM( @@ -3752,13 +3938,13 @@ glabel getTileEdgePoints /* 0E684C 7F0B1D1C E4C80000 */ swc1 $f8, ($a2) /* 0E6850 7F0B1D20 8458000A */ lh $t8, 0xa($v0) /* 0E6854 7F0B1D24 44985000 */ mtc1 $t8, $f10 -/* 0E6858 7F0B1D28 00000000 */ nop +/* 0E6858 7F0B1D28 00000000 */ nop /* 0E685C 7F0B1D2C 46805420 */ cvt.s.w $f16, $f10 /* 0E6860 7F0B1D30 46008482 */ mul.s $f18, $f16, $f0 /* 0E6864 7F0B1D34 E4D20004 */ swc1 $f18, 4($a2) /* 0E6868 7F0B1D38 8459000C */ lh $t9, 0xc($v0) /* 0E686C 7F0B1D3C 44992000 */ mtc1 $t9, $f4 -/* 0E6870 7F0B1D40 00000000 */ nop +/* 0E6870 7F0B1D40 00000000 */ nop /* 0E6874 7F0B1D44 468021A0 */ cvt.s.w $f6, $f4 /* 0E6878 7F0B1D48 46003202 */ mul.s $f8, $f6, $f0 /* 0E687C 7F0B1D4C E4C80008 */ swc1 $f8, 8($a2) @@ -3771,30 +3957,30 @@ glabel getTileEdgePoints /* 0E6898 7F0B1D68 008C1021 */ addu $v0, $a0, $t4 /* 0E689C 7F0B1D6C 844D0008 */ lh $t5, 8($v0) /* 0E68A0 7F0B1D70 15600002 */ bnez $t3, .L7F0B1D7C -/* 0E68A4 7F0B1D74 00000000 */ nop +/* 0E68A4 7F0B1D74 00000000 */ nop /* 0E68A8 7F0B1D78 0007000D */ break 7 .L7F0B1D7C: /* 0E68AC 7F0B1D7C 2401FFFF */ li $at, -1 /* 0E68B0 7F0B1D80 15610004 */ bne $t3, $at, .L7F0B1D94 /* 0E68B4 7F0B1D84 3C018000 */ lui $at, 0x8000 /* 0E68B8 7F0B1D88 15010002 */ bne $t0, $at, .L7F0B1D94 -/* 0E68BC 7F0B1D8C 00000000 */ nop +/* 0E68BC 7F0B1D8C 00000000 */ nop /* 0E68C0 7F0B1D90 0006000D */ break 6 .L7F0B1D94: /* 0E68C4 7F0B1D94 448D5000 */ mtc1 $t5, $f10 -/* 0E68C8 7F0B1D98 00000000 */ nop +/* 0E68C8 7F0B1D98 00000000 */ nop /* 0E68CC 7F0B1D9C 46805420 */ cvt.s.w $f16, $f10 /* 0E68D0 7F0B1DA0 46008482 */ mul.s $f18, $f16, $f0 /* 0E68D4 7F0B1DA4 E4F20000 */ swc1 $f18, ($a3) /* 0E68D8 7F0B1DA8 844E000A */ lh $t6, 0xa($v0) /* 0E68DC 7F0B1DAC 448E2000 */ mtc1 $t6, $f4 -/* 0E68E0 7F0B1DB0 00000000 */ nop +/* 0E68E0 7F0B1DB0 00000000 */ nop /* 0E68E4 7F0B1DB4 468021A0 */ cvt.s.w $f6, $f4 /* 0E68E8 7F0B1DB8 46003202 */ mul.s $f8, $f6, $f0 /* 0E68EC 7F0B1DBC E4E80004 */ swc1 $f8, 4($a3) /* 0E68F0 7F0B1DC0 844F000C */ lh $t7, 0xc($v0) /* 0E68F4 7F0B1DC4 448F5000 */ mtc1 $t7, $f10 -/* 0E68F8 7F0B1DC8 00000000 */ nop +/* 0E68F8 7F0B1DC8 00000000 */ nop /* 0E68FC 7F0B1DCC 46805420 */ cvt.s.w $f16, $f10 /* 0E6900 7F0B1DD0 46008482 */ mul.s $f18, $f16, $f0 /* 0E6904 7F0B1DD4 03E00008 */ jr $ra @@ -3805,8 +3991,18 @@ glabel getTileEdgePoints #ifdef NONMATCHING -void sub_GAME_7F0B1DDC(void) { - +s32 sub_GAME_7F0B1DDC(void) +{ + #ifdef DEBUG + if (cat>= 0x190) + { + osSyncPrintf("cat=%d !!!!!!!!!!!!!!!!!!!! NEED TO INCREASE ARRAY SIZE\n",cat); + } + #endif + if (cat >= 0x320) + { + return 5; //error value? + } } #else GLOBAL_ASM( @@ -3873,14 +4069,14 @@ glabel sub_GAME_7F0B1DDC /* 0E69E8 7F0B1EB8 00008810 */ mfhi $s1 /* 0E69EC 7F0B1EBC 4406D000 */ mfc1 $a2, $f26 /* 0E69F0 7F0B1EC0 14400002 */ bnez $v0, .L7F0B1ECC -/* 0E69F4 7F0B1EC4 00000000 */ nop +/* 0E69F4 7F0B1EC4 00000000 */ nop /* 0E69F8 7F0B1EC8 0007000D */ break 7 .L7F0B1ECC: /* 0E69FC 7F0B1ECC 2401FFFF */ li $at, -1 /* 0E6A00 7F0B1ED0 14410004 */ bne $v0, $at, .L7F0B1EE4 /* 0E6A04 7F0B1ED4 3C018000 */ lui $at, 0x8000 /* 0E6A08 7F0B1ED8 16A10002 */ bne $s5, $at, .L7F0B1EE4 -/* 0E6A0C 7F0B1EDC 00000000 */ nop +/* 0E6A0C 7F0B1EDC 00000000 */ nop /* 0E6A10 7F0B1EE0 0006000D */ break 6 .L7F0B1EE4: /* 0E6A14 7F0B1EE4 4407E000 */ mfc1 $a3, $f28 @@ -3904,13 +4100,13 @@ glabel sub_GAME_7F0B1DDC /* 0E6A5C 7F0B1F2C 45020042 */ bc1fl .L7F0B2038 /* 0E6A60 7F0B1F30 86620006 */ lh $v0, 6($s3) /* 0E6A64 7F0B1F34 461EA03C */ c.lt.s $f20, $f30 -/* 0E6A68 7F0B1F38 00000000 */ nop +/* 0E6A68 7F0B1F38 00000000 */ nop /* 0E6A6C 7F0B1F3C 4501000B */ bc1t .L7F0B1F6C -/* 0E6A70 7F0B1F40 00000000 */ nop +/* 0E6A70 7F0B1F40 00000000 */ nop /* 0E6A74 7F0B1F44 461E003C */ c.lt.s $f0, $f30 /* 0E6A78 7F0B1F48 02602025 */ move $a0, $s3 /* 0E6A7C 7F0B1F4C 45010007 */ bc1t .L7F0B1F6C -/* 0E6A80 7F0B1F50 00000000 */ nop +/* 0E6A80 7F0B1F50 00000000 */ nop /* 0E6A84 7F0B1F54 4406D000 */ mfc1 $a2, $f26 /* 0E6A88 7F0B1F58 4407E000 */ mfc1 $a3, $f28 /* 0E6A8C 7F0B1F5C 0FC2C066 */ jal sub_GAME_7F0B0198 @@ -3931,7 +4127,7 @@ glabel sub_GAME_7F0B1DDC /* 0E6AC0 7F0B1F90 001068C0 */ sll $t5, $s0, 3 /* 0E6AC4 7F0B1F94 026D7021 */ addu $t6, $s3, $t5 /* 0E6AC8 7F0B1F98 95C4000E */ lhu $a0, 0xe($t6) -/* 0E6ACC 7F0B1F9C 3C088004 */ lui $t0, %hi(standTileStart) +/* 0E6ACC 7F0B1F9C 3C088004 */ lui $t0, %hi(standTileStart) /* 0E6AD0 7F0B1FA0 2682FFFF */ addiu $v0, $s4, -1 /* 0E6AD4 7F0B1FA4 00047903 */ sra $t7, $a0, 4 /* 0E6AD8 7F0B1FA8 11E00014 */ beqz $t7, .L7F0B1FFC @@ -4047,7 +4243,7 @@ s32 sub_GAME_7F0B2110(StandTile *tile, struct StandTileLocusCallbackRecord* data return 0; } } - + if (data->count < data->bufMax) { data->roomBuf[data->count] = tile->room; data->count++; @@ -4086,7 +4282,7 @@ glabel sub_GAME_7F0B2110 /* 0E6C8C 7F0B215C 00001025 */ move $v0, $zero /* 0E6C90 7F0B2160 00D8082A */ slt $at, $a2, $t8 /* 0E6C94 7F0B2164 10200009 */ beqz $at, .L7F0B218C -/* 0E6C98 7F0B2168 00000000 */ nop +/* 0E6C98 7F0B2168 00000000 */ nop /* 0E6C9C 7F0B216C 8CA90000 */ lw $t1, ($a1) /* 0E6CA0 7F0B2170 90990003 */ lbu $t9, 3($a0) /* 0E6CA4 7F0B2174 00065080 */ sll $t2, $a2, 2 @@ -4097,7 +4293,7 @@ glabel sub_GAME_7F0B2110 /* 0E6CB8 7F0B2188 ACAD0004 */ sw $t5, 4($a1) .L7F0B218C: /* 0E6CBC 7F0B218C 03E00008 */ jr $ra -/* 0E6CC0 7F0B2190 00000000 */ nop +/* 0E6CC0 7F0B2190 00000000 */ nop ) #endif @@ -4111,7 +4307,7 @@ s32 incrNearEdgeCount(StandTile **tileStack, s32 stackHeight, struct StandTileLo - +// maybe stanCircleLegalXFObjTypeY s32 sub_GAME_7F0B21B0(StandTile **tileStack, f32 target_x, f32 target_z, f32 unknown, s32 unk00, s32 *count_rtn, s32 bufMax) { struct StandTileLocusCallbackRecord data; @@ -4160,13 +4356,13 @@ s32 stanIsSpecialBit1Set(StandTile *arg0, struct StandTileLocusCallbackRecord *a #ifdef NONMATCHING /** * Address 0x7F0B2274. - * + * * decomp status: * - compiles: yes * - stack resize: ok * - identical instructions: no * - identical registers: fail - * + * * Notes: the SRA 0xc needs to be calculated twice, but below is a move instruction from previous SRA 0xc. * Seems to match other than that. */ @@ -4209,7 +4405,7 @@ glabel sub_GAME_7F0B2274 /* 0E6DAC 7F0B227C AFA7000C */ sw $a3, 0xc($sp) /* 0E6DB0 7F0B2280 008E7821 */ addu $t7, $a0, $t6 /* 0E6DB4 7F0B2284 95E2000E */ lhu $v0, 0xe($t7) -/* 0E6DB8 7F0B2288 3C088004 */ lui $t0, %hi(standTileStart) +/* 0E6DB8 7F0B2288 3C088004 */ lui $t0, %hi(standTileStart) /* 0E6DBC 7F0B228C 0002C103 */ sra $t8, $v0, 4 /* 0E6DC0 7F0B2290 5300001E */ beql $t8, $zero, .L7F0B230C /* 0E6DC4 7F0B2294 00001025 */ move $v0, $zero @@ -4248,7 +4444,7 @@ glabel sub_GAME_7F0B2274 /* 0E6E38 7F0B2308 00001025 */ move $v0, $zero .L7F0B230C: /* 0E6E3C 7F0B230C 03E00008 */ jr $ra -/* 0E6E40 7F0B2310 00000000 */ nop +/* 0E6E40 7F0B2310 00000000 */ nop ) #endif @@ -4333,19 +4529,19 @@ glabel sub_GAME_7F0B23AC /* 0E6F00 7F0B23D0 3C018004 */ lui $at, %hi(inv_level_scale) /* 0E6F04 7F0B23D4 C4200F48 */ lwc1 $f0, %lo(inv_level_scale)($at) /* 0E6F08 7F0B23D8 448A2000 */ mtc1 $t2, $f4 -/* 0E6F0C 7F0B23DC 00000000 */ nop +/* 0E6F0C 7F0B23DC 00000000 */ nop /* 0E6F10 7F0B23E0 468021A0 */ cvt.s.w $f6, $f4 /* 0E6F14 7F0B23E4 46003202 */ mul.s $f8, $f6, $f0 /* 0E6F18 7F0B23E8 E4C80000 */ swc1 $f8, ($a2) /* 0E6F1C 7F0B23EC 844B000A */ lh $t3, 0xa($v0) /* 0E6F20 7F0B23F0 448B5000 */ mtc1 $t3, $f10 -/* 0E6F24 7F0B23F4 00000000 */ nop +/* 0E6F24 7F0B23F4 00000000 */ nop /* 0E6F28 7F0B23F8 46805420 */ cvt.s.w $f16, $f10 /* 0E6F2C 7F0B23FC 46008482 */ mul.s $f18, $f16, $f0 /* 0E6F30 7F0B2400 E4D20004 */ swc1 $f18, 4($a2) /* 0E6F34 7F0B2404 844C000C */ lh $t4, 0xc($v0) /* 0E6F38 7F0B2408 448C2000 */ mtc1 $t4, $f4 -/* 0E6F3C 7F0B240C 00000000 */ nop +/* 0E6F3C 7F0B240C 00000000 */ nop /* 0E6F40 7F0B2410 468021A0 */ cvt.s.w $f6, $f4 /* 0E6F44 7F0B2414 46003202 */ mul.s $f8, $f6, $f0 /* 0E6F48 7F0B2418 03E00008 */ jr $ra @@ -4360,14 +4556,31 @@ glabel sub_GAME_7F0B23AC #ifdef NONMATCHING // TODO void stanGetMoveBondCollisionTiles(void) { + #ifdef DEBUG + assert(getsides(s1)==3); + #endif + //if side++ > getsides + #ifdef DEBUG + osSyncPrintf("Ladder %s has no neighbouring ladder stan\n", GetStanRoomID(arg0)); + #endif + return; + + + // for rotate = 0 to 12 + // next + + //ran out of rotating tiles - just end + #ifdef DEBUG + osSyncPrintf("rotate==12\n"); + #endif } #else GLOBAL_ASM( .text glabel stanGetMoveBondCollisionTiles /* 0E6F50 7F0B2420 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0E6F54 7F0B2424 3C098008 */ lui $t1, %hi(dword_CODE_bss_8007BA0C) +/* 0E6F54 7F0B2424 3C098008 */ lui $t1, %hi(dword_CODE_bss_8007BA0C) /* 0E6F58 7F0B2428 8D29BA0C */ lw $t1, %lo(dword_CODE_bss_8007BA0C)($t1) /* 0E6F5C 7F0B242C AFBF003C */ sw $ra, 0x3c($sp) /* 0E6F60 7F0B2430 AFBE0038 */ sw $fp, 0x38($sp) @@ -4427,20 +4640,20 @@ glabel stanGetMoveBondCollisionTiles /* 0E702C 7F0B24FC 02C02025 */ move $a0, $s6 /* 0E7030 7F0B2500 03140019 */ multu $t8, $s4 /* 0E7034 7F0B2504 16600002 */ bnez $s3, .L7F0B2510 -/* 0E7038 7F0B2508 00000000 */ nop +/* 0E7038 7F0B2508 00000000 */ nop /* 0E703C 7F0B250C 0007000D */ break 7 .L7F0B2510: /* 0E7040 7F0B2510 2401FFFF */ li $at, -1 /* 0E7044 7F0B2514 16610004 */ bne $s3, $at, .L7F0B2528 /* 0E7048 7F0B2518 3C018000 */ lui $at, 0x8000 /* 0E704C 7F0B251C 15E10002 */ bne $t7, $at, .L7F0B2528 -/* 0E7050 7F0B2520 00000000 */ nop +/* 0E7050 7F0B2520 00000000 */ nop /* 0E7054 7F0B2524 0006000D */ break 6 .L7F0B2528: /* 0E7058 7F0B2528 0000C812 */ mflo $t9 /* 0E705C 7F0B252C 02B93021 */ addu $a2, $s5, $t9 /* 0E7060 7F0B2530 0FC2C8EB */ jal sub_GAME_7F0B23AC -/* 0E7064 7F0B2534 00000000 */ nop +/* 0E7064 7F0B2534 00000000 */ nop /* 0E7068 7F0B2538 26100001 */ addiu $s0, $s0, 1 /* 0E706C 7F0B253C 1613FFEB */ bne $s0, $s3, .L7F0B24EC /* 0E7070 7F0B2540 26310001 */ addiu $s1, $s1, 1 @@ -4452,28 +4665,28 @@ glabel stanGetMoveBondCollisionTiles /* 0E7088 7F0B2558 00006012 */ mflo $t4 /* 0E708C 7F0B255C 02AC3021 */ addu $a2, $s5, $t4 /* 0E7090 7F0B2560 0FC2C8EB */ jal sub_GAME_7F0B23AC -/* 0E7094 7F0B2564 00000000 */ nop +/* 0E7094 7F0B2564 00000000 */ nop /* 0E7098 7F0B2568 26F70001 */ addiu $s7, $s7, 1 /* 0E709C 7F0B256C 52F4001C */ beql $s7, $s4, .L7F0B25E0 /* 0E70A0 7F0B2570 8FBF003C */ lw $ra, 0x3c($sp) /* 0E70A4 7F0B2574 C6A0001C */ lwc1 $f0, 0x1c($s5) /* 0E70A8 7F0B2578 C6A20004 */ lwc1 $f2, 4($s5) /* 0E70AC 7F0B257C 4602003C */ c.lt.s $f0, $f2 -/* 0E70B0 7F0B2580 00000000 */ nop +/* 0E70B0 7F0B2580 00000000 */ nop /* 0E70B4 7F0B2584 4503FFD7 */ bc1tl .L7F0B24E4 /* 0E70B8 7F0B2588 00008025 */ move $s0, $zero /* 0E70BC 7F0B258C C6AC0010 */ lwc1 $f12, 0x10($s5) /* 0E70C0 7F0B2590 460C003C */ c.lt.s $f0, $f12 -/* 0E70C4 7F0B2594 00000000 */ nop +/* 0E70C4 7F0B2594 00000000 */ nop /* 0E70C8 7F0B2598 4503FFD2 */ bc1tl .L7F0B24E4 /* 0E70CC 7F0B259C 00008025 */ move $s0, $zero /* 0E70D0 7F0B25A0 C6A00028 */ lwc1 $f0, 0x28($s5) /* 0E70D4 7F0B25A4 4602003C */ c.lt.s $f0, $f2 -/* 0E70D8 7F0B25A8 00000000 */ nop +/* 0E70D8 7F0B25A8 00000000 */ nop /* 0E70DC 7F0B25AC 4503FFCD */ bc1tl .L7F0B24E4 /* 0E70E0 7F0B25B0 00008025 */ move $s0, $zero /* 0E70E4 7F0B25B4 460C003C */ c.lt.s $f0, $f12 -/* 0E70E8 7F0B25B8 00000000 */ nop +/* 0E70E8 7F0B25B8 00000000 */ nop /* 0E70EC 7F0B25BC 4503FFC9 */ bc1tl .L7F0B24E4 /* 0E70F0 7F0B25C0 00008025 */ move $s0, $zero /* 0E70F4 7F0B25C4 10000006 */ b .L7F0B25E0 @@ -4510,12 +4723,12 @@ glabel stanGetMoveBondCollisionTiles */ s32 sub_GAME_7F0B260C(StandTile *tile, s32 index, f32 p_x, f32 p_z, s32 arg4, struct StandTileLocusCallbackRecord *arg5) { - if (arg5->unk00 < (f32)tile->points[index].y + if (arg5->unk00 < (f32)tile->points[index].y && arg5->unk00 < (f32)tile->points[(index + 1) % STAN_TAIL_E(tile)].y) { return 1; } - + return 0; } @@ -4534,7 +4747,7 @@ glabel sub_GAME_7F0B260C /* 0E7158 7F0B2628 C4C00000 */ lwc1 $f0, ($a2) /* 0E715C 7F0B262C 468021A0 */ cvt.s.w $f6, $f4 /* 0E7160 7F0B2630 4606003C */ c.lt.s $f0, $f6 -/* 0E7164 7F0B2634 00000000 */ nop +/* 0E7164 7F0B2634 00000000 */ nop /* 0E7168 7F0B2638 4502001D */ bc1fl .L7F0B26B0 /* 0E716C 7F0B263C 00001025 */ move $v0, $zero /* 0E7170 7F0B2640 84880006 */ lh $t0, 6($a0) @@ -4547,21 +4760,21 @@ glabel sub_GAME_7F0B260C /* 0E718C 7F0B265C 008B6021 */ addu $t4, $a0, $t3 /* 0E7190 7F0B2660 858D000A */ lh $t5, 0xa($t4) /* 0E7194 7F0B2664 15400002 */ bnez $t2, .L7F0B2670 -/* 0E7198 7F0B2668 00000000 */ nop +/* 0E7198 7F0B2668 00000000 */ nop /* 0E719C 7F0B266C 0007000D */ break 7 .L7F0B2670: /* 0E71A0 7F0B2670 2401FFFF */ li $at, -1 /* 0E71A4 7F0B2674 15410004 */ bne $t2, $at, .L7F0B2688 /* 0E71A8 7F0B2678 3C018000 */ lui $at, 0x8000 /* 0E71AC 7F0B267C 17210002 */ bne $t9, $at, .L7F0B2688 -/* 0E71B0 7F0B2680 00000000 */ nop +/* 0E71B0 7F0B2680 00000000 */ nop /* 0E71B4 7F0B2684 0006000D */ break 6 .L7F0B2688: /* 0E71B8 7F0B2688 448D4000 */ mtc1 $t5, $f8 -/* 0E71BC 7F0B268C 00000000 */ nop +/* 0E71BC 7F0B268C 00000000 */ nop /* 0E71C0 7F0B2690 468042A0 */ cvt.s.w $f10, $f8 /* 0E71C4 7F0B2694 460A003C */ c.lt.s $f0, $f10 -/* 0E71C8 7F0B2698 00000000 */ nop +/* 0E71C8 7F0B2698 00000000 */ nop /* 0E71CC 7F0B269C 45020004 */ bc1fl .L7F0B26B0 /* 0E71D0 7F0B26A0 00001025 */ move $v0, $zero /* 0E71D4 7F0B26A4 03E00008 */ jr $ra @@ -4570,7 +4783,7 @@ glabel sub_GAME_7F0B260C /* 0E71DC 7F0B26AC 00001025 */ move $v0, $zero .L7F0B26B0: /* 0E71E0 7F0B26B0 03E00008 */ jr $ra -/* 0E71E4 7F0B26B4 00000000 */ nop +/* 0E71E4 7F0B26B4 00000000 */ nop ) #endif @@ -4585,7 +4798,7 @@ s32 sub_GAME_7F0B26B8(StandTile **tile, f32 target_x, f32 target_z, f32 b_z, f32 f32 data; data = param_5 * level_scale; - + /// TODO: Why is this cast wrong? return sub_GAME_7F0B1DDC(tile, target_x, target_z, b_z, NULL, sub_GAME_7F0B260C, NULL, (struct StandTileLocusCallbackRecord*)&data); @@ -4594,6 +4807,7 @@ s32 sub_GAME_7F0B26B8(StandTile **tile, f32 target_x, f32 target_z, f32 b_z, f32 #ifdef NONMATCHING // Horrifc BFS on tiles +// stanFillSearch() StandTile *sub_GAME_7F0B2718(StandTile *srcTile, tilePredicate_t tilePred) { StandTile *tile; @@ -4652,7 +4866,11 @@ StandTile *sub_GAME_7F0B2718(StandTile *srcTile, tilePredicate_t tilePred) } bfsTileStack[seenCount] = linkTile; - if (350 < seenCount + 1) { // as written + if (350 < seenCount + 1) + { // as written + #ifdef DEBUG + osSyncPrintf("Out of confs[] in stanFillSearch()\n"); + #endif return 0; } @@ -4704,7 +4922,7 @@ glabel sub_GAME_7F0B2718 /* 0E728C 7F0B275C 02801025 */ move $v0, $s4 .L7F0B2760: /* 0E7290 7F0B2760 240E0001 */ li $t6, 1 -/* 0E7294 7F0B2764 3C178008 */ lui $s7, %hi(bfsTileStack) +/* 0E7294 7F0B2764 3C178008 */ lui $s7, %hi(bfsTileStack) /* 0E7298 7F0B2768 3C168004 */ lui $s6, %hi(standTileStart) /* 0E729C 7F0B276C AC34BA10 */ sw $s4, %lo(bfsTileStack)($at) /* 0E72A0 7F0B2770 24110001 */ li $s1, 1 @@ -4714,7 +4932,7 @@ glabel sub_GAME_7F0B2718 /* 0E72B0 7F0B2780 0000F025 */ move $fp, $zero .L7F0B2784: /* 0E72B4 7F0B2784 1A200037 */ blez $s1, .L7F0B2864 -/* 0E72B8 7F0B2788 3C0F8008 */ lui $t7, %hi(bfsTileStack) +/* 0E72B8 7F0B2788 3C0F8008 */ lui $t7, %hi(bfsTileStack) /* 0E72BC 7F0B278C 25EFBA10 */ addiu $t7, %lo(bfsTileStack) # addiu $t7, $t7, -0x45f0 /* 0E72C0 7F0B2790 AFAF0044 */ sw $t7, 0x44($sp) .L7F0B2794: @@ -4840,9 +5058,18 @@ bool getCollisionEdge_maybe(coord3d *pntA, coord3d *pntB) -void setLevelScale(f32 ls) { +void setLevelScale(f32 ls) +{ level_scale = ls; inv_level_scale = (1.0f / ls); + #ifdef DEBUG + if (level_scale != 1.0) + { + osSyncPrintf("%5.2fm squared total area\n", /*lots of math*/ 1* inv_level_scale * inv_level_scale * 0.01 * 0.01); + //... + osSyncPrintf("%5.2fm squared BB extent\n\n",/*more maths*/ 1 * inv_level_scale * inv_level_scale * 0.01 * 0.01); + } + #endif return; } @@ -4851,7 +5078,7 @@ void setLevelScale(f32 ls) { /** * Calculates y value on a tile, according to (x,z) position. - * + * * Address 0x7F0B2970. */ f32 stanGetPositionYValue(StandTile *tile, f32 p_x, f32 p_z) @@ -4943,7 +5170,7 @@ glabel sub_GAME_7F0B2C74 /* 0E77BC 7F0B2C8C 00994021 */ addu $t0, $a0, $t9 /* 0E77C0 7F0B2C90 8509000A */ lh $t1, 0xa($t0) /* 0E77C4 7F0B2C94 44892000 */ mtc1 $t1, $f4 -/* 0E77C8 7F0B2C98 00000000 */ nop +/* 0E77C8 7F0B2C98 00000000 */ nop /* 0E77CC 7F0B2C9C 468020A0 */ cvt.s.w $f2, $f4 /* 0E77D0 7F0B2CA0 4602103C */ c.lt.s $f2, $f2 /* 0E77D4 7F0B2CA4 46001006 */ mov.s $f0, $f2 @@ -4954,7 +5181,7 @@ glabel sub_GAME_7F0B2C74 /* 0E77E8 7F0B2CB8 46001406 */ mov.s $f16, $f2 .L7F0B2CBC: /* 0E77EC 7F0B2CBC 4610703C */ c.lt.s $f14, $f16 -/* 0E77F0 7F0B2CC0 00000000 */ nop +/* 0E77F0 7F0B2CC0 00000000 */ nop /* 0E77F4 7F0B2CC4 45020003 */ bc1fl .L7F0B2CD4 /* 0E77F8 7F0B2CC8 460C003C */ c.lt.s $f0, $f12 /* 0E77FC 7F0B2CCC 46007406 */ mov.s $f16, $f14 @@ -4966,7 +5193,7 @@ glabel sub_GAME_7F0B2C74 /* 0E7810 7F0B2CE0 46006086 */ mov.s $f2, $f12 /* 0E7814 7F0B2CE4 460E103C */ c.lt.s $f2, $f14 .L7F0B2CE8: -/* 0E7818 7F0B2CE8 00000000 */ nop +/* 0E7818 7F0B2CE8 00000000 */ nop /* 0E781C 7F0B2CEC 45020003 */ bc1fl .L7F0B2CFC /* 0E7820 7F0B2CF0 C4460000 */ lwc1 $f6, ($v0) /* 0E7824 7F0B2CF4 46007086 */ mov.s $f2, $f14 @@ -4994,7 +5221,7 @@ f32 sub_GAME_7F0B2D14(StandTile *tile) { -void sub_GAME_7F0B2D38(s8 arg0, s8 arg1, u16 arg2) { +void debugStanView(s8 joyX, s8 joyY, u16 joyBtns) { return; } @@ -5007,198 +5234,101 @@ Gfx * sub_GAME_7F0B2D48(Gfx *arg0) { -#ifdef NONMATCHING -void stanConvertNameStringToS32(void *arg0, void *arg1, void *arg2) { - s32 sp30; - void *sp38; - s32 temp_v1; - ? temp_ret; - s32 temp_v1_2; - s32 phi_v1; + /** + * Get 24bit id stanIdHi from id string + * @param stanIdHi: 1bit Type, 15bit Integer ID. + * @param stanIdLo: 5bit stanIdLo File (a-z) and 3bit subtri 0-7 + * canonically Named + */ +void stanPackId(char *id, u16 *stanIdHi, u8 *stanIdLo) +{ + u32 bitsnumber; // sp3c + char *str_end; // sp38 + s32 y; // sp34 + s32 bitsletter; // sp30 + s32 bitsfile; // sp2c + s32 bitssubtri; // sp28 + s32 var1; // sp24 - // Node 0 - temp_v1 = (*arg0 + -0x70); - if (temp_v1 < 0) + var1 = id[0] - 'p'; + + if (var1 < 0 || var1 > 1) // is p or q the first char (q never used?) { - // Node 14 - *arg1 = (u16)0xffff; - *arg2 = (u8)0xff; - // Node 15 - return; + #ifdef ENABLE_LOG + osSyncPrintf("stanPackId(): Bad letter chr \'%c\' in \"%s\"\n", id[0], id); + #endif } - // Node 1 - if (temp_v1 >= 2) + else { - // Node 14 - *arg1 = (u16)0xffff; - *arg2 = (u8)0xff; - // Node 15 - return; - } - // Node 2 - sp30 = temp_v1; - temp_ret = strtol((arg0 + 1), &sp38, 0xa); - if (sp38 == sp1C) - { - // Node 14 - *arg1 = (u16)0xffff; - *arg2 = (u8)0xff; - // Node 15 - return; - } - // Node 3 - if (temp_ret >= 0x8000U) - { - // Node 14 - *arg1 = (u16)0xffff; - *arg2 = (u8)0xff; - // Node 15 - return; - } - // Node 4 - temp_v1_2 = (*sp38 + -0x61); - if (temp_v1_2 < 0) - { - // Node 14 - *arg1 = (u16)0xffff; - *arg2 = (u8)0xff; - // Node 15 - return; - } - // Node 5 - if (temp_v1_2 >= 0x1a) - { - // Node 14 - *arg1 = (u16)0xffff; - *arg2 = (u8)0xff; - // Node 15 - return; - } - // Node 6 - phi_v1 = sp38->unk1; - if (sp38->unk1 != 0) - { - // Node 7 - phi_v1 = sp38->unk1; - if (sp38->unk1 != 0x30) + bitsletter = id[0] - 'p'; // yes this is right, Im duplicated. + bitsnumber = strtol(id + 1, &str_end, 10); + + if (id == str_end - 1) { - // Node 8 - phi_v1 = (sp38->unk1 + -0x30); + #ifdef ENABLE_LOG + osSyncPrintf("stanPackId(): Bad integer in \"%s\"\n", id); + #endif + } + else if (bitsnumber <= 32767) + { + if (str_end[0] - 'a' < 0 || str_end[0] - 'a' >= 26) + { + #ifdef ENABLE_LOG + osSyncPrintf("stanPackId(): Bad file chr \'%c\' in \"%s\"\n", str_end[0], id); + #endif + } + else + { + bitsfile = str_end[0] - 'a'; + if (1) + ; + bitssubtri = str_end[1]; + + if (bitssubtri != 0 && bitssubtri != '0') + { + bitssubtri -= '0'; + } + + if (bitssubtri < 0 || bitssubtri >= 8) + { + #ifdef ENABLE_LOG + osSyncPrintf("stanPackId(): Bad subtri chr \'%c\' in \"%s\"\n", str_end[1], id); + #endif + } + else + { + if (str_end[1] == 0 || str_end[2] == 0) + { + #ifdef DEBUG + assert(bitsletter>=0&&bitsletter<=1); // # 1094 "stan.c" + assert(bitsnumber>=0&&bitsnumber<=32767); // # 1095 "stan.c" + assert(bitsfile >=0&&bitsfile <=31); // # 1096 "stan.c" + assert(bitssubtri>=0&&bitssubtri<=7); // # 1097 "stan.c" + #endif + *stanIdHi = bitsletter << 0xf | bitsnumber; + *stanIdLo = bitsfile << 3 | bitssubtri; + return; + } + else + { + #ifdef ENABLE_LOG + osSyncPrintf("stanPackId(): Stan id too long \"%s\"\n", id); + #endif + } + } + } + } + else + { + #ifdef ENABLE_LOG + osSyncPrintf("stanPackId(): Integer %d out of range in \"%s\"\n", bitsnumber, id); + #endif } } - // Node 9 - if (phi_v1 < 0) - { - // Node 14 - *arg1 = (u16)0xffff; - *arg2 = (u8)0xff; - // Node 15 - return; - } - // Node 10 - if (phi_v1 >= 8) - { - // Node 14 - *arg1 = (u16)0xffff; - *arg2 = (u8)0xff; - // Node 15 - return; - } - // Node 11 - if (sp38->unk1 != 0) - { - // Node 12 - if (sp38->unk2 != 0) - { - // Node 14 - *arg1 = (u16)0xffff; - *arg2 = (u8)0xff; - // Node 15 - return; - } - } - // Node 13 - *arg1 = (s16) ((sp30 << 0xf) | temp_ret); - *arg2 = (s8) ((temp_v1_2 * 8) | phi_v1); + *stanIdHi = -1; + *stanIdLo = -1; return; } -#else -GLOBAL_ASM( -.text -glabel stanConvertNameStringToS32 -/* 0E7880 7F0B2D50 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 0E7884 7F0B2D54 AFBF0014 */ sw $ra, 0x14($sp) -/* 0E7888 7F0B2D58 AFA50044 */ sw $a1, 0x44($sp) -/* 0E788C 7F0B2D5C AFA60048 */ sw $a2, 0x48($sp) -/* 0E7890 7F0B2D60 90830000 */ lbu $v1, ($a0) -/* 0E7894 7F0B2D64 2463FF90 */ addiu $v1, $v1, -0x70 -/* 0E7898 7F0B2D68 04600031 */ bltz $v1, .L7F0B2E30 -/* 0E789C 7F0B2D6C 28610002 */ slti $at, $v1, 2 -/* 0E78A0 7F0B2D70 1020002F */ beqz $at, .L7F0B2E30 -/* 0E78A4 7F0B2D74 24840001 */ addiu $a0, $a0, 1 -/* 0E78A8 7F0B2D78 AFA30030 */ sw $v1, 0x30($sp) -/* 0E78AC 7F0B2D7C 27A50038 */ addiu $a1, $sp, 0x38 -/* 0E78B0 7F0B2D80 2406000A */ li $a2, 10 -/* 0E78B4 7F0B2D84 0C002A78 */ jal strtol -/* 0E78B8 7F0B2D88 AFA4001C */ sw $a0, 0x1c($sp) -/* 0E78BC 7F0B2D8C 8FA4001C */ lw $a0, 0x1c($sp) -/* 0E78C0 7F0B2D90 8FAE0038 */ lw $t6, 0x38($sp) -/* 0E78C4 7F0B2D94 34018000 */ li $at, 32768 -/* 0E78C8 7F0B2D98 0041082B */ sltu $at, $v0, $at -/* 0E78CC 7F0B2D9C 51C40025 */ beql $t6, $a0, .L7F0B2E34 -/* 0E78D0 7F0B2DA0 8FB90044 */ lw $t9, 0x44($sp) -/* 0E78D4 7F0B2DA4 10200022 */ beqz $at, .L7F0B2E30 -/* 0E78D8 7F0B2DA8 8FAF0038 */ lw $t7, 0x38($sp) -/* 0E78DC 7F0B2DAC 91E30000 */ lbu $v1, ($t7) -/* 0E78E0 7F0B2DB0 2463FF9F */ addiu $v1, $v1, -0x61 -/* 0E78E4 7F0B2DB4 0460001E */ bltz $v1, .L7F0B2E30 -/* 0E78E8 7F0B2DB8 2861001A */ slti $at, $v1, 0x1a -/* 0E78EC 7F0B2DBC 1020001C */ beqz $at, .L7F0B2E30 -/* 0E78F0 7F0B2DC0 8FB80038 */ lw $t8, 0x38($sp) -/* 0E78F4 7F0B2DC4 93040001 */ lbu $a0, 1($t8) -/* 0E78F8 7F0B2DC8 00602825 */ move $a1, $v1 -/* 0E78FC 7F0B2DCC 24010030 */ li $at, 48 -/* 0E7900 7F0B2DD0 10800004 */ beqz $a0, .L7F0B2DE4 -/* 0E7904 7F0B2DD4 00801825 */ move $v1, $a0 -/* 0E7908 7F0B2DD8 10610002 */ beq $v1, $at, .L7F0B2DE4 -/* 0E790C 7F0B2DDC 00000000 */ nop -/* 0E7910 7F0B2DE0 2463FFD0 */ addiu $v1, $v1, -0x30 -.L7F0B2DE4: -/* 0E7914 7F0B2DE4 04600012 */ bltz $v1, .L7F0B2E30 -/* 0E7918 7F0B2DE8 28610008 */ slti $at, $v1, 8 -/* 0E791C 7F0B2DEC 50200011 */ beql $at, $zero, .L7F0B2E34 -/* 0E7920 7F0B2DF0 8FB90044 */ lw $t9, 0x44($sp) -/* 0E7924 7F0B2DF4 10800004 */ beqz $a0, .L7F0B2E08 -/* 0E7928 7F0B2DF8 8FB90038 */ lw $t9, 0x38($sp) -/* 0E792C 7F0B2DFC 93280002 */ lbu $t0, 2($t9) -/* 0E7930 7F0B2E00 5500000C */ bnezl $t0, .L7F0B2E34 -/* 0E7934 7F0B2E04 8FB90044 */ lw $t9, 0x44($sp) -.L7F0B2E08: -/* 0E7938 7F0B2E08 8FA90030 */ lw $t1, 0x30($sp) -/* 0E793C 7F0B2E0C 8FAC0044 */ lw $t4, 0x44($sp) -/* 0E7940 7F0B2E10 000568C0 */ sll $t5, $a1, 3 -/* 0E7944 7F0B2E14 000953C0 */ sll $t2, $t1, 0xf -/* 0E7948 7F0B2E18 01425825 */ or $t3, $t2, $v0 -/* 0E794C 7F0B2E1C A58B0000 */ sh $t3, ($t4) -/* 0E7950 7F0B2E20 8FAF0048 */ lw $t7, 0x48($sp) -/* 0E7954 7F0B2E24 01A37025 */ or $t6, $t5, $v1 -/* 0E7958 7F0B2E28 10000007 */ b .L7F0B2E48 -/* 0E795C 7F0B2E2C A1EE0000 */ sb $t6, ($t7) -.L7F0B2E30: -/* 0E7960 7F0B2E30 8FB90044 */ lw $t9, 0x44($sp) -.L7F0B2E34: -/* 0E7964 7F0B2E34 3418FFFF */ li $t8, 65535 -/* 0E7968 7F0B2E38 240800FF */ li $t0, 255 -/* 0E796C 7F0B2E3C A7380000 */ sh $t8, ($t9) -/* 0E7970 7F0B2E40 8FA90048 */ lw $t1, 0x48($sp) -/* 0E7974 7F0B2E44 A1280000 */ sb $t0, ($t1) -.L7F0B2E48: -/* 0E7978 7F0B2E48 8FBF0014 */ lw $ra, 0x14($sp) -/* 0E797C 7F0B2E4C 27BD0040 */ addiu $sp, $sp, 0x40 -/* 0E7980 7F0B2E50 03E00008 */ jr $ra -/* 0E7984 7F0B2E54 00000000 */ nop -) -#endif @@ -5218,13 +5348,13 @@ glabel stanMatchTileName /* 0E7990 7F0B2E60 908E0000 */ lbu $t6, ($a0) /* 0E7994 7F0B2E64 27A50022 */ addiu $a1, $sp, 0x22 /* 0E7998 7F0B2E68 15C00003 */ bnez $t6, .L7F0B2E78 -/* 0E799C 7F0B2E6C 00000000 */ nop +/* 0E799C 7F0B2E6C 00000000 */ nop /* 0E79A0 7F0B2E70 1000001F */ b .L7F0B2EF0 /* 0E79A4 7F0B2E74 00001025 */ move $v0, $zero .L7F0B2E78: -/* 0E79A8 7F0B2E78 0FC2CB54 */ jal stanConvertNameStringToS32 +/* 0E79A8 7F0B2E78 0FC2CB54 */ jal stanPackId /* 0E79AC 7F0B2E7C 27A60021 */ addiu $a2, $sp, 0x21 -/* 0E79B0 7F0B2E80 3C0F8008 */ lui $t7, %hi(stan_prefix) +/* 0E79B0 7F0B2E80 3C0F8008 */ lui $t7, %hi(stan_prefix) /* 0E79B4 7F0B2E84 8DEFB120 */ lw $t7, %lo(stan_prefix)($t7) /* 0E79B8 7F0B2E88 3C058004 */ lui $a1, %hi(list_of_tilesizes) /* 0E79BC 7F0B2E8C 24A50F4C */ addiu $a1, %lo(list_of_tilesizes) # addiu $a1, $a1, 0xf4c @@ -5258,11 +5388,31 @@ glabel stanMatchTileName /* 0E7A20 7F0B2EF0 8FBF0014 */ lw $ra, 0x14($sp) /* 0E7A24 7F0B2EF4 27BD0028 */ addiu $sp, $sp, 0x28 /* 0E7A28 7F0B2EF8 03E00008 */ jr $ra -/* 0E7A2C 7F0B2EFC 00000000 */ nop +/* 0E7A2C 7F0B2EFC 00000000 */ nop ) #endif +#ifdef XBLADEBUG +StandTile RemovedDebugFunctionOrXBLAUnique_7F0B2EFC() +{ + lVar1 = param_2; + local_10 = *(stanPrefix + 4); + cStack00000017 = param_1; + sStack0000001e = param_2; + while( true ) { + if (*local_10 == 0) { + return NULL; + } + cVar2 = sStack0000001e; + if ((*local_10 == sStack0000001e) && (cVar2 = cStack00000017, *(local_10 + 2) == cStack00000017) + ) break; + local_10 = Function_8238ED08(local_10,lVar1,in_r5,in_r6,in_r7,in_r8,in_r9,cVar2, + in_stack_ffffffab,in_stack_ffffffaf,in_stack_ffffffb4); + } + return local_10; +} +#endif @@ -5276,67 +5426,36 @@ void sub_GAME_7F0B2F00(StandTilePoint** arg0) { #ifdef NONMATCHING // To try -void *stanDetermineEOF(void *arg0, s32 arg1, s32 arg2) { - s32 temp_v0; - void *temp_a3; - s32 temp_v1; - void *temp_a3_2; - void *temp_v0_2; - void *temp_v0_3; - s32 phi_v1; - void *phi_a3; - void *phi_a3_2; - void *phi_v0; +void *stanDetermineEOF(struct StanPrefixRecord *r, s32 arg1, s32 arg2) +{ + int iVar1; + StandTile *local_20; + StandTile **local_18; + + iVar1 = param_3._4_4_ - param_2._4_4_; + stanTileStart = r->ptr_firstroom + iVar1 + -0x80; + ptr_firstroom_0 = r->ptr_firstroom + iVar1; + stanPrefix = r; + #ifdef DEBUG + assert(*r==0); + #endif - // Node 0 - stan_prefix.stanfile = arg0; - temp_v0 = (arg2 - arg1); - standTileStart = (s32) ((arg0->unk4 + temp_v0) + -0x80); - ptr_firstroom_0 = (s32) (arg0->unk4 + temp_v0); - temp_a3 = (arg0 + 4); - phi_a3_2 = temp_a3; - if (arg0->unk4 != 0) - { - // Node 1 - phi_v1 = *temp_a3; - phi_a3 = temp_a3; -loop_2: - // Node 2 - temp_v1 = phi_a3->unk4; - *phi_a3 = (s32) (phi_v1 + temp_v0); - temp_a3_2 = (phi_a3 + 4); - phi_v1 = temp_v1; - phi_a3 = temp_a3_2; - phi_a3_2 = temp_a3_2; - if (temp_v1 != 0) - { - goto loop_2; - } - } - // Node 3 - temp_v0_2 = (phi_a3_2 + 4); - phi_v0 = temp_v0_2; - if (*temp_v0_2 != 0) - { -loop_4: - // Node 4 - D_80040F60 = (void *) phi_v0; - temp_v0_3 = (*(&list_of_tilesizes + (((s32) phi_v0->unk6 >> 0xc) & 0xf)) + phi_v0); - phi_v0 = temp_v0_3; - if (*temp_v0_3 != 0) - { - goto loop_4; - } - } - // Node 5 - stan_prefix.stanfile = arg0; - return temp_v0_2; + for (local_18 = &r->ptr_firstroom; *local_18 != NULL; local_18 = local_18 + 1) + { + *local_18 = *local_18 + iVar1; + } + for (local_20 = local_18 + 1; *local_20 != 0; local_20 = getNextStan(local_20)) + { + D_80040F60 = local_20; + } + stanPrefix = r; + return; } #else GLOBAL_ASM( .text glabel stanDetermineEOF -/* 0E7A5C 7F0B2F2C 3C088008 */ lui $t0, %hi(stan_prefix) +/* 0E7A5C 7F0B2F2C 3C088008 */ lui $t0, %hi(stan_prefix) /* 0E7A60 7F0B2F30 2508B120 */ addiu $t0, %lo(stan_prefix) # addiu $t0, $t0, -0x4ee0 /* 0E7A64 7F0B2F34 AD040000 */ sw $a0, ($t0) /* 0E7A68 7F0B2F38 8C8E0004 */ lw $t6, 4($a0) @@ -5368,7 +5487,7 @@ glabel stanDetermineEOF /* 0E7AC8 7F0B2F98 8C4C0000 */ lw $t4, ($v0) /* 0E7ACC 7F0B2F9C 24A50F60 */ addiu $a1, %lo(D_80040F60) # addiu $a1, $a1, 0xf60 /* 0E7AD0 7F0B2FA0 1180000B */ beqz $t4, .L7F0B2FD0 -/* 0E7AD4 7F0B2FA4 00000000 */ nop +/* 0E7AD4 7F0B2FA4 00000000 */ nop /* 0E7AD8 7F0B2FA8 ACA20000 */ sw $v0, ($a1) .L7F0B2FAC: /* 0E7ADC 7F0B2FAC 84430006 */ lh $v1, 6($v0) @@ -5450,7 +5569,83 @@ s32 sub_GAME_7F0B3044(void) { return sp1C; } -Gfx * sub_GAME_7F0B312C(Gfx *arg0, s32 arg1) { +Gfx * sub_GAME_7F0B312C(Gfx *arg0, s32 arg1) +{ + #ifdef DEBUG + qword *pqVar1; + qword *pqVar2; + int iVar3; + char cVar4; + ulonglong uVar5; + ulonglong uVar6; + uint uStack00000014; + stanRecord *psStack0000001c; + char cStack00000027; + ushort **ppuStack0000002c; + uint uStack00000034; + dword local_80; + char *local_30; + dword local_2c; + uint local_28; + dword local_24; + dword local_20; + qword local_10; + dword local_8; + + uStack00000034 = param_5; + ppuStack0000002c = param_4; + uVar6 = ZEXT48(param_2); + *ppuStack0000002c = param_2; + local_30 = &DAT_00000001; + uStack00000014 = param_1; + psStack0000001c = param_2; + cStack00000027 = param_3; + pqVar1 = Function_8237F158(); + pqVar2 = Function_8237F058(); + uVar5 = 0; + Function_82278968(pqVar2,pqVar1,0,param_4,param_5,param_6,uVar6); + do { + do { + if (local_30 == NULL) { + Function_82279088(); + return; + } + local_30 = local_30 + -1; + psStack0000001c = ppuStack0000002c[local_30]; + } while (*psStack0000001c >> 0xf == cStack00000027); + *psStack0000001c = *psStack0000001c ^ 0x8000; + sub_GAME_7F0AF760(psStack0000001c); + iVar3 = sub_GAME_7F0B3044(); + if (iVar3 != 0) { + Function_8238AC90(psStack0000001c,uStack00000014,uVar5,param_4,param_5,param_6,uVar6); + } + for (local_28 = 0; cVar4 = getsides(psStack0000001c), local_28 < cVar4; local_28 = local_28 + 1) + { + if (psStack0000001c[local_28 + 1].tail >> 4 == 0) { + iVar3 = sub_GAME_7F0B3044(); + if (iVar3 != 0) { + uVar5 = local_28 + 1; + cVar4 = getsides(psStack0000001c); + trapWord(6,cVar4,0); + trapWord(5,cVar4 & ~(((uVar5 & 0x7fffffff) << 1 | (uVar5 << 0x20) >> 0x3f) - 1),0xffff); + uVar5 = uVar5 - (uVar5 / cVar4) * cVar4; + param_4 = 0xffffffffffffffc0; + Function_8238B8F0(psStack0000001c,local_28,uVar5,0xffffffffffffffc0,param_5,param_6,uVar6) + ; + } + } + else if (*(stanTileStart + psStack0000001c[local_28 + 1].tail) >> 0xf != cStack00000027) { + uVar6 = ZEXT48(ppuStack0000002c); + ppuStack0000002c[local_30] = stanTileStart + psStack0000001c[local_28 + 1].tail; + local_30 = local_30 + 1; + if (uStack00000034 < local_30) { + osSyncPrintf("stanFillinVis: Stack overflow %d>%d",local_30,uStack00000034); + return; + } + } + } + } while( TRUE ); + #endif return arg0; } @@ -5458,9 +5653,9 @@ Gfx * sub_GAME_7F0B312C(Gfx *arg0, s32 arg1) { // Only difference is an extra sw a1,0x34(sp) appearing. // There is the unused first argument which may have the wrong type int sub_GAME_7F0B3138(void* unused, StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, - int objFlags, f32 unkHeight, f32 unkA) { + int cdtypes, f32 unkHeight, f32 unkA) { - return stanTestLineUnobstructed(pTile, p_x, p_z, dest_x, dest_z, objFlags, unkHeight, unkA, 0, 1); + return stanTestLineUnobstructed(pTile, p_x, p_z, dest_x, dest_z, cdtypes, unkHeight, unkA, 0, 1); } #else GLOBAL_ASM( @@ -5492,44 +5687,17 @@ glabel sub_GAME_7F0B3138 /* 0E7CC4 7F0B3194 8FBF002C */ lw $ra, 0x2c($sp) /* 0E7CC8 7F0B3198 27BD0030 */ addiu $sp, $sp, 0x30 /* 0E7CCC 7F0B319C 03E00008 */ jr $ra -/* 0E7CD0 7F0B31A0 00000000 */ nop +/* 0E7CD0 7F0B31A0 00000000 */ nop ) #endif -#ifdef NONMATCHING -void sub_GAME_7F0B31A4(StandTile ** arg1, f32 arg0, f32 arg2, f32 arg3, f32 arg4, s32 arg5, f32 arg6, f32 arg7) { - // almost a match. missing sw a0,0x28(sp) and move a0,a1 instructions + +void sub_GAME_7F0B31A4(s32 arg0, StandTile *arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5, f32 arg6, f32 arg7) { stanTestVolume(arg1, arg2, arg3, arg4, arg5, arg6, arg7); } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0B31A4 -/* 0E7CD4 7F0B31A4 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0E7CD8 7F0B31A8 44866000 */ mtc1 $a2, $f12 -/* 0E7CDC 7F0B31AC 44877000 */ mtc1 $a3, $f14 -/* 0E7CE0 7F0B31B0 AFA40028 */ sw $a0, 0x28($sp) -/* 0E7CE4 7F0B31B4 8FAE003C */ lw $t6, 0x3c($sp) -/* 0E7CE8 7F0B31B8 C7A40040 */ lwc1 $f4, 0x40($sp) -/* 0E7CEC 7F0B31BC C7A60044 */ lwc1 $f6, 0x44($sp) -/* 0E7CF0 7F0B31C0 AFA5002C */ sw $a1, 0x2c($sp) -/* 0E7CF4 7F0B31C4 00A02025 */ move $a0, $a1 -/* 0E7CF8 7F0B31C8 AFBF0024 */ sw $ra, 0x24($sp) -/* 0E7CFC 7F0B31CC 44056000 */ mfc1 $a1, $f12 -/* 0E7D00 7F0B31D0 44067000 */ mfc1 $a2, $f14 -/* 0E7D04 7F0B31D4 8FA70038 */ lw $a3, 0x38($sp) -/* 0E7D08 7F0B31D8 AFAE0010 */ sw $t6, 0x10($sp) -/* 0E7D0C 7F0B31DC E7A40014 */ swc1 $f4, 0x14($sp) -/* 0E7D10 7F0B31E0 0FC2C62E */ jal stanTestVolume -/* 0E7D14 7F0B31E4 E7A60018 */ swc1 $f6, 0x18($sp) -/* 0E7D18 7F0B31E8 8FBF0024 */ lw $ra, 0x24($sp) -/* 0E7D1C 7F0B31EC 27BD0028 */ addiu $sp, $sp, 0x28 -/* 0E7D20 7F0B31F0 03E00008 */ jr $ra -/* 0E7D24 7F0B31F4 00000000 */ nop -) -#endif + diff --git a/src/game/stan.h b/src/game/stan.h index a7c4845..c136d70 100644 --- a/src/game/stan.h +++ b/src/game/stan.h @@ -14,7 +14,7 @@ #define STAN_MID_G(tile) ((tile->mid.half >> 0x08) & 0xF) #define STAN_MID_B(tile) ((tile->mid.half >> 0x0C) & 0xF) -#define STAN_TAIL_POINT_COUNT(tile) (tile->tail.half & 0xF) +#define STAN_TAIL_POINT_COUNT(tile) (tile->tail.half & 0xF)/*canonically getsides()*/ #define STAN_TAIL_C(tile) ((tile->tail.half >> 0x04) & 0xF) #define STAN_TAIL_D(tile) ((tile->tail.half >> 0x08) & 0xF) #define STAN_TAIL_E(tile) ((tile->tail.half >> 0x0C) & 0xF) @@ -43,7 +43,7 @@ void noteTileRoomIfDifferentToPrev( StandTile *tile, StandTile *unused, struct void stanInit(void); -void sub_GAME_7F0B2D38(s8 arg0, s8 arg1, u16 arg2); +void debugStanView(s8 joyX, s8 joyY, u16 joyBtns); void sub_GAME_7F0AF630(s32 arg0); void sub_GAME_7F0B1CC4(void); Gfx * sub_GAME_7F0B2D48(Gfx *arg0); @@ -58,11 +58,11 @@ s32 getCollisionEdge_maybe(coord3d *pntA, coord3d *pntB); s32 sub_GAME_7F0B26B8(StandTile **tile, f32 target_x, f32 target_z, f32 b_z, f32 param_5); s32 sub_GAME_7F0B20D0(StandTile** tileStack, f32 target_x, f32 target_z, f32 unknown); -s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, int objFlags, f32 unkHeight, f32 unkA, f32 unkB, f32 unkC); +s32 stanTestLineUnobstructed(StandTile **pTile, f32 p_x, f32 p_z, f32 dest_x, f32 dest_z, int cdtypes, f32 unkHeight, f32 unkA, f32 unkB, f32 unkC); StandTile* sub_GAME_7F0B2718(StandTile* srcTile, tilePredicate_t tilePred); s32 sub_GAME_7F0B0D0C(StandTile *tile, f32 start_x, f32 start_z, StandTile **tilePtr, f32 end_x, f32 end_z, s32 *roomBuf, s32 maxBufSize); s32 sub_GAME_7F0B0C24(StandTile **tileStack, f32 start_x, f32 start_z, f32 dest_x, f32 dest_z, s32 *roomBuffer, s32 *rtnCountSize, s32 maxBufSize); -s32 stanTestVolume(StandTile **, f32 posX, f32 posY, f32 radius, s32 integer, f32 float1, f32 float2); +s32 stanTestVolume(StandTile **, f32 posX, f32 posY, f32 radius, s32 cdtypes, f32 float1, f32 float2); s32 getTileRoom(StandTile* tile); PropRecord *sub_GAME_7F0B1410(StandTile *arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, s32 arg5); void copy_tile_RGB_as_24bit(StandTile *tile, f32 p_x, f32 p_z, u8 *rtn); @@ -75,4 +75,6 @@ f32 sub_GAME_7F0B16C4(f32 x1, f32 z1, f32 x2, f32 z2, f32 x3, f32 z3); void stanGetMoveBondCollisionTiles(struct StandTile **arg0, struct StandTile **arg1, struct move_bond_collision *arg2); struct StandTile *sub_GAME_7F0AFB78(f32 *arg_x, f32 *arg_y, f32 *arg_z, f32 arg3); s32 sub_GAME_7F0B0688(f32 arg0, f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7); +struct StandTile *stanMatchTileName(char *); +s32 isPointInsideTriStandTileUnscaled_Maybe(struct StandTile *tile, f32 p_x, f32 p_z); #endif diff --git a/src/game/textrelated.c b/src/game/textrelated.c index e662c36..8df78d5 100644 --- a/src/game/textrelated.c +++ b/src/game/textrelated.c @@ -52,8 +52,14 @@ s32 D_80040F28 = 0; -void textrelatedInit_REMOVED(void) { - +void textrelatedInit_REMOVED(void /*, char* asset */) +{ + #ifdef DEBUG + if (asset == 0) + { + osSyncPrintf("\n--- ASSERTION FAULT - %s - %s, line %d\n\n", "textInitText: NULL void* asset", ".\\text.cpp", 0x38 ); + } + #endif } void setTextSpacingInverted(s32 spacing) { @@ -105,7 +111,7 @@ void load_font_tables(void) text_s = 0; MACROSIZE = 0x24b0 - 0; text_t = 0; - ptrFontBankGothic = mempAllocBytesInBank(MACROSIZE, 4); + ptrFontBankGothic = mempAllocBytesInBank(MACROSIZE, MEMPOOL_STAGE); ptrFontBankGothicChars = (s32) (ptrFontBankGothic + 0x2a4); romCopy(&ptrFontBankGothic, &_fontbankgothicSegmentRomStart, MACROSIZE); i = 0; @@ -119,7 +125,7 @@ loop_1: goto loop_1; } MACROSIZE = 0x3540 - 0; - ptrFontZurichBold = mempAllocBytesInBank(MACROSIZE, 4); + ptrFontZurichBold = mempAllocBytesInBank(MACROSIZE, MEMPOOL_STAGE); ptrFontZurichBoldChars = (s32) (ptrFontZurichBold + 0x2a4); romCopy(&ptrFontZurichBold, &_fontzurichboldSegmentRomStart, MACROSIZE); ptrFontZurichBoldChars->unk14 = (s32) (ptrFontZurichBoldChars->unk14 + ptrFontZurichBold); @@ -176,7 +182,7 @@ glabel load_font_tables /* 0E174C 7F0ACC1C 0C0025C8 */ jal mempAllocBytesInBank /* 0E1750 7F0ACC20 24050004 */ li $a1, 4 /* 0E1754 7F0ACC24 3C078004 */ lui $a3, %hi(ptrFontBankGothic) -/* 0E1758 7F0ACC28 3C088004 */ lui $t0, %hi(ptrFontBankGothicChars) +/* 0E1758 7F0ACC28 3C088004 */ lui $t0, %hi(ptrFontBankGothicChars) /* 0E175C 7F0ACC2C 25080EB0 */ addiu $t0, %lo(ptrFontBankGothicChars) # addiu $t0, $t0, 0xeb0 /* 0E1760 7F0ACC30 24E70EAC */ addiu $a3, %lo(ptrFontBankGothic) # addiu $a3, $a3, 0xeac /* 0E1764 7F0ACC34 245902A4 */ addiu $t9, $v0, 0x2a4 @@ -188,7 +194,7 @@ glabel load_font_tables /* 0E177C 7F0ACC4C 0C001707 */ jal romCopy /* 0E1780 7F0ACC50 24A563F0 */ addiu $a1, %lo(_fontbankgothicSegmentRomStart) # addiu $a1, $a1, 0x63f0 /* 0E1784 7F0ACC54 3C078004 */ lui $a3, %hi(ptrFontBankGothic) -/* 0E1788 7F0ACC58 3C088004 */ lui $t0, %hi(ptrFontBankGothicChars) +/* 0E1788 7F0ACC58 3C088004 */ lui $t0, %hi(ptrFontBankGothicChars) /* 0E178C 7F0ACC5C 25080EB0 */ addiu $t0, %lo(ptrFontBankGothicChars) # addiu $t0, $t0, 0xeb0 /* 0E1790 7F0ACC60 24E70EAC */ addiu $a3, %lo(ptrFontBankGothic) # addiu $a3, $a3, 0xeac /* 0E1794 7F0ACC64 00001825 */ move $v1, $zero @@ -212,7 +218,7 @@ glabel load_font_tables /* 0E17D8 7F0ACCA8 0C0025C8 */ jal mempAllocBytesInBank /* 0E17DC 7F0ACCAC 24050004 */ li $a1, 4 /* 0E17E0 7F0ACCB0 3C078004 */ lui $a3, %hi(ptrFontZurichBold) -/* 0E17E4 7F0ACCB4 3C088004 */ lui $t0, %hi(ptrFontZurichBoldChars) +/* 0E17E4 7F0ACCB4 3C088004 */ lui $t0, %hi(ptrFontZurichBoldChars) /* 0E17E8 7F0ACCB8 25080EB8 */ addiu $t0, %lo(ptrFontZurichBoldChars) # addiu $t0, $t0, 0xeb8 /* 0E17EC 7F0ACCBC 24E70EB4 */ addiu $a3, %lo(ptrFontZurichBold) # addiu $a3, $a3, 0xeb4 /* 0E17F0 7F0ACCC0 244F02A4 */ addiu $t7, $v0, 0x2a4 @@ -223,7 +229,7 @@ glabel load_font_tables /* 0E1804 7F0ACCD4 00402025 */ move $a0, $v0 /* 0E1808 7F0ACCD8 0C001707 */ jal romCopy /* 0E180C 7F0ACCDC 24A588A0 */ addiu $a1, %lo(_fontzurichboldSegmentRomStart) # addiu $a1, $a1, -0x7760 -/* 0E1810 7F0ACCE0 3C088004 */ lui $t0, %hi(ptrFontZurichBoldChars) +/* 0E1810 7F0ACCE0 3C088004 */ lui $t0, %hi(ptrFontZurichBoldChars) /* 0E1814 7F0ACCE4 25080EB8 */ addiu $t0, %lo(ptrFontZurichBoldChars) # addiu $t0, $t0, 0xeb8 /* 0E1818 7F0ACCE8 8D020000 */ lw $v0, ($t0) /* 0E181C 7F0ACCEC 3C078004 */ lui $a3, %hi(ptrFontZurichBold) @@ -269,7 +275,7 @@ glabel load_font_tables /* 0E18B8 7F0ACD88 8FBF0014 */ lw $ra, 0x14($sp) /* 0E18BC 7F0ACD8C 27BD0028 */ addiu $sp, $sp, 0x28 /* 0E18C0 7F0ACD90 03E00008 */ jr $ra -/* 0E18C4 7F0ACD94 00000000 */ nop +/* 0E18C4 7F0ACD94 00000000 */ nop ) #endif @@ -487,7 +493,7 @@ glabel construct_fontchar_microcode /* 0E1C6C 7F0AD13C 030E7821 */ addu $t7, $t8, $t6 /* 0E1C70 7F0AD140 00196080 */ sll $t4, $t9, 2 /* 0E1C74 7F0AD144 01EC6821 */ addu $t5, $t7, $t4 -/* 0E1C78 7F0AD148 3C0E8004 */ lui $t6, %hi(text_spacing) +/* 0E1C78 7F0AD148 3C0E8004 */ lui $t6, %hi(text_spacing) /* 0E1C7C 7F0AD14C 8DCE0E84 */ lw $t6, %lo(text_spacing)($t6) /* 0E1C80 7F0AD150 8DB80000 */ lw $t8, ($t5) /* 0E1C84 7F0AD154 8CAF0000 */ lw $t7, ($a1) @@ -496,7 +502,7 @@ glabel construct_fontchar_microcode /* 0E1C90 7F0AD160 01E26023 */ subu $t4, $t7, $v0 /* 0E1C94 7F0AD164 258D0001 */ addiu $t5, $t4, 1 /* 0E1C98 7F0AD168 ACAD0000 */ sw $t5, ($a1) -/* 0E1C9C 7F0AD16C 3C188004 */ lui $t8, %hi(text_orientation) +/* 0E1C9C 7F0AD16C 3C188004 */ lui $t8, %hi(text_orientation) /* 0E1CA0 7F0AD170 8F180E88 */ lw $t8, %lo(text_orientation)($t8) /* 0E1CA4 7F0AD174 00E08825 */ move $s1, $a3 /* 0E1CA8 7F0AD178 57000014 */ bnezl $t8, .L7F0AD1CC @@ -590,7 +596,7 @@ glabel construct_fontchar_microcode /* 0E1E04 7F0AD2D4 2702FFFF */ addiu $v0, $t8, -1 /* 0E1E08 7F0AD2D8 284107FF */ slti $at, $v0, 0x7ff /* 0E1E0C 7F0AD2DC 10200003 */ beqz $at, .L7F0AD2EC -/* 0E1E10 7F0AD2E0 00000000 */ nop +/* 0E1E10 7F0AD2E0 00000000 */ nop /* 0E1E14 7F0AD2E4 10000001 */ b .L7F0AD2EC /* 0E1E18 7F0AD2E8 00403025 */ move $a2, $v0 .L7F0AD2EC: @@ -615,14 +621,14 @@ glabel construct_fontchar_microcode .L7F0AD324: /* 0E1E54 7F0AD324 01A5001A */ div $zero, $t5, $a1 /* 0E1E58 7F0AD328 14A00002 */ bnez $a1, .L7F0AD334 -/* 0E1E5C 7F0AD32C 00000000 */ nop +/* 0E1E5C 7F0AD32C 00000000 */ nop /* 0E1E60 7F0AD330 0007000D */ break 7 .L7F0AD334: /* 0E1E64 7F0AD334 2401FFFF */ li $at, -1 /* 0E1E68 7F0AD338 14A10004 */ bne $a1, $at, .L7F0AD34C /* 0E1E6C 7F0AD33C 3C018000 */ lui $at, 0x8000 /* 0E1E70 7F0AD340 15A10002 */ bne $t5, $at, .L7F0AD34C -/* 0E1E74 7F0AD344 00000000 */ nop +/* 0E1E74 7F0AD344 00000000 */ nop /* 0E1E78 7F0AD348 0006000D */ break 6 .L7F0AD34C: /* 0E1E7C 7F0AD34C 00007012 */ mflo $t6 @@ -858,7 +864,7 @@ glabel construct_fontchar_microcode /* 0E2200 7F0AD6D0 542000B4 */ bnezl $at, .L7F0AD9A4 /* 0E2204 7F0AD6D4 8E2E0008 */ lw $t6, 8($s1) /* 0E2208 7F0AD6D8 8E2C0008 */ lw $t4, 8($s1) -/* 0E220C 7F0AD6DC 3C0D8004 */ lui $t5, %hi(text_orientation) +/* 0E220C 7F0AD6DC 3C0D8004 */ lui $t5, %hi(text_orientation) /* 0E2210 7F0AD6E0 006C1021 */ addu $v0, $v1, $t4 /* 0E2214 7F0AD6E4 0162082A */ slt $at, $t3, $v0 /* 0E2218 7F0AD6E8 54200077 */ bnezl $at, .L7F0AD8C8 @@ -909,11 +915,11 @@ glabel construct_fontchar_microcode /* 0E22CC 7F0AD79C 3C0FB400 */ lui $t7, 0xb400 /* 0E22D0 7F0AD7A0 AC6F0000 */ sw $t7, ($v1) /* 0E22D4 7F0AD7A4 8E380008 */ lw $t8, 8($s1) -/* 0E22D8 7F0AD7A8 3C0C8004 */ lui $t4, %hi(text_s) +/* 0E22D8 7F0AD7A8 3C0C8004 */ lui $t4, %hi(text_s) /* 0E22DC 7F0AD7AC 8D8C0EA0 */ lw $t4, %lo(text_s)($t4) /* 0E22E0 7F0AD7B0 2719FFFF */ addiu $t9, $t8, -1 /* 0E22E4 7F0AD7B4 00197140 */ sll $t6, $t9, 5 -/* 0E22E8 7F0AD7B8 3C188004 */ lui $t8, %hi(text_t) +/* 0E22E8 7F0AD7B8 3C188004 */ lui $t8, %hi(text_t) /* 0E22EC 7F0AD7BC 8F190EA4 */ lw $t9, %lo(text_t)($t8) /* 0E22F0 7F0AD7C0 01CC6821 */ addu $t5, $t6, $t4 /* 0E22F4 7F0AD7C4 31AFFFFF */ andi $t7, $t5, 0xffff @@ -965,9 +971,9 @@ glabel construct_fontchar_microcode /* 0E23A8 7F0AD878 AC6F0004 */ sw $t7, 4($v1) /* 0E23AC 7F0AD87C 3C18B400 */ lui $t8, 0xb400 /* 0E23B0 7F0AD880 AC980000 */ sw $t8, ($a0) -/* 0E23B4 7F0AD884 3C0C8004 */ lui $t4, %hi(text_s) +/* 0E23B4 7F0AD884 3C0C8004 */ lui $t4, %hi(text_s) /* 0E23B8 7F0AD888 8D8D0EA0 */ lw $t5, %lo(text_s)($t4) -/* 0E23BC 7F0AD88C 3C0E8004 */ lui $t6, %hi(text_t) +/* 0E23BC 7F0AD88C 3C0E8004 */ lui $t6, %hi(text_t) /* 0E23C0 7F0AD890 8DCE0EA4 */ lw $t6, %lo(text_t)($t6) /* 0E23C4 7F0AD894 000DCC00 */ sll $t9, $t5, 0x10 /* 0E23C8 7F0AD898 3C0D0400 */ lui $t5, (0x04000400 >> 16) # lui $t5, 0x400 @@ -1021,9 +1027,9 @@ glabel construct_fontchar_microcode /* 0E2484 7F0AD954 AC590004 */ sw $t9, 4($v0) /* 0E2488 7F0AD958 3C0DB400 */ lui $t5, 0xb400 /* 0E248C 7F0AD95C AC6D0000 */ sw $t5, ($v1) -/* 0E2490 7F0AD960 3C0F8004 */ lui $t7, %hi(text_s) +/* 0E2490 7F0AD960 3C0F8004 */ lui $t7, %hi(text_s) /* 0E2494 7F0AD964 8DF80EA0 */ lw $t8, %lo(text_s)($t7) -/* 0E2498 7F0AD968 3C0E8004 */ lui $t6, %hi(text_t) +/* 0E2498 7F0AD968 3C0E8004 */ lui $t6, %hi(text_t) /* 0E249C 7F0AD96C 8DCE0EA4 */ lw $t6, %lo(text_t)($t6) /* 0E24A0 7F0AD970 00186400 */ sll $t4, $t8, 0x10 /* 0E24A4 7F0AD974 3C180400 */ lui $t8, (0x04000400 >> 16) # lui $t8, 0x400 @@ -1080,11 +1086,11 @@ glabel construct_fontchar_microcode /* 0E256C 7F0ADA3C AC990000 */ sw $t9, ($a0) /* 0E2570 7F0ADA40 8E2E0004 */ lw $t6, 4($s1) /* 0E2574 7F0ADA44 01496823 */ subu $t5, $t2, $t1 -/* 0E2578 7F0ADA48 3C188004 */ lui $t8, %hi(text_t) +/* 0E2578 7F0ADA48 3C188004 */ lui $t8, %hi(text_t) /* 0E257C 7F0ADA4C 01AE6023 */ subu $t4, $t5, $t6 /* 0E2580 7F0ADA50 8F180EA4 */ lw $t8, %lo(text_t)($t8) /* 0E2584 7F0ADA54 000C7940 */ sll $t7, $t4, 5 -/* 0E2588 7F0ADA58 3C0E8004 */ lui $t6, %hi(text_s) +/* 0E2588 7F0ADA58 3C0E8004 */ lui $t6, %hi(text_s) /* 0E258C 7F0ADA5C 8DCC0EA0 */ lw $t4, %lo(text_s)($t6) /* 0E2590 7F0ADA60 01F8C821 */ addu $t9, $t7, $t8 /* 0E2594 7F0ADA64 332DFFFF */ andi $t5, $t9, 0xffff @@ -1157,7 +1163,7 @@ glabel textRender /* 0E2658 7F0ADB28 01095021 */ addu $t2, $t0, $t1 /* 0E265C 7F0ADB2C AFAA00D0 */ sw $t2, 0xd0($sp) .L7F0ADB30: -/* 0E2660 7F0ADB30 3C0B8005 */ lui $t3, %hi(j_text_trigger) +/* 0E2660 7F0ADB30 3C0B8005 */ lui $t3, %hi(j_text_trigger) /* 0E2664 7F0ADB34 8D6B84D0 */ lw $t3, %lo(j_text_trigger)($t3) /* 0E2668 7F0ADB38 8FAC00D0 */ lw $t4, 0xd0($sp) /* 0E266C 7F0ADB3C 02602025 */ move $a0, $s3 @@ -1364,7 +1370,7 @@ glabel textRender /* 0E2658 7F0ADB28 01095021 */ addu $t2, $t0, $t1 /* 0E265C 7F0ADB2C AFAA00D0 */ sw $t2, 0xd0($sp) .L7F0ADB30: -/* 0E2660 7F0ADB30 3C0B8005 */ lui $t3, %hi(j_text_trigger) +/* 0E2660 7F0ADB30 3C0B8005 */ lui $t3, %hi(j_text_trigger) /* 0E2664 7F0ADB34 8D6B84D0 */ lw $t3, %lo(j_text_trigger)($t3) /* 0E2668 7F0ADB38 8FAC00D0 */ lw $t4, 0xd0($sp) /* 0E266C 7F0ADB3C 02602025 */ move $a0, $s3 @@ -1787,7 +1793,7 @@ glabel sub_GAME_7F0ADDAC /* 0E2940 7F0ADE10 032C6821 */ addu $t5, $t9, $t4 /* 0E2944 7F0ADE14 000E7880 */ sll $t7, $t6, 2 /* 0E2948 7F0ADE18 01AFC021 */ addu $t8, $t5, $t7 -/* 0E294C 7F0ADE1C 3C0A8004 */ lui $t2, %hi(text_spacing) +/* 0E294C 7F0ADE1C 3C0A8004 */ lui $t2, %hi(text_spacing) /* 0E2950 7F0ADE20 8D4A0E84 */ lw $t2, %lo(text_spacing)($t2) /* 0E2954 7F0ADE24 8F090000 */ lw $t1, ($t8) /* 0E2958 7F0ADE28 8CAB0000 */ lw $t3, ($a1) @@ -1808,7 +1814,7 @@ glabel sub_GAME_7F0ADDAC /* 0E2994 7F0ADE64 5420016C */ bnezl $at, .L7F0AE418 /* 0E2998 7F0ADE68 8FA50064 */ lw $a1, 0x64($sp) /* 0E299C 7F0ADE6C 0C00110B */ jal viGetY -/* 0E29A0 7F0ADE70 00000000 */ nop +/* 0E29A0 7F0ADE70 00000000 */ nop /* 0E29A4 7F0ADE74 8FB80050 */ lw $t8, 0x50($sp) /* 0E29A8 7F0ADE78 8FC90004 */ lw $t1, 4($fp) /* 0E29AC 7F0ADE7C 8FAA0064 */ lw $t2, 0x64($sp) @@ -1882,7 +1888,7 @@ glabel sub_GAME_7F0ADDAC /* 0E2ABC 7F0ADF8C 25A2FFFF */ addiu $v0, $t5, -1 /* 0E2AC0 7F0ADF90 284107FF */ slti $at, $v0, 0x7ff /* 0E2AC4 7F0ADF94 10200003 */ beqz $at, .L7F0ADFA4 -/* 0E2AC8 7F0ADF98 00000000 */ nop +/* 0E2AC8 7F0ADF98 00000000 */ nop /* 0E2ACC 7F0ADF9C 10000001 */ b .L7F0ADFA4 /* 0E2AD0 7F0ADFA0 00403025 */ move $a2, $v0 .L7F0ADFA4: @@ -1917,14 +1923,14 @@ glabel sub_GAME_7F0ADDAC /* 0E2B30 7F0AE000 AC400004 */ sw $zero, 4($v0) /* 0E2B34 7F0AE004 8FCE000C */ lw $t6, 0xc($fp) /* 0E2B38 7F0AE008 14A00002 */ bnez $a1, .L7F0AE014 -/* 0E2B3C 7F0AE00C 00000000 */ nop +/* 0E2B3C 7F0AE00C 00000000 */ nop /* 0E2B40 7F0AE010 0007000D */ break 7 .L7F0AE014: /* 0E2B44 7F0AE014 2401FFFF */ li $at, -1 /* 0E2B48 7F0AE018 14A10004 */ bne $a1, $at, .L7F0AE02C /* 0E2B4C 7F0AE01C 3C018000 */ lui $at, 0x8000 /* 0E2B50 7F0AE020 15E10002 */ bne $t7, $at, .L7F0AE02C -/* 0E2B54 7F0AE024 00000000 */ nop +/* 0E2B54 7F0AE024 00000000 */ nop /* 0E2B58 7F0AE028 0006000D */ break 6 .L7F0AE02C: /* 0E2B5C 7F0AE02C 25CD0007 */ addiu $t5, $t6, 7 @@ -2155,7 +2161,7 @@ glabel sub_GAME_7F0ADDAC /* 0E2EC4 7F0AE394 26100001 */ addiu $s0, $s0, 1 .L7F0AE398: /* 0E2EC8 7F0AE398 1612FFEE */ bne $s0, $s2, .L7F0AE354 -/* 0E2ECC 7F0AE39C 00000000 */ nop +/* 0E2ECC 7F0AE39C 00000000 */ nop /* 0E2ED0 7F0AE3A0 26310001 */ addiu $s1, $s1, 1 /* 0E2ED4 7F0AE3A4 5632FFEB */ bnel $s1, $s2, .L7F0AE354 /* 0E2ED8 7F0AE3A8 2410FFFF */ li $s0, -1 @@ -2227,7 +2233,7 @@ glabel sub_GAME_7F0AE45C /* 0E2F9C 7F0AE46C 01F8C821 */ addu $t9, $t7, $t8 /* 0E2FA0 7F0AE470 0322082A */ slt $at, $t9, $v0 /* 0E2FA4 7F0AE474 1420009B */ bnez $at, .L7F0AE6E4 -/* 0E2FA8 7F0AE478 00000000 */ nop +/* 0E2FA8 7F0AE478 00000000 */ nop /* 0E2FAC 7F0AE47C 8CE30004 */ lw $v1, 4($a3) /* 0E2FB0 7F0AE480 8FA90014 */ lw $t1, 0x14($sp) /* 0E2FB4 7F0AE484 8FAC001C */ lw $t4, 0x1c($sp) @@ -2237,7 +2243,7 @@ glabel sub_GAME_7F0AE45C /* 0E2FC4 7F0AE494 8CEF0008 */ lw $t7, 8($a3) /* 0E2FC8 7F0AE498 8CED0008 */ lw $t5, 8($a3) /* 0E2FCC 7F0AE49C 012C5021 */ addu $t2, $t1, $t4 -/* 0E2FD0 7F0AE4A0 3C0E8004 */ lui $t6, %hi(text_orientation) +/* 0E2FD0 7F0AE4A0 3C0E8004 */ lui $t6, %hi(text_orientation) /* 0E2FD4 7F0AE4A4 010D5821 */ addu $t3, $t0, $t5 /* 0E2FD8 7F0AE4A8 014B082A */ slt $at, $t2, $t3 /* 0E2FDC 7F0AE4AC 54200047 */ bnezl $at, .L7F0AE5CC @@ -2437,7 +2443,7 @@ glabel textRenderGlow /* 0E3288 7F0AE758 01095021 */ addu $t2, $t0, $t1 /* 0E328C 7F0AE75C AFAA00C4 */ sw $t2, 0xc4($sp) .L7F0AE760: -/* 0E3290 7F0AE760 3C0B8005 */ lui $t3, %hi(j_text_trigger) +/* 0E3290 7F0AE760 3C0B8005 */ lui $t3, %hi(j_text_trigger) /* 0E3294 7F0AE764 8D6B84D0 */ lw $t3, %lo(j_text_trigger)($t3) /* 0E3298 7F0AE768 8FAC00C4 */ lw $t4, 0xc4($sp) /* 0E329C 7F0AE76C 27B20074 */ addiu $s2, $sp, 0x74 @@ -2621,7 +2627,7 @@ glabel textRenderGlow /* 0E3288 7F0AE758 01095021 */ addu $t2, $t0, $t1 /* 0E328C 7F0AE75C AFAA00C4 */ sw $t2, 0xc4($sp) .L7F0AE760: -/* 0E3290 7F0AE760 3C0B8005 */ lui $t3, %hi(j_text_trigger) +/* 0E3290 7F0AE760 3C0B8005 */ lui $t3, %hi(j_text_trigger) /* 0E3294 7F0AE764 8D6B84D0 */ lw $t3, %lo(j_text_trigger)($t3) /* 0E3298 7F0AE768 8FAC00C4 */ lw $t4, 0xc4($sp) /* 0E329C 7F0AE76C 27B20074 */ addiu $s2, $sp, 0x74 @@ -3059,7 +3065,7 @@ glabel textMeasure /* 0E34EC 7F0AE9BC 8CEF088C */ lw $t7, 0x88c($a3) /* 0E34F0 7F0AE9C0 01CF8021 */ addu $s0, $t6, $t7 .L7F0AE9C4: -/* 0E34F4 7F0AE9C4 3C188005 */ lui $t8, %hi(j_text_trigger) +/* 0E34F4 7F0AE9C4 3C188005 */ lui $t8, %hi(j_text_trigger) /* 0E34F8 7F0AE9C8 8F1884D0 */ lw $t8, %lo(j_text_trigger)($t8) /* 0E34FC 7F0AE9CC 3C138004 */ lui $s3, %hi(text_spacing) /* 0E3500 7F0AE9D0 2A01000E */ slti $at, $s0, 0xe @@ -3079,11 +3085,11 @@ glabel textMeasure /* 0E3530 7F0AEA00 8FAA0028 */ lw $t2, 0x28($sp) .L7F0AEA04: /* 0E3534 7F0AEA04 1589000A */ bne $t4, $t1, .L7F0AEA30 -/* 0E3538 7F0AEA08 00000000 */ nop +/* 0E3538 7F0AEA08 00000000 */ nop /* 0E353C 7F0AEA0C 90D90001 */ lbu $t9, 1($a2) /* 0E3540 7F0AEA10 24020048 */ li $v0, 72 /* 0E3544 7F0AEA14 11B90004 */ beq $t5, $t9, .L7F0AEA28 -/* 0E3548 7F0AEA18 00000000 */ nop +/* 0E3548 7F0AEA18 00000000 */ nop /* 0E354C 7F0AEA1C 8CAE0000 */ lw $t6, ($a1) /* 0E3550 7F0AEA20 25CF0005 */ addiu $t7, $t6, 5 /* 0E3554 7F0AEA24 ACAF0000 */ sw $t7, ($a1) @@ -3161,7 +3167,7 @@ glabel textMeasure .L7F0AEB2C: /* 0E365C 7F0AEB2C 90C90000 */ lbu $t1, ($a2) /* 0E3660 7F0AEB30 1520FFB4 */ bnez $t1, .L7F0AEA04 -/* 0E3664 7F0AEB34 00000000 */ nop +/* 0E3664 7F0AEB34 00000000 */ nop .L7F0AEB38: /* 0E3668 7F0AEB38 8CAE0000 */ lw $t6, ($a1) /* 0E366C 7F0AEB3C 01C8082A */ slt $at, $t6, $t0 @@ -3260,7 +3266,7 @@ glabel sub_GAME_7F0AEB64 /* 0E3790 7F0AEC60 8FAB008C */ lw $t3, 0x8c($sp) /* 0E3794 7F0AEC64 8FAE0080 */ lw $t6, 0x80($sp) /* 0E3798 7F0AEC68 8FAF0090 */ lw $t7, 0x90($sp) -/* 0E379C 7F0AEC6C 3C088004 */ lui $t0, %hi(text_wordwrap) +/* 0E379C 7F0AEC6C 3C088004 */ lui $t0, %hi(text_wordwrap) /* 0E37A0 7F0AEC70 016E5821 */ addu $t3, $t3, $t6 /* 0E37A4 7F0AEC74 01EB082A */ slt $at, $t7, $t3 /* 0E37A8 7F0AEC78 25080E8C */ addiu $t0, %lo(text_wordwrap) # addiu $t0, $t0, 0xe8c @@ -3284,7 +3290,7 @@ glabel sub_GAME_7F0AEB64 /* 0E37E8 7F0AECB8 8D180000 */ lw $t8, ($t0) /* 0E37EC 7F0AECBC 26100001 */ addiu $s0, $s0, 1 /* 0E37F0 7F0AECC0 1B000009 */ blez $t8, .L7F0AECE8 -/* 0E37F4 7F0AECC4 00000000 */ nop +/* 0E37F4 7F0AECC4 00000000 */ nop /* 0E37F8 7F0AECC8 A2090000 */ sb $t1, ($s0) .L7F0AECCC: /* 0E37FC 7F0AECCC 8D190000 */ lw $t9, ($t0) @@ -3332,7 +3338,7 @@ glabel sub_GAME_7F0AEB64 /* 0E3890 7F0AED60 24010020 */ li $at, 32 .L7F0AED64: /* 0E3894 7F0AED64 14410032 */ bne $v0, $at, .L7F0AEE30 -/* 0E3898 7F0AED68 00000000 */ nop +/* 0E3898 7F0AED68 00000000 */ nop /* 0E389C 7F0AED6C 14800012 */ bnez $a0, .L7F0AEDB8 /* 0E38A0 7F0AED70 00001825 */ move $v1, $zero /* 0E38A4 7F0AED74 A20C0000 */ sb $t4, ($s0) @@ -3398,7 +3404,7 @@ glabel sub_GAME_7F0AEB64 /* 0E3974 7F0AEE44 8D180000 */ lw $t8, ($t0) /* 0E3978 7F0AEE48 26100001 */ addiu $s0, $s0, 1 /* 0E397C 7F0AEE4C 1B000009 */ blez $t8, .L7F0AEE74 -/* 0E3980 7F0AEE50 00000000 */ nop +/* 0E3980 7F0AEE50 00000000 */ nop /* 0E3984 7F0AEE54 A2090000 */ sb $t1, ($s0) .L7F0AEE58: /* 0E3988 7F0AEE58 8D190000 */ lw $t9, ($t0) diff --git a/src/game/textrelated.h b/src/game/textrelated.h index 23dacc0..156a849 100644 --- a/src/game/textrelated.h +++ b/src/game/textrelated.h @@ -3,6 +3,11 @@ #include #include "bondtypes.h" +enum TEXT_ORIENTATION { + ROT_NORMAL = 0, + ROT_90CW +}; + extern s32 ptrFontBankGothic; extern s32 ptrFontBankGothicChars; extern s32 ptrFontZurichBold; diff --git a/src/game/title.c b/src/game/title.c index bde051e..c9a16d6 100644 --- a/src/game/title.c +++ b/src/game/title.c @@ -3,17 +3,27 @@ #include #include #include +#include #include #include #include -#include "matrixmath.h" #include +#include "matrixmath.h" #include "blood_animation.h" #include "chr.h" #include "chr_b.h" #include "math_floor.h" #include "title.h" #include "unk_01B240.h" +#include "unk_01BAE0.h" +#include "bondtypes.h" +#include "image.h" +#include "math.h" +#include "objecthandler.h" +#include "ob.h" +#include "chr_b.h" +#include "initanitable.h" +#include "chrobjdata.h" @@ -21,31 +31,31 @@ extern signed short sins(unsigned short x); // bss //CODE.bss:80069550 -s32 dword_CODE_bss_80069550; +s32 barrelDisplayListPtr; //CODE.bss:80069554 -Gfx *dword_CODE_bss_80069554; +Gfx *gunbarrelgfxListPointer; //CODE.bss:80069558 -Mtx *matrix_buffer_rarelogo_0; +Mtx *matrixBufferRareLogo0; //CODE.bss:8006955C -Mtx *matrix_buffer_gunbarrel_0; +Mtx *matrixBufferGunbarrel0; //CODE.bss:80069560 -Mtx *matrix_buffer_rarelogo_1; +Mtx *matrixBufferRareLogo1; //CODE.bss:80069564 -Mtx *matrix_buffer_rarelogo_2; +Mtx *matrixBufferRareLogo2; //CODE.bss:80069568 -Mtx *matrix_buffer_gunbarrel_1; +Mtx *matrixBufferGunbarrel1; //CODE.bss:8006956C -Mtx *matrix_buffer_intro_backdrop; +Mtx *matrixBufferIntroBackdrop; //CODE.bss:80069570 -Mtx *matrix_buffer_intro_bond; +Mtx *matrixBufferIntroBond; //CODE.bss:80069574 f32 g_TitleX; //CODE.bss:80069578 f32 g_TitleY; //CODE.bss:8006957C -f32 dword_CODE_bss_8006957C; +f32 titleTransitionX; //CODE.bss:80069580 -f32 dword_CODE_bss_80069580; +f32 titleTransitionY; //CODE.bss:80069584 s16 word_CODE_bss_80069584; //CODE.bss:80069588 @@ -72,10 +82,11 @@ s32 D_8002A7E8[3] = {0xFF, 0xFF, 0xFF}; */ struct FolderSelect D_8002A7DC = { 0x00, 0x00, 0x00 }; struct FolderSelect D_8002A7E8 = { 0xFF, 0xFF, 0xFF }; -u32 D_8002A7F4 = 0; -u32 D_8002A7F8 = 0; -u32 D_8002A7FC = 0; +Model *chrModelInstance = NULL; +Model *gunModelInstance = NULL; + +u32 D_8002A7FC = 0; u32 D_8002A800 = 1; u32 D_8002A804 = 3; u32 D_8002A808 = 0; @@ -91,54 +102,57 @@ u32 D_8002A82C = 0; u32 D_8002A830 = 0; u32 D_8002A834 = 0; u32 D_8002A838 = 0; -f32 D_8002A83C[3] = {1758.2957f, 220.0f, 684.28143f}; -f32 D_8002A848[3] = {-0.97f, 0.0f, 0.24f}; -f32 D_8002A854[3] = {0.0f, 1.0f, -0.0f}; -Lights1 D_8002A860 = gdSPDefLights1(0xDC, 0xDC, 0xDC, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0x00); -f32 D_8002A878[3] = {0.0f, 0.0f, 4883.0f}; -f32 D_8002A884[3] = {0.0f, 0.0f, -1.0f}; -f32 D_8002A890[3] = {0.0f, 1.0f, 0.0f}; + +f32 gunbarrelPosition1[3] = {1758.2957f, 220.0f, 684.28143f}; +f32 gunbarrelPosition2[3] = {-0.97f, 0.0f, 0.24f}; +f32 gunbarrelPosition3[3] = {0.0f, 1.0f, -0.0f}; + +Lights1 gunbarrelLights = gdSPDefLights1(0xDC, 0xDC, 0xDC, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0x00); + +f32 cameraPosition1[3] = {0.0f, 0.0f, 4883.0f}; +f32 cameraPosition2[3] = {0.0f, 0.0f, -1.0f}; +f32 cameraPosition3[3] = {0.0f, 1.0f, 0.0f}; f32 D_8002A89C = 0.0f; s32 intro_eye_counter = 0; u32 intro_state_blood_animation = 0; -u32 D_8002A8A8 = 0; -u32 D_8002A8AC = 0; -u32 D_8002A8B0 = 0; -/* - .word 0 - .word 0 - .word 0 -*/ +struct coord3d D_8002A8A8 = { 0, 0, 0 }; -Gfx *something_with_gunbarrel_and_rareware_logo_matrix_manip(Gfx *gdl) + +/** + * Manipulates matrices for the gun barrel and Rareware logo during the intro sequence. + * + * @param gdl The display list to append graphics commands to. + * @return Updated display list. + */ +Gfx *manipulateGunbarrelAndLogoMatrices(Gfx *gdl) { - guTranslate(&matrix_buffer_rarelogo_2[D_8002A7D0], g_TitleX, g_TitleY, -5.0f); - guTranslate(&matrix_buffer_gunbarrel_1[D_8002A7D0], dword_CODE_bss_8006957C, dword_CODE_bss_80069580, -5.0f); - gSPDisplayList(gdl++, &fontDL_0x000); + guTranslate(&matrixBufferRareLogo2[D_8002A7D0], g_TitleX, g_TitleY, -5.0f); + guTranslate(&matrixBufferGunbarrel1[D_8002A7D0], titleTransitionX, titleTransitionY, -5.0f); + gSPDisplayList(gdl++, &dlBasicGeometry); gdl = sub_GAME_7F01C1A4(insert_imageDL(gdl)); gDPSetCombineMode(gdl++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetPrimColor(gdl++, 0, 0, 0xE6, 0xE6, 0xE6, 0x00); - gSPDisplayList(gdl++, OS_K0_TO_PHYSICAL(dword_CODE_bss_80069554)); - gSPMatrix(gdl++, osVirtualToPhysical(&matrix_buffer_gunbarrel_1[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); - gSPDisplayList(gdl++, OS_K0_TO_PHYSICAL(dword_CODE_bss_80069554)); + gSPDisplayList(gdl++, OS_K0_TO_PHYSICAL(gunbarrelgfxListPointer)); + gSPMatrix(gdl++, osVirtualToPhysical(&matrixBufferGunbarrel1[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); + gSPDisplayList(gdl++, OS_K0_TO_PHYSICAL(gunbarrelgfxListPointer)); return gdl; } Gfx *insert_sight_backdrop_eye_intro(Gfx *gdl) { - guTranslate(&matrix_buffer_rarelogo_2[D_8002A7D0], g_TitleX + 768.0f, g_TitleY - 40.0f, -5.0f); - guScale(&matrix_buffer_gunbarrel_1[D_8002A7D0], 2.7f, 2.57f, 1.0f); - gSPDisplayList(gdl++, &fontDL_0x000); - gSPDisplayList(gdl++, &fontDL_0x040); + guTranslate(&matrixBufferRareLogo2[D_8002A7D0], g_TitleX + 768.0f, g_TitleY - 40.0f, -5.0f); + guScale(&matrixBufferGunbarrel1[D_8002A7D0], 2.7f, 2.57f, 1.0f); + gSPDisplayList(gdl++, &dlBasicGeometry); + gSPDisplayList(gdl++, &dlFastPipelineSetup); gdl = sub_GAME_7F01C1A4(gdl); - gSPMatrix(gdl++, osVirtualToPhysical(&matrix_buffer_gunbarrel_1[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW)); - gSPDisplayList(gdl++, OS_K0_TO_PHYSICAL(dword_CODE_bss_80069554)); + gSPMatrix(gdl++, osVirtualToPhysical(&matrixBufferGunbarrel1[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW)); + gSPDisplayList(gdl++, OS_K0_TO_PHYSICAL(gunbarrelgfxListPointer)); return gdl; } @@ -159,7 +173,7 @@ Gfx *insert_sniper_sight_eye_intro(Gfx *gdl) struct FolderSelect sp3C = D_8002A7DC; struct FolderSelect sp30 = D_8002A7E8; - gSPDisplayList(gdl++, &fontDL_0x000); + gSPDisplayList(gdl++, &dlBasicGeometry); gdl = insert_imageDL(gdl); @@ -227,10 +241,10 @@ glabel sub_GAME_7F007F30 /* 03CAD0 7F007FA0 8FA90124 */ lw $t1, 0x124($sp) /* 03CAD4 7F007FA4 19200034 */ blez $t1, .L7F008078 /* 03CAD8 7F007FA8 3C140000 */ lui $s4, 0 -/* 03CADC 7F007FAC 3C138003 */ lui $s3, %hi(D_8002A7F4) +/* 03CADC 7F007FAC 3C138003 */ lui $s3, %hi(chrModelInstance) /* 03CAE0 7F007FB0 3C108007 */ lui $s0, %hi(dword_CODE_bss_80069594) /* 03CAE4 7F007FB4 26109594 */ addiu $s0, %lo(dword_CODE_bss_80069594) # addiu $s0, $s0, -0x6a6c -/* 03CAE8 7F007FB8 2673A7F4 */ addiu $s3, %lo(D_8002A7F4) # addiu $s3, $s3, -0x580c +/* 03CAE8 7F007FB8 2673A7F4 */ addiu $s3, %lo(chrModelInstance) # addiu $s3, $s3, -0x580c /* 03CAEC 7F007FBC 26944298 */ addiu $s4, $s4, 0x4298 /* 03CAF0 7F007FC0 24110089 */ li $s1, 137 /* 03CAF4 7F007FC4 8E020000 */ lw $v0, ($s0) @@ -283,16 +297,16 @@ glabel sub_GAME_7F007F30 /* 03CBA0 7F008070 8E020000 */ lw $v0, ($s0) /* 03CBA4 7F008074 00009025 */ move $s2, $zero .L7F008078: -/* 03CBA8 7F008078 3C138003 */ lui $s3, %hi(D_8002A7F4) -/* 03CBAC 7F00807C 2673A7F4 */ addiu $s3, %lo(D_8002A7F4) # addiu $s3, $s3, -0x580c +/* 03CBA8 7F008078 3C138003 */ lui $s3, %hi(chrModelInstance) +/* 03CBAC 7F00807C 2673A7F4 */ addiu $s3, %lo(chrModelInstance) # addiu $s3, $s3, -0x580c /* 03CBB0 7F008080 0FC1B100 */ jal modelSetDistanceDisabled /* 03CBB4 7F008084 24040001 */ li $a0, 1 /* 03CBB8 7F008088 0FC1CFF2 */ jal sub_GAME_7F073FC8 /* 03CBBC 7F00808C 24040050 */ li $a0, 80 /* 03CBC0 7F008090 0FC1B5AC */ jal subcalcpos /* 03CBC4 7F008094 8E640000 */ lw $a0, ($s3) -/* 03CBC8 7F008098 3C148003 */ lui $s4, %hi(D_8002A7F8) -/* 03CBCC 7F00809C 2694A7F8 */ addiu $s4, %lo(D_8002A7F8) # addiu $s4, $s4, -0x5808 +/* 03CBC8 7F008098 3C148003 */ lui $s4, %hi(gunModelInstance) +/* 03CBCC 7F00809C 2694A7F8 */ addiu $s4, %lo(gunModelInstance) # addiu $s4, $s4, -0x5808 /* 03CBD0 7F0080A0 8E860000 */ lw $a2, ($s4) /* 03CBD4 7F0080A4 8CD90008 */ lw $t9, 8($a2) /* 03CBD8 7F0080A8 8F230008 */ lw $v1, 8($t9) @@ -479,10 +493,10 @@ glabel sub_GAME_7F007F30 /* 03A910 7F007F20 8FA90124 */ lw $t1, 0x124($sp) /* 03A914 7F007F24 19200034 */ blez $t1, .L7F007FF8 /* 03A918 7F007F28 3C140000 */ lui $s4, 0 # $s4, 0 -/* 03A91C 7F007F2C 3C138002 */ lui $s3, %hi(D_8002A7F4) # $s3, 0x8002 +/* 03A91C 7F007F2C 3C138002 */ lui $s3, %hi(chrModelInstance) # $s3, 0x8002 /* 03A920 7F007F30 3C108006 */ lui $s0, %hi(dword_CODE_bss_80069594) # $s0, 0x8006 /* 03A924 7F007F34 261084D4 */ addiu $s0, %lo(dword_CODE_bss_80069594) # addiu $s0, $s0, -0x7b2c -/* 03A928 7F007F38 26735D44 */ addiu $s3, %lo(D_8002A7F4) # addiu $s3, $s3, 0x5d44 +/* 03A928 7F007F38 26735D44 */ addiu $s3, %lo(chrModelInstance) # addiu $s3, $s3, 0x5d44 /* 03A92C 7F007F3C 26944298 */ addiu $s4, 0x4298 # addiu $s4, $s4, 0x4298 /* 03A930 7F007F40 24110072 */ li $s1, 114 /* 03A934 7F007F44 8E020000 */ lw $v0, ($s0) @@ -535,16 +549,16 @@ glabel sub_GAME_7F007F30 /* 03A9E0 7F007FF0 8E020000 */ lw $v0, ($s0) /* 03A9E4 7F007FF4 00009025 */ move $s2, $zero .L7F007FF8: -/* 03A9E8 7F007FF8 3C138002 */ lui $s3, %hi(D_8002A7F4) # $s3, 0x8002 -/* 03A9EC 7F007FFC 26735D44 */ addiu $s3, %lo(D_8002A7F4) # addiu $s3, $s3, 0x5d44 +/* 03A9E8 7F007FF8 3C138002 */ lui $s3, %hi(chrModelInstance) # $s3, 0x8002 +/* 03A9EC 7F007FFC 26735D44 */ addiu $s3, %lo(chrModelInstance) # addiu $s3, $s3, 0x5d44 /* 03A9F0 7F008000 0FC1B2D0 */ jal modelSetDistanceDisabled /* 03A9F4 7F008004 24040001 */ li $a0, 1 /* 03A9F8 7F008008 0FC1D037 */ jal sub_GAME_7F073FC8 /* 03A9FC 7F00800C 24040050 */ li $a0, 80 /* 03AA00 7F008010 0FC1B6B8 */ jal subcalcpos /* 03AA04 7F008014 8E640000 */ lw $a0, ($s3) -/* 03AA08 7F008018 3C148002 */ lui $s4, %hi(D_8002A7F8) # $s4, 0x8002 -/* 03AA0C 7F00801C 26945D48 */ addiu $s4, %lo(D_8002A7F8) # addiu $s4, $s4, 0x5d48 +/* 03AA08 7F008018 3C148002 */ lui $s4, %hi(gunModelInstance) # $s4, 0x8002 +/* 03AA0C 7F00801C 26945D48 */ addiu $s4, %lo(gunModelInstance) # addiu $s4, $s4, 0x5d48 /* 03AA10 7F008020 8E860000 */ lw $a2, ($s4) /* 03AA14 7F008024 8CD90008 */ lw $t9, 8($a2) /* 03AA18 7F008028 8F230008 */ lw $v1, 8($t9) @@ -697,15 +711,15 @@ glabel sub_GAME_7F007F30 Gfx *insert_bond_eye_intro(Gfx *gdl) { Mtxf matrix; u16 perspNorm; - guTranslate(&matrix_buffer_intro_backdrop[D_8002A7D0], 0.0f, 0.0f, 0.0f); - guPerspective(&matrix_buffer_intro_bond[D_8002A7D0], &perspNorm, 46.0f, (320.0f / 240.0f), 10.0f, 10000.0f, 1.0f); + guTranslate(&matrixBufferIntroBackdrop[D_8002A7D0], 0.0f, 0.0f, 0.0f); + guPerspective(&matrixBufferIntroBond[D_8002A7D0], &perspNorm, 46.0f, (320.0f / 240.0f), 10.0f, 10000.0f, 1.0f); gSPPerspNormalize(gdl++, perspNorm); gDPSetCombineMode(gdl++, G_CC_SHADE, G_CC_SHADE); gDPSetRenderMode(gdl++, G_RM_AA_OPA_SURF, G_RM_AA_OPA_SURF2); - gSPMatrix(gdl++, osVirtualToPhysical(&matrix_buffer_intro_bond[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); - gSPMatrix(gdl++, osVirtualToPhysical(&matrix_buffer_intro_backdrop[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); + gSPMatrix(gdl++, osVirtualToPhysical(&matrixBufferIntroBond[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + gSPMatrix(gdl++, osVirtualToPhysical(&matrixBufferIntroBackdrop[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); - matrix_4x4_7F059694(&matrix, D_8002A83C[0], D_8002A83C[1], D_8002A83C[2], (D_8002A83C[0] + D_8002A848[0]), (D_8002A83C[1] + D_8002A848[1]), (D_8002A83C[2] + D_8002A848[2]), D_8002A854[0], D_8002A854[1], D_8002A854[2]); + matrix_4x4_7F059694(&matrix, gunbarrelPosition1[0], gunbarrelPosition1[1], gunbarrelPosition1[2], (gunbarrelPosition1[0] + gunbarrelPosition2[0]), (gunbarrelPosition1[1] + gunbarrelPosition2[1]), (gunbarrelPosition1[2] + gunbarrelPosition2[2]), gunbarrelPosition3[0], gunbarrelPosition3[1], gunbarrelPosition3[2]); #if defined REFRESH_PAL return sub_GAME_7F007F30(gdl, 1, &matrix); @@ -720,28 +734,28 @@ extern Gfx *D_02004758; extern u8 *D_02004FE8; extern u8 *D_02005FF0; Gfx *load_display_rare_logo(Gfx *gdl, s32 arg1, s32 arg2, s32 arg3, s32 arg4) { - D_8002A878[2] = arg3; - gSPDisplayList(gdl++, &fontDL_0x000); + cameraPosition1[2] = arg3; + gSPDisplayList(gdl++, &dlBasicGeometry); gdl = insert_imageDL(gdl); { u16 perspNorm; - guPerspective(&matrix_buffer_rarelogo_0[D_8002A7D0], &perspNorm, 60.0f, (320.0f / 240.0f), 100.0f, 5000.0f, 1.0f); + guPerspective(&matrixBufferRareLogo0[D_8002A7D0], &perspNorm, 60.0f, (320.0f / 240.0f), 100.0f, 5000.0f, 1.0f); gSPPerspNormalize(gdl++, perspNorm); } - gSPMatrix(gdl++, osVirtualToPhysical(&matrix_buffer_rarelogo_0[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); + gSPMatrix(gdl++, osVirtualToPhysical(&matrixBufferRareLogo0[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_PROJECTION)); gSPClearGeometryMode(gdl++, -1); gSPSetGeometryMode(gdl++, (G_SHADE | G_CULL_BACK | G_LIGHTING | G_TEXTURE_GEN | G_SHADING_SMOOTH)); - guLookAt(&matrix_buffer_rarelogo_1[D_8002A7D0], D_8002A878[0], D_8002A878[1], D_8002A878[2], (D_8002A878[0] + D_8002A884[0]), (D_8002A878[1] + D_8002A884[1]), (D_8002A878[2] + D_8002A884[2]), D_8002A890[0], D_8002A890[1], D_8002A890[2]); - gSPMatrix(gdl++, osVirtualToPhysical(&matrix_buffer_rarelogo_1[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); - guRotate(&matrix_buffer_rarelogo_2[D_8002A7D0], D_8002A89C, 0.0f, 1.0f, 0.0f); + guLookAt(&matrixBufferRareLogo1[D_8002A7D0], cameraPosition1[0], cameraPosition1[1], cameraPosition1[2], (cameraPosition1[0] + cameraPosition2[0]), (cameraPosition1[1] + cameraPosition2[1]), (cameraPosition1[2] + cameraPosition2[2]), cameraPosition3[0], cameraPosition3[1], cameraPosition3[2]); + gSPMatrix(gdl++, osVirtualToPhysical(&matrixBufferRareLogo1[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); + guRotate(&matrixBufferRareLogo2[D_8002A7D0], D_8002A89C, 0.0f, 1.0f, 0.0f); #if defined(REFRESH_PAL) D_8002A89C += 2.4f; #else D_8002A89C += 2.0f; #endif - gSPMatrix(gdl++, osVirtualToPhysical(&matrix_buffer_rarelogo_2[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW)); - gSPSetLights1(gdl++, D_8002A860); - D_8002A860.a.l.col[0] = D_8002A860.a.l.col[1] = D_8002A860.a.l.col[2] = D_8002A860.a.l.colc[0] = D_8002A860.a.l.colc[1] = D_8002A860.a.l.colc[2] = arg4; + gSPMatrix(gdl++, osVirtualToPhysical(&matrixBufferRareLogo2[D_8002A7D0]), (G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW)); + gSPSetLights1(gdl++, gunbarrelLights); + gunbarrelLights.a.l.col[0] = gunbarrelLights.a.l.col[1] = gunbarrelLights.a.l.col[2] = gunbarrelLights.a.l.colc[0] = gunbarrelLights.a.l.colc[1] = gunbarrelLights.a.l.colc[2] = arg4; gDPPipeSync(gdl++); gDPPipeSync(gdl++); gDPSetCombineMode(gdl++, G_CC_MODULATEI, G_CC_MODULATEI); @@ -889,501 +903,108 @@ glabel sub_GAME_7F008DE4 -#ifdef NONMATCHING -void sub_GAME_7F008E80(void) { +void initializeGunBarrelIntro(u8 *gfxBuffer, s32 bufferSize) +{ + struct ModelAnimation *animation; + struct coord3d sp50; + struct texpool texturePool; + s32 temp_t9; + s32 startframe; + + gunbarrel_mode = 2; + + guOrtho(matrixBufferGunbarrel0, 0.0f, 1280.0f, 0.0f, 960.0f, 1.0f, 8.0f, 256.0f); + + g_TitleX = -30.0f; + g_TitleY = 482.0f; + titleTransitionX = -100.0f; + titleTransitionY = 482.0f; + word_CODE_bss_80069584 = 0x42; + barrelDisplayListPtr = gfxBuffer; + bufferSize -= 0x200; + gfxBuffer += 0x200; + + createGunbarrelRenderHole(barrelDisplayListPtr, 0x1E); + + gunbarrelgfxListPointer = (Gfx*)gfxBuffer; + bufferSize -= 0x100; + gfxBuffer += 0x100; + + sub_GAME_7F01BFF8(gunbarrelgfxListPointer, barrelDisplayListPtr + 0x80000000, 0x1E); + sub_GAME_7F008DE4((u8 **)&gfxBuffer, &bufferSize); -} + // struct copy + sp50 = D_8002A8A8; + + temp_t9 = 0x12C00; + + texInitPool(&texturePool, gfxBuffer, temp_t9); + + gfxBuffer += temp_t9; + bufferSize -= temp_t9; + + load_object_fill_header(c_item_entries[BODY_Brosnan_Tuxedo].header, c_item_entries[BODY_Brosnan_Tuxedo].filename, gfxBuffer, bufferSize, &texturePool); + + temp_t9 = ((get_pc_buffer_remaining_value(c_item_entries[BODY_Brosnan_Tuxedo].filename) + 0x3F) | 0x3F) ^ 0x3F; + bufferSize -= temp_t9; + gfxBuffer += temp_t9; + + load_object_fill_header(c_item_entries[BODY_Male_Pierce_Bond_Tuxedo].header, c_item_entries[BODY_Male_Pierce_Bond_Tuxedo].filename, gfxBuffer, bufferSize, &texturePool); + + temp_t9 = ((get_pc_buffer_remaining_value(c_item_entries[BODY_Male_Pierce_Bond_Tuxedo].filename) + 0x3F) | 0x3F) ^ 0x3F; + bufferSize -= temp_t9; + gfxBuffer += temp_t9; + + chrModelInstance = setup_chr_instance(BODY_Brosnan_Tuxedo, BODY_Male_Pierce_Bond_Tuxedo, c_item_entries[BODY_Brosnan_Tuxedo].header, c_item_entries[BODY_Male_Pierce_Bond_Tuxedo].header, 0); + + modelSetScale(chrModelInstance, 0.18779343f); + sub_GAME_7F06CE84(chrModelInstance, 1.0f); + setsuboffset(chrModelInstance, &sp50); + setsubroty(chrModelInstance, 0.0f); +#if defined(VERSION_EU) + #define S_7F008E80_ANIM_SPEED 0.6f #else -#ifndef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel D_8004F2DC -.word 0x3f68f5c3 -.text -glabel sub_GAME_7F008E80 -/* 03D9B0 7F008E80 240E0002 */ li $t6, 2 -/* 03D9B4 7F008E84 3C018003 */ lui $at, %hi(gunbarrel_mode) -/* 03D9B8 7F008E88 A02EA7D4 */ sb $t6, %lo(gunbarrel_mode)($at) -/* 03D9BC 7F008E8C 3C014470 */ li $at, 0x44700000 # 960.000000 -/* 03D9C0 7F008E90 44812000 */ mtc1 $at, $f4 -/* 03D9C4 7F008E94 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 03D9C8 7F008E98 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 03D9CC 7F008E9C 44813000 */ mtc1 $at, $f6 -/* 03D9D0 7F008EA0 44800000 */ mtc1 $zero, $f0 -/* 03D9D4 7F008EA4 3C014100 */ li $at, 0x41000000 # 8.000000 -/* 03D9D8 7F008EA8 44814000 */ mtc1 $at, $f8 -/* 03D9DC 7F008EAC 3C014380 */ li $at, 0x43800000 # 256.000000 -/* 03D9E0 7F008EB0 44815000 */ mtc1 $at, $f10 -/* 03D9E4 7F008EB4 AFA40060 */ sw $a0, 0x60($sp) -/* 03D9E8 7F008EB8 AFA50064 */ sw $a1, 0x64($sp) -/* 03D9EC 7F008EBC AFBF002C */ sw $ra, 0x2c($sp) -/* 03D9F0 7F008EC0 3C048007 */ lui $a0, %hi(matrix_buffer_gunbarrel_0) -/* 03D9F4 7F008EC4 44050000 */ mfc1 $a1, $f0 -/* 03D9F8 7F008EC8 44070000 */ mfc1 $a3, $f0 -/* 03D9FC 7F008ECC AFB10028 */ sw $s1, 0x28($sp) -/* 03DA00 7F008ED0 AFB00024 */ sw $s0, 0x24($sp) -/* 03DA04 7F008ED4 8C84955C */ lw $a0, %lo(matrix_buffer_gunbarrel_0)($a0) -/* 03DA08 7F008ED8 3C0644A0 */ lui $a2, 0x44a0 -/* 03DA0C 7F008EDC E7A40010 */ swc1 $f4, 0x10($sp) -/* 03DA10 7F008EE0 E7A60014 */ swc1 $f6, 0x14($sp) -/* 03DA14 7F008EE4 E7A80018 */ swc1 $f8, 0x18($sp) -/* 03DA18 7F008EE8 0C005AF1 */ jal guOrtho -/* 03DA1C 7F008EEC E7AA001C */ swc1 $f10, 0x1c($sp) -/* 03DA20 7F008EF0 3C0143F1 */ li $at, 0x43F10000 # 482.000000 -/* 03DA24 7F008EF4 44810000 */ mtc1 $at, $f0 -/* 03DA28 7F008EF8 3C01C1F0 */ li $at, 0xC1F00000 # -30.000000 -/* 03DA2C 7F008EFC 44818000 */ mtc1 $at, $f16 -/* 03DA30 7F008F00 3C018007 */ lui $at, %hi(g_TitleX) -/* 03DA34 7F008F04 8FA20060 */ lw $v0, 0x60($sp) -/* 03DA38 7F008F08 E4309574 */ swc1 $f16, %lo(g_TitleX)($at) -/* 03DA3C 7F008F0C 3C018007 */ lui $at, %hi(g_TitleY) -/* 03DA40 7F008F10 E4209578 */ swc1 $f0, %lo(g_TitleY)($at) -/* 03DA44 7F008F14 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 03DA48 7F008F18 44819000 */ mtc1 $at, $f18 -/* 03DA4C 7F008F1C 3C018007 */ lui $at, %hi(dword_CODE_bss_8006957C) -/* 03DA50 7F008F20 8FB80064 */ lw $t8, 0x64($sp) -/* 03DA54 7F008F24 E432957C */ swc1 $f18, %lo(dword_CODE_bss_8006957C)($at) -/* 03DA58 7F008F28 3C018007 */ lui $at, %hi(dword_CODE_bss_80069580) -/* 03DA5C 7F008F2C E4209580 */ swc1 $f0, %lo(dword_CODE_bss_80069580)($at) -/* 03DA60 7F008F30 3C108007 */ lui $s0, %hi(dword_CODE_bss_80069550) -/* 03DA64 7F008F34 3C018007 */ lui $at, %hi(word_CODE_bss_80069584) -/* 03DA68 7F008F38 240F0042 */ li $t7, 66 -/* 03DA6C 7F008F3C 26109550 */ addiu $s0, %lo(dword_CODE_bss_80069550) # addiu $s0, $s0, -0x6ab0 -/* 03DA70 7F008F40 A42F9584 */ sh $t7, %lo(word_CODE_bss_80069584)($at) -/* 03DA74 7F008F44 AE020000 */ sw $v0, ($s0) -/* 03DA78 7F008F48 24420200 */ addiu $v0, $v0, 0x200 -/* 03DA7C 7F008F4C 2719FE00 */ addiu $t9, $t8, -0x200 -/* 03DA80 7F008F50 AFB90064 */ sw $t9, 0x64($sp) -/* 03DA84 7F008F54 AFA20060 */ sw $v0, 0x60($sp) -/* 03DA88 7F008F58 8E040000 */ lw $a0, ($s0) -/* 03DA8C 7F008F5C 0FC06EB8 */ jal sub_GAME_7F01BAE0 -/* 03DA90 7F008F60 2405001E */ li $a1, 30 -/* 03DA94 7F008F64 8FA30060 */ lw $v1, 0x60($sp) -/* 03DA98 7F008F68 8FA80064 */ lw $t0, 0x64($sp) -/* 03DA9C 7F008F6C 3C028007 */ lui $v0, %hi(dword_CODE_bss_80069554) -/* 03DAA0 7F008F70 24429554 */ addiu $v0, %lo(dword_CODE_bss_80069554) # addiu $v0, $v0, -0x6aac -/* 03DAA4 7F008F74 8E050000 */ lw $a1, ($s0) -/* 03DAA8 7F008F78 AC430000 */ sw $v1, ($v0) -/* 03DAAC 7F008F7C 3C018000 */ lui $at, 0x8000 -/* 03DAB0 7F008F80 24630100 */ addiu $v1, $v1, 0x100 -/* 03DAB4 7F008F84 2509FF00 */ addiu $t1, $t0, -0x100 -/* 03DAB8 7F008F88 AFA90064 */ sw $t1, 0x64($sp) -/* 03DABC 7F008F8C AFA30060 */ sw $v1, 0x60($sp) -/* 03DAC0 7F008F90 8C440000 */ lw $a0, ($v0) -/* 03DAC4 7F008F94 2406001E */ li $a2, 30 -/* 03DAC8 7F008F98 0FC06FFE */ jal sub_GAME_7F01BFF8 -/* 03DACC 7F008F9C 00A12821 */ addu $a1, $a1, $at -/* 03DAD0 7F008FA0 27A40060 */ addiu $a0, $sp, 0x60 -/* 03DAD4 7F008FA4 0FC02379 */ jal sub_GAME_7F008DE4 -/* 03DAD8 7F008FA8 27A50064 */ addiu $a1, $sp, 0x64 -/* 03DADC 7F008FAC 3C0B8003 */ lui $t3, %hi(D_8002A8A8) -/* 03DAE0 7F008FB0 256BA8A8 */ addiu $t3, %lo(D_8002A8A8) # addiu $t3, $t3, -0x5758 -/* 03DAE4 7F008FB4 8D610000 */ lw $at, ($t3) -/* 03DAE8 7F008FB8 27AA0050 */ addiu $t2, $sp, 0x50 -/* 03DAEC 7F008FBC 8D6E0004 */ lw $t6, 4($t3) -/* 03DAF0 7F008FC0 AD410000 */ sw $at, ($t2) -/* 03DAF4 7F008FC4 8D610008 */ lw $at, 8($t3) -/* 03DAF8 7F008FC8 3C110001 */ lui $s1, (0x00012C00 >> 16) # lui $s1, 1 -/* 03DAFC 7F008FCC 36312C00 */ ori $s1, (0x00012C00 & 0xFFFF) # ori $s1, $s1, 0x2c00 -/* 03DB00 7F008FD0 AD4E0004 */ sw $t6, 4($t2) -/* 03DB04 7F008FD4 AD410008 */ sw $at, 8($t2) -/* 03DB08 7F008FD8 8FA50060 */ lw $a1, 0x60($sp) -/* 03DB0C 7F008FDC 02203025 */ move $a2, $s1 -/* 03DB10 7F008FE0 0FC32EBD */ jal texInitPool -/* 03DB14 7F008FE4 27A40040 */ addiu $a0, $sp, 0x40 -/* 03DB18 7F008FE8 8FA60060 */ lw $a2, 0x60($sp) -/* 03DB1C 7F008FEC 8FA70064 */ lw $a3, 0x64($sp) -/* 03DB20 7F008FF0 3C108004 */ lui $s0, %hi(c_item_entries) -/* 03DB24 7F008FF4 2610DE10 */ addiu $s0, %lo(c_item_entries) # addiu $s0, $s0, -0x21f0 -/* 03DB28 7F008FF8 27AF0040 */ addiu $t7, $sp, 0x40 -/* 03DB2C 7F008FFC 00D13021 */ addu $a2, $a2, $s1 -/* 03DB30 7F009000 00F13823 */ subu $a3, $a3, $s1 -/* 03DB34 7F009004 AFA70064 */ sw $a3, 0x64($sp) -/* 03DB38 7F009008 AFA60060 */ sw $a2, 0x60($sp) -/* 03DB3C 7F00900C AFAF0010 */ sw $t7, 0x10($sp) -/* 03DB40 7F009010 8E040064 */ lw $a0, 0x64($s0) -/* 03DB44 7F009014 0FC1D929 */ jal load_object_fill_header -/* 03DB48 7F009018 8E050068 */ lw $a1, 0x68($s0) -/* 03DB4C 7F00901C 0FC2F462 */ jal get_pc_buffer_remaining_value -/* 03DB50 7F009020 8E040068 */ lw $a0, 0x68($s0) -/* 03DB54 7F009024 2443003F */ addiu $v1, $v0, 0x3f -/* 03DB58 7F009028 8FA60060 */ lw $a2, 0x60($sp) -/* 03DB5C 7F00902C 8FA70064 */ lw $a3, 0x64($sp) -/* 03DB60 7F009030 3478003F */ ori $t8, $v1, 0x3f -/* 03DB64 7F009034 3B19003F */ xori $t9, $t8, 0x3f -/* 03DB68 7F009038 27A80040 */ addiu $t0, $sp, 0x40 -/* 03DB6C 7F00903C 00D93021 */ addu $a2, $a2, $t9 -/* 03DB70 7F009040 00F93823 */ subu $a3, $a3, $t9 -/* 03DB74 7F009044 AFA70064 */ sw $a3, 0x64($sp) -/* 03DB78 7F009048 AFA60060 */ sw $a2, 0x60($sp) -/* 03DB7C 7F00904C AFA80010 */ sw $t0, 0x10($sp) -/* 03DB80 7F009050 8E040618 */ lw $a0, 0x618($s0) -/* 03DB84 7F009054 0FC1D929 */ jal load_object_fill_header -/* 03DB88 7F009058 8E05061C */ lw $a1, 0x61c($s0) -/* 03DB8C 7F00905C 0FC2F462 */ jal get_pc_buffer_remaining_value -/* 03DB90 7F009060 8E04061C */ lw $a0, 0x61c($s0) -/* 03DB94 7F009064 2443003F */ addiu $v1, $v0, 0x3f -/* 03DB98 7F009068 8FAC0064 */ lw $t4, 0x64($sp) -/* 03DB9C 7F00906C 8FAB0060 */ lw $t3, 0x60($sp) -/* 03DBA0 7F009070 3469003F */ ori $t1, $v1, 0x3f -/* 03DBA4 7F009074 392D003F */ xori $t5, $t1, 0x3f -/* 03DBA8 7F009078 018D5023 */ subu $t2, $t4, $t5 -/* 03DBAC 7F00907C 016D7021 */ addu $t6, $t3, $t5 -/* 03DBB0 7F009080 AFAA0064 */ sw $t2, 0x64($sp) -/* 03DBB4 7F009084 AFAE0060 */ sw $t6, 0x60($sp) -/* 03DBB8 7F009088 24040005 */ li $a0, 5 -/* 03DBBC 7F00908C 2405004E */ li $a1, 78 -/* 03DBC0 7F009090 8E060064 */ lw $a2, 0x64($s0) -/* 03DBC4 7F009094 8E070618 */ lw $a3, 0x618($s0) -/* 03DBC8 7F009098 0FC08D2A */ jal setup_chr_instance -/* 03DBCC 7F00909C AFA00010 */ sw $zero, 0x10($sp) -/* 03DBD0 7F0090A0 3C118003 */ lui $s1, %hi(D_8002A7F4) -/* 03DBD4 7F0090A4 2631A7F4 */ addiu $s1, %lo(D_8002A7F4) # addiu $s1, $s1, -0x580c -/* 03DBD8 7F0090A8 3C053E40 */ lui $a1, (0x3E404CEC >> 16) # lui $a1, 0x3e40 -/* 03DBDC 7F0090AC AE220000 */ sw $v0, ($s1) -/* 03DBE0 7F0090B0 34A54CEC */ ori $a1, (0x3E404CEC & 0xFFFF) # ori $a1, $a1, 0x4cec -/* 03DBE4 7F0090B4 0FC1B39E */ jal modelSetScale -/* 03DBE8 7F0090B8 00402025 */ move $a0, $v0 -/* 03DBEC 7F0090BC 8E240000 */ lw $a0, ($s1) -/* 03DBF0 7F0090C0 0FC1B3A1 */ jal sub_GAME_7F06CE84 -/* 03DBF4 7F0090C4 3C053F80 */ lui $a1, 0x3f80 -/* 03DBF8 7F0090C8 8E240000 */ lw $a0, ($s1) -/* 03DBFC 7F0090CC 0FC1B303 */ jal setsuboffset -/* 03DC00 7F0090D0 27A50050 */ addiu $a1, $sp, 0x50 -/* 03DC04 7F0090D4 8E240000 */ lw $a0, ($s1) -/* 03DC08 7F0090D8 0FC1B34F */ jal setsubroty -/* 03DC0C 7F0090DC 24050000 */ li $a1, 0 -/* 03DC10 7F0090E0 8E240000 */ lw $a0, ($s1) -/* 03DC14 7F0090E4 3C053F00 */ lui $a1, 0x3f00 -/* 03DC18 7F0090E8 0FC1BFC6 */ jal modelSetAnimPlaySpeed -/* 03DC1C 7F0090EC 24060000 */ li $a2, 0 -/* 03DC20 7F0090F0 3C0F8007 */ lui $t7, %hi(ptr_animation_table) -/* 03DC24 7F0090F4 8DEF9538 */ lw $t7, %lo(ptr_animation_table)($t7) -/* 03DC28 7F0090F8 3C180000 */ lui $t8, 0 -/* 03DC2C 7F0090FC 27184144 */ addiu $t8, $t8, 0x4144 -/* 03DC30 7F009100 01F82821 */ addu $a1, $t7, $t8 -/* 03DC34 7F009104 94A30004 */ lhu $v1, 4($a1) -/* 03DC38 7F009108 2462FFBC */ addiu $v0, $v1, -0x44 -/* 03DC3C 7F00910C 04430005 */ bgezl $v0, .L7F009124 -/* 03DC40 7F009110 44822000 */ mtc1 $v0, $f4 -/* 03DC44 7F009114 00431021 */ addu $v0, $v0, $v1 -.L7F009118: -/* 03DC48 7F009118 0442FFFF */ bltzl $v0, .L7F009118 -/* 03DC4C 7F00911C 00431021 */ addu $v0, $v0, $v1 -/* 03DC50 7F009120 44822000 */ mtc1 $v0, $f4 -.L7F009124: -/* 03DC54 7F009124 3C018005 */ lui $at, %hi(D_8004F2DC) -/* 03DC58 7F009128 C426F2DC */ lwc1 $f6, %lo(D_8004F2DC)($at) -/* 03DC5C 7F00912C 46802120 */ cvt.s.w $f4, $f4 -/* 03DC60 7F009130 44804000 */ mtc1 $zero, $f8 -/* 03DC64 7F009134 8E240000 */ lw $a0, ($s1) -/* 03DC68 7F009138 00003025 */ move $a2, $zero -/* 03DC6C 7F00913C E7A60010 */ swc1 $f6, 0x10($sp) -/* 03DC70 7F009140 E7A80014 */ swc1 $f8, 0x14($sp) -/* 03DC74 7F009144 44072000 */ mfc1 $a3, $f4 -/* 03DC78 7F009148 0FC1BF2A */ jal modelSetAnimation -/* 03DC7C 7F00914C 00000000 */ nop -/* 03DC80 7F009150 3C108004 */ lui $s0, %hi(PitemZ_entries) -/* 03DC84 7F009154 2610A228 */ addiu $s0, %lo(PitemZ_entries) # addiu $s0, $s0, -0x5dd8 -/* 03DC88 7F009158 27B90040 */ addiu $t9, $sp, 0x40 -/* 03DC8C 7F00915C AFB90010 */ sw $t9, 0x10($sp) -/* 03DC90 7F009160 8E0408F4 */ lw $a0, 0x8f4($s0) -/* 03DC94 7F009164 8E0508F8 */ lw $a1, 0x8f8($s0) -/* 03DC98 7F009168 8FA60060 */ lw $a2, 0x60($sp) -/* 03DC9C 7F00916C 0FC1D929 */ jal load_object_fill_header -/* 03DCA0 7F009170 8FA70064 */ lw $a3, 0x64($sp) -/* 03DCA4 7F009174 0FC2F462 */ jal get_pc_buffer_remaining_value -/* 03DCA8 7F009178 8E0408F8 */ lw $a0, 0x8f8($s0) -/* 03DCAC 7F00917C 2443003F */ addiu $v1, $v0, 0x3f -/* 03DCB0 7F009180 8FAD0064 */ lw $t5, 0x64($sp) -/* 03DCB4 7F009184 8FAA0060 */ lw $t2, 0x60($sp) -/* 03DCB8 7F009188 3468003F */ ori $t0, $v1, 0x3f -/* 03DCBC 7F00918C 3909003F */ xori $t1, $t0, 0x3f -/* 03DCC0 7F009190 01A96023 */ subu $t4, $t5, $t1 -/* 03DCC4 7F009194 01495821 */ addu $t3, $t2, $t1 -/* 03DCC8 7F009198 AFAC0064 */ sw $t4, 0x64($sp) -/* 03DCCC 7F00919C AFAB0060 */ sw $t3, 0x60($sp) -/* 03DCD0 7F0091A0 0FC1D73D */ jal modelCalculateRwDataLen -/* 03DCD4 7F0091A4 8E0408F4 */ lw $a0, 0x8f4($s0) -/* 03DCD8 7F0091A8 0FC1B025 */ jal get_obj_instance_controller_for_header -/* 03DCDC 7F0091AC 8E0408F4 */ lw $a0, 0x8f4($s0) -/* 03DCE0 7F0091B0 3C108003 */ lui $s0, %hi(D_8002A7F8) -/* 03DCE4 7F0091B4 2610A7F8 */ addiu $s0, %lo(D_8002A7F8) # addiu $s0, $s0, -0x5808 -/* 03DCE8 7F0091B8 3C053E40 */ lui $a1, (0x3E404CEC >> 16) # lui $a1, 0x3e40 -/* 03DCEC 7F0091BC AE020000 */ sw $v0, ($s0) -/* 03DCF0 7F0091C0 34A54CEC */ ori $a1, (0x3E404CEC & 0xFFFF) # ori $a1, $a1, 0x4cec -/* 03DCF4 7F0091C4 0FC1B39E */ jal modelSetScale -/* 03DCF8 7F0091C8 00402025 */ move $a0, $v0 -/* 03DCFC 7F0091CC 8E2E0000 */ lw $t6, ($s1) -/* 03DD00 7F0091D0 8E0F0000 */ lw $t7, ($s0) -/* 03DD04 7F0091D4 3C018007 */ lui $at, %hi(dword_CODE_bss_80069594) -/* 03DD08 7F0091D8 ADEE0018 */ sw $t6, 0x18($t7) -/* 03DD0C 7F0091DC 8E380000 */ lw $t8, ($s1) -/* 03DD10 7F0091E0 8E0D0000 */ lw $t5, ($s0) -/* 03DD14 7F0091E4 8F190008 */ lw $t9, 8($t8) -/* 03DD18 7F0091E8 8F280008 */ lw $t0, 8($t9) -/* 03DD1C 7F0091EC 8D09000C */ lw $t1, 0xc($t0) -/* 03DD20 7F0091F0 ADA9001C */ sw $t1, 0x1c($t5) -/* 03DD24 7F0091F4 8FBF002C */ lw $ra, 0x2c($sp) -/* 03DD28 7F0091F8 8FB10028 */ lw $s1, 0x28($sp) -/* 03DD2C 7F0091FC 8FB00024 */ lw $s0, 0x24($sp) -/* 03DD30 7F009200 AC209594 */ sw $zero, %lo(dword_CODE_bss_80069594)($at) -/* 03DD34 7F009204 03E00008 */ jr $ra -/* 03DD38 7F009208 27BD0060 */ addiu $sp, $sp, 0x60 -) -#endif -#ifdef VERSION_EU -GLOBAL_ASM( -.late_rodata -glabel eu_cdata_0x28ae0 -.word 0x3f68f5c3 /* 0.910000026226 */ -.text -glabel sub_GAME_7F008E80 -/* 03B7F0 7F008E00 240E0002 */ li $t6, 2 -/* 03B7F4 7F008E04 3C018002 */ lui $at, %hi(gunbarrel_mode) # $at, 0x8002 -/* 03B7F8 7F008E08 A02E5D24 */ sb $t6, %lo(gunbarrel_mode)($at) -/* 03B7FC 7F008E0C 3C014470 */ li $at, 0x44700000 # 960.000000 -/* 03B800 7F008E10 44812000 */ mtc1 $at, $f4 -/* 03B804 7F008E14 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 03B808 7F008E18 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 03B80C 7F008E1C 44813000 */ mtc1 $at, $f6 -/* 03B810 7F008E20 44800000 */ mtc1 $zero, $f0 -/* 03B814 7F008E24 3C014100 */ li $at, 0x41000000 # 8.000000 -/* 03B818 7F008E28 44814000 */ mtc1 $at, $f8 -/* 03B81C 7F008E2C 3C014380 */ li $at, 0x43800000 # 256.000000 -/* 03B820 7F008E30 44815000 */ mtc1 $at, $f10 -/* 03B824 7F008E34 AFA40060 */ sw $a0, 0x60($sp) -/* 03B828 7F008E38 AFA50064 */ sw $a1, 0x64($sp) -/* 03B82C 7F008E3C AFBF002C */ sw $ra, 0x2c($sp) -/* 03B830 7F008E40 3C048006 */ lui $a0, %hi(matrix_buffer_gunbarrel_0) # $a0, 0x8006 -/* 03B834 7F008E44 44050000 */ mfc1 $a1, $f0 -/* 03B838 7F008E48 44070000 */ mfc1 $a3, $f0 -/* 03B83C 7F008E4C AFB10028 */ sw $s1, 0x28($sp) -/* 03B840 7F008E50 AFB00024 */ sw $s0, 0x24($sp) -/* 03B844 7F008E54 8C84849C */ lw $a0, %lo(matrix_buffer_gunbarrel_0)($a0) -/* 03B848 7F008E58 3C0644A0 */ lui $a2, 0x44a0 -/* 03B84C 7F008E5C E7A40010 */ swc1 $f4, 0x10($sp) -/* 03B850 7F008E60 E7A60014 */ swc1 $f6, 0x14($sp) -/* 03B854 7F008E64 E7A80018 */ swc1 $f8, 0x18($sp) -/* 03B858 7F008E68 0C005899 */ jal guOrtho -/* 03B85C 7F008E6C E7AA001C */ swc1 $f10, 0x1c($sp) -/* 03B860 7F008E70 3C0143F1 */ li $at, 0x43F10000 # 482.000000 -/* 03B864 7F008E74 44810000 */ mtc1 $at, $f0 -/* 03B868 7F008E78 3C01C1F0 */ li $at, 0xC1F00000 # -30.000000 -/* 03B86C 7F008E7C 44818000 */ mtc1 $at, $f16 -/* 03B870 7F008E80 3C018006 */ lui $at, %hi(g_TitleX) # $at, 0x8006 -/* 03B874 7F008E84 8FA20060 */ lw $v0, 0x60($sp) -/* 03B878 7F008E88 E43084B4 */ swc1 $f16, %lo(g_TitleX)($at) -/* 03B87C 7F008E8C 3C018006 */ lui $at, %hi(g_TitleY) # $at, 0x8006 -/* 03B880 7F008E90 E42084B8 */ swc1 $f0, %lo(g_TitleY)($at) -/* 03B884 7F008E94 3C01C2C8 */ li $at, 0xC2C80000 # -100.000000 -/* 03B888 7F008E98 44819000 */ mtc1 $at, $f18 -/* 03B88C 7F008E9C 3C018006 */ lui $at, %hi(dword_CODE_bss_8006957C) # $at, 0x8006 -/* 03B890 7F008EA0 8FB80064 */ lw $t8, 0x64($sp) -/* 03B894 7F008EA4 E43284BC */ swc1 $f18, %lo(dword_CODE_bss_8006957C)($at) -/* 03B898 7F008EA8 3C018006 */ lui $at, %hi(dword_CODE_bss_80069580) # $at, 0x8006 -/* 03B89C 7F008EAC E42084C0 */ swc1 $f0, %lo(dword_CODE_bss_80069580)($at) -/* 03B8A0 7F008EB0 3C108006 */ lui $s0, %hi(dword_CODE_bss_80069550) # $s0, 0x8006 -/* 03B8A4 7F008EB4 3C018006 */ lui $at, %hi(word_CODE_bss_80069584) # $at, 0x8006 -/* 03B8A8 7F008EB8 240F0042 */ li $t7, 66 -/* 03B8AC 7F008EBC 26108490 */ addiu $s0, %lo(dword_CODE_bss_80069550) # addiu $s0, $s0, -0x7b70 -/* 03B8B0 7F008EC0 A42F84C4 */ sh $t7, %lo(word_CODE_bss_80069584)($at) -/* 03B8B4 7F008EC4 AE020000 */ sw $v0, ($s0) -/* 03B8B8 7F008EC8 24420200 */ addiu $v0, $v0, 0x200 -/* 03B8BC 7F008ECC 2719FE00 */ addiu $t9, $t8, -0x200 -/* 03B8C0 7F008ED0 AFB90064 */ sw $t9, 0x64($sp) -/* 03B8C4 7F008ED4 AFA20060 */ sw $v0, 0x60($sp) -/* 03B8C8 7F008ED8 8E040000 */ lw $a0, ($s0) -/* 03B8CC 7F008EDC 0FC06E50 */ jal sub_GAME_7F01BAE0 -/* 03B8D0 7F008EE0 2405001E */ li $a1, 30 -/* 03B8D4 7F008EE4 8FA30060 */ lw $v1, 0x60($sp) -/* 03B8D8 7F008EE8 8FA80064 */ lw $t0, 0x64($sp) -/* 03B8DC 7F008EEC 3C028006 */ lui $v0, %hi(dword_CODE_bss_80069554) # $v0, 0x8006 -/* 03B8E0 7F008EF0 24428494 */ addiu $v0, %lo(dword_CODE_bss_80069554) # addiu $v0, $v0, -0x7b6c -/* 03B8E4 7F008EF4 8E050000 */ lw $a1, ($s0) -/* 03B8E8 7F008EF8 AC430000 */ sw $v1, ($v0) -/* 03B8EC 7F008EFC 3C018000 */ lui $at, 0x8000 -/* 03B8F0 7F008F00 24630100 */ addiu $v1, $v1, 0x100 -/* 03B8F4 7F008F04 2509FF00 */ addiu $t1, $t0, -0x100 -/* 03B8F8 7F008F08 AFA90064 */ sw $t1, 0x64($sp) -/* 03B8FC 7F008F0C AFA30060 */ sw $v1, 0x60($sp) -/* 03B900 7F008F10 8C440000 */ lw $a0, ($v0) -/* 03B904 7F008F14 2406001E */ li $a2, 30 -/* 03B908 7F008F18 0FC06F96 */ jal sub_GAME_7F01BFF8 -/* 03B90C 7F008F1C 00A12821 */ addu $a1, $a1, $at -/* 03B910 7F008F20 27A40060 */ addiu $a0, $sp, 0x60 -/* 03B914 7F008F24 0FC02359 */ jal sub_GAME_7F008DE4 -/* 03B918 7F008F28 27A50064 */ addiu $a1, $sp, 0x64 -/* 03B91C 7F008F2C 3C0B8002 */ lui $t3, %hi(D_8002A8A8) # $t3, 0x8002 -/* 03B920 7F008F30 256B5DF8 */ addiu $t3, %lo(D_8002A8A8) # addiu $t3, $t3, 0x5df8 -/* 03B924 7F008F34 8D610000 */ lw $at, ($t3) -/* 03B928 7F008F38 27AA0050 */ addiu $t2, $sp, 0x50 -/* 03B92C 7F008F3C 8D6E0004 */ lw $t6, 4($t3) -/* 03B930 7F008F40 AD410000 */ sw $at, ($t2) -/* 03B934 7F008F44 8D610008 */ lw $at, 8($t3) -/* 03B938 7F008F48 3C110001 */ lui $s1, (0x00012C00 >> 16) # lui $s1, 1 -/* 03B93C 7F008F4C 36312C00 */ ori $s1, (0x00012C00 & 0xFFFF) # ori $s1, $s1, 0x2c00 -/* 03B940 7F008F50 AD4E0004 */ sw $t6, 4($t2) -/* 03B944 7F008F54 AD410008 */ sw $at, 8($t2) -/* 03B948 7F008F58 8FA50060 */ lw $a1, 0x60($sp) -/* 03B94C 7F008F5C 02203025 */ move $a2, $s1 -/* 03B950 7F008F60 0FC32C05 */ jal texInitPool -/* 03B954 7F008F64 27A40040 */ addiu $a0, $sp, 0x40 -/* 03B958 7F008F68 8FA60060 */ lw $a2, 0x60($sp) -/* 03B95C 7F008F6C 8FA70064 */ lw $a3, 0x64($sp) -/* 03B960 7F008F70 3C108003 */ lui $s0, %hi(c_item_entries) # $s0, 0x8003 -/* 03B964 7F008F74 26107A60 */ addiu $s0, %lo(c_item_entries) # addiu $s0, $s0, 0x7a60 -/* 03B968 7F008F78 27AF0040 */ addiu $t7, $sp, 0x40 -/* 03B96C 7F008F7C 00D13021 */ addu $a2, $a2, $s1 -/* 03B970 7F008F80 00F13823 */ subu $a3, $a3, $s1 -/* 03B974 7F008F84 AFA70064 */ sw $a3, 0x64($sp) -/* 03B978 7F008F88 AFA60060 */ sw $a2, 0x60($sp) -/* 03B97C 7F008F8C AFAF0010 */ sw $t7, 0x10($sp) -/* 03B980 7F008F90 8E040064 */ lw $a0, 0x64($s0) -/* 03B984 7F008F94 0FC1D949 */ jal load_object_fill_header -/* 03B988 7F008F98 8E050068 */ lw $a1, 0x68($s0) -/* 03B98C 7F008F9C 0FC2F150 */ jal get_pc_buffer_remaining_value -/* 03B990 7F008FA0 8E040068 */ lw $a0, 0x68($s0) -/* 03B994 7F008FA4 2443003F */ addiu $v1, $v0, 0x3f -/* 03B998 7F008FA8 8FA60060 */ lw $a2, 0x60($sp) -/* 03B99C 7F008FAC 8FA70064 */ lw $a3, 0x64($sp) -/* 03B9A0 7F008FB0 3478003F */ ori $t8, $v1, 0x3f -/* 03B9A4 7F008FB4 3B19003F */ xori $t9, $t8, 0x3f -/* 03B9A8 7F008FB8 27A80040 */ addiu $t0, $sp, 0x40 -/* 03B9AC 7F008FBC 00D93021 */ addu $a2, $a2, $t9 -/* 03B9B0 7F008FC0 00F93823 */ subu $a3, $a3, $t9 -/* 03B9B4 7F008FC4 AFA70064 */ sw $a3, 0x64($sp) -/* 03B9B8 7F008FC8 AFA60060 */ sw $a2, 0x60($sp) -/* 03B9BC 7F008FCC AFA80010 */ sw $t0, 0x10($sp) -/* 03B9C0 7F008FD0 8E040618 */ lw $a0, 0x618($s0) -/* 03B9C4 7F008FD4 0FC1D949 */ jal load_object_fill_header -/* 03B9C8 7F008FD8 8E05061C */ lw $a1, 0x61c($s0) -/* 03B9CC 7F008FDC 0FC2F150 */ jal get_pc_buffer_remaining_value -/* 03B9D0 7F008FE0 8E04061C */ lw $a0, 0x61c($s0) -/* 03B9D4 7F008FE4 2443003F */ addiu $v1, $v0, 0x3f -/* 03B9D8 7F008FE8 8FAC0064 */ lw $t4, 0x64($sp) -/* 03B9DC 7F008FEC 8FAB0060 */ lw $t3, 0x60($sp) -/* 03B9E0 7F008FF0 3469003F */ ori $t1, $v1, 0x3f -/* 03B9E4 7F008FF4 392D003F */ xori $t5, $t1, 0x3f -/* 03B9E8 7F008FF8 018D5023 */ subu $t2, $t4, $t5 -/* 03B9EC 7F008FFC 016D7021 */ addu $t6, $t3, $t5 -/* 03B9F0 7F009000 AFAA0064 */ sw $t2, 0x64($sp) -/* 03B9F4 7F009004 AFAE0060 */ sw $t6, 0x60($sp) -/* 03B9F8 7F009008 24040005 */ li $a0, 5 -/* 03B9FC 7F00900C 2405004E */ li $a1, 78 -/* 03BA00 7F009010 8E060064 */ lw $a2, 0x64($s0) -/* 03BA04 7F009014 8E070618 */ lw $a3, 0x618($s0) -/* 03BA08 7F009018 0FC08D22 */ jal setup_chr_instance -/* 03BA0C 7F00901C AFA00010 */ sw $zero, 0x10($sp) -/* 03BA10 7F009020 3C118002 */ lui $s1, %hi(D_8002A7F4) # $s1, 0x8002 -/* 03BA14 7F009024 26315D44 */ addiu $s1, %lo(D_8002A7F4) # addiu $s1, $s1, 0x5d44 -/* 03BA18 7F009028 3C053E40 */ lui $a1, (0x3E404CEC >> 16) # lui $a1, 0x3e40 -/* 03BA1C 7F00902C AE220000 */ sw $v0, ($s1) -/* 03BA20 7F009030 34A54CEC */ ori $a1, (0x3E404CEC & 0xFFFF) # ori $a1, $a1, 0x4cec -/* 03BA24 7F009034 0FC1B4CF */ jal modelSetScale -/* 03BA28 7F009038 00402025 */ move $a0, $v0 -/* 03BA2C 7F00903C 8E240000 */ lw $a0, ($s1) -/* 03BA30 7F009040 0FC1B4D2 */ jal sub_GAME_7F06CE84 -/* 03BA34 7F009044 3C053F80 */ lui $a1, 0x3f80 -/* 03BA38 7F009048 8E240000 */ lw $a0, ($s1) -/* 03BA3C 7F00904C 0FC1B480 */ jal setsuboffset -/* 03BA40 7F009050 27A50050 */ addiu $a1, $sp, 0x50 -/* 03BA44 7F009054 8E240000 */ lw $a0, ($s1) -/* 03BA48 7F009058 0FC1B49D */ jal setsubroty -/* 03BA4C 7F00905C 24050000 */ li $a1, 0 -/* 03BA50 7F009060 3C053F19 */ lui $a1, (0x3F19999A >> 16) # lui $a1, 0x3f19 -/* 03BA54 7F009064 34A5999A */ ori $a1, (0x3F19999A & 0xFFFF) # ori $a1, $a1, 0x999a -/* 03BA58 7F009068 8E240000 */ lw $a0, ($s1) -/* 03BA5C 7F00906C 0FC1C02E */ jal modelSetAnimPlaySpeed -/* 03BA60 7F009070 24060000 */ li $a2, 0 -/* 03BA64 7F009074 3C0F8006 */ lui $t7, %hi(ptr_animation_table) # $t7, 0x8006 -/* 03BA68 7F009078 8DEF8478 */ lw $t7, %lo(ptr_animation_table)($t7) -/* 03BA6C 7F00907C 3C180000 */ lui $t8, 0 -/* 03BA70 7F009080 27184144 */ addiu $t8, $t8, 0x4144 -/* 03BA74 7F009084 01F82821 */ addu $a1, $t7, $t8 -/* 03BA78 7F009088 94A30004 */ lhu $v1, 4($a1) -/* 03BA7C 7F00908C 2462FFBC */ addiu $v0, $v1, -0x44 -/* 03BA80 7F009090 04430005 */ bgezl $v0, .L7F0090A8 -/* 03BA84 7F009094 44822000 */ mtc1 $v0, $f4 -/* 03BA88 7F009098 00431021 */ addu $v0, $v0, $v1 -.L7F00909C: -/* 03BA8C 7F00909C 0442FFFF */ bltzl $v0, .L7F00909C -/* 03BA90 7F0090A0 00431021 */ addu $v0, $v0, $v1 -/* 03BA94 7F0090A4 44822000 */ mtc1 $v0, $f4 -.L7F0090A8: -/* 03BA98 7F0090A8 3C018004 */ lui $at, %hi(eu_cdata_0x28ae0) # $at, 0x8004 -/* 03BA9C 7F0090AC C4267730 */ lwc1 $f6, %lo(eu_cdata_0x28ae0)($at) -/* 03BAA0 7F0090B0 46802120 */ cvt.s.w $f4, $f4 -/* 03BAA4 7F0090B4 44804000 */ mtc1 $zero, $f8 -/* 03BAA8 7F0090B8 8E240000 */ lw $a0, ($s1) -/* 03BAAC 7F0090BC 00003025 */ move $a2, $zero -/* 03BAB0 7F0090C0 E7A60010 */ swc1 $f6, 0x10($sp) -/* 03BAB4 7F0090C4 E7A80014 */ swc1 $f8, 0x14($sp) -/* 03BAB8 7F0090C8 44072000 */ mfc1 $a3, $f4 -/* 03BABC 7F0090CC 0FC1BF92 */ jal modelSetAnimation -/* 03BAC0 7F0090D0 00000000 */ nop -/* 03BAC4 7F0090D4 3C108003 */ lui $s0, %hi(PitemZ_entries) # $s0, 0x8003 -/* 03BAC8 7F0090D8 26104D88 */ addiu $s0, %lo(PitemZ_entries) # addiu $s0, $s0, 0x4d88 -/* 03BACC 7F0090DC 27B90040 */ addiu $t9, $sp, 0x40 -/* 03BAD0 7F0090E0 AFB90010 */ sw $t9, 0x10($sp) -/* 03BAD4 7F0090E4 8E0408F4 */ lw $a0, 0x8f4($s0) -/* 03BAD8 7F0090E8 8E0508F8 */ lw $a1, 0x8f8($s0) -/* 03BADC 7F0090EC 8FA60060 */ lw $a2, 0x60($sp) -/* 03BAE0 7F0090F0 0FC1D949 */ jal load_object_fill_header -/* 03BAE4 7F0090F4 8FA70064 */ lw $a3, 0x64($sp) -/* 03BAE8 7F0090F8 0FC2F150 */ jal get_pc_buffer_remaining_value -/* 03BAEC 7F0090FC 8E0408F8 */ lw $a0, 0x8f8($s0) -/* 03BAF0 7F009100 2443003F */ addiu $v1, $v0, 0x3f -/* 03BAF4 7F009104 8FAD0064 */ lw $t5, 0x64($sp) -/* 03BAF8 7F009108 8FAA0060 */ lw $t2, 0x60($sp) -/* 03BAFC 7F00910C 3468003F */ ori $t0, $v1, 0x3f -/* 03BB00 7F009110 3909003F */ xori $t1, $t0, 0x3f -/* 03BB04 7F009114 01A96023 */ subu $t4, $t5, $t1 -/* 03BB08 7F009118 01495821 */ addu $t3, $t2, $t1 -/* 03BB0C 7F00911C AFAC0064 */ sw $t4, 0x64($sp) -/* 03BB10 7F009120 AFAB0060 */ sw $t3, 0x60($sp) -/* 03BB14 7F009124 0FC1D75F */ jal modelCalculateRwDataLen -/* 03BB18 7F009128 8E0408F4 */ lw $a0, 0x8f4($s0) -/* 03BB1C 7F00912C 0FC1B1F5 */ jal get_obj_instance_controller_for_header -/* 03BB20 7F009130 8E0408F4 */ lw $a0, 0x8f4($s0) -/* 03BB24 7F009134 3C108002 */ lui $s0, %hi(D_8002A7F8) # $s0, 0x8002 -/* 03BB28 7F009138 26105D48 */ addiu $s0, %lo(D_8002A7F8) # addiu $s0, $s0, 0x5d48 -/* 03BB2C 7F00913C 3C053E40 */ lui $a1, (0x3E404CEC >> 16) # lui $a1, 0x3e40 -/* 03BB30 7F009140 AE020000 */ sw $v0, ($s0) -/* 03BB34 7F009144 34A54CEC */ ori $a1, (0x3E404CEC & 0xFFFF) # ori $a1, $a1, 0x4cec -/* 03BB38 7F009148 0FC1B4CF */ jal modelSetScale -/* 03BB3C 7F00914C 00402025 */ move $a0, $v0 -/* 03BB40 7F009150 8E2E0000 */ lw $t6, ($s1) -/* 03BB44 7F009154 8E0F0000 */ lw $t7, ($s0) -/* 03BB48 7F009158 3C018006 */ lui $at, %hi(dword_CODE_bss_80069594) # $at, 0x8006 -/* 03BB4C 7F00915C ADEE0018 */ sw $t6, 0x18($t7) -/* 03BB50 7F009160 8E380000 */ lw $t8, ($s1) -/* 03BB54 7F009164 8E0D0000 */ lw $t5, ($s0) -/* 03BB58 7F009168 8F190008 */ lw $t9, 8($t8) -/* 03BB5C 7F00916C 8F280008 */ lw $t0, 8($t9) -/* 03BB60 7F009170 8D09000C */ lw $t1, 0xc($t0) -/* 03BB64 7F009174 ADA9001C */ sw $t1, 0x1c($t5) -/* 03BB68 7F009178 8FBF002C */ lw $ra, 0x2c($sp) -/* 03BB6C 7F00917C 8FB10028 */ lw $s1, 0x28($sp) -/* 03BB70 7F009180 8FB00024 */ lw $s0, 0x24($sp) -/* 03BB74 7F009184 AC2084D4 */ sw $zero, %lo(dword_CODE_bss_80069594)($at) -/* 03BB78 7F009188 03E00008 */ jr $ra -/* 03BB7C 7F00918C 27BD0060 */ addiu $sp, $sp, 0x60 -) -#endif + #define S_7F008E80_ANIM_SPEED 0.5f #endif + modelSetAnimPlaySpeed(chrModelInstance, S_7F008E80_ANIM_SPEED, 0.0f); +#undef S_7F008E80_ANIM_SPEED + + animation = (struct ModelAnimation*)((s32)ptr_animation_table + (s32)&ANIM_DATA_bond_eye_walk); + startframe = animation->unk04 - 0x44; + while (startframe < 0) + { + startframe += animation->unk04; + } + + modelSetAnimation(chrModelInstance, (struct ModelAnimation *) animation, 0, (f32) startframe, 0.91f, 0.0f); + load_object_fill_header(PitemZ_entries[PROP_CHRWPPK].header, PitemZ_entries[PROP_CHRWPPK].filename, gfxBuffer, bufferSize, &texturePool); + + temp_t9 = ((get_pc_buffer_remaining_value(PitemZ_entries[PROP_CHRWPPK].filename) + 0x3F) | 0x3F) ^ 0x3F; + bufferSize -= temp_t9; + gfxBuffer += temp_t9; + + modelCalculateRwDataLen(PitemZ_entries[191].header); + + gunModelInstance = get_obj_instance_controller_for_header(PitemZ_entries[PROP_CHRWPPK].header); + + modelSetScale(gunModelInstance, 0.18779343f); + + gunModelInstance->attachedto = chrModelInstance; + gunModelInstance->attachedto_objinst = chrModelInstance->obj->Switches[3]; + dword_CODE_bss_80069594 = 0; +} void sub_GAME_7F00920C(void) { - if (D_8002A7F4) + if (chrModelInstance) { - clear_aircraft_model_obj(D_8002A7F4); + clear_aircraft_model_obj(chrModelInstance); } - if (D_8002A7F8) + if (gunModelInstance) { - clear_model_obj(D_8002A7F8); + clear_model_obj(gunModelInstance); } } @@ -1413,11 +1034,11 @@ Gfx *sub_GAME_7F009254(Gfx *gdl) { switch (gunbarrel_mode - 2) { case 0: - gdl = something_with_gunbarrel_and_rareware_logo_matrix_manip(gdl); + gdl = manipulateGunbarrelAndLogoMatrices(gdl); g_TitleX += XINC; if (word_CODE_bss_80069584 < 0) { word_CODE_bss_80069584 = 200; - dword_CODE_bss_8006957C = (g_TitleX - XDEC); + titleTransitionX = (g_TitleX - XDEC); } else { #if defined(VERSION_EU) word_CODE_bss_80069584 -= 7; @@ -1433,7 +1054,7 @@ Gfx *sub_GAME_7F009254(Gfx *gdl) { case 1: #if defined(LEFTOVERDEBUG) - gSPDisplayList(gdl++, &fontDL_0x000); + gSPDisplayList(gdl++, &dlBasicGeometry); gdl = insert_imageDL(gdl++); gdl = insert_imageDL(gdl++); gdl = insert_imageDL(gdl++); @@ -1479,7 +1100,7 @@ Gfx *sub_GAME_7F009254(Gfx *gdl) { if (intro_state_blood_animation != 0) { gunbarrel_mode++; word_CODE_bss_80069584 = 0; - dword_CODE_bss_8006957C = g_TitleX; + titleTransitionX = g_TitleX; intro_eye_counter = 0; } break; @@ -1487,7 +1108,7 @@ Gfx *sub_GAME_7F009254(Gfx *gdl) { case 4: word_CODE_bss_80069584 += INCVAL; intro_eye_counter++; - g_TitleX = ((sins(word_CODE_bss_80069584) * 64.0f) / 32768.0f) + dword_CODE_bss_8006957C; + g_TitleX = ((sins(word_CODE_bss_80069584) * 64.0f) / 32768.0f) + titleTransitionX; gdl = insert_sniper_sight_eye_intro(gdl); gdl = insert_sight_backdrop_eye_intro(gdl); gdl = insert_bond_eye_intro(gdl); @@ -1501,7 +1122,7 @@ Gfx *sub_GAME_7F009254(Gfx *gdl) { case 5: word_CODE_bss_80069584 += INCVAL; - g_TitleX = ((sins(word_CODE_bss_80069584) * 64.0f) / 32768.0f) + dword_CODE_bss_8006957C; + g_TitleX = ((sins(word_CODE_bss_80069584) * 64.0f) / 32768.0f) + titleTransitionX; gdl = insert_sniper_sight_eye_intro(gdl); gdl = insert_sight_backdrop_eye_intro(gdl); gdl = insert_bond_eye_intro(gdl); @@ -1517,7 +1138,7 @@ Gfx *sub_GAME_7F009254(Gfx *gdl) { break; case 6: - gSPDisplayList(gdl++, &fontDL_0x000); + gSPDisplayList(gdl++, &dlBasicGeometry); gdl = insert_imageDL(gdl); if (intro_eye_counter++ >= INTRO_EYE_COUNTER_CASE_6) { intro_eye_counter = 0; diff --git a/src/game/title.h b/src/game/title.h index 0f7c6ae..d0d7230 100644 --- a/src/game/title.h +++ b/src/game/title.h @@ -2,19 +2,19 @@ #define _INTRO_LOGOS_H_ #include -extern s32 dword_CODE_bss_80069550; -extern Gfx *dword_CODE_bss_80069554; -extern Mtx *matrix_buffer_rarelogo_0; -extern Mtx *matrix_buffer_gunbarrel_0; -extern Mtx *matrix_buffer_rarelogo_1; -extern Mtx *matrix_buffer_rarelogo_2; -extern Mtx *matrix_buffer_gunbarrel_1; -extern Mtx *matrix_buffer_intro_backdrop; -extern Mtx *matrix_buffer_intro_bond; +extern s32 barrelDisplayListPtr; +extern Gfx *gunbarrelgfxListPointer; +extern Mtx *matrixBufferRareLogo0; +extern Mtx *matrixBufferGunbarrel0; +extern Mtx *matrixBufferRareLogo1; +extern Mtx *matrixBufferRareLogo2; +extern Mtx *matrixBufferGunbarrel1; +extern Mtx *matrixBufferIntroBackdrop; +extern Mtx *matrixBufferIntroBond; extern f32 x; extern f32 y; -extern f32 dword_CODE_bss_8006957C; -extern f32 dword_CODE_bss_80069580; +extern f32 titleTransitionX; +extern f32 titleTransitionY; extern s16 word_CODE_bss_80069584; extern s32 dword_CODE_bss_80069588; extern s32 dword_CODE_bss_8006958C; diff --git a/src/game/unk_01B240.c b/src/game/unk_01B240.c index b80720c..8fcc064 100644 --- a/src/game/unk_01B240.c +++ b/src/game/unk_01B240.c @@ -26,7 +26,9 @@ s32 D_8002BB2C = 0; #ifdef NONMATCHING - +/* +* Address: 0x7F01B240 +*/ void sub_GAME_7F01B240(void) { } diff --git a/src/game/unk_01BAE0.c b/src/game/unk_01BAE0.c index 6ee1f76..ed76534 100644 --- a/src/game/unk_01BAE0.c +++ b/src/game/unk_01BAE0.c @@ -1,437 +1,103 @@ #include +#include +#include "bondtypes.h" +#include "image.h" +#include "math.h" +#include "objecthandler.h" +#include "ob.h" +#include "chr_b.h" +#include "initanitable.h" +#include "chrobjdata.h" +/* +* Address: 0x7F01BAE0 +*/ +void createGunbarrelRenderHole(struct s_display_list_something *var_s0, s32 arg1) +{ + s16 cosval; + f32 temp_f20; + s16 sinval; + s32 var_s2; -#ifdef NONMATCHING -void sub_GAME_7F01BAE0(void) { + for (var_s2 = 0; var_s2 <= arg1; var_s2 += 2) + { + temp_f20 = ((f32) var_s2 * 3.1415927f) / (f32) arg1; + sinval = sinf(temp_f20) * 64.0f; + cosval = cosf(temp_f20) * -64.0f; + + var_s0->unk0 = sinval; + var_s0->unk2 = cosval; + + var_s0->unk4 = 0; + var_s0->unk6 = 0; + var_s0->unk8 = 0; + var_s0->unkA = 0; + var_s0->unkC = 0xff; + var_s0->unkD = 0xff; + var_s0->unkE = 0xff; + + + var_s0->unkC = (s8) (u32) (143.0f - (cosf(temp_f20) * -111.0f)); + var_s0->unkD = (s8) (u32) (143.0f - (cosf(temp_f20) * -111.0f)); + var_s0->unkE = (s8) (u32) (143.0f - (cosf(temp_f20) * -111.0f)); + var_s0->unkF = 0; + + var_s0++; + + if ((var_s2 != 0) && (var_s2 < arg1)) + { + var_s0->unk0 = -sinval; + var_s0->unk2 = cosval; + + var_s0->unk4 = 0; + var_s0->unk6 = 0; + var_s0->unk8 = 0; + var_s0->unkA = 0; + var_s0->unkC = 0xff; + var_s0->unkD = 0xff; + var_s0->unkE = 0xff; + + var_s0->unkC = (s8) (u32) (143.0f - (cosf(temp_f20) * -111.0f)); + var_s0->unkD = (s8) (u32) (143.0f - (cosf(temp_f20) * -111.0f)); + var_s0->unkE = (s8) (u32) (143.0f - (cosf(temp_f20) * -111.0f)); + var_s0->unkF = 0; + + var_s0++; + } + } } -#else -GLOBAL_ASM( -.late_rodata -glabel PI_80051D00 -.word 0x40490FDB /*3.1415927*/ -.text -glabel sub_GAME_7F01BAE0 -/* 050610 7F01BAE0 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 050614 7F01BAE4 AFB50058 */ sw $s5, 0x58($sp) -/* 050618 7F01BAE8 AFB2004C */ sw $s2, 0x4c($sp) -/* 05061C 7F01BAEC AFB00044 */ sw $s0, 0x44($sp) -/* 050620 7F01BAF0 00808025 */ move $s0, $a0 -/* 050624 7F01BAF4 00A0A825 */ move $s5, $a1 -/* 050628 7F01BAF8 AFBF005C */ sw $ra, 0x5c($sp) -/* 05062C 7F01BAFC AFB40054 */ sw $s4, 0x54($sp) -/* 050630 7F01BB00 AFB30050 */ sw $s3, 0x50($sp) -/* 050634 7F01BB04 AFB10048 */ sw $s1, 0x48($sp) -/* 050638 7F01BB08 F7BE0038 */ sdc1 $f30, 0x38($sp) -/* 05063C 7F01BB0C F7BC0030 */ sdc1 $f28, 0x30($sp) -/* 050640 7F01BB10 F7BA0028 */ sdc1 $f26, 0x28($sp) -/* 050644 7F01BB14 F7B80020 */ sdc1 $f24, 0x20($sp) -/* 050648 7F01BB18 F7B60018 */ sdc1 $f22, 0x18($sp) -/* 05064C 7F01BB1C F7B40010 */ sdc1 $f20, 0x10($sp) -/* 050650 7F01BB20 04A00126 */ bltz $a1, .L7F01BFBC -/* 050654 7F01BB24 00009025 */ move $s2, $zero -/* 050658 7F01BB28 3C014280 */ li $at, 0x42800000 # 64.000000 -/* 05065C 7F01BB2C 4481F000 */ mtc1 $at, $f30 -/* 050660 7F01BB30 3C018005 */ lui $at, %hi(PI_80051D00) -/* 050664 7F01BB34 C43C1D00 */ lwc1 $f28, %lo(PI_80051D00)($at) -/* 050668 7F01BB38 3C01C2DE */ li $at, 0xC2DE0000 # -111.000000 -/* 05066C 7F01BB3C 44952000 */ mtc1 $s5, $f4 -/* 050670 7F01BB40 4481C000 */ mtc1 $at, $f24 -/* 050674 7F01BB44 3C01430F */ li $at, 0x430F0000 # 143.000000 -/* 050678 7F01BB48 4481B000 */ mtc1 $at, $f22 -/* 05067C 7F01BB4C 241100FF */ li $s1, 255 -/* 050680 7F01BB50 468026A0 */ cvt.s.w $f26, $f4 -/* 050684 7F01BB54 44923000 */ mtc1 $s2, $f6 -.L7F01BB58: -/* 050688 7F01BB58 00000000 */ nop -/* 05068C 7F01BB5C 46803220 */ cvt.s.w $f8, $f6 -/* 050690 7F01BB60 461C4282 */ mul.s $f10, $f8, $f28 -/* 050694 7F01BB64 461A5503 */ div.s $f20, $f10, $f26 -/* 050698 7F01BB68 0FC15FAB */ jal sinf -/* 05069C 7F01BB6C 4600A306 */ mov.s $f12, $f20 -/* 0506A0 7F01BB70 461E0402 */ mul.s $f16, $f0, $f30 -/* 0506A4 7F01BB74 4600A306 */ mov.s $f12, $f20 -/* 0506A8 7F01BB78 4600848D */ trunc.w.s $f18, $f16 -/* 0506AC 7F01BB7C 44139000 */ mfc1 $s3, $f18 -/* 0506B0 7F01BB80 00000000 */ nop -/* 0506B4 7F01BB84 00137C00 */ sll $t7, $s3, 0x10 -/* 0506B8 7F01BB88 0FC15FA8 */ jal cosf -/* 0506BC 7F01BB8C 000F9C03 */ sra $s3, $t7, 0x10 -/* 0506C0 7F01BB90 3C01C280 */ li $at, 0xC2800000 # -64.000000 -/* 0506C4 7F01BB94 44812000 */ mtc1 $at, $f4 -/* 0506C8 7F01BB98 A6130000 */ sh $s3, ($s0) -/* 0506CC 7F01BB9C A6000004 */ sh $zero, 4($s0) -/* 0506D0 7F01BBA0 46040182 */ mul.s $f6, $f0, $f4 -/* 0506D4 7F01BBA4 A6000006 */ sh $zero, 6($s0) -/* 0506D8 7F01BBA8 A6000008 */ sh $zero, 8($s0) -/* 0506DC 7F01BBAC A600000A */ sh $zero, 0xa($s0) -/* 0506E0 7F01BBB0 A211000C */ sb $s1, 0xc($s0) -/* 0506E4 7F01BBB4 A211000D */ sb $s1, 0xd($s0) -/* 0506E8 7F01BBB8 A211000E */ sb $s1, 0xe($s0) -/* 0506EC 7F01BBBC 4600320D */ trunc.w.s $f8, $f6 -/* 0506F0 7F01BBC0 4600A306 */ mov.s $f12, $f20 -/* 0506F4 7F01BBC4 44024000 */ mfc1 $v0, $f8 -/* 0506F8 7F01BBC8 00000000 */ nop -/* 0506FC 7F01BBCC 0002A400 */ sll $s4, $v0, 0x10 -/* 050700 7F01BBD0 00144403 */ sra $t0, $s4, 0x10 -/* 050704 7F01BBD4 0100A025 */ move $s4, $t0 -/* 050708 7F01BBD8 0FC15FA8 */ jal cosf -/* 05070C 7F01BBDC A6020002 */ sh $v0, 2($s0) -/* 050710 7F01BBE0 46180282 */ mul.s $f10, $f0, $f24 -/* 050714 7F01BBE4 240A0001 */ li $t2, 1 -/* 050718 7F01BBE8 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 05071C 7F01BBEC 460AB401 */ sub.s $f16, $f22, $f10 -/* 050720 7F01BBF0 4449F800 */ cfc1 $t1, $31 -/* 050724 7F01BBF4 44CAF800 */ ctc1 $t2, $31 -/* 050728 7F01BBF8 00000000 */ nop -/* 05072C 7F01BBFC 460084A4 */ cvt.w.s $f18, $f16 -/* 050730 7F01BC00 444AF800 */ cfc1 $t2, $31 -/* 050734 7F01BC04 00000000 */ nop -/* 050738 7F01BC08 314A0078 */ andi $t2, $t2, 0x78 -/* 05073C 7F01BC0C 51400013 */ beql $t2, $zero, .L7F01BC5C -/* 050740 7F01BC10 440A9000 */ mfc1 $t2, $f18 -/* 050744 7F01BC14 44819000 */ mtc1 $at, $f18 -/* 050748 7F01BC18 240A0001 */ li $t2, 1 -/* 05074C 7F01BC1C 46128481 */ sub.s $f18, $f16, $f18 -/* 050750 7F01BC20 44CAF800 */ ctc1 $t2, $31 -/* 050754 7F01BC24 00000000 */ nop -/* 050758 7F01BC28 460094A4 */ cvt.w.s $f18, $f18 -/* 05075C 7F01BC2C 444AF800 */ cfc1 $t2, $31 -/* 050760 7F01BC30 00000000 */ nop -/* 050764 7F01BC34 314A0078 */ andi $t2, $t2, 0x78 -/* 050768 7F01BC38 15400005 */ bnez $t2, .L7F01BC50 -/* 05076C 7F01BC3C 00000000 */ nop -/* 050770 7F01BC40 440A9000 */ mfc1 $t2, $f18 -/* 050774 7F01BC44 3C018000 */ lui $at, 0x8000 -/* 050778 7F01BC48 10000007 */ b .L7F01BC68 -/* 05077C 7F01BC4C 01415025 */ or $t2, $t2, $at -.L7F01BC50: -/* 050780 7F01BC50 10000005 */ b .L7F01BC68 -/* 050784 7F01BC54 240AFFFF */ li $t2, -1 -/* 050788 7F01BC58 440A9000 */ mfc1 $t2, $f18 -.L7F01BC5C: -/* 05078C 7F01BC5C 00000000 */ nop -/* 050790 7F01BC60 0540FFFB */ bltz $t2, .L7F01BC50 -/* 050794 7F01BC64 00000000 */ nop -.L7F01BC68: -/* 050798 7F01BC68 44C9F800 */ ctc1 $t1, $31 -/* 05079C 7F01BC6C A20A000C */ sb $t2, 0xc($s0) -/* 0507A0 7F01BC70 0FC15FA8 */ jal cosf -/* 0507A4 7F01BC74 4600A306 */ mov.s $f12, $f20 -/* 0507A8 7F01BC78 46180102 */ mul.s $f4, $f0, $f24 -/* 0507AC 7F01BC7C 240C0001 */ li $t4, 1 -/* 0507B0 7F01BC80 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0507B4 7F01BC84 4604B181 */ sub.s $f6, $f22, $f4 -/* 0507B8 7F01BC88 444BF800 */ cfc1 $t3, $31 -/* 0507BC 7F01BC8C 44CCF800 */ ctc1 $t4, $31 -/* 0507C0 7F01BC90 00000000 */ nop -/* 0507C4 7F01BC94 46003224 */ cvt.w.s $f8, $f6 -/* 0507C8 7F01BC98 444CF800 */ cfc1 $t4, $31 -/* 0507CC 7F01BC9C 00000000 */ nop -/* 0507D0 7F01BCA0 318C0078 */ andi $t4, $t4, 0x78 -/* 0507D4 7F01BCA4 51800013 */ beql $t4, $zero, .L7F01BCF4 -/* 0507D8 7F01BCA8 440C4000 */ mfc1 $t4, $f8 -/* 0507DC 7F01BCAC 44814000 */ mtc1 $at, $f8 -/* 0507E0 7F01BCB0 240C0001 */ li $t4, 1 -/* 0507E4 7F01BCB4 46083201 */ sub.s $f8, $f6, $f8 -/* 0507E8 7F01BCB8 44CCF800 */ ctc1 $t4, $31 -/* 0507EC 7F01BCBC 00000000 */ nop -/* 0507F0 7F01BCC0 46004224 */ cvt.w.s $f8, $f8 -/* 0507F4 7F01BCC4 444CF800 */ cfc1 $t4, $31 -/* 0507F8 7F01BCC8 00000000 */ nop -/* 0507FC 7F01BCCC 318C0078 */ andi $t4, $t4, 0x78 -/* 050800 7F01BCD0 15800005 */ bnez $t4, .L7F01BCE8 -/* 050804 7F01BCD4 00000000 */ nop -/* 050808 7F01BCD8 440C4000 */ mfc1 $t4, $f8 -/* 05080C 7F01BCDC 3C018000 */ lui $at, 0x8000 -/* 050810 7F01BCE0 10000007 */ b .L7F01BD00 -/* 050814 7F01BCE4 01816025 */ or $t4, $t4, $at -.L7F01BCE8: -/* 050818 7F01BCE8 10000005 */ b .L7F01BD00 -/* 05081C 7F01BCEC 240CFFFF */ li $t4, -1 -/* 050820 7F01BCF0 440C4000 */ mfc1 $t4, $f8 -.L7F01BCF4: -/* 050824 7F01BCF4 00000000 */ nop -/* 050828 7F01BCF8 0580FFFB */ bltz $t4, .L7F01BCE8 -/* 05082C 7F01BCFC 00000000 */ nop -.L7F01BD00: -/* 050830 7F01BD00 44CBF800 */ ctc1 $t3, $31 -/* 050834 7F01BD04 A20C000D */ sb $t4, 0xd($s0) -/* 050838 7F01BD08 0FC15FA8 */ jal cosf -/* 05083C 7F01BD0C 4600A306 */ mov.s $f12, $f20 -/* 050840 7F01BD10 46180282 */ mul.s $f10, $f0, $f24 -/* 050844 7F01BD14 240E0001 */ li $t6, 1 -/* 050848 7F01BD18 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 05084C 7F01BD1C 460AB401 */ sub.s $f16, $f22, $f10 -/* 050850 7F01BD20 444DF800 */ cfc1 $t5, $31 -/* 050854 7F01BD24 44CEF800 */ ctc1 $t6, $31 -/* 050858 7F01BD28 00000000 */ nop -/* 05085C 7F01BD2C 460084A4 */ cvt.w.s $f18, $f16 -/* 050860 7F01BD30 444EF800 */ cfc1 $t6, $31 -/* 050864 7F01BD34 00000000 */ nop -/* 050868 7F01BD38 31CE0078 */ andi $t6, $t6, 0x78 -/* 05086C 7F01BD3C 51C00013 */ beql $t6, $zero, .L7F01BD8C -/* 050870 7F01BD40 440E9000 */ mfc1 $t6, $f18 -/* 050874 7F01BD44 44819000 */ mtc1 $at, $f18 -/* 050878 7F01BD48 240E0001 */ li $t6, 1 -/* 05087C 7F01BD4C 46128481 */ sub.s $f18, $f16, $f18 -/* 050880 7F01BD50 44CEF800 */ ctc1 $t6, $31 -/* 050884 7F01BD54 00000000 */ nop -/* 050888 7F01BD58 460094A4 */ cvt.w.s $f18, $f18 -/* 05088C 7F01BD5C 444EF800 */ cfc1 $t6, $31 -/* 050890 7F01BD60 00000000 */ nop -/* 050894 7F01BD64 31CE0078 */ andi $t6, $t6, 0x78 -/* 050898 7F01BD68 15C00005 */ bnez $t6, .L7F01BD80 -/* 05089C 7F01BD6C 00000000 */ nop -/* 0508A0 7F01BD70 440E9000 */ mfc1 $t6, $f18 -/* 0508A4 7F01BD74 3C018000 */ lui $at, 0x8000 -/* 0508A8 7F01BD78 10000007 */ b .L7F01BD98 -/* 0508AC 7F01BD7C 01C17025 */ or $t6, $t6, $at -.L7F01BD80: -/* 0508B0 7F01BD80 10000005 */ b .L7F01BD98 -/* 0508B4 7F01BD84 240EFFFF */ li $t6, -1 -/* 0508B8 7F01BD88 440E9000 */ mfc1 $t6, $f18 -.L7F01BD8C: -/* 0508BC 7F01BD8C 00000000 */ nop -/* 0508C0 7F01BD90 05C0FFFB */ bltz $t6, .L7F01BD80 -/* 0508C4 7F01BD94 00000000 */ nop -.L7F01BD98: -/* 0508C8 7F01BD98 44CDF800 */ ctc1 $t5, $31 -/* 0508CC 7F01BD9C A20E000E */ sb $t6, 0xe($s0) -/* 0508D0 7F01BDA0 A200000F */ sb $zero, 0xf($s0) -/* 0508D4 7F01BDA4 12400081 */ beqz $s2, .L7F01BFAC -/* 0508D8 7F01BDA8 26100010 */ addiu $s0, $s0, 0x10 -/* 0508DC 7F01BDAC 0255082A */ slt $at, $s2, $s5 -/* 0508E0 7F01BDB0 1020007E */ beqz $at, .L7F01BFAC -/* 0508E4 7F01BDB4 00137823 */ negu $t7, $s3 -/* 0508E8 7F01BDB8 A60F0000 */ sh $t7, ($s0) -/* 0508EC 7F01BDBC A6140002 */ sh $s4, 2($s0) -/* 0508F0 7F01BDC0 A6000004 */ sh $zero, 4($s0) -/* 0508F4 7F01BDC4 A6000006 */ sh $zero, 6($s0) -/* 0508F8 7F01BDC8 A6000008 */ sh $zero, 8($s0) -/* 0508FC 7F01BDCC A600000A */ sh $zero, 0xa($s0) -/* 050900 7F01BDD0 A211000C */ sb $s1, 0xc($s0) -/* 050904 7F01BDD4 A211000D */ sb $s1, 0xd($s0) -/* 050908 7F01BDD8 A211000E */ sb $s1, 0xe($s0) -/* 05090C 7F01BDDC 0FC15FA8 */ jal cosf -/* 050910 7F01BDE0 4600A306 */ mov.s $f12, $f20 -/* 050914 7F01BDE4 46180102 */ mul.s $f4, $f0, $f24 -/* 050918 7F01BDE8 24190001 */ li $t9, 1 -/* 05091C 7F01BDEC 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 050920 7F01BDF0 4604B181 */ sub.s $f6, $f22, $f4 -/* 050924 7F01BDF4 4458F800 */ cfc1 $t8, $31 -/* 050928 7F01BDF8 44D9F800 */ ctc1 $t9, $31 -/* 05092C 7F01BDFC 00000000 */ nop -/* 050930 7F01BE00 46003224 */ cvt.w.s $f8, $f6 -/* 050934 7F01BE04 4459F800 */ cfc1 $t9, $31 -/* 050938 7F01BE08 00000000 */ nop -/* 05093C 7F01BE0C 33390078 */ andi $t9, $t9, 0x78 -/* 050940 7F01BE10 53200013 */ beql $t9, $zero, .L7F01BE60 -/* 050944 7F01BE14 44194000 */ mfc1 $t9, $f8 -/* 050948 7F01BE18 44814000 */ mtc1 $at, $f8 -/* 05094C 7F01BE1C 24190001 */ li $t9, 1 -/* 050950 7F01BE20 46083201 */ sub.s $f8, $f6, $f8 -/* 050954 7F01BE24 44D9F800 */ ctc1 $t9, $31 -/* 050958 7F01BE28 00000000 */ nop -/* 05095C 7F01BE2C 46004224 */ cvt.w.s $f8, $f8 -/* 050960 7F01BE30 4459F800 */ cfc1 $t9, $31 -/* 050964 7F01BE34 00000000 */ nop -/* 050968 7F01BE38 33390078 */ andi $t9, $t9, 0x78 -/* 05096C 7F01BE3C 17200005 */ bnez $t9, .L7F01BE54 -/* 050970 7F01BE40 00000000 */ nop -/* 050974 7F01BE44 44194000 */ mfc1 $t9, $f8 -/* 050978 7F01BE48 3C018000 */ lui $at, 0x8000 -/* 05097C 7F01BE4C 10000007 */ b .L7F01BE6C -/* 050980 7F01BE50 0321C825 */ or $t9, $t9, $at -.L7F01BE54: -/* 050984 7F01BE54 10000005 */ b .L7F01BE6C -/* 050988 7F01BE58 2419FFFF */ li $t9, -1 -/* 05098C 7F01BE5C 44194000 */ mfc1 $t9, $f8 -.L7F01BE60: -/* 050990 7F01BE60 00000000 */ nop -/* 050994 7F01BE64 0720FFFB */ bltz $t9, .L7F01BE54 -/* 050998 7F01BE68 00000000 */ nop -.L7F01BE6C: -/* 05099C 7F01BE6C 44D8F800 */ ctc1 $t8, $31 -/* 0509A0 7F01BE70 A219000C */ sb $t9, 0xc($s0) -/* 0509A4 7F01BE74 0FC15FA8 */ jal cosf -/* 0509A8 7F01BE78 4600A306 */ mov.s $f12, $f20 -/* 0509AC 7F01BE7C 46180282 */ mul.s $f10, $f0, $f24 -/* 0509B0 7F01BE80 24090001 */ li $t1, 1 -/* 0509B4 7F01BE84 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 0509B8 7F01BE88 460AB401 */ sub.s $f16, $f22, $f10 -/* 0509BC 7F01BE8C 4448F800 */ cfc1 $t0, $31 -/* 0509C0 7F01BE90 44C9F800 */ ctc1 $t1, $31 -/* 0509C4 7F01BE94 00000000 */ nop -/* 0509C8 7F01BE98 460084A4 */ cvt.w.s $f18, $f16 -/* 0509CC 7F01BE9C 4449F800 */ cfc1 $t1, $31 -/* 0509D0 7F01BEA0 00000000 */ nop -/* 0509D4 7F01BEA4 31290078 */ andi $t1, $t1, 0x78 -/* 0509D8 7F01BEA8 51200013 */ beql $t1, $zero, .L7F01BEF8 -/* 0509DC 7F01BEAC 44099000 */ mfc1 $t1, $f18 -/* 0509E0 7F01BEB0 44819000 */ mtc1 $at, $f18 -/* 0509E4 7F01BEB4 24090001 */ li $t1, 1 -/* 0509E8 7F01BEB8 46128481 */ sub.s $f18, $f16, $f18 -/* 0509EC 7F01BEBC 44C9F800 */ ctc1 $t1, $31 -/* 0509F0 7F01BEC0 00000000 */ nop -/* 0509F4 7F01BEC4 460094A4 */ cvt.w.s $f18, $f18 -/* 0509F8 7F01BEC8 4449F800 */ cfc1 $t1, $31 -/* 0509FC 7F01BECC 00000000 */ nop -/* 050A00 7F01BED0 31290078 */ andi $t1, $t1, 0x78 -/* 050A04 7F01BED4 15200005 */ bnez $t1, .L7F01BEEC -/* 050A08 7F01BED8 00000000 */ nop -/* 050A0C 7F01BEDC 44099000 */ mfc1 $t1, $f18 -/* 050A10 7F01BEE0 3C018000 */ lui $at, 0x8000 -/* 050A14 7F01BEE4 10000007 */ b .L7F01BF04 -/* 050A18 7F01BEE8 01214825 */ or $t1, $t1, $at -.L7F01BEEC: -/* 050A1C 7F01BEEC 10000005 */ b .L7F01BF04 -/* 050A20 7F01BEF0 2409FFFF */ li $t1, -1 -/* 050A24 7F01BEF4 44099000 */ mfc1 $t1, $f18 -.L7F01BEF8: -/* 050A28 7F01BEF8 00000000 */ nop -/* 050A2C 7F01BEFC 0520FFFB */ bltz $t1, .L7F01BEEC -/* 050A30 7F01BF00 00000000 */ nop -.L7F01BF04: -/* 050A34 7F01BF04 44C8F800 */ ctc1 $t0, $31 -/* 050A38 7F01BF08 A209000D */ sb $t1, 0xd($s0) -/* 050A3C 7F01BF0C 0FC15FA8 */ jal cosf -/* 050A40 7F01BF10 4600A306 */ mov.s $f12, $f20 -/* 050A44 7F01BF14 46180102 */ mul.s $f4, $f0, $f24 -/* 050A48 7F01BF18 240B0001 */ li $t3, 1 -/* 050A4C 7F01BF1C 3C014F00 */ li $at, 0x4F000000 # 2147483648.000000 -/* 050A50 7F01BF20 4604B181 */ sub.s $f6, $f22, $f4 -/* 050A54 7F01BF24 444AF800 */ cfc1 $t2, $31 -/* 050A58 7F01BF28 44CBF800 */ ctc1 $t3, $31 -/* 050A5C 7F01BF2C 00000000 */ nop -/* 050A60 7F01BF30 46003224 */ cvt.w.s $f8, $f6 -/* 050A64 7F01BF34 444BF800 */ cfc1 $t3, $31 -/* 050A68 7F01BF38 00000000 */ nop -/* 050A6C 7F01BF3C 316B0078 */ andi $t3, $t3, 0x78 -/* 050A70 7F01BF40 51600013 */ beql $t3, $zero, .L7F01BF90 -/* 050A74 7F01BF44 440B4000 */ mfc1 $t3, $f8 -/* 050A78 7F01BF48 44814000 */ mtc1 $at, $f8 -/* 050A7C 7F01BF4C 240B0001 */ li $t3, 1 -/* 050A80 7F01BF50 46083201 */ sub.s $f8, $f6, $f8 -/* 050A84 7F01BF54 44CBF800 */ ctc1 $t3, $31 -/* 050A88 7F01BF58 00000000 */ nop -/* 050A8C 7F01BF5C 46004224 */ cvt.w.s $f8, $f8 -/* 050A90 7F01BF60 444BF800 */ cfc1 $t3, $31 -/* 050A94 7F01BF64 00000000 */ nop -/* 050A98 7F01BF68 316B0078 */ andi $t3, $t3, 0x78 -/* 050A9C 7F01BF6C 15600005 */ bnez $t3, .L7F01BF84 -/* 050AA0 7F01BF70 00000000 */ nop -/* 050AA4 7F01BF74 440B4000 */ mfc1 $t3, $f8 -/* 050AA8 7F01BF78 3C018000 */ lui $at, 0x8000 -/* 050AAC 7F01BF7C 10000007 */ b .L7F01BF9C -/* 050AB0 7F01BF80 01615825 */ or $t3, $t3, $at -.L7F01BF84: -/* 050AB4 7F01BF84 10000005 */ b .L7F01BF9C -/* 050AB8 7F01BF88 240BFFFF */ li $t3, -1 -/* 050ABC 7F01BF8C 440B4000 */ mfc1 $t3, $f8 -.L7F01BF90: -/* 050AC0 7F01BF90 00000000 */ nop -/* 050AC4 7F01BF94 0560FFFB */ bltz $t3, .L7F01BF84 -/* 050AC8 7F01BF98 00000000 */ nop -.L7F01BF9C: -/* 050ACC 7F01BF9C 44CAF800 */ ctc1 $t2, $31 -/* 050AD0 7F01BFA0 A20B000E */ sb $t3, 0xe($s0) -/* 050AD4 7F01BFA4 A200000F */ sb $zero, 0xf($s0) -/* 050AD8 7F01BFA8 26100010 */ addiu $s0, $s0, 0x10 -.L7F01BFAC: -/* 050ADC 7F01BFAC 26520002 */ addiu $s2, $s2, 2 -/* 050AE0 7F01BFB0 02B2082A */ slt $at, $s5, $s2 -/* 050AE4 7F01BFB4 5020FEE8 */ beql $at, $zero, .L7F01BB58 -/* 050AE8 7F01BFB8 44923000 */ mtc1 $s2, $f6 -.L7F01BFBC: -/* 050AEC 7F01BFBC 8FBF005C */ lw $ra, 0x5c($sp) -/* 050AF0 7F01BFC0 D7B40010 */ ldc1 $f20, 0x10($sp) -/* 050AF4 7F01BFC4 D7B60018 */ ldc1 $f22, 0x18($sp) -/* 050AF8 7F01BFC8 D7B80020 */ ldc1 $f24, 0x20($sp) -/* 050AFC 7F01BFCC D7BA0028 */ ldc1 $f26, 0x28($sp) -/* 050B00 7F01BFD0 D7BC0030 */ ldc1 $f28, 0x30($sp) -/* 050B04 7F01BFD4 D7BE0038 */ ldc1 $f30, 0x38($sp) -/* 050B08 7F01BFD8 8FB00044 */ lw $s0, 0x44($sp) -/* 050B0C 7F01BFDC 8FB10048 */ lw $s1, 0x48($sp) -/* 050B10 7F01BFE0 8FB2004C */ lw $s2, 0x4c($sp) -/* 050B14 7F01BFE4 8FB30050 */ lw $s3, 0x50($sp) -/* 050B18 7F01BFE8 8FB40054 */ lw $s4, 0x54($sp) -/* 050B1C 7F01BFEC 8FB50058 */ lw $s5, 0x58($sp) -/* 050B20 7F01BFF0 03E00008 */ jr $ra -/* 050B24 7F01BFF4 27BD0060 */ addiu $sp, $sp, 0x60 -) -#endif +/* +* Address: 0x7F01BFF8 +*/ +Gfx *sub_GAME_7F01BFF8(Gfx *gdl, Vtx *vertexList, s32 numVertices) +{ + s8 j; + + do + { + j = ((numVertices >= 0x11) ? 0x10 : numVertices); -#ifdef NONMATCHING -void sub_GAME_7F01BFF8(void) { + gSPVertex(gdl++, vertexList, j, 0); + vertexList += 14; + + j -= 3; + + do + { + gSP1Triangle(gdl++, j, j+1, j+2, 0); + } while (--j >= 0); + + numVertices -= 14; + } while (numVertices >= 3); + + gSPEndDisplayList(gdl++); + + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F01BFF8 -/* 050B28 7F01BFF8 240A000A */ li $t2, 10 -/* 050B2C 7F01BFFC 3C09BF00 */ lui $t1, 0xbf00 -/* 050B30 7F01C000 3C080400 */ lui $t0, 0x400 -/* 050B34 7F01C004 28C10011 */ slti $at, $a2, 0x11 -.L7F01C008: -/* 050B38 7F01C008 14200003 */ bnez $at, .L7F01C018 -/* 050B3C 7F01C00C 00801825 */ move $v1, $a0 -/* 050B40 7F01C010 10000004 */ b .L7F01C024 -/* 050B44 7F01C014 24020010 */ li $v0, 16 -.L7F01C018: -/* 050B48 7F01C018 00061600 */ sll $v0, $a2, 0x18 -/* 050B4C 7F01C01C 00027603 */ sra $t6, $v0, 0x18 -/* 050B50 7F01C020 01C01025 */ move $v0, $t6 -.L7F01C024: -/* 050B54 7F01C024 244FFFFF */ addiu $t7, $v0, -1 -/* 050B58 7F01C028 000FC100 */ sll $t8, $t7, 4 -/* 050B5C 7F01C02C 331900FF */ andi $t9, $t8, 0xff -/* 050B60 7F01C030 00026900 */ sll $t5, $v0, 4 -/* 050B64 7F01C034 00195C00 */ sll $t3, $t9, 0x10 -/* 050B68 7F01C038 01686025 */ or $t4, $t3, $t0 -/* 050B6C 7F01C03C 31AEFFFF */ andi $t6, $t5, 0xffff -/* 050B70 7F01C040 2442FFFD */ addiu $v0, $v0, -3 -/* 050B74 7F01C044 018E7825 */ or $t7, $t4, $t6 -/* 050B78 7F01C048 AC650004 */ sw $a1, 4($v1) -/* 050B7C 7F01C04C 0002C600 */ sll $t8, $v0, 0x18 -/* 050B80 7F01C050 AC6F0000 */ sw $t7, ($v1) -/* 050B84 7F01C054 24840008 */ addiu $a0, $a0, 8 -/* 050B88 7F01C058 24A500E0 */ addiu $a1, $a1, 0xe0 -/* 050B8C 7F01C05C 00181603 */ sra $v0, $t8, 0x18 -.L7F01C060: -/* 050B90 7F01C060 004A0019 */ multu $v0, $t2 -/* 050B94 7F01C064 2442FFFF */ addiu $v0, $v0, -1 -/* 050B98 7F01C068 00801825 */ move $v1, $a0 -/* 050B9C 7F01C06C AC690000 */ sw $t1, ($v1) -/* 050BA0 7F01C070 24840008 */ addiu $a0, $a0, 8 -/* 050BA4 7F01C074 00003812 */ mflo $a3 -/* 050BA8 7F01C078 24EC000A */ addiu $t4, $a3, 0xa -/* 050BAC 7F01C07C 318E00FF */ andi $t6, $t4, 0xff -/* 050BB0 7F01C080 30EB00FF */ andi $t3, $a3, 0xff -/* 050BB4 7F01C084 000B6C00 */ sll $t5, $t3, 0x10 -/* 050BB8 7F01C088 000E7A00 */ sll $t7, $t6, 8 -/* 050BBC 7F01C08C 24F90014 */ addiu $t9, $a3, 0x14 -/* 050BC0 7F01C090 332B00FF */ andi $t3, $t9, 0xff -/* 050BC4 7F01C094 01AFC025 */ or $t8, $t5, $t7 -/* 050BC8 7F01C098 00027600 */ sll $t6, $v0, 0x18 -/* 050BCC 7F01C09C 000E1603 */ sra $v0, $t6, 0x18 -/* 050BD0 7F01C0A0 030B6025 */ or $t4, $t8, $t3 -/* 050BD4 7F01C0A4 0441FFEE */ bgez $v0, .L7F01C060 -/* 050BD8 7F01C0A8 AC6C0004 */ sw $t4, 4($v1) -/* 050BDC 7F01C0AC 24C6FFF2 */ addiu $a2, $a2, -0xe -/* 050BE0 7F01C0B0 28C10003 */ slti $at, $a2, 3 -/* 050BE4 7F01C0B4 5020FFD4 */ beql $at, $zero, .L7F01C008 -/* 050BE8 7F01C0B8 28C10011 */ slti $at, $a2, 0x11 -/* 050BEC 7F01C0BC 3C0FB800 */ lui $t7, 0xb800 -/* 050BF0 7F01C0C0 AC8F0000 */ sw $t7, ($a0) -/* 050BF4 7F01C0C4 24820008 */ addiu $v0, $a0, 8 -/* 050BF8 7F01C0C8 03E00008 */ jr $ra -/* 050BFC 7F01C0CC AC800004 */ sw $zero, 4($a0) -) -#endif diff --git a/src/game/unk_01BAE0.h b/src/game/unk_01BAE0.h new file mode 100644 index 0000000..7599897 --- /dev/null +++ b/src/game/unk_01BAE0.h @@ -0,0 +1,11 @@ +#ifndef UNK_01BAE0_H +#define UNK_01BAE0_H + +#include +#include "bondtypes.h" + +Gfx *sub_GAME_7F01BFF8(Gfx *arg0, Vtx *arg1, s32 arg2); +void createGunbarrelRenderHole(struct s_display_list_something *var_s0, s32 arg1); + +#endif + diff --git a/src/game/unk_091080.c b/src/game/unk_091080.c index ebda384..eae22d9 100644 --- a/src/game/unk_091080.c +++ b/src/game/unk_091080.c @@ -2,459 +2,227 @@ #include #include "unk_091080.h" #include "bondview.h" +#include "player_2.h" +#include "gun.h" +#include "math.h" +#include "fr.h" // bss //CODE.bss:80079E20 -s32 dword_CODE_bss_80079E20; +s32 debugCameraStateCounter; // data //D:80037010 -s32 D_80037010 = 0; -//D:80037014 -coord3d stanbondx = {0.0f,0.0f,0.0f}; -//D:80037018 -//s32 stanbondy = 0; -//D:8003701C -//s32 stanbondz = 0; -coord3d D_80037020 = {0.0f,0.0f,-1.0f}; -//D:80037020 -//s32 D_80037020 = 0; -//D:80037024 -//s32 D_80037024 = 0; -//D:80037028 -//f32 D_80037028 = -1.0; +s32 D_80037010 = 0; //unused + +// 0x80037014 +coord3d debugCameraPosition = {0.0f,0.0f,0.0f}; + +coord3d debugCameraForward = {0.0f,0.0f,-1.0f}; //D:8003702C -coord3d D_8003702C = {0.0f,1.0f,0.0f}; -//s32 D_8003702C = 0; -//D:80037030 -//f32 D_80037030 = 1.0; -//D:80037034 -//s32 D_80037034 = 0; +coord3d debugCameraUp = {0.0f,1.0f,0.0f}; //D:80037038 -f32 angle_80037038 = 0.0f; +f32 debugCameraHorizontalAngle = 0.0f; //D:8003703C -f32 D_8003703C = 1.0f; +f32 debugCameraHorizontalCosine = 1.0f; //D:80037040 -f32 D_80037040 = 0.0f; +f32 debugCameraHorizontalSine = 0.0f; //D:80037044 -f32 angle_80037044 = 0.0f; +f32 debugCameraVerticalAngle = 0.0f; //D:80037048 -f32 D_80037048 = 1.0f; +f32 debugCameraVerticalCosine = 1.0f; //D:8003704C -f32 D_8003704C = 0.0f; -//D:80037050 -f32 D_80037050 = 1.0f; +f32 debugCameraVerticalSine = 0.0f; + +/*** + * NTSC address 0x7F091080. +*/ +void debugFreeCamera(s8 joyX, s8 joyY, u16 joyBtns) +{ + f32 speedModifier; + s32 temp_v0; + + static f32 movementSpeed = 1.0f; + static u16 previousButtons = 0; + + speedModifier = 1.0f; + + if (joyX < -3) + { + joyX += 3; + } + else if (joyX > 3) + { + joyX -= 3; + } + else + { + joyX = 0; + } + + if (joyY < -3) + { + joyY += 3; + } + else if (joyY > 3) + { + joyY -= 3; + } + else + { + joyY = 0; + } + + if (!(joyBtns & (R_TRIG|L_TRIG))) + { + if (joyBtns & Z_TRIG) + { + speedModifier /= 5.0f; + } + + temp_v0 = joyBtns & ~previousButtons; + + if (temp_v0 & A_BUTTON) + { + movementSpeed *= 2.0f; + } + + if (temp_v0 & B_BUTTON) + { + movementSpeed *= 0.5f; + } + + debugCameraPosition.f[0] += ((f32) joyY * debugCameraHorizontalSine * speedModifier * movementSpeed); + debugCameraPosition.f[2] += (-(f32) joyY * debugCameraHorizontalCosine * speedModifier * movementSpeed); + + if (joyBtns & (L_CBUTTONS|L_JPAD)) + { + debugCameraPosition.f[0] -= (20.0f * debugCameraHorizontalCosine * speedModifier * movementSpeed); + debugCameraPosition.f[2] -= (20.0f * debugCameraHorizontalSine * speedModifier * movementSpeed); + } + + if (joyBtns & (R_CBUTTONS|R_JPAD)) + { + debugCameraPosition.f[0] += (20.0f * debugCameraHorizontalCosine * speedModifier * movementSpeed); + debugCameraPosition.f[2] += (20.0f * debugCameraHorizontalSine * speedModifier * movementSpeed); + } + + debugCameraHorizontalAngle += (f32) joyX * speedModifier * 0.125f; + + if (joyBtns & U_JPAD) + { + debugCameraVerticalAngle -= 2.0f * speedModifier; + } + + if (joyBtns & D_JPAD) + { + debugCameraVerticalAngle += 2.0f * speedModifier; + } + + if (joyBtns & U_CBUTTONS) + { + debugCameraPosition.f[1] += (20.0f * speedModifier * movementSpeed); + } + + if (joyBtns & D_CBUTTONS) + { + debugCameraPosition.f[1] -= (20.0f * speedModifier * movementSpeed); + } + } + + while (debugCameraHorizontalAngle < 0.0f) + { + debugCameraHorizontalAngle += 360.0f; + } + + while (debugCameraHorizontalAngle >= 360.0f) + { + debugCameraHorizontalAngle -= 360.0f; + } + + while (debugCameraVerticalAngle < 0.0f) + { + debugCameraVerticalAngle += 360.0f; + } + + while (debugCameraVerticalAngle >= 360.0f) + { + debugCameraVerticalAngle -= 360.0f; + } + + debugCameraHorizontalCosine = cosf(debugCameraHorizontalAngle * DegToRad(1)); + debugCameraHorizontalSine = sinf(debugCameraHorizontalAngle * DegToRad(1)); + debugCameraVerticalCosine = cosf(debugCameraVerticalAngle * DegToRad(1)); + debugCameraVerticalSine = sinf(debugCameraVerticalAngle * DegToRad(1)); + + debugCameraForward.f[1] = (f32) debugCameraVerticalSine; + debugCameraForward.f[0] = (f32) (debugCameraVerticalCosine * debugCameraHorizontalSine); + debugCameraForward.f[2] = (f32) (-debugCameraVerticalCosine * debugCameraHorizontalCosine); + + debugCameraUp.f[1] = (f32) debugCameraVerticalCosine; + debugCameraUp.f[0] = (f32) (-debugCameraVerticalSine * debugCameraHorizontalSine); + debugCameraUp.f[2] = (f32) (debugCameraVerticalSine * debugCameraHorizontalCosine); + + previousButtons = joyBtns; + + set_cur_player_fovy(FOV_Y_F); + + debugCameraStateCounter++; + if (debugCameraStateCounter == 1) + { + remove_item_in_hand(GUNRIGHT); + remove_item_in_hand(GUNLEFT); + + return; + } + + if (debugCameraStateCounter == 4) + { + solo_char_load(); + } +} -//D:80037054 -u16 buttons_80037054 = 0; //D:80037058 -f32 D_80037058 = 1.0f; +f32 debugCameraScale = 1.0f; //D:8003705C -f32 D_8003705C = 1.0f; +f32 debugCameraInverseScale = 1.0f; //D:80037060 -coord3d D_80037060 = {0.0f,0.0f,0.0f}; -//D:80037064 -//s32 D_80037064 = 0; -//D:80037068 -//s32 D_80037068 = 0; - - -// rodata - - -#ifdef NONMATCHING -void sub_GAME_7F091080(s8 arg0, s8 arg1, u16 arg2) -{ -} -#else -GLOBAL_ASM( -.late_rodata -glabel D_80055850 -.word 0x3c8efa35 /*0.017453292*/ -glabel D_80055854 -.word 0x3c8efa35 /*0.017453292*/ -glabel D_80055858 -.word 0x3c8efa35 /*0.017453292*/ -glabel D_8005585C -.word 0x3c8efa35 /*0.017453292*/ -.text -glabel sub_GAME_7F091080 -/* 0C5BB0 7F091080 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 0C5BB4 7F091084 AFA40018 */ sw $a0, 0x18($sp) -/* 0C5BB8 7F091088 83AF001B */ lb $t7, 0x1b($sp) -/* 0C5BBC 7F09108C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0C5BC0 7F091090 44810000 */ mtc1 $at, $f0 -/* 0C5BC4 7F091094 00053E00 */ sll $a3, $a1, 0x18 -/* 0C5BC8 7F091098 00077603 */ sra $t6, $a3, 0x18 -/* 0C5BCC 7F09109C 29E1FFFD */ slti $at, $t7, -3 -/* 0C5BD0 7F0910A0 01C03825 */ move $a3, $t6 -/* 0C5BD4 7F0910A4 AFBF0014 */ sw $ra, 0x14($sp) -/* 0C5BD8 7F0910A8 AFA5001C */ sw $a1, 0x1c($sp) -/* 0C5BDC 7F0910AC AFA60020 */ sw $a2, 0x20($sp) -/* 0C5BE0 7F0910B0 10200004 */ beqz $at, .L7F0910C4 -/* 0C5BE4 7F0910B4 46000086 */ mov.s $f2, $f0 -/* 0C5BE8 7F0910B8 25F80003 */ addiu $t8, $t7, 3 -/* 0C5BEC 7F0910BC 10000008 */ b .L7F0910E0 -/* 0C5BF0 7F0910C0 A3B8001B */ sb $t8, 0x1b($sp) -.L7F0910C4: -/* 0C5BF4 7F0910C4 83B9001B */ lb $t9, 0x1b($sp) -/* 0C5BF8 7F0910C8 2B210004 */ slti $at, $t9, 4 -/* 0C5BFC 7F0910CC 14200003 */ bnez $at, .L7F0910DC -/* 0C5C00 7F0910D0 2728FFFD */ addiu $t0, $t9, -3 -/* 0C5C04 7F0910D4 10000002 */ b .L7F0910E0 -/* 0C5C08 7F0910D8 A3A8001B */ sb $t0, 0x1b($sp) -.L7F0910DC: -/* 0C5C0C 7F0910DC A3A0001B */ sb $zero, 0x1b($sp) -.L7F0910E0: -/* 0C5C10 7F0910E0 28E1FFFD */ slti $at, $a3, -3 -/* 0C5C14 7F0910E4 10200005 */ beqz $at, .L7F0910FC -/* 0C5C18 7F0910E8 97A50022 */ lhu $a1, 0x22($sp) -/* 0C5C1C 7F0910EC 24E70003 */ addiu $a3, $a3, 3 -/* 0C5C20 7F0910F0 00074E00 */ sll $t1, $a3, 0x18 -/* 0C5C24 7F0910F4 10000008 */ b .L7F091118 -/* 0C5C28 7F0910F8 00093E03 */ sra $a3, $t1, 0x18 -.L7F0910FC: -/* 0C5C2C 7F0910FC 28E10004 */ slti $at, $a3, 4 -/* 0C5C30 7F091100 14200004 */ bnez $at, .L7F091114 -/* 0C5C34 7F091104 24E7FFFD */ addiu $a3, $a3, -3 -/* 0C5C38 7F091108 00075E00 */ sll $t3, $a3, 0x18 -/* 0C5C3C 7F09110C 10000002 */ b .L7F091118 -/* 0C5C40 7F091110 000B3E03 */ sra $a3, $t3, 0x18 -.L7F091114: -/* 0C5C44 7F091114 00003825 */ move $a3, $zero -.L7F091118: -/* 0C5C48 7F091118 30AD0030 */ andi $t5, $a1, 0x30 -/* 0C5C4C 7F09111C 15A00085 */ bnez $t5, .L7F091334 -/* 0C5C50 7F091120 30AE2000 */ andi $t6, $a1, 0x2000 -/* 0C5C54 7F091124 11C00005 */ beqz $t6, .L7F09113C -/* 0C5C58 7F091128 3C0F8003 */ lui $t7, %hi(buttons_80037054) -/* 0C5C5C 7F09112C 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 0C5C60 7F091130 44812000 */ mtc1 $at, $f4 -/* 0C5C64 7F091134 00000000 */ nop -/* 0C5C68 7F091138 46040083 */ div.s $f2, $f0, $f4 -.L7F09113C: -/* 0C5C6C 7F09113C 95EF7054 */ lhu $t7, %lo(buttons_80037054)($t7) -/* 0C5C70 7F091140 44874000 */ mtc1 $a3, $f8 -/* 0C5C74 7F091144 30AA0101 */ andi $t2, $a1, 0x101 -/* 0C5C78 7F091148 01E0C027 */ not $t8, $t7 -/* 0C5C7C 7F09114C 00B81024 */ and $v0, $a1, $t8 -/* 0C5C80 7F091150 30598000 */ andi $t9, $v0, 0x8000 -/* 0C5C84 7F091154 30484000 */ andi $t0, $v0, 0x4000 -/* 0C5C88 7F091158 13200005 */ beqz $t9, .L7F091170 -/* 0C5C8C 7F09115C 46804020 */ cvt.s.w $f0, $f8 -/* 0C5C90 7F091160 3C018003 */ lui $at, %hi(D_80037050) -/* 0C5C94 7F091164 C42C7050 */ lwc1 $f12, %lo(D_80037050)($at) -/* 0C5C98 7F091168 460C6300 */ add.s $f12, $f12, $f12 -/* 0C5C9C 7F09116C E42C7050 */ swc1 $f12, %lo(D_80037050)($at) -.L7F091170: -/* 0C5CA0 7F091170 3C018003 */ lui $at, %hi(D_80037050) -/* 0C5CA4 7F091174 11000006 */ beqz $t0, .L7F091190 -/* 0C5CA8 7F091178 C42C7050 */ lwc1 $f12, %lo(D_80037050)($at) -/* 0C5CAC 7F09117C 3C013F00 */ li $at, 0x3F000000 # 0.500000 -/* 0C5CB0 7F091180 44813000 */ mtc1 $at, $f6 -/* 0C5CB4 7F091184 00000000 */ nop -/* 0C5CB8 7F091188 46066302 */ mul.s $f12, $f12, $f6 -/* 0C5CBC 7F09118C 00000000 */ nop -.L7F091190: -/* 0C5CC0 7F091190 3C018003 */ lui $at, %hi(D_80037040) -/* 0C5CC4 7F091194 C4307040 */ lwc1 $f16, %lo(D_80037040)($at) -/* 0C5CC8 7F091198 3C048003 */ lui $a0, %hi(stanbondx) -/* 0C5CCC 7F09119C 24847014 */ addiu $a0, %lo(stanbondx) # addiu $a0, $a0, 0x7014 -/* 0C5CD0 7F0911A0 46100102 */ mul.s $f4, $f0, $f16 -/* 0C5CD4 7F0911A4 C48A0000 */ lwc1 $f10, ($a0) -/* 0C5CD8 7F0911A8 3C018003 */ lui $at, %hi(D_8003703C) -/* 0C5CDC 7F0911AC 30A90202 */ andi $t1, $a1, 0x202 -/* 0C5CE0 7F0911B0 3C028003 */ lui $v0, %hi(angle_80037044) -/* 0C5CE4 7F0911B4 24427044 */ addiu $v0, %lo(angle_80037044) # addiu $v0, $v0, 0x7044 -/* 0C5CE8 7F0911B8 30AD0400 */ andi $t5, $a1, 0x400 -/* 0C5CEC 7F0911BC 46022182 */ mul.s $f6, $f4, $f2 -/* 0C5CF0 7F0911C0 30AE0008 */ andi $t6, $a1, 8 -/* 0C5CF4 7F0911C4 30AF0004 */ andi $t7, $a1, 4 -/* 0C5CF8 7F0911C8 460C3202 */ mul.s $f8, $f6, $f12 -/* 0C5CFC 7F0911CC C4860008 */ lwc1 $f6, 8($a0) -/* 0C5D00 7F0911D0 46085100 */ add.s $f4, $f10, $f8 -/* 0C5D04 7F0911D4 46000287 */ neg.s $f10, $f0 -/* 0C5D08 7F0911D8 E4840000 */ swc1 $f4, ($a0) -/* 0C5D0C 7F0911DC C432703C */ lwc1 $f18, %lo(D_8003703C)($at) -/* 0C5D10 7F0911E0 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0C5D14 7F0911E4 46125202 */ mul.s $f8, $f10, $f18 -/* 0C5D18 7F0911E8 00000000 */ nop -/* 0C5D1C 7F0911EC 46024102 */ mul.s $f4, $f8, $f2 -/* 0C5D20 7F0911F0 00000000 */ nop -/* 0C5D24 7F0911F4 460C2282 */ mul.s $f10, $f4, $f12 -/* 0C5D28 7F0911F8 460A3200 */ add.s $f8, $f6, $f10 -/* 0C5D2C 7F0911FC 11200011 */ beqz $t1, .L7F091244 -/* 0C5D30 7F091200 E4880008 */ swc1 $f8, 8($a0) -/* 0C5D34 7F091204 44810000 */ mtc1 $at, $f0 -/* 0C5D38 7F091208 C4840000 */ lwc1 $f4, ($a0) -/* 0C5D3C 7F09120C 46120182 */ mul.s $f6, $f0, $f18 -/* 0C5D40 7F091210 00000000 */ nop -/* 0C5D44 7F091214 46023282 */ mul.s $f10, $f6, $f2 -/* 0C5D48 7F091218 00000000 */ nop -/* 0C5D4C 7F09121C 460C5202 */ mul.s $f8, $f10, $f12 -/* 0C5D50 7F091220 C48A0008 */ lwc1 $f10, 8($a0) -/* 0C5D54 7F091224 46082181 */ sub.s $f6, $f4, $f8 -/* 0C5D58 7F091228 46100102 */ mul.s $f4, $f0, $f16 -/* 0C5D5C 7F09122C E4860000 */ swc1 $f6, ($a0) -/* 0C5D60 7F091230 46022202 */ mul.s $f8, $f4, $f2 -/* 0C5D64 7F091234 00000000 */ nop -/* 0C5D68 7F091238 460C4182 */ mul.s $f6, $f8, $f12 -/* 0C5D6C 7F09123C 46065101 */ sub.s $f4, $f10, $f6 -/* 0C5D70 7F091240 E4840008 */ swc1 $f4, 8($a0) -.L7F091244: -/* 0C5D74 7F091244 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 0C5D78 7F091248 44810000 */ mtc1 $at, $f0 -/* 0C5D7C 7F09124C 51400010 */ beql $t2, $zero, .L7F091290 -/* 0C5D80 7F091250 83AB001B */ lb $t3, 0x1b($sp) -/* 0C5D84 7F091254 46120282 */ mul.s $f10, $f0, $f18 -/* 0C5D88 7F091258 C4880000 */ lwc1 $f8, ($a0) -/* 0C5D8C 7F09125C 46025182 */ mul.s $f6, $f10, $f2 -/* 0C5D90 7F091260 00000000 */ nop -/* 0C5D94 7F091264 460C3102 */ mul.s $f4, $f6, $f12 -/* 0C5D98 7F091268 C4860008 */ lwc1 $f6, 8($a0) -/* 0C5D9C 7F09126C 46044280 */ add.s $f10, $f8, $f4 -/* 0C5DA0 7F091270 46100202 */ mul.s $f8, $f0, $f16 -/* 0C5DA4 7F091274 E48A0000 */ swc1 $f10, ($a0) -/* 0C5DA8 7F091278 46024102 */ mul.s $f4, $f8, $f2 -/* 0C5DAC 7F09127C 00000000 */ nop -/* 0C5DB0 7F091280 460C2282 */ mul.s $f10, $f4, $f12 -/* 0C5DB4 7F091284 460A3200 */ add.s $f8, $f6, $f10 -/* 0C5DB8 7F091288 E4880008 */ swc1 $f8, 8($a0) -/* 0C5DBC 7F09128C 83AB001B */ lb $t3, 0x1b($sp) -.L7F091290: -/* 0C5DC0 7F091290 3C013E00 */ li $at, 0x3E000000 # 0.125000 -/* 0C5DC4 7F091294 44814000 */ mtc1 $at, $f8 -/* 0C5DC8 7F091298 448B2000 */ mtc1 $t3, $f4 -/* 0C5DCC 7F09129C 3C038003 */ lui $v1, %hi(angle_80037038) -/* 0C5DD0 7F0912A0 24637038 */ addiu $v1, %lo(angle_80037038) # addiu $v1, $v1, 0x7038 -/* 0C5DD4 7F0912A4 468021A0 */ cvt.s.w $f6, $f4 -/* 0C5DD8 7F0912A8 30AC0800 */ andi $t4, $a1, 0x800 -/* 0C5DDC 7F0912AC 3C018003 */ lui $at, %hi(D_80037050) -/* 0C5DE0 7F0912B0 46023282 */ mul.s $f10, $f6, $f2 -/* 0C5DE4 7F0912B4 C4660000 */ lwc1 $f6, ($v1) -/* 0C5DE8 7F0912B8 46085102 */ mul.s $f4, $f10, $f8 -/* 0C5DEC 7F0912BC 46043280 */ add.s $f10, $f6, $f4 -/* 0C5DF0 7F0912C0 11800005 */ beqz $t4, .L7F0912D8 -/* 0C5DF4 7F0912C4 E46A0000 */ swc1 $f10, ($v1) -/* 0C5DF8 7F0912C8 46021180 */ add.s $f6, $f2, $f2 -/* 0C5DFC 7F0912CC C4480000 */ lwc1 $f8, ($v0) -/* 0C5E00 7F0912D0 46064101 */ sub.s $f4, $f8, $f6 -/* 0C5E04 7F0912D4 E4440000 */ swc1 $f4, ($v0) -.L7F0912D8: -/* 0C5E08 7F0912D8 3C028003 */ lui $v0, %hi(angle_80037044) -/* 0C5E0C 7F0912DC 11A00005 */ beqz $t5, .L7F0912F4 -/* 0C5E10 7F0912E0 24427044 */ addiu $v0, %lo(angle_80037044) # addiu $v0, $v0, 0x7044 -/* 0C5E14 7F0912E4 46021200 */ add.s $f8, $f2, $f2 -/* 0C5E18 7F0912E8 C44A0000 */ lwc1 $f10, ($v0) -/* 0C5E1C 7F0912EC 46085180 */ add.s $f6, $f10, $f8 -/* 0C5E20 7F0912F0 E4460000 */ swc1 $f6, ($v0) -.L7F0912F4: -/* 0C5E24 7F0912F4 11C00006 */ beqz $t6, .L7F091310 -/* 0C5E28 7F0912F8 00000000 */ nop -/* 0C5E2C 7F0912FC 46020282 */ mul.s $f10, $f0, $f2 -/* 0C5E30 7F091300 C4840004 */ lwc1 $f4, 4($a0) -/* 0C5E34 7F091304 460C5202 */ mul.s $f8, $f10, $f12 -/* 0C5E38 7F091308 46082180 */ add.s $f6, $f4, $f8 -/* 0C5E3C 7F09130C E4860004 */ swc1 $f6, 4($a0) -.L7F091310: -/* 0C5E40 7F091310 11E00008 */ beqz $t7, .L7F091334 -/* 0C5E44 7F091314 E42C7050 */ swc1 $f12, %lo(D_80037050)($at) -/* 0C5E48 7F091318 46020102 */ mul.s $f4, $f0, $f2 -/* 0C5E4C 7F09131C C48A0004 */ lwc1 $f10, 4($a0) -/* 0C5E50 7F091320 3C018003 */ lui $at, %hi(D_80037050) -/* 0C5E54 7F091324 460C2202 */ mul.s $f8, $f4, $f12 -/* 0C5E58 7F091328 46085181 */ sub.s $f6, $f10, $f8 -/* 0C5E5C 7F09132C E4860004 */ swc1 $f6, 4($a0) -/* 0C5E60 7F091330 E42C7050 */ swc1 $f12, %lo(D_80037050)($at) -.L7F091334: -/* 0C5E64 7F091334 3C038003 */ lui $v1, %hi(angle_80037038) -/* 0C5E68 7F091338 24637038 */ addiu $v1, %lo(angle_80037038) # addiu $v1, $v1, 0x7038 -/* 0C5E6C 7F09133C 44806000 */ mtc1 $zero, $f12 -/* 0C5E70 7F091340 C46E0000 */ lwc1 $f14, ($v1) -/* 0C5E74 7F091344 3C028003 */ lui $v0, %hi(angle_80037044) -/* 0C5E78 7F091348 24427044 */ addiu $v0, %lo(angle_80037044) # addiu $v0, $v0, 0x7044 -/* 0C5E7C 7F09134C 460C703C */ c.lt.s $f14, $f12 -/* 0C5E80 7F091350 3C0143B4 */ lui $at, 0x43b4 -/* 0C5E84 7F091354 4502000B */ bc1fl .L7F091384 -/* 0C5E88 7F091358 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -/* 0C5E8C 7F09135C 44811000 */ mtc1 $at, $f2 -/* 0C5E90 7F091360 00000000 */ nop -/* 0C5E94 7F091364 46027100 */ add.s $f4, $f14, $f2 -.L7F091368: -/* 0C5E98 7F091368 E4640000 */ swc1 $f4, ($v1) -/* 0C5E9C 7F09136C C46E0000 */ lwc1 $f14, ($v1) -/* 0C5EA0 7F091370 460C703C */ c.lt.s $f14, $f12 -/* 0C5EA4 7F091374 00000000 */ nop -/* 0C5EA8 7F091378 4503FFFB */ bc1tl .L7F091368 -/* 0C5EAC 7F09137C 46027100 */ add.s $f4, $f14, $f2 -/* 0C5EB0 7F091380 3C0143B4 */ li $at, 0x43B40000 # 360.000000 -.L7F091384: -/* 0C5EB4 7F091384 44811000 */ mtc1 $at, $f2 -/* 0C5EB8 7F091388 3C018005 */ lui $at, %hi(D_80055850) -/* 0C5EBC 7F09138C 460E103E */ c.le.s $f2, $f14 -/* 0C5EC0 7F091390 00000000 */ nop -/* 0C5EC4 7F091394 45020009 */ bc1fl .L7F0913BC -/* 0C5EC8 7F091398 C4400000 */ lwc1 $f0, ($v0) -/* 0C5ECC 7F09139C 46027281 */ sub.s $f10, $f14, $f2 -.L7F0913A0: -/* 0C5ED0 7F0913A0 E46A0000 */ swc1 $f10, ($v1) -/* 0C5ED4 7F0913A4 C46E0000 */ lwc1 $f14, ($v1) -/* 0C5ED8 7F0913A8 460E103E */ c.le.s $f2, $f14 -/* 0C5EDC 7F0913AC 00000000 */ nop -/* 0C5EE0 7F0913B0 4503FFFB */ bc1tl .L7F0913A0 -/* 0C5EE4 7F0913B4 46027281 */ sub.s $f10, $f14, $f2 -/* 0C5EE8 7F0913B8 C4400000 */ lwc1 $f0, ($v0) -.L7F0913BC: -/* 0C5EEC 7F0913BC 460C003C */ c.lt.s $f0, $f12 -/* 0C5EF0 7F0913C0 00000000 */ nop -/* 0C5EF4 7F0913C4 45020009 */ bc1fl .L7F0913EC -/* 0C5EF8 7F0913C8 4600103E */ c.le.s $f2, $f0 -/* 0C5EFC 7F0913CC 46020200 */ add.s $f8, $f0, $f2 -.L7F0913D0: -/* 0C5F00 7F0913D0 E4480000 */ swc1 $f8, ($v0) -/* 0C5F04 7F0913D4 C4400000 */ lwc1 $f0, ($v0) -/* 0C5F08 7F0913D8 460C003C */ c.lt.s $f0, $f12 -/* 0C5F0C 7F0913DC 00000000 */ nop -/* 0C5F10 7F0913E0 4503FFFB */ bc1tl .L7F0913D0 -/* 0C5F14 7F0913E4 46020200 */ add.s $f8, $f0, $f2 -/* 0C5F18 7F0913E8 4600103E */ c.le.s $f2, $f0 -.L7F0913EC: -/* 0C5F1C 7F0913EC 00000000 */ nop -/* 0C5F20 7F0913F0 45000008 */ bc1f .L7F091414 -/* 0C5F24 7F0913F4 00000000 */ nop -/* 0C5F28 7F0913F8 46020181 */ sub.s $f6, $f0, $f2 -.L7F0913FC: -/* 0C5F2C 7F0913FC E4460000 */ swc1 $f6, ($v0) -/* 0C5F30 7F091400 C4400000 */ lwc1 $f0, ($v0) -/* 0C5F34 7F091404 4600103E */ c.le.s $f2, $f0 -/* 0C5F38 7F091408 00000000 */ nop -/* 0C5F3C 7F09140C 4503FFFB */ bc1tl .L7F0913FC -/* 0C5F40 7F091410 46020181 */ sub.s $f6, $f0, $f2 -.L7F091414: -/* 0C5F44 7F091414 C4245850 */ lwc1 $f4, %lo(D_80055850)($at) -/* 0C5F48 7F091418 46047302 */ mul.s $f12, $f14, $f4 -/* 0C5F4C 7F09141C 0FC15FA8 */ jal cosf -/* 0C5F50 7F091420 00000000 */ nop -/* 0C5F54 7F091424 3C018003 */ lui $at, %hi(D_8003703C) -/* 0C5F58 7F091428 E420703C */ swc1 $f0, %lo(D_8003703C)($at) -/* 0C5F5C 7F09142C 3C038003 */ lui $v1, %hi(angle_80037038) -/* 0C5F60 7F091430 24637038 */ addiu $v1, %lo(angle_80037038) # addiu $v1, $v1, 0x7038 -/* 0C5F64 7F091434 3C018005 */ lui $at, %hi(D_80055854) -/* 0C5F68 7F091438 C4285854 */ lwc1 $f8, %lo(D_80055854)($at) -/* 0C5F6C 7F09143C C46A0000 */ lwc1 $f10, ($v1) -/* 0C5F70 7F091440 46085302 */ mul.s $f12, $f10, $f8 -/* 0C5F74 7F091444 0FC15FAB */ jal sinf -/* 0C5F78 7F091448 00000000 */ nop -/* 0C5F7C 7F09144C 3C018003 */ lui $at, %hi(D_80037040) -/* 0C5F80 7F091450 E4207040 */ swc1 $f0, %lo(D_80037040)($at) -/* 0C5F84 7F091454 3C028003 */ lui $v0, %hi(angle_80037044) -/* 0C5F88 7F091458 24427044 */ addiu $v0, %lo(angle_80037044) # addiu $v0, $v0, 0x7044 -/* 0C5F8C 7F09145C 3C018005 */ lui $at, %hi(D_80055858) -/* 0C5F90 7F091460 C4245858 */ lwc1 $f4, %lo(D_80055858)($at) -/* 0C5F94 7F091464 C4460000 */ lwc1 $f6, ($v0) -/* 0C5F98 7F091468 46043302 */ mul.s $f12, $f6, $f4 -/* 0C5F9C 7F09146C 0FC15FA8 */ jal cosf -/* 0C5FA0 7F091470 00000000 */ nop -/* 0C5FA4 7F091474 3C018003 */ lui $at, %hi(D_80037048) -/* 0C5FA8 7F091478 E4207048 */ swc1 $f0, %lo(D_80037048)($at) -/* 0C5FAC 7F09147C 3C028003 */ lui $v0, %hi(angle_80037044) -/* 0C5FB0 7F091480 24427044 */ addiu $v0, %lo(angle_80037044) # addiu $v0, $v0, 0x7044 -/* 0C5FB4 7F091484 3C018005 */ lui $at, %hi(D_8005585C) -/* 0C5FB8 7F091488 C428585C */ lwc1 $f8, %lo(D_8005585C)($at) -/* 0C5FBC 7F09148C C44A0000 */ lwc1 $f10, ($v0) -/* 0C5FC0 7F091490 46085302 */ mul.s $f12, $f10, $f8 -/* 0C5FC4 7F091494 0FC15FAB */ jal sinf -/* 0C5FC8 7F091498 00000000 */ nop -/* 0C5FCC 7F09149C 3C048003 */ lui $a0, %hi(D_8003704C) -/* 0C5FD0 7F0914A0 2484704C */ addiu $a0, %lo(D_8003704C) # addiu $a0, $a0, 0x704c -/* 0C5FD4 7F0914A4 E4800000 */ swc1 $f0, ($a0) -/* 0C5FD8 7F0914A8 C4820000 */ lwc1 $f2, ($a0) -/* 0C5FDC 7F0914AC 3C028003 */ lui $v0, %hi(D_80037020) -/* 0C5FE0 7F0914B0 24427020 */ addiu $v0, %lo(D_80037020) # addiu $v0, $v0, 0x7020 -/* 0C5FE4 7F0914B4 3C018003 */ lui $at, %hi(D_80037048) -/* 0C5FE8 7F0914B8 E4420004 */ swc1 $f2, 4($v0) -/* 0C5FEC 7F0914BC C42E7048 */ lwc1 $f14, %lo(D_80037048)($at) -/* 0C5FF0 7F0914C0 3C018003 */ lui $at, %hi(D_80037040) -/* 0C5FF4 7F0914C4 C4307040 */ lwc1 $f16, %lo(D_80037040)($at) -/* 0C5FF8 7F0914C8 3C018003 */ lui $at, %hi(D_8003703C) -/* 0C5FFC 7F0914CC 46007107 */ neg.s $f4, $f14 -/* 0C6000 7F0914D0 46107182 */ mul.s $f6, $f14, $f16 -/* 0C6004 7F0914D4 46001207 */ neg.s $f8, $f2 -/* 0C6008 7F0914D8 3C038003 */ lui $v1, %hi(D_8003702C) -/* 0C600C 7F0914DC 2463702C */ addiu $v1, %lo(D_8003702C) # addiu $v1, $v1, 0x702c -/* 0C6010 7F0914E0 97B80022 */ lhu $t8, 0x22($sp) -/* 0C6014 7F0914E4 E4460000 */ swc1 $f6, ($v0) -/* 0C6018 7F0914E8 C432703C */ lwc1 $f18, %lo(D_8003703C)($at) -/* 0C601C 7F0914EC 3C018003 */ lui $at, %hi(buttons_80037054) -/* 0C6020 7F0914F0 E46E0004 */ swc1 $f14, 4($v1) -/* 0C6024 7F0914F4 46122282 */ mul.s $f10, $f4, $f18 -/* 0C6028 7F0914F8 00000000 */ nop -/* 0C602C 7F0914FC 46104182 */ mul.s $f6, $f8, $f16 -/* 0C6030 7F091500 00000000 */ nop -/* 0C6034 7F091504 46121102 */ mul.s $f4, $f2, $f18 -/* 0C6038 7F091508 E44A0008 */ swc1 $f10, 8($v0) -/* 0C603C 7F09150C E4660000 */ swc1 $f6, ($v1) -/* 0C6040 7F091510 E4640008 */ swc1 $f4, 8($v1) -/* 0C6044 7F091514 A4387054 */ sh $t8, %lo(buttons_80037054)($at) -/* 0C6048 7F091518 3C014270 */ li $at, 0x42700000 # 60.000000 -/* 0C604C 7F09151C 44816000 */ mtc1 $at, $f12 -/* 0C6050 7F091520 0FC26C85 */ jal set_cur_player_fovy -/* 0C6054 7F091524 00000000 */ nop -/* 0C6058 7F091528 3C028008 */ lui $v0, %hi(dword_CODE_bss_80079E20) -/* 0C605C 7F09152C 24429E20 */ addiu $v0, %lo(dword_CODE_bss_80079E20) # addiu $v0, $v0, -0x61e0 -/* 0C6060 7F091530 8C590000 */ lw $t9, ($v0) -/* 0C6064 7F091534 24010001 */ li $at, 1 -/* 0C6068 7F091538 27230001 */ addiu $v1, $t9, 1 -/* 0C606C 7F09153C 14610007 */ bne $v1, $at, .L7F09155C -/* 0C6070 7F091540 AC430000 */ sw $v1, ($v0) -/* 0C6074 7F091544 0FC173D7 */ jal remove_item_in_hand -/* 0C6078 7F091548 00002025 */ move $a0, $zero -/* 0C607C 7F09154C 0FC173D7 */ jal remove_item_in_hand -/* 0C6080 7F091550 24040001 */ li $a0, 1 -/* 0C6084 7F091554 10000007 */ b .L7F091574 -/* 0C6088 7F091558 8FBF0014 */ lw $ra, 0x14($sp) -.L7F09155C: -/* 0C608C 7F09155C 24010004 */ li $at, 4 -/* 0C6090 7F091560 54610004 */ bnel $v1, $at, .L7F091574 -/* 0C6094 7F091564 8FBF0014 */ lw $ra, 0x14($sp) -/* 0C6098 7F091568 0FC1E73C */ jal solo_char_load -/* 0C609C 7F09156C 00000000 */ nop -/* 0C60A0 7F091570 8FBF0014 */ lw $ra, 0x14($sp) -.L7F091574: -/* 0C60A4 7F091574 27BD0018 */ addiu $sp, $sp, 0x18 -/* 0C60A8 7F091578 03E00008 */ jr $ra -/* 0C60AC 7F09157C 00000000 */ nop -) -#endif - - - +coord3d debugCameraPreviousPosition = {0.0f,0.0f,0.0f}; +/* +* Address: 0x7F091580 +*/ Gfx * sub_GAME_7F091580(Gfx * arg0) { - sub_GAME_7F0876C4(&stanbondx, &D_80037020, &D_8003702C); + sub_GAME_7F0876C4(&debugCameraPosition, &debugCameraForward, &debugCameraUp); return arg0; } -void sub_GAME_7F0915BC(float scale) +/* +* Address: 0x7F0915BC +*/ +void setDebugCameraScale(float scale) { - float fVar1; + float scaleFactor; - fVar1 = D_80037058 / scale; - D_80037058 = scale; - stanbondx.x = stanbondx.x * fVar1; - stanbondx.y = stanbondx.y * fVar1; - stanbondx.z = stanbondx.z * fVar1; - D_8003705C = 1.0f / scale; + scaleFactor = debugCameraScale / scale; + debugCameraScale = scale; + debugCameraPosition.x = debugCameraPosition.x * scaleFactor; + debugCameraPosition.y = debugCameraPosition.y * scaleFactor; + debugCameraPosition.z = debugCameraPosition.z * scaleFactor; + debugCameraInverseScale = 1.0f / scale; } -void handle_debug_intropos(void) +/* +* Address: 0x7f091618 +*/ +void initializeDebugCameraPosition(void) { coord3d* pos; //needed to be declared but not used to match f32 x; @@ -465,29 +233,43 @@ void handle_debug_intropos(void) sinf(x); cosf(x); sinf(x); + /*osSyncPrintf("propBondIntroKey(INTROKEY_RELBONDDIR,%ff,%ff,%ff,0.75f,40.0f) ", cosf(x),sinf(x));*/ } -void debugSetWorldPos(void) +/* +* Address: 0x7f09166c +*/ +void updateDebugCameraWorldPosition(void) { - sqrtf((stanbondx.x - D_80037060.x) * (stanbondx.x - D_80037060.x) + - (stanbondx.y - D_80037060.y) * (stanbondx.y - D_80037060.y) + - (stanbondx.z - D_80037060.z) * (stanbondx.z - D_80037060.z)); - - D_80037060.x = stanbondx.x; - D_80037060.y = stanbondx.y; - D_80037060.z = stanbondx.z; + sqrtf((debugCameraPosition.x - debugCameraPreviousPosition.x) * (debugCameraPosition.x - debugCameraPreviousPosition.x) + + (debugCameraPosition.y - debugCameraPreviousPosition.y) * (debugCameraPosition.y - debugCameraPreviousPosition.y) + + (debugCameraPosition.z - debugCameraPreviousPosition.z) * (debugCameraPosition.z - debugCameraPreviousPosition.z)); + #ifdef DEBUG + osSyncPrintf("world pos = %f,%f,%f\n", debugCameraPosition.x, debugCameraPosition.y, debugCameraPosition.z); + osSyncPrintf("world theta = %f verta = %f\n", (debugCameraPreviousPosition.x * 6.283185) / 360.0, (debugCameraPreviousPosition.z * 6.283185) / 360.0); + osSyncPrintf("dist from prev = %f\n", + sqrtf((debugCameraPosition.x - debugCameraPreviousPosition.x) * (debugCameraPosition.x - debugCameraPreviousPosition.x) + + (debugCameraPosition.y - debugCameraPreviousPosition.y) * (debugCameraPosition.y - debugCameraPreviousPosition.y) + + (debugCameraPosition.z - debugCameraPreviousPosition.z) * (debugCameraPosition.z - debugCameraPreviousPosition.z))); + #endif + debugCameraPreviousPosition.x = debugCameraPosition.x; + debugCameraPreviousPosition.y = debugCameraPosition.y; + debugCameraPreviousPosition.z = debugCameraPosition.z; } -void sub_GAME_7F0916F4(void) +/* +* Address: 0x7F0916F4 +*/ +void resetDebugCameraToPlayerPosition(void) { coord3d *pos; - + pos = bondviewGetCurrentPlayersPosition(); - stanbondx.x = pos->x; - stanbondx.y = pos->y; - stanbondx.z = pos->z; - dword_CODE_bss_80079E20 = 0; + debugCameraPosition.x = pos->x; + debugCameraPosition.y = pos->y; + debugCameraPosition.z = pos->z; + debugCameraStateCounter = 0; } diff --git a/src/game/unk_091080.h b/src/game/unk_091080.h index 85d249d..da6e1e3 100644 --- a/src/game/unk_091080.h +++ b/src/game/unk_091080.h @@ -2,7 +2,7 @@ #define _UNK_091080_H_ #include -void sub_GAME_7F091080(s8 arg0, s8 arg1, u16 arg2); +void debugFreeCamera(s8 joyX, s8 joyY, u16 joyBtns); Gfx * sub_GAME_7F091580(Gfx *arg0); #endif diff --git a/src/game/unk_092890.c b/src/game/unk_092890.c index 92f726b..360c010 100644 --- a/src/game/unk_092890.c +++ b/src/game/unk_092890.c @@ -2,8 +2,41 @@ #ifdef NONMATCHING -void sub_GAME_7F092890(void) { +struct unk_bg_struct { + f32 unk00; + f32 unk04; + f32 unk08; + + f32 unk0c; + f32 unk10; + f32 unk14; + + f32 unk18; + f32 unk1c; + f32 unk20; + + f32 unk24; + + s16 unk28; + s16 unk2a; + s16 unk2c; + s16 unk2e; +}; +struct coord3d64 { + f64 f[3]; +}; + +/** + * Not close to matching, but the logic in the method is very close. + * Seems to be almost all f64 math. + * Very similar to Perfect Dark func0002f490. + * https://decomp.me/scratch/8EjDL 24.30% + * + * Address: 0x7F092890 +*/ +s32 intersectLineTriangle(Vtx *arg0, Vtx *arg1, Vtx *arg2, struct coord3d *arg3, struct coord3d *arg4, struct coord3d *arg5, struct coord3d *arg6, struct unk_bg_struct *arg7) +{ f64 sp150; f64 sp148; f64 sp140; @@ -32,142 +65,155 @@ void sub_GAME_7F092890(void) { f64 sp70; f64 sp68; f64 sp60; - f64 sp58; - f64 sp50; - f64 sp48; - f64 sp40; - f64 sp38; - f64 temp_f10; - f64 temp_f10_2; - f64 temp_f12; - f64 temp_f12_2; - f64 temp_f14; - f64 temp_f16; - f64 temp_f18; - f64 temp_f20; - f64 temp_f22; - f64 temp_f24; - f64 temp_f26; - f64 temp_f28; + //f64 sp50; + //f64 sp48; + //f64 sp40; + //f64 sp38; + //f64 temp_f18; + //f64 temp_f20; + //f64 temp_f22; + //f64 temp_f24; + //f64 temp_f26; + //f64 temp_f28; f64 temp_f2; - f64 temp_f30; - f64 temp_f4; - f64 temp_f4_2; - f64 temp_f6; - f64 temp_f6_2; - f64 temp_f6_3; - f64 temp_f6_4; - f64 temp_f8; - f64 temp_f8_2; - f64 temp_f8_3; - f64 temp_f8_4; - f64 temp_f8_5; - f64 phi_f0; - f64 phi_f2; + f64 var_f0; + f64 var_f2; - sp90 = (f64) arg3->unk0; - temp_f6 = (f64) arg3->unk4; - sp98 = temp_f6; - temp_f8 = (f64) arg3->unk8; - spA0 = temp_f8; - temp_f6_2 = (f64) arg6->unk0; - sp78 = temp_f6_2; - temp_f8_2 = (f64) arg6->unk4; - sp80 = temp_f8_2; - temp_f4 = (f64) arg6->unk8; - sp88 = temp_f4; - sp60 = (f64) arg5->unk0; - sp68 = (f64) arg5->unk4; - sp70 = (f64) arg5->unk8; - temp_f10 = (f64) (arg1->unk0 - arg0->unk0); - sp140 = temp_f10; - sp38 = temp_f6_2; - temp_f6_3 = (f64) (arg2->unk0 - arg1->unk0); - sp128 = temp_f6_3; - sp40 = temp_f8_2; - temp_f8_3 = (f64) (arg1->unk2 - arg0->unk2); - sp148 = temp_f8_3; - temp_f8_4 = (f64) (arg2->unk2 - arg1->unk2); - sp130 = temp_f8_4; - temp_f8_5 = (f64) (arg1->unk4 - arg0->unk4); - sp150 = temp_f8_5; - sp138 = (f64) (arg2->unk4 - arg1->unk4); - sp110 = (f64) (arg2->unk0 - arg0->unk0); - sp118 = (f64) (arg2->unk2 - arg0->unk2); - sp48 = temp_f4; - sp120 = (f64) (arg2->unk4 - arg0->unk4); - temp_f18 = temp_f8_3 * sp138; - temp_f20 = temp_f8_5 * sp130; - temp_f22 = temp_f8_5 * temp_f6_3; - temp_f24 = temp_f10 * sp138; - temp_f12 = temp_f18 - temp_f20; - temp_f26 = temp_f10 * temp_f8_4; - temp_f28 = sp148 * temp_f6_3; - temp_f14 = temp_f22 - temp_f24; - temp_f16 = temp_f26 - temp_f28; - spF8 = temp_f16; - sp100 = temp_f14; - sp108 = temp_f12; - spF0 = ((temp_f8 + (f64) arg0->unk4) * temp_f16) + ((temp_f12 * ((f64) arg0->unk0 + sp90)) + (temp_f14 * ((f64) arg0->unk2 + temp_f6))); - if (((sp48 * temp_f16) + ((temp_f12 * sp38) + (temp_f14 * sp40))) == 0.0) { + sp90 = (f64) arg3->f[0]; + sp98 = (f64) arg3->f[1]; + spA0 = (f64) arg3->f[2]; + + sp78 = (f64) arg6->f[0]; + sp80 = (f64) arg6->f[1]; + sp88 = (f64) arg6->f[2]; + + sp60 = (f64) arg5->f[0]; + sp68 = (f64) arg5->f[1]; + sp70 = (f64) arg5->f[2]; + + sp140 = (f64) (arg1->v.ob[0] - arg0->v.ob[0]); + sp128 = (f64) (arg2->v.ob[0] - arg1->v.ob[0]); + + sp148 = (f64) (arg1->v.ob[1] - arg0->v.ob[1]); + sp130 = (f64) (arg2->v.ob[1] - arg1->v.ob[1]); + + sp150 = (f64) (arg1->v.ob[2] - arg0->v.ob[2]); + sp138 = (f64) (arg2->v.ob[2] - arg1->v.ob[2]); + + sp110 = (f64) (arg2->v.ob[0] - arg0->v.ob[0]); + sp118 = (f64) (arg2->v.ob[1] - arg0->v.ob[1]); + sp120 = (f64) (arg2->v.ob[2] - arg0->v.ob[2]); + + /* + temp_f18 = sp148 * sp138; + temp_f20 = sp150 * sp130; + temp_f22 = sp150 * sp128; + temp_f24 = sp140 * sp138; + temp_f26 = sp140 * sp130; + temp_f28 = sp148 * sp128; + */ + + #define temp_f18 (sp148 * sp138) + #define temp_f20 (sp150 * sp130) + #define temp_f22 (sp150 * sp128) + #define temp_f24 (sp140 * sp138) + #define temp_f26 (sp140 * sp130) + #define temp_f28 (sp148 * sp128) + + sp108 = temp_f18 - temp_f20; + sp100 = temp_f22 - temp_f24; + spF8 = temp_f26 - temp_f28; + + // why would this happen before the next early return when it's only used later? + spF0 = + (spF8 * ((f64) arg0->v.ob[2] + spA0)) + + + (sp100 * ((f64) arg0->v.ob[1] + sp98)) + + + (sp108 * ((f64) arg0->v.ob[0] + sp90)) + ; + + // this is a dot product check that when 0.0, means the line is parallel to the + // plane of the triangle indicating an intersection is not possible + if ((sp108 * sp78) + (sp100 * sp80) + (spF8 * sp88) == 0.0) + { return 0; } - sp48 = sp60; - temp_f30 = temp_f28 - temp_f26; - sp40 = sp68; - sp38 = sp70; - sp50 = ((spF0 - (temp_f12 * sp60)) - (temp_f14 * sp68)) - (sp70 * temp_f16); - sp58 = sp78; - temp_f2 = sp50 / ((sp88 * temp_f16) + ((temp_f12 * sp78) + (temp_f14 * sp80))); - temp_f6_4 = (sp58 * temp_f2) + sp48; - spC8 = temp_f6_4; - temp_f10_2 = (sp80 * temp_f2) + sp40; - spD0 = temp_f10_2; - temp_f4_2 = (sp88 * temp_f2) + sp38; - spD8 = temp_f4_2; - sp58 = temp_f10_2; - spB0 = temp_f6_4 - (sp90 + (f64) arg0->unk0); - spB8 = sp58 - (sp98 + (f64) arg0->unk2); - spC0 = temp_f4_2 - (spA0 + (f64) arg0->unk4); - if (temp_f30 != 0.0) { - phi_f2 = ((spB0 * sp148) - (sp140 * spB8)) / temp_f30; - } else { - temp_f12_2 = temp_f20 - temp_f18; - if (temp_f12_2 != 0.0) { - phi_f2 = ((spB8 * sp150) - (sp148 * spC0)) / temp_f12_2; - } else { - phi_f2 = ((spC0 * sp140) - (sp150 * spB0)) / (temp_f24 - temp_f22); + + //sp50 = ((spF0 - (sp108 * sp60)) - (sp100 * sp68)) - (sp70 * spF8); + temp_f2 = ((spF0 - (sp108 * sp60)) - (sp100 * sp68) - (spF8 * sp70)) + / ((sp108 * sp78) + (sp100 * sp80) + (spF8 * sp88)); + + spC8 = (sp78 * temp_f2) + sp60; + spD0 = (sp80 * temp_f2) + sp68; + spD8 = (sp88 * temp_f2) + sp70; + + spB0 = spC8 - (sp90 + (f64) arg0->v.ob[0]); + spB8 = spD0 - (sp98 + (f64) arg0->v.ob[1]); + spC0 = spD8 - (spA0 + (f64) arg0->v.ob[2]); + + if ((temp_f28 - temp_f26) != 0.0) + { + var_f2 = ((spB0 * sp148) - (sp140 * spB8)) / (temp_f28 - temp_f26); + } + else + { + if ((temp_f20 - temp_f18) != 0.0) + { + var_f2 = ((spB8 * sp150) - (sp148 * spC0)) / (temp_f20 - temp_f18); + } + else + { + var_f2 = ((spC0 * sp140) - (sp150 * spB0)) / (temp_f24 - temp_f22); } } - if (sp140 != 0.0) { - phi_f0 = (spB0 - (phi_f2 * sp110)) / sp140; - } else if (sp148 != 0.0) { - phi_f0 = (spB8 - (phi_f2 * sp118)) / sp148; - } else { - phi_f0 = (spC0 - (phi_f2 * sp120)) / sp150; + + if (sp140 != 0.0) + { + var_f0 = (spB0 - (var_f2 * sp110)) / sp140; } - if ((phi_f0 >= 0.0) && (phi_f2 >= 0.0) && ((phi_f0 + phi_f2) <= 1.0)) { - if ((((spD8 - (f64) arg4->unk8) * sp88) + ((sp78 * (spC8 - (f64) arg4->unk0)) + (sp80 * (spD0 - (f64) arg4->unk4)))) >= 0.0) { - arg7->unk0 = (f32) spC8; - arg7->unk4 = (f32) spD0; - arg7->unk8 = (f32) spD8; - arg7->unkC = (f32) sp108; + else if (sp148 != 0.0) + { + var_f0 = (spB8 - (var_f2 * sp118)) / sp148; + } + else + { + var_f0 = (spC0 - (var_f2 * sp120)) / sp150; + } + + // checks if the impact point is within the triangle? + if ((var_f0 >= 0.0) && (var_f2 >= 0.0) && ((var_f0 + var_f2) <= 1.0)) + { + // what's this doing? + if (( + (sp78 * (spC8 - (f64) arg4->f[0])) + + + (sp80 * (spD0 - (f64) arg4->f[1])) + + + (sp88 * (spD8 - (f64) arg4->f[2])) + ) >= 0.0) + { + arg7->unk00 = (f32) spC8; + arg7->unk04 = (f32) spD0; + arg7->unk08 = (f32) spD8; + arg7->unk0c = (f32) sp108; arg7->unk10 = (f32) sp100; - arg7->unk2A = 0; arg7->unk14 = (f32) spF8; + arg7->unk2a = 0; + return 1; } - /* Duplicate return node #18. Try simplifying control flow for better match */ + return 0; } + return 0; - - } + #else GLOBAL_ASM( .text -glabel sub_GAME_7F092890 +glabel intersectLineTriangle /* 0C73C0 7F092890 27BDFEA8 */ addiu $sp, $sp, -0x158 /* 0C73C4 7F092894 F7BE0030 */ sdc1 $f30, 0x30($sp) /* 0C73C8 7F092898 F7BC0028 */ sdc1 $f28, 0x28($sp) diff --git a/src/game/unk_09B7A0.c b/src/game/unk_09B7A0.c index 31dce50..2997a0e 100644 --- a/src/game/unk_09B7A0.c +++ b/src/game/unk_09B7A0.c @@ -2,6 +2,7 @@ #include #include "bondtypes.h" #include "unk_09B7A0.h" +#include "chrobjhandler.h" // unsure if these structs are defined as something else, elsewhere struct unk_09B7A0_struct_child { @@ -103,10 +104,10 @@ void sub_GAME_7F09B820(void) } tmp = 0x14; - dword_CODE_bss_8007A0E8 = mempAllocBytesInBank(dword_CODE_bss_8007A0D4 * tmp, 4U); - dword_CODE_bss_8007A0E0 = mempAllocBytesInBank(dword_CODE_bss_8007A0D0 * 0x10, 4U); - dword_CODE_bss_8007A0EC = mempAllocBytesInBank(dword_CODE_bss_8007A0DC * tmp, 4U); - dword_CODE_bss_8007A0E4 = mempAllocBytesInBank(dword_CODE_bss_8007A0D8 * 0x10, 4U); + dword_CODE_bss_8007A0E8 = mempAllocBytesInBank(dword_CODE_bss_8007A0D4 * tmp, MEMPOOL_STAGE); + dword_CODE_bss_8007A0E0 = mempAllocBytesInBank(dword_CODE_bss_8007A0D0 * 0x10, MEMPOOL_STAGE); + dword_CODE_bss_8007A0EC = mempAllocBytesInBank(dword_CODE_bss_8007A0DC * tmp, MEMPOOL_STAGE); + dword_CODE_bss_8007A0E4 = mempAllocBytesInBank(dword_CODE_bss_8007A0D8 * 0x10, MEMPOOL_STAGE); word_CODE_bss_8007A0F0 = (s16) dword_CODE_bss_8007A0D0; dword_CODE_bss_8007A0E8->unk00 = (struct unk_09B7A0_struct_child *) dword_CODE_bss_8007A0E0; diff --git a/src/game/unk_0A1DA0.c b/src/game/unk_0A1DA0.c index 5cc671f..549935f 100644 --- a/src/game/unk_0A1DA0.c +++ b/src/game/unk_0A1DA0.c @@ -42,7 +42,7 @@ u8 dword_CODE_bss_8007B098[8]; // data //D:80040940 -s32 D_80040940 = 0; +s32 g_NextShardNum = 0; u32 D_80040944 = 0; u32 D_80040948 = 0; u32 D_8004094C = 0; @@ -347,57 +347,57 @@ void sub_GAME_7F0A2160(coord3d* arg0, f32 arg1, f32 arg2) sp50 = (randomGetNext() * (1.0f / (f32)UINT_MAX) * 1.12f) - .12f; temp_v0 = randomGetNext(); - ptr_shattered_window_pieces[D_80040940].piece = 1; - ptr_shattered_window_pieces[D_80040940].x = arg0->x; - ptr_shattered_window_pieces[D_80040940].y = arg0->y; - ptr_shattered_window_pieces[D_80040940].z = arg0->z; + ptr_shattered_window_pieces[g_NextShardNum].piece = 1; + ptr_shattered_window_pieces[g_NextShardNum].x = arg0->x; + ptr_shattered_window_pieces[g_NextShardNum].y = arg0->y; + ptr_shattered_window_pieces[g_NextShardNum].z = arg0->z; - ptr_shattered_window_pieces[D_80040940].field_0x1c = temp_f24 * SCALAR_1_7F0A2160; - ptr_shattered_window_pieces[D_80040940].field_0x20 = sp50 * SCALAR_2_7F0A2160; - ptr_shattered_window_pieces[D_80040940].field_0x24 = ((2.0f * (temp_v0 * (1.0f / (f32)UINT_MAX))) - 1.0f) * SCALAR_1_7F0A2160; - ptr_shattered_window_pieces[D_80040940].field_0x38 = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * arg2; - ptr_shattered_window_pieces[D_80040940].field_0x3a = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * arg2; - ptr_shattered_window_pieces[D_80040940].field_0x3c = 0; - ptr_shattered_window_pieces[D_80040940].field_0x48 = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * arg2; - ptr_shattered_window_pieces[D_80040940].field_0x4a = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * -arg2; - ptr_shattered_window_pieces[D_80040940].field_0x4c = 0; - ptr_shattered_window_pieces[D_80040940].field_0x58 = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * -arg2; - ptr_shattered_window_pieces[D_80040940].field_0x5a = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * -arg2; + ptr_shattered_window_pieces[g_NextShardNum].field_0x1c = temp_f24 * SCALAR_1_7F0A2160; + ptr_shattered_window_pieces[g_NextShardNum].field_0x20 = sp50 * SCALAR_2_7F0A2160; + ptr_shattered_window_pieces[g_NextShardNum].field_0x24 = ((2.0f * (temp_v0 * (1.0f / (f32)UINT_MAX))) - 1.0f) * SCALAR_1_7F0A2160; + ptr_shattered_window_pieces[g_NextShardNum].field_0x38 = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * arg2; + ptr_shattered_window_pieces[g_NextShardNum].field_0x3a = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * arg2; + ptr_shattered_window_pieces[g_NextShardNum].field_0x3c = 0; + ptr_shattered_window_pieces[g_NextShardNum].field_0x48 = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * arg2; + ptr_shattered_window_pieces[g_NextShardNum].field_0x4a = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * -arg2; + ptr_shattered_window_pieces[g_NextShardNum].field_0x4c = 0; + ptr_shattered_window_pieces[g_NextShardNum].field_0x58 = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * -arg2; + ptr_shattered_window_pieces[g_NextShardNum].field_0x5a = ((randomGetNext() * (1.0f / (f32)UINT_MAX) * 0.5f) + 1.0f) * -arg2; - ptr_shattered_window_pieces[D_80040940].field_0x5c = 0; - ptr_shattered_window_pieces[D_80040940].field_0x40 = 0; - ptr_shattered_window_pieces[D_80040940].field_0x42 = 0; - ptr_shattered_window_pieces[D_80040940].field_0x50 = 0; - ptr_shattered_window_pieces[D_80040940].field_0x52 = 0; - ptr_shattered_window_pieces[D_80040940].field_0x60 = 0; - ptr_shattered_window_pieces[D_80040940].field_0x62 = 0; - ptr_shattered_window_pieces[D_80040940].field_0x44 = 5; - ptr_shattered_window_pieces[D_80040940].field_0x45 = 5; - ptr_shattered_window_pieces[D_80040940].field_0x46 = 0x7E; - ptr_shattered_window_pieces[D_80040940].field_0x54 = 5; - ptr_shattered_window_pieces[D_80040940].field_0x55 = 0xFB; - ptr_shattered_window_pieces[D_80040940].field_0x56 = 0x7E; - ptr_shattered_window_pieces[D_80040940].field_0x64 = 0xFB; - ptr_shattered_window_pieces[D_80040940].field_0x65 = 0xFB; - ptr_shattered_window_pieces[D_80040940].field_0x66 = 0x7E; - ptr_shattered_window_pieces[D_80040940].field_0x67 = 0xFF; + ptr_shattered_window_pieces[g_NextShardNum].field_0x5c = 0; + ptr_shattered_window_pieces[g_NextShardNum].field_0x40 = 0; + ptr_shattered_window_pieces[g_NextShardNum].field_0x42 = 0; + ptr_shattered_window_pieces[g_NextShardNum].field_0x50 = 0; + ptr_shattered_window_pieces[g_NextShardNum].field_0x52 = 0; + ptr_shattered_window_pieces[g_NextShardNum].field_0x60 = 0; + ptr_shattered_window_pieces[g_NextShardNum].field_0x62 = 0; + ptr_shattered_window_pieces[g_NextShardNum].field_0x44 = 5; + ptr_shattered_window_pieces[g_NextShardNum].field_0x45 = 5; + ptr_shattered_window_pieces[g_NextShardNum].field_0x46 = 0x7E; + ptr_shattered_window_pieces[g_NextShardNum].field_0x54 = 5; + ptr_shattered_window_pieces[g_NextShardNum].field_0x55 = 0xFB; + ptr_shattered_window_pieces[g_NextShardNum].field_0x56 = 0x7E; + ptr_shattered_window_pieces[g_NextShardNum].field_0x64 = 0xFB; + ptr_shattered_window_pieces[g_NextShardNum].field_0x65 = 0xFB; + ptr_shattered_window_pieces[g_NextShardNum].field_0x66 = 0x7E; + ptr_shattered_window_pieces[g_NextShardNum].field_0x67 = 0xFF; - field67 = ptr_shattered_window_pieces[D_80040940].field_0x67; - ptr_shattered_window_pieces[D_80040940].field_0x57 = field67; - ptr_shattered_window_pieces[D_80040940].field_0x47 = field67; + field67 = ptr_shattered_window_pieces[g_NextShardNum].field_0x67; + ptr_shattered_window_pieces[g_NextShardNum].field_0x57 = field67; + ptr_shattered_window_pieces[g_NextShardNum].field_0x47 = field67; - ptr_shattered_window_pieces[D_80040940].field_0x10 = arg1; - ptr_shattered_window_pieces[D_80040940].field_0x14 = 0.0f; + ptr_shattered_window_pieces[g_NextShardNum].field_0x10 = arg1; + ptr_shattered_window_pieces[g_NextShardNum].field_0x14 = 0.0f; - ptr_shattered_window_pieces[D_80040940].field_0x18 = (randomGetNext() * (1.0f / (f32)UINT_MAX)) * M_TAU_F; + ptr_shattered_window_pieces[g_NextShardNum].field_0x18 = (randomGetNext() * (1.0f / (f32)UINT_MAX)) * M_TAU_F; - ptr_shattered_window_pieces[D_80040940].field_0x28 = (randomGetNext() * (1.0f / (f32)UINT_MAX)) * SCALAR_3_7F0A2160; - ptr_shattered_window_pieces[D_80040940].field_0x2c = (randomGetNext() * (1.0f / (f32)UINT_MAX)) * SCALAR_3_7F0A2160; - ptr_shattered_window_pieces[D_80040940].field_0x30 = (randomGetNext() * (1.0f / (f32)UINT_MAX)) * SCALAR_3_7F0A2160; + ptr_shattered_window_pieces[g_NextShardNum].field_0x28 = (randomGetNext() * (1.0f / (f32)UINT_MAX)) * SCALAR_3_7F0A2160; + ptr_shattered_window_pieces[g_NextShardNum].field_0x2c = (randomGetNext() * (1.0f / (f32)UINT_MAX)) * SCALAR_3_7F0A2160; + ptr_shattered_window_pieces[g_NextShardNum].field_0x30 = (randomGetNext() * (1.0f / (f32)UINT_MAX)) * SCALAR_3_7F0A2160; - D_80040940++; - if (D_80040940 >= SHATTERED_WINDOW_PIECES_BUFFER_LEN) { - D_80040940 = 0; + g_NextShardNum++; + if (g_NextShardNum >= SHATTERED_WINDOW_PIECES_BUFFER_LEN) { + g_NextShardNum = 0; } } @@ -944,7 +944,7 @@ glabel sub_GAME_7F0A2C44 /* 0D77B4 7F0A2C84 27A400D0 */ addiu $a0, $sp, 0xd0 /* 0D77B8 7F0A2C88 24060002 */ li $a2, 2 /* 0D77BC 7F0A2C8C 24070001 */ li $a3, 1 -/* 0D77C0 7F0A2C90 0FC1DB5A */ jal likely_generate_DL_for_image_declaration +/* 0D77C0 7F0A2C90 0FC1DB5A */ jal texSelect /* 0D77C4 7F0A2C94 24A5000C */ addiu $a1, $a1, 0xc /* 0D77C8 7F0A2C98 8FAF00D0 */ lw $t7, 0xd0($sp) /* 0D77CC 7F0A2C9C 3C19BB00 */ lui $t9, (0xBB001001 >> 16) # lui $t9, 0xbb00 @@ -1123,8 +1123,88 @@ glabel sub_GAME_7F0A2C44 #ifdef NONMATCHING -void sub_GAME_7F0A2F30(void) { +// https://decomp.me/scratch/68YEL 85.92% +void sub_GAME_7F0A2F30(struct damage_display_parent *arg0, s32 arg1, s32 arg2, f32 arg3) +{ + s32 sp80; + f32 sp74; + s32 i; + s32 var_s4; + + f32 temp_f24; // is this real? (probably) + + f32 temp_f4; // is this real? (maybe not) + s16 temp_s1; // is this real? (maybe not) + arg3 *= 8.0f; + sp74 = (f32) arg2; + sp80 = 0; + + for (i=0; i<23; i++) + { + temp_f24 = ((f32) (s32) (142.5 - (f64) sp80) * 3.1415927f * 2.0f) / 360.0f; + + for (var_s4 = 0; var_s4 < 2; var_s4++) + { + temp_s1 = (s16) (s32) (((sinf(temp_f24) * 4.0f * 130.0f * (6 - var_s4)) / 5.0f) * sp74); + temp_f4 = cosf(temp_f24) * 4.0f; + + arg0[i].items[var_s4].unk00 = (temp_s1 + 1); + arg0[i].items[var_s4].unk02 = 0; + arg0[i].items[var_s4].unk04 = (s16) -(s32) (((temp_f4) * 130.0f * (6 - var_s4)) / 5.0f); + arg0[i].items[var_s4].unk06 = 0; + arg0[i].items[var_s4].unk08 = 0; + arg0[i].items[var_s4].unk0A = 0; + arg0[i].items[var_s4].unk0C = 0xFF; + arg0[i].items[var_s4].unk0D = 0xFF; + arg0[i].items[var_s4].unk0E = 0xFF; + + if (arg2 > 0) + { + arg0[i].items[var_s4].unk0C = 96.0f - (cosf(temp_f24) * 96.0f); + arg0[i].items[var_s4].unk0D = 127.0f - (cosf(temp_f24) * 127.0f); + arg0[i].items[var_s4].unk0E = 0xFF; + } + else if (arg2 < 0) + { + arg0[i].items[var_s4].unk0D = 127.0f - (cosf(temp_f24) * 127.0f); + arg0[i].items[var_s4].unk0E = 32.0f - (cosf(temp_f24) * 32.0f); + } + + if (i < 10) + { + if ((((s32) arg3 * 2) - 1) >= i) + { + arg0[i].items[var_s4].unk0F = 0xFF; + } + else if ((i < (s32) (2.0f * arg3)) && ((((s32) arg3 * 2) - 1) < i)) + { + arg0[i].items[var_s4].unk0F = (s8) ((s32) ((arg3 - (f32) (s32) arg3) * 207.0f) + 0x30); + } + else + { + arg0[i].items[var_s4].unk0F = 0x30; + } + } + else if (i >= 10) + { + if ((f32) i <= (9.0f + ((arg3 - 5.0f) * 4.0f))) + { + arg0[i].items[var_s4].unk0F = 0xFF; + } + else if ((((s32) (((arg3 - 5.0f) * 4.0f) + 0.5f) + 9) >= i) && ((((s32) (arg3 - 5.0f) * 2) + 8) < i)) + { + arg0[i].items[var_s4].unk0F = (s8) ((s32) ((arg3 - (f32) (s32) arg3) * 207.0f) + 0x30); + } + else + { + arg0[i].items[var_s4].unk0F = 0x30; + } + } + } + + sp80 += 5; + } } #else @@ -3213,7 +3293,7 @@ glabel sub_GAME_7F0A3F04 /* 0D8A64 7F0A3F34 24840010 */ addiu $a0, $a0, 0x10 /* 0D8A68 7F0A3F38 05E20176 */ bltzl $t7, .L7F0A4514 /* 0D8A6C 7F0A3F3C 8FBF002C */ lw $ra, 0x2c($sp) -/* 0D8A70 7F0A3F40 0FC1E296 */ jal sub_GAME_7F078A58 +/* 0D8A70 7F0A3F40 0FC1E296 */ jal camIsPosInScreen /* 0D8A74 7F0A3F44 8E050024 */ lw $a1, 0x24($s0) /* 0D8A78 7F0A3F48 10400171 */ beqz $v0, .L7F0A4510 /* 0D8A7C 7F0A3F4C 3C198004 */ lui $t9, %hi(D_80040980) @@ -3236,7 +3316,7 @@ glabel sub_GAME_7F0A3F04 /* 0D8AC0 7F0A3F90 AFAB00A0 */ sw $t3, 0xa0($sp) /* 0D8AC4 7F0A3F94 86040006 */ lh $a0, 6($s0) /* 0D8AC8 7F0A3F98 00408825 */ move $s1, $v0 -/* 0D8ACC 7F0A3F9C 0FC2F285 */ jal getRoomIndexPOS +/* 0D8ACC 7F0A3F9C 0FC2F285 */ jal getRoomPositionByIndex /* 0D8AD0 7F0A3FA0 AFA40058 */ sw $a0, 0x58($sp) /* 0D8AD4 7F0A3FA4 920C0028 */ lbu $t4, 0x28($s0) /* 0D8AD8 7F0A3FA8 8FA300A4 */ lw $v1, 0xa4($sp) @@ -3543,7 +3623,7 @@ glabel sub_GAME_7F0A3F04 /* 0D8F8C 7F0A445C 8FA9004C */ lw $t1, 0x4c($sp) /* 0D8F90 7F0A4460 AD220004 */ sw $v0, 4($t1) /* 0D8F94 7F0A4464 8FA50058 */ lw $a1, 0x58($sp) -/* 0D8F98 7F0A4468 0FC2F271 */ jal sub_GAME_7F0BC9C4 +/* 0D8F98 7F0A4468 0FC2F271 */ jal applyRoomMatrixToDisplayList /* 0D8F9C 7F0A446C 8FA400A0 */ lw $a0, 0xa0($sp) /* 0D8FA0 7F0A4470 AFA200A0 */ sw $v0, 0xa0($sp) /* 0D8FA4 7F0A4474 8E0B000C */ lw $t3, 0xc($s0) @@ -3553,7 +3633,7 @@ glabel sub_GAME_7F0A3F04 /* 0D8FB4 7F0A4484 27A400A0 */ addiu $a0, $sp, 0xa0 /* 0D8FB8 7F0A4488 24060004 */ li $a2, 4 /* 0D8FBC 7F0A448C 8FA700C0 */ lw $a3, 0xc0($sp) -/* 0D8FC0 7F0A4490 0FC1DB5A */ jal likely_generate_DL_for_image_declaration +/* 0D8FC0 7F0A4490 0FC1DB5A */ jal texSelect /* 0D8FC4 7F0A4494 016D2821 */ addu $a1, $t3, $t5 /* 0D8FC8 7F0A4498 8FB000A0 */ lw $s0, 0xa0($sp) /* 0D8FCC 7F0A449C 3C0F0430 */ lui $t7, (0x04300040 >> 16) # lui $t7, 0x430 diff --git a/src/game/unk_0A1DA0.h b/src/game/unk_0A1DA0.h index 0675a36..0e97efe 100644 --- a/src/game/unk_0A1DA0.h +++ b/src/game/unk_0A1DA0.h @@ -67,7 +67,7 @@ typedef struct bondstruct_unk_8007A170 { extern s32 SHATTERED_WINDOW_PIECES_BUFFER_LEN; extern s_shattered_window_piece* ptr_shattered_window_pieces; -extern s32 D_80040940; +extern s32 g_NextShardNum; extern u32 D_80040980; extern u32 D_80040984; @@ -91,9 +91,11 @@ void sub_GAME_7F0A33F8(struct WatchVertex *arg0, s32 arg1, f32 arg2, s32 arg3); Gfx *sub_GAME_7F0A3978(Gfx *gdl, void *arg1, s32 unused_arg2, s32 arg3); Gfx *sub_GAME_7F0A3B40(Gfx *gdl, s32 *arg1); Gfx * sub_GAME_7F0A3330(Gfx *arg0, void * arg1, s32 arg2); -void sub_GAME_7F0A2F30(s32 *arg0, s32 arg1, s32 arg2, f32 arg3); +void sub_GAME_7F0A2F30(struct damage_display_parent *arg0, s32 arg1, s32 arg2, f32 arg3); struct WatchVertex *setup_watch_rectangles(struct WatchVertex *vtx, s32 startx, s32 startz, s32 width, s32 height, s32 horizontal_offset, s32 vertical_offset); void sub_GAME_7F0A2160(coord3d * arg0, f32 arg1, f32 arg2); void sub_GAME_7F0A3EA0(void); +void update_bullet_sparks_and_dust_clouds(void); + #endif diff --git a/src/game/unk_0B3200.c b/src/game/unk_0B3200.c index bbc31a9..bb8f8d4 100644 --- a/src/game/unk_0B3200.c +++ b/src/game/unk_0B3200.c @@ -1,192 +1,202 @@ #include #include "bondtypes.h" +#include "limits.h" // rodata -f32 unkGeometry7F0B3200(coord2d *arg0, coord2d *arg1, coord2d *arg2, coord2d *arg3) +/* +* Address: 0x7f0b3200 +*/ +f32 calculateLineIntersectionFactor(coord2d *start1, coord2d *end1, coord2d *start2, coord2d *end2) { - f32 mult1 = arg2->f[1] - arg3->f[1]; - f32 mult2 = arg3->f[0] - arg2->f[0]; - f32 a = (arg2->f[1] - arg0->f[1]) * mult2 + (arg2->f[0] - arg0->f[0]) * mult1; - f32 b = (arg1->f[1] - arg0->f[1]) * mult2 + (arg1->f[0] - arg0->f[0]) * mult1; + f32 deltaX = start2->f[1] - end2->f[1]; + f32 deltaY = end2->f[0] - start2->f[0]; + f32 intersectionFactor = (start2->f[1] - start1->f[1]) * deltaY + (start2->f[0] - start1->f[0]) * deltaX; + f32 totalLineLength = (end1->f[1] - start1->f[1]) * deltaY + (end1->f[0] - start1->f[0]) * deltaX; - if (b == 0.0f) + if (totalLineLength == 0.0f) { return 1.0f; } - a /= b; + intersectionFactor /= totalLineLength; - if (a < 0.0f || a > 1.0f) + if (intersectionFactor < 0.0f || intersectionFactor > 1.0f) { return 1.0f; } - return a; + return intersectionFactor; } -f32 sub_GAME_7F0B32D8(struct coord3d *arg0, coord2d *arg1, coord2d *arg2) +/* +* Address: 0x7F0B32D8 +*/ +f32 calculatePointToLineDistance(struct coord3d *point3D, coord2d *lineStart, coord2d *lineEnd) { - f32 value2; - f32 value1; - f32 sp24; - f32 mult1; - f32 mult2; + f32 projectedDistance; + f32 perpendicularDistance; + f32 distanceSquared; + f32 deltaX; + f32 deltaY; - mult1 = arg2->x - arg0->y; - mult2 = arg2->y - arg0->z; + deltaX = lineEnd->x - point3D->y; + deltaY = lineEnd->y - point3D->z; - value1 = mult2 * arg1->x - mult1 * arg1->y; - value2 = mult1 * arg1->x + mult2 * arg1->y; + perpendicularDistance = deltaY * lineStart->x - deltaX * lineStart->y; + projectedDistance = deltaX * lineStart->x + deltaY * lineStart->y; - sp24 = (arg0->x - value1) * (arg0->x + value1); + distanceSquared = (point3D->x - perpendicularDistance) * (point3D->x + perpendicularDistance); - if (sp24 < 0.0f) + if (distanceSquared < 0.0f) { - return 3.4028235e38f; + return FLT_MAX; } - value2 -= sqrtf(sp24); + projectedDistance -= sqrtf(distanceSquared); - if (value2 < 0.0f) + if (projectedDistance < 0.0f) { - if (value2 * value2 + value1 * value1 <= arg0->x * arg0->x) + if (projectedDistance * projectedDistance + perpendicularDistance * perpendicularDistance <= point3D->x * point3D->x) { return 0.0f; } - return 3.4028235e38f; + return FLT_MAX; } - return value2; + return projectedDistance; } -f32 unkGeometry7F0B33DC(coord3d *arg0, coord2d *arg1, coord2d *arg2,coord2d *arg3) +/* +* Address: 0x7f0b33dc +*/ +f32 calculateNormalizedLineIntersection(coord3d *point3D, coord2d *lineStart, coord2d *lineEnd, coord2d *direction) { - f32 spac; - f32 spa8; - coord2d spa0; - f32 sp9c; - f32 sp98; - f32 sp94; - f32 sp90; - f32 sp8c; - f32 sp88; - f32 sp84; - f32 sp80; - f32 sp7c; - f32 sp78; - f32 sp74; - f32 sp70; - f32 sp6c; - f32 sp68; - f32 sp64; - f32 sp60; - f32 sp5c; - f32 sp58; - f32 sp54; + f32 directionLength ; + f32 tempCrossProduct; + coord2d normalizedDir; + f32 deltaY; + f32 deltaX; + f32 lineLength; + f32 inverseLineLength ; + f32 normalY; + f32 normalX; + f32 proj1; + f32 proj2; + f32 parallelLineStartY; + f32 parallelLineStartX; + f32 parallelLineEndY; + f32 parallelLineEndX; + f32 crossProductPoint; + f32 crossProductStart; + f32 crossProductEnd; + f32 intersectionFactor; + f32 intersectionFactorLineEnd; + f32 startProjection; + f32 endProjection; - spac = sqrtf(arg3->x * arg3->x + arg3->y * arg3->y); + directionLength = sqrtf(direction->x * direction->x + direction->y * direction->y); - if (spac == 0.0f) + if (directionLength == 0.0f) { return 1.0f; } - spa0.x = arg3->x * (1.0f / spac); - spa0.y = arg3->y * (1.0f / spac); + normalizedDir.x = direction->x * (1.0f / directionLength ); + normalizedDir.y = direction->y * (1.0f / directionLength ); - sp98 = arg2->x - arg1->x; - sp9c = arg2->y - arg1->y; + deltaX = lineEnd->x - lineStart->x; + deltaY = lineEnd->y - lineStart->y; - sp94 = sqrtf(sp98 * sp98 + sp9c * sp9c); + lineLength = sqrtf(deltaX * deltaX + deltaY * deltaY); - if (sp94 == 0.0f) + if (lineLength == 0.0f) { goto handlezero; } - sp90 = 1.0f / sp94; - sp88 = sp9c * sp90; - sp8c = -sp98 * sp90; + inverseLineLength = 1.0f / lineLength; + normalX = deltaY * inverseLineLength ; + normalY = -deltaX * inverseLineLength ; - sp84 = arg0->x * sp88; - sp80 = arg0->x * sp8c; + proj1 = point3D->x * normalX; + proj2 = point3D->x * normalY; - if (sp84 * (arg0->y - arg1->x) + sp80 * (arg0->z - arg1->y) < 0.0f) + if (proj1 * (point3D->y - lineStart->x) + proj2 * (point3D->z - lineStart->y) < 0.0f) { - sp84 = -sp84; - sp80 = -sp80; + proj1 = -proj1; + proj2 = -proj2; } - sp78 = arg1->x + sp84; - sp7c = arg1->y + sp80; - sp70 = arg2->x + sp84; - sp74 = arg2->y + sp80; + parallelLineStartX = lineStart->x + proj1; + parallelLineStartY = lineStart->y + proj2; + parallelLineEndX = lineEnd->x + proj1; + parallelLineEndY = lineEnd->y + proj2; - sp68 = (arg3->y * sp78) - (sp7c * arg3->x); - sp6c = (arg0->y * arg3->y) - (arg0->z * arg3->x); - sp64 = (arg3->y * sp70) - (sp74 * arg3->x); + crossProductStart = (direction->y * parallelLineStartX) - (parallelLineStartY * direction->x); + crossProductPoint = (point3D->y * direction->y) - (point3D->z * direction->x); + crossProductEnd = (direction->y * parallelLineEndX) - (parallelLineEndY * direction->x); - if (sp64 < sp68) + if (crossProductEnd < crossProductStart) { coord2d *tmp; - spa8 = sp68; - sp68 = sp64; - sp64 = spa8; + tempCrossProduct = crossProductStart; + crossProductStart = crossProductEnd; + crossProductEnd = tempCrossProduct; - tmp = arg1; - arg1 = arg2; - arg2 = tmp; + tmp = lineStart; + lineStart = lineEnd; + lineEnd = tmp; - sp88 = -sp88; - sp8c = -sp8c; + normalX = -normalX; + normalY = -normalY; } - if (sp64 == sp68) + if (crossProductEnd == crossProductStart) { - sp60 = sub_GAME_7F0B32D8(arg0, &spa0, arg1); - sp5c = sub_GAME_7F0B32D8(arg0, &spa0, arg2); + intersectionFactor = calculatePointToLineDistance(point3D, &normalizedDir, lineStart); + intersectionFactorLineEnd = calculatePointToLineDistance(point3D, &normalizedDir, lineEnd); - if (sp5c < sp60) + if (intersectionFactorLineEnd < intersectionFactor) { - sp60 = sp5c; + intersectionFactor = intersectionFactorLineEnd; } } - else if (sp64 < sp6c) + else if (crossProductEnd < crossProductPoint) { handlezero: - sp60 = sub_GAME_7F0B32D8(arg0, &spa0, arg2); + intersectionFactor = calculatePointToLineDistance(point3D, &normalizedDir, lineEnd); } - else if (sp6c < sp68) + else if (crossProductPoint < crossProductStart) { - sp60 = sub_GAME_7F0B32D8(arg0, &spa0, arg1); + intersectionFactor = calculatePointToLineDistance(point3D, &normalizedDir, lineStart); } else { - sp58 = sp88 * (arg0->y - arg1->x) + sp8c * (arg0->z - arg1->y); - sp54 = sp88 * (arg0->y + arg3->x - arg1->x) + sp8c * (arg0->z + arg3->y - arg1->y); + startProjection = normalX * (point3D->y - lineStart->x) + normalY * (point3D->z - lineStart->y); + endProjection = normalX * (point3D->y + direction->x - lineStart->x) + normalY * (point3D->z + direction->y - lineStart->y); - if (sp58 == sp54) + if (startProjection == endProjection) { return 1.0f; } - sp60 = (sp58 - arg0->x) * spac / (sp58 - sp54); + intersectionFactor = (startProjection - point3D->x) * directionLength / (startProjection - endProjection); } - if (spac < sp60) + if (directionLength < intersectionFactor) { return 1.0f; } - if (sp60 < 0.0f) + if (intersectionFactor < 0.0f) { return 0.0f; } - return (f32) sp60 * (1.0f / spac); + return (f32) intersectionFactor * (1.0f / directionLength ); } diff --git a/src/game/unk_0B3200.h b/src/game/unk_0B3200.h index 84924bd..40e33c5 100644 --- a/src/game/unk_0B3200.h +++ b/src/game/unk_0B3200.h @@ -3,8 +3,8 @@ #include #include "bondtypes.h" -f32 unkGeometry7F0B3200(coord2d *arg0, coord2d *arg1, coord2d *arg2, coord2d *arg3); -f32 sub_GAME_7F0B32D8(struct coord3d *arg0, coord2d *arg1, coord2d *arg2); -f32 unkGeometry7F0B33DC(coord3d *arg0, coord2d *arg1, coord2d *arg2,coord2d *arg3); +f32 calculateLineIntersectionFactor(coord2d *start1, coord2d *end1, coord2d *start2, coord2d *end2); +f32 calculatePointToLineDistance(struct coord3d *point3D, coord2d *lineStart, coord2d *lineEnd); +f32 calculateNormalizedLineIntersection(coord3d *point3D, coord2d *lineStart, coord2d *lineEnd, coord2d *direction); #endif diff --git a/src/game/unk_0BC530.c b/src/game/unk_0BC530.c index 62d3242..f71ee28 100644 --- a/src/game/unk_0BC530.c +++ b/src/game/unk_0BC530.c @@ -1,87 +1,136 @@ +/** +file bgroomtrans.c +*/ + #include #include "player.h" #include "bg.h" #include "unk_0BC530.h" +#include "matrixmath.h" #ifdef VERSION_EU #define AMT300 100 #else -#define AMT300 300 +#define AMT300 300 #endif // bss /** * EU .bss 8007DC90 */ -u8 dword_CODE_bss_80083320[AMT300]; +u8 roomStatusFlags[AMT300]; -s32 dword_CODE_bss_80083450[AMT300]; -s32 dword_CODE_bss_80083900[AMT300]; -Mtx mtx_array_bss_80083DB0[AMT300]; +s32 roomIndices[AMT300]; //mtxbufferroom +s32 roomOwners[AMT300]; +Mtx roomMatrices[AMT300]; -void sub_GAME_7F0BC530(void) +/** + * Initialize room and player-related data structures. + * Sets all rooms and players to an initial state. + * + * Address: 0x7F0BC530 + */ +void initializeRoomData(void) { int i; - + for (i=0; ifield_108C = -1; + g_playerPointers[i]->curRoomIndex = -1; } for (i=0; ifield_108C = param_1; +/** + * Set the player's room field. + * + * Address: 0x7F0BC624 + */ +void setPlayerRoomField(s32 roomIndex) { + g_CurrentPlayer->curRoomIndex = roomIndex; } -void sub_GAME_7F0BC634(int param_1,int param_2) +/** + * Assigns a room index to a specific room ID. + * + * Address: 0x7F0BC634 + */ +void assignRoomIndexToRoomID(int mtx,int room) { - array_room_info[param_2].field_36 = param_1; - dword_CODE_bss_80083450[param_1] = param_2; +#ifdef DEBUG + //check we are clear first before assignment + assert(g_BgRoomInfo[room].mtxid == -1); + assert(mtxbufferroom[mtx] == -1); +#endif + + g_BgRoomInfo[room].field_36 = mtx; + roomIndices[mtx] = room; } -void sub_GAME_7F0BC660(int param_1,int param_2) +/** + * Removes the room index assignment for a specific room ID. + * + * Address: 0x7F0BC660 + */ +void removeRoomIndexFromRoomID(int mtx,int room) { - array_room_info[param_2].field_36 = -1; - dword_CODE_bss_80083450[param_1] = -1; +#ifdef DEBUG + // check the requested mtx is assigned before removing + assert(g_BgRoomInfo[room].mtxid == mtx); + assert(mtxbufferroom[mtx] == room); +#endif + + g_BgRoomInfo[room].field_36 = -1; + roomIndices[mtx] = -1; } -void sub_GAME_7F0BC690(int index) +/** + * Resets a room's state to its initial condition. + * + * Address: 0x7F0BC690 + */ +void resetRoomState(int roomIndex) { - if (dword_CODE_bss_80083450[index] != -1) { - sub_GAME_7F0BC660(index,dword_CODE_bss_80083450[index]); + if (roomIndices[roomIndex] != -1) { + removeRoomIndexFromRoomID(roomIndex,roomIndices[roomIndex]); } - dword_CODE_bss_80083320[index] = 2; - dword_CODE_bss_80083900[index] = -1; + roomStatusFlags[roomIndex] = 2; + roomOwners[roomIndex] = -1; } -s32 sub_GAME_7F0BC6F0(void) +/** + * Finds and returns the first available room index. + * Returns 0 if no available room is found. + * + * Address: 0x7F0BC6F0 + */ +s32 findAvailableRoomIndex(void) { s32 i; for (i = 0; i= 2) && (dword_CODE_bss_80083900[i] == -1)) + if (((s32) roomStatusFlags[i] >= 2) && (roomOwners[i] == -1)) { return i; } @@ -90,384 +139,125 @@ s32 sub_GAME_7F0BC6F0(void) } - -#ifdef NONMATCHING -void sub_GAME_7F0BC7D4(void) +/** + * Updates the status flags for rooms, resetting those that are inactive. + * + * NTSC address 0x7F0BC7D4. + */ +void updateRoomStatusFlags(void) { s32 i; for(i = 0; i -1) + if (roomOwners[i] > -1) { - //needed to get close, still wrong temp usage, starts with t8 instead of t7 - dword_CODE_bss_80083320[i] = dword_CODE_bss_80083320[i]; - if ((dword_CODE_bss_80083320[i]+1 & 0xFF) > 1) + roomStatusFlags[i]++; + + if (roomStatusFlags[i] >= 2) { - sub_GAME_7F0BC690(i); + resetRoomState(i); } - - } + } } } -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0BC7D4 -/* 0F1304 7F0BC7D4 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0F1308 7F0BC7D8 AFB2001C */ sw $s2, 0x1c($sp) -/* 0F130C 7F0BC7DC AFB10018 */ sw $s1, 0x18($sp) -/* 0F1310 7F0BC7E0 AFB30020 */ sw $s3, 0x20($sp) -/* 0F1314 7F0BC7E4 AFB00014 */ sw $s0, 0x14($sp) -/* 0F1318 7F0BC7E8 3C118008 */ lui $s1, %hi(dword_CODE_bss_80083900) -/* 0F131C 7F0BC7EC 3C128008 */ lui $s2, %hi(dword_CODE_bss_80083320) -/* 0F1320 7F0BC7F0 AFBF0024 */ sw $ra, 0x24($sp) -/* 0F1324 7F0BC7F4 26523320 */ addiu $s2, %lo(dword_CODE_bss_80083320) # addiu $s2, $s2, 0x3320 -/* 0F1328 7F0BC7F8 26313900 */ addiu $s1, %lo(dword_CODE_bss_80083900) # addiu $s1, $s1, 0x3900 -/* 0F132C 7F0BC7FC 00008025 */ move $s0, $zero -/* 0F1330 7F0BC800 2413012C */ li $s3, 300 -.L7F0BC804: -/* 0F1334 7F0BC804 8E2E0000 */ lw $t6, ($s1) -/* 0F1338 7F0BC808 02501021 */ addu $v0, $s2, $s0 -/* 0F133C 7F0BC80C 05C2000A */ bltzl $t6, .L7F0BC838 -/* 0F1340 7F0BC810 26100001 */ addiu $s0, $s0, 1 -/* 0F1344 7F0BC814 904F0000 */ lbu $t7, ($v0) -/* 0F1348 7F0BC818 25F80001 */ addiu $t8, $t7, 1 -/* 0F134C 7F0BC81C 331900FF */ andi $t9, $t8, 0xff -/* 0F1350 7F0BC820 2B210002 */ slti $at, $t9, 2 -/* 0F1354 7F0BC824 14200003 */ bnez $at, .L7F0BC834 -/* 0F1358 7F0BC828 A0580000 */ sb $t8, ($v0) -/* 0F135C 7F0BC82C 0FC2F1A4 */ jal sub_GAME_7F0BC690 -/* 0F1360 7F0BC830 02002025 */ move $a0, $s0 -.L7F0BC834: -/* 0F1364 7F0BC834 26100001 */ addiu $s0, $s0, 1 -.L7F0BC838: -/* 0F1368 7F0BC838 1613FFF2 */ bne $s0, $s3, .L7F0BC804 -/* 0F136C 7F0BC83C 26310004 */ addiu $s1, $s1, 4 -/* 0F1370 7F0BC840 8FBF0024 */ lw $ra, 0x24($sp) -/* 0F1374 7F0BC844 8FB00014 */ lw $s0, 0x14($sp) -/* 0F1378 7F0BC848 8FB10018 */ lw $s1, 0x18($sp) -/* 0F137C 7F0BC84C 8FB2001C */ lw $s2, 0x1c($sp) -/* 0F1380 7F0BC850 8FB30020 */ lw $s3, 0x20($sp) -/* 0F1384 7F0BC854 03E00008 */ jr $ra -/* 0F1388 7F0BC858 27BD0028 */ addiu $sp, $sp, 0x28 -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0BC7D4 -/* 0EE5C4 7F0BBBD4 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 0EE5C8 7F0BBBD8 AFB2001C */ sw $s2, 0x1c($sp) -/* 0EE5CC 7F0BBBDC AFB10018 */ sw $s1, 0x18($sp) -/* 0EE5D0 7F0BBBE0 AFB30020 */ sw $s3, 0x20($sp) -/* 0EE5D4 7F0BBBE4 AFB00014 */ sw $s0, 0x14($sp) -/* 0EE5D8 7F0BBBE8 3C118007 */ lui $s1, %hi(dword_CODE_bss_80083900) # $s1, 0x8007 -/* 0EE5DC 7F0BBBEC 3C128007 */ lui $s2, %hi(dword_CODE_bss_80083320) # $s2, 0x8007 -/* 0EE5E0 7F0BBBF0 AFBF0024 */ sw $ra, 0x24($sp) -/* 0EE5E4 7F0BBBF4 2652DC90 */ addiu $s2, %lo(dword_CODE_bss_80083320) # addiu $s2, $s2, -0x2370 -/* 0EE5E8 7F0BBBF8 2631DE88 */ addiu $s1, %lo(dword_CODE_bss_80083900) # addiu $s1, $s1, -0x2178 -/* 0EE5EC 7F0BBBFC 00008025 */ move $s0, $zero -/* 0EE5F0 7F0BBC00 24130064 */ li $s3, 100 -.L7F0BBC04: -/* 0EE5F4 7F0BBC04 8E2E0000 */ lw $t6, ($s1) -/* 0EE5F8 7F0BBC08 02501021 */ addu $v0, $s2, $s0 -/* 0EE5FC 7F0BBC0C 05C2000A */ bltzl $t6, .L7F0BBC38 -/* 0EE600 7F0BBC10 26100001 */ addiu $s0, $s0, 1 -/* 0EE604 7F0BBC14 904F0000 */ lbu $t7, ($v0) -/* 0EE608 7F0BBC18 25F80001 */ addiu $t8, $t7, 1 -/* 0EE60C 7F0BBC1C 331900FF */ andi $t9, $t8, 0xff -/* 0EE610 7F0BBC20 2B210002 */ slti $at, $t9, 2 -/* 0EE614 7F0BBC24 14200003 */ bnez $at, .L7F0BBC34 -/* 0EE618 7F0BBC28 A0580000 */ sb $t8, ($v0) -/* 0EE61C 7F0BBC2C 0FC2EEA4 */ jal sub_GAME_7F0BC690 -/* 0EE620 7F0BBC30 02002025 */ move $a0, $s0 -.L7F0BBC34: -/* 0EE624 7F0BBC34 26100001 */ addiu $s0, $s0, 1 -.L7F0BBC38: -/* 0EE628 7F0BBC38 1613FFF2 */ bne $s0, $s3, .L7F0BBC04 -/* 0EE62C 7F0BBC3C 26310004 */ addiu $s1, $s1, 4 -/* 0EE630 7F0BBC40 8FBF0024 */ lw $ra, 0x24($sp) -/* 0EE634 7F0BBC44 8FB00014 */ lw $s0, 0x14($sp) -/* 0EE638 7F0BBC48 8FB10018 */ lw $s1, 0x18($sp) -/* 0EE63C 7F0BBC4C 8FB2001C */ lw $s2, 0x1c($sp) -/* 0EE640 7F0BBC50 8FB30020 */ lw $s3, 0x20($sp) -/* 0EE644 7F0BBC54 03E00008 */ jr $ra -/* 0EE648 7F0BBC58 27BD0028 */ addiu $sp, $sp, 0x28 -) -#endif -#endif - -#ifdef NONMATCHING -s32 sub_GAME_7F0BC85C(s32 index) - +/** + * Manages room index allocation and matrix setup for a given room. + * + * NTSC address 0x7F0BC85C. + */ +s32 setupRoomTransformationMatrix(s32 room) { - s32 iVar2; - bg_room_data *room; - float mtx [4] [4]; - - iVar2 = array_room_info[index].field_36; - if ((iVar2 == -1) || (g_CurrentPlayer->field_108C != dword_CODE_bss_80083900[iVar2])) { - if (iVar2 != -1) { - sub_GAME_7F0BC660(iVar2,index); + s32 mtx; + Mtxf roomTransformMatrix; + + mtx = g_BgRoomInfo[room].field_36;//mtxid + + if ((mtx == -1) || (g_CurrentPlayer->curRoomIndex != roomOwners[mtx])) + { + if (mtx != -1) + { + removeRoomIndexFromRoomID(mtx, room); + } + + mtx = findAvailableRoomIndex(); + assignRoomIndexToRoomID(mtx, room); + + roomStatusFlags[mtx] = 0; +#ifdef DEBUG + assert(g_BgRoomInfo[room].mtxid == mtx); + assert(mtxbufferroom[mtx] == room); +#endif } - iVar2 = sub_GAME_7F0BC6F0(); - sub_GAME_7F0BC634(iVar2,index); - dword_CODE_bss_80083320[iVar2] = 0; - dword_CODE_bss_80083900[iVar2] = g_CurrentPlayer->field_108C; - matrix_4x4_set_identity(mtx); - mtx[0][0] = room_data_float2; - mtx[1][1] = room_data_float2; - mtx[2][2] = room_data_float2; - room = &ptr_bgdata_room_fileposition_list[index]; - mtx[3][0] = (room->pos).x * room_data_float2 - g_CurrentPlayer->current_model_pos.f[0]; - mtx[3][1] = (room->pos).y * room_data_float2 - g_CurrentPlayer->current_model_pos.f[1]; - mtx[3][2] = (room->pos).z * room_data_float2 - g_CurrentPlayer->current_model_pos.f[2]; - matrix_4x4_f32_to_s32(mtx,mtx_array_bss_80083DB0[iVar2]); - } - else { - dword_CODE_bss_80083320[iVar2] = 0; - } - return iVar2; + else + { + roomStatusFlags[mtx] = 0; + #ifdef DEBUG + assert(g_BgRoomInfo[room].mtxid == mtx); + assert(mtxbufferroom[mtx] == room); + #endif + return mtx; + } + + roomOwners[mtx] = g_CurrentPlayer->curRoomIndex; + + matrix_4x4_set_identity(&roomTransformMatrix); + + // set room size according to level scaling + roomTransformMatrix.m[0][0] = room_data_float2; + roomTransformMatrix.m[1][1] = room_data_float2; + roomTransformMatrix.m[2][2] = room_data_float2; + + // room translation to position it relative to the player + roomTransformMatrix.m[3][0] = (ptr_bgdata_room_fileposition_list[room].pos.f[0] * room_data_float2) - g_CurrentPlayer->current_model_pos.f[0]; + roomTransformMatrix.m[3][1] = (ptr_bgdata_room_fileposition_list[room].pos.f[1] * room_data_float2) - g_CurrentPlayer->current_model_pos.f[1]; + roomTransformMatrix.m[3][2] = (ptr_bgdata_room_fileposition_list[room].pos.f[2] * room_data_float2) - g_CurrentPlayer->current_model_pos.f[2]; + + matrix_4x4_f32_to_s32(&roomTransformMatrix, &roomMatrices[mtx]); + + return mtx; } -#else - -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0BC85C -/* 0F138C 7F0BC85C 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 0F1390 7F0BC860 00047880 */ sll $t7, $a0, 2 -/* 0F1394 7F0BC864 AFB00018 */ sw $s0, 0x18($sp) -/* 0F1398 7F0BC868 01E47821 */ addu $t7, $t7, $a0 -/* 0F139C 7F0BC86C 000F7900 */ sll $t7, $t7, 4 -/* 0F13A0 7F0BC870 3C108004 */ lui $s0, %hi(array_room_info + 0x10 +38) -/* 0F13A4 7F0BC874 020F8021 */ addu $s0, $s0, $t7 -/* 0F13A8 7F0BC878 8610144A */ lh $s0, %lo(array_room_info + 0x10 +38)($s0) -/* 0F13AC 7F0BC87C 2402FFFF */ li $v0, -1 -/* 0F13B0 7F0BC880 AFBF001C */ sw $ra, 0x1c($sp) -/* 0F13B4 7F0BC884 1202000C */ beq $s0, $v0, .L7F0BC8B8 -/* 0F13B8 7F0BC888 AFA40070 */ sw $a0, 0x70($sp) -/* 0F13BC 7F0BC88C 3C188008 */ lui $t8, %hi(g_CurrentPlayer) -/* 0F13C0 7F0BC890 8F18A0B0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0F13C4 7F0BC894 00104080 */ sll $t0, $s0, 2 -/* 0F13C8 7F0BC898 3C098008 */ lui $t1, %hi(dword_CODE_bss_80083900) -/* 0F13CC 7F0BC89C 01284821 */ addu $t1, $t1, $t0 -/* 0F13D0 7F0BC8A0 8D293900 */ lw $t1, %lo(dword_CODE_bss_80083900)($t1) -/* 0F13D4 7F0BC8A4 8F19108C */ lw $t9, 0x108c($t8) -/* 0F13D8 7F0BC8A8 3C018008 */ lui $at, %hi(dword_CODE_bss_80083320) -/* 0F13DC 7F0BC8AC 00300821 */ addu $at, $at, $s0 -/* 0F13E0 7F0BC8B0 1329000F */ beq $t9, $t1, .L7F0BC8F0 -/* 0F13E4 7F0BC8B4 00000000 */ nop -.L7F0BC8B8: -/* 0F13E8 7F0BC8B8 12020003 */ beq $s0, $v0, .L7F0BC8C8 -/* 0F13EC 7F0BC8BC 02002025 */ move $a0, $s0 -/* 0F13F0 7F0BC8C0 0FC2F198 */ jal sub_GAME_7F0BC660 -/* 0F13F4 7F0BC8C4 8FA50070 */ lw $a1, 0x70($sp) -.L7F0BC8C8: -/* 0F13F8 7F0BC8C8 0FC2F1BC */ jal sub_GAME_7F0BC6F0 -/* 0F13FC 7F0BC8CC 00000000 */ nop -/* 0F1400 7F0BC8D0 00408025 */ move $s0, $v0 -/* 0F1404 7F0BC8D4 00402025 */ move $a0, $v0 -/* 0F1408 7F0BC8D8 0FC2F18D */ jal sub_GAME_7F0BC634 -/* 0F140C 7F0BC8DC 8FA50070 */ lw $a1, 0x70($sp) -/* 0F1410 7F0BC8E0 3C018008 */ lui $at, %hi(dword_CODE_bss_80083320) -/* 0F1414 7F0BC8E4 00300821 */ addu $at, $at, $s0 -/* 0F1418 7F0BC8E8 10000004 */ b .L7F0BC8FC -/* 0F141C 7F0BC8EC A0203320 */ sb $zero, %lo(dword_CODE_bss_80083320)($at) -.L7F0BC8F0: -/* 0F1420 7F0BC8F0 A0203320 */ sb $zero, %lo(dword_CODE_bss_80083320)($at) -/* 0F1424 7F0BC8F4 1000002E */ b .L7F0BC9B0 -/* 0F1428 7F0BC8F8 02001025 */ move $v0, $s0 -.L7F0BC8FC: -/* 0F142C 7F0BC8FC 3C0A8008 */ lui $t2, %hi(g_CurrentPlayer) -/* 0F1430 7F0BC900 8D4AA0B0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0F1434 7F0BC904 00106080 */ sll $t4, $s0, 2 -/* 0F1438 7F0BC908 3C018008 */ lui $at, %hi(dword_CODE_bss_80083900) -/* 0F143C 7F0BC90C 8D4B108C */ lw $t3, 0x108c($t2) -/* 0F1440 7F0BC910 002C0821 */ addu $at, $at, $t4 -/* 0F1444 7F0BC914 27A4002C */ addiu $a0, $sp, 0x2c -/* 0F1448 7F0BC918 0FC15FF4 */ jal matrix_4x4_set_identity -/* 0F144C 7F0BC91C AC2B3900 */ sw $t3, %lo(dword_CODE_bss_80083900)($at) -/* 0F1450 7F0BC920 8FAE0070 */ lw $t6, 0x70($sp) -/* 0F1454 7F0BC924 3C018004 */ lui $at, %hi(room_data_float2) -/* 0F1458 7F0BC928 C42013F8 */ lwc1 $f0, %lo(room_data_float2)($at) -/* 0F145C 7F0BC92C 3C0D8008 */ lui $t5, %hi(ptr_bgdata_room_fileposition_list) -/* 0F1460 7F0BC930 8DADFF8C */ lw $t5, %lo(ptr_bgdata_room_fileposition_list)($t5) -/* 0F1464 7F0BC934 000E7880 */ sll $t7, $t6, 2 -/* 0F1468 7F0BC938 01EE7823 */ subu $t7, $t7, $t6 -/* 0F146C 7F0BC93C 000F78C0 */ sll $t7, $t7, 3 -/* 0F1470 7F0BC940 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 0F1474 7F0BC944 E7A00040 */ swc1 $f0, 0x40($sp) -/* 0F1478 7F0BC948 E7A00054 */ swc1 $f0, 0x54($sp) -/* 0F147C 7F0BC94C 01AF1821 */ addu $v1, $t5, $t7 -/* 0F1480 7F0BC950 C464000C */ lwc1 $f4, 0xc($v1) -/* 0F1484 7F0BC954 3C028008 */ lui $v0, %hi(g_CurrentPlayer) -/* 0F1488 7F0BC958 8C42A0B0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0F148C 7F0BC95C 46002182 */ mul.s $f6, $f4, $f0 -/* 0F1490 7F0BC960 3C088008 */ lui $t0, %hi(mtx_array_bss_80083DB0) -/* 0F1494 7F0BC964 C4480038 */ lwc1 $f8, 0x38($v0) -/* 0F1498 7F0BC968 25083DB0 */ addiu $t0, %lo(mtx_array_bss_80083DB0) # addiu $t0, $t0, 0x3db0 -/* 0F149C 7F0BC96C 0010C180 */ sll $t8, $s0, 6 -/* 0F14A0 7F0BC970 03082821 */ addu $a1, $t8, $t0 -/* 0F14A4 7F0BC974 27A4002C */ addiu $a0, $sp, 0x2c -/* 0F14A8 7F0BC978 46083281 */ sub.s $f10, $f6, $f8 -/* 0F14AC 7F0BC97C E7AA005C */ swc1 $f10, 0x5c($sp) -/* 0F14B0 7F0BC980 C4700010 */ lwc1 $f16, 0x10($v1) -/* 0F14B4 7F0BC984 C444003C */ lwc1 $f4, 0x3c($v0) -/* 0F14B8 7F0BC988 46008482 */ mul.s $f18, $f16, $f0 -/* 0F14BC 7F0BC98C 46049181 */ sub.s $f6, $f18, $f4 -/* 0F14C0 7F0BC990 E7A60060 */ swc1 $f6, 0x60($sp) -/* 0F14C4 7F0BC994 C4680014 */ lwc1 $f8, 0x14($v1) -/* 0F14C8 7F0BC998 C4500040 */ lwc1 $f16, 0x40($v0) -/* 0F14CC 7F0BC99C 46004282 */ mul.s $f10, $f8, $f0 -/* 0F14D0 7F0BC9A0 46105481 */ sub.s $f18, $f10, $f16 -/* 0F14D4 7F0BC9A4 0FC16327 */ jal matrix_4x4_f32_to_s32 -/* 0F14D8 7F0BC9A8 E7B20064 */ swc1 $f18, 0x64($sp) -/* 0F14DC 7F0BC9AC 02001025 */ move $v0, $s0 -.L7F0BC9B0: -/* 0F14E0 7F0BC9B0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0F14E4 7F0BC9B4 8FB00018 */ lw $s0, 0x18($sp) -/* 0F14E8 7F0BC9B8 27BD0070 */ addiu $sp, $sp, 0x70 -/* 0F14EC 7F0BC9BC 03E00008 */ jr $ra -/* 0F14F0 7F0BC9C0 00000000 */ nop -) -#endif - -#if !defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.text -glabel sub_GAME_7F0BC85C -/* 0EE64C 7F0BBC5C 27BDFF90 */ addiu $sp, $sp, -0x70 -/* 0EE650 7F0BBC60 00047880 */ sll $t7, $a0, 2 -/* 0EE654 7F0BBC64 AFB00018 */ sw $s0, 0x18($sp) -/* 0EE658 7F0BBC68 01E47821 */ addu $t7, $t7, $a0 -/* 0EE65C 7F0BBC6C 000F7900 */ sll $t7, $t7, 4 -/* 0EE660 7F0BBC70 3C108004 */ lui $s0, %hi(array_room_info + 0x10 +38) -/* 0EE664 7F0BBC74 020F8021 */ addu $s0, $s0, $t7 -/* 0EE668 7F0BBC78 8610AC9A */ lh $s0, %lo(array_room_info + 0x10 +38)($s0) -/* 0EE66C 7F0BBC7C 2402FFFF */ li $v0, -1 -/* 0EE670 7F0BBC80 AFBF001C */ sw $ra, 0x1c($sp) -/* 0EE674 7F0BBC84 1202000C */ beq $s0, $v0, .L7F0BBCB8 -/* 0EE678 7F0BBC88 AFA40070 */ sw $a0, 0x70($sp) -/* 0EE67C 7F0BBC8C 3C188007 */ lui $t8, %hi(g_CurrentPlayer) # $t8, 0x8007 -/* 0EE680 7F0BBC90 8F188BC0 */ lw $t8, %lo(g_CurrentPlayer)($t8) -/* 0EE684 7F0BBC94 00104080 */ sll $t0, $s0, 2 -/* 0EE688 7F0BBC98 3C098007 */ lui $t1, %hi(dword_CODE_bss_80083900) -/* 0EE68C 7F0BBC9C 01284821 */ addu $t1, $t1, $t0 -/* 0EE690 7F0BBCA0 8D29DE88 */ lw $t1, %lo(dword_CODE_bss_80083900)($t1) -/* 0EE694 7F0BBCA4 8F191084 */ lw $t9, 0x1084($t8) -/* 0EE698 7F0BBCA8 3C018007 */ lui $at, %hi(dword_CODE_bss_80083320) -/* 0EE69C 7F0BBCAC 00300821 */ addu $at, $at, $s0 -/* 0EE6A0 7F0BBCB0 1329000F */ beq $t9, $t1, .L7F0BBCF0 -/* 0EE6A4 7F0BBCB4 00000000 */ nop -.L7F0BBCB8: -/* 0EE6A8 7F0BBCB8 12020003 */ beq $s0, $v0, .L7F0BBCC8 -/* 0EE6AC 7F0BBCBC 02002025 */ move $a0, $s0 -/* 0EE6B0 7F0BBCC0 0FC2EE98 */ jal sub_GAME_7F0BC660 -/* 0EE6B4 7F0BBCC4 8FA50070 */ lw $a1, 0x70($sp) -.L7F0BBCC8: -/* 0EE6B8 7F0BBCC8 0FC2EEBC */ jal sub_GAME_7F0BC6F0 -/* 0EE6BC 7F0BBCCC 00000000 */ nop -/* 0EE6C0 7F0BBCD0 00408025 */ move $s0, $v0 -/* 0EE6C4 7F0BBCD4 00402025 */ move $a0, $v0 -/* 0EE6C8 7F0BBCD8 0FC2EE8D */ jal sub_GAME_7F0BC634 -/* 0EE6CC 7F0BBCDC 8FA50070 */ lw $a1, 0x70($sp) -/* 0EE6D0 7F0BBCE0 3C018007 */ lui $at, %hi(dword_CODE_bss_80083320) -/* 0EE6D4 7F0BBCE4 00300821 */ addu $at, $at, $s0 -/* 0EE6D8 7F0BBCE8 10000004 */ b .L7F0BBCFC -/* 0EE6DC 7F0BBCEC A020DC90 */ sb $zero, %lo(dword_CODE_bss_80083320)($at) -.L7F0BBCF0: -/* 0EE6E0 7F0BBCF0 A020DC90 */ sb $zero, %lo(dword_CODE_bss_80083320)($at) -/* 0EE6E4 7F0BBCF4 1000002E */ b .L7F0BBDB0 -/* 0EE6E8 7F0BBCF8 02001025 */ move $v0, $s0 -.L7F0BBCFC: -/* 0EE6EC 7F0BBCFC 3C0A8007 */ lui $t2, %hi(g_CurrentPlayer) # $t2, 0x8007 -/* 0EE6F0 7F0BBD00 8D4A8BC0 */ lw $t2, %lo(g_CurrentPlayer)($t2) -/* 0EE6F4 7F0BBD04 00106080 */ sll $t4, $s0, 2 -/* 0EE6F8 7F0BBD08 3C018007 */ lui $at, %hi(dword_CODE_bss_80083900) -/* 0EE6FC 7F0BBD0C 8D4B1084 */ lw $t3, 0x1084($t2) -/* 0EE700 7F0BBD10 002C0821 */ addu $at, $at, $t4 -/* 0EE704 7F0BBD14 27A4002C */ addiu $a0, $sp, 0x2c -/* 0EE708 7F0BBD18 0FC1611E */ jal matrix_4x4_set_identity -/* 0EE70C 7F0BBD1C AC2BDE88 */ sw $t3, %lo(dword_CODE_bss_80083900)($at) -/* 0EE710 7F0BBD20 8FAE0070 */ lw $t6, 0x70($sp) -/* 0EE714 7F0BBD24 3C018004 */ lui $at, %hi(room_data_float2) # $at, 0x8004 -/* 0EE718 7F0BBD28 C420AC48 */ lwc1 $f0, %lo(room_data_float2)($at) -/* 0EE71C 7F0BBD2C 3C0D8007 */ lui $t5, %hi(ptr_bgdata_room_fileposition_list) # $t5, 0x8007 -/* 0EE720 7F0BBD30 8DADB3D4 */ lw $t5, %lo(ptr_bgdata_room_fileposition_list)($t5) -/* 0EE724 7F0BBD34 000E7880 */ sll $t7, $t6, 2 -/* 0EE728 7F0BBD38 01EE7823 */ subu $t7, $t7, $t6 -/* 0EE72C 7F0BBD3C 000F78C0 */ sll $t7, $t7, 3 -/* 0EE730 7F0BBD40 E7A0002C */ swc1 $f0, 0x2c($sp) -/* 0EE734 7F0BBD44 E7A00040 */ swc1 $f0, 0x40($sp) -/* 0EE738 7F0BBD48 E7A00054 */ swc1 $f0, 0x54($sp) -/* 0EE73C 7F0BBD4C 01AF1821 */ addu $v1, $t5, $t7 -/* 0EE740 7F0BBD50 C464000C */ lwc1 $f4, 0xc($v1) -/* 0EE744 7F0BBD54 3C028007 */ lui $v0, %hi(g_CurrentPlayer) # $v0, 0x8007 -/* 0EE748 7F0BBD58 8C428BC0 */ lw $v0, %lo(g_CurrentPlayer)($v0) -/* 0EE74C 7F0BBD5C 46002182 */ mul.s $f6, $f4, $f0 -/* 0EE750 7F0BBD60 3C088007 */ lui $t0, %hi(mtx_array_bss_80083DB0) # $t0, 0x8007 -/* 0EE754 7F0BBD64 C4480038 */ lwc1 $f8, 0x38($v0) -/* 0EE758 7F0BBD68 2508E018 */ addiu $t0, %lo(mtx_array_bss_80083DB0) # addiu $t0, $t0, -0x1fe8 -/* 0EE75C 7F0BBD6C 0010C180 */ sll $t8, $s0, 6 -/* 0EE760 7F0BBD70 03082821 */ addu $a1, $t8, $t0 -/* 0EE764 7F0BBD74 27A4002C */ addiu $a0, $sp, 0x2c -/* 0EE768 7F0BBD78 46083281 */ sub.s $f10, $f6, $f8 -/* 0EE76C 7F0BBD7C E7AA005C */ swc1 $f10, 0x5c($sp) -/* 0EE770 7F0BBD80 C4700010 */ lwc1 $f16, 0x10($v1) -/* 0EE774 7F0BBD84 C444003C */ lwc1 $f4, 0x3c($v0) -/* 0EE778 7F0BBD88 46008482 */ mul.s $f18, $f16, $f0 -/* 0EE77C 7F0BBD8C 46049181 */ sub.s $f6, $f18, $f4 -/* 0EE780 7F0BBD90 E7A60060 */ swc1 $f6, 0x60($sp) -/* 0EE784 7F0BBD94 C4680014 */ lwc1 $f8, 0x14($v1) -/* 0EE788 7F0BBD98 C4500040 */ lwc1 $f16, 0x40($v0) -/* 0EE78C 7F0BBD9C 46004282 */ mul.s $f10, $f8, $f0 -/* 0EE790 7F0BBDA0 46105481 */ sub.s $f18, $f10, $f16 -/* 0EE794 7F0BBDA4 0FC16451 */ jal matrix_4x4_f32_to_s32 -/* 0EE798 7F0BBDA8 E7B20064 */ swc1 $f18, 0x64($sp) -/* 0EE79C 7F0BBDAC 02001025 */ move $v0, $s0 -.L7F0BBDB0: -/* 0EE7A0 7F0BBDB0 8FBF001C */ lw $ra, 0x1c($sp) -/* 0EE7A4 7F0BBDB4 8FB00018 */ lw $s0, 0x18($sp) -/* 0EE7A8 7F0BBDB8 27BD0070 */ addiu $sp, $sp, 0x70 -/* 0EE7AC 7F0BBDBC 03E00008 */ jr $ra -/* 0EE7B0 7F0BBDC0 00000000 */ nop -) -#endif -#endif - - -Gfx * sub_GAME_7F0BC9C4(Gfx *DL,int index) +/** + * Updates the display list with the room matrix for a specific room roomID. + * + * Address: 0x7F0BC9C4 + */ +Gfx * applyRoomMatrixToDisplayList(Gfx *gdl,int roomID) { - s32 i; - - i = sub_GAME_7F0BC85C(index); - gSPMatrix(DL++, &mtx_array_bss_80083DB0[i], G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH); - return DL; + s32 roomIndex; + + roomIndex = setupRoomTransformationMatrix(roomID); + gSPMatrix(gdl++, &roomMatrices[roomIndex], G_MTX_MODELVIEW|G_MTX_LOAD|G_MTX_NOPUSH); + return gdl; } -s32 getRoomIndexPOS(s32 index) +/** + * Returns the position of a room by its roomID. + * + * Address: 0x7f0bca14 + */ +struct coord3d* getRoomPositionByIndex(s32 roomID) { - return &ptr_bgdata_room_fileposition_list[index].pos; + return &ptr_bgdata_room_fileposition_list[roomID].pos; } - -void sub_GAME_7F0BCA34(s32 index, coord3d *param_2) +/** + * Retrieves and scales the position of a room by its roomID. + * + * Address: 0x7F0BCA34 + */ +void getRoomPositionScaledByIndex(s32 roomID, coord3d *scaledPos) { - param_2->x = ptr_bgdata_room_fileposition_list[index].pos.x * room_data_float2; - param_2->y = ptr_bgdata_room_fileposition_list[index].pos.y * room_data_float2; - param_2->z = ptr_bgdata_room_fileposition_list[index].pos.z * room_data_float2; + scaledPos->x = ptr_bgdata_room_fileposition_list[roomID].pos.x * room_data_float2; + scaledPos->y = ptr_bgdata_room_fileposition_list[roomID].pos.y * room_data_float2; + scaledPos->z = ptr_bgdata_room_fileposition_list[roomID].pos.z * room_data_float2; } diff --git a/src/game/unk_0BC530.h b/src/game/unk_0BC530.h index 1398d25..2551852 100644 --- a/src/game/unk_0BC530.h +++ b/src/game/unk_0BC530.h @@ -2,9 +2,10 @@ #define _UNK_0BC530_H_ #include -void sub_GAME_7F0BC624(s32 param_1); -void sub_GAME_7F0BC7D4(void); -void sub_GAME_7F0BCA34(s32 index, coord3d *param_2); -Gfx * sub_GAME_7F0BC9C4(Gfx *DL,int index); +void setPlayerRoomField(s32 param_1); +void updateRoomStatusFlags(void); +void getRoomPositionScaledByIndex(s32 index, coord3d *param_2); +Gfx * applyRoomMatrixToDisplayList(Gfx *DL,int index); +struct coord3d* getRoomPositionByIndex(s32 index); #endif diff --git a/src/game/unk_0C0A70.c b/src/game/unk_0C0A70.c index 716e423..ae23743 100644 --- a/src/game/unk_0C0A70.c +++ b/src/game/unk_0C0A70.c @@ -2,8 +2,8 @@ #include "unk_0C0A70.h" // data -s32 D_80048490 = -1; -s32 D_80048494 = 0; +s32 lastFrameCounter = -1; +s32 currentFrameCounter = 0; /** * Appears to be rendered framerate, or some kind of counter since the last frame update. @@ -18,35 +18,42 @@ f32 jpD_800484CC = 1.0f; f32 jpD_800484D0 = 1.0f; #endif -s32 D_8004849C = -1; -s32 D_800484A0 = 0; // half of D_80048494 -s32 D_800484A4 = 0; // is D_80048494 Odd -s32 D_800484A8 = 0; // half - D_8004849C +s32 previousFrameCounter = -1; +s32 halfFrameCounter = 0; // half of currentFrameCounter +s32 isFrameCounterOdd = 0; // is currentFrameCounter Odd +s32 halfMinusPreviousCounter = 0; // half - previousFrameCounter u32 copy_of_osgetcount_value_0 = 0; u32 copy_of_osgetcount_value_1 = 0; -s32 D_800484B4 = 1; //usually 1 - +s32 frameDelay = 1; //usually 1 +/** + * Stores the current OS count in the two global variables. + */ void store_osgetcount(void) { copy_of_osgetcount_value_1 = osGetCount(); copy_of_osgetcount_value_0 = copy_of_osgetcount_value_1; } -//timing related -void sub_GAME_7F0C0AA0(s32 arg0) + +/** + * Updates the timing-related counters and frame information based on the given argument. + * + * @param deltaFrames The number of frames to add to the current frame counter. + */ +void updateFrameCounters(s32 deltaFrames) { copy_of_osgetcount_value_0 = (s32) copy_of_osgetcount_value_1; copy_of_osgetcount_value_1 = osGetCount(); - D_80048490 = D_80048494; - D_80048494 = (s32) (D_80048494 + arg0); - speedgraphframes = arg0; + lastFrameCounter = currentFrameCounter; + currentFrameCounter = (s32) (currentFrameCounter + deltaFrames); + speedgraphframes = deltaFrames; #ifdef BUGFIX_R1 - jpD_800484CC = (f32) arg0; + jpD_800484CC = (f32) deltaFrames; #ifdef REFRESH_PAL jpD_800484D0 = (jpD_800484CC * 60.0f) / 50.0f; #else @@ -54,33 +61,37 @@ void sub_GAME_7F0C0AA0(s32 arg0) #endif #endif - D_8004849C = (s32) D_800484A0; - D_800484A0 = (s32) (D_80048494 / 2); - D_800484A4 = (s32) (D_80048494 & 1); - D_800484A8 = (s32) (D_800484A0 - D_8004849C); + previousFrameCounter = (s32) halfFrameCounter; + halfFrameCounter = (s32) (currentFrameCounter / 2); + isFrameCounterOdd = (s32) (currentFrameCounter & 1); + halfMinusPreviousCounter = (s32) (halfFrameCounter - previousFrameCounter); } -void sub_GAME_7F0C0B4C(void) //maybe WaitForTick +/** + * Waits until the appropriate time has passed before updating the frame counters. + * This function effectively controls the frame rate by waiting for the next tick. + */ +void waitForNextFrame(void) //maybe WaitForTick { - u32 uVar1; //next frame time? + u32 nextFrameTime; //next frame time? do { #ifdef REFRESH_PAL - uVar1 = ((osGetCount() - copy_of_osgetcount_value_1) + 465525) / 931050; + nextFrameTime = ((osGetCount() - copy_of_osgetcount_value_1) + 465525) / 931050; #else - uVar1 = ((osGetCount() - copy_of_osgetcount_value_1) + 387937) / 775875; //current time + 1/5 + nextFrameTime = ((osGetCount() - copy_of_osgetcount_value_1) + 387937) / 775875; //current time + 1/5 #endif - } while (uVar1 < D_800484B4); + } while (nextFrameTime < frameDelay); - D_800484B4 = 1; - sub_GAME_7F0C0AA0(uVar1); + frameDelay = 1; + updateFrameCounters(nextFrameTime); } -void sub_GAME_7F0C0BE4(s32 arg0) { +void setFrameDelay(s32 arg0) { #ifdef LEFTOVERDEBUG - D_800484B4 = arg0; + frameDelay = arg0; #endif } diff --git a/src/game/unk_0C0A70.h b/src/game/unk_0C0A70.h index 3277e22..07a6e3b 100644 --- a/src/game/unk_0C0A70.h +++ b/src/game/unk_0C0A70.h @@ -2,8 +2,8 @@ #define _UNK_0C0A70_H_ #include -extern s32 D_80048490; -extern s32 D_80048494; +extern s32 lastFrameCounter; +extern s32 currentFrameCounter; extern s32 speedgraphframes; #if defined (BUGFIX_R1) @@ -11,14 +11,14 @@ extern f32 jpD_800484CC; extern f32 jpD_800484D0; #endif -extern s32 D_8004849C; -extern s32 D_800484A0; -extern s32 D_800484A4; -extern s32 D_800484A8; +extern s32 previousFrameCounter; +extern s32 halfFrameCounter; +extern s32 isFrameCounterOdd; +extern s32 halfMinusPreviousCounter; extern u32 copy_of_osgetcount_value_0; extern u32 copy_of_osgetcount_value_1; -extern s32 D_800484B4; +extern s32 frameDelay; -void sub_GAME_7F0C0B4C(void); +void waitForNextFrame(void); #endif diff --git a/src/game/unk_0CC4C0.c b/src/game/unk_0CC4C0.c index fa2e28e..00d4fa0 100644 --- a/src/game/unk_0CC4C0.c +++ b/src/game/unk_0CC4C0.c @@ -10,9 +10,9 @@ s32 g_TexLutMode; //8008D144 s32 dword_CODE_bss_8008D144; //8008D148 -s_bss_8008D148 dword_CODE_bss_8008D148[8]; //[0x160]; //8 entries of 0x2c ea +s_bss_8008D148 g_TexTileStates[8]; //[0x160]; //8 entries of 0x2c ea //8008D2A8 -s_bss_8008D2A8 dword_CODE_bss_8008D2A8[8]; //[0xA0]; //8 entries of 0x14 ea +s_bss_8008D2A8 g_TexTileSizes[8]; //[0xA0]; //8 entries of 0x14 ea //8008D348 s32 dword_CODE_bss_8008D348; @@ -155,8 +155,8 @@ void sub_GAME_7F0CC4C8(void) for (i=0; i<8; i++) { - dword_CODE_bss_8008D148[i].unk_0 = 0; - dword_CODE_bss_8008D2A8[i].unk_0 = 0; + g_TexTileStates[i].inuse = 0; + g_TexTileSizes[i].inuse = 0; } g_TexLutMode = -1; } @@ -191,50 +191,51 @@ u32 texSetLutMode(s32 arg0) { } -s32 sub_GAME_7F0CC574(s32 index, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8, s32 arg9, s32 argA) +//s32 texTrySetTileState(s32 index, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7, s32 arg8, s32 arg9, s32 argA) +s32 texTrySetTileState(s32 tile, s32 format, s32 depth, s32 line, s32 tmem, s32 smode, s32 tmode, s32 masks, s32 maskt, s32 shifts, s32 shiftt) { s32 retval; retval = 0; - if ((dword_CODE_bss_8008D148[index].unk_0 == 0) || (arg1 != dword_CODE_bss_8008D148[index].unk_4) || - (arg2 != dword_CODE_bss_8008D148[index].unk_8) || (arg3 != dword_CODE_bss_8008D148[index].unk_C) || - (arg4 != dword_CODE_bss_8008D148[index].unk_10) || (arg5 != dword_CODE_bss_8008D148[index].unk_14) || - (arg6 != dword_CODE_bss_8008D148[index].unk_18) || (arg7 != dword_CODE_bss_8008D148[index].unk_1C) || - (arg8 != dword_CODE_bss_8008D148[index].unk_20) || (arg9 != dword_CODE_bss_8008D148[index].unk_24) || - (argA != dword_CODE_bss_8008D148[index].unk_28)) + if ((g_TexTileStates[tile].inuse == 0) || (format != g_TexTileStates[tile].unk_4) || + (depth != g_TexTileStates[tile].unk_8) || (line != g_TexTileStates[tile].unk_C) || + (tmem != g_TexTileStates[tile].unk_10) || (smode != g_TexTileStates[tile].unk_14) || + (tmode != g_TexTileStates[tile].unk_18) || (masks != g_TexTileStates[tile].unk_1C) || + (maskt != g_TexTileStates[tile].unk_20) || (shifts != g_TexTileStates[tile].unk_24) || + (shiftt != g_TexTileStates[tile].unk_28)) { retval = 1; - dword_CODE_bss_8008D148[index].unk_0 = 1; - dword_CODE_bss_8008D148[index].unk_4 = arg1; - dword_CODE_bss_8008D148[index].unk_8 = arg2; - dword_CODE_bss_8008D148[index].unk_C = arg3; - dword_CODE_bss_8008D148[index].unk_10 = arg4; - dword_CODE_bss_8008D148[index].unk_14 = arg5; - dword_CODE_bss_8008D148[index].unk_18 = arg6; - dword_CODE_bss_8008D148[index].unk_1C = arg7; - dword_CODE_bss_8008D148[index].unk_20 = arg8; - dword_CODE_bss_8008D148[index].unk_24 = arg9; - dword_CODE_bss_8008D148[index].unk_28 = argA; + g_TexTileStates[tile].inuse = 1; + g_TexTileStates[tile].unk_4 = format; + g_TexTileStates[tile].unk_8 = depth; + g_TexTileStates[tile].unk_C = line; + g_TexTileStates[tile].unk_10 = tmem; + g_TexTileStates[tile].unk_14 = smode; + g_TexTileStates[tile].unk_18 = tmode; + g_TexTileStates[tile].unk_1C = masks; + g_TexTileStates[tile].unk_20 = maskt; + g_TexTileStates[tile].unk_24 = shifts; + g_TexTileStates[tile].unk_28 = shiftt; } return retval; } -s32 sub_GAME_7F0CC690(s32 index,s32 arg1,s32 arg2,s32 arg3,s32 arg4) +s32 texTrySetTileSize(s32 tile, s32 uls, s32 ult, s32 lrs, s32 lrt) { s32 retval; retval = 0; - if ((((dword_CODE_bss_8008D2A8[index].unk_0 == 0) || (arg1 != dword_CODE_bss_8008D2A8[index].unk_4)) || (arg2 != dword_CODE_bss_8008D2A8[index].unk_8)) || - ((arg3 != dword_CODE_bss_8008D2A8[index].unk_C || (arg4 != dword_CODE_bss_8008D2A8[index].unk_10)))) + if ((((g_TexTileSizes[tile].inuse == 0) || (uls != g_TexTileSizes[tile].unk_4)) || (ult != g_TexTileSizes[tile].unk_8)) || + ((lrs != g_TexTileSizes[tile].unk_C || (lrt != g_TexTileSizes[tile].unk_10)))) { retval = 1; - dword_CODE_bss_8008D2A8[index].unk_0 = 1; - dword_CODE_bss_8008D2A8[index].unk_4 = arg1; - dword_CODE_bss_8008D2A8[index].unk_8 = arg2; - dword_CODE_bss_8008D2A8[index].unk_C = arg3; - dword_CODE_bss_8008D2A8[index].unk_10 = arg4; + g_TexTileSizes[tile].inuse = 1; + g_TexTileSizes[tile].unk_4 = uls; + g_TexTileSizes[tile].unk_8 = ult; + g_TexTileSizes[tile].unk_C = lrs; + g_TexTileSizes[tile].unk_10 = lrt; } return retval; } @@ -334,7 +335,7 @@ s32 texGetSizeInBytes(struct tex *tex, s32 lod) } -void sub_GAME_7F0CC9D4(struct tex *tex, s32 *deptharg, s32 *lenarg) +void texGetDepthAndSize(struct tex *tex, s32 *deptharg, s32 *lenarg) { s32 depth = tex->depth; s32 maxlod = tex->maxlod ? tex->maxlod : 1; @@ -365,7 +366,7 @@ void sub_GAME_7F0CC9D4(struct tex *tex, s32 *deptharg, s32 *lenarg) } -s32 sub_GAME_7F0CCA9C(s32 arg0) { +s32 texDimensionToMask(s32 arg0) { s32 i = 0; arg0--; @@ -382,14 +383,14 @@ s32 sub_GAME_7F0CCA9C(s32 arg0) { -u32 sub_GAME_7F0CCACC(s32 arg0) { +u32 texModeToGbiMode(s32 arg0) { if (arg0 == 1) { - return 2; + return G_TX_CLAMP; } if (arg0 == 2) { - return 1; + return G_TX_MIRROR; } - return 0; + return G_TX_WRAP; } @@ -422,7 +423,7 @@ s32 sub_GAME_7F0CCB38(s32 *arg0) } -Gfx *sub_GAME_7F0CCC50(Gfx *gdl, struct tex *tex, s32 arg2, s32 shifts, s32 shiftt, s32 arg5) +Gfx *texWriteTileFromDefinition(Gfx *gdl, struct tex *tex, s32 offset, s32 shifts, s32 shiftt, s32 arg5) { struct image_entry *s0 = &g_Textures[tex->texturenum]; s32 sp88; @@ -434,8 +435,8 @@ Gfx *sub_GAME_7F0CCC50(Gfx *gdl, struct tex *tex, s32 arg2, s32 shifts, s32 shif s32 lrs; s32 lrt; - sp88 = sub_GAME_7F0CCA9C(tex->width); - sp84 = sub_GAME_7F0CCA9C(tex->height); + sp88 = texDimensionToMask(tex->width); + sp84 = texDimensionToMask(tex->height); line = texGetLineSizeInBytes(tex, 0); @@ -446,19 +447,19 @@ Gfx *sub_GAME_7F0CCC50(Gfx *gdl, struct tex *tex, s32 arg2, s32 shifts, s32 shif gDPSetTextureLUT(gdl++, tex->lutmodeindex << G_MDSFT_TEXTLUT); } - if (sub_GAME_7F0CC574(0, tex->gbiformat, tex->depth, line, s0->flag3 + line * s0->flag4, 0, 0, sp88 - s0->flag5, sp84 - s0->flag6, shifts, shiftt)) + if (texTrySetTileState(0, tex->gbiformat, tex->depth, line, s0->flag3 + line * s0->flag4, 0, 0, sp88 - s0->flag5, sp84 - s0->flag6, shifts, shiftt)) { gDPSetTile(gdl++, tex->gbiformat, tex->depth, line, s0->flag3 + line * s0->flag4, 0, 0, - sub_GAME_7F0CCACC(0), sp84 - s0->flag6, shiftt, - sub_GAME_7F0CCACC(0), sp88 - s0->flag5, shifts); + texModeToGbiMode(0), sp84 - s0->flag6, shiftt, + texModeToGbiMode(0), sp88 - s0->flag5, shifts); } - uls = (arg2 == 2 && !tex->unk0c_02 ? 2 : 0) + 0; - ult = (arg2 == 2 && !tex->unk0c_02 ? 2 : 0) + 0; - lrs = (arg2 == 2 && !tex->unk0c_02 ? 2 : 0) + ((tex->width - 1) << 2); - lrt = (arg2 == 2 && !tex->unk0c_02 ? 2 : 0) + ((tex->height - 1) << 2); + uls = (offset == 2 && !tex->unk0c_02 ? 2 : 0) + 0; + ult = (offset == 2 && !tex->unk0c_02 ? 2 : 0) + 0; + lrs = (offset == 2 && !tex->unk0c_02 ? 2 : 0) + ((tex->width - 1) << 2); + lrt = (offset == 2 && !tex->unk0c_02 ? 2 : 0) + ((tex->height - 1) << 2); - if (sub_GAME_7F0CC690(0, uls, ult, lrs, lrt)) + if (texTrySetTileSize(0, uls, ult, lrs, lrt)) { gDPSetTileSize(gdl++, 0, uls, ult, lrs, lrt); } @@ -466,7 +467,7 @@ Gfx *sub_GAME_7F0CCC50(Gfx *gdl, struct tex *tex, s32 arg2, s32 shifts, s32 shif return gdl; } -Gfx* sub_GAME_7F0CCFBC(Gfx* arg0, Gfx* arg1, struct tex* tex, s32 arg3) +Gfx* texWriteTextureCmd(Gfx* arg0, Gfx* arg1, struct tex* tex, s32 arg3) { s32 lod = tex->maxlod ? tex->maxlod - 1 : 0; @@ -499,13 +500,73 @@ Gfx* sub_GAME_7F0CCFBC(Gfx* arg0, Gfx* arg1, struct tex* tex, s32 arg3) #ifdef NONMATCHING -void expland_c0DL_psuedocommands(void) { +Gfx *texWriteLoadToTmemAddr(Gfx *gdl, struct tex *tex, s32 tmemoffset) +{ + s32 depth; + s32 len; + texGetDepthAndSize(tex, &depth, &len); + + if (tex->lutmodeindex == 0) { + gDPSetTextureImage(gdl++, tex->gbiformat, depth, 1, tex->data); + + if (!g_TexPipeSynced) { + gDPPipeSync(gdl++); + g_TexPipeSynced = true; + } + + if (depth == G_IM_SIZ_16b && tmemoffset == 0) { + gDPLoadSync(gdl++); + gDPLoadBlock(gdl++, G_TX_LOADTILE, 0, 0, len - 1, 0); + } else { + if (texTrySetTileState(5, 0, depth, 0, tmemoffset, 0, 0, 0, 0, 0, 0)) { + gDPSetTile(gdl++, G_IM_FMT_RGBA, depth, 0, tmemoffset, 5, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + } + + gDPLoadSync(gdl++); + gDPLoadBlock(gdl++, 5, 0, 0, len - 1, 0); + } + } else { + gDPSetTextureImage(gdl++, tex->gbiformat, depth, 1, tex->data); + + if (!g_TexPipeSynced) { + gDPPipeSync(gdl++); + g_TexPipeSynced = true; + } + + if (depth == G_IM_SIZ_16b && tmemoffset == 0) { + gDPLoadSync(gdl++); + gDPLoadBlock(gdl++, G_TX_LOADTILE, 0, 0, len - 1, 0); + } else { + if (texTrySetTileState(5, 0, depth, 0, tmemoffset, 0, 0, 0, 0, 0, 0)) { + gDPSetTile(gdl++, G_IM_FMT_RGBA, depth, 0, tmemoffset, 5, 0, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOLOD); + } + + gDPLoadSync(gdl++); + gDPLoadBlock(gdl++, 5, 0, 0, len - 1, 0); + } + + { + s32 tmp = len; + s32 a2 = (u32)(0x3ff - tex->unk0a) < len ? (u32)(0x3ff - tex->unk0a) : 0; + + tmp -= a2; + + gDPLoadSync(gdl++); + gDPLoadTLUT06(gdl++, tmp, a2, tex->unk0a + tmp, a2); + } + } + + return gdl; } #else GLOBAL_ASM( .text -glabel expland_c0DL_psuedocommands +glabel texWriteLoadToTmemAddr /* 101BA8 7F0CD078 27BDFF70 */ addiu $sp, $sp, -0x90 /* 101BAC 7F0CD07C AFB00034 */ sw $s0, 0x34($sp) /* 101BB0 7F0CD080 00808025 */ move $s0, $a0 @@ -515,7 +576,7 @@ glabel expland_c0DL_psuedocommands /* 101BC0 7F0CD090 AFA60098 */ sw $a2, 0x98($sp) /* 101BC4 7F0CD094 00A02025 */ move $a0, $a1 /* 101BC8 7F0CD098 27A5008C */ addiu $a1, $sp, 0x8c -/* 101BCC 7F0CD09C 0FC33275 */ jal sub_GAME_7F0CC9D4 +/* 101BCC 7F0CD09C 0FC33275 */ jal texGetDepthAndSize /* 101BD0 7F0CD0A0 27A60088 */ addiu $a2, $sp, 0x88 /* 101BD4 7F0CD0A4 8E2E000C */ lw $t6, 0xc($s1) /* 101BD8 7F0CD0A8 24040007 */ li $a0, 7 @@ -551,7 +612,7 @@ glabel expland_c0DL_psuedocommands /* 101C50 7F0CD120 AFA00018 */ sw $zero, 0x18($sp) /* 101C54 7F0CD124 AFA00014 */ sw $zero, 0x14($sp) /* 101C58 7F0CD128 8FA6008C */ lw $a2, 0x8c($sp) -/* 101C5C 7F0CD12C 0FC3315D */ jal sub_GAME_7F0CC574 +/* 101C5C 7F0CD12C 0FC3315D */ jal texTrySetTileState /* 101C60 7F0CD130 AFB80010 */ sw $t8, 0x10($sp) /* 101C64 7F0CD134 10400013 */ beqz $v0, .L7F0CD184 /* 101C68 7F0CD138 3C0A0700 */ lui $t2, 0x700 @@ -631,7 +692,7 @@ glabel expland_c0DL_psuedocommands /* 101D80 7F0CD250 AFA00018 */ sw $zero, 0x18($sp) /* 101D84 7F0CD254 AFA00014 */ sw $zero, 0x14($sp) /* 101D88 7F0CD258 8FA6008C */ lw $a2, 0x8c($sp) -/* 101D8C 7F0CD25C 0FC3315D */ jal sub_GAME_7F0CC574 +/* 101D8C 7F0CD25C 0FC3315D */ jal texTrySetTileState /* 101D90 7F0CD260 AFB80010 */ sw $t8, 0x10($sp) /* 101D94 7F0CD264 10400014 */ beqz $v0, .L7F0CD2B8 /* 101D98 7F0CD268 00003025 */ move $a2, $zero @@ -707,7 +768,7 @@ glabel expland_c0DL_psuedocommands /* 101E9C 7F0CD36C AFA00020 */ sw $zero, 0x20($sp) /* 101EA0 7F0CD370 AFA00024 */ sw $zero, 0x24($sp) /* 101EA4 7F0CD374 AFA00028 */ sw $zero, 0x28($sp) -/* 101EA8 7F0CD378 0FC3315D */ jal sub_GAME_7F0CC574 +/* 101EA8 7F0CD378 0FC3315D */ jal texTrySetTileState /* 101EAC 7F0CD37C AFA9006C */ sw $t1, 0x6c($sp) /* 101EB0 7F0CD380 8FA80070 */ lw $t0, 0x70($sp) /* 101EB4 7F0CD384 8FA9006C */ lw $t1, 0x6c($sp) @@ -763,13 +824,13 @@ glabel expland_c0DL_psuedocommands #ifdef NONMATCHING -void sub_GAME_7F0CD430(void) { +void texWriteTileLods(void) { } #else GLOBAL_ASM( .text -glabel sub_GAME_7F0CD430 +glabel texWriteTileLods /* 101F60 7F0CD430 27BDFF48 */ addiu $sp, $sp, -0xb8 /* 101F64 7F0CD434 8FAE00D0 */ lw $t6, 0xd0($sp) /* 101F68 7F0CD438 AFBF005C */ sw $ra, 0x5c($sp) @@ -800,13 +861,13 @@ glabel sub_GAME_7F0CD430 /* 101FC8 7F0CD498 02A02025 */ move $a0, $s5 /* 101FCC 7F0CD49C 0FC331C5 */ jal texGetWidthAtLod /* 101FD0 7F0CD4A0 02402825 */ move $a1, $s2 -/* 101FD4 7F0CD4A4 0FC332A7 */ jal sub_GAME_7F0CCA9C +/* 101FD4 7F0CD4A4 0FC332A7 */ jal texDimensionToMask /* 101FD8 7F0CD4A8 00402025 */ move $a0, $v0 /* 101FDC 7F0CD4AC 00409825 */ move $s3, $v0 /* 101FE0 7F0CD4B0 02A02025 */ move $a0, $s5 /* 101FE4 7F0CD4B4 0FC331FF */ jal texGetHeightAtLod /* 101FE8 7F0CD4B8 02402825 */ move $a1, $s2 -/* 101FEC 7F0CD4BC 0FC332A7 */ jal sub_GAME_7F0CCA9C +/* 101FEC 7F0CD4BC 0FC332A7 */ jal texDimensionToMask /* 101FF0 7F0CD4C0 00402025 */ move $a0, $v0 /* 101FF4 7F0CD4C4 0040A025 */ move $s4, $v0 /* 101FF8 7F0CD4C8 02A02025 */ move $a0, $s5 @@ -852,7 +913,7 @@ glabel sub_GAME_7F0CD430 /* 102094 7F0CD564 30460003 */ andi $a2, $v0, 3 /* 102098 7F0CD568 AFAE0010 */ sw $t6, 0x10($sp) /* 10209C 7F0CD56C AFAF0014 */ sw $t7, 0x14($sp) -/* 1020A0 7F0CD570 0FC3315D */ jal sub_GAME_7F0CC574 +/* 1020A0 7F0CD570 0FC3315D */ jal texTrySetTileState /* 1020A4 7F0CD574 AFB80018 */ sw $t8, 0x18($sp) /* 1020A8 7F0CD578 1040002D */ beqz $v0, .L7F0CD630 /* 1020AC 7F0CD57C 02C08825 */ move $s1, $s6 @@ -874,10 +935,10 @@ glabel sub_GAME_7F0CD430 /* 1020EC 7F0CD5BC 316D01FF */ andi $t5, $t3, 0x1ff /* 1020F0 7F0CD5C0 014D7025 */ or $t6, $t2, $t5 /* 1020F4 7F0CD5C4 AE2E0000 */ sw $t6, ($s1) -/* 1020F8 7F0CD5C8 0FC332B3 */ jal sub_GAME_7F0CCACC +/* 1020F8 7F0CD5C8 0FC332B3 */ jal texModeToGbiMode /* 1020FC 7F0CD5CC 8FA400C4 */ lw $a0, 0xc4($sp) /* 102100 7F0CD5D0 00408025 */ move $s0, $v0 -/* 102104 7F0CD5D4 0FC332B3 */ jal sub_GAME_7F0CCACC +/* 102104 7F0CD5D4 0FC332B3 */ jal texModeToGbiMode /* 102108 7F0CD5D8 8FA400C0 */ lw $a0, 0xc0($sp) /* 10210C 7F0CD5DC 8FB900AC */ lw $t9, 0xac($sp) /* 102110 7F0CD5E0 304C0003 */ andi $t4, $v0, 3 @@ -959,7 +1020,7 @@ glabel sub_GAME_7F0CD430 /* 10221C 7F0CD6EC AFB10010 */ sw $s1, 0x10($sp) /* 102220 7F0CD6F0 8FA50090 */ lw $a1, 0x90($sp) /* 102224 7F0CD6F4 02E03025 */ move $a2, $s7 -/* 102228 7F0CD6F8 0FC331A4 */ jal sub_GAME_7F0CC690 +/* 102228 7F0CD6F8 0FC331A4 */ jal texTrySetTileSize /* 10222C 7F0CD6FC 02803825 */ move $a3, $s4 /* 102230 7F0CD700 10400014 */ beqz $v0, .L7F0CD754 /* 102234 7F0CD704 26520001 */ addiu $s2, $s2, 1 @@ -1014,13 +1075,13 @@ glabel sub_GAME_7F0CD430 #ifdef NONMATCHING -void sub_GAME_7F0CD7AC(void) { +void texWriteLoadToTmemZero(void) { } #else GLOBAL_ASM( .text -glabel sub_GAME_7F0CD7AC +glabel texWriteLoadToTmemZero /* 1022DC 7F0CD7AC 27BDFF68 */ addiu $sp, $sp, -0x98 /* 1022E0 7F0CD7B0 AFB00034 */ sw $s0, 0x34($sp) /* 1022E4 7F0CD7B4 00808025 */ move $s0, $a0 @@ -1032,7 +1093,7 @@ glabel sub_GAME_7F0CD7AC /* 1022FC 7F0CD7CC AFA2008C */ sw $v0, 0x8c($sp) /* 102300 7F0CD7D0 02202025 */ move $a0, $s1 /* 102304 7F0CD7D4 27A50094 */ addiu $a1, $sp, 0x94 -/* 102308 7F0CD7D8 0FC33275 */ jal sub_GAME_7F0CC9D4 +/* 102308 7F0CD7D8 0FC33275 */ jal texGetDepthAndSize /* 10230C 7F0CD7DC 27A60090 */ addiu $a2, $sp, 0x90 /* 102310 7F0CD7E0 8E2E000C */ lw $t6, 0xc($s1) /* 102314 7F0CD7E4 24040007 */ li $a0, 7 @@ -1067,7 +1128,7 @@ glabel sub_GAME_7F0CD7AC /* 102388 7F0CD858 AFA00018 */ sw $zero, 0x18($sp) /* 10238C 7F0CD85C AFA00014 */ sw $zero, 0x14($sp) /* 102390 7F0CD860 AFA00010 */ sw $zero, 0x10($sp) -/* 102394 7F0CD864 0FC3315D */ jal sub_GAME_7F0CC574 +/* 102394 7F0CD864 0FC3315D */ jal texTrySetTileState /* 102398 7F0CD868 8FA60094 */ lw $a2, 0x94($sp) /* 10239C 7F0CD86C 10400010 */ beqz $v0, .L7F0CD8B0 /* 1023A0 7F0CD870 3C0A0700 */ lui $t2, 0x700 @@ -1146,7 +1207,7 @@ glabel sub_GAME_7F0CD7AC /* 1024B4 7F0CD984 AFA00018 */ sw $zero, 0x18($sp) /* 1024B8 7F0CD988 AFA00014 */ sw $zero, 0x14($sp) /* 1024BC 7F0CD98C AFA00010 */ sw $zero, 0x10($sp) -/* 1024C0 7F0CD990 0FC3315D */ jal sub_GAME_7F0CC574 +/* 1024C0 7F0CD990 0FC3315D */ jal texTrySetTileState /* 1024C4 7F0CD994 8FA60094 */ lw $a2, 0x94($sp) /* 1024C8 7F0CD998 10400011 */ beqz $v0, .L7F0CD9E0 /* 1024CC 7F0CD99C 00003025 */ move $a2, $zero @@ -1222,7 +1283,7 @@ glabel sub_GAME_7F0CD7AC /* 1025D0 7F0CDAA0 AFA00020 */ sw $zero, 0x20($sp) /* 1025D4 7F0CDAA4 AFA00024 */ sw $zero, 0x24($sp) /* 1025D8 7F0CDAA8 AFA00028 */ sw $zero, 0x28($sp) -/* 1025DC 7F0CDAAC 0FC3315D */ jal sub_GAME_7F0CC574 +/* 1025DC 7F0CDAAC 0FC3315D */ jal texTrySetTileState /* 1025E0 7F0CDAB0 AFA90070 */ sw $t1, 0x70($sp) /* 1025E4 7F0CDAB4 8FA80074 */ lw $t0, 0x74($sp) /* 1025E8 7F0CDAB8 8FA90070 */ lw $t1, 0x70($sp) @@ -1274,7 +1335,7 @@ glabel sub_GAME_7F0CD7AC #endif -Gfx *sub_GAME_7F0CDB64(Gfx *gdl, struct tex *tex, s32 arg2, s32 arg3, s32 arg4, s32 tile) +Gfx *texWriteTile(Gfx *gdl, struct tex *tex, s32 arg2, s32 arg3, s32 arg4, s32 tile) { s32 masks; s32 maskt; @@ -1285,8 +1346,8 @@ Gfx *sub_GAME_7F0CDB64(Gfx *gdl, struct tex *tex, s32 arg2, s32 arg3, s32 arg4, s32 lrt; s32 sp50; - masks = sub_GAME_7F0CCA9C(tex->width); - maskt = sub_GAME_7F0CCA9C(tex->height); + masks = texDimensionToMask(tex->width); + maskt = texDimensionToMask(tex->height); line = texGetLineSizeInBytes(tex, 0); sp50 = tex->unk0c_02; @@ -1295,11 +1356,11 @@ Gfx *sub_GAME_7F0CDB64(Gfx *gdl, struct tex *tex, s32 arg2, s32 arg3, s32 arg4, gDPSetTextureLUT(gdl++, tex->lutmodeindex << G_MDSFT_TEXTLUT); } - if (sub_GAME_7F0CC574(tile, tex->gbiformat, tex->depth, line, 0, arg2, arg3, masks, maskt, 0, 0)) + if (texTrySetTileState(tile, tex->gbiformat, tex->depth, line, 0, arg2, arg3, masks, maskt, 0, 0)) { gDPSetTile(gdl++, tex->gbiformat, tex->depth, line, 0x0000, tile, 0, - sub_GAME_7F0CCACC(arg3), maskt, G_TX_NOLOD, - sub_GAME_7F0CCACC(arg2), masks, G_TX_NOLOD); + texModeToGbiMode(arg3), maskt, G_TX_NOLOD, + texModeToGbiMode(arg2), masks, G_TX_NOLOD); } uls = (arg4 == 2 && sp50 == 0 ? 2 : 0) + 0; @@ -1307,7 +1368,7 @@ Gfx *sub_GAME_7F0CDB64(Gfx *gdl, struct tex *tex, s32 arg2, s32 arg3, s32 arg4, lrs = (arg4 == 2 && sp50 == 0 ? 2 : 0) + ((tex->width - 1) << 2); lrt = (arg4 == 2 && sp50 == 0 ? 2 : 0) + ((tex->height - 1) << 2); - if (sub_GAME_7F0CC690(tile, uls, ult, lrs, lrt)) + if (texTrySetTileSize(tile, uls, ult, lrs, lrt)) { gDPSetTileSize(gdl++, tile, uls, ult, lrs, lrt); } @@ -1316,242 +1377,59 @@ Gfx *sub_GAME_7F0CDB64(Gfx *gdl, struct tex *tex, s32 arg2, s32 arg3, s32 arg4, } -#ifdef NONMATCHING -Gfx * sub_GAME_7F0CDE18(Gfx *DL,u8 *facemapper_entry,s32 s_flags,s32 t_flags,s32 settilesize_offset) +Gfx *texHandleType2(Gfx *gdl, struct tex *tex, s32 smode, s32 tmode, s32 offset) { - DL = expland_c0DL_psuedocommands(DL,facemapper_entry,0); - DL = sub_GAME_7F0CD430(DL,facemapper_entry,s_flags,t_flags,settilesize_offset,0,0); - //1029a0: srl t8,t7,0x5 | 1029a0: sra t8,t7,0x5 - if (facemapper_entry[0xb] >> 5 == 1) { - DL = sub_GAME_7F0CD430(DL,facemapper_entry,s_flags,t_flags,settilesize_offset,1,0); + gdl = texWriteLoadToTmemAddr(gdl,tex,0); + gdl = texWriteTileLods(gdl,tex,smode,tmode,offset,0,0); + if (tex->maxlod == 1) { + gdl = texWriteTileLods(gdl,tex,smode,tmode,offset,1,0); } - return DL; + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0CDE18 -/* 102948 7F0CDE18 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 10294C 7F0CDE1C AFBF0024 */ sw $ra, 0x24($sp) -/* 102950 7F0CDE20 AFA60030 */ sw $a2, 0x30($sp) -/* 102954 7F0CDE24 AFA5002C */ sw $a1, 0x2c($sp) -/* 102958 7F0CDE28 AFA70034 */ sw $a3, 0x34($sp) -/* 10295C 7F0CDE2C 0FC3341E */ jal expland_c0DL_psuedocommands -/* 102960 7F0CDE30 00003025 */ move $a2, $zero -/* 102964 7F0CDE34 8FAE0038 */ lw $t6, 0x38($sp) -/* 102968 7F0CDE38 00402025 */ move $a0, $v0 -/* 10296C 7F0CDE3C 8FA5002C */ lw $a1, 0x2c($sp) -/* 102970 7F0CDE40 8FA60030 */ lw $a2, 0x30($sp) -/* 102974 7F0CDE44 8FA70034 */ lw $a3, 0x34($sp) -/* 102978 7F0CDE48 AFA00014 */ sw $zero, 0x14($sp) -/* 10297C 7F0CDE4C AFA00018 */ sw $zero, 0x18($sp) -/* 102980 7F0CDE50 0FC3350C */ jal sub_GAME_7F0CD430 -/* 102984 7F0CDE54 AFAE0010 */ sw $t6, 0x10($sp) -/* 102988 7F0CDE58 8FA5002C */ lw $a1, 0x2c($sp) -/* 10298C 7F0CDE5C 24010001 */ li $at, 1 -/* 102990 7F0CDE60 00402025 */ move $a0, $v0 -/* 102994 7F0CDE64 90AF000B */ lbu $t7, 0xb($a1) -/* 102998 7F0CDE68 8FA60030 */ lw $a2, 0x30($sp) -/* 10299C 7F0CDE6C 8FA70034 */ lw $a3, 0x34($sp) -/* 1029A0 7F0CDE70 000FC142 */ srl $t8, $t7, 5 -/* 1029A4 7F0CDE74 17010007 */ bne $t8, $at, .L7F0CDE94 -/* 1029A8 7F0CDE78 8FB90038 */ lw $t9, 0x38($sp) -/* 1029AC 7F0CDE7C 24080001 */ li $t0, 1 -/* 1029B0 7F0CDE80 AFA80014 */ sw $t0, 0x14($sp) -/* 1029B4 7F0CDE84 AFB90010 */ sw $t9, 0x10($sp) -/* 1029B8 7F0CDE88 0FC3350C */ jal sub_GAME_7F0CD430 -/* 1029BC 7F0CDE8C AFA00018 */ sw $zero, 0x18($sp) -/* 1029C0 7F0CDE90 00402025 */ move $a0, $v0 -.L7F0CDE94: -/* 1029C4 7F0CDE94 8FBF0024 */ lw $ra, 0x24($sp) -/* 1029C8 7F0CDE98 27BD0028 */ addiu $sp, $sp, 0x28 -/* 1029CC 7F0CDE9C 00801025 */ move $v0, $a0 -/* 1029D0 7F0CDEA0 03E00008 */ jr $ra -/* 1029D4 7F0CDEA4 00000000 */ nop -) -#endif - - - -#ifdef NONMATCHING -Gfx * sub_GAME_7F0CDEA8(Gfx *DL,u8 *arg1,s32 arg2,s32 arg3,s32 arg4,u32 arg5,u32 arg6,u32 arg7,u32 arg8) +Gfx * texHandleType1(Gfx *gdl,struct tex *tex1,s32 smode,s32 tmode,s32 offset,struct tex *tex2,u32 shifts,u32 shiftt,u32 min) { - u32 uVar1; + u32 size; - uVar1 = texGetSizeInBytes(arg5,NULL); - DL = sub_GAME_7F0CD7AC(DL,arg5); - gDPTileSync(DL++); - DL = expland_c0DL_psuedocommands(DL,arg1,uVar1); - DL = sub_GAME_7F0CCC50(DL,arg5,arg4,arg6,arg7,arg8); - DL = sub_GAME_7F0CD430(DL,arg1,arg2,arg3,arg4,1,uVar1); - //102a94: srl t4,t3,0x5 | 102a94: sra t4,t3,0x5 - if (arg1[0xb] >> 5 == 1) { - DL = sub_GAME_7F0CD430(DL,arg1,arg2,arg3,arg4,2,uVar1); + size = texGetSizeInBytes(tex2,0); + gdl = texWriteLoadToTmemZero(gdl,tex2); + gDPTileSync(gdl++); + gdl = texWriteLoadToTmemAddr(gdl,tex1,size); + gdl = texWriteTileFromDefinition(gdl,tex2,offset,shifts,shiftt,min); + gdl = texWriteTileLods(gdl,tex1,smode,tmode,offset,1,size); + if (tex1->maxlod == 1) { + gdl = texWriteTileLods(gdl,tex1,smode,tmode,offset,2,size); } - return DL; + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0CDEA8 -/* 1029D8 7F0CDEA8 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 1029DC 7F0CDEAC AFB00028 */ sw $s0, 0x28($sp) -/* 1029E0 7F0CDEB0 00808025 */ move $s0, $a0 -/* 1029E4 7F0CDEB4 AFBF002C */ sw $ra, 0x2c($sp) -/* 1029E8 7F0CDEB8 AFA5003C */ sw $a1, 0x3c($sp) -/* 1029EC 7F0CDEBC AFA60040 */ sw $a2, 0x40($sp) -/* 1029F0 7F0CDEC0 AFA70044 */ sw $a3, 0x44($sp) -/* 1029F4 7F0CDEC4 00002825 */ move $a1, $zero -/* 1029F8 7F0CDEC8 0FC33265 */ jal texGetSizeInBytes -/* 1029FC 7F0CDECC 8FA4004C */ lw $a0, 0x4c($sp) -/* 102A00 7F0CDED0 AFA20034 */ sw $v0, 0x34($sp) -/* 102A04 7F0CDED4 02002025 */ move $a0, $s0 -/* 102A08 7F0CDED8 0FC335EB */ jal sub_GAME_7F0CD7AC -/* 102A0C 7F0CDEDC 8FA5004C */ lw $a1, 0x4c($sp) -/* 102A10 7F0CDEE0 3C0EE800 */ lui $t6, 0xe800 -/* 102A14 7F0CDEE4 AC4E0000 */ sw $t6, ($v0) -/* 102A18 7F0CDEE8 AC400004 */ sw $zero, 4($v0) -/* 102A1C 7F0CDEEC 8FA60034 */ lw $a2, 0x34($sp) -/* 102A20 7F0CDEF0 8FA5003C */ lw $a1, 0x3c($sp) -/* 102A24 7F0CDEF4 0FC3341E */ jal expland_c0DL_psuedocommands -/* 102A28 7F0CDEF8 24440008 */ addiu $a0, $v0, 8 -/* 102A2C 7F0CDEFC 8FAF0054 */ lw $t7, 0x54($sp) -/* 102A30 7F0CDF00 8FB80058 */ lw $t8, 0x58($sp) -/* 102A34 7F0CDF04 00402025 */ move $a0, $v0 -/* 102A38 7F0CDF08 8FA5004C */ lw $a1, 0x4c($sp) -/* 102A3C 7F0CDF0C 8FA60048 */ lw $a2, 0x48($sp) -/* 102A40 7F0CDF10 8FA70050 */ lw $a3, 0x50($sp) -/* 102A44 7F0CDF14 AFAF0010 */ sw $t7, 0x10($sp) -/* 102A48 7F0CDF18 0FC33314 */ jal sub_GAME_7F0CCC50 -/* 102A4C 7F0CDF1C AFB80014 */ sw $t8, 0x14($sp) -/* 102A50 7F0CDF20 8FB90048 */ lw $t9, 0x48($sp) -/* 102A54 7F0CDF24 8FA90034 */ lw $t1, 0x34($sp) -/* 102A58 7F0CDF28 24080001 */ li $t0, 1 -/* 102A5C 7F0CDF2C AFA80014 */ sw $t0, 0x14($sp) -/* 102A60 7F0CDF30 00402025 */ move $a0, $v0 -/* 102A64 7F0CDF34 8FA5003C */ lw $a1, 0x3c($sp) -/* 102A68 7F0CDF38 8FA60040 */ lw $a2, 0x40($sp) -/* 102A6C 7F0CDF3C 8FA70044 */ lw $a3, 0x44($sp) -/* 102A70 7F0CDF40 AFB90010 */ sw $t9, 0x10($sp) -/* 102A74 7F0CDF44 0FC3350C */ jal sub_GAME_7F0CD430 -/* 102A78 7F0CDF48 AFA90018 */ sw $t1, 0x18($sp) -/* 102A7C 7F0CDF4C 8FAA003C */ lw $t2, 0x3c($sp) -/* 102A80 7F0CDF50 24010001 */ li $at, 1 -/* 102A84 7F0CDF54 00408025 */ move $s0, $v0 -/* 102A88 7F0CDF58 914B000B */ lbu $t3, 0xb($t2) -/* 102A8C 7F0CDF5C 00402025 */ move $a0, $v0 -/* 102A90 7F0CDF60 8FA60040 */ lw $a2, 0x40($sp) -/* 102A94 7F0CDF64 000B6142 */ srl $t4, $t3, 5 -/* 102A98 7F0CDF68 1581000A */ bne $t4, $at, .L7F0CDF94 -/* 102A9C 7F0CDF6C 01402825 */ move $a1, $t2 -/* 102AA0 7F0CDF70 8FAD0048 */ lw $t5, 0x48($sp) -/* 102AA4 7F0CDF74 8FAF0034 */ lw $t7, 0x34($sp) -/* 102AA8 7F0CDF78 240E0002 */ li $t6, 2 -/* 102AAC 7F0CDF7C AFAE0014 */ sw $t6, 0x14($sp) -/* 102AB0 7F0CDF80 8FA70044 */ lw $a3, 0x44($sp) -/* 102AB4 7F0CDF84 AFAD0010 */ sw $t5, 0x10($sp) -/* 102AB8 7F0CDF88 0FC3350C */ jal sub_GAME_7F0CD430 -/* 102ABC 7F0CDF8C AFAF0018 */ sw $t7, 0x18($sp) -/* 102AC0 7F0CDF90 00408025 */ move $s0, $v0 -.L7F0CDF94: -/* 102AC4 7F0CDF94 8FBF002C */ lw $ra, 0x2c($sp) -/* 102AC8 7F0CDF98 02001025 */ move $v0, $s0 -/* 102ACC 7F0CDF9C 8FB00028 */ lw $s0, 0x28($sp) -/* 102AD0 7F0CDFA0 03E00008 */ jr $ra -/* 102AD4 7F0CDFA4 27BD0038 */ addiu $sp, $sp, 0x38 -) -#endif - - - -#ifdef NONMATCHING -Gfx * sub_GAME_7F0CDFA8(Gfx *DL,u8 *imageID,s32 arg2,s32 arg3,s32 arg4,u32 arg5,u32 arg6,u32 arg7) +Gfx * texHandleType0(Gfx *gdl,struct tex *tex,s32 smode,s32 tmode,s32 offset,u32 shifts,u32 shiftt,u32 min) { - DL = expland_c0DL_psuedocommands(DL,imageID,0); - DL = sub_GAME_7F0CCC50(DL,imageID,arg4,arg5,arg6,arg7); - DL = sub_GAME_7F0CD430(DL,imageID,arg2,arg3,arg4,1,0); - //102b50: srl t1,t0,0x5 | 102b50: sra t1,t0,0x5 - if (imageID[0xb] >> 5 == 1) { - DL = sub_GAME_7F0CD430(DL,imageID,arg2,arg3,arg4,2,0); + gdl = texWriteLoadToTmemAddr(gdl,tex,0); + gdl = texWriteTileFromDefinition(gdl,tex,offset,shifts,shiftt,min); + gdl = texWriteTileLods(gdl,tex,smode,tmode,offset,1,0); + if (tex->maxlod == 1) { + gdl = texWriteTileLods(gdl,tex,smode,tmode,offset,2,0); } - return DL; + return gdl; } -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0CDFA8 -/* 102AD8 7F0CDFA8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 102ADC 7F0CDFAC AFBF002C */ sw $ra, 0x2c($sp) -/* 102AE0 7F0CDFB0 AFB00028 */ sw $s0, 0x28($sp) -/* 102AE4 7F0CDFB4 AFA60038 */ sw $a2, 0x38($sp) -/* 102AE8 7F0CDFB8 00A08025 */ move $s0, $a1 -/* 102AEC 7F0CDFBC AFA7003C */ sw $a3, 0x3c($sp) -/* 102AF0 7F0CDFC0 0FC3341E */ jal expland_c0DL_psuedocommands -/* 102AF4 7F0CDFC4 00003025 */ move $a2, $zero -/* 102AF8 7F0CDFC8 8FAE0048 */ lw $t6, 0x48($sp) -/* 102AFC 7F0CDFCC 8FAF004C */ lw $t7, 0x4c($sp) -/* 102B00 7F0CDFD0 00402025 */ move $a0, $v0 -/* 102B04 7F0CDFD4 02002825 */ move $a1, $s0 -/* 102B08 7F0CDFD8 8FA60040 */ lw $a2, 0x40($sp) -/* 102B0C 7F0CDFDC 8FA70044 */ lw $a3, 0x44($sp) -/* 102B10 7F0CDFE0 AFAE0010 */ sw $t6, 0x10($sp) -/* 102B14 7F0CDFE4 0FC33314 */ jal sub_GAME_7F0CCC50 -/* 102B18 7F0CDFE8 AFAF0014 */ sw $t7, 0x14($sp) -/* 102B1C 7F0CDFEC 8FB80040 */ lw $t8, 0x40($sp) -/* 102B20 7F0CDFF0 24190001 */ li $t9, 1 -/* 102B24 7F0CDFF4 AFB90014 */ sw $t9, 0x14($sp) -/* 102B28 7F0CDFF8 00402025 */ move $a0, $v0 -/* 102B2C 7F0CDFFC 02002825 */ move $a1, $s0 -/* 102B30 7F0CE000 8FA60038 */ lw $a2, 0x38($sp) -/* 102B34 7F0CE004 8FA7003C */ lw $a3, 0x3c($sp) -/* 102B38 7F0CE008 AFA00018 */ sw $zero, 0x18($sp) -/* 102B3C 7F0CE00C 0FC3350C */ jal sub_GAME_7F0CD430 -/* 102B40 7F0CE010 AFB80010 */ sw $t8, 0x10($sp) -/* 102B44 7F0CE014 9208000B */ lbu $t0, 0xb($s0) -/* 102B48 7F0CE018 24010001 */ li $at, 1 -/* 102B4C 7F0CE01C 00402025 */ move $a0, $v0 -/* 102B50 7F0CE020 00084942 */ srl $t1, $t0, 5 -/* 102B54 7F0CE024 1521000A */ bne $t1, $at, .L7F0CE050 -/* 102B58 7F0CE028 02002825 */ move $a1, $s0 -/* 102B5C 7F0CE02C 8FAA0040 */ lw $t2, 0x40($sp) -/* 102B60 7F0CE030 240B0002 */ li $t3, 2 -/* 102B64 7F0CE034 AFAB0014 */ sw $t3, 0x14($sp) -/* 102B68 7F0CE038 8FA60038 */ lw $a2, 0x38($sp) -/* 102B6C 7F0CE03C 8FA7003C */ lw $a3, 0x3c($sp) -/* 102B70 7F0CE040 AFA00018 */ sw $zero, 0x18($sp) -/* 102B74 7F0CE044 0FC3350C */ jal sub_GAME_7F0CD430 -/* 102B78 7F0CE048 AFAA0010 */ sw $t2, 0x10($sp) -/* 102B7C 7F0CE04C 00402025 */ move $a0, $v0 -.L7F0CE050: -/* 102B80 7F0CE050 8FBF002C */ lw $ra, 0x2c($sp) -/* 102B84 7F0CE054 8FB00028 */ lw $s0, 0x28($sp) -/* 102B88 7F0CE058 27BD0030 */ addiu $sp, $sp, 0x30 -/* 102B8C 7F0CE05C 03E00008 */ jr $ra -/* 102B90 7F0CE060 00801025 */ move $v0, $a0 -) -#endif - - - -Gfx * sub_GAME_7F0CE064(Gfx *DL,u32 *arg1,s32 arg2,s32 arg3,s32 arg4) +Gfx * texHandleType4(Gfx *DL,u32 *arg1,s32 arg2,s32 arg3,s32 arg4) { - DL = sub_GAME_7F0CD7AC(DL,arg1); - DL = sub_GAME_7F0CDB64(DL,arg1,arg2,arg3,arg4,0); + DL = texWriteLoadToTmemZero(DL,arg1); + DL = texWriteTile(DL,arg1,arg2,arg3,arg4,0); return DL; } -Gfx * sub_GAME_7F0CE0AC(Gfx *DL,u32 *arg1,s32 arg2,s32 arg3,s32 arg4) +Gfx * texHandleType3(Gfx *DL,u32 *arg1,s32 arg2,s32 arg3,s32 arg4) { - DL = sub_GAME_7F0CD7AC(DL,arg1); - DL = sub_GAME_7F0CDB64(DL,arg1,arg2,arg3,arg4,0); - DL = sub_GAME_7F0CDB64(DL,arg1,arg2,arg3,arg4,1); + DL = texWriteLoadToTmemZero(DL,arg1); + DL = texWriteTile(DL,arg1,arg2,arg3,arg4,0); + DL = texWriteTile(DL,arg1,arg2,arg3,arg4,1); return DL; } @@ -1560,7 +1438,7 @@ Gfx * sub_GAME_7F0CE0AC(Gfx *DL,u32 *arg1,s32 arg2,s32 arg3,s32 arg4) #ifdef NONMATCHING -void process_microcode_sort_display_modes_expand_image_calls(void) { +void texLoadFromGdl(void) { } #else @@ -1595,7 +1473,7 @@ glabel jpt_tlb_ptr_C0_image_recall_types .word .L7F0CE584 .word .L7F0CE5BC .text -glabel process_microcode_sort_display_modes_expand_image_calls +glabel texLoadFromGdl /* 102C48 7F0CE118 27BDFF68 */ addiu $sp, $sp, -0x98 /* 102C4C 7F0CE11C AFB20038 */ sw $s2, 0x38($sp) /* 102C50 7F0CE120 AFBF0054 */ sw $ra, 0x54($sp) @@ -1697,7 +1575,7 @@ glabel process_microcode_sort_display_modes_expand_image_calls /* 102DAC 7F0CE27C AFA0005C */ sw $zero, 0x5c($sp) /* 102DB0 7F0CE280 02002025 */ move $a0, $s0 /* 102DB4 7F0CE284 8FA5008C */ lw $a1, 0x8c($sp) -/* 102DB8 7F0CE288 0FC333EF */ jal sub_GAME_7F0CCFBC +/* 102DB8 7F0CE288 0FC333EF */ jal texWriteTextureCmd /* 102DBC 7F0CE28C 00403025 */ move $a2, $v0 /* 102DC0 7F0CE290 8E230000 */ lw $v1, ($s1) /* 102DC4 7F0CE294 00408025 */ move $s0, $v0 @@ -1776,7 +1654,7 @@ glabel process_microcode_sort_display_modes_expand_image_calls /* 102EE0 7F0CE3B0 02EEC823 */ subu $t9, $s7, $t6 /* 102EE4 7F0CE3B4 AFB90018 */ sw $t9, 0x18($sp) /* 102EE8 7F0CE3B8 90580000 */ lbu $t8, ($v0) -/* 102EEC 7F0CE3BC 0FC337EA */ jal sub_GAME_7F0CDFA8 +/* 102EEC 7F0CE3BC 0FC337EA */ jal texHandleType0 /* 102EF0 7F0CE3C0 AFB8001C */ sw $t8, 0x1c($sp) /* 102EF4 7F0CE3C4 3C0DBA00 */ lui $t5, (0xBA001402 >> 16) # lui $t5, 0xba00 /* 102EF8 7F0CE3C8 35AD1402 */ ori $t5, (0xBA001402 & 0xFFFF) # ori $t5, $t5, 0x1402 @@ -1800,7 +1678,7 @@ glabel process_microcode_sort_display_modes_expand_image_calls /* 102F3C 7F0CE40C AFA80010 */ sw $t0, 0x10($sp) /* 102F40 7F0CE410 AFAA0014 */ sw $t2, 0x14($sp) /* 102F44 7F0CE414 AFAB0018 */ sw $t3, 0x18($sp) -/* 102F48 7F0CE418 0FC337EA */ jal sub_GAME_7F0CDFA8 +/* 102F48 7F0CE418 0FC337EA */ jal texHandleType0 /* 102F4C 7F0CE41C AFA9001C */ sw $t1, 0x1c($sp) /* 102F50 7F0CE420 10000073 */ b .L7F0CE5F0 /* 102F54 7F0CE424 00408025 */ move $s0, $v0 @@ -1837,7 +1715,7 @@ glabel process_microcode_sort_display_modes_expand_image_calls /* 102FCC 7F0CE49C AFB90018 */ sw $t9, 0x18($sp) /* 102FD0 7F0CE4A0 AFAE0010 */ sw $t6, 0x10($sp) /* 102FD4 7F0CE4A4 AFA90020 */ sw $t1, 0x20($sp) -/* 102FD8 7F0CE4A8 0FC337AA */ jal sub_GAME_7F0CDEA8 +/* 102FD8 7F0CE4A8 0FC337AA */ jal texHandleType1 /* 102FDC 7F0CE4AC 02402825 */ move $a1, $s2 /* 102FE0 7F0CE4B0 1000004F */ b .L7F0CE5F0 /* 102FE4 7F0CE4B4 00408025 */ move $s0, $v0 @@ -1868,7 +1746,7 @@ glabel process_microcode_sort_display_modes_expand_image_calls /* 103044 7F0CE514 02ED7823 */ subu $t7, $s7, $t5 /* 103048 7F0CE518 AFAF0018 */ sw $t7, 0x18($sp) /* 10304C 7F0CE51C 904E0000 */ lbu $t6, ($v0) -/* 103050 7F0CE520 0FC337EA */ jal sub_GAME_7F0CDFA8 +/* 103050 7F0CE520 0FC337EA */ jal texHandleType0 /* 103054 7F0CE524 AFAE001C */ sw $t6, 0x1c($sp) /* 103058 7F0CE528 3C19BA00 */ lui $t9, (0xBA001402 >> 16) # lui $t9, 0xba00 /* 10305C 7F0CE52C 37391402 */ ori $t9, (0xBA001402 & 0xFFFF) # ori $t9, $t9, 0x1402 @@ -1890,7 +1768,7 @@ glabel process_microcode_sort_display_modes_expand_image_calls .L7F0CE56C: /* 10309C 7F0CE56C 02002025 */ move $a0, $s0 /* 1030A0 7F0CE570 02402825 */ move $a1, $s2 -/* 1030A4 7F0CE574 0FC33786 */ jal sub_GAME_7F0CDE18 +/* 1030A4 7F0CE574 0FC33786 */ jal texHandleType2 /* 1030A8 7F0CE578 AFA80010 */ sw $t0, 0x10($sp) /* 1030AC 7F0CE57C 1000001C */ b .L7F0CE5F0 /* 1030B0 7F0CE580 00408025 */ move $s0, $v0 @@ -1905,7 +1783,7 @@ glabel process_microcode_sort_display_modes_expand_image_calls /* 1030D0 7F0CE5A0 01A03825 */ move $a3, $t5 /* 1030D4 7F0CE5A4 AFAF0010 */ sw $t7, 0x10($sp) /* 1030D8 7F0CE5A8 02002025 */ move $a0, $s0 -/* 1030DC 7F0CE5AC 0FC3382B */ jal sub_GAME_7F0CE0AC +/* 1030DC 7F0CE5AC 0FC3382B */ jal texHandleType3 /* 1030E0 7F0CE5B0 02402825 */ move $a1, $s2 /* 1030E4 7F0CE5B4 1000000E */ b .L7F0CE5F0 /* 1030E8 7F0CE5B8 00408025 */ move $s0, $v0 @@ -1920,7 +1798,7 @@ glabel process_microcode_sort_display_modes_expand_image_calls /* 103108 7F0CE5D8 03203825 */ move $a3, $t9 /* 10310C 7F0CE5DC AFB80010 */ sw $t8, 0x10($sp) /* 103110 7F0CE5E0 02002025 */ move $a0, $s0 -/* 103114 7F0CE5E4 0FC33819 */ jal sub_GAME_7F0CE064 +/* 103114 7F0CE5E4 0FC33819 */ jal texHandleType4 /* 103118 7F0CE5E8 02402825 */ move $a1, $s2 /* 10311C 7F0CE5EC 00408025 */ move $s0, $v0 def_7F0CE2B4: @@ -2049,7 +1927,10 @@ def_7F0CE2B4: #endif -void sub_GAME_7F0CE794(Gfx *arg0, Gfx *arg1, s32 arg2) +/*** + * NTSC address 0x7F0CE794. +*/ +void texCopyGdls(Gfx *arg0, Gfx *arg1, s32 arg2) { arg2 = (arg2 >> 3); arg0 = arg0 + (arg2 - 1); diff --git a/src/game/unk_0CC4C0.h b/src/game/unk_0CC4C0.h index 0befdc2..62f2bdd 100644 --- a/src/game/unk_0CC4C0.h +++ b/src/game/unk_0CC4C0.h @@ -2,6 +2,8 @@ #define _UNK_0CC4C0_H_ #include +#include "image.h" + struct image_sound { /** @@ -24,7 +26,7 @@ struct image_sound typedef struct s_bss_8008D148 { - s32 unk_0; + s32 inuse; s32 unk_4; s32 unk_8; s32 unk_C; @@ -39,7 +41,7 @@ typedef struct s_bss_8008D148 typedef struct s_bss_8008D2A8 { - s32 unk_0; + s32 inuse; s32 unk_4; s32 unk_8; s32 unk_C; @@ -49,4 +51,9 @@ typedef struct s_bss_8008D2A8 extern struct image_sound *D_8004E86C[]; +s32 texGetHeightAtLod(struct tex *tex, s32 lod); +void texGetDepthAndSize(struct tex *tex, s32 *deptharg, s32 *lenarg); + +void texCopyGdls(Gfx *arg0, Gfx *arg1, s32 arg2); + #endif diff --git a/src/game/unk_0D1AC0.c b/src/game/unk_0D1AC0.c deleted file mode 100644 index 019c68f..0000000 --- a/src/game/unk_0D1AC0.c +++ /dev/null @@ -1,650 +0,0 @@ -#include - - -// data -f32 D_8004EAF0 = 0.0f; -f32 D_8004EAF4 = 0.0f; - - - -Gfx * sub_GAME_7F0D1AC0(Gfx *DL) -{ - D_8004EAF0 = D_8004EAF4 = 0.0f; - - gDPSetTextureFilter(DL++, G_TF_POINT); - gDPSetColorDither(DL++, G_CD_DISABLE); - gSPClearGeometryMode(DL++, G_ZBUFFER ); - gDPPipeSync(DL++); - gDPSetTexturePersp(DL++, G_TP_NONE); - gDPSetCycleType(DL++, G_CYC_FILL); - gDPSetRenderMode(DL++, G_RM_PASS, G_RM_OPA_SURF2); - gDPPipelineMode(DL++, G_PM_1PRIMITIVE); - return DL++; -} - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0D1B94(s32 arg1, ?32 argE) { - // Node 0 - sub_GAME_7F0D1BD0(arg1, arg1, argE, 2, 1); - return; - // (possible return value: sub_GAME_7F0D1BD0(arg1, arg1, argE, 2, 1)) -} - -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0D1B94 -/* 1066C4 7F0D1B94 44856000 */ mtc1 $a1, $f12 -/* 1066C8 7F0D1B98 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 1066CC 7F0D1B9C 8FAE0038 */ lw $t6, 0x38($sp) -/* 1066D0 7F0D1BA0 AFBF0024 */ sw $ra, 0x24($sp) -/* 1066D4 7F0D1BA4 240F0002 */ li $t7, 2 -/* 1066D8 7F0D1BA8 24180001 */ li $t8, 1 -/* 1066DC 7F0D1BAC 44056000 */ mfc1 $a1, $f12 -/* 1066E0 7F0D1BB0 AFB80018 */ sw $t8, 0x18($sp) -/* 1066E4 7F0D1BB4 AFAF0014 */ sw $t7, 0x14($sp) -/* 1066E8 7F0D1BB8 0FC346F4 */ jal sub_GAME_7F0D1BD0 -/* 1066EC 7F0D1BBC AFAE0010 */ sw $t6, 0x10($sp) -/* 1066F0 7F0D1BC0 8FBF0024 */ lw $ra, 0x24($sp) -/* 1066F4 7F0D1BC4 27BD0028 */ addiu $sp, $sp, 0x28 -/* 1066F8 7F0D1BC8 03E00008 */ jr $ra -/* 1066FC 7F0D1BCC 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0D1BD0(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0D1BD0 -/* 106700 7F0D1BD0 44856000 */ mtc1 $a1, $f12 -/* 106704 7F0D1BD4 44802000 */ mtc1 $zero, $f4 -/* 106708 7F0D1BD8 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 10670C 7F0D1BDC AFB2000C */ sw $s2, 0xc($sp) -/* 106710 7F0D1BE0 460C203C */ c.lt.s $f4, $f12 -/* 106714 7F0D1BE4 AFB10008 */ sw $s1, 8($sp) -/* 106718 7F0D1BE8 AFB00004 */ sw $s0, 4($sp) -/* 10671C 7F0D1BEC AFA60018 */ sw $a2, 0x18($sp) -/* 106720 7F0D1BF0 45000070 */ bc1f .L7F0D1DB4 -/* 106724 7F0D1BF4 AFA7001C */ sw $a3, 0x1c($sp) -/* 106728 7F0D1BF8 3C058005 */ lui $a1, %hi(D_8004EAF4) -/* 10672C 7F0D1BFC 24A5EAF4 */ addiu $a1, %lo(D_8004EAF4) # addiu $a1, $a1, -0x150c -/* 106730 7F0D1C00 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 106734 7F0D1C04 44817000 */ mtc1 $at, $f14 -/* 106738 7F0D1C08 C4A00000 */ lwc1 $f0, ($a1) -/* 10673C 7F0D1C0C 3C01435B */ li $at, 0x435B0000 # 219.000000 -/* 106740 7F0D1C10 44815000 */ mtc1 $at, $f10 -/* 106744 7F0D1C14 460E0183 */ div.s $f6, $f0, $f14 -/* 106748 7F0D1C18 00804025 */ move $t0, $a0 -/* 10674C 7F0D1C1C 3C18F700 */ lui $t8, 0xf700 -/* 106750 7F0D1C20 AD180000 */ sw $t8, ($t0) -/* 106754 7F0D1C24 460A0402 */ mul.s $f16, $f0, $f10 -/* 106758 7F0D1C28 460C0080 */ add.s $f2, $f0, $f12 -/* 10675C 7F0D1C2C 8FB90018 */ lw $t9, 0x18($sp) -/* 106760 7F0D1C30 8FB8001C */ lw $t8, 0x1c($sp) -/* 106764 7F0D1C34 24840008 */ addiu $a0, $a0, 8 -/* 106768 7F0D1C38 00197200 */ sll $t6, $t9, 8 -/* 10676C 7F0D1C3C 31CFF800 */ andi $t7, $t6, 0xf800 -/* 106770 7F0D1C40 0018C8C0 */ sll $t9, $t8, 3 -/* 106774 7F0D1C44 332E07C0 */ andi $t6, $t9, 0x7c0 -/* 106778 7F0D1C48 8FB90020 */ lw $t9, 0x20($sp) -/* 10677C 7F0D1C4C 01EEC025 */ or $t8, $t7, $t6 -/* 106780 7F0D1C50 00197883 */ sra $t7, $t9, 2 -/* 106784 7F0D1C54 31EE003E */ andi $t6, $t7, 0x3e -/* 106788 7F0D1C58 030E4825 */ or $t1, $t8, $t6 -/* 10678C 7F0D1C5C 35390001 */ ori $t9, $t1, 1 -/* 106790 7F0D1C60 00197C00 */ sll $t7, $t9, 0x10 -/* 106794 7F0D1C64 01F9C025 */ or $t8, $t7, $t9 -/* 106798 7F0D1C68 460E8483 */ div.s $f18, $f16, $f14 -/* 10679C 7F0D1C6C AD180004 */ sw $t8, 4($t0) -/* 1067A0 7F0D1C70 4600320D */ trunc.w.s $f8, $f6 -/* 1067A4 7F0D1C74 44064000 */ mfc1 $a2, $f8 -/* 1067A8 7F0D1C78 00000000 */ nop -/* 1067AC 7F0D1C7C 00C01025 */ move $v0, $a2 -/* 1067B0 7F0D1C80 460E1183 */ div.s $f6, $f2, $f14 -/* 1067B4 7F0D1C84 4600910D */ trunc.w.s $f4, $f18 -/* 1067B8 7F0D1C88 44072000 */ mfc1 $a3, $f4 -/* 1067BC 7F0D1C8C 4600320D */ trunc.w.s $f8, $f6 -/* 1067C0 7F0D1C90 44034000 */ mfc1 $v1, $f8 -/* 1067C4 7F0D1C94 00000000 */ nop -/* 1067C8 7F0D1C98 0066082A */ slt $at, $v1, $a2 -/* 1067CC 7F0D1C9C 14200042 */ bnez $at, .L7F0D1DA8 -/* 1067D0 7F0D1CA0 28C10003 */ slti $at, $a2, 3 -/* 1067D4 7F0D1CA4 10200040 */ beqz $at, .L7F0D1DA8 -/* 1067D8 7F0D1CA8 3C01435B */ li $at, 0x435B0000 # 219.000000 -/* 1067DC 7F0D1CAC 44815000 */ mtc1 $at, $f10 -/* 1067E0 7F0D1CB0 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 1067E4 7F0D1CB4 44819000 */ mtc1 $at, $f18 -/* 1067E8 7F0D1CB8 460A1402 */ mul.s $f16, $f2, $f10 -/* 1067EC 7F0D1CBC 000240C0 */ sll $t0, $v0, 3 -/* 1067F0 7F0D1CC0 01024023 */ subu $t0, $t0, $v0 -/* 1067F4 7F0D1CC4 000840C0 */ sll $t0, $t0, 3 -/* 1067F8 7F0D1CC8 01024023 */ subu $t0, $t0, $v0 -/* 1067FC 7F0D1CCC 00084080 */ sll $t0, $t0, 2 -/* 106800 7F0D1CD0 01024023 */ subu $t0, $t0, $v0 -/* 106804 7F0D1CD4 46128103 */ div.s $f4, $f16, $f18 -/* 106808 7F0D1CD8 00E84823 */ subu $t1, $a3, $t0 -/* 10680C 7F0D1CDC 25290032 */ addiu $t1, $t1, 0x32 -/* 106810 7F0D1CE0 24120007 */ li $s2, 7 -/* 106814 7F0D1CE4 3C11F600 */ lui $s1, 0xf600 -/* 106818 7F0D1CE8 8FAD0028 */ lw $t5, 0x28($sp) -/* 10681C 7F0D1CEC 8FAC0024 */ lw $t4, 0x24($sp) -/* 106820 7F0D1CF0 4600218D */ trunc.w.s $f6, $f4 -/* 106824 7F0D1CF4 44063000 */ mfc1 $a2, $f6 -/* 106828 7F0D1CF8 00000000 */ nop -/* 10682C 7F0D1CFC 00C85823 */ subu $t3, $a2, $t0 -.L7F0D1D00: -/* 106830 7F0D1D00 256B0032 */ addiu $t3, $t3, 0x32 -/* 106834 7F0D1D04 29210032 */ slti $at, $t1, 0x32 -/* 106838 7F0D1D08 01203825 */ move $a3, $t1 -/* 10683C 7F0D1D0C 10200002 */ beqz $at, .L7F0D1D18 -/* 106840 7F0D1D10 01605025 */ move $t2, $t3 -/* 106844 7F0D1D14 24070032 */ li $a3, 50 -.L7F0D1D18: -/* 106848 7F0D1D18 2961010E */ slti $at, $t3, 0x10e -/* 10684C 7F0D1D1C 14200002 */ bnez $at, .L7F0D1D28 -/* 106850 7F0D1D20 250800DB */ addiu $t0, $t0, 0xdb -/* 106854 7F0D1D24 240A010D */ li $t2, 269 -.L7F0D1D28: -/* 106858 7F0D1D28 0147082A */ slt $at, $t2, $a3 -/* 10685C 7F0D1D2C 54200018 */ bnezl $at, .L7F0D1D90 -/* 106860 7F0D1D30 24420001 */ addiu $v0, $v0, 1 -/* 106864 7F0D1D34 00520019 */ multu $v0, $s2 -/* 106868 7F0D1D38 314F03FF */ andi $t7, $t2, 0x3ff -/* 10686C 7F0D1D3C 000FC380 */ sll $t8, $t7, 0xe -/* 106870 7F0D1D40 018DC821 */ addu $t9, $t4, $t5 -/* 106874 7F0D1D44 03117025 */ or $t6, $t8, $s1 -/* 106878 7F0D1D48 00805825 */ move $t3, $a0 -/* 10687C 7F0D1D4C 24840008 */ addiu $a0, $a0, 8 -/* 106880 7F0D1D50 00008012 */ mflo $s0 -/* 106884 7F0D1D54 03307821 */ addu $t7, $t9, $s0 -/* 106888 7F0D1D58 25F80011 */ addiu $t8, $t7, 0x11 -/* 10688C 7F0D1D5C 331903FF */ andi $t9, $t8, 0x3ff -/* 106890 7F0D1D60 00197880 */ sll $t7, $t9, 2 -/* 106894 7F0D1D64 01CFC025 */ or $t8, $t6, $t7 -/* 106898 7F0D1D68 AD780000 */ sw $t8, ($t3) -/* 10689C 7F0D1D6C 01B07821 */ addu $t7, $t5, $s0 -/* 1068A0 7F0D1D70 30F903FF */ andi $t9, $a3, 0x3ff -/* 1068A4 7F0D1D74 00197380 */ sll $t6, $t9, 0xe -/* 1068A8 7F0D1D78 25F80012 */ addiu $t8, $t7, 0x12 -/* 1068AC 7F0D1D7C 331903FF */ andi $t9, $t8, 0x3ff -/* 1068B0 7F0D1D80 00197880 */ sll $t7, $t9, 2 -/* 1068B4 7F0D1D84 01CFC025 */ or $t8, $t6, $t7 -/* 1068B8 7F0D1D88 AD780004 */ sw $t8, 4($t3) -/* 1068BC 7F0D1D8C 24420001 */ addiu $v0, $v0, 1 -.L7F0D1D90: -/* 1068C0 7F0D1D90 0062082A */ slt $at, $v1, $v0 -/* 1068C4 7F0D1D94 14200004 */ bnez $at, .L7F0D1DA8 -/* 1068C8 7F0D1D98 2529FF25 */ addiu $t1, $t1, -0xdb -/* 1068CC 7F0D1D9C 28410003 */ slti $at, $v0, 3 -/* 1068D0 7F0D1DA0 5420FFD7 */ bnezl $at, .L7F0D1D00 -/* 1068D4 7F0D1DA4 00C85823 */ subu $t3, $a2, $t0 -.L7F0D1DA8: -/* 1068D8 7F0D1DA8 C4A80000 */ lwc1 $f8, ($a1) -/* 1068DC 7F0D1DAC 460C4280 */ add.s $f10, $f8, $f12 -/* 1068E0 7F0D1DB0 E4AA0000 */ swc1 $f10, ($a1) -.L7F0D1DB4: -/* 1068E4 7F0D1DB4 8FB00004 */ lw $s0, 4($sp) -/* 1068E8 7F0D1DB8 8FB10008 */ lw $s1, 8($sp) -/* 1068EC 7F0D1DBC 8FB2000C */ lw $s2, 0xc($sp) -/* 1068F0 7F0D1DC0 27BD0010 */ addiu $sp, $sp, 0x10 -/* 1068F4 7F0D1DC4 03E00008 */ jr $ra -/* 1068F8 7F0D1DC8 00801025 */ move $v0, $a0 -) -#endif - - - - - -void sub_GAME_7F0D1DCC(f32 arg0) { - if (0.0f < arg0) { - D_8004EAF4 = (f32) (D_8004EAF4 + arg0); - return; - } -} - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0D1DFC(s32 arg1, ?32 argC) { - // Node 0 - sub_GAME_7F0D1B94(arg1, ((D_8004EAF0 + arg1) - D_8004EAF4), argC); - return; - // (possible return value: sub_GAME_7F0D1B94(arg1, ((D_8004EAF0 + arg1) - D_8004EAF4), argC)) - // IDA: return sub_GAME_7F0D1B94(a1, (float)(D_8004EAF0 + a2) - D_8004EAF4, a3, a4, a5); -} - -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0D1DFC -/* 10692C 7F0D1DFC 3C018005 */ lui $at, %hi(D_8004EAF0) -/* 106930 7F0D1E00 44856000 */ mtc1 $a1, $f12 -/* 106934 7F0D1E04 C424EAF0 */ lwc1 $f4, %lo(D_8004EAF0)($at) -/* 106938 7F0D1E08 3C018005 */ lui $at, %hi(D_8004EAF4) -/* 10693C 7F0D1E0C C428EAF4 */ lwc1 $f8, %lo(D_8004EAF4)($at) -/* 106940 7F0D1E10 460C2180 */ add.s $f6, $f4, $f12 -/* 106944 7F0D1E14 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 106948 7F0D1E18 8FAE0030 */ lw $t6, 0x30($sp) -/* 10694C 7F0D1E1C AFBF001C */ sw $ra, 0x1c($sp) -/* 106950 7F0D1E20 46083281 */ sub.s $f10, $f6, $f8 -/* 106954 7F0D1E24 AFAE0010 */ sw $t6, 0x10($sp) -/* 106958 7F0D1E28 44055000 */ mfc1 $a1, $f10 -/* 10695C 7F0D1E2C 0FC346E5 */ jal sub_GAME_7F0D1B94 -/* 106960 7F0D1E30 00000000 */ nop -/* 106964 7F0D1E34 8FBF001C */ lw $ra, 0x1c($sp) -/* 106968 7F0D1E38 27BD0020 */ addiu $sp, $sp, 0x20 -/* 10696C 7F0D1E3C 03E00008 */ jr $ra -/* 106970 7F0D1E40 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0D1E44(s32 arg1, ?32 argE, ?32 argF, ?32 arg10) { - // Node 0 - sub_GAME_7F0D1BD0(arg1, ((D_8004EAF0 + arg1) - D_8004EAF4), argE, argF, arg10); - return; - // (possible return value: sub_GAME_7F0D1BD0(arg1, ((D_8004EAF0 + arg1) - D_8004EAF4), argE, argF, arg10)) - //IDA: return sub_GAME_7F0D1BD0(a1, (float)(D_8004EAF0 + a2) - D_8004EAF4, a3, a4, a5, a6, a7); -} - -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0D1E44 -/* 106974 7F0D1E44 3C018005 */ lui $at, %hi(D_8004EAF0) -/* 106978 7F0D1E48 44856000 */ mtc1 $a1, $f12 -/* 10697C 7F0D1E4C C424EAF0 */ lwc1 $f4, %lo(D_8004EAF0)($at) -/* 106980 7F0D1E50 3C018005 */ lui $at, %hi(D_8004EAF4) -/* 106984 7F0D1E54 C428EAF4 */ lwc1 $f8, %lo(D_8004EAF4)($at) -/* 106988 7F0D1E58 460C2180 */ add.s $f6, $f4, $f12 -/* 10698C 7F0D1E5C 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 106990 7F0D1E60 8FAE0038 */ lw $t6, 0x38($sp) -/* 106994 7F0D1E64 8FAF003C */ lw $t7, 0x3c($sp) -/* 106998 7F0D1E68 46083281 */ sub.s $f10, $f6, $f8 -/* 10699C 7F0D1E6C 8FB80040 */ lw $t8, 0x40($sp) -/* 1069A0 7F0D1E70 AFBF0024 */ sw $ra, 0x24($sp) -/* 1069A4 7F0D1E74 AFAE0010 */ sw $t6, 0x10($sp) -/* 1069A8 7F0D1E78 44055000 */ mfc1 $a1, $f10 -/* 1069AC 7F0D1E7C AFAF0014 */ sw $t7, 0x14($sp) -/* 1069B0 7F0D1E80 0FC346F4 */ jal sub_GAME_7F0D1BD0 -/* 1069B4 7F0D1E84 AFB80018 */ sw $t8, 0x18($sp) -/* 1069B8 7F0D1E88 8FBF0024 */ lw $ra, 0x24($sp) -/* 1069BC 7F0D1E8C 27BD0028 */ addiu $sp, $sp, 0x28 -/* 1069C0 7F0D1E90 03E00008 */ jr $ra -/* 1069C4 7F0D1E94 00000000 */ nop -) -#endif - - - - - -#ifdef NONMATCHING -void sub_GAME_7F0D1E98(void) { - -} -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0D1E98 -/* 1069C8 7F0D1E98 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 1069CC 7F0D1E9C 44810000 */ mtc1 $at, $f0 -/* 1069D0 7F0D1EA0 3C018005 */ lui $at, %hi(D_8004EAF4) -/* 1069D4 7F0D1EA4 C424EAF4 */ lwc1 $f4, %lo(D_8004EAF4)($at) -/* 1069D8 7F0D1EA8 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 1069DC 7F0D1EAC AFBF002C */ sw $ra, 0x2c($sp) -/* 1069E0 7F0D1EB0 46002183 */ div.s $f6, $f4, $f0 -/* 1069E4 7F0D1EB4 AFBE0028 */ sw $fp, 0x28($sp) -/* 1069E8 7F0D1EB8 AFB70024 */ sw $s7, 0x24($sp) -/* 1069EC 7F0D1EBC AFB60020 */ sw $s6, 0x20($sp) -/* 1069F0 7F0D1EC0 AFB5001C */ sw $s5, 0x1c($sp) -/* 1069F4 7F0D1EC4 AFB40018 */ sw $s4, 0x18($sp) -/* 1069F8 7F0D1EC8 AFB30014 */ sw $s3, 0x14($sp) -/* 1069FC 7F0D1ECC AFB20010 */ sw $s2, 0x10($sp) -/* 106A00 7F0D1ED0 AFB1000C */ sw $s1, 0xc($sp) -/* 106A04 7F0D1ED4 AFB00008 */ sw $s0, 8($sp) -/* 106A08 7F0D1ED8 00801025 */ move $v0, $a0 -/* 106A0C 7F0D1EDC 3C0FF700 */ lui $t7, 0xf700 -/* 106A10 7F0D1EE0 AC4F0000 */ sw $t7, ($v0) -/* 106A14 7F0D1EE4 000670C0 */ sll $t6, $a2, 3 -/* 106A18 7F0D1EE8 31CF07C0 */ andi $t7, $t6, 0x7c0 -/* 106A1C 7F0D1EEC 0005C200 */ sll $t8, $a1, 8 -/* 106A20 7F0D1EF0 3319F800 */ andi $t9, $t8, 0xf800 -/* 106A24 7F0D1EF4 032FC025 */ or $t8, $t9, $t7 -/* 106A28 7F0D1EF8 00077083 */ sra $t6, $a3, 2 -/* 106A2C 7F0D1EFC 31D9003E */ andi $t9, $t6, 0x3e -/* 106A30 7F0D1F00 03191825 */ or $v1, $t8, $t9 -/* 106A34 7F0D1F04 346F0001 */ ori $t7, $v1, 1 -/* 106A38 7F0D1F08 000F7400 */ sll $t6, $t7, 0x10 -/* 106A3C 7F0D1F0C 4600320D */ trunc.w.s $f8, $f6 -/* 106A40 7F0D1F10 01CFC025 */ or $t8, $t6, $t7 -/* 106A44 7F0D1F14 AC580004 */ sw $t8, 4($v0) -/* 106A48 7F0D1F18 24840008 */ addiu $a0, $a0, 8 -/* 106A4C 7F0D1F1C 44084000 */ mfc1 $t0, $f8 -/* 106A50 7F0D1F20 00000000 */ nop -/* 106A54 7F0D1F24 050200F2 */ bltzl $t0, .L7F0D22F0 -/* 106A58 7F0D1F28 8FBF002C */ lw $ra, 0x2c($sp) -/* 106A5C 7F0D1F2C 44805000 */ mtc1 $zero, $f10 -/* 106A60 7F0D1F30 3C01435B */ li $at, 0x435B0000 # 219.000000 -/* 106A64 7F0D1F34 44819000 */ mtc1 $at, $f18 -/* 106A68 7F0D1F38 46805420 */ cvt.s.w $f16, $f10 -/* 106A6C 7F0D1F3C 24180001 */ li $t8, 1 -/* 106A70 7F0D1F40 44985000 */ mtc1 $t8, $f10 -/* 106A74 7F0D1F44 3C01F600 */ lui $at, 0xf600 -/* 106A78 7F0D1F48 24180002 */ li $t8, 2 -/* 106A7C 7F0D1F4C 000080C0 */ sll $s0, $zero, 3 -/* 106A80 7F0D1F50 46128102 */ mul.s $f4, $f16, $f18 -/* 106A84 7F0D1F54 02008023 */ subu $s0, $s0, $zero -/* 106A88 7F0D1F58 000848C0 */ sll $t1, $t0, 3 -/* 106A8C 7F0D1F5C 01284823 */ subu $t1, $t1, $t0 -/* 106A90 7F0D1F60 25290012 */ addiu $t1, $t1, 0x12 -/* 106A94 7F0D1F64 26030015 */ addiu $v1, $s0, 0x15 -/* 106A98 7F0D1F68 46805420 */ cvt.s.w $f16, $f10 -/* 106A9C 7F0D1F6C 44985000 */ mtc1 $t8, $f10 -/* 106AA0 7F0D1F70 26020012 */ addiu $v0, $s0, 0x12 -/* 106AA4 7F0D1F74 241F0027 */ li $ra, 39 -/* 106AA8 7F0D1F78 241E000B */ li $fp, 11 -/* 106AAC 7F0D1F7C 46002183 */ div.s $f6, $f4, $f0 -/* 106AB0 7F0D1F80 3C17F600 */ lui $s7, 0xf600 -/* 106AB4 7F0D1F84 4600320D */ trunc.w.s $f8, $f6 -/* 106AB8 7F0D1F88 44054000 */ mfc1 $a1, $f8 -/* 106ABC 7F0D1F8C 00000000 */ nop -/* 106AC0 7F0D1F90 24A50032 */ addiu $a1, $a1, 0x32 -/* 106AC4 7F0D1F94 30AF03FF */ andi $t7, $a1, 0x3ff -/* 106AC8 7F0D1F98 000F2B80 */ sll $a1, $t7, 0xe -/* 106ACC 7F0D1F9C 00A15025 */ or $t2, $a1, $at -/* 106AD0 7F0D1FA0 3C01435B */ li $at, 0x435B0000 # 219.000000 -/* 106AD4 7F0D1FA4 44819000 */ mtc1 $at, $f18 -/* 106AD8 7F0D1FA8 3C01F600 */ lui $at, 0xf600 -/* 106ADC 7F0D1FAC 46128102 */ mul.s $f4, $f16, $f18 -/* 106AE0 7F0D1FB0 46805420 */ cvt.s.w $f16, $f10 -/* 106AE4 7F0D1FB4 46002183 */ div.s $f6, $f4, $f0 -/* 106AE8 7F0D1FB8 4600320D */ trunc.w.s $f8, $f6 -/* 106AEC 7F0D1FBC 44064000 */ mfc1 $a2, $f8 -/* 106AF0 7F0D1FC0 00000000 */ nop -/* 106AF4 7F0D1FC4 24C60032 */ addiu $a2, $a2, 0x32 -/* 106AF8 7F0D1FC8 30CF03FF */ andi $t7, $a2, 0x3ff -/* 106AFC 7F0D1FCC 000F3380 */ sll $a2, $t7, 0xe -/* 106B00 7F0D1FD0 00C15825 */ or $t3, $a2, $at -/* 106B04 7F0D1FD4 3C01435B */ li $at, 0x435B0000 # 219.000000 -/* 106B08 7F0D1FD8 44819000 */ mtc1 $at, $f18 -/* 106B0C 7F0D1FDC 3C01F600 */ lui $at, 0xf600 -/* 106B10 7F0D1FE0 46128102 */ mul.s $f4, $f16, $f18 -/* 106B14 7F0D1FE4 46002183 */ div.s $f6, $f4, $f0 -/* 106B18 7F0D1FE8 4600320D */ trunc.w.s $f8, $f6 -/* 106B1C 7F0D1FEC 44074000 */ mfc1 $a3, $f8 -/* 106B20 7F0D1FF0 00000000 */ nop -/* 106B24 7F0D1FF4 24E70032 */ addiu $a3, $a3, 0x32 -/* 106B28 7F0D1FF8 30EF03FF */ andi $t7, $a3, 0x3ff -/* 106B2C 7F0D1FFC 000F3B80 */ sll $a3, $t7, 0xe -/* 106B30 7F0D2000 00E16025 */ or $t4, $a3, $at -/* 106B34 7F0D2004 3C01435B */ li $at, 0x435B0000 # 219.000000 -/* 106B38 7F0D2008 44811000 */ mtc1 $at, $f2 -/* 106B3C 7F0D200C 00000000 */ nop -/* 106B40 7F0D2010 00808025 */ move $s0, $a0 -.L7F0D2014: -/* 106B44 7F0D2014 307203FF */ andi $s2, $v1, 0x3ff -/* 106B48 7F0D2018 305303FF */ andi $s3, $v0, 0x3ff -/* 106B4C 7F0D201C 00137880 */ sll $t7, $s3, 2 -/* 106B50 7F0D2020 0012C080 */ sll $t8, $s2, 2 -/* 106B54 7F0D2024 0158C825 */ or $t9, $t2, $t8 -/* 106B58 7F0D2028 00AF7025 */ or $t6, $a1, $t7 -/* 106B5C 7F0D202C AE0E0004 */ sw $t6, 4($s0) -/* 106B60 7F0D2030 AE190000 */ sw $t9, ($s0) -/* 106B64 7F0D2034 24840008 */ addiu $a0, $a0, 8 -/* 106B68 7F0D2038 00808025 */ move $s0, $a0 -/* 106B6C 7F0D203C 03009025 */ move $s2, $t8 -/* 106B70 7F0D2040 0178C025 */ or $t8, $t3, $t8 -/* 106B74 7F0D2044 00CFC825 */ or $t9, $a2, $t7 -/* 106B78 7F0D2048 AE190004 */ sw $t9, 4($s0) -/* 106B7C 7F0D204C AE180000 */ sw $t8, ($s0) -/* 106B80 7F0D2050 24840008 */ addiu $a0, $a0, 8 -/* 106B84 7F0D2054 00808025 */ move $s0, $a0 -/* 106B88 7F0D2058 01E09825 */ move $s3, $t7 -/* 106B8C 7F0D205C 00F37025 */ or $t6, $a3, $s3 -/* 106B90 7F0D2060 01927825 */ or $t7, $t4, $s2 -/* 106B94 7F0D2064 AE0F0000 */ sw $t7, ($s0) -/* 106B98 7F0D2068 AE0E0004 */ sw $t6, 4($s0) -/* 106B9C 7F0D206C 24840008 */ addiu $a0, $a0, 8 -/* 106BA0 7F0D2070 240D0003 */ li $t5, 3 -/* 106BA4 7F0D2074 448D7000 */ mtc1 $t5, $f14 -/* 106BA8 7F0D2078 27DEFFFC */ addiu $fp, $fp, -4 -/* 106BAC 7F0D207C 468073A0 */ cvt.s.w $f14, $f14 -/* 106BB0 7F0D2080 46027382 */ mul.s $f14, $f14, $f2 -/* 106BB4 7F0D2084 46007383 */ div.s $f14, $f14, $f0 -/* 106BB8 7F0D2088 4600738D */ trunc.w.s $f14, $f14 -/* 106BBC 7F0D208C 44117000 */ mfc1 $s1, $f14 -/* 106BC0 7F0D2090 00000000 */ nop -/* 106BC4 7F0D2094 26310032 */ addiu $s1, $s1, 0x32 -/* 106BC8 7F0D2098 323903FF */ andi $t9, $s1, 0x3ff -/* 106BCC 7F0D209C 00197B80 */ sll $t7, $t9, 0xe -/* 106BD0 7F0D20A0 01F77025 */ or $t6, $t7, $s7 -/* 106BD4 7F0D20A4 01F3C825 */ or $t9, $t7, $s3 -/* 106BD8 7F0D20A8 25AF0001 */ addiu $t7, $t5, 1 -/* 106BDC 7F0D20AC 448F7000 */ mtc1 $t7, $f14 -/* 106BE0 7F0D20B0 00000000 */ nop -/* 106BE4 7F0D20B4 468073A0 */ cvt.s.w $f14, $f14 -/* 106BE8 7F0D20B8 46027482 */ mul.s $f18, $f14, $f2 -/* 106BEC 7F0D20BC 51BE004D */ beql $t5, $fp, .L7F0D21F4 -/* 106BF0 7F0D20C0 46009403 */ div.s $f16, $f18, $f0 -/* 106BF4 7F0D20C4 46009403 */ div.s $f16, $f18, $f0 -.L7F0D20C8: -/* 106BF8 7F0D20C8 00808025 */ move $s0, $a0 -/* 106BFC 7F0D20CC 01D2C025 */ or $t8, $t6, $s2 -/* 106C00 7F0D20D0 AE180000 */ sw $t8, ($s0) -/* 106C04 7F0D20D4 AE190004 */ sw $t9, 4($s0) -/* 106C08 7F0D20D8 24840008 */ addiu $a0, $a0, 8 -/* 106C0C 7F0D20DC 00808025 */ move $s0, $a0 -/* 106C10 7F0D20E0 24840008 */ addiu $a0, $a0, 8 -/* 106C14 7F0D20E4 4600840D */ trunc.w.s $f16, $f16 -/* 106C18 7F0D20E8 44148000 */ mfc1 $s4, $f16 -/* 106C1C 7F0D20EC 00000000 */ nop -/* 106C20 7F0D20F0 26940032 */ addiu $s4, $s4, 0x32 -/* 106C24 7F0D20F4 329803FF */ andi $t8, $s4, 0x3ff -/* 106C28 7F0D20F8 0018CB80 */ sll $t9, $t8, 0xe -/* 106C2C 7F0D20FC 03377825 */ or $t7, $t9, $s7 -/* 106C30 7F0D2100 0333C025 */ or $t8, $t9, $s3 -/* 106C34 7F0D2104 25B90002 */ addiu $t9, $t5, 2 -/* 106C38 7F0D2108 44998000 */ mtc1 $t9, $f16 -/* 106C3C 7F0D210C 01F27025 */ or $t6, $t7, $s2 -/* 106C40 7F0D2110 AE0E0000 */ sw $t6, ($s0) -/* 106C44 7F0D2114 46808420 */ cvt.s.w $f16, $f16 -/* 106C48 7F0D2118 AE180004 */ sw $t8, 4($s0) -/* 106C4C 7F0D211C 00808025 */ move $s0, $a0 -/* 106C50 7F0D2120 24840008 */ addiu $a0, $a0, 8 -/* 106C54 7F0D2124 46028402 */ mul.s $f16, $f16, $f2 -/* 106C58 7F0D2128 46008403 */ div.s $f16, $f16, $f0 -/* 106C5C 7F0D212C 4600840D */ trunc.w.s $f16, $f16 -/* 106C60 7F0D2130 44158000 */ mfc1 $s5, $f16 -/* 106C64 7F0D2134 00000000 */ nop -/* 106C68 7F0D2138 26B50032 */ addiu $s5, $s5, 0x32 -/* 106C6C 7F0D213C 32AE03FF */ andi $t6, $s5, 0x3ff -/* 106C70 7F0D2140 000EC380 */ sll $t8, $t6, 0xe -/* 106C74 7F0D2144 0317C825 */ or $t9, $t8, $s7 -/* 106C78 7F0D2148 03137025 */ or $t6, $t8, $s3 -/* 106C7C 7F0D214C 25B80003 */ addiu $t8, $t5, 3 -/* 106C80 7F0D2150 44988000 */ mtc1 $t8, $f16 -/* 106C84 7F0D2154 25AD0004 */ addiu $t5, $t5, 4 -/* 106C88 7F0D2158 448D7000 */ mtc1 $t5, $f14 -/* 106C8C 7F0D215C 46808420 */ cvt.s.w $f16, $f16 -/* 106C90 7F0D2160 03327825 */ or $t7, $t9, $s2 -/* 106C94 7F0D2164 AE0F0000 */ sw $t7, ($s0) -/* 106C98 7F0D2168 AE0E0004 */ sw $t6, 4($s0) -/* 106C9C 7F0D216C 00808025 */ move $s0, $a0 -/* 106CA0 7F0D2170 24840008 */ addiu $a0, $a0, 8 -/* 106CA4 7F0D2174 46028402 */ mul.s $f16, $f16, $f2 -/* 106CA8 7F0D2178 46008403 */ div.s $f16, $f16, $f0 -/* 106CAC 7F0D217C 4600840D */ trunc.w.s $f16, $f16 -/* 106CB0 7F0D2180 468073A0 */ cvt.s.w $f14, $f14 -/* 106CB4 7F0D2184 44168000 */ mfc1 $s6, $f16 -/* 106CB8 7F0D2188 00000000 */ nop -/* 106CBC 7F0D218C 26D60032 */ addiu $s6, $s6, 0x32 -/* 106CC0 7F0D2190 32CF03FF */ andi $t7, $s6, 0x3ff -/* 106CC4 7F0D2194 46027382 */ mul.s $f14, $f14, $f2 -/* 106CC8 7F0D2198 000F7380 */ sll $t6, $t7, 0xe -/* 106CCC 7F0D219C 01D7C025 */ or $t8, $t6, $s7 -/* 106CD0 7F0D21A0 0312C825 */ or $t9, $t8, $s2 -/* 106CD4 7F0D21A4 AE190000 */ sw $t9, ($s0) -/* 106CD8 7F0D21A8 01D37825 */ or $t7, $t6, $s3 -/* 106CDC 7F0D21AC AE0F0004 */ sw $t7, 4($s0) -/* 106CE0 7F0D21B0 46007383 */ div.s $f14, $f14, $f0 -/* 106CE4 7F0D21B4 4600738D */ trunc.w.s $f14, $f14 -/* 106CE8 7F0D21B8 44117000 */ mfc1 $s1, $f14 -/* 106CEC 7F0D21BC 00000000 */ nop -/* 106CF0 7F0D21C0 26310032 */ addiu $s1, $s1, 0x32 -/* 106CF4 7F0D21C4 323903FF */ andi $t9, $s1, 0x3ff -/* 106CF8 7F0D21C8 00197B80 */ sll $t7, $t9, 0xe -/* 106CFC 7F0D21CC 01F77025 */ or $t6, $t7, $s7 -/* 106D00 7F0D21D0 01F3C825 */ or $t9, $t7, $s3 -/* 106D04 7F0D21D4 25AF0001 */ addiu $t7, $t5, 1 -/* 106D08 7F0D21D8 448F7000 */ mtc1 $t7, $f14 -/* 106D0C 7F0D21DC 00000000 */ nop -/* 106D10 7F0D21E0 468073A0 */ cvt.s.w $f14, $f14 -/* 106D14 7F0D21E4 46027482 */ mul.s $f18, $f14, $f2 -/* 106D18 7F0D21E8 55BEFFB7 */ bnel $t5, $fp, .L7F0D20C8 -/* 106D1C 7F0D21EC 46009403 */ div.s $f16, $f18, $f0 -/* 106D20 7F0D21F0 46009403 */ div.s $f16, $f18, $f0 -.L7F0D21F4: -/* 106D24 7F0D21F4 00808025 */ move $s0, $a0 -/* 106D28 7F0D21F8 01D2C025 */ or $t8, $t6, $s2 -/* 106D2C 7F0D21FC AE180000 */ sw $t8, ($s0) -/* 106D30 7F0D2200 AE190004 */ sw $t9, 4($s0) -/* 106D34 7F0D2204 24840008 */ addiu $a0, $a0, 8 -/* 106D38 7F0D2208 00808025 */ move $s0, $a0 -/* 106D3C 7F0D220C 24840008 */ addiu $a0, $a0, 8 -/* 106D40 7F0D2210 27DE0004 */ addiu $fp, $fp, 4 -/* 106D44 7F0D2214 4600840D */ trunc.w.s $f16, $f16 -/* 106D48 7F0D2218 44148000 */ mfc1 $s4, $f16 -/* 106D4C 7F0D221C 00000000 */ nop -/* 106D50 7F0D2220 26940032 */ addiu $s4, $s4, 0x32 -/* 106D54 7F0D2224 329803FF */ andi $t8, $s4, 0x3ff -/* 106D58 7F0D2228 0018CB80 */ sll $t9, $t8, 0xe -/* 106D5C 7F0D222C 03377825 */ or $t7, $t9, $s7 -/* 106D60 7F0D2230 0333C025 */ or $t8, $t9, $s3 -/* 106D64 7F0D2234 25B90002 */ addiu $t9, $t5, 2 -/* 106D68 7F0D2238 44998000 */ mtc1 $t9, $f16 -/* 106D6C 7F0D223C 01F27025 */ or $t6, $t7, $s2 -/* 106D70 7F0D2240 AE0E0000 */ sw $t6, ($s0) -/* 106D74 7F0D2244 46808420 */ cvt.s.w $f16, $f16 -/* 106D78 7F0D2248 AE180004 */ sw $t8, 4($s0) -/* 106D7C 7F0D224C 00808025 */ move $s0, $a0 -/* 106D80 7F0D2250 24840008 */ addiu $a0, $a0, 8 -/* 106D84 7F0D2254 46028402 */ mul.s $f16, $f16, $f2 -/* 106D88 7F0D2258 46008403 */ div.s $f16, $f16, $f0 -/* 106D8C 7F0D225C 4600840D */ trunc.w.s $f16, $f16 -/* 106D90 7F0D2260 44158000 */ mfc1 $s5, $f16 -/* 106D94 7F0D2264 00000000 */ nop -/* 106D98 7F0D2268 26B50032 */ addiu $s5, $s5, 0x32 -/* 106D9C 7F0D226C 32AE03FF */ andi $t6, $s5, 0x3ff -/* 106DA0 7F0D2270 000EC380 */ sll $t8, $t6, 0xe -/* 106DA4 7F0D2274 0317C825 */ or $t9, $t8, $s7 -/* 106DA8 7F0D2278 03137025 */ or $t6, $t8, $s3 -/* 106DAC 7F0D227C 25B80003 */ addiu $t8, $t5, 3 -/* 106DB0 7F0D2280 44988000 */ mtc1 $t8, $f16 -/* 106DB4 7F0D2284 03327825 */ or $t7, $t9, $s2 -/* 106DB8 7F0D2288 AE0F0000 */ sw $t7, ($s0) -/* 106DBC 7F0D228C 46808420 */ cvt.s.w $f16, $f16 -/* 106DC0 7F0D2290 AE0E0004 */ sw $t6, 4($s0) -/* 106DC4 7F0D2294 00808025 */ move $s0, $a0 -/* 106DC8 7F0D2298 24840008 */ addiu $a0, $a0, 8 -/* 106DCC 7F0D229C 25AD0004 */ addiu $t5, $t5, 4 -/* 106DD0 7F0D22A0 46028402 */ mul.s $f16, $f16, $f2 -/* 106DD4 7F0D22A4 46008403 */ div.s $f16, $f16, $f0 -/* 106DD8 7F0D22A8 4600840D */ trunc.w.s $f16, $f16 -/* 106DDC 7F0D22AC 44168000 */ mfc1 $s6, $f16 -/* 106DE0 7F0D22B0 00000000 */ nop -/* 106DE4 7F0D22B4 26D60032 */ addiu $s6, $s6, 0x32 -/* 106DE8 7F0D22B8 32CF03FF */ andi $t7, $s6, 0x3ff -/* 106DEC 7F0D22BC 000F7380 */ sll $t6, $t7, 0xe -/* 106DF0 7F0D22C0 01D7C025 */ or $t8, $t6, $s7 -/* 106DF4 7F0D22C4 0312C825 */ or $t9, $t8, $s2 -/* 106DF8 7F0D22C8 01D37825 */ or $t7, $t6, $s3 -/* 106DFC 7F0D22CC AE0F0004 */ sw $t7, 4($s0) -/* 106E00 7F0D22D0 AE190000 */ sw $t9, ($s0) -/* 106E04 7F0D22D4 24420007 */ addiu $v0, $v0, 7 -/* 106E08 7F0D22D8 0122082A */ slt $at, $t1, $v0 -/* 106E0C 7F0D22DC 14200003 */ bnez $at, .L7F0D22EC -/* 106E10 7F0D22E0 24630007 */ addiu $v1, $v1, 7 -/* 106E14 7F0D22E4 545FFF4B */ bnel $v0, $ra, .L7F0D2014 -/* 106E18 7F0D22E8 00808025 */ move $s0, $a0 -.L7F0D22EC: -/* 106E1C 7F0D22EC 8FBF002C */ lw $ra, 0x2c($sp) -.L7F0D22F0: -/* 106E20 7F0D22F0 8FB00008 */ lw $s0, 8($sp) -/* 106E24 7F0D22F4 8FB1000C */ lw $s1, 0xc($sp) -/* 106E28 7F0D22F8 8FB20010 */ lw $s2, 0x10($sp) -/* 106E2C 7F0D22FC 8FB30014 */ lw $s3, 0x14($sp) -/* 106E30 7F0D2300 8FB40018 */ lw $s4, 0x18($sp) -/* 106E34 7F0D2304 8FB5001C */ lw $s5, 0x1c($sp) -/* 106E38 7F0D2308 8FB60020 */ lw $s6, 0x20($sp) -/* 106E3C 7F0D230C 8FB70024 */ lw $s7, 0x24($sp) -/* 106E40 7F0D2310 8FBE0028 */ lw $fp, 0x28($sp) -/* 106E44 7F0D2314 27BD0030 */ addiu $sp, $sp, 0x30 -/* 106E48 7F0D2318 03E00008 */ jr $ra -/* 106E4C 7F0D231C 00801025 */ move $v0, $a0 -) -#endif - - - - - -#ifdef NONMATCHING -s32 sub_GAME_7F0D2320(void) { - // Node 0 - D_8004EAF4 = (f32) (((s32) (D_8004EAF4 / 10.0f) * 0xa) + 0xa); - D_8004EAF0 = (f32) D_8004EAF4; - return; - // (possible return value: (((s32) (D_8004EAF4 / 10.0f) * 0xa) + 0xa)) -} - -#else -GLOBAL_ASM( -.text -glabel sub_GAME_7F0D2320 -/* 106E50 7F0D2320 3C038005 */ lui $v1, %hi(D_8004EAF4) -/* 106E54 7F0D2324 2463EAF4 */ addiu $v1, %lo(D_8004EAF4) # addiu $v1, $v1, -0x150c -/* 106E58 7F0D2328 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 106E5C 7F0D232C 44813000 */ mtc1 $at, $f6 -/* 106E60 7F0D2330 C4640000 */ lwc1 $f4, ($v1) -/* 106E64 7F0D2334 3C018005 */ lui $at, %hi(D_8004EAF0) -/* 106E68 7F0D2338 46062203 */ div.s $f8, $f4, $f6 -/* 106E6C 7F0D233C 4600428D */ trunc.w.s $f10, $f8 -/* 106E70 7F0D2340 44025000 */ mfc1 $v0, $f10 -/* 106E74 7F0D2344 00000000 */ nop -/* 106E78 7F0D2348 00027880 */ sll $t7, $v0, 2 -/* 106E7C 7F0D234C 01E27821 */ addu $t7, $t7, $v0 -/* 106E80 7F0D2350 000F7840 */ sll $t7, $t7, 1 -/* 106E84 7F0D2354 25E2000A */ addiu $v0, $t7, 0xa -/* 106E88 7F0D2358 44828000 */ mtc1 $v0, $f16 -/* 106E8C 7F0D235C 00000000 */ nop -/* 106E90 7F0D2360 468084A0 */ cvt.s.w $f18, $f16 -/* 106E94 7F0D2364 E4720000 */ swc1 $f18, ($v1) -/* 106E98 7F0D2368 C4640000 */ lwc1 $f4, ($v1) -/* 106E9C 7F0D236C 03E00008 */ jr $ra -/* 106EA0 7F0D2370 E424EAF0 */ swc1 $f4, %lo(D_8004EAF0)($at) -) -#endif - - - - diff --git a/src/game/viewport.c b/src/game/viewport.c index f178db0..e413369 100644 --- a/src/game/viewport.c +++ b/src/game/viewport.c @@ -39,7 +39,7 @@ void zbufAllocate(void) } } - z_buffer = mempAllocBytesInBank((z_buffer_width * z_buffer_height * 2) + 64, 4); + z_buffer = mempAllocBytesInBank((z_buffer_width * z_buffer_height * 2) + 64, MEMPOOL_STAGE); z_buffer = ALIGN64_V1(z_buffer); } diff --git a/src/game/watch.c b/src/game/watch.c index dee12c5..830b97d 100644 --- a/src/game/watch.c +++ b/src/game/watch.c @@ -64,25 +64,25 @@ f32 D_800409D4 = 0.0f; s32 D_800409D8 = 8; //D:800409DC u16 D_800409DC[] = { - /*1.1 honey*/ TEXT(LOPTIONS, OPTION_STR_09), /*weapon*/TEXT(LOPTIONS, OPTION_STR_03), /*action*/TEXT(LOPTIONS, OPTION_STR_02), /*fire*/TEXT(LOPTIONS, OPTION_STR_00), /*aim*/TEXT(LOPTIONS, OPTION_STR_01), /*aim*/TEXT(LOPTIONS, OPTION_STR_01), /*look*/TEXT(LOPTIONS, OPTION_STR_06), /*look*/TEXT(LOPTIONS, OPTION_STR_06), /*pause*/TEXT(LOPTIONS, OPTION_STR_04), /*move*/TEXT(LOPTIONS, OPTION_STR_05), - /*1.2 solitaire*/TEXT(LOPTIONS, OPTION_STR_0A), /*weapon*/TEXT(LOPTIONS, OPTION_STR_03), /*action*/TEXT(LOPTIONS, OPTION_STR_02), /*fire*/TEXT(LOPTIONS, OPTION_STR_00), /*aim*/TEXT(LOPTIONS, OPTION_STR_01), /*aim*/TEXT(LOPTIONS, OPTION_STR_01), /*move*/TEXT(LOPTIONS, OPTION_STR_05), /*move*/TEXT(LOPTIONS, OPTION_STR_05), /*pause*/TEXT(LOPTIONS, OPTION_STR_04), /*look*/TEXT(LOPTIONS, OPTION_STR_06), - /*1.3 kissy*/ TEXT(LOPTIONS, OPTION_STR_0B), /*fire*/TEXT(LOPTIONS, OPTION_STR_00), /*action*/TEXT(LOPTIONS, OPTION_STR_02), /*aim*/TEXT(LOPTIONS, OPTION_STR_01), /*weapon*/TEXT(LOPTIONS, OPTION_STR_03), /*weapon*/TEXT(LOPTIONS, OPTION_STR_03), /*look*/TEXT(LOPTIONS, OPTION_STR_06), /*look*/TEXT(LOPTIONS, OPTION_STR_06), /*pause*/TEXT(LOPTIONS, OPTION_STR_04), /*move*/TEXT(LOPTIONS, OPTION_STR_05), - /*1.4 goodnight*/TEXT(LOPTIONS, OPTION_STR_0C), /*fire*/TEXT(LOPTIONS, OPTION_STR_00), /*action*/TEXT(LOPTIONS, OPTION_STR_02), /*aim*/TEXT(LOPTIONS, OPTION_STR_01), /*weapon*/TEXT(LOPTIONS, OPTION_STR_03), /*weapon*/TEXT(LOPTIONS, OPTION_STR_03), /*move*/TEXT(LOPTIONS, OPTION_STR_05), /*move*/TEXT(LOPTIONS, OPTION_STR_05), /*pause*/TEXT(LOPTIONS, OPTION_STR_04), /*look*/TEXT(LOPTIONS, OPTION_STR_06), - /*2.1 plenty*/ TEXT(LOPTIONS, OPTION_STR_0D), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), - /*2.2 galore*/ TEXT(LOPTIONS, OPTION_STR_0E), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), - /*2.3 domino*/ TEXT(LOPTIONS, OPTION_STR_0F), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), - /*2.4 goodhead*/ TEXT(LOPTIONS, OPTION_STR_10), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07), /*?*/TEXT(LOPTIONS, OPTION_STR_07) + /*1.1 honey*/ getStringID(LOPTIONS, OPTION_STR_09_11HONEY_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*action*/getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF), /*fire*/getStringID(LOPTIONS, OPTION_STR_00_FIRE_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), /*pause*/getStringID(LOPTIONS, OPTION_STR_04_PAUSE_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), + /*1.2 solitaire*/getStringID(LOPTIONS, OPTION_STR_0A_12SOLITAIRE_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*action*/getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF), /*fire*/getStringID(LOPTIONS, OPTION_STR_00_FIRE_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), /*pause*/getStringID(LOPTIONS, OPTION_STR_04_PAUSE_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), + /*1.3 kissy*/ getStringID(LOPTIONS, OPTION_STR_0B_13KISSY_LF), /*fire*/getStringID(LOPTIONS, OPTION_STR_00_FIRE_LF), /*action*/getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), /*pause*/getStringID(LOPTIONS, OPTION_STR_04_PAUSE_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), + /*1.4 goodnight*/getStringID(LOPTIONS, OPTION_STR_0C_14GOODNIGHT_LF), /*fire*/getStringID(LOPTIONS, OPTION_STR_00_FIRE_LF), /*action*/getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF), /*aim*/getStringID(LOPTIONS, OPTION_STR_01_AIM_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*weapon*/getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), /*move*/getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF), /*pause*/getStringID(LOPTIONS, OPTION_STR_04_PAUSE_LF), /*look*/getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF), + /*2.1 plenty*/ getStringID(LOPTIONS, OPTION_STR_0D_21PLENTY_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), + /*2.2 galore*/ getStringID(LOPTIONS, OPTION_STR_0E_22GALORE_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), + /*2.3 domino*/ getStringID(LOPTIONS, OPTION_STR_0F_23DOMINO_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), + /*2.4 goodhead*/ getStringID(LOPTIONS, OPTION_STR_10_24GOODHEAD_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF), /*?*/getStringID(LOPTIONS, OPTION_STR_07_QUESTION_LF) }; struct game_options game_options_entries[] = { - { {TEXT(LOPTIONS, OPTION_STR_11), TEXT(LOPTIONS, OPTION_STR_1C), TEXT(LOPTIONS, OPTION_STR_1B), 0}, 0}, //look up/down, reverse, upright - { {TEXT(LOPTIONS, OPTION_STR_12), TEXT(LOPTIONS, OPTION_STR_1A), TEXT(LOPTIONS, OPTION_STR_19), 0}, 1}, //autoaim, off, on - { {TEXT(LOPTIONS, OPTION_STR_14), TEXT(LOPTIONS, OPTION_STR_1E), TEXT(LOPTIONS, OPTION_STR_1D), 0}, 0}, //aim control, hold, toggle - { {TEXT(LOPTIONS, OPTION_STR_15), TEXT(LOPTIONS, OPTION_STR_1A), TEXT(LOPTIONS, OPTION_STR_19), 0}, 1}, //sight on screen, off, on - { {TEXT(LOPTIONS, OPTION_STR_13), TEXT(LOPTIONS, OPTION_STR_1A), TEXT(LOPTIONS, OPTION_STR_19), 0}, 1}, //look ahead, off, on - { {TEXT(LOPTIONS, OPTION_STR_16), TEXT(LOPTIONS, OPTION_STR_1A), TEXT(LOPTIONS, OPTION_STR_19), 0}, 1}, //ammo on screen, off, on - { {TEXT(LOPTIONS, OPTION_STR_17), TEXT(LOPTIONS, OPTION_STR_1F), TEXT(LOPTIONS, OPTION_STR_20), TEXT(LOPTIONS, OPTION_STR_21)}, 0}, //screen, full, wide, cinema - { {TEXT(LOPTIONS, OPTION_STR_18), TEXT(LOPTIONS, OPTION_STR_22), TEXT(LOPTIONS, OPTION_STR_23), 0}, 0} //ratio, normal, 16:9 + { {getStringID(LOPTIONS, OPTION_STR_11_LOOKUPDOWN_LF), getStringID(LOPTIONS, OPTION_STR_1C_REVERSE_LF), getStringID(LOPTIONS, OPTION_STR_1B_UPRIGHT_LF), 0}, 0}, //look up/down, reverse, upright + { {getStringID(LOPTIONS, OPTION_STR_12_AUTOAIM_LF), getStringID(LOPTIONS, OPTION_STR_1A_OFF_LF), getStringID(LOPTIONS, OPTION_STR_19_ON_LF), 0}, 1}, //autoaim, off, on + { {getStringID(LOPTIONS, OPTION_STR_14_AIMCONTROL_LF), getStringID(LOPTIONS, OPTION_STR_1E_HOLD_LF), getStringID(LOPTIONS, OPTION_STR_1D_TOGGLE_LF), 0}, 0}, //aim control, hold, toggle + { {getStringID(LOPTIONS, OPTION_STR_15_SIGHTONSCREEN_LF), getStringID(LOPTIONS, OPTION_STR_1A_OFF_LF), getStringID(LOPTIONS, OPTION_STR_19_ON_LF), 0}, 1}, //sight on screen, off, on + { {getStringID(LOPTIONS, OPTION_STR_13_LOOKAHEAD_LF), getStringID(LOPTIONS, OPTION_STR_1A_OFF_LF), getStringID(LOPTIONS, OPTION_STR_19_ON_LF), 0}, 1}, //look ahead, off, on + { {getStringID(LOPTIONS, OPTION_STR_16_AMMOONSCREEN_LF), getStringID(LOPTIONS, OPTION_STR_1A_OFF_LF), getStringID(LOPTIONS, OPTION_STR_19_ON_LF), 0}, 1}, //ammo on screen, off, on + { {getStringID(LOPTIONS, OPTION_STR_17_SCREEN_LF), getStringID(LOPTIONS, OPTION_STR_1F_FULL_LF), getStringID(LOPTIONS, OPTION_STR_20_WIDE_LF), getStringID(LOPTIONS, OPTION_STR_21_CINEMA_LF)}, 0}, //screen, full, wide, cinema + { {getStringID(LOPTIONS, OPTION_STR_18_RATIO_LF), getStringID(LOPTIONS, OPTION_STR_22_NORMAL_LF), getStringID(LOPTIONS, OPTION_STR_23_169_LF), 0}, 0} //ratio, normal, 16:9 }; //D:80040ADC @@ -164,13 +164,13 @@ f32 D_80040B64 = -200.0f; //D:80040B68 f32 D_80040B68[] = { - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, -900.0f, 200.0f, -45.0f, 715.0f, 200.0f, 393.0f, -875.0f, 200.0f, -210.0f, @@ -187,42 +187,42 @@ f32 D_80040B68[] = { //D:80040C44 f32 D_80040C44[] = { - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, - 0.0f, 2000.0f, 0.0f, - 2000.0f, 2000.0f, 0.0f, - 2000.0f, -600.0f, 200.0f, - 500.0f, 2000.0f, 0.0f, - 2000.0f, 2000.0f, 0.0f, - 2000.0f, 2000.0f, 0.0f, - 2000.0f, 2000.0f, 0.0f, - 2000.0f, 2000.0f, 0.0f, - 2000.0f, -600.0f, 200.0f, - 240.0f, -600.0f, 200.0f, - 110.0f, 2000.0f, 0.0f, - 2000.0f, 2000.0f, 0.0f, - 2000.0f, -600.0f, 200.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 2000.0f, 0.0f, + 2000.0f, 2000.0f, 0.0f, + 2000.0f, -600.0f, 200.0f, + 500.0f, 2000.0f, 0.0f, + 2000.0f, 2000.0f, 0.0f, + 2000.0f, 2000.0f, 0.0f, + 2000.0f, 2000.0f, 0.0f, + 2000.0f, 2000.0f, 0.0f, + 2000.0f, -600.0f, 200.0f, + 240.0f, -600.0f, 200.0f, + 110.0f, 2000.0f, 0.0f, + 2000.0f, 2000.0f, 0.0f, + 2000.0f, -600.0f, 200.0f, 320.0f }; //D:80040D20 f32 D_80040D20[] = { - 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f, - 2000.0f, 0.0f, 2000.0f, 2000.0f, - 0.0f, 2000.0f, 600.0f, 200.0f, - 500.0f, 2000.0f, 0.0f, 2000.0f, - 2000.0f, 0.0f, 2000.0f, 2000.0f, - 0.0f, 2000.0f, 2000.0f, 0.0f, - 2000.0f, 2000.0f, 0.0f, 2000.0f, - 600.0f, 200.0f, 240.0f, 600.0f, - 200.0f, 110.0f, 2000.0f, 0.0f, - 2000.0f, 2000.0f, 0.0f, 2000.0f, + 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, + 2000.0f, 0.0f, 2000.0f, 2000.0f, + 0.0f, 2000.0f, 600.0f, 200.0f, + 500.0f, 2000.0f, 0.0f, 2000.0f, + 2000.0f, 0.0f, 2000.0f, 2000.0f, + 0.0f, 2000.0f, 2000.0f, 0.0f, + 2000.0f, 2000.0f, 0.0f, 2000.0f, + 600.0f, 200.0f, 240.0f, 600.0f, + 200.0f, 110.0f, 2000.0f, 0.0f, + 2000.0f, 2000.0f, 0.0f, 2000.0f, 600.0f, 200.0f, 320.0f }; @@ -259,7 +259,7 @@ void game_option_select_value(u32 *param_1, u32 param_2); -void nullsub_7F0A4860(void) +void nullsub_7F0A4860(void) { } @@ -290,10 +290,10 @@ void init_watch_at_start_of_stage(int stage) } g_CurrentPlayer->neg_vspacing_for_control_type_entry = 0; - g_CurrentPlayer->cur_player_control_type_1 = 0; - g_CurrentPlayer->cur_player_control_type_0 = 0; + g_CurrentPlayer->cur_player_control_type_1 = CONTROLLER_CONFIG_HONEY; + g_CurrentPlayer->cur_player_control_type_0 = CONTROLLER_CONFIG_HONEY; g_CurrentPlayer->cur_player_control_type_2 = 0.0f; - g_CurrentPlayer->has_set_control_type_data = 1; + g_CurrentPlayer->has_set_control_type_data = TRUE; D_800409D8 = 8; controlstick_lr_enabled = 0; @@ -378,7 +378,7 @@ Gfx * sub_GAME_7F0A4B40(Gfx *DL) { D_80040B4C += 1; } - + gDPSetRenderMode(DL++, G_RM_XLU_SURF, G_RM_XLU_SURF2); gDPSetCombineMode(DL++, G_CC_PRIMITIVE, G_CC_PRIMITIVE); gDPSetPrimColor(DL++, 0, 0, 0xFF, 0x00, 0x00, 0xFF); @@ -390,11 +390,11 @@ Gfx * sub_GAME_7F0A4B40(Gfx *DL) struct fontchar * pFontChars; s32 y; s32 x; - + pFontFile = ptrFontBankGothic; pFontChars = ptrFontBankGothicChars; sprintf(buffer,"%d, %d\n",D_80040B48,D_80040B4C); - + DL = microcode_constructor(DL++); textMeasure(&x, &y, buffer, pFontChars, pFontFile, 0); @@ -402,7 +402,7 @@ Gfx * sub_GAME_7F0A4B40(Gfx *DL) // HACK: what is this: ((s32*)pFontChars)[0x224] D_80040B4C = (D_80040B4C - ((s32*)pFontChars)[0x224]) + 1; } - + return DL; } @@ -439,7 +439,7 @@ void cur_player_set_control_type(int type) langsize = j_text_trigger ? 14 : 10; g_CurrentPlayer->neg_vspacing_for_control_type_entry = -(langsize * type); - g_CurrentPlayer->has_set_control_type_data = 1; + g_CurrentPlayer->has_set_control_type_data = TRUE; } @@ -663,6 +663,12 @@ void watch_screen0_navigation(void) goto_watch_screen_index_1 = TRUE; } } + #ifdef DEBUG + else + { + osSyncPrintf("gun watch pos x=%f[CL,CR] y=%f[CD,CU] z=%f[TL,TR] "); + } + #endif if ((joyGetButtonsPressedThisFrame(PLAYER_1, L_JPAD)) || (sub_GAME_7F0A4FB0())) { @@ -694,7 +700,7 @@ void watch_screen0_navigation(void) D_800409A4 = 0; set_missionstate(MISSION_STATE_0); bossRunTitleStage(); - mission_failed_or_aborted = 1; + mission_failed_or_aborted = TRUE; deleteCurrentSelectedFolder(); } } @@ -967,11 +973,11 @@ void sub_GAME_7F0A5B80(void) f32 fVar1; int invItems; int watchDebugFlag; - + invItems = bondinvCountTotalItemsInInv(); watchDebugFlag = get_debug_gunwatchpos_flag(); if (watchDebugFlag == 0) - { + { if ((joyGetButtonsPressedThisFrame(PLAYER_1,U_CBUTTONS|U_JPAD) != 0) && (joyGetStickY(PLAYER_1) >= 0x47)) { if ((D_800409BC > 0) && (watch_item_is_actively_selected == 0)) @@ -986,7 +992,7 @@ void sub_GAME_7F0A5B80(void) D_800409BC += 1.0f; } } - + if (joyGetButtons(PLAYER_1,U_CBUTTONS|U_JPAD) != 0) { @@ -1003,7 +1009,7 @@ void sub_GAME_7F0A5B80(void) } } } - + if ((joyGetStickY(PLAYER_1) >= 0x1F) && (joyGetStickY(PLAYER_1) < 0x46) && (g_curWatchItemIndex > 0) && (watch_item_is_actively_selected == 0)) @@ -1069,9 +1075,9 @@ void sub_GAME_7F0A5B80(void) D_800409C0 = 1; } } - if ((D_800409BC <= g_curWatchItemIndex + 0.55f) || (joyGetButtons(PLAYER_1,ANY_BUTTON) != 0)) + if ((D_800409BC <= g_curWatchItemIndex + 0.55f) || (joyGetButtons(PLAYER_1,ANY_BUTTON) != 0)) { - if ((D_800409BC <= g_curWatchItemIndex + 0.45f) && (joyGetButtons(PLAYER_1,ANY_BUTTON) == 0)) + if ((D_800409BC <= g_curWatchItemIndex + 0.45f) && (joyGetButtons(PLAYER_1,ANY_BUTTON) == 0)) { D_800409BC = D_800409BC + 0.1f; } @@ -2348,9 +2354,9 @@ Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish) struct WatchVertex *sp44; Gfx *sp40; Gfx *sp3C; - + s32 stack_pad[6]; - + f32 scale; sp48 = dynAllocate7F0BD6C4(WATCH_BACKGROUND_VERTEX_COUNT); @@ -2378,7 +2384,7 @@ Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish) if (check_watch_page_transistion_running()) { - scale = (g_CurrentPlayer->zoomintime * (g_CurrentPlayer->zoominfovynew - g_CurrentPlayer->zoominfovyold)) + scale = (g_CurrentPlayer->zoomintime * (g_CurrentPlayer->zoominfovynew - g_CurrentPlayer->zoominfovyold)) / g_CurrentPlayer->zoomintimemax; if (scale < 0.0f) @@ -2399,12 +2405,12 @@ Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish) scale = 0.05f; g_WatchBackgroundGreen = 0xE0; - if (g_CurrentPlayer->watch_animation_state == 4 || g_CurrentPlayer->watch_animation_state == 6) + if (g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x4 || g_CurrentPlayer->watch_animation_state == WATCH_ANIMATION_0x6) { scale = bondviewWatchAnimationRelated(); } } - + guScale(&gfx_background_8007B0A0, 0.25f, 0.25f, 0.25f); gSPMatrix(gdl++, &gfx_background_8007B0A0, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); @@ -2461,7 +2467,7 @@ Gfx *draw_background_health_and_armor(Gfx *gdl, Mtx *arg1, s32 zoom_squish) { sub_GAME_7F0A33F8(sp48, WATCH_BACKGROUND_VERTEX_COUNT, 0.899999976158f, 1); /*sp40 = */sub_GAME_7F0A3978(sp40, OS_PHYSICAL_TO_K0(sp48), WATCH_BACKGROUND_VERTEX_COUNT, 1); - + gDPSetRenderMode(gdl++, G_RM_AA_XLU_SURF, G_RM_AA_XLU_SURF2); } @@ -2524,15 +2530,15 @@ Gfx *draw_abort_cancel_confirm(Gfx *gdl) pFontFile = ptrFontBankGothic; pFontChars = ptrFontBankGothicChars; - sp54 = langGet(TEXT(LOPTIONS, OPTION_STR_24)); //abort: - sp50 = langGet(TEXT(LOPTIONS, OPTION_STR_25)); //confirm - sp4C = langGet(TEXT(LOPTIONS, OPTION_STR_26)); //cancel + sp54 = langGet(getStringID(LOPTIONS, OPTION_STR_24_ABORT_LF)); //abort: + sp50 = langGet(getStringID(LOPTIONS, OPTION_STR_25_CONFIRM_LF)); //confirm + sp4C = langGet(getStringID(LOPTIONS, OPTION_STR_26_CANCEL_LF)); //cancel sp7C = 0x51; sp78 = (j_text_trigger ? 0xF : 0) + 0xBD; - + sp74 = (j_text_trigger ? 0xA : 0) + 0x88; - + sp70 = sp6C = sp68 = (j_text_trigger ? 3 : 0) + (PAL ? 0x4E : 0x4C); if (watch_item_is_actively_selected != 0) @@ -2601,19 +2607,19 @@ Gfx *draw_text_mission_status(Gfx *gdl) s32 sp4C; s32 joffset; - txtptr_1 = langGet(TEXT(LOPTIONS, OPTION_STR_27)); //mission status: + txtptr_1 = langGet(getStringID(LOPTIONS, OPTION_STR_27_MISSIONSTATUS_LF)); //mission status: pFontFile = ptrFontBankGothic; pFontChars = ptrFontBankGothicChars; if (objectiveIsAllComplete()) { sp4C = 0xFF00B0; - txtptr_2 = langGet(TEXT(LOPTIONS, OPTION_STR_28)); //complete + txtptr_2 = langGet(getStringID(LOPTIONS, OPTION_STR_28_COMPLETE_LF)); //complete } else { sp4C = D_80040AF4; - txtptr_2 = langGet(TEXT(LOPTIONS, OPTION_STR_29)); //incomplete + txtptr_2 = langGet(getStringID(LOPTIONS, OPTION_STR_29_INCOMPLETE_LF)); //incomplete } gdl = microcode_constructor(gdl); @@ -2657,7 +2663,7 @@ Gfx *draw_text_q_watch_v201_beta(Gfx *gdl) s32 pFontChars; s32 joffset; - txtptr = langGet(TEXT(LOPTIONS, OPTION_STR_2B)); //q watch v2.01 beta + txtptr = langGet(getStringID(LOPTIONS, OPTION_STR_2B_QWATCHVERSION_LF)); //q watch v2.01 beta if (j_text_trigger) { @@ -3319,7 +3325,7 @@ glabel draw_current_hand_item_and_ammo /* 0DA004 7F0A7614 8FB00038 */ lw $s0, 0x38($sp) /* 0DA008 7F0A7618 27BD0118 */ addiu $sp, $sp, 0x118 /* 0DA00C 7F0A761C 03E00008 */ jr $ra -/* 0DA010 7F0A7620 00000000 */ nop +/* 0DA010 7F0A7620 00000000 */ nop ) #endif #endif @@ -4367,7 +4373,7 @@ glabel draw_watch_inventory_page /* 0DA14C 7F0A775C 504101B8 */ beql $v0, $at, .L7F0A7E40 /* 0DA150 7F0A7760 8FBF003C */ lw $ra, 0x3c($sp) /* 0DA154 7F0A7764 0FC2F2A4 */ jal dynAllocateMatrix -/* 0DA158 7F0A7768 00000000 */ nop +/* 0DA158 7F0A7768 00000000 */ nop /* 0DA15C 7F0A776C 3C048004 */ lui $a0, %hi(g_curWatchItemIndex) # $a0, 0x8004 /* 0DA160 7F0A7770 AFA2092C */ sw $v0, 0x92c($sp) /* 0DA164 7F0A7774 0FC23684 */ jal bondinvGet45AngleForIndex @@ -4581,7 +4587,7 @@ glabel draw_watch_inventory_page /* 0DA480 7F0A7A90 0FC23507 */ jal bondinvCountTotalItemsInInv /* 0DA484 7F0A7A94 00008025 */ move $s0, $zero /* 0DA488 7F0A7A98 1840000B */ blez $v0, .L7F0A7AC8 -/* 0DA48C 7F0A7A9C 00000000 */ nop +/* 0DA48C 7F0A7A9C 00000000 */ nop .L7F0A7AA0: /* 0DA490 7F0A7AA0 0FC235EA */ jal bondinvGetNameByIndex /* 0DA494 7F0A7AA4 02002025 */ move $a0, $s0 @@ -4592,7 +4598,7 @@ glabel draw_watch_inventory_page /* 0DA4A8 7F0A7AB8 26100001 */ addiu $s0, $s0, 1 /* 0DA4AC 7F0A7ABC 0202082A */ slt $at, $s0, $v0 /* 0DA4B0 7F0A7AC0 1420FFF7 */ bnez $at, .L7F0A7AA0 -/* 0DA4B4 7F0A7AC4 00000000 */ nop +/* 0DA4B4 7F0A7AC4 00000000 */ nop .L7F0A7AC8: /* 0DA4B8 7F0A7AC8 3C038004 */ lui $v1, %hi(D_800409C4) # $v1, 0x8004 /* 0DA4BC 7F0A7ACC 2463A614 */ addiu $v1, %lo(D_800409C4) # addiu $v1, $v1, -0x59ec @@ -4602,7 +4608,7 @@ glabel draw_watch_inventory_page /* 0DA4CC 7F0A7ADC AC6E0000 */ sw $t6, ($v1) .L7F0A7AE0: /* 0DA4D0 7F0A7AE0 0FC293A8 */ jal sub_GAME_7F0A5B80 -/* 0DA4D4 7F0A7AE4 00000000 */ nop +/* 0DA4D4 7F0A7AE4 00000000 */ nop /* 0DA4D8 7F0A7AE8 3C188004 */ lui $t8, %hi(j_text_trigger) # $t8, 0x8004 /* 0DA4DC 7F0A7AEC 8F181150 */ lw $t8, %lo(j_text_trigger)($t8) /* 0DA4E0 7F0A7AF0 8FA30084 */ lw $v1, 0x84($sp) @@ -4836,7 +4842,7 @@ glabel draw_watch_inventory_page /* 0DA820 7F0A7E30 AFA20930 */ sw $v0, 0x930($sp) .L7F0A7E34: /* 0DA824 7F0A7E34 0FC29DA4 */ jal sub_GAME_7F0A8378 -/* 0DA828 7F0A7E38 00000000 */ nop +/* 0DA828 7F0A7E38 00000000 */ nop .L7F0A7E3C: /* 0DA82C 7F0A7E3C 8FBF003C */ lw $ra, 0x3c($sp) .L7F0A7E40: @@ -4857,7 +4863,7 @@ Gfx *unused_draw_watch_inventory_page(Gfx *gdl, Mtx *param_2) { s32 sp64,sp68; //unused? s32 sp60; - s32 sp5C; + s32 sp5C; s32 sp58; s32 sp54; s32 pFontFile; @@ -5042,7 +5048,7 @@ void sub_GAME_7F0A8ED0(u16* arg0) { sp1C = joyGetStickX(PLAYER_1); temp_v1 = *arg0; - + if (joyGetButtons(PLAYER_1, R_CBUTTONS|R_TRIG|R_JPAD)) { temp_v1 = temp_v1 + 0x400; } else if (joyGetButtons(PLAYER_1, L_CBUTTONS|L_TRIG|L_JPAD)) { @@ -5877,13 +5883,13 @@ glabel sub_GAME_7F0A97D0 /* 0DB570 7F0A8B80 26310014 */ addiu $s1, $s1, 0x14 /* 0DB574 7F0A8B84 0206082A */ slt $at, $s0, $a2 /* 0DB578 7F0A8B88 1420FFF5 */ bnez $at, .L7F0A8B60 -/* 0DB57C 7F0A8B8C 00000000 */ nop +/* 0DB57C 7F0A8B8C 00000000 */ nop .L7F0A8B90: /* 0DB580 7F0A8B90 3C188004 */ lui $t8, %hi(watch_item_is_actively_selected) # $t8, 0x8004 /* 0DB584 7F0A8B94 8F18A5F8 */ lw $t8, %lo(watch_item_is_actively_selected)($t8) /* 0DB588 7F0A8B98 3C198004 */ lui $t9, %hi(controller_options_index) # $t9, 0x8004 /* 0DB58C 7F0A8B9C 13000019 */ beqz $t8, .L7F0A8C04 -/* 0DB590 7F0A8BA0 00000000 */ nop +/* 0DB590 7F0A8BA0 00000000 */ nop /* 0DB594 7F0A8BA4 8F39A5E8 */ lw $t9, %lo(controller_options_index)($t9) /* 0DB598 7F0A8BA8 3C118004 */ lui $s1, %hi(j_text_trigger) # $s1, 0x8004 /* 0DB59C 7F0A8BAC 26311150 */ addiu $s1, %lo(j_text_trigger) # addiu $s1, $s1, 0x1150 @@ -5893,7 +5899,7 @@ glabel sub_GAME_7F0A97D0 /* 0DB5AC 7F0A8BBC 240B0001 */ li $t3, 1 /* 0DB5B0 7F0A8BC0 2402000A */ li $v0, 10 /* 0DB5B4 7F0A8BC4 11000003 */ beqz $t0, .L7F0A8BD4 -/* 0DB5B8 7F0A8BC8 00000000 */ nop +/* 0DB5B8 7F0A8BC8 00000000 */ nop /* 0DB5BC 7F0A8BCC 10000001 */ b .L7F0A8BD4 /* 0DB5C0 7F0A8BD0 2402000E */ li $v0, 14 .L7F0A8BD4: @@ -6000,7 +6006,7 @@ glabel sub_GAME_7F0A97D0 /* 0DB730 7F0A8D40 13200003 */ beqz $t9, .L7F0A8D50 /* 0DB734 7F0A8D44 3C098007 */ lui $t1, %hi(g_CurrentPlayer) # $t1, 0x8007 /* 0DB738 7F0A8D48 10000001 */ b .L7F0A8D50 -/* 0DB73C 7F0A8D4C 00000000 */ nop +/* 0DB73C 7F0A8D4C 00000000 */ nop .L7F0A8D50: /* 0DB740 7F0A8D50 8D298BC0 */ lw $t1, %lo(g_CurrentPlayer)($t1) /* 0DB744 7F0A8D54 2408001A */ li $t0, 26 @@ -6081,7 +6087,7 @@ const char a3d[] = "(3D)\n"; #if defined(LEFTOVERDEBUG) GLOBAL_ASM( - + .text glabel sub_GAME_7F0A9AB8 /* 0DE5E8 7F0A9AB8 3C0E8004 */ lui $t6, %hi(game_options_entries) @@ -7099,7 +7105,7 @@ glabel sub_GAME_7F0A9AB8 /* 0DB9F0 7F0A9000 01495021 */ addu $t2, $t2, $t1 /* 0DB9F4 7F0A9004 954AA634 */ lhu $t2, %lo(D_800409DC+8)($t2) /* 0DB9F8 7F0A9008 1541001F */ bne $t2, $at, .L7F0A9088 -/* 0DB9FC 7F0A900C 00000000 */ nop +/* 0DB9FC 7F0A900C 00000000 */ nop /* 0DBA00 7F0A9010 1000001D */ b .L7F0A9088 /* 0DBA04 7F0A9014 AFAB0050 */ sw $t3, 0x50($sp) .L7F0A9018: @@ -7142,7 +7148,7 @@ glabel sub_GAME_7F0A9AB8 /* 0DBA94 7F0A90A4 8D4AA5F8 */ lw $t2, %lo(watch_item_is_actively_selected)($t2) /* 0DBA98 7F0A90A8 00002025 */ move $a0, $zero /* 0DBA9C 7F0A90AC 11400005 */ beqz $t2, .L7F0A90C4 -/* 0DBAA0 7F0A90B0 00000000 */ nop +/* 0DBAA0 7F0A90B0 00000000 */ nop /* 0DBAA4 7F0A90B4 0C002C20 */ jal joyGetButtons /* 0DBAA8 7F0A90B8 24050F00 */ li $a1, 3840 /* 0DBAAC 7F0A90BC 1440001E */ bnez $v0, .L7F0A9138 @@ -7194,7 +7200,7 @@ glabel sub_GAME_7F0A9AB8 /* 0DBB5C 7F0A916C 01495021 */ addu $t2, $t2, $t1 /* 0DBB60 7F0A9170 954AA63A */ lhu $t2, %lo(D_800409DC+14)($t2) /* 0DBB64 7F0A9174 15410005 */ bne $t2, $at, .L7F0A918C -/* 0DBB68 7F0A9178 00000000 */ nop +/* 0DBB68 7F0A9178 00000000 */ nop /* 0DBB6C 7F0A917C 0FC304AE */ jal langGet /* 0DBB70 7F0A9180 3404AC30 */ li $a0, 44080 /* 0DBB74 7F0A9184 10000001 */ b .L7F0A918C @@ -7219,7 +7225,7 @@ glabel sub_GAME_7F0A9AB8 /* 0DBBB8 7F0A91C8 01CD7021 */ addu $t6, $t6, $t5 /* 0DBBBC 7F0A91CC 95CEA63A */ lhu $t6, %lo(D_800409DC+14)($t6) /* 0DBBC0 7F0A91D0 15C10005 */ bne $t6, $at, .L7F0A91E8 -/* 0DBBC4 7F0A91D4 00000000 */ nop +/* 0DBBC4 7F0A91D4 00000000 */ nop /* 0DBBC8 7F0A91D8 0FC304AE */ jal langGet /* 0DBBCC 7F0A91DC 3404AC31 */ li $a0, 44081 /* 0DBBD0 7F0A91E0 10000001 */ b .L7F0A91E8 @@ -7474,7 +7480,7 @@ glabel sub_GAME_7F0A9AB8 /* 0DBF84 7F0A9594 8D8CA5F8 */ lw $t4, %lo(watch_item_is_actively_selected)($t4) /* 0DBF88 7F0A9598 00002025 */ move $a0, $zero /* 0DBF8C 7F0A959C 11800005 */ beqz $t4, .L7F0A95B4 -/* 0DBF90 7F0A95A0 00000000 */ nop +/* 0DBF90 7F0A95A0 00000000 */ nop /* 0DBF94 7F0A95A4 0C002C20 */ jal joyGetButtons /* 0DBF98 7F0A95A8 2405000F */ li $a1, 15 /* 0DBF9C 7F0A95AC 1440001F */ bnez $v0, .L7F0A962C @@ -7534,7 +7540,7 @@ glabel sub_GAME_7F0A9AB8 /* 0DC06C 7F0A967C 010E4021 */ addu $t0, $t0, $t6 /* 0DC070 7F0A9680 9508A638 */ lhu $t0, %lo(D_800409DC+12)($t0) /* 0DC074 7F0A9684 15010005 */ bne $t0, $at, .L7F0A969C -/* 0DC078 7F0A9688 00000000 */ nop +/* 0DC078 7F0A9688 00000000 */ nop /* 0DC07C 7F0A968C 0FC304AE */ jal langGet /* 0DC080 7F0A9690 3404AC30 */ li $a0, 44080 /* 0DC084 7F0A9694 10000001 */ b .L7F0A969C @@ -7559,7 +7565,7 @@ glabel sub_GAME_7F0A9AB8 /* 0DC0C8 7F0A96D8 01384821 */ addu $t1, $t1, $t8 /* 0DC0CC 7F0A96DC 9529A638 */ lhu $t1, %lo(D_800409DC+12)($t1) /* 0DC0D0 7F0A96E0 15210005 */ bne $t1, $at, .L7F0A96F8 -/* 0DC0D4 7F0A96E4 00000000 */ nop +/* 0DC0D4 7F0A96E4 00000000 */ nop /* 0DC0D8 7F0A96E8 0FC304AE */ jal langGet /* 0DC0DC 7F0A96EC 3404AC31 */ li $a0, 44081 /* 0DC0E0 7F0A96F0 10000001 */ b .L7F0A96F8 @@ -7778,7 +7784,7 @@ glabel sub_GAME_7F0A9AB8 /* 0DC408 7F0A9A18 8FB90050 */ lw $t9, 0x50($sp) /* 0DC40C 7F0A9A1C 3C0C8007 */ lui $t4, %hi(g_CurrentPlayer) # $t4, 0x8007 /* 0DC410 7F0A9A20 13200018 */ beqz $t9, .L7F0A9A84 -/* 0DC414 7F0A9A24 00000000 */ nop +/* 0DC414 7F0A9A24 00000000 */ nop /* 0DC418 7F0A9A28 0FC304AE */ jal langGet /* 0DC41C 7F0A9A2C 3404AC08 */ li $a0, 44040 /* 0DC420 7F0A9A30 3C090070 */ lui $t1, (0x007000A0 >> 16) # lui $t1, 0x70 @@ -7851,29 +7857,29 @@ Gfx *display_text_buttons_dual_control(Gfx *gdl) if (joyGetButtons(PLAYER_1, A_BUTTON)) { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_WEAPTEXT, langGet(TEXT(LOPTIONS, OPTION_STR_03)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); //weapon + gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); //weapon } else { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_WEAPTEXT, langGet(TEXT(LOPTIONS, OPTION_STR_03)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); //weapon + gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); //weapon } if (joyGetButtons(PLAYER_1, B_BUTTON)) { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_ACTIONTEXT, langGet(TEXT(LOPTIONS, OPTION_STR_02)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); //action + gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 0); //action } else { - gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_ACTIONTEXT, langGet(TEXT(LOPTIONS, OPTION_STR_02)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); //action + gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); //action } - if ((g_CurrentPlayer->cur_player_control_type_0 == 4) || (g_CurrentPlayer->cur_player_control_type_0 == 5)) + if ((g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_PLENTY) || (g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_GALORE)) { - textptr_aux = langGet(TEXT(LOPTIONS, OPTION_STR_00)); //fire + textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_00_FIRE_LF)); //fire } else { - textptr_aux = langGet(TEXT(LOPTIONS, OPTION_STR_01)); //aim + textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_01_AIM_LF)); //aim } if (joyGetButtons(PLAYER_1, Z_TRIG)) @@ -7885,42 +7891,42 @@ Gfx *display_text_buttons_dual_control(Gfx *gdl) gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_5, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); } - if ((g_CurrentPlayer->cur_player_control_type_0 == 4) || (g_CurrentPlayer->cur_player_control_type_0 == 6)) + if ((g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_PLENTY) || (g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_DOMINO)) { - textptr_aux = langGet(TEXT(LOPTIONS, OPTION_STR_05)); //move + textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF)); //move } else { - textptr_aux = langGet(TEXT(LOPTIONS, OPTION_STR_06)); //look + textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF)); //look } gdl = sub_GAME_7F0A9398(gdl, 0x5A, YOFFSET_4, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 0); if (joyGetButtons(1, A_BUTTON)) { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_WEAPTEXT, langGet(TEXT(LOPTIONS, OPTION_STR_03)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); //weapon + gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); //weapon } else { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_WEAPTEXT, langGet(TEXT(LOPTIONS, OPTION_STR_03)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); //weapon + gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_WEAPTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_03_WEAPON_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); //weapon } if (joyGetButtons(1, B_BUTTON)) { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_ACTIONTEXT, langGet(TEXT(LOPTIONS, OPTION_STR_02)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); //action + gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), -1, 1, 0x7000A0, 0, 0, 0x3000B0, 1); //action } else { - gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_ACTIONTEXT, langGet(TEXT(LOPTIONS, OPTION_STR_02)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); //action + gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_ACTIONTEXT, langGet(getStringID(LOPTIONS, OPTION_STR_02_ACTION_LF)), 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); //action } - if ((g_CurrentPlayer->cur_player_control_type_0 == 4) || (g_CurrentPlayer->cur_player_control_type_0 == 5)) + if ((g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_PLENTY) || (g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_GALORE)) { - textptr_aux = langGet(TEXT(LOPTIONS, OPTION_STR_01)); //aim + textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_01_AIM_LF)); //aim } else { - textptr_aux = langGet(TEXT(LOPTIONS, OPTION_STR_00)); //fire + textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_00_FIRE_LF)); //fire } if (joyGetButtons(1, Z_TRIG)) @@ -7932,13 +7938,13 @@ Gfx *display_text_buttons_dual_control(Gfx *gdl) gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_5, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); } - if ((g_CurrentPlayer->cur_player_control_type_0 == 4) || (g_CurrentPlayer->cur_player_control_type_0 == 6)) + if ((g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_PLENTY) || (g_CurrentPlayer->cur_player_control_type_0 == CONTROLLER_CONFIG_DOMINO)) { - textptr_aux = langGet(TEXT(LOPTIONS, OPTION_STR_06)); //look + textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_06_LOOK_LF)); //look } else { - textptr_aux = langGet(TEXT(LOPTIONS, OPTION_STR_05)); //move + textptr_aux = langGet(getStringID(LOPTIONS, OPTION_STR_05_MOVE_LF)); //move } gdl = sub_GAME_7F0A9398(gdl, 0xE6, YOFFSET_4, textptr_aux, 0xAA00B0, 0, -1, 0, 0, 0x3000B0, 1); @@ -9019,7 +9025,7 @@ glabel sub_GAME_7F0AADC0 /* 0DCC74 7F0AA284 8DEFA5E8 */ lw $t7, %lo(controller_options_index)($t7) /* 0DCC78 7F0AA288 24010001 */ li $at, 1 /* 0DCC7C 7F0AA28C 15E10012 */ bne $t7, $at, .L7F0AA2D8 -/* 0DCC80 7F0AA290 00000000 */ nop +/* 0DCC80 7F0AA290 00000000 */ nop /* 0DCC84 7F0AA294 0C002BDC */ jal joyGetStickY /* 0DCC88 7F0AA298 00002025 */ move $a0, $zero /* 0DCC8C 7F0AA29C 44823000 */ mtc1 $v0, $f6 @@ -9070,7 +9076,7 @@ glabel sub_GAME_7F0AADC0 /* 0DCD38 7F0AA348 0FC1615C */ jal matrix_4x4_multiply /* 0DCD3C 7F0AA34C 27A603BC */ addiu $a2, $sp, 0x3bc /* 0DCD40 7F0AA350 0FC29025 */ jal controllerCheckDualControllerTypesAllowed -/* 0DCD44 7F0AA354 00000000 */ nop +/* 0DCD44 7F0AA354 00000000 */ nop /* 0DCD48 7F0AA358 10400018 */ beqz $v0, .L7F0AA3BC /* 0DCD4C 7F0AA35C 3C01C0A0 */ lui $at, 0xc0a0 /* 0DCD50 7F0AA360 3C018005 */ li $at, 0x80050000 # -0.000000 @@ -9177,7 +9183,7 @@ glabel sub_GAME_7F0AADC0 /* 0DCED8 7F0AA4E8 00408025 */ move $s0, $v0 .L7F0AA4EC: /* 0DCEDC 7F0AA4EC 0FC29025 */ jal controllerCheckDualControllerTypesAllowed -/* 0DCEE0 7F0AA4F0 00000000 */ nop +/* 0DCEE0 7F0AA4F0 00000000 */ nop /* 0DCEE4 7F0AA4F4 1040009F */ beqz $v0, .L7F0AA774 /* 0DCEE8 7F0AA4F8 24040001 */ li $a0, 1 /* 0DCEEC 7F0AA4FC 3C058004 */ lui $a1, %hi(D_80040B3C) # $a1, 0x8004 @@ -9216,7 +9222,7 @@ glabel sub_GAME_7F0AADC0 /* 0DCF70 7F0AA580 8DADA5E8 */ lw $t5, %lo(controller_options_index)($t5) /* 0DCF74 7F0AA584 24010001 */ li $at, 1 /* 0DCF78 7F0AA588 15A10012 */ bne $t5, $at, .L7F0AA5D4 -/* 0DCF7C 7F0AA58C 00000000 */ nop +/* 0DCF7C 7F0AA58C 00000000 */ nop /* 0DCF80 7F0AA590 0C002BDC */ jal joyGetStickY /* 0DCF84 7F0AA594 24040001 */ li $a0, 1 /* 0DCF88 7F0AA598 44822000 */ mtc1 $v0, $f4 @@ -9343,9 +9349,9 @@ glabel sub_GAME_7F0AADC0 /* 0DD160 7F0AA770 00408025 */ move $s0, $v0 .L7F0AA774: /* 0DD164 7F0AA774 0FC29025 */ jal controllerCheckDualControllerTypesAllowed -/* 0DD168 7F0AA778 00000000 */ nop +/* 0DD168 7F0AA778 00000000 */ nop /* 0DD16C 7F0AA77C 10400005 */ beqz $v0, .L7F0AA794 -/* 0DD170 7F0AA780 00000000 */ nop +/* 0DD170 7F0AA780 00000000 */ nop /* 0DD174 7F0AA784 0FC2A6C2 */ jal display_text_buttons_dual_control /* 0DD178 7F0AA788 02002025 */ move $a0, $s0 /* 0DD17C 7F0AA78C 10000004 */ b .L7F0AA7A0 @@ -9400,16 +9406,16 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { s32 pFontChars; gdl = draw_background_health_and_armor(gdl, param_2, 0); - + if (check_watch_page_transistion_running() != 1) { - + gdl = sub_GAME_7F0AADC0(gdl); pFontFile = ptrFontBankGothic; pFontChars = ptrFontBankGothicChars; - + gdl = microcode_constructor(gdl); - textptr = langGet(TEXT(LOPTIONS, OPTION_STR_32)); //control style - + textptr = langGet(getStringID(LOPTIONS, OPTION_STR_32_CONTROLSTYLE_LF)); //control style + sp5C = XOFFSET_1; sp58 = 0x1A; phi_s1 = 0xFF00B0; @@ -9421,9 +9427,9 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { phi_s1 = -1; } } - + textMeasure(&sp50, &sp54, textptr, pFontChars, pFontFile, 0); - + if ((watch_item_is_actively_selected != 0) && (controller_options_index == 0)) { gdl = textRenderGlow(gdl, &sp5C, &sp58, textptr, pFontChars, pFontFile, phi_s1, 0x7000A0, sp54 + 1, sp50, 0, 0); @@ -9431,19 +9437,19 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { { gdl = textRender(gdl, &sp5C, &sp58, textptr, pFontChars, pFontFile, phi_s1, sp54, sp50, 0, 0); } - + gdl = sub_GAME_7F0A97D0(gdl); - textptr = langGet(TEXT(LOPTIONS, OPTION_STR_33)); //controller; - + textptr = langGet(getStringID(LOPTIONS, OPTION_STR_33_CONTROLLER_LF)); //controller; + phi_s1 = 0xFF00B0; - + if (controllerCheckDualControllerTypesAllowed()) { - textptr = langGet(TEXT(LOPTIONS, OPTION_STR_34)); //controllers; + textptr = langGet(getStringID(LOPTIONS, OPTION_STR_34_CONTROLLERS_LF)); //controllers; } sp5C = XOFFSET_1; sp58 = 0x2B; - + if (controller_options_index == 1) { phi_s1 = 0xA0FFA0F0; @@ -9452,7 +9458,7 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { phi_s1 = -1; } } - + textMeasure(&sp50, &sp54, textptr, pFontChars, pFontFile, 0); if ((watch_item_is_actively_selected != 0) && (controller_options_index == 1)) @@ -9462,7 +9468,7 @@ Gfx *draw_watch_control_options_page(Gfx *gdl, Mtx *param_2) { { gdl = textRender(gdl, &sp5C, &sp58, textptr, pFontChars, pFontFile, phi_s1, sp54, sp50, 0, 0); } - + } return gdl; } @@ -9926,7 +9932,7 @@ Gfx *draw_watch_game_options_page(Gfx *gdl, Mtx *param_2) { s32 pFontFile; s32 pFontChars; - + gdl = draw_background_health_and_armor(gdl, param_2, 0); if (check_watch_page_transistion_running() != 1) @@ -9937,11 +9943,11 @@ Gfx *draw_watch_game_options_page(Gfx *gdl, Mtx *param_2) { pFontChars = ptrFontBankGothicChars; gdl = microcode_constructor(gdl); - textptr = langGet(TEXT(LOPTIONS, OPTION_STR_35)); //music + textptr = langGet(getStringID(LOPTIONS, OPTION_STR_35_MUSIC_LF)); //music sp54 = XOFFSET_1; sp50 = YOFFSET_8; - + sp5C = 0xFF00B0; if (game_options_index == 0) @@ -9965,7 +9971,7 @@ Gfx *draw_watch_game_options_page(Gfx *gdl, Mtx *param_2) { } sp5C = 0xFF00B0; - textptr = langGet(TEXT(LOPTIONS, OPTION_STR_36)); //fx + textptr = langGet(getStringID(LOPTIONS, OPTION_STR_36_FX_LF)); //fx sp54 = XOFFSET_1; sp50 = YOFFSET_9; @@ -10031,7 +10037,7 @@ u8 *sub_GAME_7F0AC120(u8 *arg) { if (*++arg != 0) { - ret = arg; + ret = arg; } } #if defined(VERSION_EU) @@ -10882,7 +10888,7 @@ glabel draw_watch_mission_briefing_page /* 0DE0A0 7F0AB6B0 002B0821 */ addu $at, $at, $t3 /* 0DE0A4 7F0AB6B4 8C2BCFC4 */ lw $t3, %lo(jpt_80058570)($at) /* 0DE0A8 7F0AB6B8 01600008 */ jr $t3 -/* 0DE0AC 7F0AB6BC 00000000 */ nop +/* 0DE0AC 7F0AB6BC 00000000 */ nop .L7F0AC3B8: /* 0DE0B0 7F0AB6C0 0FC304AE */ jal langGet /* 0DE0B4 7F0AB6C4 3404AC38 */ li $a0, 44088 @@ -10899,7 +10905,7 @@ glabel draw_watch_mission_briefing_page /* 0DE0E0 7F0AB6F0 0FC2B789 */ jal sub_GAME_7F0AEB64 /* 0DE0E4 7F0AB6F4 AFB80010 */ sw $t8, 0x10($sp) /* 0DE0E8 7F0AB6F8 0FC2964E */ jal mission_brief_background_navigation -/* 0DE0EC 7F0AB6FC 00000000 */ nop +/* 0DE0EC 7F0AB6FC 00000000 */ nop /* 0DE0F0 7F0AB700 1000012B */ b .L7F0ABBB0 /* 0DE0F4 7F0AB704 8FB80D4C */ lw $t8, 0xd4c($sp) .L7F0AC400: @@ -10918,7 +10924,7 @@ glabel draw_watch_mission_briefing_page /* 0DE128 7F0AB738 0FC2B789 */ jal sub_GAME_7F0AEB64 /* 0DE12C 7F0AB73C AFB90010 */ sw $t9, 0x10($sp) /* 0DE130 7F0AB740 0FC29670 */ jal mission_brief_m_briefing_navigation -/* 0DE134 7F0AB744 00000000 */ nop +/* 0DE134 7F0AB744 00000000 */ nop /* 0DE138 7F0AB748 10000119 */ b .L7F0ABBB0 /* 0DE13C 7F0AB74C 8FB80D4C */ lw $t8, 0xd4c($sp) .L7F0AC448: @@ -10937,7 +10943,7 @@ glabel draw_watch_mission_briefing_page /* 0DE170 7F0AB780 0FC2B789 */ jal sub_GAME_7F0AEB64 /* 0DE174 7F0AB784 AFAD0010 */ sw $t5, 0x10($sp) /* 0DE178 7F0AB788 0FC29693 */ jal mission_brief_q_branch_navigation -/* 0DE17C 7F0AB78C 00000000 */ nop +/* 0DE17C 7F0AB78C 00000000 */ nop /* 0DE180 7F0AB790 10000107 */ b .L7F0ABBB0 /* 0DE184 7F0AB794 8FB80D4C */ lw $t8, 0xd4c($sp) .L7F0AC490: @@ -10956,7 +10962,7 @@ glabel draw_watch_mission_briefing_page /* 0DE1B8 7F0AB7C8 0FC2B789 */ jal sub_GAME_7F0AEB64 /* 0DE1BC 7F0AB7CC AFAC0010 */ sw $t4, 0x10($sp) /* 0DE1C0 7F0AB7D0 0FC296B7 */ jal mission_brief_moneypenny_navigation -/* 0DE1C4 7F0AB7D4 00000000 */ nop +/* 0DE1C4 7F0AB7D4 00000000 */ nop /* 0DE1C8 7F0AB7D8 100000F5 */ b .L7F0ABBB0 /* 0DE1CC 7F0AB7DC 8FB80D4C */ lw $t8, 0xd4c($sp) .L7F0AC4D8: @@ -10972,7 +10978,7 @@ glabel draw_watch_mission_briefing_page /* 0DE1F0 7F0AB800 24040005 */ li $a0, 5 .L7F0AB804: /* 0DE1F4 7F0AB804 0FC2AF98 */ jal setTextOverlapCorrection -/* 0DE1F8 7F0AB808 00000000 */ nop +/* 0DE1F8 7F0AB808 00000000 */ nop /* 0DE1FC 7F0AB80C 0FC304AE */ jal langGet /* 0DE200 7F0AB810 3404AC3C */ li $a0, 44092 /* 0DE204 7F0AB814 27A40170 */ addiu $a0, $sp, 0x170 @@ -11084,7 +11090,7 @@ glabel draw_watch_mission_briefing_page /* 0DE394 7F0AB9A4 0FC2B713 */ jal textMeasure /* 0DE398 7F0AB9A8 AFAF0010 */ sw $t7, 0x10($sp) /* 0DE39C 7F0AB9AC 0C000F9B */ jal viGetX -/* 0DE3A0 7F0AB9B0 00000000 */ nop +/* 0DE3A0 7F0AB9B0 00000000 */ nop /* 0DE3A4 7F0AB9B4 8FA80D50 */ lw $t0, 0xd50($sp) /* 0DE3A8 7F0AB9B8 04410003 */ bgez $v0, .L7F0AB9C8 /* 0DE3AC 7F0AB9BC 00025043 */ sra $t2, $v0, 1 @@ -11094,7 +11100,7 @@ glabel draw_watch_mission_briefing_page /* 0DE3B8 7F0AB9C8 2509003C */ addiu $t1, $t0, 0x3c /* 0DE3BC 7F0AB9CC 012A082A */ slt $at, $t1, $t2 /* 0DE3C0 7F0AB9D0 10200002 */ beqz $at, .L7F0AB9DC -/* 0DE3C4 7F0AB9D4 00000000 */ nop +/* 0DE3C4 7F0AB9D4 00000000 */ nop /* 0DE3C8 7F0AB9D8 2652FFFF */ addiu $s2, $s2, -1 .L7F0AB9DC: /* 0DE3CC 7F0AB9DC 1A400008 */ blez $s2, .L7F0ABA00 @@ -11194,7 +11200,7 @@ glabel draw_watch_mission_briefing_page /* 0DE514 7F0ABB24 AFAC0150 */ sw $t4, 0x150($sp) .L7F0ABB28: /* 0DE518 7F0ABB28 0C000F9F */ jal viGetY -/* 0DE51C 7F0ABB2C 00000000 */ nop +/* 0DE51C 7F0ABB2C 00000000 */ nop /* 0DE520 7F0ABB30 8FAF0D48 */ lw $t7, 0xd48($sp) /* 0DE524 7F0ABB34 8FAE0D4C */ lw $t6, 0xd4c($sp) /* 0DE528 7F0ABB38 8FA80084 */ lw $t0, 0x84($sp) @@ -11222,12 +11228,12 @@ glabel draw_watch_mission_briefing_page /* 0DE57C 7F0ABB8C 27DE0001 */ addiu $fp, $fp, 1 /* 0DE580 7F0ABB90 03C2082A */ slt $at, $fp, $v0 /* 0DE584 7F0ABB94 1420FF2E */ bnez $at, .L7F0AB850 -/* 0DE588 7F0ABB98 00000000 */ nop +/* 0DE588 7F0ABB98 00000000 */ nop .L7F0ABB9C: /* 0DE58C 7F0ABB9C 0FC2AF98 */ jal setTextOverlapCorrection /* 0DE590 7F0ABBA0 2404FFFF */ li $a0, -1 /* 0DE594 7F0ABBA4 0FC296DB */ jal mission_brief_objectives_navigation -/* 0DE598 7F0ABBA8 00000000 */ nop +/* 0DE598 7F0ABBA8 00000000 */ nop .L7F0ABBAC: /* 0DE59C 7F0ABBAC 8FB80D4C */ lw $t8, 0xd4c($sp) .L7F0ABBB0: @@ -11274,7 +11280,7 @@ glabel draw_watch_mission_briefing_page /* 0DE640 7F0ABC50 0FC2B713 */ jal textMeasure /* 0DE644 7F0ABC54 AFB80010 */ sw $t8, 0x10($sp) /* 0DE648 7F0ABC58 0C000F9B */ jal viGetX -/* 0DE64C 7F0ABC5C 00000000 */ nop +/* 0DE64C 7F0ABC5C 00000000 */ nop /* 0DE650 7F0ABC60 0C000F9F */ jal viGetY /* 0DE654 7F0ABC64 A7A20064 */ sh $v0, 0x64($sp) /* 0DE658 7F0ABC68 8FAC0D48 */ lw $t4, 0xd48($sp) @@ -11322,7 +11328,7 @@ Gfx *sub_GAME_7F0ACA28(Gfx *gdl, Mtx *arg1, s32 watch_transitioning) if (watch_transitioning == TRUE) { - set_BONDdata_outside_watch_menu_flag(0); + set_BONDdata_outside_watch_menu_flag(FALSE); sub_GAME_7F0BD8FC(0); // Handle A or Z button click when in any page but inventory page @@ -11352,7 +11358,7 @@ Gfx *sub_GAME_7F0ACA28(Gfx *gdl, Mtx *arg1, s32 watch_transitioning) else if (watch_transitioning == FALSE) { sub_GAME_7F0BD8FC(1); - set_BONDdata_outside_watch_menu_flag(1); + set_BONDdata_outside_watch_menu_flag(TRUE); gdl = draw_background_health_and_armor_transitioning(gdl, arg1); } diff --git a/src/game/watch.h b/src/game/watch.h index 818818c..eaca02d 100644 --- a/src/game/watch.h +++ b/src/game/watch.h @@ -113,17 +113,17 @@ struct game_options { extern struct game_options game_options_entries[]; -void reset_controller_options_index(); +void reset_controller_options_index(void); -void reset_game_options_index(); +void reset_game_options_index(void); -void zero_D_800409A4(); +void zero_D_800409A4(void); f32 watchWrapAroundPI(f32 arg0); f32 sub_GAME_7F0A95C4(f32 param_1, f32 param_2, f32 param_3); -SCREEN_RATIO_OPTION get_screen_ratio(); +SCREEN_RATIO_OPTION get_screen_ratio(void); void set_screen_ratio(SCREEN_RATIO_OPTION ratio_option); @@ -131,7 +131,7 @@ s32 cur_player_get_autoaim(void); u32 cur_player_get_lookahead(void); void cur_player_set_autoaim(u32 param_1); int cur_player_get_control_type(void); -u32 cur_player_get_sight_onscreen_control(); +u32 cur_player_get_sight_onscreen_control(void); u32 cur_player_get_ammo_onscreen_setting(void); u32 cur_player_get_aim_control(void); u32 cur_player_get_screen_setting(void); diff --git a/src/gspboot.s b/src/gspboot.s index 5b1f65e..a97b1c9 100644 --- a/src/gspboot.s +++ b/src/gspboot.s @@ -10,12 +10,12 @@ .section .text, "ax" glabel gsp3DTextStart -.incbin "/bin/gspboot.text.bin" +.incbin "bin/gspboot.text.bin" glabel gsp3DTextEnd .section .data glabel gsp3DDataStart -.incbin "/bin/gspboot.data.bin" +.incbin "bin/gspboot.data.bin" glabel gsp3DDataEnd .section .rodata .section .bss diff --git a/src/init.c b/src/init.c index 4ac61a1..b91eafb 100644 --- a/src/init.c +++ b/src/init.c @@ -36,8 +36,7 @@ #define RZIPLOADADDR 0x70200000 #define RZIPBUFADDR 0x80300000 -#define MAXCODESIZE 0xFFFB0 - +#define MAXCODESIZE (0x101000 - 0x1050) /** diff --git a/src/joy.c b/src/joy.c index 3c24be3..3f6922d 100644 --- a/src/joy.c +++ b/src/joy.c @@ -436,7 +436,7 @@ void joyPoll(void) s32 index; s8 i_s8; s32 i; - + // Check if there are any disable requests if (osRecvMesg(&g_ContDisablePollSendMessageQueue, &msg, OS_MESG_NOBLOCK) == 0) { @@ -458,7 +458,7 @@ void joyPoll(void) osContStartReadData(&g_ContInputMessageQueue); g_ContBusy = TRUE; osSendMesg(&g_ContEnablePollReceiveMessageQueue, &msg, OS_MESG_NOBLOCK); - + g_ContPollDisableCount--; return; @@ -489,12 +489,12 @@ void joyPoll(void) } for (i_s8 = 0; i_s8 < MAXCONTROLLERS; i_s8++) - { + { if (((g_ContData[CONTDATA_REGULAR].samples[g_ContData[CONTDATA_REGULAR].nextlast].pads[i_s8].errno == 0) && (g_ContData[CONTDATA_REGULAR].samples[g_ContData[CONTDATA_REGULAR].nextsecondlast].pads[i_s8].errno != 0)) || ((g_ContData[CONTDATA_REGULAR].samples[g_ContData[CONTDATA_REGULAR].nextlast].pads[i_s8].errno != 0) && (g_ContData[CONTDATA_REGULAR].samples[g_ContData[CONTDATA_REGULAR].nextsecondlast].pads[i_s8].errno == 0))) { joyCheckStatus(); - + break; } } @@ -516,7 +516,7 @@ void joyPoll(void) g_ContBadReadsButtonsPressed[i] = 0; } } - + count = 0; } } @@ -767,6 +767,11 @@ glabel joyPoll s8 joyGetStickX(s8 contpadnum) { + //this assert is on ALL stick functions below +#ifdef DEBUG + assert(contpadnum > 0); //j +#endif + if ((g_ContDataPtr->playbackcontcount < 0) && ((g_ConnectedControllers >> contpadnum & 1) == 0)) { g_ContBadReadsStickX[contpadnum]++; @@ -775,7 +780,7 @@ s8 joyGetStickX(s8 contpadnum) return g_ContDataPtr->samples[g_ContDataPtr->curlast].pads[contpadnum].stick_x; } - +//duplicate? s8 joy7000C174(s8 contpadnum) { if ((g_ContDataPtr->playbackcontcount < 0) && ((g_ConnectedControllers >> contpadnum & 1) == 0)) @@ -853,11 +858,11 @@ void joy7000C470(void) * Reads controller joystick x value. JOY_CLAMP_OFFSET is first * added to the raw value, then it is clamped between JOY_CLAMP_MIN * and JOY_CLAMP_MAX. The value is then normalized against supplied range parameters. - * + * * @param contpadnum controller to read. * @param rangemin min value of range to normalize against. * @param rangemax max value of range to normalize against. - * + * * @return returns normalized value between range, as an s32. */ s32 joyGetStickXInRange(s8 contpadnum, s32 rangemin, s32 rangemax) @@ -883,11 +888,11 @@ s32 joyGetStickXInRange(s8 contpadnum, s32 rangemin, s32 rangemax) * Reads controller joystick y value. JOY_CLAMP_OFFSET is first * added to the raw value, then it is clamped between JOY_CLAMP_MIN * and JOY_CLAMP_MAX. The value is then normalized against supplied range parameters. - * + * * @param contpadnum controller to read. * @param rangemin min value of range to normalize against. * @param rangemax max value of range to normalize against. - * + * * @return returns normalized value between range, as an s32. */ s32 joyGetStickYInRange(s8 contpadnum, s32 rangemin, s32 rangemax) @@ -913,11 +918,11 @@ s32 joyGetStickYInRange(s8 contpadnum, s32 rangemin, s32 rangemax) * Reads controller joystick x value. JOY_CLAMP_OFFSET is first * added to the raw value, then it is clamped between JOY_CLAMP_MIN * and JOY_CLAMP_MAX. The value is then normalized against supplied range parameters. - * + * * @param contpadnum controller to read. * @param rangemin min value of range to normalize against. * @param rangemax max value of range to normalize against. - * + * * @return returns normalized value between range, as a float. */ f32 joyGetStickXInRangef(s8 contpadnum, f32 rangemin, f32 rangemax) @@ -943,11 +948,11 @@ f32 joyGetStickXInRangef(s8 contpadnum, f32 rangemin, f32 rangemax) * Reads controller joystick y value. JOY_CLAMP_OFFSET is first * added to the raw value, then it is clamped between JOY_CLAMP_MIN * and JOY_CLAMP_MAX. The value is then normalized against supplied range parameters. - * + * * @param contpadnum controller to read. * @param rangemin min value of range to normalize against. * @param rangemax max value of range to normalize against. - * + * * @return returns normalized value between range, as a float. */ f32 joyGetStickYInRangef(s8 contpadnum, f32 rangemin, f32 rangemax) diff --git a/src/libultra/gu/sqrtf.s b/src/libultra/gu/sqrtf.s index 454f66a..45edbfb 100644 --- a/src/libultra/gu/sqrtf.s +++ b/src/libultra/gu/sqrtf.s @@ -16,4 +16,4 @@ glabel sqrtf /* 0203E0 7001F7E0 03E00008 */ jr $ra /* 0203E4 7001F7E4 46006004 */ sqrt.s $f0, $f12 - +.size sqrtf, . - sqrtf diff --git a/src/libultra/libc/bcmp.s b/src/libultra/libc/bcmp.s index 508e53d..117c0cf 100644 --- a/src/libultra/libc/bcmp.s +++ b/src/libultra/libc/bcmp.s @@ -99,4 +99,4 @@ glabel _bcmp .L70016E84: /* 017A84 70016E84 03E00008 */ jr $ra /* 017A88 70016E88 24020001 */ li $v0, 1 - +.size _bcmp, . - _bcmp diff --git a/src/libultra/libc/bcopy.s b/src/libultra/libc/bcopy.s index 63153db..79c4138 100644 --- a/src/libultra/libc/bcopy.s +++ b/src/libultra/libc/bcopy.s @@ -230,4 +230,4 @@ glabel bcopy /* 010868 7000FC68 24C6FFFC */ addiu $a2, $a2, -4 /* 01086C 7000FC6C 1000FFF8 */ b .L7000FC50 /* 010870 7000FC70 ACA20000 */ sw $v0, ($a1) - +.size bcopy, . - bcopy diff --git a/src/libultra/libc/bzero.s b/src/libultra/libc/bzero.s index b29af1c..d1ebf24 100644 --- a/src/libultra/libc/bzero.s +++ b/src/libultra/libc/bzero.s @@ -65,4 +65,4 @@ glabel memset /* 0188D8 70017CD8 00000000 */ nop /* 0188DC 70017CDC 00000000 */ nop - +.size bzero, . - bzero diff --git a/src/libultra/os/getcount.s b/src/libultra/os/getcount.s index 511679e..171395e 100644 --- a/src/libultra/os/getcount.s +++ b/src/libultra/os/getcount.s @@ -13,3 +13,4 @@ glabel osGetCount /* 00E4E0 7000D8E0 40024800 */ mfc0 $v0, $9 /* 00E4E4 7000D8E4 03E00008 */ jr $ra /* 00E4E8 7000D8E8 00000000 */ nop +.size osGetCount, . - osGetCount diff --git a/src/libultra/os/invaldcache.s b/src/libultra/os/invaldcache.s index a64d018..b15286e 100644 --- a/src/libultra/os/invaldcache.s +++ b/src/libultra/os/invaldcache.s @@ -59,3 +59,4 @@ glabel osInvalDCache /* 0117C0 70010BC0 25080010 */ addiu $t0, $t0, 0x10 /* 0117C4 70010BC4 03E00008 */ jr $ra /* 0117C8 70010BC8 00000000 */ nop +.size osInvalDCache, . - osInvalDCache diff --git a/src/libultra/os/invalicache.s b/src/libultra/os/invalicache.s index a29eb38..8ed6cb5 100644 --- a/src/libultra/os/invalicache.s +++ b/src/libultra/os/invalicache.s @@ -44,3 +44,4 @@ glabel osInvalICache /* 00DFB8 7000D3B8 25080020 */ addiu $t0, $t0, 0x20 /* 00DFBC 7000D3BC 03E00008 */ jr $ra /* 00DFC0 7000D3C0 00000000 */ nop +.size osInvalICache, . - osInvalICache diff --git a/src/libultra/os/writebackdcacheall.s b/src/libultra/os/writebackdcacheall.s index e86c31c..4077cc6 100644 --- a/src/libultra/os/writebackdcacheall.s +++ b/src/libultra/os/writebackdcacheall.s @@ -21,3 +21,4 @@ glabel osWritebackDCacheAll /* 00DF3C 7000D33C 25080010 */ addiu $t0, $t0, 0x10 /* 00DF40 7000D340 03E00008 */ jr $ra /* 00DF44 7000D344 00000000 */ nop +.size osWritebackDCacheAll, . - osWritebackDCacheAll diff --git a/src/libultrare/audio/env.s b/src/libultrare/audio/env.s index 3d4e87a..71cc96d 100644 --- a/src/libultrare/audio/env.s +++ b/src/libultrare/audio/env.s @@ -25,6 +25,7 @@ glabel _ldexpf .L7001A920: /* 01B520 7001A920 03E00008 */ jr $ra /* 01B524 7001A924 46206006 */ mov.d $f0, $f12 +.size _ldexpf, . - _ldexpf glabel _frexpf /* 01B528 7001A928 44801800 */ mtc1 $zero, $f3 @@ -37,7 +38,6 @@ glabel _frexpf /* 01B544 7001A944 462C103C */ c.lt.d $f2, $f12 /* 01B548 7001A948 03E00008 */ jr $ra /* 01B54C 7001A94C 46206006 */ mov.d $f0, $f12 - /* 01B550 7001A950 462C103C */ c.lt.d $f2, $f12 .L7001A954: /* 01B554 7001A954 44817800 */ mtc1 $at, $f15 @@ -94,6 +94,7 @@ glabel _frexpf /* 01B608 7001AA08 46201006 */ mov.d $f0, $f2 /* 01B60C 7001AA0C 03E00008 */ jr $ra /* 01B610 7001AA10 00000000 */ nop +.size _frexpf, . - _frexpf glabel alEnvmixerParam /* 01B614 7001AA14 27BDFFE8 */ addiu $sp, $sp, -0x18 @@ -160,6 +161,7 @@ glabel alEnvmixerParam /* 01B6E8 7001AAE8 00001025 */ move $v0, $zero /* 01B6EC 7001AAEC 03E00008 */ jr $ra /* 01B6F0 7001AAF0 00000000 */ nop +.size alEnvmixerParam, . - alEnvmixerParam glabel ultra_7001AAF4 /* 01B6F4 7001AAF4 5480000C */ bnezl $a0, .L7001AB28 @@ -172,11 +174,9 @@ glabel ultra_7001AAF4 /* 01B710 7001AB10 A4AE0000 */ sh $t6, ($a1) /* 01B714 7001AB14 03E00008 */ jr $ra /* 01B718 7001AB18 24027FFF */ li $v0, 32767 - .L7001AB1C: /* 01B71C 7001AB1C 03E00008 */ jr $ra /* 01B720 7001AB20 A4A00000 */ sh $zero, ($a1) - /* 01B724 7001AB24 44843000 */ mtc1 $a0, $f6 .L7001AB28: /* 01B728 7001AB28 460E6101 */ sub.s $f4, $f12, $f14 @@ -214,7 +214,8 @@ glabel ultra_7001AAF4 /* 01B7A4 7001ABA4 00000000 */ nop /* 01B7A8 7001ABA8 A4AF0000 */ sh $t7, ($a1) /* 01B7AC 7001ABAC 03E00008 */ jr $ra -/* 01B7B0 7001ABB0 00000000 */ nop +/* 01B7B0 7001ABB0 00000000 */ nop +.size ultra_7001AAF4, . - ultra_7001AAF4 glabel ultra_7001ABB4 /* 01B7B4 7001ABB4 27BDFFE0 */ addiu $sp, $sp, -0x20 @@ -390,6 +391,7 @@ glabel ultra_7001ABB4 /* 01BA48 7001AE48 27BD0020 */ addiu $sp, $sp, 0x20 /* 01BA4C 7001AE4C 03E00008 */ jr $ra /* 01BA50 7001AE50 00000000 */ nop +.size ultra_7001ABB4, . - ultra_7001ABB4 /* 01BA54 7001AE54 03E00008 */ jr $ra /* 01BA58 7001AE58 00000000 */ nop @@ -839,7 +841,7 @@ glabel alEnvmixerPull /* 01C0CC 7001B4CC 8FBE0050 */ lw $fp, 0x50($sp) /* 01C0D0 7001B4D0 03E00008 */ jr $ra /* 01C0D4 7001B4D4 27BD00D8 */ addiu $sp, $sp, 0xd8 - +.size alEnvmixerPull, . - alEnvmixerPull /* 01C0D8 7001B4D8 00000000 */ nop /* 01C0DC 7001B4DC 00000000 */ nop @@ -861,6 +863,7 @@ glabel eqpower .half 9196, 8806, 8415, 8023, 7630, 7235, 6839, 6442 .half 6044, 5646, 5246, 4845, 4444, 4042, 3640, 3237 .half 2833, 2429, 2025, 1620, 1216, 810, 405, 0 +.size eqpower, . - eqpower .section .rodata glabel aAssertionFaultSSLineD diff --git a/src/mema.c b/src/mema.c index 2bd3ef3..86eae2c 100644 --- a/src/mema.c +++ b/src/mema.c @@ -243,167 +243,79 @@ void memaSingleDefragPass(void) } -#ifdef NONMATCHING // Attempt to free up some memory. Start by looking through the first 16 allocations // for a suitable one. If none is found, then look through the rest for any that are // large enough. If this also fails, then do 8 merge iterations and then look through // entire buffer again. If successful, return the address to the freed memory, otherwise 0. -s32 memaAlloc(u32 amount) { +void *memaAlloc(u32 amount) { s32 addr; u32 diff; s32 i; - memaspace *curr = &g_MemoryAllocations[2]; - memaspace *best = NULL; + + struct memaspace *curr; + u32 bestdiff; + struct memaspace *best; + + if(1); + + curr = &g_MemoryAllocations.spaces[0]; + bestdiff = 0xffffffff; + best = NULL; + for (i = 0; i < 16; i++, curr++) { - if (curr->size >= amount) { - if (curr->addr == -1) { + if (curr->size < amount) { + continue; + } + + if (curr->addr == 0xffffffff) { + break; + } + + diff = (curr->size - amount); + + if (diff < bestdiff) { + bestdiff = diff; + best = curr; + if ((diff < 64) || (diff < (amount / 4))) { break; } - diff = (curr->size - amount); - if (diff < 0xFFFFFFFF) { - best = curr; - if ((diff < 64) || (diff < (amount / 4))) { - break; - } - } } } + if (best == NULL) { while (curr->size < amount) { curr++; } - if (curr->addr == -1) { + + if (curr->addr == 0xffffffff) { for (i = 0; i < 8; i++) { - memaDefragPass(g_MemoryAllocations); + memaDefragPass(&g_MemoryAllocations); } - curr = &g_MemoryAllocations[2]; + + curr = &g_MemoryAllocations.spaces[0]; + while (curr->size < amount) { curr++; } - if (curr->addr == -1) { - return 0; + + if (curr->addr == 0xffffffff) { + return NULL; } } + + best = curr; } - addr = curr->addr; - curr->addr += amount; - curr->size -= amount; - if (curr->size == 0) { - curr->addr = 0; + + addr = best->addr; + best->addr += amount; + best->size -= amount; + + if (best->size == 0) { + best->addr = 0; } - return addr; + + return (void*)addr; } -#else -GLOBAL_ASM( -.text -glabel memaAlloc -/* 00AA34 70009E34 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 00AA38 70009E38 AFB2001C */ sw $s2, 0x1c($sp) -/* 00AA3C 70009E3C AFB10018 */ sw $s1, 0x18($sp) -/* 00AA40 70009E40 00809025 */ move $s2, $a0 -/* 00AA44 70009E44 AFB50028 */ sw $s5, 0x28($sp) -/* 00AA48 70009E48 AFB00014 */ sw $s0, 0x14($sp) -/* 00AA4C 70009E4C 3C118006 */ lui $s1, %hi(g_MemoryAllocations + 0x10) -/* 00AA50 70009E50 AFBF002C */ sw $ra, 0x2c($sp) -/* 00AA54 70009E54 AFB40024 */ sw $s4, 0x24($sp) -/* 00AA58 70009E58 AFB30020 */ sw $s3, 0x20($sp) -/* 00AA5C 70009E5C 26313C38 */ addiu $s1, %lo(g_MemoryAllocations + 0x10) # addiu $s1, $s1, 0x3c38 -/* 00AA60 70009E60 2404FFFF */ li $a0, -1 -/* 00AA64 70009E64 00002825 */ move $a1, $zero -/* 00AA68 70009E68 00008025 */ move $s0, $zero -/* 00AA6C 70009E6C 2415FFFF */ li $s5, -1 -/* 00AA70 70009E70 24060010 */ li $a2, 16 -.L70009E74: -/* 00AA74 70009E74 8E230004 */ lw $v1, 4($s1) -/* 00AA78 70009E78 26100001 */ addiu $s0, $s0, 1 -/* 00AA7C 70009E7C 0072082B */ sltu $at, $v1, $s2 -/* 00AA80 70009E80 1420000E */ bnez $at, .L70009EBC -/* 00AA84 70009E84 00721023 */ subu $v0, $v1, $s2 -/* 00AA88 70009E88 8E2E0000 */ lw $t6, ($s1) -/* 00AA8C 70009E8C 0044082B */ sltu $at, $v0, $a0 -/* 00AA90 70009E90 00127882 */ srl $t7, $s2, 2 -/* 00AA94 70009E94 12AE000B */ beq $s5, $t6, .L70009EC4 -/* 00AA98 70009E98 00000000 */ nop -/* 00AA9C 70009E9C 10200007 */ beqz $at, .L70009EBC -/* 00AAA0 70009EA0 2C410040 */ sltiu $at, $v0, 0x40 -/* 00AAA4 70009EA4 00402025 */ move $a0, $v0 -/* 00AAA8 70009EA8 14200006 */ bnez $at, .L70009EC4 -/* 00AAAC 70009EAC 02202825 */ move $a1, $s1 -/* 00AAB0 70009EB0 004F082B */ sltu $at, $v0, $t7 -/* 00AAB4 70009EB4 14200003 */ bnez $at, .L70009EC4 -/* 00AAB8 70009EB8 00000000 */ nop -.L70009EBC: -/* 00AABC 70009EBC 1606FFED */ bne $s0, $a2, .L70009E74 -/* 00AAC0 70009EC0 26310008 */ addiu $s1, $s1, 8 -.L70009EC4: -/* 00AAC4 70009EC4 54A00027 */ bnezl $a1, .L70009F64 -/* 00AAC8 70009EC8 8CA30000 */ lw $v1, ($a1) -/* 00AACC 70009ECC 8E380004 */ lw $t8, 4($s1) -/* 00AAD0 70009ED0 00008025 */ move $s0, $zero -/* 00AAD4 70009ED4 24140008 */ li $s4, 8 -/* 00AAD8 70009ED8 0312082B */ sltu $at, $t8, $s2 -/* 00AADC 70009EDC 10200006 */ beqz $at, .L70009EF8 -/* 00AAE0 70009EE0 3C138006 */ lui $s3, %hi(g_MemoryAllocations) -/* 00AAE4 70009EE4 8E39000C */ lw $t9, 0xc($s1) -.L70009EE8: -/* 00AAE8 70009EE8 26310008 */ addiu $s1, $s1, 8 -/* 00AAEC 70009EEC 0332082B */ sltu $at, $t9, $s2 -/* 00AAF0 70009EF0 5420FFFD */ bnezl $at, .L70009EE8 -/* 00AAF4 70009EF4 8E39000C */ lw $t9, 0xc($s1) -.L70009EF8: -/* 00AAF8 70009EF8 8E280000 */ lw $t0, ($s1) -/* 00AAFC 70009EFC 26733C28 */ addiu $s3, %lo(g_MemoryAllocations) # addiu $s3, $s3, 0x3c28 -/* 00AB00 70009F00 56A80017 */ bnel $s5, $t0, .L70009F60 -/* 00AB04 70009F04 02202825 */ move $a1, $s1 -/* 00AB08 70009F08 3C118006 */ lui $s1, %hi(g_MemoryAllocations + 0x10) -/* 00AB0C 70009F0C 26313C38 */ addiu $s1, %lo(g_MemoryAllocations + 0x10) # addiu $s1, $s1, 0x3c38 -.L70009F10: -/* 00AB10 70009F10 0C002694 */ jal memaDefragPass -/* 00AB14 70009F14 02602025 */ move $a0, $s3 -/* 00AB18 70009F18 26100001 */ addiu $s0, $s0, 1 -/* 00AB1C 70009F1C 1614FFFC */ bne $s0, $s4, .L70009F10 -/* 00AB20 70009F20 00000000 */ nop -/* 00AB24 70009F24 8E690014 */ lw $t1, 0x14($s3) -/* 00AB28 70009F28 0132082B */ sltu $at, $t1, $s2 -/* 00AB2C 70009F2C 50200007 */ beql $at, $zero, .L70009F4C -/* 00AB30 70009F30 8E2B0000 */ lw $t3, ($s1) -/* 00AB34 70009F34 8E2A000C */ lw $t2, 0xc($s1) -.L70009F38: -/* 00AB38 70009F38 26310008 */ addiu $s1, $s1, 8 -/* 00AB3C 70009F3C 0152082B */ sltu $at, $t2, $s2 -/* 00AB40 70009F40 5420FFFD */ bnezl $at, .L70009F38 -/* 00AB44 70009F44 8E2A000C */ lw $t2, 0xc($s1) -/* 00AB48 70009F48 8E2B0000 */ lw $t3, ($s1) -.L70009F4C: -/* 00AB4C 70009F4C 56AB0004 */ bnel $s5, $t3, .L70009F60 -/* 00AB50 70009F50 02202825 */ move $a1, $s1 -/* 00AB54 70009F54 1000000B */ b .L70009F84 -/* 00AB58 70009F58 00001025 */ move $v0, $zero -/* 00AB5C 70009F5C 02202825 */ move $a1, $s1 -.L70009F60: -/* 00AB60 70009F60 8CA30000 */ lw $v1, ($a1) -.L70009F64: -/* 00AB64 70009F64 8CAD0004 */ lw $t5, 4($a1) -/* 00AB68 70009F68 00726021 */ addu $t4, $v1, $s2 -/* 00AB6C 70009F6C 01B27023 */ subu $t6, $t5, $s2 -/* 00AB70 70009F70 ACAC0000 */ sw $t4, ($a1) -/* 00AB74 70009F74 15C00002 */ bnez $t6, .L70009F80 -/* 00AB78 70009F78 ACAE0004 */ sw $t6, 4($a1) -/* 00AB7C 70009F7C ACA00000 */ sw $zero, ($a1) -.L70009F80: -/* 00AB80 70009F80 00601025 */ move $v0, $v1 -.L70009F84: -/* 00AB84 70009F84 8FBF002C */ lw $ra, 0x2c($sp) -/* 00AB88 70009F88 8FB00014 */ lw $s0, 0x14($sp) -/* 00AB8C 70009F8C 8FB10018 */ lw $s1, 0x18($sp) -/* 00AB90 70009F90 8FB2001C */ lw $s2, 0x1c($sp) -/* 00AB94 70009F94 8FB30020 */ lw $s3, 0x20($sp) -/* 00AB98 70009F98 8FB40024 */ lw $s4, 0x24($sp) -/* 00AB9C 70009F9C 8FB50028 */ lw $s5, 0x28($sp) -/* 00ABA0 70009FA0 03E00008 */ jr $ra -/* 00ABA4 70009FA4 27BD0030 */ addiu $sp, $sp, 0x30 -) -#endif #ifdef NONMATCHING @@ -681,4 +593,4 @@ s32 memaRealloc(s32 addr, u32 oldsize, u32 newsize) } return 1; -} \ No newline at end of file +} diff --git a/src/mema.h b/src/mema.h index 9939994..5fdb043 100644 --- a/src/mema.h +++ b/src/mema.h @@ -6,7 +6,7 @@ void memaInit(void); void memaReset(void *heapaddr, u32 heapsize); void memaSingleDefragPass(void); -s32 memaAlloc(u32 size); +void *memaAlloc(u32 size); void memaFree(void *addr, s32 size); void memaDumpPrePostMerge(void); s32 memaGetLongestFree(void); diff --git a/src/memp.c b/src/memp.c index 66348a6..712ad97 100644 --- a/src/memp.c +++ b/src/memp.c @@ -13,7 +13,7 @@ */ //bss -MemoryPool g_mempPools[7]; +MemoryPool g_mempPools[MEMPOOL_COUNT]; //data void *ptr_memp_c_debug_debug_notice_list = 0; @@ -22,11 +22,12 @@ s32 D_80024408 = 0; s32 D_8002440C = 0; s32 D_80024410 = 0; +//overloaded struct s_mempMVALS sdefaultmvals = { - 2, 0x00, - 4, 0x52, - 6, 0x0F, - 0, 0x00 + MEMPOOL_MF + 1, 0, // MEMPOOL_MF + MEMPOOL_ML + 1, 82, // MEMPOOL_ML + MEMPOOL_ME + 1, 15, // MEMPOOL_ME + 0, 0 // MEMPOOL_END }; void mempInit(void) @@ -36,67 +37,102 @@ void mempInit(void) const char *tokenFind(s32 arg0, const char *arg1); long int strtol(const char *str, char **endptr, int base); -void mempCheckMemflagTokens(s32 bstart, s32 bsize) +void mempCheckMemflagTokens(s32 poolAreaStart, s32 poolAreaSize) { - s_mempMVALS sp20; - - g_mempPools[0].start = bstart; - g_mempPools[0].end = bstart + bsize; - - sp20 = sdefaultmvals; + s_mempMVALS poolSizes; - if (tokenFind(1, "-mf")) { - sp20.mf = strtol(tokenFind(1, "-mf"), NULL, 0); + //set pool 0 to what boss wants (room_model_buffer) + //pool 0 = TotalPoolArea + g_mempPools[MEMPOOL_TOTAL].start = poolAreaStart; + g_mempPools[MEMPOOL_TOTAL].end = poolAreaStart + poolAreaSize; + + poolSizes = sdefaultmvals; + + if (tokenFind(1, "-mf")) + { + poolSizes.mf = strtol(tokenFind(1, "-mf"), NULL, 0); } - if (tokenFind(1, "-ml")) { - sp20.ml = strtol(tokenFind(1, "-ml"), NULL, 0); + if (tokenFind(1, "-ml")) + { + poolSizes.ml = strtol(tokenFind(1, "-ml"), NULL, 0); } - if (tokenFind(1, "-me")) { - sp20.me = strtol(tokenFind(1, "-me"), NULL, 0); + if (tokenFind(1, "-me")) + { + poolSizes.me = strtol(tokenFind(1, "-me"), NULL, 0); } - if (sp20.me == 0) { - sp20.mf = 0; - sp20.me = ((j_text_trigger ? 308 : 296) * 1024); - sp20.ml = bsize - sp20.me; + if (poolSizes.me == 0) + { + poolSizes.mf = 0; + poolSizes.me = ((j_text_trigger ? 308 : 296) * 1024); + poolSizes.ml = poolAreaSize - poolSizes.me; } - mempSetBankStarts((s32*)&sp20); + mempSetBankStarts((s32*)&poolSizes); } -void mempSetBankStarts(s32 banks[8]) +void mempSetBankStarts(s32 poolSizes[MEMPOOL_COUNT+1]) { s32 i; - s32 bankstarts[7] = {0}; - s32 var1; - s32 var3; - s32 var2; + s32 bankstarts[MEMPOOL_COUNT] = {0}; + s32 mempLen; + s32 mempRequested; + s32 mempStart; + //set MF, ML, ME first i = 0; - do { - bankstarts[banks[i]] = banks[i+1]; + do + { + // assign the "xxxIndex" the value of xxx+1 then skip "Indices", 0=2=mf, 2=4=ml, 4=6=me, 6=8=end + bankstarts[poolSizes[i]] = poolSizes[i+1]; i += 2; - } while (banks[i] != 0); + } while (poolSizes[i] != 0); //while sizes not = 0 (bank 7 = 0) + // 0 1 2 3 4 5 6 + // {0,0,0,0,poolAreaSize - 303104, 0, 303104} - for (i = 0; i < 6; i++) { + //for each bankstart, add current to next + for (i = MEMPOOL_TOTAL; i < MEMPOOL_COUNT - 1; i++) + { bankstarts[i + 1] += bankstarts[i]; } + // {0,0,0,0,poolAreaSize - 303104, poolAreaSize - 303104, poolAreaSize} - var3 = bankstarts[6]; - var1 = (g_mempPools[0].end - g_mempPools[0].start); - for (i = 0; i < 7; i++) { - bankstarts[i] = ((s64)bankstarts[i] * var1) / var3; + + mempRequested = bankstarts[MEMPOOL_COUNT - 1]; //total accumulated size of banks = poolAreaSize + mempLen = (g_mempPools[MEMPOOL_TOTAL].end - g_mempPools[MEMPOOL_TOTAL].start); + + //for each bankstart, multiply by total pool size, then divide by size of banks 1-7 + //spread each bank evenly + for (i = MEMPOOL_TOTAL; i < MEMPOOL_COUNT; i++) + { + bankstarts[i] = ((s64)bankstarts[i] * mempLen) / mempRequested; } + // {0,0,0,0,poolAreaSize - 303104, poolAreaSize - 303104, poolAreaSize} - for (i = 0; i < 7; i++) { + for (i = MEMPOOL_TOTAL; i < MEMPOOL_COUNT; i++) + { bankstarts[i] = ALIGN16_b(bankstarts[i]); } + // {0,0,0,0,poolAreaSize - 303104, poolAreaSize - 303104, poolAreaSize} - var2 = g_mempPools[0].start; - for (i = 0; i < 6; i++) { - g_mempPools[i + 1].start = bankstarts[i] + var2; - g_mempPools[i + 1].pos = 0; - g_mempPools[i + 1].end = bankstarts[i + 1] + var2; + + mempStart = g_mempPools[MEMPOOL_TOTAL].start; + //for each bank 1-7, add new start position + for (i = MEMPOOL_TOTAL; i < MEMPOOL_COUNT - 1; i++) + { + g_mempPools[i + 1].start = bankstarts[i] + mempStart; + g_mempPools[i + 1].pos = 0; + g_mempPools[i + 1].end = bankstarts[i + 1] + mempStart; } + /* + rel-start size + g_memPools[TOTAL] 0 poolArea + g_memPools[MF] 0 0 + g_memPools[2] 0 0 + g_memPools[ML] 0 0 + g_memPools[STAGE] 0 poolAreaSize - 303104 + g_memPools[ME] poolAreaSize - 303104 0 + g_memPools[PERMANENT] poolAreaSize - 303104 303104 + */ } /** @@ -107,28 +143,34 @@ void mempSetBankStarts(s32 banks[8]) #ifdef NONMATCHING // https://decomp.me/scratch/cdPCZ // Non-matching - maybe asm? -void *mempAllocBytesInBank(s32 bytes, u8 poolnum) +void *mempAllocBytesInBank(s32 bytes, u8 heap) { +# ifdef DEBUG + if ((heap < 0) || (4 < heap)) + { + osSyncPrintf(__FILE__, __LINE__, "mempAllocBytesInBank from invalid heap %d!", heap); + } +# endif for (;;) { - u8 *allocation = g_mempPools[poolnum].pos; + u8 *allocation = g_mempPools[heap].pos; - if (g_mempPools[poolnum].pos == 0) // uninitialized + if (g_mempPools[heap].pos == 0) // uninitialized { for (;;); } else { - if (g_mempPools[poolnum].pos > g_mempPools[poolnum].end) // overflow + if (g_mempPools[heap].pos > g_mempPools[heap].end) // overflow { nulled_mempLoopAllMemBanks(); for (;;); } - if (g_mempPools[poolnum].pos + bytes > g_mempPools[poolnum].end) // Overflow, try pool 6 + if (g_mempPools[heap].pos + bytes > g_mempPools[heap].end) // Overflow, try pool 6 { - poolnum = MEMPOOL_PERMANENT; - + heap = MEMPOOL_PERMANENT; + if (g_mempPools[MEMPOOL_PERMANENT].pos + bytes <= g_mempPools[MEMPOOL_PERMANENT].end) // good { u32 v0 = needmemallocation; @@ -145,8 +187,8 @@ void *mempAllocBytesInBank(s32 bytes, u8 poolnum) } else // good, allocate the mem and exit { - g_mempPools[poolnum].pos += bytes; - g_mempPools[poolnum].prevpos = allocation; + g_mempPools[heap].pos += bytes; + g_mempPools[heap].prevpos = allocation; if (1); @@ -163,7 +205,7 @@ glabel mempAllocBytesInBank /* 00A324 70009724 AFA5001C */ sw $a1, 0x1c($sp) /* 00A328 70009728 30A700FF */ andi $a3, $a1, 0xff /* 00A32C 7000972C 3C058006 */ lui $a1, %hi(g_mempPools) -/* 00A330 70009730 3C0A8002 */ lui $t2, %hi(needmemallocation) +/* 00A330 70009730 3C0A8002 */ lui $t2, %hi(needmemallocation) /* 00A334 70009734 254A4404 */ addiu $t2, %lo(needmemallocation) # addiu $t2, $t2, 0x4404 /* 00A338 70009738 24A53BB0 */ addiu $a1, %lo(g_mempPools) # addiu $a1, $a1, 0x3bb0 /* 00A33C 7000973C AFBF0014 */ sw $ra, 0x14($sp) @@ -179,7 +221,7 @@ glabel mempAllocBytesInBank /* 00A360 70009760 AC394404 */ sw $t9, %lo(needmemallocation)($at) .L70009764: /* 00A364 70009764 1000FFFF */ b .L70009764 -/* 00A368 70009768 00000000 */ nop +/* 00A368 70009768 00000000 */ nop .L7000976C: /* 00A36C 7000976C 8C640008 */ lw $a0, 8($v1) /* 00A370 70009770 00466821 */ addu $t5, $v0, $a2 @@ -190,7 +232,7 @@ glabel mempAllocBytesInBank /* 00A384 70009784 24070006 */ li $a3, 6 .L70009788: /* 00A388 70009788 1000FFFF */ b .L70009788 -/* 00A38C 7000978C 00000000 */ nop +/* 00A38C 7000978C 00000000 */ nop /* 00A390 70009790 008D082B */ sltu $at, $a0, $t5 .L70009794: /* 00A394 70009794 50200014 */ beql $at, $zero, .L700097E8 @@ -201,7 +243,7 @@ glabel mempAllocBytesInBank /* 00A3A8 700097A8 01E6C021 */ addu $t8, $t7, $a2 /* 00A3AC 700097AC 01D8082B */ sltu $at, $t6, $t8 /* 00A3B0 700097B0 14200008 */ bnez $at, .L700097D4 -/* 00A3B4 700097B4 00000000 */ nop +/* 00A3B4 700097B4 00000000 */ nop /* 00A3B8 700097B8 8D420000 */ lw $v0, ($t2) /* 00A3BC 700097BC 24190001 */ li $t9, 1 /* 00A3C0 700097C0 AD590000 */ sw $t9, ($t2) @@ -211,10 +253,10 @@ glabel mempAllocBytesInBank /* 00A3D0 700097D0 0007C100 */ sll $t8, $a3, 4 .L700097D4: /* 00A3D4 700097D4 0C00263C */ jal nulled_mempLoopAllMemBanks -/* 00A3D8 700097D8 00000000 */ nop +/* 00A3D8 700097D8 00000000 */ nop .L700097DC: /* 00A3DC 700097DC 1000FFFF */ b .L700097DC -/* 00A3E0 700097E0 00000000 */ nop +/* 00A3E0 700097E0 00000000 */ nop /* 00A3E4 700097E4 00466821 */ addu $t5, $v0, $a2 .L700097E8: /* 00A3E8 700097E8 AC6D0004 */ sw $t5, 4($v1) @@ -223,7 +265,7 @@ glabel mempAllocBytesInBank /* 00A3F4 700097F4 27BD0018 */ addiu $sp, $sp, 0x18 /* 00A3F8 700097F8 01001025 */ move $v0, $t0 /* 00A3FC 700097FC 03E00008 */ jr $ra -/* 00A400 70009800 00000000 */ nop +/* 00A400 70009800 00000000 */ nop ) #endif @@ -234,7 +276,7 @@ s32 mempAddEntryOfSizeToBank(u8* ptrdata, u32 newsize, u8 bank) { s32 oldsize; s32 diffsize; - + if (needmemallocation && (ptrdata == (u8*)g_mempPools[6].prevpos)) { bank = 6; } @@ -264,16 +306,16 @@ s32 mempAddEntryOfSizeToBank(u8* ptrdata, u32 newsize, u8 bank) nulled_mempLoopAllMemBanks(); while(TRUE) {} } - + g_mempPools[bank].pos += diffsize; - + return 1; } #else GLOBAL_ASM( .text glabel mempAddEntryOfSizeToBank -/* 00A404 70009804 3C0F8002 */ lui $t7, %hi(needmemallocation) +/* 00A404 70009804 3C0F8002 */ lui $t7, %hi(needmemallocation) /* 00A408 70009808 8DEF4404 */ lw $t7, %lo(needmemallocation)($t7) /* 00A40C 7000980C 27BDFFE8 */ addiu $sp, $sp, -0x18 /* 00A410 70009810 AFA60020 */ sw $a2, 0x20($sp) @@ -283,13 +325,13 @@ glabel mempAddEntryOfSizeToBank /* 00A420 70009820 AFA5001C */ sw $a1, 0x1c($sp) /* 00A424 70009824 11E00006 */ beqz $t7, .L70009840 /* 00A428 70009828 00803825 */ move $a3, $a0 -/* 00A42C 7000982C 3C188006 */ lui $t8, %hi(g_mempPools+0x6C) +/* 00A42C 7000982C 3C188006 */ lui $t8, %hi(g_mempPools+0x6C) /* 00A430 70009830 8F183C1C */ lw $t8, %lo(g_mempPools+0x6C)($t8) /* 00A434 70009834 14980002 */ bne $a0, $t8, .L70009840 -/* 00A438 70009838 00000000 */ nop +/* 00A438 70009838 00000000 */ nop /* 00A43C 7000983C 24060006 */ li $a2, 6 .L70009840: -/* 00A440 70009840 3C0A8006 */ lui $t2, %hi(g_mempPools) +/* 00A440 70009840 3C0A8006 */ lui $t2, %hi(g_mempPools) /* 00A444 70009844 254A3BB0 */ addiu $t2, %lo(g_mempPools) # addiu $t2, $t2, 0x3bb0 /* 00A448 70009848 0006C900 */ sll $t9, $a2, 4 /* 00A44C 7000984C 032A2821 */ addu $a1, $t9, $t2 @@ -298,7 +340,7 @@ glabel mempAddEntryOfSizeToBank /* 00A458 70009858 8CA6000C */ lw $a2, 0xc($a1) .L7000985C: /* 00A45C 7000985C 1000FFFF */ b .L7000985C -/* 00A460 70009860 00000000 */ nop +/* 00A460 70009860 00000000 */ nop /* 00A464 70009864 8CA6000C */ lw $a2, 0xc($a1) .L70009868: /* 00A468 70009868 8FAB001C */ lw $t3, 0x1c($sp) @@ -324,7 +366,7 @@ glabel mempAddEntryOfSizeToBank /* 00A4B0 700098B0 24060006 */ li $a2, 6 .L700098B4: /* 00A4B4 700098B4 1000FFFF */ b .L700098B4 -/* 00A4B8 700098B8 00000000 */ nop +/* 00A4B8 700098B8 00000000 */ nop /* 00A4BC 700098BC 004D082B */ sltu $at, $v0, $t5 .L700098C0: /* 00A4C0 700098C0 10200005 */ beqz $at, .L700098D8 @@ -333,7 +375,7 @@ glabel mempAddEntryOfSizeToBank /* 00A4CC 700098CC 24060006 */ li $a2, 6 .L700098D0: /* 00A4D0 700098D0 1000FFFF */ b .L700098D0 -/* 00A4D4 700098D4 00000000 */ nop +/* 00A4D4 700098D4 00000000 */ nop .L700098D8: /* 00A4D8 700098D8 ACAE0004 */ sw $t6, 4($a1) /* 00A4DC 700098DC 24020001 */ li $v0, 1 @@ -341,13 +383,13 @@ glabel mempAddEntryOfSizeToBank /* 00A4E0 700098E0 8FBF0014 */ lw $ra, 0x14($sp) /* 00A4E4 700098E4 27BD0018 */ addiu $sp, $sp, 0x18 /* 00A4E8 700098E8 03E00008 */ jr $ra -/* 00A4EC 700098EC 00000000 */ nop +/* 00A4EC 700098EC 00000000 */ nop ) #endif void nulled_mempLoopAllMemBanks(void) { u8 bank; - for (bank = MEMPOOL_MF; bank < MEMPOOL_7; bank++) + for (bank = MEMPOOL_MF; bank < MEMPOOL_COUNT; bank++) { } } diff --git a/src/memp.h b/src/memp.h index 02a4235..95c2594 100644 --- a/src/memp.h +++ b/src/memp.h @@ -15,27 +15,28 @@ typedef struct MemoryPool { s32 prevpos; } MemoryPool; -typedef struct s_mempMVALS { - u32 var1; +typedef struct s_mempMVALS { //mempSizes + u32 mfIndex; u32 mf; - u32 var3; + u32 mlIndex; u32 ml; - u32 stage; + u32 meIndex; u32 me; - u32 permanent; - u32 var8; + u32 EndIndex; + u32 EndPool; } s_mempMVALS; +// Pool Names enum MEMPOOL { - MEMPOOL_0, + MEMPOOL_TOTAL, // the mempool starts at _bssSegmentEnd and ends at _stacksSegmentStart MEMPOOL_MF, MEMPOOL_2, MEMPOOL_ML, MEMPOOL_STAGE, MEMPOOL_ME, MEMPOOL_PERMANENT, - MEMPOOL_7 + MEMPOOL_COUNT }; void mempInit(void); diff --git a/src/music.c b/src/music.c index 417aa38..a1eb52d 100644 --- a/src/music.c +++ b/src/music.c @@ -650,7 +650,7 @@ void musicSeqPlayerInit(void) return; } - p = (u8 *)mempAllocBytesInBank(MUSIC_ALLOCATION_BYTES, MUSIC_MEMP_BANK); + p = (u8 *)mempAllocBytesInBank(MUSIC_ALLOCATION_BYTES, MEMPOOL_PERMANENT); mempAddress = p; do diff --git a/src/ramrom.c b/src/ramrom.c index 6e91dd8..42b7bdb 100644 --- a/src/ramrom.c +++ b/src/ramrom.c @@ -4,7 +4,7 @@ /** * @file ramrom.c - * This file contains code to handle reading and writing rom addresses. + * This file contains code to handle reading and writing rom addresses. */ @@ -26,22 +26,22 @@ void romCreateMesgQueue(void) /** * 6790 70005B90 * doRomCopy - * invalidate cache and do pi dma + * invalidate cache and do pi dma */ void doRomCopy(void *target, void *source, u32 size) { osInvalDCache(target, size); - osPiStartDma(&memoryMesgMB, 0, 0, source, target, size, &memoryMesgQueue); + osPiStartDma(&memoryMesgMB, OS_MESG_PRI_NORMAL, OS_READ, source, target, size, &memoryMesgQueue); } /** * 67F0 70005BF0 - * romReceiveMesg - * receives a message queue + * romReceiveMesg + * receives a message queue */ void romReceiveMesg(void) { - osRecvMesg(&memoryMesgQueue, 0, 1); + osRecvMesg(&memoryMesgQueue, NULL, OS_MESG_BLOCK); } /** @@ -80,12 +80,12 @@ s32 romCopyAligned(void *target, void *source, s32 length) /** * 68A8 70005CA8 * doRomWrite - * actually writes to rom (buffer on Indy) + * actually writes to rom (buffer on Indy) */ void doRomWrite(void *source, void *target, u32 size) { osWritebackDCache(source, size); - osPiStartDma(&memoryMesgMB, 0, 1, target, source, size, &memoryMesgQueue); + osPiStartDma(&memoryMesgMB, OS_MESG_PRI_NORMAL, OS_WRITE, target, source, size, &memoryMesgQueue); } /** diff --git a/src/rmon.c b/src/rmon.c index 1f8ad1c..3f14a03 100644 --- a/src/rmon.c +++ b/src/rmon.c @@ -156,7 +156,7 @@ void osReadHost(void * buffer, u32 size) #endif if (buffer); if (size); -#ifdef ENABLE_USB +#ifdef ENABLE_USB //flesh out a proper pc side tool still osSyncPrintf("USB: Waiting for data\n"); while(1) @@ -232,7 +232,7 @@ void rmonPrintf(void) } /* - * ----------------------------------------------------------------- + * ----------------------------------------------------------------- * This is a new file (PR/libultra/libc/syncprintf.c) */ @@ -252,7 +252,7 @@ void *proutSyncPrintf(void *str, const char *buf, size_t n) sent += __osRdbSend((u8 *)&buf[sent], n - sent, RDB_TYPE_GtoH_PRINT); # endif crashAppendChar(buf[sent++]); - } + } #endif return ((void *)1); /* return a fake pointer so that it's not NULL */ } @@ -264,7 +264,7 @@ void *proutSyncPrintf(void *str, const char *buf, size_t n) */ void osSyncPrintf(const char *fmt, ...) { - + #ifdef ENABLE_USB u8 buffer[100]; #endif @@ -347,4 +347,4 @@ void rmonHandlePrintfMsg(struct RmonMesgPrintf *msg) //usb_purge(); usb_write_text(msg->buffer, msg->length); } -#endif \ No newline at end of file +#endif diff --git a/src/rspboot.s b/src/rspboot.s index f412c92..c78fd3f 100644 --- a/src/rspboot.s +++ b/src/rspboot.s @@ -22,6 +22,9 @@ glabel rspbootTextStart .ifdef VERSION_DEBUG .incbin "build/d/rsp/rspboot.bin" .endif +.ifdef VERSION_USB +.incbin "build/usb/rsp/rspboot.bin" +.endif glabel rspbootTextEnd .section .data .section .rodata diff --git a/src/sched.c b/src/sched.c index 2daa25b..6f06641 100644 --- a/src/sched.c +++ b/src/sched.c @@ -315,7 +315,7 @@ void __scHandleRetrace(OSSched *sc) { s32 state; OSScTask *sp = 0; OSScTask *dp = 0; - speedGraphVideoRelated_1(); + speedgraphMarkerUpdate(); sc->frameCount++; viVsyncRelated(); joyPoll(); @@ -343,11 +343,8 @@ void __scHandleRSP(OSSched *sc) { s32 state; t = sc->curRSPTask; sc->curRSPTask = 0; -#if defined(VERSION_EU) - speedGraphDisplay(0x10001); -#else - profileSetMarker(0x10001); -#endif + + speedgraphMarkerHandler(0x10001); if ((t->state & OS_SC_YIELD) && osSpTaskYielded(&t->list)) { t->state |= OS_SC_YIELDED; if ((t->flags & OS_SC_TYPE_MASK) == OS_SC_XBUS) { @@ -377,11 +374,7 @@ void __scHandleRDP(OSSched *sc) OSScTask *t, *sp = NULL, *dp = NULL; s32 state; if (sc->curRDPTask != NULL) { -#if defined(VERSION_EU) - speedGraphDisplay(0x10002); -#else - profileSetMarker(0x10002); -#endif + speedgraphMarkerHandler(0x10002); osDpGetCounters(g_DisplayPerformanceCounters); t = sc->curRDPTask; sc->curRDPTask = NULL; @@ -481,21 +474,12 @@ void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp) if (sp->list.t.type == 2) { -#if defined(VERSION_EU) - speedGraphDisplay(0x30001); -#else - profileSetMarker(0x30001); -#endif + speedgraphMarkerHandler(0x30001); } else { -#if defined(VERSION_EU) - speedGraphDisplay(0x40001); - speedGraphDisplay(0x20002); -#else - profileSetMarker(0x40001); - profileSetMarker(0x20002); -#endif + speedgraphMarkerHandler(0x40001); + speedgraphMarkerHandler(0x20002); } sp->state &= ~(OS_SC_YIELD | OS_SC_YIELDED); osSpTaskLoad(&sp->list); diff --git a/src/sched.h b/src/sched.h index d18c0a1..ef8a5c0 100644 --- a/src/sched.h +++ b/src/sched.h @@ -80,6 +80,7 @@ void CheckDisplayErrorBuffer(u32 *buffer); void CheckDisplayErrorBufferEvery16Frames(u32 framecount); void osCreateLog(void); void __scMain(void *arg); +u32 *get_counters(void); void __scYield(OSSched *sc) ; void __scAppendList(OSSched *sc, OSScTask *t); void __scExec(OSSched *sc, OSScTask *sp, OSScTask *dp); diff --git a/src/snd.c b/src/snd.c index 2091f4b..aaee920 100644 --- a/src/snd.c +++ b/src/snd.c @@ -27,25 +27,25 @@ typedef union ALSndpEvent_u { // offset 4 ALSoundState *state; } common; - + struct { u16 type; ALSoundState *state; s32 vol; } vol; - + struct { u16 type; ALSoundState *state; f32 pitch; } pitch; - + struct { u16 type; ALSoundState *state; s32 pan32; } pan32; - + struct { u16 type; ALSoundState *state; @@ -72,7 +72,7 @@ typedef union ALSndpEvent_u { s32 unk8; s32 unkC; } align_size; - + } ALSndpEvent; union ALSndpSmallEvent_u { @@ -144,7 +144,7 @@ void sndSetSfxSlotVolume(u8 arg0, u16 arg1); /** * 8720 70007B20 - * + * * Mostly identical to n64devkit\ultra\usr\src\pr\libsrc\libultra\audio\sndplayer.c * method alSndpNew. */ @@ -209,7 +209,7 @@ void sndNewPlayerInit(ALSeqpSfxConfig *sfxSeqpConfig) /** * 89DC 70007DDC - * + * * Almost identical to \n64devkit\ultra\usr\src\pr\libsrc\libultra\audio\sndplayer.c * method ALMicroTime _sndpVoiceHandler(void *node). */ @@ -233,7 +233,7 @@ ALMicroTime sndPlayerVoiceHandler(void *node) } sndp->nextDelta = alEvtqNextEvent(&sndp->evtq, &sndp->nextEvent); - + } while (sndp->nextDelta == 0); sndp->curTime += sndp->nextDelta; @@ -244,16 +244,16 @@ ALMicroTime sndPlayerVoiceHandler(void *node) /** * 8A80 70007E80 - * + * * Draws inspiration from n64devkit\ultra\usr\src\pr\libsrc\libultra\audio\sndplayer.c * method _handleEvent - * + * * decomp status: * - compiles: yes * - stack resize: ok * - identical instructions: yes * - identical registers: fail - * + * * Notes: * - all floating point registers match * - there's a few places with temp variables and MIN,MAX macros, stuffing it all into one @@ -271,7 +271,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) { // declarations - //// + //// //// "..." means not explicitly referenced by stack offset //// ALVoiceConfig vc; // sp 0xc8; priority=200, fxBus=202, unityPitch=204 @@ -292,7 +292,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) ALPan pan; // ... s32 done_state; // sp 0x80 = 128 s32 allocVoiceSuccess; // sp 0x7c = 124 - ALSoundState *prevState; // sp 0x78 = 120 + ALSoundState *prevState; // sp 0x78 = 120 ALSoundState *nextState; // sp 0x74 = 116 ; could also be ALLink (with sp78) s16 sp72; // sp 0x72 = 114 s16 sp70; // sp 0x70 = 112 @@ -360,7 +360,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) return; } - + if (compare_result) { tstate = (ALSoundState*)D_800243E4.node.prev; @@ -376,9 +376,9 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) tstate->playingState = AL_UNKOWN_3; compare_result = 0; loopCheckVar[0] = tstate; - + alEvtqPostEvent(&sndp->evtq, (ALEvent *)&playAllocEvent, DELTA_1_MS); - + tstate = loopCheckVar[0]; //voice = &tstate->voice; alSynSetVol(sndp->drvr, (ALVoice*)&tstate->voice, 0, DELTA_1_MS); @@ -400,7 +400,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) sndDisposeSound(state); return; } - + sndDisposeSound(state); return; } @@ -420,14 +420,14 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) vtmp = vtmp / 0x7fff; vtmp = MAX(0, vtmp - 1); - // vtmp = MAX(0, (vol * (snd->envelope->attackVolume * snd->sampleVolume) + // vtmp = MAX(0, (vol * (snd->envelope->attackVolume * snd->sampleVolume) // / (AL_VOL_FULL * AL_VOL_FULL) // * tmp // / 0x7fff) - 1); - + alSynSetVol(sndp->drvr, &state->voice, 0, 0); alSynSetVol(sndp->drvr, &state->voice, vtmp, delta); - + vtmp = state->pan - AL_PAN_CENTER + snd->samplePan; pan = (ALPan) MIN(MAX(vtmp, AL_PAN_LEFT), AL_PAN_RIGHT); //pan = (ALPan) MIN(MAX(state->pan - AL_PAN_CENTER + snd->samplePan, AL_PAN_LEFT), AL_PAN_RIGHT); @@ -451,7 +451,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) } } break; - + case (AL_SNDP_DEACTIVATE_EVT): // fallthrough case (AL_SNDP_UNKNOWN_12_EVT): // fallthrough case (AL_SNDP_STOP_EVT): @@ -502,7 +502,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) } } break; - + case (AL_SNDP_PAN_EVT): { state->pan = event->pan32.pan32; @@ -517,7 +517,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) } } break; - + case (AL_SNDP_PITCH_EVT): { state->pitch_2c = event->pitch.pitch; @@ -533,7 +533,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) } } break; - + case (AL_SNDP_FX_EVT): { state->fxMix = event->fx32.mix32; @@ -548,7 +548,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) } } break; - + case (AL_SNDP_VOL_EVT): { state->vol = event->vol.vol; @@ -556,14 +556,14 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) { tmp = g_sndSfxSlotVolume[keyMap->keyMin & 0x3f]; vol = state->vol; - vtmp = - vol * (snd->envelope->decayVolume * snd->sampleVolume) + vtmp = + vol * (snd->envelope->decayVolume * snd->sampleVolume) / (AL_VOL_FULL * AL_VOL_FULL) * tmp / 0x7fff; vtmp = MAX(0, vtmp - 1); - - // vtmp = MAX(0, (vol * (snd->envelope->decayVolume * snd->sampleVolume) + + // vtmp = MAX(0, (vol * (snd->envelope->decayVolume * snd->sampleVolume) // / (AL_VOL_FULL * AL_VOL_FULL) // * tmp // / 0x7fff) - 1); @@ -575,7 +575,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) // case 0x20 (AL_SNDP_API_EVT) // handled in sndPlayerVoiceHandler - + case (AL_SNDP_RELEASE_EVT): { if (state->playingState == AL_PLAYING) @@ -584,14 +584,14 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) tmp = g_sndSfxSlotVolume[keyMap->keyMin & 0x3f]; vol = state->vol; - vtmp = - vol * (snd->envelope->decayVolume * snd->sampleVolume) + vtmp = + vol * (snd->envelope->decayVolume * snd->sampleVolume) / (AL_VOL_FULL * AL_VOL_FULL) * tmp / 0x7fff; vtmp = MAX(0, vtmp - 1); - - // vtmp = MAX(0, (vol * (snd->envelope->decayVolume * snd->sampleVolume) + + // vtmp = MAX(0, (vol * (snd->envelope->decayVolume * snd->sampleVolume) // / (AL_VOL_FULL * AL_VOL_FULL) // * tmp // / 0x7fff) - 1); @@ -600,19 +600,19 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) } } break; - + case (AL_SNDP_DECAY_EVT): { if ((state->unk3e & 2) == 0) { tmp = g_sndSfxSlotVolume[keyMap->keyMin & 0x3f]; vol = state->vol; - vtmp = - (vol * (snd->envelope->decayVolume * snd->sampleVolume) + vtmp = + (vol * (snd->envelope->decayVolume * snd->sampleVolume) / (AL_VOL_FULL * AL_VOL_FULL)) * tmp / 0x7fff; - + vtmp = MAX(0, vtmp - 1); // can't seem to combine this volume computation into one line with the macro. @@ -631,13 +631,13 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) } } break; - + case (AL_SNDP_END_EVT): { sndDisposeSound(state); } break; - + case (AL_SNDP_PLAY_SFX_EVT): { if ((state->unk3e & 0x10) != 0) @@ -646,7 +646,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) } } break; - + default: // not supported break; @@ -661,7 +661,7 @@ void sndHandleEvent(ALSndPlayer *sndp, ALSndpEvent *event) } else { - done_state = + done_state = // best guess at cast to get offset 0x3e ... ((ALSoundState*)event)->unk3e & 0x1; } @@ -778,7 +778,7 @@ glabel sndHandleEvent glabel .L70007FBC /* 008BBC 70007FBC 9222003F */ lbu $v0, 0x3f($s1) /* 008BC0 70007FC0 24010005 */ li $at, 5 -/* 008BC4 70007FC4 3C0B8002 */ lui $t3, %hi(g_sndAllocatedVoicesCount) +/* 008BC4 70007FC4 3C0B8002 */ lui $t3, %hi(g_sndAllocatedVoicesCount) /* 008BC8 70007FC8 10410003 */ beq $v0, $at, .L70007FD8 /* 008BCC 70007FCC 24010004 */ li $at, 4 /* 008BD0 70007FD0 54410252 */ bnel $v0, $at, .L7000891C @@ -795,7 +795,7 @@ glabel .L70007FBC /* 008BF8 70007FF8 016C802A */ slt $s0, $t3, $t4 /* 008BFC 70007FFC 3A100001 */ xori $s0, $s0, 1 /* 008C00 70008000 12000005 */ beqz $s0, .L70008018 -/* 008C04 70008004 00000000 */ nop +/* 008C04 70008004 00000000 */ nop /* 008C08 70008008 9223003E */ lbu $v1, 0x3e($s1) /* 008C0C 7000800C 306D0010 */ andi $t5, $v1, 0x10 /* 008C10 70008010 51A00006 */ beql $t5, $zero, .L7000802C @@ -816,7 +816,7 @@ glabel .L70007FBC /* 008C44 70008044 24190004 */ li $t9, 4 /* 008C48 70008048 8E380038 */ lw $t8, 0x38($s1) /* 008C4C 7000804C 1B00000B */ blez $t8, .L7000807C -/* 008C50 70008050 00000000 */ nop +/* 008C50 70008050 00000000 */ nop .L70008054: /* 008C54 70008054 8E280038 */ lw $t0, 0x38($s1) /* 008C58 70008058 A239003F */ sb $t9, 0x3f($s1) @@ -841,7 +841,7 @@ glabel .L70007FBC /* 008C9C 7000809C 15400016 */ bnez $t2, .L700080F8 /* 008CA0 700080A0 306B0004 */ andi $t3, $v1, 4 /* 008CA4 700080A4 11600014 */ beqz $t3, .L700080F8 -/* 008CA8 700080A8 00000000 */ nop +/* 008CA8 700080A8 00000000 */ nop /* 008CAC 700080AC 904C003F */ lbu $t4, 0x3f($v0) /* 008CB0 700080B0 240D0080 */ li $t5, 128 /* 008CB4 700080B4 26E40014 */ addiu $a0, $s7, 0x14 @@ -894,10 +894,10 @@ glabel .L70007FBC /* 008D5C 7000815C 26F40014 */ addiu $s4, $s7, 0x14 /* 008D60 70008160 24180001 */ li $t8, 1 /* 008D64 70008164 A238003F */ sb $t8, 0x3f($s1) -/* 008D68 70008168 3C198002 */ lui $t9, %hi(g_sndAllocatedVoicesCount) +/* 008D68 70008168 3C198002 */ lui $t9, %hi(g_sndAllocatedVoicesCount) /* 008D6C 7000816C 873943F4 */ lh $t9, %lo(g_sndAllocatedVoicesCount)($t9) /* 008D70 70008170 3C018002 */ lui $at, %hi(g_sndAllocatedVoicesCount) -/* 008D74 70008174 3C0B8006 */ lui $t3, %hi(g_sndSfxSlotVolume) +/* 008D74 70008174 3C0B8006 */ lui $t3, %hi(g_sndSfxSlotVolume) /* 008D78 70008178 27280001 */ addiu $t0, $t9, 1 /* 008D7C 7000817C A42843F4 */ sh $t0, %lo(g_sndAllocatedVoicesCount)($at) /* 008D80 70008180 8E420000 */ lw $v0, ($s2) @@ -924,16 +924,16 @@ glabel .L70007FBC /* 008DD4 700081D4 00003025 */ move $a2, $zero /* 008DD8 700081D8 00003825 */ move $a3, $zero /* 008DDC 700081DC 00006012 */ mflo $t4 -/* 008DE0 700081E0 00000000 */ nop -/* 008DE4 700081E4 00000000 */ nop +/* 008DE0 700081E0 00000000 */ nop +/* 008DE4 700081E4 00000000 */ nop /* 008DE8 700081E8 0181001A */ div $zero, $t4, $at /* 008DEC 700081EC 00006812 */ mflo $t5 /* 008DF0 700081F0 24017FFF */ li $at, 32767 /* 008DF4 700081F4 46105483 */ div.s $f18, $f10, $f16 /* 008DF8 700081F8 030D0019 */ multu $t8, $t5 /* 008DFC 700081FC 00002012 */ mflo $a0 -/* 008E00 70008200 00000000 */ nop -/* 008E04 70008204 00000000 */ nop +/* 008E00 70008200 00000000 */ nop +/* 008E04 70008204 00000000 */ nop /* 008E08 70008208 0081001A */ div $zero, $a0, $at /* 008E0C 7000820C 4600910D */ trunc.w.s $f4, $f18 /* 008E10 70008210 00005812 */ mflo $t3 @@ -941,7 +941,7 @@ glabel .L70007FBC /* 008E18 70008218 00801825 */ move $v1, $a0 /* 008E1C 7000821C 44102000 */ mfc1 $s0, $f4 /* 008E20 70008220 04810003 */ bgez $a0, .L70008230 -/* 008E24 70008224 00000000 */ nop +/* 008E24 70008224 00000000 */ nop /* 008E28 70008228 10000001 */ b .L70008230 /* 008E2C 7000822C 00001825 */ move $v1, $zero .L70008230: @@ -969,7 +969,7 @@ glabel .L70007FBC .L70008284: /* 008E84 70008284 2841007F */ slti $at, $v0, 0x7f /* 008E88 70008288 10200007 */ beqz $at, .L700082A8 -/* 008E8C 7000828C 00000000 */ nop +/* 008E8C 7000828C 00000000 */ nop /* 008E90 70008290 18600003 */ blez $v1, .L700082A0 /* 008E94 70008294 00001025 */ move $v0, $zero /* 008E98 70008298 10000003 */ b .L700082A8 @@ -987,7 +987,7 @@ glabel .L70007FBC /* 008EC0 700082C0 46083282 */ mul.s $f10, $f6, $f8 /* 008EC4 700082C4 44065000 */ mfc1 $a2, $f10 /* 008EC8 700082C8 0C004D58 */ jal alSynSetPitch -/* 008ECC 700082CC 00000000 */ nop +/* 008ECC 700082CC 00000000 */ nop /* 008ED0 700082D0 92C90003 */ lbu $t1, 3($s6) /* 008ED4 700082D4 9228003D */ lbu $t0, 0x3d($s1) /* 008ED8 700082D8 02602825 */ move $a1, $s3 @@ -1003,7 +1003,7 @@ glabel .L70007FBC .L700082FC: /* 008EFC 700082FC 28410080 */ slti $at, $v0, 0x80 /* 008F00 70008300 14200003 */ bnez $at, .L70008310 -/* 008F04 70008304 00000000 */ nop +/* 008F04 70008304 00000000 */ nop /* 008F08 70008308 10000006 */ b .L70008324 /* 008F0C 7000830C 2403007F */ li $v1, 127 .L70008310: @@ -1027,14 +1027,14 @@ glabel .L70007FBC /* 008F4C 7000834C 02802025 */ move $a0, $s4 /* 008F50 70008350 27A500AC */ addiu $a1, $sp, 0xac /* 008F54 70008354 448B8000 */ mtc1 $t3, $f16 -/* 008F58 70008358 00000000 */ nop +/* 008F58 70008358 00000000 */ nop /* 008F5C 7000835C 468084A0 */ cvt.s.w $f18, $f16 /* 008F60 70008360 46049183 */ div.s $f6, $f18, $f4 /* 008F64 70008364 46083283 */ div.s $f10, $f6, $f8 /* 008F68 70008368 4600540D */ trunc.w.s $f16, $f10 /* 008F6C 7000836C 44068000 */ mfc1 $a2, $f16 /* 008F70 70008370 0C004BBF */ jal alEvtqPostEvent -/* 008F74 70008374 00000000 */ nop +/* 008F74 70008374 00000000 */ nop /* 008F78 70008378 96A20000 */ lhu $v0, ($s5) /* 008F7C 7000837C 304F02D1 */ andi $t7, $v0, 0x2d1 /* 008F80 70008380 10000155 */ b .L700088D8 @@ -1047,7 +1047,7 @@ glabel .L70008388 /* 008F94 70008394 9239003E */ lbu $t9, 0x3e($s1) /* 008F98 70008398 33290002 */ andi $t1, $t9, 2 /* 008F9C 7000839C 11200035 */ beqz $t1, .L70008474 -/* 008FA0 700083A0 00000000 */ nop +/* 008FA0 700083A0 00000000 */ nop /* 008FA4 700083A4 9222003F */ lbu $v0, 0x3f($s1) .L700083A8: /* 008FA8 700083A8 26F40014 */ addiu $s4, $s7, 0x14 @@ -1058,7 +1058,7 @@ glabel .L70008388 /* 008FBC 700083BC 10410025 */ beq $v0, $at, .L70008454 /* 008FC0 700083C0 24010005 */ li $at, 5 /* 008FC4 700083C4 10410023 */ beq $v0, $at, .L70008454 -/* 008FC8 700083C8 00000000 */ nop +/* 008FC8 700083C8 00000000 */ nop /* 008FCC 700083CC 10000025 */ b .L70008464 /* 008FD0 700083D0 24010002 */ li $at, 2 .L700083D4: @@ -1128,7 +1128,7 @@ glabel .L7000847C .L700084B4: /* 0090B4 700084B4 2841007F */ slti $at, $v0, 0x7f /* 0090B8 700084B8 10200007 */ beqz $at, .L700084D8 -/* 0090BC 700084BC 00000000 */ nop +/* 0090BC 700084BC 00000000 */ nop /* 0090C0 700084C0 18600003 */ blez $v1, .L700084D0 /* 0090C4 700084C4 00001025 */ move $v0, $zero /* 0090C8 700084C8 10000003 */ b .L700084D8 @@ -1156,7 +1156,7 @@ glabel .L700084F0 /* 009110 70008510 46083282 */ mul.s $f10, $f6, $f8 /* 009114 70008514 44065000 */ mfc1 $a2, $f10 /* 009118 70008518 0C004D58 */ jal alSynSetPitch -/* 00911C 7000851C 00000000 */ nop +/* 00911C 7000851C 00000000 */ nop /* 009120 70008520 922C003E */ lbu $t4, 0x3e($s1) /* 009124 70008524 31980020 */ andi $t8, $t4, 0x20 /* 009128 70008528 53000004 */ beql $t8, $zero, .L7000853C @@ -1189,7 +1189,7 @@ glabel .L700084F0 .L70008584: /* 009184 70008584 28410080 */ slti $at, $v0, 0x80 /* 009188 70008588 14200003 */ bnez $at, .L70008598 -/* 00918C 7000858C 00000000 */ nop +/* 00918C 7000858C 00000000 */ nop /* 009190 70008590 10000006 */ b .L700085AC /* 009194 70008594 2403007F */ li $v1, 127 .L70008598: @@ -1223,26 +1223,26 @@ glabel .L700085C8 /* 0091F4 700085F4 014C0019 */ multu $t2, $t4 /* 0091F8 700085F8 924B000D */ lbu $t3, 0xd($s2) /* 0091FC 700085FC 000EC840 */ sll $t9, $t6, 1 -/* 009200 70008600 3C0D8006 */ lui $t5, %hi(g_sndSfxSlotVolume) +/* 009200 70008600 3C0D8006 */ lui $t5, %hi(g_sndSfxSlotVolume) /* 009204 70008604 8DAD3BA4 */ lw $t5, %lo(g_sndSfxSlotVolume)($t5) /* 009208 70008608 240703E8 */ li $a3, 1000 /* 00920C 7000860C 01B97821 */ addu $t7, $t5, $t9 /* 009210 70008610 85E90000 */ lh $t1, ($t7) /* 009214 70008614 0000C012 */ mflo $t8 -/* 009218 70008618 00000000 */ nop -/* 00921C 7000861C 00000000 */ nop +/* 009218 70008618 00000000 */ nop +/* 00921C 7000861C 00000000 */ nop /* 009220 70008620 030B0019 */ multu $t8, $t3 /* 009224 70008624 00007012 */ mflo $t6 -/* 009228 70008628 00000000 */ nop -/* 00922C 7000862C 00000000 */ nop +/* 009228 70008628 00000000 */ nop +/* 00922C 7000862C 00000000 */ nop /* 009230 70008630 01C1001A */ div $zero, $t6, $at /* 009234 70008634 00006812 */ mflo $t5 /* 009238 70008638 24017FFF */ li $at, 32767 -/* 00923C 7000863C 00000000 */ nop +/* 00923C 7000863C 00000000 */ nop /* 009240 70008640 012D0019 */ multu $t1, $t5 /* 009244 70008644 00002012 */ mflo $a0 -/* 009248 70008648 00000000 */ nop -/* 00924C 7000864C 00000000 */ nop +/* 009248 70008648 00000000 */ nop +/* 00924C 7000864C 00000000 */ nop /* 009250 70008650 0081001A */ div $zero, $a0, $at /* 009254 70008654 0000C812 */ mflo $t9 /* 009258 70008658 2724FFFF */ addiu $a0, $t9, -1 @@ -1265,7 +1265,7 @@ glabel .L700085C8 /* 009290 70008690 922A003F */ lbu $t2, 0x3f($s1) /* 009294 70008694 2625000C */ addiu $a1, $s1, 0xc /* 009298 70008698 17CA0032 */ bne $fp, $t2, .L70008764 -/* 00929C 7000869C 00000000 */ nop +/* 00929C 7000869C 00000000 */ nop /* 0092A0 700086A0 8E420000 */ lw $v0, ($s2) /* 0092A4 700086A4 862A0034 */ lh $t2, 0x34($s1) /* 0092A8 700086A8 9258000D */ lbu $t8, 0xd($s2) @@ -1276,7 +1276,7 @@ glabel .L700085C8 /* 0092BC 700086BC 448C8000 */ mtc1 $t4, $f16 /* 0092C0 700086C0 31C9003F */ andi $t1, $t6, 0x3f /* 0092C4 700086C4 24013F01 */ li $at, 16129 -/* 0092C8 700086C8 3C0B8006 */ lui $t3, %hi(g_sndSfxSlotVolume) +/* 0092C8 700086C8 3C0B8006 */ lui $t3, %hi(g_sndSfxSlotVolume) /* 0092CC 700086CC 8D6B3BA4 */ lw $t3, %lo(g_sndSfxSlotVolume)($t3) /* 0092D0 700086D0 00096840 */ sll $t5, $t1, 1 /* 0092D4 700086D4 468084A0 */ cvt.s.w $f18, $f16 @@ -1288,16 +1288,16 @@ glabel .L700085C8 /* 0092EC 700086EC 01980019 */ multu $t4, $t8 /* 0092F0 700086F0 46049183 */ div.s $f6, $f18, $f4 /* 0092F4 700086F4 00007012 */ mflo $t6 -/* 0092F8 700086F8 00000000 */ nop -/* 0092FC 700086FC 00000000 */ nop +/* 0092F8 700086F8 00000000 */ nop +/* 0092FC 700086FC 00000000 */ nop /* 009300 70008700 01C1001A */ div $zero, $t6, $at /* 009304 70008704 00004812 */ mflo $t1 /* 009308 70008708 24017FFF */ li $at, 32767 /* 00930C 7000870C 46083283 */ div.s $f10, $f6, $f8 /* 009310 70008710 01E90019 */ multu $t7, $t1 /* 009314 70008714 00002012 */ mflo $a0 -/* 009318 70008718 00000000 */ nop -/* 00931C 7000871C 00000000 */ nop +/* 009318 70008718 00000000 */ nop +/* 00931C 7000871C 00000000 */ nop /* 009320 70008720 0081001A */ div $zero, $a0, $at /* 009324 70008724 4600540D */ trunc.w.s $f16, $f10 /* 009328 70008728 00005812 */ mflo $t3 @@ -1305,7 +1305,7 @@ glabel .L700085C8 /* 009330 70008730 00801825 */ move $v1, $a0 /* 009334 70008734 44108000 */ mfc1 $s0, $f16 /* 009338 70008738 04810003 */ bgez $a0, .L70008748 -/* 00933C 7000873C 00000000 */ nop +/* 00933C 7000873C 00000000 */ nop /* 009340 70008740 10000001 */ b .L70008748 /* 009344 70008744 00001825 */ move $v1, $zero .L70008748: @@ -1332,27 +1332,27 @@ glabel .L700085C8 /* 009390 70008790 24013F01 */ li $at, 16129 /* 009394 70008794 016D0019 */ multu $t3, $t5 /* 009398 70008798 3198003F */ andi $t8, $t4, 0x3f -/* 00939C 7000879C 3C0A8006 */ lui $t2, %hi(g_sndSfxSlotVolume) +/* 00939C 7000879C 3C0A8006 */ lui $t2, %hi(g_sndSfxSlotVolume) /* 0093A0 700087A0 8D4A3BA4 */ lw $t2, %lo(g_sndSfxSlotVolume)($t2) /* 0093A4 700087A4 00187040 */ sll $t6, $t8, 1 /* 0093A8 700087A8 26F40014 */ addiu $s4, $s7, 0x14 /* 0093AC 700087AC 014E7821 */ addu $t7, $t2, $t6 /* 0093B0 700087B0 85E90000 */ lh $t1, ($t7) /* 0093B4 700087B4 0000C812 */ mflo $t9 -/* 0093B8 700087B8 00000000 */ nop -/* 0093BC 700087BC 00000000 */ nop +/* 0093B8 700087B8 00000000 */ nop +/* 0093BC 700087BC 00000000 */ nop /* 0093C0 700087C0 03280019 */ multu $t9, $t0 /* 0093C4 700087C4 00006012 */ mflo $t4 -/* 0093C8 700087C8 00000000 */ nop -/* 0093CC 700087CC 00000000 */ nop +/* 0093C8 700087C8 00000000 */ nop +/* 0093CC 700087CC 00000000 */ nop /* 0093D0 700087D0 0181001A */ div $zero, $t4, $at /* 0093D4 700087D4 0000C012 */ mflo $t8 /* 0093D8 700087D8 24017FFF */ li $at, 32767 -/* 0093DC 700087DC 00000000 */ nop +/* 0093DC 700087DC 00000000 */ nop /* 0093E0 700087E0 01380019 */ multu $t1, $t8 /* 0093E4 700087E4 00002012 */ mflo $a0 -/* 0093E8 700087E8 00000000 */ nop -/* 0093EC 700087EC 00000000 */ nop +/* 0093E8 700087E8 00000000 */ nop +/* 0093EC 700087EC 00000000 */ nop /* 0093F0 700087F0 0081001A */ div $zero, $a0, $at /* 0093F4 700087F4 00005012 */ mflo $t2 /* 0093F8 700087F8 2544FFFF */ addiu $a0, $t2, -1 @@ -1406,7 +1406,7 @@ glabel .L700085C8 /* 0094A8 700088A8 9238003E */ lbu $t8, 0x3e($s1) /* 0094AC 700088AC 330A0010 */ andi $t2, $t8, 0x10 /* 0094B0 700088B0 11400006 */ beqz $t2, .L700088CC -/* 0094B4 700088B4 00000000 */ nop +/* 0094B4 700088B4 00000000 */ nop /* 0094B8 700088B8 8EA4000C */ lw $a0, 0xc($s5) /* 0094BC 700088BC 86A5000A */ lh $a1, 0xa($s5) /* 0094C0 700088C0 0C002382 */ jal sndPlaySfx @@ -1468,9 +1468,10 @@ glabel jpt_80029160 .word .L700088D4 .word .L700088D4 .word .L700084F0 + .size jpt_80029160, . - jpt_80029160 ) #endif - + /** * 9548 70008948 @@ -1544,7 +1545,7 @@ void sndRemoveEvents(ALEventQueue *evtq, ALSoundState *state, u16 eventType) thisNode = nextNode; } - + osSetIntMask(mask); } @@ -1553,7 +1554,7 @@ void sndRemoveEvents(ALEventQueue *evtq, ALSoundState *state, u16 eventType) * Has similarities to * void alEvtqPrintEvtQueue(ALEventQueue *evtq) * from n64devkit\ultra\usr\src\pr\libsrc\libultra\audio\event.c - * + * * @param allocListCount Out param. Will contain the number of (next) nodes in the D_800243E4 allocList. * @param freeListCount Out param. Will contain the number of (next) nodes in the D_800243E4 freeList. * @return Number of (prev) nodes in the D_800243E4 freeList. @@ -1595,7 +1596,7 @@ s32 sndCountAllocList(s16 *allocListCount, s16 *freeListCount) * 9770 70008B70 * initializes soundstate to sound based on global g_sndPlayerSoundStatePtr. * accepts: A0=sound data offset?, A1=sample address? - * + * * @param soundBank unused. * @param sound sound to use. */ @@ -1639,7 +1640,7 @@ ALSoundState *sndSetupSound(struct ALBankAlt_s *soundBank, ALSound* sound) state->pitch_2c = 1.0f; state->unk3e = (keymap->keyMax & (u8)0xf0); state->state = NULL; - + if ((state->unk3e & 0x20) != 0) { state->pitch_28 = alCents2Ratio(((keymap->keyBase * 100) + DEFAULT_SETUP_PITCH_SHIFT)); @@ -1741,12 +1742,16 @@ u8 sndGetPlayingState(ALSoundState *state) return AL_STOPPED; } +#ifdef DEBUG +# define _sndPlaySfx(sbank, id, state) sndPlaySfx(sbank, id, state, g_sndSfxVolume, __FILE__, __LINE__) +ALSoundState *sndPlaySfx(struct ALBankAlt_s *soundBank, s16 soundIndex, ALSoundState *pendingState, f32 volume, char*file, int line) +#else /** * 9A08 70008E08 * sets sound effect; used by sound effect routines - * + * * Old comments: - * + * * accepts: A0=p->SE buffer, A1=SE #, A2=p->data * data: 0x0 4 p->SE entry * 0x4 4 target volume @@ -1754,18 +1759,19 @@ u8 sndGetPlayingState(ALSoundState *state) * 0xC 4 initial volume * 0x10 4 p->preset emitting sound * 0x14 4 p->object emitting sound - * + * * // end old comments. - * + * * @param soundBank sound bank * @param soundIndex index into sound bank: soundBank->instArray[0]->soundArray[soundIndex] * @param pendingState Optional pointer. If provided, its link.next pointer will be * to the newly created soundState. */ ALSoundState *sndPlaySfx(struct ALBankAlt_s *soundBank, s16 soundIndex, ALSoundState *pendingState) +#endif { // declarations - + // declaration order doesn't seem to matter for these. ALMicroTime deltaTotal; @@ -1779,7 +1785,7 @@ ALSoundState *sndPlaySfx(struct ALBankAlt_s *soundBank, s16 soundIndex, ALSoundS s16 unused_sp6c; // 108(sp) ALMicroTime playSfxDelta; // 104(sp) ALMicroTime deltaLoop; // 100(sp) - + // end declarations nextState = NULL; @@ -1854,7 +1860,7 @@ ALSoundState *sndPlaySfx(struct ALBankAlt_s *soundBank, s16 soundIndex, ALSoundS if (eventSoundIndex != 0) { ALSndpEvent playSfxEvent; - + nextState->unk3e |= 0x10; playSfxEvent.playSfx.type = AL_SNDP_PLAY_SFX_EVT; @@ -1898,7 +1904,7 @@ void sndDeactivate(ALSoundState *state) * 9C6C 7000906C * Similar to sndDeactivate, but iterates the global list and deactivates * items with the same unk3e flag. - * + * * @param flag flag bitmask to match item on. */ void sndDeactivateAllSfxByFlag(u8 flag) @@ -1923,7 +1929,7 @@ void sndDeactivateAllSfxByFlag(u8 flag) item = (ALSoundState *)item->link.next; } - + osSetIntMask(mask); } @@ -1957,7 +1963,7 @@ void sndDeactivateAllSfxByFlag_3(void) /** * 9D84 70009184 * Calls alEvtqPostEvent with the method parameters and delta=0. - * + * * @param state sound state. * @param eventType type of event to post. * @param arg2 event data value (interpretation depends on eventType). @@ -1965,7 +1971,7 @@ void sndDeactivateAllSfxByFlag_3(void) void sndCreatePostEvent(ALSoundState *state, s16 eventType, s32 arg2) { ALSndpEvent evt; - + evt.common.type = eventType; evt.common.state = state; evt.unks32.val8 = arg2; @@ -2028,7 +2034,7 @@ void sndSetSfxSlotVolume(u8 sfxIndex, u16 volume) ALSoundState *item; item = (ALSoundState *)D_800243E4.node.next; - + g_sndSfxSlotNaturalVolume[sfxIndex] = volume; g_sndSfxSlotVolume[sfxIndex] = (s16) ((f32) volume * g_sndSfxVolumeScale); diff --git a/src/speed_graph.c b/src/speed_graph.c index b10fdbc..bb0824b 100644 --- a/src/speed_graph.c +++ b/src/speed_graph.c @@ -1,15 +1,18 @@ #include +#include "speed_graph.h" #include "unk_0C0A70.h" +#include "speedgraphrenderer.h" #include "debugmenu.h" +#include "sched.h" /** -* Used in speedGraphDisplay to check if speedgraphframes and g_speedGraphCountAccumulator are +* Used in speedgraphDisplayMetrics to check if speedgraphframes and g_speedGraphCountAccumulator are * over the threshold for output. */ #define COUNT_REQUIRED_FOR_OUTPUT 20 /** - * Used in speedGraphDisplay to calculate display Hz. + * Used in speedgraphDisplayMetrics to calculate display Hz. */ #ifdef REFRESH_PAL #define VICLOCK 50 @@ -18,37 +21,37 @@ #endif #if defined(LEFTOVERDEBUG) -s32 dword_CODE_bss_8005F3F0[3]; -Gfx g_speedGraphDisplayList[2][266]; -s32 g_speedGraphDisplayListBank; +s32 gSpeedGraphMarkerFlags[3]; +Gfx gSpeedGraphDisplayLists[2][266]; +s32 gSpeedGraphDisplayListIndex; u32 g_speedGraphLastOsCount; u32 g_speedGraphCurrentOsCount; u32 dword_CODE_bss_800604AC; #endif typedef struct { - u32 unk0; + u32 markerFlags; u32 osCount; -} unknown_s; +} SpeedGraphMarker; #if defined(LEFTOVERDEBUG) -unknown_s dword_CODE_bss_800604B0[3][32]; -s32 dword_CODE_bss_800607B0[3]; -s32 dword_CODE_bss_800607C0[3]; -s32 dword_CODE_bss_800607D0[3]; +SpeedGraphMarker gSpeedGraphMarkers[3][32]; +s32 gSpeedGraphMarkerIndices[3]; +s32 gSpeedGraphMarkerNextIndices[3]; +s32 gSpeedGraphMarkerHeadIndices[3]; #endif s32 D_800231D0 = 0; typedef struct { + s32 index; s32 color; - s32 unk4; - s32 unk8; - s32 unkC; -} s_800231D4; + s32 width; + s32 height; +} SpeedGraphColorSettings; #if defined(LEFTOVERDEBUG) -s_800231D4 D_800231D4[5] = { +SpeedGraphColorSettings gSpeedGraphColorSettings[5] = { {0x00000000, 0x00000000, 0x00000002, 0x00000000}, {0x00000001, 0x00000000, 0x00000002, 0x00000000}, {0x00000002, 0xFF000000, 0x00000002, 0x00000000}, @@ -57,61 +60,51 @@ s_800231D4 D_800231D4[5] = { }; /** - * 80023224. Seems to accumulate speedgraphframes in speedGraphDisplay. Once above the threshold COUNT_REQUIRED_FOR_OUTPUT, + * 80023224. Seems to accumulate speedgraphframes in speedgraphDisplayMetrics. Once above the threshold COUNT_REQUIRED_FOR_OUTPUT, * the value COUNT_REQUIRED_FOR_OUTPUT is repeatedly subtracted until below the threshold. */ u32 g_speedGraphCountAccumulator = 0; /** - * 80023228. Stores max value of speedgraphframes seen in speedGraphDisplay. Resets to zero once + * 80023228. Stores max value of speedgraphframes seen in speedgraphDisplayMetrics. Resets to zero once * output is rendered. */ s32 g_speedGraphMaxSeenCount = 0; -/** - * 8002322C. - */ -s32 D_8002322C = 0; - -/** - * 80023230. - */ -u32 g_speedGraphCounterForFrames = 0; - -/** - * 80023234. - */ -s32 D_80023234 = 1; - #endif // forward declarations -void speedGraphVideoRelated_2(void); - -int sprintf(char *dst, const char *fmt, ...); -u32 *get_counters(void); +void speedgraphMarkerCommit(void); ///// -void speedGraphDisplayListRelated(void) + +/** + * @brief Initializes the speed graph display lists and marker indices. + */ +void speedgraphInit(void) { #if defined(LEFTOVERDEBUG) s32 i; - gSPEndDisplayList(g_speedGraphDisplayList[0]); - gSPEndDisplayList(g_speedGraphDisplayList[1]); - g_speedGraphDisplayListBank = 0; + gSPEndDisplayList(gSpeedGraphDisplayLists[0]); + gSPEndDisplayList(gSpeedGraphDisplayLists[1]); + gSpeedGraphDisplayListIndex = 0; for (i = 0; i < 3; i++) { - dword_CODE_bss_800607B0[i] = 0; - dword_CODE_bss_800607D0[i] = 1; + gSpeedGraphMarkerIndices[i] = 0; + gSpeedGraphMarkerHeadIndices[i] = 1; } - speedGraphVideoRelated_2(); + speedgraphMarkerCommit(); #endif } -void speedGraphVideoRelated_1(void) { + +/** + * @brief Updates the speed graph marker indices and current OS counter value. + */ +void speedgraphMarkerUpdate(void) { #if defined(LEFTOVERDEBUG) s32 i; @@ -119,12 +112,16 @@ void speedGraphVideoRelated_1(void) { for (i = 0; i < 3; i++) { - dword_CODE_bss_800607C0[i] = ((dword_CODE_bss_800607D0[i] + 31) % 32); + gSpeedGraphMarkerNextIndices[i] = ((gSpeedGraphMarkerHeadIndices[i] + 31) % 32); } #endif } -void speedGraphVideoRelated_2(void) { + +/** + * @brief Commits the current speed graph marker states. + */ +void speedgraphMarkerCommit(void) { #if defined(LEFTOVERDEBUG) s32 i; @@ -132,61 +129,78 @@ void speedGraphVideoRelated_2(void) { for (i = 0; i < 3; i++) { - dword_CODE_bss_800607B0[i] = dword_CODE_bss_800607C0[i]; + gSpeedGraphMarkerIndices[i] = gSpeedGraphMarkerNextIndices[i]; } #endif } -#if defined(LEFTOVERDEBUG) -void profileSetMarker(s32 arg0) -{ - s32 index; - s32 mf; - OSIntMask mask; - s32 index2; - unknown_s *pp; - - index = arg0 & 0xFFFF; - mask = osSetIntMask(OS_IM_NONE); - mf = arg0 >> 16; - index2 = dword_CODE_bss_800607D0[index]; - - if (mf == 3) - { - // set highest bit - mf = dword_CODE_bss_8005F3F0[index] | 0x8000; - } - else if (mf == 6) - { - // clear highest bit - mf = dword_CODE_bss_8005F3F0[index] & 0x7FFF; - } - - pp = &dword_CODE_bss_800604B0[index][index2]; - pp->unk0 = mf; - pp->osCount = osGetCount(); - dword_CODE_bss_8005F3F0[index] = mf; - - index2++; - - if (index2 >= 32) - { - index2 = 0; - } - - dword_CODE_bss_800607D0[index] = index2; - - osSetIntMask(mask); -} -#else -void profileSetMarker(void) +#if !defined(LEFTOVERDEBUG) +/** + * @brief Renders the speed graph based on the collected marker data. + * EU is a dummy function. + */ +void speedgraphRenderGraph(void) { } #endif -Gfx *speedGraphDisplay(Gfx *gdl) +/** + * @brief Handles setting a marker in the speed graph, updating flags and OS count. + * + * @param arg0 Specifies the marker state to be set. + */ +void speedgraphMarkerHandler(s32 arg0) { - #if defined(LEFTOVERDEBUG) +#if defined(LEFTOVERDEBUG) + s32 index; + s32 markerFlag; + OSIntMask mask; + s32 nextIndex; + SpeedGraphMarker *marker; + + index = arg0 & 0xFFFF; + mask = osSetIntMask(OS_IM_NONE); + markerFlag = arg0 >> 16; + nextIndex = gSpeedGraphMarkerHeadIndices[index]; + + if (markerFlag == 3) + { + // set highest bit + markerFlag = gSpeedGraphMarkerFlags[index] | 0x8000; + } + else if (markerFlag == 6) + { + // clear highest bit + markerFlag = gSpeedGraphMarkerFlags[index] & 0x7FFF; + } + + marker = &gSpeedGraphMarkers[index][nextIndex]; + marker->markerFlags = markerFlag; + marker->osCount = osGetCount(); + gSpeedGraphMarkerFlags[index] = markerFlag; + + nextIndex++; + + if (nextIndex >= 32) + { + nextIndex = 0; + } + + gSpeedGraphMarkerHeadIndices[index] = nextIndex; + + osSetIntMask(mask); +#endif +} + +/** + * @brief Displays the speed graph metrics, including frame rate and processor utilization. + * + * @param gdl Pointer to the current display list. + * @return Pointer to the updated display list. + */ +Gfx *speedgraphDisplayMetrics(Gfx *gdl) +{ +#if defined(LEFTOVERDEBUG) u32 *counters; u32 localCountAccumulator = g_speedGraphCountAccumulator; s32 *pmaxSeenCount = &g_speedGraphMaxSeenCount; @@ -263,333 +277,129 @@ Gfx *speedGraphDisplay(Gfx *gdl) g_speedGraphMaxSeenCount = 0; } - gSPDisplayList(gdl++, g_speedGraphDisplayList[g_speedGraphDisplayListBank ^ 1]); - + gSPDisplayList(gdl++, gSpeedGraphDisplayLists[gSpeedGraphDisplayListIndex ^ 1]); +#endif return gdl; - #endif } -#ifdef NONMATCHING -Gfx *sub_GAME_7F0D1AC0(Gfx *gdl); -void sub_GAME_7F0D1DCC(f32 arg0); -Gfx *sub_GAME_7F0D1BD0(Gfx *gdl, f32 arg1, s32 r, s32 g, s32 b, s32 arg5, s32 arg6); -void sub_GAME_7F0D2320(void); -Gfx *sub_GAME_7F0D1E98(Gfx *gdl, s32 r, s32 g, s32 b); -void video_DL_related_4(void) { - g_speedGraphCounterForFrames += speedgraphframes; - if (g_speedGraphCounterForFrames > 200) { - g_speedGraphCounterForFrames -= 200; - D_80023234 ^= 1; + +#if defined(LEFTOVERDEBUG) +/** + * @brief Renders the speed graph based on the collected marker data. + */ +void speedgraphRenderGraph(void) +{ + s32 currentMarkerIndex; + s32 i; // sp 0xc8 + f32 graphWidth; + s32 markerFlags; + u32 currentMarkerOsCount; + Gfx *gdl; + s32 graphStates[3]; + u32 previousOsCount[3]; + Gfx *head; + SpeedGraphColorSettings *colorSettings; + u32 tempOsCount; + + static s32 frameToggle = 0; + static u32 speedGraphCounterForFrames = 0; + static s32 toggleFlag = 1; + + speedGraphCounterForFrames += speedgraphframes; + if (speedGraphCounterForFrames > 200) + { + toggleFlag ^= 1; + speedGraphCounterForFrames -= 200; } - if (D_80023234 != (D_8002322C++ & 1)) { - s32 spAC[3]; - s32 spA0[3]; - Gfx *gdl = sub_GAME_7F0D1AC0(g_speedGraphDisplayList[g_speedGraphDisplayListBank]); - s32 i; - for (i = 0; i < 3; i++) { - spAC[i] = 0; + + if (toggleFlag != (frameToggle++ & 1)) + { + gdl = InitializeSpeedGraphDL(gSpeedGraphDisplayLists[gSpeedGraphDisplayListIndex]); + + for (i = 0; i < 3; i++) + { + graphStates[i] = 0; } - for (i = 0; i < 3; i++) { - spA0[i] = g_speedGraphLastOsCount; + + for (i = 0; i < 3; i++) + { + previousOsCount[i] = g_speedGraphLastOsCount; } - for (i = 0; i < 3; i++) { - s32 var1 = dword_CODE_bss_800607B0[i]; - while (var1 != dword_CODE_bss_800607D0[i]) { - s32 phi_v1; - s32 phi_s2 = dword_CODE_bss_800604B0[i][var1].unk0; - if (phi_s2 & 0x8000) { - phi_s2 = 3; + + for (i = 0; i < 3; i++) + { + currentMarkerIndex = gSpeedGraphMarkerIndices[i]; + + if(1); + graphWidth = 0; + + while (currentMarkerIndex != gSpeedGraphMarkerHeadIndices[i]) + { + markerFlags = gSpeedGraphMarkers[i][currentMarkerIndex].markerFlags; + + if (markerFlags & 0x8000) + { + markerFlags = 3; } - phi_v1 = spA0[i]; - if (spA0[i] < g_speedGraphLastOsCount) { - phi_v1 = g_speedGraphLastOsCount; + + tempOsCount = gSpeedGraphMarkers[i][currentMarkerIndex].osCount; + + if(currentMarkerIndex); + //if(1); + + currentMarkerOsCount = previousOsCount[i]; + if (currentMarkerOsCount < g_speedGraphLastOsCount) + { + currentMarkerOsCount = g_speedGraphLastOsCount; } - if (dword_CODE_bss_800604B0[i][var1].osCount >= g_speedGraphLastOsCount) { - if (dword_CODE_bss_800604B0[i][var1].osCount >= phi_v1) { - f32 temp_f12; - if ((spAC[i] != 1) && (spAC[i] != 3) && ((spAC[i] & 0x8000) == 0)) { - temp_f12 = (dword_CODE_bss_800604B0[i][var1].osCount - phi_v1) / 775875.0f; - } - if (spAC[i] == 1) { - sub_GAME_7F0D1DCC(temp_f12); - } else { - s_800231D4 *temp = &D_800231D4[spAC[i]]; - sub_GAME_7F0D1BD0(gdl++, temp_f12, ((temp->color >> 0x18) & 0xFF), ((temp->color >> 0x10) & 0xFF), ((temp->color >> 0x8) & 0xFF), temp->unk8, temp->unkC); - } - gDPPipeSync(gdl++); + + if (tempOsCount >= g_speedGraphLastOsCount && tempOsCount >= currentMarkerOsCount) + { + if ((graphStates[i] != 1) && (graphStates[i] != 3) && ((graphStates[i] & 0x8000) == 0)) + { + graphWidth += (tempOsCount - currentMarkerOsCount) / 775875.0f; } + + colorSettings = &gSpeedGraphColorSettings[graphStates[i]]; + + if (graphStates[i] == 1) + { + UpdateGraphPosition((tempOsCount - currentMarkerOsCount) / 775875.0f); + } + else + { + gdl = DrawGraphBar( + gdl++, + (tempOsCount - currentMarkerOsCount) / 775875.0f, + ((colorSettings->color >> 0x18) & 0xFF), + ((colorSettings->color >> 0x10) & 0xFF), + ((colorSettings->color >> 0x8) & 0xFF), + colorSettings->width, + colorSettings->height); + } + + head = gdl++; + gDPPipeSync(head); + //gDPPipeSync(gdl++); } - spAC[i] = phi_s2; - spA0[i] = dword_CODE_bss_800604B0[i][var1].osCount; - var1 = ((var1 + 1) % 32); + + graphStates[i] = markerFlags; + previousOsCount[i] = tempOsCount; + currentMarkerIndex = ((currentMarkerIndex + 1) % 32); } - if (i < 2) { - sub_GAME_7F0D2320(); + + if (i < 2) + { + AlignGraphPosition(); } } - gdl = sub_GAME_7F0D1E98(gdl++, 0, 0, 0); + + gdl = DrawVerticalLines(gdl++, 0, 0, 0); gDPPipeSync(gdl++); gSPEndDisplayList(gdl); - g_speedGraphDisplayListBank ^= 1; + + gSpeedGraphDisplayListIndex ^= 1; } -} -#else -#if defined(LEFTOVERDEBUG) -GLOBAL_ASM( -.late_rodata -glabel aIL0 -/* "I=l0"; // 775875.0f */ -.word 0x493d6c30 -.word 0 -.text -glabel video_DL_related_4 -/* 0038D8 70002CD8 27BDFF30 */ addiu $sp, $sp, -0xd0 -/* 0038DC 70002CDC 3C028002 */ lui $v0, %hi(g_speedGraphCounterForFrames) -/* 0038E0 70002CE0 3C0E8005 */ lui $t6, %hi(speedgraphframes) -/* 0038E4 70002CE4 8C423230 */ lw $v0, %lo(g_speedGraphCounterForFrames)($v0) -/* 0038E8 70002CE8 8DCE8498 */ lw $t6, %lo(speedgraphframes)($t6) -/* 0038EC 70002CEC 3C018002 */ lui $at, %hi(g_speedGraphCounterForFrames) -/* 0038F0 70002CF0 AFBF005C */ sw $ra, 0x5c($sp) -/* 0038F4 70002CF4 004E1021 */ addu $v0, $v0, $t6 -/* 0038F8 70002CF8 AC223230 */ sw $v0, %lo(g_speedGraphCounterForFrames)($at) -/* 0038FC 70002CFC 2C4100C9 */ sltiu $at, $v0, 0xc9 -/* 003900 70002D00 AFBE0058 */ sw $fp, 0x58($sp) -/* 003904 70002D04 AFB70054 */ sw $s7, 0x54($sp) -/* 003908 70002D08 AFB60050 */ sw $s6, 0x50($sp) -/* 00390C 70002D0C AFB5004C */ sw $s5, 0x4c($sp) -/* 003910 70002D10 AFB40048 */ sw $s4, 0x48($sp) -/* 003914 70002D14 AFB30044 */ sw $s3, 0x44($sp) -/* 003918 70002D18 AFB20040 */ sw $s2, 0x40($sp) -/* 00391C 70002D1C AFB1003C */ sw $s1, 0x3c($sp) -/* 003920 70002D20 AFB00038 */ sw $s0, 0x38($sp) -/* 003924 70002D24 F7B60030 */ sdc1 $f22, 0x30($sp) -/* 003928 70002D28 14200009 */ bnez $at, .L70002D50 -/* 00392C 70002D2C F7B40028 */ sdc1 $f20, 0x28($sp) -/* 003930 70002D30 3C0F8002 */ lui $t7, %hi(D_80023234) -/* 003934 70002D34 8DEF3234 */ lw $t7, %lo(D_80023234)($t7) -/* 003938 70002D38 3C018002 */ lui $at, %hi(D_80023234) -/* 00393C 70002D3C 2442FF38 */ addiu $v0, $v0, -0xc8 -/* 003940 70002D40 39F80001 */ xori $t8, $t7, 1 -/* 003944 70002D44 AC383234 */ sw $t8, %lo(D_80023234)($at) -/* 003948 70002D48 3C018002 */ lui $at, %hi(g_speedGraphCounterForFrames) -/* 00394C 70002D4C AC223230 */ sw $v0, %lo(g_speedGraphCounterForFrames)($at) -.L70002D50: -/* 003950 70002D50 3C038002 */ lui $v1, %hi(D_8002322C) -/* 003954 70002D54 8C63322C */ lw $v1, %lo(D_8002322C)($v1) -/* 003958 70002D58 3C198002 */ lui $t9, %hi(D_80023234) -/* 00395C 70002D5C 8F393234 */ lw $t9, %lo(D_80023234)($t9) -/* 003960 70002D60 30690001 */ andi $t1, $v1, 1 -/* 003964 70002D64 3C018002 */ lui $at, %hi(D_8002322C) -/* 003968 70002D68 24630001 */ addiu $v1, $v1, 1 -/* 00396C 70002D6C 132900AD */ beq $t9, $t1, .L70003024 -/* 003970 70002D70 AC23322C */ sw $v1, %lo(D_8002322C)($at) -/* 003974 70002D74 3C0A8006 */ lui $t2, %hi(g_speedGraphDisplayListBank) -/* 003978 70002D78 8D4A04A0 */ lw $t2, %lo(g_speedGraphDisplayListBank)($t2) -/* 00397C 70002D7C 3C0C8006 */ lui $t4, %hi(g_speedGraphDisplayList) -/* 003980 70002D80 258CF400 */ addiu $t4, %lo(g_speedGraphDisplayList) # addiu $t4, $t4, -0xc00 -/* 003984 70002D84 000A5940 */ sll $t3, $t2, 5 -/* 003988 70002D88 016A5821 */ addu $t3, $t3, $t2 -/* 00398C 70002D8C 000B5880 */ sll $t3, $t3, 2 -/* 003990 70002D90 016A5821 */ addu $t3, $t3, $t2 -/* 003994 70002D94 000B5900 */ sll $t3, $t3, 4 -/* 003998 70002D98 0FC346B0 */ jal sub_GAME_7F0D1AC0 -/* 00399C 70002D9C 016C2021 */ addu $a0, $t3, $t4 -/* 0039A0 70002DA0 00409825 */ move $s3, $v0 -/* 0039A4 70002DA4 27A200B8 */ addiu $v0, $sp, 0xb8 -/* 0039A8 70002DA8 27B400AC */ addiu $s4, $sp, 0xac -.L70002DAC: -/* 0039AC 70002DAC 26940004 */ addiu $s4, $s4, 4 -/* 0039B0 70002DB0 0282082B */ sltu $at, $s4, $v0 -/* 0039B4 70002DB4 1420FFFD */ bnez $at, .L70002DAC -/* 0039B8 70002DB8 AE80FFFC */ sw $zero, -4($s4) -/* 0039BC 70002DBC 3C048006 */ lui $a0, %hi(g_speedGraphLastOsCount) -/* 0039C0 70002DC0 8C8404A4 */ lw $a0, %lo(g_speedGraphLastOsCount)($a0) -/* 0039C4 70002DC4 27B500A0 */ addiu $s5, $sp, 0xa0 -/* 0039C8 70002DC8 27A200AC */ addiu $v0, $sp, 0xac -.L70002DCC: -/* 0039CC 70002DCC 26B50004 */ addiu $s5, $s5, 4 -/* 0039D0 70002DD0 02A2082B */ sltu $at, $s5, $v0 -/* 0039D4 70002DD4 1420FFFD */ bnez $at, .L70002DCC -/* 0039D8 70002DD8 AEA4FFFC */ sw $a0, -4($s5) -/* 0039DC 70002DDC 3C0D8006 */ lui $t5, %hi(dword_CODE_bss_800607B0) -/* 0039E0 70002DE0 25AD07B0 */ addiu $t5, %lo(dword_CODE_bss_800607B0) # addiu $t5, $t5, 0x7b0 -/* 0039E4 70002DE4 3C1E8006 */ lui $fp, %hi(dword_CODE_bss_800607D0) -/* 0039E8 70002DE8 3C018003 */ lui $at, %hi(aIL0) -/* 0039EC 70002DEC C4368470 */ lwc1 $f22, %lo(aIL0)($at) -/* 0039F0 70002DF0 27DE07D0 */ addiu $fp, %lo(dword_CODE_bss_800607D0) # addiu $fp, $fp, 0x7d0 -/* 0039F4 70002DF4 AFAD0070 */ sw $t5, 0x70($sp) -/* 0039F8 70002DF8 AFA000C8 */ sw $zero, 0xc8($sp) -/* 0039FC 70002DFC AFA00080 */ sw $zero, 0x80($sp) -/* 003A00 70002E00 24160001 */ li $s6, 1 -.L70002E04: -/* 003A04 70002E04 8FAE0070 */ lw $t6, 0x70($sp) -/* 003A08 70002E08 8FC50000 */ lw $a1, ($fp) -/* 003A0C 70002E0C 8FAF0080 */ lw $t7, 0x80($sp) -/* 003A10 70002E10 8DD10000 */ lw $s1, ($t6) -/* 003A14 70002E14 4480A000 */ mtc1 $zero, $f20 -/* 003A18 70002E18 27B800AC */ addiu $t8, $sp, 0xac -/* 003A1C 70002E1C 1225005F */ beq $s1, $a1, .L70002F9C -/* 003A20 70002E20 01F8A021 */ addu $s4, $t7, $t8 -/* 003A24 70002E24 8FA900C8 */ lw $t1, 0xc8($sp) -/* 003A28 70002E28 3C0B8006 */ lui $t3, %hi(dword_CODE_bss_800604B0) -/* 003A2C 70002E2C 256B04B0 */ addiu $t3, %lo(dword_CODE_bss_800604B0) # addiu $t3, $t3, 0x4b0 -/* 003A30 70002E30 27B900A0 */ addiu $t9, $sp, 0xa0 -/* 003A34 70002E34 00095200 */ sll $t2, $t1, 8 -/* 003A38 70002E38 014BB821 */ addu $s7, $t2, $t3 -/* 003A3C 70002E3C 01F9A821 */ addu $s5, $t7, $t9 -.L70002E40: -/* 003A40 70002E40 001160C0 */ sll $t4, $s1, 3 -/* 003A44 70002E44 02EC1021 */ addu $v0, $s7, $t4 -/* 003A48 70002E48 8C520000 */ lw $s2, ($v0) -/* 003A4C 70002E4C 3C048006 */ lui $a0, %hi(g_speedGraphLastOsCount) -/* 003A50 70002E50 8C8404A4 */ lw $a0, %lo(g_speedGraphLastOsCount)($a0) -/* 003A54 70002E54 324D8000 */ andi $t5, $s2, 0x8000 -/* 003A58 70002E58 51A00003 */ beql $t5, $zero, .L70002E68 -/* 003A5C 70002E5C 8EA30000 */ lw $v1, ($s5) -/* 003A60 70002E60 24120003 */ li $s2, 3 -/* 003A64 70002E64 8EA30000 */ lw $v1, ($s5) -.L70002E68: -/* 003A68 70002E68 8C500004 */ lw $s0, 4($v0) -/* 003A6C 70002E6C 0064082B */ sltu $at, $v1, $a0 -/* 003A70 70002E70 50200003 */ beql $at, $zero, .L70002E80 -/* 003A74 70002E74 0204082B */ sltu $at, $s0, $a0 -/* 003A78 70002E78 00801825 */ move $v1, $a0 -/* 003A7C 70002E7C 0204082B */ sltu $at, $s0, $a0 -.L70002E80: -/* 003A80 70002E80 1420003C */ bnez $at, .L70002F74 -/* 003A84 70002E84 0203082B */ sltu $at, $s0, $v1 -/* 003A88 70002E88 1420003A */ bnez $at, .L70002F74 -/* 003A8C 70002E8C 3C198002 */ lui $t9, %hi(D_800231D4) -/* 003A90 70002E90 8E820000 */ lw $v0, ($s4) -/* 003A94 70002E94 273931D4 */ addiu $t9, %lo(D_800231D4) # addiu $t9, $t9, 0x31d4 -/* 003A98 70002E98 02034823 */ subu $t1, $s0, $v1 -/* 003A9C 70002E9C 12C2000F */ beq $s6, $v0, .L70002EDC -/* 003AA0 70002EA0 00027900 */ sll $t7, $v0, 4 -/* 003AA4 70002EA4 24010003 */ li $at, 3 -/* 003AA8 70002EA8 1041000C */ beq $v0, $at, .L70002EDC -/* 003AAC 70002EAC 304E8000 */ andi $t6, $v0, 0x8000 -/* 003AB0 70002EB0 15C0000A */ bnez $t6, .L70002EDC -/* 003AB4 70002EB4 0203C023 */ subu $t8, $s0, $v1 -/* 003AB8 70002EB8 44982000 */ mtc1 $t8, $f4 -/* 003ABC 70002EBC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 003AC0 70002EC0 07010004 */ bgez $t8, .L70002ED4 -/* 003AC4 70002EC4 468021A0 */ cvt.s.w $f6, $f4 -/* 003AC8 70002EC8 44814000 */ mtc1 $at, $f8 -/* 003ACC 70002ECC 00000000 */ nop -/* 003AD0 70002ED0 46083180 */ add.s $f6, $f6, $f8 -.L70002ED4: -/* 003AD4 70002ED4 46163283 */ div.s $f10, $f6, $f22 -/* 003AD8 70002ED8 460AA500 */ add.s $f20, $f20, $f10 -.L70002EDC: -/* 003ADC 70002EDC 44898000 */ mtc1 $t1, $f16 -/* 003AE0 70002EE0 01F94021 */ addu $t0, $t7, $t9 -/* 003AE4 70002EE4 05210005 */ bgez $t1, .L70002EFC -/* 003AE8 70002EE8 468084A0 */ cvt.s.w $f18, $f16 -/* 003AEC 70002EEC 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 003AF0 70002EF0 44812000 */ mtc1 $at, $f4 -/* 003AF4 70002EF4 00000000 */ nop -/* 003AF8 70002EF8 46049480 */ add.s $f18, $f18, $f4 -.L70002EFC: -/* 003AFC 70002EFC 16C20005 */ bne $s6, $v0, .L70002F14 -/* 003B00 70002F00 46169303 */ div.s $f12, $f18, $f22 -/* 003B04 70002F04 0FC34773 */ jal sub_GAME_7F0D1DCC -/* 003B08 70002F08 00000000 */ nop -/* 003B0C 70002F0C 10000014 */ b .L70002F60 -/* 003B10 70002F10 02601025 */ move $v0, $s3 -.L70002F14: -/* 003B14 70002F14 8D020004 */ lw $v0, 4($t0) -/* 003B18 70002F18 44056000 */ mfc1 $a1, $f12 -/* 003B1C 70002F1C 02602025 */ move $a0, $s3 -/* 003B20 70002F20 00026203 */ sra $t4, $v0, 8 -/* 003B24 70002F24 318D00FF */ andi $t5, $t4, 0xff -/* 003B28 70002F28 AFAD0010 */ sw $t5, 0x10($sp) -/* 003B2C 70002F2C 8D0E0008 */ lw $t6, 8($t0) -/* 003B30 70002F30 00023603 */ sra $a2, $v0, 0x18 -/* 003B34 70002F34 00023C03 */ sra $a3, $v0, 0x10 -/* 003B38 70002F38 AFAE0014 */ sw $t6, 0x14($sp) -/* 003B3C 70002F3C 8D18000C */ lw $t8, 0xc($t0) -/* 003B40 70002F40 30EB00FF */ andi $t3, $a3, 0xff -/* 003B44 70002F44 30CA00FF */ andi $t2, $a2, 0xff -/* 003B48 70002F48 01403025 */ move $a2, $t2 -/* 003B4C 70002F4C 01603825 */ move $a3, $t3 -/* 003B50 70002F50 0FC346F4 */ jal sub_GAME_7F0D1BD0 -/* 003B54 70002F54 AFB80018 */ sw $t8, 0x18($sp) -/* 003B58 70002F58 00409825 */ move $s3, $v0 -/* 003B5C 70002F5C 02601025 */ move $v0, $s3 -.L70002F60: -/* 003B60 70002F60 3C0FE700 */ lui $t7, 0xe700 -/* 003B64 70002F64 AC4F0000 */ sw $t7, ($v0) -/* 003B68 70002F68 AC400004 */ sw $zero, 4($v0) -/* 003B6C 70002F6C 26730008 */ addiu $s3, $s3, 8 -/* 003B70 70002F70 8FC50000 */ lw $a1, ($fp) -.L70002F74: -/* 003B74 70002F74 26310001 */ addiu $s1, $s1, 1 -/* 003B78 70002F78 AE920000 */ sw $s2, ($s4) -/* 003B7C 70002F7C AEB00000 */ sw $s0, ($s5) -/* 003B80 70002F80 06210004 */ bgez $s1, .L70002F94 -/* 003B84 70002F84 3239001F */ andi $t9, $s1, 0x1f -/* 003B88 70002F88 13200002 */ beqz $t9, .L70002F94 -/* 003B8C 70002F8C 00000000 */ nop -/* 003B90 70002F90 2739FFE0 */ addiu $t9, $t9, -0x20 -.L70002F94: -/* 003B94 70002F94 1725FFAA */ bne $t9, $a1, .L70002E40 -/* 003B98 70002F98 03208825 */ move $s1, $t9 -.L70002F9C: -/* 003B9C 70002F9C 8FA900C8 */ lw $t1, 0xc8($sp) -/* 003BA0 70002FA0 29210002 */ slti $at, $t1, 2 -/* 003BA4 70002FA4 50200004 */ beql $at, $zero, .L70002FB8 -/* 003BA8 70002FA8 8FAA00C8 */ lw $t2, 0xc8($sp) -/* 003BAC 70002FAC 0FC348C8 */ jal sub_GAME_7F0D2320 -/* 003BB0 70002FB0 00000000 */ nop -/* 003BB4 70002FB4 8FAA00C8 */ lw $t2, 0xc8($sp) -.L70002FB8: -/* 003BB8 70002FB8 8FAC0080 */ lw $t4, 0x80($sp) -/* 003BBC 70002FBC 8FAE0070 */ lw $t6, 0x70($sp) -/* 003BC0 70002FC0 24010003 */ li $at, 3 -/* 003BC4 70002FC4 254B0001 */ addiu $t3, $t2, 1 -/* 003BC8 70002FC8 258D0004 */ addiu $t5, $t4, 4 -/* 003BCC 70002FCC 25D80004 */ addiu $t8, $t6, 4 -/* 003BD0 70002FD0 AFB80070 */ sw $t8, 0x70($sp) -/* 003BD4 70002FD4 AFAD0080 */ sw $t5, 0x80($sp) -/* 003BD8 70002FD8 AFAB00C8 */ sw $t3, 0xc8($sp) -/* 003BDC 70002FDC 1561FF89 */ bne $t3, $at, .L70002E04 -/* 003BE0 70002FE0 27DE0004 */ addiu $fp, $fp, 4 -/* 003BE4 70002FE4 02602025 */ move $a0, $s3 -/* 003BE8 70002FE8 00002825 */ move $a1, $zero -/* 003BEC 70002FEC 00003025 */ move $a2, $zero -/* 003BF0 70002FF0 0FC347A6 */ jal sub_GAME_7F0D1E98 -/* 003BF4 70002FF4 00003825 */ move $a3, $zero -/* 003BF8 70002FF8 3C038006 */ lui $v1, %hi(g_speedGraphDisplayListBank) -/* 003BFC 70002FFC 3C0FE700 */ lui $t7, 0xe700 -/* 003C00 70003000 3C19B800 */ lui $t9, 0xb800 -/* 003C04 70003004 246304A0 */ addiu $v1, %lo(g_speedGraphDisplayListBank) # addiu $v1, $v1, 0x4a0 -/* 003C08 70003008 AC4F0000 */ sw $t7, ($v0) -/* 003C0C 7000300C AC400004 */ sw $zero, 4($v0) -/* 003C10 70003010 AC590008 */ sw $t9, 8($v0) -/* 003C14 70003014 AC40000C */ sw $zero, 0xc($v0) -/* 003C18 70003018 8C690000 */ lw $t1, ($v1) -/* 003C1C 7000301C 392A0001 */ xori $t2, $t1, 1 -/* 003C20 70003020 AC6A0000 */ sw $t2, ($v1) -.L70003024: -/* 003C24 70003024 8FBF005C */ lw $ra, 0x5c($sp) -/* 003C28 70003028 D7B40028 */ ldc1 $f20, 0x28($sp) -/* 003C2C 7000302C D7B60030 */ ldc1 $f22, 0x30($sp) -/* 003C30 70003030 8FB00038 */ lw $s0, 0x38($sp) -/* 003C34 70003034 8FB1003C */ lw $s1, 0x3c($sp) -/* 003C38 70003038 8FB20040 */ lw $s2, 0x40($sp) -/* 003C3C 7000303C 8FB30044 */ lw $s3, 0x44($sp) -/* 003C40 70003040 8FB40048 */ lw $s4, 0x48($sp) -/* 003C44 70003044 8FB5004C */ lw $s5, 0x4c($sp) -/* 003C48 70003048 8FB60050 */ lw $s6, 0x50($sp) -/* 003C4C 7000304C 8FB70054 */ lw $s7, 0x54($sp) -/* 003C50 70003050 8FBE0058 */ lw $fp, 0x58($sp) -/* 003C54 70003054 03E00008 */ jr $ra -/* 003C58 70003058 27BD00D0 */ addiu $sp, $sp, 0xd0 -) -#else -Gfx* video_DL_related_4(Gfx* param_1) -{ - return param_1; + } #endif -#endif diff --git a/src/speed_graph.h b/src/speed_graph.h index 8f51974..eb9e41b 100644 --- a/src/speed_graph.h +++ b/src/speed_graph.h @@ -3,16 +3,9 @@ #include -Gfx *speedGraphDisplay(Gfx *gdl); -void speedGraphVideoRelated_2(void); - -#if defined(VERSION_EU) -void profileSetMarker(void); -Gfx *video_DL_related_4(Gfx *gdl); -#else -void profileSetMarker(s32 arg0); -void video_DL_related_4(void); -#endif - +void speedgraphMarkerCommit(void); +void speedgraphMarkerHandler(s32 arg0); +Gfx *speedgraphDisplayMetrics(Gfx *gdl); +void speedgraphRenderGraph(void); #endif diff --git a/src/tlb_hardwire.s b/src/tlb_hardwire.s index 720bfed..731ecb0 100644 --- a/src/tlb_hardwire.s +++ b/src/tlb_hardwire.s @@ -25,3 +25,4 @@ glabel initTLBPrepareContext /* 0027BC 70001BBC 40882000 */ mtc0 $t0, $4 #C0_CONTEXT /* 0027C0 70001BC0 03E00008 */ jr $ra /* 0027C4 70001BC4 00000000 */ nop +.size initTLBPrepareContext, . - initTLBPrepareContext \ No newline at end of file diff --git a/src/tlb_manage.c b/src/tlb_manage.c index 600b082..e78a3d8 100644 --- a/src/tlb_manage.c +++ b/src/tlb_manage.c @@ -6,7 +6,11 @@ /** * @file tlb_manage.c - * This file contains tlb management code. + * @brief TLB management code for the N64 system. + * + * This file contains functions for managing the Translation Lookaside Buffer (TLB), + * including setting up TLB entries, removing them, and loading ROM segments into + * TLB entries. */ #define PAGE_SIZE 0x2000 @@ -17,14 +21,18 @@ #define CPU_ARCH_MAX_TLB_ENTRIES 32 /** + * @brief Converts a segment index to a TLB mask index. + * * TLB Entry consists of 13 unused bits, 12 bits for mask, and upper 7 bits unused. */ -#define VAL_TO_TLB_MASK(x) (x << 13) +#define GET_TLB_MASK_INDEX(x) (x << 13) /** + * @brief Converts a TLB mask index to a segment index. + * * TLB Entry consists of 13 unused bits, 12 bits for mask, and upper 7 bits unused. */ -#define TLB_MASK_TO_VAL(x) (x >> 13) +#define GET_TLB_INDEX_FROM_MASK(x) (x >> 13) /** * Number of entries in the TLB Management table. @@ -40,9 +48,13 @@ #define MAPPING_TABLE_COUNT 93 #endif -#define TLB_RANDOM_MOD MAPPING_TABLE_COUNT - +#define TLB_SEGMENT_COUNT MAPPING_TABLE_COUNT +/** + * @brief Structure representing a TLB management table entry. + * + * This structure holds the context value and page number for a TLB entry. + */ struct TlbManageTableEntry { u32 contextValue; @@ -50,71 +62,112 @@ struct TlbManageTableEntry s64 RESERVED; }; +/** + * @brief Structure representing a TLB mapping table entry. + * + * This structure holds the mapping information for a TLB entry, + * including entry identifiers. + */ struct TlbManageMap { u8 entry0; u8 entry1; }; -s32 g_tlbmanageCurrentTlbEntries = 0; -u32 g_tlbmanageTlbSegmentNumber = 0; -struct TlbManageTableEntry g_tlbmanageMangementTable[MANAGEMENT_TABLE_COUNT]; -struct TlbManageMap g_tlbmanageMappingTable[MAPPING_TABLE_COUNT]; +/** + * @brief The current number of TLB entries managed. + */ +s32 g_tlbCurrentEntryCount = 0; +/** + * @brief The current segment index used in TLB operations. + */ +u32 g_tlbSegmentIndex = 0; + +/** + * @brief Table for managing TLB entries. + */ +struct TlbManageTableEntry g_tlbManagementTable[MANAGEMENT_TABLE_COUNT]; + +/** + * @brief Table for mapping TLB entries to segments. + */ +struct TlbManageMap g_tlbMappingTable[MAPPING_TABLE_COUNT]; + +/** + * @brief Marks the end of the TLB mapping table in memory. + */ u32 g_tlbmanageMappingTableEnd; -u8 (*g_tlbmanageTlbAllocatedBlock) [TLB_ALLOCATION_BLOCK_SIZE]; + +/** + * @brief Pointer to the block of memory allocated for TLB operations. + */ +u8 (*g_tlbmanageTlbAllocatedBlock) [TLB_BLOCK_SIZE]; extern u8 *_gameSegmentRomStart; extern u8 *sp_boot; + +/** + * @brief Initializes the TLB management and mapping tables. + * + * This function sets up the TLB management and mapping tables, + * initializing each entry to its default state. + */ void tlbmanageEstablishManagementTable(void) { s32 i; for (i = 0; i < MANAGEMENT_TABLE_COUNT; i++) { - g_tlbmanageMangementTable[i].contextValue = 1; - g_tlbmanageMangementTable[i].pagenum = 0; + g_tlbManagementTable[i].contextValue = 1; + g_tlbManagementTable[i].pagenum = 0; } for (i = 0; i < MAPPING_TABLE_COUNT; i++) { - g_tlbmanageMappingTable[i].entry1 = 0; - g_tlbmanageMappingTable[i].entry0 = 1; + g_tlbMappingTable[i].entry1 = 0; + g_tlbMappingTable[i].entry0 = 1; } - g_tlbmanageTlbAllocatedBlock = (u8(*)[TLB_ALLOCATION_BLOCK_SIZE]) (((u32)&sp_boot & ~(PAGE_SIZE - 1)) - (MAPPING_TABLE_COUNT * PAGE_SIZE)); - g_tlbmanageMappingTableEnd = ((u32)&g_tlbmanageMangementTable) + 0xFFC08000; + g_tlbmanageTlbAllocatedBlock = (u8(*)[TLB_BLOCK_SIZE]) (((u32)&sp_boot & ~(PAGE_SIZE - 1)) - (MAPPING_TABLE_COUNT * PAGE_SIZE)); + g_tlbmanageMappingTableEnd = ((u32)&g_tlbManagementTable) + 0xFFC08000; } /** - * Sets g_tlbmanageCurrentTlbEntries to zero. + * @brief Resets the count of current TLB entries managed. + * + * This function resets the `g_tlbCurrentEntryCount` variable to zero, + * potentially after performing certain checks or operations on TLB entries. */ void tlbmanageResetCurrentEntriesCount(void) { - s32 *t = &g_tlbmanageCurrentTlbEntries; + s32 *entryCountPtr = &g_tlbCurrentEntryCount; - if (g_tlbmanageCurrentTlbEntries < 51) + if (g_tlbCurrentEntryCount < 51) { - if (g_tlbmanageCurrentTlbEntries < 26) + if (g_tlbCurrentEntryCount < 26) { - s32 t3 = *t; - if (t3) + s32 tempCount = *entryCountPtr ; + if (tempCount ) { // removed } } } - g_tlbmanageCurrentTlbEntries = 0; + g_tlbCurrentEntryCount = 0; } /** - * 24C0 700018C0 - * searches TLB index for an entry matching A0 - * V0=index of match or 80000000 if not found - * accepts: A0=TLB pointer + * @brief Searches for a TLB entry matching the given index. + * + * This function searches through the TLB entries to find one that matches the given entry value. + * If found, it returns the index of the entry; otherwise, it returns -0x80000000. + * + * @param entry The TLB entry to search for. + * @return The index of the matching TLB entry, or -0x80000000 if not found. */ s32 tlbmanageGetIndexForEntry(int entry) { @@ -134,10 +187,11 @@ s32 tlbmanageGetIndexForEntry(int entry) } /** - * 2520 70001920 - * find and remove TLB entry A0 - * accepts: A0=TLB pointer - * redirects to 700018C0, 7000D3D0 + * @brief Finds and removes a TLB entry. + * + * This function finds the TLB entry matching the given entry value and removes it. + * + * @param entry The TLB entry to remove. */ void tlbmanageRemoveEntry(u32 entry) { @@ -152,77 +206,110 @@ void tlbmanageRemoveEntry(u32 entry) } /** - * 2554 70001954 - * remove index A0 TLB entry from table at 8005E3F0 - * table format: - * 0x0 1 if dirty - * 0x1 chunk # (7F000000 | chunk<> 0xC) << 6) | 0x1F; - g_tlbmanageMappingTable[var4].entry0 = 0; - g_tlbmanageMappingTable[var4].entry1 = var2; + // Convert masked address to TLB index + tlbIndex = GET_TLB_INDEX_FROM_MASK(maskedAddress); + g_tlbManagementTable[tlbIndex].pagenum = tlbSegmentIndex; + + // Set the TLB management entry with physical address and context value + g_tlbManagementTable[tlbIndex].contextValue = ((osVirtualToPhysical(tlbEntryPointer) >> 0xC) << 6) | 0x1F; + g_tlbMappingTable[tlbSegmentIndex].entry0 = 0; + g_tlbMappingTable[tlbSegmentIndex].entry1 = tlbIndex; + + // Restore original page mask and EntryHi/Lo values (speculative) + //setTLBPageMask(tlbSegmentIndex, originalPageMask[0]); + //osSetTLBEntryHi(tlbSegmentIndex, savedEntryHi[0]); + //osSetTLBEntryLo(tlbSegmentIndex, savedEntryLo[0]); + + // Restore the previous CPU status (speculative) + //osSetIntMask(savedStatusRegister[0]); } /** - * 26F8 70001AF8 - * V0=p->TLB memory, or alternately end of free memory [8005E4A8] - * Returns pointer to (an array of TLB blocksize). + * @brief Returns a pointer to the TLB memory block. + * + * This function returns a pointer to the block of memory allocated for TLB operations, + * which may be used to manage TLB entries. + * + * @return A pointer to an array of TLB blocks. */ -u8 (*tlbmanageGetTlbAllocatedBlock(void))[TLB_ALLOCATION_BLOCK_SIZE] +u8 (*tlbmanageGetTlbAllocatedBlock(void))[TLB_BLOCK_SIZE] { return g_tlbmanageTlbAllocatedBlock; } diff --git a/src/tlb_manage.h b/src/tlb_manage.h index 97767d1..7d4f27a 100644 --- a/src/tlb_manage.h +++ b/src/tlb_manage.h @@ -5,11 +5,11 @@ /** * Block size, in bytes. */ -#define TLB_ALLOCATION_BLOCK_SIZE 0x2000 +#define TLB_BLOCK_SIZE 0x2000 void tlbmanageEstablishManagementTable(void); void tlbmanageResetCurrentEntriesCount(void); void tlbmanageTranslateLoadRomFromTlbAddress(u32 address); -u8 (*tlbmanageGetTlbAllocatedBlock(void))[TLB_ALLOCATION_BLOCK_SIZE]; +u8 (*tlbmanageGetTlbAllocatedBlock(void))[TLB_BLOCK_SIZE]; #endif diff --git a/src/tlb_resolve.s b/src/tlb_resolve.s index a77c242..739f5a5 100644 --- a/src/tlb_resolve.s +++ b/src/tlb_resolve.s @@ -6,9 +6,16 @@ .include "macros.inc" +# This code is handling a TLB miss by calculating the physical address that +# corresponds to the virtual address that caused the miss, loading a +# TLB entry from a management table, and writing the entry to the TLB. +# After this, the instruction that caused the TLB miss can be retried. + + + .section .text, "ax" glabel resolve_TLBaddress_for_InvalidHit -/* 002760 70001B60 40802800 */ mtc0 $zero, $5 +/* 002760 70001B60 40802800 */ mtc0 $zero, $5 /* 002764 70001B64 00000000 */ nop /* 002768 70001B68 401A2000 */ mfc0 $k0, $4 /* 00276C 70001B6C 3C1B8006 */ lui $k1, %hi(g_tlbmanageMappingTableEnd) # $k1, 0x8006 @@ -21,13 +28,13 @@ glabel resolve_TLBaddress_for_InvalidHit /* 002788 70001B88 277B0040 */ addiu $k1, $k1, 0x40 /* 00278C 70001B8C 409B1800 */ mtc0 $k1, $3 /* 002790 70001B90 00000000 */ nop -/* 002794 70001B94 42000006 */ tlbwr +/* 002794 70001B94 42000006 */ tlbwr /* 002798 70001B98 00000000 */ nop /* 00279C 70001B9C 00000000 */ nop /* 0027A0 70001BA0 00000000 */ nop /* 0027A4 70001BA4 00000000 */ nop /* 0027A8 70001BA8 42000018 */ eret - +.size resolve_TLBaddress_for_InvalidHit, . - resolve_TLBaddress_for_InvalidHit diff --git a/test_files.sh b/test_files.sh deleted file mode 100755 index 2368e54..0000000 --- a/test_files.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/bash - -SRC= -CONTINUE_ON_ERROR=0 -VERBOSE=0 - -usage() { - echo "checks md5s generated from make_test_files_basis.sh" - echo "" - echo "$0 usage:" - echo "" - echo " $0 -i file [-c]" - echo "" - echo " -c continue on error" - exit 0; -} - -[ $# -eq 0 ] && usage -while getopts "i:chv" arg; do - case $arg in - i) - SRC="${OPTARG}" - ;; - c) - CONTINUE_ON_ERROR=1 - ;; - v) - VERBOSE=1 - ;; - h | *) # Display help. - usage - exit 0 - ;; - esac -done - -if [ "${SRC}" = "" ] ; then - usage -fi - -if [ ! -f "${SRC}" ]; then - echo "File not found: ${SRC}" - exit 1 -fi - -OLDIFS=$IFS -IFS="," - -TMP=$(mktemp /tmp/ge_test_files.XXXXXX) - -while read MD5 SECTION FILE -do - if [ ! -f "${SRC}" ]; then - echo "File not found: ${SRC}" - continue - fi - if [ -f $FILE ]; then - mips-linux-gnu-objcopy -j "${SECTION}" -O binary "${FILE}" "${TMP}" - ACTUAL=$(md5sum -b "${TMP}" | cut -c -32 | tr '[:upper:]' '[:lower:]') - EXPECTED=$(echo "${MD5}" | tr '[:upper:]' '[:lower:]') - - if [ "${ACTUAL}" != "${EXPECTED}" ] ; then - if [ $VERBOSE -eq 1 ]; then - echo "checksums differ, section'${SECTION}', file: '${FILE}'. Actual=[${ACTUAL}], expected=[${EXPECTED}]" - else - echo -e "Mis-Match in $(echo $FILE | sed -E -e 's/build\/[uje]\/src\//src\//g;' -e 's/\.o/\.c/g')" - fi - - if [ ${CONTINUE_ON_ERROR} -eq 0 ] ; then - IFS=$OLDIFS - rm -f "${TMP}" - exit 1 - fi - else - if [ ${VERBOSE} -eq 1 ]; then - echo "pass: section'${SECTION}' ${FILE}" - fi - fi - fi -done < "${SRC}" - -IFS=$OLDIFS -rm -f "${TMP}" - -exit 0 diff --git a/tools/aiParse.c b/tools/aiParse.c index 8b9f9e8..3c9786d 100644 --- a/tools/aiParse.c +++ b/tools/aiParse.c @@ -1,9 +1,31 @@ - +// gcc -o build/aiparse tools/aiParse.c +// ./build/aiparse +//#include #include +#include +#include +#include +#include +#define _LANGUAGE_C +#define TARGET_N64 +#include "../include/PR/ultratypes.h" -#define CharArrayTo16(val, index) (val[index + 1] | val[index] << 8) -#define CharArrayTo24(val, index) (val[index + 1] << 8 | val[index + 2] | val[index] << 16) -#define CharArrayTo32(val, index) (val[index + 1] << 16 | val[index + 2] << 8 | val[index + 3] | val[index] << 24) + +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wint-conversion" +#pragma GCC diagnostic ignored "-Wincompatible-pointer-types" +#pragma GCC diagnostic ignored "-Wformat=" + +//odd, I though this would differ on L-Endian +// Ahh, figured it out, this "makes" a number and the cpu stores it in a reg in its own endianness +# define CharArrayTo16(val, index) ( val[index + 1] | val[index] << 8) +# define CharArrayTo24(val, index) ( val[index + 1] << 8 | val[index + 2] | val[index] << 16) +# define CharArrayTo32(val, index) (val[index + 1] << 16 | val[index + 2] << 8 | val[index + 3] | val[index] << 24) + +#define ntohl(var) CharArrayTo32(((unsigned char *)(&(var))), 0) +#define ntohs(var) CharArrayTo16(((unsigned char *)(&(var))), 0) +#define btol(var) *(unsigned int *)&(var) = ntohl(var) +#define btos(var) *(unsigned int *)&(var) = ntohs(var) #define isNotBoundPad(pad) pad < 10000 #define getBoundPadNum(pad) pad - 10000 @@ -21,12 +43,216 @@ #define TARGET_AIM_ONLY 0x0020 /* Aim at target instead of firing*/ #define TARGET_DONTTURN 0x0040 /* Limits target to 180 degrees in front of guard (cannot be used with TARGET_BOND flag)*/ -// command 68 - door states +char *HITTARGET_ToString[] = { + "HIT_NULL_PART", /* Null part, no reaction - 1x damage*/ + "HIT_LEFT_FOOT", /* Left foot - 1x damage*/ + "HIT_LEFT_LEG", /* Left leg - 1x damage*/ + "HIT_LEFT_THIGH", /* Left thigh - 1x damage*/ + "HIT_RIGHT_FOOT", /* Right foot - 1x damage*/ + "HIT_RIGHT_LEG", /* Right leg - 1x damage*/ + "HIT_RIGHT_THIGH", /* Right thigh - 1x damage*/ + "HIT_PELVIS", /* Pelvis - 1x damage*/ + "HIT_HEAD", /* Head - 4x damage*/ + "HIT_LEFT_HAND", /* Left hand - 1x damage*/ + "HIT_LEFT_ARM", /* Left arm - 1x damage*/ + "HIT_LEFT_SHOULDER", /* Left shoulder - 1x damage*/ + "HIT_RIGHT_HAND", /* Right hand - 1x damage*/ + "HIT_RIGHT_ARM", /* Right arm - 1x damage*/ + "HIT_RIGHT_SHOULDER", /* Right shoulder - 1x damage*/ + "HIT_CHEST", + "16", + "17", + "18", + "19", + "20", + "21", + "22", + "23", + "24", + "25", + "26", + "27", + "28", + "29", + "30", + "31", + "32", + "33", + "34", + "35", + "36", + "37", + "38", + "39", + "40", + "41", + "42", + "43", + "44", + "45", + "46", + "47", + "48", + "49", + "50", + "51", + "52", + "53", + "54", + "55", + "56", + "57", + "58", + "59", + "60", + "61", + "62", + "63", + "64", + "65", + "66", + "67", + "68", + "69", + "70", + "71", + "72", + "73", + "74", + "75", + "76", + "77", + "78", + "79", + "80", + "81", + "82", + "83", + "84", + "85", + "86", + "87", + "88", + "89", + "90", + "91", + "92", + "93", + "94", + "95", + "96", + "97", + "98", + "99", + "HIT_GUN", /* GUN - 0x damage*/ + "101", + "102", + "103", + "104", + "105", + "106", + "107", + "108", + "109", + "HIT_HAT", /* HAT - 0x damage*/ + "111", + "112", + "113", + "114", + "115", + "116", + "117", + "118", + "119", + "120", + "121", + "122", + "123", + "124", + "125", + "126", + "127", + "128", + "129", + "130", + "131", + "132", + "133", + "134", + "135", + "136", + "137", + "138", + "139", + "140", + "141", + "142", + "143", + "144", + "145", + "146", + "147", + "148", + "149", + "150", + "151", + "152", + "153", + "154", + "155", + "156", + "157", + "158", + "159", + "160", + "161", + "162", + "163", + "164", + "165", + "166", + "167", + "168", + "169", + "170", + "171", + "172", + "173", + "174", + "175", + "176", + "177", + "178", + "179", + "180", + "181", + "182", + "183", + "184", + "185", + "186", + "187", + "188", + "189", + "190", + "191", + "192", + "193", + "194", + "195", + "196", + "197", + "198", + "199", + "HIT_GENERAL", + "HIT_GENERALHALF"}; + + // command 68 - door states char *DOORSTATE_ToString[] = { - " DOOR_STATE_CLOSED", /* Closed*/ - " DOOR_STATE_OPEN", /* Opened*/ - " DOOR_STATE_CLOSING", /* Closing*/ - " DOOR_STATE_OPENING" /* Opening*/}; + " AI_DOOR_STATE_CLOSED", /* Closed*/ + " AI_DOOR_STATE_OPEN", /* Opened*/ + " AI_DOOR_STATE_CLOSING", /* Closing*/ + " AI_DOOR_STATE_OPENING" /* Opening*/}; // command D7 - hud flags #define HUD_HIDE_ALL 0x00 /* Hide all*/ @@ -45,20 +271,34 @@ char *DOORSTATE_ToString[] = { /* private chr ID, cannot be accessed with ai commands */ #define CHR_OBJECTIVE -2 /* objective ai list chr ID */ #define CHR_FREE -1 /* chr IDs when free'd (killed or removed from level) */ + +char *CHR_ToString[] = { + "", + "CHR_FREE", + "CHR_OBJECTIVE", + "CHR_SELF", + "CHR_PRESET", + "CHR_SEE_DIE", + "CHR_SEE_SHOT", + "CHR_CLONE", + "CHR_BOND_CINEMA" +}; + + #define CHR_SPAWN_NUM_START 5000 /* default chr num for spawned guards with ai command BD/BE */ -#define CHR_CLONED_NUM_START 10000 /* default chr num for cloed guards with ai command C1 */ +#define CHR_CLONED_NUM_START 10000 /* default chr num for cloned guards with ai command C1 */ /* Special ID for selecting PadPreset in AI list */ #define PAD_PRESET1 9000 /* stored as chr->padpreset1 */ -#define isGlobalAIListID(ID) ((ID) < 18) -#define isBGAIListID(ID) ((ID) > 4097) +#define isGlobalAIListID(ID) ((ID) <= 1024) +#define isBGAIListID(ID) ((ID) >= 4096) #define isChrAIListID(ID) (!isGlobalAIListID(ID) && !isBGAIListID(ID)) #define setGlobalAIListID(ID) ((ID) + 0) #define setChrAIListID(ID) ((ID) + 1025) -#define setBGAIListID(ID) ((ID) + 4097) +#define setBGAIListID(ID) ((ID) + 4096) #define getGlobalAIListID(ID) ((ID)-0) #define getChrAIListID(ID) ((ID)-1025) -#define getBGAIListID(ID) ((ID)-4097) +#define getBGAIListID(ID) ((ID)-4096) char *ANIMATIONS_ToString[] = { "ANIM_idle", @@ -125,7 +365,7 @@ char *ANIMATIONS_ToString[] = { "ANIM_extending_left_hand", "ANIM_fire_throw_grenade", "ANIM_spotting_bond", /* used by chr ai command guard_points_at_bond */ - "ANIM_look_around", /* used by chr ai command GUARD_ANIM_LOOKS_AROUND_SELF */ + "ANIM_look_around", /* used by chr ai command GUARD_ANIM_LOOKS_AROUND_SELF */ "ANIM_fire_standing_one_handed_weapon", "ANIM_fire_standing_draw_one_handed_weapon_fast", "ANIM_fire_standing_draw_one_handed_weapon_slow", @@ -352,398 +592,398 @@ char *ITEM_IDS_ToString[] = { "ITEM_IDS_MAX"}; char *PROPDEF_TYPE_ToString[] = { - "PROPDEF_NOTHING", - "PROPDEF_DOOR", - "PROPDEF_DOOR_SCALE", - "PROPDEF_PROP", - "PROPDEF_KEY", - "PROPDEF_ALARM", - "PROPDEF_CCTV", - "PROPDEF_MAGAZINE", - "PROPDEF_COLLECTABLE", - "PROPDEF_GUARD", - "PROPDEF_MONITOR", - "PROPDEF_MULTI_MONITOR", - "PROPDEF_RACK", - "PROPDEF_AUTOGUN", - "PROPDEF_LINK", - "PROPDEF_UNK15", - "PROPDEF_UNK16", - "PROPDEF_HAT", - "PROPDEF_GUARD_ATTRIBUTE", - "PROPDEF_SWITCH", - "PROPDEF_AMMO", - "PROPDEF_ARMOUR", - "PROPDEF_TAG", - "PROPDEF_OBJECTIVE_START", - "PROPDEF_OBJECTIVE_END", - "PROPDEF_OBJECTIVE_DESTROY_OBJECT", - "PROPDEF_OBJECTIVE_COMPLETE_CONDITION", - "PROPDEF_OBJECTIVE_FAIL_CONDITION", - "PROPDEF_OBJECTIVE_COLLECT_OBJECT", - "PROPDEF_OBJECTIVE_DEPOSIT_OBJECT", - "PROPDEF_OBJECTIVE_PHOTOGRAPH", - "PROPDEF_OBJECTIVE_NULL", - "PROPDEF_OBJECTIVE_ENTER_ROOM", - "PROPDEF_OBJECTIVE_DEPOSIT_OBJECT_IN_ROOM", - "PROPDEF_OBJECTIVE_COPY_ITEM", - "PROPDEF_WATCH_MENU_OBJECTIVE_TEXT", - "PROPDEF_GAS_RELEASING", - "PROPDEF_RENAME", - "PROPDEF_LOCK_DOOR", - "PROPDEF_VEHICHLE", - "PROPDEF_AIRCRAFT", - "PROPDEF_UNK41", - "PROPDEF_GLASS", - "PROPDEF_SAFE", - "PROPDEF_SAFE_ITEM", - "PROPDEF_TANK", - "PROPDEF_CAMERAPOS", // canonical name - "PROPDEF_TINTED_GLASS", - "PROPDEF_END", + "PROPDEF_NOTHING", + "PROPDEF_DOOR", + "PROPDEF_DOOR_SCALE", + "PROPDEF_PROP", + "PROPDEF_KEY", + "PROPDEF_ALARM", + "PROPDEF_CCTV", + "PROPDEF_MAGAZINE", + "PROPDEF_COLLECTABLE", + "PROPDEF_GUARD", + "PROPDEF_MONITOR", + "PROPDEF_MULTI_MONITOR", + "PROPDEF_RACK", + "PROPDEF_AUTOGUN", + "PROPDEF_LINK", + "PROPDEF_DEBRIS", + "PROPDEF_UNK16", + "PROPDEF_HAT", + "PROPDEF_GUARD_ATTRIBUTE", + "PROPDEF_SWITCH", + "PROPDEF_AMMO", + "PROPDEF_ARMOUR", + "PROPDEF_TAG", + "PROPDEF_OBJECTIVE_START", + "PROPDEF_OBJECTIVE_END", + "PROPDEF_OBJECTIVE_DESTROY_OBJECT", + "PROPDEF_OBJECTIVE_COMPLETE_CONDITION", + "PROPDEF_OBJECTIVE_FAIL_CONDITION", + "PROPDEF_OBJECTIVE_COLLECT_OBJECT", + "PROPDEF_OBJECTIVE_DEPOSIT_OBJECT", + "PROPDEF_OBJECTIVE_PHOTOGRAPH", + "PROPDEF_OBJECTIVE_NULL", + "PROPDEF_OBJECTIVE_ENTER_ROOM", + "PROPDEF_OBJECTIVE_DEPOSIT_OBJECT_IN_ROOM", + "PROPDEF_OBJECTIVE_COPY_ITEM", + "PROPDEF_WATCH_MENU_OBJECTIVE_TEXT", + "PROPDEF_GAS_RELEASING", + "PROPDEF_RENAME", + "PROPDEF_LOCK_DOOR", + "PROPDEF_VEHICHLE", + "PROPDEF_AIRCRAFT", + "PROPDEF_UNK41", + "PROPDEF_GLASS", + "PROPDEF_SAFE", + "PROPDEF_SAFE_ITEM", + "PROPDEF_TANK", + "PROPDEF_CAMERAPOS", // canonical name + "PROPDEF_TINTED_GLASS", + "PROPDEF_END", }; char *PROP_ToString[] = { - "PROP_ALARM1", /* Beta Alarm / Default Multi Weapon */ - "PROP_ALARM2", /* Alarm */ - "PROP_EXPLOSIONBIT", /* White Pyramid (Explosion Bit) */ - "PROP_AMMO_CRATE1", /* Ammo Crate (Brown w/ Edge Brace", 6x240 Black) */ - "PROP_AMMO_CRATE2", /* Ammo Crate (Brown w/ Center Brace", 12x8 Black) */ - "PROP_AMMO_CRATE3", /* Ammo Crate (Green w/ Center Brace", 12x8 Brown) */ - "PROP_AMMO_CRATE4", /* Ammo Crate (Green w/ Edge Brace", 6x8 White) */ - "PROP_AMMO_CRATE5", /* Ammo Crate (Green w/ Double Brace", 24x60 Black) */ - "PROP_BIN1", /* Rusted Trash Bin */ - "PROP_BLOTTER1", /* Desk Blotter */ - "PROP_BOOK1", /* Red Book */ - "PROP_BOOKSHELF1", /* Bookshelf */ - "PROP_BRIDGE_CONSOLE1A", /* Bridge Console w/ Monitor", Navigation + Keyboard 1A */ - "PROP_BRIDGE_CONSOLE1B", /* Bridge Console w/ Navigation 1B */ - "PROP_BRIDGE_CONSOLE2A", /* Bridge Console w/ Navigation", Monitor + Keyboard 2A */ - "PROP_BRIDGE_CONSOLE2B", /* Bridge Console w/ Various Controls 2B */ - "PROP_BRIDGE_CONSOLE3A", /* Bridge Console w/ Monitor", Navigation + Keyboard 3A */ - "PROP_BRIDGE_CONSOLE3B", /* Bridge Console w/ Monitor", Keyboard + Navigation 3B */ - "PROP_CARD_BOX1", /* Cardboard Box", Kapto|Enb */ - "PROP_CARD_BOX2", /* Cardboard Box", Red Arrow", Bahko */ - "PROP_CARD_BOX3", /* Cardboard Box", Scrawled Text", Bahah */ - "PROP_CARD_BOX4_LG", /* Cardboard Box", Three Seams */ - "PROP_CARD_BOX5_LG", /* Cardboard Box", Two Seams", Bahah */ - "PROP_CARD_BOX6_LG", /* Cardboard Box", Bahko */ - "PROP_CCTV", /* Surveillance Camera */ - "PROP_CONSOLE1", /* Double Screen Consoles w/ Keyboards */ - "PROP_CONSOLE2", /* Double Screen Consoles w/ Left Keyboard */ - "PROP_CONSOLE3", /* Double Screen Consoles w/ Right Keyboard */ - "PROP_CONSOLE_SEVA", /* Console w/ Keyboard */ - "PROP_CONSOLE_SEVB", /* Console w/ Monitor + Keyboard */ - "PROP_CONSOLE_SEVC", /* Console w/ Switches */ - "PROP_CONSOLE_SEVD", /* Console w/ Five Gauges */ - "PROP_CONSOLE_SEV2A", /* Console w/ Four Faders */ - "PROP_CONSOLE_SEV2B", /* Console w/ Monitor", Keyboard + Switches */ - "PROP_CONSOLE_SEV2C", /* Console w/ Three Gauges */ - "PROP_CONSOLE_SEV2D", /* Console w/ Pressure Gauge */ - "PROP_CONSOLE_SEV_GEA", /* Console w/ GoldenEye Key Slot */ - "PROP_CONSOLE_SEV_GEB", /* Console w/ Faders + Pressure Gauge */ - "PROP_DESK1", /* Desk w/ Kickplate */ - "PROP_DESK2", /* Desk */ - "PROP_DESK_LAMP2", /* Desk Lamp */ - "PROP_DISC_READER", /* External Hard Drive */ - "PROP_DISK_DRIVE1", /* Floppy Disc Drive */ - "PROP_FILING_CABINET1", /* Filing Cabinet */ - "PROP_JERRY_CAN1", /* Jerrycan (Fuel Container) */ - "PROP_KEYBOARD1", /* Computer Keyboard */ - "PROP_KIT_UNITS1", /* Kitchen Cabinets */ - "PROP_LETTER_TRAY1", /* Letter Tray */ - "PROP_MAINFRAME1", /* Mainframe", Basic */ - "PROP_MAINFRAME2", /* Mainframe", Advanced */ - "PROP_METAL_CHAIR1", /* Chair (Metal) */ - "PROP_METAL_CRATE1", /* Metal Crate", 6 Top Corner */ - "PROP_METAL_CRATE2", /* Metal Crate", 6 Bottom Corner */ - "PROP_METAL_CRATE3", /* Metal Crate", Toxic Materials */ - "PROP_METAL_CRATE4", /* Metal Crate", Double Stripe - Class D1 Hazard */ - "PROP_MISSILE_RACK", /* Naval Harpoon Missile in Containment Rack */ - "PROP_MISSILE_RACK2", /* Naval Harpoon Missiles in Containment Racks x4 */ - "PROP_OIL_DRUM1", /* Oil Drum", Single Stripe", Ribbed */ - "PROP_OIL_DRUM2", /* Oil Drum", Single Stripe", Ribbed - Class D1 Hazard */ - "PROP_OIL_DRUM3", /* Oil Drum", Single Stripe", Ribbed - Toxic Materials */ - "PROP_OIL_DRUM5", /* Oil Drum", Double Stripe - Toxic Materials */ - "PROP_OIL_DRUM6", /* Oil Drum - Toxic Materials */ - "PROP_OIL_DRUM7", /* Oil Drum", Double Dashes - Class D1 Hazard */ - "PROP_PADLOCK", /* Padlock */ - "PROP_PHONE1", /* Telephone */ - "PROP_RADIO_UNIT1", /* Radio Tuner w/ 1 Knob + 2 Gauges */ - "PROP_RADIO_UNIT2", /* Radio Tuner w/ 1 Knob + 5 Gauges */ - "PROP_RADIO_UNIT3", /* Radio Tuner w/ 3 Knobs + 5 Gauges */ - "PROP_RADIO_UNIT4", /* Radio Tuner w/ 3 Knobs + 2 Gauges */ - "PROP_SAT1_REFLECT", /* GoldenEye Satellite */ - "PROP_SATDISH", /* Satellite Dish (Arkangelsk) */ - "PROP_SATBOX", /* Uplink Box */ - "PROP_STOOL1", /* Wooden Stool */ - "PROP_SWIVEL_CHAIR1", /* Swivel Chair */ - "PROP_TORPEDO_RACK", /* Naval Torpedo Rack x3 */ - "PROP_TV1", /* Television Monitor */ - "PROP_TV_HOLDER", /* Hanging Monitor Rack */ - "PROP_TVSCREEN", /* Wall Monitor Screen */ - "PROP_TV4SCREEN", /* Wall Monitor Screens", 4-in-1 */ - "PROP_WOOD_LG_CRATE1", /* Wooden Crate w/ #4 Label", Bahah */ - "PROP_WOOD_LG_CRATE2", /* Wooden Crate", Darker Shading", Kapto|Enb */ - "PROP_WOOD_MD_CRATE3", /* Wooden Crates x8", Bahko */ - "PROP_WOOD_SM_CRATE4", /* Wooden Crate w/ #2 Label", Bahko */ - "PROP_WOOD_SM_CRATE5", /* Wooden Crate w/ #4 Label", Darker Shading", Bahah */ - "PROP_WOOD_SM_CRATE6", /* Wooden Crate w/ UP Arrow", Kapto|Enb */ - "PROP_WOODEN_TABLE1", /* Wooden Table */ - "PROP_SWIPE_CARD2", /* Keycard */ - "PROP_BORG_CRATE", /* Blue and Gold Printed Circuit Cube (Borg Crate) */ - "PROP_BOXES4X4", /* Metal Crate Stack", 4x4 */ - "PROP_BOXES3X4", /* Metal Crate Stack", 3x4 */ - "PROP_BOXES2X4", /* Metal Crate Stack", 2x4 */ - "PROP_SEC_PANEL", /* Security Card Panel */ - "PROP_ICBM_NOSE", /* Silo Missile (ICBM)", Nose Cone Only */ - "PROP_ICBM", /* Silo Missile (ICBM) */ - "PROP_TUNING_CONSOLE1", /* Dual Consoles on Castors */ - "PROP_DESK_ARECIBO1", /* Computer Work Desk */ - "PROP_LOCKER3", /* Lockers", Single Venting */ - "PROP_LOCKER4", /* Lockers", Double Venting */ - "PROP_ROOFGUN", /* Ceiling Mounted Drone Gun */ - "PROP_DEST_ENGINE", /* Frigate Engine */ - "PROP_DEST_EXOCET", /* Naval MK 29 Missile Launcher (Exocet) */ - "PROP_DEST_GUN", /* Naval 100 mm Gun Turret (TR 100) */ - "PROP_DEST_HARPOON", /* Naval MK 141 Launch Canisters (Harpoon) */ - "PROP_DEST_SEAWOLF", /* Naval MK 26 Dual Missile Launcher (Seawolf) */ - "PROP_WINDOW", /* Window Glass */ - "PROP_WINDOW_LIB_LG1", /* Window Glass", Lattice Frame", 4x10 (single-sided) */ - "PROP_WINDOW_LIB_SM1", /* Window Glass", Lattice Frame", 4x3 (double-sided) */ - "PROP_WINDOW_COR11", /* Window Glass", Lattice Frame", 4x4 (single-sided) */ - "PROP_JUNGLE3_TREE", /* Jungle Large Tree */ - "PROP_PALM", /* Jungle Palm Tree */ - "PROP_PALMTREE", /* Jungle Palm Tree", Resprouting After Loss of Fronds */ - "PROP_PLANT2B", /* Jungle Plant", Low Shrub */ - "PROP_LABBENCH", /* Laboratory Table w/ Sink Drains */ - "PROP_GASBARREL", /* White Bin */ - "PROP_GASBARRELS", /* White Bins x4 */ - "PROP_BODYARMOUR", /* Body Armor */ - "PROP_BODYARMOURVEST", /* Body Armor (Vest) */ - "PROP_GASTANK", /* Bottling Tank */ - "PROP_GLASSWARE1", /* Glass Cup */ - "PROP_HATCHBOLT", /* Metallic Securing Strip (Hatch Bolt) */ - "PROP_BRAKEUNIT", /* Train Brake Controller */ - "PROP_AK47MAG", /* Gun Magazine (KF7 Soviet) */ - "PROP_M16MAG", /* Gun Magazine (AR33 Assault Rifle) */ - "PROP_MP5KMAG", /* Gun Magazine (D5K Deutsche) */ - "PROP_SKORPIONMAG", /* Gun Magazine (Klobb) */ - "PROP_SPECTREMAG", /* Gun Magazine (Phantom) */ - "PROP_UZIMAG", /* Gun Magazine (ZMG (9mm)) */ - "PROP_SILENCER", /* Silencer */ - "PROP_CHREXTINGUISHER", /* Fire Extinguisher */ - "PROP_BOXCARTRIDGES", /* Box of Shells (Shotgun Cartridges) */ - "PROP_FNP90MAG", /* Gun Magazine (RC-P90) */ - "PROP_GOLDENSHELLS", /* Box of Shells (Golden Gun Bullets) */ - "PROP_MAGNUMSHELLS", /* Box of Shells (Magnum Rounds) */ - "PROP_WPPKMAG", /* Gun Magazine (PP7) */ - "PROP_TT33MAG", /* Gun Magazine (DD44 Dostovei) */ - "PROP_SEV_DOOR", /* Grey Containment Door w/ Caution Stripes and Window */ - "PROP_SEV_DOOR3", /* Grey Electronic Door w/ LEFT Arrow */ - "PROP_SEV_DOOR3_WIND", /* BETA Electronic Door w/ LEFT Arrow and Fake Window */ - "PROP_SEV_DOOR4_WIND", /* Grey Electronic Door w/ LEFT Arrow and Window */ - "PROP_SEV_TRISLIDE", /* Glass Door w/ Stone Frame */ - "PROP_SEV_DOOR_V1", /* Grey Electronic Door w/ UP Arrow */ - "PROP_STEEL_DOOR1", /* Silver Corrugated Door w/ Caution Stripes */ - "PROP_STEEL_DOOR2", /* Rusty Door w/ Handle */ - "PROP_STEEL_DOOR3", /* Double Cross Brace Door */ - "PROP_SILO_LIFT_DOOR", /* Elevator Door */ - "PROP_STEEL_DOOR2B", /* Rusty Door w/o Handle */ - "PROP_DOOR_ROLLER1", /* Blue Bay Door w/ Caution Stripes */ - "PROP_DOOR_ROLLER2", /* Blue Bay Door w/ Venting and Caution Stripes */ - "PROP_DOOR_ROLLER3", /* Blue Bay Door w/ Venting and Caution Stripes */ - "PROP_DOOR_ROLLER4", /* Cargo Bay Door w/ UP Arrow and Transportation Stripes */ - "PROP_DOOR_ST_AREC1", /* Blue Corrugated Door w/ Transportation Stripes */ - "PROP_DOOR_ST_AREC2", /* Blue Reversed Corrugated Door w/ Transportation Stripes */ - "PROP_DOOR_DEST1", /* Grey Frigate Door w/ Indents and Caution Stripes */ + "PROP_ALARM1", /* Beta Alarm / Default Multi Weapon */ + "PROP_ALARM2", /* Alarm */ + "PROP_EXPLOSIONBIT", /* White Pyramid (Explosion Bit) */ + "PROP_AMMO_CRATE1", /* Ammo Crate (Brown w/ Edge Brace", 6x240 Black) */ + "PROP_AMMO_CRATE2", /* Ammo Crate (Brown w/ Center Brace", 12x8 Black) */ + "PROP_AMMO_CRATE3", /* Ammo Crate (Green w/ Center Brace", 12x8 Brown) */ + "PROP_AMMO_CRATE4", /* Ammo Crate (Green w/ Edge Brace", 6x8 White) */ + "PROP_AMMO_CRATE5", /* Ammo Crate (Green w/ Double Brace", 24x60 Black) */ + "PROP_BIN1", /* Rusted Trash Bin */ + "PROP_BLOTTER1", /* Desk Blotter */ + "PROP_BOOK1", /* Red Book */ + "PROP_BOOKSHELF1", /* Bookshelf */ + "PROP_BRIDGE_CONSOLE1A", /* Bridge Console w/ Monitor", Navigation + Keyboard 1A */ + "PROP_BRIDGE_CONSOLE1B", /* Bridge Console w/ Navigation 1B */ + "PROP_BRIDGE_CONSOLE2A", /* Bridge Console w/ Navigation", Monitor + Keyboard 2A */ + "PROP_BRIDGE_CONSOLE2B", /* Bridge Console w/ Various Controls 2B */ + "PROP_BRIDGE_CONSOLE3A", /* Bridge Console w/ Monitor", Navigation + Keyboard 3A */ + "PROP_BRIDGE_CONSOLE3B", /* Bridge Console w/ Monitor", Keyboard + Navigation 3B */ + "PROP_CARD_BOX1", /* Cardboard Box", Kapto|Enb */ + "PROP_CARD_BOX2", /* Cardboard Box", Red Arrow", Bahko */ + "PROP_CARD_BOX3", /* Cardboard Box", Scrawled Text", Bahah */ + "PROP_CARD_BOX4_LG", /* Cardboard Box", Three Seams */ + "PROP_CARD_BOX5_LG", /* Cardboard Box", Two Seams", Bahah */ + "PROP_CARD_BOX6_LG", /* Cardboard Box", Bahko */ + "PROP_CCTV", /* Surveillance Camera */ + "PROP_CONSOLE1", /* Double Screen Consoles w/ Keyboards */ + "PROP_CONSOLE2", /* Double Screen Consoles w/ Left Keyboard */ + "PROP_CONSOLE3", /* Double Screen Consoles w/ Right Keyboard */ + "PROP_CONSOLE_SEVA", /* Console w/ Keyboard */ + "PROP_CONSOLE_SEVB", /* Console w/ Monitor + Keyboard */ + "PROP_CONSOLE_SEVC", /* Console w/ Switches */ + "PROP_CONSOLE_SEVD", /* Console w/ Five Gauges */ + "PROP_CONSOLE_SEV2A", /* Console w/ Four Faders */ + "PROP_CONSOLE_SEV2B", /* Console w/ Monitor", Keyboard + Switches */ + "PROP_CONSOLE_SEV2C", /* Console w/ Three Gauges */ + "PROP_CONSOLE_SEV2D", /* Console w/ Pressure Gauge */ + "PROP_CONSOLE_SEV_GEA", /* Console w/ GoldenEye Key Slot */ + "PROP_CONSOLE_SEV_GEB", /* Console w/ Faders + Pressure Gauge */ + "PROP_DESK1", /* Desk w/ Kickplate */ + "PROP_DESK2", /* Desk */ + "PROP_DESK_LAMP2", /* Desk Lamp */ + "PROP_DISC_READER", /* External Hard Drive */ + "PROP_DISK_DRIVE1", /* Floppy Disc Drive */ + "PROP_FILING_CABINET1", /* Filing Cabinet */ + "PROP_JERRY_CAN1", /* Jerrycan (Fuel Container) */ + "PROP_KEYBOARD1", /* Computer Keyboard */ + "PROP_KIT_UNITS1", /* Kitchen Cabinets */ + "PROP_LETTER_TRAY1", /* Letter Tray */ + "PROP_MAINFRAME1", /* Mainframe", Basic */ + "PROP_MAINFRAME2", /* Mainframe", Advanced */ + "PROP_METAL_CHAIR1", /* Chair (Metal) */ + "PROP_METAL_CRATE1", /* Metal Crate", 6 Top Corner */ + "PROP_METAL_CRATE2", /* Metal Crate", 6 Bottom Corner */ + "PROP_METAL_CRATE3", /* Metal Crate", Toxic Materials */ + "PROP_METAL_CRATE4", /* Metal Crate", Double Stripe - Class D1 Hazard */ + "PROP_MISSILE_RACK", /* Naval Harpoon Missile in Containment Rack */ + "PROP_MISSILE_RACK2", /* Naval Harpoon Missiles in Containment Racks x4 */ + "PROP_OIL_DRUM1", /* Oil Drum", Single Stripe", Ribbed */ + "PROP_OIL_DRUM2", /* Oil Drum", Single Stripe", Ribbed - Class D1 Hazard */ + "PROP_OIL_DRUM3", /* Oil Drum", Single Stripe", Ribbed - Toxic Materials */ + "PROP_OIL_DRUM5", /* Oil Drum", Double Stripe - Toxic Materials */ + "PROP_OIL_DRUM6", /* Oil Drum - Toxic Materials */ + "PROP_OIL_DRUM7", /* Oil Drum", Double Dashes - Class D1 Hazard */ + "PROP_PADLOCK", /* Padlock */ + "PROP_PHONE1", /* Telephone */ + "PROP_RADIO_UNIT1", /* Radio Tuner w/ 1 Knob + 2 Gauges */ + "PROP_RADIO_UNIT2", /* Radio Tuner w/ 1 Knob + 5 Gauges */ + "PROP_RADIO_UNIT3", /* Radio Tuner w/ 3 Knobs + 5 Gauges */ + "PROP_RADIO_UNIT4", /* Radio Tuner w/ 3 Knobs + 2 Gauges */ + "PROP_SAT1_REFLECT", /* GoldenEye Satellite */ + "PROP_SATDISH", /* Satellite Dish (Arkangelsk) */ + "PROP_SATBOX", /* Uplink Box */ + "PROP_STOOL1", /* Wooden Stool */ + "PROP_SWIVEL_CHAIR1", /* Swivel Chair */ + "PROP_TORPEDO_RACK", /* Naval Torpedo Rack x3 */ + "PROP_TV1", /* Television Monitor */ + "PROP_TV_HOLDER", /* Hanging Monitor Rack */ + "PROP_TVSCREEN", /* Wall Monitor Screen */ + "PROP_TV4SCREEN", /* Wall Monitor Screens", 4-in-1 */ + "PROP_WOOD_LG_CRATE1", /* Wooden Crate w/ #4 Label", Bahah */ + "PROP_WOOD_LG_CRATE2", /* Wooden Crate", Darker Shading", Kapto|Enb */ + "PROP_WOOD_MD_CRATE3", /* Wooden Crates x8", Bahko */ + "PROP_WOOD_SM_CRATE4", /* Wooden Crate w/ #2 Label", Bahko */ + "PROP_WOOD_SM_CRATE5", /* Wooden Crate w/ #4 Label", Darker Shading", Bahah */ + "PROP_WOOD_SM_CRATE6", /* Wooden Crate w/ UP Arrow", Kapto|Enb */ + "PROP_WOODEN_TABLE1", /* Wooden Table */ + "PROP_SWIPE_CARD2", /* Keycard */ + "PROP_BORG_CRATE", /* Blue and Gold Printed Circuit Cube (Borg Crate) */ + "PROP_BOXES4X4", /* Metal Crate Stack", 4x4 */ + "PROP_BOXES3X4", /* Metal Crate Stack", 3x4 */ + "PROP_BOXES2X4", /* Metal Crate Stack", 2x4 */ + "PROP_SEC_PANEL", /* Security Card Panel */ + "PROP_ICBM_NOSE", /* Silo Missile (ICBM)", Nose Cone Only */ + "PROP_ICBM", /* Silo Missile (ICBM) */ + "PROP_TUNING_CONSOLE1", /* Dual Consoles on Castors */ + "PROP_DESK_ARECIBO1", /* Computer Work Desk */ + "PROP_LOCKER3", /* Lockers", Single Venting */ + "PROP_LOCKER4", /* Lockers", Double Venting */ + "PROP_ROOFGUN", /* Ceiling Mounted Drone Gun */ + "PROP_DEST_ENGINE", /* Frigate Engine */ + "PROP_DEST_EXOCET", /* Naval MK 29 Missile Launcher (Exocet) */ + "PROP_DEST_GUN", /* Naval 100 mm Gun Turret (TR 100) */ + "PROP_DEST_HARPOON", /* Naval MK 141 Launch Canisters (Harpoon) */ + "PROP_DEST_SEAWOLF", /* Naval MK 26 Dual Missile Launcher (Seawolf) */ + "PROP_WINDOW", /* Window Glass */ + "PROP_WINDOW_LIB_LG1", /* Window Glass", Lattice Frame", 4x10 (single-sided) */ + "PROP_WINDOW_LIB_SM1", /* Window Glass", Lattice Frame", 4x3 (double-sided) */ + "PROP_WINDOW_COR11", /* Window Glass", Lattice Frame", 4x4 (single-sided) */ + "PROP_JUNGLE3_TREE", /* Jungle Large Tree */ + "PROP_PALM", /* Jungle Palm Tree */ + "PROP_PALMTREE", /* Jungle Palm Tree", Resprouting After Loss of Fronds */ + "PROP_PLANT2B", /* Jungle Plant", Low Shrub */ + "PROP_LABBENCH", /* Laboratory Table w/ Sink Drains */ + "PROP_GASBARREL", /* White Bin */ + "PROP_GASBARRELS", /* White Bins x4 */ + "PROP_BODYARMOUR", /* Body Armor */ + "PROP_BODYARMOURVEST", /* Body Armor (Vest) */ + "PROP_GASTANK", /* Bottling Tank */ + "PROP_GLASSWARE1", /* Glass Cup */ + "PROP_HATCHBOLT", /* Metallic Securing Strip (Hatch Bolt) */ + "PROP_BRAKEUNIT", /* Train Brake Controller */ + "PROP_AK47MAG", /* Gun Magazine (KF7 Soviet) */ + "PROP_M16MAG", /* Gun Magazine (AR33 Assault Rifle) */ + "PROP_MP5KMAG", /* Gun Magazine (D5K Deutsche) */ + "PROP_SKORPIONMAG", /* Gun Magazine (Klobb) */ + "PROP_SPECTREMAG", /* Gun Magazine (Phantom) */ + "PROP_UZIMAG", /* Gun Magazine (ZMG (9mm)) */ + "PROP_SILENCER", /* Silencer */ + "PROP_CHREXTINGUISHER", /* Fire Extinguisher */ + "PROP_BOXCARTRIDGES", /* Box of Shells (Shotgun Cartridges) */ + "PROP_FNP90MAG", /* Gun Magazine (RC-P90) */ + "PROP_GOLDENSHELLS", /* Box of Shells (Golden Gun Bullets) */ + "PROP_MAGNUMSHELLS", /* Box of Shells (Magnum Rounds) */ + "PROP_WPPKMAG", /* Gun Magazine (PP7) */ + "PROP_TT33MAG", /* Gun Magazine (DD44 Dostovei) */ + "PROP_SEV_DOOR", /* Grey Containment Door w/ Caution Stripes and Window */ + "PROP_SEV_DOOR3", /* Grey Electronic Door w/ LEFT Arrow */ + "PROP_SEV_DOOR3_WIND", /* BETA Electronic Door w/ LEFT Arrow and Fake Window */ + "PROP_SEV_DOOR4_WIND", /* Grey Electronic Door w/ LEFT Arrow and Window */ + "PROP_SEV_TRISLIDE", /* Glass Door w/ Stone Frame */ + "PROP_SEV_DOOR_V1", /* Grey Electronic Door w/ UP Arrow */ + "PROP_STEEL_DOOR1", /* Silver Corrugated Door w/ Caution Stripes */ + "PROP_STEEL_DOOR2", /* Rusty Door w/ Handle */ + "PROP_STEEL_DOOR3", /* Double Cross Brace Door */ + "PROP_SILO_LIFT_DOOR", /* Elevator Door */ + "PROP_STEEL_DOOR2B", /* Rusty Door w/o Handle */ + "PROP_DOOR_ROLLER1", /* Blue Bay Door w/ Caution Stripes */ + "PROP_DOOR_ROLLER2", /* Blue Bay Door w/ Venting and Caution Stripes */ + "PROP_DOOR_ROLLER3", /* Blue Bay Door w/ Venting and Caution Stripes */ + "PROP_DOOR_ROLLER4", /* Cargo Bay Door w/ UP Arrow and Transportation Stripes */ + "PROP_DOOR_ST_AREC1", /* Blue Corrugated Door w/ Transportation Stripes */ + "PROP_DOOR_ST_AREC2", /* Blue Reversed Corrugated Door w/ Transportation Stripes */ + "PROP_DOOR_DEST1", /* Grey Frigate Door w/ Indents and Caution Stripes */ "PROP_DOOR_DEST2", /* Grey Frigate Door w/ Indents", Caution Stripes and KEEP CLEAR Label */ - "PROP_GAS_PLANT_SW_DO1", /* Grey Swinging Door w/ Blue Stripe */ - "PROP_GAS_PLANT_SW2_DO1", /* Grey Swinging Door", Darker */ - "PROP_GAS_PLANT_SW3_DO1", /* Grey Swinging Door", Lighter */ - "PROP_GAS_PLANT_SW4_DO1", /* Light Wooden Door (Looks Like Sand) */ - "PROP_GAS_PLANT_MET1_DO1", /* Brown Electronic Door */ - "PROP_GAS_PLANT_WC_CUB1", /* Bathroom Stall Door */ - "PROP_GASPLANT_CLEAR_DOOR", /* Laboratory Glass Door */ - "PROP_TRAIN_DOOR", /* Dark Wooden Door */ - "PROP_TRAIN_DOOR2", /* Dark Wooden Door w/ Window */ - "PROP_TRAIN_DOOR3", /* Dark Wooden Door w/ Window + Shutter */ - "PROP_DOOR_EYELID", /* Eyelid Door */ - "PROP_DOOR_IRIS", /* Iris Door */ - "PROP_SEVDOORWOOD", /* Cabin Door */ - "PROP_SEVDOORWIND", /* Weathered Swinging Door w/ Window */ - "PROP_SEVDOORNOWIND", /* Weathered Swinging Door */ - "PROP_SEVDOORMETSLIDE", /* Brown Corrugated Electronic Door */ - "PROP_CRYPTDOOR1A", /* Stone Door w/ Prints (Set A) */ - "PROP_CRYPTDOOR1B", /* Sand Door w/ Damage (Set A) */ - "PROP_CRYPTDOOR2A", /* Stone Door w/ Prints", Darker (Set B) */ - "PROP_CRYPTDOOR2B", /* Sand Door w/ Damage", Darker (Set B) */ - "PROP_CRYPTDOOR3", /* Egyptian Moving Wall */ - "PROP_CRYPTDOOR4", /* Brown Sand Door (Temple) */ - "PROP_VERTDOOR", /* Blast Door (Control) */ - "PROP_HATCHDOOR", /* Train Floor Hatch */ - "PROP_DAMGATEDOOR", /* Security Gate (Dam) */ - "PROP_DAMTUNDOOR", /* Tunnel Flood Door (Dam) */ - "PROP_DAMCHAINDOOR", /* Mesh Gate */ - "PROP_SILOTOPDOOR", /* Launch Tube Ceiling Shutter (Silo) */ - "PROP_DOORPRISON1", /* Cell Door */ - "PROP_DOORSTATGATE", /* Park Gate */ - "PROP_CHRKALASH", /* KF7 Soviet */ - "PROP_CHRGRENADELAUNCH", /* Grenade Launcher */ - "PROP_CHRKNIFE", /* Hunting Knife */ - "PROP_CHRLASER", /* Moonraker Laser */ - "PROP_CHRM16", /* AR33 Assault Rifle */ - "PROP_CHRMP5K", /* D5K Deutsche */ - "PROP_CHRRUGER", /* Cougar Magnum */ - "PROP_CHRWPPK", /* PP7 Special Issue */ - "PROP_CHRSHOTGUN", /* Shotgun */ - "PROP_CHRSKORPION", /* Klobb */ - "PROP_CHRSPECTRE", /* Phantom */ - "PROP_CHRUZI", /* ZMG (9mm) */ - "PROP_CHRGRENADE", /* Hand Grenade */ - "PROP_CHRFNP90", /* RC-P90 */ - "PROP_CHRBRIEFCASE", /* Briefcase */ - "PROP_CHRREMOTEMINE", /* Remote Mine */ - "PROP_CHRPROXIMITYMINE", /* Proximity Mine */ - "PROP_CHRTIMEDMINE", /* Timed Mine */ - "PROP_CHRROCKET", /* Rocket */ - "PROP_CHRGRENADEROUND", /* Grenade Round */ - "PROP_CHRWPPKSIL", /* PP7 (Silenced) */ - "PROP_CHRTT33", /* DD44 Dostovei */ - "PROP_CHRMP5KSIL", /* D5K (Silenced) */ - "PROP_CHRAUTOSHOT", /* Automatic Shotgun */ - "PROP_CHRGOLDEN", /* Golden Gun */ - "PROP_CHRTHROWKNIFE", /* Throwing Knife */ - "PROP_CHRSNIPERRIFLE", /* Sniper Rifle */ - "PROP_CHRROCKETLAUNCH", /* Rocket Launcher */ - "PROP_HATFURRY", /* Fur Hat", Blue */ - "PROP_HATFURRYBROWN", /* Fur Hat", Brown */ - "PROP_HATFURRYBLACK", /* Fur Hat", Black */ - "PROP_HATTBIRD", /* Side Cap", Light Green */ - "PROP_HATTBIRDBROWN", /* Side Cap", Dark Green */ - "PROP_HATHELMET", /* Combat Helmet", Green */ - "PROP_HATHELMETGREY", /* Combat Helmet", Grey */ - "PROP_HATMOON", /* Elite Headgear */ - "PROP_HATBERET", /* Special Forces Beret", Black */ - "PROP_HATBERETBLUE", /* Special Forces Beret", Navy */ - "PROP_HATBERETRED", /* Special Forces Beret", Burgundy */ - "PROP_HATPEAKED", /* Officer's Peaked Visor Cap */ - "PROP_CHRWRISTDART", /* Pchrwristdart (BETA) */ - "PROP_CHREXPLOSIVEPEN", /* Pchrexplosivepen (BETA) */ - "PROP_CHRBOMBCASE", /* Bomb Case (Briefcase Laying Down) */ - "PROP_CHRFLAREPISTOL", /* Pchrflarepistol (BETA Pickup) */ - "PROP_CHRPITONGUN", /* Pchrpitongun (BETA Pickup) */ - "PROP_CHRFINGERGUN", /* Pchrfingergun (BETA Pickup) */ - "PROP_CHRSILVERWPPK", /* Pchrsilverwppk (BETA Pickup) */ - "PROP_CHRGOLDWPPK", /* Pchrgoldwppk (BETA Pickup) */ - "PROP_CHRDYNAMITE", /* Pchrdynamite (BETA Pickup) */ - "PROP_CHRBUNGEE", /* Pchrbungee (BETA Pickup) */ - "PROP_CHRDOORDECODER", /* Door Decoder */ - "PROP_CHRBOMBDEFUSER", /* Bomb Defuser */ - "PROP_CHRBUGDETECTOR", /* Pchrbugdetector (BETA Pickup) */ - "PROP_CHRSAFECRACKERCASE", /* Safe Cracker Case (Briefcase Laying Down) */ - "PROP_CHRCAMERA", /* Photo Camera (007) */ - "PROP_CHRLOCKEXPLODER", /* Pchrlockexploder (BETA Pickup) */ - "PROP_CHRDOOREXPLODER", /* Pchrdoorexploder (BETA Pickup) */ - "PROP_CHRKEYANALYSERCASE", /* Key Analyzer Case (Briefcase Laying Down) */ - "PROP_CHRWEAPONCASE", /* Weapon Case (Briefcase Standing Up) */ - "PROP_CHRKEYYALE", /* Yale Key */ - "PROP_CHRKEYBOLT", /* Bolt Key */ - "PROP_CHRBUG", /* Covert Modem / Tracker Bug */ - "PROP_CHRMICROCAMERA", /* Micro Camera */ - "PROP_FLOPPY", /* Floppy Disc */ - "PROP_CHRGOLDENEYEKEY", /* GoldenEye Key */ - "PROP_CHRPOLARIZEDGLASSES", /* Polarized Glasses */ - "PROP_CHRCREDITCARD", /* Pchrcreditcard (BETA Pickup) */ - "PROP_CHRDARKGLASSES", /* Pchrdarkglasses (BETA Pickup) */ - "PROP_CHRGASKEYRING", /* Gas Keyring */ - "PROP_CHRDATATHIEF", /* Datathief */ - "PROP_SAFE", /* Safe Body */ - "PROP_BOMB", /* Pbomb (BETA Pickup) */ - "PROP_CHRPLANS", /* Plans (Briefing Folder) */ - "PROP_CHRSPYFILE", /* Pchrspyfile (BETA Pickup) */ - "PROP_CHRBLUEPRINTS", /* Pirate Blueprints */ - "PROP_CHRCIRCUITBOARD", /* Circuitboard */ - "PROP_CHRMAP", /* Bunker Expansion Plans */ - "PROP_CHRSPOOLTAPE", /* Pchrspooltape (BETA Pickup) */ - "PROP_CHRAUDIOTAPE", /* Audiotape */ - "PROP_CHRMICROFILM", /* Pchrmicrofilm (BETA Pickup) */ - "PROP_CHRMICROCODE", /* Pchrmicrocode (BETA Pickup) */ - "PROP_CHRLECTRE", /* Pchrlectre (BETA Pickup) */ - "PROP_CHRMONEY", /* Pchrmoney (BETA Pickup) */ - "PROP_CHRGOLDBAR", /* Pchrgoldbar (BETA Pickup) */ - "PROP_CHRHEROIN", /* Pchrheroin (BETA Pickup) */ - "PROP_CHRCLIPBOARD", /* Clipboard */ - "PROP_CHRDOSSIERRED", /* Red Dossier */ - "PROP_CHRSTAFFLIST", /* Staff List */ - "PROP_CHRDATTAPE", /* DAT */ - "PROP_CHRPLASTIQUE", /* Plastique */ - "PROP_CHRBLACKBOX", /* Black Box (Orange Flight Recorder) */ - "PROP_CHRVIDEOTAPE", /* CCTV Tape (GoldenEye VHS) */ - "PROP_NINTENDOLOGO", /* Nintendo Logo */ - "PROP_GOLDENEYELOGO", /* GoldenEye Logo */ - "PROP_WALLETBOND", /* Classified Folder w/ Royal Crest (Folder Menus) */ - "PROP_MILTRUCK", /* Supply Truck */ - "PROP_JEEP", /* Military Jeep */ - "PROP_ARTIC", /* Red Prime Mover */ - "PROP_HELICOPTER", /* Transport Helicopter w/ Natalya */ - "PROP_TIGER", /* Pirate Euro Chopper */ - "PROP_MILCOPTER", /* Hound Helicopter */ - "PROP_HIND", /* Soviet Camouflage Chopper */ - "PROP_ARTICTRAILER", /* Black Trailer */ - "PROP_MOTORBIKE", /* Motorbike */ - "PROP_TANK", /* Tank */ - "PROP_APC", /* Armored Personnel Carrier */ - "PROP_SPEEDBOAT", /* Speedboat */ - "PROP_PLANE", /* Aeroplane */ - "PROP_GUN_RUNWAY1", /* Heavy Gun Emplacement */ - "PROP_SAFEDOOR", /* Safe Door */ - "PROP_KEY_HOLDER", /* Key Rack */ - "PROP_HATCHSEVX", /* Grating (Ventshaft Hatch) */ - "PROP_SEVDISH", /* Satellite Dish (Severnaya) */ - "PROP_ARCHSECDOOR1", /* Archives Moving Wall (Dark) */ - "PROP_ARCHSECDOOR2", /* Archives Moving Wall (Light) */ - "PROP_GROUNDGUN", /* Free Standing Drone Gun */ - "PROP_TRAINEXTDOOR", /* Train Exterior Door */ - "PROP_CARBMW", /* White Car #1 (BMW) */ - "PROP_CARESCORT", /* White Car #2 (Escort) */ - "PROP_CARGOLF", /* White Car #3 (Golf) */ - "PROP_CARWEIRD", /* Red Car (Cadillac) */ - "PROP_CARZIL", /* Ourumov's Car (ZIL) */ - "PROP_SHUTTLE_DOOR_L", /* Exhaust Bay Doors", Left Side */ - "PROP_SHUTTLE_DOOR_R", /* Exhaust Bay Doors", Right Side */ - "PROP_DEPOT_GATE_ENTRY", /* Metallic Gate w/ Red Star */ - "PROP_DEPOT_DOOR_STEEL", /* Rusty Door w/ Handle (Lo-Res) */ - "PROP_GLASSWARE2", /* Beaker w/ Blue Topper */ - "PROP_GLASSWARE3", /* Erlenmeyer Flask */ - "PROP_GLASSWARE4", /* Set of Five Beakers */ - "PROP_LANDMINE", /* Land Mine */ - "PROP_PLANT1", /* Jungle Plant", Withered and Dying */ - "PROP_PLANT11", /* Jungle Plant", Turning Colour */ - "PROP_PLANT2", /* Jungle Plant", Healthy and Thick */ - "PROP_PLANT3", /* Jungle Plant", Tall Leaves */ - "PROP_JUNGLE5_TREE", /* Jungle Tree", Moss Covered */ - "PROP_LEGALPAGE", /* GoldenEye Certification Screen */ - "PROP_ST_PETE_ROOM_1I", /* Roads and Buildings #1 (stretch of road) */ - "PROP_ST_PETE_ROOM_2I", /* Roads and Buildings #2 (stretch of road) */ - "PROP_ST_PETE_ROOM_3T", /* Roads and Buildings #3 (intersection) */ - "PROP_ST_PETE_ROOM_5C", /* Roads and Buildings #4 (street corner) */ - "PROP_ST_PETE_ROOM_6C", /* Roads and Buildings #5 (street corner) */ - "PROP_DOOR_ROLLERTRAIN", /* Roller Door */ - "PROP_DOOR_WIN", /* Glass Sliding Door (Aztec) */ - "PROP_DOOR_AZTEC", /* Stone Sliding Door (Aztec) */ - "PROP_SHUTTLE", /* Moonraker Shuttle */ - "PROP_DOOR_AZT_DESK", /* Boardroom Table (Aztec Exhaust Bay) */ - "PROP_DOOR_AZT_DESK_TOP", /* Boardroom Table Extension (Aztec Exhaust Bay) */ - "PROP_DOOR_AZT_CHAIR", /* Boardroom Chair (Aztec Exhaust Bay) */ - "PROP_DOOR_MF", /* Mainframe Door */ - "PROP_FLAG", /* Flag Tag Token */ - "PROP_BARRICADE", /* Road Barricade */ - "PROP_MODEMBOX", /* Covert Modem Connection Screen */ - "PROP_DOORPANEL", /* Sliding Door Activation Switch */ - "PROP_DOORCONSOLE", /* Console w/ Activation Light */ - "PROP_CHRTESTTUBE", /* Glass Test Tube */ - "PROP_BOLLARD", /* Bollard */ + "PROP_GAS_PLANT_SW_DO1", /* Grey Swinging Door w/ Blue Stripe */ + "PROP_GAS_PLANT_SW2_DO1", /* Grey Swinging Door", Darker */ + "PROP_GAS_PLANT_SW3_DO1", /* Grey Swinging Door", Lighter */ + "PROP_GAS_PLANT_SW4_DO1", /* Light Wooden Door (Looks Like Sand) */ + "PROP_GAS_PLANT_MET1_DO1", /* Brown Electronic Door */ + "PROP_GAS_PLANT_WC_CUB1", /* Bathroom Stall Door */ + "PROP_GASPLANT_CLEAR_DOOR", /* Laboratory Glass Door */ + "PROP_TRAIN_DOOR", /* Dark Wooden Door */ + "PROP_TRAIN_DOOR2", /* Dark Wooden Door w/ Window */ + "PROP_TRAIN_DOOR3", /* Dark Wooden Door w/ Window + Shutter */ + "PROP_DOOR_EYELID", /* Eyelid Door */ + "PROP_DOOR_IRIS", /* Iris Door */ + "PROP_SEVDOORWOOD", /* Cabin Door */ + "PROP_SEVDOORWIND", /* Weathered Swinging Door w/ Window */ + "PROP_SEVDOORNOWIND", /* Weathered Swinging Door */ + "PROP_SEVDOORMETSLIDE", /* Brown Corrugated Electronic Door */ + "PROP_CRYPTDOOR1A", /* Stone Door w/ Prints (Set A) */ + "PROP_CRYPTDOOR1B", /* Sand Door w/ Damage (Set A) */ + "PROP_CRYPTDOOR2A", /* Stone Door w/ Prints", Darker (Set B) */ + "PROP_CRYPTDOOR2B", /* Sand Door w/ Damage", Darker (Set B) */ + "PROP_CRYPTDOOR3", /* Egyptian Moving Wall */ + "PROP_CRYPTDOOR4", /* Brown Sand Door (Temple) */ + "PROP_VERTDOOR", /* Blast Door (Control) */ + "PROP_HATCHDOOR", /* Train Floor Hatch */ + "PROP_DAMGATEDOOR", /* Security Gate (Dam) */ + "PROP_DAMTUNDOOR", /* Tunnel Flood Door (Dam) */ + "PROP_DAMCHAINDOOR", /* Mesh Gate */ + "PROP_SILOTOPDOOR", /* Launch Tube Ceiling Shutter (Silo) */ + "PROP_DOORPRISON1", /* Cell Door */ + "PROP_DOORSTATGATE", /* Park Gate */ + "PROP_CHRKALASH", /* KF7 Soviet */ + "PROP_CHRGRENADELAUNCH", /* Grenade Launcher */ + "PROP_CHRKNIFE", /* Hunting Knife */ + "PROP_CHRLASER", /* Moonraker Laser */ + "PROP_CHRM16", /* AR33 Assault Rifle */ + "PROP_CHRMP5K", /* D5K Deutsche */ + "PROP_CHRRUGER", /* Cougar Magnum */ + "PROP_CHRWPPK", /* PP7 Special Issue */ + "PROP_CHRSHOTGUN", /* Shotgun */ + "PROP_CHRSKORPION", /* Klobb */ + "PROP_CHRSPECTRE", /* Phantom */ + "PROP_CHRUZI", /* ZMG (9mm) */ + "PROP_CHRGRENADE", /* Hand Grenade */ + "PROP_CHRFNP90", /* RC-P90 */ + "PROP_CHRBRIEFCASE", /* Briefcase */ + "PROP_CHRREMOTEMINE", /* Remote Mine */ + "PROP_CHRPROXIMITYMINE", /* Proximity Mine */ + "PROP_CHRTIMEDMINE", /* Timed Mine */ + "PROP_CHRROCKET", /* Rocket */ + "PROP_CHRGRENADEROUND", /* Grenade Round */ + "PROP_CHRWPPKSIL", /* PP7 (Silenced) */ + "PROP_CHRTT33", /* DD44 Dostovei */ + "PROP_CHRMP5KSIL", /* D5K (Silenced) */ + "PROP_CHRAUTOSHOT", /* Automatic Shotgun */ + "PROP_CHRGOLDEN", /* Golden Gun */ + "PROP_CHRTHROWKNIFE", /* Throwing Knife */ + "PROP_CHRSNIPERRIFLE", /* Sniper Rifle */ + "PROP_CHRROCKETLAUNCH", /* Rocket Launcher */ + "PROP_HATFURRY", /* Fur Hat", Blue */ + "PROP_HATFURRYBROWN", /* Fur Hat", Brown */ + "PROP_HATFURRYBLACK", /* Fur Hat", Black */ + "PROP_HATTBIRD", /* Side Cap", Light Green */ + "PROP_HATTBIRDBROWN", /* Side Cap", Dark Green */ + "PROP_HATHELMET", /* Combat Helmet", Green */ + "PROP_HATHELMETGREY", /* Combat Helmet", Grey */ + "PROP_HATMOON", /* Elite Headgear */ + "PROP_HATBERET", /* Special Forces Beret", Black */ + "PROP_HATBERETBLUE", /* Special Forces Beret", Navy */ + "PROP_HATBERETRED", /* Special Forces Beret", Burgundy */ + "PROP_HATPEAKED", /* Officer's Peaked Visor Cap */ + "PROP_CHRWRISTDART", /* Pchrwristdart (BETA) */ + "PROP_CHREXPLOSIVEPEN", /* Pchrexplosivepen (BETA) */ + "PROP_CHRBOMBCASE", /* Bomb Case (Briefcase Laying Down) */ + "PROP_CHRFLAREPISTOL", /* Pchrflarepistol (BETA Pickup) */ + "PROP_CHRPITONGUN", /* Pchrpitongun (BETA Pickup) */ + "PROP_CHRFINGERGUN", /* Pchrfingergun (BETA Pickup) */ + "PROP_CHRSILVERWPPK", /* Pchrsilverwppk (BETA Pickup) */ + "PROP_CHRGOLDWPPK", /* Pchrgoldwppk (BETA Pickup) */ + "PROP_CHRDYNAMITE", /* Pchrdynamite (BETA Pickup) */ + "PROP_CHRBUNGEE", /* Pchrbungee (BETA Pickup) */ + "PROP_CHRDOORDECODER", /* Door Decoder */ + "PROP_CHRBOMBDEFUSER", /* Bomb Defuser */ + "PROP_CHRBUGDETECTOR", /* Pchrbugdetector (BETA Pickup) */ + "PROP_CHRSAFECRACKERCASE", /* Safe Cracker Case (Briefcase Laying Down) */ + "PROP_CHRCAMERA", /* Photo Camera (007) */ + "PROP_CHRLOCKEXPLODER", /* Pchrlockexploder (BETA Pickup) */ + "PROP_CHRDOOREXPLODER", /* Pchrdoorexploder (BETA Pickup) */ + "PROP_CHRKEYANALYSERCASE", /* Key Analyzer Case (Briefcase Laying Down) */ + "PROP_CHRWEAPONCASE", /* Weapon Case (Briefcase Standing Up) */ + "PROP_CHRKEYYALE", /* Yale Key */ + "PROP_CHRKEYBOLT", /* Bolt Key */ + "PROP_CHRBUG", /* Covert Modem / Tracker Bug */ + "PROP_CHRMICROCAMERA", /* Micro Camera */ + "PROP_FLOPPY", /* Floppy Disc */ + "PROP_CHRGOLDENEYEKEY", /* GoldenEye Key */ + "PROP_CHRPOLARIZEDGLASSES", /* Polarized Glasses */ + "PROP_CHRCREDITCARD", /* Pchrcreditcard (BETA Pickup) */ + "PROP_CHRDARKGLASSES", /* Pchrdarkglasses (BETA Pickup) */ + "PROP_CHRGASKEYRING", /* Gas Keyring */ + "PROP_CHRDATATHIEF", /* Datathief */ + "PROP_SAFE", /* Safe Body */ + "PROP_BOMB", /* Pbomb (BETA Pickup) */ + "PROP_CHRPLANS", /* Plans (Briefing Folder) */ + "PROP_CHRSPYFILE", /* Pchrspyfile (BETA Pickup) */ + "PROP_CHRBLUEPRINTS", /* Pirate Blueprints */ + "PROP_CHRCIRCUITBOARD", /* Circuitboard */ + "PROP_CHRMAP", /* Bunker Expansion Plans */ + "PROP_CHRSPOOLTAPE", /* Pchrspooltape (BETA Pickup) */ + "PROP_CHRAUDIOTAPE", /* Audiotape */ + "PROP_CHRMICROFILM", /* Pchrmicrofilm (BETA Pickup) */ + "PROP_CHRMICROCODE", /* Pchrmicrocode (BETA Pickup) */ + "PROP_CHRLECTRE", /* Pchrlectre (BETA Pickup) */ + "PROP_CHRMONEY", /* Pchrmoney (BETA Pickup) */ + "PROP_CHRGOLDBAR", /* Pchrgoldbar (BETA Pickup) */ + "PROP_CHRHEROIN", /* Pchrheroin (BETA Pickup) */ + "PROP_CHRCLIPBOARD", /* Clipboard */ + "PROP_CHRDOSSIERRED", /* Red Dossier */ + "PROP_CHRSTAFFLIST", /* Staff List */ + "PROP_CHRDATTAPE", /* DAT */ + "PROP_CHRPLASTIQUE", /* Plastique */ + "PROP_CHRBLACKBOX", /* Black Box (Orange Flight Recorder) */ + "PROP_CHRVIDEOTAPE", /* CCTV Tape (GoldenEye VHS) */ + "PROP_NINTENDOLOGO", /* Nintendo Logo */ + "PROP_GOLDENEYELOGO", /* GoldenEye Logo */ + "PROP_WALLETBOND", /* Classified Folder w/ Royal Crest (Folder Menus) */ + "PROP_MILTRUCK", /* Supply Truck */ + "PROP_JEEP", /* Military Jeep */ + "PROP_ARTIC", /* Red Prime Mover */ + "PROP_HELICOPTER", /* Transport Helicopter w/ Natalya */ + "PROP_TIGER", /* Pirate Euro Chopper */ + "PROP_MILCOPTER", /* Hound Helicopter */ + "PROP_HIND", /* Soviet Camouflage Chopper */ + "PROP_ARTICTRAILER", /* Black Trailer */ + "PROP_MOTORBIKE", /* Motorbike */ + "PROP_TANK", /* Tank */ + "PROP_APC", /* Armored Personnel Carrier */ + "PROP_SPEEDBOAT", /* Speedboat */ + "PROP_PLANE", /* Aeroplane */ + "PROP_GUN_RUNWAY1", /* Heavy Gun Emplacement */ + "PROP_SAFEDOOR", /* Safe Door */ + "PROP_KEY_HOLDER", /* Key Rack */ + "PROP_HATCHSEVX", /* Grating (Ventshaft Hatch) */ + "PROP_SEVDISH", /* Satellite Dish (Severnaya) */ + "PROP_ARCHSECDOOR1", /* Archives Moving Wall (Dark) */ + "PROP_ARCHSECDOOR2", /* Archives Moving Wall (Light) */ + "PROP_GROUNDGUN", /* Free Standing Drone Gun */ + "PROP_TRAINEXTDOOR", /* Train Exterior Door */ + "PROP_CARBMW", /* White Car #1 (BMW) */ + "PROP_CARESCORT", /* White Car #2 (Escort) */ + "PROP_CARGOLF", /* White Car #3 (Golf) */ + "PROP_CARWEIRD", /* Red Car (Cadillac) */ + "PROP_CARZIL", /* Ourumov's Car (ZIL) */ + "PROP_SHUTTLE_DOOR_L", /* Exhaust Bay Doors", Left Side */ + "PROP_SHUTTLE_DOOR_R", /* Exhaust Bay Doors", Right Side */ + "PROP_DEPOT_GATE_ENTRY", /* Metallic Gate w/ Red Star */ + "PROP_DEPOT_DOOR_STEEL", /* Rusty Door w/ Handle (Lo-Res) */ + "PROP_GLASSWARE2", /* Beaker w/ Blue Topper */ + "PROP_GLASSWARE3", /* Erlenmeyer Flask */ + "PROP_GLASSWARE4", /* Set of Five Beakers */ + "PROP_LANDMINE", /* Land Mine */ + "PROP_PLANT1", /* Jungle Plant", Withered and Dying */ + "PROP_PLANT11", /* Jungle Plant", Turning Colour */ + "PROP_PLANT2", /* Jungle Plant", Healthy and Thick */ + "PROP_PLANT3", /* Jungle Plant", Tall Leaves */ + "PROP_JUNGLE5_TREE", /* Jungle Tree", Moss Covered */ + "PROP_LEGALPAGE", /* GoldenEye Certification Screen */ + "PROP_ST_PETE_ROOM_1I", /* Roads and Buildings #1 (stretch of road) */ + "PROP_ST_PETE_ROOM_2I", /* Roads and Buildings #2 (stretch of road) */ + "PROP_ST_PETE_ROOM_3T", /* Roads and Buildings #3 (intersection) */ + "PROP_ST_PETE_ROOM_5C", /* Roads and Buildings #4 (street corner) */ + "PROP_ST_PETE_ROOM_6C", /* Roads and Buildings #5 (street corner) */ + "PROP_DOOR_ROLLERTRAIN", /* Roller Door */ + "PROP_DOOR_WIN", /* Glass Sliding Door (Aztec) */ + "PROP_DOOR_AZTEC", /* Stone Sliding Door (Aztec) */ + "PROP_SHUTTLE", /* Moonraker Shuttle */ + "PROP_DOOR_AZT_DESK", /* Boardroom Table (Aztec Exhaust Bay) */ + "PROP_DOOR_AZT_DESK_TOP", /* Boardroom Table Extension (Aztec Exhaust Bay) */ + "PROP_DOOR_AZT_CHAIR", /* Boardroom Chair (Aztec Exhaust Bay) */ + "PROP_DOOR_MF", /* Mainframe Door */ + "PROP_FLAG", /* Flag Tag Token */ + "PROP_BARRICADE", /* Road Barricade */ + "PROP_MODEMBOX", /* Covert Modem Connection Screen */ + "PROP_DOORPANEL", /* Sliding Door Activation Switch */ + "PROP_DOORCONSOLE", /* Console w/ Activation Light */ + "PROP_CHRTESTTUBE", /* Glass Test Tube */ + "PROP_BOLLARD", /* Bollard */ }; char *CAMERAMODE_ToString[] = { @@ -752,12 +992,12 @@ char *CAMERAMODE_ToString[] = { "CAMERAMODE_FADESWIRL", "CAMERAMODE_SWIRL", "CAMERAMODE_FP", - "CAMERAMODE_DEATH_CAM_FIRST", - "CAMERAMODE_DEATH_CAM_SECOND", + "CAMERAMODE_DEATH_CAM_SP", + "CAMERAMODE_DEATH_CAM_MP", "CAMERAMODE_POSEND", "CAMERAMODE_FP_NOINPUT", "CAMERAMODE_MP", - "CAMERAMODE_UNK10", + "CAMERAMODE_FADE_TO_TITLE", }; char *INTRO_TYPE_ToString[] = { @@ -780,14 +1020,12 @@ char *MISSION_STATE_IDS_ToString[] = { "MISSION_STATE_3", "MISSION_STATE_4", "MISSION_STATE_5", - "MISSION_STATE_6" -}; + "MISSION_STATE_6"}; char *OBJECTIVESTATUS_ToString[] = { "OBJECTIVESTATUS_INCOMPLETE", "OBJECTIVESTATUS_COMPLETE", - "OBJECTIVESTATUS_FAILED" -}; + "OBJECTIVESTATUS_FAILED"}; char *GAILIST_ToString[] = { "GAILIST_AIM_AT_BOND", @@ -809,6 +1047,148 @@ char *GAILIST_ToString[] = { "GAILIST_DRAW_TT33_AND_ATTCK_BOND", "GAILIST_REMOVE_CHR"}; +char *LEVELID_ToString[] = { + "LEVELID_NONE", + "LEVELID_DEFAULT", + "", + "", + "", + "", + "", + "", + "", + "", + "LEVELID_BUNKER1", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "LEVELID_SILO", + "", + "LEVELID_STATUE", + "LEVELID_CONTROL", + "LEVELID_ARCHIVES", + "LEVELID_TRAIN", + "LEVELID_FRIGATE", + "LEVELID_BUNKER2", + "LEVELID_AZTEC", + "LEVELID_STREETS", + "LEVELID_DEPOT", + "LEVELID_COMPLEX", + "LEVELID_EGYPT", + "LEVELID_DAM", + "LEVELID_FACILITY", + "LEVELID_RUNWAY", + "LEVELID_SURFACE", + "LEVELID_JUNGLE", + "LEVELID_TEMPLE", + "LEVELID_CAVERNS", + "LEVELID_CITADEL", + "LEVELID_CRADLE", + "LEVELID_SHO", + "LEVELID_SURFACE2", + "LEVELID_ELD", + "LEVELID_BASEMENT", + "LEVELID_STACK", + "LEVELID_LUE", + "LEVELID_LIBRARY", + "LEVELID_RIT", + "LEVELID_CAVES", + "LEVELID_EAR", + "LEVELID_LEE", + "LEVELID_LIP", + "LEVELID_CUBA", + "LEVELID_WAX", + "LEVELID_PAM", + "LEVELID_MAX", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "LEVELID_TITLE"}; + +char *TEXTBANK_LEVEL_INDEX_ToString[] = + { + "LNULL", /* Null (unused) */ + "LAME", /* Library (multi) */ + "LARCH", /* Archives */ + "LARK", /* Facility */ + "LASH", /* Stack (multi) */ + "LAZT", /* Aztec */ + "LCAT", /* Citadel (multi) */ + "LCAVE", /* Caverns */ + "LAREC", /* Control */ + "LCRAD", /* Cradle */ + "LCRYP", /* Egypt */ + "LDAM", /* Dam */ + "LDEPO", /* Depot */ + "LDEST", /* Frigate */ + "LDISH", /* Temple (multi) */ + "LEAR", /* Ear (unused) */ + "LELD", /* Eld (unused) */ + "LIMP", /* Basement (multi) */ + "LJUN", /* Jungle */ + "LLEE", /* Lee (unused) */ + "LLEN", /* Cuba */ + "LLIP", /* Lip (unused) */ + "LLUE", /* Lue (unused) */ + "LOAT", /* Cave (multi) */ + "LPAM", /* Pam (unused) */ + "LPETE", /* Streets */ + "LREF", /* Complex (multi) */ + "LRIT", /* Rit (unused) */ + "LRUN", /* Runway */ + "LSEVB", /* Bunker 2 */ + "LSEV", /* Bunker 1 */ + "LSEVX", /* Surface 1 */ + "LSEVXB", /* Surface 2 */ + "LSHO", /* Sho (unused) */ + "LSILO", /* Silo */ + "LSTAT", /* Statue */ + "LTRA", /* Train */ + "LWAX", /* Wax (unused) */ + "LGUN", /* Guns */ + "LTITLE", /* Stage and menu titles */ + "LMPMENU", /* Multi menus */ + "LPROPOBJ", /* In-game pickups */ + "LMPWEAPONS", /* Multi weapon select */ + "LOPTIONS", /* Solo in-game menus */ + "LMISC" /* Cheat options */ +}; #pragma region lengths #define AI_GotoNext_LENGTH 2 #define AI_GotoFirst_LENGTH 2 @@ -899,7 +1279,7 @@ char *GAILIST_ToString[] = { #define AI_IFChrInRoomWithPad_LENGTH 5 #define AI_IFBondInRoomWithPad_LENGTH 4 #define AI_IFBondCollectedObject_LENGTH 3 -#define AI_IFItemIsStationaryWithinLevel_LENGTH 3 +#define AI_IFKeyDropped_LENGTH 3 #define AI_IFItemIsAttachedToObject_LENGTH 4 #define AI_IFBondHasItemEquipped_LENGTH 3 #define AI_IFObjectExists_LENGTH 3 @@ -908,7 +1288,7 @@ char *GAILIST_ToString[] = { #define AI_IFBondUsedGadgetOnObject_LENGTH 3 #define AI_ActivateObject_LENGTH 2 #define AI_DestroyObject_LENGTH 2 -#define AI_DropObject_LENGTH 2 +#define AI_DropObject_LENGTH 2 #define AI_ChrDropAllConcealedItems_LENGTH 2 #define AI_ChrDropAllHeldItems_LENGTH 2 #define AI_BondCollectObject_LENGTH 2 @@ -1062,7 +1442,7 @@ char *GAILIST_ToString[] = { #define AI_RaiseArms_LENGTH 1 #define AI_GasLeakAndFadeFog_LENGTH 1 #define AI_ObjectRocketLaunch_LENGTH 2 -#pragma endregion +#pragma endregion //w int AI_CMD_LENGTHS_ToInt[] = { AI_GotoNext_LENGTH, @@ -1152,7 +1532,7 @@ int AI_CMD_LENGTHS_ToInt[] = { AI_IFChrInRoomWithPad_LENGTH, AI_IFBondInRoomWithPad_LENGTH, AI_IFBondCollectedObject_LENGTH, - AI_IFItemIsStationaryWithinLevel_LENGTH, + AI_IFKeyDropped_LENGTH, AI_IFItemIsAttachedToObject_LENGTH, AI_IFBondHasItemEquipped_LENGTH, AI_IFObjectExists_LENGTH, @@ -1408,7 +1788,7 @@ typedef enum AI_CMD AI_IFChrInRoomWithPad, AI_IFBondInRoomWithPad, AI_IFBondCollectedObject, - AI_IFItemIsStationaryWithinLevel, + AI_IFKeyDropped, AI_IFItemIsAttachedToObject, AI_IFBondHasItemEquipped, AI_IFObjectExists, @@ -1665,7 +2045,7 @@ char *AI_CMD_ToString[] = { "IFChrInRoomWithPad", "IFBondInRoomWithPad", "IFBondCollectedObject", - "IFItemIsStationaryWithinLevel", + "IFKeyDropped", "IFItemIsAttachedToObject", "IFBondHasItemEquipped", "IFObjectExists", @@ -1833,13 +2213,1800 @@ char *AI_CMD_ToString[] = { "ObjectRocketLaunch"}; +#pragma pack(1) + +typedef struct AiGotoNextRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiGotoNextRecord; + +typedef struct AiGotoFirstRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiGotoFirstRecord; + +typedef struct AiLabelRecord +{ + u8 cmd; + u8 ID; +} AiLabelRecord; + +typedef struct AiYieldRecord +{ + u8 cmd; +} AiYieldRecord; + +typedef struct AiEndListRecord +{ + u8 cmd; +} AiEndListRecord; + +typedef struct AiSetChrAiListRecord +{ + u8 cmd; + s8 CHR_NUM; + s16 AI_LIST_ID; +} AiSetChrAiListRecord; + +typedef struct AiSetReturnAiListRecord +{ + u8 cmd; + s16 AI_LIST_ID; +} AiSetReturnAiListRecord; + +typedef struct AiReturnRecord +{ + u8 cmd; +} AiReturnRecord; + +typedef struct AiStopRecord +{ + u8 cmd; +} AiStopRecord; + +typedef struct AiKneelRecord +{ + u8 cmd; +} AiKneelRecord; + +typedef struct AiPlayAnimationRecord +{ + u8 cmd; + s16 ANIMATION_ID; + s16 START_TIME30; + s16 END_TIME30; + u8 BITFIELD; + u8 INTERPOL_TIME60; +} AiPlayAnimationRecord; + +typedef struct AiIFPlayingAnimationRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFPlayingAnimationRecord; + +typedef struct AiPointAtBondRecord +{ + u8 cmd; +} AiPointAtBondRecord; + +typedef struct AiLookSurprisedRecord +{ + u8 cmd; +} AiLookSurprisedRecord; + +typedef struct AiTRYSidesteppingRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYSidesteppingRecord; + +typedef struct AiTRYSideHoppingRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYSideHoppingRecord; + +typedef struct AiTRYSideRunningRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYSideRunningRecord; + +typedef struct AiTRYFiringWalkRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYFiringWalkRecord; + +typedef struct AiTRYFiringRunRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYFiringRunRecord; + +typedef struct AiTRYFiringRollRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYFiringRollRecord; + +typedef struct AiTRYFireOrAimAtTargetRecord +{ + u8 cmd; + s16 BITFIELD; + s16 TARGET; + u8 GOTOLABEL; +} AiTRYFireOrAimAtTargetRecord; + +typedef struct AiTRYFireOrAimAtTargetKneelRecord +{ + u8 cmd; + s16 BITFIELD; + s16 TARGET; + u8 GOTOLABEL; +} AiTRYFireOrAimAtTargetKneelRecord; + +typedef struct AiTRYFireOrAimAtTargetUpdateRecord +{ + u8 cmd; + s16 BITFIELD; + s16 TARGET; + u8 GOTOLABEL; +} AiTRYFireOrAimAtTargetUpdateRecord; + +typedef struct AiTRYFacingTargetRecord +{ + u8 cmd; + s16 BITFIELD; + s16 TARGET; + u8 GOTOLABEL; +} AiTRYFacingTargetRecord; + +typedef struct AiHitChrWithItemRecord +{ + u8 cmd; + u8 CHR_NUM; + s8 PART_NUM; + u8 ITEM_NUM; +} AiHitChrWithItemRecord; + +typedef struct AiChrHitChrRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 CHR_NUM_TARGET; + s8 PART_NUM; +} AiChrHitChrRecord; + +typedef struct AiTRYThrowingGrenadeRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYThrowingGrenadeRecord; + +typedef struct AiTRYDroppingItemRecord +{ + u8 cmd; + s16 PROP_NUM; + u8 ITEM_NUM; + u8 GOTOLABEL; +} AiTRYDroppingItemRecord; + +typedef struct AiRunToPadRecord +{ + u8 cmd; + s16 PAD; +} AiRunToPadRecord; + +typedef struct AiRunToPadPresetRecord +{ + u8 cmd; +} AiRunToPadPresetRecord; + +typedef struct AiWalkToPadRecord +{ + u8 cmd; + s16 PAD; +} AiWalkToPadRecord; + +typedef struct AiSprintToPadRecord +{ + u8 cmd; + s16 PAD; +} AiSprintToPadRecord; + +typedef struct AiStartPatrolRecord +{ + u8 cmd; + u8 PATH_NUM; +} AiStartPatrolRecord; + +typedef struct AiSurrenderRecord +{ + u8 cmd; +} AiSurrenderRecord; + +typedef struct AiRemoveMeRecord +{ + u8 cmd; +} AiRemoveMeRecord; + +typedef struct AiChrRemoveInstantRecord +{ + u8 cmd; + u8 CHR_NUM; +} AiChrRemoveInstantRecord; + +typedef struct AiTRYTriggeringAlarmAtPadRecord +{ + u8 cmd; + s16 PAD; + u8 GOTOLABEL; +} AiTRYTriggeringAlarmAtPadRecord; + +typedef struct AiAlarmOnRecord +{ + u8 cmd; +} AiAlarmOnRecord; + +typedef struct AiAlarmOffRecord +{ + u8 cmd; +} AiAlarmOffRecord; + +typedef struct AiTRYRunFromBondRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYRunFromBondRecord; + +typedef struct AiTRYRunToBondRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYRunToBondRecord; + +typedef struct AiTRYWalkToBondRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYWalkToBondRecord; + +typedef struct AiTRYSprintToBondRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYSprintToBondRecord; + +typedef struct AiTRYFindCoverRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiTRYFindCoverRecord; + +typedef struct AiTRYRunToChrRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiTRYRunToChrRecord; + +typedef struct AiTRYWalkToChrRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiTRYWalkToChrRecord; + +typedef struct AiTRYSprintToChrRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiTRYSprintToChrRecord; + +typedef struct AiIFImOnPatrolOrStoppedRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFImOnPatrolOrStoppedRecord; + +typedef struct AiIFChrDyingOrDeadRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiIFChrDyingOrDeadRecord; + +typedef struct AiIFChrDoesNotExistRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiIFChrDoesNotExistRecord; + +typedef struct AiIFISeeBondRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFISeeBondRecord; + +typedef struct AiSetNewRandomRecord +{ + u8 cmd; +} AiSetNewRandomRecord; + +typedef struct AiIFRandomLessThanRecord +{ + u8 cmd; + u8 BYTE; + u8 GOTOLABEL; +} AiIFRandomLessThanRecord; + +typedef struct AiIFRandomGreaterThanRecord +{ + u8 cmd; + u8 BYTE; + u8 GOTOLABEL; +} AiIFRandomGreaterThanRecord; + +typedef struct AiIFICanHearAlarmRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFICanHearAlarmRecord; + +typedef struct AiIFAlarmIsOnRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFAlarmIsOnRecord; + +typedef struct AiIFGasIsLeakingRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFGasIsLeakingRecord; + +typedef struct AiIFIHeardBondRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFIHeardBondRecord; + +typedef struct AiIFISeeSomeoneShotRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFISeeSomeoneShotRecord; + +typedef struct AiIFISeeSomeoneDieRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFISeeSomeoneDieRecord; + +typedef struct AiIFICouldSeeBondRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFICouldSeeBondRecord; + +typedef struct AiIFICouldSeeBondsStanRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFICouldSeeBondsStanRecord; + +typedef struct AiIFIWasShotRecentlyRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFIWasShotRecentlyRecord; + +typedef struct AiIFIHeardBondRecentlyRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFIHeardBondRecentlyRecord; + +typedef struct AiIFImInRoomWithChrRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiIFImInRoomWithChrRecord; + +typedef struct AiIFIveNotBeenSeenRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFIveNotBeenSeenRecord; + +typedef struct AiIFImOnScreenRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFImOnScreenRecord; + +typedef struct AiIFMyRoomIsOnScreenRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFMyRoomIsOnScreenRecord; + +typedef struct AiIFRoomWithPadIsOnScreenRecord +{ + u8 cmd; + s16 PAD; + u8 GOTOLABEL; +} AiIFRoomWithPadIsOnScreenRecord; + +typedef struct AiIFImTargetedByBondRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFImTargetedByBondRecord; + +typedef struct AiIFBondMissedMeRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFBondMissedMeRecord; + +typedef struct AiIFMyAngleToBondLessThanRecord +{ + u8 cmd; + u8 ANGLE; + u8 GOTOLABEL; +} AiIFMyAngleToBondLessThanRecord; + +typedef struct AiIFMyAngleToBondGreaterThanRecord +{ + u8 cmd; + u8 ANGLE; + u8 GOTOLABEL; +} AiIFMyAngleToBondGreaterThanRecord; + +typedef struct AiIFMyAngleFromBondLessThanRecord +{ + u8 cmd; + u8 ANGLE; + u8 GOTOLABEL; +} AiIFMyAngleFromBondLessThanRecord; + +typedef struct AiIFMyAngleFromBondGreaterThanRecord +{ + u8 cmd; + u8 ANGLE; + u8 GOTOLABEL; +} AiIFMyAngleFromBondGreaterThanRecord; + +typedef struct AiIFMyDistanceToBondLessThanDecimeterRecord +{ + u8 cmd; + s16 DISTANCE; + u8 GOTOLABEL; +} AiIFMyDistanceToBondLessThanDecimeterRecord; + +typedef struct AiIFMyDistanceToBondGreaterThanDecimeterRecord +{ + u8 cmd; + s16 DISTANCE; + u8 GOTOLABEL; +} AiIFMyDistanceToBondGreaterThanDecimeterRecord; + +typedef struct AiIFChrDistanceToPadLessThanDecimeterRecord +{ + u8 cmd; + u8 CHR_NUM; + s16 DISTANCE; + s16 PAD; + u8 GOTOLABEL; +} AiIFChrDistanceToPadLessThanDecimeterRecord; + +typedef struct AiIFChrDistanceToPadGreaterThanDecimeterRecord +{ + u8 cmd; + u8 CHR_NUM; + s16 DISTANCE; + s16 PAD; + u8 GOTOLABEL; +} AiIFChrDistanceToPadGreaterThanDecimeterRecord; + +typedef struct AiIFMyDistanceToChrLessThanDecimeterRecord +{ + u8 cmd; + s16 DISTANCE; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiIFMyDistanceToChrLessThanDecimeterRecord; + +typedef struct AiIFMyDistanceToChrGreaterThanDecimeterRecord +{ + u8 cmd; + s16 DISTANCE; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiIFMyDistanceToChrGreaterThanDecimeterRecord; + +typedef struct AiTRYSettingMyPresetToChrWithinDistanceDecimeterRecord +{ + u8 cmd; + s16 DISTANCE; + u8 GOTOLABEL; +} AiTRYSettingMyPresetToChrWithinDistanceDecimeterRecord; + +typedef struct AiIFBondDistanceToPadLessThanDecimeterRecord +{ + u8 cmd; + s16 DISTANCE; + s16 PAD; + u8 GOTOLABEL; +} AiIFBondDistanceToPadLessThanDecimeterRecord; + +typedef struct AiIFBondDistanceToPadGreaterThanDecimeterRecord +{ + u8 cmd; + s16 DISTANCE; + s16 PAD; + u8 GOTOLABEL; +} AiIFBondDistanceToPadGreaterThanDecimeterRecord; + +typedef struct AiIFChrInRoomWithPadRecord +{ + u8 cmd; + u8 CHR_NUM; + s16 PAD; + u8 GOTOLABEL; +} AiIFChrInRoomWithPadRecord; + +typedef struct AiIFBondInRoomWithPadRecord +{ + u8 cmd; + s16 PAD; + u8 GOTOLABEL; +} AiIFBondInRoomWithPadRecord; + +typedef struct AiIFBondCollectedObjectRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 GOTOLABEL; +} AiIFBondCollectedObjectRecord; + +typedef struct AiIFKeyDroppedRecord +{ + u8 cmd; + u8 KEY_ID; + u8 GOTOLABEL; +} AiIFKeyDroppedRecord; + +typedef struct AiIFItemIsAttachedToObjectRecord +{ + u8 cmd; + u8 ITEM_NUM; + u8 OBJECT_TAG; + u8 GOTOLABEL; +} AiIFItemIsAttachedToObjectRecord; + +typedef struct AiIFBondHasItemEquippedRecord +{ + u8 cmd; + u8 ITEM_NUM; + u8 GOTOLABEL; +} AiIFBondHasItemEquippedRecord; + +typedef struct AiIFObjectExistsRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 GOTOLABEL; +} AiIFObjectExistsRecord; + +typedef struct AiIFObjectNotDestroyedRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 GOTOLABEL; +} AiIFObjectNotDestroyedRecord; + +typedef struct AiIFObjectWasActivatedRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 GOTOLABEL; +} AiIFObjectWasActivatedRecord; + +typedef struct AiIFBondUsedGadgetOnObjectRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 GOTOLABEL; +} AiIFBondUsedGadgetOnObjectRecord; + +typedef struct AiActivateObjectRecord +{ + u8 cmd; + u8 OBJECT_TAG; +} AiActivateObjectRecord; + +typedef struct AiDestroyObjectRecord +{ + u8 cmd; + u8 OBJECT_TAG; +} AiDestroyObjectRecord; + +typedef struct AiDropObjectRecord +{ + u8 cmd; + u8 OBJECT_TAG; +} AiDropObjectRecord; + +typedef struct AiChrDropAllConcealedItemsRecord +{ + u8 cmd; + u8 CHR_NUM; +} AiChrDropAllConcealedItemsRecord; + +typedef struct AiChrDropAllHeldItemsRecord +{ + u8 cmd; + u8 CHR_NUM; +} AiChrDropAllHeldItemsRecord; + +typedef struct AiBondCollectObjectRecord +{ + u8 cmd; + u8 OBJECT_TAG; +} AiBondCollectObjectRecord; + +typedef struct AiChrEquipObjectRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 CHR_NUM; +} AiChrEquipObjectRecord; + +typedef struct AiMoveObjectRecord +{ + u8 cmd; + u8 OBJECT_TAG; + s16 PAD; +} AiMoveObjectRecord; + +typedef struct AiDoorOpenRecord +{ + u8 cmd; + u8 OBJECT_TAG; +} AiDoorOpenRecord; + +typedef struct AiDoorCloseRecord +{ + u8 cmd; + u8 OBJECT_TAG; +} AiDoorCloseRecord; + +typedef struct AiIFDoorStateEqualRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 DOOR_STATE; + u8 GOTOLABEL; +} AiIFDoorStateEqualRecord; + +typedef struct AiIFDoorHasBeenOpenedBeforeRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 GOTOLABEL; +} AiIFDoorHasBeenOpenedBeforeRecord; + +typedef struct AiDoorSetLockRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 LOCK_FLAG; +} AiDoorSetLockRecord; + +typedef struct AiDoorUnsetLockRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 LOCK_FLAG; +} AiDoorUnsetLockRecord; + +typedef struct AiIFDoorLockEqualRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 LOCK_FLAG; + u8 GOTOLABEL; +} AiIFDoorLockEqualRecord; + +typedef struct AiIFObjectiveNumCompleteRecord +{ + u8 cmd; + u8 OBJ_NUM; + u8 GOTOLABEL; +} AiIFObjectiveNumCompleteRecord; + +typedef struct AiTRYUnknown6eRecord +{ + u8 cmd; + u8 val; + u8 GOTOLABEL; +} AiTRYUnknown6eRecord; + +typedef struct AiTRYUnknown6fRecord +{ + u8 cmd; + u8 val; + u8 GOTOLABEL; +} AiTRYUnknown6fRecord; + +typedef struct AiIFGameDifficultyLessThanRecord +{ + u8 cmd; + u8 DIFICULTY_ID; + u8 GOTOLABEL; +} AiIFGameDifficultyLessThanRecord; + +typedef struct AiIFGameDifficultyGreaterThanRecord +{ + u8 cmd; + u8 DIFICULTY_ID; + u8 GOTOLABEL; +} AiIFGameDifficultyGreaterThanRecord; + +typedef struct AiIFMissionTimeLessThanRecord +{ + u8 cmd; + s16 SECONDS; + u8 GOTOLABEL; +} AiIFMissionTimeLessThanRecord; + +typedef struct AiIFMissionTimeGreaterThanRecord +{ + u8 cmd; + s16 SECONDS; + u8 GOTOLABEL; +} AiIFMissionTimeGreaterThanRecord; + +typedef struct AiIFSystemPowerTimeLessThanRecord +{ + u8 cmd; + s16 MINUTES; + u8 GOTOLABEL; +} AiIFSystemPowerTimeLessThanRecord; + +typedef struct AiIFSystemPowerTimeGreaterThanRecord +{ + u8 cmd; + s16 MINUTES; + u8 GOTOLABEL; +} AiIFSystemPowerTimeGreaterThanRecord; + +typedef struct AiIFLevelIdLessThanRecord +{ + u8 cmd; + u8 LEVEL_ID; + u8 GOTOLABEL; +} AiIFLevelIdLessThanRecord; + +typedef struct AiIFLevelIdGreaterThanRecord +{ + u8 cmd; + u8 LEVEL_ID; + u8 GOTOLABEL; +} AiIFLevelIdGreaterThanRecord; + +typedef struct AiIFMyNumArghsLessThanRecord +{ + u8 cmd; + u8 val; + u8 GOTOLABEL; +} AiIFMyNumArghsLessThanRecord; + +typedef struct AiIFMyNumArghsGreaterThanRecord +{ + u8 cmd; + u8 val; + u8 GOTOLABEL; +} AiIFMyNumArghsGreaterThanRecord; + +typedef struct AiIFMyNumCloseArghsLessThanRecord +{ + u8 cmd; + u8 val; + u8 GOTOLABEL; +} AiIFMyNumCloseArghsLessThanRecord; + +typedef struct AiIFMyNumCloseArghsGreaterThanRecord +{ + u8 cmd; + u8 val; + u8 GOTOLABEL; +} AiIFMyNumCloseArghsGreaterThanRecord; + +typedef struct AiIFChrHealthLessThanRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 HEALTH; + u8 GOTOLABEL; +} AiIFChrHealthLessThanRecord; + +typedef struct AiIFChrHealthGreaterThanRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 HEALTH; + u8 GOTOLABEL; +} AiIFChrHealthGreaterThanRecord; + +typedef struct AiIFChrWasDamagedSinceLastCheckRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiIFChrWasDamagedSinceLastCheckRecord; + +typedef struct AiIFBondHealthLessThanRecord +{ + u8 cmd; + u8 HEALTH; + u8 GOTOLABEL; +} AiIFBondHealthLessThanRecord; + +typedef struct AiIFBondHealthGreaterThanRecord +{ + u8 cmd; + u8 HEALTH; + u8 GOTOLABEL; +} AiIFBondHealthGreaterThanRecord; + +typedef struct AiSetMyMoraleRecord +{ + u8 cmd; + u8 val; +} AiSetMyMoraleRecord; + +typedef struct AiAddToMyMoraleRecord +{ + u8 cmd; + u8 val; +} AiAddToMyMoraleRecord; + +typedef struct AiSubtractFromMyMoraleRecord +{ + u8 cmd; + u8 val; +} AiSubtractFromMyMoraleRecord; + +typedef struct AiIFMyMoraleLessThanRecord +{ + u8 cmd; + u8 val; + u8 GOTOLABEL; +} AiIFMyMoraleLessThanRecord; + +typedef struct AiIFMyMoraleLessThanRandomRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFMyMoraleLessThanRandomRecord; + +typedef struct AiSetMyAlertnessRecord +{ + u8 cmd; + u8 val; +} AiSetMyAlertnessRecord; + +typedef struct AiAddToMyAlertnessRecord +{ + u8 cmd; + u8 val; +} AiAddToMyAlertnessRecord; + +typedef struct AiSubtractFromMyAlertnessRecord +{ + u8 cmd; + u8 val; +} AiSubtractFromMyAlertnessRecord; + +typedef struct AiIFMyAlertnessLessThanRecord +{ + u8 cmd; + u8 CHRBYTE; + u8 GOTOLABEL; +} AiIFMyAlertnessLessThanRecord; + +typedef struct AiIFMyAlertnessLessThanRandomRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFMyAlertnessLessThanRandomRecord; + +typedef struct AiSetMyHearingScaleRecord +{ + u8 cmd; + s16 HEARING_SCALE; +} AiSetMyHearingScaleRecord; + +typedef struct AiSetMyVisionRangeRecord +{ + u8 cmd; + u8 VISION_RANGE; +} AiSetMyVisionRangeRecord; + +typedef struct AiSetMyGrenadeProbabilityRecord +{ + u8 cmd; + u8 GRENADE_PROB; +} AiSetMyGrenadeProbabilityRecord; + +typedef struct AiSetMyChrNumRecord +{ + u8 cmd; + u8 CHR_NUM; +} AiSetMyChrNumRecord; + +typedef struct AiSetMyHealthTotalRecord +{ + u8 cmd; + s16 HEALTH; +} AiSetMyHealthTotalRecord; + +typedef struct AiSetMyArmourRecord +{ + u8 cmd; + s16 AMOUNT; +} AiSetMyArmourRecord; + +typedef struct AiSetMySpeedRatingRecord +{ + u8 cmd; + s8 val; +} AiSetMySpeedRatingRecord; + +typedef struct AiSetMyArghRatingRecord +{ + u8 cmd; + s8 val; +} AiSetMyArghRatingRecord; + +typedef struct AiSetMyAccuracyRatingRecord +{ + u8 cmd; + s8 val; +} AiSetMyAccuracyRatingRecord; + +typedef struct AiSetMyFlags2Record +{ + u8 cmd; + u8 BITS; +} AiSetMyFlags2Record; + +typedef struct AiUnsetMyFlags2Record +{ + u8 cmd; + u8 BITS; +} AiUnsetMyFlags2Record; + +typedef struct AiIFMyFlags2HasRecord +{ + u8 cmd; + u8 BITS; + u8 GOTOLABEL; +} AiIFMyFlags2HasRecord; + +typedef struct AiSetChrBitfieldRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 BITS; +} AiSetChrBitfieldRecord; + +typedef struct AiUnsetChrBitfieldRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 BITS; +} AiUnsetChrBitfieldRecord; + +typedef struct AiIFChrBitfieldHasRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 BITS; + u8 GOTOLABEL; +} AiIFChrBitfieldHasRecord; + +typedef struct AiSetObjectiveBitfieldRecord +{ + u8 cmd; + s32 BITFIELD; +} AiSetObjectiveBitfieldRecord; + +typedef struct AiUnsetObjectiveBitfieldRecord +{ + u8 cmd; + s32 BITFIELD; +} AiUnsetObjectiveBitfieldRecord; + +typedef struct AiIFObjectiveBitfieldHasRecord +{ + u8 cmd; + s32 BITS; + u8 GOTOLABEL; +} AiIFObjectiveBitfieldHasRecord; + +typedef struct AiSetMychrflagsRecord +{ + u8 cmd; + s32 CHRFLAGS; +} AiSetMychrflagsRecord; + +typedef struct AiUnsetMychrflagsRecord +{ + u8 cmd; + s32 CHRFLAGS; +} AiUnsetMychrflagsRecord; + +typedef struct AiIFMychrflagsHasRecord +{ + u8 cmd; + s32 CHRFLAGS; + u8 GOTOLABEL; +} AiIFMychrflagsHasRecord; + +typedef struct AiSetChrchrflagsRecord +{ + u8 cmd; + u8 CHR_NUM; + s32 CHRFLAGS; +} AiSetChrchrflagsRecord; + +typedef struct AiUnsetChrchrflagsRecord +{ + u8 cmd; + u8 CHR_NUM; + s32 CHRFLAGS; +} AiUnsetChrchrflagsRecord; + +typedef struct AiIFChrchrflagsHasRecord +{ + u8 cmd; + u8 CHR_NUM; + s32 CHRFLAGS; + u8 GOTOLABEL; +} AiIFChrchrflagsHasRecord; + +typedef struct AiSetObjectFlagsRecord +{ + u8 cmd; + u8 OBJECT_TAG; + s32 BITFIELD; +} AiSetObjectFlagsRecord; + +typedef struct AiUnsetObjectFlagsRecord +{ + u8 cmd; + u8 OBJECT_TAG; + s32 BITFIELD; +} AiUnsetObjectFlagsRecord; + +typedef struct AiIFObjectFlagsHasRecord +{ + u8 cmd; + u8 OBJECT_TAG; + s32 BITS; + u8 GOTOLABEL; +} AiIFObjectFlagsHasRecord; + +typedef struct AiSetObjectFlags2Record +{ + u8 cmd; + u8 OBJECT_TAG; + s32 BITS; +} AiSetObjectFlags2Record; + +typedef struct AiUnsetObjectFlags2Record +{ + u8 cmd; + u8 OBJECT_TAG; + s32 BITS; +} AiUnsetObjectFlags2Record; + +typedef struct AiIFObjectFlags2HasRecord +{ + u8 cmd; + u8 OBJECT_TAG; + s32 BITFIELD; + u8 GOTOLABEL; +} AiIFObjectFlags2HasRecord; + +typedef struct AiSetMyChrPresetRecord +{ + u8 cmd; + u8 PRESET; +} AiSetMyChrPresetRecord; + +typedef struct AiSetChrChrPresetRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 PRESET; +} AiSetChrChrPresetRecord; + +typedef struct AiSetMyPadPresetRecord +{ + u8 cmd; + s16 PAD_PRESET; +} AiSetMyPadPresetRecord; + +typedef struct AiSetChrPadPresetRecord +{ + u8 cmd; + u8 CHR_NUM; + s16 PAD_PRESET; +} AiSetChrPadPresetRecord; + +typedef struct AiPRINTRecord +{ + u8 cmd; + u8 val[]; +} AiPRINTRecord; + +typedef struct AiMyTimerStartRecord +{ + u8 cmd; +} AiMyTimerStartRecord; + +typedef struct AiMyTimerResetRecord +{ + u8 cmd; +} AiMyTimerResetRecord; + +typedef struct AiMyTimerPauseRecord +{ + u8 cmd; +} AiMyTimerPauseRecord; + +typedef struct AiMyTimerResumeRecord +{ + u8 cmd; +} AiMyTimerResumeRecord; + +typedef struct AiIFMyTimerIsNotRunningRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFMyTimerIsNotRunningRecord; + +typedef struct AiIFMyTimerLessThanTicksRecord +{ + u8 cmd; + u8 TICKS[3]; + u8 GOTOLABEL; +} AiIFMyTimerLessThanTicksRecord; + +typedef struct AiIFMyTimerGreaterThanTicksRecord +{ + u8 cmd; + u8 TICKS[3]; + u8 GOTOLABEL; +} AiIFMyTimerGreaterThanTicksRecord; + +typedef struct AiHudCountdownShowRecord +{ + u8 cmd; +} AiHudCountdownShowRecord; + +typedef struct AiHudCountdownHideRecord +{ + u8 cmd; +} AiHudCountdownHideRecord; + +typedef struct AiHudCountdownSetRecord +{ + u8 cmd; + s16 SECONDS; +} AiHudCountdownSetRecord; + +typedef struct AiHudCountdownStopRecord +{ + u8 cmd; +} AiHudCountdownStopRecord; + +typedef struct AiHudCountdownStartRecord +{ + u8 cmd; +} AiHudCountdownStartRecord; + +typedef struct AiIFHudCountdownIsNotRunningRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFHudCountdownIsNotRunningRecord; + +typedef struct AiIFHudCountdownLessThanRecord +{ + u8 cmd; + s16 SECONDS; + u8 GOTOLABEL; +} AiIFHudCountdownLessThanRecord; + +typedef struct AiIFHudCountdownGreaterThanRecord +{ + u8 cmd; + s16 SECONDS; + u8 GOTOLABEL; +} AiIFHudCountdownGreaterThanRecord; + +typedef struct AiTRYSpawningChrAtPadRecord +{ + u8 cmd; + u8 BODY_NUM; + s8 HEAD_NUM; + s16 PAD; + s16 AI_LIST_ID; + s32 BITFIELD; + u8 GOTOLABEL; +} AiTRYSpawningChrAtPadRecord; + +typedef struct AiTRYSpawningChrNextToChrRecord +{ + u8 cmd; + u8 BODY_NUM; + s8 HEAD_NUM; + u8 CHR_NUM_TARGET; + s16 AI_LIST_ID; + s32 BITFIELD; + u8 GOTOLABEL; +} AiTRYSpawningChrNextToChrRecord; + +typedef struct AiTRYGiveMeItemRecord +{ + u8 cmd; + s16 PROP_NUM; + u8 ITEM_NUM; + s32 PROPFLAG; + u8 GOTOLABEL; +} AiTRYGiveMeItemRecord; + +typedef struct AiTRYGiveMeHatRecord +{ + u8 cmd; + s16 PROP_NUM; + s32 PROP_BITFIELD; + u8 GOTOLABEL; +} AiTRYGiveMeHatRecord; + +typedef struct AiTRYCloningChrRecord +{ + u8 cmd; + u8 CHR_NUM; + s16 AI_LIST_ID; + u8 GOTOLABEL; +} AiTRYCloningChrRecord; + +typedef struct AiTextPrintBottomRecord +{ + u8 cmd; + s16 txt; +} AiTextPrintBottomRecord; + +typedef struct AiTextPrintTopRecord +{ + u8 cmd; + s16 txt; +} AiTextPrintTopRecord; + +typedef struct AiSfxPlayRecord +{ + u8 cmd; + s16 SOUND_NUM; + s8 CHANNEL_NUM; +} AiSfxPlayRecord; + +typedef struct AiSfxEmitFromObjectRecord +{ + u8 cmd; + s8 slotID; + u8 OBJECT_TAG; + s16 sfxID; +} AiSfxEmitFromObjectRecord; + +typedef struct AiSfxEmitFromPadRecord +{ + u8 cmd; + s8 slotID; + s16 PAD; + s16 sfxID; +} AiSfxEmitFromPadRecord; + +typedef struct AiSfxSetChannelVolumeRecord +{ + u8 cmd; + s8 slotID; + s16 TARGET_VOLUME; + s16 sfxID; +} AiSfxSetChannelVolumeRecord; + +typedef struct AiSfxFadeChannelVolumeRecord +{ + u8 cmd; + s8 slotID; + s16 TARGET_VOLUME; + s16 sfxID; +} AiSfxFadeChannelVolumeRecord; + +typedef struct AiSfxStopChannelRecord +{ + u8 cmd; + s8 CHANNEL_NUM; +} AiSfxStopChannelRecord; + +typedef struct AiIFSfxChannelVolumeLessThanRecord +{ + u8 cmd; + s8 slotID; + s16 VOLUME; + u8 GOTOLABEL; +} AiIFSfxChannelVolumeLessThanRecord; + +typedef struct AiVehicleStartPathRecord +{ + u8 cmd; + u8 PATH_NUM; +} AiVehicleStartPathRecord; + +typedef struct AiVehicleSpeedRecord +{ + u8 cmd; + s16 TOP_SPEED; + s16 ACCELERATION_TIME60; +} AiVehicleSpeedRecord; + +typedef struct AiAircraftRotorSpeedRecord +{ + u8 cmd; + s16 ROTOR_SPEED; + s16 ACCELERATION_TIME60; +} AiAircraftRotorSpeedRecord; + +typedef struct AiIFCameraIsInIntroRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFCameraIsInIntroRecord; + +typedef struct AiIFCameraIsInBondSwirlRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFCameraIsInBondSwirlRecord; + +typedef struct AiTvChangeScreenBankRecord +{ + u8 cmd; + u8 OBJECT_TAG; + u8 SCREEN_INDEX; + u8 SCREEN_BANK; +} AiTvChangeScreenBankRecord; + +typedef struct AiIFBondInTankRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFBondInTankRecord; + +typedef struct AiEndLevelRecord +{ + u8 cmd; +} AiEndLevelRecord; + +typedef struct AiCameraReturnToBondRecord +{ + u8 cmd; +} AiCameraReturnToBondRecord; + +typedef struct AiCameraLookAtBondFromPadRecord +{ + u8 cmd; + s16 PAD; +} AiCameraLookAtBondFromPadRecord; + +typedef struct AiCameraSwitchRecord +{ + u8 cmd; + u8 OBJECT_TAG; + s16 LOOK_AT_BOND_FLAG; + s16 UNUSED_FLAG; +} AiCameraSwitchRecord; + +typedef struct AiIFBondYPosLessThanRecord +{ + u8 cmd; + s16 Y_POS; + u8 GOTOLABEL; +} AiIFBondYPosLessThanRecord; + +typedef struct AiBondDisableControlRecord +{ + u8 cmd; + u8 val; +} AiBondDisableControlRecord; + +typedef struct AiBondEnableControlRecord +{ + u8 cmd; +} AiBondEnableControlRecord; + +typedef struct AiTRYTeleportingChrToPadRecord +{ + u8 cmd; + u8 CHR_NUM; + s16 PAD; + u8 GOTOLABEL; +} AiTRYTeleportingChrToPadRecord; + +typedef struct AiScreenFadeToBlackRecord +{ + u8 cmd; +} AiScreenFadeToBlackRecord; + +typedef struct AiScreenFadeFromBlackRecord +{ + u8 cmd; +} AiScreenFadeFromBlackRecord; + +typedef struct AiIFScreenFadeCompletedRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFScreenFadeCompletedRecord; + +typedef struct AiHideAllChrsRecord +{ + u8 cmd; +} AiHideAllChrsRecord; + +typedef struct AiShowAllChrsRecord +{ + u8 cmd; +} AiShowAllChrsRecord; + +typedef struct AiDoorOpenInstantRecord +{ + u8 cmd; + u8 OBJECT_TAG; +} AiDoorOpenInstantRecord; + +typedef struct AiChrRemoveItemInHandRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 HAND_INDEX; +} AiChrRemoveItemInHandRecord; + +typedef struct AiIfNumberOfActivePlayersLessThanRecord +{ + u8 cmd; + s8 NUMBER; + u8 GOTOLABEL; +} AiIfNumberOfActivePlayersLessThanRecord; + +typedef struct AiIFBondItemTotalAmmoLessThanRecord +{ + u8 cmd; + s8 ITEM_NUM; + s8 AMMO_TOTAL; + u8 GOTOLABEL; +} AiIFBondItemTotalAmmoLessThanRecord; + +typedef struct AiBondEquipItemRecord +{ + u8 cmd; + s8 ITEM_NUM; +} AiBondEquipItemRecord; + +typedef struct AiBondEquipItemCinemaRecord +{ + u8 cmd; + s8 ITEM_NUM; +} AiBondEquipItemCinemaRecord; + +typedef struct AiBondSetLockedVelocityRecord +{ + u8 cmd; + s8 X_SPEED60; + s8 Z_SPEED60; +} AiBondSetLockedVelocityRecord; + +typedef struct AiIFObjectInRoomWithPadRecord +{ + u8 cmd; + u8 OBJECT_TAG; + s16 PAD; + u8 GOTOLABEL; +} AiIFObjectInRoomWithPadRecord; + +typedef struct AiIFImFiringAndLockedForwardRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFImFiringAndLockedForwardRecord; + +typedef struct AiIFImFiringRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFImFiringRecord; + +typedef struct AiSwitchSkyRecord +{ + u8 cmd; +} AiSwitchSkyRecord; + +typedef struct AiTriggerFadeAndExitLevelOnButtonPressRecord +{ + u8 cmd; +} AiTriggerFadeAndExitLevelOnButtonPressRecord; + +typedef struct AiIFBondIsDeadRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFBondIsDeadRecord; + +typedef struct AiBondDisableDamageAndPickupsRecord +{ + u8 cmd; +} AiBondDisableDamageAndPickupsRecord; + +typedef struct AiBondHideWeaponsRecord +{ + u8 cmd; +} AiBondHideWeaponsRecord; + +typedef struct AiCameraOrbitPadRecord +{ + u8 cmd; + s16 LAT_DISTANCE; + s16 VERT_DISTANCE; + s16 ORBIT_SPEED60; + s16 PAD; + s16 Y_POS_OFFSET; + s16 INITIAL_ROTATION; +} AiCameraOrbitPadRecord; + +typedef struct AiCreditsRollRecord +{ + u8 cmd; +} AiCreditsRollRecord; + +typedef struct AiIFCreditsHasCompletedRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFCreditsHasCompletedRecord; + +typedef struct AiIFObjectiveAllCompletedRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFObjectiveAllCompletedRecord; + +typedef struct AiIFFolderActorIsEqualRecord +{ + u8 cmd; + s8 BOND_ACTOR_INDEX; + u8 GOTOLABEL; +} AiIFFolderActorIsEqualRecord; + +typedef struct AiIFBondDamageAndPickupsDisabledRecord +{ + u8 cmd; + u8 GOTOLABEL; +} AiIFBondDamageAndPickupsDisabledRecord; + +typedef struct AiMusicPlaySlotRecord +{ + u8 cmd; + s8 MUSIC_SLOT; + u8 SECONDS_STOPPED_DURATION; + u8 SECONDS_TOTAL_DURATION; +} AiMusicPlaySlotRecord; + +typedef struct AiMusicStopSlotRecord +{ + u8 cmd; + s8 MUSIC_SLOT; +} AiMusicStopSlotRecord; + +typedef struct AiTriggerExplosionsAroundBondRecord +{ + u8 cmd; +} AiTriggerExplosionsAroundBondRecord; + +typedef struct AiIFKilledCiviliansGreaterThanRecord +{ + u8 cmd; + u8 CIVILIANS_KILLED; + u8 GOTOLABEL; +} AiIFKilledCiviliansGreaterThanRecord; + +typedef struct AiIFChrWasShotSinceLastCheckRecord +{ + u8 cmd; + u8 CHR_NUM; + u8 GOTOLABEL; +} AiIFChrWasShotSinceLastCheckRecord; + +typedef struct AiBondKilledInActionRecord +{ + u8 cmd; +} AiBondKilledInActionRecord; + +typedef struct AiRaiseArmsRecord +{ + u8 cmd; +} AiRaiseArmsRecord; + +typedef struct AiGasLeakAndFadeFogRecord +{ + u8 cmd; +} AiGasLeakAndFadeFogRecord; + +typedef struct AiObjectRocketLaunchRecord +{ + u8 cmd; + u8 OBJECT_TAG; +} AiObjectRocketLaunchRecord; + +#pragma pack(0) + +typedef struct coord3d +{ + union + { + struct + { + float x; + float y; + float z; + }; + float AsArray[3]; + }; +} coord3d; + +typedef struct bbox +{ + union + { + struct + { + float xmin; + float xmax; + float ymin; + float ymax; + float zmin; + float zmax; + }; + float AsArray[6]; + }; +} bbox; + +typedef struct PropDefHeaderRecord +{ + unsigned short extrascale; /*0x0 Fixed-Point format char.8 eg: 0x03.80 = 3.5*/ + char state; + char type; /*0x3*/ +} PropDefHeaderRecord; + +typedef struct AIListRecord +{ + char *ailist; + int ID; +} AIListRecord; +typedef struct PadRecord /*0x2c (44) long confirmed*/ +{ + coord3d pos; /*0x00*/ + coord3d up; /*0x0c*/ + coord3d look; /*0x18*/ + char *plink; /*0x24 canonical name */ + void *stan; /*0x28 canonical name */ +} PadRecord; + +/** + * Bound Pads hold an extra Bounding Box which any prop assigned will try to + * fill (non-uniform scaling). + */ +typedef struct BoundPadRecord /*0x44 (68) long confirmed*/ +{ + // inherits PadRecord; /*0x00 confirmed*/ + coord3d pos; /*0x00*/ + coord3d up; /*0x0c*/ + coord3d look; /*0x18*/ + char *plink; /*0x24 canonical name */ + void *stan; /*0x28 canonical name */ + // temporary fix for no inheritance support by glibtools + bbox bbox; /*0x2c - 0x40 confirmed*/ +} BoundPadRecord; +typedef struct waypoint +{ + int padID; // Pad ID to anchor waypoint to. + int *neighbours; // Array of neighbouring (connected) waypoint IDs (ending in -1) + int groupNum; // index entry in the waygroup table that contains this path entry + int dist; // Initialise to 0, used by engine for pathfinding Heuristics between waypoints within a set. +} waypoint; + +/** + * The Subset waygroup table which lists the IDs of the waypoints that + * belong to each group as well as any connected groups + */ +typedef struct waygroup +{ + int *neighbours; // Array of neighbouring (connected) waygroup IDs (ending in -1) + int *waypoints; // Array of waypoint IDs (ending in -1) + int dist; // Initialise to 0, used by engine for pathfinding Heuristics between sets +} waygroup; + +/** + * Path for guard to patrol (loop) or get from A to B (linear) + */ +typedef struct PathRecord +{ + int *waypoints; // array of waypoint IDs in path (ending in -1) + char ID; // path ID + char isLoop; // 0x05 Path loops + short len; /*0x06 unused*/ +} PathRecord; + +typedef struct stagesetup +{ + waypoint *pathwaypoints; + waygroup *waypointgroups; + void *intro; + PropDefHeaderRecord *propDefs; + PathRecord *patrolpaths; + AIListRecord *ailists; + PadRecord *pads; + BoundPadRecord *boundpads; + char **padnames; + char **boundpadnames; +} stagesetup; + #define MAX 10 int top = -1; char stack[MAX]; +typedef struct +{ + int id; + int used; + int num0s; +} LLEnum; +LLEnum labels[100]; +LLEnum tags[100]; +LLEnum keys[100]; +LLEnum chrs[100]; +LLEnum pads[1000]; +LLEnum SubIDs[100]; + +char *hasName; + + + /*PUSH FUNCTION*/ -int push(int item) +int push(int item) { if (top == (MAX - 1)) { @@ -1879,7 +4046,36 @@ int sniff() return stack[top]; } } - +int stackFind(int find) +{ + int i; + if (top == -1) + { + return -1; + } + else + { + for (i = top; i >= 0; --i) + { + if (stack[i] == find) return i; + } + } + return -1; +} +int stackFindAndremove(int find) +{ + int i = stackFind(find); + if (i >= 0) + { + for (; i <= top; i++) + { + stack[i] = i < MAX ? stack[i + 1] : 0; + } + top--; + return 1; + } + return 0; +} void displayStack() { int i; @@ -1900,7 +4096,653 @@ void displayStack() printf("\n---------------\n\n"); } +void _AddLabel(int lbl, void *ptr) +{ + int i = 0; + int found = 0; + LLEnum *labels = ptr; + if (lbl == 0) + { + labels[0].num0s++; + return; + } + while (labels[i].id != 0) + { + if (lbl == labels[i].id) + { + found = 1; + labels[i].used++; + } + i++; + } + + if (!found) + { + labels[i].id = lbl; + labels[i].used++; + } +} +void AddLabel(char lbl) +{ + _AddLabel(lbl, labels); +} +void AddTag(char lbl) +{ + _AddLabel(lbl, tags); +} +void AddKey(char lbl) +{ + _AddLabel(lbl, keys); +} +void AddChr(char lbl) +{ + _AddLabel(lbl, chrs); +} +void AddPad(short lbl) +{ + _AddLabel(lbl, pads); +} +void AddSubID(int lbl) +{ + _AddLabel(lbl, SubIDs); +} + +void SortEnums(LLEnum *labels) +{ + int i, j, tempid, tempnum; + + for (i = 0; i < 100; ++i) + { + if (labels[i].id != 0) + { + for (j = i + 1; j < 100; ++j) + { + if (labels[j].id != 0) + { + if (labels[i].id > labels[j].id) + { + tempid = labels[i].id; + tempnum = labels[i].used; + labels[i].id = labels[j].id; + labels[i].used = labels[j].used; + labels[j].id = tempid; + labels[j].used = tempnum; + } + } + } + } + } +} + +void printenum(LLEnum labels[], char *enumname) +{ + int i = 0; + if (labels[0].num0s || labels[i].id) + { + printf(" enum %s\n {\n", enumname); + if (labels[0].num0s) printf(" %s0, //used %d times\n", enumname, labels[0].num0s); + while (labels[i].id != 0) + { + if (!(enumname == "chr" && ((signed char)labels[i].id < 0 && (signed char)labels[i].id > -9))) + { + if ((i > 0 && labels[i - 1].id == labels[i].id - 1)||(i==0 && labels[0].num0s && labels[0].id ==1)) + { + printf(" %s%u, //Used %d times\n", enumname, labels[i].id, labels[i].used); + } + else + { + printf(" %s%u = %u, //Used %d times\n", enumname, labels[i].id, labels[i].id, labels[i].used); + } + } + i++; + } + printf(" };\n"); + } +} + +int getDataSize(FILE *pfile ,void *pointer, int endtag) +{ + int i = 0; + + fseek(pfile, (int)pointer, SEEK_SET); + + // scan for end of Record (NULL or -1) + do + { + fread(&i, 4, 1, pfile); + + } while (i != endtag); + + return (ftell(pfile) ) - (int)pointer; +} + +int chraiitemsize(unsigned char *AIList, int offset) +{ + switch (AIList[offset]) + { + case AI_GotoNext: + return sizeof(AiGotoNextRecord); + case AI_GotoFirst: + return sizeof(AiGotoFirstRecord); + case AI_Label: + return sizeof(AiLabelRecord); + case AI_Yield: + return sizeof(AiYieldRecord); + case AI_EndList: + return sizeof(AiEndListRecord); + case AI_SetChrAiList: + return sizeof(AiSetChrAiListRecord); + case AI_SetReturnAiList: + return sizeof(AiSetReturnAiListRecord); + case AI_Return: + return sizeof(AiReturnRecord); + case AI_Stop: + return sizeof(AiStopRecord); + case AI_Kneel: + return sizeof(AiKneelRecord); + case AI_PlayAnimation: + return sizeof(AiPlayAnimationRecord); + case AI_IFPlayingAnimation: + return sizeof(AiIFPlayingAnimationRecord); + case AI_PointAtBond: + return sizeof(AiPointAtBondRecord); + case AI_LookSurprised: + return sizeof(AiLookSurprisedRecord); + case AI_TRYSidestepping: + return sizeof(AiTRYSidesteppingRecord); + case AI_TRYSideHopping: + return sizeof(AiTRYSideHoppingRecord); + case AI_TRYSideRunning: + return sizeof(AiTRYSideRunningRecord); + case AI_TRYFiringWalk: + return sizeof(AiTRYFiringWalkRecord); + case AI_TRYFiringRun: + return sizeof(AiTRYFiringRunRecord); + case AI_TRYFiringRoll: + return sizeof(AiTRYFiringRollRecord); + case AI_TRYFireOrAimAtTarget: + return sizeof(AiTRYFireOrAimAtTargetRecord); + case AI_TRYFireOrAimAtTargetKneel: + return sizeof(AiTRYFireOrAimAtTargetKneelRecord); + case AI_IFImFiring: + return sizeof(AiIFImFiringRecord); + case AI_IFImFiringAndLockedForward: + return sizeof(AiIFImFiringAndLockedForwardRecord); + case AI_TRYFireOrAimAtTargetUpdate: + return sizeof(AiTRYFireOrAimAtTargetUpdateRecord); + case AI_TRYFacingTarget: + return sizeof(AiTRYFacingTargetRecord); + case AI_HitChrWithItem: + return sizeof(AiHitChrWithItemRecord); + case AI_ChrHitChr: + return sizeof(AiChrHitChrRecord); + case AI_TRYThrowingGrenade: + return sizeof(AiTRYThrowingGrenadeRecord); + case AI_TRYDroppingItem: + return sizeof(AiTRYDroppingItemRecord); + case AI_RunToPad: + return sizeof(AiRunToPadRecord); + case AI_RunToPadPreset: + return sizeof(AiRunToPadPresetRecord); + case AI_WalkToPad: + return sizeof(AiWalkToPadRecord); + case AI_SprintToPad: + return sizeof(AiSprintToPadRecord); + case AI_StartPatrol: + return sizeof(AiStartPatrolRecord); + case AI_Surrender: + return sizeof(AiSurrenderRecord); + case AI_RemoveMe: + return sizeof(AiRemoveMeRecord); + case AI_ChrRemoveInstant: + return sizeof(AiChrRemoveInstantRecord); + case AI_TRYTriggeringAlarmAtPad: + return sizeof(AiTRYTriggeringAlarmAtPadRecord); + case AI_AlarmOn: + return sizeof(AiAlarmOnRecord); + case AI_AlarmOff: + return sizeof(AiAlarmOffRecord); + case AI_TRYRunFromBond: + return sizeof(AiTRYRunFromBondRecord); + case AI_TRYRunToBond: + return sizeof(AiTRYRunToBondRecord); + case AI_TRYWalkToBond: + return sizeof(AiTRYWalkToBondRecord); + case AI_TRYSprintToBond: + return sizeof(AiTRYSprintToBondRecord); + case AI_TRYFindCover: + return sizeof(AiTRYFindCoverRecord); + case AI_TRYRunToChr: + return sizeof(AiTRYRunToChrRecord); + case AI_TRYWalkToChr: + return sizeof(AiTRYWalkToChrRecord); + case AI_TRYSprintToChr: + return sizeof(AiTRYSprintToChrRecord); + case AI_IFImOnPatrolOrStopped: + return sizeof(AiIFImOnPatrolOrStoppedRecord); + case AI_IFChrDyingOrDead: + return sizeof(AiIFChrDyingOrDeadRecord); + case AI_IFChrDoesNotExist: + return sizeof(AiIFChrDoesNotExistRecord); + case AI_IFISeeBond: + return sizeof(AiIFISeeBondRecord); + case AI_SetNewRandom: + return sizeof(AiSetNewRandomRecord); + case AI_IFRandomLessThan: + return sizeof(AiIFRandomLessThanRecord); + case AI_IFRandomGreaterThan: + return sizeof(AiIFRandomGreaterThanRecord); + case AI_IFICanHearAlarm: + return sizeof(AiIFICanHearAlarmRecord); + case AI_IFAlarmIsOn: + return sizeof(AiIFAlarmIsOnRecord); + case AI_IFGasIsLeaking: + return sizeof(AiIFGasIsLeakingRecord); + case AI_IFIHeardBond: + return sizeof(AiIFIHeardBondRecord); + case AI_IFISeeSomeoneShot: + return sizeof(AiIFISeeSomeoneShotRecord); + case AI_IFISeeSomeoneDie: + return sizeof(AiIFISeeSomeoneDieRecord); + case AI_IFICouldSeeBond: + return sizeof(AiIFICouldSeeBondRecord); + case AI_IFICouldSeeBondsStan: + return sizeof(AiIFICouldSeeBondsStanRecord); + case AI_IFIWasShotRecently: + return sizeof(AiIFIWasShotRecentlyRecord); + case AI_IFIHeardBondRecently: + return sizeof(AiIFIHeardBondRecentlyRecord); + case AI_IFImInRoomWithChr: + return sizeof(AiIFImInRoomWithChrRecord); + case AI_IFIveNotBeenSeen: + return sizeof(AiIFIveNotBeenSeenRecord); + case AI_IFImOnScreen: + return sizeof(AiIFImOnScreenRecord); + case AI_IFMyRoomIsOnScreen: + return sizeof(AiIFMyRoomIsOnScreenRecord); + case AI_IFRoomWithPadIsOnScreen: + return sizeof(AiIFRoomWithPadIsOnScreenRecord); + case AI_IFImTargetedByBond: + return sizeof(AiIFImTargetedByBondRecord); + case AI_IFBondMissedMe: + return sizeof(AiIFBondMissedMeRecord); + case AI_IFMyAngleToBondLessThan: + return sizeof(AiIFMyAngleToBondLessThanRecord); + case AI_IFMyAngleToBondGreaterThan: + return sizeof(AiIFMyAngleToBondGreaterThanRecord); + case AI_IFMyAngleFromBondLessThan: + return sizeof(AiIFMyAngleFromBondLessThanRecord); + case AI_IFMyAngleFromBondGreaterThan: + return sizeof(AiIFMyAngleFromBondGreaterThanRecord); + case AI_IFMyDistanceToBondLessThanDecimeter: + return sizeof(AiIFMyDistanceToBondLessThanDecimeterRecord); + case AI_IFMyDistanceToBondGreaterThanDecimeter: + return sizeof(AiIFMyDistanceToBondGreaterThanDecimeterRecord); + case AI_IFChrDistanceToPadLessThanDecimeter: + return sizeof(AiIFChrDistanceToPadLessThanDecimeterRecord); + case AI_IFChrDistanceToPadGreaterThanDecimeter: + return sizeof(AiIFChrDistanceToPadGreaterThanDecimeterRecord); + case AI_IFMyDistanceToChrLessThanDecimeter: + return sizeof(AiIFMyDistanceToChrLessThanDecimeterRecord); + case AI_IFMyDistanceToChrGreaterThanDecimeter: + return sizeof(AiIFMyDistanceToChrGreaterThanDecimeterRecord); + case AI_TRYSettingMyPresetToChrWithinDistanceDecimeter: + return sizeof(AiTRYSettingMyPresetToChrWithinDistanceDecimeterRecord); + case AI_IFBondDistanceToPadLessThanDecimeter: + return sizeof(AiIFBondDistanceToPadLessThanDecimeterRecord); + case AI_IFBondDistanceToPadGreaterThanDecimeter: + return sizeof(AiIFBondDistanceToPadGreaterThanDecimeterRecord); + case AI_IFChrInRoomWithPad: + return sizeof(AiIFChrInRoomWithPadRecord); + case AI_IFBondInRoomWithPad: + return sizeof(AiIFBondInRoomWithPadRecord); + case AI_IFBondCollectedObject: + return sizeof(AiIFBondCollectedObjectRecord); + case AI_IFKeyDropped: + return sizeof(AiIFKeyDroppedRecord); + case AI_IFItemIsAttachedToObject: + return sizeof(AiIFItemIsAttachedToObjectRecord); + case AI_IFBondHasItemEquipped: + return sizeof(AiIFBondHasItemEquippedRecord); + case AI_IFObjectExists: + return sizeof(AiIFObjectExistsRecord); + case AI_IFObjectNotDestroyed: + return sizeof(AiIFObjectNotDestroyedRecord); + case AI_IFObjectWasActivated: + return sizeof(AiIFObjectWasActivatedRecord); + case AI_IFBondUsedGadgetOnObject: + return sizeof(AiIFBondUsedGadgetOnObjectRecord); + case AI_ActivateObject: + return sizeof(AiActivateObjectRecord); + case AI_DestroyObject: + return sizeof(AiDestroyObjectRecord); + case AI_DropObject: + return sizeof(AiDropObjectRecord); + case AI_ChrDropAllConcealedItems: + return sizeof(AiChrDropAllConcealedItemsRecord); + case AI_ChrDropAllHeldItems: + return sizeof(AiChrDropAllHeldItemsRecord); + case AI_BondCollectObject: + return sizeof(AiBondCollectObjectRecord); + case AI_ChrEquipObject: + return sizeof(AiChrEquipObjectRecord); + case AI_MoveObject: + return sizeof(AiMoveObjectRecord); + case AI_DoorOpen: + return sizeof(AiDoorOpenRecord); + case AI_DoorClose: + return sizeof(AiDoorCloseRecord); + case AI_IFDoorStateEqual: + return sizeof(AiIFDoorStateEqualRecord); + case AI_IFDoorHasBeenOpenedBefore: + return sizeof(AiIFDoorHasBeenOpenedBeforeRecord); + case AI_DoorSetLock: + return sizeof(AiDoorSetLockRecord); + case AI_DoorUnsetLock: + return sizeof(AiDoorUnsetLockRecord); + case AI_IFDoorLockEqual: + return sizeof(AiIFDoorLockEqualRecord); + case AI_IFObjectiveNumComplete: + return sizeof(AiIFObjectiveNumCompleteRecord); + case AI_TRYUnknown6e: + return sizeof(AiTRYUnknown6eRecord); + case AI_TRYUnknown6f: + return sizeof(AiTRYUnknown6fRecord); + case AI_IFGameDifficultyLessThan: + return sizeof(AiIFGameDifficultyLessThanRecord); + case AI_IFGameDifficultyGreaterThan: + return sizeof(AiIFGameDifficultyGreaterThanRecord); + case AI_IFMissionTimeLessThan: + return sizeof(AiIFMissionTimeLessThanRecord); + case AI_IFMissionTimeGreaterThan: + return sizeof(AiIFMissionTimeGreaterThanRecord); + case AI_IFSystemPowerTimeLessThan: + return sizeof(AiIFSystemPowerTimeLessThanRecord); + case AI_IFSystemPowerTimeGreaterThan: + return sizeof(AiIFSystemPowerTimeGreaterThanRecord); + case AI_IFLevelIdLessThan: + return sizeof(AiIFLevelIdLessThanRecord); + case AI_IFLevelIdGreaterThan: + return sizeof(AiIFLevelIdGreaterThanRecord); + case AI_IFMyNumArghsLessThan: + return sizeof(AiIFMyNumArghsLessThanRecord); + case AI_IFMyNumArghsGreaterThan: + return sizeof(AiIFMyNumArghsGreaterThanRecord); + case AI_IFMyNumCloseArghsLessThan: + return sizeof(AiIFMyNumCloseArghsLessThanRecord); + case AI_IFMyNumCloseArghsGreaterThan: + return sizeof(AiIFMyNumCloseArghsGreaterThanRecord); + case AI_IFChrHealthLessThan: + return sizeof(AiIFChrHealthLessThanRecord); + case AI_IFChrHealthGreaterThan: + return sizeof(AiIFChrHealthGreaterThanRecord); + case AI_IFChrWasDamagedSinceLastCheck: + return sizeof(AiIFChrWasDamagedSinceLastCheckRecord); + case AI_IFBondHealthLessThan: + return sizeof(AiIFBondHealthLessThanRecord); + case AI_IFBondHealthGreaterThan: + return sizeof(AiIFBondHealthGreaterThanRecord); + case AI_SetMyMorale: + return sizeof(AiSetMyMoraleRecord); + case AI_AddToMyMorale: + return sizeof(AiAddToMyMoraleRecord); + case AI_SubtractFromMyMorale: + return sizeof(AiSubtractFromMyMoraleRecord); + case AI_IFMyMoraleLessThan: + return sizeof(AiIFMyMoraleLessThanRecord); + case AI_IFMyMoraleLessThanRandom: + return sizeof(AiIFMyMoraleLessThanRandomRecord); + case AI_SetMyAlertness: + return sizeof(AiSetMyAlertnessRecord); + case AI_AddToMyAlertness: + return sizeof(AiAddToMyAlertnessRecord); + case AI_SubtractFromMyAlertness: + return sizeof(AiSubtractFromMyAlertnessRecord); + case AI_IFMyAlertnessLessThan: + return sizeof(AiIFMyAlertnessLessThanRecord); + case AI_IFMyAlertnessLessThanRandom: + return sizeof(AiIFMyAlertnessLessThanRandomRecord); + case AI_SetMyHearingScale: + return sizeof(AiSetMyHearingScaleRecord); + case AI_SetMyVisionRange: + return sizeof(AiSetMyVisionRangeRecord); + case AI_SetMyGrenadeProbability: + return sizeof(AiSetMyGrenadeProbabilityRecord); + case AI_SetMyChrNum: + return sizeof(AiSetMyChrNumRecord); + case AI_SetMyHealthTotal: + return sizeof(AiSetMyHealthTotalRecord); + case AI_SetMyArmour: + return sizeof(AiSetMyArmourRecord); + case AI_SetMySpeedRating: + return sizeof(AiSetMySpeedRatingRecord); + case AI_SetMyArghRating: + return sizeof(AiSetMyArghRatingRecord); + case AI_SetMyAccuracyRating: + return sizeof(AiSetMyAccuracyRatingRecord); + case AI_SetMyFlags2: + return sizeof(AiSetMyFlags2Record); + case AI_UnsetMyFlags2: + return sizeof(AiUnsetMyFlags2Record); + case AI_IFMyFlags2Has: + return sizeof(AiIFMyFlags2HasRecord); + case AI_SetChrBitfield: + return sizeof(AiSetChrBitfieldRecord); + case AI_UnsetChrBitfield: + return sizeof(AiUnsetChrBitfieldRecord); + case AI_IFChrBitfieldHas: + return sizeof(AiIFChrBitfieldHasRecord); + case AI_SetObjectiveBitfield: + return sizeof(AiSetObjectiveBitfieldRecord); + case AI_UnsetObjectiveBitfield: + return sizeof(AiUnsetObjectiveBitfieldRecord); + case AI_IFObjectiveBitfieldHas: + return sizeof(AiIFObjectiveBitfieldHasRecord); + case AI_SetMychrflags: + return sizeof(AiSetMychrflagsRecord); + case AI_UnsetMychrflags: + return sizeof(AiUnsetMychrflagsRecord); + case AI_IFMychrflagsHas: + return sizeof(AiIFMychrflagsHasRecord); + case AI_SetChrchrflags: + return sizeof(AiSetChrchrflagsRecord); + case AI_UnsetChrchrflags: + return sizeof(AiUnsetChrchrflagsRecord); + case AI_IFChrchrflagsHas: + return sizeof(AiIFChrchrflagsHasRecord); + case AI_SetObjectFlags: + return sizeof(AiSetObjectFlagsRecord); + case AI_UnsetObjectFlags: + return sizeof(AiUnsetObjectFlagsRecord); + case AI_IFObjectFlagsHas: + return sizeof(AiIFObjectFlagsHasRecord); + case AI_SetObjectFlags2: + return sizeof(AiSetObjectFlags2Record); + case AI_UnsetObjectFlags2: + return sizeof(AiUnsetObjectFlags2Record); + case AI_IFObjectFlags2Has: + return sizeof(AiIFObjectFlags2HasRecord); + case AI_SetMyChrPreset: + return sizeof(AiSetMyChrPresetRecord); + case AI_SetChrChrPreset: + return sizeof(AiSetChrChrPresetRecord); + case AI_SetMyPadPreset: + return sizeof(AiSetMyPadPresetRecord); + case AI_SetChrPadPreset: + return sizeof(AiSetChrPadPresetRecord); + case AI_MyTimerStart: + return sizeof(AiMyTimerStartRecord); + case AI_MyTimerReset: + return sizeof(AiMyTimerResetRecord); + case AI_MyTimerPause: + return sizeof(AiMyTimerPauseRecord); + case AI_MyTimerResume: + return sizeof(AiMyTimerResumeRecord); + case AI_IFMyTimerIsNotRunning: + return sizeof(AiIFMyTimerIsNotRunningRecord); + case AI_IFMyTimerLessThanTicks: + return sizeof(AiIFMyTimerLessThanTicksRecord); + case AI_IFMyTimerGreaterThanTicks: + return sizeof(AiIFMyTimerGreaterThanTicksRecord); + case AI_HudCountdownShow: + return sizeof(AiHudCountdownShowRecord); + case AI_HudCountdownHide: + return sizeof(AiHudCountdownHideRecord); + case AI_HudCountdownSet: + return sizeof(AiHudCountdownSetRecord); + case AI_HudCountdownStop: + return sizeof(AiHudCountdownStopRecord); + case AI_HudCountdownStart: + return sizeof(AiHudCountdownStartRecord); + case AI_IFHudCountdownIsNotRunning: + return sizeof(AiIFHudCountdownIsNotRunningRecord); + case AI_IFHudCountdownLessThan: + return sizeof(AiIFHudCountdownLessThanRecord); + case AI_IFHudCountdownGreaterThan: + return sizeof(AiIFHudCountdownGreaterThanRecord); + case AI_TRYSpawningChrAtPad: + return sizeof(AiTRYSpawningChrAtPadRecord); + case AI_TRYSpawningChrNextToChr: + return sizeof(AiTRYSpawningChrNextToChrRecord); + case AI_TRYGiveMeItem: + return sizeof(AiTRYGiveMeItemRecord); + case AI_TRYGiveMeHat: + return sizeof(AiTRYGiveMeHatRecord); + case AI_TRYCloningChr: + return sizeof(AiTRYCloningChrRecord); + case AI_TextPrintBottom: + return sizeof(AiTextPrintBottomRecord); + case AI_TextPrintTop: + return sizeof(AiTextPrintTopRecord); + case AI_SfxPlay: + return sizeof(AiSfxPlayRecord); + case AI_SfxEmitFromObject: + return sizeof(AiSfxEmitFromObjectRecord); + case AI_SfxEmitFromPad: + return sizeof(AiSfxEmitFromPadRecord); + case AI_SfxSetChannelVolume: + return sizeof(AiSfxSetChannelVolumeRecord); + case AI_SfxFadeChannelVolume: + return sizeof(AiSfxFadeChannelVolumeRecord); + case AI_SfxStopChannel: + return sizeof(AiSfxStopChannelRecord); + case AI_IFSfxChannelVolumeLessThan: + return sizeof(AiIFSfxChannelVolumeLessThanRecord); + case AI_VehicleStartPath: + return sizeof(AiVehicleStartPathRecord); + case AI_VehicleSpeed: + return sizeof(AiVehicleSpeedRecord); + case AI_AircraftRotorSpeed: + return sizeof(AiAircraftRotorSpeedRecord); + case AI_IFCameraIsInIntro: + return sizeof(AiIFCameraIsInIntroRecord); + case AI_IFCameraIsInBondSwirl: + return sizeof(AiIFCameraIsInBondSwirlRecord); + case AI_TvChangeScreenBank: + return sizeof(AiTvChangeScreenBankRecord); + case AI_IFBondInTank: + return sizeof(AiIFBondInTankRecord); + case AI_EndLevel: + return sizeof(AiEndLevelRecord); + case AI_CameraReturnToBond: + return sizeof(AiCameraReturnToBondRecord); + case AI_CameraLookAtBondFromPad: + return sizeof(AiCameraLookAtBondFromPadRecord); + case AI_CameraSwitch: + return sizeof(AiCameraSwitchRecord); + case AI_IFBondYPosLessThan: + return sizeof(AiIFBondYPosLessThanRecord); + case AI_BondDisableControl: + return sizeof(AiBondDisableControlRecord); + case AI_BondEnableControl: + return sizeof(AiBondEnableControlRecord); + case AI_TRYTeleportingChrToPad: + return sizeof(AiTRYTeleportingChrToPadRecord); + case AI_ScreenFadeToBlack: + return sizeof(AiScreenFadeToBlackRecord); + case AI_ScreenFadeFromBlack: + return sizeof(AiScreenFadeFromBlackRecord); + case AI_IFScreenFadeCompleted: + return sizeof(AiIFScreenFadeCompletedRecord); + case AI_HideAllChrs: + return sizeof(AiHideAllChrsRecord); + case AI_ShowAllChrs: + return sizeof(AiShowAllChrsRecord); + case AI_DoorOpenInstant: + return sizeof(AiDoorOpenInstantRecord); + case AI_ChrRemoveItemInHand: + return sizeof(AiChrRemoveItemInHandRecord); + case AI_IfNumberOfActivePlayersLessThan: + return sizeof(AiIfNumberOfActivePlayersLessThanRecord); + case AI_IFBondItemTotalAmmoLessThan: + return sizeof(AiIFBondItemTotalAmmoLessThanRecord); + case AI_BondEquipItem: + return sizeof(AiBondEquipItemRecord); + case AI_BondEquipItemCinema: + return sizeof(AiBondEquipItemCinemaRecord); + case AI_BondSetLockedVelocity: + return sizeof(AiBondSetLockedVelocityRecord); + case AI_IFObjectInRoomWithPad: + return sizeof(AiIFObjectInRoomWithPadRecord); + case AI_SwitchSky: + return sizeof(AiSwitchSkyRecord); + case AI_TriggerFadeAndExitLevelOnButtonPress: + return sizeof(AiTriggerFadeAndExitLevelOnButtonPressRecord); + case AI_IFBondIsDead: + return sizeof(AiIFBondIsDeadRecord); + case AI_BondDisableDamageAndPickups: + return sizeof(AiBondDisableDamageAndPickupsRecord); + case AI_BondHideWeapons: + return sizeof(AiBondHideWeaponsRecord); + case AI_CameraOrbitPad: + return sizeof(AiCameraOrbitPadRecord); + case AI_CreditsRoll: + return sizeof(AiCreditsRollRecord); + case AI_IFCreditsHasCompleted: + return sizeof(AiIFCreditsHasCompletedRecord); + case AI_IFObjectiveAllCompleted: + return sizeof(AiIFObjectiveAllCompletedRecord); + case AI_IFFolderActorIsEqual: + return sizeof(AiIFFolderActorIsEqualRecord); + case AI_IFBondDamageAndPickupsDisabled: + return sizeof(AiIFBondDamageAndPickupsDisabledRecord); + case AI_MusicPlaySlot: + return sizeof(AiMusicPlaySlotRecord); + case AI_MusicStopSlot: + return sizeof(AiMusicStopSlotRecord); + case AI_TriggerExplosionsAroundBond: + return sizeof(AiTriggerExplosionsAroundBondRecord); + case AI_IFKilledCiviliansGreaterThan: + return sizeof(AiIFKilledCiviliansGreaterThanRecord); + case AI_IFChrWasShotSinceLastCheck: + return sizeof(AiIFChrWasShotSinceLastCheckRecord); + case AI_BondKilledInAction: + return sizeof(AiBondKilledInActionRecord); + case AI_RaiseArms: + return sizeof(AiRaiseArmsRecord); + case AI_GasLeakAndFadeFog: + return sizeof(AiGasLeakAndFadeFogRecord); + case AI_ObjectRocketLaunch: + return sizeof(AiObjectRocketLaunchRecord); + case AI_PRINT: + { + int pos = offset + 1; + while (AIList[pos] != 0) + { + ++pos; + } + return (pos - offset) + 1; + } + default: + printf("chraiitemsize: unknown type %d!\n", AIList[offset]); + printf("%d,%d,%d,[%d],%d,%d,%d\n", AIList[offset - 3], AIList[offset - 2], AIList[offset - 1], AIList[offset ], AIList[offset +1], AIList[offset + 2], AIList[offset +3]); + return 1; + } +} + +#define EraseCommand printf("\r%*s\r", (int)strlen(AI_CMD_ToString[AiList[Offset]]) + ((int)strlen((char *)tabs) + 1), "") +//#define NOMACROS /** * @brief Parse AI list and print out C Macros * @param AiList: Bytestream for ai @@ -1910,112 +4752,168 @@ void ai(unsigned char *AiList, short ID) { for (int Offset = 0;;) { - char tabs[MAX + 1]; - for (int k = 0; k < MAX; k++) + int hasClosingBrace = FALSE; + int hasLabel = FALSE; + int hasMacro = FALSE; + int tabs[MAX + 1]; // 4 char wide string + int i; + for ( i = 0; i < MAX; i++) { - tabs[k] = 0; + tabs[i] = 0; } - for (int k = 0; k < top + 2 && k < MAX; k++) + for ( i = 0; i < top + 2 && i < MAX; i++) { - tabs[k] = '\t'; + tabs[i] = 0x20202020; // 4 spaces } + printf("%s%s(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]); + switch (AiList[Offset]) { - case AI_GotoNext: // BYTE(LABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n\n"); - Offset += AI_GotoNext_LENGTH; - break; - } case AI_GotoFirst: // BYTE(LABEL) { - if (AiList[Offset + 1] == sniff()) + AiGotoFirstRecord *ai = &AiList+Offset; + int lbl = AiList[Offset + 1]; + #ifndef NOMACROS + if (lbl == sniff()) //either contnue or loop { - pop(); - for (int k = top + 2; k < MAX; k++) + int found = 0; + for (i = Offset; AiList[i] != AI_EndList; i += chraiitemsize(AiList, i)) { - tabs[k] = 0; + if (AiList[i] == AI_GotoFirst && AiList[i+1] == lbl) found++; } - printf("%sLOOP(", tabs); - } - else - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - } - printf("lbl%d", AiList[Offset + 1]); - printf(")\n\n"); - Offset += AI_GotoFirst_LENGTH; + EraseCommand; + if (found ==1) + { + pop(); + for ( i = top + 2; i < MAX; i++) + { + tabs[i] = 0; + } + printf("%sLOOP(", (char *)tabs); + } + else + { + printf("%sCONTINUE(", (char *)tabs); + } + } + #endif + printf("lbl%d)\n\n",lbl); + AddLabel(lbl); + hasClosingBrace = TRUE; break; } case AI_Label: // BYTE(ID) { - if (AiList[Offset + 2] == AI_Yield) + AiLabelRecord *ai = &AiList+Offset; + + int lbl = AiList[Offset + 1]; +#ifndef NOMACROS + Offset += AI_Label_LENGTH; + hasMacro = TRUE; + if (AiList[Offset] == AI_Yield) { - if (AiList[Offset + 3] != AI_GotoFirst) + int hasLoop = FALSE; + Offset += AI_Yield_LENGTH; + for (i = Offset; AiList[i] != AI_EndList; i += chraiitemsize(AiList, i)) { - push(AiList[Offset + 1]); - printf("\n%sDO(", tabs); - printf("lbl%d", AiList[Offset + 1]); - Offset += AI_Yield_LENGTH; + if (AiList[i] == AI_GotoFirst && AiList[i + 1] == lbl) hasLoop = TRUE; + } + if (hasLoop) + { + EraseCommand; + if (AiList[Offset] != AI_GotoFirst) + { + push(lbl); + + printf("\n%sDO(", (char *)tabs); + } + else + { + printf("\n%sYIELD_FOREVER( lbl%d )\n\n", (char *)tabs, lbl); + Offset += AI_GotoFirst_LENGTH; + hasClosingBrace = TRUE; + } } else { - printf("\n%sYIELD_FOREVER(", tabs); - printf("lbl%d", AiList[Offset + 1]); - Offset += AI_Yield_LENGTH + AI_GotoFirst_LENGTH; + Offset -= AI_Yield_LENGTH; } } - else - { - printf("\n%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - } - printf(")\n"); - Offset += AI_Label_LENGTH; - break; - } - case AI_Yield: // /*NONE*/ - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_Yield_LENGTH; + #endif + + if(!hasClosingBrace) printf(" lbl%d ", lbl); + AddLabel(lbl); break; } + case AI_EndList /*canonical name*/: // /*NONE*/ { - printf("\n%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiEndListRecord *ai = &AiList+Offset; printf(")\n\n"); + return; } case AI_SetChrAiList: // BYTE(CHR_NUM), DBYTE(AI_LIST_ID) { - unsigned short AI_LIST_ID = CharArrayTo16(AiList, (Offset + 1 + 1)); /* This is the only way to match despite assetrs below */ + AiSetChrAiListRecord *ai = &AiList+Offset; + unsigned short AI_LIST_ID = CharArrayTo16(AiList, (Offset + 1 + 1)); signed char CHR_NUM = AiList[Offset + 1]; - if (CHR_NUM == CHR_SELF) + if (CHR_NUM < 0 && CHR_NUM > -10) { - if (AiList[Offset - AI_SetReturnAiList_LENGTH] == AI_SetReturnAiList && - CharArrayTo16(AiList, Offset + 1 - AI_SetReturnAiList_LENGTH) == ID) + EraseCommand; + + switch (CHR_NUM) { - printf("%sCALL(", tabs); + case CHR_SELF: + { + int found = 0; + i = Offset; + while (i > 0) + { + if (AiList[i] == AI_SetReturnAiList && + CharArrayTo16(AiList, i + 1) == ID) + { + found = 1; + if (i < Offset - AI_SetReturnAiList_LENGTH) printf("// tentative, Please confirm\n"); + break; + } + i --; + } + if (found) + { + printf("%s%s(", (char *)tabs, "CALL"); + } + else + { + printf("%s%s(", (char *)tabs, "JumpTo"); + } + break; + } + case CHR_BOND_CINEMA: + { + printf("%s%s(", (char *)tabs, "SetBondsAiList"); + break; + } + case CHR_CLONE: + { + printf("%s%s(", (char *)tabs, "SetMyClonesAiList"); + break; + } } - else - { - printf("%sJumpTo(", tabs); - } - } - else if (CHR_NUM == CHR_BOND_CINEMA) - { - printf("%sSetBondsAiList(", tabs); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,", CHR_NUM); + if (CHR_NUM < 0 && CHR_NUM > -10) + { + printf("%s,", CHR_ToString[abs(CHR_NUM)]); + } + else + { + printf("chr%hd,", CHR_NUM); + } } if (isGlobalAIListID(AI_LIST_ID)) @@ -2024,429 +4922,417 @@ void ai(unsigned char *AiList, short ID) } else if (isBGAIListID(AI_LIST_ID)) { - printf("setBGAIListID(%d)", getBGAIListID(AI_LIST_ID)); + printf("bgai_%hd", getBGAIListID(AI_LIST_ID)); } else { - printf("setChrAIListID(%d)", getChrAIListID(AI_LIST_ID)); + printf("chrai_%hd", getChrAIListID(AI_LIST_ID)); } - printf(")\n"); - Offset += AI_SetChrAiList_LENGTH; + + if (hasClosingBrace) printf(")\n\n"); + break; } case AI_SetReturnAiList: // DBYTE(AI_LIST_ID) { + AiSetReturnAiListRecord *ai = &AiList+Offset; unsigned short AI_LIST_ID = CharArrayTo16(AiList, (Offset + 1)); if (!(AiList[Offset + AI_SetReturnAiList_LENGTH] == AI_SetChrAiList && AI_LIST_ID == ID && (signed char)AiList[Offset + AI_SetReturnAiList_LENGTH + 1] == CHR_SELF)) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AI_LIST_ID); - printf(")\n"); + if (isGlobalAIListID(AI_LIST_ID)) + { + printf("%s", GAILIST_ToString[AI_LIST_ID]); + } + else if (isBGAIListID(AI_LIST_ID)) + { + printf("bgai_%hd", getBGAIListID(AI_LIST_ID)); + } + else + { + printf("chrai_%hd", getChrAIListID(AI_LIST_ID)); + } } - Offset += AI_SetReturnAiList_LENGTH; + else + { + EraseCommand; // CALL should already be printed + hasClosingBrace = TRUE; + } + break; } case AI_Return: // /*NONE*/ { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_Return_LENGTH; - ; - break; - } - case AI_Stop: // /*NONE*/ - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_Stop_LENGTH; - break; - } - case AI_Kneel: // /*NONE*/ - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_Kneel_LENGTH; + AiReturnRecord *ai = &AiList+Offset; + AddSubID(ID); break; } + case AI_PlayAnimation: // DBYTE(ANIMATION_ID), DBYTE(START_TIME30),DBYTE(END_TIME30), BYTE(BITFIELD), BYTE(INTERPOL_TIME60) { - int startframe, anim_id, zero, endframe; - + AiPlayAnimationRecord *ai = &AiList+Offset; + int anim_id, zero ; + short startframe, endframe; anim_id = CharArrayTo16(AiList, Offset + 1 + 0); startframe = CharArrayTo16(AiList, Offset + 1 + 2); endframe = CharArrayTo16(AiList, Offset + 1 + 4); if (startframe == -1 && endframe == -1 && AiList[Offset + 1 + 6] == 6 && AiList[Offset + 1 + 7] == 16) { - printf("%sPlayAnimationSimple(", tabs); - printf("%d", anim_id); + EraseCommand; + printf("%s%s(", (char *)tabs, "PlayAnimationSimple"); + printf("%s", ANIMATIONS_ToString[anim_id]); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,%d,%d,%d", anim_id, startframe, endframe, AiList[Offset + 1 + 6], AiList[Offset + 1 + 7]); + printf("%s,%d,%d,0x%02X,%d", ANIMATIONS_ToString[anim_id], startframe, endframe, AiList[Offset + 1 + 6], AiList[Offset + 1 + 7]); } - printf(")\n"); - Offset += AI_PlayAnimation_LENGTH; - break; - } - case AI_IFPlayingAnimation: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFPlayingAnimation_LENGTH; - break; - } - case AI_PointAtBond: // /*NONE*/ - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_PointAtBond_LENGTH; - break; - } - case AI_LookSurprised: // /*NONE*/ - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_LookSurprised_LENGTH; - break; - } - case AI_IFImOnPatrolOrStopped: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFImOnPatrolOrStopped_LENGTH; + break; } case AI_IFChrDyingOrDead: // BYTE(CHR_NUM), BYTE(GOTOLABEL) { + AiIFChrDyingOrDeadRecord *ai = &AiList+Offset; signed char chr = AiList[Offset + 1]; if (chr == CHR_SELF) { - printf("%sIFImDyingOrDead(", tabs); + EraseCommand; + printf("%s%s(", (char *)tabs, "IFImDyingOrDead"); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,", chr); + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } } - printf("lbl%d", AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFChrDyingOrDead_LENGTH; + + hasLabel = TRUE; + break; } case AI_IFChrDoesNotExist: // BYTE(CHR_NUM), BYTE(GOTOLABEL) { + AiIFChrDoesNotExistRecord *ai = &AiList+Offset; signed char chr = AiList[Offset + 1]; - if (chr == CHR_SELF) + switch (chr) { - printf("%sIFIDoNotExist(", tabs); + case CHR_SELF: + { + EraseCommand; + printf("%s%s(", (char *)tabs, "IFIDoNotExist"); + break; + } + case CHR_CLONE: + { + EraseCommand; + printf("%s%s(", (char *)tabs, "IFMyCloneDoesNotExist"); + break; + } + default: + { + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } + } } - else - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,", chr); - } - printf("lbl%d", AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFChrDoesNotExist_LENGTH; - break; - } - case AI_IFISeeBond: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFISeeBond_LENGTH; - break; - } - case AI_TRYSidestepping: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYSidestepping_LENGTH; - break; - } - case AI_TRYSideHopping: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYSideHopping_LENGTH; + hasLabel = TRUE; break; } - case AI_TRYSideRunning: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYSideRunning_LENGTH; - break; - } - case AI_TRYFiringWalk: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYFiringWalk_LENGTH; - break; - } - case AI_TRYFiringRun: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYFiringRun_LENGTH; - break; - } - case AI_TRYFiringRoll: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYFiringRoll_LENGTH; - break; - } + case AI_TRYFireOrAimAtTarget: // DBYTE(BITFIELD), DBYTE(TARGET), BYTE(GOTOLABEL) { + AiTRYFireOrAimAtTargetRecord *ai = &AiList+Offset; int targetid = CharArrayTo16(AiList, Offset + 1 + 2); int targettype = CharArrayTo16(AiList, Offset + 1 + 0); - if (targettype == 1) + if (targettype == TARGET_BOND) { - printf("%sTRYFireAtBond(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + printf("%s%s(", (char *)tabs, "TRYFireAtBond"); } - else if (targettype == 4) + else if (targettype == TARGET_PAD) { - printf("%sTRYFireAtPad(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + printf("%s%s(", (char *)tabs, "TRYFireAtPad"); + printf("%d", targetid); } - else if (targettype == 33) + else if (targettype == TARGET_AIM_ONLY | TARGET_BOND) { - printf("%sTRYAimAtBond(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + printf("%s%s(", (char *)tabs, "TRYAimAtBond"); } - else if (targettype == 36) + else if (targettype == TARGET_AIM_ONLY | TARGET_PAD) { - printf("%sTRYAimAtPad(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + printf("%s%s(", (char *)tabs, "TRYAimAtPad"); + printf("%d", targetid); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,lbl%d", targettype, targetid, AiList[Offset + 5]); + printf("%04X,", targettype); + printf("chr%d", targetid); + AddChr(targetid); } - printf(")\n"); - Offset += AI_TRYFireOrAimAtTarget_LENGTH; + hasLabel = TRUE; break; } case AI_TRYFireOrAimAtTargetKneel: // DBYTE(BITFIELD), DBYTE(TARGET), BYTE(GOTOLABEL) { + AiTRYFireOrAimAtTargetKneelRecord *ai = &AiList+Offset; int targetid = CharArrayTo16(AiList, Offset + 1 + 2); int targettype = CharArrayTo16(AiList, Offset + 1 + 0); - if (targettype == 1) + if (targettype == TARGET_BOND) { - printf("%sTRYFireAtBondKneeling(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYFireAtBondKneeling"); } - else if (targettype == 4) + else if (targettype == TARGET_PAD) { - printf("%sTRYFireAtPadKneeling(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYFireAtPadKneeling"); + printf("%d", targetid); } - else if (targettype == 33) + else if (targettype == TARGET_AIM_ONLY | TARGET_BOND) { - printf("%sTRYAimAtBondKneeling(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYAimAtBondKneeling"); } - else if (targettype == 36) + else if (targettype == TARGET_AIM_ONLY | TARGET_PAD) { - printf("%sTRYAimAtPadKneeling(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYAimAtPadKneeling"); + printf("%d", targetid); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,lbl%d", targettype, targetid, AiList[Offset + 5]); + printf("%04X,", targettype); + printf("chr%d", targetid); + AddChr(targetid); } - printf(")\n"); - Offset += AI_TRYFireOrAimAtTargetKneel_LENGTH; - break; - } - case AI_IFImFiringAndLockedForward: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFImFiringAndLockedForward_LENGTH; - break; - } - case AI_IFImFiring: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFImFiring_LENGTH; + + hasLabel = TRUE; break; } + case AI_TRYFireOrAimAtTargetUpdate: // DBYTE(BITFIELD), DBYTE(TARGET), BYTE(GOTOLABEL) { + AiTRYFireOrAimAtTargetUpdateRecord *ai = &AiList+Offset; int targetid = CharArrayTo16(AiList, Offset + 1 + 2); int targettype = CharArrayTo16(AiList, Offset + 1 + 0); - if (targettype == 1) + if (targettype == TARGET_BOND) { - printf("%sTRYFireAtBondUpdate(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYFireAtBondUpdate"); } - else if (targettype == 4) + else if (targettype == TARGET_PAD) { - printf("%sTRYFireAtPadUpdate(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYFireAtPadUpdate"); + printf("%d", targetid); } - else if (targettype == 33) + else if (targettype == TARGET_AIM_ONLY | TARGET_BOND) { - printf("%sTRYAimAtBondUpdate(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYAimAtBondUpdate"); } - else if (targettype == 36) + else if (targettype == TARGET_AIM_ONLY | TARGET_PAD) { - printf("%sTRYAimAtPadUpdate(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYAimAtPadUpdate"); + printf("%d", targetid); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,lbl%d", targettype, targetid, AiList[Offset + 5]); + printf("%04X,", targettype); + printf("chr%d", targetid); + AddChr(targetid); } - printf(")\n"); - Offset += AI_TRYFireOrAimAtTargetUpdate_LENGTH; + + hasLabel = TRUE; + break; } case AI_TRYFacingTarget: // DBYTE(BITFIELD),DBYTE(TARGET),BYTE(GOTOLABEL) { + AiTRYFacingTargetRecord *ai = &AiList+Offset; int targetid = CharArrayTo16(AiList, Offset + 1 + 2); int targettype = CharArrayTo16(AiList, Offset + 1 + 0); - if (targettype == 1) + if (targettype == TARGET_BOND) { - printf("%sTRYFacingBond(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYFacingBond"); } - else if (targettype == 4) + else if (targettype == TARGET_PAD) { - printf("%sTRYFacingPad(", tabs); - printf("lbl%d", AiList[Offset + 5]); + EraseCommand; + + printf("%s%s(", (char *)tabs, "TRYFacingPad"); + printf("%d", targetid); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,lbl%d", targettype, targetid, AiList[Offset + 5]); + printf("%04X,", targettype); + printf("chr%d", targetid); + AddChr(targetid); } - printf(")\n"); - Offset += AI_TRYFacingTarget_LENGTH; + + hasLabel = TRUE; break; } case AI_HitChrWithItem: // BYTE(CHR_NUM),BYTE(PART_NUM),BYTE(ITEM_NUM) { - if (AiList[Offset + 1] == CHR_SELF) + AiHitChrWithItemRecord *ai = &AiList+Offset; + signed char CHR_NUM = AiList[Offset + 1]; + + if (CHR_NUM == CHR_SELF) { - printf("%sHitMeWithItem(", tabs); + EraseCommand; + printf("%s%s(", (char *)tabs, "HitMeWithItem"); printf("%d,%d", AiList[Offset + 2], AiList[Offset + 1 + 2]); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,%d", AiList[Offset + 1], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2]); + if (CHR_NUM<0 && CHR_NUM> - 10) + { + printf("%s,", CHR_ToString[abs(CHR_NUM)]); + } + else + { + printf("chr%hd,", CHR_NUM); + AddChr(CHR_NUM); + } + printf("%s,%s", HITTARGET_ToString[AiList[Offset + 1 + 1]], ITEM_IDS_ToString[AiList[Offset + 1 + 2]]); } - printf(")\n"); - Offset += AI_HitChrWithItem_LENGTH; break; } case AI_ChrHitChr: // BYTE(CHR_NUM),BYTE(CHR_NUM_TARGET),BYTE(PART_NUM) { - if ((signed char)AiList[Offset + 1] == CHR_SELF) + AiChrHitChrRecord *ai = &AiList+Offset; + signed char CHR_NUM = AiList[Offset + 1]; + signed char CHR_NUM2 = AiList[Offset + 2]; + char PART_NUM = AiList[Offset + 3]; + + if (CHR_NUM == CHR_SELF) { - printf("%sIHitChr(", tabs); - printf("%d,%d", AiList[Offset + 2], AiList[Offset + 1 + 2]); + EraseCommand; + printf("%s%s(", (char *)tabs, "IHitChr"); + if (CHR_NUM2 < 0 && CHR_NUM2 > -10) + { + printf("%s,", CHR_ToString[abs(CHR_NUM2)]); + } + else + { + printf("chr%hd,", CHR_NUM2); + AddChr(CHR_NUM2); + } } - else if ((signed char)AiList[Offset + 2] == CHR_SELF) + else if (CHR_NUM2 == CHR_SELF) { - printf("%sChrHitMe(", tabs); - printf("%d,%d", AiList[Offset + 1], AiList[Offset + 1 + 2]); + EraseCommand; + printf("%s%s(", (char *)tabs, "ChrHitMe"); + if (CHR_NUM < 0 && CHR_NUM > -10) + { + printf("%s,", CHR_ToString[abs(CHR_NUM)]); + } + else + { + printf("chr%hd,", CHR_NUM); + AddChr(CHR_NUM); + } } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,%d", AiList[Offset + 1], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2]); + if (CHR_NUM < 0 && CHR_NUM > -10) + { + printf("%s,", CHR_ToString[abs(CHR_NUM)]); + } + else + { + printf("chr%hd,", CHR_NUM); + AddChr(CHR_NUM); + } + if (CHR_NUM2 < 0 && CHR_NUM2 > -10) + { + printf("%s,", CHR_ToString[abs(CHR_NUM2)]); + } + else + { + printf("chr%hd,", CHR_NUM2); + AddChr(CHR_NUM2); + } } - printf(")\n"); - - Offset += AI_ChrHitChr_LENGTH; + printf("%s", HITTARGET_ToString[PART_NUM]); break; } - case AI_TRYThrowingGrenade: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYThrowingGrenade_LENGTH; - break; - } case AI_TRYDroppingItem: // DBYTE(PROP_NUM),BYTE(ITEM_NUM),BYTE(GOTOLABEL) { + AiTRYDroppingItemRecord *ai = &AiList+Offset; unsigned short modelnum = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,lbl%d", modelnum, AiList[Offset + 1 + 2], AiList[Offset + 1 + 3]); - printf(")\n"); - Offset += AI_TRYDroppingItem_LENGTH; - break; - } - case AI_Surrender: // /*NONE*/ - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_Surrender_LENGTH; - break; - } - case AI_RemoveMe: // /*NONE*/ - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_RemoveMe_LENGTH; + printf("%s,%s", PROP_ToString[modelnum], ITEM_IDS_ToString[AiList[Offset + 1 + 2]]); + + hasLabel = TRUE; + break; } case AI_ChrRemoveInstant: // BYTE(CHR_NUM) { - if ((signed char)AiList[Offset + 1] == CHR_SELF) + AiChrRemoveInstantRecord *ai = AiList[Offset]; + signed char chr = AiList[Offset + 1]; + + if (chr == CHR_SELF) { - printf("%sRemoveMeInstantly(", tabs); + EraseCommand; + printf("%s%s(", (char *)tabs, "RemoveMeInstantly"); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } } - printf(")\n"); - Offset += AI_ChrRemoveInstant_LENGTH; + break; } case AI_TRYTriggeringAlarmAtPad: // DBYTE(PAD),BYTE(GOTOLABEL) { + AiTRYTriggeringAlarmAtPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); if (isNotBoundPad(pad)) { printf("%d,", pad); @@ -2455,119 +5341,127 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("lbl%d", AiList[Offset + 3]); - printf(")\n"); - Offset += AI_TRYTriggeringAlarmAtPad_LENGTH; - break; - } - case AI_AlarmOn: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_AlarmOn_LENGTH; - break; - } - case AI_AlarmOff: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_AlarmOff_LENGTH; - break; - } - case AI_TRYRunFromBond: // BYTE(GOTOLABEL) - { // run from bond - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYRunFromBond_LENGTH; + hasLabel = TRUE; break; } - case AI_TRYRunToBond: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYRunToBond_LENGTH; - break; - } - case AI_TRYWalkToBond: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYWalkToBond_LENGTH; - break; - } - case AI_TRYSprintToBond: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYSprintToBond_LENGTH; - break; - } - case AI_TRYFindCover: // BYTE(GOTOLABEL) - { // Find Cover - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_TRYFindCover_LENGTH; - break; - } case AI_TRYRunToChr: // BYTE(CHR_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_TRYRunToChr_LENGTH; + AiTRYRunToChrRecord *ai = &AiList+Offset; + signed char chr = AiList[Offset + 1]; + + if (chr == CHR_PRESET) + { + EraseCommand; + printf("%s%s(", (char *)tabs, "TRYRunToPresetChr"); + } + else + { + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } + } + + hasLabel = TRUE; break; } case AI_TRYWalkToChr: // BYTE(CHR_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_TRYWalkToChr_LENGTH; + AiTRYWalkToChrRecord *ai = &AiList+Offset; + signed char chr = AiList[Offset + 1]; + + if (chr == CHR_PRESET) + { + EraseCommand; + printf("%s%s(", (char *)tabs, "TRYWalkToPresetChr"); + } + else + { + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } + } + + hasLabel = TRUE; + break; } case AI_TRYSprintToChr: // BYTE(CHR_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_TRYSprintToChr_LENGTH; + AiTRYSprintToChrRecord *ai = &AiList+Offset; + signed char chr = AiList[Offset + 1]; + + if (chr == CHR_PRESET) + { + EraseCommand; + printf("%s%s(", (char *)tabs, "TRYSprintToPresetChr"); + } + else + { + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } + } + hasLabel = TRUE; + break; } case AI_SetNewRandom: { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_SetNewRandom_LENGTH; + AiSetNewRandomRecord *ai = &AiList+Offset; + if (AiList[Offset + 1] == AI_IFRandomLessThan || AiList[Offset + 1] == AI_IFRandomGreaterThan) + { + EraseCommand; + hasClosingBrace = TRUE; + } break; } case AI_IFRandomLessThan: // BYTE(BYTE), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFRandomLessThan_LENGTH; + AiIFRandomLessThanRecord *ai = &AiList+Offset; + if (AiList[Offset - 1] == AI_SetNewRandom) + { + EraseCommand; + printf("%s%s(", (char *)tabs, "IFNewRandomLessThan"); + } + hasLabel = TRUE; break; } case AI_IFRandomGreaterThan: // BYTE(BYTE), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFRandomGreaterThan_LENGTH; + AiIFRandomGreaterThanRecord *ai = &AiList+Offset; + if (AiList[Offset - 1] == AI_SetNewRandom) + { + EraseCommand; + printf("%s%s(", (char *)tabs, "IFNewRandomGreaterThan"); + } + hasLabel = TRUE; break; } case AI_RunToPad: // DBYTE(PAD) { + AiRunToPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); if (isNotBoundPad(pad)) { printf("%d", pad); @@ -2576,22 +5470,15 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d)", getBoundPadNum(pad)); } - printf(")\n"); - Offset += AI_RunToPad_LENGTH; - break; - } - case AI_RunToPadPreset: // /*NONE*/ - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_RunToPadPreset_LENGTH; + break; } + case AI_WalkToPad: // DBYTE(PAD) { + AiWalkToPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); if (isNotBoundPad(pad)) { printf("%d", pad); @@ -2600,15 +5487,14 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d)", getBoundPadNum(pad)); } - printf(")\n"); - Offset += AI_WalkToPad_LENGTH; + break; } case AI_SprintToPad: // DBYTE(PAD) { + AiSprintToPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); if (isNotBoundPad(pad)) { printf("%d", pad); @@ -2617,135 +5503,40 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d)", getBoundPadNum(pad)); } - printf(")\n"); - Offset += AI_SprintToPad_LENGTH; + break; } case AI_StartPatrol: // BYTE(PATH_NUM) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiStartPatrolRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_StartPatrol_LENGTH; - break; - } - case AI_IFICanHearAlarm: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFICanHearAlarm_LENGTH; - break; - } - case AI_IFAlarmIsOn: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFAlarmIsOn_LENGTH; - break; - } - case AI_IFGasIsLeaking: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFGasIsLeaking_LENGTH; - break; - } - case AI_IFIHeardBond: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFIHeardBond_LENGTH; - break; - } - case AI_IFISeeSomeoneShot: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFISeeSomeoneShot_LENGTH; - break; - } - case AI_IFISeeSomeoneDie: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFISeeSomeoneDie_LENGTH; - break; - } - case AI_IFICouldSeeBond: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFICouldSeeBond_LENGTH; - break; - } - case AI_IFICouldSeeBondsStan: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFICouldSeeBondsStan_LENGTH; - break; - } - case AI_IFIWasShotRecently: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFIWasShotRecently_LENGTH; - break; - } - case AI_IFIHeardBondRecently: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFIHeardBondRecently_LENGTH; + break; } + case AI_IFImInRoomWithChr: // BYTE(CHR_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFImInRoomWithChr_LENGTH; - break; - } - case AI_IFIveNotBeenSeen:// BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFIveNotBeenSeen_LENGTH; - break; - } - case AI_IFImOnScreen:// BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFImOnScreen_LENGTH; - break; - } - case AI_IFMyRoomIsOnScreen:// BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFMyRoomIsOnScreen_LENGTH; + AiIFImInRoomWithChrRecord *ai = &AiList+Offset; + signed char chr = AiList[Offset + 1]; + + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } + hasLabel = TRUE; break; } + case AI_IFRoomWithPadIsOnScreen: // DBYTE(PAD), BYTE(GOTOLABEL) { + AiIFRoomWithPadIsOnScreenRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); if (isNotBoundPad(pad)) { printf("%d,", pad); @@ -2754,94 +5545,106 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("lbl%d)\n", AiList[Offset + 3]); - Offset += AI_IFRoomWithPadIsOnScreen_LENGTH; - break; - } - case AI_IFImTargetedByBond: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFImTargetedByBond_LENGTH; - break; - } - case AI_IFBondMissedMe: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFBondMissedMe_LENGTH; + + hasLabel = TRUE; break; } + case AI_IFMyAngleToBondLessThan: // BYTE(ANGLE), BYTE(GOTOLABEL) { - printf("%s%sDeg(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0]))), AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyAngleToBondLessThan_LENGTH; + AiIFMyAngleToBondLessThanRecord *ai = &AiList+Offset; + EraseCommand; + printf("%s%sDeg(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]); + printf("%f,", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0])))); + + hasLabel = TRUE; + break; } case AI_IFMyAngleToBondGreaterThan: // BYTE(ANGLE), BYTE(GOTOLABEL) { - printf("%s%sDeg(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0]))), AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyAngleToBondGreaterThan_LENGTH; + AiIFMyAngleToBondGreaterThanRecord *ai = &AiList+Offset; + EraseCommand; + + printf("%s%sDeg(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]); + printf("%f,", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0])))); + hasLabel = TRUE; + break; } case AI_IFMyAngleFromBondLessThan: // BYTE(ANGLE), BYTE(GOTOLABEL) { - printf("%s%sDeg(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0]))), AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyAngleFromBondLessThan_LENGTH; + AiIFMyAngleFromBondLessThanRecord *ai = &AiList+Offset; + EraseCommand; + + printf("%s%sDeg(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]); + printf("%f,", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0])))); + hasLabel = TRUE; + break; } case AI_IFMyAngleFromBondGreaterThan: // BYTE(ANGLE), BYTE(GOTOLABEL) { - printf("%s%sDeg(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0]))), AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyAngleFromBondGreaterThan_LENGTH; + AiIFMyAngleFromBondGreaterThanRecord *ai = &AiList+Offset; + EraseCommand; + + printf("%s%sDeg(", (char *)tabs, AI_CMD_ToString[AiList[Offset]]); + printf("%f,", RadToDeg(ByteToRadian((AiList[Offset + 1 + 0])))); + + hasLabel = TRUE; break; } case AI_IFMyDistanceToBondLessThanDecimeter: // DBYTE(DISTANCE), BYTE(GOTOLABEL) { + AiIFMyDistanceToBondLessThanDecimeterRecord *ai = &AiList+Offset; float distance = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f; + EraseCommand; - printf("%s%s(", tabs, "IFMyDistanceToBondLessThanMeter"); - printf("%f,lbl%d", distance / 100, AiList[Offset + 3]); - printf(")\n"); + printf("%s%s(", (char *)tabs, "IFMyDistanceToBondLessThanMeter"); + printf("%f,", distance / 100); + hasLabel = TRUE; - Offset += AI_IFMyDistanceToBondLessThanDecimeter_LENGTH; break; } case AI_IFMyDistanceToBondGreaterThanDecimeter: // DBYTE(DISTANCE), BYTE(GOTOLABEL) { + AiIFMyDistanceToBondGreaterThanDecimeterRecord *ai = &AiList+Offset; float distance = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f; + EraseCommand; - printf("%s%s(", tabs, "IFMyDistanceToBondGreaterThanMeter"); - printf("%f,lbl%d", distance / 100, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFMyDistanceToBondGreaterThanDecimeter_LENGTH; + printf("%s%s(", (char *)tabs, "IFMyDistanceToBondGreaterThanMeter"); + printf("%f,", distance / 100); + + hasLabel = TRUE; break; } case AI_IFChrDistanceToPadLessThanDecimeter: // BYTE(CHR_NUM), DBYTE(DISTANCE), DBYTE(PAD), BYTE(GOTOLABEL) { + AiIFChrDistanceToPadLessThanDecimeterRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 3); float value = CharArrayTo16(AiList, Offset + 1 + 1) * 10.0f; + signed char chr = AiList[Offset + 1]; - if ((signed char)AiList[Offset + 1 + 0] == CHR_SELF) + EraseCommand; + + if (chr == CHR_SELF) { - printf("%sIFMyDistanceToPadLessThanMeter(", tabs); - printf("%f,", value / 100); + printf("%s%s(", (char *)tabs, "IFMyDistanceToPadLessThanMeter"); } else { - printf("%sIFChrDistanceToPadLessThanMeter(", tabs); - printf("%d,%f,", AiList[Offset + 1 + 0], value / 100); + printf("%s%s(", (char *)tabs, "IFChrDistanceToPadLessThanMeter"); + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } } + printf("%f,", value / 100); if (isNotBoundPad(pad)) { printf("%d,", pad); @@ -2850,26 +5653,37 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("lbl%d", AiList[Offset + 6]); - printf(")\n"); - Offset += AI_IFChrDistanceToPadLessThanDecimeter_LENGTH; + + hasLabel = TRUE; break; } case AI_IFChrDistanceToPadGreaterThanDecimeter: // BYTE(CHR_NUM), DBYTE(DISTANCE), DBYTE(PAD), BYTE(GOTOLABEL) { + AiIFChrDistanceToPadGreaterThanDecimeterRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 3); - float value = CharArrayTo16(AiList, Offset + 1 + 1) * 10.0f; + float value = CharArrayTo16(AiList, Offset + 1 + 1) * 10.0f; + signed char chr = AiList[Offset + 1]; + + EraseCommand; if ((signed char)AiList[Offset + 1 + 0] == CHR_SELF) { - printf("%sIFMyDistanceToPadGreaterThanMeter(", tabs); - printf("%f,", value / 100); + printf("%s%s(", (char *)tabs, "IFMyDistanceToPadGreaterThanMeter"); } else { - printf("%sIFChrDistanceToPadGreaterThanMeter(", tabs); - printf("%d,%f,", AiList[Offset + 1 + 0], value / 100); + printf("%s%s(", (char *)tabs, "IFChrDistanceToPadGreaterThanMeter"); + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } } + printf("%f,", value / 100); if (isNotBoundPad(pad)) { printf("%d,", pad); @@ -2878,47 +5692,75 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("lbl%d", AiList[Offset + 6]); - printf(")\n"); - Offset += AI_IFChrDistanceToPadGreaterThanDecimeter_LENGTH; + hasLabel = TRUE; break; } case AI_IFMyDistanceToChrLessThanDecimeter: // DBYTE(DISTANCE), BYTE(CHR_NUM), BYTE(GOTOLABEL) { + AiIFMyDistanceToChrLessThanDecimeterRecord *ai = &AiList+Offset; float cutoff = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f; + signed char chr = AiList[Offset + 3]; + EraseCommand; - printf("%s%s(", tabs, "AIFMyDistanceToChrLessThanMeter"); - printf("%f,%d,lbl%d", cutoff / 100, AiList[Offset + 3], AiList[Offset + 4]); - printf(")\n"); - Offset += AI_IFMyDistanceToChrLessThanDecimeter_LENGTH; + printf("%s%s(", (char *)tabs, "AIFMyDistanceToChrLessThanMeter"); + printf("%f,", cutoff / 100 ); + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } + + + hasLabel = TRUE; break; } case AI_IFMyDistanceToChrGreaterThanDecimeter: // DBYTE(DISTANCE), BYTE(CHR_NUM), BYTE(GOTOLABEL) { - float cutoff = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f; + AiIFMyDistanceToChrGreaterThanDecimeterRecord *ai = &AiList+Offset; + float cutoff = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f; + signed char chr = AiList[Offset + 3]; - printf("%s%s(", tabs, "AIFMyDistanceToChrGreaterThanMeter"); - printf("%f,%d,lbl%d", cutoff / 100, AiList[Offset + 3], AiList[Offset + 4]); - printf(")\n"); - Offset += AI_IFMyDistanceToChrGreaterThanDecimeter_LENGTH; + EraseCommand; + + printf("%s%s(", (char *)tabs, "AIFMyDistanceToChrGreaterThanMeter"); + printf("%f,", cutoff / 100); + if (chr < 0 && chr > -10) + { + printf("%s,", CHR_ToString[abs(chr)]); + } + else + { + printf("chr%hd,", chr); + AddChr(chr); + } + + hasLabel = TRUE; break; } case AI_TRYSettingMyPresetToChrWithinDistanceDecimeter: // DBYTE(DISTANCE), BYTE(GOTOLABEL) { + AiTRYSettingMyPresetToChrWithinDistanceDecimeterRecord *ai = &AiList+Offset; float distance = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f; + EraseCommand; - printf("%s%s(", tabs, "TRYSettingMyPresetToChrWithinDistanceMeter"); - printf("%f,lbl%d", distance / 100, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_TRYSettingMyPresetToChrWithinDistanceDecimeter_LENGTH; + printf("%s%s(", (char *)tabs, "TRYSettingMyPresetToChrWithinDistanceMeter"); + printf("%f,", distance / 100); + + hasLabel = TRUE; break; } case AI_IFBondDistanceToPadLessThanDecimeter: // DBYTE(DISTANCE), DBYTE(PAD), BYTE(GOTOLABEL) { + AiIFBondDistanceToPadLessThanDecimeterRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 2); float value = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f; + EraseCommand; - printf("%s%s(", tabs, "IFBondDistanceToPadLessThanMeter"); + printf("%s%s(", (char *)tabs, "IFBondDistanceToPadLessThanMeter"); printf("%f,", value / 100); if (isNotBoundPad(pad)) @@ -2929,16 +5771,18 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("lbl%d)\n", AiList[Offset + 5]); - Offset += AI_IFBondDistanceToPadLessThanDecimeter_LENGTH; + + hasLabel = TRUE; break; } case AI_IFBondDistanceToPadGreaterThanDecimeter: // DBYTE(DISTANCE), DBYTE(PAD), BYTE(GOTOLABEL) { + AiIFBondDistanceToPadGreaterThanDecimeterRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 2); float value = CharArrayTo16(AiList, Offset + 1 + 0) * 10.0f; + EraseCommand; - printf("%s%s(", tabs, "IFBondDistanceToPadGreaterThanMeter"); + printf("%s%s(", (char *)tabs, "IFBondDistanceToPadGreaterThanMeter"); printf("%f,", value / 100); if (isNotBoundPad(pad)) @@ -2949,16 +5793,23 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("lbl%d)\n", AiList[Offset + 5]); - Offset += AI_IFBondDistanceToPadGreaterThanDecimeter_LENGTH; + + hasLabel = TRUE; break; } case AI_IFChrInRoomWithPad: // BYTE(CHR_NUM), DBYTE(PAD), BYTE(GOTOLABEL) { + AiIFChrInRoomWithPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 1); - - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,", AiList[Offset + 1 + 0]); + if ((signed char)AiList[Offset + 1 + 0] == CHR_SELF) + { + EraseCommand; + printf("%s%s(", (char *)tabs, "IFImInRoomWithPad"); + } + else + { + printf("%d,", AiList[Offset + 1 + 0]); + } if (isNotBoundPad(pad)) { printf("%d,", pad); @@ -2967,15 +5818,15 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("lbl%d)\n", AiList[Offset + 4]); - Offset += AI_IFChrInRoomWithPad_LENGTH; + + hasLabel = TRUE; break; } case AI_IFBondInRoomWithPad: // DBYTE(PAD), BYTE(GOTOLABEL) { + AiIFBondInRoomWithPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); if (isNotBoundPad(pad)) { printf("%d,", pad); @@ -2984,145 +5835,151 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("lbl%d)\n", AiList[Offset + 3]); - Offset += AI_IFBondInRoomWithPad_LENGTH; + + hasLabel = TRUE; break; } case AI_IFBondCollectedObject: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFBondCollectedObject_LENGTH; + AiIFBondCollectedObjectRecord *ai = &AiList+Offset; + printf("tag%d,", AiList[Offset + 1]); + + AddTag(AiList[Offset + 1]); + + hasLabel = TRUE; + break; } - case AI_IFItemIsStationaryWithinLevel: // BYTE(ITEM_NUM), BYTE(GOTOLABEL) + case AI_IFKeyDropped: // BYTE(KEY_ID), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFItemIsStationaryWithinLevel_LENGTH; + AiIFKeyDroppedRecord *ai = &AiList+Offset; + printf("key%d,", AiList[Offset + 1]); + + AddKey(AiList[Offset + 1]); + hasLabel = TRUE; + break; } case AI_IFItemIsAttachedToObject: // BYTE(ITEM_NUM), BYTE(OBJECT_TAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2], AiList[Offset + 3]); - printf(")\n"); + AiIFItemIsAttachedToObjectRecord *ai = &AiList+Offset; + printf("%s,tag%d,", ITEM_IDS_ToString[AiList[Offset + 1]], AiList[Offset + 2]); + + hasLabel = TRUE; + AddTag(AiList[Offset + 2]); - Offset += AI_IFItemIsAttachedToObject_LENGTH; break; } case AI_IFBondHasItemEquipped: // BYTE(ITEM_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFBondHasItemEquipped_LENGTH; + AiIFBondHasItemEquippedRecord *ai = &AiList+Offset; + printf("%s,", ITEM_IDS_ToString[AiList[Offset + 1]]); + + hasLabel = TRUE; break; } case AI_IFObjectExists: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFObjectExists_LENGTH; + AiIFObjectExistsRecord *ai = &AiList+Offset; + printf("tag%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + AddTag(AiList[Offset + 1]); break; } - case AI_IFObjectNotDestroyed:// BYTE(OBJECT_TAG), BYTE(GOTOLABEL) + case AI_IFObjectNotDestroyed: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); + AiIFObjectNotDestroyedRecord *ai = &AiList+Offset; + printf("tag%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + AddTag(AiList[Offset + 1]); - Offset += AI_IFObjectNotDestroyed_LENGTH; break; } - case AI_IFObjectWasActivated:// BYTE(OBJECT_TAG), BYTE(GOTOLABEL) + case AI_IFObjectWasActivated: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); + AiIFObjectWasActivatedRecord *ai = &AiList+Offset; + printf("tag%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + AddTag(AiList[Offset + 1]); - Offset += AI_IFObjectWasActivated_LENGTH; break; } - case AI_IFBondUsedGadgetOnObject:// BYTE(OBJECT_TAG), BYTE(GOTOLABEL) + case AI_IFBondUsedGadgetOnObject: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); + AiIFBondUsedGadgetOnObjectRecord *ai = &AiList+Offset; + printf("tag%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + AddTag(AiList[Offset + 1]); - Offset += AI_IFBondUsedGadgetOnObject_LENGTH; break; } case AI_ActivateObject: // BYTE(OBJECT_TAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); + AiActivateObjectRecord *ai = &AiList+Offset; + printf("tag%d", AiList[Offset + 1]); - Offset += AI_ActivateObject_LENGTH; break; } - case AI_DestroyObject: // BYTE(OBJECT_TAG) + case AI_DestroyObject: // BYTE(OBJECT_TAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); + AiDestroyObjectRecord *ai = &AiList+Offset; + printf("tag%d", AiList[Offset + 1]); + + AddTag(AiList[Offset + 1]); - Offset += AI_DestroyObject_LENGTH; break; } case AI_DropObject: // BYTE(OBJECT_TAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_DropObject_LENGTH; + AiDropObjectRecord *ai = &AiList+Offset; + printf("tag%d", AiList[Offset + 1]); + AddTag(AiList[Offset + 1]); + break; } case AI_ChrDropAllConcealedItems: // BYTE(CHR_NUM) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_ChrDropAllConcealedItems_LENGTH; + AiChrDropAllConcealedItemsRecord *ai = &AiList+Offset; + printf("chr%d", AiList[Offset + 1]); + AddChr(AiList[Offset + 1]); + break; } case AI_ChrDropAllHeldItems: // BYTE(CHR_NUM) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); + AiChrDropAllHeldItemsRecord *ai = &AiList+Offset; + printf("chr%d", AiList[Offset + 1]); + AddChr(AiList[Offset + 1]); - Offset += AI_ChrDropAllHeldItems_LENGTH; break; } case AI_BondCollectObject: // BYTE(OBJECT_TAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); + AiBondCollectObjectRecord *ai = &AiList+Offset; + printf("tag%d", AiList[Offset + 1]); + AddTag(AiList[Offset + 1]); - Offset += AI_BondCollectObject_LENGTH; break; } case AI_ChrEquipObject: // BYTE(OBJECT_TAG), BYTE(CHR_NUM) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); + AiChrEquipObjectRecord *ai = &AiList+Offset; + printf("tag%d,chr%d", AiList[Offset + 1], AiList[Offset + 2]); + AddTag(AiList[Offset + 1]); + AddChr(AiList[Offset + 2]); - Offset += AI_ChrEquipObject_LENGTH; break; } case AI_MoveObject: // BYTE(OBJECT_TAG), DBYTE(PAD) { + AiMoveObjectRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,", AiList[Offset + 1]); + printf("tag%d,", AiList[Offset + 1]); if (isNotBoundPad(pad)) { @@ -3132,623 +5989,592 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d)", getBoundPadNum(pad)); } - Offset += AI_MoveObject_LENGTH; + AddTag(AiList[Offset + 1]); + AddPad(pad); + break; } case AI_DoorOpen: // BYTE(OBJECT_TAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_DoorOpen_LENGTH; + AiDoorOpenRecord *ai = &AiList+Offset; + printf("tag%d", AiList[Offset + 1]); + AddTag(AiList[Offset + 1]); + break; } case AI_DoorClose: // BYTE(OBJECT_TAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_DoorClose_LENGTH; + AiDoorCloseRecord *ai = &AiList+Offset; + printf("tag%d", AiList[Offset + 1]); + AddTag(AiList[Offset + 1]); + break; } case AI_IFDoorStateEqual: // BYTE(OBJECT_TAG), BYTE(DOOR_STATE), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%s,lbl%d", AiList[Offset + 1], DOORSTATE_ToString[AiList[Offset + 2] >> 1], AiList[Offset + 3]); - printf(")\n"); + AiIFDoorStateEqualRecord *ai = &AiList+Offset; + printf("tag%d,%s,", AiList[Offset + 1], DOORSTATE_ToString[AiList[Offset + 2] >> 1]); + + hasLabel = TRUE; + AddTag(AiList[Offset + 1]); - Offset += AI_IFDoorStateEqual_LENGTH; break; } case AI_IFDoorHasBeenOpenedBefore: // BYTE(OBJECT_TAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFDoorHasBeenOpenedBefore_LENGTH; + AiIFDoorHasBeenOpenedBeforeRecord *ai = &AiList+Offset; + printf("tag%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + AddTag(AiList[Offset + 1]); + break; } case AI_DoorSetLock: // BYTE(OBJECT_TAG), BYTE(LOCK_FLAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_DoorSetLock_LENGTH; + AiDoorSetLockRecord *ai = &AiList+Offset; + printf("tag%d,%d", AiList[Offset + 1], AiList[Offset + 2]); + AddTag(AiList[Offset + 1]); + break; } case AI_DoorUnsetLock: // BYTE(OBJECT_TAG), BYTE(LOCK_FLAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_DoorUnsetLock_LENGTH; + AiDoorUnsetLockRecord *ai = &AiList+Offset; + printf("tag%d,%d", AiList[Offset + 1], AiList[Offset + 2]); + AddTag(AiList[Offset + 1]); + break; } case AI_IFDoorLockEqual: // BYTE(OBJECT_TAG), BYTE(LOCK_FLAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,%d", AiList[Offset + 1], AiList[Offset + 2], AiList[Offset + 3]); - printf(")\n"); + AiIFDoorLockEqualRecord *ai = &AiList+Offset; + printf("tag%d,%d,%d", AiList[Offset + 1], AiList[Offset + 2], AiList[Offset + 3]); + AddTag(AiList[Offset + 1]); - Offset += AI_IFDoorLockEqual_LENGTH; break; } case AI_IFObjectiveNumComplete: // BYTE(OBJ_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFObjectiveNumComplete_LENGTH; + AiIFObjectiveNumCompleteRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; break; } case AI_TRYUnknown6e: // BYTE(UNKNOWN_FLAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_TRYUnknown6e_LENGTH; + AiTRYUnknown6eRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; break; } case AI_TRYUnknown6f: // BYTE(UNKNOWN_FLAG), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_TRYUnknown6f_LENGTH; + AiTRYUnknown6fRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; break; } case AI_IFMyNumArghsLessThan: // BYTE(HIT_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyNumArghsLessThan_LENGTH; + AiIFMyNumArghsLessThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; break; } case AI_IFMyNumArghsGreaterThan: // BYTE(HIT_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyNumArghsGreaterThan_LENGTH; + AiIFMyNumArghsGreaterThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + hasLabel = TRUE; break; } case AI_IFMyNumCloseArghsLessThan: // BYTE(MISSED_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyNumCloseArghsLessThan_LENGTH; + AiIFMyNumCloseArghsLessThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; break; } case AI_IFMyNumCloseArghsGreaterThan: // BYTE(MISSED_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyNumCloseArghsGreaterThan_LENGTH; + AiIFMyNumCloseArghsGreaterThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; break; } case AI_IFChrHealthLessThan: // BYTE(CHR_NUM), BYTE(HEALTH), BYTE(GOTOLABEL) { + AiIFChrHealthLessThanRecord *ai = &AiList+Offset; float value = (AiList[Offset + 1 + 1]) * 0.1f; - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%f,lbl%d", AiList[Offset + 1], value * 10, AiList[Offset + 3]); - printf(")\n"); + printf("%d,%f,", AiList[Offset + 1], value * 10); + + hasLabel = TRUE; + AddChr(AiList[Offset + 1]); - Offset += AI_IFChrHealthLessThan_LENGTH; break; } case AI_IFChrHealthGreaterThan: // BYTE(CHR_NUM), BYTE(HEALTH), BYTE(GOTOLABEL) { + AiIFChrHealthGreaterThanRecord *ai = &AiList+Offset; float value = (AiList[Offset + 1 + 1]) * 0.1f; - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%f,lbl%d", AiList[Offset + 1], value * 10, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFChrHealthGreaterThan_LENGTH; + printf("%d,%f,", AiList[Offset + 1], value * 10); + + hasLabel = TRUE; + AddChr(AiList[Offset + 1]); + break; } case AI_IFChrWasDamagedSinceLastCheck: // BYTE(CHR_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFChrWasDamagedSinceLastCheck_LENGTH; + AiIFChrWasDamagedSinceLastCheckRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + AddChr(AiList[Offset + 1]); + break; } case AI_IFBondHealthLessThan: // BYTE(HEALTH), BYTE(GOTOLABEL) { + AiIFBondHealthLessThanRecord *ai = &AiList+Offset; float val = (AiList[Offset + 1 + 0]) / 255.0f; - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", val * 255, AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFBondHealthLessThan_LENGTH; + printf("%f,", val * 255); + + hasLabel = TRUE; break; } case AI_IFBondHealthGreaterThan: // BYTE(HEALTH), BYTE(GOTOLABEL) { + AiIFBondHealthGreaterThanRecord *ai = &AiList+Offset; float val = (AiList[Offset + 1 + 0]) / 255.0f; - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", val * 255, AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFBondHealthGreaterThan_LENGTH; + printf("%f,", val * 255); + + hasLabel = TRUE; break; } case AI_IFGameDifficultyLessThan: // BYTE(DIFICULTY_ID), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFGameDifficultyLessThan_LENGTH; + AiIFGameDifficultyLessThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; break; } case AI_IFGameDifficultyGreaterThan: // BYTE(DIFICULTY_ID), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFGameDifficultyGreaterThan_LENGTH; + AiIFGameDifficultyGreaterThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; break; } case AI_IFMissionTimeLessThan: // DBYTE(SECONDS), BYTE(GOTOLABEL) { + AiIFMissionTimeLessThanRecord *ai = &AiList+Offset; float target = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", target, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFMissionTimeLessThan_LENGTH; + printf("%f,", target); + + hasLabel = TRUE; break; } case AI_IFMissionTimeGreaterThan: // DBYTE(SECONDS), BYTE(GOTOLABEL) { + AiIFMissionTimeGreaterThanRecord *ai = &AiList+Offset; float target = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", target, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFMissionTimeGreaterThan_LENGTH; + printf("%f,", target); + + hasLabel = TRUE; break; } case AI_IFSystemPowerTimeLessThan: // DBYTE(MINUTES), BYTE(GOTOLABEL) { + AiIFSystemPowerTimeLessThanRecord *ai = &AiList+Offset; float target = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,%d", target, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFSystemPowerTimeLessThan_LENGTH; + printf("%f,", target); + break; } case AI_IFSystemPowerTimeGreaterThan: // DBYTE(MINUTES), BYTE(GOTOLABEL) { + AiIFSystemPowerTimeGreaterThanRecord *ai = &AiList+Offset; float target = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", target, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFSystemPowerTimeGreaterThan_LENGTH; + printf("%f,", target); + + hasLabel = TRUE; break; } case AI_IFLevelIdLessThan: // BYTE(LEVEL_ID), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFLevelIdLessThan_LENGTH; + AiIFLevelIdLessThanRecord *ai = &AiList+Offset; + printf("%s,", LEVELID_ToString[AiList[Offset + 1] + 1]); + + hasLabel = TRUE; break; } case AI_IFLevelIdGreaterThan: // BYTE(LEVEL_ID), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFLevelIdGreaterThan_LENGTH; - break; - } - case AI_SetMyMorale:// BYTE(CHRBYTE) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMyMorale_LENGTH; - break; - } - case AI_AddToMyMorale:// BYTE(CHRBYTE) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); + AiIFLevelIdGreaterThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; - Offset += AI_AddToMyMorale_LENGTH; break; } - case AI_SubtractFromMyMorale:// BYTE(CHRBYTE) + case AI_SetMyMorale: // BYTE(CHRBYTE) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMyMoraleRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SubtractFromMyMorale_LENGTH; + + break; + } + case AI_AddToMyMorale: // BYTE(CHRBYTE) + { + AiAddToMyMoraleRecord *ai = &AiList+Offset; + printf("%d", AiList[Offset + 1]); + + break; + } + case AI_SubtractFromMyMorale: // BYTE(CHRBYTE) + { + AiSubtractFromMyMoraleRecord *ai = &AiList+Offset; + printf("%d", AiList[Offset + 1]); + break; } case AI_IFMyMoraleLessThan: // BYTE(CHRBYTE), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); + AiIFMyMoraleLessThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; - Offset += AI_IFMyMoraleLessThan_LENGTH; - break; - } - case AI_IFMyMoraleLessThanRandom:// BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFMyMoraleLessThanRandom_LENGTH; break; } + case AI_SetMyAlertness: // BYTE(CHRBYTE) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMyAlertnessRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMyAlertness_LENGTH; + break; } case AI_AddToMyAlertness: // BYTE(CHRBYTE) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiAddToMyAlertnessRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_AddToMyAlertness_LENGTH; + break; } case AI_SubtractFromMyAlertness: // BYTE(CHRBYTE) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSubtractFromMyAlertnessRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SubtractFromMyAlertness_LENGTH; + break; } case AI_IFMyAlertnessLessThan: // BYTE(CHRBYTE), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyAlertnessLessThan_LENGTH; - break; - } - case AI_IFMyAlertnessLessThanRandom: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFMyAlertnessLessThanRandom_LENGTH; + AiIFMyAlertnessLessThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + break; } case AI_SetMyHearingScale: // DBYTE(HEARING_SCALE) { + AiSetMyHearingScaleRecord *ai = &AiList+Offset; float distance = CharArrayTo16(AiList, Offset + 1 + 0) / 1000.0f; - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%f", distance * 1000); - printf(")\n"); - Offset += AI_SetMyHearingScale_LENGTH; + break; } - case AI_SetMyVisionRange:// BYTE(VISION_RANGE) + case AI_SetMyVisionRange: // BYTE(VISION_RANGE) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMyVisionRangeRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMyVisionRange_LENGTH; + break; } case AI_SetMyGrenadeProbability: // BYTE(GRENADE_PROB) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMyGrenadeProbabilityRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMyGrenadeProbability_LENGTH; + break; } case AI_SetMyChrNum: // BYTE(CHR_NUM) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMyChrNumRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMyChrNum_LENGTH; + break; } case AI_SetMyHealthTotal: // DBYTE(HEALTH) { + AiSetMyHealthTotalRecord *ai = &AiList+Offset; float amount = CharArrayTo16(AiList, Offset + 1 + 0) * 0.1f; - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%f", amount * 10); - printf(")\n"); - Offset += AI_SetMyHealthTotal_LENGTH; + break; } case AI_SetMyArmour: // DBYTE(AMOUNT) { + AiSetMyArmourRecord *ai = &AiList+Offset; float amount = CharArrayTo16(AiList, Offset + 1 + 0) * 0.1f; /*if (cheatIsActive(CHEAT_ENEMYSHIELDS)) { amount = amount < 8 ? 8 : amount; } */ - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%f", amount * 10); - printf(")\n"); - Offset += AI_SetMyArmour_LENGTH; + break; } case AI_SetMySpeedRating: // BYTE(SPEED_RATING) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMySpeedRatingRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMySpeedRating_LENGTH; + break; } case AI_SetMyArghRating: // BYTE(ARGH_RATING) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMyArghRatingRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMyArghRating_LENGTH; + break; } case AI_SetMyAccuracyRating: // BYTE(ACCURACY_RATING) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMyAccuracyRatingRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMyAccuracyRating_LENGTH; + break; } - case AI_SetMyFlags2:// BYTE(BITS) + case AI_SetMyFlags2: // BYTE(BITS) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMyFlags2Record *ai = &AiList+Offset; printf("0x%x", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMyFlags2_LENGTH; + break; } - case AI_UnsetMyFlags2:// BYTE(BITS) + case AI_UnsetMyFlags2: // BYTE(BITS) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiUnsetMyFlags2Record *ai = &AiList+Offset; printf("0x%x", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_UnsetMyFlags2_LENGTH; + break; } - case AI_IFMyFlags2Has:// BYTE(BITS) BYTE(GOTOLABEL) + case AI_IFMyFlags2Has: // BYTE(BITS) BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("0x%x,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFMyFlags2Has_LENGTH; + AiIFMyFlags2HasRecord *ai = &AiList+Offset; + printf("0x%x,", AiList[Offset + 1]); + + hasLabel = TRUE; + break; } - case AI_SetChrBitfield:// BYTE(CHR_NUM), BYTE(BITS) + case AI_SetChrBitfield: // BYTE(CHR_NUM), BYTE(BITS) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetChrBitfieldRecord *ai = &AiList+Offset; printf("%d,0x%x", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_SetChrBitfield_LENGTH; + break; } - case AI_UnsetChrBitfield:// BYTE(CHR_NUM), BYTE(BITS) + case AI_UnsetChrBitfield: // BYTE(CHR_NUM), BYTE(BITS) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiUnsetChrBitfieldRecord *ai = &AiList+Offset; printf("%d,0x%x", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_UnsetChrBitfield_LENGTH; + break; } case AI_IFChrBitfieldHas: // BYTE(CHR_NUM), BYTE(BITS), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,0x%x,lbl%d", AiList[Offset + 1], AiList[Offset + 2], AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFChrBitfieldHas_LENGTH; + AiIFChrBitfieldHasRecord *ai = &AiList+Offset; + printf("%d,0x%x,", AiList[Offset + 1], AiList[Offset + 2]); + + hasLabel = TRUE; + break; } case AI_SetObjectiveBitfield: // QBYTE(BITFIELD) { + AiSetObjectiveBitfieldRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("0x%x", flags); - printf(")\n"); - Offset += AI_SetObjectiveBitfield_LENGTH; + break; } case AI_UnsetObjectiveBitfield: // QBYTE(BITFIELD) { + AiUnsetObjectiveBitfieldRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("0x%x", flags); - printf(")\n"); - Offset += AI_UnsetObjectiveBitfield_LENGTH; + break; } - case AI_IFObjectiveBitfieldHas:// QBYTE(BITS), BYTE(GOTOLABEL) - { - int flags = CharArrayTo32(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("0x%x,lbl%d", flags, AiList[Offset + 5]); - printf(")\n"); - Offset += AI_IFObjectiveBitfieldHas_LENGTH; - break; - } - case AI_SetMychrflags:// QBYTE(CHRFLAGS) + case AI_IFObjectiveBitfieldHas: // QBYTE(BITS), BYTE(GOTOLABEL) { + AiIFObjectiveBitfieldHasRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("0x%x", flags); - printf(")\n"); - Offset += AI_SetMychrflags_LENGTH; + printf("0x%x,", flags); + + hasLabel = TRUE; + break; } - case AI_UnsetMychrflags:// QBYTE(CHRFLAGS) + case AI_SetMychrflags: // QBYTE(CHRFLAGS) { + AiSetMychrflagsRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("0x%x", flags); - printf(")\n"); - Offset += AI_UnsetMychrflags_LENGTH; + + break; + } + case AI_UnsetMychrflags: // QBYTE(CHRFLAGS) + { + AiUnsetMychrflagsRecord *ai = &AiList+Offset; + int flags = CharArrayTo32(AiList, Offset + 1 + 0); + + printf("0x%x", flags); + break; } case AI_IFMychrflagsHas: // QBYTE(CHRFLAGS), BYTE(GOTOLABEL) { + AiIFMychrflagsHasRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("0x%x,lbl%d", flags, AiList[Offset + 5]); - printf(")\n"); - Offset += AI_IFMychrflagsHas_LENGTH; + printf("0x%x,", flags); + + hasLabel = TRUE; + break; } case AI_SetChrchrflags: // BYTE(CHR_NUM), QBYTE(CHRFLAGS) { + AiSetChrchrflagsRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,0x%x", AiList[Offset + 1], flags); - printf(")\n"); - Offset += AI_SetChrchrflags_LENGTH; + break; } case AI_UnsetChrchrflags: // BYTE(CHR_NUM), QBYTE(CHRFLAGS) { + AiUnsetChrchrflagsRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,0x%x", AiList[Offset + 1], flags); - printf(")\n"); - Offset += AI_UnsetChrchrflags_LENGTH; + break; } case AI_IFChrchrflagsHas: // BYTE(CHR_NUM), QBYTE(CHRFLAGS), BYTE(GOTOLABEL) { + AiIFChrchrflagsHasRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,0x%x,lbl%d", AiList[Offset + 1], flags, AiList[Offset + 6]); - printf(")\n"); - Offset += AI_IFChrchrflagsHas_LENGTH; + printf("%d,0x%x,", AiList[Offset + 1], flags); + + hasLabel = TRUE; + break; } case AI_SetObjectFlags: // BYTE(OBJECT_TAG), QBYTE(BITFIELD) { + AiSetObjectFlagsRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,0x%x", AiList[Offset + 1], flags); - printf(")\n"); - Offset += AI_SetObjectFlags_LENGTH; + break; } case AI_UnsetObjectFlags: // BYTE(OBJECT_TAG), QBYTE(BITFIELD) { + AiUnsetObjectFlagsRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,0x%x", AiList[Offset + 1], flags); - printf(")\n"); - Offset += AI_UnsetObjectFlags_LENGTH; + break; } case AI_IFObjectFlagsHas: // BYTE(OBJECT_TAG), QBYTE(BITS), BYTE(GOTOLABEL) { + AiIFObjectFlagsHasRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,0x%x,lbl%d", AiList[Offset + 1], flags, AiList[Offset + 6]); - printf(")\n"); - Offset += AI_IFObjectFlagsHas_LENGTH; + printf("%d,0x%x,", AiList[Offset + 1], flags); + + hasLabel = TRUE; + break; } case AI_SetObjectFlags2: // BYTE(OBJECT_TAG), QBYTE(BITS) { + AiSetObjectFlags2Record *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,0x%x", AiList[Offset + 1], flags); - printf(")\n"); - Offset += AI_SetObjectFlags2_LENGTH; + break; } case AI_UnsetObjectFlags2: // BYTE(OBJECT_TAG), QBYTE(BITS) { + AiUnsetObjectFlags2Record *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,0x%x", AiList[Offset + 1], flags); - printf(")\n"); - Offset += AI_UnsetObjectFlags2_LENGTH; + break; } case AI_IFObjectFlags2Has: // BYTE(OBJECT_TAG), QBYTE(BITFIELD), BYTE(GOTOLABEL) { + AiIFObjectFlags2HasRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,0x%x,lbl%d", AiList[Offset + 1], flags, AiList[Offset + 6]); - printf(")\n"); - Offset += AI_IFObjectFlags2Has_LENGTH; + printf("%d,0x%x,", AiList[Offset + 1], flags); + + hasLabel = TRUE; + break; } case AI_SetMyChrPreset: // BYTE(CHR_PRESET) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetMyChrPresetRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_SetMyChrPreset_LENGTH; + break; } case AI_SetChrChrPreset: // BYTE(CHR_NUM), BYTE(CHR_PRESET) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSetChrChrPresetRecord *ai = &AiList+Offset; printf("%d,%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_SetChrChrPreset_LENGTH; + break; } case AI_SetMyPadPreset: // DBYTE(PAD_PRESET) { + AiSetMyPadPresetRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - if (isNotBoundPad(pad)) { printf("%d", pad); @@ -3757,12 +6583,12 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d)", getBoundPadNum(pad)); } - printf(")\n"); - Offset += AI_SetMyPadPreset_LENGTH; + break; } case AI_SetChrPadPreset: // BYTE(CHR_NUM), DBYTE(PAD_PRESET) { + AiSetChrPadPresetRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 1); printf("%s(%d,", AI_CMD_ToString[AiList[Offset]], AiList[Offset + 1]); @@ -3775,15 +6601,14 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d)", getBoundPadNum(pad)); } - printf(")\n"); - Offset += AI_SetChrPadPreset_LENGTH; + break; } case AI_PRINT: { + AiPRINTRecord *ai = &AiList+Offset; int j = 1; - printf("%sPRINT(\"", tabs); - + printf("\""); for (; AiList[Offset + j] != 0; j++) { if (AiList[Offset + j] == '\n') @@ -3795,139 +6620,78 @@ void ai(unsigned char *AiList, short ID) printf("%c", AiList[Offset + j]); } } - Offset += j + 1; - printf("\")\n"); - break; - } - case AI_MyTimerStart: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_MyTimerStart_LENGTH; - break; - } - case AI_MyTimerReset: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_MyTimerReset_LENGTH; - break; - } - case AI_MyTimerPause: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_MyTimerPause_LENGTH; - break; - } - case AI_MyTimerResume: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_MyTimerResume_LENGTH; - break; - } - case AI_IFMyTimerIsNotRunning: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFMyTimerIsNotRunning_LENGTH; + if (!hasName) + { + hasName = malloc(j); + hasName = &AiList[Offset + 1]; + } + + printf("\""); break; } + case AI_IFMyTimerLessThanTicks: // TBYTE(TICKS), BYTE(GOTOLABEL) { + AiIFMyTimerLessThanTicksRecord *ai = &AiList+Offset; float valf = ((unsigned)CharArrayTo24(AiList, Offset + 1 + 0)); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", valf, AiList[Offset + 4]); - printf(")\n"); - Offset += AI_IFMyTimerLessThanTicks_LENGTH; + printf("%f,", valf); + + hasLabel = TRUE; + break; } case AI_IFMyTimerGreaterThanTicks: // TBYTE(TICKS), BYTE(GOTOLABEL) { + AiIFMyTimerGreaterThanTicksRecord *ai = &AiList+Offset; float valf = ((unsigned)CharArrayTo24(AiList, Offset + 1 + 0)); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", valf, AiList[Offset + 4]); - printf(")\n"); - Offset += AI_IFMyTimerGreaterThanTicks_LENGTH; - break; - } - case AI_HudCountdownShow: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_HudCountdownShow_LENGTH; - break; - } - case AI_HudCountdownHide: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_HudCountdownHide_LENGTH; + printf("%f,", valf); + + hasLabel = TRUE; + break; } + case AI_HudCountdownSet: // DBYTE(SECONDS) { + AiHudCountdownSetRecord *ai = &AiList+Offset; float seconds = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%f", seconds); - printf(")\n"); - Offset += AI_HudCountdownSet_LENGTH; - break; - } - case AI_HudCountdownStop: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_HudCountdownStop_LENGTH; - break; - } - case AI_HudCountdownStart: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_HudCountdownStart_LENGTH; - break; - } - case AI_IFHudCountdownIsNotRunning: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFHudCountdownIsNotRunning_LENGTH; + break; } + case AI_IFHudCountdownLessThan: // DBYTE(SECONDS), BYTE(GOTOLABEL) { + AiIFHudCountdownLessThanRecord *ai = &AiList+Offset; float value = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", value, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFHudCountdownLessThan_LENGTH; + printf("%f,", value); + + hasLabel = TRUE; + break; } case AI_IFHudCountdownGreaterThan: // DBYTE(SECONDS), BYTE(GOTOLABEL) { + AiIFHudCountdownGreaterThanRecord *ai = &AiList+Offset; float value = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,lbl%d", value, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFHudCountdownGreaterThan_LENGTH; + printf("%f,", value); + + hasLabel = TRUE; + break; } case AI_TRYSpawningChrAtPad: // BYTE(BODY_NUM), BYTE(HEAD_NUM), DBYTE(PAD), DBYTE(AI_LIST_ID), QBYTE(BITFIELD), BYTE(GOTOLABEL) { + AiTRYSpawningChrAtPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 2); int flags = CharArrayTo32(AiList, Offset + 1 + 6); unsigned short ailistid = CharArrayTo16(AiList, Offset + 1 + 4); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,", AiList[Offset + 1]); if (isNotBoundPad(pad)) { @@ -3938,129 +6702,125 @@ void ai(unsigned char *AiList, short ID) printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("%d,0x%x,%d,lbl%d", ailistid, flags, AiList[Offset + 10], AiList[Offset + 11]); - printf(")\n"); - Offset += AI_TRYSpawningChrAtPad_LENGTH; + printf("%d,0x%x,%d,", ailistid, flags, AiList[Offset + 10]); + + hasLabel = TRUE; + break; } case AI_TRYSpawningChrNextToChr: // BYTE(BODY_NUM), BYTE(HEAD_NUM), BYTE(CHR_NUM_TARGET), DBYTE(AI_LIST_ID), QBYTE(BITFIELD), BYTE(GOTOLABEL) { + AiTRYSpawningChrNextToChrRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 5); unsigned short ailistid = CharArrayTo16(AiList, Offset + 1 + 3); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,%d,%d,0x%x,lbl%d", AiList[Offset + 1], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2], ailistid, flags, AiList[Offset + 10]); - printf(")\n"); - Offset += AI_TRYSpawningChrNextToChr_LENGTH; + printf("%d,%d,%d,%d,0x%x,", AiList[Offset + 1], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2], ailistid, flags); + + hasLabel = TRUE; break; } case AI_TRYGiveMeItem: // DBYTE(PROP_NUM), BYTE(ITEM_NUM), QBYTE(PROPFLAG), BYTE(GOTOLABEL) { + AiTRYGiveMeItemRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 3); int model = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,0x%x,lbl%d", model, AiList[Offset + 1 + 2], flags, AiList[Offset + 8]); - printf(")\n"); - Offset += AI_TRYGiveMeItem_LENGTH; + printf("%d,%d,0x%x,", model, AiList[Offset + 1 + 2], flags); + + hasLabel = TRUE; + break; } case AI_TRYGiveMeHat: // DBYTE(PROP_NUM), QBYTE(PROP_BITFIELD), BYTE(GOTOLABEL) { + AiTRYGiveMeHatRecord *ai = &AiList+Offset; int flags = CharArrayTo32(AiList, Offset + 1 + 2); int modelnum = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,0x%x,lbl%d", modelnum, flags, AiList[Offset + 7]); - printf(")\n"); - Offset += AI_TRYGiveMeHat_LENGTH; + printf("%d,0x%x,", modelnum, flags); + + hasLabel = TRUE; break; } case AI_TRYCloningChr: // BYTE(CHR_NUM), DBYTE(AI_LIST_ID), BYTE(GOTOLABEL) { + AiTRYCloningChrRecord *ai = &AiList+Offset; unsigned short ailistid = CharArrayTo16(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,lbl%d", AiList[Offset + 4], ailistid, AiList[Offset + 4]); - printf(")\n"); - Offset += AI_TRYCloningChr_LENGTH; + printf("%d,%d,", AiList[Offset + 4], ailistid); + + hasLabel = TRUE; break; } - case AI_TextPrintBottom:// DBYTE(TEXT_SLOT) + case AI_TextPrintBottom: // DBYTE(TEXT_SLOT) { - printf("//USING HUD MESSAGE Stringy = %d, ai->txt = %d\n", 0, CharArrayTo16(AiList, Offset + 1 + 0)); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("TEXT(%d,%d)", (CharArrayTo16(AiList, Offset + 1 + 0)) / 1024, (CharArrayTo16(AiList, Offset + 1 + 0)) % 1024); - printf(")\n"); - Offset += AI_TextPrintBottom_LENGTH; + AiTextPrintBottomRecord *ai = &AiList+Offset; + // printf("//USING HUD MESSAGE Stringy = %d, ai->txt = %d\n", 0, CharArrayTo16(AiList, Offset + 1 + 0)); + + printf("TEXT(%s,%d)", TEXTBANK_LEVEL_INDEX_ToString[(CharArrayTo16(AiList, Offset + 1 + 0)) / 1024], (CharArrayTo16(AiList, Offset + 1 + 0)) % 1024); + break; } - case AI_TextPrintTop:// DBYTE(TEXT_SLOT) + case AI_TextPrintTop: // DBYTE(TEXT_SLOT) { - printf("//USING HUD MESSAGE Stringy = %d, ai->txt = %d\n", 0, CharArrayTo16(AiList, Offset + 1 + 0)); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("TEXT(%d,%d)", (CharArrayTo16(AiList, Offset + 1 + 0)) / 1024, (CharArrayTo16(AiList, Offset + 1 + 0)) % 1024); - printf(")\n"); - Offset += AI_TextPrintTop_LENGTH; + AiTextPrintTopRecord *ai = &AiList+Offset; + // printf("//USING HUD MESSAGE Stringy = %d, ai->txt = %d\n", 0, CharArrayTo16(AiList, Offset + 1 + 0)); + + printf("TEXT(%s,%d)", TEXTBANK_LEVEL_INDEX_ToString[(CharArrayTo16(AiList, Offset + 1 + 0)) / 1024], (CharArrayTo16(AiList, Offset + 1 + 0)) % 1024); + break; } case AI_SfxPlay: // DBYTE(SOUND_NUM), BYTE(CHANNEL_NUM) { + AiSfxPlayRecord *ai = &AiList+Offset; short audio_id = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,%d", audio_id, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_SfxPlay_LENGTH; + break; } case AI_SfxStopChannel: // BYTE(CHANNEL_NUM) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiSfxStopChannelRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 3]); - printf(")\n"); - Offset += AI_SfxStopChannel_LENGTH; + break; } case AI_SfxSetChannelVolume: // BYTE(CHANNEL_NUM), DBYTE(TARGET_VOLUME), DBYTE(TRANSITION_TIME60) { + AiSfxSetChannelVolumeRecord *ai = &AiList+Offset; short vol = CharArrayTo16(AiList, Offset + 2 + 0); unsigned short sfxID = CharArrayTo16(AiList, Offset + 2 + 2); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d, %d,%d", AiList[Offset + 1], vol, sfxID); - printf(")\n"); - Offset += AI_SfxSetChannelVolume_LENGTH; + break; } case AI_SfxFadeChannelVolume: // BYTE(CHANNEL_NUM), DBYTE(TARGET_VOLUME), DBYTE(TRANSITION_TIME60) { + AiSfxFadeChannelVolumeRecord *ai = &AiList+Offset; short vol = CharArrayTo16(AiList, Offset + 2 + 0); unsigned short sfxID = CharArrayTo16(AiList, Offset + 2 + 2); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d, %d,%d", AiList[Offset + 1], vol, sfxID); - printf(")\n"); - Offset += AI_SfxFadeChannelVolume_LENGTH; break; } case AI_SfxEmitFromObject: // BYTE(CHANNEL_NUM), BYTE(OBJECT_TAG), DBYTE(VOL_DECAY_TIME60) { + AiSfxEmitFromObjectRecord *ai = &AiList+Offset; unsigned short sfxID = CharArrayTo16(AiList, Offset + 2 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d, %d,%d", AiList[Offset + 1], AiList[Offset + 2], sfxID); - printf(")\n"); - Offset += AI_SfxEmitFromObject_LENGTH; + break; } case AI_SfxEmitFromPad: // BYTE(CHANNEL_NUM), DBYTE(PAD), DBYTE(VOL_DECAY_TIME60) { + AiSfxEmitFromPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 2 + 0); unsigned short sfxID = CharArrayTo16(AiList, Offset + 2 + 2); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,", AiList[Offset + 1]); if (isNotBoundPad(pad)) @@ -4072,103 +6832,59 @@ void ai(unsigned char *AiList, short ID) printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } printf("%d", sfxID); - printf(")\n"); - Offset += AI_SfxEmitFromPad_LENGTH; + break; } case AI_IFSfxChannelVolumeLessThan: // BYTE(CHANNEL_NUM), DBYTE(VOLUME), BYTE(GOTOLABEL) { + AiIFSfxChannelVolumeLessThanRecord *ai = &AiList+Offset; short vol = CharArrayTo16(AiList, Offset + 2 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d, %d,lbl%d", AiList[Offset + 1], vol, AiList[Offset + 4]); - printf(")\n"); - Offset += AI_IFSfxChannelVolumeLessThan_LENGTH; + printf("%d, %d,", AiList[Offset + 1], vol); + + hasLabel = TRUE; break; } case AI_VehicleStartPath: // BYTE(PATH_NUM) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiVehicleStartPathRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1 + 0]); - printf(")\n"); - Offset += AI_VehicleStartPath_LENGTH; + break; } case AI_VehicleSpeed: // DBYTE(TOP_SPEED), DBYTE(ACCELERATION_TIME60) { + AiVehicleSpeedRecord *ai = &AiList+Offset; float speedtime = CharArrayTo16(AiList, Offset + 1 + 2); float speedaim = CharArrayTo16(AiList, Offset + 1 + 0) * 100.0f / 15360.0f; - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,%f", CharArrayTo16(AiList, Offset + 1 + 0), speedtime); - printf(")\n"); - Offset += AI_VehicleSpeed_LENGTH; + break; } case AI_AircraftRotorSpeed: // DBYTE(ROTOR_SPEED), DBYTE(ACCELERATION_TIME60) { + AiAircraftRotorSpeedRecord *ai = &AiList+Offset; float speedtime = CharArrayTo16(AiList, Offset + 1 + 2); float speedaim = CharArrayTo16(AiList, Offset + 1 + 0) * M_TAU_F / 3600.0f; - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,%f", CharArrayTo16(AiList, Offset + 1 + 0), speedtime); - printf(")\n"); - Offset += AI_AircraftRotorSpeed_LENGTH; - break; - } - case AI_IFCameraIsInIntro: // BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1 + 0]); - printf(")\n"); - Offset += AI_IFCameraIsInIntro_LENGTH; - break; - } - case AI_IFCameraIsInBondSwirl:// BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1 + 0]); - printf(")\n"); - Offset += AI_IFCameraIsInBondSwirl_LENGTH; + break; } case AI_TvChangeScreenBank: // BYTE(OBJECT_TAG), BYTE(SCREEN_INDEX), BYTE(SCREEN_BANK) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,$d", AiList[Offset + 1], AiList[Offset + 2], AiList[Offset + 3]); - printf(")\n"); - Offset += AI_TvChangeScreenBank_LENGTH; - break; - } - case AI_IFBondInTank: // canonical name - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1 + 0]); - printf(")\n"); + AiTvChangeScreenBankRecord *ai = &AiList+Offset; + printf("%d,%d,%d", AiList[Offset + 1], AiList[Offset + 2], AiList[Offset + 3]); - Offset += AI_IFBondInTank_LENGTH; - break; - } - case AI_EndLevel: // canonical name - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_EndLevel_LENGTH; - break; - } - case AI_CameraReturnToBond: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_CameraReturnToBond_LENGTH; break; } + case AI_CameraLookAtBondFromPad: // DBYTE(PAD) { + AiCameraLookAtBondFromPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - if (isNotBoundPad(pad)) { printf("%d", pad); @@ -4177,47 +6893,39 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf(")\n"); - Offset += AI_CameraLookAtBondFromPad_LENGTH; + break; } case AI_CameraSwitch: // BYTE(OBJECT_TAG), DBYTE(LOOK_AT_BOND_FLAG), DBYTE(UNUSED_FLAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiCameraSwitchRecord *ai = &AiList+Offset; printf("%d,%d,%d", AiList[Offset + 1 + 0], CharArrayTo16(AiList, Offset + 1 + 1), CharArrayTo16(AiList, Offset + 1 + 3)); - printf(")\n"); - Offset += AI_CameraSwitch_LENGTH; + break; } case AI_IFBondYPosLessThan: // DBYTE(Y_POS), BYTE(GOTOLABEL) { + AiIFBondYPosLessThanRecord *ai = &AiList+Offset; float bondpos = (short)CharArrayTo16(AiList, Offset + 1 + 0); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%f,%d", bondpos, AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFBondYPosLessThan_LENGTH; + printf("%f,", bondpos ); + hasLabel = TRUE; + break; } case AI_BondDisableControl: // BYTE(BITFIELD) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiBondDisableControlRecord *ai = &AiList+Offset; printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_BondDisableControl_LENGTH; - break; - } - case AI_BondEnableControl: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_BondEnableControl_LENGTH; + break; } + case AI_TRYTeleportingChrToPad: // BYTE(CHR_NUM), DBYTE(PAD), BYTE(GOTOLABEL) { + AiTRYTeleportingChrToPadRecord *ai = &AiList+Offset; int pad = CharArrayTo16(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + printf("%d,", AiList[Offset + 1]); if (isNotBoundPad(pad)) { @@ -4227,119 +6935,77 @@ void ai(unsigned char *AiList, short ID) { printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } + hasLabel = TRUE; - printf("lbl%d", AiList[Offset + 4]); - printf(")\n"); + break; + } - Offset += AI_TRYTeleportingChrToPad_LENGTH; - break; - } - case AI_ScreenFadeToBlack: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_ScreenFadeToBlack_LENGTH; - break; - } - case AI_ScreenFadeFromBlack: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_ScreenFadeFromBlack_LENGTH; - break; - } - case AI_IFScreenFadeCompleted:// BYTE(GOTOLABEL) - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFScreenFadeCompleted_LENGTH; - break; - } - case AI_HideAllChrs: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_HideAllChrs_LENGTH; - break; - } - case AI_ShowAllChrs: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_ShowAllChrs_LENGTH; - break; - } case AI_DoorOpenInstant: // BYTE(OBJECT_TAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_DoorOpenInstant_LENGTH; + AiDoorOpenInstantRecord *ai = &AiList+Offset; + printf("tag%d", AiList[Offset + 1]); + break; } case AI_ChrRemoveItemInHand: // BYTE(CHR_NUM), BYTE(HAND_INDEX) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%s", AiList[Offset + 1], AiList[Offset + 2] == 0 ? "GUNRIGHT" : "GUNLEFT"); - printf(")\n"); - Offset += AI_ChrRemoveItemInHand_LENGTH; + AiChrRemoveItemInHandRecord *ai = &AiList+Offset; + printf("chr%d,%s", AiList[Offset + 1], AiList[Offset + 2] == 0 ? "GUNRIGHT" : "GUNLEFT"); + break; } case AI_IfNumberOfActivePlayersLessThan: // BYTE(NUMBER), BYTE(GOTOLABEL) { + AiIfNumberOfActivePlayersLessThanRecord *ai = &AiList+Offset; if (AiList[Offset + 1] == 2) { - printf("%sIFSinglePlayer(", tabs); - printf("lbl%d", AiList[Offset + 2]); + printf("%sIFSinglePlayer(", (char *)tabs); } else { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); + printf("%d,", AiList[Offset + 1]); } - printf(")\n"); - Offset += AI_IfNumberOfActivePlayersLessThan_LENGTH; + + hasLabel = TRUE; + break; } case AI_IFBondItemTotalAmmoLessThan: // BYTE(ITEM_NUM), BYTE(AMMO_TOTAL), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2], AiList[Offset + 3]); - printf(")\n"); - Offset += AI_IFBondItemTotalAmmoLessThan_LENGTH; + AiIFBondItemTotalAmmoLessThanRecord *ai = &AiList+Offset; + printf("%s,%d,", ITEM_IDS_ToString[AiList[Offset + 1]], AiList[Offset + 2]); + + hasLabel = TRUE; + break; } case AI_BondEquipItem: // BYTE(ITEM_NUM) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_BondEquipItem_LENGTH; + AiBondEquipItemRecord *ai = &AiList+Offset; + printf("%s", ITEM_IDS_ToString[AiList[Offset + 1]]); + break; } case AI_BondEquipItemCinema: // BYTE(ITEM_NUM) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_BondEquipItemCinema_LENGTH; + AiBondEquipItemCinemaRecord *ai = &AiList+Offset; + printf("%s", ITEM_IDS_ToString[ AiList[Offset + 1]]); + break; } case AI_BondSetLockedVelocity: // BYTE(X_SPEED60), BYTE(Z_SPEED60) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiBondSetLockedVelocityRecord *ai = &AiList+Offset; printf("%d,%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_BondSetLockedVelocity_LENGTH; + break; } case AI_IFObjectInRoomWithPad: // BYTE(OBJECT_TAG), DBYTE(PAD), BYTE(GOTOLABEL) { + AiIFObjectInRoomWithPadRecord *ai = &AiList+Offset; unsigned short pad = CharArrayTo16(AiList, Offset + 1 + 1); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,", AiList[Offset + 1]); + printf("tag%d,", AiList[Offset + 1]); if (isNotBoundPad(pad)) { printf("%d,", pad); @@ -4349,49 +7015,14 @@ void ai(unsigned char *AiList, short ID) printf("setBoundPadNum(%d),", getBoundPadNum(pad)); } - printf("lbl%d", AiList[Offset + 4]); - printf(")\n"); - Offset += AI_IFObjectInRoomWithPad_LENGTH; + hasLabel = TRUE; + break; } - case AI_SwitchSky: - { // SWITCHENVIRONMENT - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_SwitchSky_LENGTH; - break; - } - case AI_TriggerFadeAndExitLevelOnButtonPress: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_TriggerFadeAndExitLevelOnButtonPress_LENGTH; - break; - } - case AI_IFBondIsDead: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFBondIsDead_LENGTH; - break; - } - case AI_BondDisableDamageAndPickups: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_BondDisableDamageAndPickups_LENGTH; - break; - } - case AI_BondHideWeapons: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_BondHideWeapons_LENGTH; - break; - } - case AI_CameraOrbitPad: + + case AI_CameraOrbitPad: { + AiCameraOrbitPadRecord *ai = &AiList+Offset; int pad; int speed60; int camDististance; @@ -4405,7 +7036,6 @@ void ai(unsigned char *AiList, short ID) targetHeight = (short)CharArrayTo16(AiList, Offset + 1 + 8); start = CharArrayTo16(AiList, Offset + 1 + 10); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); printf("%d,%d,%d,", camDististance, camHeight, speed60); if (isNotBoundPad(pad)) { @@ -4417,182 +7047,673 @@ void ai(unsigned char *AiList, short ID) } printf("%d,%d", targetHeight, start); - printf(")\n"); - Offset += AI_CameraOrbitPad_LENGTH; - break; - } - case AI_CreditsRoll: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_CreditsRoll_LENGTH; - break; - } - case AI_IFCreditsHasCompleted: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFCreditsHasCompleted_LENGTH; - break; - } - case AI_IFObjectiveAllCompleted: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFObjectiveAllCompleted_LENGTH; + break; } + case AI_IFFolderActorIsEqual: // BYTE(BOND_ACTOR_INDEX), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFFolderActorIsEqual_LENGTH; - break; - } - case AI_IFBondDamageAndPickupsDisabled: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("lbl%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_IFBondDamageAndPickupsDisabled_LENGTH; + AiIFFolderActorIsEqualRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + break; } + case AI_MusicPlaySlot: // BYTE(MUSIC_SLOT), BYTE(SECONDS_STOPPED_DURATION), BYTE(SECONDS_TOTAL_DURATION) { - printf("//ai: enery tune on (%d, %d, %d)\n", AiList[Offset + 1 + 0], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2]); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiMusicPlaySlotRecord *ai = &AiList+Offset; + // printf("/*ai: enery tune on (%d, %d, %d)*/", AiList[Offset + 1 + 0], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2]); + printf("%d,%d,%d", AiList[Offset + 1 + 0], AiList[Offset + 1 + 1], AiList[Offset + 1 + 2]); - printf(")\n"); - Offset += AI_MusicPlaySlot_LENGTH; + break; } case AI_MusicStopSlot: { - printf("//ai: enery tune off (%d)\n", AiList[Offset + 1 + 0]); - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); + AiMusicStopSlotRecord *ai = &AiList+Offset; + // printf("/*ai: enery tune off (%d)*/", AiList[Offset + 1 + 0]); + printf("%d", AiList[Offset + 1 + 0]); - printf(")\n"); - Offset += AI_MusicStopSlot_LENGTH; - break; - } - case AI_TriggerExplosionsAroundBond: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_TriggerExplosionsAroundBond_LENGTH; + break; } case AI_IFKilledCiviliansGreaterThan: { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFKilledCiviliansGreaterThan_LENGTH; + AiIFKilledCiviliansGreaterThanRecord *ai = &AiList+Offset; + printf("%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + break; } case AI_IFChrWasShotSinceLastCheck: // BYTE(CHR_NUM), BYTE(GOTOLABEL) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d,lbl%d", AiList[Offset + 1], AiList[Offset + 2]); - printf(")\n"); - Offset += AI_IFChrWasShotSinceLastCheck_LENGTH; - break; - } - case AI_BondKilledInAction: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_BondKilledInAction_LENGTH; - break; - } - case AI_RaiseArms: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_RaiseArms_LENGTH; - break; - } - case AI_GasLeakAndFadeFog: - { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf(")\n"); - Offset += AI_GasLeakAndFadeFog_LENGTH; + AiIFChrWasShotSinceLastCheckRecord *ai = &AiList+Offset; + printf("chr%d,", AiList[Offset + 1]); + + hasLabel = TRUE; + break; } case AI_ObjectRocketLaunch: // BYTE(OBJECT_TAG) { - printf("%s%s(", tabs, AI_CMD_ToString[AiList[Offset]]); - printf("%d", AiList[Offset + 1]); - printf(")\n"); - Offset += AI_ObjectRocketLaunch_LENGTH; - break; - } //============================================================================================================ + AiObjectRocketLaunchRecord *ai = &AiList+Offset; + printf("tag%d", AiList[Offset + 1]); + break; + } + case AI_GotoNext: // BYTE(LABEL) + case AI_IFPlayingAnimation: // BYTE(GOTOLABEL) + case AI_IFImOnPatrolOrStopped: // BYTE(GOTOLABEL) + case AI_IFISeeBond: // BYTE(GOTOLABEL) + case AI_TRYSidestepping: // BYTE(GOTOLABEL) + case AI_TRYSideHopping: // BYTE(GOTOLABEL) + case AI_TRYSideRunning: // BYTE(GOTOLABEL) + case AI_TRYFiringWalk: // BYTE(GOTOLABEL) + case AI_TRYFiringRun: // BYTE(GOTOLABEL) + case AI_TRYFiringRoll: // BYTE(GOTOLABEL) + case AI_IFImFiringAndLockedForward: // BYTE(GOTOLABEL) + case AI_IFImFiring: // BYTE(GOTOLABEL) + case AI_TRYThrowingGrenade: // BYTE(GOTOLABEL) + case AI_TRYRunFromBond: // BYTE(GOTOLABEL) + case AI_TRYRunToBond: // BYTE(GOTOLABEL) + case AI_TRYWalkToBond: // BYTE(GOTOLABEL) + case AI_TRYSprintToBond: // BYTE(GOTOLABEL) + case AI_TRYFindCover: // BYTE(GOTOLABEL) + case AI_IFICanHearAlarm: // BYTE(GOTOLABEL) + case AI_IFAlarmIsOn: // BYTE(GOTOLABEL) + case AI_IFGasIsLeaking: // BYTE(GOTOLABEL) + case AI_IFIHeardBond: // BYTE(GOTOLABEL) + case AI_IFISeeSomeoneShot: // BYTE(GOTOLABEL) + case AI_IFISeeSomeoneDie: // BYTE(GOTOLABEL) + case AI_IFICouldSeeBond: // BYTE(GOTOLABEL) + case AI_IFICouldSeeBondsStan: // BYTE(GOTOLABEL) + case AI_IFIWasShotRecently: // BYTE(GOTOLABEL) + case AI_IFIHeardBondRecently: // BYTE(GOTOLABEL) + case AI_IFIveNotBeenSeen: // BYTE(GOTOLABEL) + case AI_IFImOnScreen: // BYTE(GOTOLABEL) + case AI_IFMyRoomIsOnScreen: // BYTE(GOTOLABEL) + case AI_IFImTargetedByBond: // BYTE(GOTOLABEL) + case AI_IFBondMissedMe: // BYTE(GOTOLABEL) + case AI_IFMyMoraleLessThanRandom: // BYTE(GOTOLABEL) + case AI_IFMyAlertnessLessThanRandom: // BYTE(GOTOLABEL) + case AI_IFMyTimerIsNotRunning: // BYTE(GOTOLABEL) + case AI_IFHudCountdownIsNotRunning: // BYTE(GOTOLABEL) + case AI_IFCameraIsInIntro: // BYTE(GOTOLABEL) + case AI_IFCameraIsInBondSwirl: // BYTE(GOTOLABEL) + case AI_IFBondInTank: // canonical name + case AI_IFScreenFadeCompleted: // BYTE(GOTOLABEL) + case AI_IFBondIsDead: + case AI_IFCreditsHasCompleted: + case AI_IFObjectiveAllCompleted: + case AI_IFBondDamageAndPickupsDisabled: + { + AiIFBondDamageAndPickupsDisabledRecord *ai = &AiList+Offset; + hasLabel = TRUE; + break; + } + case AI_Yield: // /*NONE*/ + case AI_Stop: // /*NONE*/ + case AI_Kneel: // /*NONE*/ + case AI_PointAtBond: // /*NONE*/ + case AI_LookSurprised: // /*NONE*/ + case AI_Surrender: // /*NONE*/ + case AI_RemoveMe: // /*NONE*/ + case AI_AlarmOn: + case AI_AlarmOff: + case AI_RunToPadPreset: // /*NONE*/ + case AI_MyTimerStart: + case AI_MyTimerReset: + case AI_MyTimerPause: + case AI_MyTimerResume: + case AI_HudCountdownShow: + case AI_HudCountdownHide: + case AI_HudCountdownStop: + case AI_HudCountdownStart: + case AI_EndLevel: // canonical name + case AI_CameraReturnToBond: + case AI_BondEnableControl: + case AI_ScreenFadeToBlack: + case AI_ScreenFadeFromBlack: + case AI_HideAllChrs: + case AI_ShowAllChrs: + case AI_TriggerFadeAndExitLevelOnButtonPress: + case AI_BondDisableDamageAndPickups: + case AI_BondHideWeapons: + case AI_CreditsRoll: + case AI_SwitchSky: + case AI_BondKilledInAction: + case AI_RaiseArms: + case AI_TriggerExplosionsAroundBond: + case AI_GasLeakAndFadeFog: default: - /* - * No Command found, advance ailist by 1. - * This is attempting to handle situations where the command - * type is invalid by passing over them and continuing - * execution. - * chraiitemsize returns 1 which is pointless really - * could have done it here without a jump - * - * Outcome:crash - */ - { - Offset++; - } + { + break; + } + } // switch + if(!hasMacro)Offset += chraiitemsize(AiList, Offset); + if (hasLabel) + { + printf(" lbl%d ", AiList[Offset - 1]); + AddLabel(AiList[Offset - 1]); + } + if (!hasClosingBrace) printf(")\n"); } } -enum chrAIListIDs -{ - chrai_0 = setChrAIListID(0), - chrai_1, - chrai_2, - chrai_3, - chrai_4, - chrai_5, - chrai_6, - chrai_7, - chrai_8, - chrai_9, - chrai_10, - chrai_11, - chrai_12, - chrai_13, - chrai_14, - chrai_15, - chrai_16, - chrai_17, - chrai_18 -}; -int main() -{ - unsigned char - ai_0[] = {0x02, 0x03, 0x03, 0xeb, 0x36, 0x55, 0x00, 0xd0, 0x2a, 0x01, 0x03, 0x02, 0x2a, 0xec, 0xd7, 0x00, 0xda, 0x02, 0x08, 0x03, 0xdc, 0x2a, 0x01, 0x08, 0x02, 0x2a, 0xf1, 0x2a, 0x05, 0xfd, 0x00, 0x0f, 0x02, 0x2a, 0xdd, 0xea, 0x59, 0x18, 0x2a, 0x59, 0x19, 0x2a, 0x59, 0x04, 0x2a, 0x59, 0x05, 0x2a, 0x59, 0x06, 0x2a, 0x59, 0x07, 0x2a, 0x59, 0x08, 0x2a, 0x59, 0x09, 0x2a, 0x59, 0x0a, 0x2a, 0x59, 0x0b, 0x2a, 0x59, 0x0c, 0x2a, 0x59, 0x0d, 0x2a, 0x59, 0x0e, 0x2a, 0x59, 0x0f, 0x2a, 0x59, 0x10, 0x2a, 0x59, 0x11, 0x2a, 0x59, 0x12, 0x2a, 0x59, 0x13, 0x2a, 0x59, 0x16, 0x2a, 0x59, 0x14, 0x2a, 0x59, 0x15, 0x2a, 0xe4, 0x04, 0x02, 0x2a, 0xed, 0x03, 0x03, 0x03, 0xd5, 0x05, 0x00, 0x02, 0x00, 0x00, 0xd9, 0xf8, 0x00, 0xab, 0x2a, 0x02, 0x2a, 0x05, 0xf8, 0x04, 0x12, 0xa1, 0x00, 0x00, 0x00, 0x04, 0x00, 0xd9, 0x00, 0x00, 0xaa, 0x2a, 0x02, 0x2a, 0x05, 0x00, 0x04, 0x13, 0xdb, 0xf4, 0x00, 0x00, 0xff, 0x05, 0xfd, 0x00, 0x01, 0x02, 0x36, 0x05, 0xfd, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00}; - short ID = 1; - // char str[999]; - // printf("Enter a string: "); - // gets(str); +void hexDump(char *desc, void *addr, int len) +{ + int i; + unsigned char buff[17]; + unsigned char *pc = (unsigned char *)addr; - if (isChrAIListID(ID)) + // Output description if given. + if (desc != NULL) + printf("%s:\n", desc); + + // Process every byte in the data. + for (i = 0; i < len; i++) { - printf("u8 chrAI_%d[] = {\n #define THIS chrai_%d\n", getChrAIListID(ID), getChrAIListID(ID)); + // Multiple of 16 means new line (with line offset). + + if ((i % 16) == 0) + { + // Just don't print ASCII for the zeroth line. + if (i != 0) + printf(" %s\n", buff); + + // Output the offset. + printf(" %04x ", i); + } + + // Now the hex code for the specific character. + printf(" %02x", pc[i]); + + // And store a printable ASCII character for later. + if ((pc[i] < 0x20) || (pc[i] > 0x7e)) + { + buff[i % 16] = '.'; + } + else + { + buff[i % 16] = pc[i]; + } + + buff[(i % 16) + 1] = '\0'; + } + + // Pad out last line if not exactly 16 characters. + while ((i % 16) != 0) + { + printf(" "); + i++; + } + + // And print the final ASCII bit. + printf(" %s\n", buff); +} + +int main(int argc, char *argv[]) +{ +#define PRINTDEBUG + char fname[1000]; + FILE *pfile; + char cwd[1000]; + void *g_ptrStageSetupFile, *lastAddr; + int fsize; + + + int i,j; + time_t current_time; + time(¤t_time); + + getcwd(cwd, sizeof(cwd)); + + if (argc > 1) + { + strcat(cwd, "/"); + strcat(cwd, argv[1]); + strcpy(fname,argv[1]); } else { - printf("u8 bgAi_%d[] = {\n #define THIS bgai_%d\n", getBGAIListID(ID), getBGAIListID(ID)); + printf("Enter a filename:\n"); + scanf("%99s", fname); + strcat(cwd, "/"); + strcat(cwd, fname); } - ai(ai_0, ID); - // un-closed loops - if (top != -1) displayStack(); - printf("#undef THIS \n};\n"); + for (i=strlen(fname); i>0; i-- ) + { + j = i+1; + if (fname[i] == '/') break; + } + + for (i = 0; i < strlen(fname); i++, j++) + { + if (fname[j] == '.') + { + fname[i] = 0; + break; + } + fname[i] = fname[j]; + } + pfile = fopen(cwd, "rb"); + + if (!pfile) + { + printf("Error! opening file: %s\n", cwd); + // exit from program if file pointer returns NULL. + return 0; + } + + // Get file size + fseek(pfile, 0, SEEK_END); + fsize = ftell(pfile); + rewind(pfile); + + //allocate setup file + g_ptrStageSetupFile = malloc(fsize); + rewind(pfile); + + //Load setup file + if (1 != fread(g_ptrStageSetupFile, fsize, 1, pfile)) + { + fclose(pfile); + free(g_ptrStageSetupFile); + printf("entire read fails\n"); + return 0; + } + fclose(pfile); + + { + stagesetup g_chraiCurrentSetup = *(stagesetup *)g_ptrStageSetupFile; + + // convert to host endian and turn file pointer to RAM pointer + g_chraiCurrentSetup.pathwaypoints = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.pathwaypoints); + g_chraiCurrentSetup.waypointgroups = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.waypointgroups); + g_chraiCurrentSetup.intro = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.intro); + g_chraiCurrentSetup.propDefs = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.propDefs); + g_chraiCurrentSetup.patrolpaths = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.patrolpaths); + g_chraiCurrentSetup.ailists = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.ailists); + g_chraiCurrentSetup.pads = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.pads); + g_chraiCurrentSetup.boundpads = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.boundpads); + g_chraiCurrentSetup.padnames = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.padnames); + g_chraiCurrentSetup.boundpadnames = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.boundpadnames); + + // iterate over all items and sub-items converting from file to ram pointer +#pragma region "foreach item in setupheader" + if (g_chraiCurrentSetup.pathwaypoints) + { + // NAV Points - use Pads as NavPoints + for (i = 0; g_chraiCurrentSetup.pathwaypoints[i].padID >= 0; i++) + { + btol(g_chraiCurrentSetup.pathwaypoints[i].padID); + g_chraiCurrentSetup.pathwaypoints[i].neighbours = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.pathwaypoints[i].neighbours); + btol(g_chraiCurrentSetup.pathwaypoints[i].groupNum); + btol(g_chraiCurrentSetup.pathwaypoints[i].dist); +#ifdef PRINTDEBUG + printf("\nwaypoint %d: pad %d, nb %X, GN %d, dst%d\n", i, g_chraiCurrentSetup.pathwaypoints[i].padID, g_chraiCurrentSetup.pathwaypoints[i].neighbours, g_chraiCurrentSetup.pathwaypoints[i].groupNum, g_chraiCurrentSetup.pathwaypoints[i].dist); +#endif + for (j = 0; g_chraiCurrentSetup.pathwaypoints[i].neighbours[j] >= 0; j++) + { + btol(g_chraiCurrentSetup.pathwaypoints[i].neighbours[j]); +#ifdef PRINTDEBUG + printf("%d, ", g_chraiCurrentSetup.pathwaypoints[i].neighbours[j]); +#endif + } + } + } + + if (g_chraiCurrentSetup.waypointgroups) + { + // NAV Mesh, make a mesh from NAV Points + for (i = 0; g_chraiCurrentSetup.waypointgroups[i].neighbours; i++) + { + g_chraiCurrentSetup.waypointgroups[i].neighbours = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.waypointgroups[i].neighbours); + g_chraiCurrentSetup.waypointgroups[i].waypoints = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.waypointgroups[i].waypoints); +#ifdef PRINTDEBUG + printf("\nwaygrp %d: nb %X, wp%X, dst%d\n", i, g_chraiCurrentSetup.waypointgroups[i].neighbours, g_chraiCurrentSetup.waypointgroups[i].waypoints, g_chraiCurrentSetup.waypointgroups[i].dist); +#endif + for (j = 0; g_chraiCurrentSetup.waypointgroups[i].neighbours[j] >= 0; j++) + { + btol(g_chraiCurrentSetup.waypointgroups[i].neighbours[j]); +#ifdef PRINTDEBUG + printf("%d, ", g_chraiCurrentSetup.waypointgroups[i].neighbours[j]); +#endif + } +#ifdef PRINTDEBUG + printf("\n"); +#endif + for (j = 0; g_chraiCurrentSetup.waypointgroups[i].waypoints[j] >= 0; j++) + { + btol(g_chraiCurrentSetup.waypointgroups[i].waypoints[j]); +#ifdef PRINTDEBUG + printf("%d, ", g_chraiCurrentSetup.waypointgroups[i].waypoints[j]); +#endif + } + } + } + + if (g_chraiCurrentSetup.intro) + { + //g_chraiCurrentSetup.intro = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.intro); +#ifdef PRINTDEBUG + printf("\nintro %X: \n", g_chraiCurrentSetup.intro); +#endif + } + + if (g_chraiCurrentSetup.propDefs) + { + // g_chraiCurrentSetup.propDefs = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.propDefs); +#ifdef PRINTDEBUG + printf("\npropDefs %X: \n", g_chraiCurrentSetup.propDefs); +#endif + } + + if (g_chraiCurrentSetup.patrolpaths) + { + for (i = 0; g_chraiCurrentSetup.patrolpaths[i].waypoints; i++) + { + g_chraiCurrentSetup.patrolpaths[i].waypoints = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.patrolpaths[i].waypoints); + +#ifdef PRINTDEBUG + printf("path %d: wp %X, ID%d, isLoop %d, len %d\n", i, g_chraiCurrentSetup.patrolpaths[i].waypoints, g_chraiCurrentSetup.patrolpaths[i].ID, g_chraiCurrentSetup.patrolpaths[i].isLoop, g_chraiCurrentSetup.patrolpaths[i].len); +#endif + for (j = 0; g_chraiCurrentSetup.patrolpaths[i].waypoints[j] > -1; j++) + { + g_chraiCurrentSetup.patrolpaths[i].waypoints[j] = ntohl(g_chraiCurrentSetup.patrolpaths[i].waypoints[j]); +#ifdef PRINTDEBUG + printf("wp %d: %d\n", j, g_chraiCurrentSetup.patrolpaths[i].waypoints[j]); +#endif + } + g_chraiCurrentSetup.patrolpaths[i].len = j; + } + } + + if (g_chraiCurrentSetup.ailists) + { + for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++) + { + g_chraiCurrentSetup.ailists[i].ailist = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.ailists[i].ailist); + btol(g_chraiCurrentSetup.ailists[i].ID); +#ifdef PRINTDEBUG + printf("\nAI %d: Lst %X, ID%d\n", i, g_chraiCurrentSetup.ailists[i].ailist, g_chraiCurrentSetup.ailists[i].ID); +#endif + } + } + + if (g_chraiCurrentSetup.pads) + { + for (i = 0; g_chraiCurrentSetup.pads[i].plink; i++) + { + + for (j = 0; j < 3; j++) + { + btol(g_chraiCurrentSetup.pads[i].pos.AsArray[j]); + btol(g_chraiCurrentSetup.pads[i].up.AsArray[j]); + btol(g_chraiCurrentSetup.pads[i].look.AsArray[j]); + } + + g_chraiCurrentSetup.pads[i].plink = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.pads[i].plink); + + if (g_chraiCurrentSetup.pads[i].plink == 0) + { + printf("pad number %d has no stan! (%s)\n", i, g_chraiCurrentSetup.pads[i].plink); + } + + } + } + if (g_chraiCurrentSetup.boundpads) + { + for (i = 0; g_chraiCurrentSetup.boundpads[i].plink; i++) + { + + for (j = 0; j < 6; j++) + { + if (j < 3) + { + btol(g_chraiCurrentSetup.boundpads[i].pos.AsArray[j]); + btol(g_chraiCurrentSetup.boundpads[i].up.AsArray[j]); + btol(g_chraiCurrentSetup.boundpads[i].look.AsArray[j]); + } + btol(g_chraiCurrentSetup.boundpads[i].bbox.AsArray[j]); + } + g_chraiCurrentSetup.boundpads[i].plink = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.boundpads[i].plink); + + if (g_chraiCurrentSetup.boundpads[i].plink == 0) + { + printf("vol number %d has no stan! (%s)\n", i, g_chraiCurrentSetup.boundpads[i].plink); + } + } + } + + if (g_chraiCurrentSetup.padnames) + { + for (i = 0; g_chraiCurrentSetup.padnames[i]; i++) + { + g_chraiCurrentSetup.padnames[i] = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.padnames[i]); +#ifdef PRINTDEBUG + printf("\nNAVPoint %d: %s\n", i, g_chraiCurrentSetup.padnames[i]); +#endif + } + } + + if (g_chraiCurrentSetup.boundpadnames) + { + for (i = 0; g_chraiCurrentSetup.boundpadnames[i]; i++) + { + g_chraiCurrentSetup.boundpadnames[i] = g_ptrStageSetupFile + ntohl(g_chraiCurrentSetup.boundpadnames[i]); +#ifdef PRINTDEBUG + printf("\nNAVMesh %d: %s\n", i, g_chraiCurrentSetup.boundpadnames[i]); +#endif + } + } + +#pragma endregion // foreach item in setupheader + + printf("/*\n* This file was automatically generated from %s\n*\n* $Date: %s*/\n\n#include \n#include \n\n// forward declarations\nwaypoint pathwaypoints[];\nwaygroup pathsets[];\ns32 intro[];\ns32 propDefs[];\nPathRecord patrolpaths[];\nAIListRecord ailists[];\nPadRecord pads[];\nBoundPadRecord vols[];\nchar *NAVPADs[];\nchar *NAVnames[];\n\nstagesetup %s = {\n &pathwaypoints,\n &pathsets,\n &intro,\n &propDefs,\n &patrolpaths,\n &ailists,\n &pads,\n &vols,\n &NAVPADs,\n &NAVnames\n};\n\n", fname, ctime(¤t_time), fname); + + //retain file-order + for (lastAddr = g_ptrStageSetupFile; lastAddr < g_ptrStageSetupFile + fsize; lastAddr += 4) + { + if (g_chraiCurrentSetup.pathwaypoints && lastAddr == &g_chraiCurrentSetup.pathwaypoints[0]) + { + printf("char propDefs[] = {\n"); + + printf(" };\n //nothing to see here yet"); + } + if (g_chraiCurrentSetup.waypointgroups && lastAddr == &g_chraiCurrentSetup.waypointgroups[0]) + { + printf("char propDefs[] = {\n"); + + printf(" };\n //nothing to see here yet"); + } + if (g_chraiCurrentSetup.intro && lastAddr == &g_chraiCurrentSetup.intro[0]) + { + printf("char intro[] = {\n"); + + printf(" };\n //nothing to see here yet"); + } + if (g_chraiCurrentSetup.propDefs && lastAddr == &g_chraiCurrentSetup.propDefs[0]) + { + printf("char propDefs[] = {\n"); + + printf(" };\n //nothing to see here yet"); + } + if (g_chraiCurrentSetup.patrolpaths && lastAddr == &g_chraiCurrentSetup.patrolpaths[0]) + { + printf("char propDefs[] = {\n"); + + printf(" };\n //nothing to see here yet"); + } + + if (g_chraiCurrentSetup.ailists) + { + for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++) + { + if (lastAddr == g_chraiCurrentSetup.ailists[i].ailist) + { + if (isChrAIListID(g_chraiCurrentSetup.ailists[i].ID)) + { + printf("u8 chrAI_%hd[] = {\n #define THIS chrai_%hd\n\n", getChrAIListID(g_chraiCurrentSetup.ailists[i].ID), getChrAIListID(g_chraiCurrentSetup.ailists[i].ID)); + } + else + { + printf("u8 bgAi_%hd[] = {\n #define THIS bgai_%hd\n\n", getBGAIListID(g_chraiCurrentSetup.ailists[i].ID), getBGAIListID(g_chraiCurrentSetup.ailists[i].ID)); + } + hasName = 0; + ai(g_chraiCurrentSetup.ailists[i].ailist, g_chraiCurrentSetup.ailists[i].ID); + + // un-closed loops + if (top != -1) printf("\nUnused Labels Found!"), displayStack(); + top = -1; + + printf(" #undef THIS \n};%s%s\n\n", hasName ? " //Possible Name " : "", hasName ? hasName : ""); + } + } + } + + if (g_chraiCurrentSetup.ailists && lastAddr == &g_chraiCurrentSetup.ailists[0]) + { + printf("AIListRecord ailists[] = {\n"); + for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++) + { + if (isChrAIListID(g_chraiCurrentSetup.ailists[i].ID)) + { + printf(" { &chrAI_%hd, chrai_%hd }, \n", getChrAIListID(g_chraiCurrentSetup.ailists[i].ID), getChrAIListID(g_chraiCurrentSetup.ailists[i].ID)); + } + else if (isBGAIListID(g_chraiCurrentSetup.ailists[i].ID)) + { + printf(" { &bgAi_%hd, bgai_%hd },\n", getBGAIListID(g_chraiCurrentSetup.ailists[i].ID), getBGAIListID(g_chraiCurrentSetup.ailists[i].ID)); + } + else + { + printf(" /*Invalid ID*/{ &Ai_%hd, %hd }, //index %d\n", g_chraiCurrentSetup.ailists[i].ID, g_chraiCurrentSetup.ailists[i].ID, i); + } + } + printf(" { NULL, 0 }\n};\n"); + } + + if (g_chraiCurrentSetup.pads && lastAddr == &g_chraiCurrentSetup.pads[0]) + { + printf("PadRecord pads[] = {\n //%30s%30s%40s%40s\tstan\n", "pos", "up", "look", "plink"); + for (i = 0; g_chraiCurrentSetup.pads[i].plink; i++) + { + printf(" {{%# 10gf, %# 10gf, %# 10gf},\t{%# 10gf, %# 10gf, %# 10gf},\t{%# 10gf, %# 10gf, %# 10gf}, \t\"%#s\", NULL }, \n", g_chraiCurrentSetup.pads[i].pos.x, g_chraiCurrentSetup.pads[i].pos.y, g_chraiCurrentSetup.pads[i].pos.z, g_chraiCurrentSetup.pads[i].up.x, g_chraiCurrentSetup.pads[i].up.y, g_chraiCurrentSetup.pads[i].up.z, g_chraiCurrentSetup.pads[i].look.x, g_chraiCurrentSetup.pads[i].look.y, g_chraiCurrentSetup.pads[i].look.z, g_chraiCurrentSetup.pads[i].plink); + } + printf(" { 0 }\n};\n"); + } + if (g_chraiCurrentSetup.boundpads && lastAddr == &g_chraiCurrentSetup.boundpads[0]) + { + printf("BoundPadRecord boundpads[] = {\n //%30s%30s%40s%40s\tstan\tbbox\n", "pos", "up", "look", "plink"); + for (i = 0; g_chraiCurrentSetup.boundpads[i].plink; i++) + { + printf(" {{%# 10gf, %# 10gf, %# 10gf},\t{%# 10gf, %# 10gf, %# 10gf},\t{%# 10gf, %# 10gf, %# 10gf}, \t\"%#s\", NULL, {%# 10gf, %# 10gf, %# 10gf, %# 10gf, %# 10gf, %# 10gf} }, \n", g_chraiCurrentSetup.boundpads[i].pos.x, g_chraiCurrentSetup.boundpads[i].pos.y, g_chraiCurrentSetup.boundpads[i].pos.z, g_chraiCurrentSetup.boundpads[i].up.x, g_chraiCurrentSetup.boundpads[i].up.y, g_chraiCurrentSetup.boundpads[i].up.z, g_chraiCurrentSetup.boundpads[i].look.x, g_chraiCurrentSetup.boundpads[i].look.y, g_chraiCurrentSetup.boundpads[i].look.z, g_chraiCurrentSetup.boundpads[i].plink, g_chraiCurrentSetup.boundpads[i].bbox.AsArray[0], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[1], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[2], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[3], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[4], g_chraiCurrentSetup.boundpads[i].bbox.AsArray[5]); + } + printf(" { 0 }\n};\n"); + } + if (g_chraiCurrentSetup.padnames && lastAddr == &g_chraiCurrentSetup.padnames[0]) + { + printf("char propDefs[] = {\n"); + + printf(" };\n //nothing to see here yet"); + } + if (g_chraiCurrentSetup.boundpadnames && lastAddr == &g_chraiCurrentSetup.boundpadnames[0]) + { + printf("char propDefs[] = {\n"); + + printf(" };\n //nothing to see here yet"); + } + + } + + + printf("#pragma region Enums \n //Move the following Enums to the top of file\n"); + + if (g_chraiCurrentSetup.ailists) + { + printf(" enum chrAilist\n {\n"); + for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++) + { + if (g_chraiCurrentSetup.ailists[i].ID) + { + if (isChrAIListID(g_chraiCurrentSetup.ailists[i].ID)) + { + if (getChrAIListID(g_chraiCurrentSetup.ailists[i].ID)) + { + printf(" chrai_%hd,\n", getChrAIListID(g_chraiCurrentSetup.ailists[i].ID)); + } + else + { + printf(" chrai_%hd = setChrAIListID(%hd),\n", getChrAIListID(g_chraiCurrentSetup.ailists[i].ID), getChrAIListID(g_chraiCurrentSetup.ailists[i].ID)); + } + } + } + } + printf(" };\n"); + } + if (g_chraiCurrentSetup.ailists) + { + printf(" enum bgAilist\n {\n"); + for (i = 0; g_chraiCurrentSetup.ailists[i].ailist; i++) + { + if (g_chraiCurrentSetup.ailists[i].ID) + { + if (isBGAIListID(g_chraiCurrentSetup.ailists[i].ID)) + { + if (getBGAIListID(g_chraiCurrentSetup.ailists[i].ID)) + { + printf(" bgai_%hd,\n", getBGAIListID(g_chraiCurrentSetup.ailists[i].ID)); + } + else + { + printf(" bgai_%hd = setBGAIListID(%hd),\n", getBGAIListID(g_chraiCurrentSetup.ailists[i].ID), getBGAIListID(g_chraiCurrentSetup.ailists[i].ID)); + } + } + } + } + printf(" };\n"); + } + + SortEnums(labels); + SortEnums(keys); + SortEnums(tags); + SortEnums(chrs); + SortEnums(pads); + + printenum(labels, "lbl"); + printenum(tags, "tag"); + printenum(keys, "key"); + printenum(chrs, "chr"); + printenum(pads, "pad"); + i = 0; + + if (SubIDs[i].id) + { + printf(" #define SETUPSUBROUTINES(ID) "); + while (SubIDs[i].id != 0) + { + if (isBGAIListID(SubIDs[i].id)) + { + printf(" (ID == bgai_%hd)", getBGAIListID(SubIDs[i].id)); + } + else + { + printf(" (ID == chrai_%hd)", getChrAIListID(SubIDs[i].id)); + } + i++; + if (SubIDs[i].id) printf(" | \\\n"); + } + printf("\n"); + } + printf("#pragma endregion\n"); + } + + free(g_ptrStageSetupFile); return 0; } diff --git a/tools/asm-processor/LICENSE b/tools/asm-processor/LICENSE new file mode 100644 index 0000000..cf1ab25 --- /dev/null +++ b/tools/asm-processor/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/tools/asm-processor/README.md b/tools/asm-processor/README.md new file mode 100644 index 0000000..89a0b66 --- /dev/null +++ b/tools/asm-processor/README.md @@ -0,0 +1,139 @@ +# asm-processor + +Pre-process .c files and post-process .o files to enable embedding MIPS assembly into IDO-compiled C. + +This repository contains both the original Python implementation and rewrite in Rust that is designed to be 1:1 behavorially equivalent with the existing Python version, but faster. + +## Installation + +Most projects traditionally have included the `asm-processor` repo as a [submodule](https://git-scm.com/book/en/v2/Git-Tools-Submodules), [subrepo](https://github.com/ingydotnet/git-subrepo), or plain copy inside their project. +This is recommended, as it ensures consistency for all project users. + +### Rust +After vendoring this repo into your repository, you will want to add a step to your project setup procedure that builds the asm-processor binary with the [Rust toolchain](https://www.rust-lang.org/tools/install). +Presuming this repo is available at `tools/asm-processor/`, the following command can be run to build the project: + +``` +cargo build --release --manifest-path tools/asm-processor/rust/Cargo.toml +``` + +This will generate the executable at `tools/asm-processor/rust/target/release/asm-processor`. The build system for your project can then be configured to run `asm-processor` from this location. + +If you prefer not to build the project yourself or require downstream users to do so, we also provide release binaries that can either be downloaded at build time or included directly in your project's repo. + +### Python +Simply vendor this repo into your repository as described above and use `build.py`. + + +## Usage + +The Python `build.py` script and Rust `asm-processor` binary accept the same syntax and command line flags. If using the Rust implementation, substitute `build.py` with `asm-processor` in the below guide. + +Let's say you have a file compiled with `-g` on the IDO compiler, that looks like this: +```c +float func4(void) { + "func4"; + return 0.2f; +} +``` + +This script enables replacing it by: +```asm +GLOBAL_ASM( +.rdata +.word 0x66756e63 # func +.word 0x34000000 # 4\0\0\0 + +.late_rodata +glabel rv +.word 0x3e4ccccd # 0.2f + +.text +glabel func4 +lui $at, %hi(rv) +jr $ra +lwc1 $f0, %lo(rv)($at) +jr $ra +nop +jr $ra +nop +) +``` + +To compile the file, run `build.py $CC -- $AS $ASFLAGS -- $CFLAGS -o out.o in.c`, where $CC points to an IDO binary (5.3/7.1 and recomp/qemu all supported), $AS is e.g. `mips-linux-gnu-as`, $ASFLAGS e.g. `-march=vr4300 -mabi=32` and $CFLAGS e.g. `-Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -g`. + +In addition to an .o file, asm-processor also generates a .d file with Makefile dependencies for .s files referenced by the input .c file. +This functionality can be disabled by passing the `--no-dep-file` flag. + +Reading assembly from file is also supported, by either `GLOBAL_ASM("file.s")` or `#pragma GLOBAL_ASM("file.s")`. + +For compatibility with common GCC macros, `INCLUDE_ASM("folder", functionname);` and `INCLUDE_RODATA("folder", functionname);` are also allowed, and equivalent to `GLOBAL_ASM("folder/functionname.s")`. + +### What is supported? + +`.text`, `.data`, `.bss` and `.rodata` sections, `.word`/`.incbin`, `.ascii`/`.asciz`, and `-g`, `-g3`, `-O1`, `-O2`, `-framepointer` and `-mips1`/`-mips2` flags to the IDO compiler. + +### What is not supported? + +* complicated assembly (.ifdef, macro declarations/calls other than `glabel`, pseudo-instructions that expand to several real instructions) +* non-IDO compilers +* `-O3` (due to function reordering) + +C `#ifdef`s only work outside of `GLOBAL_ASM` calls, but is otherwise able to replace `.ifdef`. + +### What's up with "late rodata"? + +The IDO compiler emits rodata in two passes: first array/string contents, then large literals/switch jump tables. + +Data declared within `.rdata`/`.section .rodata` will end up in the first half, and `.late_rodata`/`.section .late_rodata` in the second half. + +### How does it work? + +It's a bit of a hack! +The basic idea is replace `GLOBAL_ASM` blocks with dummy C functions/global vars of the same sections sizes as the assembly. +Then the C file gets compiled, and the dummy contents overwritten with the injected assembly. + +To accomplish this, asm-processor has logic for guessing the size of assembly contents +(which assumes the assembly isn't too complicated, e.g. no macros), +and for emitting C code of exact sizes for a bunch of different IDO compiler flags. + +The assembler code is padded with nops to line it up with its correct position in the C; +this allows C and asm ELF files to be merged easily without having to fix up e.g. symbol addresses. + +The most difficult part is `late_rodata`, which is hard to create programmatically. +asm-processor does that by emitting code that uses dummy float literals/double literals/jump tables, +assembles the late_rodata at another location of the .rodata section, then overwrites the dummy rodata. +This does require some movement of symbols and relocations, and quite a bit of care in what code to +emit and how to preserve .double alignment. + +It's worth noting some alternative ways in which asm-processor would have been implemented: +- One idea to get rid of the C/asm size estimations is to emit arbitrary code, and then move code, +symbols and relocations to the correct place after the sizes are known. +Given the machinery for `late_rodata` this wouldn't have been too difficult, and it would have the upside of improved portability. +There is a big downside, however: using dummy code of incorrect size throws off alignment and can introduce unintended padding. +Fixing this would require running multiple passes of asm-processor, with one compile per `ASM_GLOBAL`. +- Another idea is to run the compiler with -S to emit assembly, modify the emitted assembly, then run the assembler +(which in IDO's case may perform additional instruction reordering etc.). +This option has not been investigated in much detail, and would perhaps be superior to the current implementation. +It does have a few unknowns to it, e.g. instruction encoding differences between GNU `as` and IDO's assembler, +how to avoid reordering the injected assembly, and how .rodata/.late_rodata are implemented. + +### Testing + +There are a few tests to ensure you don't break anything when hacking on asm-processor: `./run-tests.sh` should exit without output if they pass, or else output a diff from previous to new version. + +Tests need the environment variable `MIPS_CC` set to point to the IDO 7.1 compiler, with Pascal support enabled. + +For example if asm-processor is cloned in the same directory as [ido static recomp](https://github.com/decompals/ido-static-recomp) and the working directory is asm-processor, tests can be run using: + +```sh +MIPS_CC=../ido-static-recomp/build/7.1/out/cc ./run-tests.sh +``` + +Or using qemu-irix (don't forget `chmod u+x qemu-irix`) to emulate IDO: + +```sh +MIPS_CC='./qemu-irix -silent -L ../ido-static-recomp/ido/7.1/ ../ido-static-recomp/ido/7.1/usr/bin/cc' ./run-tests.sh +``` + +To skip running Pascal tests, remove the `tests/*.p` glob from `run-tests.sh`. diff --git a/tools/asm-processor/add-test.sh b/tools/asm-processor/add-test.sh new file mode 100644 index 0000000..7aef817 --- /dev/null +++ b/tools/asm-processor/add-test.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +WD=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd) + +for A in "$@"; do + OBJDUMPFLAGS="-srt" + "$WD/compile-test.sh" "$A" python && mips-linux-gnu-objdump $OBJDUMPFLAGS "${A%.*}.o" > "${A%.*}.objdump" +done diff --git a/tools/asmpreproc/asm_processor.py b/tools/asm-processor/asm_processor.py old mode 100755 new mode 100644 similarity index 85% rename from tools/asmpreproc/asm_processor.py rename to tools/asm-processor/asm_processor.py index 68e651a..bc26402 --- a/tools/asmpreproc/asm_processor.py +++ b/tools/asm-processor/asm_processor.py @@ -1,13 +1,13 @@ #!/usr/bin/env python3 import argparse -import tempfile -import struct -import copy -import sys -import re -import os from collections import namedtuple from io import StringIO +import os +from pathlib import Path +import re +import struct +import sys +import tempfile MAX_FN_SIZE = 100 SLOW_CHECKS = False @@ -82,7 +82,14 @@ R_MIPS_HI16 = 5 R_MIPS_LO16 = 6 MIPS_DEBUG_ST_STATIC = 2 +MIPS_DEBUG_ST_PROC = 6 +MIPS_DEBUG_ST_BLOCK = 7 +MIPS_DEBUG_ST_END = 8 +MIPS_DEBUG_ST_FILE = 11 MIPS_DEBUG_ST_STATIC_PROC = 14 +MIPS_DEBUG_ST_STRUCT = 26 +MIPS_DEBUG_ST_UNION = 27 +MIPS_DEBUG_ST_ENUM = 28 class ElfFormat: @@ -151,10 +158,10 @@ class Symbol: self.fmt = fmt self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx = fmt.unpack('IIIBBH', data) assert self.st_shndx != SHN_XINDEX, "too many sections (SHN_XINDEX not supported)" - self.bind = st_info >> 4 - self.type = st_info & 15 + self.st_bind = st_info >> 4 + self.st_type = st_info & 0xf self.name = name if name is not None else strtab.lookup_str(self.st_name) - self.visibility = self.st_other & 3 + self.st_visibility = self.st_other & 3 @staticmethod def from_parts(fmt, st_name, st_value, st_size, st_info, st_other, st_shndx, strtab, name): @@ -162,7 +169,7 @@ class Symbol: return Symbol(fmt, header, strtab, name) def to_bin(self): - st_info = (self.bind << 4) | self.type + st_info = (self.st_bind << 4) | self.st_type return self.fmt.pack('IIIBBH', self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx) @@ -171,18 +178,18 @@ class Relocation: self.fmt = fmt self.sh_type = sh_type if sh_type == SHT_REL: - self.r_offset, self.r_info = fmt.unpack('II', data) + self.r_offset, r_info = fmt.unpack('II', data) else: - self.r_offset, self.r_info, self.r_addend = fmt.unpack('III', data) - self.sym_index = self.r_info >> 8 - self.rel_type = self.r_info & 0xff + self.r_offset, r_info, self.r_addend = fmt.unpack('III', data) + self.sym_index = r_info >> 8 + self.rel_type = r_info & 0xff def to_bin(self): - self.r_info = (self.sym_index << 8) | self.rel_type + r_info = (self.sym_index << 8) | self.rel_type if self.sh_type == SHT_REL: - return self.fmt.pack('II', self.r_offset, self.r_info) + return self.fmt.pack('II', self.r_offset, r_info) else: - return self.fmt.pack('III', self.r_offset, self.r_info, self.r_addend) + return self.fmt.pack('III', self.r_offset, r_info, self.r_addend) class Section: @@ -239,36 +246,6 @@ class Section: self.sh_size = len(self.data) return self.fmt.pack('IIIIIIIIII', self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize) - def late_init(self, sections): - if self.sh_type == SHT_SYMTAB: - self.init_symbols(sections) - elif self.is_rel(): - self.rel_target = sections[self.sh_info] - self.rel_target.relocated_by.append(self) - self.init_relocs() - - def find_symbol(self, name): - assert self.sh_type == SHT_SYMTAB - for s in self.symbol_entries: - if s.name == name: - return (s.st_shndx, s.st_value) - return None - - def find_symbol_in_section(self, name, section): - pos = self.find_symbol(name) - assert pos is not None - assert pos[0] == section.index - return pos[1] - - def init_symbols(self, sections): - assert self.sh_type == SHT_SYMTAB - assert self.sh_entsize == 16 - self.strtab = sections[self.sh_link] - entries = [] - for i in range(0, self.sh_size, self.sh_entsize): - entries.append(Symbol(self.fmt, self.data[i:i+self.sh_entsize], self.strtab)) - self.symbol_entries = entries - def init_relocs(self): assert self.is_rel() entries = [] @@ -276,14 +253,6 @@ class Section: entries.append(Relocation(self.fmt, self.data[i:i+self.sh_entsize], self.sh_type)) self.relocations = entries - def local_symbols(self): - assert self.sh_type == SHT_SYMTAB - return self.symbol_entries[:self.sh_info] - - def global_symbols(self): - assert self.sh_type == SHT_SYMTAB - return self.symbol_entries[self.sh_info:] - def relocate_mdebug(self, original_offset): assert self.sh_type == SHT_MIPS_DEBUG new_data = bytearray(self.data) @@ -300,17 +269,17 @@ class Section: assert hdrr_magic == 0x7009, "Invalid magic value for .mdebug symbolic header" - hdrr_cbLineOffset += shift_by - hdrr_cbDnOffset += shift_by - hdrr_cbPdOffset += shift_by - hdrr_cbSymOffset += shift_by - hdrr_cbOptOffset += shift_by - hdrr_cbAuxOffset += shift_by - hdrr_cbSsOffset += shift_by - hdrr_cbSsExtOffset += shift_by - hdrr_cbFdOffset += shift_by - hdrr_cbRfdOffset += shift_by - hdrr_cbExtOffset += shift_by + if hdrr_cbLine: hdrr_cbLineOffset += shift_by + if hdrr_idnMax: hdrr_cbDnOffset += shift_by + if hdrr_ipdMax: hdrr_cbPdOffset += shift_by + if hdrr_isymMax: hdrr_cbSymOffset += shift_by + if hdrr_ioptMax: hdrr_cbOptOffset += shift_by + if hdrr_iauxMax: hdrr_cbAuxOffset += shift_by + if hdrr_issMax: hdrr_cbSsOffset += shift_by + if hdrr_issExtMax: hdrr_cbSsExtOffset += shift_by + if hdrr_ifdMax: hdrr_cbFdOffset += shift_by + if hdrr_crfd: hdrr_cbRfdOffset += shift_by + if hdrr_iextMax: hdrr_cbExtOffset += shift_by new_data[0:0x60] = self.fmt.pack("HHIIIIIIIIIIIIIIIIIIIIIII", hdrr_magic, hdrr_vstamp, hdrr_ilineMax, hdrr_cbLine, \ hdrr_cbLineOffset, hdrr_idnMax, hdrr_cbDnOffset, hdrr_ipdMax, \ @@ -346,11 +315,36 @@ class ElfFile: symtab = s assert symtab is not None self.symtab = symtab + self.sym_strtab = self.sections[symtab.sh_link] + self.symbol_entries = ElfFile.init_symbols(symtab, self.sym_strtab) shstr = self.sections[self.elf_header.e_shstrndx] for s in self.sections: s.name = shstr.lookup_str(s.sh_name) - s.late_init(self.sections) + if s.is_rel(): + self.sections[s.sh_info].relocated_by.append(s) + s.init_relocs() + + @staticmethod + def init_symbols(symtab, strtab): + assert symtab.sh_type == SHT_SYMTAB + assert symtab.sh_entsize == 16 + syms = [] + for i in range(0, symtab.sh_size, symtab.sh_entsize): + syms.append(Symbol(symtab.fmt, symtab.data[i:i+symtab.sh_entsize], strtab)) + return syms + + def find_symbol(self, name): + for s in self.symbol_entries: + if s.name == name: + return (s.st_shndx, s.st_value) + return None + + def find_symbol_in_section(self, name, section): + pos = self.find_symbol(name) + assert pos is not None + assert pos[0] == section.index + return pos[1] def find_section(self, name): for s in self.sections: @@ -367,7 +361,6 @@ class ElfFile: index=len(self.sections)) self.sections.append(s) s.name = name - s.late_init(self.sections) return s def drop_mdebug_gptab(self): @@ -738,7 +731,7 @@ class GlobalAsmBlock: size - i >= jtbl_min_rodata_size and num_instr - len(late_rodata_fn_output) >= jtbl_size + 1): if state.pascal: - cases = " ".join("{}: ;".format(case) for case in range(size - i)) + cases = "\n".join("{}: ;".format(case) for case in range(size - i)) line = "case 0 of " + cases + " otherwise end;" else: cases = " ".join("case {}:".format(case) for case in range(size - i)) @@ -877,7 +870,7 @@ float_regexpr = re.compile(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f") def repl_float_hex(m): return str(struct.unpack(">I", struct.pack(">f", float(m.group(0).strip().rstrip("f"))))[0]) -Opts = namedtuple('Opts', ['opt', 'framepointer', 'mips1', 'kpic', 'pascal', 'input_enc', 'output_enc']) +Opts = namedtuple('Opts', ['opt', 'framepointer', 'mips1', 'kpic', 'pascal', 'input_enc', 'output_enc', 'encode_cutscene_data_floats']) def parse_source(f, opts, out_dependencies, print_source=None): if opts.opt in ['O1', 'O2']: @@ -929,8 +922,9 @@ def parse_source(f, opts, out_dependencies, print_source=None): global_asm = None asm_functions = [] + base_fname = f.name output_lines = [ - '#line 1 "' + f.name + '"' + '#line 1 "' + base_fname + '"' ] is_cutscene_data = False @@ -948,27 +942,64 @@ def parse_source(f, opts, out_dependencies, print_source=None): if global_asm is not None: if line.startswith(')'): src, fn = global_asm.finish(state) + if state.pascal: + # Pascal has a 1600-character line length limit, so some + # of the lines we emit may be broken up. Correct for that + # using a #line directive. + src[-1] += '\n#line ' + str(line_no + 1) for i, line2 in enumerate(src): output_lines[start_index + i] = line2 asm_functions.append(fn) global_asm = None else: global_asm.process_line(raw_line, output_enc) - elif line in ['GLOBAL_ASM(', '#pragma GLOBAL_ASM(']: + elif line in ("GLOBAL_ASM(", "#pragma GLOBAL_ASM("): global_asm = GlobalAsmBlock("GLOBAL_ASM block at line " + str(line_no)) start_index = len(output_lines) - elif ((line.startswith('GLOBAL_ASM("') or line.startswith('#pragma GLOBAL_ASM("')) - and line.endswith('")')): - fname = line[line.index('(') + 2 : -2] - out_dependencies.append(fname) - global_asm = GlobalAsmBlock(fname) - with open(fname, encoding=opts.input_enc) as f: + elif ( + (line.startswith('GLOBAL_ASM("') or line.startswith('#pragma GLOBAL_ASM("')) + and line.endswith('")') + ) or ( + (line.startswith('INCLUDE_ASM("') or line.startswith('INCLUDE_RODATA("')) + and '",' in line + and line.endswith(");") + ): + prologue = [] + if line.startswith("INCLUDE_"): + # INCLUDE_ASM("path/to", functionname); + before, after = line.split('",', 1) + fname = before[before.index("(") + 2 :] + "/" + after.strip()[:-2] + ".s" + if line.startswith("INCLUDE_RODATA"): + prologue = [".section .rodata"] + else: + # GLOBAL_ASM("path/to/file.s") + fname = line[line.index("(") + 2 : -2] + ext_global_asm = GlobalAsmBlock(fname) + for line2 in prologue: + ext_global_asm.process_line(line2, output_enc) + try: + f = open(fname, encoding=opts.input_enc) + except FileNotFoundError: + # The GLOBAL_ASM block might be surrounded by an ifdef, so it's + # not clear whether a missing file actually represents a compile + # error. Pass the responsibility for determining that on to the + # compiler by emitting a bad include directive. (IDO treats + # #error as a warning for some reason.) + output_lines[-1] = '#include "GLOBAL_ASM:' + fname + '"' + continue + with f: for line2 in f: - global_asm.process_line(line2.rstrip(), output_enc) - src, fn = global_asm.finish(state) - output_lines[-1] = ''.join(src) + ext_global_asm.process_line(line2.rstrip(), output_enc) + src, fn = ext_global_asm.finish(state) + if state.pascal: + # Pascal has a 1600-character line length limit, so avoid putting + # everything on the same line. + src.append('#line ' + str(line_no + 1)) + output_lines[-1] = '\n'.join(src) + else: + output_lines[-1] = ''.join(src) asm_functions.append(fn) - global_asm = None + out_dependencies.append(fname) elif line == '#pragma asmproc recurse': # C includes qualified as # #pragma asmproc recurse @@ -979,25 +1010,26 @@ def parse_source(f, opts, out_dependencies, print_source=None): # Previous line was a #pragma asmproc recurse is_early_include = False if not line.startswith("#include "): - raise Failure("#pragma asmproc recurse must be followed by an #include ") - fpath = os.path.dirname(f.name) + raise Failure("#pragma asmproc recurse must be followed by an #include") + fpath = os.path.dirname(base_fname) fname = os.path.join(fpath, line[line.index(' ') + 2 : -1]) out_dependencies.append(fname) include_src = StringIO() with open(fname, encoding=opts.input_enc) as include_file: parse_source(include_file, opts, out_dependencies, include_src) - include_src.write('#line ' + str(line_no + 1) + ' "' + f.name + '"') + include_src.write('#line ' + str(line_no + 1) + ' "' + base_fname + '"') output_lines[-1] = include_src.getvalue() include_src.close() else: - # This is a hack to replace all floating-point numbers in an array of a particular type - # (in this case CutsceneData) with their corresponding IEEE-754 hexadecimal representation - if cutscene_data_regexpr.search(line) is not None: - is_cutscene_data = True - elif line.endswith("};"): - is_cutscene_data = False - if is_cutscene_data: - raw_line = re.sub(float_regexpr, repl_float_hex, raw_line) + if opts.encode_cutscene_data_floats: + # This is a hack to replace all floating-point numbers in an array of a particular type + # (in this case CutsceneData) with their corresponding IEEE-754 hexadecimal representation + if cutscene_data_regexpr.search(line) is not None: + is_cutscene_data = True + elif line.endswith("};"): + is_cutscene_data = False + if is_cutscene_data: + raw_line = re.sub(float_regexpr, repl_float_hex, raw_line) output_lines[-1] = raw_line if print_source: @@ -1057,7 +1089,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d if temp_name is None: continue assert size > 0 - loc = objfile.symtab.find_symbol(temp_name) + loc = objfile.find_symbol(temp_name) if loc is None: ifdefed = True break @@ -1151,8 +1183,8 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d source = asm_objfile.find_section(sectype) assert source is not None, "didn't find source section: " + sectype for (pos, count, temp_name, fn_desc) in to_copy[sectype]: - loc1 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_start', source) - loc2 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_end', source) + loc1 = asm_objfile.find_symbol_in_section(temp_name + '_asm_start', source) + loc2 = asm_objfile.find_symbol_in_section(temp_name + '_asm_end', source) assert loc1 == pos, "assembly and C files don't line up for section " + sectype + ", " + fn_desc if loc2 - loc1 != count: raise Failure("incorrectly computed size for section " + sectype + ", " + fn_desc + ". If using .double, make sure to provide explicit alignment padding.") @@ -1178,8 +1210,8 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d if any(all_late_rodata_dummy_bytes) or any(all_jtbl_rodata_size): source = asm_objfile.find_section('.late_rodata') target = objfile.find_section('.rodata') - source_pos = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_start, source) - source_end = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_end, source) + source_pos = asm_objfile.find_symbol_in_section(late_rodata_source_name_start, source) + source_end = asm_objfile.find_symbol_in_section(late_rodata_source_name_end, source) if source_end - source_pos != sum(map(len, all_late_rodata_dummy_bytes)) * 4 + sum(all_jtbl_rodata_size): raise Failure("computed wrong size of .late_rodata") new_data = list(target.data) @@ -1217,27 +1249,26 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d target.data = bytes(new_data) # Merge strtab data. - strtab_adj = len(objfile.symtab.strtab.data) - objfile.symtab.strtab.data += asm_objfile.symtab.strtab.data + strtab_adj = len(objfile.sym_strtab.data) + objfile.sym_strtab.data += asm_objfile.sym_strtab.data # Find relocated symbols relocated_symbols = set() for sectype in SECTIONS + ['.late_rodata']: - for obj in [asm_objfile, objfile]: - sec = obj.find_section(sectype) - if sec is None: - continue - for reltab in sec.relocated_by: - for rel in reltab.relocations: - relocated_symbols.add(obj.symtab.symbol_entries[rel.sym_index]) + sec = asm_objfile.find_section(sectype) + if sec is None: + continue + for reltab in sec.relocated_by: + for rel in reltab.relocations: + relocated_symbols.add(asm_objfile.symbol_entries[rel.sym_index]) # Move over symbols, deleting the temporary function labels. # Skip over new local symbols that aren't relocated against, to # avoid conflicts. - empty_symbol = objfile.symtab.symbol_entries[0] - new_syms = [s for s in objfile.symtab.symbol_entries[1:] if not is_temp_name(s.name)] + empty_symbol = objfile.symbol_entries[0] + new_syms = [s for s in objfile.symbol_entries[1:] if not is_temp_name(s.name)] - for i, s in enumerate(asm_objfile.symtab.symbol_entries): + for i, s in enumerate(asm_objfile.symbol_entries): is_local = (i < asm_objfile.symtab.sh_info) if is_local and s not in relocated_symbols: continue @@ -1257,7 +1288,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d s.st_shndx = objfile_section.index # glabel's aren't marked as functions, making objdump output confusing. Fix that. if s.name in all_text_glabels: - s.type = STT_FUNC + s.st_type = STT_FUNC if s.name in func_sizes: s.st_size = func_sizes[s.name] if section_name == '.late_rodata': @@ -1275,7 +1306,8 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d # Add static symbols from .mdebug, so they can be referred to from GLOBAL_ASM if mdebug_section and convert_statics != "no": - strtab_index = len(objfile.symtab.strtab.data) + static_name_count = {} + strtab_index = len(objfile.sym_strtab.data) new_strtab_data = [] ifd_max, cb_fd_offset = fmt.unpack('II', mdebug_section.data[18*4 : 20*4]) cb_sym_offset, = fmt.unpack('I', mdebug_section.data[9*4 : 10*4]) @@ -1283,20 +1315,28 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d for i in range(ifd_max): offset = cb_fd_offset + 18*4*i iss_base, _, isym_base, csym = fmt.unpack('IIII', objfile.data[offset + 2*4 : offset + 6*4]) + scope_level = 0 for j in range(csym): offset2 = cb_sym_offset + 12 * (isym_base + j) iss, value, st_sc_index = fmt.unpack('III', objfile.data[offset2 : offset2 + 12]) st = (st_sc_index >> 26) sc = (st_sc_index >> 21) & 0x1f - if st in [MIPS_DEBUG_ST_STATIC, MIPS_DEBUG_ST_STATIC_PROC]: + if st in (MIPS_DEBUG_ST_STATIC, MIPS_DEBUG_ST_STATIC_PROC): symbol_name_offset = cb_ss_offset + iss_base + iss symbol_name_offset_end = objfile.data.find(b'\0', symbol_name_offset) assert symbol_name_offset_end != -1 - symbol_name = objfile.data[symbol_name_offset : symbol_name_offset_end + 1] + symbol_name = objfile.data[symbol_name_offset : symbol_name_offset_end] + if scope_level > 1: + # For in-function statics, append an increasing counter to + # the name, to avoid duplicate conflicting symbols. + count = static_name_count.get(symbol_name, 0) + 1 + static_name_count[symbol_name] = count + symbol_name += b":" + str(count).encode("utf-8") emitted_symbol_name = symbol_name if convert_statics == "global-with-filename": # Change the emitted symbol name to include the filename, - # but don't let that affect deduplication logic. + # but don't let that affect deduplication logic (we still + # want to be able to reference statics from GLOBAL_ASM). emitted_symbol_name = objfile_name.encode("utf-8") + b":" + symbol_name section_name = {1: '.text', 2: '.data', 3: '.bss', 15: '.rodata'}[sc] section = objfile.find_section(section_name) @@ -1310,12 +1350,25 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d st_info=(binding << 4 | symtype), st_other=STV_DEFAULT, st_shndx=section.index, - strtab=objfile.symtab.strtab, - name=symbol_name[:-1].decode('latin1')) - strtab_index += len(emitted_symbol_name) - new_strtab_data.append(emitted_symbol_name) + strtab=objfile.sym_strtab, + name=symbol_name.decode('latin1')) + strtab_index += len(emitted_symbol_name) + 1 + new_strtab_data.append(emitted_symbol_name + b'\0') new_syms.append(sym) - objfile.symtab.strtab.data += b''.join(new_strtab_data) + if st in ( + MIPS_DEBUG_ST_FILE, + MIPS_DEBUG_ST_STRUCT, + MIPS_DEBUG_ST_UNION, + MIPS_DEBUG_ST_ENUM, + MIPS_DEBUG_ST_BLOCK, + MIPS_DEBUG_ST_PROC, + MIPS_DEBUG_ST_STATIC_PROC, + ): + scope_level += 1 + if st == MIPS_DEBUG_ST_END: + scope_level -= 1 + assert scope_level == 0 + objfile.sym_strtab.data += b''.join(new_strtab_data) # Get rid of duplicate symbols, favoring ones that are not UNDEF. # Skip this for unnamed local symbols though. @@ -1325,11 +1378,11 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d name_to_sym = {} for s in new_syms: if s.name == "_gp_disp": - s.type = STT_OBJECT - if s.bind == STB_LOCAL and s.st_shndx == SHN_UNDEF: + s.st_type = STT_OBJECT + if s.st_bind == STB_LOCAL and s.st_shndx == SHN_UNDEF: raise Failure("local symbol \"" + s.name + "\" is undefined") if not s.name: - if s.bind != STB_LOCAL: + if s.st_bind != STB_LOCAL: raise Failure("global symbol with no name") newer_syms.append(s) else: @@ -1337,7 +1390,9 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d if not existing: name_to_sym[s.name] = s newer_syms.append(s) - elif s.st_shndx != SHN_UNDEF: + elif s.st_shndx != SHN_UNDEF and not ( + existing.st_shndx == s.st_shndx and existing.st_value == s.st_value + ): raise Failure("symbol \"" + s.name + "\" defined twice") else: s.replace_by = existing @@ -1347,8 +1402,8 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d # Put local symbols in front, with the initial dummy entry first, and # _gp_disp at the end if it exists. new_syms.insert(0, empty_symbol) - new_syms.sort(key=lambda s: (s.bind != STB_LOCAL, s.name == "_gp_disp")) - num_local_syms = sum(1 for s in new_syms if s.bind == STB_LOCAL) + new_syms.sort(key=lambda s: (s.st_bind != STB_LOCAL, s.name == "_gp_disp")) + num_local_syms = sum(1 for s in new_syms if s.st_bind == STB_LOCAL) for i, s in enumerate(new_syms): s.new_index = i @@ -1370,7 +1425,7 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d sectype == '.rodata' and rel.r_offset in jtbl_rodata_positions): # don't include relocations for late_rodata dummy code continue - rel.sym_index = objfile.symtab.symbol_entries[rel.sym_index].new_index + rel.sym_index = objfile.symbol_entries[rel.sym_index].new_index nrels.append(rel) reltab.relocations = nrels reltab.data = b''.join(rel.to_bin() for rel in nrels) @@ -1384,28 +1439,20 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d target_sectype = '.rodata' if sectype == '.late_rodata' else sectype target = objfile.find_section(target_sectype) assert target is not None, target_sectype - target_reltab = objfile.find_section('.rel' + target_sectype) - target_reltaba = objfile.find_section('.rela' + target_sectype) for reltab in source.relocated_by: for rel in reltab.relocations: - rel.sym_index = asm_objfile.symtab.symbol_entries[rel.sym_index].new_index + rel.sym_index = asm_objfile.symbol_entries[rel.sym_index].new_index if sectype == '.late_rodata': rel.r_offset = moved_late_rodata[rel.r_offset] new_data = b''.join(rel.to_bin() for rel in reltab.relocations) - if reltab.sh_type == SHT_REL: - if not target_reltab: - target_reltab = objfile.add_section('.rel' + target_sectype, - sh_type=SHT_REL, sh_flags=0, - sh_link=objfile.symtab.index, sh_info=target.index, - sh_addralign=4, sh_entsize=8, data=b'') - target_reltab.data += new_data - else: - if not target_reltaba: - target_reltaba = objfile.add_section('.rela' + target_sectype, - sh_type=SHT_RELA, sh_flags=0, - sh_link=objfile.symtab.index, sh_info=target.index, - sh_addralign=4, sh_entsize=12, data=b'') - target_reltaba.data += new_data + prefix, sh_entsize = ('.rel', 8) if reltab.sh_type == SHT_REL else ('.rela', 12) + target_reltab = objfile.find_section(prefix + target_sectype) + if not target_reltab: + target_reltab = objfile.add_section(prefix + target_sectype, + sh_type=reltab.sh_type, sh_flags=0, + sh_link=objfile.symtab.index, sh_info=target.index, + sh_addralign=4, sh_entsize=sh_entsize, data=b'') + target_reltab.data += new_data objfile.write(objfile_name) finally: @@ -1417,16 +1464,20 @@ def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc, d pass def run_wrapped(argv, outfile, functions): + dir_path = Path(__file__).resolve().parent parser = argparse.ArgumentParser(description="Pre-process .c files and post-process .o files to enable embedding assembly into C.") parser.add_argument('filename', help="path to .c code") parser.add_argument('--post-process', dest='objfile', help="path to .o file to post-process") parser.add_argument('--assembler', dest='assembler', help="assembler command (e.g. \"mips-linux-gnu-as -march=vr4300 -mabi=32\")") - parser.add_argument('--asm-prelude', dest='asm_prelude', help="path to a file containing a prelude to the assembly file (with .set and .macro directives, e.g.)") + parser.add_argument('--asm-prelude', dest='asm_prelude', type=Path, default=dir_path / "prelude.inc", help="path to a file containing a prelude to the assembly file (with .set and .macro directives, e.g.)") parser.add_argument('--input-enc', default='latin1', help="input encoding (default: %(default)s)") parser.add_argument('--output-enc', default='latin1', help="output encoding (default: %(default)s)") parser.add_argument('--drop-mdebug-gptab', dest='drop_mdebug_gptab', action='store_true', help="drop mdebug and gptab sections") parser.add_argument('--convert-statics', dest='convert_statics', choices=["no", "local", "global", "global-with-filename"], default="local", help="change static symbol visibility (default: %(default)s)") parser.add_argument('--force', dest='force', action='store_true', help="force processing of files without GLOBAL_ASM blocks") + parser.add_argument('--keep-preprocessed', dest='keep_output_dir', type=Path, help="emit temporary files to this directory (build.py only)") + parser.add_argument('--no-dep-file', action='store_true', help="don't generate a .d make dependency file (build.py only)") + parser.add_argument('--encode-cutscene-data-floats', dest='encode_cutscene_data_floats', action='store_true', default=False, help="Replace floats with their encoded hexadecimal representation in CutsceneData data") parser.add_argument('-framepointer', dest='framepointer', action='store_true') parser.add_argument('-mips1', dest='mips1', action='store_true') parser.add_argument('-g3', dest='g3', action='store_true') @@ -1447,13 +1498,13 @@ def run_wrapped(argv, outfile, functions): raise Failure("-mips1 is only supported together with -O1 or -O2") if pascal and opt not in ('O1', 'O2', 'g3'): raise Failure("Pascal is only supported together with -O1, -O2 or -O2 -g3") - opts = Opts(opt, args.framepointer, args.mips1, args.kpic, pascal, args.input_enc, args.output_enc) + opts = Opts(opt, args.framepointer, args.mips1, args.kpic, pascal, args.input_enc, args.output_enc, args.encode_cutscene_data_floats) if args.objfile is None: with open(args.filename, encoding=args.input_enc) as f: deps = [] functions = parse_source(f, opts, out_dependencies=deps, print_source=outfile) - return functions, deps + return functions, deps, args.keep_output_dir else: if args.assembler is None: raise Failure("must pass assembler command") diff --git a/tools/asm-processor/build.py b/tools/asm-processor/build.py new file mode 100644 index 0000000..79583e2 --- /dev/null +++ b/tools/asm-processor/build.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +import sys +from pathlib import Path +import shlex +import subprocess +import tempfile +import uuid +import asm_processor + +# Preprocessed files are temporary. For debugging purposes, you can set this +# variable or pass --keep-preprocessed path/to/dir/ to keep a copy. +keep_output_dir = None +# keep_output_dir = Path("./asm_processor_preprocessed") + +progname = sys.argv[0] +all_args = sys.argv[1:] + +i = 0 +asmproc_flags = [] +while i < len(all_args): + arg = all_args[i] + if arg == "--": + i += 1 + break + if not arg.startswith("-"): + break + i += 1 + asmproc_flags.append(arg) + if arg in ("--input-enc", "--output-enc", "--asm-prelude", "--convert-statics", "--keep-preprocessed", "--no-dep-file") and i < len(all_args): + asmproc_flags.append(all_args[i]) + i += 1 + +sep0 = i +try: + sep1 = all_args.index("--", sep0) + sep2 = all_args.index("--", sep1 + 1) +except ValueError: + print(f"Usage: {progname} [options] -- -- ") + sys.exit(1) + +compiler = all_args[sep0:sep1] +assembler_args = all_args[sep1 + 1 : sep2] +compile_args = all_args[sep2 + 1 :] + +assembler_sh = " ".join(shlex.quote(x) for x in assembler_args) + + +def fail_parse(msg): + print(f"Failed to parse compiler flags: {msg}") + sys.exit(1) + +try: + out_ind = compile_args.index("-o") +except ValueError: + fail_parse("missing -o argument") + +try: + out_file = Path(compile_args[out_ind + 1]) +except IndexError: + fail_parse("missing argument after -o") + +del compile_args[out_ind + 1] +del compile_args[out_ind] + +try: + in_file = Path(compile_args[-1]) +except IndexError: + fail_parse("missing input file argument") + +del compile_args[-1] + + +in_dir = in_file.resolve().parent +opt_flags = [ + x for x in compile_args if x in {"-g3", "-g", "-O0", "-O1", "-O2", "-framepointer", "-KPIC"} +] +if "-mips2" not in compile_args: + opt_flags.append("-mips1") + +asmproc_flags += opt_flags + [str(in_file)] + +# Drop .mdebug and .gptab sections from resulting binaries. This makes +# resulting .o files much smaller and speeds up builds, but loses line +# number debug data. +# asmproc_flags += ["--drop-mdebug-gptab"] + +# Convert encoding before compiling. +# asmproc_flags += ["--input-enc", "utf-8", "--output-enc", "euc-jp"] + +with tempfile.TemporaryDirectory(prefix="asm_processor") as tmpdirname: + tmpdir_path = Path(tmpdirname) + preprocessed_filename = "preprocessed_" + uuid.uuid4().hex + in_file.suffix + preprocessed_path = tmpdir_path / preprocessed_filename + + with preprocessed_path.open("wb") as outfile: + functions, deps, keep_output_dir2 = asm_processor.run(asmproc_flags, outfile=outfile) + + keep_output_dir = keep_output_dir or keep_output_dir2 + if keep_output_dir: + import shutil + + keep_output_dir.mkdir(parents=True, exist_ok=True) + + shutil.copy( + preprocessed_path, + keep_output_dir / (in_file.stem + "_" + preprocessed_filename), + ) + + compile_cmdline = ( + compiler + + compile_args + + ["-I", str(in_dir), "-o", str(out_file), str(preprocessed_path)] + ) + + try: + subprocess.check_call(compile_cmdline) + except subprocess.CalledProcessError as e: + print("Failed to compile file " + str(in_file) + ". Command line:") + print() + print(" ".join(shlex.quote(x) for x in compile_cmdline)) + print() + sys.exit(55) + + asm_processor.run( + asmproc_flags + + [ + "--post-process", + str(out_file), + "--assembler", + assembler_sh, + ], + functions=functions, + ) + + deps_file = out_file.with_suffix(".asmproc.d") + if deps and "--no-dep-file" not in asmproc_flags: + with deps_file.open("w") as f: + f.write(str(out_file) + ": " + " \\\n ".join(deps) + "\n") + for dep in deps: + f.write("\n" + dep + ":\n") + else: + try: + deps_file.unlink() + except OSError: + pass diff --git a/tools/asm-processor/compile-test.sh b/tools/asm-processor/compile-test.sh new file mode 100644 index 0000000..3039f8a --- /dev/null +++ b/tools/asm-processor/compile-test.sh @@ -0,0 +1,41 @@ +#!/bin/bash +set -o pipefail +INPUT=$(readlink -f "$1") + +cd -- "$(dirname -- "${BASH_SOURCE[0]}")" +WD=$(pwd) +INPUT=${INPUT#"$WD"/} + +OUTPUT="${INPUT%.*}.o" +rm -f "$OUTPUT" + +CC="$MIPS_CC" # ido 7.1 via recomp or qemu-irix +AS="mips-linux-gnu-as" +ASFLAGS="-march=vr4300 -mabi=32" +OPTFLAGS=$(grep 'COMPILE-FLAGS: ' $INPUT | sed 's#^.*COMPILE-FLAGS: ##' | sed 's#}$##') +ASMPFLAGS=$(grep 'ASMP-FLAGS: ' $INPUT | sed 's#^.*ASMP-FLAGS: ##' | sed 's#}$##') +ISET=$(grep 'COMPILE-ISET: ' $INPUT | sed 's#^.*COMPILE-ISET: ##' | sed 's#}$##') +if [[ -z "$OPTFLAGS" ]]; then + OPTFLAGS="-g" +fi +CFLAGS="-Wab,-r4300_mul -G 0 -Xcpluscomm -fullwarn -wlint -woff 819,820,852,821 -signed -c" +if [[ -z "$ISET" ]]; then + CFLAGS="$CFLAGS -mips2" +fi +if [[ "$OPTFLAGS" != *-KPIC* ]]; then + CFLAGS="$CFLAGS -non_shared" +fi + +set -e + +if [[ "$2" == "python" ]]; then + PROG="python3 ./build.py" +elif [[ "$2" == "rust-release" ]]; then + PROG="./rust/target/release/asm-processor" +elif [[ "$2" == "rust-debug" ]]; then + PROG="./rust/target/debug/asm-processor" +else + echo "Usage: $0 input.c (python|rust-release|rust-debug)" +fi + +$PROG --drop-mdebug-gptab $ASMPFLAGS $CC -- $AS $ASFLAGS -- $CFLAGS $OPTFLAGS $ISET -o "$OUTPUT" "$INPUT" diff --git a/tools/asm-processor/dist-workspace.toml b/tools/asm-processor/dist-workspace.toml new file mode 100644 index 0000000..542b690 --- /dev/null +++ b/tools/asm-processor/dist-workspace.toml @@ -0,0 +1,13 @@ +[workspace] +members = ["cargo:rust/"] + +# Config for 'dist' +[dist] +# The preferred dist version to use in CI (Cargo.toml SemVer syntax) +cargo-dist-version = "0.28.0" +# CI backends to support +ci = "github" +# The installers to generate for each app +installers = [] +# Target platforms to build apps for (Rust target-triple syntax) +targets = ["aarch64-apple-darwin", "aarch64-unknown-linux-gnu", "x86_64-apple-darwin", "x86_64-unknown-linux-gnu", "x86_64-pc-windows-msvc"] diff --git a/tools/asmpreproc/include-stdin.c b/tools/asm-processor/include-stdin.c similarity index 100% rename from tools/asmpreproc/include-stdin.c rename to tools/asm-processor/include-stdin.c diff --git a/tools/asm-processor/mypy.ini b/tools/asm-processor/mypy.ini new file mode 100644 index 0000000..9a57d3c --- /dev/null +++ b/tools/asm-processor/mypy.ini @@ -0,0 +1,3 @@ +[mypy] +files = asm_processor.py, build.py + diff --git a/tools/asm-processor/prelude.inc b/tools/asm-processor/prelude.inc new file mode 100644 index 0000000..7487b7c --- /dev/null +++ b/tools/asm-processor/prelude.inc @@ -0,0 +1,55 @@ +.set noat +.set noreorder +.set gp=64 + +.macro glabel label + .global \label + \label: +.endm + +.macro dlabel label + .global \label + \label: +.endm + +.macro jlabel label + \label: +.endm + +.macro endlabel label +.endm + +# Float register aliases (o32 ABI, odd ones are rarely used) + +.set $fv0, $f0 +.set $fv0f, $f1 +.set $fv1, $f2 +.set $fv1f, $f3 +.set $ft0, $f4 +.set $ft0f, $f5 +.set $ft1, $f6 +.set $ft1f, $f7 +.set $ft2, $f8 +.set $ft2f, $f9 +.set $ft3, $f10 +.set $ft3f, $f11 +.set $fa0, $f12 +.set $fa0f, $f13 +.set $fa1, $f14 +.set $fa1f, $f15 +.set $ft4, $f16 +.set $ft4f, $f17 +.set $ft5, $f18 +.set $ft5f, $f19 +.set $fs0, $f20 +.set $fs0f, $f21 +.set $fs1, $f22 +.set $fs1f, $f23 +.set $fs2, $f24 +.set $fs2f, $f25 +.set $fs3, $f26 +.set $fs3f, $f27 +.set $fs4, $f28 +.set $fs4f, $f29 +.set $fs5, $f30 +.set $fs5f, $f31 diff --git a/tools/asm-processor/run-tests.sh b/tools/asm-processor/run-tests.sh new file mode 100644 index 0000000..0448ffb --- /dev/null +++ b/tools/asm-processor/run-tests.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +TESTS=${*:-python rust-release} + +if [[ -z "$MIPS_CC" ]]; then + echo "MIPS_CC not set" + exit 1 +fi + +cd "$(dirname "${BASH_SOURCE[0]}")" + +FAILED=0 + +OBJDUMPFLAGS=-srt +for typ in $TESTS; do + for A in tests/*.c tests/*.p; do + echo "$A ($typ)" + ./compile-test.sh "$A" $typ && mips-linux-gnu-objdump $OBJDUMPFLAGS "${A%.*}.o" | diff -w "${A%.*}.objdump" - || (echo FAIL "$A" && exit 1) + FAILED=$(( $? + $FAILED )) + done +done + +exit $(( $FAILED != 0 )) diff --git a/tools/asm-processor/rust/Cargo.lock b/tools/asm-processor/rust/Cargo.lock new file mode 100644 index 0000000..53a2741 --- /dev/null +++ b/tools/asm-processor/rust/Cargo.lock @@ -0,0 +1,236 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "anyhow" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" + +[[package]] +name = "argp" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7409aa6f1dd8464eac2e56cf538e1e5f7f79678caa32f198d214a3db8d5075c1" +dependencies = [ + "argp_derive", +] + +[[package]] +name = "argp_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d9b949411282939e3f7d8923127e3f18aa474b46da4e8bb0ddf2cb8c81f963a" +dependencies = [ + "proc-macro2", + "pulldown-cmark", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "array-init" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" + +[[package]] +name = "asm-processor" +version = "0.1.0" +dependencies = [ + "anyhow", + "argp", + "binrw", + "encoding_rs", + "enum-map", + "regex-lite", + "shlex", + "temp-dir", +] + +[[package]] +name = "binrw" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d4bca59c20d6f40c2cc0802afbe1e788b89096f61bdf7aeea6bf00f10c2909b" +dependencies = [ + "array-init", + "binrw_derive", + "bytemuck", +] + +[[package]] +name = "binrw_derive" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8ba42866ce5bced2645bfa15e97eef2c62d2bdb530510538de8dd3d04efff3c" +dependencies = [ + "either", + "owo-colors", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bytemuck" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "enum-map" +version = "2.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6866f3bfdf8207509a033af1a75a7b08abda06bbaaeae6669323fd5a097df2e9" +dependencies = [ + "enum-map-derive", +] + +[[package]] +name = "enum-map-derive" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f282cfdfe92516eb26c2af8589c274c7c17681f5ecc03c18255fe741c6aa64eb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + +[[package]] +name = "getopts" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags", + "getopts", + "memchr", + "unicase", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "temp-dir" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc1ee6eef34f12f765cb94725905c6312b6610ab2b0940889cfe58dae7bc3c72" + +[[package]] +name = "unicase" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" diff --git a/tools/asm-processor/rust/Cargo.toml b/tools/asm-processor/rust/Cargo.toml new file mode 100644 index 0000000..3ef4479 --- /dev/null +++ b/tools/asm-processor/rust/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "asm-processor" +version = "1.0.0" +edition = "2021" +description = "Pre-process .c files and post-process .o files to enable embedding MIPS assembly into IDO-compiled C." +license = "Unlicense" +repository = "https://github.com/simonlindholm/asm-processor" +readme = "../README.md" +keywords = ["decompilation", "ido", "mips", "asm"] + +[dependencies] +anyhow = "1.0" +binrw = "0.14.1" +encoding_rs = "0.8.35" +enum-map = "2.7.3" +regex-lite = "0.1.6" +shlex = "1.3.0" +temp-dir = "0.1.14" +argp = "0.4.0" + +# The profile that 'dist' will build with +[profile.dist] +inherits = "release" +lto = "thin" diff --git a/tools/asm-processor/rust/src/main.rs b/tools/asm-processor/rust/src/main.rs new file mode 100644 index 0000000..8e214ee --- /dev/null +++ b/tools/asm-processor/rust/src/main.rs @@ -0,0 +1,518 @@ +mod postprocess; +mod preprocess; + +use std::{ + borrow::Cow, + ffi::OsString, + fmt::Display, + fs::{self, File}, + io::Write, + path::{Path, PathBuf}, + process::{exit, Command}, + str::FromStr, +}; + +use anyhow::Result; +use argp::{EarlyExit, FromArgs, HelpStyle}; +use encoding_rs::EUC_JP; +use enum_map::{Enum, EnumMap}; +use temp_dir::TempDir; + +use postprocess::fixup_objfile; +use preprocess::parse_source; + +#[derive(Copy, Clone, Eq, PartialEq, Debug, Enum)] +enum OutputSection { + Text, + Data, + Rodata, + Bss, +} + +impl OutputSection { + fn as_str(&self) -> &'static str { + match self { + OutputSection::Text => ".text", + OutputSection::Data => ".data", + OutputSection::Rodata => ".rodata", + OutputSection::Bss => ".bss", + } + } +} + +impl Display for OutputSection { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{}", self.as_str()) + } +} + +#[derive(Clone, Debug)] +struct Function { + text_glabels: Vec, + asm_conts: Vec, + late_rodata_dummy_bytes: Vec<[u8; 4]>, + jtbl_rodata_size: usize, + late_rodata_asm_conts: Vec, + fn_desc: String, + data: EnumMap, usize)>, +} + +#[derive(Clone, Copy, Debug)] +enum Encoding { + Latin1, + Custom(&'static encoding_rs::Encoding), +} + +impl Encoding { + fn encode<'a>(&self, s: &'a str) -> Result> { + match self { + Encoding::Latin1 => { + if encoding_rs::mem::is_str_latin1(s) { + return Ok(encoding_rs::mem::encode_latin1_lossy(s)); + } + } + Encoding::Custom(enc) => { + if *enc == EUC_JP { + let s = s.replace("〜", "~"); + let (ret, _, failed) = enc.encode(&s); + if !failed { + return Ok(Cow::Owned(ret.into_owned())); + } + } else { + let (ret, _, failed) = enc.encode(s); + if !failed { + return Ok(ret); + } + } + } + } + Err(anyhow::anyhow!("Failed to encode string: {}", s)) + } + + fn decode<'a>(&self, bytes: &'a [u8]) -> Result> { + match self { + Encoding::Latin1 => Ok(encoding_rs::mem::decode_latin1(bytes)), + Encoding::Custom(enc) => { + let (ret, _, failed) = enc.decode(bytes); + if !failed { + Ok(ret) + } else { + Err(anyhow::anyhow!("Failed to decode string: {}", ret)) + } + } + } + } +} + +impl FromStr for Encoding { + type Err = String; + + fn from_str(s: &str) -> Result { + if s == "latin1" { + Ok(Encoding::Latin1) + } else { + match encoding_rs::Encoding::for_label(s.as_bytes()) { + Some(enc) => Ok(Encoding::Custom(enc)), + None => Err(format!("Unsupported encoding: {}", s)), + } + } + } +} + +#[derive(Copy, Clone, Debug, PartialEq)] +enum ConvertStatics { + No, + Local, + Global, + GlobalWithFilename, +} + +impl FromStr for ConvertStatics { + type Err = String; + + fn from_str(s: &str) -> Result { + Ok(match s { + "no" => ConvertStatics::No, + "local" => ConvertStatics::Local, + "global" => ConvertStatics::Global, + "global-with-filename" => ConvertStatics::GlobalWithFilename, + _ => return Err("invalid value for symbol visibility".into()), + }) + } +} + +#[derive(Clone, Copy, Debug, PartialEq)] +enum OptLevel { + O0, + O1, + O2, + G, + G3, +} + +/// Pre-process .c files and post-process .o files to enable embedding MIPS assembly into IDO-compiled C. +#[derive(FromArgs)] +struct AsmProcArgs { + /// Path to a file containing a prelude to the assembly file (with .set and .macro directives, e.g.) + #[argp(option, arg_name = "FILE")] + asm_prelude: Option, + + /// Input encoding (default: latin1) + #[argp( + option, + default = "Encoding::Latin1", + from_str_fn(FromStr::from_str), + arg_name = "ENCODING" + )] + input_enc: Encoding, + + /// Output encoding (default: latin1) + #[argp( + option, + default = "Encoding::Latin1", + from_str_fn(FromStr::from_str), + arg_name = "ENCODING" + )] + output_enc: Encoding, + + /// Drop mdebug and gptab sections + #[argp(switch)] + drop_mdebug_gptab: bool, + + /// Change symbol visibility for static variables. Mode must be one of: + /// no, local, global, global-with-filename (default: local) + #[argp( + option, + default = "ConvertStatics::Local", + from_str_fn(FromStr::from_str), + arg_name = "MODE" + )] + convert_statics: ConvertStatics, + + /// Force processing of files without GLOBAL_ASM blocks + #[argp(switch)] + force: bool, + + /// Emit temporary files to this directory + #[argp(option, arg_name = "DIR")] + keep_preprocessed: Option, + + /// Replace floats with their encoded hexadecimal representation in CutsceneData data + #[argp(switch)] + encode_cutscene_data_floats: bool, + + /// Don't generate a .d make dependency file + #[argp(switch)] + no_dep_file: bool, + + #[argp(positional, greedy)] + rest: Vec, +} + +struct CompileOpts { + opt: OptLevel, + framepointer: bool, + mips1: bool, + kpic: bool, + pascal: bool, +} + +fn extract_compiler_input_output( + compile_args: &[String], +) -> Result<(PathBuf, PathBuf, Vec), &'static str> { + let mut compile_args: Vec = compile_args.to_vec(); + let out_ind = compile_args + .iter() + .position(|arg| arg == "-o") + .ok_or("missing -o argument")?; + let out_filename = compile_args + .get(out_ind + 1) + .ok_or("missing argument after -o")? + .clone(); + compile_args.remove(out_ind + 1); + compile_args.remove(out_ind); + + let in_file_str = compile_args + .last() + .ok_or("missing input file argument")? + .clone(); + compile_args.pop(); + + let out_file: PathBuf = out_filename.into(); + let in_file: PathBuf = in_file_str.into(); + + Ok((in_file, out_file, compile_args)) +} + +fn parse_compile_args( + compile_args: &[String], + in_file: &Path, +) -> Result { + let mut opt_flags = vec![]; + for x in compile_args { + opt_flags.push(match x.as_str() { + "-g" => OptLevel::G, + "-O0" => OptLevel::O0, + "-O1" => OptLevel::O1, + "-O2" => OptLevel::O2, + _ => continue, + }); + } + + if opt_flags.len() != 1 { + return Err("exactly one of -g/-O0/-O1/-O2 must be passed"); + } + let mut opt = opt_flags[0]; + + let mips1 = !compile_args.contains(&"-mips2".to_string()); + let framepointer = compile_args.contains(&"-framepointer".to_string()); + let kpic = compile_args.contains(&"-KPIC".to_string()); + if compile_args.contains(&"-g3".to_string()) { + if opt != OptLevel::O2 { + return Err("-g3 is only supported together with -O2"); + } + opt = OptLevel::G3; + } + + if mips1 && (!matches!(opt, OptLevel::O1 | OptLevel::O2) || framepointer) { + return Err("-mips1 is only supported together with -O1 or -O2"); + } + + let in_file_str = in_file.to_string_lossy(); + let pascal = in_file_str.ends_with(".p") + || in_file_str.ends_with(".pas") + || in_file_str.ends_with(".pp"); + + if pascal && !matches!(opt, OptLevel::O1 | OptLevel::O2 | OptLevel::G3) { + return Err("Pascal is only supported together with -O1, -O2 or -O2 -g3"); + } + + Ok(CompileOpts { + opt, + framepointer, + mips1, + kpic, + pascal, + }) +} + +fn parse_rest(rest: &[String]) -> Option<(&[String], &[String], &[String])> { + let mut iter = rest.splitn(3, |x| *x == "--"); + let compiler = iter.next()?; + let assembler = iter.next()?; + let compile_args = iter.next()?; + assert!(iter.next().is_none()); + Some((compiler, assembler, compile_args)) +} + +struct ParsedArgs { + args: AsmProcArgs, + compiler: Vec, + assembler: Vec, + compile_args: Vec, + in_file: PathBuf, + out_file: PathBuf, + opts: CompileOpts, +} + +/// Parse command line arguments while allowing --a=b syntax. +/// +/// This provides backward compatibility with Python argparse. +fn from_args_allow_eq(progname: &[&str], args: &[OsString]) -> Result { + let base_res = AsmProcArgs::from_args(progname, args); + if base_res.is_ok() { + return base_res; + } + + // Try splitting up = chars successively, until we get a valid parse. + // This ensures we don't impact the compiler/assembler parts. + // + // Technically this might end up splitting --a --b=c into --a --b c even + // where --a is a flag that takes an argument --b=c, but this seems unlikely + // with our use case. + let mut i = 0; + let mut args = args.to_vec(); + while i < args.len() { + let arg = args[i].as_encoded_bytes(); + if arg.starts_with(b"--") { + if let Some(eq) = arg.iter().position(|&x| x == b'=') { + // SAFETY: splitting on ASCII still results in valid encoded bytes + let before = unsafe { OsString::from_encoded_bytes_unchecked(arg[0..eq].into()) }; + let after = unsafe { OsString::from_encoded_bytes_unchecked(arg[eq + 1..].into()) }; + args.splice(i..i + 1, [before, after]); + let new_res = AsmProcArgs::from_args(progname, &args); + if new_res.is_ok() { + return new_res; + } + i += 1; + } + } + i += 1; + } + + base_res +} + +fn parse_args_or_exit() -> ParsedArgs { + let argv: Vec<_> = std::env::args_os().collect(); + let help_style = HelpStyle { + short_usage: true, + ..HelpStyle::default() + }; + let progname = argv[0].to_string_lossy(); + + let args = from_args_allow_eq(&[&progname], &argv[1..]).unwrap_or_else(|early_exit| { + exit(match early_exit { + EarlyExit::Help(help) => { + println!( + "{}", + help.generate(&help_style).replace( + "[rest...]", + " -- -- " + ) + ); + 0 + } + EarlyExit::Err(err) => { + eprintln!("{}\nRun {} --help for more information.", err, progname); + 1 + } + }) + }); + + let Some((compiler, assembler, compile_args)) = parse_rest(&args.rest) else { + eprintln!( + "Usage: {} [options] -- -- ", + progname + ); + eprintln!("Run {} --help for more information.", progname); + exit(1); + }; + + let (in_file, out_file, compile_args) = extract_compiler_input_output(compile_args) + .unwrap_or_else(|err| { + eprintln!("Failed to parse compiler flags: {}", err); + exit(1); + }); + + let opts = parse_compile_args(&compile_args, &in_file).unwrap_or_else(|err| { + eprintln!("Unsupported compiler flags: {}", err); + exit(1); + }); + + let compiler = compiler.into(); + let assembler = assembler.into(); + + ParsedArgs { + args, + compiler, + assembler, + compile_args, + in_file, + out_file, + opts, + } +} + +fn main() -> Result<()> { + let ParsedArgs { + args, + compiler, + assembler, + compile_args, + in_file, + out_file, + opts, + } = parse_args_or_exit(); + + let assembler_sh = assembler + .iter() + .map(|s| shlex::try_quote(s).unwrap().into_owned()) + .collect::>() + .join(" "); + + let in_dir = fs::canonicalize(in_file.parent().unwrap().join("."))?; + + let temp_dir = TempDir::with_prefix("asm_processor")?; + let preprocessed_filename = format!( + "preprocessed_{}", + in_file.file_name().unwrap().to_str().unwrap() + ); + let preprocessed_path = temp_dir.path().join(&preprocessed_filename); + let mut preprocessed_file = File::create(&preprocessed_path)?; + + let res = parse_source(&in_file, &args, &opts, true)?; + preprocessed_file.write_all(&res.output)?; + + if let Some(keep_output_dir) = &args.keep_preprocessed { + fs::create_dir_all(keep_output_dir)?; + fs::copy( + &preprocessed_path, + keep_output_dir.join(&preprocessed_filename), + )?; + } + + // Run compiler + let mut compile_command = Command::new(&compiler[0]); + compile_command + .args(&compile_args) + .arg("-I") + .arg(in_dir) + .arg("-o") + .arg(&out_file) + .arg(&preprocessed_path); + + match compile_command.status() { + Ok(status) if status.success() => {} + _ => { + return Err(anyhow::anyhow!( + "Failed to compile file {}. Command line:\n\n{:?}\n", + in_file.display(), + compile_command + )); + } + } + + if !res.functions.is_empty() || args.force { + let prelude_str; + let asm_prelude = match &args.asm_prelude { + Some(prelude) => { + if let Ok(res) = fs::read_to_string(prelude) { + prelude_str = res; + &prelude_str + } else { + return Err(anyhow::anyhow!("Failed to read asm prelude")); + } + } + None => include_str!("../../prelude.inc"), + }; + + fixup_objfile( + &out_file, + &res.functions, + asm_prelude, + &assembler_sh, + &args.output_enc, + args.drop_mdebug_gptab, + args.convert_statics, + )?; + } + + if !res.deps.is_empty() && !args.no_dep_file { + let deps_file = out_file.with_extension("asmproc.d"); + let mut deps_file = File::create(&deps_file)?; + + writeln!( + deps_file, + "{}: {}", + out_file.to_str().unwrap(), + res.deps.join(" \\\n ") + )?; + + for dep in res.deps { + writeln!(deps_file, "\n{dep}:")?; + } + } + + Ok(()) +} diff --git a/tools/asm-processor/rust/src/postprocess.rs b/tools/asm-processor/rust/src/postprocess.rs new file mode 100644 index 0000000..60b782b --- /dev/null +++ b/tools/asm-processor/rust/src/postprocess.rs @@ -0,0 +1,1312 @@ +use anyhow::Result; +use std::{ + cmp::Ordering, + collections::{HashMap, HashSet}, + fs::{self, File}, + io::{self, BufWriter, Cursor, Seek, SeekFrom, Write}, + path::Path, + process::Command, +}; + +use binrw::{binrw, BinRead, BinResult, BinWrite, Endian}; +use enum_map::EnumMap; +use temp_dir::TempDir; + +use crate::{ConvertStatics, Encoding, Function, OutputSection}; + +const EI_NIDENT: usize = 16; +const EI_CLASS: usize = 4; +const EI_DATA: usize = 5; + +const SHN_UNDEF: usize = 0; +const SHN_ABS: usize = 0xfff1; +const SHN_XINDEX: usize = 0xffff; + +const STT_OBJECT: u8 = 1; +const STT_FUNC: u8 = 2; + +const STB_LOCAL: u8 = 0; +const STB_GLOBAL: u8 = 1; + +const STV_DEFAULT: u8 = 0; + +const SHT_NULL: u32 = 0; +const SHT_SYMTAB: u32 = 2; +const SHT_STRTAB: u32 = 3; +const SHT_RELA: u32 = 4; +const SHT_NOBITS: u32 = 8; +const SHT_REL: u32 = 9; +const SHT_MIPS_GPTAB: u32 = 0x70000003; +const SHT_MIPS_DEBUG: u32 = 0x70000005; + +const SHF_LINK_ORDER: u32 = 0x80; + +const MIPS_DEBUG_ST_STATIC: usize = 2; +const MIPS_DEBUG_ST_PROC: usize = 6; +const MIPS_DEBUG_ST_BLOCK: usize = 7; +const MIPS_DEBUG_ST_END: usize = 8; +const MIPS_DEBUG_ST_FILE: usize = 11; +const MIPS_DEBUG_ST_STATIC_PROC: usize = 14; +const MIPS_DEBUG_ST_STRUCT: usize = 26; +const MIPS_DEBUG_ST_UNION: usize = 27; +const MIPS_DEBUG_ST_ENUM: usize = 28; + +#[binrw] +struct ElfHeader { + e_ident: [u8; EI_NIDENT], + e_type: u16, + e_machine: u16, + e_version: u32, + e_entry: u32, + e_phoff: u32, + e_shoff: u32, + e_flags: u32, + e_ehsize: u16, + e_phentsize: u16, + e_phnum: u16, + e_shentsize: u16, + e_shnum: u16, + e_shstrndx: u16, +} + +impl ElfHeader { + const SIZE: usize = 52; + + fn new(data: &[u8], endian: Endian) -> BinResult { + let mut cursor = Cursor::new(data); + + let header = Self::read_options(&mut cursor, endian, ())?; + + assert_eq!(header.e_ident[EI_CLASS], 1, "ELF must be 32-bit"); + assert_eq!(header.e_type, 1, "ELF must be relocatable"); + assert_eq!(header.e_machine, 8, "ELF must be MIPS 1"); + assert_eq!(header.e_phoff, 0, "ELF must not have program headers"); + assert_ne!(header.e_shoff, 0, "ELF must have section headers"); + assert_ne!( + header.e_shstrndx, SHN_UNDEF as u16, + "ELF must have a section header string table" + ); + + Ok(header) + } + + fn to_bin(&self, endian: Endian) -> [u8; Self::SIZE] { + let mut rv = [0; Self::SIZE]; + let mut cursor = Cursor::new(rv.as_mut_slice()); + + self.write_options(&mut cursor, endian, ()).unwrap(); + rv + } +} + +#[binrw] +struct SymbolData { + st_name: u32, + st_value: u32, + st_size: u32, + st_info: u8, + st_other: u8, + st_shndx: u16, +} + +#[derive(Clone)] +struct Symbol { + st_name: usize, + st_value: usize, + st_size: usize, + st_shndx: usize, + st_type: u8, + st_bind: u8, + st_visibility: u8, + name: Vec, +} + +impl Symbol { + fn new(data: &[u8], strtab: &Section, endian: Endian) -> BinResult { + let mut cursor = Cursor::new(data); + + let data = SymbolData::read_options(&mut cursor, endian, ())?; + if data.st_shndx == SHN_XINDEX as u16 { + panic!("too many sections (SHN_XINDEX not supported)"); + } + let st_type = data.st_info & 0xf; + let st_bind = data.st_info >> 4; + let st_visibility = data.st_other & 0x3; + let name = strtab.lookup_str(data.st_name as usize); + + Ok(Self { + st_name: data.st_name as usize, + st_value: data.st_value as usize, + st_size: data.st_size as usize, + st_shndx: data.st_shndx as usize, + st_type, + st_bind, + st_visibility, + name, + }) + } + + fn to_bin(&self) -> Vec { + let mut rv = vec![]; + let mut cursor = Cursor::new(&mut rv); + + SymbolData { + st_name: self.st_name as u32, + st_value: self.st_value as u32, + st_size: self.st_size as u32, + st_info: self.st_bind << 4 | self.st_type, + st_other: self.st_visibility, + st_shndx: self.st_shndx as u16, + } + .write_options(&mut cursor, Endian::Big, ()) + .unwrap(); + rv + } +} + +#[derive(Clone)] +struct Relocation { + r_offset: usize, + sym_index: usize, + rel_type: u32, + r_addend: Option, +} + +impl Relocation { + fn new(data: &[u8], sh_type: u32, endian: Endian) -> BinResult { + let mut cursor = Cursor::new(data); + + let r_offset = u32::read_options(&mut cursor, endian, ())? as usize; + let r_info = u32::read_options(&mut cursor, endian, ())?; + let r_addend = if sh_type == SHT_REL { + None + } else { + Some(u32::read_options(&mut cursor, endian, ())?) + }; + + let sym_index = (r_info >> 8) as usize; + let rel_type = r_info & 0xff; + + Ok(Self { + r_offset, + sym_index, + rel_type, + r_addend, + }) + } + + fn to_bin(&self, endian: Endian) -> Vec { + let mut rv = vec![]; + let mut cursor = Cursor::new(&mut rv); + let r_offset = self.r_offset as u32; + let r_info = ((self.sym_index as u32) << 8) | self.rel_type; + r_offset.write_options(&mut cursor, endian, ()).unwrap(); + r_info.write_options(&mut cursor, endian, ()).unwrap(); + self.r_addend + .write_options(&mut cursor, endian, ()) + .unwrap(); + rv + } +} + +#[binrw] +struct Hdrr { + magic: u16, + vstamp: u16, + iline_max: u32, + cb_line: u32, + cb_line_offset: u32, + idn_max: u32, + cb_dn_offset: u32, + ipd_max: u32, + cb_pd_offset: u32, + isym_max: u32, + cb_sym_offset: u32, + iopt_max: u32, + cb_opt_offset: u32, + iaux_max: u32, + cb_aux_offset: u32, + iss_max: u32, + cb_ss_offset: u32, + iss_ext_max: u32, + cb_ss_ext_offset: u32, + ifd_max: u32, + cb_fd_offset: u32, + crfd: u32, + cb_rfd_offset: u32, + iext_max: u32, + cb_ext_offset: u32, +} + +impl Hdrr { + const SIZE: usize = 96; +} + +#[binrw] +#[derive(Clone)] +struct SectionHeader { + sh_name: u32, + sh_type: u32, + sh_flags: u32, + sh_addr: u32, + sh_offset: u32, + sh_size: u32, + sh_link: u32, + sh_info: u32, + sh_addralign: u32, + sh_entsize: u32, +} + +impl SectionHeader { + const SIZE: usize = 40; +} + +#[derive(Clone)] +struct Section { + header: SectionHeader, + data: Vec, + index: usize, + relocated_by: Vec, + relocations: Vec, + name: String, +} + +impl Section { + fn new(data: &[u8], other_data: &[u8], index: usize, endian: Endian) -> BinResult { + let mut cursor = Cursor::new(data); + + let header = SectionHeader::read_options(&mut cursor, endian, ())?; + assert!(header.sh_flags & SHF_LINK_ORDER == 0); + if header.sh_entsize != 0 { + assert_eq!(header.sh_size % header.sh_entsize, 0); + } + + let data = if header.sh_type == SHT_NOBITS { + vec![] + } else { + other_data[header.sh_offset as usize..(header.sh_offset + header.sh_size) as usize] + .to_vec() + }; + Ok(Self { + header, + data, + index, + relocated_by: vec![], + relocations: vec![], + name: "".into(), + }) + } + + fn from_parts( + sh_name: u32, + fields: &HeaderFields, + data: &[u8], + index: usize, + endian: Endian, + ) -> Self { + let header = SectionHeader { + sh_name, + sh_type: fields.sh_type, + sh_flags: fields.sh_flags, + sh_addr: 0, + sh_offset: 0, + sh_size: data.len() as u32, + sh_link: fields.sh_link, + sh_info: fields.sh_info, + sh_addralign: fields.sh_addralign, + sh_entsize: fields.sh_entsize, + }; + + let mut rv = [0; SectionHeader::SIZE]; + let mut cursor = Cursor::new(rv.as_mut_slice()); + + header.write_options(&mut cursor, endian, ()).unwrap(); + + Self::new(&rv, data, index, endian).unwrap() + } + + fn lookup_str(&self, index: usize) -> Vec { + assert_eq!(self.header.sh_type, SHT_STRTAB); + let to = self.data[index..] + .iter() + .position(|&x| x == 0) + .expect("bad strtab index") + + index; + self.data[index..to].to_owned() + } + + fn add_str(&mut self, string: &[u8]) -> u32 { + assert_eq!(self.header.sh_type, SHT_STRTAB); + let index = self.data.len() as u32; + + self.data.extend_from_slice(string); + self.data.push(0); + index + } + + fn is_rel(&self) -> bool { + self.header.sh_type == SHT_REL || self.header.sh_type == SHT_RELA + } + + fn header_to_bin(&mut self, endian: Endian) -> [u8; SectionHeader::SIZE] { + if self.header.sh_type != SHT_NOBITS { + self.header.sh_size = self.data.len() as u32; + } + + let mut rv = [0; SectionHeader::SIZE]; + let mut cursor = Cursor::new(rv.as_mut_slice()); + + self.header.write_options(&mut cursor, endian, ()).unwrap(); + + rv + } + + fn init_relocs(&mut self, endian: Endian) { + assert!(self.is_rel()); + + let mut entries = vec![]; + for i in (0..self.header.sh_size).step_by(self.header.sh_entsize as usize) { + entries.push( + Relocation::new( + &self.data[i as usize..(i + self.header.sh_entsize) as usize], + self.header.sh_type, + endian, + ) + .unwrap(), + ); + } + self.relocations = entries; + } + + fn relocate_mdebug(&mut self, original_offset: u32, endian: Endian) { + assert_eq!(self.header.sh_type, SHT_MIPS_DEBUG); + let shift_by = self.header.sh_offset.wrapping_sub(original_offset); + + let mut hdrr = Hdrr::read_options(&mut Cursor::new(&self.data), endian, ()).unwrap(); + + assert_eq!(hdrr.magic, 0x7009); + + let relocate = |a, b: &mut u32| { + if a != 0 { + *b = b.wrapping_add(shift_by); + } + }; + relocate(hdrr.cb_line, &mut hdrr.cb_line_offset); + relocate(hdrr.idn_max, &mut hdrr.cb_dn_offset); + relocate(hdrr.ipd_max, &mut hdrr.cb_pd_offset); + relocate(hdrr.isym_max, &mut hdrr.cb_sym_offset); + relocate(hdrr.iopt_max, &mut hdrr.cb_opt_offset); + relocate(hdrr.iaux_max, &mut hdrr.cb_aux_offset); + relocate(hdrr.iss_max, &mut hdrr.cb_ss_offset); + relocate(hdrr.iss_ext_max, &mut hdrr.cb_ss_ext_offset); + relocate(hdrr.ifd_max, &mut hdrr.cb_fd_offset); + relocate(hdrr.crfd, &mut hdrr.cb_rfd_offset); + relocate(hdrr.iext_max, &mut hdrr.cb_ext_offset); + + let mut new_data = [0; Hdrr::SIZE]; + let mut cursor = Cursor::new(new_data.as_mut_slice()); + hdrr.write_options(&mut cursor, endian, ()).unwrap(); + + self.data = new_data.to_vec(); + } +} + +struct ElfFile { + data: Vec, + endian: Endian, + header: ElfHeader, + sections: Vec
, + symbol_entries: Vec, + symtab: usize, + sym_strtab: usize, +} + +struct HeaderFields { + sh_type: u32, + sh_flags: u32, + sh_link: u32, + sh_info: u32, + sh_addralign: u32, + sh_entsize: u32, +} + +impl ElfFile { + fn new(data: &[u8]) -> BinResult { + let data = data.to_vec(); + assert_eq!(data[..4], [0x7f, b'E', b'L', b'F']); + + let endian: Endian = if data[EI_DATA] == 1 { + Endian::Little + } else if data[5] == 2 { + Endian::Big + } else { + panic!("Invalid ELF endianness"); + }; + let header = ElfHeader::new(&data[..ElfHeader::SIZE], endian).unwrap(); + let offset = header.e_shoff as usize; + let size = header.e_shentsize as usize; + let null_section = Section::new(&data[offset..offset + size], &data, 0, endian).unwrap(); + let num_sections = if header.e_shnum == 0 { + null_section.header.sh_size as usize + } else { + header.e_shnum as usize + }; + let mut sections = vec![null_section]; + + for i in 1..num_sections { + let ind = offset + i * size; + let section = Section::new(&data[ind..ind + size], &data, i, endian).unwrap(); + sections.push(section); + } + + let symtab_index = sections + .iter() + .position(|s| s.header.sh_type == SHT_SYMTAB) + .expect("missing symtab"); + let sym_strtab_index = sections[symtab_index].header.sh_link as usize; + + let symtab = §ions[symtab_index]; + let sym_strtab = §ions[sym_strtab_index]; + let symbol_entries = ElfFile::init_symbols(symtab, sym_strtab, endian); + + let shstr = sections[header.e_shstrndx as usize].clone(); + + for i in 0..sections.len() { + let s = &mut sections[i]; + s.name = String::from_utf8(shstr.lookup_str(s.header.sh_name as usize)).unwrap(); + assert!(s.name.is_ascii()); + + if s.is_rel() { + let target_index = s.header.sh_info as usize; + s.init_relocs(endian); + sections[target_index].relocated_by.push(i); + } + } + + Ok(ElfFile { + data, + endian, + header, + sections, + symbol_entries, + symtab: symtab_index, + sym_strtab: sym_strtab_index, + }) + } + + fn find_section(&self, name: &str) -> Option<&Section> { + self.sections.iter().find(|s| s.name == name) + } + + fn find_section_mut(&mut self, name: &str) -> Option<&mut Section> { + self.sections.iter_mut().find(|s| s.name == name) + } + + fn symtab(&self) -> &Section { + &self.sections[self.symtab] + } + + fn symtab_mut(&mut self) -> &mut Section { + &mut self.sections[self.symtab] + } + + fn sym_strtab(&self) -> &Section { + &self.sections[self.sym_strtab] + } + + fn sym_strtab_mut(&mut self) -> &mut Section { + &mut self.sections[self.sym_strtab] + } + + fn init_symbols(symtab: &Section, strtab: &Section, endian: Endian) -> Vec { + assert_eq!(symtab.header.sh_type, SHT_SYMTAB); + assert_eq!(symtab.header.sh_entsize, 16); + + let mut syms = Vec::new(); + for i in 0..(symtab.data.len() / 16) { + syms.push(Symbol::new(&symtab.data[i * 16..(i + 1) * 16], strtab, endian).unwrap()); + } + syms + } + + fn find_symbol(&self, name: &[u8]) -> Option<(usize, usize)> { + for s in &self.symbol_entries { + if s.name == name { + return Some((s.st_shndx, s.st_value)); + } + } + None + } + + fn find_symbol_in_section(&self, name: &[u8], section: &Section) -> usize { + let Some((st_shndx, st_value)) = self.find_symbol(name) else { + panic!("failed to find symbol: {}", String::from_utf8_lossy(name)); + }; + if st_shndx != section.index { + panic!( + "symbol {} is in wrong section", + String::from_utf8_lossy(name) + ); + } + st_value + } + + fn add_section(&mut self, name: &str, fields: &HeaderFields, data: &[u8], endian: Endian) { + let shstr = self + .sections + .get_mut(self.header.e_shstrndx as usize) + .expect("bad e_shstrndx"); + let sh_name = shstr.add_str(name.as_bytes()); + let mut s = Section::from_parts(sh_name, fields, data, self.sections.len(), endian); + s.name = name.to_string(); + self.sections.push(s); + } + + fn drop_mdebug_gptab(&mut self) { + // We can only drop sections at the end, since otherwise section + // references might be wrong. Luckily, these sections typically are. + while let Some(s) = self.sections.last() { + if s.header.sh_type != SHT_MIPS_DEBUG && s.header.sh_type != SHT_MIPS_GPTAB { + break; + } + self.sections.pop(); + } + } + + fn pad_out(writer: &mut BufWriter<&mut File>, align: usize) -> io::Result<()> { + let pos = writer.stream_position()? as usize; + + if align > 0 && pos % align != 0 { + let pad = align - (pos % align); + for _ in 0..pad { + writer.write_all(&[0])?; + } + } + Ok(()) + } + + fn write(&mut self, writer: &mut BufWriter<&mut File>) -> io::Result<()> { + self.header.e_shnum = self.sections.len() as u16; + writer.write_all(&self.header.to_bin(self.endian))?; + + for s in &mut self.sections { + if s.header.sh_type != SHT_NOBITS && s.header.sh_type != SHT_NULL { + Self::pad_out(writer, s.header.sh_addralign as usize)?; + let old_offset = s.header.sh_offset; + s.header.sh_offset = writer.stream_position()? as u32; + if s.header.sh_type == SHT_MIPS_DEBUG && s.header.sh_offset != old_offset { + // The .mdebug section has moved, relocate offsets + s.relocate_mdebug(old_offset, self.endian); + } + writer.write_all(&s.data)?; + } + } + + Self::pad_out(writer, 4)?; + self.header.e_shoff = writer.stream_position()? as u32; + + for s in &mut self.sections { + writer.write_all(&s.header_to_bin(self.endian))?; + } + + writer.seek(SeekFrom::Start(0))?; + writer.write_all(&self.header.to_bin(self.endian))?; + writer.flush()?; + Ok(()) + } +} + +pub(crate) fn fixup_objfile( + objfile_path: &Path, + functions: &[Function], + asm_prelude: &str, + assembler: &str, + output_enc: &Encoding, + drop_mdebug_gptab: bool, + convert_statics: ConvertStatics, +) -> Result<()> { + const OUTPUT_SECTIONS: [OutputSection; 4] = [ + OutputSection::Data, + OutputSection::Text, + OutputSection::Rodata, + OutputSection::Bss, + ]; + const INPUT_SECTION_NAMES: [&str; 5] = [".data", ".text", ".rodata", ".bss", ".late_rodata"]; + + let objfile_data = fs::read(objfile_path)?; + let mut objfile = ElfFile::new(&objfile_data)?; + let endian = objfile.endian; + + let mut prev_locs: EnumMap = EnumMap::default(); + + struct ToCopyData { + loc: usize, + size: usize, + temp_name: String, + fn_desc: String, + } + + let mut to_copy: EnumMap> = EnumMap::default(); + + let mut asm: Vec = vec![]; + let mut all_late_rodata_dummy_bytes: Vec> = vec![]; + let mut all_jtbl_rodata_size: Vec = vec![]; + let mut late_rodata_asm: Vec = vec![]; + let late_rodata_source_name_start = "_asmpp_late_rodata_start"; + let late_rodata_source_name_end = "_asmpp_late_rodata_end"; + + // Generate an assembly file with all the assembly we need to fill in. For + // simplicity we pad with nops/.space so that addresses match exactly, so we + // don't have to fix up relocations/symbol references. + let mut all_text_glabels: HashSet> = HashSet::new(); + let mut func_sizes: HashMap, usize> = HashMap::new(); + + for function in functions.iter() { + let text_glabels = function + .text_glabels + .iter() + .map(|x| output_enc.encode(x)) + .collect::>>()?; + let mut ifdefed = false; + for (sectype, &(ref temp_name, size)) in function.data.iter() { + let Some(temp_name) = temp_name else { continue }; + if size == 0 { + panic!("Size of section {} is 0", sectype.as_str()); + } + let Some((_, loc)) = objfile.find_symbol(temp_name.as_bytes()) else { + ifdefed = true; + break; + }; + let prev_loc = prev_locs[sectype]; + if loc < prev_loc { + // If the dummy C generates too little asm, and we have two + // consecutive GLOBAL_ASM blocks, we detect that error here. + // On the other hand, if it generates too much, we don't have + // a good way of discovering that error: it's indistinguishable + // from a static symbol occurring after the GLOBAL_ASM block. + panic!( + "Wrongly computed size for section {} (diff {}). This is an asm-processor bug!", + sectype, + prev_loc - loc + ); + } + if loc != prev_loc { + asm.push(format!(".section {}", sectype)); + if sectype == OutputSection::Text { + for _ in 0..((loc - prev_loc) / 4) { + asm.push("nop".to_owned()); + } + } else { + asm.push(format!(".space {}", loc - prev_loc)); + } + } + to_copy[sectype].push(ToCopyData { + loc, + size, + temp_name: temp_name.clone(), + fn_desc: function.fn_desc.clone(), + }); + if !text_glabels.is_empty() && sectype == OutputSection::Text { + func_sizes.insert(text_glabels[0].to_vec(), size); + } + prev_locs[sectype] = loc + size; + } + + if !ifdefed { + all_text_glabels.extend(text_glabels.iter().map(|x| x.to_vec())); + all_late_rodata_dummy_bytes.push(function.late_rodata_dummy_bytes.clone()); + all_jtbl_rodata_size.push(function.jtbl_rodata_size); + late_rodata_asm.extend(function.late_rodata_asm_conts.iter().cloned()); + for (sectype, (temp_name, _)) in function.data.iter() { + if let Some(temp_name) = temp_name { + asm.push(format!(".section {}", sectype)); + asm.push(format!("glabel {}_asm_start", temp_name)); + } + } + asm.push(".text".to_owned()); + asm.extend(function.asm_conts.iter().cloned()); + for (sectype, (temp_name, _)) in function.data.iter() { + if let Some(temp_name) = temp_name { + asm.push(format!(".section {}", sectype)); + asm.push(format!("glabel {}_asm_end", temp_name)); + } + } + } + } + + if !late_rodata_asm.is_empty() { + asm.push(".section .late_rodata".to_string()); + // Put some padding at the start to avoid conflating symbols with + // references to the whole section. + asm.push(".word 0, 0".to_string()); + asm.push(format!("glabel {}", late_rodata_source_name_start)); + asm.extend(late_rodata_asm.iter().cloned()); + asm.push(format!("glabel {}", late_rodata_source_name_end)); + } + + let temp_dir = TempDir::with_prefix("asm_processor")?; + + let obj_stem = objfile_path.file_stem().unwrap().to_str().unwrap(); + + let o_file_path = temp_dir + .path() + .join(format!("asm_processor_{}.o", obj_stem)); + let s_file_path = temp_dir + .path() + .join(format!("asm_processor_{}.s", obj_stem)); + { + let mut s_file = File::create(&s_file_path)?; + s_file.write_all(&output_enc.encode(asm_prelude)?)?; + s_file.write_all(&output_enc.encode("\n")?)?; + + for line in asm { + s_file.write_all(&output_enc.encode(&line)?)?; + s_file.write_all(&output_enc.encode("\n")?)?; + } + } + + let status = Command::new("sh") + .arg("-c") + .arg(format!( + "{} {} -o {}", + assembler, + shlex::try_quote(s_file_path.to_str().unwrap()).unwrap(), + shlex::try_quote(o_file_path.to_str().unwrap()).unwrap(), + )) + .status() + .expect("Failed to run shell"); + if !status.success() { + return Err(anyhow::anyhow!("Failed to assemble")); + } + let asm_objfile = ElfFile::new(&fs::read(&o_file_path)?)?; + + // Remove clutter from objdump output for tests, and make the tests + // portable by avoiding absolute paths. Outside of tests .mdebug is + // useful for showing source together with asm, though. + let mdebug_section = objfile.find_section(".mdebug").cloned(); + if drop_mdebug_gptab { + objfile.drop_mdebug_gptab(); + } + + // Unify reginfo sections + if let Some(target_reginfo) = objfile.find_section_mut(".reginfo") { + let source_reginfo = &asm_objfile + .find_section(".reginfo") + .expect("couldn't find source .reginfo"); + for (s, t) in source_reginfo + .data + .iter() + .zip(target_reginfo.data.iter_mut()) + { + *t |= *s; + } + } + + // Move over section contents + let mut modified_text_positions = HashSet::new(); + let mut jtbl_rodata_positions: HashSet = HashSet::new(); + let mut last_rodata_pos = 0; + for sectype in OUTPUT_SECTIONS { + if to_copy[sectype].is_empty() { + continue; + } + let Some(source) = asm_objfile.find_section(sectype.as_str()) else { + panic!("didn't find source section: {}", sectype); + }; + for &ToCopyData { + loc, + size, + ref temp_name, + ref fn_desc, + } in to_copy[sectype].iter() + { + let loc1 = asm_objfile + .find_symbol_in_section(format!("{}_asm_start", &temp_name).as_bytes(), source); + let loc2 = asm_objfile + .find_symbol_in_section(format!("{}_asm_end", &temp_name).as_bytes(), source); + if loc1 != loc { + panic!( + "assembly and C files don't line up for section {}, {}", + sectype, fn_desc + ); + } + if loc2 - loc1 != size { + return Err(anyhow::anyhow!( + "incorrectly computed size for section {}, {}. If using .double, make sure to provide explicit alignment padding.", + sectype, + fn_desc + )); + } + } + + if sectype == OutputSection::Bss { + continue; + } + + let Some(target) = objfile.find_section_mut(sectype.as_str()) else { + panic!("didn't find target section: {}", sectype); + }; + + for &ToCopyData { loc, size, .. } in to_copy[sectype].iter() { + target.data[loc..loc + size].copy_from_slice(&source.data[loc..loc + size]); + + if sectype == OutputSection::Text { + assert_eq!(size % 4, 0); + assert_eq!(loc % 4, 0); + for j in 0..size / 4 { + modified_text_positions.insert(loc + 4 * j); + } + } else if sectype == OutputSection::Rodata { + last_rodata_pos = loc + size; + } + } + } + + // Move over late rodata. This is heuristic, sadly, since I can't think + // of another way of doing it. + let mut moved_late_rodata: HashMap = HashMap::new(); + if all_late_rodata_dummy_bytes.iter().any(|b| !b.is_empty()) + || all_jtbl_rodata_size.iter().any(|&s| s > 0) + { + let source = asm_objfile + .find_section(".late_rodata") + .expect(".late_rodata source section should exist"); + let target = objfile + .find_section_mut(".rodata") + .expect(".rodata target section should exist"); + let mut source_pos = + asm_objfile.find_symbol_in_section(late_rodata_source_name_start.as_bytes(), source); + let source_end = + asm_objfile.find_symbol_in_section(late_rodata_source_name_end.as_bytes(), source); + let num_dummies: usize = all_late_rodata_dummy_bytes.iter().map(|x| x.len()).sum(); + let expected_size = num_dummies * 4 + all_jtbl_rodata_size.iter().sum::(); + + if source_end - source_pos != expected_size { + return Err(anyhow::anyhow!("computed wrong size of .late_rodata")); + } + let mut new_data = target.data.clone(); + + for (dummy_bytes_list, &jtbl_rodata_size) in all_late_rodata_dummy_bytes + .iter_mut() + .zip(all_jtbl_rodata_size.iter()) + { + let dummy_bytes_list_len = dummy_bytes_list.len(); + + for (index, dummy_bytes) in dummy_bytes_list.iter_mut().enumerate() { + if endian == Endian::Little { + dummy_bytes.reverse(); + } + + let mut pos = target.data[last_rodata_pos..] + .windows(4) + .position(|x| x == dummy_bytes) + .expect("failed to find dummy .late_rodata bytes") + + last_rodata_pos; + + if index == 0 + && dummy_bytes_list_len > 1 + && target.data[pos + 4..pos + 8] == *b"\0\0\0\0" + { + // Ugly hack to handle double alignment for non-matching builds. + // We were told by .late_rodata_alignment (or deduced from a .double) + // that a function's late_rodata started out 4 (mod 8), and emitted + // a float and then a double. But it was actually 0 (mod 8), so our + // double was moved by 4 bytes. To make them adjacent to keep jump + // tables correct, move the float by 4 bytes as well. + new_data[pos..pos + 4].copy_from_slice(b"\0\0\0\0"); + pos += 4; + } + new_data[pos..pos + 4].copy_from_slice(&source.data[source_pos..source_pos + 4]); + moved_late_rodata.insert(source_pos, pos); + last_rodata_pos = pos + 4; + source_pos += 4; + } + + if jtbl_rodata_size > 0 { + assert!(!dummy_bytes_list.is_empty()); + let pos = last_rodata_pos; + new_data[pos..pos + jtbl_rodata_size] + .copy_from_slice(&source.data[source_pos..source_pos + jtbl_rodata_size]); + for i in (0..jtbl_rodata_size).step_by(4) { + moved_late_rodata.insert(source_pos + i, pos + i); + jtbl_rodata_positions.insert(pos + i); + } + last_rodata_pos += jtbl_rodata_size; + source_pos += jtbl_rodata_size; + } + } + target.data = new_data; + } + + // Merge strtab data. + let strtab = objfile.sym_strtab_mut(); + let strtab_adj = strtab.data.len(); + strtab.data.extend(&asm_objfile.sym_strtab().data); + + // Find relocated symbols in asm_objfile + let mut relocated_symbols = HashSet::new(); + for sectype in INPUT_SECTION_NAMES.iter() { + if let Some(sec) = asm_objfile.find_section(sectype) { + for reltab_idx in &sec.relocated_by { + let reltab = &asm_objfile.sections[*reltab_idx]; + for rel in &reltab.relocations { + relocated_symbols.insert(rel.sym_index); + } + } + } + } + + enum SymInd { + Obj(usize), + Asm(usize), + } + + // Move over symbols, deleting the temporary function labels. + // Skip over new local symbols that aren't relocated against, to + // avoid conflicts. + let empty_symbol = objfile.symbol_entries[0].clone(); + let mut new_syms: Vec<(Symbol, Vec)> = objfile + .symbol_entries + .iter() + .enumerate() + .map(|(i, x)| (x, vec![SymInd::Obj(i)])) + .skip(1) + .filter(|(x, _)| !x.name.starts_with(b"_asmpp_")) + .map(|(x, inds)| (x.clone(), inds)) + .collect(); + + for (i, s) in asm_objfile.symbol_entries.iter().enumerate() { + let is_local = i < asm_objfile.symtab().header.sh_info as usize; + if is_local && !relocated_symbols.contains(&i) { + continue; + } + if s.name.starts_with(b"_asmpp_") { + assert!(!relocated_symbols.contains(&i)); + continue; + } + let mut s = s.clone(); + if s.st_shndx != SHN_UNDEF && s.st_shndx != SHN_ABS { + let section_name = asm_objfile.sections[s.st_shndx].name.clone(); + let mut target_section_name = section_name.clone(); + if section_name == ".late_rodata" { + target_section_name = ".rodata".to_string(); + } else if !INPUT_SECTION_NAMES.contains(§ion_name.as_str()) { + return Err(anyhow::anyhow!( + "generated assembly .o must only have symbols for .text, .data, .rodata, .late_rodata, ABS and UNDEF, but found {}", + section_name + )); + } + let Some(objfile_section) = objfile.find_section(&target_section_name) else { + return Err(anyhow::anyhow!( + "generated assembly .o has section that real objfile lacks: {}", + target_section_name + )); + }; + s.st_shndx = objfile_section.index; + // glabels aren't marked as functions, making objdump output confusing. Fix that. + if all_text_glabels.contains(&s.name) { + s.st_type = STT_FUNC; + if let Some(&size) = func_sizes.get(&s.name) { + s.st_size = size; + } + } + if section_name == ".late_rodata" { + if s.st_value == 0 { + // This must be a symbol corresponding to the whole .late_rodata + // section, being referred to from a relocation. + // Moving local symbols is tricky, because it requires fixing up + // lo16/hi16 relocation references to .late_rodata+. + // Just disallow it for now. + return Err(anyhow::anyhow!( + "local symbols in .late_rodata are not allowed" + )); + } + s.st_value = moved_late_rodata[&s.st_value]; + } + } + s.st_name += strtab_adj; + new_syms.push((s, vec![SymInd::Asm(i)])); + } + + // Add static symbols from .mdebug, so they can be referred to from GLOBAL_ASM + if mdebug_section.is_some() && convert_statics != ConvertStatics::No { + let mdebug_section = mdebug_section.unwrap(); + let mut static_name_count: HashMap, usize> = HashMap::new(); + let mut strtab_index = objfile.sym_strtab().data.len(); + let mut new_strtab_data = vec![]; + + let read_u32 = |data: &[u8], offset| { + u32::from_be_bytes(data[offset..offset + 4].try_into().unwrap()) as usize + }; + + let ifd_max = read_u32(&mdebug_section.data, 18 * 4); + let cb_fd_offset = read_u32(&mdebug_section.data, 19 * 4); + let cb_sym_offset = read_u32(&mdebug_section.data, 9 * 4); + let cb_ss_offset = read_u32(&mdebug_section.data, 15 * 4); + + for i in 0..ifd_max { + let offset = cb_fd_offset + 18 * 4 * i; + let iss_base = read_u32(&objfile.data, offset + 2 * 4); + let isym_base = read_u32(&objfile.data, offset + 4 * 4); + let csym = read_u32(&objfile.data, offset + 5 * 4); + let mut scope_level = 0; + + for j in 0..csym { + let offset2 = cb_sym_offset + 12 * (isym_base + j); + let iss = read_u32(&objfile.data, offset2); + let value = read_u32(&objfile.data, offset2 + 4); + let st_sc_index = read_u32(&objfile.data, offset2 + 8); + let st = st_sc_index >> 26; + let sc = (st_sc_index >> 21) & 0x1F; + + if st == MIPS_DEBUG_ST_STATIC || st == MIPS_DEBUG_ST_STATIC_PROC { + let symbol_name_offset = cb_ss_offset + iss_base + iss; + let symbol_name_offset_end = objfile_data[symbol_name_offset..] + .iter() + .position(|x| *x == 0) + .expect("bad .mdebug strtab reference") + + symbol_name_offset; + let mut symbol_name = + objfile_data[symbol_name_offset..symbol_name_offset_end].to_owned(); + if scope_level > 1 { + // For in-function statics, append an increasing counter to + // the name, to avoid duplicate conflicting symbols. + let count = static_name_count.get(&symbol_name).unwrap_or(&0) + 1; + static_name_count.insert(symbol_name.clone(), count); + symbol_name.extend(format!(":{}", count).as_bytes()); + } + let mut emitted_symbol_name = symbol_name.clone(); + if convert_statics == ConvertStatics::GlobalWithFilename { + // Change the emitted symbol name to include the filename, + // but don't let that affect deduplication logic (we still + // want to be able to reference statics from GLOBAL_ASM). + let mut new_name = objfile_path.to_string_lossy().into_owned().into_bytes(); + new_name.push(b':'); + new_name.extend(emitted_symbol_name); + emitted_symbol_name = new_name; + }; + let section_name = match sc { + 1 => ".text", + 2 => ".data", + 3 => ".bss", + 15 => ".rodata", + _ => { + return Err(anyhow::anyhow!("unsupported MIPS_DEBUG_SC value: {}", sc)); + } + }; + let Some(section) = objfile.find_section(section_name) else { + panic!( + "couldn't find section referenced from .mdebug: {}", + section_name + ); + }; + let symtype = if sc == 1 { STT_FUNC } else { STT_OBJECT }; + let binding = match convert_statics { + ConvertStatics::Global | ConvertStatics::GlobalWithFilename => STB_GLOBAL, + _ => STB_LOCAL, + }; + let sym = Symbol { + st_name: strtab_index, + st_value: value, + st_size: 0, + st_bind: binding, + st_type: symtype, + st_visibility: STV_DEFAULT, + st_shndx: section.index, + name: symbol_name, + }; + strtab_index += emitted_symbol_name.len() + 1; + new_strtab_data.extend(&emitted_symbol_name); + new_strtab_data.push(b'\0'); + new_syms.push((sym, vec![])); + } + match st { + MIPS_DEBUG_ST_FILE + | MIPS_DEBUG_ST_STRUCT + | MIPS_DEBUG_ST_UNION + | MIPS_DEBUG_ST_ENUM + | MIPS_DEBUG_ST_BLOCK + | MIPS_DEBUG_ST_PROC + | MIPS_DEBUG_ST_STATIC_PROC => { + scope_level += 1; + } + MIPS_DEBUG_ST_END => { + scope_level -= 1; + } + _ => {} + } + } + assert_eq!(scope_level, 0); + } + + objfile.sym_strtab_mut().data.extend(new_strtab_data); + } + + // Get rid of duplicate symbols, favoring ones that are not UNDEF. + // Skip this for unnamed local symbols though. + new_syms.sort_by(|(a, _), (b, _)| { + if a.st_shndx != SHN_UNDEF && b.st_shndx == SHN_UNDEF { + Ordering::Less + } else { + Ordering::Greater + } + }); + + let new_syms_prev = new_syms; + let mut new_syms = vec![]; + let mut name_to_sym = HashMap::new(); + for (mut s, inds) in new_syms_prev { + if s.name == b"_gp_disp" { + s.st_type = STT_OBJECT; + } + if s.st_bind == STB_LOCAL && s.st_shndx == SHN_UNDEF { + return Err(anyhow::anyhow!( + "local symbol \"{}\" is undefined", + String::from_utf8_lossy(&s.name) + )); + } + if s.name.is_empty() { + if s.st_bind != STB_LOCAL { + return Err(anyhow::anyhow!("global symbol with no name")); + } + new_syms.push((s.clone(), inds)); + } else { + match name_to_sym.get(&s.name) { + None => { + name_to_sym.insert(s.name.clone(), new_syms.len()); + new_syms.push((s.clone(), inds)); + } + Some(&existing) => { + let (s2, inds2) = &mut new_syms[existing]; + if s.st_shndx != SHN_UNDEF + && !(s2.st_shndx == s.st_shndx && s2.st_value == s.st_value) + { + return Err(anyhow::anyhow!( + "symbol \"{}\" defined twice", + String::from_utf8_lossy(&s.name) + )); + } + inds2.extend(inds); + } + } + } + } + + // Put local symbols in front, with the initial dummy entry first, and + // _gp_disp at the end if it exists. + new_syms.insert(0, (empty_symbol.clone(), vec![])); + new_syms.sort_by_key(|(a, _)| (a.st_bind != STB_LOCAL, a.name == b"_gp_disp")); + + let mut obj_new_index: HashMap = HashMap::new(); + let mut asm_new_index: HashMap = HashMap::new(); + + for (new_index, (_, inds)) in new_syms.iter().enumerate() { + for i in inds { + match i { + SymInd::Obj(i) => obj_new_index.insert(*i, new_index), + SymInd::Asm(i) => asm_new_index.insert(*i, new_index), + }; + } + } + + let new_syms: Vec<_> = new_syms.iter().map(|(s, _)| s).collect(); + let num_local_syms = new_syms.iter().filter(|s| s.st_bind == STB_LOCAL).count(); + let new_sym_data: Vec = new_syms.iter().flat_map(|s| s.to_bin()).collect(); + + objfile.symtab_mut().data = new_sym_data; + objfile.symtab_mut().header.sh_info = num_local_syms as u32; + + // Fix up relocation symbol references + for sectype in OUTPUT_SECTIONS { + let target = objfile.find_section(sectype.as_str()).cloned(); + + if let Some(target) = target { + // fixup relocation symbol indices, since we butchered them above + for reltab in target.relocated_by.iter() { + let reltab = &mut objfile.sections[*reltab]; + let mut nrels = vec![]; + for rel in reltab.relocations.iter() { + let mut rel = rel.clone(); + if (sectype == OutputSection::Text + && modified_text_positions.contains(&rel.r_offset)) + || (sectype == OutputSection::Rodata + && jtbl_rodata_positions.contains(&rel.r_offset)) + { + // don't include relocations for late_rodata dummy code + continue; + } + rel.sym_index = obj_new_index[&rel.sym_index]; + nrels.push(rel); + } + reltab.data = nrels.iter().flat_map(|x| x.to_bin(endian)).collect(); + reltab.relocations = nrels; + } + } + } + + // Move over relocations + for sectype in INPUT_SECTION_NAMES.iter() { + if let Some(source) = asm_objfile.find_section(sectype) { + if source.data.is_empty() { + continue; + } + + let target_sectype = if *sectype == ".late_rodata" { + ".rodata" + } else { + sectype + }; + let target_index = objfile + .find_section(target_sectype) + .expect("didn't find target section") + .index; + for reltab in &source.relocated_by { + let reltab = &mut asm_objfile.sections[*reltab].clone(); + for rel in &mut reltab.relocations { + rel.sym_index = asm_new_index[&rel.sym_index]; + if *sectype == ".late_rodata" { + rel.r_offset = moved_late_rodata[&rel.r_offset]; + } + } + let new_data: Vec = reltab + .relocations + .iter() + .flat_map(|x| x.to_bin(endian)) + .collect(); + + let (prefix, sh_entsize) = if reltab.header.sh_type == SHT_REL { + (".rel", 8) + } else { + (".rela", 12) + }; + let rel_section_name = format!("{}{}", prefix, target_sectype); + + if let Some(target_reltab) = objfile.find_section_mut(&rel_section_name) { + target_reltab.data.extend(new_data); + } else { + objfile.add_section( + &rel_section_name, + &HeaderFields { + sh_type: reltab.header.sh_type, + sh_flags: 0, + sh_link: objfile.symtab().index as u32, + sh_info: target_index as u32, + sh_addralign: 4, + sh_entsize, + }, + &new_data, + endian, + ); + } + } + } + } + + let mut file = std::fs::File::create(objfile_path).expect("unable to write to .o file"); + let mut writer = BufWriter::new(&mut file); + objfile.write(&mut writer)?; + + fs::remove_file(s_file_path)?; + fs::remove_file(o_file_path)?; + Ok(()) +} diff --git a/tools/asm-processor/rust/src/preprocess.rs b/tools/asm-processor/rust/src/preprocess.rs new file mode 100644 index 0000000..7442cd3 --- /dev/null +++ b/tools/asm-processor/rust/src/preprocess.rs @@ -0,0 +1,961 @@ +use std::{fs, io::Write, iter, path::Path, sync::OnceLock}; + +use anyhow::Result; +use enum_map::{Enum, EnumMap}; +use regex_lite::Regex; + +use crate::{AsmProcArgs, CompileOpts, Encoding, Function, OptLevel, OutputSection}; + +#[derive(Copy, Clone, Eq, PartialEq, Debug, Enum)] +enum InputSection { + Text, + Data, + Rodata, + LateRodata, + Bss, +} + +impl InputSection { + fn from_str(name: &str) -> Option { + match name { + ".text" => Some(InputSection::Text), + ".data" => Some(InputSection::Data), + ".rodata" => Some(InputSection::Rodata), + ".late_rodata" => Some(InputSection::LateRodata), + ".bss" => Some(InputSection::Bss), + _ => None, + } + } +} + +#[derive(Clone, Debug)] +struct GlobalState { + late_rodata_hex: u32, + valuectr: usize, + namectr: usize, + min_instr_count: usize, + skip_instr_count: usize, + use_jtbl_for_rodata: bool, + prelude_if_late_rodata: usize, + mips1: bool, + pascal: bool, +} + +impl GlobalState { + fn new( + min_instr_count: usize, + skip_instr_count: usize, + use_jtbl_for_rodata: bool, + prelude_if_late_rodata: usize, + mips1: bool, + pascal: bool, + ) -> Self { + Self { + // A value that hopefully never appears as a 32-bit rodata constant (or we + // miscompile late rodata). Increases by 1 in each step. + late_rodata_hex: 0xE0123456, + valuectr: 0, + namectr: 0, + min_instr_count, + skip_instr_count, + use_jtbl_for_rodata, + prelude_if_late_rodata, + mips1, + pascal, + } + } + + fn next_late_rodata_hex(&mut self) -> [u8; 4] { + let dummy_bytes = self.late_rodata_hex.to_be_bytes(); + if (self.late_rodata_hex & 0xffff) == 0 { + // Avoid lui + self.late_rodata_hex += 1; + } + self.late_rodata_hex += 1; + dummy_bytes + } + + fn make_name(&mut self, cat: &str) -> String { + self.namectr += 1; + format!("_asmpp_{}{}", cat, self.namectr) + } + + fn func_prologue(&self, name: &str) -> String { + if self.pascal { + [ + &format!("procedure {}();", name), + "type", + " pi = ^integer;", + " pf = ^single;", + " pd = ^double;", + "var", + " vi: pi;", + " vf: pf;", + " vd: pd;", + "begin", + " vi := vi;", + " vf := vf;", + " vd := vd;", + ] + .join(" ") + } else { + format!("void {}(void) {{", name) + } + } + + fn func_epilogue(&self) -> String { + if self.pascal { + "end;".to_string() + } else { + '}'.to_string() + } + } + + fn pascal_assignment_float(&mut self, val: f32) -> String { + self.valuectr += 1; + let address = (8 * self.valuectr) & 0x7FFF; + format!("vf := pf({}); vf^ := {:?};", address, val) + } + + fn pascal_assignment_double(&mut self, val: f64) -> String { + self.valuectr += 1; + let address = (8 * self.valuectr) & 0x7FFF; + format!("vd := pd({}); vd^ := {:?};", address, val) + } + + fn pascal_assignment_int(&mut self, val: i32) -> String { + self.valuectr += 1; + let address = (8 * self.valuectr) & 0x7FFF; + format!("vi := pi({}); vi^ := {};", address, val) + } +} + +#[derive(Clone, Debug)] +struct GlobalAsmBlock { + fn_desc: String, + cur_section: InputSection, + asm_conts: Vec, + late_rodata_asm_conts: Vec, + late_rodata_alignment: usize, + late_rodata_alignment_from_context: bool, + text_glabels: Vec, + fn_section_sizes: EnumMap, + fn_ins_inds: Vec<(usize, usize)>, + glued_line: String, + num_lines: usize, +} + +impl GlobalAsmBlock { + fn new(fn_desc: String) -> Self { + Self { + fn_desc, + cur_section: InputSection::Text, + asm_conts: vec![], + late_rodata_asm_conts: vec![], + late_rodata_alignment: 0, + late_rodata_alignment_from_context: false, + text_glabels: vec![], + fn_section_sizes: EnumMap::default(), + fn_ins_inds: vec![], + glued_line: String::new(), + num_lines: 0, + } + } + + fn fail_without_line(&self, msg: &str) -> Result { + Err(anyhow::anyhow!("{}\nwithin {}", msg, self.fn_desc)) + } + + fn fail_at_line(&self, msg: &str, line: &str) -> Result { + Err(anyhow::anyhow!( + "{}\nwithin {} at line {}", + msg, + self.fn_desc, + line + )) + } + + fn count_quoted_size( + &self, + line: &str, + z: bool, + real_line: &str, + output_enc: &Encoding, + ) -> Result { + let line = output_enc.encode(line)?; + + let mut in_quote = false; + let mut has_comma = true; + let mut num_parts = 0; + let mut ret = 0; + let mut i = 0; + let digits = b"0123456789"; // 0-7 would be more sane, but this matches GNU as + let hexdigits = b"0123456789abcdefABCDEF"; + + while i < line.len() { + let c = line[i]; + i += 1; + if !in_quote { + if c == b'"' { + in_quote = true; + if z && !has_comma { + return self.fail_at_line(".asciiz with glued strings is not supported due to GNU as version diffs", real_line); + } + num_parts += 1; + } else if c == b',' { + has_comma = true; + } + } else { + if c == b'"' { + in_quote = false; + has_comma = false; + continue; + } + ret += 1; + if c != b'\\' { + continue; + } + if i == line.len() { + return self.fail_at_line("backslash at end of line not supported", real_line); + } + let c = line[i]; + i += 1; + // (if c is in "bfnrtv", we have a real escaped literal) + if c == b'x' { + // hex literal, consume any number of hex chars, possibly none + while i < line.len() && hexdigits.contains(&line[i]) { + i += 1; + } + } else if digits.contains(&c) { + // octal literal, consume up to two more digits + let mut it = 0; + while i < line.len() && digits.contains(&line[i]) && it < 2 { + i += 1; + it += 1; + } + } + } + } + + if in_quote { + return self.fail_at_line("unterminated string literal", real_line); + } + if num_parts == 0 { + return self.fail_at_line(".ascii with no string", real_line); + } + Ok(ret + if z { num_parts } else { 0 }) + } + + fn align(&mut self, n: usize) { + let size = &mut self.fn_section_sizes[self.cur_section]; + while *size % n != 0 { + *size += 1; + } + } + + fn add_sized(&mut self, size: isize, line: &str) -> Result<()> { + if (self.cur_section == InputSection::Text || self.cur_section == InputSection::LateRodata) + && size % 4 != 0 + { + return self.fail_at_line("size must be a multiple of 4", line); + } + + if size < 0 { + return self.fail_at_line("size cannot be negative", line); + } + + self.fn_section_sizes[self.cur_section] += size as usize; + + if self.cur_section == InputSection::Text { + if self.text_glabels.is_empty() { + return self.fail_at_line(".text block without an initial glabel", line); + } + self.fn_ins_inds + .push((self.num_lines - 1, size as usize / 4)); + } + + Ok(()) + } + + fn process_line(&mut self, line: &str, output_enc: &Encoding) -> Result<()> { + self.num_lines += 1; + if let Some(stripped) = line.strip_suffix("\\") { + self.glued_line = format!("{}{}", self.glued_line, stripped); + return Ok(()); + } + let mut line = self.glued_line.clone() + line; + self.glued_line = String::new(); + + static CACHE: OnceLock<(Regex, Regex)> = OnceLock::new(); + let (re_comment_or_string, re_label) = CACHE.get_or_init(|| { + ( + Regex::new(r#"#.*|/\*.*?\*/|"(?:\\.|[^\\"])*""#).unwrap(), + Regex::new(r"^[a-zA-Z0-9_]+:\s*").unwrap(), + ) + }); + + fn re_comment_replacer(caps: ®ex_lite::Captures) -> String { + let s = caps[0].to_string(); + if s.starts_with("/") || s.starts_with("#") { + " ".to_owned() + } else { + s + } + } + + let real_line = line.clone(); + line = re_comment_or_string + .replace_all(&line, re_comment_replacer) + .into_owned(); + line = line.trim().to_string(); + line = re_label.replace_all(&line, "").into_owned(); + let mut changed_section = false; + let mut emitting_double = false; + + if (line.starts_with("glabel ") || line.starts_with("jlabel ")) + && self.cur_section == InputSection::Text + { + self.text_glabels + .push(line.split_whitespace().nth(1).unwrap().to_string()); + } + if line.is_empty() { + // empty line + } else if line.starts_with("glabel ") + || line.starts_with("dlabel ") + || line.starts_with("jlabel ") + || line.starts_with("endlabel ") + || (!line.contains(" ") && line.ends_with(":")) + { + // label + } else if line.starts_with(".section") + || matches!( + line.as_str(), + ".text" | ".data" | ".rdata" | ".rodata" | ".bss" | ".late_rodata" + ) + { + // section change + self.cur_section = if line == ".rdata" { + InputSection::Rodata + } else { + let first_arg = line.split(',').next().unwrap().to_string(); + let name = first_arg.split_whitespace().last().unwrap(); + match InputSection::from_str(name) { + Some(s) => s, + None => { + return self.fail_at_line("unrecognized .section directive", &real_line) + } + } + }; + + changed_section = true; + } else if line.starts_with(".late_rodata_alignment") { + if self.cur_section != InputSection::LateRodata { + return self.fail_at_line( + ".late_rodata_alignment must occur within .late_rodata section", + &real_line, + ); + } + + let value = line.split_whitespace().nth(1).unwrap().parse::()?; + if value != 4 && value != 8 { + return self + .fail_at_line(".late_rodata_alignment argument must be 4 or 8", &real_line); + } + if self.late_rodata_alignment != 0 && self.late_rodata_alignment != value { + return self.fail_without_line( + ".late_rodata_alignment alignment assumption conflicts with earlier .double directive. Make sure to provide explicit alignment padding." + ); + } + self.late_rodata_alignment = value; + changed_section = true; + } else if line.starts_with(".incbin") { + let size = line.split(',').last().unwrap().trim().parse::()?; + self.add_sized(size, &real_line)?; + } else if line.starts_with(".word") + || line.starts_with(".gpword") + || line.starts_with(".float") + { + self.align(4); + + self.add_sized(4 * line.split(',').count() as isize, &real_line)?; + } else if line.starts_with(".double") { + self.align(4); + + if self.cur_section == InputSection::LateRodata { + let align8 = self.fn_section_sizes[self.cur_section] % 8; + // Automatically set late_rodata_alignment, so the generated C code uses doubles. + // This gives us correct alignment for the transferred doubles even when the + // late_rodata_alignment is wrong, e.g. for non-matching compilation. + if self.late_rodata_alignment == 0 { + self.late_rodata_alignment = 8 - align8; + self.late_rodata_alignment_from_context = true; + } else if self.late_rodata_alignment != 8 - align8 { + if self.late_rodata_alignment_from_context { + return self.fail_at_line( + "found two .double directives with different start addresses mod 8. Make sure to provide explicit alignment padding.", + &real_line + ); + } else { + return self.fail_at_line( + ".double at address that is not 0 mod 8 (based on .late_rodata_alignment assumption). Make sure to provide explicit alignment padding.\n{}", + &real_line + ); + } + } + + self.add_sized(8 * line.split(',').count() as isize, &real_line)?; + emitting_double = true; + } + } else if line.starts_with(".space") { + let size = line.split_whitespace().nth(1).unwrap().parse::()?; + self.add_sized(size, &real_line)?; + } else if line.starts_with(".balign") { + let align = line.split_whitespace().nth(1).unwrap().parse::()?; + if align != 4 { + return self.fail_at_line("only .balign 4 is supported", &real_line); + } + self.align(4); + } else if line.starts_with(".align") { + let align = line.split_whitespace().nth(1).unwrap().parse::()?; + if align != 2 { + return self.fail_at_line("only .align 2 is supported", &real_line); + } + self.align(4); + } else if line.starts_with(".asci") { + let z = line.starts_with(".asciz") || line.starts_with(".asciiz"); + self.add_sized( + self.count_quoted_size(&line, z, &real_line, output_enc)? as isize, + &real_line, + )?; + } else if line.starts_with(".byte") { + self.add_sized(line.split(',').count() as isize, &real_line)?; + } else if line.starts_with(".half") + || line.starts_with(".hword") + || line.starts_with(".short") + { + self.align(2); + self.add_sized(2 * line.split(',').count() as isize, &real_line)?; + } else if line.starts_with(".size") { + } else if line.starts_with('.') { + return self.fail_at_line("asm directive not supported", &real_line); + } else { + // Unfortunately, macros are hard to support for .rodata -- + // we don't know how how space they will expand to before + // running the assembler, but we need that information to + // construct the C code. So if we need that we'll either + // need to run the assembler twice (at least in some rare + // cases), or change how this program is invoked. + // Similarly, we can't currently deal with pseudo-instructions + // that expand to several real instructions. + if self.cur_section != InputSection::Text { + return self.fail_at_line( + "instruction or macro call in non-.text section? not supported", + &real_line, + ); + } + self.add_sized(4, &real_line)?; + } + + if self.cur_section == InputSection::LateRodata { + if !changed_section { + if emitting_double { + self.late_rodata_asm_conts.push(".align 0".to_string()); + } + self.late_rodata_asm_conts.push(real_line.clone()); + if emitting_double { + self.late_rodata_asm_conts.push(".align 2".to_string()); + } + } + } else { + self.asm_conts.push(real_line.clone()); + } + + Ok(()) + } + + const MAX_FN_SIZE: usize = 100; + + fn finish(&self, state: &mut GlobalState) -> Result<(Vec, Function)> { + let mut src = vec!["".to_owned(); self.num_lines + 1]; + let mut late_rodata_dummy_bytes = vec![]; + let mut jtbl_rodata_size = 0; + let mut late_rodata_fn_output = vec![]; + + let num_instr = self.fn_section_sizes[InputSection::Text] / 4; + + if self.fn_section_sizes[InputSection::LateRodata] > 0 { + // Generate late rodata by emitting unique float constants. + // This requires 3 instructions for each 4 bytes of rodata. + // If we know alignment, we can use doubles, which give 3 + // instructions for 8 bytes of rodata. + let size = self.fn_section_sizes[InputSection::LateRodata] / 4; + let mut skip_next = false; + let mut needs_double = self.late_rodata_alignment != 0; + let mut extra_mips1_nop = false; + let (jtbl_size, jtbl_min_rodata_size) = match (state.pascal, state.mips1) { + (true, true) => (9, 2), + (true, false) => (8, 2), + (false, true) => (11, 5), + (false, false) => (9, 5), + }; + + for i in 0..size { + if skip_next { + skip_next = false; + continue; + } + // Jump tables give 9 instructions (11 with -mips1) for >= 5 words of rodata, + // and should be emitted when: + // - -O2 or -O2 -g3 are used, which give the right codegen + // - we have emitted our first .float/.double (to ensure that we find the + // created rodata in the binary) + // - we have emitted our first .double, if any (to ensure alignment of doubles + // in shifted rodata sections) + // - we have at least 5 words of rodata left to emit (otherwise IDO does not + // generate a jump table) + // - we have at least 10 more instructions to go in this function (otherwise our + // function size computation will be wrong since the delay slot goes unused) + if !needs_double + && state.use_jtbl_for_rodata + && i >= 1 + && size - i >= jtbl_min_rodata_size + && num_instr - late_rodata_fn_output.len() >= jtbl_size + 1 + { + let line = if state.pascal { + let cases: String = (0..(size - i)) + .map(|case| format!("{}: ;", case)) + .collect::>() + .join("\n"); + format!("case 0 of {} otherwise end;", cases) + } else { + let cases: String = (0..(size - i)) + .map(|case| format!("case {}:", case)) + .collect::>() + .join(" "); + format!("switch (*(volatile int*)0) {{ {} ; }}", cases) + }; + late_rodata_fn_output.push(line); + late_rodata_fn_output.extend(iter::repeat("".to_owned()).take(jtbl_size - 1)); + jtbl_rodata_size = (size - i) * 4; + extra_mips1_nop = i != 2; + break; + } + + let dummy_bytes = state.next_late_rodata_hex(); + late_rodata_dummy_bytes.push(dummy_bytes); + if self.late_rodata_alignment == 4 * ((i + 1) % 2 + 1) && i + 1 < size { + let dummy_bytes2 = state.next_late_rodata_hex(); + late_rodata_dummy_bytes.push(dummy_bytes2); + let combined = [dummy_bytes, dummy_bytes2].concat().try_into().unwrap(); + let fval = f64::from_be_bytes(combined); + let line = if state.pascal { + state.pascal_assignment_double(fval) + } else { + format!("*(volatile double*)0 = {:?};", fval) + }; + late_rodata_fn_output.push(line); + skip_next = true; + needs_double = false; + if state.mips1 { + // mips1 does not have ldc1/sdc1 + late_rodata_fn_output.push("".to_owned()); + late_rodata_fn_output.push("".to_owned()); + } + extra_mips1_nop = false; + } else { + let fval = f32::from_be_bytes(dummy_bytes); + let line = if state.pascal { + state.pascal_assignment_float(fval) + } else { + format!("*(volatile float*)0 = {:?}f;", fval) + }; + late_rodata_fn_output.push(line); + extra_mips1_nop = true; + } + late_rodata_fn_output.push("".to_owned()); + late_rodata_fn_output.push("".to_owned()); + } + + if state.mips1 && extra_mips1_nop { + late_rodata_fn_output.push("".to_owned()); + } + } + + let mut text_name = None; + if self.fn_section_sizes[InputSection::Text] > 0 || !late_rodata_fn_output.is_empty() { + let new_name = state.make_name("func"); + src[0] = state.func_prologue(&new_name); + text_name = Some(new_name); + src[self.num_lines] = state.func_epilogue(); + let instr_count = self.fn_section_sizes[InputSection::Text] / 4; + if instr_count < state.min_instr_count { + return self.fail_without_line("too short .text block"); + } + let mut tot_emitted = 0; + let mut tot_skipped = 0; + let mut fn_emitted = 0; + let mut fn_skipped = 0; + let mut skipping = true; + let mut rodata_stack: Vec = late_rodata_fn_output.clone(); + rodata_stack.reverse(); + + for &(line, count) in &self.fn_ins_inds { + for _ in 0..count { + if fn_emitted > Self::MAX_FN_SIZE + && instr_count - tot_emitted > state.min_instr_count + && (rodata_stack.is_empty() || !rodata_stack.last().unwrap().is_empty()) + { + // Don't let functions become too large. When a function reaches 284 + // instructions, and -O2 -framepointer flags are passed, the IRIX + // compiler decides it is a great idea to start optimizing more. + // Also, Pascal cannot handle too large functions before it runs out + // of unique statements to write. + fn_emitted = 0; + fn_skipped = 0; + skipping = true; + let large_func_name = state.make_name("large_func"); + src[line] += &format!( + " {} {} ", + state.func_epilogue(), + state.func_prologue(&large_func_name) + ); + } + + let skip_for_late_rodata = if !rodata_stack.is_empty() { + state.prelude_if_late_rodata + } else { + 0 + }; + if skipping && fn_skipped < state.skip_instr_count + skip_for_late_rodata { + fn_skipped += 1; + tot_skipped += 1; + } else { + skipping = false; + if let Some(entry) = rodata_stack.pop() { + src[line] += &entry; + } else if state.pascal { + src[line] += &state.pascal_assignment_int(0); + } else { + src[line] += "*(volatile int*)0 = 0;"; + } + } + tot_emitted += 1; + fn_emitted += 1; + } + } + + if !rodata_stack.is_empty() { + let size = late_rodata_fn_output.len() / 3; + let available = instr_count - tot_skipped; + return self.fail_without_line(&format!( + "late rodata to text ratio is too high: {} / {} must be <= 1/3\n + add .late_rodata_alignment (4|8) to the .late_rodata block + to double the allowed ratio.", + size, available + )); + } + } + + let mut rodata_name = None; + if self.fn_section_sizes[InputSection::Rodata] > 0 { + if state.pascal { + return self.fail_without_line(".rodata isn't supported with Pascal for now"); + } + let new_name = state.make_name("rodata"); + src[self.num_lines] += &format!( + " const char {}[{}] = {{1}};", + new_name, + self.fn_section_sizes[InputSection::Rodata] + ); + rodata_name = Some(new_name); + } + + let mut data_name = None; + if self.fn_section_sizes[InputSection::Data] > 0 { + let new_name = state.make_name("data"); + let line = if state.pascal { + format!( + " var {}: packed array[1..{}] of char := [otherwise: 0];", + new_name, + self.fn_section_sizes[InputSection::Data] + ) + } else { + format!( + " char {}[{}] = {{1}};", + new_name, + self.fn_section_sizes[InputSection::Data] + ) + }; + src[self.num_lines] += &line; + data_name = Some(new_name); + } + + let mut bss_name = None; + if self.fn_section_sizes[InputSection::Bss] > 0 { + let new_name = state.make_name("bss"); + if state.pascal { + return self.fail_without_line(".bss isn't supported with Pascal for now"); + } + src[self.num_lines] += &format!( + " char {}[{}];", + new_name, + self.fn_section_sizes[InputSection::Bss] + ); + bss_name = Some(new_name); + } + + let mut data = EnumMap::default(); + data[OutputSection::Text] = (text_name, self.fn_section_sizes[InputSection::Text]); + data[OutputSection::Data] = (data_name, self.fn_section_sizes[InputSection::Data]); + data[OutputSection::Rodata] = (rodata_name, self.fn_section_sizes[InputSection::Rodata]); + data[OutputSection::Bss] = (bss_name, self.fn_section_sizes[InputSection::Bss]); + let ret_fn = Function { + text_glabels: self.text_glabels.clone(), + asm_conts: self.asm_conts.clone(), + late_rodata_dummy_bytes, + jtbl_rodata_size, + late_rodata_asm_conts: self.late_rodata_asm_conts.clone(), + fn_desc: self.fn_desc.clone(), + data, + }; + + Ok((src, ret_fn)) + } +} + +/// Convert a float string to its hexadecimal representation +fn repl_float_hex(cap: ®ex_lite::Captures) -> String { + let float_str = cap[0].trim().trim_end_matches('f'); + let float_val = float_str.parse::().unwrap(); + let hex_val = f32::to_be_bytes(float_val); + format!("{}", u32::from_be_bytes(hex_val)) +} + +pub(crate) struct ParseSourceResult { + pub functions: Vec, + pub deps: Vec, + pub output: Vec, +} + +pub(crate) fn parse_source( + infile_path: &Path, + args: &AsmProcArgs, + opts: &CompileOpts, + encode: bool, +) -> Result { + let (mut min_instr_count, mut skip_instr_count) = match opts.opt { + OptLevel::O0 => match opts.framepointer { + true => (8, 8), + false => (4, 4), + }, + OptLevel::O1 | OptLevel::O2 => match opts.framepointer { + true => (6, 5), + false => (2, 1), + }, + OptLevel::G => match opts.framepointer { + true => (7, 7), + false => (4, 4), + }, + OptLevel::G3 => match opts.framepointer { + true => (4, 4), + false => (2, 2), + }, + }; + + let mut prelude_if_late_rodata = 0; + if opts.kpic { + // Without optimizations, the PIC prelude always takes up 3 instructions. + // With optimizations, the prelude is optimized out if there's no late rodata. + if matches!(opts.opt, OptLevel::O2 | OptLevel::G3) { + prelude_if_late_rodata = 3; + } else { + min_instr_count += 3; + skip_instr_count += 3; + } + } + + let use_jtbl_for_rodata = + matches!(opts.opt, OptLevel::O2 | OptLevel::G3) && !opts.framepointer && !opts.kpic; + + let mut state = GlobalState::new( + min_instr_count, + skip_instr_count, + use_jtbl_for_rodata, + prelude_if_late_rodata, + opts.mips1, + opts.pascal, + ); + let input_enc = &args.input_enc; + let output_enc = &args.output_enc; + let mut global_asm: Option<(GlobalAsmBlock, usize)> = None; + let mut asm_functions: Vec = vec![]; + let mut output_lines: Vec = vec![format!("#line 1 \"{}\"", infile_path.display())]; + let mut deps: Vec = vec![]; + + let mut is_cutscene_data = false; + let mut is_early_include = false; + + let cutscene_re = Regex::new(r"CutsceneData (.|\n)*\[\] = \{")?; + let float_re = Regex::new(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f")?; + + let file_contents = fs::read(infile_path)?; + for (line_no, line) in input_enc.decode(&file_contents)?.lines().enumerate() { + let line_no = line_no + 1; + let mut raw_line = line.trim().to_owned(); + let line = raw_line.trim_start(); + + // Print exactly one output line per source line, to make compiler + // errors have correct line numbers. These will be overridden with + // reasonable content further down. + output_lines.push("".to_owned()); + + if let Some((ref mut gasm, start_index)) = global_asm { + if line.starts_with(')') { + let (mut src, fun) = gasm.finish(&mut state)?; + if state.pascal { + // Pascal has a 1600-character line length limit, so some + // of the lines we emit may be broken up. Correct for that + // using a #line directive. + *src.last_mut().unwrap() += &format!("\n#line {}", line_no + 1); + } + for (i, line2) in src.iter().enumerate() { + output_lines[start_index + i] = line2.clone(); + } + asm_functions.push(fun); + global_asm = None; + } else { + gasm.process_line(&raw_line, output_enc)?; + } + } else if line == "GLOBAL_ASM(" || line == "#pragma GLOBAL_ASM(" { + global_asm = Some(( + GlobalAsmBlock::new(format!("GLOBAL_ASM block at line {}", &line_no.to_string())), + output_lines.len(), + )); + } else if ((line.starts_with("GLOBAL_ASM(\"") || line.starts_with("#pragma GLOBAL_ASM(\"")) + && line.ends_with("\")")) + || ((line.starts_with("INCLUDE_ASM(\"") || line.starts_with("INCLUDE_RODATA(\"")) + && line.contains("\",") + && line.ends_with(");")) + { + let (prologue, fname) = if line.starts_with("INCLUDE_") { + // INCLUDE_ASM("path/to", functionname); + let (before, after) = line.split_once("\",").unwrap(); + let fname = format!( + "{}/{}.s", + before[before.find('(').unwrap() + 2..].to_owned(), + after.trim()[..after.len() - 3].trim() + ); + + if line.starts_with("INCLUDE_RODATA") { + (vec![".section .rodata".to_string()], fname) + } else { + (vec![], fname) + } + } else { + // GLOBAL_ASM("path/to/file.s") + let fname = line[line.find('(').unwrap() + 2..line.len() - 2].to_string(); + (vec![], fname) + }; + + let mut gasm = GlobalAsmBlock::new(fname.clone()); + for line2 in prologue { + gasm.process_line(line2.trim_end(), output_enc)?; + } + + if !Path::new(&fname).exists() { + // The GLOBAL_ASM block might be surrounded by an ifdef, so it's + // not clear whether a missing file actually represents a compile + // error. Pass the responsibility for determining that on to the + // compiler by emitting a bad include directive. (IDO treats + // #error as a warning for some reason.) + let output_lines_len = output_lines.len(); + output_lines[output_lines_len - 1] = format!("#include \"GLOBAL_ASM:{}\"", fname); + continue; + } + + let file_contents = fs::read(&fname)?; + for line2 in input_enc.decode(&file_contents)?.lines() { + gasm.process_line(line2.trim_end(), output_enc)?; + } + + let (mut src, fun) = gasm.finish(&mut state)?; + let output_lines_len = output_lines.len(); + if state.pascal { + // Pascal has a 1600-character line length limit, so avoid putting + // everything on the same line. + src.push(format!("#line {}", line_no + 1)); + output_lines[output_lines_len - 1] = src.join("\n"); + } else { + output_lines[output_lines_len - 1] = src.join(""); + } + asm_functions.push(fun); + deps.push(fname); + } else if line == "#pragma asmproc recurse" { + // C includes qualified as + // #pragma asmproc recurse + // #include "file.c" + // will be processed recursively when encountered + is_early_include = true; + } else if is_early_include { + // Previous line was a #pragma asmproc recurse + is_early_include = false; + if !line.starts_with("#include ") { + return Err(anyhow::anyhow!( + "#pragma asmproc recurse must be followed by an #include " + )); + } + let fpath = infile_path.parent().unwrap(); + let fname = fpath.join(line[line.find(' ').unwrap() + 2..].trim()); + deps.push(fname.to_str().unwrap().to_string()); + let mut res = parse_source(&fname, args, opts, false)?; + deps.append(&mut res.deps); + let res_str = format!( + "{}#line {} \"{}\"", + String::from_utf8(res.output).expect("nested calls generate utf-8"), + line_no + 1, + infile_path.file_name().unwrap().to_str().unwrap() + ); + + let output_lines_len = output_lines.len(); + output_lines[output_lines_len - 1] = res_str; + } else { + if args.encode_cutscene_data_floats { + // This is a hack to replace all floating-point numbers in an array of a particular type + // (in this case CutsceneData) with their corresponding IEEE-754 hexadecimal representation + if cutscene_re.is_match(line) { + is_cutscene_data = true; + } else if line.ends_with("};") { + is_cutscene_data = false; + } + + if is_cutscene_data { + raw_line = float_re.replace_all(&raw_line, repl_float_hex).into_owned(); + } + } + let output_lines_len = output_lines.len(); + output_lines[output_lines_len - 1] = raw_line.to_owned(); + } + } + + let out_data = if encode { + let newline_encoded = output_enc.encode("\n")?; + + let mut data = vec![]; + for line in output_lines { + let line_encoded = output_enc.encode(&line)?; + data.write_all(&line_encoded)?; + data.write_all(&newline_encoded)?; + } + data + } else { + let str = format!("{}\n", output_lines.join("\n")); + + str.as_bytes().to_vec() + }; + + Ok(ParseSourceResult { + functions: asm_functions, + deps, + output: out_data, + }) +} diff --git a/tools/asm-processor/tests/ascii.c b/tools/asm-processor/tests/ascii.c new file mode 100644 index 0000000..bb27d25 --- /dev/null +++ b/tools/asm-processor/tests/ascii.c @@ -0,0 +1,19 @@ +void foo(void) { "abcdef"; } + +GLOBAL_ASM( +.rdata + .ascii "AB" + .ascii "CD", "EF" + .ascii "GH\n\n\n\0\11\222\3333\44444\x1234567\n\nIJK" +) + +void bar(void) { "hello"; } + +GLOBAL_ASM( +.rdata + .asciiz "12" + .asciiz "34", "56" + .asciiz "78\n\n\n\0\11\222\3333\44444\x1234567\n\n9A" +) + +void baz(void) { "ghijkl"; } diff --git a/tools/asm-processor/tests/ascii.objdump b/tools/asm-processor/tests/ascii.objdump new file mode 100644 index 0000000..bf42638 --- /dev/null +++ b/tools/asm-processor/tests/ascii.objdump @@ -0,0 +1,29 @@ + +tests/ascii.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000030 .text +00000000 l d .rodata 00000050 .rodata +00000000 g F .text 00000010 foo +00000010 g F .text 00000010 bar +00000020 g F .text 00000010 baz + + +Contents of section .text: + 0000 03e00008 00000000 03e00008 00000000 ................ + 0010 03e00008 00000000 03e00008 00000000 ................ + 0020 03e00008 00000000 03e00008 00000000 ................ +Contents of section .rodata: + 0000 61626364 65660000 41424344 45464748 abcdef..ABCDEFGH + 0010 0a0a0a00 0992db33 24343467 0a0a494a .......3$44g..IJ + 0020 4b000000 68656c6c 6f000000 31320033 K...hello...12.3 + 0030 34003536 0037380a 0a0a0009 92db3324 4.56.78.......3$ + 0040 3434670a 0a394100 6768696a 6b6c0000 44g..9A.ghijkl.. +Contents of section .options: + 0000 01200000 00000000 80000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/comments.c b/tools/asm-processor/tests/comments.c new file mode 100644 index 0000000..4c93669 --- /dev/null +++ b/tools/asm-processor/tests/comments.c @@ -0,0 +1,6 @@ +const char before[] = "^"; +GLOBAL_ASM( +.rdata +.asciz "aaaa /* bbbb */ # cccc", /**//**//**//**/ /*/ "xxxx" /*/ /* dddd " eeee */ "# ffff" # gggg "hhhh" /* iiii */ +) +const char after[] = "$"; diff --git a/tools/asm-processor/tests/comments.objdump b/tools/asm-processor/tests/comments.objdump new file mode 100644 index 0000000..246df20 --- /dev/null +++ b/tools/asm-processor/tests/comments.objdump @@ -0,0 +1,21 @@ + +tests/comments.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .rodata 00000030 .rodata +00000000 g O .rodata 00000002 before +00000024 g O .rodata 00000002 after + + +Contents of section .rodata: + 0000 5e000000 61616161 202f2a20 62626262 ^...aaaa /* bbbb + 0010 202a2f20 23206363 63630023 20666666 */ # cccc.# fff + 0020 66000000 24000000 00000000 00000000 f...$........... +Contents of section .options: + 0000 01200000 00000000 00000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/custom-prelude.c b/tools/asm-processor/tests/custom-prelude.c new file mode 100644 index 0000000..1b057d5 --- /dev/null +++ b/tools/asm-processor/tests/custom-prelude.c @@ -0,0 +1,17 @@ +// COMPILE-FLAGS: -O2 +// ASMP-FLAGS: --asm-prelude tests/custom-prelude.s + +GLOBAL_ASM( +glabel foo +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +endlabel foo +) diff --git a/tools/asm-processor/tests/custom-prelude.objdump b/tools/asm-processor/tests/custom-prelude.objdump new file mode 100644 index 0000000..37af655 --- /dev/null +++ b/tools/asm-processor/tests/custom-prelude.objdump @@ -0,0 +1,21 @@ + +tests/custom-prelude.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000030 .text +00000000 g F .text 00000028 foo +00000028 g .text 00000000 myendlabel + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 80000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/custom-prelude.s b/tools/asm-processor/tests/custom-prelude.s new file mode 100644 index 0000000..75f955a --- /dev/null +++ b/tools/asm-processor/tests/custom-prelude.s @@ -0,0 +1,14 @@ +.set noat +.set noreorder +.set gp=64 + +.macro glabel label + .global \label + \label: +.endm + +.macro endlabel label + .global myendlabel + myendlabel: +.endm + diff --git a/tools/asm-processor/tests/euc_jp_wavedash.c b/tools/asm-processor/tests/euc_jp_wavedash.c new file mode 100644 index 0000000..d187d7d --- /dev/null +++ b/tools/asm-processor/tests/euc_jp_wavedash.c @@ -0,0 +1,3 @@ +// ASMP-FLAGS: --force --input-enc=utf-8 --output-enc=EUC-JP + +char *chars = "〜!?@#"; \ No newline at end of file diff --git a/tools/asm-processor/tests/euc_jp_wavedash.objdump b/tools/asm-processor/tests/euc_jp_wavedash.objdump new file mode 100644 index 0000000..5820e73 --- /dev/null +++ b/tools/asm-processor/tests/euc_jp_wavedash.objdump @@ -0,0 +1,26 @@ + +tests/euc_jp_wavedash.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .rodata 00000010 .rodata +00000000 l d .data 00000010 .data +00000000 g O .data 00000004 chars + + +RELOCATION RECORDS FOR [.data]: +OFFSET TYPE VALUE +00000000 R_MIPS_32 .rodata + + +Contents of section .rodata: + 0000 a1c1a1aa a1a9a1f7 a1f40000 00000000 ................ +Contents of section .data: + 0000 00000000 00000000 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 00000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/force.c b/tools/asm-processor/tests/force.c new file mode 100644 index 0000000..32d8706 --- /dev/null +++ b/tools/asm-processor/tests/force.c @@ -0,0 +1,17 @@ +// COMPILE-FLAGS: -O2 +// ASMP-FLAGS: --convert-statics global-with-filename --force +static int xtext(int a, int b, int c); +const int rodata1[] = {1}; +static const int rodata2[] = {2}; +int data1[] = {3}; +static int data2[] = {4}; +int bss1; +static int bss2; + +static int xtext(int a, int b, int c) { + return 1; +} + +void baz(void) { + xtext(bss2, rodata2[0], data2[0]); +} diff --git a/tools/asm-processor/tests/force.objdump b/tools/asm-processor/tests/force.objdump new file mode 100644 index 0000000..46941d3 --- /dev/null +++ b/tools/asm-processor/tests/force.objdump @@ -0,0 +1,47 @@ + +tests/force.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000050 .text +00000000 l d .rodata 00000010 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000000 g O .rodata 00000004 rodata1 +00000000 g O .data 00000004 data1 +00000000 g O .bss 00000004 bss1 +00000014 g F .text 00000034 baz +00000004 g O .rodata 00000000 tests/force.o:rodata2 +00000004 g O .data 00000000 tests/force.o:data2 +00000004 g O .bss 00000000 tests/force.o:bss2 +00000000 g F .text 00000000 tests/force.o:xtext + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000001c R_MIPS_HI16 .bss +00000034 R_MIPS_LO16 .bss +00000020 R_MIPS_HI16 .rodata +0000002c R_MIPS_LO16 .rodata +00000024 R_MIPS_HI16 .data +00000028 R_MIPS_LO16 .data +00000030 R_MIPS_26 .text + + +Contents of section .text: + 0000 afa40000 afa50004 afa60008 03e00008 ................ + 0010 24020001 27bdffe8 afbf0014 3c040000 $...'.......<... + 0020 3c050000 3c060000 8cc60004 8ca50004 <...<........... + 0030 0c000000 8c840004 8fbf0014 27bd0018 ............'... + 0040 03e00008 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 00000001 00000002 00000000 00000000 ................ +Contents of section .data: + 0000 00000003 00000004 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 a0000074 00000000 . .........t.... + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a0000074 00000000 00000000 00000000 ...t............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/include_file.asmproc.d b/tools/asm-processor/tests/include_file.asmproc.d new file mode 100644 index 0000000..80d2d66 --- /dev/null +++ b/tools/asm-processor/tests/include_file.asmproc.d @@ -0,0 +1,12 @@ +tests/include_file.o: tests/include_file_1.s \ + tests/include_file_2.s \ + tests/include_file_3.s \ + tests//include_file_4.s + +tests/include_file_1.s: + +tests/include_file_2.s: + +tests/include_file_3.s: + +tests//include_file_4.s: diff --git a/tools/asm-processor/tests/include_file.c b/tools/asm-processor/tests/include_file.c new file mode 100644 index 0000000..97eb45d --- /dev/null +++ b/tools/asm-processor/tests/include_file.c @@ -0,0 +1,8 @@ +GLOBAL_ASM("tests/include_file_1.s") +#pragma GLOBAL_ASM("tests/include_file_2.s") +INCLUDE_ASM("tests", include_file_3); +INCLUDE_RODATA("tests/", include_file_4); +#if 0 +GLOBAL_ASM("tests/nonexisting.s"); +INCLUDE_ASM("tests", nonexisting); +#endif diff --git a/tools/asm-processor/tests/include_file.objdump b/tools/asm-processor/tests/include_file.objdump new file mode 100644 index 0000000..c2b172b --- /dev/null +++ b/tools/asm-processor/tests/include_file.objdump @@ -0,0 +1,27 @@ + +tests/include_file.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000050 .text +00000000 l d .rodata 00000010 .rodata +00000000 g F .text 00000018 file_1 +00000018 g F .text 00000018 file_2 +00000030 g F .text 00000018 file_3 + + +Contents of section .text: + 0000 24050000 24050001 24050002 24050003 $...$...$...$... + 0010 24050004 24050005 24060000 24060001 $...$...$...$... + 0020 24060002 24060003 24060004 24060005 $...$...$...$... + 0030 24070000 24070001 24070002 24070003 $...$...$...$... + 0040 24070004 24070005 00000000 00000000 $...$........... +Contents of section .rodata: + 0000 00000005 00000006 00000007 00000008 ................ +Contents of section .options: + 0000 01200000 00000000 80000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 800000e0 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/include_file_1.s b/tools/asm-processor/tests/include_file_1.s new file mode 100644 index 0000000..24a67f9 --- /dev/null +++ b/tools/asm-processor/tests/include_file_1.s @@ -0,0 +1,7 @@ +glabel file_1 +li $a1, 0 +li $a1, 1 +li $a1, 2 +li $a1, 3 +li $a1, 4 +li $a1, 5 diff --git a/tools/asm-processor/tests/include_file_2.s b/tools/asm-processor/tests/include_file_2.s new file mode 100644 index 0000000..4260197 --- /dev/null +++ b/tools/asm-processor/tests/include_file_2.s @@ -0,0 +1,7 @@ +glabel file_2 +li $a2, 0 +li $a2, 1 +li $a2, 2 +li $a2, 3 +li $a2, 4 +li $a2, 5 diff --git a/tools/asm-processor/tests/include_file_3.s b/tools/asm-processor/tests/include_file_3.s new file mode 100644 index 0000000..d0123af --- /dev/null +++ b/tools/asm-processor/tests/include_file_3.s @@ -0,0 +1,7 @@ +glabel file_3 +li $a3, 0 +li $a3, 1 +li $a3, 2 +li $a3, 3 +li $a3, 4 +li $a3, 5 diff --git a/tools/asm-processor/tests/include_file_4.s b/tools/asm-processor/tests/include_file_4.s new file mode 100644 index 0000000..94cb710 --- /dev/null +++ b/tools/asm-processor/tests/include_file_4.s @@ -0,0 +1 @@ +.word 5, 6, 7, 8 diff --git a/tools/asm-processor/tests/kpic-o1.c b/tools/asm-processor/tests/kpic-o1.c new file mode 100644 index 0000000..4d3346d --- /dev/null +++ b/tools/asm-processor/tests/kpic-o1.c @@ -0,0 +1,93 @@ +// COMPILE-FLAGS: -O1 -KPIC +GLOBAL_ASM( +glabel foo +addiu $a0, $a0, 1 +addiu $a0, $a0, 2 +addiu $a0, $a0, 3 +addiu $a0, $a0, 4 +addiu $a0, $a0, 5 +addiu $a0, $a0, 6 +addiu $a0, $a0, 7 +addiu $a0, $a0, 8 +addiu $a0, $a0, 9 +addiu $a0, $a0, 10 +addiu $a0, $a0, 11 +addiu $a0, $a0, 12 +) +GLOBAL_ASM( +.late_rodata +.float 1 +.text +glabel float_fn +addiu $a0, $a0, 13 +addiu $a0, $a0, 14 +addiu $a0, $a0, 15 +addiu $a0, $a0, 16 +addiu $a0, $a0, 17 +addiu $a0, $a0, 18 +addiu $a0, $a0, 19 +addiu $a0, $a0, 20 +addiu $a0, $a0, 21 +addiu $a0, $a0, 22 +addiu $a0, $a0, 23 +addiu $a0, $a0, 24 +addiu $a0, $a0, 25 +addiu $a0, $a0, 26 +addiu $a0, $a0, 27 +addiu $a0, $a0, 28 +addiu $a0, $a0, 29 +addiu $a0, $a0, 30 +) +GLOBAL_ASM( +.late_rodata +.late_rodata_alignment 4 +.float 2 +.double 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.text +glabel doubles +addiu $a0, $a0, 31 +addiu $a0, $a0, 32 +addiu $a0, $a0, 33 +addiu $a0, $a0, 34 +addiu $a0, $a0, 35 +addiu $a0, $a0, 36 +addiu $a0, $a0, 37 +addiu $a0, $a0, 38 +addiu $a0, $a0, 39 +addiu $a0, $a0, 40 +addiu $a0, $a0, 41 +addiu $a0, $a0, 42 +addiu $a0, $a0, 43 +addiu $a0, $a0, 44 +addiu $a0, $a0, 45 +addiu $a0, $a0, 46 +addiu $a0, $a0, 47 +addiu $a0, $a0, 48 +addiu $a0, $a0, 49 +addiu $a0, $a0, 50 +addiu $a0, $a0, 51 +addiu $a0, $a0, 52 +addiu $a0, $a0, 53 +addiu $a0, $a0, 54 +addiu $a0, $a0, 55 +addiu $a0, $a0, 56 +addiu $a0, $a0, 57 +addiu $a0, $a0, 58 +addiu $a0, $a0, 59 +addiu $a0, $a0, 60 +addiu $a0, $a0, 61 +addiu $a0, $a0, 62 +addiu $a0, $a0, 63 +addiu $a0, $a0, 64 +addiu $a0, $a0, 65 +addiu $a0, $a0, 66 +addiu $a0, $a0, 67 +addiu $a0, $a0, 68 +) diff --git a/tools/asm-processor/tests/kpic-o1.objdump b/tools/asm-processor/tests/kpic-o1.objdump new file mode 100644 index 0000000..6e33675 --- /dev/null +++ b/tools/asm-processor/tests/kpic-o1.objdump @@ -0,0 +1,46 @@ + +tests/kpic-o1.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000110 .text +00000000 l d .rodata 00000050 .rodata +00000000 g F .text 00000030 foo +00000030 g F .text 00000048 float_fn +00000078 g F .text 00000098 doubles +00000000 O *UND* 00000000 _gp_disp + + +RELOCATION RECORDS FOR [.text]: (none) + +Contents of section .text: + 0000 24840001 24840002 24840003 24840004 $...$...$...$... + 0010 24840005 24840006 24840007 24840008 $...$...$...$... + 0020 24840009 2484000a 2484000b 2484000c $...$...$...$... + 0030 2484000d 2484000e 2484000f 24840010 $...$...$...$... + 0040 24840011 24840012 24840013 24840014 $...$...$...$... + 0050 24840015 24840016 24840017 24840018 $...$...$...$... + 0060 24840019 2484001a 2484001b 2484001c $...$...$...$... + 0070 2484001d 2484001e 2484001f 24840020 $...$...$...$.. + 0080 24840021 24840022 24840023 24840024 $..!$.."$..#$..$ + 0090 24840025 24840026 24840027 24840028 $..%$..&$..'$..( + 00a0 24840029 2484002a 2484002b 2484002c $..)$..*$..+$.., + 00b0 2484002d 2484002e 2484002f 24840030 $..-$...$../$..0 + 00c0 24840031 24840032 24840033 24840034 $..1$..2$..3$..4 + 00d0 24840035 24840036 24840037 24840038 $..5$..6$..7$..8 + 00e0 24840039 2484003a 2484003b 2484003c $..9$..:$..;$..< + 00f0 2484003d 2484003e 2484003f 24840040 $..=$..>$..?$..@ + 0100 24840041 24840042 24840043 24840044 $..A$..B$..C$..D +Contents of section .rodata: + 0000 3f800000 40000000 3ff00000 00000000 ?...@...?....... + 0010 40000000 00000000 40080000 00000000 @.......@....... + 0020 40100000 00000000 40140000 00000000 @.......@....... + 0030 40180000 00000000 401c0000 00000000 @.......@....... + 0040 40200000 00000000 00000000 00000000 @ .............. +Contents of section .options: + 0000 01200000 00000000 92000002 00000000 . .............. + 0010 000f0ff0 00000000 00000000 00000000 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 92000012 00000000 000f0ff0 00000000 ................ + 0010 00000000 00000000 ........ diff --git a/tools/asm-processor/tests/kpic-o2.c b/tools/asm-processor/tests/kpic-o2.c new file mode 100644 index 0000000..f037341 --- /dev/null +++ b/tools/asm-processor/tests/kpic-o2.c @@ -0,0 +1,92 @@ +// COMPILE-FLAGS: -O2 -KPIC +GLOBAL_ASM( +glabel foo +addiu $a0, $a0, 1 +addiu $a0, $a0, 2 +addiu $a0, $a0, 3 +addiu $a0, $a0, 4 +addiu $a0, $a0, 5 +addiu $a0, $a0, 6 +addiu $a0, $a0, 7 +addiu $a0, $a0, 8 +addiu $a0, $a0, 9 +addiu $a0, $a0, 10 +addiu $a0, $a0, 11 +addiu $a0, $a0, 12 +) +GLOBAL_ASM( +.late_rodata +.float 1 +.text +glabel float_fn +addiu $a0, $a0, 13 +addiu $a0, $a0, 14 +addiu $a0, $a0, 15 +addiu $a0, $a0, 16 +addiu $a0, $a0, 17 +addiu $a0, $a0, 18 +addiu $a0, $a0, 19 +addiu $a0, $a0, 20 +addiu $a0, $a0, 21 +addiu $a0, $a0, 22 +addiu $a0, $a0, 23 +addiu $a0, $a0, 24 +addiu $a0, $a0, 25 +addiu $a0, $a0, 26 +addiu $a0, $a0, 27 +addiu $a0, $a0, 28 +addiu $a0, $a0, 29 +addiu $a0, $a0, 30 +) +GLOBAL_ASM( +.late_rodata +.float 2 +.double 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.text +glabel doubles +addiu $a0, $a0, 31 +addiu $a0, $a0, 32 +addiu $a0, $a0, 33 +addiu $a0, $a0, 34 +addiu $a0, $a0, 35 +addiu $a0, $a0, 36 +addiu $a0, $a0, 37 +addiu $a0, $a0, 38 +addiu $a0, $a0, 39 +addiu $a0, $a0, 40 +addiu $a0, $a0, 41 +addiu $a0, $a0, 42 +addiu $a0, $a0, 43 +addiu $a0, $a0, 44 +addiu $a0, $a0, 45 +addiu $a0, $a0, 46 +addiu $a0, $a0, 47 +addiu $a0, $a0, 48 +addiu $a0, $a0, 49 +addiu $a0, $a0, 50 +addiu $a0, $a0, 51 +addiu $a0, $a0, 52 +addiu $a0, $a0, 53 +addiu $a0, $a0, 54 +addiu $a0, $a0, 55 +addiu $a0, $a0, 56 +addiu $a0, $a0, 57 +addiu $a0, $a0, 58 +addiu $a0, $a0, 59 +addiu $a0, $a0, 60 +addiu $a0, $a0, 61 +addiu $a0, $a0, 62 +addiu $a0, $a0, 63 +addiu $a0, $a0, 64 +addiu $a0, $a0, 65 +addiu $a0, $a0, 66 +addiu $a0, $a0, 67 +addiu $a0, $a0, 68 +) diff --git a/tools/asm-processor/tests/kpic-o2.objdump b/tools/asm-processor/tests/kpic-o2.objdump new file mode 100644 index 0000000..abf87ae --- /dev/null +++ b/tools/asm-processor/tests/kpic-o2.objdump @@ -0,0 +1,46 @@ + +tests/kpic-o2.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000110 .text +00000000 l d .rodata 00000050 .rodata +00000000 g F .text 00000030 foo +00000030 g F .text 00000048 float_fn +00000078 g F .text 00000098 doubles +00000000 O *UND* 00000000 _gp_disp + + +RELOCATION RECORDS FOR [.text]: (none) + +Contents of section .text: + 0000 24840001 24840002 24840003 24840004 $...$...$...$... + 0010 24840005 24840006 24840007 24840008 $...$...$...$... + 0020 24840009 2484000a 2484000b 2484000c $...$...$...$... + 0030 2484000d 2484000e 2484000f 24840010 $...$...$...$... + 0040 24840011 24840012 24840013 24840014 $...$...$...$... + 0050 24840015 24840016 24840017 24840018 $...$...$...$... + 0060 24840019 2484001a 2484001b 2484001c $...$...$...$... + 0070 2484001d 2484001e 2484001f 24840020 $...$...$...$.. + 0080 24840021 24840022 24840023 24840024 $..!$.."$..#$..$ + 0090 24840025 24840026 24840027 24840028 $..%$..&$..'$..( + 00a0 24840029 2484002a 2484002b 2484002c $..)$..*$..+$.., + 00b0 2484002d 2484002e 2484002f 24840030 $..-$...$../$..0 + 00c0 24840031 24840032 24840033 24840034 $..1$..2$..3$..4 + 00d0 24840035 24840036 24840037 24840038 $..5$..6$..7$..8 + 00e0 24840039 2484003a 2484003b 2484003c $..9$..:$..;$..< + 00f0 2484003d 2484003e 2484003f 24840040 $..=$..>$..?$..@ + 0100 24840041 24840042 24840043 24840044 $..A$..B$..C$..D +Contents of section .rodata: + 0000 3f800000 40000000 3ff00000 00000000 ?...@...?....... + 0010 40000000 00000000 40080000 00000000 @.......@....... + 0020 40100000 00000000 40140000 00000000 @.......@....... + 0030 40180000 00000000 401c0000 00000000 @.......@....... + 0040 40200000 00000000 00000000 00000000 @ .............. +Contents of section .options: + 0000 01200000 00000000 92000002 00000000 . .............. + 0010 000f0ff0 00000000 00000000 00000000 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 92000012 00000000 000f0ff0 00000000 ................ + 0010 00000000 00000000 ........ diff --git a/tools/asm-processor/tests/label-sameline.c b/tools/asm-processor/tests/label-sameline.c new file mode 100644 index 0000000..a35b43d --- /dev/null +++ b/tools/asm-processor/tests/label-sameline.c @@ -0,0 +1,7 @@ +GLOBAL_ASM( +.rdata +.word 0x12345678 +glabel blah +.word blah2 + /*a*/ blah2: /*b*/ .word blah /*c*/ +) diff --git a/tools/asm-processor/tests/label-sameline.objdump b/tools/asm-processor/tests/label-sameline.objdump new file mode 100644 index 0000000..e69f69c --- /dev/null +++ b/tools/asm-processor/tests/label-sameline.objdump @@ -0,0 +1,25 @@ + +tests/label-sameline.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .rodata 00000010 .rodata +00000000 l d .rodata 00000000 +00000004 g .rodata 00000000 blah + + +RELOCATION RECORDS FOR [.rodata]: +OFFSET TYPE VALUE +00000004 R_MIPS_32 +00000008 R_MIPS_32 blah + + +Contents of section .rodata: + 0000 12345678 00000008 00000000 00000000 .4Vx............ +Contents of section .options: + 0000 01200000 00000000 00000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/large.c b/tools/asm-processor/tests/large.c new file mode 100644 index 0000000..4ffb4ac --- /dev/null +++ b/tools/asm-processor/tests/large.c @@ -0,0 +1,164 @@ + +GLOBAL_ASM( +glabel test + +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 +addiu $sp, $sp, -24 + sw $zero, 4($sp) +lw $t6, 4($sp) +addu $t7, $a0, $t6 +sb $zero, ($t7) +lw $t8, 4($sp) +addiu $t9, $t8, 1 +slt $at, $t9, $a1 + sw $t9, 4($sp) + nop +jr $ra + addiu $sp, $sp, 24 + +) + +void foo(void) {} diff --git a/tools/asm-processor/tests/large.objdump b/tools/asm-processor/tests/large.objdump new file mode 100644 index 0000000..17409a7 --- /dev/null +++ b/tools/asm-processor/tests/large.objdump @@ -0,0 +1,58 @@ + +tests/large.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000280 .text +00000270 g F .text 00000010 foo +00000000 g F .text 00000270 test + + +Contents of section .text: + 0000 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0010 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0020 afb90004 00000000 03e00008 27bd0018 ............'... + 0030 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0040 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0050 afb90004 00000000 03e00008 27bd0018 ............'... + 0060 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0070 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0080 afb90004 00000000 03e00008 27bd0018 ............'... + 0090 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 00a0 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 00b0 afb90004 00000000 03e00008 27bd0018 ............'... + 00c0 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 00d0 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 00e0 afb90004 00000000 03e00008 27bd0018 ............'... + 00f0 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0100 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0110 afb90004 00000000 03e00008 27bd0018 ............'... + 0120 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0130 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0140 afb90004 00000000 03e00008 27bd0018 ............'... + 0150 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0160 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0170 afb90004 00000000 03e00008 27bd0018 ............'... + 0180 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0190 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 01a0 afb90004 00000000 03e00008 27bd0018 ............'... + 01b0 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 01c0 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 01d0 afb90004 00000000 03e00008 27bd0018 ............'... + 01e0 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 01f0 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0200 afb90004 00000000 03e00008 27bd0018 ............'... + 0210 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0220 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0230 afb90004 00000000 03e00008 27bd0018 ............'... + 0240 27bdffe8 afa00004 8fae0004 008e7821 '.............x! + 0250 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0260 afb90004 00000000 03e00008 27bd0018 ............'... + 0270 03e00008 00000000 03e00008 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 80000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a300c032 00000000 00000000 00000000 ...2............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_align.c b/tools/asm-processor/tests/late_rodata_align.c new file mode 100644 index 0000000..7367c79 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_align.c @@ -0,0 +1,80 @@ +GLOBAL_ASM( +.late_rodata + .float 4.1 + .float 4.2 + .float 4.3 + .float 4.4 +.text +glabel a + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float foo(void) { "foo"; return 1.1f; } + +GLOBAL_ASM( +.late_rodata +.late_rodata_alignment 4 + .float 5.1 + .float 5.2 + .float 5.3 + .float 5.4 +.text +glabel b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float bar(void) { "bar"; return 1.2f; } + +GLOBAL_ASM( +.late_rodata +.late_rodata_alignment 8 + .float 6.1 + .float 6.2 + .float 6.3 + .float 6.4 + .float 6.5 +.text +glabel c + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + diff --git a/tools/asm-processor/tests/late_rodata_align.objdump b/tools/asm-processor/tests/late_rodata_align.objdump new file mode 100644 index 0000000..0f7f4c0 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_align.objdump @@ -0,0 +1,51 @@ + +tests/late_rodata_align.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000f0 .text +00000000 l d .rodata 00000050 .rodata +00000040 g F .text 0000001c foo +00000090 g F .text 0000001c bar +00000000 g F .text 00000040 a +0000005c g F .text 00000034 b +000000ac g F .text 00000038 c + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000040 R_MIPS_HI16 .rodata +00000048 R_MIPS_LO16 .rodata +00000090 R_MIPS_HI16 .rodata +00000098 R_MIPS_LO16 .rodata + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 3c010000 03e00008 c4200018 03e00008 <........ ...... + 0050 00000000 03e00008 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 3c010000 03e00008 c420002c 03e00008 <........ .,.... + 00a0 00000000 03e00008 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00000000 00000000 ................ + 00d0 00000000 00000000 00000000 00000000 ................ + 00e0 00000000 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 666f6f00 62617200 40833333 40866666 foo.bar.@.33@.ff + 0010 4089999a 408ccccd 3f8ccccd 40a33333 @...@...?...@.33 + 0020 40a66666 40a9999a 40accccd 3f99999a @.ff@...@...?... + 0030 40c33333 40c66666 40c9999a 40cccccd @.33@.ff@...@... + 0040 40d00000 00000000 00000000 00000000 @............... +Contents of section .options: + 0000 01200000 00000000 80000002 00000000 . .............. + 0010 000005f1 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000002 00000000 000005f1 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_doubles.c b/tools/asm-processor/tests/late_rodata_doubles.c new file mode 100644 index 0000000..0a27b41 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_doubles.c @@ -0,0 +1,83 @@ +GLOBAL_ASM( +.late_rodata + .float 4.1 +.text +glabel a + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float foo(void) { + return 4.15f; +} + +GLOBAL_ASM( +.late_rodata + .float 4.2 + .word 0 + .double 4.3 +.text +glabel b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float bar(void) { + return 4.4f; +} + +GLOBAL_ASM( +.late_rodata + .float 4.55 + .double 4.6 +.text +glabel c + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float baz(void) { + return 4.6f; +} diff --git a/tools/asm-processor/tests/late_rodata_doubles.objdump b/tools/asm-processor/tests/late_rodata_doubles.objdump new file mode 100644 index 0000000..3545768 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_doubles.objdump @@ -0,0 +1,55 @@ + +tests/late_rodata_doubles.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000120 .text +00000000 l d .rodata 00000030 .rodata +00000040 g F .text 0000001c foo +0000009c g F .text 0000001c bar +000000f8 g F .text 0000001c baz +00000000 g F .text 00000040 a +0000005c g F .text 00000040 b +000000b8 g F .text 00000040 c + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000040 R_MIPS_HI16 .rodata +00000048 R_MIPS_LO16 .rodata +0000009c R_MIPS_HI16 .rodata +000000a4 R_MIPS_LO16 .rodata +000000f8 R_MIPS_HI16 .rodata +00000100 R_MIPS_LO16 .rodata + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 3c010000 03e00008 c4200004 03e00008 <........ ...... + 0050 00000000 03e00008 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 3c010000 ............<... + 00a0 03e00008 c4200018 03e00008 00000000 ..... .......... + 00b0 03e00008 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00000000 00000000 ................ + 00d0 00000000 00000000 00000000 00000000 ................ + 00e0 00000000 00000000 00000000 00000000 ................ + 00f0 00000000 00000000 3c010000 03e00008 ........<....... + 0100 c4200028 03e00008 00000000 03e00008 . .(............ + 0110 00000000 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 40833333 4084cccd 40866666 00000000 @.33@...@.ff.... + 0010 40113333 33333333 408ccccd 4091999a @.333333@...@... + 0020 40126666 66666666 40933333 00000000 @.ffffff@.33.... +Contents of section .options: + 0000 01200000 00000000 80000002 00000000 . .............. + 0010 000000f1 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000002 00000000 000000f1 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_doubles_mips1.c b/tools/asm-processor/tests/late_rodata_doubles_mips1.c new file mode 100644 index 0000000..b97261f --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_doubles_mips1.c @@ -0,0 +1,86 @@ +// COMPILE-FLAGS: -O2 +// COMPILE-ISET: -mips1 +// exact copy of late_rodata_doubles.c except for the -mips1 -O2 additions +GLOBAL_ASM( +.late_rodata + .float 4.1 +.text +glabel a + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float foo(void) { + return 4.15f; +} + +GLOBAL_ASM( +.late_rodata + .float 4.2 + .word 0 + .double 4.3 +.text +glabel b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float bar(void) { + return 4.4f; +} + +GLOBAL_ASM( +.late_rodata + .float 4.55 + .double 4.6 +.text +glabel c + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +float baz(void) { + return 4.6f; +} diff --git a/tools/asm-processor/tests/late_rodata_doubles_mips1.objdump b/tools/asm-processor/tests/late_rodata_doubles_mips1.objdump new file mode 100644 index 0000000..667ee7d --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_doubles_mips1.objdump @@ -0,0 +1,52 @@ + +tests/late_rodata_doubles_mips1.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000f0 .text +00000000 l d .rodata 00000030 .rodata +00000040 g F .text 00000010 foo +00000090 g F .text 00000010 bar +000000e0 g F .text 00000010 baz +00000000 g F .text 00000040 a +00000050 g F .text 00000040 b +000000a0 g F .text 00000040 c + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000040 R_MIPS_HI16 .rodata +00000044 R_MIPS_LO16 .rodata +00000090 R_MIPS_HI16 .rodata +00000094 R_MIPS_LO16 .rodata +000000e0 R_MIPS_HI16 .rodata +000000e4 R_MIPS_LO16 .rodata + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 3c010000 c4200004 03e00008 00000000 <.... .......... + 0050 00000000 00000000 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 3c010000 c4200018 03e00008 00000000 <.... .......... + 00a0 00000000 00000000 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00000000 00000000 ................ + 00d0 00000000 00000000 00000000 00000000 ................ + 00e0 3c010000 c4200028 03e00008 00000000 <.... .(........ +Contents of section .rodata: + 0000 40833333 4084cccd 40866666 00000000 @.33@...@.ff.... + 0010 40113333 33333333 408ccccd 4091999a @.333333@...@... + 0020 40126666 66666666 40933333 00000000 @.ffffff@.33.... +Contents of section .options: + 0000 01200000 00000000 80000002 00000000 . .............. + 0010 000c0011 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000002 00000000 000c0011 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_jtbl.c b/tools/asm-processor/tests/late_rodata_jtbl.c new file mode 100644 index 0000000..3c2a5bb --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_jtbl.c @@ -0,0 +1,153 @@ +// COMPILE-FLAGS: -O2 +GLOBAL_ASM( +.late_rodata +.double 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.text +glabel doubles1 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +float a(void) { return 1.1f; } + +GLOBAL_ASM( +.late_rodata +.float 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.double 9 +.float 10 +.text +glabel doubles2 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +GLOBAL_ASM( +glabel a2 +move $a0, $a0 +nop +nop +nop +jr $ra +move $a0, $a0 +) + +GLOBAL_ASM( +.late_rodata + +glabel jtbl +.word case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10 +.word case11, case12, case13, case14, case15, case16, case17, case18, case19, case20 +.word case21, case22, case23, case24, case25, case26 + +.text +glabel foo +sltiu $at, $a0, 0xa +beqz $at, .L756E659B + sll $t7, $a0, 2 +lui $at, %hi(jtbl) +addu $at, $at, $t7 +lw $t7, %lo(jtbl)($at) +jr $t7 + nop +case0: addiu $a0, $a0, 1 +case1: addiu $a0, $a0, 1 +case2: addiu $a0, $a0, 1 +case3: addiu $a0, $a0, 1 +case4: addiu $a0, $a0, 1 +case5: addiu $a0, $a0, 1 +case6: addiu $a0, $a0, 1 +case7: addiu $a0, $a0, 1 +case8: addiu $a0, $a0, 1 +case9: addiu $a0, $a0, 1 +case10: addiu $a0, $a0, 1 +case11: addiu $a0, $a0, 1 +case12: addiu $a0, $a0, 1 +case13: addiu $a0, $a0, 1 +case14: addiu $a0, $a0, 1 +case15: addiu $a0, $a0, 1 +case16: addiu $a0, $a0, 1 +case17: addiu $a0, $a0, 1 +case18: addiu $a0, $a0, 1 +case19: addiu $a0, $a0, 1 +case20: addiu $a0, $a0, 1 +case21: addiu $a0, $a0, 1 +case22: addiu $a0, $a0, 1 +case23: addiu $a0, $a0, 1 +case24: addiu $a0, $a0, 1 +case25: addiu $a0, $a0, 1 +case26: +jr $ra + addiu $v0, $a0, 1 + +.L756E659B: +addiu $v0, $zero, 2 +jr $ra + nop +) + +GLOBAL_ASM( +glabel b2 +move $a0, $a0 +nop +nop +jr $ra +move $a0, $a0 +) + +float b(void) { return 1.2f; } diff --git a/tools/asm-processor/tests/late_rodata_jtbl.objdump b/tools/asm-processor/tests/late_rodata_jtbl.objdump new file mode 100644 index 0000000..53f664b --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_jtbl.objdump @@ -0,0 +1,110 @@ + +tests/late_rodata_jtbl.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000001a0 .text +00000000 l d .rodata 00000100 .rodata +00000000 l d .text 00000000 +0000005c g F .text 0000000c a +0000018c g F .text 0000000c b +00000000 g F .text 0000005c doubles1 +00000068 g F .text 0000005c doubles2 +000000c4 g F .text 00000018 a2 +000000dc g F .text 0000009c foo +0000008c g .rodata 00000000 jtbl +00000178 g F .text 00000014 b2 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000005c R_MIPS_HI16 .rodata +00000064 R_MIPS_LO16 .rodata +0000018c R_MIPS_HI16 .rodata +00000194 R_MIPS_LO16 .rodata +000000e8 R_MIPS_HI16 jtbl +000000f0 R_MIPS_LO16 jtbl + + +RELOCATION RECORDS FOR [.rodata]: +OFFSET TYPE VALUE +0000008c R_MIPS_32 +00000090 R_MIPS_32 +00000094 R_MIPS_32 +00000098 R_MIPS_32 +0000009c R_MIPS_32 +000000a0 R_MIPS_32 +000000a4 R_MIPS_32 +000000a8 R_MIPS_32 +000000ac R_MIPS_32 +000000b0 R_MIPS_32 +000000b4 R_MIPS_32 +000000b8 R_MIPS_32 +000000bc R_MIPS_32 +000000c0 R_MIPS_32 +000000c4 R_MIPS_32 +000000c8 R_MIPS_32 +000000cc R_MIPS_32 +000000d0 R_MIPS_32 +000000d4 R_MIPS_32 +000000d8 R_MIPS_32 +000000dc R_MIPS_32 +000000e0 R_MIPS_32 +000000e4 R_MIPS_32 +000000e8 R_MIPS_32 +000000ec R_MIPS_32 +000000f0 R_MIPS_32 +000000f4 R_MIPS_32 + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 00000000 00000000 00000000 00000000 ................ + 0050 00000000 00000000 00000000 3c010000 ............<... + 0060 03e00008 c4200040 00000000 00000000 ..... .@........ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 00000000 ................ + 00a0 00000000 00000000 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00802025 00000000 00000000 ...... %........ + 00d0 00000000 03e00008 00802025 2c81000a .......... %,... + 00e0 10200022 00047880 3c010000 002f0821 . ."..x.<..../.! + 00f0 8c2f0000 01e00008 00000000 24840001 ./..........$... + 0100 24840001 24840001 24840001 24840001 $...$...$...$... + 0110 24840001 24840001 24840001 24840001 $...$...$...$... + 0120 24840001 24840001 24840001 24840001 $...$...$...$... + 0130 24840001 24840001 24840001 24840001 $...$...$...$... + 0140 24840001 24840001 24840001 24840001 $...$...$...$... + 0150 24840001 24840001 24840001 24840001 $...$...$...$... + 0160 24840001 03e00008 24820001 24020002 $.......$...$... + 0170 03e00008 00000000 00802025 00000000 .......... %.... + 0180 00000000 03e00008 00802025 3c010000 .......... %<... + 0190 03e00008 c42000f8 00000000 00000000 ..... .......... +Contents of section .rodata: + 0000 3ff00000 00000000 40000000 00000000 ?.......@....... + 0010 40080000 00000000 40100000 00000000 @.......@....... + 0020 40140000 00000000 40180000 00000000 @.......@....... + 0030 401c0000 00000000 40200000 00000000 @.......@ ...... + 0040 3f8ccccd 3f800000 40000000 00000000 ?...?...@....... + 0050 40080000 00000000 40100000 00000000 @.......@....... + 0060 40140000 00000000 40180000 00000000 @.......@....... + 0070 401c0000 00000000 40200000 00000000 @.......@ ...... + 0080 40220000 00000000 41200000 000000fc @"......A ...... + 0090 00000100 00000104 00000108 0000010c ................ + 00a0 00000110 00000114 00000118 0000011c ................ + 00b0 00000120 00000124 00000128 0000012c ... ...$...(..., + 00c0 00000130 00000134 00000138 0000013c ...0...4...8...< + 00d0 00000140 00000144 00000148 0000014c ...@...D...H...L + 00e0 00000150 00000154 00000158 0000015c ...P...T...X...\ + 00f0 00000160 00000164 3f99999a 00000000 ...`...d?....... +Contents of section .options: + 0000 01200000 00000000 80004002 00000000 . ........@..... + 0010 000000f1 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 8000c016 00000000 000000f1 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_jtbl_mips1.c b/tools/asm-processor/tests/late_rodata_jtbl_mips1.c new file mode 100644 index 0000000..505f4c1 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_jtbl_mips1.c @@ -0,0 +1,155 @@ +// COMPILE-FLAGS: -O2 +// COMPILE-ISET: -mips1 +// exact copy of late_rodata_jtbl.c except for the -mips1 addition +GLOBAL_ASM( +.late_rodata +.double 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.text +glabel doubles1 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +float a(void) { return 1.1f; } + +GLOBAL_ASM( +.late_rodata +.float 1 +.double 2 +.double 3 +.double 4 +.double 5 +.double 6 +.double 7 +.double 8 +.double 9 +.float 10 +.text +glabel doubles2 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +GLOBAL_ASM( +glabel a2 +move $a0, $a0 +nop +nop +nop +jr $ra +move $a0, $a0 +) + +GLOBAL_ASM( +.late_rodata + +glabel jtbl +.word case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10 +.word case11, case12, case13, case14, case15, case16, case17, case18, case19, case20 +.word case21, case22, case23, case24, case25, case26 + +.text +glabel foo +sltiu $at, $a0, 0xa +beqz $at, .L756E659B + sll $t7, $a0, 2 +lui $at, %hi(jtbl) +addu $at, $at, $t7 +lw $t7, %lo(jtbl)($at) +jr $t7 + nop +case0: addiu $a0, $a0, 1 +case1: addiu $a0, $a0, 1 +case2: addiu $a0, $a0, 1 +case3: addiu $a0, $a0, 1 +case4: addiu $a0, $a0, 1 +case5: addiu $a0, $a0, 1 +case6: addiu $a0, $a0, 1 +case7: addiu $a0, $a0, 1 +case8: addiu $a0, $a0, 1 +case9: addiu $a0, $a0, 1 +case10: addiu $a0, $a0, 1 +case11: addiu $a0, $a0, 1 +case12: addiu $a0, $a0, 1 +case13: addiu $a0, $a0, 1 +case14: addiu $a0, $a0, 1 +case15: addiu $a0, $a0, 1 +case16: addiu $a0, $a0, 1 +case17: addiu $a0, $a0, 1 +case18: addiu $a0, $a0, 1 +case19: addiu $a0, $a0, 1 +case20: addiu $a0, $a0, 1 +case21: addiu $a0, $a0, 1 +case22: addiu $a0, $a0, 1 +case23: addiu $a0, $a0, 1 +case24: addiu $a0, $a0, 1 +case25: addiu $a0, $a0, 1 +case26: +jr $ra + addiu $v0, $a0, 1 + +.L756E659B: +addiu $v0, $zero, 2 +jr $ra + nop +) + +GLOBAL_ASM( +glabel b2 +move $a0, $a0 +nop +nop +jr $ra +move $a0, $a0 +) + +float b(void) { return 1.2f; } diff --git a/tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump b/tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump new file mode 100644 index 0000000..a781a92 --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_jtbl_mips1.objdump @@ -0,0 +1,110 @@ + +tests/late_rodata_jtbl_mips1.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000001a0 .text +00000000 l d .rodata 00000100 .rodata +00000000 l d .text 00000000 +0000005c g F .text 00000010 a +00000190 g F .text 00000010 b +00000000 g F .text 0000005c doubles1 +0000006c g F .text 0000005c doubles2 +000000c8 g F .text 00000018 a2 +000000e0 g F .text 0000009c foo +0000008c g .rodata 00000000 jtbl +0000017c g F .text 00000014 b2 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000005c R_MIPS_HI16 .rodata +00000060 R_MIPS_LO16 .rodata +00000190 R_MIPS_HI16 .rodata +00000194 R_MIPS_LO16 .rodata +000000ec R_MIPS_HI16 jtbl +000000f4 R_MIPS_LO16 jtbl + + +RELOCATION RECORDS FOR [.rodata]: +OFFSET TYPE VALUE +0000008c R_MIPS_32 +00000090 R_MIPS_32 +00000094 R_MIPS_32 +00000098 R_MIPS_32 +0000009c R_MIPS_32 +000000a0 R_MIPS_32 +000000a4 R_MIPS_32 +000000a8 R_MIPS_32 +000000ac R_MIPS_32 +000000b0 R_MIPS_32 +000000b4 R_MIPS_32 +000000b8 R_MIPS_32 +000000bc R_MIPS_32 +000000c0 R_MIPS_32 +000000c4 R_MIPS_32 +000000c8 R_MIPS_32 +000000cc R_MIPS_32 +000000d0 R_MIPS_32 +000000d4 R_MIPS_32 +000000d8 R_MIPS_32 +000000dc R_MIPS_32 +000000e0 R_MIPS_32 +000000e4 R_MIPS_32 +000000e8 R_MIPS_32 +000000ec R_MIPS_32 +000000f0 R_MIPS_32 +000000f4 R_MIPS_32 + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 00000000 00000000 00000000 00000000 ................ + 0050 00000000 00000000 00000000 3c010000 ............<... + 0060 c4200040 03e00008 00000000 00000000 . .@............ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 00000000 ................ + 00a0 00000000 00000000 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00802025 00000000 .......... %.... + 00d0 00000000 00000000 03e00008 00802025 .............. % + 00e0 2c81000a 10200022 00047880 3c010000 ,.... ."..x.<... + 00f0 002f0821 8c2f0000 01e00008 00000000 ./.!./.......... + 0100 24840001 24840001 24840001 24840001 $...$...$...$... + 0110 24840001 24840001 24840001 24840001 $...$...$...$... + 0120 24840001 24840001 24840001 24840001 $...$...$...$... + 0130 24840001 24840001 24840001 24840001 $...$...$...$... + 0140 24840001 24840001 24840001 24840001 $...$...$...$... + 0150 24840001 24840001 24840001 24840001 $...$...$...$... + 0160 24840001 24840001 03e00008 24820001 $...$.......$... + 0170 24020002 03e00008 00000000 00802025 $............. % + 0180 00000000 00000000 03e00008 00802025 .............. % + 0190 3c010000 c42000f8 03e00008 00000000 <.... .......... +Contents of section .rodata: + 0000 3ff00000 00000000 40000000 00000000 ?.......@....... + 0010 40080000 00000000 40100000 00000000 @.......@....... + 0020 40140000 00000000 40180000 00000000 @.......@....... + 0030 401c0000 00000000 40200000 00000000 @.......@ ...... + 0040 3f8ccccd 3f800000 40000000 00000000 ?...?...@....... + 0050 40080000 00000000 40100000 00000000 @.......@....... + 0060 40140000 00000000 40180000 00000000 @.......@....... + 0070 401c0000 00000000 40200000 00000000 @.......@ ...... + 0080 40220000 00000000 41200000 00000100 @"......A ...... + 0090 00000104 00000108 0000010c 00000110 ................ + 00a0 00000114 00000118 0000011c 00000120 ............... + 00b0 00000124 00000128 0000012c 00000130 ...$...(...,...0 + 00c0 00000134 00000138 0000013c 00000140 ...4...8...<...@ + 00d0 00000144 00000148 0000014c 00000150 ...D...H...L...P + 00e0 00000154 00000158 0000015c 00000160 ...T...X...\...` + 00f0 00000164 00000168 3f99999a 00000000 ...d...h?....... +Contents of section .options: + 0000 01200000 00000000 80004002 00000000 . ........@..... + 0010 000000f1 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 8000c016 00000000 000000f1 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/late_rodata_misaligned_doubles.c b/tools/asm-processor/tests/late_rodata_misaligned_doubles.c new file mode 100644 index 0000000..a453dbd --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_misaligned_doubles.c @@ -0,0 +1,77 @@ +GLOBAL_ASM( +.late_rodata + .float 4.01 + .word 0 + .double 4.02 +.text +glabel a + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +double foo(void) { return 4.03; } + +GLOBAL_ASM( +.late_rodata + .float 4.04 + .double 4.05 +.text +glabel b + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + +double bar(void) { return 4.06; } +float baz(void) { return 4.07f; } + +GLOBAL_ASM( +.late_rodata + .double 4.08 +.text +glabel c + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop + nop +) + diff --git a/tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump b/tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump new file mode 100644 index 0000000..46cdc0c --- /dev/null +++ b/tools/asm-processor/tests/late_rodata_misaligned_doubles.objdump @@ -0,0 +1,56 @@ + +tests/late_rodata_misaligned_doubles.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000120 .text +00000000 l d .rodata 00000040 .rodata +00000040 g F .text 0000001c foo +0000009c g F .text 0000001c bar +000000b8 g F .text 0000001c baz +00000000 g F .text 00000040 a +0000005c g F .text 00000040 b +000000d4 g F .text 00000040 c + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000040 R_MIPS_HI16 .rodata +00000048 R_MIPS_LO16 .rodata +0000009c R_MIPS_HI16 .rodata +000000a4 R_MIPS_LO16 .rodata +000000b8 R_MIPS_HI16 .rodata +000000c0 R_MIPS_LO16 .rodata + + +Contents of section .text: + 0000 00000000 00000000 00000000 00000000 ................ + 0010 00000000 00000000 00000000 00000000 ................ + 0020 00000000 00000000 00000000 00000000 ................ + 0030 00000000 00000000 00000000 00000000 ................ + 0040 3c010000 03e00008 d4200010 03e00008 <........ ...... + 0050 00000000 03e00008 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 3c010000 ............<... + 00a0 03e00008 d4200028 03e00008 00000000 ..... .(........ + 00b0 03e00008 00000000 3c010000 03e00008 ........<....... + 00c0 c4200030 03e00008 00000000 03e00008 . .0............ + 00d0 00000000 00000000 00000000 00000000 ................ + 00e0 00000000 00000000 00000000 00000000 ................ + 00f0 00000000 00000000 00000000 00000000 ................ + 0100 00000000 00000000 00000000 00000000 ................ + 0110 00000000 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 408051ec 00000000 4010147a e147ae14 @.Q.....@..z.G.. + 0010 40101eb8 51eb851f 00000000 408147ae @...Q.......@.G. + 0020 40103333 33333333 40103d70 a3d70a3d @.333333@.=p...= + 0030 40823d71 00000000 401051eb 851eb852 @.=q....@.Q....R +Contents of section .options: + 0000 01200000 00000000 80000002 00000000 . .............. + 0010 000000f3 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000002 00000000 000000f3 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/line-continuation-separate-file.s b/tools/asm-processor/tests/line-continuation-separate-file.s new file mode 100644 index 0000000..e130180 --- /dev/null +++ b/tools/asm-processor/tests/line-continuation-separate-file.s @@ -0,0 +1,4 @@ +.rdata + label: .asciiz "1\n\ +2", \ + "34", "56" diff --git a/tools/asm-processor/tests/line-continuation.asmproc.d b/tools/asm-processor/tests/line-continuation.asmproc.d new file mode 100644 index 0000000..687dd1a --- /dev/null +++ b/tools/asm-processor/tests/line-continuation.asmproc.d @@ -0,0 +1,3 @@ +tests/line-continuation.o: tests/line-continuation-separate-file.s + +tests/line-continuation-separate-file.s: diff --git a/tools/asm-processor/tests/line-continuation.c b/tools/asm-processor/tests/line-continuation.c new file mode 100644 index 0000000..d5ab093 --- /dev/null +++ b/tools/asm-processor/tests/line-continuation.c @@ -0,0 +1,22 @@ +void foo(void) { "abcdef"; } + +GLOBAL_ASM( +.rdata + .ascii "AB" \ + "CD", "EF" + .ascii "GH\n\n\n\0\11\222\3333\44444\x1234567\n\nIJK" +) + +void bar(void) { "hello"; } + +GLOBAL_ASM( +.rdata + .asciiz "1\ +2" + .asciiz "34", "56" + .asciiz "78\n\n\n\0\11\222\3333\44444\x1234567\n\n9A" +) + +void baz(void) { "ghijkl"; } + +GLOBAL_ASM("tests/line-continuation-separate-file.s") diff --git a/tools/asm-processor/tests/line-continuation.objdump b/tools/asm-processor/tests/line-continuation.objdump new file mode 100644 index 0000000..038766f --- /dev/null +++ b/tools/asm-processor/tests/line-continuation.objdump @@ -0,0 +1,30 @@ + +tests/line-continuation.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000030 .text +00000000 l d .rodata 00000060 .rodata +00000000 g F .text 00000010 foo +00000010 g F .text 00000010 bar +00000020 g F .text 00000010 baz + + +Contents of section .text: + 0000 03e00008 00000000 03e00008 00000000 ................ + 0010 03e00008 00000000 03e00008 00000000 ................ + 0020 03e00008 00000000 03e00008 00000000 ................ +Contents of section .rodata: + 0000 61626364 65660000 41424344 45464748 abcdef..ABCDEFGH + 0010 0a0a0a00 0992db33 24343467 0a0a494a .......3$44g..IJ + 0020 4b000000 68656c6c 6f000000 31320033 K...hello...12.3 + 0030 34003536 0037380a 0a0a0009 92db3324 4.56.78.......3$ + 0040 3434670a 0a394100 6768696a 6b6c0000 44g..9A.ghijkl.. + 0050 310a3200 33340035 36000000 00000000 1.2.34.56....... +Contents of section .options: + 0000 01200000 00000000 80000000 00000000 . .............. + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000000 00000000 00000000 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/o0.c b/tools/asm-processor/tests/o0.c new file mode 100644 index 0000000..6f8e5e4 --- /dev/null +++ b/tools/asm-processor/tests/o0.c @@ -0,0 +1,28 @@ +// COMPILE-FLAGS: -O0 + +int a(void) { return 1; } +GLOBAL_ASM( +glabel foo +addiu $a0, $a0, 1 +addiu $a0, $a0, 2 +addiu $a0, $a0, 3 +jr $ra +addiu $a0, $a0, 4 +) +float b(void) { return 1.2f; } +GLOBAL_ASM( +.late_rodata +glabel float1 +.float 12.34 + +.text +glabel bar +addiu $a0, $a0, 5 +addiu $a0, $a0, 6 +addiu $a0, $a0, 7 +addiu $a0, $a0, 8 +lui $v0, %hi(float1 + 1) +jr $ra +addiu $v0, $v0, %lo(float1 + 1) +) +float c(void) { return 1.3f; } diff --git a/tools/asm-processor/tests/o0.objdump b/tools/asm-processor/tests/o0.objdump new file mode 100644 index 0000000..98a27dc --- /dev/null +++ b/tools/asm-processor/tests/o0.objdump @@ -0,0 +1,44 @@ + +tests/o0.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000090 .text +00000000 l d .rodata 00000010 .rodata +00000000 g F .text 0000001c a +00000030 g F .text 00000020 b +0000006c g F .text 00000020 c +0000001c g F .text 00000014 foo +00000050 g F .text 0000001c bar +00000004 g .rodata 00000000 float1 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000030 R_MIPS_HI16 .rodata +00000034 R_MIPS_LO16 .rodata +0000006c R_MIPS_HI16 .rodata +00000070 R_MIPS_LO16 .rodata +00000060 R_MIPS_HI16 float1 +00000068 R_MIPS_LO16 float1 + + +Contents of section .text: + 0000 24020001 03e00008 00000000 03e00008 $............... + 0010 00000000 03e00008 00000000 24840001 ............$... + 0020 24840002 24840003 03e00008 24840004 $...$.......$... + 0030 3c010000 c4200000 03e00008 00000000 <.... .......... + 0040 03e00008 00000000 03e00008 00000000 ................ + 0050 24840005 24840006 24840007 24840008 $...$...$...$... + 0060 3c020000 03e00008 24420001 3c010000 <.......$B..<... + 0070 c4200008 03e00008 00000000 03e00008 . .............. + 0080 00000000 03e00008 00000000 00000000 ................ +Contents of section .rodata: + 0000 3f99999a 414570a4 3fa66666 00000000 ?...AEp.?.ff.... +Contents of section .options: + 0000 01200000 00000000 80000006 00000000 . .............. + 0010 00000011 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000016 00000000 00000011 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/o2.c b/tools/asm-processor/tests/o2.c new file mode 100644 index 0000000..144a604 --- /dev/null +++ b/tools/asm-processor/tests/o2.c @@ -0,0 +1,26 @@ +// COMPILE-FLAGS: -O2 + +int a(void) { return 1; } +GLOBAL_ASM( +glabel foo +addiu $a0, $a0, 1 +addiu $a0, $a0, 2 +addiu $a0, $a0, 3 +jr $ra +addiu $a0, $a0, 4 +) +float b(void) { return 1.2f; } +GLOBAL_ASM( +.late_rodata +glabel float1 +.float 12.34 + +.text +glabel bar +addiu $a0, $a0, 5 +addiu $a0, $a0, 6 +lui $v0, %hi(float1 + 1) +jr $ra +addiu $v0, $v0, %lo(float1 + 1) +) +float c(void) { return 1.3f; } diff --git a/tools/asm-processor/tests/o2.objdump b/tools/asm-processor/tests/o2.objdump new file mode 100644 index 0000000..07b3895 --- /dev/null +++ b/tools/asm-processor/tests/o2.objdump @@ -0,0 +1,40 @@ + +tests/o2.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000050 .text +00000000 l d .rodata 00000010 .rodata +00000000 g F .text 00000008 a +0000001c g F .text 0000000c b +0000003c g F .text 0000000c c +00000008 g F .text 00000014 foo +00000028 g F .text 00000014 bar +00000004 g .rodata 00000000 float1 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000001c R_MIPS_HI16 .rodata +00000024 R_MIPS_LO16 .rodata +0000003c R_MIPS_HI16 .rodata +00000044 R_MIPS_LO16 .rodata +00000030 R_MIPS_HI16 float1 +00000038 R_MIPS_LO16 float1 + + +Contents of section .text: + 0000 03e00008 24020001 24840001 24840002 ....$...$...$... + 0010 24840003 03e00008 24840004 3c010000 $.......$...<... + 0020 03e00008 c4200000 24840005 24840006 ..... ..$...$... + 0030 3c020000 03e00008 24420001 3c010000 <.......$B..<... + 0040 03e00008 c4200008 00000000 00000000 ..... .......... +Contents of section .rodata: + 0000 3f99999a 414570a4 3fa66666 00000000 ?...AEp.?.ff.... +Contents of section .options: + 0000 01200000 00000000 80000006 00000000 . .............. + 0010 00000011 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80000016 00000000 00000011 00000000 ................ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/pascal.objdump b/tools/asm-processor/tests/pascal.objdump new file mode 100644 index 0000000..de2db82 --- /dev/null +++ b/tools/asm-processor/tests/pascal.objdump @@ -0,0 +1,137 @@ + +tests/pascal.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000e0 .text +00000000 l d .rodata 00000030 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000000 l O .bss 00000000 $dat +00000000 g F .text 0000000c foo +000000d0 g F .text 0000000c bar +0000000c g F .text 0000003c test +00000048 g F .text 00000044 test2 +0000008c g F .text 00000044 test3 +00000000 *UND* 00000000 get +00000000 *UND* 00000000 put +00000000 *UND* 00000000 pascal_close +00000000 *UND* 00000000 fflush +00000000 *UND* 00000000 filesize +00000000 *UND* 00000000 curpos +00000000 *UND* 00000000 seek +00000000 *UND* 00000000 eof +00000000 *UND* 00000000 eoln +00000000 *UND* 00000000 page +00000000 *UND* 00000000 reset +00000000 *UND* 00000000 rewrite +00000000 *UND* 00000000 cos +00000000 *UND* 00000000 exp +00000000 *UND* 00000000 sqrt +00000000 *UND* 00000000 log +00000000 *UND* 00000000 atan +00000000 *UND* 00000000 sin +00000000 *UND* 00000000 __random_float +00000000 *UND* 00000000 clock +00000000 *UND* 00000000 exit +00000000 *UND* 00000000 __date +00000000 *UND* 00000000 __time +00000000 *UND* 00000000 get_arg +00000000 *UND* 00000000 new +00000000 *UND* 00000000 dispose +00000000 *UND* 00000000 initfile +00000000 *UND* 00000000 peek_char +00000000 *UND* 00000000 next_char +00000000 *UND* 00000000 readln +00000000 *UND* 00000000 read_int64 +00000000 *UND* 00000000 read_card64 +00000000 *UND* 00000000 read_integer +00000000 *UND* 00000000 read_cardinal +00000000 *UND* 00000000 read_integer_range +00000000 *UND* 00000000 read_real +00000000 *UND* 00000000 read_double +00000000 *UND* 00000000 read_extended +00000000 *UND* 00000000 read_string +00000000 *UND* 00000000 read_enum +00000000 *UND* 00000000 read_char +00000000 *UND* 00000000 read_char_range +00000000 *UND* 00000000 read_boolean +00000000 *UND* 00000000 read_set +00000000 *UND* 00000000 writeln +00000000 *UND* 00000000 write_int64 +00000000 *UND* 00000000 write_card64 +00000000 *UND* 00000000 write_integer +00000000 *UND* 00000000 write_cardinal +00000000 *UND* 00000000 write_boolean +00000000 *UND* 00000000 write_char +00000000 *UND* 00000000 write_real +00000000 *UND* 00000000 write_double +00000000 *UND* 00000000 write_extended +00000000 *UND* 00000000 write_string +00000000 *UND* 00000000 write_enum +00000000 *UND* 00000000 write_set +00000000 *UND* 00000000 caseerror +00000000 *UND* 00000000 __pc_nloc_goto +00000000 *UND* 00000000 memcpy +00000000 *UND* 00000000 __in_range +00000000 *UND* 00000000 __ll_mul +00000000 *UND* 00000000 __ll_div +00000000 *UND* 00000000 __ull_div +00000000 *UND* 00000000 __ll_mod +00000000 *UND* 00000000 __ll_rem +00000000 *UND* 00000000 __ull_rem +00000000 *UND* 00000000 __ll_lshift +00000000 *UND* 00000000 __ll_rshift +00000000 *UND* 00000000 __ll_to_f +00000000 *UND* 00000000 __ull_to_f +00000000 *UND* 00000000 __ll_to_d +00000000 *UND* 00000000 __ull_to_d +00000000 *UND* 00000000 __f_ll_ll +00000000 *UND* 00000000 __f_to_ull +00000000 *UND* 00000000 __d_to_ll +00000000 *UND* 00000000 __d_to_ull +00000000 *UND* 00000000 round64 +00000000 *UND* 00000000 trunc64 +00000000 *UND* 00000000 max64 +00000000 *UND* 00000000 min64 +00000000 *UND* 00000000 abs64 +00000000 *UND* 00000000 odd64 +00000000 *UND* 00000000 trapNaN +00000000 *UND* 00000008 input +00000000 *UND* 00000008 output +00000000 *UND* 00000008 err +00000000 *UND* 00000008 __Argc + + +RELOCATION RECORDS FOR [.text]: (none) + +RELOCATION RECORDS FOR [.rodata]: (none) + +Contents of section .text: + 0000 00041080 03e00008 00441023 27bdffe8 .........D.#'... + 0010 18a00009 afa00004 8fae0004 008e7821 ..............x! + 0020 a1e00000 8fb80004 27190001 0325082a ........'....%.* + 0030 1420fff9 afb90004 10000001 00000000 . .............. + 0040 03e00008 27bd0018 00000000 00000000 ....'........... + 0050 00000000 00000000 00000000 00000000 ................ + 0060 00000000 00000000 00000000 00000000 ................ + 0070 00000000 00000000 00000000 00000000 ................ + 0080 00000000 00000000 00000000 00000000 ................ + 0090 00000000 00000000 00000000 00000000 ................ + 00a0 00000000 00000000 00000000 00000000 ................ + 00b0 00000000 00000000 00000000 00000000 ................ + 00c0 00000000 00000000 00000000 00000000 ................ + 00d0 00041080 03e00008 00441023 00000000 .........D.#.... +Contents of section .rodata: + 0000 00123123 00456456 00789789 00000001 ..1#.EdV.x...... + 0010 3ff19999 9999999a 00000002 00000003 ?............... + 0020 4000cccc cccccccd 00000000 00000000 @............... +Contents of section .data: + 0000 00002323 00003434 00000000 00000000 ..##..44........ +Contents of section .options: + 0000 01200000 00000000 80004016 00000000 . ........@..... + 0010 000000f0 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a300c036 00000000 000000f0 00000000 ...6............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/pascal.p b/tools/asm-processor/tests/pascal.p new file mode 100644 index 0000000..0886126 --- /dev/null +++ b/tools/asm-processor/tests/pascal.p @@ -0,0 +1,95 @@ +{ COMPILE-FLAGS: -O2 } + +function foo(x: integer): integer; +begin + foo := x * 3 +end; + +GLOBAL_ASM( +.section .data +.word 0x2323 + +.late_rodata +.word 0x123123 +.word 0x456456 +.word 0x789789 +.text +glabel test +/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24 +/* 000094 00400094 18A00009 */ blez $a1, .L004000BC +/* 000098 00400098 AFA00004 */ sw $zero, 4($sp) +.L0040009C: +/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp) +/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6 +/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7) +/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp) +/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1 +/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1 +/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C +/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp) +.L004000BC: +/* 0000BC 004000BC 10000001 */ b .L004000C4 +/* 0000C0 004000C0 00000000 */ nop +.L004000C4: +/* 0000C4 004000C4 03E00008 */ jr $ra +/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24 +) + +GLOBAL_ASM( +.section .data +.word 0x3434 + +.late_rodata +.word 0x1 +.double 1.1 +.word 0x2, 0x3 +.text +glabel test2 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +GLOBAL_ASM( +.late_rodata +.double 2.1 +.text +glabel test3 +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +nop +) + +function bar(x: integer): integer; +begin + return x * 3 +end; + diff --git a/tools/asm-processor/tests/static-global.c b/tools/asm-processor/tests/static-global.c new file mode 100644 index 0000000..12b1434 --- /dev/null +++ b/tools/asm-processor/tests/static-global.c @@ -0,0 +1,35 @@ +// COMPILE-FLAGS: -O2 +// ASMP-FLAGS: --convert-statics=global +static int xtext(int a, int b, int c); +const int rodata1[] = {1}; +static const int rodata2[] = {2}; +int data1[] = {3}; +static int data2[] = {4}; +int bss1; +static int bss2; + +GLOBAL_ASM( +glabel bar +lui $a0, %hi(rodata2) +lw $a0, %lo(rodata2)($a0) +lui $a1, %hi(data2) +lw $a1, %lo(data2)($a0) +lui $a2, %hi(bss2) +lw $a2, %lo(bss2)($a0) +jal xtext +nop +jr $ra +nop +nop +nop +) + +static int xtext(int a, int b, int c) { + static int bss2; + return 1; +} + +void baz(void) { + { static int bss2; } + xtext(bss2, rodata2[0], data2[0]); +} diff --git a/tools/asm-processor/tests/static-global.objdump b/tools/asm-processor/tests/static-global.objdump new file mode 100644 index 0000000..0b21d2e --- /dev/null +++ b/tools/asm-processor/tests/static-global.objdump @@ -0,0 +1,60 @@ + +tests/static-global.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000080 .text +00000000 l d .rodata 00000010 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000000 g O .rodata 00000004 rodata1 +00000000 g O .data 00000004 data1 +00000000 g O .bss 00000004 bss1 +00000044 g F .text 00000034 baz +00000000 g F .text 00000030 bar +00000004 g O .rodata 00000000 rodata2 +00000004 g O .data 00000000 data2 +00000004 g O .bss 00000000 bss2 +00000030 g F .text 00000000 xtext +00000008 g O .bss 00000000 bss2:1 +0000000c g O .bss 00000000 bss2:2 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000004c R_MIPS_HI16 .bss +00000064 R_MIPS_LO16 .bss +00000050 R_MIPS_HI16 .rodata +0000005c R_MIPS_LO16 .rodata +00000054 R_MIPS_HI16 .data +00000058 R_MIPS_LO16 .data +00000060 R_MIPS_26 .text +00000000 R_MIPS_HI16 rodata2 +00000004 R_MIPS_LO16 rodata2 +00000008 R_MIPS_HI16 data2 +0000000c R_MIPS_LO16 data2 +00000010 R_MIPS_HI16 bss2 +00000014 R_MIPS_LO16 bss2 +00000018 R_MIPS_26 xtext + + +Contents of section .text: + 0000 3c040000 8c840000 3c050000 8c850000 <.......<....... + 0010 3c060000 8c860000 0c000000 00000000 <............... + 0020 03e00008 00000000 00000000 00000000 ................ + 0030 afa40000 afa50004 afa60008 03e00008 ................ + 0040 24020001 27bdffe8 afbf0014 3c040000 $...'.......<... + 0050 3c050000 3c060000 8cc60004 8ca50004 <...<........... + 0060 0c00000c 8c840004 8fbf0014 27bd0018 ............'... + 0070 03e00008 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 00000001 00000002 00000000 00000000 ................ +Contents of section .data: + 0000 00000003 00000004 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 a0000074 00000000 . .........t.... + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a0000074 00000000 00000000 00000000 ...t............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/static.c b/tools/asm-processor/tests/static.c new file mode 100644 index 0000000..c265021 --- /dev/null +++ b/tools/asm-processor/tests/static.c @@ -0,0 +1,32 @@ +// COMPILE-FLAGS: -O2 +static int xtext(int a, int b, int c); +const int rodata1[] = {1}; +static const int rodata2[] = {2}; +int data1[] = {3}; +static int data2[] = {4}; +int bss1; +static int bss2; + +GLOBAL_ASM( +glabel bar +lui $a0, %hi(rodata2) +lw $a0, %lo(rodata2)($a0) +lui $a1, %hi(data2) +lw $a1, %lo(data2)($a0) +lui $a2, %hi(bss2) +lw $a2, %lo(bss2)($a0) +jal xtext +nop +jr $ra +nop +nop +nop +) + +static int xtext(int a, int b, int c) { + return 1; +} + +void baz(void) { + xtext(bss2, rodata2[0], data2[0]); +} diff --git a/tools/asm-processor/tests/static.objdump b/tools/asm-processor/tests/static.objdump new file mode 100644 index 0000000..a2f3638 --- /dev/null +++ b/tools/asm-processor/tests/static.objdump @@ -0,0 +1,58 @@ + +tests/static.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 00000080 .text +00000000 l d .rodata 00000010 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000004 l O .rodata 00000000 rodata2 +00000004 l O .data 00000000 data2 +00000004 l O .bss 00000000 bss2 +00000030 l F .text 00000000 xtext +00000000 g O .rodata 00000004 rodata1 +00000000 g O .data 00000004 data1 +00000000 g O .bss 00000004 bss1 +00000044 g F .text 00000034 baz +00000000 g F .text 00000030 bar + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +0000004c R_MIPS_HI16 .bss +00000064 R_MIPS_LO16 .bss +00000050 R_MIPS_HI16 .rodata +0000005c R_MIPS_LO16 .rodata +00000054 R_MIPS_HI16 .data +00000058 R_MIPS_LO16 .data +00000060 R_MIPS_26 .text +00000000 R_MIPS_HI16 rodata2 +00000004 R_MIPS_LO16 rodata2 +00000008 R_MIPS_HI16 data2 +0000000c R_MIPS_LO16 data2 +00000010 R_MIPS_HI16 bss2 +00000014 R_MIPS_LO16 bss2 +00000018 R_MIPS_26 xtext + + +Contents of section .text: + 0000 3c040000 8c840000 3c050000 8c850000 <.......<....... + 0010 3c060000 8c860000 0c000000 00000000 <............... + 0020 03e00008 00000000 00000000 00000000 ................ + 0030 afa40000 afa50004 afa60008 03e00008 ................ + 0040 24020001 27bdffe8 afbf0014 3c040000 $...'.......<... + 0050 3c050000 3c060000 8cc60004 8ca50004 <...<........... + 0060 0c00000c 8c840004 8fbf0014 27bd0018 ............'... + 0070 03e00008 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 00000001 00000002 00000000 00000000 ................ +Contents of section .data: + 0000 00000003 00000004 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 a0000074 00000000 . .........t.... + 0010 00000000 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a0000074 00000000 00000000 00000000 ...t............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/test1.c b/tools/asm-processor/tests/test1.c new file mode 100644 index 0000000..475555a --- /dev/null +++ b/tools/asm-processor/tests/test1.c @@ -0,0 +1,71 @@ + +GLOBAL_ASM( +.rdata +.word 0x1212 +) + +GLOBAL_ASM( +.late_rodata +.word 0x123123 +.text +glabel test +/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24 +/* 000094 00400094 18A00009 */ blez $a1, .L004000BC +/* 000098 00400098 AFA00004 */ sw $zero, 4($sp) +.L0040009C: +/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp) +/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6 +/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7) +/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp) +/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1 +/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1 +/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C +/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp) +.L004000BC: +/* 0000BC 004000BC 10000001 */ b .L004000C4 +/* 0000C0 004000C0 00000000 */ nop +.L004000C4: +/* 0000C4 004000C4 03E00008 */ jr $ra +/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24 +) + +char bss1[3]; +GLOBAL_ASM( +.bss +bss2: +.space 3 +) +char bss3[3]; +char bss4[3]; +const int rodata1[2] = {1}; +extern int some_rodata; + +unsigned g(float, int); +unsigned f(void) { + return g(1.1f, some_rodata); +} + +GLOBAL_ASM( +.rdata +glabel some_rodata +.word 0x1313 +.text +.late_rodata +.word 0x321321 +.text +glabel g +/* 0000C0 004000C0 27BDFFE8 */ addiu $sp, $sp, -0x18 +/* 0000C4 004000C4 AFBF0014 */ sw $ra, 0x14($sp) +/* 0000C8 004000C8 240E0004 */ addiu $t6, $zero, 4 +/* 0000CC 004000CC 3C010041 */ lui $at, %hi(D_410100) +/* 0000D0 004000D0 AC2E0100 */ sw $t6, %lo(D_410100)($at) +/* 0000D4 004000D4 0C10002C */ jal func_004000B0 +/* 0000D8 004000D8 00000000 */ nop +/* 0000DC 004000DC 10000001 */ b .L004000E4 +/* 0000E0 004000E0 00000000 */ nop +.L004000E4: +/* 0000E4 004000E4 8FBF0014 */ lw $ra, 0x14($sp) +/* 0000E8 004000E8 27BD0018 */ addiu $sp, $sp, 0x18 +/* 0000EC 004000EC 03E00008 */ jr $ra +/* 0000F0 004000F0 00000000 */ nop +) diff --git a/tools/asm-processor/tests/test1.objdump b/tools/asm-processor/tests/test1.objdump new file mode 100644 index 0000000..af12f90 --- /dev/null +++ b/tools/asm-processor/tests/test1.objdump @@ -0,0 +1,54 @@ + +tests/test1.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000b0 .text +00000000 l d .rodata 00000020 .rodata +00000000 l d .bss 00000010 .bss +00000000 g O .bss 00000003 bss1 +00000008 g O .bss 00000003 bss3 +0000000c g O .bss 00000003 bss4 +00000004 g O .rodata 00000008 rodata1 +0000003c g F .text 0000003c f +00000000 g F .text 0000003c test +0000000c g .rodata 00000000 some_rodata +00000078 g F .text 00000034 g +00000000 *UND* 00000000 D_410100 +00000000 *UND* 00000000 func_004000B0 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000044 R_MIPS_HI16 .rodata +00000054 R_MIPS_LO16 .rodata +00000048 R_MIPS_HI16 some_rodata +0000004c R_MIPS_LO16 some_rodata +00000050 R_MIPS_26 g +00000084 R_MIPS_HI16 D_410100 +00000088 R_MIPS_LO16 D_410100 +0000008c R_MIPS_26 func_004000B0 + + +Contents of section .text: + 0000 27bdffe8 18a00009 afa00004 8fae0004 '............... + 0010 008e7821 a1e00000 8fb80004 27190001 ..x!........'... + 0020 0325082a 1420fff9 afb90004 10000001 .%.*. .......... + 0030 00000000 03e00008 27bd0018 27bdffe8 ........'...'... + 0040 afbf0014 3c010000 3c050000 8ca50000 ....<...<....... + 0050 0c000000 c42c0014 10000003 00000000 .....,.......... + 0060 10000001 00000000 8fbf0014 27bd0018 ............'... + 0070 03e00008 00000000 27bdffe8 afbf0014 ........'....... + 0080 240e0004 3c010000 ac2e0000 0c000000 $...<........... + 0090 00000000 10000001 00000000 8fbf0014 ................ + 00a0 27bd0018 03e00008 00000000 00000000 '............... +Contents of section .rodata: + 0000 00001212 00000001 00000000 00001313 ................ + 0010 00123123 3f8ccccd 00321321 00000000 ..1#?....2.!.... +Contents of section .options: + 0000 01200000 00000000 a0000022 00000000 . .........".... + 0010 00001010 00000000 00000000 00007ff0 ................ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a300c032 00000000 00001010 00000000 ...2............ + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/test2.c b/tools/asm-processor/tests/test2.c new file mode 100644 index 0000000..15969fe --- /dev/null +++ b/tools/asm-processor/tests/test2.c @@ -0,0 +1,69 @@ +const char buf1[1] = {1}; +float func1(void) { + "func1"; + return 0.1f; +} +const char buf2[1] = {2}; +void func2(void) { + *(volatile float*)0 = -3.5792360305786133f; + *(volatile float*)0 = -3.5792362689971924f; + // "func2"; + // return 0.2f; +} +const char buf3[1] = {3}; +int func3(int x) { + switch(x) { + case 0: + return 1; + case 1: + return 2; + case 2: + return 3; + case 3: + return 4; + case 4: + return 5; + case 5: + return 4; + case 6: + return 4; + case 7: + return 4; + default: + return 3; + } +} + +#if 1 +GLOBAL_ASM( +.rdata +.word 0x66756e63 # func +.word 0x34000000 # 4\0\0\0 +.word jumptarget + 4 + +.late_rodata +glabel rv +.word 0x3e4ccccd # 0.2f +.word jumptarget + 8 + +.text +glabel func4 +lui $at, %hi(rv) +glabel jumptarget +jr $ra +lwc1 $f0, %lo(rv)($at) +jr $ra +nop +jr $ra +nop +jr $ra +nop +jr $ra +nop +) +#else +float func4(void) { + "func4"; + return 0.2f; +} +#endif diff --git a/tools/asm-processor/tests/test2.objdump b/tools/asm-processor/tests/test2.objdump new file mode 100644 index 0000000..968b7d0 --- /dev/null +++ b/tools/asm-processor/tests/test2.objdump @@ -0,0 +1,76 @@ + +tests/test2.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000f0 .text +00000000 l d .rodata 00000060 .rodata +00000000 g O .rodata 00000001 buf1 +00000000 g F .text 0000001c func1 +0000000c g O .rodata 00000001 buf2 +0000001c g F .text 00000028 func2 +00000010 g O .rodata 00000001 buf3 +00000044 g F .text 0000007c func3 +000000c4 g F .text 00000000 jumptarget +000000c0 g F .text 0000002c func4 +0000004c g .rodata 00000000 rv + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000000 R_MIPS_HI16 .rodata +00000008 R_MIPS_LO16 .rodata +0000001c R_MIPS_HI16 .rodata +00000020 R_MIPS_LO16 .rodata +00000028 R_MIPS_HI16 .rodata +0000002c R_MIPS_LO16 .rodata +00000054 R_MIPS_HI16 .rodata +0000005c R_MIPS_LO16 .rodata +000000c0 R_MIPS_HI16 rv +000000c8 R_MIPS_LO16 rv + + +RELOCATION RECORDS FOR [.rodata]: +OFFSET TYPE VALUE +0000002c R_MIPS_32 .text +00000030 R_MIPS_32 .text +00000034 R_MIPS_32 .text +00000038 R_MIPS_32 .text +0000003c R_MIPS_32 .text +00000040 R_MIPS_32 .text +00000044 R_MIPS_32 .text +00000048 R_MIPS_32 .text +0000001c R_MIPS_32 jumptarget +00000050 R_MIPS_32 jumptarget + + +Contents of section .text: + 0000 3c010000 03e00008 c4200020 03e00008 <........ . .... + 0010 00000000 03e00008 00000000 3c010000 ............<... + 0020 c4240024 e4040000 3c010000 c4260028 .$.$....<....&.( + 0030 e4060000 03e00008 00000000 03e00008 ................ + 0040 00000000 2c810008 10200017 00000000 ....,.... ...... + 0050 00047080 3c010000 002e0821 8c2e002c ..p.<......!..., + 0060 01c00008 00000000 03e00008 24020001 ............$... + 0070 03e00008 24020002 03e00008 24020003 ....$.......$... + 0080 03e00008 24020004 03e00008 24020005 ....$.......$... + 0090 03e00008 24020004 03e00008 24020004 ....$.......$... + 00a0 03e00008 24020004 03e00008 24020003 ....$.......$... + 00b0 03e00008 00000000 03e00008 00000000 ................ + 00c0 3c010000 03e00008 c4200000 03e00008 <........ ...... + 00d0 00000000 03e00008 00000000 03e00008 ................ + 00e0 00000000 03e00008 00000000 00000000 ................ +Contents of section .rodata: + 0000 01000000 66756e63 31000000 02000000 ....func1....... + 0010 03000000 66756e63 34000000 00000004 ....func4....... + 0020 3dcccccd c0651234 c0651235 00000068 =....e.4.e.5...h + 0030 00000070 00000078 00000080 00000088 ...p...x........ + 0040 00000090 00000098 000000a0 3e4ccccd ............>L.. + 0050 00000008 00000000 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 80004016 00000000 . ........@..... + 0010 00000051 00000000 00000000 00007ff0 ...Q............ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 80004016 00000000 00000051 00000000 ..@........Q.... + 0010 00000000 00007ff0 ........ diff --git a/tools/asm-processor/tests/test3.c b/tools/asm-processor/tests/test3.c new file mode 100644 index 0000000..d74bb4c --- /dev/null +++ b/tools/asm-processor/tests/test3.c @@ -0,0 +1,70 @@ + +GLOBAL_ASM( +.rdata +.word 321321 +.text +glabel test +/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24 +/* 000094 00400094 18A00009 */ blez $a1, .L004000BC +/* 000098 00400098 AFA00004 */ sw $zero, 4($sp) +.L0040009C: +/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp) +/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6 +/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7) +/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp) +/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1 +/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1 +/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C +/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp) +.L004000BC: +/* 0000BC 004000BC 10000001 */ b .L004000C4 +/* 0000C0 004000C0 00000000 */ nop +.L004000C4: +/* 0000C4 004000C4 03E00008 */ jr $ra +/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24 +) + +// static -> no symbols +// bss +char globalBuf[4]; +const char constBuf[4]; + +// data +char globalBufInit[4] = {1}; + +// rodata +const char constBufInit[4] = {1}; +const char constBufInit2[1] = {2}; +const char constBufInit3[1] = {3}; + +unsigned g(void); +unsigned f(void) { + // aligns to 4 or 8 byte boundary (char -> 4, double -> 8) + double x = 5.1; + float y = 5.2f; + float z = 5.3f; + "Hello "; + "World"; + return g(); +} + +GLOBAL_ASM( +.rdata +.word 123123 +.text +glabel g +/* 0000C0 004000C0 27BDFFE8 */ addiu $sp, $sp, -0x18 +/* 0000C4 004000C4 AFBF0014 */ sw $ra, 0x14($sp) +/* 0000C8 004000C8 240E0004 */ addiu $t6, $zero, 4 +/* 0000CC 004000CC 3C010041 */ lui $at, %hi(D_410100) +/* 0000D0 004000D0 AC2E0100 */ sw $t6, %lo(D_410100)($at) +/* 0000D4 004000D4 0C10002C */ jal func_004000B0 +/* 0000D8 004000D8 00000000 */ nop +/* 0000DC 004000DC 10000001 */ b .L004000E4 +/* 0000E0 004000E0 00000000 */ nop +.L004000E4: +/* 0000E4 004000E4 8FBF0014 */ lw $ra, 0x14($sp) +/* 0000E8 004000E8 27BD0018 */ addiu $sp, $sp, 0x18 +/* 0000EC 004000EC 03E00008 */ jr $ra +/* 0000F0 004000F0 00000000 */ nop +) diff --git a/tools/asm-processor/tests/test3.objdump b/tools/asm-processor/tests/test3.objdump new file mode 100644 index 0000000..e1e96c2 --- /dev/null +++ b/tools/asm-processor/tests/test3.objdump @@ -0,0 +1,64 @@ + +tests/test3.o: file format elf32-tradbigmips + +SYMBOL TABLE: +00000000 l d .text 000000d0 .text +00000000 l d .rodata 00000040 .rodata +00000000 l d .data 00000010 .data +00000000 l d .bss 00000010 .bss +00000000 g O .bss 00000004 globalBuf +00000004 g O .bss 00000004 constBuf +00000000 g O .data 00000004 globalBufInit +00000004 g O .rodata 00000004 constBufInit +00000008 g O .rodata 00000001 constBufInit2 +0000000c g O .rodata 00000001 constBufInit3 +0000003c g F .text 00000054 f +00000000 g F .text 0000003c test +00000090 g F .text 00000034 g +00000000 *UND* 00000000 D_410100 +00000000 *UND* 00000000 func_004000B0 + + +RELOCATION RECORDS FOR [.text]: +OFFSET TYPE VALUE +00000044 R_MIPS_HI16 .rodata +00000048 R_MIPS_LO16 .rodata +00000050 R_MIPS_HI16 .rodata +00000054 R_MIPS_LO16 .rodata +0000005c R_MIPS_HI16 .rodata +00000060 R_MIPS_LO16 .rodata +00000068 R_MIPS_26 g +0000009c R_MIPS_HI16 D_410100 +000000a0 R_MIPS_LO16 D_410100 +000000a4 R_MIPS_26 func_004000B0 + + +Contents of section .text: + 0000 27bdffe8 18a00009 afa00004 8fae0004 '............... + 0010 008e7821 a1e00000 8fb80004 27190001 ..x!........'... + 0020 0325082a 1420fff9 afb90004 10000001 .%.*. .......... + 0030 00000000 03e00008 27bd0018 27bdffd8 ........'...'... + 0040 afbf0014 3c010000 d4240028 f7a40020 ....<....$.(... + 0050 3c010000 c4260030 e7a6001c 3c010000 <....&.0....<... + 0060 c4280034 e7a80018 0c000000 00000000 .(.4............ + 0070 10000003 00000000 10000001 00000000 ................ + 0080 8fbf0014 27bd0028 03e00008 00000000 ....'..(........ + 0090 27bdffe8 afbf0014 240e0004 3c010000 '.......$...<... + 00a0 ac2e0000 0c000000 00000000 10000001 ................ + 00b0 00000000 8fbf0014 27bd0018 03e00008 ........'....... + 00c0 00000000 00000000 00000000 00000000 ................ +Contents of section .rodata: + 0000 0004e729 01000000 02000000 03000000 ...)............ + 0010 48656c6c 6f202000 576f726c 64000000 Hello .World... + 0020 0001e0f3 00000000 40146666 66666666 ........@.ffffff + 0030 40a66666 40a9999a 00000000 00000000 @.ff@........... +Contents of section .data: + 0000 01000000 00000000 00000000 00000000 ................ +Contents of section .options: + 0000 01200000 00000000 a0000002 00000000 . .............. + 0010 00000170 00000000 00000000 00007ff0 ...p............ + 0020 07100000 00000000 00000000 00000000 ................ + 0030 08100000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 a300c032 00000000 00000170 00000000 ...2.......p.... + 0010 00000000 00007ff0 ........ diff --git a/tools/asmpreproc/asm-processor.py b/tools/asmpreproc/asm-processor.py deleted file mode 100755 index ea18c38..0000000 --- a/tools/asmpreproc/asm-processor.py +++ /dev/null @@ -1,1150 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import tempfile -import struct -import copy -import sys -import re -import os -from collections import namedtuple -from io import StringIO - -MAX_FN_SIZE = 100 -SLOW_CHECKS = False - -EI_NIDENT = 16 -EI_CLASS = 4 -EI_DATA = 5 -EI_VERSION = 6 -EI_OSABI = 7 -EI_ABIVERSION = 8 -STN_UNDEF = 0 - -SHN_UNDEF = 0 -SHN_ABS = 0xfff1 -SHN_COMMON = 0xfff2 -SHN_XINDEX = 0xffff -SHN_LORESERVE = 0xff00 - -STT_NOTYPE = 0 -STT_OBJECT = 1 -STT_FUNC = 2 -STT_SECTION = 3 -STT_FILE = 4 -STT_COMMON = 5 -STT_TLS = 6 - -STB_LOCAL = 0 -STB_GLOBAL = 1 -STB_WEAK = 2 - -STV_DEFAULT = 0 -STV_INTERNAL = 1 -STV_HIDDEN = 2 -STV_PROTECTED = 3 - -SHT_NULL = 0 -SHT_PROGBITS = 1 -SHT_SYMTAB = 2 -SHT_STRTAB = 3 -SHT_RELA = 4 -SHT_HASH = 5 -SHT_DYNAMIC = 6 -SHT_NOTE = 7 -SHT_NOBITS = 8 -SHT_REL = 9 -SHT_SHLIB = 10 -SHT_DYNSYM = 11 -SHT_INIT_ARRAY = 14 -SHT_FINI_ARRAY = 15 -SHT_PREINIT_ARRAY = 16 -SHT_GROUP = 17 -SHT_SYMTAB_SHNDX = 18 -SHT_MIPS_GPTAB = 0x70000003 -SHT_MIPS_DEBUG = 0x70000005 -SHT_MIPS_REGINFO = 0x70000006 -SHT_MIPS_OPTIONS = 0x7000000d - -SHF_WRITE = 0x1 -SHF_ALLOC = 0x2 -SHF_EXECINSTR = 0x4 -SHF_MERGE = 0x10 -SHF_STRINGS = 0x20 -SHF_INFO_LINK = 0x40 -SHF_LINK_ORDER = 0x80 -SHF_OS_NONCONFORMING = 0x100 -SHF_GROUP = 0x200 -SHF_TLS = 0x400 - -R_MIPS_32 = 2 -R_MIPS_26 = 4 -R_MIPS_HI16 = 5 -R_MIPS_LO16 = 6 - - -class ElfHeader: - """ - typedef struct { - unsigned char e_ident[EI_NIDENT]; - Elf32_Half e_type; - Elf32_Half e_machine; - Elf32_Word e_version; - Elf32_Addr e_entry; - Elf32_Off e_phoff; - Elf32_Off e_shoff; - Elf32_Word e_flags; - Elf32_Half e_ehsize; - Elf32_Half e_phentsize; - Elf32_Half e_phnum; - Elf32_Half e_shentsize; - Elf32_Half e_shnum; - Elf32_Half e_shstrndx; - } Elf32_Ehdr; - """ - - def __init__(self, data): - self.e_ident = data[:EI_NIDENT] - self.e_type, self.e_machine, self.e_version, self.e_entry, self.e_phoff, self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx = struct.unpack('>HHIIIIIHHHHHH', data[EI_NIDENT:]) - assert self.e_ident[EI_CLASS] == 1 # 32-bit - assert self.e_ident[EI_DATA] == 2 # big-endian - assert self.e_type == 1 # relocatable - assert self.e_machine == 8 # MIPS I Architecture - assert self.e_phoff == 0 # no program header - assert self.e_shoff != 0 # section header - assert self.e_shstrndx != SHN_UNDEF - - def to_bin(self): - return self.e_ident + struct.pack('>HHIIIIIHHHHHH', self.e_type, - self.e_machine, self.e_version, self.e_entry, self.e_phoff, - self.e_shoff, self.e_flags, self.e_ehsize, self.e_phentsize, - self.e_phnum, self.e_shentsize, self.e_shnum, self.e_shstrndx) - - -class Symbol: - """ - typedef struct { - Elf32_Word st_name; - Elf32_Addr st_value; - Elf32_Word st_size; - unsigned char st_info; - unsigned char st_other; - Elf32_Half st_shndx; - } Elf32_Sym; - """ - - def __init__(self, data, strtab): - self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx = struct.unpack('>IIIBBH', data) - assert self.st_shndx != SHN_XINDEX, "too many sections (SHN_XINDEX not supported)" - self.bind = st_info >> 4 - self.type = st_info & 15 - self.name = strtab.lookup_str(self.st_name) - self.visibility = self.st_other & 3 - - def to_bin(self): - st_info = (self.bind << 4) | self.type - return struct.pack('>IIIBBH', self.st_name, self.st_value, self.st_size, st_info, self.st_other, self.st_shndx) - - -class Relocation: - def __init__(self, data, sh_type): - self.sh_type = sh_type - if sh_type == SHT_REL: - self.r_offset, self.r_info = struct.unpack('>II', data) - else: - self.r_offset, self.r_info, self.r_addend = struct.unpack('>III', data) - self.sym_index = self.r_info >> 8 - self.rel_type = self.r_info & 0xff - - def to_bin(self): - self.r_info = (self.sym_index << 8) | self.rel_type - if self.sh_type == SHT_REL: - return struct.pack('>II', self.r_offset, self.r_info) - else: - return struct.pack('>III', self.r_offset, self.r_info, self.r_addend) - - -class Section: - """ - typedef struct { - Elf32_Word sh_name; - Elf32_Word sh_type; - Elf32_Word sh_flags; - Elf32_Addr sh_addr; - Elf32_Off sh_offset; - Elf32_Word sh_size; - Elf32_Word sh_link; - Elf32_Word sh_info; - Elf32_Word sh_addralign; - Elf32_Word sh_entsize; - } Elf32_Shdr; - """ - - def __init__(self, header, data, index): - self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize = struct.unpack('>IIIIIIIIII', header) - assert not self.sh_flags & SHF_LINK_ORDER - if self.sh_entsize != 0: - assert self.sh_size % self.sh_entsize == 0 - if self.sh_type == SHT_NOBITS: - self.data = b'' - else: - self.data = data[self.sh_offset:self.sh_offset + self.sh_size] - self.index = index - self.relocated_by = [] - - @staticmethod - def from_parts(sh_name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data, index): - header = struct.pack('>IIIIIIIIII', sh_name, sh_type, sh_flags, 0, 0, len(data), sh_link, sh_info, sh_addralign, sh_entsize) - return Section(header, data, index) - - def lookup_str(self, index): - assert self.sh_type == SHT_STRTAB - to = self.data.find(b'\0', index) - assert to != -1 - return self.data[index:to].decode('latin1') - - def add_str(self, string): - assert self.sh_type == SHT_STRTAB - ret = len(self.data) - self.data += string.encode('latin1') + b'\0' - return ret - - def is_rel(self): - return self.sh_type == SHT_REL or self.sh_type == SHT_RELA - - def header_to_bin(self): - if self.sh_type != SHT_NOBITS: - self.sh_size = len(self.data) - return struct.pack('>IIIIIIIIII', self.sh_name, self.sh_type, self.sh_flags, self.sh_addr, self.sh_offset, self.sh_size, self.sh_link, self.sh_info, self.sh_addralign, self.sh_entsize) - - def late_init(self, sections): - if self.sh_type == SHT_SYMTAB: - self.init_symbols(sections) - elif self.is_rel(): - self.rel_target = sections[self.sh_info] - self.rel_target.relocated_by.append(self) - self.init_relocs() - - def find_symbol(self, name): - assert self.sh_type == SHT_SYMTAB - for s in self.symbol_entries: - if s.name == name: - return (s.st_shndx, s.st_value) - return None - - def find_symbol_in_section(self, name, section): - pos = self.find_symbol(name) - assert pos is not None - assert pos[0] == section.index - return pos[1] - - def init_symbols(self, sections): - assert self.sh_type == SHT_SYMTAB - assert self.sh_entsize == 16 - self.strtab = sections[self.sh_link] - entries = [] - for i in range(0, self.sh_size, self.sh_entsize): - entries.append(Symbol(self.data[i:i+self.sh_entsize], self.strtab)) - self.symbol_entries = entries - - def init_relocs(self): - assert self.is_rel() - entries = [] - for i in range(0, self.sh_size, self.sh_entsize): - entries.append(Relocation(self.data[i:i+self.sh_entsize], self.sh_type)) - self.relocations = entries - - def local_symbols(self): - assert self.sh_type == SHT_SYMTAB - return self.symbol_entries[:self.sh_info] - - def global_symbols(self): - assert self.sh_type == SHT_SYMTAB - return self.symbol_entries[self.sh_info:] - - -class ElfFile: - def __init__(self, data): - self.data = data - assert data[:4] == b'\x7fELF', "not an ELF file" - - self.elf_header = ElfHeader(data[0:52]) - - offset, size = self.elf_header.e_shoff, self.elf_header.e_shentsize - null_section = Section(data[offset:offset + size], data, 0) - num_sections = self.elf_header.e_shnum or null_section.sh_size - - self.sections = [null_section] - for i in range(1, num_sections): - ind = offset + i * size - self.sections.append(Section(data[ind:ind + size], data, i)) - - symtab = None - for s in self.sections: - if s.sh_type == SHT_SYMTAB: - assert not symtab - symtab = s - assert symtab is not None - self.symtab = symtab - - shstr = self.sections[self.elf_header.e_shstrndx] - for s in self.sections: - s.name = shstr.lookup_str(s.sh_name) - s.late_init(self.sections) - - def find_section(self, name): - for s in self.sections: - if s.name == name: - return s - return None - - def add_section(self, name, sh_type, sh_flags, sh_link, sh_info, sh_addralign, sh_entsize, data): - shstr = self.sections[self.elf_header.e_shstrndx] - sh_name = shstr.add_str(name) - s = Section.from_parts(sh_name=sh_name, sh_type=sh_type, - sh_flags=sh_flags, sh_link=sh_link, sh_info=sh_info, - sh_addralign=sh_addralign, sh_entsize=sh_entsize, data=data, - index=len(self.sections)) - self.sections.append(s) - s.name = name - s.late_init(self.sections) - return s - - def drop_irrelevant_sections(self): - # We can only drop sections at the end, since otherwise section - # references might be wrong. Luckily, these sections typically are. - while self.sections[-1].sh_type in [SHT_MIPS_DEBUG, SHT_MIPS_GPTAB]: - self.sections.pop() - - def write(self, filename): - outfile = open(filename, 'wb') - outidx = 0 - def write_out(data): - nonlocal outidx - outfile.write(data) - outidx += len(data) - def pad_out(align): - if align and outidx % align: - write_out(b'\0' * (align - outidx % align)) - - self.elf_header.e_shnum = len(self.sections) - write_out(self.elf_header.to_bin()) - - for s in self.sections: - if s.sh_type != SHT_NOBITS and s.sh_type != SHT_NULL: - pad_out(s.sh_addralign) - s.sh_offset = outidx - write_out(s.data) - - pad_out(4) - self.elf_header.e_shoff = outidx - for s in self.sections: - write_out(s.header_to_bin()) - - outfile.seek(0) - outfile.write(self.elf_header.to_bin()) - outfile.close() - - -def is_temp_name(name): - return name.startswith('_asmpp_') - - -# https://stackoverflow.com/a/241506 -def re_comment_replacer(match): - s = match.group(0) - if s[0] in "/#": - return " " - else: - return s - - -re_comment_or_string = re.compile( - r'#.*|/\*.*?\*/|"(?:\\.|[^\\"])*"' -) - - -class Failure(Exception): - def __init__(self, message): - self.message = message - - def __str__(self): - return self.message - - -class GlobalState: - def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata): - # A value that hopefully never appears as a 32-bit rodata constant (or we - # miscompile late rodata). Increases by 1 in each step. - self.late_rodata_hex = 0xE0123456 - self.namectr = 0 - self.min_instr_count = min_instr_count - self.skip_instr_count = skip_instr_count - self.use_jtbl_for_rodata = use_jtbl_for_rodata - - def next_late_rodata_hex(self): - dummy_bytes = struct.pack('>I', self.late_rodata_hex) - if (self.late_rodata_hex & 0xffff) == 0: - # Avoid lui - self.late_rodata_hex += 1 - self.late_rodata_hex += 1 - return dummy_bytes - - def make_name(self, cat): - self.namectr += 1 - return '_asmpp_{}{}'.format(cat, self.namectr) - - -Function = namedtuple('Function', ['text_glabels', 'asm_conts', 'late_rodata_dummy_bytes', 'jtbl_rodata_size', 'late_rodata_asm_conts', 'fn_desc', 'data']) - - -class GlobalAsmBlock: - def __init__(self, fn_desc): - self.fn_desc = fn_desc - self.cur_section = '.text' - self.asm_conts = [] - self.late_rodata_asm_conts = [] - self.late_rodata_alignment = 0 - self.late_rodata_alignment_from_content = False - self.text_glabels = [] - self.fn_section_sizes = { - '.text': 0, - '.data': 0, - '.bss': 0, - '.rodata': 0, - '.late_rodata': 0, - } - self.fn_ins_inds = [] - self.glued_line = '' - self.num_lines = 0 - - def fail(self, message, line=None): - context = self.fn_desc - if line: - context += ", at line \"" + line + "\"" - raise Failure(message + "\nwithin " + context) - - def count_quoted_size(self, line, z, real_line, output_enc): - line = line.encode(output_enc).decode('latin1') - in_quote = False - num_parts = 0 - ret = 0 - i = 0 - digits = "0123456789" # 0-7 would be more sane, but this matches GNU as - while i < len(line): - c = line[i] - i += 1 - if not in_quote: - if c == '"': - in_quote = True - num_parts += 1 - else: - if c == '"': - in_quote = False - continue - ret += 1 - if c != '\\': - continue - if i == len(line): - self.fail("backslash at end of line not supported", real_line) - c = line[i] - i += 1 - # (if c is in "bfnrtv", we have a real escaped literal) - if c == 'x': - # hex literal, consume any number of hex chars, possibly none - while i < len(line) and line[i] in digits + "abcdefABCDEF": - i += 1 - elif c in digits: - # octal literal, consume up to two more digits - it = 0 - while i < len(line) and line[i] in digits and it < 2: - i += 1 - it += 1 - - if in_quote: - self.fail("unterminated string literal", real_line) - if num_parts == 0: - self.fail(".ascii with no string", real_line) - return ret + num_parts if z else ret - - def align2(self): - while self.fn_section_sizes[self.cur_section] % 2 != 0: - self.fn_section_sizes[self.cur_section] += 1 - - def align4(self): - while self.fn_section_sizes[self.cur_section] % 4 != 0: - self.fn_section_sizes[self.cur_section] += 1 - - def add_sized(self, size, line): - if self.cur_section in ['.text', '.late_rodata']: - if size % 4 != 0: - self.fail("size must be a multiple of 4", line) - if size < 0: - self.fail("size cannot be negative", line) - self.fn_section_sizes[self.cur_section] += size - if self.cur_section == '.text': - if not self.text_glabels: - self.fail(".text block without an initial glabel", line) - self.fn_ins_inds.append((self.num_lines - 1, size // 4)) - - def process_line(self, line, output_enc): - self.num_lines += 1 - if line.endswith('\\'): - self.glued_line += line[:-1] - return - line = self.glued_line + line - self.glued_line = '' - - real_line = line - line = re.sub(re_comment_or_string, re_comment_replacer, line) - line = line.strip() - line = re.sub(r'^[a-zA-Z0-9_]+:\s*', '', line) - changed_section = False - emitting_double = False - if line.startswith('glabel ') and self.cur_section == '.text': - self.text_glabels.append(line.split()[1]) - if not line: - pass # empty line - elif line.startswith('glabel ') or (' ' not in line and line.endswith(':')): - pass # label - elif line.startswith('.section') or line in ['.text', '.data', '.rdata', '.rodata', '.bss', '.late_rodata']: - # section change - self.cur_section = '.rodata' if line == '.rdata' else line.split(',')[0].split()[-1] - if self.cur_section not in ['.data', '.text', '.rodata', '.late_rodata', '.bss']: - self.fail("unrecognized .section directive", real_line) - changed_section = True - elif line.startswith('.late_rodata_alignment'): - if self.cur_section != '.late_rodata': - self.fail(".late_rodata_alignment must occur within .late_rodata section", real_line) - value = int(line.split()[1]) - if value not in [4, 8]: - self.fail(".late_rodata_alignment argument must be 4 or 8", real_line) - if self.late_rodata_alignment and self.late_rodata_alignment != value: - self.fail(".late_rodata_alignment alignment assumption conflicts with earlier .double directive. Make sure to provide explicit alignment padding.") - self.late_rodata_alignment = value - changed_section = True - elif line.startswith('.incbin'): - self.add_sized(int(line.split(',')[-1].strip(), 0), real_line) - elif line.startswith('.word') or line.startswith('.float'): - self.align4() - self.add_sized(4 * len(line.split(',')), real_line) - elif line.startswith('.double'): - self.align4() - if self.cur_section == '.late_rodata': - align8 = self.fn_section_sizes[self.cur_section] % 8 - # Automatically set late_rodata_alignment, so the generated C code uses doubles. - # This gives us correct alignment for the transferred doubles even when the - # late_rodata_alignment is wrong, e.g. for non-matching compilation. - if not self.late_rodata_alignment: - self.late_rodata_alignment = 8 - align8 - self.late_rodata_alignment_from_content = True - elif self.late_rodata_alignment != 8 - align8: - if self.late_rodata_alignment_from_content: - self.fail("found two .double directives with different start addresses mod 8. Make sure to provide explicit alignment padding.", real_line) - else: - self.fail(".double at address that is not 0 mod 8 (based on .late_rodata_alignment assumption). Make sure to provide explicit alignment padding.", real_line) - self.add_sized(8 * len(line.split(',')), real_line) - emitting_double = True - elif line.startswith('.space'): - self.add_sized(int(line.split()[1], 0), real_line) - elif line.startswith('.balign') or line.startswith('.align'): - align = int(line.split()[1]) - if align != 4: - self.fail("only .balign 4 is supported", real_line) - self.align4() - elif line.startswith('.asci'): - z = (line.startswith('.asciz') or line.startswith('.asciiz')) - self.add_sized(self.count_quoted_size(line, z, real_line, output_enc), real_line) - elif line.startswith('.byte'): - self.add_sized(len(line.split(',')), real_line) - elif line.startswith('.half'): - self.align2() - self.add_sized(2*len(line.split(',')), real_line) - elif line.startswith('.'): - # .macro, ... - self.fail("asm directive not supported", real_line) - else: - # Unfortunately, macros are hard to support for .rodata -- - # we don't know how how space they will expand to before - # running the assembler, but we need that information to - # construct the C code. So if we need that we'll either - # need to run the assembler twice (at least in some rare - # cases), or change how this program is invoked. - # Similarly, we can't currently deal with pseudo-instructions - # that expand to several real instructions. - if self.cur_section != '.text': - self.fail("instruction or macro call in non-.text section? not supported", real_line) - self.add_sized(4, real_line) - if self.cur_section == '.late_rodata': - if not changed_section: - if emitting_double: - self.late_rodata_asm_conts.append(".align 0") - self.late_rodata_asm_conts.append(real_line) - if emitting_double: - self.late_rodata_asm_conts.append(".align 2") - else: - self.asm_conts.append(real_line) - - def finish(self, state): - src = [''] * (self.num_lines + 1) - late_rodata_dummy_bytes = [] - jtbl_rodata_size = 0 - late_rodata_fn_output = [] - - num_instr = self.fn_section_sizes['.text'] // 4 - - if self.fn_section_sizes['.late_rodata'] > 0: - # Generate late rodata by emitting unique float constants. - # This requires 3 instructions for each 4 bytes of rodata. - # If we know alignment, we can use doubles, which give 3 - # instructions for 8 bytes of rodata. - size = self.fn_section_sizes['.late_rodata'] // 4 - skip_next = False - needs_double = (self.late_rodata_alignment != 0) - for i in range(size): - if skip_next: - skip_next = False - continue - # Jump tables give 9 instructions for >= 5 words of rodata, and should be - # emitted when: - # - -O2 or -O2 -g3 are used, which give the right codegen - # - we have emitted our first .float/.double (to ensure that we find the - # created rodata in the binary) - # - we have emitted our first .double, if any (to ensure alignment of doubles - # in shifted rodata sections) - # - we have at least 5 words of rodata left to emit (otherwise IDO does not - # generate a jump table) - # - we have at least 10 more instructions to go in this function (otherwise our - # function size computation will be wrong since the delay slot goes unused) - if (not needs_double and state.use_jtbl_for_rodata and i >= 1 and - size - i >= 5 and num_instr - len(late_rodata_fn_output) >= 10): - cases = " ".join("case {}:".format(case) for case in range(size - i)) - late_rodata_fn_output.append("switch (*(volatile int*)0) { " + cases + " ; }") - late_rodata_fn_output.extend([""] * 8) - jtbl_rodata_size = (size - i) * 4 - break - dummy_bytes = state.next_late_rodata_hex() - late_rodata_dummy_bytes.append(dummy_bytes) - if self.late_rodata_alignment == 4 * ((i + 1) % 2 + 1) and i + 1 < size: - dummy_bytes2 = state.next_late_rodata_hex() - late_rodata_dummy_bytes.append(dummy_bytes2) - fval, = struct.unpack('>d', dummy_bytes + dummy_bytes2) - late_rodata_fn_output.append('*(volatile double*)0 = {};'.format(fval)) - skip_next = True - needs_double = True - else: - fval, = struct.unpack('>f', dummy_bytes) - late_rodata_fn_output.append('*(volatile float*)0 = {}f;'.format(fval)) - late_rodata_fn_output.append('') - late_rodata_fn_output.append('') - - text_name = None - if self.fn_section_sizes['.text'] > 0 or late_rodata_fn_output: - text_name = state.make_name('func') - src[0] = 'void {}(void) {{'.format(text_name) - src[self.num_lines] = '}' - instr_count = self.fn_section_sizes['.text'] // 4 - if instr_count < state.min_instr_count: - self.fail("too short .text block") - tot_emitted = 0 - tot_skipped = 0 - fn_emitted = 0 - fn_skipped = 0 - rodata_stack = late_rodata_fn_output[::-1] - for (line, count) in self.fn_ins_inds: - for _ in range(count): - if (fn_emitted > MAX_FN_SIZE and instr_count - tot_emitted > state.min_instr_count and - (not rodata_stack or rodata_stack[-1])): - # Don't let functions become too large. When a function reaches 284 - # instructions, and -O2 -framepointer flags are passed, the IRIX - # compiler decides it is a great idea to start optimizing more. - fn_emitted = 0 - fn_skipped = 0 - src[line] += ' }} void {}(void) {{ '.format(state.make_name('large_func')) - if fn_skipped < state.skip_instr_count: - fn_skipped += 1 - tot_skipped += 1 - elif rodata_stack: - src[line] += rodata_stack.pop() - else: - src[line] += '*(volatile int*)0 = 0;' - tot_emitted += 1 - fn_emitted += 1 - if rodata_stack: - size = len(late_rodata_fn_output) // 3 - available = instr_count - tot_skipped - self.fail( - "late rodata to text ratio is too high: {} / {} must be <= 1/3\n" - "add .late_rodata_alignment (4|8) to the .late_rodata " - "block to double the allowed ratio." - .format(size, available)) - - rodata_name = None - if self.fn_section_sizes['.rodata'] > 0: - rodata_name = state.make_name('rodata') - src[self.num_lines] += ' const char {}[{}] = {{1}};'.format(rodata_name, self.fn_section_sizes['.rodata']) - - data_name = None - if self.fn_section_sizes['.data'] > 0: - data_name = state.make_name('data') - src[self.num_lines] += ' char {}[{}] = {{1}};'.format(data_name, self.fn_section_sizes['.data']) - - bss_name = None - if self.fn_section_sizes['.bss'] > 0: - bss_name = state.make_name('bss') - src[self.num_lines] += ' char {}[{}];'.format(bss_name, self.fn_section_sizes['.bss']) - - fn = Function( - text_glabels=self.text_glabels, - asm_conts=self.asm_conts, - late_rodata_dummy_bytes=late_rodata_dummy_bytes, - jtbl_rodata_size=jtbl_rodata_size, - late_rodata_asm_conts=self.late_rodata_asm_conts, - fn_desc=self.fn_desc, - data={ - '.text': (text_name, self.fn_section_sizes['.text']), - '.data': (data_name, self.fn_section_sizes['.data']), - '.rodata': (rodata_name, self.fn_section_sizes['.rodata']), - '.bss': (bss_name, self.fn_section_sizes['.bss']), - }) - return src, fn - -cutscene_data_regexpr = re.compile(r"CutsceneData (.|\n)*\[\] = {") -float_regexpr = re.compile(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f") - -def repl_float_hex(m): - return str(struct.unpack(">I", struct.pack(">f", float(m.group(0).strip().rstrip("f"))))[0]) - -def parse_source(f, opt, framepointer, input_enc, output_enc, print_source=None): - if opt in ['O2', 'O1']: - if framepointer: - min_instr_count = 6 - skip_instr_count = 5 - else: - min_instr_count = 2 - skip_instr_count = 1 - elif opt == 'g': - if framepointer: - min_instr_count = 7 - skip_instr_count = 7 - else: - min_instr_count = 4 - skip_instr_count = 4 - else: - if opt != 'g3': - raise Failure("must pass one of -g, -O1, -O2, -O2 -g3") - if framepointer: - min_instr_count = 4 - skip_instr_count = 4 - else: - min_instr_count = 2 - skip_instr_count = 2 - - use_jtbl_for_rodata = False - if opt in ['O2', 'g3'] and not framepointer: - use_jtbl_for_rodata = True - - state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata) - - global_asm = None - asm_functions = [] - output_lines = [] - - is_cutscene_data = False - - for line_no, raw_line in enumerate(f, 1): - raw_line = raw_line.rstrip() - line = raw_line.lstrip() - - # Print exactly one output line per source line, to make compiler - # errors have correct line numbers. These will be overridden with - # reasonable content further down. - output_lines.append('') - - if global_asm is not None: - if line.startswith(')'): - src, fn = global_asm.finish(state) - for i, line2 in enumerate(src): - output_lines[start_index + i] = line2 - asm_functions.append(fn) - global_asm = None - else: - global_asm.process_line(raw_line, output_enc) - else: - if line in ['GLOBAL_ASM(', '#pragma GLOBAL_ASM(']: - global_asm = GlobalAsmBlock("GLOBAL_ASM block at line " + str(line_no)) - start_index = len(output_lines) - elif ((line.startswith('GLOBAL_ASM("') or line.startswith('#pragma GLOBAL_ASM("')) - and line.endswith('")')): - fname = line[line.index('(') + 2 : -2] - global_asm = GlobalAsmBlock(fname) - with open(fname, encoding=input_enc) as f: - for line2 in f: - global_asm.process_line(line2.rstrip(), output_enc) - src, fn = global_asm.finish(state) - output_lines[-1] = ''.join(src) - asm_functions.append(fn) - global_asm = None - elif line.startswith('#include "') and line.endswith('" EARLY'): - # C includes qualified with EARLY (i.e. #include "file.c" EARLY) will be - # processed recursively when encountered - fpath = os.path.dirname(f.name) - fname = line[line.index(' ') + 2 : -7] - include_src = StringIO() - with open(fpath + os.path.sep + fname, encoding=input_enc) as include_file: - parse_source(include_file, opt, framepointer, input_enc, output_enc, include_src) - output_lines[-1] = include_src.getvalue() - include_src.write('#line ' + str(line_no) + '\n') - include_src.close() - else: - # This is a hack to replace all floating-point numbers in an array of a particular type - # (in this case CutsceneData) with their corresponding IEEE-754 hexadecimal representation - if cutscene_data_regexpr.search(line) is not None: - is_cutscene_data = True - elif line.endswith("};"): - is_cutscene_data = False - if is_cutscene_data: - raw_line = re.sub(float_regexpr, repl_float_hex, raw_line) - output_lines[-1] = raw_line - - if print_source: - if isinstance(print_source, StringIO): - for line in output_lines: - print_source.write(line + '\n') - else: - for line in output_lines: - print_source.write(line.encode(output_enc) + b'\n') - print_source.flush() - if print_source != sys.stdout.buffer: - print_source.close() - - return asm_functions - -def fixup_objfile(objfile_name, functions, asm_prelude, assembler, output_enc): - SECTIONS = ['.data', '.text', '.rodata', '.bss'] - - with open(objfile_name, 'rb') as f: - objfile = ElfFile(f.read()) - - prev_locs = { - '.text': 0, - '.data': 0, - '.rodata': 0, - '.bss': 0, - } - to_copy = { - '.text': [], - '.data': [], - '.rodata': [], - '.bss': [], - } - asm = [] - all_late_rodata_dummy_bytes = [] - all_jtbl_rodata_size = [] - late_rodata_asm = [] - late_rodata_source_name_start = None - late_rodata_source_name_end = None - - # Generate an assembly file with all the assembly we need to fill in. For - # simplicity we pad with nops/.space so that addresses match exactly, so we - # don't have to fix up relocations/symbol references. - all_text_glabels = set() - for function in functions: - ifdefed = False - for sectype, (temp_name, size) in function.data.items(): - if temp_name is None: - continue - assert size > 0 - loc = objfile.symtab.find_symbol(temp_name) - if loc is None: - ifdefed = True - break - loc = loc[1] - prev_loc = prev_locs[sectype] - if loc < prev_loc: - raise Failure("Wrongly computed size for section {} (diff {}). This is an asm-processor bug!".format(sectype, prev_loc- loc)) - if loc != prev_loc: - asm.append('.section ' + sectype) - if sectype == '.text': - for i in range((loc - prev_loc) // 4): - asm.append('nop') - else: - asm.append('.space {}'.format(loc - prev_loc)) - to_copy[sectype].append((loc, size, temp_name, function.fn_desc)) - prev_locs[sectype] = loc + size - if not ifdefed: - all_text_glabels.update(function.text_glabels) - all_late_rodata_dummy_bytes.append(function.late_rodata_dummy_bytes) - all_jtbl_rodata_size.append(function.jtbl_rodata_size) - late_rodata_asm.append(function.late_rodata_asm_conts) - for sectype, (temp_name, size) in function.data.items(): - if temp_name is not None: - asm.append('.section ' + sectype) - asm.append('glabel ' + temp_name + '_asm_start') - asm.append('.text') - for line in function.asm_conts: - asm.append(line) - for sectype, (temp_name, size) in function.data.items(): - if temp_name is not None: - asm.append('.section ' + sectype) - asm.append('glabel ' + temp_name + '_asm_end') - if any(late_rodata_asm): - late_rodata_source_name_start = '_asmpp_late_rodata_start' - late_rodata_source_name_end = '_asmpp_late_rodata_end' - asm.append('.rdata') - asm.append('glabel {}'.format(late_rodata_source_name_start)) - for conts in late_rodata_asm: - asm.extend(conts) - asm.append('glabel {}'.format(late_rodata_source_name_end)) - - o_file = tempfile.NamedTemporaryFile(prefix='asm-processor', suffix='.o', delete=False) - o_name = o_file.name - o_file.close() - s_file = tempfile.NamedTemporaryFile(prefix='asm-processor', suffix='.s', delete=False) - s_name = s_file.name - try: - s_file.write(asm_prelude + b'\n') - for line in asm: - s_file.write(line.encode(output_enc) + b'\n') - s_file.close() - ret = os.system(assembler + " " + s_name + " -o " + o_name) - if ret != 0: - raise Failure("failed to assemble") - with open(o_name, 'rb') as f: - asm_objfile = ElfFile(f.read()) - - # Remove some clutter from objdump output - objfile.drop_irrelevant_sections() - - # Unify reginfo sections - target_reginfo = objfile.find_section('.reginfo') - source_reginfo_data = list(asm_objfile.find_section('.reginfo').data) - data = list(target_reginfo.data) - for i in range(20): - data[i] |= source_reginfo_data[i] - target_reginfo.data = bytes(data) - - # Move over section contents - modified_text_positions = set() - jtbl_rodata_positions = set() - last_rodata_pos = 0 - for sectype in SECTIONS: - if not to_copy[sectype]: - continue - source = asm_objfile.find_section(sectype) - assert source is not None, "didn't find source section: " + sectype - for (pos, count, temp_name, fn_desc) in to_copy[sectype]: - loc1 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_start', source) - loc2 = asm_objfile.symtab.find_symbol_in_section(temp_name + '_asm_end', source) - assert loc1 == pos, "assembly and C files don't line up for section " + sectype + ", " + fn_desc - if loc2 - loc1 != count: - raise Failure("incorrectly computed size for section " + sectype + ", " + fn_desc + ". If using .double, make sure to provide explicit alignment padding.") - if sectype == '.bss': - continue - target = objfile.find_section(sectype) - assert target is not None, "missing target section of type " + sectype - data = list(target.data) - for (pos, count, _, _) in to_copy[sectype]: - data[pos:pos + count] = source.data[pos:pos + count] - if sectype == '.text': - assert count % 4 == 0 - assert pos % 4 == 0 - for i in range(count // 4): - modified_text_positions.add(pos + 4 * i) - elif sectype == '.rodata': - last_rodata_pos = pos + count - target.data = bytes(data) - - # Move over late rodata. This is heuristic, sadly, since I can't think - # of another way of doing it. - moved_late_rodata = {} - if any(all_late_rodata_dummy_bytes) or any(all_jtbl_rodata_size): - source = asm_objfile.find_section('.rodata') - target = objfile.find_section('.rodata') - source_pos = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_start, source) - source_end = asm_objfile.symtab.find_symbol_in_section(late_rodata_source_name_end, source) - if source_end - source_pos != sum(map(len, all_late_rodata_dummy_bytes)) * 4 + sum(all_jtbl_rodata_size): - raise Failure("computed wrong size of .late_rodata") - new_data = list(target.data) - for dummy_bytes_list, jtbl_rodata_size in zip(all_late_rodata_dummy_bytes, all_jtbl_rodata_size): - for index, dummy_bytes in enumerate(dummy_bytes_list): - pos = target.data.index(dummy_bytes, last_rodata_pos) - # This check is nice, but makes time complexity worse for large files: - if SLOW_CHECKS and target.data.find(dummy_bytes, pos + 4) != -1: - raise Failure("multiple occurrences of late_rodata hex magic. Change asm-processor to use something better than 0xE0123456!") - if index == 0 and len(dummy_bytes_list) > 1 and target.data[pos+4:pos+8] == b'\0\0\0\0': - # Ugly hack to handle double alignment for non-matching builds. - # We were told by .late_rodata_alignment (or deduced from a .double) - # that a function's late_rodata started out 4 (mod 8), and emitted - # a float and then a double. But it was actually 0 (mod 8), so our - # double was moved by 4 bytes. To make them adjacent to keep jump - # tables correct, move the float by 4 bytes as well. - new_data[pos:pos+4] = b'\0\0\0\0' - pos += 4 - new_data[pos:pos+4] = source.data[source_pos:source_pos+4] - moved_late_rodata[source_pos] = pos - last_rodata_pos = pos + 4 - source_pos += 4 - if jtbl_rodata_size > 0: - assert dummy_bytes_list, "should always have dummy bytes before jtbl data" - pos = last_rodata_pos - new_data[pos : pos + jtbl_rodata_size] = \ - source.data[source_pos : source_pos + jtbl_rodata_size] - for i in range(0, jtbl_rodata_size, 4): - moved_late_rodata[source_pos + i] = pos + i - jtbl_rodata_positions.add(pos + i) - last_rodata_pos += jtbl_rodata_size - source_pos += jtbl_rodata_size - target.data = bytes(new_data) - - # Merge strtab data. - strtab_adj = len(objfile.symtab.strtab.data) - objfile.symtab.strtab.data += asm_objfile.symtab.strtab.data - - # Find relocated symbols - relocated_symbols = set() - for sectype in SECTIONS: - for obj in [asm_objfile, objfile]: - sec = obj.find_section(sectype) - if sec is None: - continue - for reltab in sec.relocated_by: - for rel in reltab.relocations: - relocated_symbols.add(obj.symtab.symbol_entries[rel.sym_index]) - - # Move over symbols, deleting the temporary function labels. - # Sometimes this naive procedure results in duplicate symbols, or UNDEF - # symbols that are also defined the same .o file. Hopefully that's fine. - # Skip over local symbols that aren't used relocated against, to avoid - # conflicts. - new_local_syms = [s for s in objfile.symtab.local_symbols() if not is_temp_name(s.name)] - new_global_syms = [s for s in objfile.symtab.global_symbols() if not is_temp_name(s.name)] - for i, s in enumerate(asm_objfile.symtab.symbol_entries): - is_local = (i < asm_objfile.symtab.sh_info) - if is_local and s not in relocated_symbols: - continue - if is_temp_name(s.name): - continue - if s.st_shndx not in [SHN_UNDEF, SHN_ABS]: - section_name = asm_objfile.sections[s.st_shndx].name - if section_name not in SECTIONS: - raise Failure("generated assembly .o must only have symbols for .text, .data, .rodata, ABS and UNDEF, but found " + section_name) - s.st_shndx = objfile.find_section(section_name).index - # glabel's aren't marked as functions, making objdump output confusing. Fix that. - if s.name in all_text_glabels: - s.type = STT_FUNC - if objfile.sections[s.st_shndx].name == '.rodata' and s.st_value in moved_late_rodata: - s.st_value = moved_late_rodata[s.st_value] - s.st_name += strtab_adj - if is_local: - new_local_syms.append(s) - else: - new_global_syms.append(s) - new_syms = new_local_syms + new_global_syms - for i, s in enumerate(new_syms): - s.new_index = i - objfile.symtab.data = b''.join(s.to_bin() for s in new_syms) - objfile.symtab.sh_info = len(new_local_syms) - - # Move over relocations - for sectype in SECTIONS: - source = asm_objfile.find_section(sectype) - target = objfile.find_section(sectype) - - if target is not None: - # fixup relocation symbol indices, since we butchered them above - for reltab in target.relocated_by: - nrels = [] - for rel in reltab.relocations: - if (sectype == '.text' and rel.r_offset in modified_text_positions or - sectype == '.rodata' and rel.r_offset in jtbl_rodata_positions): - # don't include relocations for late_rodata dummy code - continue - # hopefully we don't have relocations for local or - # temporary symbols, so new_index exists - rel.sym_index = objfile.symtab.symbol_entries[rel.sym_index].new_index - nrels.append(rel) - reltab.relocations = nrels - reltab.data = b''.join(rel.to_bin() for rel in nrels) - - if not source: - continue - - target_reltab = objfile.find_section('.rel' + sectype) - target_reltaba = objfile.find_section('.rela' + sectype) - for reltab in source.relocated_by: - for rel in reltab.relocations: - rel.sym_index = asm_objfile.symtab.symbol_entries[rel.sym_index].new_index - if sectype == '.rodata' and rel.r_offset in moved_late_rodata: - rel.r_offset = moved_late_rodata[rel.r_offset] - new_data = b''.join(rel.to_bin() for rel in reltab.relocations) - if reltab.sh_type == SHT_REL: - if not target_reltab: - target_reltab = objfile.add_section('.rel' + sectype, - sh_type=SHT_REL, sh_flags=0, - sh_link=objfile.symtab.index, sh_info=target.index, - sh_addralign=4, sh_entsize=8, data=b'') - target_reltab.data += new_data - else: - if not target_reltaba: - target_reltaba = objfile.add_section('.rela' + sectype, - sh_type=SHT_RELA, sh_flags=0, - sh_link=objfile.symtab.index, sh_info=target.index, - sh_addralign=4, sh_entsize=12, data=b'') - target_reltaba.data += new_data - - objfile.write(objfile_name) - finally: - s_file.close() - os.remove(s_name) - try: - os.remove(o_name) - except: - pass - -def run_wrapped(argv, outfile, functions): - parser = argparse.ArgumentParser(description="Pre-process .c files and post-process .o files to enable embedding assembly into C.") - parser.add_argument('filename', help="path to .c code") - parser.add_argument('--post-process', dest='objfile', help="path to .o file to post-process") - parser.add_argument('--assembler', dest='assembler', help="assembler command (e.g. \"mips-linux-gnu-as -march=vr4300 -mabi=32\")") - parser.add_argument('--asm-prelude', dest='asm_prelude', help="path to a file containing a prelude to the assembly file (with .set and .macro directives, e.g.)") - parser.add_argument('--input-enc', default='latin1', help="Input encoding (default: latin1)") - parser.add_argument('--output-enc', default='latin1', help="Output encoding (default: latin1)") - parser.add_argument('-framepointer', dest='framepointer', action='store_true') - parser.add_argument('-g3', dest='g3', action='store_true') - group = parser.add_mutually_exclusive_group(required=True) - group.add_argument('-O1', dest='opt', action='store_const', const='O1') - group.add_argument('-O2', dest='opt', action='store_const', const='O2') - group.add_argument('-g', dest='opt', action='store_const', const='g') - args = parser.parse_args(argv) - opt = args.opt - if args.g3: - if opt != 'O2': - raise Failure("-g3 is only supported together with -O2") - opt = 'g3' - - if args.objfile is None: - with open(args.filename, encoding=args.input_enc) as f: - return parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc, print_source=outfile) - else: - if args.assembler is None: - raise Failure("must pass assembler command") - if functions is None: - with open(args.filename, encoding=args.input_enc) as f: - functions = parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc) - if not functions: - return - asm_prelude = b'' - if args.asm_prelude: - with open(args.asm_prelude, 'rb') as f: - asm_prelude = f.read() - fixup_objfile(args.objfile, functions, asm_prelude, args.assembler, args.output_enc) - -def run(argv, outfile=sys.stdout.buffer, functions=None): - try: - return run_wrapped(argv, outfile, functions) - except Failure as e: - print("Error:", e, file=sys.stderr) - sys.exit(1) - -if __name__ == "__main__": - run(sys.argv[1:]) diff --git a/tools/asmpreproc/compile.sh b/tools/asmpreproc/compile.sh deleted file mode 100644 index ac4eca9..0000000 --- a/tools/asmpreproc/compile.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -set -e -INPUT="$1" -OUTPUT="${INPUT%.c}.o" -INCLUDE="-I include -I include/libultra" - -if [ "$IDO_RECOMP" == "YES" ] -then - CC="$IRIX_ROOT/cc" -else - CC="$QEMU_IRIX -silent -L $IRIX_ROOT $IRIX_ROOT/usr/bin/cc" -fi - -CFLAGS="-Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -fullwarn -wlint -woff 819,820,852,821 -signed $INCLUDE -mips2 $LCDEFS" -AS="mips-linux-gnu-as" -ASFLAGS="-march=vr4300 -mabi=32 $INCLUDE" - -python3 tools/asmpreproc/asm-processor.py -O2 "$INPUT" | $CC -c $CFLAGS tools/asmpreproc/include-stdin.c -o "$OUTPUT" -O2 -python3 tools/asmpreproc/asm-processor.py -O2 "$INPUT" --post-process "$OUTPUT" --assembler "$AS $ASFLAGS" --asm-prelude tools/asmpreproc/prelude.s - -mv $OUTPUT ${OUTPUT/src/build} diff --git a/tools/asmpreproc/macros.inc b/tools/asmpreproc/macros.inc deleted file mode 100644 index c97fd81..0000000 --- a/tools/asmpreproc/macros.inc +++ /dev/null @@ -1,7 +0,0 @@ -# Assembly Macros - -.macro glabel label - .global \label - \label: -.endm - diff --git a/tools/asmpreproc/prelude.s b/tools/asmpreproc/prelude.s deleted file mode 100644 index 0c111a2..0000000 --- a/tools/asmpreproc/prelude.s +++ /dev/null @@ -1,5 +0,0 @@ -.set noat -.set noreorder -.set gp=64 -.include "macros.inc" - diff --git a/tools/cmdbuilder.c b/tools/cmdbuilder.c index b9e734c..ce07d9a 100644 --- a/tools/cmdbuilder.c +++ b/tools/cmdbuilder.c @@ -11,102 +11,65 @@ #define INCLUDE CAT(CAT(??,=),include) /*SPLIT/FORMAT MACROS*/ -#define BBYTE(PARAM) PARAM -#define BDBYTE(PARAM) CharArrayFrom16(PARAM) -#define BTBYTE(PARAM) CharArrayFrom24(PARAM) -#define BQBYTE(PARAM) CharArrayFrom32(PARAM) -#define HEAD_BYTE(PARAM) PARAM -#define HEAD_DBYTE(PARAM) PARAM -#define HEAD_TBYTE(PARAM) PARAM -#define HEAD_QBYTE(PARAM) PARAM +#define BS_BYTE(PARAM) PARAM +#define BS_SBYTE(PARAM) PARAM +#define BS_DBYTE(PARAM) CharArrayFrom16(PARAM) +#define BS_TBYTE(PARAM) CharArrayFrom24(PARAM) +#define BS_QBYTE(PARAM) CharArrayFrom32(PARAM) +#define HEAD_BYTE(PARAM) PARAM +#define HEAD_SBYTE(PARAM) PARAM +#define HEAD_DBYTE(PARAM) PARAM +#define HEAD_TBYTE(PARAM) PARAM +#define HEAD_QBYTE(PARAM) PARAM /*SIZE MACROS*/ #define COUNT_BYTE(PARAM) +1 +#define COUNT_SBYTE(PARAM) +1 #define COUNT_DBYTE(PARAM) +2 #define COUNT_TBYTE(PARAM) +3 #define COUNT_QBYTE(PARAM) +4 +#define STRUCT_BYTE(PARAM) u8 PARAM +#define STRUCT_SBYTE(PARAM) s8 PARAM +#define STRUCT_DBYTE(PARAM) s16 PARAM +#define STRUCT_TBYTE(PARAM) s8 PARAM[3] +#define STRUCT_QBYTE(PARAM) s32 PARAM + /*SPLIT/FORMAT MACROS*/ /*HACK: Use of Multiline comments for formatting avoids extra spaces in output. Moving Splits to multiple lines for ease of reading Fixed typo on 6 params Use Cascade Macros to save repitition */ -#define PARAMSPLIT_0() -#define PARAMSPLIT_1(PARAM1) \ /* -*/ B ## PARAM1, -#define PARAMSPLIT_2(PARAM1, PARAM2)\ -/* */PARAMSPLIT_1(PARAM1)\/* -*/ B ## PARAM2, -#define PARAMSPLIT_3(PARAM1, PARAM2, PARAM3)\ -/* */PARAMSPLIT_2(PARAM1, PARAM2)\/* -*/ B ## PARAM3, -#define PARAMSPLIT_4(PARAM1, PARAM2, PARAM3, PARAM4)\ -/* */PARAMSPLIT_3(PARAM1, PARAM2, PARAM3)\/* -*/ B ## PARAM4, -#define PARAMSPLIT_5(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5)\ -/* */PARAMSPLIT_4(PARAM1, PARAM2, PARAM3, PARAM4)\/* -*/ B ## PARAM5, -#define PARAMSPLIT_6(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6)\ -/* */PARAMSPLIT_5(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5)\/* -*/ B ## PARAM6, -#define PARAMSPLIT_7(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7)\ -/* */PARAMSPLIT_6(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6)\/* -*/ B ## PARAM7, -#define PARAMSPLIT_8(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7, PARAM8)\ -/* */PARAMSPLIT_7(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7)\/* -*/ B ## PARAM8, +#define DELIM_HEAD_(A) EXPAND(_IF_VA_##A)(COMMA()) +#define DELIM_COUNT_(A) +#define DELIM_BS_(A) , +#define DELIM_STRUCT_(A) ; -/*HEAD MACROS FOR PARAMETER LISTING*/ -#define HEAD_PARAMSPLIT_0() -#define HEAD_PARAMSPLIT_1(PARAM1) \ -/* */HEAD_ ## PARAM1 -#define HEAD_PARAMSPLIT_2(PARAM1, PARAM2)\ -/* */HEAD_PARAMSPLIT_1(PARAM1),\ -/* */HEAD_ ## PARAM2 -#define HEAD_PARAMSPLIT_3(PARAM1, PARAM2, PARAM3)\ -/* */HEAD_PARAMSPLIT_2(PARAM1, PARAM2),\ -/* */HEAD_ ## PARAM3 -#define HEAD_PARAMSPLIT_4(PARAM1, PARAM2, PARAM3, PARAM4)\ -/* */HEAD_PARAMSPLIT_3(PARAM1, PARAM2, PARAM3),\ -/* */HEAD_ ## PARAM4 -#define HEAD_PARAMSPLIT_5(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5)\ -/* */HEAD_PARAMSPLIT_4(PARAM1, PARAM2, PARAM3, PARAM4),\ -/* */HEAD_ ## PARAM5 -#define HEAD_PARAMSPLIT_6(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6)\ -/* */HEAD_PARAMSPLIT_5(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5),\ -/* */HEAD_ ## PARAM6 -#define HEAD_PARAMSPLIT_7(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7)\ -/* */HEAD_PARAMSPLIT_6(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6),\ -/* */HEAD_ ## PARAM7 -#define HEAD_PARAMSPLIT_8(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7, PARAM8)\ -/* */HEAD_PARAMSPLIT_7(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7),\ -/* */HEAD_ ## PARAM8 -/*COUNT MACROS FOR COMMAND SIZE*/ -#define COUNT_PARAMSPLIT_0() -#define COUNT_PARAMSPLIT_1(PARAM1) \ -/* */COUNT_ ## PARAM1 -#define COUNT_PARAMSPLIT_2(PARAM1, PARAM2)\ -/* */COUNT_PARAMSPLIT_1(PARAM1)\ -/* */COUNT_ ## PARAM2 -#define COUNT_PARAMSPLIT_3(PARAM1, PARAM2, PARAM3)\ -/* */COUNT_PARAMSPLIT_2(PARAM1, PARAM2)\ -/* */COUNT_ ## PARAM3 -#define COUNT_PARAMSPLIT_4(PARAM1, PARAM2, PARAM3, PARAM4)\ -/* */COUNT_PARAMSPLIT_3(PARAM1, PARAM2, PARAM3)\ -/* */COUNT_ ## PARAM4 -#define COUNT_PARAMSPLIT_5(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5)\ -/* */COUNT_PARAMSPLIT_4(PARAM1, PARAM2, PARAM3, PARAM4)\ -/* */COUNT_ ## PARAM5 -#define COUNT_PARAMSPLIT_6(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6)\ -/* */COUNT_PARAMSPLIT_5(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5)\ -/* */COUNT_ ## PARAM6 -#define COUNT_PARAMSPLIT_7(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7)\ -/* */COUNT_PARAMSPLIT_6(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6)\ -/* */COUNT_ ## PARAM7 -#define COUNT_PARAMSPLIT_8(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7, PARAM8)\ -/* */COUNT_PARAMSPLIT_7(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7)\ -/* */COUNT_ ## PARAM8 +#define PARAMSPLIT_0(TYPE) +#define PARAMSPLIT_1(PARAM1, TYPE)\ +/* */ TYPE##PARAM1 DELIM_##TYPE(0) +#define PARAMSPLIT_2(PARAM1, PARAM2, TYPE)\ +/* */TYPE ## PARAM1 DELIM_##TYPE(1)\ +/* */PARAMSPLIT_1(PARAM2, TYPE) +#define PARAMSPLIT_3(PARAM1, PARAM2, PARAM3, TYPE)\ +/* */TYPE ## PARAM1 DELIM_##TYPE(1) \ +/* */PARAMSPLIT_2(PARAM2, PARAM3, TYPE) +#define PARAMSPLIT_4(PARAM1, PARAM2, PARAM3, PARAM4, TYPE)\ +/* */TYPE ## PARAM1 DELIM_##TYPE(1)\ +/* */PARAMSPLIT_3(PARAM2, PARAM3, PARAM4, TYPE) +#define PARAMSPLIT_5(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, TYPE)\ +/* */TYPE ## PARAM1 DELIM_##TYPE(1) \ +/* */PARAMSPLIT_4(PARAM2, PARAM3, PARAM4, PARAM5, TYPE) +#define PARAMSPLIT_6(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, TYPE)\ +/* */TYPE ## PARAM1 DELIM_##TYPE(1)\ +/* */PARAMSPLIT_5(PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, TYPE) +#define PARAMSPLIT_7(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7, TYPE)\ +/* */TYPE ## PARAM1 DELIM_##TYPE(1)\ +/* */PARAMSPLIT_6(PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7, TYPE) +#define PARAMSPLIT_8(PARAM1, PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7, PARAM8, TYPE)\ +/* */TYPE ## PARAM1 DELIM_##TYPE(1)\ +/* */PARAMSPLIT_7(PARAM2, PARAM3, PARAM4, PARAM5, PARAM6, PARAM7, PARAM8, TYPE) /*TEMPLATE COMMAND MACRO*/ @@ -145,19 +108,21 @@ */\n \ //Alias/Polymorph\n EVAL16(Poly(A,C,D)) #endif - -#define _AI_CMD(CODE) \n/* + +#define _AI_CMD(CODE) \n/* */DESCRIPTION /* - */DEFINE CAT(CMDNAME,(CAT(CAT(HEAD_PARAMSPLIT_, COUNTPARAMS((PARAMS))), (PARAMS))))\/* + */DEFINE CMDNAME (CAT(CAT(PARAMSPLIT_ , COUNTPARAMS((PARAMS))), (PARAMS, HEAD_)))\/* */ CAT(AI_ , CMDNAME), \ -/* */CAT(CAT(PARAMSPLIT_ , COUNTPARAMS((PARAMS))), (PARAMS))\n/* - */DEFINE CAT(CAT(AI_, CMDNAME), _LENGTH) (AICMDSIZE CAT(CAT(COUNT_PARAMSPLIT_, COUNTPARAMS((PARAMS))), (PARAMS)))/* +/* */CAT(CAT(PARAMSPLIT_, COUNTPARAMS((PARAMS))), (PARAMS, BS_))\n /* + */DEFINE CAT(CAT(AI_, CMDNAME), _LENGTH) (AICMDSIZE CAT(CAT(PARAMSPLIT_, COUNTPARAMS((PARAMS))), (PARAMS, COUNT_)))\n/* + */typedef struct CAT(Ai_, CMDNAME) {u8 cmd; CAT(CAT(PARAMSPLIT_, COUNTPARAMS((PARAMS))),(PARAMS, STRUCT_))}CAT(Ai_, CMDNAME);/* */\n\n #define _AI_DEBUG() \n/* */DESCRIPTION /* */DEFINE CAT(CMDNAME,(STRING))\/* - */ CAT(AI_,CMDNAME), /* + */ CAT(AI_,CMDNAME),/* + */typedef struct CAT(Ai_, CMDNAME) {u8 cmd; u8 val[];}CAT(Ai_, CMDNAME);/* */\n\n #if 0 diff --git a/tools/data_compress.sh b/tools/data_compress.sh index 1d66927..eb899a9 100755 --- a/tools/data_compress.sh +++ b/tools/data_compress.sh @@ -1,5 +1,5 @@ #!/bin/bash -MAPFILE="./build/ge007."$2".map" +MAPFILE="./build/"$2"/ge007."$2".map" #this script is a hacky mess that can most definately be improved #fixme as I will fail if vaddr of data gets moved!!! DATASEG_START=$(printf "%d\n" 0x$(grep ${MAPFILE} -e '__csegtempPos =' | cut -d "x" -f3)) diff --git a/tools/diff.py b/tools/diff.py new file mode 100644 index 0000000..09610f8 --- /dev/null +++ b/tools/diff.py @@ -0,0 +1,4102 @@ +#!/usr/bin/env python3 +# PYTHON_ARGCOMPLETE_OK +import argparse +import enum +import sys +from typing import ( + Any, + Callable, + Dict, + Iterator, + List, + Sequence, + Match, + NoReturn, + Optional, + Pattern, + Set, + Tuple, + Type, + Union, +) + + +def fail(msg: str) -> NoReturn: + print(msg, file=sys.stderr) + sys.exit(1) + + +def static_assert_unreachable(x: NoReturn) -> NoReturn: + raise Exception("Unreachable! " + repr(x)) + + +# The encoding to use for reading the map file to text. +# It is expected the map file will be ASCII-only or mostly, +# which UTF-8 is compatible with. +MAPFILE_ENCODING = "UTF-8" +# In case the map file isn't UTF-8 and some bytes can't be decoded as UTF-8, +# don't error and subtitute with U+FFFD. +# (cf the Python documentation on `codecs.replace_errors`) +MAPFILE_ENCODING_ERROR_HANDLER = "replace" + + +class DiffMode(enum.Enum): + SINGLE = "single" + SINGLE_BASE = "single_base" + NORMAL = "normal" + THREEWAY_PREV = "3prev" + THREEWAY_BASE = "3base" + + +# ==== COMMAND-LINE ==== + +if __name__ == "__main__": + # Prefer to use diff_settings.py from the current working directory + sys.path.insert(0, ".") + try: + import diff_settings + except ModuleNotFoundError: + fail("Unable to find diff_settings.py in the same directory.") + sys.path.pop(0) + + try: + import argcomplete + except ModuleNotFoundError: + argcomplete = None # type: ignore + + parser = argparse.ArgumentParser( + description="Diff MIPS, PPC, AArch64, ARM32, SH2, SH4, or m68k assembly." + ) + + start_argument = parser.add_argument( + "start", + help="Function name or address to start diffing from.", + ) + + if argcomplete: + + def complete_symbol( + prefix: str, parsed_args: argparse.Namespace, **kwargs: object + ) -> List[str]: + if not prefix or prefix.startswith("-"): + # skip reading the map file, which would + # result in a lot of useless completions + return [] + config: Dict[str, Any] = {} + diff_settings.apply(config, parsed_args) # type: ignore + mapfile = config.get("mapfile") + if not mapfile: + return [] + completes = [] + encoding = MAPFILE_ENCODING + # We assume the encoding is self-synchronizing, + # meaning that for example finding bytes corresponding to the space + # character, is equivalent to finding a space character. + # This is true for ASCII and UTF-8 data, for example. + # This allows processing the map file as bytes instead of entirely + # processing it as decoded text, which is slow. + space = " ".encode(encoding) + line_return = "\n".encode(encoding) + with open(mapfile, "rb") as f: + import mmap + + data = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) + # assume symbols are prefixed by a space character + search = f" {prefix}".encode(encoding) + pos = data.find(search) + while pos != -1: + # skip the space character in the search string + pos += len(space) + # assume symbols are suffixed by either a space + # character or a (unix-style) line return + spacePos = data.find(space, pos) + lineReturnPos = data.find(line_return, pos) + if lineReturnPos == -1: + endPos = spacePos + elif spacePos == -1: + endPos = lineReturnPos + else: + endPos = min(spacePos, lineReturnPos) + if endPos == -1: + match = data[pos:] + pos = -1 + else: + match = data[pos:endPos] + pos = data.find(search, endPos) + completes.append(match.decode(encoding)) + return completes + + setattr(start_argument, "completer", complete_symbol) + + parser.add_argument( + "end", + nargs="?", + help="Address to end diff at.", + ) + parser.add_argument( + "-o", + dest="diff_obj", + action="store_true", + help="""Diff .o files rather than a whole binary. This makes it possible to + see symbol names. (Recommended)""", + ) + parser.add_argument( + "-f", + "--file", + dest="file", + type=str, + help="""File path for a file being diffed. When used the map + file isn't searched for the function given. Useful for dynamically + linked libraries.""", + ) + parser.add_argument( + "-e", + "--elf", + dest="diff_elf_symbol", + metavar="SYMBOL", + help="""Diff a given function in two ELFs, one being stripped and the other + one non-stripped. Requires objdump from binutils 2.33+.""", + ) + parser.add_argument( + "-c", + "--source", + dest="show_source", + action="store_true", + help="Show source code (if possible). Only works with -o or -e.", + ) + parser.add_argument( + "-C", + "--source-old-binutils", + dest="source_old_binutils", + action="store_true", + help="""Tweak --source handling to make it work with binutils < 2.33. + Implies --source.""", + ) + parser.add_argument( + "-j", + "--section", + dest="diff_section", + default=".text", + metavar="SECTION", + help="Diff restricted to a given output section.", + ) + parser.add_argument( + "-L", + "--line-numbers", + dest="show_line_numbers", + action="store_const", + const=True, + help="""Show source line numbers in output, when available. May be enabled by + default depending on diff_settings.py.""", + ) + parser.add_argument( + "--no-line-numbers", + dest="show_line_numbers", + action="store_const", + const=False, + help="Hide source line numbers in output.", + ) + parser.add_argument( + "--inlines", + dest="inlines", + action="store_true", + help="Show inline function calls (if possible). Only works with -o or -e.", + ) + parser.add_argument( + "--base-asm", + dest="base_asm", + metavar="FILE", + help="Read assembly from given file instead of configured base img.", + ) + parser.add_argument( + "--write-asm", + dest="write_asm", + metavar="FILE", + help="Write the current assembly output to file, e.g. for use with --base-asm.", + ) + parser.add_argument( + "-m", + "--make", + dest="make", + action="store_true", + help="Automatically run 'make' on the .o file or binary before diffing.", + ) + parser.add_argument( + "-l", + "--skip-lines", + dest="skip_lines", + metavar="LINES", + type=int, + default=0, + help="Skip the first LINES lines of output.", + ) + parser.add_argument( + "-s", + "--stop-at-ret", + dest="stop_at_ret", + action="count", + help="""Stop disassembling at the first return instruction. + You can also pass -ss to stop at the second return instruction, and so on.""", + ) + parser.add_argument( + "-i", + "--ignore-large-imms", + dest="ignore_large_imms", + action="store_true", + help="Pretend all large enough immediates are the same.", + ) + parser.add_argument( + "-I", + "--ignore-addr-diffs", + dest="ignore_addr_diffs", + action="store_true", + help="Ignore address differences. Currently only affects AArch64 and ARM32.", + ) + parser.add_argument( + "-B", + "--no-show-branches", + dest="show_branches", + action="store_false", + help="Don't visualize branches/branch targets.", + ) + parser.add_argument( + "-R", + "--no-show-rodata-refs", + dest="show_rodata_refs", + action="store_false", + help="Don't show .rodata -> .text references (typically from jump tables).", + ) + parser.add_argument( + "-S", + "--base-shift", + dest="base_shift", + metavar="N", + type=str, + default="0", + help="""Diff position N in our img against position N + shift in the base img. + Arithmetic is allowed, so e.g. |-S "0x1234 - 0x4321"| is a reasonable + flag to pass if it is known that position 0x1234 in the base img syncs + up with position 0x4321 in our img. Not supported together with -o.""", + ) + parser.add_argument( + "-w", + "--watch", + dest="watch", + action="store_true", + help="""Automatically update when source/object files change. + Recommended in combination with -m.""", + ) + parser.add_argument( + "-y", + "--yes", + dest="agree", + action="store_true", + help="""Automatically agree to any yes/no questions asked. + Useful if you really want to use the -w option without -m.""", + ) + parser.add_argument( + "-0", + "--diff_mode=single_base", + dest="diff_mode", + action="store_const", + const=DiffMode.SINGLE_BASE, + help="""View the base asm only (not a diff).""", + ) + parser.add_argument( + "-1", + "--diff_mode=single", + dest="diff_mode", + action="store_const", + const=DiffMode.SINGLE, + help="""View the current asm only (not a diff).""", + ) + parser.add_argument( + "-3", + "--threeway=prev", + dest="diff_mode", + action="store_const", + const=DiffMode.THREEWAY_PREV, + help="""Show a three-way diff between target asm, current asm, and asm + prior to -w rebuild. Requires -w.""", + ) + parser.add_argument( + "-b", + "--threeway=base", + dest="diff_mode", + action="store_const", + const=DiffMode.THREEWAY_BASE, + help="""Show a three-way diff between target asm, current asm, and asm + when diff.py was started. Requires -w.""", + ) + parser.add_argument( + "--width", + dest="column_width", + metavar="COLS", + type=int, + default=50, + help="Sets the width of the left and right view column.", + ) + parser.add_argument( + "--algorithm", + dest="algorithm", + default="levenshtein", + choices=["levenshtein", "difflib"], + help="""Diff algorithm to use. Levenshtein gives the minimum diff, while difflib + aims for long sections of equal opcodes. Defaults to %(default)s.""", + ) + parser.add_argument( + "--max-size", + "--max-lines", + metavar="LINES", + dest="max_lines", + type=int, + default=1024, + help="The maximum length of the diff, in lines.", + ) + parser.add_argument( + "--no-pager", + dest="no_pager", + action="store_true", + help="""Disable the pager; write output directly to stdout, then exit. + Incompatible with --watch.""", + ) + parser.add_argument( + "--format", + choices=("color", "plain", "html", "json"), + default="color", + help="Output format, default is color. --format=html or json implies --no-pager.", + ) + parser.add_argument( + "-U", + "--compress-matching", + metavar="N", + dest="compress_matching", + type=int, + help="""Compress streaks of matching lines, leaving N lines of context + around non-matching parts.""", + ) + parser.add_argument( + "-V", + "--compress-sameinstr", + metavar="N", + dest="compress_sameinstr", + type=int, + help="""Compress streaks of lines with same instructions (but possibly + different regalloc), leaving N lines of context around other parts.""", + ) + parser.add_argument( + "-d", + "--diff-function-symbols", + dest="diff_function_symbols", + action="store_true", + help="Include and diff function symbols.", + ) + + # Project-specific flags, e.g. different versions/make arguments. + add_custom_arguments_fn = getattr(diff_settings, "add_custom_arguments", None) + if add_custom_arguments_fn: + add_custom_arguments_fn(parser) + + if argcomplete: + argcomplete.autocomplete(parser) + +# ==== IMPORTS ==== + +# (We do imports late to optimize auto-complete performance.) + +import abc +from collections import Counter, defaultdict +from dataclasses import asdict, dataclass, field, replace +import difflib +import html +import itertools +import json +import os +import queue +import re +import string +import struct +import subprocess +import threading +import time +import traceback + + +MISSING_PREREQUISITES = ( + "Missing prerequisite python module {}. " + "Run `python3 -m pip install --user colorama watchdog levenshtein cxxfilt` to install prerequisites (cxxfilt only needed with --source)." +) + +try: + from colorama import Back, Fore, Style + import watchdog +except ModuleNotFoundError as e: + fail(MISSING_PREREQUISITES.format(e.name)) + +# ==== CONFIG ==== + + +@dataclass +class ProjectSettings: + arch_str: str + objdump_executable: str + objdump_flags: List[str] + build_command: List[str] + map_format: str + build_dir: str + map_address_offset: int + baseimg: Optional[str] + myimg: Optional[str] + mapfile: Optional[str] + source_directories: Optional[List[str]] + source_extensions: List[str] + show_line_numbers_default: bool + disassemble_all: bool + reg_categories: Dict[str, int] + expected_dir: str + + +@dataclass +class Compress: + context: int + same_instr: bool + + +@dataclass +class Config: + arch: "ArchSettings" + + # Build/objdump options + diff_obj: bool + file: Optional[str] + make: bool + source_old_binutils: bool + diff_section: str + inlines: bool + max_function_size_lines: int + max_function_size_bytes: int + + # Display options + formatter: "Formatter" + diff_mode: DiffMode + base_shift: int + skip_lines: int + compress: Optional[Compress] + show_rodata_refs: bool + show_branches: bool + show_line_numbers: bool + show_source: bool + stop_at_ret: Optional[int] + ignore_large_imms: bool + ignore_addr_diffs: bool + algorithm: str + reg_categories: Dict[str, int] + diff_function_symbols: bool + + # Score options + score_stack_differences = True + penalty_stackdiff = 1 + penalty_regalloc = 5 + penalty_reordering = 60 + penalty_insertion = 100 + penalty_deletion = 100 + + +def create_project_settings(settings: Dict[str, Any]) -> ProjectSettings: + return ProjectSettings( + arch_str=settings.get("arch", "mips"), + baseimg=settings.get("baseimg"), + myimg=settings.get("myimg"), + mapfile=settings.get("mapfile"), + build_command=settings.get( + "make_command", ["make", *settings.get("makeflags", [])] + ), + source_directories=settings.get("source_directories"), + source_extensions=settings.get( + "source_extensions", [".c", ".h", ".cpp", ".hpp", ".s"] + ), + objdump_executable=get_objdump_executable(settings.get("objdump_executable")), + objdump_flags=settings.get("objdump_flags", []), + expected_dir=settings.get("expected_dir", "expected/"), + map_format=settings.get("map_format", "gnu"), + map_address_offset=settings.get( + "map_address_offset", settings.get("ms_map_address_offset", 0) + ), + build_dir=settings.get("build_dir", settings.get("mw_build_dir", "build/")), + show_line_numbers_default=settings.get("show_line_numbers_default", True), + disassemble_all=settings.get("disassemble_all", False), + reg_categories=settings.get("reg_categories", {}), + ) + + +def create_config(args: argparse.Namespace, project: ProjectSettings) -> Config: + arch = get_arch(project.arch_str) + + formatter: Formatter + if args.format == "plain": + formatter = PlainFormatter(column_width=args.column_width) + elif args.format == "color": + formatter = AnsiFormatter(column_width=args.column_width) + elif args.format == "html": + formatter = HtmlFormatter() + elif args.format == "json": + formatter = JsonFormatter(arch_str=arch.name) + else: + raise ValueError(f"Unsupported --format: {args.format}") + + compress = None + if args.compress_matching is not None: + compress = Compress(args.compress_matching, False) + if args.compress_sameinstr is not None: + if compress is not None: + raise ValueError( + "Cannot pass both --compress-matching and --compress-sameinstr" + ) + compress = Compress(args.compress_sameinstr, True) + + show_line_numbers = args.show_line_numbers + if show_line_numbers is None: + show_line_numbers = project.show_line_numbers_default + + return Config( + arch=arch, + # Build/objdump options + diff_obj=args.diff_obj, + file=args.file, + make=args.make, + source_old_binutils=args.source_old_binutils + or "llvm-" in project.objdump_executable, + diff_section=args.diff_section, + inlines=args.inlines, + max_function_size_lines=args.max_lines, + max_function_size_bytes=args.max_lines * 4, + # Display options + formatter=formatter, + diff_mode=args.diff_mode or DiffMode.NORMAL, + base_shift=eval_int( + args.base_shift, "Failed to parse --base-shift (-S) argument as an integer." + ), + skip_lines=args.skip_lines, + compress=compress, + show_rodata_refs=args.show_rodata_refs, + show_branches=args.show_branches, + show_line_numbers=show_line_numbers, + show_source=args.show_source or args.source_old_binutils, + stop_at_ret=args.stop_at_ret, + ignore_large_imms=args.ignore_large_imms, + ignore_addr_diffs=args.ignore_addr_diffs, + algorithm=args.algorithm, + reg_categories=project.reg_categories, + diff_function_symbols=args.diff_function_symbols, + ) + + +def get_objdump_executable(objdump_executable: Optional[str]) -> str: + if objdump_executable is not None: + return objdump_executable + + objdump_candidates = [ + "mips-linux-gnu-objdump", + "mips64-elf-objdump", + "mips-elf-objdump", + "sh-elf-objdump", + "sh4-linux-gnu-objdump", + "m68k-elf-objdump", + ] + for objdump_cand in objdump_candidates: + try: + subprocess.check_call( + [objdump_cand, "--version"], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + return objdump_cand + except subprocess.CalledProcessError: + pass + except FileNotFoundError: + pass + + return fail( + f"Missing binutils; please ensure {' or '.join(objdump_candidates)} exists, or configure objdump_executable." + ) + + +def get_arch(arch_str: str) -> "ArchSettings": + for settings in ARCH_SETTINGS: + if arch_str == settings.name: + return settings + raise ValueError(f"Unknown architecture: {arch_str}") + + +BUFFER_CMD: List[str] = ["tail", "-c", str(10**9)] + +# -S truncates long lines instead of wrapping them +# -R interprets color escape sequences +# -i ignores case when searching +# -c something about how the screen gets redrawn; I don't remember the purpose +# -#6 makes left/right arrow keys scroll by 6 characters +LESS_CMD: List[str] = ["less", "-SRic", "-+F", "-+X", "-#6"] + +DEBOUNCE_DELAY: float = 0.1 + +# ==== FORMATTING ==== + + +@enum.unique +class BasicFormat(enum.Enum): + NONE = enum.auto() + IMMEDIATE = enum.auto() + STACK = enum.auto() + REGISTER = enum.auto() + REGISTER_CATEGORY = enum.auto() + DELAY_SLOT = enum.auto() + DIFF_CHANGE = enum.auto() + DIFF_ADD = enum.auto() + DIFF_REMOVE = enum.auto() + SOURCE_FILENAME = enum.auto() + SOURCE_FUNCTION = enum.auto() + SOURCE_LINE_NUM = enum.auto() + SOURCE_OTHER = enum.auto() + + +@dataclass(frozen=True) +class RotationFormat: + group: str + index: int + key: str + + +Format = Union[BasicFormat, RotationFormat] +FormatFunction = Callable[[str], Format] + + +class Text: + segments: List[Tuple[str, Format]] + + def __init__(self, line: str = "", f: Format = BasicFormat.NONE) -> None: + self.segments = [(line, f)] if line else [] + + def reformat(self, f: Format) -> "Text": + return Text(self.plain(), f) + + def plain(self) -> str: + return "".join(s for s, f in self.segments) + + def __repr__(self) -> str: + return f"" + + def __bool__(self) -> bool: + return any(s for s, f in self.segments) + + def __str__(self) -> str: + # Use Formatter.apply(...) instead + return NotImplemented + + def __eq__(self, other: object) -> bool: + return NotImplemented + + def __add__(self, other: Union["Text", str]) -> "Text": + if isinstance(other, str): + other = Text(other) + result = Text() + # If two adjacent segments have the same format, merge their lines + if ( + self.segments + and other.segments + and self.segments[-1][1] == other.segments[0][1] + ): + result.segments = ( + self.segments[:-1] + + [(self.segments[-1][0] + other.segments[0][0], self.segments[-1][1])] + + other.segments[1:] + ) + else: + result.segments = self.segments + other.segments + return result + + def __radd__(self, other: Union["Text", str]) -> "Text": + if isinstance(other, str): + other = Text(other) + return other + self + + def finditer(self, pat: Pattern[str]) -> Iterator[Match[str]]: + """Replacement for `pat.finditer(text)` that operates on the inner text, + and returns the exact same matches as `Text.sub(pat, ...)`.""" + for chunk, f in self.segments: + for match in pat.finditer(chunk): + yield match + + def sub(self, pat: Pattern[str], sub_fn: Callable[[Match[str]], "Text"]) -> "Text": + result = Text() + for chunk, f in self.segments: + i = 0 + for match in pat.finditer(chunk): + start, end = match.start(), match.end() + assert i <= start <= end <= len(chunk) + sub = sub_fn(match) + if i != start: + result.segments.append((chunk[i:start], f)) + result.segments.extend(sub.segments) + i = end + if chunk[i:]: + result.segments.append((chunk[i:], f)) + return result + + def ljust(self, column_width: int) -> "Text": + length = sum(len(x) for x, _ in self.segments) + return self + " " * max(column_width - length, 0) + + +@dataclass +class TableLine: + key: Optional[str] + is_data_ref: bool + cells: Tuple[Tuple[Text, Optional["Line"]], ...] + + +@dataclass +class TableData: + headers: Tuple[Text, ...] + current_score: int + max_score: int + previous_score: Optional[int] + lines: List[TableLine] + + +class Formatter(abc.ABC): + @abc.abstractmethod + def apply_format(self, chunk: str, f: Format) -> str: + """Apply the formatting `f` to `chunk` and escape the contents.""" + ... + + @abc.abstractmethod + def table(self, data: TableData) -> str: + """Format a multi-column table with metadata""" + ... + + def apply(self, text: Text) -> str: + return "".join(self.apply_format(chunk, f) for chunk, f in text.segments) + + @staticmethod + def outputline_texts(line: TableLine) -> Tuple[Text, ...]: + return tuple(cell[0] for cell in line.cells) + + +@dataclass +class PlainFormatter(Formatter): + column_width: int + + def apply_format(self, chunk: str, f: Format) -> str: + return chunk + + def table(self, data: TableData) -> str: + rows = [data.headers] + [self.outputline_texts(line) for line in data.lines] + return "\n".join( + "".join(self.apply(x.ljust(self.column_width)) for x in row) for row in rows + ) + + +@dataclass +class AnsiFormatter(Formatter): + # Additional ansi escape codes not in colorama. See: + # https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters + STYLE_UNDERLINE = "\x1b[4m" + STYLE_NO_UNDERLINE = "\x1b[24m" + STYLE_INVERT = "\x1b[7m" + STYLE_RESET = "\x1b[0m" + + BASIC_ANSI_CODES = { + BasicFormat.NONE: "", + BasicFormat.IMMEDIATE: Fore.LIGHTBLUE_EX, + BasicFormat.STACK: Fore.YELLOW, + BasicFormat.REGISTER: Fore.YELLOW, + BasicFormat.REGISTER_CATEGORY: Fore.LIGHTYELLOW_EX, + BasicFormat.DIFF_CHANGE: Fore.LIGHTBLUE_EX, + BasicFormat.DIFF_ADD: Fore.GREEN, + BasicFormat.DIFF_REMOVE: Fore.RED, + BasicFormat.SOURCE_FILENAME: Style.DIM + Style.BRIGHT, + BasicFormat.SOURCE_FUNCTION: Style.DIM + Style.BRIGHT + STYLE_UNDERLINE, + BasicFormat.SOURCE_LINE_NUM: Fore.LIGHTBLACK_EX, + BasicFormat.SOURCE_OTHER: Style.DIM, + } + + BASIC_ANSI_CODES_UNDO = { + BasicFormat.NONE: "", + BasicFormat.SOURCE_FILENAME: Style.NORMAL, + BasicFormat.SOURCE_FUNCTION: Style.NORMAL + STYLE_NO_UNDERLINE, + BasicFormat.SOURCE_OTHER: Style.NORMAL, + } + + ROTATION_ANSI_COLORS = [ + Fore.MAGENTA, + Fore.CYAN, + Fore.GREEN, + Fore.RED, + Fore.LIGHTYELLOW_EX, + Fore.LIGHTMAGENTA_EX, + Fore.LIGHTCYAN_EX, + Fore.LIGHTGREEN_EX, + Fore.LIGHTBLACK_EX, + ] + + column_width: int + + def apply_format(self, chunk: str, f: Format) -> str: + if f == BasicFormat.NONE: + return chunk + undo_ansi_code = Fore.RESET + if isinstance(f, BasicFormat): + ansi_code = self.BASIC_ANSI_CODES[f] + undo_ansi_code = self.BASIC_ANSI_CODES_UNDO.get(f, undo_ansi_code) + elif isinstance(f, RotationFormat): + ansi_code = self.ROTATION_ANSI_COLORS[ + f.index % len(self.ROTATION_ANSI_COLORS) + ] + else: + static_assert_unreachable(f) + return f"{ansi_code}{chunk}{undo_ansi_code}" + + def table(self, data: TableData) -> str: + rows = [(data.headers, False)] + [ + ( + self.outputline_texts(line), + line.is_data_ref, + ) + for line in data.lines + ] + return "\n".join( + "".join( + (self.STYLE_INVERT if is_data_ref else "") + + self.apply(x.ljust(self.column_width)) + + (self.STYLE_RESET if is_data_ref else "") + for x in row + ) + for (row, is_data_ref) in rows + ) + + +@dataclass +class HtmlFormatter(Formatter): + rotation_formats: int = 9 + + def apply_format(self, chunk: str, f: Format) -> str: + chunk = html.escape(chunk) + if f == BasicFormat.NONE: + return chunk + if isinstance(f, BasicFormat): + class_name = f.name.lower().replace("_", "-") + data_attr = "" + elif isinstance(f, RotationFormat): + class_name = f"rotation-{f.index % self.rotation_formats}" + rotation_key = html.escape(f"{f.group};{f.key}", quote=True) + data_attr = f'data-rotation="{rotation_key}"' + else: + static_assert_unreachable(f) + return f"{chunk}" + + def table(self, data: TableData) -> str: + def table_row(line: Tuple[Text, ...], is_data_ref: bool, cell_el: str) -> str: + tr_attrs = " class='data-ref'" if is_data_ref else "" + output_row = f" " + for cell in line: + cell_html = self.apply(cell) + output_row += f"<{cell_el}>{cell_html}" + output_row += "\n" + return output_row + + output = "\n" + output += " \n" + output += table_row(data.headers, False, "th") + output += " \n" + output += " \n" + output += "".join( + table_row(self.outputline_texts(line), line.is_data_ref, "td") + for line in data.lines + ) + output += " \n" + output += "
\n" + return output + + +@dataclass +class PythonFormatter(Formatter): + arch_str: str + + def apply_format(self, chunk: str, f: Format) -> str: + # This method is unused by this formatter + return NotImplemented + + def table(self, data: TableData) -> str: + # This method is unused by this formatter + return NotImplemented + + def raw(self, data: TableData) -> Dict[str, Any]: + def serialize_format(s: str, f: Format) -> Dict[str, Any]: + if f == BasicFormat.NONE: + return {"text": s} + elif isinstance(f, BasicFormat): + return {"text": s, "format": f.name.lower()} + elif isinstance(f, RotationFormat): + attrs = asdict(f) + attrs.update({"text": s, "format": "rotation"}) + return attrs + else: + static_assert_unreachable(f) + + def serialize(text: Optional[Text]) -> List[Dict[str, Any]]: + if text is None: + return [] + return [serialize_format(s, f) for s, f in text.segments] + + output: Dict[str, Any] = {} + output["arch_str"] = self.arch_str + output["header"] = { + name: serialize(h) + for h, name in zip(data.headers, ("base", "current", "previous")) + } + output["current_score"] = data.current_score + output["max_score"] = data.max_score + if data.previous_score is not None: + output["previous_score"] = data.previous_score + output_rows: List[Dict[str, Any]] = [] + for row in data.lines: + output_row: Dict[str, Any] = {} + output_row["key"] = row.key + output_row["is_data_ref"] = row.is_data_ref + iters: List[Tuple[str, Text, Optional[Line]]] = [ + (label, *cell) + for label, cell in zip(("base", "current", "previous"), row.cells) + ] + if all(line is None for _, _, line in iters): + # Skip rows that were only for displaying source code + continue + for column_name, text, line in iters: + column: Dict[str, Any] = {} + column["text"] = serialize(text) + if line: + if line.mnemonic is not None: + column["mnemonic"] = line.mnemonic + if line.symbol is not None: + column["symbol"] = line.symbol + if line.line_num is not None: + column["line"] = line.line_num + if line.branch_target is not None: + column["branch"] = line.branch_target + if line.source_lines: + column["src"] = line.source_lines + if line.comment is not None: + column["src_comment"] = line.comment + if line.source_line_num is not None: + column["src_line"] = line.source_line_num + if line or column["text"]: + output_row[column_name] = column + output_rows.append(output_row) + output["rows"] = output_rows + return output + + +@dataclass +class JsonFormatter(PythonFormatter): + def table(self, data: TableData) -> str: + output = super().raw(data) + return json.dumps(output) + + +def format_fields( + pat: Pattern[str], + out1: Text, + out2: Text, + color1: FormatFunction, + color2: Optional[FormatFunction] = None, +) -> Tuple[Text, Text]: + diffs = [ + of.group() != nf.group() + for (of, nf) in zip(out1.finditer(pat), out2.finditer(pat)) + ] + + it = iter(diffs) + + def maybe_color(color: FormatFunction, s: str) -> Text: + return Text(s, color(s)) if next(it, False) else Text(s) + + out1 = out1.sub(pat, lambda m: maybe_color(color1, m.group())) + it = iter(diffs) + out2 = out2.sub(pat, lambda m: maybe_color(color2 or color1, m.group())) + + return out1, out2 + + +def symbol_formatter(group: str, base_index: int) -> FormatFunction: + symbol_formats: Dict[str, Format] = {} + + def symbol_format(s: str) -> Format: + # TODO: it would be nice to use a unique Format for each symbol, so we could + # add extra UI elements in the HTML version + f = symbol_formats.get(s) + if f is None: + index = len(symbol_formats) + base_index + f = RotationFormat(key=s, index=index, group=group) + symbol_formats[s] = f + return f + + return symbol_format + + +# ==== LOGIC ==== + +ObjdumpCommand = Tuple[List[str], str, Optional[str]] + +# eval_expr adapted from https://stackoverflow.com/a/9558001 + +import ast +import operator as op + +operators: Dict[Type[Union[ast.operator, ast.unaryop]], Any] = { + ast.Add: op.add, + ast.Sub: op.sub, + ast.Mult: op.mul, + ast.Div: op.floordiv, + ast.USub: op.neg, + ast.Pow: op.pow, + ast.BitXor: op.xor, + ast.BitOr: op.or_, + ast.BitAnd: op.and_, + ast.Invert: op.inv, +} + + +def eval_expr(expr: str) -> Any: + return eval_(ast.parse(expr, mode="eval").body) + + +def eval_(node: ast.AST) -> Any: + if ( + hasattr(ast, "Constant") + and isinstance(node, ast.Constant) + and isinstance(node.value, int) + ): # Python 3.8+ + return node.value + elif isinstance(node, ast.BinOp): + return operators[type(node.op)](eval_(node.left), eval_(node.right)) + elif isinstance(node, ast.UnaryOp): + return operators[type(node.op)](eval_(node.operand)) + elif sys.version_info < (3, 8) and isinstance(node, ast.Num): + return node.n + else: + raise TypeError(node) + + +def maybe_eval_int(expr: str) -> Optional[int]: + try: + ret = eval_expr(expr) + if not isinstance(ret, int): + raise Exception("not an integer") + return ret + except Exception: + return None + + +def eval_int(expr: str, emsg: str) -> int: + ret = maybe_eval_int(expr) + if ret is None: + fail(emsg) + return ret + + +def eval_line_num(expr: str) -> Optional[int]: + expr = expr.strip().replace(":", "") + if expr == "": + return None + return int(expr, 16) + + +def run_make(target: str, project: ProjectSettings) -> None: + subprocess.check_call(project.build_command + [target]) + + +def run_make_capture_output( + target: str, project: ProjectSettings +) -> "subprocess.CompletedProcess[bytes]": + return subprocess.run( + project.build_command + [target], + stderr=subprocess.PIPE, + stdout=subprocess.PIPE, + ) + + +def restrict_to_function(dump: str, fn_name: str) -> str: + try: + # Find the start of the line that contains ":" + ind = dump.rfind("\n", 0, dump.index(f"<{fn_name}>:")) + 1 + return dump[ind:] + except ValueError: + return "" + + +def serialize_rodata_references(references: List[Tuple[int, int, str]]) -> str: + return "".join( + f"DATAREF {text_offset} {from_offset} {from_section}\n" + for (text_offset, from_offset, from_section) in references + ) + + +def maybe_get_objdump_source_flags(config: Config) -> List[str]: + flags = [] + + if config.show_line_numbers or config.show_source: + flags.append("--line-numbers") + + if config.show_source: + flags.append("--source") + + if not config.source_old_binutils: + flags.append("--source-comment=│ ") + + if config.inlines: + flags.append("--inlines") + + return flags + + +def run_objdump(cmd: ObjdumpCommand, config: Config, project: ProjectSettings) -> str: + flags, target, restrict = cmd + try: + out = subprocess.run( + [project.objdump_executable] + + config.arch.arch_flags + + project.objdump_flags + + flags + + [target], + check=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + universal_newlines=True, + ).stdout + except subprocess.CalledProcessError as e: + print(e.stdout) + print(e.stderr) + if "unrecognized option '--source-comment" in e.stderr: + fail("** Try using --source-old-binutils instead of --source **") + raise e + + obj_data: Optional[bytes] = None + if config.diff_obj: + with open(target, "rb") as f: + obj_data = f.read() + + return preprocess_objdump_out(restrict, obj_data, out, config) + + +def preprocess_objdump_out( + restrict: Optional[str], obj_data: Optional[bytes], objdump_out: str, config: Config +) -> str: + """ + Preprocess the output of objdump into a format that `process()` expects. + This format is suitable for saving to disk with `--write-asm`. + + - Optionally filter the output to a single function (`restrict`) + - Otherwise, strip objdump header (6 lines) + - Prepend .data references ("DATAREF" lines) when working with object files + """ + out = objdump_out + + if restrict is not None: + out = restrict_to_function(out, restrict) + else: + for i in range(6): + out = out[out.find("\n") + 1 :] + out = out.rstrip("\n") + + if obj_data and config.show_rodata_refs: + out = ( + serialize_rodata_references(parse_elf_rodata_references(obj_data, config)) + + out + ) + + processor = config.arch.proc(config) + return processor.preprocess_objdump(out) + + +def search_build_objects(objname: str, project: ProjectSettings) -> Optional[str]: + objfiles = [ + os.path.join(dirpath, f) + for dirpath, _, filenames in os.walk(project.build_dir) + for f in filenames + if f == objname + ] + if len(objfiles) > 1: + all_objects = "\n".join(objfiles) + fail( + f"Found multiple objects of the same name {objname} in {project.build_dir}, " + f"cannot determine which to diff against: \n{all_objects}" + ) + if len(objfiles) == 1: + return objfiles[0] + + return None + + +def search_map_file( + fn_name: str, project: ProjectSettings, config: Config, *, for_binary: bool +) -> Tuple[Optional[str], Optional[int]]: + if not project.mapfile: + fail(f"No map file configured; cannot find function {fn_name}.") + + try: + with open( + project.mapfile, + encoding=MAPFILE_ENCODING, + errors=MAPFILE_ENCODING_ERROR_HANDLER, + ) as f: + contents = f.read() + except Exception: + fail(f"Failed to open map file {project.mapfile} for reading.") + + if project.map_format == "gnu": + if for_binary and "load address" not in contents: + fail( + 'Failed to find "load address" in map file. Maybe you need to add\n' + '"export LANG := C" to your Makefile to avoid localized output?' + ) + + lines = contents.split("\n") + + try: + cur_objfile = None + ram_to_rom = None + cands = [] + last_line = "" + for line in lines: + if line.startswith(" " + config.diff_section): + cur_objfile = line.split()[3] + if "load address" in line: + tokens = last_line.split() + line.split() + ram = int(tokens[1], 0) + rom = int(tokens[5], 0) + ram_to_rom = rom - ram + if line.endswith(" " + fn_name) or f" {fn_name} = 0x" in line: + ram = int(line.split()[0], 0) + if (for_binary and ram_to_rom is not None) or ( + not for_binary and cur_objfile is not None + ): + cands.append((cur_objfile, ram + (ram_to_rom or 0))) + last_line = line + except Exception as e: + traceback.print_exc() + fail(f"Internal error while parsing map file") + + if len(cands) > 1: + fail(f"Found multiple occurrences of function {fn_name} in map file.") + if len(cands) == 1: + return cands[0] + elif project.map_format == "mw": + find = re.findall( + # start address, size, virtual address, file offset, alignment + r" [0-9a-f]{8} [0-9a-f]{6} ([0-9a-f]{8})(?: ([0-9a-f]{8}))?(?: +\S{1,2})? +" + + re.escape(fn_name) + + r"(?: \(entry of " + + re.escape(config.diff_section) + + r"\))? \t" + # object name + + r"(\S+)", + contents, + ) + if len(find) > 1: + fail(f"Found multiple occurrences of function {fn_name} in map file.") + if len(find) == 1: + if find[0][1]: + rom = int(find[0][1], 16) + else: + rom = None + objname = find[0][2] + objfile = search_build_objects(objname, project) + + # TODO Currently the ram-rom conversion only works for diffing ELF + # executables, but it would likely be more convenient to diff DOLs. + # At this time it is recommended to always use -o when running the diff + # script as this mode does not make use of the ram-rom conversion. + if objfile is not None: + return objfile, rom + elif project.map_format == "ms": + load_address_find = re.search( + r"Preferred load address is ([0-9a-f]+)", + contents, + ) + if not load_address_find: + fail(f"Couldn't find module load address in map file.") + load_address = int(load_address_find.group(1), 16) + + diff_segment_find = re.search( + r"([0-9a-f]+):[0-9a-f]+ [0-9a-f]+H " + re.escape(config.diff_section), + contents, + ) + if not diff_segment_find: + fail(f"Couldn't find segment for section in map file.") + diff_segment = diff_segment_find.group(1) + + find = re.findall( + r" (?:" + + re.escape(diff_segment) + + r")\S+\s+(?:" + + re.escape(fn_name) + + r")\s+\S+ ... \S+", + contents, + ) + if len(find) > 1: + fail(f"Found multiple occurrences of function {fn_name} in map file.") + if len(find) == 1: + names_find = re.search(r"(\S+) ... (\S+)", find[0]) + assert names_find is not None + fileofs = int(names_find.group(1), 16) - load_address + if for_binary: + return None, fileofs + + objname = names_find.group(2) + objfile = search_build_objects(objname, project) + if objfile is not None: + return objfile, fileofs + else: + fail(f"Linker map format {project.map_format} unrecognised.") + return None, None + + +def parse_elf_rodata_references( + data: bytes, config: Config +) -> List[Tuple[int, int, str]]: + e_ident = data[:16] + if e_ident[:4] != b"\x7FELF": + return [] + + SHT_SYMTAB = 2 + SHT_REL = 9 + SHT_RELA = 4 + R_MIPS_32 = 2 + R_MIPS_GPREL32 = 12 + + is_32bit = e_ident[4] == 1 + is_little_endian = e_ident[5] == 1 + str_end = "<" if is_little_endian else ">" + str_off = "I" if is_32bit else "Q" + + def read(spec: str, offset: int) -> Tuple[int, ...]: + spec = spec.replace("P", str_off) + size = struct.calcsize(spec) + return struct.unpack(str_end + spec, data[offset : offset + size]) + + ( + e_type, + e_machine, + e_version, + e_entry, + e_phoff, + e_shoff, + e_flags, + e_ehsize, + e_phentsize, + e_phnum, + e_shentsize, + e_shnum, + e_shstrndx, + ) = read("HHIPPPIHHHHHH", 16) + if e_type != 1: # relocatable + return [] + assert e_shoff != 0 + assert e_shnum != 0 # don't support > 0xFF00 sections + assert e_shstrndx != 0 + + @dataclass + class Section: + sh_name: int + sh_type: int + sh_flags: int + sh_addr: int + sh_offset: int + sh_size: int + sh_link: int + sh_info: int + sh_addralign: int + sh_entsize: int + + sections = [ + Section(*read("IIPPPPIIPP", e_shoff + i * e_shentsize)) for i in range(e_shnum) + ] + shstr = sections[e_shstrndx] + sec_name_offs = [shstr.sh_offset + s.sh_name for s in sections] + sec_names = [data[offset : data.index(b"\0", offset)] for offset in sec_name_offs] + + symtab_sections = [i for i in range(e_shnum) if sections[i].sh_type == SHT_SYMTAB] + assert len(symtab_sections) == 1 + symtab = sections[symtab_sections[0]] + + section_name = config.diff_section.encode("utf-8") + text_sections = [ + i + for i in range(e_shnum) + if sec_names[i] == section_name and sections[i].sh_size != 0 + ] + if len(text_sections) != 1: + return [] + text_section = text_sections[0] + + ret: List[Tuple[int, int, str]] = [] + for s in sections: + if s.sh_type == SHT_REL or s.sh_type == SHT_RELA: + if s.sh_info == text_section: + # Skip section_name -> section_name references + continue + sec_name = sec_names[s.sh_info].decode("latin1") + if sec_name not in (".rodata", ".late_rodata"): + continue + sec_base = sections[s.sh_info].sh_offset + for i in range(0, s.sh_size, s.sh_entsize): + if s.sh_type == SHT_REL: + r_offset, r_info = read("PP", s.sh_offset + i) + else: + r_offset, r_info, r_addend = read("PPP", s.sh_offset + i) + + if is_32bit: + r_sym = r_info >> 8 + r_type = r_info & 0xFF + sym_offset = symtab.sh_offset + symtab.sh_entsize * r_sym + st_name, st_value, st_size, st_info, st_other, st_shndx = read( + "IIIBBH", sym_offset + ) + else: + r_sym = r_info >> 32 + r_type = r_info & 0xFFFFFFFF + sym_offset = symtab.sh_offset + symtab.sh_entsize * r_sym + st_name, st_info, st_other, st_shndx, st_value, st_size = read( + "IBBHQQ", sym_offset + ) + if st_shndx == text_section: + if s.sh_type == SHT_REL: + if e_machine == 8 and r_type in (R_MIPS_32, R_MIPS_GPREL32): + (r_addend,) = read("I", sec_base + r_offset) + else: + continue + text_offset = (st_value + r_addend) & 0xFFFFFFFF + ret.append((text_offset, r_offset, sec_name)) + return ret + + +def dump_elf( + start: str, + end: Optional[str], + diff_elf_symbol: str, + config: Config, + project: ProjectSettings, +) -> Tuple[str, ObjdumpCommand, ObjdumpCommand]: + if not project.baseimg or not project.myimg: + fail("Missing myimg/baseimg in config.") + if config.base_shift: + fail("--base-shift not compatible with -e") + + start_addr = eval_int(start, "Start address must be an integer expression.") + + if end is not None: + end_addr = eval_int(end, "End address must be an integer expression.") + else: + end_addr = start_addr + config.max_function_size_bytes + + flags1 = [ + f"--start-address={start_addr}", + f"--stop-address={end_addr}", + ] + + if project.disassemble_all: + disassemble_flag = "-D" + else: + disassemble_flag = "-d" + + if "llvm-" in project.objdump_executable: + flags2 = ["--disassemble", f"--disassemble-symbols={diff_elf_symbol}"] + else: + flags2 = [ + f"--disassemble={diff_elf_symbol}", + ] + + objdump_flags = [disassemble_flag, "-rz", "-j", config.diff_section] + return ( + project.myimg, + (objdump_flags + flags1, project.baseimg, None), + ( + objdump_flags + flags2 + maybe_get_objdump_source_flags(config), + project.myimg, + None, + ), + ) + + +def dump_objfile( + start: str, end: Optional[str], config: Config, project: ProjectSettings +) -> Tuple[str, ObjdumpCommand, ObjdumpCommand]: + if config.base_shift: + fail("--base-shift not compatible with -o") + if end is not None: + fail("end address not supported together with -o") + if start.startswith("0"): + fail("numerical start address not supported with -o; pass a function name") + + objfile = config.file + if not objfile: + objfile, _ = search_map_file(start, project, config, for_binary=False) + + if not objfile: + fail("Not able to find .o file for function.") + + if config.make: + run_make(objfile, project) + + if not os.path.isfile(objfile): + fail(f"Not able to find .o file for function: {objfile} is not a file.") + + refobjfile = os.path.join(project.expected_dir, objfile) + if config.diff_mode != DiffMode.SINGLE and not os.path.isfile(refobjfile): + fail(f'Please ensure an OK .o file exists at "{refobjfile}".') + + if project.disassemble_all: + disassemble_flag = "-D" + else: + disassemble_flag = "-d" + + objdump_flags = [disassemble_flag, "-rz", "-j", config.diff_section] + return ( + objfile, + (objdump_flags, refobjfile, start), + (objdump_flags + maybe_get_objdump_source_flags(config), objfile, start), + ) + + +def dump_binary( + start: str, end: Optional[str], config: Config, project: ProjectSettings +) -> Tuple[str, ObjdumpCommand, ObjdumpCommand]: + binfile = config.file or project.myimg + if not project.baseimg or not binfile: + fail("Missing myimg/baseimg in config.") + if config.make: + run_make(binfile, project) + if not os.path.isfile(binfile): + fail(f"Not able to find binary file: {binfile}") + start_addr = maybe_eval_int(start) + if start_addr is None and config.file is None: + _, start_addr = search_map_file(start, project, config, for_binary=True) + if start_addr is None: + fail("Not able to find function in map file.") + start_addr += project.map_address_offset + elif start_addr is None: + fail("Start address must be an integer expression when using binary -f") + if end is not None: + end_addr = eval_int(end, "End address must be an integer expression.") + else: + end_addr = start_addr + config.max_function_size_bytes + objdump_flags = ["-Dz", "-bbinary"] + ["-EB" if config.arch.big_endian else "-EL"] + flags1 = [ + f"--start-address={start_addr + config.base_shift}", + f"--stop-address={end_addr + config.base_shift}", + ] + flags2 = [f"--start-address={start_addr}", f"--stop-address={end_addr}"] + return ( + binfile, + (objdump_flags + flags1, project.baseimg, None), + (objdump_flags + flags2, binfile, None), + ) + + +# The base class is a no-op. +class AsmProcessor: + def __init__(self, config: Config) -> None: + self.config = config + + # Called during run_objdump() for arch-specific normalization. Runs before + # diff-processing, i.e. process(). + def preprocess_objdump(self, objdump: str) -> str: + return objdump + + def pre_process( + self, mnemonic: str, args: str, next_row: Optional[str], comment: Optional[str] + ) -> Tuple[str, str]: + return mnemonic, args + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + return prev, None + + def normalize(self, mnemonic: str, row: str) -> str: + """This should be called exactly once for each line.""" + arch = self.config.arch + row = self._normalize_arch_specific(mnemonic, row) + if self.config.ignore_large_imms and mnemonic not in arch.branch_instructions: + row = re.sub(self.config.arch.re_large_imm, "", row) + return row + + def _normalize_arch_specific(self, mnemonic: str, row: str) -> str: + return row + + def post_process(self, lines: List["Line"]) -> None: + return + + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + return False + + +class AsmProcessorMIPS(AsmProcessor): + def __init__(self, config: Config) -> None: + super().__init__(config) + self.seen_jr_ra = False + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + arch = self.config.arch + if "R_MIPS_NONE" in row or "R_MIPS_JALR" in row: + # GNU as emits no-op relocations immediately after real ones when + # assembling with -mabi=64. Return without trying to parse 'imm' as an + # integer. + return prev, None + before, imm, after = parse_relocated_line(prev) + addend = reloc_addend_from_imm(imm, before, self.config.arch) + repl = row.split()[-1] + addend + if "R_MIPS_LO16" in row: + repl = f"%lo({repl})" + elif "R_MIPS_HI16" in row: + # Ideally we'd pair up R_MIPS_LO16 and R_MIPS_HI16 to generate a + # correct addend for each, but objdump doesn't give us the order of + # the relocations, so we can't find the right LO16. :( + repl = f"%hi({repl})" + elif "R_MIPS_26" in row: + # Function calls + pass + elif "R_MIPS_PC16" in row: + # Branch to glabel. This gives confusing output, but there's not much + # we can do here. + pass + elif "R_MIPS_GPREL16" in row: + repl = f"%gp_rel({repl})" + elif "R_MIPS_GOT16" in row: + repl = f"%got({repl})" + elif "R_MIPS_CALL16" in row: + repl = f"%call16({repl})" + elif "R_MIPS_LITERAL" in row: + # MWCC emits R_MIPS_LITERAL for float literals which don't have the same structure as the + # relocations emitted by GCC + # Only remove the addend if it is found in the relocation + if addend != "": + # .lit4+0x4000-0x4000 -> .lit4+0x4000 + repl = repl[: -len(addend)] + else: + assert False, f"unknown relocation type '{row}' for line '{prev}'" + return before + repl + after, repl + + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + if self.seen_jr_ra: + return True + if mnemonic == "jr" and args == "ra": + self.seen_jr_ra = True + return False + + +class AsmProcessorPPC(AsmProcessor): + def pre_process( + self, mnemonic: str, args: str, next_row: Optional[str], comment: Optional[str] + ) -> Tuple[str, str]: + if next_row and "R_PPC_EMB_SDA21" in next_row: + # With sda21 relocs, the linker transforms `r0` into `r2`/`r13`, and + # we may encounter this in either pre-transformed or post-transformed + # versions depending on if the .o file comes from compiler output or + # from disassembly. Normalize, to make sure both forms are treated as + # equivalent. + + args = args.replace("(r2)", "(0)") + args = args.replace("(r13)", "(0)") + args = args.replace(",r2,", ",0,") + args = args.replace(",r13,", ",0,") + + # We want to convert li and lis with an sda21 reloc, + # because the r0 to r2/r13 transformation results in + # turning an li/lis into an addi/addis with r2/r13 arg + # our preprocessing normalizes all versions to addi with a 0 arg + if mnemonic in {"li", "lis"}: + mnemonic = mnemonic.replace("li", "addi") + args_parts = args.split(",") + args = args_parts[0] + ",0," + args_parts[1] + if ( + next_row + and ("R_PPC_REL24" in next_row or "R_PPC_REL14" in next_row) + and ".text+0x" in next_row + and mnemonic in PPC_BRANCH_INSTRUCTIONS + ): + # GCC emits a relocation of "R_PPC_REL14" or "R_PPC_REL24" with a .text offset + # fixup the args to use the offset from the relocation + + # Split args by ',' which will result in either [cr, offset] or [offset] + # Replace the current offset with the next line's ".text+0x" offset + splitArgs = args.split(",") + splitArgs[-1] = next_row.split(".text+0x")[-1] + args = ",".join(splitArgs) + + if ( + comment is not None + and ( + next_row is None + or re.search(self.config.arch.re_reloc, next_row) is None + ) + and mnemonic == "bl" + ): + # if the mnemonic is bl and the comment doesn't match + # <.text+0x...> replace the args with the contents of the comment + if re.search(r"<.+\+0x[0-9a-fA-F]+>", comment) is None: + args = comment[1:-1] + + return mnemonic, args + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + # row is the line with the relocations + # prev is the line to apply relocations to + + arch = self.config.arch + assert any( + r in row + for r in ["R_PPC_REL24", "R_PPC_ADDR16", "R_PPC_EMB_SDA21", "R_PPC_REL14"] + ), f"unknown relocation type '{row}' for line '{prev}'" + before, imm, after = parse_relocated_line(prev) + repl = row.split()[-1] + mnemonic, args = prev.split(maxsplit=1) + + if "R_PPC_REL24" in row: + # function calls + # or unconditional branches generated by GCC "b offset" + if mnemonic in PPC_BRANCH_INSTRUCTIONS and ".text+0x" in row: + # this has been handled in pre_process + return prev, None + elif "R_PPC_REL14" in row: + if mnemonic in PPC_BRANCH_INSTRUCTIONS and ".text+0x" in row: + # this has been handled in pre_process + return prev, None + elif "R_PPC_ADDR16_HI" in row: + # absolute hi of addr + repl = f"{repl}@h" + elif "R_PPC_ADDR16_HA" in row: + # adjusted hi of addr + repl = f"{repl}@ha" + elif "R_PPC_ADDR16_LO" in row: + # lo of addr + repl = f"{repl}@l" + elif "R_PPC_ADDR16" in row: + # 16-bit absolute addr + if "+0x7" in repl: + # remove the very large addends as they are an artifact of (label-_SDA(2)_BASE_) + # computations and are unimportant in a diff setting. + if int(repl.split("+")[1], 16) > 0x70000000: + repl = repl.split("+")[0] + elif "R_PPC_EMB_SDA21" in row: + # sda21 relocations; r2/r13 --> 0 swaps are performed in pre_process + repl = f"{repl}@sda21" + + return before + repl + after, repl + + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + return mnemonic == "blr" + + +# Example: "cmp r0, #0x10" +ARM32_COMPARE_IMM_PATTERN = r"cmp\s+(r[0-9]|1[0-3]),\s+#(\w+)" + +# Example: "add pc, r1" +ARM32_JUMP_TABLE_START = r"add\s+pc,\s*r" + +# Examples: +# - "44: 00060032 .word 0x00060032" +# - "48: 0032 .short 0x0032" +# - "4a: 0032 movs r2, r6" +# - "9e: 00be lsls r6, r7, #2" +# - ".short 0x0032 ; 0x64" +ARM32_JUMP_TABLE_ENTRY_PATTERN = r"(?:(\w+):\s+([0-9a-f]+)\s+)?([\w\.]+)\s+([\w,\ ]+)" + +# Example: "ldr r4, [pc, #56] ; (4c )" +ARM32_LOAD_POOL_PATTERN = ( + r"(ldr\s+r([0-9]|1[0-3]),\s+\[pc,.*[;@]\s*)(\([a-fA-F0-9]+.*\))" +) + + +class AsmProcessorARM32(AsmProcessor): + @dataclass + class JumpTableEntry: + cur_addr: int + table_start_addr: int + value: int + is_word: bool + + def preprocess_objdump(self, objdump: str) -> str: + def short_table_entry( + cur_addr: int, jump_table_start_addr: int, value: int + ) -> str: + branch_target = jump_table_start_addr + value + 4 + return f" {cur_addr:x}: {value:04x} .short 0x{value:04x} ; 0x{branch_target:x}" + + new_lines = [] + lines = objdump.splitlines() + for i, jump_table_entry in self._lines_iterator(lines): + if jump_table_entry is None: + new_lines.append(lines[i]) + continue + + entry = jump_table_entry + if entry.is_word: + # Split into two ".short" entries. + hi, lo = entry.value >> 16, entry.value & 0xFFFF + new_lines.append( + short_table_entry(entry.cur_addr, entry.table_start_addr, lo) + ) + new_lines.append( + short_table_entry(entry.cur_addr + 2, entry.table_start_addr, hi) + ) + else: + new_lines.append( + short_table_entry( + entry.cur_addr, entry.table_start_addr, entry.value + ) + ) + return "\n".join(new_lines) + + # An iterator for each line of assembly, returning the line index and optional + # metadata if the line is a jump table entry. + def _lines_iterator( + self, lines: List[str] + ) -> Iterator[Tuple[int, Optional[JumpTableEntry]]]: + jump_table_entries = 0 + table_start_addr = 0 + for i, line in enumerate(lines): + addr_match = re.match(r"^\s*([0-9a-f]+):", line) + addr = int(addr_match.group(1), 16) if addr_match else -1 + entry_match = re.search(ARM32_JUMP_TABLE_ENTRY_PATTERN, line) + if jump_table_entries > 0 and entry_match: + value = ( + entry_match.group(4) + if is_hexstring(entry_match.group(4)) + else entry_match.group(2) + ) + table_entry = self.JumpTableEntry( + cur_addr=addr, + table_start_addr=table_start_addr, + value=int(value, 16), + is_word=entry_match.group(3) == ".word", + ) + jump_table_entries -= 2 if table_entry.is_word else 1 + + yield i, table_entry + continue + + # Check for jump tables. + if re.search(ARM32_JUMP_TABLE_START, line): + jump_table_entries = self._jump_table_entries_count(lines, i) + table_start_addr = addr + yield i, None + + # Returns the number of entries in the jump table starting at `line_no`, or + # 0 if it's not a jump table. + def _jump_table_entries_count(self, raw_lines: List[str], line_no: int) -> int: + # The number of entries should be in the most recent `cmp` before the + # jump table. + for i in reversed(range(line_no)): + cmp_match = re.search(ARM32_COMPARE_IMM_PATTERN, raw_lines[i]) + if cmp_match: + value = immediate_to_int(cmp_match.group(2)) + if value > 0: + return value + 1 + return 0 + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + arch = self.config.arch + if "R_ARM_V4BX" in row: + # R_ARM_V4BX converts "bx " to "mov pc," for some targets. + # Ignore for now. + return prev, None + if "R_ARM_ABS32" in row and not prev.startswith(".word"): + # Don't crash on R_ARM_ABS32 relocations incorrectly applied to code. + # (We may want to do something more fancy here that actually shows the + # related symbol, but this serves as a stop-gap.) + if not prev.strip(): + # More recent objdump doesn't seem to be emitting .word? Or maybe + # I'm just looking at ELFs without proper STT_OBJECT markers. + # In any case, this case seems safe enough to handle. The ELF + # I was looking at also uses RELA relocations, so we don't even + # need to parse the underlying bytes from the previous row. + sym = row.split()[-1] + return ".word " + sym, sym + return prev, None + before, imm, after = parse_relocated_line(prev) + repl = row.split()[-1] + reloc_addend_from_imm(imm, before, self.config.arch) + return before + repl + after, repl + + def _normalize_arch_specific(self, mnemonic: str, row: str) -> str: + if self.config.ignore_addr_diffs: + row = self._normalize_bl(mnemonic, row) + row = self._normalize_data_pool(row) + return row + + def _normalize_bl(self, mnemonic: str, row: str) -> str: + if mnemonic != "bl": + return row + + row, _ = split_off_address(row) + return row + "" + + def _normalize_data_pool(self, row: str) -> str: + pool_match = re.search(ARM32_LOAD_POOL_PATTERN, row) + return pool_match.group(1) if pool_match else row + + def _post_process_jump_tables(self, lines: List["Line"]) -> None: + raw_lines = [ + ( + f"{line.line_num:x}: {line.original}" + if line.line_num is not None + else line.original + ) + for line in lines + ] + for i, jump_table_entry in self._lines_iterator(raw_lines): + if jump_table_entry is None: + continue + + entry = jump_table_entry + lines[i].branch_target = entry.table_start_addr + entry.value + 4 + + def _post_process_data_pools(self, lines: List["Line"]) -> None: + lines_by_line_number = {} + for line in lines: + if line.line_num is not None: + lines_by_line_number[line.line_num] = line + for line in lines: + if line.data_pool_addr is None: + continue + + # Add data symbol and its address to the line. + line_original = lines_by_line_number[line.data_pool_addr].original + addr = "{:x}".format(line.data_pool_addr) + if line_original.strip(): + value = line_original.split()[1] + line.original = line.normalized_original + f"={value} ({addr})" + else: + line.original = line.normalized_original + f"=? ({addr})" + + def post_process(self, lines: List["Line"]) -> None: + self._post_process_jump_tables(lines) + self._post_process_data_pools(lines) + + +class AsmProcessorAArch64(AsmProcessor): + def __init__(self, config: Config) -> None: + super().__init__(config) + self._adrp_pair_registers: Set[str] = set() + + def _normalize_arch_specific(self, mnemonic: str, row: str) -> str: + if self.config.ignore_addr_diffs: + row = self._normalize_adrp_differences(mnemonic, row) + row = self._normalize_bl(mnemonic, row) + return row + + def _normalize_bl(self, mnemonic: str, row: str) -> str: + if mnemonic != "bl": + return row + + row, _ = split_off_address(row) + return row + "" + + def _normalize_adrp_differences(self, mnemonic: str, row: str) -> str: + """Identifies ADRP + LDR/ADD pairs that are used to access the GOT and + suppresses any immediate differences. + + Whenever an ADRP is seen, the destination register is added to the set of registers + that are part of an ADRP + LDR/ADD pair. Registers are removed from the set as soon + as they are used for an LDR or ADD instruction which completes the pair. + + This method is somewhat crude but should manage to detect most such pairs. + """ + row_parts = row.split("\t", 1) + if mnemonic == "adrp": + self._adrp_pair_registers.add(row_parts[1].strip().split(",")[0]) + row, _ = split_off_address(row) + return row + "" + elif mnemonic == "ldr": + for reg in self._adrp_pair_registers: + # ldr xxx, [reg] + # ldr xxx, [reg, ] + if f", [{reg}" in row_parts[1]: + self._adrp_pair_registers.remove(reg) + return normalize_imms(row, AARCH64_SETTINGS) + elif mnemonic == "add": + for reg in self._adrp_pair_registers: + # add reg, reg, + if row_parts[1].startswith(f"{reg}, {reg}, "): + self._adrp_pair_registers.remove(reg) + return normalize_imms(row, AARCH64_SETTINGS) + + return row + + +class AsmProcessorX86(AsmProcessor): + def pre_process( + self, mnemonic: str, args: str, next_row: Optional[str], comment: Optional[str] + ) -> Tuple[str, str]: + if ( + comment is not None + and ( + next_row is None + or re.search(self.config.arch.re_reloc, next_row) is None + ) + and mnemonic == "call" + ): + # if the mnemonic is call and the comment doesn't match + # <.text+0x...> replace the args with the contents of the comment + if re.search(r"<.+\+0x[0-9a-fA-F]+>", comment) is None: + args = comment[1:-1] + + return mnemonic, args + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + if "WRTSEG" in row: # ignore WRTSEG (watcom) + return prev, None + repl = row.split()[-1] + mnemonic, args = prev.split(maxsplit=1) + offset = False + addr_imm = None + + # Calls + + # Example lcall $0x0, $0x00 + if "lcall" in mnemonic: + addr_imm = re.search(r".*", args) + + # Example call a2f + # Example call *0 + # Example jmp 64 + elif mnemonic in X86_BRANCH_INSTRUCTIONS or "call" in mnemonic: + addr_imm = re.search(r"(^|(?<=\*)|(?<=\*\%cs\:))[0-9a-f]+", args) + + # Direct use of reloc + # Match 0x0 part to replace + + # Example %edi,0 + # Example movb $0x0,0x0 + if not addr_imm: + addr_imm = re.search(r"(?:0x)?0+$", args) + + # Example movb $0x0,0x0(%si) + if not addr_imm: + addr_imm = re.search(r"(?<=,)(?:0x)?0+(?=\(.*\))", args) + + # Example 0x0,0x8(%edi) + # Example 0x0,%edi + # Example *0x0(,%edx,4) + # Example $0x0,0x4(%edi) + if not addr_imm: + addr_imm = re.search(r"(^\$?|(?<=\*))(?:0x)?0(?!x)", args) + + # Offset value + + # Example movb $0x0,0x4 + # Example %edi,4 + if not addr_imm: + addr_imm = re.search(r"(?:0x)?[0-9a-f]+$", args) + offset = True + + # Example movb $0x0,0x4(%si) + if not addr_imm: + addr_imm = re.search(r"(?<=,)(?:0x)?[0-9a-f]+", args) + offset = True + + # Example 0x4,%eax + # Example $0x4,%eax + if not addr_imm: + addr_imm = re.search(r"(^|(?<=\*)|(?:\$))(?:0x)?[0-9a-f]+", args) + offset = True + + if not addr_imm: + addr_imm = re.search( + r"(^|(?<=\*)|(?<=\%[fgdecs]s\:))(?:0x)?[0-9a-f]+", args + ) + offset = True + + if not addr_imm: + assert False, f"failed to find address immediate for line '{prev}'" + + start, end = addr_imm.span() + + if "R_386_NONE" in row: + pass + elif "R_386_32" in row: + pass + elif "R_386_PC32" in row: + pass + elif "R_386_16" in row: + pass + elif "R_386_PC16" in row: + pass + elif "R_386_8" in row: + pass + elif "R_386_PC8" in row: + pass + elif "dir32" in row: + if "+" in repl: + repl = repl.split("+")[0] + elif "DISP32" in row: + pass + elif "OFF16" in row: + pass + elif "OFF32" in row: + pass + elif "OFFPC16" in row: + if "+" in repl: + repl = repl.split("+")[0] + elif "OFFPC32" in row: + if "+" in repl: + repl = repl.split("+")[0] + elif "R_386_GOT32" in row: + repl = f"%got({repl})" + elif "R_386_PLT32" in row: + repl = f"%plt({repl})" + elif "R_386_RELATIVE" in row: + repl = f"%rel({repl})" + elif "R_386_GOTOFF" in row: + repl = f"%got({repl})" + elif "R_386_GOTPC" in row: + repl = f"%got({repl})" + elif "R_386_32PLT" in row: + repl = f"%plt({repl})" + elif "FAR16" in row: + if "+" in repl: + repl = repl.split("+")[0] + elif "SEG" in row: + pass + else: + assert False, f"unknown relocation type '{row}' for line '{prev}'" + + if offset: + of = addr_imm.group() + if of[0] == "$": + of = of[1:] + repl = f"{repl}+{of}" + + return f"{mnemonic}\t{args[:start]+repl+args[end:]}", repl + + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + return mnemonic == "ret" + + +class AsmProcessorSH2(AsmProcessor): + def __init__(self, config: Config) -> None: + super().__init__(config) + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + return prev, None + + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + return mnemonic == "rts" + + +class AsmProcessorM68k(AsmProcessor): + def pre_process( + self, mnemonic: str, args: str, next_row: Optional[str], comment: Optional[str] + ) -> Tuple[str, str]: + # replace objdump's syntax of pointer accesses with the equivilant in AT&T syntax for readability + return mnemonic, re.sub( + r"%(sp|a[0-7]|fp|pc)@(?:(?:\((-?(?:0x[0-9a-f]+|[0-9]+)) *(,%d[0-7]:[wl])?\))|(\+)|(-))?", + r"\5\2(%\1\3)\4", + args, + ) + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + repl = row.split()[-1] + mnemonic, args = prev.split(maxsplit=1) + + addr_imm = re.search(r"(? bool: + return mnemonic == "rts" or mnemonic == "rte" or mnemonic == "rtr" + + +@dataclass +class ArchSettings: + name: str + re_int: Pattern[str] + re_comment: Pattern[str] + re_reg: Pattern[str] + re_sprel: Pattern[str] + re_large_imm: Pattern[str] + re_imm: Pattern[str] + re_reloc: Pattern[str] + branch_instructions: Set[str] + instructions_with_address_immediates: Set[str] + forbidden: Set[str] = field(default_factory=lambda: set(string.ascii_letters + "_")) + arch_flags: List[str] = field(default_factory=list) + branch_likely_instructions: Set[str] = field(default_factory=set) + proc: Type[AsmProcessor] = AsmProcessor + big_endian: Optional[bool] = True + delay_slot_instructions: Set[str] = field(default_factory=set) + + +MIPS_BRANCH_LIKELY_INSTRUCTIONS = { + "beql", + "bnel", + "beqzl", + "bnezl", + "bgezl", + "bgtzl", + "blezl", + "bltzl", + "bc1tl", + "bc1fl", +} +MIPS_BRANCH_INSTRUCTIONS = MIPS_BRANCH_LIKELY_INSTRUCTIONS.union( + { + "b", + "beq", + "bne", + "beqz", + "bnez", + "bgez", + "bgtz", + "blez", + "bltz", + "bc1t", + "bc1f", + } +) + +ARM32_PREFIXES = {"b", "bl"} +ARM32_CONDS = { + "", + "eq", + "ne", + "cs", + "cc", + "mi", + "pl", + "vs", + "vc", + "hi", + "ls", + "ge", + "lt", + "gt", + "le", + "al", +} +ARM32_SUFFIXES = {"", ".n", ".w"} +ARM32_BRANCH_INSTRUCTIONS = { + f"{prefix}{cond}{suffix}" + for prefix in ARM32_PREFIXES + for cond in ARM32_CONDS + for suffix in ARM32_SUFFIXES +} + +AARCH64_BRANCH_INSTRUCTIONS = { + "b", + "b.eq", + "b.ne", + "b.cs", + "b.hs", + "b.cc", + "b.lo", + "b.mi", + "b.pl", + "b.vs", + "b.vc", + "b.hi", + "b.ls", + "b.ge", + "b.lt", + "b.gt", + "b.le", + "cbz", + "cbnz", + "tbz", + "tbnz", +} + +PPC_BRANCH_INSTRUCTIONS = { + "b", + "beq", + "beq+", + "beq-", + "bne", + "bne+", + "bne-", + "blt", + "blt+", + "blt-", + "ble", + "ble+", + "ble-", + "bdz", + "bdz+", + "bdz-", + "bdnz", + "bdnz+", + "bdnz-", + "bge", + "bge+", + "bge-", + "bgt", + "bgt+", + "bgt-", + "bso", + "bso+", + "bso-", + "bns", + "bns+", + "bns-", +} + +X86_BRANCH_INSTRUCTIONS = { + "jmp", + "ljmp", + "ja", + "jae", + "jb", + "jbe", + "jc", + "jcxz", + "jecxz", + "jrcxz", + "je", + "jg", + "jge", + "jl", + "jle", + "jna", + "jnae", + "jnb", + "jnbe", + "jnc", + "jne", + "jng", + "jnge", + "jnl", + "jnle", + "jno", + "jnp", + "jns", + "jnz", + "jo", + "jp", + "jpe", + "jpo", + "js", + "jz", + "ja", + "jae", + "jb", + "jbe", + "jc", + "je", + "jz", + "jg", + "jge", + "jl", + "jle", + "jna", + "jnae", + "jnb", + "jnbe", + "jnc", + "jne", + "jng", + "jnge", + "jnl", + "jnle", + "jno", + "jnp", + "jns", + "jnz", + "jo", + "jp", + "jpe", + "jpo", + "js", + "jz", +} + +SH2_BRANCH_INSTRUCTIONS = { + "bf", + "bf.s", + "bt", + "bt.s", + "bra", + "bsr", +} + +M68K_CONDS = { + "ra", + "cc", + "cs", + "eq", + "ge", + "gt", + "hi", + "le", + "ls", + "lt", + "mi", + "ne", + "pl", + "vc", + "vs", +} + +M68K_BRANCH_INSTRUCTIONS = { + f"{prefix}{cond}{suffix}" + for prefix in {"b", "db"} + for cond in M68K_CONDS + for suffix in {"s", "w"} +}.union( + { + "dbt", + "dbf", + "bsrw", + "bsrs", + } +) + + +MIPS_SETTINGS = ArchSettings( + name="mips", + re_int=re.compile(r"[0-9]+"), + re_comment=re.compile(r"<.*>"), + # Includes: + # - General purpose registers v0..1, a0..7, t0..9, s0..8, zero, at, fp, k0..1/kt0..1 + # - Float registers f0..31, or fv0..1, fa0..7, ft0..15, fs0..8 plus odd complements + # (actually used number depends on ABI) + # sp, gp should not be in this list + re_reg=re.compile(r"\$?\b([astv][0-9]|at|f[astv]?[0-9]+f?|kt?[01]|fp|ra|zero)\b"), + re_sprel=re.compile(r"(?<=,)([0-9]+|0x[0-9a-f]+)\(sp\)"), + re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), + re_imm=re.compile( + r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(sp)|%(lo|hi|got|gp_rel|call16)\([^)]*\)" + ), + re_reloc=re.compile(r"R_MIPS_"), + arch_flags=["-m", "mips:4300"], + branch_likely_instructions=MIPS_BRANCH_LIKELY_INSTRUCTIONS, + branch_instructions=MIPS_BRANCH_INSTRUCTIONS, + instructions_with_address_immediates=MIPS_BRANCH_INSTRUCTIONS.union( + {"j", "jal", "bal"} + ), + delay_slot_instructions=MIPS_BRANCH_INSTRUCTIONS.union( + {"j", "jal", "jr", "jalr", "bal"} + ), + proc=AsmProcessorMIPS, +) + +MIPSEL_SETTINGS = replace( + MIPS_SETTINGS, name="mipsel", big_endian=False, arch_flags=["-m", "mips:3000"] +) + +MIPSEE_SETTINGS = replace( + MIPSEL_SETTINGS, name="mipsee", arch_flags=["-m", "mips:5900"] +) + +MIPSEL_4000_SETTINGS = replace( + MIPSEL_SETTINGS, name="mipsel:4000", arch_flags=["-m", "mips:gs464"] +) + +MIPS_ARCH_NAMES = {"mips", "mipsel", "mipsee", "mipsel:4000"} + +ARM32_SETTINGS = ArchSettings( + name="arm32", + re_int=re.compile(r"[0-9]+"), + re_comment=re.compile(r"(<.*>|//.*$)"), + # Includes: + # - General purpose registers: r0..13 + # - Frame pointer registers: lr (r14), pc (r15) + # - VFP/NEON registers: s0..31, d0..31, q0..15, fpscr, fpexc, fpsid + # SP should not be in this list. + re_reg=re.compile( + r"\$?\b([rq][0-9]|[rq]1[0-5]|pc|lr|[ds][12]?[0-9]|[ds]3[01]|fp(scr|exc|sid))\b" + ), + re_sprel=re.compile(r"sp, #-?(0x[0-9a-fA-F]+|[0-9]+)\b"), + re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), + re_imm=re.compile(r"(?|//.*$)"), + # GPRs and FP registers: X0-X30, W0-W30, [BHSDVQ]0..31 + # (FP registers may be followed by data width and number of elements, e.g. V0.4S) + # The zero registers and SP should not be in this list. + re_reg=re.compile( + r"\$?\b([bhsdvq]([12]?[0-9]|3[01])(\.\d\d?[bhsdvq])?|[xw][12]?[0-9]|[xw]30)\b" + ), + re_sprel=re.compile(r"sp, #-?(0x[0-9a-fA-F]+|[0-9]+)\b"), + re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), + re_imm=re.compile(r"(?|//.*$)"), + # r1 not included + re_reg=re.compile(r"\$?\b([rf](?:[02-9]|[1-9][0-9]+)|f1)\b"), + re_sprel=re.compile(r"(?<=,)(-?[0-9]+|-?0x[0-9a-f]+)\(r1\)"), + re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), + re_imm=re.compile( + r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(r1\))|[^ \t,]+@(l|ha|h|sda21)" + ), + re_reloc=re.compile(r"R_PPC_"), + arch_flags=["-m", "powerpc", "-M", "broadway"], + branch_instructions=PPC_BRANCH_INSTRUCTIONS, + instructions_with_address_immediates=PPC_BRANCH_INSTRUCTIONS.union({"bl"}), + proc=AsmProcessorPPC, +) + +X86_SETTINGS = ArchSettings( + name="x86", + re_int=re.compile(r"[0-9]+"), + re_comment=re.compile(r"<.*>"), + # Includes: + # - (e)a-d(x,l,h) + # - (e)s,d,b(i,p)(l) + # - cr0-7 + # - x87 st + # - MMX, SSE vector registers + # - cursed registers: eal ebl ebh edl edh... + re_reg=re.compile( + r"\%?\b(e?(([sd]i|[sb]p)l?|[abcd][xhl])|[cdesfg]s|cr[0-7]|x?mm[0-7]|st)\b" + ), + re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), + re_sprel=re.compile(r"-?(0x[0-9a-f]+|[0-9]+)(?=\((%ebp|%esi)\))"), + re_imm=re.compile(r"-?(0x[0-9a-f]+|[0-9]+)|([\?$_][^ \t,]+)"), + re_reloc=re.compile( + r"R_386_|dir32|DISP32|WRTSEG|OFF32|OFFPC32|OFF16|OFFPC16|SEG|FAR16" + ), + # The x86 architecture has a variable instruction length. The raw bytes of + # an instruction as displayed by objdump can line wrap if it's long enough. + # This destroys the objdump output processor logic, so we avoid this. + arch_flags=["--no-show-raw-insn"], + branch_instructions=X86_BRANCH_INSTRUCTIONS, + instructions_with_address_immediates=X86_BRANCH_INSTRUCTIONS.union({"mov", "call"}), + proc=AsmProcessorX86, +) + +I686_SETTINGS = replace( + X86_SETTINGS, name="i686", arch_flags=["-m", "i386", "--no-show-raw-insn"] +) + +SH2_SETTINGS = ArchSettings( + name="sh2", + # match -128-127 preceded by a '#' with a ',' after (8 bit immediates) + re_int=re.compile(r"(?<=#)(-?(?:1[01][0-9]|12[0-8]|[1-9][0-9]?|0))(?=,)"), + # match , match ! and after + re_comment=re.compile(r"<.*?>|!.*"), + # - r0-r15 general purpose registers, r15 is stack pointer during exceptions + # - sr, gbr, vbr - control registers + # - mach, macl, pr, pc - system registers + re_reg=re.compile(r"r1[0-5]|r[0-9]"), + # sh2 has pc-relative and gbr-relative but not stack-pointer-relative + re_sprel=re.compile(r"(?<=,)([0-9]+|0x[0-9a-f]+)\(sp\)"), + # max immediate size is 8-bit + re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), + re_imm=re.compile(r"\b0[xX][0-9a-fA-F]+\b"), + # https://github.com/bminor/binutils-gdb/blob/master/bfd/elf32-sh-relocs.h#L21 + re_reloc=re.compile(r"R_SH_"), + arch_flags=["-m", "sh2"], + branch_instructions=SH2_BRANCH_INSTRUCTIONS, + instructions_with_address_immediates=SH2_BRANCH_INSTRUCTIONS.union( + {"bf", "bf.s", "bt", "bt.s", "bra", "bsr"} + ), + delay_slot_instructions=SH2_BRANCH_INSTRUCTIONS.union( + {"bf.s", "bt.s", "bra", "braf", "bsr", "bsrf", "jmp", "jsr", "rts"} + ), + proc=AsmProcessorSH2, +) + +SH4_SETTINGS = replace( + SH2_SETTINGS, + name="sh4", + # - fr0-fr15, dr0-dr14, xd0-xd14, fv0-fv12 FP registers + # dr/xd registers can only be even-numbered, and fv registers can only be a multiple of 4 + re_reg=re.compile( + r"r1[0-5]|r[0-9]|fr1[0-5]|fr[0-9]|dr[02468]|dr1[024]|xd[02468]|xd1[024]|fv[048]|fv12" + ), + arch_flags=["-m", "sh4"], +) + +SH4EL_SETTINGS = replace(SH4_SETTINGS, name="sh4el", big_endian=False) + +M68K_SETTINGS = ArchSettings( + name="m68k", + re_int=re.compile(r"[0-9]+"), + # '|' is used by assemblers, but is not used by objdump + re_comment=re.compile(r"<.*>"), + # Includes: + # - d0-d7 data registers + # - a0-a6 address registers + # - fp0-fp7 floating-point registers + # - usp (user sp) + # - fp, sr, ccr + # - fpcr, fpsr, fpiar + re_reg=re.compile(r"%\b(d[0-7]|a[0-6]|usp|fp([0-7]|cr|sr|iar)?|sr|ccr)(:[wl])?\b"), + # This matches all stack accesses that do not use an index register + re_sprel=re.compile(r"-?(0x[0-9a-f]+|[0-9]+)(?=\((%sp|%a7)\))"), + re_imm=re.compile(r"#?-?\b(0x[0-9a-f]+|[0-9]+)(?!\()"), + re_large_imm=re.compile(r"#?-?([1-9][0-9]{2,}|0x[0-9a-f]{3,})"), + re_reloc=re.compile(r"R_68K_"), + arch_flags=["-m", "m68k"], + branch_instructions=M68K_BRANCH_INSTRUCTIONS, + # Pretty much every instruction can take an address immediate + instructions_with_address_immediates=M68K_BRANCH_INSTRUCTIONS.union("jmp", "jsr"), + proc=AsmProcessorM68k, +) + +ARCH_SETTINGS = [ + MIPS_SETTINGS, + MIPSEL_SETTINGS, + MIPSEE_SETTINGS, + MIPSEL_4000_SETTINGS, + ARM32_SETTINGS, + ARMEL_SETTINGS, + AARCH64_SETTINGS, + PPC_SETTINGS, + X86_SETTINGS, + I686_SETTINGS, + SH2_SETTINGS, + SH4_SETTINGS, + SH4EL_SETTINGS, + M68K_SETTINGS, +] + + +def immediate_to_int(immediate: str) -> int: + imm_match = re.match(r"#?(0x)?([0-9a-f]+)", immediate) + assert imm_match + base = 16 if imm_match.group(1) else 10 + return int(imm_match.group(2), base) + + +def is_hexstring(value: str) -> bool: + try: + int(value, 16) + return True + except ValueError: + return False + + +def hexify_int(row: str, pat: Match[str], arch: ArchSettings) -> str: + full = pat.group(0) + + # sh2/sh4 only has 8-bit immediates, just convert them uniformly without + # any -hex stuff + if arch.name == "sh2" or arch.name == "sh4" or arch.name == "sh4el": + return hex(int(full) & 0xFF) + + if len(full) <= 1: + # leave one-digit ints alone + return full + start, end = pat.span() + if start and row[start - 1] in arch.forbidden: + return full + if end < len(row) and row[end] in arch.forbidden: + return full + return hex(int(full)) + + +def parse_relocated_line(line: str) -> Tuple[str, str, str]: + # Pick out the last argument + for c in ",\t ": + if c in line: + ind2 = line.rindex(c) + break + else: + raise Exception(f"failed to parse relocated line: {line}") + before = line[: ind2 + 1] + after = line[ind2 + 1 :] + # Move an optional ($reg) part of it to 'after' + ind2 = after.find("(") + if ind2 == -1: + imm, after = after, "" + else: + imm, after = after[:ind2], after[ind2:] + return before, imm, after + + +def reloc_addend_from_imm(imm: str, before: str, arch: ArchSettings) -> str: + """For architectures like MIPS where relocations have addends embedded in + the code as immediates, convert such an immediate into an addition/ + subtraction that can occur just after the symbol.""" + # TODO this is incorrect for MIPS %lo/%hi which need to be paired up + # and combined. In practice, this means we only get symbol offsets within + # %lo, while %hi just shows the symbol. Unfortunately, objdump's output + # loses relocation order, so we cannot do this without parsing ELF relocs + # ourselves... + mnemonic = before.split()[0] + if mnemonic in arch.instructions_with_address_immediates: + addend = int(imm, 16) + else: + addend = int(imm, 0) + if addend == 0: + return "" + elif addend < 0: + return hex(addend) + else: + return "+" + hex(addend) + + +def pad_mnemonic(line: str) -> str: + if "\t" not in line: + return line + mn, args = line.split("\t", 1) + return f"{mn:<7s} {args}" + + +@dataclass +class Line: + mnemonic: str + diff_row: str + original: str + normalized_original: str + scorable_line: str + symbol: Optional[str] = None + line_num: Optional[int] = None + branch_target: Optional[int] = None + data_pool_addr: Optional[int] = None + source_filename: Optional[str] = None + source_line_num: Optional[int] = None + source_lines: List[str] = field(default_factory=list) + comment: Optional[str] = None + + +def process(dump: str, config: Config) -> List[Line]: + arch = config.arch + processor = arch.proc(config) + source_lines = [] + source_filename = None + source_line_num = None + rets_remaining = config.stop_at_ret + + i = 0 + num_instr = 0 + data_refs: Dict[int, Dict[str, List[int]]] = defaultdict(lambda: defaultdict(list)) + output: List[Line] = [] + lines = dump.split("\n") + while i < len(lines): + row = lines[i] + i += 1 + + if not row: + continue + + # Check if the currrent line has "OFFSET :" + function_label_match = re.match(r"^[0-9a-f]+ <(.*)>:$", row) + + if function_label_match: + function_name = function_label_match.groups()[0] + ":" + + if config.diff_function_symbols: + # If diffing function symbols is enabled + # Add the symbol to the diff output + + output.append( + Line( + mnemonic="