{
  ////////////////////////////
  // HACKS and ASM FUNCTIONS
  ////////////////////////////

  "types_with_bad_inspect_methods": [
    "game-task-event",
    "game-task-control",
    "predator-edge",
    "manipy"
  ],

  "no_type_analysis_functions_by_name": [],

  // this limits the number of cases in a cond.  The first argument is the name of the function.
  // the second argument is the name of the first condition in the cond. Use print_cfg to find it out.
  // The third argument is the number of cases. If you set it too small it may fail to build the CFG.
  "cond_with_else_max_lengths": [
    ["(method 20 res-lump)", "b0", 2],
    ["(method 11 res-lump)", "b0", 1],
    ["(method 12 res-lump)", "b0", 1]
  ],

  // if a cond with an else case is being used a value in a place where it looks wrong
  // you can add the function name to this list and it will more aggressively reject this rewrite.
  "aggressively_reject_cond_to_value_rewrite": [
    "(method 10 res-lump)",
    "(method 11 res-lump)",
    "(method 12 res-lump)"
  ],

  // this provides a hint to the decompiler that these functions will have a lot of inline assembly.
  // currently it just leaves pcpyld as an asm op.
  "hint_inline_assembly_functions": [],

  "asm_functions_by_name": [
    // checking boxed type is different now - these make the cfg stuff sad
    "name=",
    "(method 77 grenadier)",
    "display-list-control",
    "anim-test-anim-list-handler",
    "anim-test-sequence-list-handler",
    "anim-tester-get-playing-item",
    "start-pilot-recorder",
    "(anon-function 10 pilot-recorder)",
    "(anon-function 10 sig-recorder)",
    // actual asm
    "quad-copy!",
    "return-from-thread",
    "return-from-thread-dead",
    "reset-and-call",
    "(method 10 cpu-thread)",
    "(method 11 cpu-thread)",
    "(method 0 catch-frame)",
    "throw-dispatch",
    "throw",
    "run-function-in-process",
    "set-to-run-bootstrap",
    "return-from-exception",
    "exp",
    "(method 17 bounding-box)",
    "(method 9 bounding-box)",
    "(method 9 matrix)",
    "quaternion->matrix-2",
    "sin-rad",
    "cos-rad",
    "atan-series-rad",
    "sign-float",
    "dma-count-until-done",
    "(method 11 collide-mesh-cache)",
    "cpu-delay",
    "qword-read-time",
    "dma-test-func",
    "move-test-func",

    "symlink2",
    "blerc-a-fragment",
    "blerc-execute",
    "foreground-check-longest-edge-asm",
    "generic-light-proc",
    "(method 17 collide-edge-work)",
    "(method 10 collide-cache-prim)",
    "(method 17 collide-cache)",
    "(method 16 ocean)",

    // unknown instructions
    // logand with #f arg
    // "bugfix?",
    // CFG failed
    "draw-inline-array-instance-shrub",

    "(method 9 editable-region)", // condition branch assert hit
    "test-to-from-spr",
    "test-from-spr",
    "test-to-spr",
    "test-seq-read",
    "test-worst-read",
    "test-seq-write",
    "test-worst-write",
    // texture
    "adgif-shader<-texture!",

    // jak 3
    "(method 10 manipulator)",
    "(method 46 ff-squad-control)",
    "memcpy"
  ],

  // these functions use pairs and the decompiler
  // will be less picky about types related to pairs.
  "pair_functions_by_name": [
    "ref",
    "ref&",
    "(method 4 pair)",
    "last",
    "member",
    "nmember",
    "assoc",
    "assoce",
    "nassoc",
    "nassoce",
    "append!",
    "delete!",
    "delete-car!",
    "insert-cons!",
    "sort",
    "unload-package",
    "display-loop-main",
    "lookup-level-info",
    "(method 24 level-group)",
    "(method 19 level-group)",
    // script
    "command-get-time",
    "command-get-param",
    "command-get-quoted-param",
    "command-get-entity",
    "(method 9 script-context)",
    "(anon-function 6 script)",
    "(anon-function 49 script)",
    "(anon-function 52 script)",
    "(anon-function 72 script)",
    "(anon-function 73 script)",
    "(anon-function 74 script)",
    "(anon-function 75 script)",
    "(anon-function 76 script)",
    "(anon-function 80 script)",
    "(method 11 script-context)",
    "(method 10 script-context)",
    "command-get-trans",
    "key-assoc",
    "(anon-function 0 script)",
    // default-menu
    "dm-scene-load-pick-func",
    "debug-menu-make-continue-sub-menu",
    "debug-menu-make-from-template",
    "debug-menu-context-make-default-menus",
    "debug-menu-make-task-menu",
    "(method 19 gui-control)",
    // menu
    "debug-menu-rebuild",
    "debug-menu-find-from-template",
    "debug-menu-render",
    "debug-menu-context-select-next-or-prev-item",
    "debug-menu-context-select-new-item",
    "debug-menu-send-msg",
    // airlock
    "(method 24 com-airlock)",
    "(method 19 gui-control)",
    "(method 28 editable)",
    "execute-select",
    "(method 29 editable)",
    "(method 25 editable)",
    // game-info
    "(method 20 game-info)",
    "print-continues",
    // task-control
    "(anon-function 55 task-control)",
    "(method 17 load-state)",
    "(method 12 level)",
    "bg",
    "update-sound-banks",
    "entity-remap-names",
    "(method 8 process-tree)",
    "(post play-anim scene-player)",
    "(method 25 scene-player)",
    "(method 25 scene-player)",
    "scene-player-init",
    "next-continue",
    "(method 25 warp-gate)",
    "(code use warp-gate)",
    "cspace-inspect-tree",
    "(method 11 mtn-step-plat-rocks-a)",
    "(method 11 mtn-step-plat-rocks-b)",
    "(method 11 mtn-step-plat-rocks-c)",
    "(method 22 fort-floor-spike-b)",
    "prototypes-game-visible-set!",
    "(method 22 fort-floor-spike-a)",
    "(method 22 fort-floor-spike-b)",
    "(method 22 fort-floor-spike-c)",
    "(method 11 sew-catwalk)",
    "(method 11 mtn-aval-rocks)",
    "(method 11 gar-curtain)",
    "(method 10 level-load-info)",
    "(method 29 level-group)",
    "(method 26 level-group)",
    "(method 19 level)",
    "(method 10 level)",
    "update-sound-banks",
    "level-base-level-name",
    "borrow-city-expansion",
    "add-want-level",
    "level-find-borrow-slot",
    "(method 18 level)",
    "(method 11 tow-tentacle)",
    "city-sound-expand-want-list",
    "(method 12 cty-borrow-manager)",
    "(method 16 cty-borrow-manager)",
    "mark-permanent-holds",
    "update-sound-info",
    "insert-into-sound-list",
    // title-obs
    "(anon-function 22 title-obs)",
    "cty-faction-evaluate-commands",
    "traffic-manager-event-handler",
    "(method 20 cty-faction-manager)"
  ],

  // If format is used with the wrong number of arguments,
  // it will often mess up the decompilation, as the decompiler assumes
  // that they used the correct number.  This will override the decompiler's
  // automatic detection.
  "bad_format_strings": {
    "~170h~5d~220h~5d~280h~5,,2f": 3,
    "~338h~5d~388h~5d~448h~5,,2f": 3,
    "~30Htf: ~8D~134Hpr: ~8D~252Hsh: ~8D~370Hhd: ~8D~%": 4,
    "~30Hal: ~8D~131Hwa: ~8D~252Hsp: ~8D~370Hwp: ~8D~%": 4,
    "ERROR: <asg> ~A in spool anim loop for ~A ~D, but not loaded.~": 3,
    // TODO - these should be automatic
    "  tfrag ~192H~5DK ~280Htfragment~456H~5DK~%": 2,
    "  tie-proto ~192H~5DK ~280Hsky~456H~5DK~%": 2,
    "  tie-instance ~192H~5DK ~280Htie-fragment~456H~5DK~%": 2,
    "  shrub-proto ~192H~5DK ~280Htie-scissor~456H~5DK~%": 2,
    "  shrub-instance ~192H~5DK ~280Hshrubbery~456H~5DK~%": 2,
    "  collision ~192H~5DK ~280Htie-generic~456H~5DK~%": 2,
    "  pris-anim ~192H~5DK ~280Hpris-generic~456H~5DK~%": 2,
    "  textures ~192H~5DK ~280Htextures~456H~5DK~%": 2,
    "  misc ~192H~5DK ~280Hsprite~456H~5DK~%": 2,
    "  entity ~192H~5DK~%": 1,
    "  pris-geo ~192H~5DK ~280Hpris-fragment~456H~5DK~%": 2,
    "~33L~S~32L ~S": 2,
    "~32L~S ~33L~S~1L": 2,
    "~35L~S~33L ~S": 2,
    "~1L~S~35L ~S": 2,
    "~35L~S ~1L~S~1L": 2,
    "~33L~S~35L ~S": 2,
    "~33L~C~34L~S~33L~C": 3,
    "~35L~S ~33L~S~1L": 2,
    "~33L~S ~35L~S~1L": 2,
    "~33L~C": 1,
    "~33L~S~44L ~S": 2,
    "~44L~S ~33L~S": 2,
    "~10Htfrag: ~8,,0m": 1,
    "~140Hshrub: ~8,,0m": 1,
    "~272Halpha: ~8,,0m~%": 1,
    "~27Htie: ~8,,0m": 1,
    "~140Hfg-tf: ~8,,0m": 1,
    "~270Hfg-pr: ~8,,0m~%": 1,
    "~10Hfg-wa: ~8,,0m": 1,
    "~140Hfg-sh: ~8,,0m": 1,
    "~267Hfg-p2: ~8,,0m~%": 1,
    "~30Hp2: ~8D~131Hhf: ~8D~%~1K": 2,
    "Current time (~d:~d) [mission-percentage ~f~%": 2
  },

  "blocks_ending_in_asm_branch": {
    "light-merge!": [1, 2, 3, 5, 7],
    "bsp-camera-asm": [1, 2, 3, 4, 6, 7],
    "level-remap-texture": [2, 3, 4, 5, 6],
    "start-perf-stat-collection": [26],
    "end-perf-stat-collection": [0],

    "(method 23 gui-control)": [10, 46, 50, 58, 81, 90, 101],

    "find-offending-process-focusable": [16, 19],
    "(method 19 process-drawable)": [0, 2, 3, 7, 10, 11, 30],
    "(anon-function 11 game-save)": [0, 3, 4, 5],
    "(anon-function 3 game-save)": [15, 16],
    "(anon-function 12 lightjak-wings)": [2, 3],
    "target-standard-event-handler": [
      5, 6, 7, 20, 64, 65, 66, 67, 72, 73, 83, 84, 85, 86, 87, 88, 96, 97, 109,
      264, 265, 282, 283, 284, 290, 291, 306, 336, 350, 351, 412, 415, 427
    ],
    "(method 9 curve-color-fast)": [0, 1],
    "evaluate-color-curve-fast": [0, 1],
    "(anon-function 0 target-death)": [71, 131, 132, 137],
    "target-board-handler": [15, 16, 20],
    "sprite-draw-distorters": [4, 5],
    "(method 10 simple-sprite-system)": [0],
    "add-debug-box-with-transform": [0, 3],
    "add-debug-line-sphere": [0],
    "bones-mtx-calc-execute": [19, 7],
    "foreground-draw": [0, 1, 126],
    "unpack-comp-rle": [1, 3, 5, 6],
    "unpack-comp-huf": [2, 4, 5, 6, 7, 8, 9],
    "unpack-comp-lzo": [
      0,
      1,
      4,
      5,
      6,
      7,
      15,
      16,
      17,
      18,
      19,
      20,
      21,
      22,
      23,
      24,
      25,
      26,
      27,
      28,
      29,
      30,
      31,
      32,
      33,
      34,
      35, // branch fwd 39
      39, // branch fwd no delay
      43, // goto 18
      45 // goto 6
    ],
    "(method 16 level)": [0, 1, 5, 13, 14, 15],
    "upload-vis-bits": [2, 6, 3, 0],
    "set-background-regs!": [4, 3],
    "draw-drawable-tree-instance-shrub": [5, 7, 9, 11],
    "draw-drawable-tree-instance-tie": [21, 23, 31, 33],
    "(method 12 flow-control)": [3, 9, 22],
    "(method 26 level-group)": [40, 41, 67],
    "borrow-city-expansion": [0, 9, 13, 15, 17],
    "dma-add-process-drawable": [0, 77],
    "real-main-draw-hook": [120, 122],
    "display-frame-finish": [61],
    "display-loop-main": [130],
    "(method 63 collide-shape-moving)": [1, 2, 14, 49],
    "(method 67 collide-shape-moving)": [2, 3, 13],
    "(method 51 rigid-body-object)": [5],
    "(anon-function 2 rigid-body-queue)": [0, 2],
    "(method 15 rigid-body-queue)": [5, 6, 7, 9],
    "(method 13 rigid-body-queue)": [5, 6, 7, 9],
    "(method 11 rigid-body-queue)": [0, 6, 7, 9],
    "(method 10 rigid-body-queue)": [10, 34, 37],
    "(method 9 los-control)": [0, 43],
    "load-game-text-info": [19, 20, 21],
    "draw-actor-marks": [8],
    "find-nearest-entity": [7, 9],
    "(method 13 collide-cache)": [7, 9],
    "(method 11 collide-mesh)": [2, 4],
    "(method 12 collide-mesh-cache)": [0, 1, 2, 3, 4, 5],
    "(method 10 collide-mesh)": [2],
    "(method 42 collide-shape)": [0, 1, 2, 3, 4, 7],
    "(method 18 collide-shape-prim-mesh)": [2, 3, 4, 5, 6, 7],
    "(method 18 collide-shape-prim-sphere)": [2, 3, 4],
    "(method 15 collide-shape-prim-sphere)": [1, 2, 3, 4, 5, 6],
    "(method 16 collide-shape-prim-sphere)": [0, 1, 2, 3, 4],
    "(method 36 collide-shape)": [8, 9],
    "(method 45 collide-shape)": [33],
    "(method 40 collide-shape)": [
      0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
      22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32
    ],
    "(method 12 collide-shape-prim-group)": [1, 2, 3, 4, 5, 6],
    "(method 13 collide-shape-prim)": [1, 2, 3, 4, 5, 6],
    "(method 12 collide-shape-prim-sphere)": [
      1, 2, 3, 4, 5, 8, 10, 11, 13, 14, 15
    ],
    "(method 12 collide-shape-prim-mesh)": [
      0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16
    ],
    "update-actor-hash": [0, 2, 4],
    "(method 24 grid-hash)": [39, 35, 22, 15],
    "(anon-function 4 gun-states)": [
      18, 128, 129, 131, 133, 135, 138, 139, 143
    ],
    "(method 16 sparticle-launch-control)": [25, 35, 36, 48, 62, 65, 100, 102],
    "(anon-function 17 target-ladder)": [0, 1],
    "command-get-process": [46],
    "foreground-draw-hud": [0, 7, 8, 9, 16, 22],
    "target-flut-falling-anim-trans": [8, 9],
    "(method 12 nav-mesh)": [0, 1, 2, 9],
    "(method 20 nav-mesh)": [9],
    "(method 21 nav-mesh)": [7],
    "(method 29 nav-mesh)": [0, 1, 2, 4],
    "(method 33 nav-mesh)": [10, 11, 12, 13],
    "(method 34 nav-mesh)": [0, 1, 2, 4],
    "(method 35 nav-mesh)": [0, 1, 2, 4],
    "(method 36 nav-mesh)": [1, 2],
    "(method 37 nav-mesh)": [4],
    "(method 45 nav-mesh)": [1, 2],
    "(method 46 nav-mesh)": [1, 2, 19, 20],
    "(method 48 nav-mesh)": [4, 5, 6, 8],
    "(method 49 nav-mesh)": [0, 1, 2, 3, 5],
    "(method 18 nav-control)": [11, 12, 19, 20, 31, 34],
    "(method 19 nav-control)": [9, 10],
    "(method 40 nav-state)": [1, 2],
    "point-poly-distance-min": [0, 1, 2, 3, 4, 5, 6, 7, 10],
    "find-closest-circle-ray-intersection": [0, 4, 15, 16, 17, 18],
    "(method 39 vehicle)": [0, 10, 12, 15],
    "(anon-function 7 vehicle-states)": [0, 2],
    "(method 11 vehicle-hud-requests)": [0, 6, 7, 10],
    "(anon-function 12 neo-juicer)": [29, 30],
    "(method 160 neo-grenadier)": [1, 2, 3],
    "(method 82 spydroid-orig)": [13],
    "(method 118 vehicle)": [3, 4, 7, 8, 9, 10, 17, 26, 30, 31, 33],
    "(method 25 squad-control)": [0, 4, 5, 7],
    "target-pilot-post": [0, 29],
    "(method 36 was-squad-control)": [0, 8, 14, 16],
    "(anon-function 6 nst-tasks)": [4, 9, 10, 16, 23, 30],
    "(method 33 task-manager-nest-cocoons)": [3, 7, 13, 28],
    "(method 90 wvehicle)": [29, 37, 38, 44],
    "(anon-function 2 artifact-race)": [40, 55, 56, 57, 65, 66],
    "(anon-function 27 course-race)": [6],
    "(anon-function 65 temple-obs)": [5, 6],
    "(anon-function 5 target-turret)": [0, 1, 2, 3],
    "dp-bipedal-consider-attacks": [15, 19],
    "(anon-function 25 volcanox-obs)": [3, 5, 6],
    "(method 36 task-manager-arena-fight-base)": [11],
    "(method 28 hud-wasgun)": [0, 1, 2, 4],
    "(method 15 hud-wasgun)": [8, 28, 29, 30, 54],
    "(method 15 vehicle-controller)": [0, 3, 5, 6, 7, 10],
    "(method 51 hvehicle)": [5],
    "(method 159 hvehicle)": [0, 1, 10, 19, 21, 23, 26],
    "(method 18 vehicle-controller)": [0, 1, 74, 75],
    "glider-too-low?": [2, 19, 21],
    "(method 39 task-manager-desert-glide)": [0, 3, 4, 9],
    "(method 36 task-manager-desert-glide)": [20, 50, 60],
    "(method 37 task-manager-desert-glide)": [11, 12, 23, 29, 31],
    "(method 34 task-manager-desert-glide)": [3],
    "(anon-function 20 target-flut)": [0, 38, 39],
    "(anon-function 14 flut-racer)": [7, 17, 19],
    "(method 28 conveyor)": [22],
    "generic-merc-execute-all": [7, 15],
    "check-enemy": [0, 1],
    "(method 91 h-warf)": [0],
    "(method 51 h-warf)": [5],
    "(method 44 nav-graph)": [0, 7, 8, 26, 34],
    "(method 15 city-level-info)": [0, 1, 2, 6, 7, 9, 11, 13],
    "(method 10 traffic-suppressor)": [0, 1, 2, 4],
    "(method 18 traffic-tracker)": [5, 6, 7, 8],
    "(method 21 traffic-tracker)": [0],
    "(method 9 cty-faction-manager)": [8],
    "(method 46 traffic-engine)": [0, 1, 2, 4],
    "(method 42 traffic-engine)": [6],
    "(method 17 traffic-manager)": [7, 19, 27, 28, 29, 30, 41],
    "(anon-function 10 guard-rifle)": [9],
    "(method 261 crimson-guard)": [52, 64],
    "(anon-function 13 metalhead-predator)": [24, 25],
    "(anon-function 90 ctywide-obs)": [4],
    "(anon-function 10 cty-sniper-turret)": [44],
    "(method 33 rub-tower)": [9, 10],
    "(method 30 gungame-manager)": [0, 4, 5, 7]
  },

  // Sometimes the game might use format strings that are fetched dynamically,
  // for example using the game text lookup method
  // Add information about those format instructions here.
  // e.g. "function-name":[[op, argc], [op, argc], ...]
  // where "op" is the op number for the call to format.
  "dynamic_format_arg_counts": {
    "auto-save-post": [[182, 1]],
    "(method 10 menu-secret-option)": [[289, 1]],
    "(method 10 menu-create-game-option)": [[49, 1]],
    "(method 10 menu-format-card-option)": [[49, 1]],
    "(method 10 menu-card-removed-option)": [[49, 1]],
    "(method 10 menu-insert-card-option)": [[49, 1]],
    "(method 10 menu-hero-mode-message-option)": [[50, 1]],
    "(method 10 menu-secrets-insufficient-space-option)": [[51, 1]],
    "(method 10 menu-error-loading-option)": [
      [65, 1],
      [100, 1]
    ],
    "(method 10 menu-insufficient-space-option)": [
      [72, 1],
      [112, 1]
    ],
    "(method 10 menu-error-auto-saving-option)": [[73, 1]],
    "(method 10 menu-loading-option)": [[113, 1]],
    "(method 10 menu-icon-info-option)": [[150, 1]],
    "(method 17 hud-goal)": [[71, 0]],
    "(method 17 hud-miss)": [[71, 0]],
    "(method 16 resetter)": [
      [68, 1],
      [101, 1],
      [130, 1]
    ],
    "(method 32 task-manager-desert-turtle-training)": [[59, 1]],
    "(method 24 race-manager)": [[97, 1]],
    "(method 25 race-manager)": [
      [97, 1],
      [126, 1]
    ],
    "(method 15 hud-race-final-stats)": [[131, 0]],
    "(method 15 hud-wasbbv-goal-time)": [[74, 0]],
    "(method 32 task-manager-lightjak-training)": [[53, 0]],
    "(method 18 hover-training-manager)": [[69, 0]],
    "(method 37 task-manager-arena-training)": [[67, 1]],
    "(method 15 hud-arena-final-stats)": [
      [103, 0],
      [147, 0]
    ],
    "(method 35 task-manager-arena-fight-base)": [[53, 0]],
    "(method 32 task-manager-arena-gun-training)": [[53, 0]],
    "(method 26 task-manager-arena-fight-2)": [
      [72, 0],
      [186, 0]
    ],
    "(method 37 task-manager-wascity-gungame)": [
      [48, 0],
      [78, 0],
      [119, 0],
      [157, 0],
      [195, 0],
      [227, 0],
      [268, 0],
      [306, 0],
      [338, 0],
      [379, 0],
      [411, 0],
      [446, 0]
    ],
    "(method 30 was-pre-game)": [
      [184, 0],
      [276, 0]
    ],
    "(method 32 task-manager-throne-gun-training)": [[53, 0]],
    "(method 17 hud-spider-killed)": [[71, 0]],
    "(trans idle des-burning-bush)": [
      [226, 1],
      [257, 0]
    ],
    "(method 37 des-burning-bush)": [
      [278, 0],
      [336, 0]
    ],
    "(method 38 des-burning-bush)": [
      [109, 0],
      [153, 0],
      [196, 0]
    ],
    "(method 15 freeze-time-hud)": [[108, 0]],
    "(method 17 freeze-time-hud)": [[97, 0]],
    "(method 15 hud-wasbbv-score)": [[61, 0]],
    "(method 15 hud-wasbbv-goal)": [[64, 0]],
    "(method 32 task-manager-dark-punch-training)": [[53, 0]],
    "(method 32 task-manager-lightjak-training-shield)": [[53, 0]],
    "(trans credits highres-viewer-manager)": [[185, 0]],
    "(trans idle hirez-viewer)": [[356, 0]],
    "(trans idle burning-bush)": [
      [171, 1],
      [202, 0]
    ],
    "(method 33 task-manager-bbush-board)": [[86, 0]],
    "(method 17 board-score-hud)": [[71, 0]],
    "(method 23 gungame-manager)": [
      [52, 0],
      [90, 0],
      [128, 0],
      [164, 0],
      [194, 0],
      [235, 0],
      [273, 0],
      [305, 0],
      [346, 0],
      [378, 0],
      [413, 0]
    ],
    "(trans carry precur-bomb)": [[60, 0]]
  },

  "mips2c_functions_by_name": [
    "collide-do-primitives",
    "moving-sphere-triangle-intersect",
    "calc-animation-from-spr",
    "draw-string-asm",
    // "draw-string",
    "get-string-length",
    "adgif-shader<-texture-with-update!",
    "init-boundary-regs",
    "draw-boundary-polygon",
    "render-boundary-quad",
    "render-boundary-tri",
    "clip-polygon-against-negative-hyperplane",
    "clip-polygon-against-positive-hyperplane",
    "sp-init-fields!",
    "particle-adgif",
    "sp-launch-particles-var",
    "sparticle-motion-blur",
    "sp-process-block-2d",
    "sp-process-block-3d",
    "set-tex-offset",
    "draw-large-polygon",
    "render-sky-quad",
    "render-sky-tri",
    "(method 17 sky-work)",
    "(method 18 sky-work)",
    "(method 32 sky-work)",
    "(method 31 sky-work)",
    "(method 34 sky-work)",
    "(method 29 sky-work)",
    "(method 30 sky-work)",
    "(method 35 sky-work)",
    "(method 11 collide-hash)",
    "(method 12 collide-hash)",
    "fill-bg-using-box-new",
    "fill-bg-using-line-sphere-new",
    "(method 12 collide-mesh)",
    "(method 14 collide-mesh)",
    "(method 15 collide-mesh)",
    "(method 10 collide-edge-hold-list)",
    "(method 19 collide-edge-work)",
    "(method 9 edge-grab-info)",
    "(method 16 collide-edge-work)",
    "(method 17 collide-edge-work)",
    "(method 18 collide-edge-work)",
    "draw-large-polygon-ocean",
    "render-ocean-quad",
    "init-ocean-far-regs",
    "(method 14 ocean)",
    "(method 15 ocean)",
    "(method 16 ocean)",
    "(method 18 grid-hash)",
    "(method 19 grid-hash)",
    "(method 20 grid-hash)",
    "(method 22 grid-hash)",
    "(method 28 sphere-hash)",
    "(method 33 sphere-hash)",
    "(method 29 sphere-hash)",
    "(method 30 sphere-hash)",
    "(method 31 sphere-hash)",
    "(method 32 sphere-hash)",
    "(method 32 spatial-hash)",
    "(method 34 spatial-hash)",
    "(method 35 spatial-hash)",
    "(method 36 spatial-hash)",
    "(method 38 spatial-hash)",
    "(method 10 collide-shape-prim-mesh)",
    "(method 10 collide-shape-prim-sphere)",
    "(method 10 collide-shape-prim-group)",
    "(method 11 collide-shape-prim-mesh)",
    "(method 11 collide-shape-prim-sphere)",
    "(method 11 collide-shape-prim-group)",
    "(method 9 collide-cache-prim)",
    "(method 10 collide-cache-prim)",
    "(method 17 collide-cache)",
    "(method 9 collide-puss-work)",
    "(method 10 collide-puss-work)",
    "bones-mtx-calc",
    "foreground-check-longest-edge-asm",
    "foreground-merc",
    "add-light-sphere-to-light-group",
    "light-hash-add-items",
    "light-hash-count-items",
    "light-hash-get-bucket-index",
    // nav-mesh / nav-control related
    // TODO - it would be nice to eventually figure out the asm blocks for the majority of these
    "nav-state-patch-pointers",
    "(method 20 nav-engine)",
    // "find-closest-circle-ray-intersection",
    // "(method 18 nav-control)",
    "nav-dma-send-to-spr-no-flush",
    "nav-dma-send-from-spr-no-flush",
    "(method 17 nav-engine)",
    "(method 18 nav-engine)",
    "(method 21 nav-engine)",
    "(method 39 nav-state)",
    "setup-blerc-chains-for-one-fragment",
    "blerc-execute",
    "ripple-create-wave-table",
    "ripple-execute-init",
    "ripple-apply-wave-table",
    "ripple-matrix-scale",
    "(method 53 squid)",
    "init-vortex-regs",
    "render-vortex-quad",
    "draw-large-polygon-vortex",
    "foreground-generic-merc",
    "generic-merc-init-asm",
    "mercneric-convert",
    "high-speed-reject",
    "generic-translucent",
    "generic-merc-query",
    "generic-merc-death",
    "generic-merc-execute-asm",
    "generic-merc-do-chain",
    "generic-light-proc",
    "generic-envmap-proc",
    "generic-prepare-dma-double",
    "generic-prepare-dma-single",
    "generic-warp-source-proc",
    "generic-warp-dest-proc",
    "generic-warp-dest",
    "generic-warp-envmap-dest",
    "generic-no-light-proc",
    "(method 21 cloth-system)",
    "debug-line-clip?",
    "(method 9 font-work)",
    "live-func-curve",
    "birth-func-curve",
    "sparticle-motion-blur-dirt",
    "foreground-draw-hud",
    "shadow-execute",
    "shadow-add-double-edges",
    "shadow-add-single-edges",
    "shadow-add-facing-single-tris",
    "shadow-add-double-tris",
    "shadow-xform-verts",
    "shadow-calc-dual-verts",
    "shadow-scissor-edges",
    "shadow-scissor-top",
    "shadow-init-vars",
    "shadow-find-facing-single-tris",
    "shadow-find-single-edges",
    "shadow-find-facing-double-tris",
    "shadow-find-double-edges",
    "shadow-add-verts",
    "shadow-add-single-tris"
  ],

  "mips2c_jump_table_functions": {},

  // there are some missing textures. I don't know what the game actually does here.
  // the format for entries is [level, tpage, index]
  "missing_textures": [
    ["lfac", 0, 0],
    ["ltow", 0, 0],
    ["lcit", 0, 0],
    ["pow", 0, 0],
    ["wasintro", 0, 0],
    ["lfacctyb", 0, 0],
    ["intpfall", 0, 0],
    ["lfaccity", 0, 0],
    ["ltowcity", 0, 0],
    ["powergd", 0, 0],
    ["lcitysml", 0, 0]
  ],

  // some object files have garbage pad data at the end which makes the decompiler
  // assume they must be different files, such as the art group for orb-cache-top.
  // this just suppresses a message.
  "expected_merged_objs": []
}
