mirror of
https://github.com/open-goal/jak-project
synced 2026-08-16 21:28:00 -04:00
d402ad8918
The offline-tests are going to end up taking too long for jak 2, I did some rough math and by the end of it we'll be spending almost 2 minutes for a full offline test on my machine. These changes allow us to throw hardware at the problem Still some work to do to make the output nicer, but seems to be fairly reliable. By default it still uses 1 thread, use `num_threads` to change this.
441 lines
13 KiB
JSON
441 lines
13 KiB
JSON
{
|
|
////////////////////////////
|
|
// 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=",
|
|
"cspace-inspect-tree",
|
|
"(method 77 spyder)",
|
|
"(method 77 flamer)",
|
|
"(method 77 grenadier)",
|
|
"(method 224 bot)",
|
|
"(method 77 rapid-gunner)",
|
|
// until loop without nop:
|
|
"process-drawable-shock-skel-effect",
|
|
"target-history-print",
|
|
"display-list-control",
|
|
"anim-test-anim-list-handler",
|
|
"anim-test-sequence-list-handler",
|
|
"anim-tester-get-playing-item",
|
|
"(method 58 nav-graph-editor)",
|
|
"(method 120 enemy)",
|
|
"start-pilot-recorder",
|
|
"(anon-function 10 pilot-recorder)",
|
|
"(method 0 hover-nav-control)",
|
|
"(method 24 nav-network)",
|
|
"(method 11 predator-manager)",
|
|
"(method 9 bot-speech-list)",
|
|
"(method 9 bot-speech-list-shuffle)",
|
|
"(anon-function 10 sig-recorder)",
|
|
"(method 14 trail-graph)",
|
|
"(method 12 trail-graph)",
|
|
"(method 11 trail-graph)",
|
|
// 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 12 collide-mesh)",
|
|
"(method 17 collide-edge-work)",
|
|
"(method 42 collide-shape)",
|
|
"(method 12 collide-shape-prim-sphere)",
|
|
"(method 12 collide-shape-prim-mesh)",
|
|
"(method 18 collide-shape-prim-mesh)",
|
|
"(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",
|
|
|
|
"target-land-effect",
|
|
"target-standard-event-handler",
|
|
"(method 12 effect-control)",
|
|
"(method 11 effect-control)",
|
|
"(method 10 effect-control)",
|
|
"(method 10 bigmap)",
|
|
"(method 9 editable-region)", // condition branch assert hit
|
|
"(method 57 enemy)",
|
|
"(anon-function 10 meet-brutter)",
|
|
"(method 154 vehicle-racer)",
|
|
"(method 188 predator)",
|
|
"(anon-function 13 sig0-course)",
|
|
"(method 228 hal-sewer)",
|
|
"(method 154 vehicle-city-racer)",
|
|
"(method 53 squid)",
|
|
"(anon-function 11 fort-floor-spike)",
|
|
"(method 29 gun-dummy)",
|
|
"vehicle-explode-post",
|
|
"(method 158 vehicle-guard)",
|
|
"(method 207 metalhead-predator)",
|
|
"(anon-function 4 gun-states)",
|
|
"(anon-function 28 grenadier)",
|
|
"(anon-function 24 grenadier)",
|
|
// 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"
|
|
],
|
|
|
|
// 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],
|
|
"(method 22 gui-control)": [117, 121, 127, 128, 129, 139],
|
|
"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)": [0, 1, 2, 4, 5],
|
|
"(method 31 nav-mesh)": [0, 1, 2, 7, 8, 9, 11, 12, 13, 15],
|
|
"(method 45 nav-mesh)": [1, 4, 5, 8],
|
|
"(method 46 nav-mesh)": [1, 2, 3, 5],
|
|
"(method 32 nav-mesh)": [0, 1, 2, 4],
|
|
"(method 33 nav-mesh)": [0, 1, 2, 4],
|
|
"(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],
|
|
"(method 18 mysql-nav-graph)": [0, 1, 3, 4, 5, 9],
|
|
"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)": [1, 3, 6, 13, 17],
|
|
"(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
|
|
]
|
|
// "(method 67 collide-shape-moving)": [1, 7, 9, 10, 11, 12] - TODO
|
|
},
|
|
|
|
// 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]
|
|
]
|
|
},
|
|
|
|
"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)"
|
|
],
|
|
|
|
"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": [],
|
|
|
|
// 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": []
|
|
}
|