# R&C1 game functions native mods call (OmniLoader `function("FUN_001f9dc8")`, host entry call_game): number -> spec. A spec is a masked FNV hash of a
# retail function's code words (no code bytes), found in the code that is loaded now (omni/funcs.rs). Block header:
#   fn 0x<NTSC number> 0x<PAL v2.00 number> <name>
# followed by the `reloc` / `mhash` / `mask` / `jabs` lines of tools/make_spec.py (run on the PAL name, e.g. `make_spec.py func_L00_002E9A18`; the
# numbers are the pairs in lock-strafe's discs.h). A number that is not listed here is unknown to this port (call_game says so once).
# lock-strafe 1.0.0: the six below.
# USA: same widening as rac1_reloc.txt (tesla_chain, create_moby, delete_moby had PAL-only masks).
fn 0x1f9dc8 0x1f9f90 fast_cos
reloc fast_cos entry 0x1f8cb0 len 0x18
mhash 0xbbddbff4e4c217b2
fn 0x1f9de0 0x1f9fa8 fast_sin
reloc fast_sin entry 0x1f8cc8 len 0x18
mhash 0x9ad7d0ab4d291f32
fn 0x2e8568 0x2e9a18 camera_slide
reloc camera_slide entry 0x2e6780 len 0x24
mhash 0x607d2920ad4b509c
mask 0x4 0xffff
fn 0x2e8590 0x2e9a40 camera_spring
reloc camera_spring entry 0x2e67a8 len 0x48
mhash 0xb05e357a8b603f96
mask 0x4 0xffff
fn 0x2e8648 0x2e9af8 camera_pan_off
reloc camera_pan_off entry 0x2e6860 len 0x28
mhash 0xd02719864e39d45a
mask 0x4 0xffff
fn 0x2e8918 0x2e9dc8 camera_look_along
reloc camera_look_along entry 0x2e6bb0 len 0x54
mhash 0xd4c5312c7cbea37d
mask 0x10 0xffff
mask 0x40 0x3ffffff
# Stage B2: overlay functions (found by code in every level where they exist). The ntsc number of these is the PAL v1.00 Veldin address [?: the real NTSC
# address is derived with the USA stage]; the pal number is the v2.00 address of the names tsv.
fn 0x259498 0x25a8c0 hit_desc_build
reloc hit_desc_build entry 0x259498 len 0x24
mhash 0x99b246eb1f97a534
fn 0x259698 0x25aac0 hit_ring_write
reloc hit_ring_write entry 0x259698 len 0x13c
mhash 0xe74544c1869f6f39
mask 0x18 0xffff
mask 0x6c 0xffff
mask 0x80 0xffff
mask 0x9c 0xffff
mask 0xa8 0x3ffffff
mask 0xc8 0xffff
fn 0x26abc0 0x26c0d0 flame_create
reloc flame_create entry 0x26abc0 len 0x2d0
mhash 0xc8820d4bded38b8c
mask 0x3c 0x3ffffff
mask 0x6c 0xffff
mask 0x7c 0xffff
mask 0x84 0xffff
mask 0x8c 0xffff
mask 0xa8 0x3ffffff
mask 0xb0 0x3ffffff
mask 0xb8 0x3ffffff
mask 0xc8 0x3ffffff
mask 0xd0 0xffff
mask 0xd8 0x3ffffff
mask 0xdc 0xffff
mask 0xe8 0x3ffffff
mask 0xf0 0xffff
mask 0xf8 0x3ffffff
mask 0xfc 0xffff
mask 0x10c 0xffff
mask 0x12c 0xffff
mask 0x134 0xffff
mask 0x138 0xffff
mask 0x140 0xffff
mask 0x15c 0x3ffffff
mask 0x164 0x3ffffff
mask 0x16c 0x3ffffff
mask 0x17c 0x3ffffff
mask 0x184 0xffff
mask 0x18c 0x3ffffff
mask 0x190 0xffff
mask 0x19c 0x3ffffff
mask 0x1a4 0xffff
mask 0x1ac 0x3ffffff
mask 0x1b0 0xffff
mask 0x1d4 0x3ffffff
mask 0x1e4 0xffff
mask 0x204 0x3ffffff
mask 0x218 0x3ffffff
mask 0x22c 0x3ffffff
mask 0x234 0x3ffffff
mask 0x278 0x3ffffff
mask 0x284 0x3ffffff
mask 0x290 0x3ffffff
fn 0x2b8e78 0x2ba7c8 tesla_chain
reloc tesla_chain entry 0x2b8e78 len 0x14a0
mhash 0x24156a3d47461e46
mask 0x58 0xffff
mask 0x6c 0xffff
mask 0x74 0xffff
mask 0x78 0x3ffffff
mask 0x84 0xffff
mask 0x88 0xffff
mask 0x90 0x3ffffff
mask 0x94 0xffff
mask 0x98 0xffff
mask 0x9c 0xffff
mask 0xa0 0x3ffffff
mask 0xa4 0xffff
mask 0xb0 0xffff
mask 0x1c4 0xffff
mask 0x1e4 0xffff
mask 0x1f0 0xffff
mask 0x250 0x3ffffff
mask 0x264 0x3ffffff
mask 0x26c 0x3ffffff
mask 0x278 0xffff
mask 0x2a0 0x3ffffff
mask 0x2ac 0x3ffffff
mask 0x2b8 0xffff
mask 0x2e0 0x3ffffff
mask 0x2ec 0x3ffffff
mask 0x2f4 0xffff
mask 0x308 0xffff
mask 0x30c 0xffff
mask 0x314 0xffff
mask 0x3a0 0x3ffffff
mask 0x3bc 0x3ffffff
mask 0x3c8 0xffff
mask 0x3dc 0x3ffffff
mask 0x3e8 0xffff
mask 0x414 0x3ffffff
mask 0x444 0x3ffffff
mask 0x46c 0x3ffffff
mask 0x49c 0x3ffffff
mask 0x4d8 0xffff
mask 0x4e4 0x3ffffff
mask 0x504 0x3ffffff
mask 0x548 0x3ffffff
mask 0x558 0x3ffffff
mask 0x56c 0x3ffffff
mask 0x590 0x3ffffff
mask 0x5ac 0x3ffffff
mask 0x5c0 0x3ffffff
mask 0x5c8 0xffff
mask 0x5d0 0xffff
mask 0x608 0xffff
mask 0x610 0xffff
mask 0x64c 0x3ffffff
mask 0x658 0xffff
mask 0x66c 0xffff
mask 0x670 0xffff
mask 0x67c 0xffff
mask 0x690 0x3ffffff
mask 0x698 0x3ffffff
mask 0x6a0 0xffff
mask 0x6a8 0x3ffffff
mask 0x6ac 0xffff
mask 0x6b0 0xffff
mask 0x6b8 0xffff
mask 0x6c4 0xffff
mask 0x6cc 0xffff
mask 0x6ec 0x3ffffff
mask 0x708 0x3ffffff
mask 0x710 0x3ffffff
mask 0x740 0x3ffffff
mask 0x750 0x3ffffff
mask 0x768 0xffff
mask 0x770 0xffff
mask 0x788 0x3ffffff
mask 0x7b4 0x3ffffff
mask 0x7bc 0x3ffffff
mask 0x800 0x3ffffff
mask 0x828 0x3ffffff
mask 0x83c 0x3ffffff
mask 0x858 0x3ffffff
mask 0x86c 0x3ffffff
mask 0x874 0x3ffffff
mask 0x8d8 0x3ffffff
mask 0x8fc 0x3ffffff
mask 0x910 0x3ffffff
mask 0x91c 0xffff
mask 0x920 0xffff
mask 0x928 0x3ffffff
mask 0x930 0xffff
mask 0x938 0xffff
mask 0x940 0x3ffffff
mask 0x948 0x3ffffff
mask 0x950 0xffff
mask 0x960 0x3ffffff
mask 0x978 0x3ffffff
mask 0x98c 0xffff
mask 0x990 0xffff
mask 0x9ac 0x3ffffff
mask 0x9c0 0x3ffffff
mask 0x9cc 0x3ffffff
mask 0x9d4 0xffff
mask 0x9dc 0x3ffffff
mask 0x9ec 0x3ffffff
mask 0xa18 0x3ffffff
mask 0xa38 0xffff
mask 0xa40 0xffff
mask 0xa4c 0xffff
mask 0xa58 0xffff
mask 0xa6c 0x3ffffff
mask 0xaa8 0x3ffffff
mask 0xac0 0x3ffffff
mask 0xafc 0xffff
mask 0xb00 0xffff
mask 0xb18 0x3ffffff
mask 0xb2c 0xffff
mask 0xb30 0x3ffffff
mask 0xb3c 0x3ffffff
mask 0xb70 0x3ffffff
mask 0xba0 0xffff
mask 0xbac 0x3ffffff
mask 0xbd8 0x3ffffff
mask 0xc14 0xffff
mask 0xc3c 0x3ffffff
mask 0xcd8 0xffff
mask 0xce0 0xffff
mask 0xd1c 0xffff
mask 0xd20 0x3ffffff
mask 0xd3c 0x3ffffff
mask 0xd70 0x3ffffff
mask 0xd98 0x3ffffff
mask 0xda0 0x3ffffff
mask 0xdbc 0x3ffffff
mask 0xdfc 0xffff
mask 0xe00 0x3ffffff
mask 0xe1c 0x3ffffff
mask 0xe4c 0x3ffffff
mask 0xe74 0x3ffffff
mask 0xe7c 0x3ffffff
mask 0xe98 0x3ffffff
mask 0xefc 0xffff
mask 0xf08 0x3ffffff
mask 0xf1c 0xffff
mask 0xf24 0x3ffffff
mask 0xf34 0xffff
mask 0xf54 0x3ffffff
mask 0xf74 0x3ffffff
mask 0xf88 0x3ffffff
mask 0xfa0 0x3ffffff
mask 0xfbc 0x3ffffff
mask 0xfc4 0xffff
mask 0xfcc 0xffff
mask 0xfe4 0xffff
mask 0xfec 0xffff
mask 0x1018 0x3ffffff
mask 0x102c 0xffff
mask 0x1030 0xffff
mask 0x1038 0xffff
mask 0x1040 0xffff
mask 0x1058 0xffff
mask 0x105c 0x3ffffff
mask 0x107c 0x3ffffff
mask 0x1098 0x3ffffff
mask 0x10ac 0x3ffffff
mask 0x10d0 0xffff
mask 0x10d8 0xffff
mask 0x10f8 0xffff
mask 0x1100 0xffff
mask 0x111c 0x3ffffff
mask 0x112c 0x3ffffff
mask 0x1148 0x3ffffff
mask 0x1160 0x3ffffff
mask 0x117c 0xffff
mask 0x1184 0xffff
mask 0x11a0 0xffff
mask 0x11a8 0xffff
mask 0x11b8 0xffff
mask 0x11c0 0xffff
mask 0x11dc 0x3ffffff
mask 0x11f8 0xffff
mask 0x1204 0xffff
mask 0x1224 0x3ffffff
mask 0x1230 0x3ffffff
mask 0x1238 0x3ffffff
mask 0x1258 0x3ffffff
mask 0x1264 0xffff
mask 0x12a4 0x3ffffff
mask 0x12cc 0x3ffffff
mask 0x12d4 0xffff
mask 0x12ec 0x3ffffff
mask 0x1300 0x3ffffff
mask 0x1314 0x3ffffff
mask 0x1320 0x3ffffff
mask 0x132c 0x3ffffff
mask 0x1350 0x3ffffff
mask 0x135c 0x3ffffff
mask 0x1374 0xffff
mask 0x1398 0x3ffffff
mask 0x13a0 0x3ffffff
mask 0x13d4 0x3ffffff
mask 0x13e0 0x3ffffff
mask 0x13ec 0x3ffffff
mask 0x1404 0x3ffffff
mask 0x1410 0x3ffffff
mask 0x1428 0xffff
mask 0x1448 0xffff
mask 0x144c 0x3ffffff
fn 0x233a20 0x2346c0 add_ammo
reloc add_ammo entry 0x233a20 len 0x58
mhash 0x723076df86fdfc90
mask 0x1c 0xffff
fn 0x233a78 0x234718 get_ammo
reloc get_ammo entry 0x233a78 len 0x50
mhash 0x88b987f2a6a558e5
mask 0x20 0xffff
fn 0x257988 0x258db0 rand_vec
reloc rand_vec entry 0x257988 len 0xa8
mhash 0xb87789af373043fe
mask 0x1c 0x3ffffff
mask 0x24 0x3ffffff
mask 0x2c 0x3ffffff
mask 0x38 0x3ffffff
mask 0x44 0x3ffffff
mask 0x58 0x3ffffff
mask 0x64 0x3ffffff
mask 0x78 0x3ffffff

