{
  ////////////////////////////
  // 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)",
    // until loop without nop:
    "target-history-print",
    "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",
    "shadow-add-single-edges",
    "shadow-add-facing-single-tris",
    "shadow-add-double-tris",
    "shadow-add-double-edges",
    "(method 17 collide-edge-work)",
    "(method 10 collide-cache-prim)",
    "(method 17 collide-cache)",
    "(method 16 ocean)",

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

    "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!"
  ],

  // these functions use pairs and the decompiler
  // will be less picky about types related to pairs.
  "pair_functions_by_name": [
    "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)"
  ],

  // 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
  },

  "blocks_ending_in_asm_branch": {
    "closest-pt-in-triangle": [17],
    // this one is all asm branches
    "circle-circle-xz-intersect": [
      1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14
    ],
    "load-game-text-info": [15, 16, 17, 19, 20, 21],

    "find-knot-span": [0, 1, 2, 3, 5, 6, 7, 8, 9],

    "curve-evaluate!": [0, 2, 5, 6, 7, 8, 9],

    "display-loop-main": [127, 130, 133, 136],

    "real-main-draw-hook": [114, 115, 116, 118],

    "sprite-draw-distorters": [4, 5],
    "draw-drawable-tree-instance-shrub": [5, 7, 9, 11],

    "add-debug-box-with-transform": [0, 3],
    "add-debug-line-sphere": [0],

    "(method 12 perf-stat)": [0],
    "(method 11 perf-stat)": [0],
    "bsp-camera-asm": [1, 2, 3, 4, 6, 7],
    "(method 9 texture-page-dir)": [5, 6],
    "level-remap-texture": [2, 3, 4, 5, 6],

    "(method 27 nav-mesh)": [1, 2],
    "(method 31 nav-mesh)": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
    "(method 46 nav-mesh)": [2, 3],
    "(method 32 nav-mesh)": [1, 2],
    "(method 33 nav-mesh)": [1, 2],
    "(method 42 nav-mesh)": [1, 2, 3, 7],
    "point-poly-distance-min": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
    "(method 34 nav-mesh)": [1, 2, 3, 7],
    "(method 35 nav-mesh)": [2, 4],
    "draw-actor-marks": [8],
    "find-nearest-entity": [7, 9, 10, 11, 12, 13, 14],
    "start-perf-stat-collection": [26],
    "end-perf-stat-collection": [0],
    "upload-vis-bits": [2, 6, 3, 0],
    "set-background-regs!": [4, 3],
    "draw-drawable-tree-instance-tie": [21, 23, 31, 33],
    "command-get-process": [43],
    "unpack-comp-rle": [1, 3, 5, 6],
    "(method 16 level)": [0, 1, 5, 13, 14, 15],
    "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 27 conveyor)": [5, 14, 22],
    "(method 44 nav-graph)": [
      0, 1, 2, 3, 4, 5, 6, 7, 8, 14, 15, 16, 17, 18, 22, 24, 25, 26, 27, 30, 31,
      32, 33, 34, 35, 36
    ],
    "(method 11 sparticle-launch-control)": [
      18, 24, 25, 28, 29, 32, 33, 34, 36, 41, 55, 58, 93, 95
    ],

    "(method 22 gui-control)": [
      10, // goto L63 (B39)
      16, // goto L58 (B27)
      26, // goto L62 (B)
      27, // goto L62
      28, // goto L61
      35, // goto L62
      36, // goto L62
      38, // goto L99
      42, // goto L89
      50, // goto L84
      108, // goto L86
      110, // goto L86
      116, // goto L99
      117, // goto L91
      120
    ],

    "(anon-function 11 game-save)": [0, 3, 4, 5],
    "update-actor-hash": [0, 2, 4],
    "(code target-death)": [111, 140],
    "(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
    ],
    "(method 24 grid-hash)": [39, 35, 22, 15],
    "(method 12 flow-control)": [11, 12, 13, 14, 15, 18, 20, 22, 29],
    "(method 19 process-drawable)": [0, 2, 3, 7, 10, 11, 30],
    "find-offending-process-focusable": [16, 19],

    "target-standard-event-handler": [
      5, // fwd L31/7
      6, // to 152
      7, // fwd L38
      20, // to 152
      21, // fwd L39
      22, // to 152
      23, // to L40
      24, // to 152
      25, // to L45
      43, // to l152
      44, // to 46
      45, // to l152

      46, // to l114

      190, // to l152
      191, // to 121
      210,
      211,
      212,
      213,
      214,

      224,
      225,
      226,
      227,
      232,
      233,
      234,
      235,
      236,
      237,
      238,
      239,
      240,
      241,
      242,

      255,
      256,

      269,
      270,
      285,
      286,
      287,
      288,
      289,
      290
    ],
    "bones-mtx-calc-execute": [19, 7],
    "foreground-draw": [0, 1, 126],
    "dma-add-process-drawable": [0, 136],
    "(anon-function 3 ruins-obs)": [14, 22],
    "(anon-function 0 target-death)": [
      50, // goto 52
      51, // goto L65
      63, // goto L47
      73, // goto L25
      78, // goto L46
      84, // goto L42
      95, // goto next
      96, // goto L36
      115, // goto L55
      121,
      131
    ],
    "(anon-function 4 gun-states)": [94, 96, 98],
    "target-board-handler": [13, 14, 18],
    "find-closest-circle-ray-intersection": [0, 4, 15, 16, 17, 18],
    "(method 18 nav-control)": [
      11, // L283
      12, // L300
      19, // L295
      20, // L293
      31, // weird jump back
      34 // weird jump no delay slot
    ],

    "(method 19 nav-control)": [9, 10],
    "(method 19 nav-mesh)": [7],
    "(method 18 nav-mesh)": [9],
    "(method 40 nav-state)": [1, 2],
    "(method 45 nav-mesh)": [5, 6],
    "(method 43 nav-mesh)": [0, 1, 2, 12, 13, 14, 15, 16, 17, 18, 19, 20],
    "(anon-function 45 gungame-obs)": [0, 1, 6, 9, 14, 18, 21, 22, 30], // TODO - probably not the best
    "(method 142 grenadier)": [0, 1, 3],
    "(anon-function 34 predator)": [24],
    "(anon-function 57 crimson-guard-level)": [22],
    "(method 48 rigid-body-object)": [0, 1, 2, 3, 4, 5],
    "(method 15 rigid-body)": [0, 1, 2, 5],
    "(method 63 collide-shape-moving)": [
      0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 14, 28, 38, 39, 40, 44
    ],
    "string-word-wrap": [1, 2, 6],
    "(method 37 vehicle)": [0, 1, 10, 11, 12, 13, 15, 16],
    "(method 123 vehicle)": [
      0, 1, 2, 3, 4, 7, 8, 9, 10, 17, 19, 20, 23, 26, 30, 31, 32, 33, 34
    ],
    "(method 122 vehicle)": [0, 1, 10, 11, 17, 18, 19, 20, 21, 22, 24, 25],
    "(method 48 vehicle)": [
      0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 16, 17, 23, 24, 29, 30, 31
    ],
    "(method 11 vehicle-hud-requests)": [0, 6, 7, 10, 11, 12],
    "(method 17 traffic-manager)": [
      0, 4, 7, 17, 23, 25, 26, 27, 28, 39, 42, 43, 44
    ],
    "(anon-function 12 vehicle-states)": [0, 1, 2, 3],
    "(method 45 traffic-engine)": [5, 8],
    "(method 15 city-level-info)": [0, 1, 2, 6, 7, 9, 11, 13],
    "(method 59 traffic-engine)": [5, 6, 7, 8, 9, 10],
    "(method 10 traffic-suppressor)": [0, 1, 2, 4],
    "(method 18 traffic-tracker)": [2, 3, 5, 6, 7, 8],
    "(method 181 gator)": [
      2, 3, 7, 10, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 25, 26, 30
    ],
    "(method 10 simple-sprite-system)": [0],
    "target-pilot-post": [0, 2, 4, 13, 16, 22, 27, 41],
    "(anon-function 0 ruins-obs)": [
      0, 5, 7, 12, 13, 15, 17, 23, 24, 33, 42, 45, 46, 53, 58
    ],
    "(anon-function 1 ruins-obs)": [
      1, 2, 4, 6, 7, 14, 17, 19, 22, 24, 26, 27, 29, 31, 33, 35
    ],
    "(anon-function 2 ruins-obs)": [7, 28, 37, 50, 51, 61, 62, 71],
    "(anon-function 62 sig0-course)": [0, 1, 5, 6],
    "(method 67 collide-shape-moving)": [0, 1, 2, 3, 11, 12, 13],
    "(anon-function 12 juicer)": [29, 30],
    "(anon-function 0 atoll-obs)": [11, 19, 20],
    "(method 74 spydroid)": [12], // stack spill delay slot
    "(anon-function 16 kid-states)": [4, 5],
    "(anon-function 23 kid-states)": [4, 5],
    "(anon-function 16 kor-states)": [4, 5],
    "(anon-function 23 kor-states)": [4, 5],
    "(method 18 mysql-nav-graph)": [0, 1, 2, 3, 4, 7, 8, 9, 14, 16],
    "(anon-function 2 rigid-body-queue)": [0, 1, 2, 3],
    "(method 15 rigid-body-queue)": [5, 6, 7, 8, 9, 10, 11],
    "(method 13 rigid-body-queue)": [5, 6, 7, 8, 9, 10, 11],
    "(method 11 rigid-body-queue)": [0, 5, 6, 7, 8, 9, 10, 11, 17, 18, 25],
    "(method 10 rigid-body-queue)": [0, 9, 10, 16, 24, 25, 26, 35, 36, 48],
    "(method 18 vehicle-controller)": [0, 1, 74, 75],
    "(method 15 vehicle-controller)": [0, 3, 5, 6, 7, 10],
    "(anon-function 41 guard)": [9],
    "(anon-function 10 metalhead-predator)": [24, 25],
    "(anon-function 10 errol-chal)": [6],
    "choose-next-branch-no-exit-level": [0, 6, 8, 12, 13, 16, 18, 26],
    "(anon-function 39 kidesc-states)": [4, 5],
    "(anon-function 56 hal2-course)": [4, 5],
    "(anon-function 58 hal2-course)": [74],
    "(method 142 gun-buoy)": [0, 2],
    "generic-merc-execute-all": [7, 15],
    "(method 9 editable-region)": [
      1, 2, 3, 4, 5, 10, 11, 15, 16, 17, 18, 21, 24, 25, 30, 31, 35, 36, 37, 38,
      39, 41, 42, 44, 45, 47, 48, 49, 51, 52, 53, 54
    ]
  },

  // 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": {
    "(method 10 menu-loading-option)": [[118, 1]],
    "(method 10 menu-insufficient-space-option)": [
      [63, 1],
      [103, 1]
    ],
    "(method 10 menu-secrets-insufficient-space-option)": [[55, 1]],
    "(method 10 menu-card-removed-option)": [[48, 1]],
    "(method 10 menu-format-card-option)": [[49, 1]],
    "(method 10 menu-create-game-option)": [[49, 1]],
    "(method 10 menu-error-auto-saving-option)": [[72, 1]],
    "(method 10 menu-error-loading-option)": [
      [64, 1],
      [99, 1]
    ],
    "(method 10 menu-insert-card-option)": [[48, 1]],
    "(method 16 fail-mission)": [
      [68, 1],
      [101, 1],
      [130, 1]
    ],
    "auto-save-post": [[158, 1]],
    "(method 30 training-manager)": [[53, 0]],
    "(trans course training-manager)": [
      [54, 0],
      [89, 0],
      [124, 0],
      [155, 0],
      [195, 0],
      [230, 0],
      [261, 0],
      [307, 0],
      [338, 0],
      [374, 0],
      [409, 0],
      [444, 0],
      [479, 0],
      [510, 0]
    ],
    "(method 17 hud-goal)": [[71, 0]],
    "(method 15 hud-miss)": [[44, 0]],
    "(method 28 hoverboard-training-manager)": [[53, 0]],
    "(method 29 hoverboard-training-manager)": [
      [48, 0],
      [83, 0],
      [118, 0],
      [153, 0],
      [184, 0],
      [224, 0],
      [259, 0],
      [294, 0],
      [325, 0],
      [365, 0],
      [400, 0],
      [431, 0],
      [477, 0],
      [508, 0]
    ],
    "(trans menu burning-bush)": [
      [294, 0],
      [378, 0],
      [406, 0],
      [434, 0],
      [462, 0],
      [490, 0],
      [518, 0],
      [350, 0]
    ],
    "(trans idle burning-bush)": [[171, 0]],
    "(anon-function 11 oracle-training)": [[79, 0]],
    "(anon-function 4 oracle-training)": [[79, 0]],
    "(anon-function 0 oracle-training)": [[79, 0]],
    "(anon-function 7 oracle-training)": [[79, 0]],
    "(method 27 sig-recorder)": [[93, 0]],
    "(method 15 hud-race-final-stats)": [[158, 1]],
    "(method 24 race-manager)": [[67, 1]],
    "(method 25 race-manager)": [
      [67, 1],
      [96, 1]
    ]
  },

  "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 16 sky-work)",
    "(method 17 sky-work)",
    "(method 32 sky-work)",
    "(method 33 sky-work)",
    "(method 28 sky-work)",
    "(method 29 sky-work)",
    "(method 30 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 11 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 33 spatial-hash)",
    "(method 39 spatial-hash)",
    "(method 36 spatial-hash)",
    "(method 37 spatial-hash)",
    "(method 35 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",
    "foreground-draw-hud",
    // shadow
    "shadow-execute",
    "shadow-add-double-edges",
    "shadow-add-double-tris",
    "shadow-add-single-tris",
    "shadow-add-single-edges",
    "shadow-add-facing-single-tris",
    "shadow-add-verts",
    "shadow-find-double-edges",
    "shadow-find-facing-double-tris",
    "shadow-find-single-edges",
    "shadow-find-facing-single-tris",
    "shadow-init-vars",
    "shadow-scissor-top",
    "shadow-scissor-edges",
    "shadow-calc-dual-verts",
    "shadow-xform-verts"
  ],

  "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": [
    ["vinroom", 0, 0],
    ["ctyfence", 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": []
}