# Stage P2a: spawn/delete, target block, the Blaster lock-on, spark and glow-sphere spawners, moby sound cue (research/PERK_SYSTEM_A.md section 3).
fn 0x24e448 0x24f870 create_moby
reloc create_moby entry 0x24e448 len 0xf8
mhash 0x75ff077a2bd4376e
mask 0x8 0xffff
mask 0x18 0xffff
mask 0x48 0xffff
mask 0x68 0x3ffffff
mask 0x74 0xffff
mask 0x80 0xffff
mask 0x9c 0x3ffffff
mask 0xa8 0xffff
mask 0xb8 0xffff
mask 0xd0 0xffff
mask 0xd8 0xffff
mask 0xdc 0x3ffffff
mask 0xe0 0xffff
fn 0x24e778 0x24fba0 delete_moby
reloc delete_moby entry 0x24e778 len 0x58
mhash 0x3ad9bec3410aaf23
mask 0x4 0xffff
mask 0x30 0xffff
mask 0x44 0x3ffffff
fn 0x25bf48 0x261448 target_component
reloc target_component entry 0x25bf48 len 0x30
mhash 0x769cdafe63fbdb1b
fn 0x2b4050 0x2b5998 blaster_aim_search
reloc blaster_aim_search entry 0x2b4050 len 0x2fc
mhash 0x169b15b08c2fe71b
mask 0x68 0xffff
mask 0xb0 0x3ffffff
mask 0xfc 0x3ffffff
mask 0x10c 0x3ffffff
mask 0x120 0x3ffffff
mask 0x130 0x3ffffff
mask 0x140 0x3ffffff
mask 0x17c 0x3ffffff
mask 0x18c 0x3ffffff
mask 0x198 0x3ffffff
mask 0x1a4 0x3ffffff
mask 0x1c0 0x3ffffff
mask 0x1d0 0x3ffffff
mask 0x1e8 0x3ffffff
mask 0x230 0xffff
mask 0x23c 0x3ffffff
mask 0x25c 0x3ffffff
fn 0x2aedf8 0x2b0738 spark_spawn
reloc spark_spawn entry 0x2aedf8 len 0x164
mhash 0x41ec50ec04ec7553
mask 0x40 0x3ffffff
mask 0x80 0x3ffffff
mask 0xc0 0x3ffffff
mask 0xd8 0x3ffffff
mask 0x100 0x3ffffff
mask 0x128 0x3ffffff
fn 0x2df1b0 0x2e0cb8 glow_flare_spawn
reloc glow_flare_spawn entry 0x2df1b0 len 0x18c
mhash 0xe681551cf7cc96c5
mask 0x5c 0x3ffffff
mask 0x94 0x3ffffff
mask 0xa4 0x3ffffff
mask 0xb4 0x3ffffff
mask 0xf4 0x3ffffff
mask 0x144 0x3ffffff
fn 0x28d590 0x28eec0 moby_cue
reloc moby_cue entry 0x28d590 len 0xa4
mhash 0x9242d41f8f497e7f
mask 0x60 0x3ffffff

# Stage P2a2: MobyAttachToJoint.
fn 0x24f338 0x250760 moby_attach_to_joint
reloc moby_attach_to_joint entry 0x24f338 len 0xa0
mhash 0x2577f8226dbc4657
mask 0x3c 0x3ffffff
mask 0x50 0x3ffffff
mask 0x5c 0x3ffffff
mask 0x6c 0x3ffffff
mask 0x7c 0x3ffffff
