From 73a4f2c83eca20c24b6c8173c0f7a983a7af1da2 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Fri, 7 May 2021 20:54:20 -0400 Subject: [PATCH] decomp: `lights.gc` (#420) * scripts: Hack script to quickly identify the next goal_src file that hasn't been decomp'd yet * config: Delete old type_hints file * decomp: Decompile lights.gc * decomp-tests: Add offline tests and temporary forward defs * vs: Rename / add new offline test run config * decomp: Add formatted lights.gc source * decomp: Temporary define stub in geometry,gc * decomp: Cleanup `lights-group` handling --- .gitignore | 3 +- .vs/launch.vs.json | 29 +- decompiler/config/all-types.gc | 38 +- .../jak1_ntsc_black_label/label_types.jsonc | 6 + .../jak1_ntsc_black_label/stack_vars.jsonc | 4 +- .../jak1_ntsc_black_label/type_hints.jsonc | 274 ----- goal_src/engine/anim/bones.gc | 1 - goal_src/engine/geometry/geometry.gc | 2 + goal_src/engine/gfx/lights-h.gc | 7 +- goal_src/engine/gfx/lights.gc | 93 ++ goal_src/engine/math/vector.gc | 2 +- goal_src/engine/ps2/memcard-h.gc | 4 + scripts/jak1_file_list.py | 1087 ++++++++++++++++ scripts/make_empty_obj_files.py | 1088 +---------------- scripts/next-decomp-file.py | 35 + .../reference/all_forward_declarations.gc | 10 +- test/decompiler/reference/lights-h_REF.gc | 6 +- test/decompiler/reference/lights_REF.gc | 96 ++ test/offline/offline_test_main.cpp | 11 +- 19 files changed, 1384 insertions(+), 1412 deletions(-) delete mode 100644 decompiler/config/jak1_ntsc_black_label/type_hints.jsonc create mode 100644 scripts/jak1_file_list.py create mode 100644 scripts/next-decomp-file.py create mode 100644 test/decompiler/reference/lights_REF.gc diff --git a/.gitignore b/.gitignore index 820c430516..dd575f381a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ logs/* /result* \#*# -.#*# \ No newline at end of file +.#*# +*.pyc \ No newline at end of file diff --git a/.vs/launch.vs.json b/.vs/launch.vs.json index c4599d8d9f..7c5472ca37 100644 --- a/.vs/launch.vs.json +++ b/.vs/launch.vs.json @@ -4,61 +4,62 @@ "type" : "default", "project" : "CMakeLists.txt", "projectTarget" : "goalc-test.exe (bin\\goalc-test.exe)", - "name" : "Run Tests - Summary", + "name" : "Tests - Unit-Tests - Summary", "args" : ["--gtest_brief=1"] }, { "type" : "default", "project" : "CMakeLists.txt", "projectTarget" : "goalc-test.exe (bin\\goalc-test.exe)", - "name" : "Run Tests - Verbose", + "name" : "Tests - Unit-Tests - Verbose", "args" : ["--gtest_brief=0"] }, { "type" : "default", "project" : "CMakeLists.txt", "projectTarget" : "goalc-test.exe (bin\\goalc-test.exe)", - "name" : "Run Draft Tests - Verbose", + "name" : "Tests - Draft Tests - Verbose", "args" : ["--gtest_brief=0", "--gtest_filter=\"*Draft*\""] }, + { + "type" : "default", + "project" : "CMakeLists.txt", + "projectTarget" : "offline-test.exe (bin\\offline-test.exe)", + "name" : "Tests - Offline Tests", + "args" : ["${workspaceRoot}/iso_data/jak1"] + }, { "type" : "default", "project" : "CMakeLists.txt", "projectTarget" : "gk.exe (bin\\gk.exe)", - "name" : "Run Runtime (no kernel)", + "name" : "Run - Runtime (no kernel)", "args" : [ "-fakeiso", "-debug", "-nokernel", "-v", "-nodisplay" ] }, { "type" : "default", "project" : "CMakeLists.txt", "projectTarget" : "gk.exe (bin\\gk.exe)", - "name" : "Run Runtime (with kernel)", + "name" : "Run - Runtime (with kernel)", "args" : [ "-fakeiso", "-debug", "-v", "-nodisplay" ] }, { "type" : "default", "project" : "CMakeLists.txt", "projectTarget" : "goalc.exe (bin\\goalc.exe)", - "name" : "Build Compiler" + "name" : "Run - REPL" }, { "type" : "default", "project" : "CMakeLists.txt", "projectTarget" : "decompiler.exe (bin\\decompiler.exe)", - "name" : "Build Decompiler" - }, - { - "type" : "default", - "project" : "CMakeLists.txt", - "projectTarget" : "decompiler.exe (bin\\decompiler.exe)", - "name" : "Run Decompiler - Jak 1", + "name" : "Run - Decompiler - Jak 1", "args" : [ "${workspaceRoot}/decompiler/config/jak1_ntsc_black_label.jsonc", "${workspaceRoot}/iso_data/jak1", "${workspaceRoot}/decompiler_out/jak1"] }, { "type" : "default", "project" : "CMakeLists.txt", "projectTarget" : "decompiler.exe (bin\\decompiler.exe)", - "name" : "Run Decompiler - Jak 2", + "name" : "Run - Decompiler - Jak 2", "args" : [ "${workspaceRoot}/decompiler/config/jak2_ntsc_v1.jsonc", "${workspaceRoot}/iso_data/jak2", "${workspaceRoot}/decompiler_out/jak2"] } ] diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 482158e0e9..de8e00ca30 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -1607,7 +1607,7 @@ (define-extern matrix-rot-diff! (function matrix matrix matrix float)) (define-extern quaternion-seek (function quaternion quaternion quaternion float quaternion)) (define-extern vector-deg-seek (function vector vector vector none)) -(define-extern vector-deg-slerp (function vector vector vector float float vector)) +(define-extern vector-deg-slerp (function vector vector vector float vector)) (define-extern vector-vector-deg-slerp! function) ;; stack spills! (define-extern normal-of-plane (function vector vector vector vector vector)) (define-extern vector-3pt-cross! (function vector vector vector vector)) @@ -5737,9 +5737,9 @@ ;; lights-h (deftype vu-lights (structure) - ((direction uint128 3 :offset-assert 0) - (color uint128 3 :offset-assert 48) - (ambient vector :inline :offset-assert 96) + ((direction vector 3 :inline :offset-assert 0) + (color vector 3 :inline :offset-assert 48) + (ambient vector :inline :offset-assert 96) ) :method-count-assert 9 :size-assert #x70 @@ -5824,12 +5824,18 @@ (dir1 light :inline :offset-assert 48) (dir2 light :inline :offset-assert 96) (ambi light :inline :offset-assert 144) + (lights light 4 :inline :offset 0) ) :method-count-assert 9 :size-assert #xc0 :flag-assert #x9000000c0 ) +;; lights + + + + ;;;;;;;;;;; ;; ocean-h ;;;;;;;;;;; @@ -7355,7 +7361,7 @@ :flag-assert #x9000001a0 ) -; generic-merc-h +;; generic-merc-h (deftype generic-merc-input (structure) ((geo-tag generic-merc-tag :inline :offset-assert 0) (geo-block uint8 1296 :offset-assert 16) @@ -33642,15 +33648,6 @@ ;;(define-extern *gsf-buffer* object) ;; unknown type ;;(define-extern generic-consts object) ;; unknown type ;;(define-extern generic-envmap-consts object) ;; unknown type -;;(define-extern vu-lights object) ;; unknown type -;;(define-extern light-ellipse object) ;; unknown type -;;(define-extern light-array object) ;; unknown type -;;(define-extern light-volume-array object) ;; unknown type -;;(define-extern light-volume object) ;; unknown type -;;(define-extern light-group object) ;; unknown type -;;(define-extern light object) ;; unknown type -;;(define-extern light-volume-sphere object) ;; unknown type -;;(define-extern light-volume-planes object) ;; unknown type (define-extern ocean-trans-indices type) (define-extern ocean-work type) ;;(define-extern ocean-mid-upload object) ;; unknown type @@ -33851,7 +33848,6 @@ ;;(define-extern mc-file-info object) ;; unknown type ;;(define-extern mc-run object) ;; unknown type -;;(define-extern mc-get-slot-info object) ;; unknown type ;;(define-extern mc-check-result object) ;; unknown type (define-extern game-bank type) ;;(define-extern load-state object) ;; unknown type @@ -33911,12 +33907,12 @@ ;;(define-extern task object) ;; unknown type ;;(define-extern base object) ;; unknown type ;;(define-extern rot object) ;; unknown type -(define-extern vu-lights-default! (function light-group none)) -(define-extern light-group-slerp function) -(define-extern light-slerp function) -(define-extern light-group-process! function) -;;(define-extern *default-lights* object) ;; unknown type -(define-extern vu-lights<-light-group! function) +(define-extern vu-lights-default! (function vu-lights vu-lights)) +(define-extern light-group-slerp (function light-group light-group light-group float light-group)) +(define-extern light-slerp (function light light light float light)) +(define-extern light-group-process! (function vu-lights light-group vector vector none)) +(define-extern *default-lights* vu-lights) +(define-extern vu-lights<-light-group! (function vu-lights light-group none)) (define-extern time-to-apex (function float float int)) (define-extern time-to-ground (function float float float int)) (define-extern *standard-dynamics* dynamics) diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 93f76e15bd..d4083e1c35 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -432,5 +432,11 @@ ["L359", "float", true], ["L358", "float", true], ["L361", "float", true] + ], + + "lights": [ + ["L8", "float", true], + ["L9", "float", true], + ["L10", "float", true] ] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_vars.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_vars.jsonc index b21e2a6831..cdefba0911 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_vars.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_vars.jsonc @@ -141,5 +141,7 @@ //"(method 0 fact-info)": [[16, "res-tag"]], - "(method 10 oscillating-vector)":[[16, "vector"]] + "(method 10 oscillating-vector)":[[16, "vector"]], + + "show-mc-info": [[16, "mc-slot-info"]] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_hints.jsonc b/decompiler/config/jak1_ntsc_black_label/type_hints.jsonc deleted file mode 100644 index 2a5be3f1bc..0000000000 --- a/decompiler/config/jak1_ntsc_black_label/type_hints.jsonc +++ /dev/null @@ -1,274 +0,0 @@ -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// THIS FILE IS NO LONGER USED!!!!!!!!!!!!!!!!!!!!! -// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -// see type_casts.jsonc instead. - -{ - "(method 2 array)":[ - [23, ["gp", "(array int32)"]], - [43, ["gp", "(array uint32)"]], - [63, ["gp", "(array int64)"]], - [83, ["gp", "(array uint64)"]], - [102, ["gp", "(array int8)"]], - [121, ["gp", "(array uint8)"]], - [141, ["gp", "(array int16)"]], - [161, ["gp", "(array uint16)"]], - [186, ["gp", "(array uint128)"]], - [204, ["gp", "(array int32)"]], - [223, ["gp", "(array float)"]], - [232, ["gp", "(array float)"]], - [249, ["gp", "(array basic)"]], - [258, ["gp", "(array basic)"]] - ], - - "(method 3 array)":[ - [44, ["gp", "(array int32)"]], - [62, ["gp", "(array uint32)"]], - [80, ["gp", "(array int64)"]], - [98, ["gp", "(array uint64)"]], - [115, ["gp", "(array int8)"]], - [132, ["gp", "(array int8)"]], // bug in game - [150, ["gp", "(array int16)"]], - [168, ["gp", "(array uint16)"]], - [190, ["gp", "(array uint128)"]], - [203, ["gp", "(array int32)"]], - [225, ["gp", "(array float)"]], - [242, ["gp", "(array basic)"]] - ], - - "(method 2 handle)":[ - [10, ["a2", "(pointer process)"]], - [11, ["a3", "process"]], - [12, ["v1", "int"]], - [16, ["gp", "int"]] - ], - - "(method 3 handle)":[ - [10, ["gp", "int"]] - ], - - "(method 0 cpu-thread)":[ - [13, ["v0", "cpu-thread"]] - ], - - "(method 0 dead-pool-heap)":[ - [60, ["v0", "int"]], // a lie, actually the 115 is an align16 constant propagated on addr of heap start. - [61, ["a0", "pointer"], ["v0", "dead-pool-heap"]] - ], - - "(method 21 dead-pool-heap)":[ - [5, ["v1", "pointer"]], - [13, ["a0", "pointer"]], - [25, ["v1", "pointer"]] - ], - - "(method 5 dead-pool-heap)":[ - [3, ["v1", "int"], ["a0", "int"]] - ], - - "(method 0 process)":[ - [12, ["a0", "int"]], - [13, ["v0", "process"]] - ], - - "inspect-process-heap":[ - [4, ["s5", "basic"]], - [17, ["s5", "int"]] - ], - - "return-from-thread-dead":[ - [0, ["s6", "process"]] - ], - - "(method 14 dead-pool)":[ - // bug in game! - [24, ["v1", "(pointer process-tree)"]], - [30, ["s4", "(pointer process-tree)"]] - ], - - "throw":[ - [20, ["s4", "protect-frame"]] // type case - ], - - "(method 0 protect-frame)":[ - [0, ["a0", "int"]], - [1, ["v0", "protect-frame"]] - ], - - "(method 9 process)":[ - [43, ["s5", "process"]] - ], - - "(method 10 process)":[ - [24, ["s4", "protect-frame"]] - ], - - "enter-state":[ - [67, ["s0", "protect-frame"]] - ], - - "name=":[ - [24, ["a1", "symbol"]], - [39, ["a0", "symbol"]] - ], - - "string-cat-to-last-char":[ - [3, ["s5", "(pointer uint8)"]], - [4, ["s5", "string"]] - ], - - "string-strip-trailing-whitespace!":[ - [15, ["v1", "(pointer uint8)"]] - ], - - "(anon-function 15 hud)":[ - [0, ["s6", "hud"]] - ], - - "dma-send-to-spr":[ - [5, ["s5", "dma-bank-spr"]]], - "dma-send-to-spr-no-flush":[ - [5, ["s5", "dma-bank-spr"]]], - "dma-send-from-spr":[ - [5, ["s5", "dma-bank-spr"]]], - "dma-send-from-spr-no-flush":[ - [5, ["s5", "dma-bank-spr"]]], - "dma-initialize":[ - [1, ["v1", "vif-bank"]], - [6, ["a0", "vif-bank"]], - [8, ["v1", "vif-bank"]], - [13, ["a0", "vif-bank"]]], - - "clear-vu0-mem":[ - [1, ["v1", "(pointer uint32)"]] - ], - "clear-vu1-mem":[ - [1, ["v1", "(pointer uint32)"]] - ], - - "dump-vu1-mem":[ - [1, ["gp", "(pointer uint32)"]]], - - "dump-vu1-range":[ - [3, ["s4", "(pointer uint32)"]]], - - "ultimate-memcpy":[ - [5, ["s3", "dma-bank-spr"],["s4", "dma-bank-spr"]] - ], - - "dma-buffer-add-vu-function":[ - [13, ["v1", "uint"]], - [23, ["t2", "(pointer uint32)"]] - ], - - "dma-buffer-add-buckets":[ - [1, ["v0", "dma-bucket"]], - [5, ["v1", "uint"]], - [6, ["t0", "uint"]], - [9, ["v1", "dma-bucket"]], - [11, ["v1", "uint"]], - [12, ["v1", "dma-bucket"]] - ], - - "dma-buffer-patch-buckets":[ - [7, ["a0", "uint"]], - [11, ["a0", "dma-bucket"]], - [14, ["a0", "uint"]], - [15, ["a0", "dma-bucket"]] - ], - - "dma-bucket-insert-tag":[ - [1, ["a0", "uint"]], - [2, ["v1", "dma-bucket"]] - ], - - "default-buffer-init":[ - [9, ["a1", "gs-gif-tag"]], - [15, ["a1", "pointer"]], - [16, ["a1", "gs-gif-tag"]], - [19, ["a1", "gs-gif-tag"]], - [24, ["a1", "pointer"]], - [25, ["a1", "gs-gif-tag"]], - [31, ["a1", "(pointer uint64)"]], - [68, ["a0", "gs-gif-tag"]], - [72, ["a0", "pointer"]] - ], - - "glst-find-node-by-name":[ - [17, ["s5", "glst-named-node"]] - ], - - "glst-length-of-longest-name":[ - [17, ["s5", "glst-named-node"]] - ], - - "move-target-from-pad":[ - [2, ["sp", "int"]], - [3, ["s4", "vector"]] - ], - - "(method 0 engine)":[ - [39, ["v0", "int"]], - [40, ["v0", "engine"]] - ], - - "(method 12 engine)":[ - [7, ["s4", "connection"]] - ], - - "(method 13 engine)":[ - [7, ["s4", "connection"]] - ], - - "(method 15 engine)":[ - [6, ["v1", "connection"]]], - - "(method 19 engine)":[ - [8, ["a0", "connection"]]], - "(method 20 engine)":[ - [8, ["a0", "connection"]]], - - "(method 0 collide-shape-prim-sphere)":[ - [4, ["v0", "collide-shape-prim-sphere"]] - ], - - "(method 0 collide-shape-prim-mesh)":[ - [6, ["v0", "collide-shape-prim-mesh"]] - ], - "(method 0 collide-shape-prim-group)":[ - [11, ["v0", "collide-shape-prim-group"]] - ], - - "(method 11 touching-prims-entry-pool)":[ - [5, ["a1", "(inline-array touching-prims-entry)"]]], - - "(method 0 touching-list)":[ - [6, ["v0", "touching-list"]]], - - "str-load":[ - [21, ["s2", "load-chunk-msg"]] - ], - - "str-play-async":[ - [13, ["s4", "load-chunk-msg"]] - ], - - "str-play-stop":[ - [7, ["v0", "load-chunk-msg"]] - ], - - "str-play-queue":[ - [19, ["v0", "load-chunk-msg"]] - ], - - "str-ambient-play":[ - [7, ["v0", "load-chunk-msg"]] - ], - - "str-ambient-stop":[ - [7, ["v0", "load-chunk-msg"]] - ] - - - -} \ No newline at end of file diff --git a/goal_src/engine/anim/bones.gc b/goal_src/engine/anim/bones.gc index 2ecb8cab16..394e98aef1 100644 --- a/goal_src/engine/anim/bones.gc +++ b/goal_src/engine/anim/bones.gc @@ -4,4 +4,3 @@ ;; name: bones.gc ;; name in dgo: bones ;; dgos: GAME, ENGINE - diff --git a/goal_src/engine/geometry/geometry.gc b/goal_src/engine/geometry/geometry.gc index f1fc90803e..4135dac2a0 100644 --- a/goal_src/engine/geometry/geometry.gc +++ b/goal_src/engine/geometry/geometry.gc @@ -5,3 +5,5 @@ ;; name in dgo: geometry ;; dgos: GAME, ENGINE +;; TODO - temporary for lights.gc +(define-extern vector-deg-slerp (function vector vector vector float vector)) \ No newline at end of file diff --git a/goal_src/engine/gfx/lights-h.gc b/goal_src/engine/gfx/lights-h.gc index 36940de7f1..4afba9fb98 100644 --- a/goal_src/engine/gfx/lights-h.gc +++ b/goal_src/engine/gfx/lights-h.gc @@ -6,9 +6,9 @@ ;; dgos: GAME, ENGINE (deftype vu-lights (structure) - ((direction uint128 3 :offset-assert 0) - (color uint128 3 :offset-assert 48) - (ambient vector :inline :offset-assert 96) + ((direction vector 3 :inline :offset-assert 0) + (color vector 3 :inline :offset-assert 48) + (ambient vector :inline :offset-assert 96) ) :method-count-assert 9 :size-assert #x70 @@ -102,6 +102,7 @@ (dir1 light :inline :offset-assert 48) (dir2 light :inline :offset-assert 96) (ambi light :inline :offset-assert 144) + (lights light 4 :inline :offset 0) ) :method-count-assert 9 :size-assert #xc0 diff --git a/goal_src/engine/gfx/lights.gc b/goal_src/engine/gfx/lights.gc index 92a5529ade..cdc207d9c1 100644 --- a/goal_src/engine/gfx/lights.gc +++ b/goal_src/engine/gfx/lights.gc @@ -5,3 +5,96 @@ ;; name in dgo: lights ;; dgos: GAME, ENGINE +(defun light-slerp ((out light) (a light) (b light) (alpha float)) + "Linearly interpolate between two light's vectors. Alpha is clamped between 0 - 1." + (let ((clamped-alpha (fmax 0.0 (fmin 1.0 alpha)))) + (vector-lerp! (-> out color) (-> a color) (-> b color) clamped-alpha) + (vector-deg-slerp + (-> out direction) + (-> a direction) + (-> b direction) + clamped-alpha + ) + (let ((f0-2 (-> a levels x)) + (f1-2 (-> b levels x)) + ) + (set! (-> out levels x) (+ f0-2 (* clamped-alpha (- f1-2 f0-2)))) + ) + ) + out + ) + +(defun light-group-slerp ((out light-group) (a light-group) (b light-group) (alpha float)) + "Linearly interpolate between each of the 4 vectors of two light-groups. + Alpha is clamped between 0 - 1." + (dotimes (vec-index 4) + (light-slerp + (-> out lights vec-index) + (-> a lights vec-index) + (-> b lights vec-index) + alpha + ) + ) + out + ) + +;; TODO - temporary for lights.gc +(define-extern vu-lights<-light-group! (function vu-lights light-group none)) + +(defun light-group-process! ((lights vu-lights) (group light-group) (vector-1 vector) (vector-2 vector)) + "Unused - Seems to do effectively nothing" + ;; NOTE - dead code + ;; (let ((f0-0 (rotate-y<-vector+vector arg3 arg2))) + ;; ) + (vu-lights<-light-group! lights group) + (none) + ) + +(define *default-lights* (the-as vu-lights (new 'global 'vu-lights))) + +(defun vu-lights-default! ((lights vu-lights)) + "Initialize a lights object with default values" + (let ((ambient-light (-> lights ambient))) + (set! (-> ambient-light x) 0.3) + (set! (-> ambient-light y) 0.3) + (set! (-> ambient-light z) 0.3) + (set! (-> ambient-light w) 1.0) + ) + (let ((red (-> lights color))) + (set! (-> red 0 x) 1.0) + (set! (-> red 0 y) 1.0) + (set! (-> red 0 z) 1.0) + (set! (-> red 0 w) 1.0) + ) + (let ((green (-> lights color 1))) + (set! (-> green x) 0.2) + (set! (-> green y) 0.2) + (set! (-> green z) 0.2) + (set! (-> green w) 1.0) + ) + (let ((blue (-> lights color 2))) + (set! (-> blue x) 0.0) + (set! (-> blue y) 0.0) + (set! (-> blue z) 0.0) + (set! (-> blue w) 1.0) + ) + (let ((dir-light-x (-> lights direction))) + (set! (-> dir-light-x 0 x) 1.0) + (set! (-> dir-light-x 0 y) 0.0) + (set! (-> dir-light-x 0 z) 0.0) + (set! (-> dir-light-x 0 w) 1.0) + ) + (let ((dir-light-y (-> lights direction 1))) + (set! (-> dir-light-y x) 0.0) + (set! (-> dir-light-y y) 1.0) + (set! (-> dir-light-y z) 0.0) + (set! (-> dir-light-y w) 1.0) + ) + (let ((dir-light-z (-> lights direction 2))) + (set! (-> dir-light-z x) 0.0) + (set! (-> dir-light-z y) 0.0) + (set! (-> dir-light-z z) 1.0) + (set! (-> dir-light-z w) 1.0) + ) + lights + ) diff --git a/goal_src/engine/math/vector.gc b/goal_src/engine/math/vector.gc index 767b72556f..4e5bba97f3 100644 --- a/goal_src/engine/math/vector.gc +++ b/goal_src/engine/math/vector.gc @@ -997,7 +997,7 @@ ) (defun vector-lerp! ((out vector) (a vector) (b vector) (alpha float)) - "Linearly interpolate between two vectors. Alpha isn't clampled. + "Linearly interpolate between two vectors. Alpha isn't clamped. w will be set to 1." (rlet ((vf0 :class vf) (vf1 :class vf) diff --git a/goal_src/engine/ps2/memcard-h.gc b/goal_src/engine/ps2/memcard-h.gc index 2d2e89e9dc..f070f39197 100644 --- a/goal_src/engine/ps2/memcard-h.gc +++ b/goal_src/engine/ps2/memcard-h.gc @@ -62,3 +62,7 @@ ) v0-0 ) + +;; TODO - show-mc-info - failed to decompile +;; WARN: Type Propagation failed: Failed to find a stack variable at offset 16 +;; WARN: Type Propagation failed: Type analysis failed \ No newline at end of file diff --git a/scripts/jak1_file_list.py b/scripts/jak1_file_list.py new file mode 100644 index 0000000000..eb95ca11b4 --- /dev/null +++ b/scripts/jak1_file_list.py @@ -0,0 +1,1087 @@ +file_list = [["gcommon", "gcommon", 3, ["KERNEL"], "kernel"], +["gstring-h", "gstring-h", 3, ["KERNEL"], "kernel"], +["gkernel-h", "gkernel-h", 3, ["KERNEL"], "kernel"], +["gkernel", "gkernel", 3, ["KERNEL"], "kernel"], +["pskernel", "pskernel", 3, ["KERNEL"], "kernel"], +["gstring", "gstring", 3, ["KERNEL"], "kernel"], +["dgo-h", "dgo-h", 3, ["KERNEL"], "kernel"], +["gstate", "gstate", 3, ["KERNEL"], "kernel"], +["types-h", "types-h", 3, ["GAME", "ENGINE"], "engine/util"], +["vu1-macros", "vu1-macros", 3, ["GAME", "ENGINE"], "engine/ps2"], +["math", "math", 3, ["GAME", "ENGINE"], "engine/math"], +["vector-h", "vector-h", 3, ["GAME", "ENGINE"], "engine/math"], +["gravity-h", "gravity-h", 3, ["GAME", "ENGINE"], "engine/physics"], +["bounding-box-h", "bounding-box-h", 3, ["GAME", "ENGINE"], "engine/geometry"], +["matrix-h", "matrix-h", 3, ["GAME", "ENGINE"], "engine/math"], +["quaternion-h", "quaternion-h", 3, ["GAME", "ENGINE"], "engine/math"], +["euler-h", "euler-h", 3, ["GAME", "ENGINE"], "engine/math"], +["transform-h", "transform-h", 3, ["GAME", "ENGINE"], "engine/math"], +["geometry-h", "geometry-h", 3, ["GAME", "ENGINE"], "engine/geometry"], +["trigonometry-h", "trigonometry-h", 3, ["GAME", "ENGINE"], "engine/math"], +["transformq-h", "transformq-h", 3, ["GAME", "ENGINE"], "engine/math"], +["bounding-box", "bounding-box", 3, ["GAME", "ENGINE"], "engine/geometry"], +["matrix", "matrix", 3, ["GAME", "ENGINE"], "engine/math"], +["transform", "transform", 3, ["GAME", "ENGINE"], "engine/math"], +["quaternion", "quaternion", 3, ["GAME", "ENGINE"], "engine/math"], +["euler", "euler", 3, ["GAME", "ENGINE"], "engine/math"], +["geometry", "geometry", 3, ["GAME", "ENGINE"], "engine/geometry"], +["trigonometry", "trigonometry", 3, ["GAME", "ENGINE"], "engine/math"], +["gsound-h", "gsound-h", 3, ["GAME", "ENGINE"], "engine/sound"], +["timer-h", "timer-h", 3, ["GAME", "ENGINE"], "engine/ps2"], +["timer", "timer", 3, ["GAME", "ENGINE"], "engine/ps2"], +["vif-h", "vif-h", 3, ["GAME", "ENGINE"], "engine/ps2"], +["dma-h", "dma-h", 3, ["GAME", "ENGINE"], "engine/dma"], +["video-h", "video-h", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], +["vu1-user-h", "vu1-user-h", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], +["dma", "dma", 3, ["GAME", "ENGINE"], "engine/dma"], +["dma-buffer", "dma-buffer", 3, ["GAME", "ENGINE"], "engine/dma"], +["dma-bucket", "dma-bucket", 3, ["GAME", "ENGINE"], "engine/dma"], +["dma-disasm", "dma-disasm", 3, ["GAME", "ENGINE"], "engine/dma"], +["pad", "pad", 3, ["GAME", "ENGINE"], "engine/ps2"], +["gs", "gs", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], +["display-h", "display-h", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], +["vector", "vector", 3, ["GAME", "ENGINE"], "engine/math"], +["file-io", "file-io", 3, ["GAME", "ENGINE"], "engine/load"], +["loader-h", "loader-h", 3, ["GAME", "ENGINE"], "engine/load"], +["texture-h", "texture-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["level-h", "level-h", 3, ["GAME", "ENGINE"], "engine/level"], +["math-camera-h", "math-camera-h", 3, ["GAME", "ENGINE"], "engine/camera"], +["math-camera", "math-camera", 3, ["GAME", "ENGINE"], "engine/camera"], +["font-h", "font-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["decomp-h", "decomp-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["display", "display", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], +["connect", "connect", 3, ["GAME", "ENGINE"], "engine/engine"], +["text-h", "text-h", 3, ["GAME", "ENGINE"], "engine/ui"], +["settings-h", "settings-h", 3, ["GAME", "ENGINE"], "engine/game"], +["capture", "capture", 3, ["GAME", "ENGINE"], "engine/gfx"], +["memory-usage-h", "memory-usage-h", 3, ["GAME", "ENGINE"], "engine/debug"], +["texture", "texture", 3, ["GAME", "ENGINE"], "engine/gfx"], +["main-h", "main-h", 3, ["GAME", "ENGINE"], "engine/game"], +["mspace-h", "mspace-h", 3, ["GAME", "ENGINE"], "engine/anim"], +["drawable-h", "drawable-h", 3, ["GAME", "ENGINE"], "engine/draw"], +["drawable-group-h", "drawable-group-h", 3, ["GAME", "ENGINE"], "engine/draw"], +["drawable-inline-array-h", "drawable-inline-array-h", 3, ["GAME", "ENGINE"], "engine/draw"], +["draw-node-h", "draw-node-h", 3, ["GAME", "ENGINE"], "engine/draw"], +["drawable-tree-h", "drawable-tree-h", 3, ["GAME", "ENGINE"], "engine/draw"], +["drawable-actor-h", "drawable-actor-h", 3, ["GAME", "ENGINE"], "engine/draw"], +["drawable-ambient-h", "drawable-ambient-h", 3, ["GAME", "ENGINE"], "engine/draw"], +["game-task-h", "game-task-h", 3, ["GAME", "ENGINE"], "engine/game/task"], +["hint-control-h", "hint-control-h", 3, ["GAME", "ENGINE"], "engine/game/task"], +["generic-h", "generic-h", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], +["lights-h", "lights-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["ocean-h", "ocean-h", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["ocean-trans-tables", "ocean-trans-tables", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["ocean-tables", "ocean-tables", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["ocean-frames", "ocean-frames", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["sky-h", "sky-h", 3, ["GAME", "ENGINE"], "engine/gfx/sky"], +["mood-h", "mood-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["time-of-day-h", "time-of-day-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["art-h", "art-h", 3, ["GAME", "ENGINE"], "engine/data"], +["generic-vu1-h", "generic-vu1-h", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], +["merc-h", "merc-h", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], +["generic-merc-h", "generic-merc-h", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], +["generic-tie-h", "generic-tie-h", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], +["generic-work-h", "generic-work-h", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], +["shadow-cpu-h", "shadow-cpu-h", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], +["shadow-vu1-h", "shadow-vu1-h", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], +["memcard-h", "memcard-h", 3, ["GAME", "ENGINE"], "engine/ps2"], +["game-info-h", "game-info-h", 3, ["GAME", "ENGINE"], "engine/game"], +["wind-h", "wind-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["prototype-h", "prototype-h", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], +["joint-h", "joint-h", 3, ["GAME", "ENGINE"], "engine/anim"], +["bones-h", "bones-h", 3, ["GAME", "ENGINE"], "engine/anim"], +["engines", "engines", 3, ["GAME", "ENGINE"], "engine/engine"], +["res-h", "res-h", 3, ["GAME", "ENGINE"], "engine/data"], +["res", "res", 3, ["GAME", "ENGINE"], "engine/data"], +["lights", "lights", 3, ["GAME", "ENGINE"], "engine/gfx"], +["dynamics-h", "dynamics-h", 3, ["GAME", "ENGINE"], "engine/physics"], +["surface-h", "surface-h", 3, ["GAME", "ENGINE"], "engine/target"], +["pat-h", "pat-h", 3, ["GAME", "ENGINE"], "engine/target"], +["fact-h", "fact-h", 3, ["GAME", "ENGINE"], "engine/game"], +["aligner-h", "aligner-h", 3, ["GAME", "ENGINE"], "engine/anim"], +["game-h", "game-h", 3, ["GAME", "ENGINE"], "engine/game"], +["generic-obs-h", "generic-obs-h", 3, ["GAME", "ENGINE"], "engine/game"], +["pov-camera-h", "pov-camera-h", 3, ["GAME", "ENGINE"], "engine/camera"], +["sync-info-h", "sync-info-h", 3, ["GAME", "ENGINE"], "engine/util"], +["smush-control-h", "smush-control-h", 3, ["GAME", "ENGINE"], "engine/util"], +["trajectory-h", "trajectory-h", 3, ["GAME", "ENGINE"], "engine/physics"], +["debug-h", "debug-h", 3, ["GAME", "ENGINE"], "engine/debug"], +["joint-mod-h", "joint-mod-h", 3, ["GAME", "ENGINE"], "engine/target"], +["collide-func-h", "collide-func-h", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-mesh-h", "collide-mesh-h", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-shape-h", "collide-shape-h", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-target-h", "collide-target-h", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-touch-h", "collide-touch-h", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-edge-grab-h", "collide-edge-grab-h", 3, ["GAME", "ENGINE"], "engine/collide"], +["process-drawable-h", "process-drawable-h", 3, ["GAME", "ENGINE"], "engine/draw"], +["effect-control-h", "effect-control-h", 3, ["GAME", "ENGINE"], "engine/game"], +["collide-frag-h", "collide-frag-h", 3, ["GAME", "ENGINE"], "engine/collide"], +["projectiles-h", "projectiles-h", 3, ["GAME", "ENGINE"], "engine/game"], +["target-h", "target-h", 3, ["GAME", "ENGINE"], "engine/target"], +["depth-cue-h", "depth-cue-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["stats-h", "stats-h", 3, ["GAME", "ENGINE"], "engine/debug"], +["bsp-h", "bsp-h", 3, ["GAME", "ENGINE"], "engine/gfx/vis"], +["collide-cache-h", "collide-cache-h", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-h", "collide-h", 3, ["GAME", "ENGINE"], "engine/collide"], +["shrubbery-h", "shrubbery-h", 3, ["GAME", "ENGINE"], "engine/gfx/shrub"], +["tie-h", "tie-h", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], +["tfrag-h", "tfrag-h", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], +["background-h", "background-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["subdivide-h", "subdivide-h", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], +["entity-h", "entity-h", 3, ["GAME", "ENGINE"], "engine/entity"], +["sprite-h", "sprite-h", 3, ["GAME", "ENGINE"], "engine/gfx/sprite"], +["shadow-h", "shadow-h", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], +["eye-h", "eye-h", 3, ["GAME", "ENGINE"], "engine/gfx"], +["sparticle-launcher-h", "sparticle-launcher-h", 3, ["GAME", "ENGINE"], "engine/sparticle"], +["sparticle-h", "sparticle-h", 3, ["GAME", "ENGINE"], "engine/sparticle"], +["actor-link-h", "actor-link-h", 3, ["GAME", "ENGINE"], "engine/entity"], +["camera-h", "camera-h", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-debug-h", "cam-debug-h", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-interface-h", "cam-interface-h", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-update-h", "cam-update-h", 3, ["GAME", "ENGINE"], "engine/camera"], +["assert-h", "assert-h", 3, ["GAME", "ENGINE"], "engine/debug"], +["hud-h", "hud-h", 3, ["GAME", "ENGINE"], "engine/ui"], +["progress-h", "progress-h", 3, ["GAME", "ENGINE"], "engine/ui"], +["rpc-h", "rpc-h", 3, ["GAME", "ENGINE"], "engine/ps2"], +["path-h", "path-h", 3, ["GAME", "ENGINE"], "engine/nav"], +["navigate-h", "navigate-h", 3, ["GAME", "ENGINE"], "engine/nav"], +["load-dgo", "load-dgo", 3, ["GAME", "ENGINE"], "engine/load"], +["ramdisk", "ramdisk", 3, ["GAME", "ENGINE"], "engine/load"], +["gsound", "gsound", 3, ["GAME", "ENGINE"], "engine/sound"], +["transformq", "transformq", 3, ["GAME", "ENGINE"], "engine/math"], +["collide-func", "collide-func", 3, ["GAME", "ENGINE"], "engine/collide"], +["joint", "joint", 3, ["GAME", "ENGINE"], "engine/anim"], +["cylinder", "cylinder", 3, ["GAME", "ENGINE"], "engine/geometry"], +["wind", "wind", 3, ["GAME", "ENGINE"], "engine/gfx"], +["bsp", "bsp", 3, ["GAME", "ENGINE"], "engine/gfx/vis"], +["subdivide", "subdivide", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], +["sprite", "sprite", 3, ["GAME", "ENGINE"], "engine/gfx/sprite"], +["sprite-distort", "sprite-distort", 3, ["GAME", "ENGINE"], "engine/gfx/sprite"], +["debug-sphere", "debug-sphere", 3, ["GAME", "ENGINE"], "engine/debug"], +["debug", "debug", 3, ["GAME", "ENGINE"], "engine/debug"], +["merc-vu1", "merc-vu1", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], +["merc-blend-shape", "merc-blend-shape", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], +["merc", "merc", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], +["ripple", "ripple", 3, ["GAME", "ENGINE"], "engine/gfx"], +["bones", "bones", 3, ["GAME", "ENGINE"], "engine/anim"], +["generic-vu0", "generic-vu0", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], +["generic", "generic", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], +["generic-vu1", "generic-vu1", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], +["generic-effect", "generic-effect", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], +["generic-merc", "generic-merc", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], +["generic-tie", "generic-tie", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], +["shadow-cpu", "shadow-cpu", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], +["shadow-vu1", "shadow-vu1", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], +["depth-cue", "depth-cue", 3, ["GAME", "ENGINE"], "engine/gfx"], +["font", "font", 3, ["GAME", "ENGINE"], "engine/gfx"], +["decomp", "decomp", 3, ["GAME", "ENGINE"], "engine/load"], +["background", "background", 3, ["GAME", "ENGINE"], "engine/gfx"], +["draw-node", "draw-node", 3, ["GAME", "ENGINE"], "engine/draw"], +["shrubbery", "shrubbery", 3, ["GAME", "ENGINE"], "engine/gfx/shrub"], +["shrub-work", "shrub-work", 3, ["GAME", "ENGINE"], "engine/gfx/shrub"], +["tfrag-near", "tfrag-near", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], +["tfrag", "tfrag", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], +["tfrag-methods", "tfrag-methods", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], +["tfrag-work", "tfrag-work", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], +["tie", "tie", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], +["tie-near", "tie-near", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], +["tie-work", "tie-work", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], +["tie-methods", "tie-methods", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], +["sync-info", "sync-info", 3, ["GAME", "ENGINE"], "engine/util"], +["trajectory", "trajectory", 3, ["GAME", "ENGINE"], "engine/physics"], +["sparticle-launcher", "sparticle-launcher", 3, ["GAME", "ENGINE"], "engine/sparticle"], +["sparticle", "sparticle", 3, ["GAME", "ENGINE"], "engine/sparticle"], +["entity-table", "entity-table", 3, ["GAME", "ENGINE"], "engine/entity"], +["loader", "loader", 3, ["GAME", "ENGINE"], "engine/load"], +["task-control-h", "task-control-h", 3, ["GAME", "ENGINE"], "engine/game/task"], +["game-info", "game-info", 3, ["GAME", "ENGINE"], "engine/game"], +["game-save", "game-save", 3, ["GAME", "ENGINE"], "engine/game"], +["settings", "settings", 3, ["GAME", "ENGINE"], "engine/game"], +["mood-tables", "mood-tables", 3, ["GAME", "ENGINE"], "engine/ambient"], +["mood", "mood", 3, ["GAME", "ENGINE"], "engine/ambient"], +["weather-part", "weather-part", 3, ["GAME", "ENGINE"], "engine/ambient"], +["time-of-day", "time-of-day", 3, ["GAME", "ENGINE"], "engine/gfx"], +["sky-utils", "sky-utils", 3, ["GAME", "ENGINE"], "engine/gfx/sky"], +["sky", "sky", 3, ["GAME", "ENGINE"], "engine/gfx/sky"], +["sky-tng", "sky-tng", 3, ["GAME", "ENGINE"], "engine/gfx/sky"], +["load-boundary-h", "load-boundary-h", 3, ["GAME", "ENGINE"], "engine/level"], +["load-boundary", "load-boundary", 3, ["GAME", "ENGINE"], "engine/level"], +["load-boundary-data", "load-boundary-data", 3, ["GAME", "ENGINE"], "engine/level"], +["level-info", "level-info", 3, ["GAME", "ENGINE"], "engine/level"], +["level", "level", 3, ["GAME", "ENGINE"], "engine/level"], +["text", "text", 3, ["GAME", "ENGINE"], "engine/ui"], +["collide-probe", "collide-probe", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-frag", "collide-frag", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-mesh", "collide-mesh", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-touch", "collide-touch", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-edge-grab", "collide-edge-grab", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-shape", "collide-shape", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-shape-rider", "collide-shape-rider", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide", "collide", 3, ["GAME", "ENGINE"], "engine/collide"], +["collide-planes", "collide-planes", 3, ["GAME", "ENGINE"], "engine/collide"], +["merc-death", "merc-death", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], +["water-h", "water-h", 3, ["GAME", "ENGINE"], "engine/gfx/water"], +["camera", "camera", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-interface", "cam-interface", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-master", "cam-master", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-states", "cam-states", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-states-dbg", "cam-states-dbg", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-combiner", "cam-combiner", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-update", "cam-update", 3, ["GAME", "ENGINE"], "engine/camera"], +["vol-h", "vol-h", 3, ["GAME", "ENGINE"], "engine/geometry"], +["cam-layout", "cam-layout", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-debug", "cam-debug", 3, ["GAME", "ENGINE"], "engine/camera"], +["cam-start", "cam-start", 3, ["GAME", "ENGINE"], "engine/camera"], +["process-drawable", "process-drawable", 3, ["GAME", "ENGINE"], "engine/draw"], +["hint-control", "hint-control", 3, ["GAME", "ENGINE"], "engine/game/task"], +["ambient", "ambient", 3, ["GAME", "ENGINE"], "engine/ambient"], +["assert", "assert", 3, ["GAME", "ENGINE"], "engine/debug"], +["generic-obs", "generic-obs", 3, ["GAME", "ENGINE"], "engine/game"], +["target-util", "target-util", 3, ["GAME", "ENGINE"], "engine/target"], +["target-part", "target-part", 3, ["GAME", "ENGINE"], "engine/target"], +["collide-reaction-target", "collide-reaction-target", 3, ["GAME", "ENGINE"], "engine/collide"], +["logic-target", "logic-target", 3, ["GAME", "ENGINE"], "engine/target"], +["sidekick", "sidekick", 3, ["GAME", "ENGINE"], "engine/target"], +["voicebox", "voicebox", 3, ["GAME", "ENGINE"], "engine/game"], +["target-handler", "target-handler", 3, ["GAME", "ENGINE"], "engine/target"], +["target", "target", 3, ["GAME", "ENGINE"], "engine/target"], +["target2", "target2", 3, ["GAME", "ENGINE"], "engine/target"], +["target-death", "target-death", 3, ["GAME", "ENGINE"], "engine/target"], +["menu", "menu", 3, ["GAME", "ENGINE"], "engine/debug"], +["drawable", "drawable", 3, ["GAME", "ENGINE"], "engine/draw"], +["drawable-group", "drawable-group", 3, ["GAME", "ENGINE"], "engine/draw"], +["drawable-inline-array", "drawable-inline-array", 3, ["GAME", "ENGINE"], "engine/draw"], +["drawable-tree", "drawable-tree", 3, ["GAME", "ENGINE"], "engine/draw"], +["prototype", "prototype", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], +["main-collide", "main-collide", 3, ["GAME", "ENGINE"], "engine/collide"], +["video", "video", 3, ["GAME", "ENGINE"], "engine/game"], +["main", "main", 3, ["GAME", "ENGINE"], "engine/game"], +["collide-cache", "collide-cache", 3, ["GAME", "ENGINE"], "engine/collide"], +["relocate", "relocate", 3, ["GAME", "ENGINE"], "engine/entity"], +["memory-usage", "memory-usage", 3, ["GAME", "ENGINE"], "engine/debug"], +["entity", "entity", 3, ["GAME", "ENGINE"], "engine/entity"], +["path", "path", 3, ["GAME", "ENGINE"], "engine/nav"], +["vol", "vol", 3, ["GAME", "ENGINE"], "engine/geometry"], +["navigate", "navigate", 3, ["GAME", "ENGINE"], "engine/nav"], +["aligner", "aligner", 3, ["GAME", "ENGINE"], "engine/anim"], +["effect-control", "effect-control", 3, ["GAME", "ENGINE"], "engine/game"], +["water", "water", 3, ["GAME", "ENGINE"], "engine/gfx/water"], +["collectables-part", "collectables-part", 3, ["GAME", "ENGINE"], "engine/game"], +["collectables", "collectables", 3, ["GAME", "ENGINE"], "engine/game"], +["task-control", "task-control", 3, ["GAME", "ENGINE"], "engine/game/task"], +["process-taskable", "process-taskable", 3, ["GAME", "ENGINE"], "engine/game/task"], +["pov-camera", "pov-camera", 3, ["GAME", "ENGINE"], "engine/camera"], +["powerups", "powerups", 3, ["GAME", "ENGINE"], "engine/game"], +["crates", "crates", 3, ["GAME", "ENGINE"], "engine/game"], +["hud", "hud", 3, ["GAME", "ENGINE"], "engine/ui"], +["hud-classes", "hud-classes", 3, ["GAME", "ENGINE"], "engine/ui"], +["progress-static", "progress-static", 3, ["GAME", "ENGINE"], "engine/ui/progress"], +["progress-part", "progress-part", 3, ["GAME", "ENGINE"], "engine/ui/progress"], +["progress-draw", "progress-draw", 3, ["GAME", "ENGINE"], "engine/ui/progress"], +["progress", "progress", 3, ["GAME", "ENGINE"], "engine/ui/progress"], +["credits", "credits", 3, ["GAME", "ENGINE"], "engine/ui"], +["projectiles", "projectiles", 3, ["GAME", "ENGINE"], "engine/game"], +["ocean", "ocean", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["ocean-vu0", "ocean-vu0", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["ocean-texture", "ocean-texture", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["ocean-mid", "ocean-mid", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["ocean-transition", "ocean-transition", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["ocean-near", "ocean-near", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], +["shadow", "shadow", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], +["eye", "eye", 3, ["GAME", "ENGINE"], "engine/gfx"], +["glist-h", "glist-h", 3, ["GAME", "ENGINE"], "engine/util"], +["glist", "glist", 3, ["GAME", "ENGINE"], "engine/util"], +["anim-tester", "anim-tester", 3, ["GAME", "ENGINE"], "engine/debug"], +["viewer", "viewer", 3, ["GAME", "ENGINE"], "engine/debug"], +["part-tester", "part-tester", 3, ["GAME", "ENGINE"], "engine/debug"], +["default-menu", "default-menu", 3, ["GAME", "ENGINE"], "engine/debug"], +["dir-tpages", "dir-tpages", 4, ["GAME", "ART"], "levels/common"], +["tpage-463", "tpage-463", 4, ["GAME", "ART"], "levels/common"], +["tpage-2", "tpage-2", 4, ["GAME", "ART"], "levels/common"], +["tpage-880", "tpage-880", 4, ["GAME", "ART"], "levels/common"], +["tpage-256", "tpage-256", 4, ["GAME", "ART"], "levels/common"], +["tpage-1278", "tpage-1278", 4, ["GAME", "ART"], "levels/common"], +["texture-upload", "texture-upload", 3, ["GAME", "ART"], "levels/common"], +["tpage-1032", "tpage-1032", 4, ["GAME", "ART"], "levels/common"], +["tpage-62", "tpage-62", 4, ["GAME", "ART"], "levels/common"], +["tpage-1532", "tpage-1532", 4, ["GAME", "ART"], "levels/common"], +["fuel-cell-ag", "fuel-cell", 4, ["GAME", "ART"], "levels/common"], +["money-ag", "money", 4, ["GAME", "ART"], "levels/common"], +["buzzer-ag", "buzzer", 4, ["GAME", "ART"], "levels/common"], +["ecovalve-ag-ART-GAME", "ecovalve", 4, ["GAME", "ART"], "levels/common"], +["ecovalve-ag-BEA", "ecovalve", 4, ["BEA"], "levels/beach"], +["ecovalve-ag-CIT", "ecovalve", 4, ["CIT"], "levels/citadel"], +["ecovalve-ag-FIN", "ecovalve", 4, ["FIN"], "levels/finalboss"], +["ecovalve-ag-JUB-JUN", "ecovalve", 4, ["JUB", "JUN"], "levels/jungle_common"], +["ecovalve-ag-FIC-OGR", "ecovalve", 4, ["FIC", "OGR"], "levels/common"], +["ecovalve-ag-LAV", "ecovalve", 4, ["LAV"], "levels/lavatube"], +["ecovalve-ag-MAI", "ecovalve", 4, ["MAI"], "levels/maincave"], +["ecovalve-ag-ROB", "ecovalve", 4, ["ROB"], "levels/robocave"], +["ecovalve-ag-ROL", "ecovalve", 4, ["ROL"], "levels/rolling"], +["ecovalve-ag-SNO", "ecovalve", 4, ["SNO"], "levels/snow"], +["ecovalve-ag-SUB", "ecovalve", 4, ["SUB"], "levels/sunkenb"], +["ecovalve-ag-SWA", "ecovalve", 4, ["SWA"], "levels/swamp"], +["ecovalve-ag-TRA", "ecovalve", 4, ["TRA"], "levels/training"], +["crate-ag", "crate", 4, ["GAME", "ART"], "levels/common"], +["speaker-ag", "speaker", 4, ["GAME", "ART"], "levels/common"], +["fuelcell-naked-ag", "fuelcell-naked", 4, ["GAME", "ART"], "levels/common"], +["eichar-ag", "eichar", 4, ["GAME", "ART"], "levels/common"], +["sidekick-ag", "sidekick", 4, ["GAME", "ART"], "levels/common"], +["deathcam-ag", "deathcam", 4, ["GAME", "ART"], "levels/common"], +["game-cnt", "game-cnt", 4, ["GAME", "ART"], "levels/common"], +["rigid-body-h", "rigid-body-h", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["water-anim", "water-anim", 3, ["GAME", "COMMON", "L1", "WATER-AN"], "levels/common"], +["dark-eco-pool", "dark-eco-pool", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["rigid-body", "rigid-body", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["nav-enemy-h", "nav-enemy-h", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["nav-enemy", "nav-enemy", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["baseplat", "baseplat", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["basebutton", "basebutton", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["tippy", "tippy", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["joint-exploder", "joint-exploder", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["babak", "babak", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["sharkey", "sharkey", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["orb-cache", "orb-cache", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["plat", "plat", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["plat-button", "plat-button", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["plat-eco", "plat-eco", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["ropebridge", "ropebridge", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["ticky", "ticky", 3, ["GAME", "COMMON", "L1"], "levels/common"], +["mistycannon", "mistycannon", 3, ["BEA", "L1", "MIS"], "levels/common"], +["babak-with-cannon", "babak-with-cannon", 3, ["BEA", "L1", "MIS"], "levels/common"], +["air-h", "air-h", 3, ["BEA", "L1"], "levels/beach"], +["air", "air", 3, ["BEA", "L1"], "levels/beach"], +["wobbler", "wobbler", 3, ["BEA", "L1"], "levels/beach"], +["twister", "twister", 3, ["BEA", "L1"], "levels/beach"], +["beach-obs", "beach-obs", 3, ["BEA", "L1"], "levels/beach"], +["bird-lady", "bird-lady", 3, ["BEA", "L1"], "levels/beach"], +["bird-lady-beach", "bird-lady-beach", 3, ["BEA", "L1"], "levels/beach"], +["mayor", "mayor", 3, ["BEA", "L1"], "levels/beach"], +["sculptor", "sculptor", 3, ["BEA", "L1"], "levels/beach"], +["pelican", "pelican", 3, ["BEA", "L1"], "levels/beach"], +["lurkerworm", "lurkerworm", 3, ["BEA", "L1"], "levels/beach"], +["lurkercrab", "lurkercrab", 3, ["BEA", "L1"], "levels/beach"], +["lurkerpuppy", "lurkerpuppy", 3, ["BEA", "L1"], "levels/beach"], +["beach-rocks", "beach-rocks", 3, ["BEA", "L1"], "levels/beach"], +["seagull", "seagull", 3, ["BEA", "L1"], "levels/beach"], +["beach-part", "beach-part", 3, ["BEA", "L1"], "levels/beach"], +["tpage-212", "tpage-212", 4, ["BEA"], "levels/beach"], +["tpage-214", "tpage-214", 4, ["BEA"], "levels/beach"], +["tpage-213", "tpage-213", 4, ["BEA"], "levels/beach"], +["tpage-215", "tpage-215", 4, ["BEA"], "levels/beach"], +["babak-ag", "babak", 4, ["BEA", "CIT", "JUN", "FIC", "MIS", "ROB", "ROL", "SNO", "SUB", "SUN", "SWA"], "levels/common"], +["barrel-ag-BEA", "barrel", 4, ["BEA"], "levels/beach"], +["barrel-ag-VI2", "barrel", 4, ["VI2"], "levels/village2"], +["beachcam-ag", "beachcam", 4, ["BEA"], "levels/beach"], +["bird-lady-ag", "bird-lady", 4, ["BEA"], "levels/beach"], +["bird-lady-beach-ag", "bird-lady-beach", 4, ["BEA"], "levels/beach"], +["bladeassm-ag", "bladeassm", 4, ["BEA"], "levels/beach"], +["ecoventrock-ag", "ecoventrock", 4, ["BEA"], "levels/beach"], +["flutflut-ag", "flutflut", 4, ["BEA"], "levels/beach"], +["flutflutegg-ag", "flutflutegg", 4, ["BEA"], "levels/beach"], +["grottopole-ag", "grottopole", 4, ["BEA"], "levels/beach"], +["harvester-ag", "harvester", 4, ["BEA"], "levels/beach"], +["kickrock-ag", "kickrock", 4, ["BEA"], "levels/beach"], +["lrocklrg-ag", "lrocklrg", 4, ["BEA"], "levels/beach"], +["lurkercrab-ag", "lurkercrab", 4, ["BEA"], "levels/beach"], +["lurkerpuppy-ag", "lurkerpuppy", 4, ["BEA"], "levels/beach"], +["lurkerworm-ag", "lurkerworm", 4, ["BEA"], "levels/beach"], +["mayor-ag", "mayor", 4, ["BEA"], "levels/beach"], +["mistycannon-ag", "mistycannon", 4, ["BEA", "MIS"], "levels/common"], +["orb-cache-top-ag-BEA", "orb-cache-top", 4, ["BEA"], "levels/beach"], +["orb-cache-top-ag-CIT", "orb-cache-top", 4, ["CIT"], "levels/citadel"], +["orb-cache-top-ag-JUN", "orb-cache-top", 4, ["JUN"], "levels/jungle"], +["orb-cache-top-ag-MIS", "orb-cache-top", 4, ["MIS"], "levels/misty"], +["orb-cache-top-ag-SNO", "orb-cache-top", 4, ["SNO"], "levels/snow"], +["orb-cache-top-ag-SUN", "orb-cache-top", 4, ["SUN"], "levels/sunken"], +["orb-cache-top-ag-VI1", "orb-cache-top", 4, ["VI1"], "levels/village1"], +["orb-cache-top-ag-VI2", "orb-cache-top", 4, ["VI2"], "levels/village2"], +["pelican-ag", "pelican", 4, ["BEA"], "levels/beach"], +["sack-ag-BEA", "sack", 4, ["BEA"], "levels/beach"], +["sack-ag-MIS", "sack", 4, ["MIS"], "levels/misty"], +["sculptor-ag", "sculptor", 4, ["BEA"], "levels/beach"], +["sculptor-muse-ag", "sculptor-muse", 4, ["BEA"], "levels/beach"], +["seagull-ag", "seagull", 4, ["BEA"], "levels/beach"], +["sharkey-ag-BEA-TRA-VI2", "sharkey", 4, ["BEA", "TRA", "VI2"], "levels/common"], +["sharkey-ag-JUN-MIS", "sharkey", 4, ["JUN", "MIS"], "levels/common"], +["sharkey-ag-SWA", "sharkey", 4, ["SWA"], "levels/swamp"], +["sharkey-ag-VI1", "sharkey", 4, ["VI1"], "levels/village1"], +["windmill-one-ag", "windmill-one", 4, ["BEA"], "levels/beach"], +["beach-vis", "beach-vis", 4, ["BEA"], "levels/beach"], +["villagep-obs", "villagep-obs", 3, ["CIT", "L1", "VI1", "VI2", "VI3", "VILLAGEP"], "levels/village_common"], +["oracle", "oracle", 3, ["CIT", "L1", "VI1", "VI2", "VI3", "VILLAGEP"], "levels/village_common"], +["battlecontroller", "battlecontroller", 3, ["CIT", "L1", "MIS", "SWA"], "levels/common"], +["citadel-part", "citadel-part", 3, ["CIT", "L1"], "levels/citadel"], +["citadel-obs", "citadel-obs", 3, ["CIT", "L1"], "levels/citadel"], +["citb-plat", "citb-plat", 3, ["CIT", "L1"], "levels/citadel"], +["citadel-sages", "citadel-sages", 3, ["CIT", "L1"], "levels/citadel"], +["snow-bunny", "snow-bunny", 3, ["CIT", "L1", "SNO"], "levels/common"], +["citb-bunny", "citb-bunny", 3, ["CIT", "L1"], "levels/citadel"], +["citb-drop-plat-CIT", "citb-drop-plat", 3, ["CIT"], "levels/citadel"], +["citb-drop-plat-L1", "citb-drop-plat", 3, ["L1"], "levels/l1_only"], +["assistant-citadel", "assistant-citadel", 3, ["CIT", "L1"], "levels/citadel"], +["tpage-1415", "tpage-1415", 4, ["CIT"], "levels/citadel"], +["tpage-1417", "tpage-1417", 4, ["CIT"], "levels/citadel"], +["tpage-1416", "tpage-1416", 4, ["CIT"], "levels/citadel"], +["tpage-1414", "tpage-1414", 4, ["CIT"], "levels/citadel"], +["assistant-lavatube-end-ag", "assistant-lavatube-end", 4, ["CIT"], "levels/citadel"], +["bluesage-ag", "bluesage", 4, ["CIT"], "levels/citadel"], +["citadelcam-ag", "citadelcam", 4, ["CIT"], "levels/citadel"], +["citb-arm-ag", "citb-arm", 4, ["CIT"], "levels/citadel"], +["citb-arm-shoulder-ag", "citb-arm-shoulder", 4, ["CIT"], "levels/citadel"], +["citb-bunny-ag", "citb-bunny", 4, ["CIT"], "levels/citadel"], +["citb-button-ag", "citb-button", 4, ["CIT"], "levels/citadel"], +["citb-chain-plat-ag", "citb-chain-plat", 4, ["CIT"], "levels/citadel"], +["citb-chains-ag", "citb-chains", 4, ["CIT"], "levels/citadel"], +["citb-coil-ag", "citb-coil", 4, ["CIT"], "levels/citadel"], +["citb-disc-ag", "citb-disc", 4, ["CIT"], "levels/citadel"], +["citb-donut-ag", "citb-donut", 4, ["CIT"], "levels/citadel"], +["citb-drop-plat-ag", "citb-drop-plat", 4, ["CIT"], "levels/citadel"], +["citb-exit-plat-ag", "citb-exit-plat", 4, ["CIT"], "levels/citadel"], +["citb-firehose-ag", "citb-firehose", 4, ["CIT"], "levels/citadel"], +["citb-generator-ag", "citb-generator", 4, ["CIT"], "levels/citadel"], +["citb-hose-ag", "citb-hose", 4, ["CIT"], "levels/citadel"], +["citb-iris-door-ag", "citb-iris-door", 4, ["CIT"], "levels/citadel"], +["citb-launcher-ag", "citb-launcher", 4, ["CIT"], "levels/citadel"], +["citb-robotboss-ag", "citb-robotboss", 4, ["CIT"], "levels/citadel"], +["citb-rotatebox-ag", "citb-rotatebox", 4, ["CIT"], "levels/citadel"], +["citb-sagecage-ag", "citb-sagecage", 4, ["CIT"], "levels/citadel"], +["citb-stopbox-ag", "citb-stopbox", 4, ["CIT"], "levels/citadel"], +["evilbro-citadel-ag", "evilbro-citadel", 4, ["CIT"], "levels/citadel"], +["evilsis-citadel-ag", "evilsis-citadel", 4, ["CIT"], "levels/citadel"], +["green-sagecage-ag", "green-sagecage", 4, ["CIT", "FIN"], "levels/common"], +["plat-citb-ag", "plat-citb", 4, ["CIT"], "levels/citadel"], +["plat-eco-citb-ag", "plat-eco-citb", 4, ["CIT"], "levels/citadel"], +["redsage-ag", "redsage", 4, ["CIT"], "levels/citadel"], +["warp-gate-switch-ag-CIT", "warp-gate-switch", 4, ["CIT"], "levels/citadel"], +["warp-gate-switch-ag-TRA", "warp-gate-switch", 4, ["TRA"], "levels/training"], +["warp-gate-switch-ag-VI1-VI3", "warp-gate-switch", 4, ["VI1", "VI3"], "levels/common"], +["warp-gate-switch-ag-VI2", "warp-gate-switch", 4, ["VI2"], "levels/village2"], +["warpgate-ag", "warpgate", 4, ["CIT", "TRA", "VI1", "VI2", "VI3"], "levels/common"], +["yellowsage-ag", "yellowsage", 4, ["CIT"], "levels/citadel"], +["citadel-vis", "citadel-vis", 4, ["CIT"], "levels/citadel"], +["darkcave-obs", "darkcave-obs", 3, ["DAR", "L1"], "levels/darkcave"], +["tpage-1306", "tpage-1306", 4, ["DAR"], "levels/darkcave"], +["tpage-1307", "tpage-1307", 4, ["DAR"], "levels/darkcave"], +["tpage-1305", "tpage-1305", 4, ["DAR"], "levels/darkcave"], +["tpage-1304", "tpage-1304", 4, ["DAR"], "levels/darkcave"], +["tpage-1352", "tpage-1352", 4, ["DAR"], "levels/darkcave"], +["baby-spider-ag-DAR", "baby-spider", 4, ["DAR"], "levels/darkcave"], +["baby-spider-ag-MAI", "baby-spider", 4, ["MAI"], "levels/maincave"], +["baby-spider-ag-ROB", "baby-spider", 4, ["ROB"], "levels/robocave"], +["cavecrystal-ag", "cavecrystal", 4, ["DAR"], "levels/darkcave"], +["caveelevator-ag", "caveelevator", 4, ["DAR", "ROB"], "levels/cave_common"], +["cavespatula-darkcave-ag", "cavespatula-darkcave", 4, ["DAR"], "levels/darkcave"], +["cavetrapdoor-ag-DAR", "cavetrapdoor", 4, ["DAR"], "levels/darkcave"], +["cavetrapdoor-ag-MAI", "cavetrapdoor", 4, ["MAI"], "levels/maincave"], +["cavetrapdoor-ag-ROB", "cavetrapdoor", 4, ["ROB"], "levels/robocave"], +["dark-crystal-ag", "dark-crystal", 4, ["DAR", "MAI"], "levels/cave_common"], +["mother-spider-ag", "mother-spider", 4, ["DAR", "MAI"], "levels/cave_common"], +["spider-egg-ag-DAR-MAI", "spider-egg", 4, ["DAR", "MAI"], "levels/cave_common"], +["spider-egg-ag-ROB", "spider-egg", 4, ["ROB"], "levels/robocave"], +["water-anim-darkcave-ag", "water-anim-darkcave", 4, ["DAR"], "levels/darkcave"], +["darkcave-vis", "darkcave-vis", 4, ["DAR"], "levels/darkcave"], +["demo-obs", "demo-obs", 3, ["DEM", "L1"], "levels/demo"], +["tpage-1485", "tpage-1485", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1486", "tpage-1486", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1487", "tpage-1487", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1599", "tpage-1599", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1600", "tpage-1600", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1601", "tpage-1601", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1602", "tpage-1602", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1603", "tpage-1603", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1604", "tpage-1604", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1605", "tpage-1605", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1606", "tpage-1606", 4, ["DEM", "L1"], "levels/demo"], +["tpage-1607", "tpage-1607", 4, ["DEM", "L1"], "levels/demo"], +["static-screen", "static-screen", 3, ["DEM", "L1", "TIT"], "levels/common"], +["tpage-1480", "tpage-1480", 4, ["DEM"], "levels/demo"], +["tpage-1479", "tpage-1479", 4, ["DEM"], "levels/demo"], +["demo-vis", "demo-vis", 4, ["DEM"], "levels/demo"], +["robotboss-h", "robotboss-h", 3, ["FIN", "L1"], "levels/finalboss"], +["robotboss-part", "robotboss-part", 3, ["FIN", "L1"], "levels/finalboss"], +["sage-finalboss-part", "sage-finalboss-part", 3, ["FIN", "L1"], "levels/finalboss"], +["light-eco", "light-eco", 3, ["FIN", "L1"], "levels/finalboss"], +["robotboss-weapon", "robotboss-weapon", 3, ["FIN", "L1"], "levels/finalboss"], +["robotboss-misc", "robotboss-misc", 3, ["FIN", "L1"], "levels/finalboss"], +["green-eco-lurker", "green-eco-lurker", 3, ["FIN", "L1"], "levels/finalboss"], +["robotboss", "robotboss", 3, ["FIN", "L1"], "levels/finalboss"], +["final-door", "final-door", 3, ["FIN", "L1"], "levels/finalboss"], +["sage-finalboss-FIN", "sage-finalboss", 3, ["FIN"], "levels/finalboss"], +["sage-finalboss-L1", "sage-finalboss", 3, ["L1"], "levels/l1_only"], +["tpage-1419", "tpage-1419", 4, ["FIN"], "levels/finalboss"], +["tpage-1420", "tpage-1420", 4, ["FIN"], "levels/finalboss"], +["tpage-634", "tpage-634", 4, ["FIN"], "levels/finalboss"], +["tpage-1418", "tpage-1418", 4, ["FIN"], "levels/finalboss"], +["tpage-545", "tpage-545", 4, ["FIN"], "levels/finalboss"], +["darkecobomb-ag", "darkecobomb", 4, ["FIN"], "levels/finalboss"], +["ecoclaw-ag", "ecoclaw", 4, ["FIN"], "levels/finalboss"], +["finalbosscam-ag", "finalbosscam", 4, ["FIN"], "levels/finalboss"], +["green-eco-lurker-ag", "green-eco-lurker", 4, ["FIN"], "levels/finalboss"], +["greenshot-ag", "greenshot", 4, ["FIN"], "levels/finalboss"], +["jak-white-ag", "jak-white", 4, ["FIN"], "levels/finalboss"], +["light-eco-ag", "light-eco", 4, ["FIN"], "levels/finalboss"], +["plat-eco-finalboss-ag", "plat-eco-finalboss", 4, ["FIN"], "levels/finalboss"], +["power-left-ag", "power-left", 4, ["FIN"], "levels/finalboss"], +["power-right-ag", "power-right", 4, ["FIN"], "levels/finalboss"], +["powercellalt-ag", "powercellalt", 4, ["FIN"], "levels/finalboss"], +["redring-ag", "redring", 4, ["FIN"], "levels/finalboss"], +["robotboss-ag", "robotboss", 4, ["FIN"], "levels/finalboss"], +["robotboss-blueeco-ag", "robotboss-blueeco", 4, ["FIN"], "levels/finalboss"], +["robotboss-cinematic-ag", "robotboss-cinematic", 4, ["FIN"], "levels/finalboss"], +["robotboss-redeco-ag", "robotboss-redeco", 4, ["FIN"], "levels/finalboss"], +["robotboss-yelloweco-ag", "robotboss-yelloweco", 4, ["FIN"], "levels/finalboss"], +["silodoor-ag", "silodoor", 4, ["FIN"], "levels/finalboss"], +["water-anim-finalboss-ag", "water-anim-finalboss", 4, ["FIN"], "levels/finalboss"], +["finalboss-vis", "finalboss-vis", 4, ["FIN"], "levels/finalboss"], +["evilbro", "evilbro", 3, ["INT", "L1"], "levels/intro"], +["tpage-1455", "tpage-1455", 4, ["INT"], "levels/intro"], +["tpage-1457", "tpage-1457", 4, ["INT"], "levels/intro"], +["tpage-1456", "tpage-1456", 4, ["INT"], "levels/intro"], +["tpage-1454", "tpage-1454", 4, ["INT"], "levels/intro"], +["evilbro-ag", "evilbro", 4, ["INT"], "levels/intro"], +["evilsis-ag", "evilsis", 4, ["INT"], "levels/intro"], +["intro-vis", "intro-vis", 4, ["INT"], "levels/intro"], +["jungleb-obs", "jungleb-obs", 3, ["JUB", "L1"], "levels/jungleb"], +["plat-flip", "plat-flip", 3, ["JUB", "L1"], "levels/jungleb"], +["plant-boss-main+0-ag", "plant-boss-main+0", 4, ["JUB", "L1"], "levels/jungleb"], +["aphid", "aphid", 3, ["JUB", "L1"], "levels/jungleb"], +["plant-boss", "plant-boss", 3, ["JUB", "L1"], "levels/jungleb"], +["tpage-485", "tpage-485", 4, ["JUB"], "levels/jungleb"], +["tpage-510", "tpage-510", 4, ["JUB"], "levels/jungleb"], +["tpage-507", "tpage-507", 4, ["JUB"], "levels/jungleb"], +["tpage-966", "tpage-966", 4, ["JUB"], "levels/jungleb"], +["aphid-lurker-ag", "aphid-lurker", 4, ["JUB"], "levels/jungleb"], +["darkvine-ag-JUB", "darkvine", 4, ["JUB"], "levels/jungleb"], +["darkvine-ag-JUN", "darkvine", 4, ["JUN"], "levels/jungle"], +["eggtop-ag", "eggtop", 4, ["JUB"], "levels/jungleb"], +["jng-iris-door-ag-JUB", "jng-iris-door", 4, ["JUB"], "levels/jungleb"], +["jng-iris-door-ag-TRA", "jng-iris-door", 4, ["TRA"], "levels/training"], +["plant-boss-ag", "plant-boss", 4, ["JUB"], "levels/jungleb"], +["plat-flip-ag", "plat-flip", 4, ["JUB"], "levels/jungleb"], +["plat-jungleb-ag", "plat-jungleb", 4, ["JUB"], "levels/jungleb"], +["jungleb-vis", "jungleb-vis", 4, ["JUB"], "levels/jungleb"], +["eichar-fish+0-ag-JUN", "eichar-fish+0", 4, ["JUN"], "levels/jungle"], +["eichar-fish+0-ag-JUNGLE", "eichar-fish+0", 4, ["JUNGLE"], "levels/l1_only"], +["eichar-fish+0-ag-L1", "eichar-fish+0", 4, ["L1"], "levels/l1_only"], +["jungle-elevator", "jungle-elevator", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], +["bouncer", "bouncer", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], +["hopper", "hopper", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], +["junglesnake", "junglesnake", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], +["darkvine", "darkvine", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], +["jungle-obs", "jungle-obs", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], +["jungle-mirrors", "jungle-mirrors", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], +["junglefish", "junglefish", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], +["fisher-JUN", "fisher", 3, ["JUN"], "levels/jungle"], +["fisher-JUNGLE-L1", "fisher", 3, ["JUNGLE", "L1"], "levels/jungle"], +["jungle-part", "jungle-part", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], +["launcherdoor", "launcherdoor", 3, ["JUN", "JUNGLE", "L1", "MAI", "MAINCAVE", "SUN", "SUNKEN"], "levels/common"], +["tpage-385", "tpage-385", 4, ["JUN"], "levels/jungle"], +["tpage-531", "tpage-531", 4, ["JUN"], "levels/jungle"], +["tpage-386", "tpage-386", 4, ["JUN"], "levels/jungle"], +["tpage-388", "tpage-388", 4, ["JUN"], "levels/jungle"], +["tpage-765", "tpage-765", 4, ["JUN"], "levels/jungle"], +["accordian-ag", "accordian", 4, ["JUN"], "levels/jungle"], +["bounceytarp-ag", "bounceytarp", 4, ["JUN"], "levels/jungle"], +["catch-fisha-ag", "catch-fisha", 4, ["JUN"], "levels/jungle"], +["catch-fishb-ag", "catch-fishb", 4, ["JUN"], "levels/jungle"], +["catch-fishc-ag", "catch-fishc", 4, ["JUN"], "levels/jungle"], +["fish-net-ag", "fish-net", 4, ["JUN"], "levels/jungle"], +["fisher-ag", "fisher", 4, ["JUN"], "levels/jungle"], +["hopper-ag", "hopper", 4, ["JUN"], "levels/jungle"], +["junglecam-ag", "junglecam", 4, ["JUN"], "levels/jungle"], +["junglefish-ag", "junglefish", 4, ["JUN"], "levels/jungle"], +["junglesnake-ag", "junglesnake", 4, ["JUN"], "levels/jungle"], +["launcherdoor-ag-JUN", "launcherdoor", 4, ["JUN"], "levels/jungle"], +["launcherdoor-ag-SUN", "launcherdoor", 4, ["SUN"], "levels/sunken"], +["logtrap-ag", "logtrap", 4, ["JUN"], "levels/jungle"], +["lurkerm-piston-ag", "lurkerm-piston", 4, ["JUN"], "levels/jungle"], +["lurkerm-tall-sail-ag", "lurkerm-tall-sail", 4, ["JUN"], "levels/jungle"], +["maindoor-ag", "maindoor", 4, ["JUN"], "levels/jungle"], +["medres-firecanyon-ag", "medres-firecanyon", 4, ["JUN"], "levels/jungle"], +["periscope-ag", "periscope", 4, ["JUN"], "levels/jungle"], +["plat-button-ag", "plat-button", 4, ["JUN"], "levels/jungle"], +["plat-eco-ag-JUN", "plat-eco", 4, ["JUN"], "levels/jungle"], +["plat-eco-ag-MIS", "plat-eco", 4, ["MIS"], "levels/misty"], +["plat-eco-ag-ROB", "plat-eco", 4, ["ROB"], "levels/robocave"], +["plat-eco-ag-TRA", "plat-eco", 4, ["TRA"], "levels/training"], +["precurbridge-ag", "precurbridge", 4, ["JUN"], "levels/jungle"], +["reflector-mirror-ag", "reflector-mirror", 4, ["JUN"], "levels/jungle"], +["ropebridge-52-ag", "ropebridge-52", 4, ["JUN"], "levels/jungle"], +["ropebridge-70-ag", "ropebridge-70", 4, ["JUN"], "levels/jungle"], +["sidedoor-ag", "sidedoor", 4, ["JUN"], "levels/jungle"], +["towertop-ag", "towertop", 4, ["JUN"], "levels/jungle"], +["water-anim-jungle-ag", "water-anim-jungle", 4, ["JUN"], "levels/jungle"], +["jungle-vis", "jungle-vis", 4, ["JUN"], "levels/jungle"], +["target-racer-h-L1-RACERP", "target-racer-h", 3, ["L1", "RACERP"], "levels/l1_only"], +["target-racer-h-FIC-LAV-MIS-OGR-ROL", "target-racer-h", 3, ["FIC", "LAV", "MIS", "OGR", "ROL"], "levels/racer_common"], +["racer-part", "racer-part", 3, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], +["racer", "racer", 3, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], +["target-racer-L1-RACERP", "target-racer", 3, ["L1", "RACERP"], "levels/l1_only"], +["target-racer-FIC-LAV-MIS-OGR-ROL", "target-racer", 3, ["FIC", "LAV", "MIS", "OGR", "ROL"], "levels/racer_common"], +["racer-states-L1-RACERP", "racer-states", 3, ["L1", "RACERP"], "levels/l1_only"], +["racer-states-FIC-LAV-MIS-OGR-ROL", "racer-states", 3, ["FIC", "LAV", "MIS", "OGR", "ROL"], "levels/racer_common"], +["collide-reaction-racer", "collide-reaction-racer", 3, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], +["eichar-racer+0-ag", "eichar-racer+0", 4, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], +["tpage-1119", "tpage-1119", 4, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], +["blocking-plane", "blocking-plane", 3, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL", "SNO", "SWA"], "levels/common"], +["flut-part", "flut-part", 3, ["L1", "SNO", "SWA"], "levels/flut_common"], +["flutflut", "flutflut", 3, ["L1", "SNO", "SWA"], "levels/flut_common"], +["target-flut", "target-flut", 3, ["L1", "SNO", "SWA"], "levels/flut_common"], +["eichar-flut+0-ag", "eichar-flut+0", 4, ["L1", "SNO", "SWA"], "levels/flut_common"], +["farmer", "farmer", 3, ["L1", "VI1"], "levels/village1"], +["explorer", "explorer", 3, ["L1", "VI1"], "levels/village1"], +["assistant", "assistant", 3, ["L1", "VI1"], "levels/village1"], +["sage", "sage", 3, ["L1", "VI1"], "levels/village1"], +["yakow", "yakow", 3, ["L1", "VI1"], "levels/village1"], +["village-obs-L1", "village-obs", 3, ["L1"], "levels/l1_only"], +["village-obs-VI1", "village-obs", 3, ["VI1"], "levels/village1"], +["fishermans-boat", "fishermans-boat", 3, ["L1", "VI1"], "levels/village1"], +["village1-part", "village1-part", 3, ["L1", "VI1"], "levels/village1"], +["village1-part2", "village1-part2", 3, ["L1", "VI1"], "levels/village1"], +["sequence-a-village1", "sequence-a-village1", 3, ["L1", "VI1"], "levels/village1"], +["training-obs", "training-obs", 3, ["L1", "TRA"], "levels/training"], +["training-part", "training-part", 3, ["L1", "TRA"], "levels/training"], +["misty-obs", "misty-obs", 3, ["L1", "MIS"], "levels/misty"], +["misty-warehouse", "misty-warehouse", 3, ["L1", "MIS"], "levels/misty"], +["misty-conveyor", "misty-conveyor", 3, ["L1", "MIS"], "levels/misty"], +["mud", "mud", 3, ["L1", "MIS"], "levels/misty"], +["muse", "muse", 3, ["L1", "MIS"], "levels/misty"], +["bonelurker", "bonelurker", 3, ["L1", "MIS"], "levels/misty"], +["quicksandlurker", "quicksandlurker", 3, ["L1", "MIS"], "levels/misty"], +["misty-teetertotter", "misty-teetertotter", 3, ["L1", "MIS"], "levels/misty"], +["balloonlurker", "balloonlurker", 3, ["L1", "MIS"], "levels/misty"], +["misty-part", "misty-part", 3, ["L1", "MIS"], "levels/misty"], +["sidekick-human", "sidekick-human", 3, ["L1", "MIS"], "levels/misty"], +["firecanyon-part", "firecanyon-part", 3, ["L1", "FIC"], "levels/firecanyon"], +["assistant-firecanyon", "assistant-firecanyon", 3, ["L1", "FIC"], "levels/firecanyon"], +["village2-part", "village2-part", 3, ["L1", "VI2"], "levels/village2"], +["village2-obs", "village2-obs", 3, ["L1", "VI2"], "levels/village2"], +["village2-part2", "village2-part2", 3, ["L1", "VI2"], "levels/village2"], +["gambler", "gambler", 3, ["L1", "VI2"], "levels/village2"], +["warrior", "warrior", 3, ["L1", "VI2"], "levels/village2"], +["geologist", "geologist", 3, ["L1", "VI2"], "levels/village2"], +["swamp-blimp", "swamp-blimp", 3, ["L1", "VI2"], "levels/village2"], +["sage-bluehut", "sage-bluehut", 3, ["L1", "VI2"], "levels/village2"], +["flutflut-bluehut", "flutflut-bluehut", 3, ["L1", "VI2"], "levels/village2"], +["assistant-village2", "assistant-village2", 3, ["L1", "VI2"], "levels/village2"], +["sunken-elevator", "sunken-elevator", 3, ["L1", "VI2"], "levels/village2"], +["swamp-obs", "swamp-obs", 3, ["L1", "SWA"], "levels/swamp"], +["swamp-bat", "swamp-bat", 3, ["L1", "SWA"], "levels/swamp"], +["swamp-rat", "swamp-rat", 3, ["L1", "SWA"], "levels/swamp"], +["swamp-rat-nest", "swamp-rat-nest", 3, ["L1", "SWA"], "levels/swamp"], +["kermit", "kermit", 3, ["L1", "SWA"], "levels/swamp"], +["swamp-part", "swamp-part", 3, ["L1", "SWA"], "levels/swamp"], +["billy", "billy", 3, ["L1", "SWA"], "levels/swamp"], +["cavecrystal-light", "cavecrystal-light", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["maincave-obs", "maincave-obs", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["maincave-part", "maincave-part", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["spiderwebs", "spiderwebs", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["dark-crystal", "dark-crystal", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["baby-spider", "baby-spider", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["mother-spider-h", "mother-spider-h", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["mother-spider-egg", "mother-spider-egg", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["mother-spider-proj", "mother-spider-proj", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["mother-spider", "mother-spider", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["gnawer", "gnawer", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["driller-lurker", "driller-lurker", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], +["sunken-part", "sunken-part", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["sunken-part2", "sunken-part2", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["sunken-part3", "sunken-part3", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["sunken-part4", "sunken-part4", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["sunken-part5", "sunken-part5", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["target-tube", "target-tube", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["eichar-tube+0-ag-L1-SUNKEN", "eichar-tube+0", 4, ["L1", "SUNKEN"], "levels/l1_only"], +["eichar-tube+0-ag-SUN", "eichar-tube+0", 4, ["SUN"], "levels/sunken"], +["sunken-obs", "sunken-obs", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["shover", "shover", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["square-platform", "square-platform", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["sun-iris-door", "sun-iris-door", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["orbit-plat", "orbit-plat", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["wedge-plats", "wedge-plats", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["wall-plat", "wall-plat", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["qbert-plat", "qbert-plat", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["steam-cap", "steam-cap", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["sun-exit-chamber", "sun-exit-chamber", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["floating-launcher", "floating-launcher", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["sunken-water", "sunken-water", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["whirlpool", "whirlpool", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["sunken-pipegame", "sunken-pipegame", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["bully", "bully", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["double-lurker", "double-lurker", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["helix-water", "helix-water", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["puffer", "puffer", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["sunken-fish", "sunken-fish", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], +["rolling-obs", "rolling-obs", 3, ["L1", "ROL"], "levels/rolling"], +["rolling-lightning-mole", "rolling-lightning-mole", 3, ["L1", "ROL"], "levels/rolling"], +["rolling-robber", "rolling-robber", 3, ["L1", "ROL"], "levels/rolling"], +["rolling-race-ring", "rolling-race-ring", 3, ["L1", "ROL"], "levels/rolling"], +["firecanyon-obs", "firecanyon-obs", 3, ["L1", "FIC", "OGR"], "levels/firecanyon"], +["ogre-part", "ogre-part", 3, ["L1", "OGR"], "levels/ogre"], +["ogreboss", "ogreboss", 3, ["L1", "OGR"], "levels/ogre"], +["ogre-obs", "ogre-obs", 3, ["L1", "OGR"], "levels/ogre"], +["flying-lurker", "flying-lurker", 3, ["L1", "OGR"], "levels/ogre"], +["village3-part", "village3-part", 3, ["L1", "VI3"], "levels/village3"], +["village3-obs", "village3-obs", 3, ["L1", "VI3"], "levels/village3"], +["minecart", "minecart", 3, ["L1", "VI3"], "levels/village3"], +["miners", "miners", 3, ["L1", "VI3"], "levels/village3"], +["assistant-village3", "assistant-village3", 3, ["L1", "VI3"], "levels/village3"], +["sage-village3", "sage-village3", 3, ["L1", "VI3"], "levels/village3"], +["cave-trap", "cave-trap", 3, ["L1", "ROB"], "levels/robocave"], +["spider-egg", "spider-egg", 3, ["L1", "ROB"], "levels/robocave"], +["robocave-part", "robocave-part", 3, ["L1", "ROB"], "levels/robocave"], +["target-snowball", "target-snowball", 3, ["L1", "SNO"], "levels/snow"], +["target-ice", "target-ice", 3, ["L1", "SNO"], "levels/snow"], +["ice-cube", "ice-cube", 3, ["L1", "SNO"], "levels/snow"], +["snow-ball", "snow-ball", 3, ["L1", "SNO"], "levels/snow"], +["snow-obs", "snow-obs", 3, ["L1", "SNO"], "levels/snow"], +["snow-flutflut-obs", "snow-flutflut-obs", 3, ["L1", "SNO"], "levels/snow"], +["snow-bumper", "snow-bumper", 3, ["L1", "SNO"], "levels/snow"], +["snow-ram-h", "snow-ram-h", 3, ["L1", "SNO"], "levels/snow"], +["snow-ram-boss", "snow-ram-boss", 3, ["L1", "SNO"], "levels/snow"], +["snow-ram", "snow-ram", 3, ["L1", "SNO"], "levels/snow"], +["snow-part", "snow-part", 3, ["L1", "SNO"], "levels/snow"], +["yeti", "yeti", 3, ["L1", "SNO"], "levels/snow"], +["eichar-pole+0-ag-L1", "eichar-pole+0", 4, ["L1"], "levels/l1_only"], +["eichar-pole+0-ag-ROB", "eichar-pole+0", 4, ["ROB"], "levels/rolling"], +["eichar-pole+0-ag-SNO", "eichar-pole+0", 4, ["SNO"], "levels/snow"], +["eichar-pole+0-ag-SWA", "eichar-pole+0", 4, ["SWA"], "levels/swamp"], +["eichar-ice+0-ag", "eichar-ice+0", 4, ["L1", "SNO"], "levels/snow"], +["lavatube-obs", "lavatube-obs", 3, ["L1", "LAV"], "levels/lavatube"], +["lavatube-energy", "lavatube-energy", 3, ["L1", "LAV"], "levels/lavatube"], +["lavatube-part", "lavatube-part", 3, ["L1", "LAV"], "levels/lavatube"], +["assistant-lavatube", "assistant-lavatube", 3, ["L1", "LAV"], "levels/lavatube"], +["tpage-815", "tpage-815", 4, ["FIC"], "levels/firecanyon"], +["tpage-822", "tpage-822", 4, ["FIC"], "levels/firecanyon"], +["tpage-854", "tpage-854", 4, ["FIC"], "levels/firecanyon"], +["tpage-1123", "tpage-1123", 4, ["FIC"], "levels/firecanyon"], +["assistant-firecanyon-ag", "assistant-firecanyon", 4, ["FIC"], "levels/firecanyon"], +["balloon-ag", "balloon", 4, ["FIC"], "levels/firecanyon"], +["crate-darkeco-cluster-ag-FIC", "crate-darkeco-cluster", 4, ["FIC"], "levels/firecanyon"], +["crate-darkeco-cluster-ag-OGR", "crate-darkeco-cluster", 4, ["OGR"], "levels/ogre"], +["ef-plane-ag-FIC-LAV-OGR-ROL-SNO-SWA", "ef-plane", 4, ["FIC", "LAV", "OGR", "ROL", "SNO", "SWA"], "levels/common"], +["ef-plane-ag-MIS", "ef-plane", 4, ["MIS"], "levels/misty"], +["racer-ag-FIC-ROL", "racer", 4, ["FIC", "ROL"], "levels/common"], +["racer-ag-LAV", "racer", 4, ["LAV"], "levels/lavatube"], +["racer-ag-MIS", "racer", 4, ["MIS"], "levels/misty"], +["racer-ag-OGR", "racer", 4, ["OGR"], "levels/ogre"], +["spike-ag", "spike", 4, ["FIC"], "levels/firecanyon"], +["firecanyon-vis", "firecanyon-vis", 4, ["FIC"], "levels/firecanyon"], +["tpage-1338", "tpage-1338", 4, ["LAV"], "levels/lavatube"], +["tpage-1340", "tpage-1340", 4, ["LAV"], "levels/lavatube"], +["tpage-1339", "tpage-1339", 4, ["LAV"], "levels/lavatube"], +["tpage-1337", "tpage-1337", 4, ["LAV"], "levels/lavatube"], +["assistant-lavatube-start-ag", "assistant-lavatube-start", 4, ["LAV"], "levels/lavatube"], +["chainmine-ag", "chainmine", 4, ["LAV"], "levels/lavatube"], +["darkecobarrel-ag", "darkecobarrel", 4, ["LAV"], "levels/lavatube"], +["energyarm-ag", "energyarm", 4, ["LAV"], "levels/lavatube"], +["energyball-ag", "energyball", 4, ["LAV"], "levels/lavatube"], +["energybase-ag", "energybase", 4, ["LAV"], "levels/lavatube"], +["energydoor-ag", "energydoor", 4, ["LAV"], "levels/lavatube"], +["energyhub-ag", "energyhub", 4, ["LAV"], "levels/lavatube"], +["lavaballoon-ag", "lavaballoon", 4, ["LAV"], "levels/lavatube"], +["lavabase-ag", "lavabase", 4, ["LAV"], "levels/lavatube"], +["lavafall-ag", "lavafall", 4, ["LAV"], "levels/lavatube"], +["lavafallsewera-ag", "lavafallsewera", 4, ["LAV"], "levels/lavatube"], +["lavafallsewerb-ag", "lavafallsewerb", 4, ["LAV"], "levels/lavatube"], +["lavashortcut-ag", "lavashortcut", 4, ["LAV"], "levels/lavatube"], +["lavayellowtarp-ag", "lavayellowtarp", 4, ["LAV"], "levels/lavatube"], +["water-anim-lavatube-ag", "water-anim-lavatube", 4, ["LAV"], "levels/lavatube"], +["lavatube-vis", "lavatube-vis", 4, ["LAV"], "levels/lavatube"], +["tpage-1313", "tpage-1313", 4, ["MAI"], "levels/maincave"], +["tpage-1315", "tpage-1315", 4, ["MAI"], "levels/maincave"], +["tpage-1314", "tpage-1314", 4, ["MAI"], "levels/maincave"], +["tpage-1312", "tpage-1312", 4, ["MAI"], "levels/maincave"], +["tpage-767", "tpage-767", 4, ["MAI"], "levels/maincave"], +["driller-lurker-ag", "driller-lurker", 4, ["MAI", "ROB"], "levels/cave_common"], +["gnawer-ag", "gnawer", 4, ["MAI"], "levels/maincave"], +["launcherdoor-maincave-ag", "launcherdoor-maincave", 4, ["MAI"], "levels/maincave"], +["maincavecam-ag", "maincavecam", 4, ["MAI"], "levels/maincave"], +["plat-ag-MAI", "plat", 4, ["MAI"], "levels/maincave"], +["plat-ag-ROB", "plat", 4, ["ROB"], "levels/robocave"], +["spiderwebs-ag", "spiderwebs", 4, ["MAI", "ROB"], "levels/cave_common"], +["water-anim-maincave-ag", "water-anim-maincave", 4, ["MAI"], "levels/maincave"], +["water-anim-maincave-water-ag", "water-anim-maincave-water", 4, ["MAI"], "levels/maincave"], +["maincave-vis", "maincave-vis", 4, ["MAI"], "levels/maincave"], +["tpage-516", "tpage-516", 4, ["MIS"], "levels/misty"], +["tpage-521", "tpage-521", 4, ["MIS"], "levels/misty"], +["tpage-518", "tpage-518", 4, ["MIS"], "levels/misty"], +["tpage-520", "tpage-520", 4, ["MIS"], "levels/misty"], +["balloonlurker-ag", "balloonlurker", 4, ["MIS"], "levels/misty"], +["boatpaddle-ag", "boatpaddle", 4, ["MIS"], "levels/misty"], +["bonelurker-ag", "bonelurker", 4, ["MIS"], "levels/misty"], +["breakaway-left-ag", "breakaway-left", 4, ["MIS"], "levels/misty"], +["breakaway-mid-ag", "breakaway-mid", 4, ["MIS"], "levels/misty"], +["breakaway-right-ag", "breakaway-right", 4, ["MIS"], "levels/misty"], +["darkecocan-ag", "darkecocan", 4, ["MIS"], "levels/misty"], +["keg-ag", "keg", 4, ["MIS"], "levels/misty"], +["keg-conveyor-ag", "keg-conveyor", 4, ["MIS"], "levels/misty"], +["keg-conveyor-paddle-ag", "keg-conveyor-paddle", 4, ["MIS"], "levels/misty"], +["mis-bone-bridge-ag", "mis-bone-bridge", 4, ["MIS"], "levels/misty"], +["mis-bone-platform-ag", "mis-bone-platform", 4, ["MIS"], "levels/misty"], +["mistycam-ag", "mistycam", 4, ["MIS"], "levels/misty"], +["muse-ag", "muse", 4, ["MIS"], "levels/misty"], +["quicksandlurker-ag", "quicksandlurker", 4, ["MIS"], "levels/misty"], +["ropebridge-36-ag", "ropebridge-36", 4, ["MIS"], "levels/misty"], +["rounddoor-ag", "rounddoor", 4, ["MIS"], "levels/misty"], +["sidekick-human-ag", "sidekick-human", 4, ["MIS"], "levels/misty"], +["silostep-ag", "silostep", 4, ["MIS"], "levels/misty"], +["teetertotter-ag", "teetertotter", 4, ["MIS"], "levels/misty"], +["water-anim-misty-ag", "water-anim-misty", 4, ["MIS"], "levels/misty"], +["wheel-ag", "wheel", 4, ["MIS"], "levels/misty"], +["windturbine-ag", "windturbine", 4, ["MIS"], "levels/misty"], +["misty-vis", "misty-vis", 4, ["MIS"], "levels/misty"], +["tpage-875", "tpage-875", 4, ["OGR"], "levels/ogre"], +["tpage-967", "tpage-967", 4, ["OGR"], "levels/ogre"], +["tpage-884", "tpage-884", 4, ["OGR"], "levels/ogre"], +["tpage-1117", "tpage-1117", 4, ["OGR"], "levels/ogre"], +["flying-lurker-ag", "flying-lurker", 4, ["OGR"], "levels/ogre"], +["medres-snow-ag", "medres-snow", 4, ["OGR"], "levels/ogre"], +["ogre-bridge-ag", "ogre-bridge", 4, ["OGR"], "levels/ogre"], +["ogre-bridgeend-ag", "ogre-bridgeend", 4, ["OGR"], "levels/ogre"], +["ogre-isle-ag", "ogre-isle", 4, ["OGR"], "levels/ogre"], +["ogre-step-ag", "ogre-step", 4, ["OGR"], "levels/ogre"], +["ogreboss-ag", "ogreboss", 4, ["OGR"], "levels/ogre"], +["ogrecam-ag", "ogrecam", 4, ["OGR"], "levels/ogre"], +["plunger-lurker-ag", "plunger-lurker", 4, ["OGR"], "levels/ogre"], +["shortcut-boulder-ag", "shortcut-boulder", 4, ["OGR"], "levels/ogre"], +["tntbarrel-ag", "tntbarrel", 4, ["OGR"], "levels/ogre"], +["water-anim-ogre-ag", "water-anim-ogre", 4, ["OGR"], "levels/ogre"], +["ogre-vis", "ogre-vis", 4, ["OGR"], "levels/ogre"], +["tpage-1318", "tpage-1318", 4, ["ROB"], "levels/robocave"], +["tpage-1319", "tpage-1319", 4, ["ROB"], "levels/robocave"], +["tpage-1317", "tpage-1317", 4, ["ROB"], "levels/robocave"], +["tpage-1316", "tpage-1316", 4, ["ROB"], "levels/robocave"], +["cavecrusher-ag", "cavecrusher", 4, ["ROB"], "levels/robocave"], +["cavespatulatwo-ag", "cavespatulatwo", 4, ["ROB"], "levels/robocave"], +["water-anim-robocave-ag", "water-anim-robocave", 4, ["ROB"], "levels/robocave"], +["robocave-vis", "robocave-vis", 4, ["ROB"], "levels/robocave"], +["tpage-923", "tpage-923", 4, ["ROL"], "levels/rolling"], +["tpage-926", "tpage-926", 4, ["ROL"], "levels/rolling"], +["tpage-924", "tpage-924", 4, ["ROL"], "levels/rolling"], +["tpage-925", "tpage-925", 4, ["ROL"], "levels/rolling"], +["tpage-1353", "tpage-1353", 4, ["ROL"], "levels/rolling"], +["dark-plant-ag", "dark-plant", 4, ["ROL"], "levels/rolling"], +["happy-plant-ag", "happy-plant", 4, ["ROL"], "levels/rolling"], +["lightning-mole-ag", "lightning-mole", 4, ["ROL"], "levels/rolling"], +["pusher-ag", "pusher", 4, ["ROL"], "levels/rolling"], +["race-ring-ag", "race-ring", 4, ["ROL"], "levels/rolling"], +["robber-ag", "robber", 4, ["ROL"], "levels/rolling"], +["rolling-start-ag", "rolling-start", 4, ["ROL"], "levels/rolling"], +["rollingcam-ag", "rollingcam", 4, ["ROL"], "levels/rolling"], +["water-anim-rolling-ag", "water-anim-rolling", 4, ["ROL"], "levels/rolling"], +["rolling-vis", "rolling-vis", 4, ["ROL"], "levels/rolling"], +["tpage-710", "tpage-710", 4, ["SNO"], "levels/snow"], +["tpage-842", "tpage-842", 4, ["SNO"], "levels/snow"], +["tpage-711", "tpage-711", 4, ["SNO"], "levels/snow"], +["tpage-712", "tpage-712", 4, ["SNO"], "levels/snow"], +["flut-saddle-ag-SNO", "flut-saddle", 4, ["SNO"], "levels/snow"], +["flut-saddle-ag-SWA", "flut-saddle", 4, ["SWA"], "levels/swamp"], +["flutflut-plat-large-ag", "flutflut-plat-large", 4, ["SNO"], "levels/snow"], +["flutflut-plat-med-ag", "flutflut-plat-med", 4, ["SNO"], "levels/snow"], +["flutflut-plat-small-ag", "flutflut-plat-small", 4, ["SNO"], "levels/snow"], +["ice-cube-ag", "ice-cube", 4, ["SNO"], "levels/snow"], +["ice-cube-break-ag", "ice-cube-break", 4, ["SNO"], "levels/snow"], +["ram-ag", "ram", 4, ["SNO"], "levels/snow"], +["ram-boss-ag", "ram-boss", 4, ["SNO"], "levels/snow"], +["snow-ball-ag", "snow-ball", 4, ["SNO"], "levels/snow"], +["snow-bridge-36-ag", "snow-bridge-36", 4, ["SNO"], "levels/snow"], +["snow-bumper-ag", "snow-bumper", 4, ["SNO"], "levels/snow"], +["snow-bunny-ag", "snow-bunny", 4, ["SNO"], "levels/snow"], +["snow-button-ag", "snow-button", 4, ["SNO"], "levels/snow"], +["snow-eggtop-ag", "snow-eggtop", 4, ["SNO"], "levels/snow"], +["snow-fort-gate-ag", "snow-fort-gate", 4, ["SNO"], "levels/snow"], +["snow-gears-ag", "snow-gears", 4, ["SNO"], "levels/snow"], +["snow-log-ag", "snow-log", 4, ["SNO"], "levels/snow"], +["snow-spatula-ag", "snow-spatula", 4, ["SNO"], "levels/snow"], +["snow-switch-ag", "snow-switch", 4, ["SNO"], "levels/snow"], +["snowcam-ag", "snowcam", 4, ["SNO"], "levels/snow"], +["snowpusher-ag", "snowpusher", 4, ["SNO"], "levels/snow"], +["yeti-ag", "yeti", 4, ["SNO"], "levels/snow"], +["snow-vis", "snow-vis", 4, ["SNO"], "levels/snow"], +["tpage-163", "tpage-163", 4, ["SUB"], "levels/sunkenb"], +["tpage-164", "tpage-164", 4, ["SUB"], "levels/sunkenb"], +["tpage-166", "tpage-166", 4, ["SUB"], "levels/sunkenb"], +["tpage-162", "tpage-162", 4, ["SUB"], "levels/sunkenb"], +["tpage-764", "tpage-764", 4, ["SUB"], "levels/sunkenb"], +["blue-eco-charger-ag", "blue-eco-charger", 4, ["SUB"], "levels/sunkenb"], +["blue-eco-charger-orb-ag", "blue-eco-charger-orb", 4, ["SUB"], "levels/sunkenb"], +["bully-ag", "bully", 4, ["SUB", "SUN"], "levels/sunken_common"], +["floating-launcher-ag", "floating-launcher", 4, ["SUB"], "levels/sunkenb"], +["helix-button-ag", "helix-button", 4, ["SUB"], "levels/sunkenb"], +["helix-slide-door-ag", "helix-slide-door", 4, ["SUB"], "levels/sunkenb"], +["shover-ag-SUB", "shover", 4, ["SUB"], "levels/sunkenb"], +["shover-ag-SUN", "shover", 4, ["SUN"], "levels/sunken"], +["steam-cap-ag-SUB", "steam-cap", 4, ["SUB"], "levels/sunkenb"], +["steam-cap-ag-SUN", "steam-cap", 4, ["SUN"], "levels/sunken"], +["sunkencam-ag-SUB", "sunkencam", 4, ["SUB"], "levels/sunkenb"], +["sunkencam-ag-SUN", "sunkencam", 4, ["SUN"], "levels/sunken"], +["sunkenfisha-ag", "sunkenfisha", 4, ["SUB", "SUN"], "levels/sunken_common"], +["wall-plat-ag", "wall-plat", 4, ["SUB", "SUN"], "levels/sunken_common"], +["water-anim-sunken-ag", "water-anim-sunken", 4, ["SUB", "SUN"], "levels/sunken_common"], +["water-anim-sunken-dark-eco-ag", "water-anim-sunken-dark-eco", 4, ["SUB", "SUN"], "levels/sunken_common"], +["sunkenb-vis", "sunkenb-vis", 4, ["SUB"], "levels/sunkenb"], +["tpage-661", "tpage-661", 4, ["SUN"], "levels/sunken"], +["tpage-663", "tpage-663", 4, ["SUN"], "levels/sunken"], +["tpage-714", "tpage-714", 4, ["SUN"], "levels/sunken"], +["tpage-662", "tpage-662", 4, ["SUN"], "levels/sunken"], +["tpage-766", "tpage-766", 4, ["SUN"], "levels/sunken"], +["double-lurker-ag", "double-lurker", 4, ["SUN"], "levels/sunken"], +["double-lurker-top-ag", "double-lurker-top", 4, ["SUN"], "levels/sunken"], +["exit-chamber-ag", "exit-chamber", 4, ["SUN"], "levels/sunken"], +["generic-button-ag", "generic-button", 4, ["SUN"], "levels/sunken"], +["orbit-plat-ag", "orbit-plat", 4, ["SUN"], "levels/sunken"], +["orbit-plat-bottom-ag", "orbit-plat-bottom", 4, ["SUN"], "levels/sunken"], +["plat-sunken-ag", "plat-sunken", 4, ["SUN"], "levels/sunken"], +["puffer-ag", "puffer", 4, ["SUN"], "levels/sunken"], +["qbert-plat-ag", "qbert-plat", 4, ["SUN"], "levels/sunken"], +["qbert-plat-on-ag", "qbert-plat-on", 4, ["SUN"], "levels/sunken"], +["seaweed-ag", "seaweed", 4, ["SUN"], "levels/sunken"], +["side-to-side-plat-ag", "side-to-side-plat", 4, ["SUN"], "levels/sunken"], +["square-platform-ag", "square-platform", 4, ["SUN"], "levels/sunken"], +["sun-iris-door-ag", "sun-iris-door", 4, ["SUN"], "levels/sunken"], +["wedge-plat-ag", "wedge-plat", 4, ["SUN"], "levels/sunken"], +["wedge-plat-outer-ag", "wedge-plat-outer", 4, ["SUN"], "levels/sunken"], +["whirlpool-ag", "whirlpool", 4, ["SUN"], "levels/sunken"], +["sunken-vis", "sunken-vis", 4, ["SUN"], "levels/sunken"], +["tpage-358", "tpage-358", 4, ["SWA"], "levels/swamp"], +["tpage-659", "tpage-659", 4, ["SWA"], "levels/swamp"], +["tpage-629", "tpage-629", 4, ["SWA"], "levels/swamp"], +["tpage-630", "tpage-630", 4, ["SWA"], "levels/swamp"], +["balance-plat-ag", "balance-plat", 4, ["SWA"], "levels/swamp"], +["billy-ag", "billy", 4, ["SWA"], "levels/swamp"], +["billy-sidekick-ag", "billy-sidekick", 4, ["SWA"], "levels/swamp"], +["farthy-snack-ag", "farthy-snack", 4, ["SWA"], "levels/swamp"], +["kermit-ag", "kermit", 4, ["SWA"], "levels/swamp"], +["swamp-bat-ag", "swamp-bat", 4, ["SWA"], "levels/swamp"], +["swamp-rat-ag", "swamp-rat", 4, ["SWA"], "levels/swamp"], +["swamp-rat-nest-ag", "swamp-rat-nest", 4, ["SWA"], "levels/swamp"], +["swamp-rock-ag", "swamp-rock", 4, ["SWA"], "levels/swamp"], +["swamp-spike-ag", "swamp-spike", 4, ["SWA"], "levels/swamp"], +["swampcam-ag-SWA", "swampcam", 4, ["SWA"], "levels/swamp"], +["swampcam-ag-VI2", "swampcam", 4, ["VI2"], "levels/village2"], +["tar-plat-ag", "tar-plat", 4, ["SWA"], "levels/swamp"], +["swamp-vis", "swamp-vis", 4, ["SWA"], "levels/swamp"], +["title-obs", "title-obs", 3, ["TIT"], "levels/title"], +["tpage-1609", "tpage-1609", 4, ["TIT"], "levels/title"], +["tpage-416", "tpage-416", 4, ["TIT"], "levels/title"], +["tpage-415", "tpage-415", 4, ["TIT"], "levels/title"], +["tpage-397", "tpage-397", 4, ["TIT"], "levels/title"], +["tpage-1499", "tpage-1499", 4, ["TIT"], "levels/title"], +["logo-ag", "logo", 4, ["TIT"], "levels/title"], +["logo-black-ag", "logo-black", 4, ["TIT"], "levels/title"], +["logo-cam-ag", "logo-cam", 4, ["TIT"], "levels/title"], +["logo-volumes-ag", "logo-volumes", 4, ["TIT"], "levels/title"], +["ndi-ag", "ndi", 4, ["TIT"], "levels/title"], +["ndi-cam-ag", "ndi-cam", 4, ["TIT"], "levels/title"], +["ndi-volumes-ag", "ndi-volumes", 4, ["TIT"], "levels/title"], +["title-vis", "title-vis", 4, ["TIT"], "levels/title"], +["tpage-1309", "tpage-1309", 4, ["TRA"], "levels/training"], +["tpage-1311", "tpage-1311", 4, ["TRA"], "levels/training"], +["tpage-1310", "tpage-1310", 4, ["TRA"], "levels/training"], +["tpage-1308", "tpage-1308", 4, ["TRA"], "levels/training"], +["tpage-775", "tpage-775", 4, ["TRA"], "levels/training"], +["pontoonfive-ag-TRA", "pontoonfive", 4, ["TRA"], "levels/training"], +["pontoonfive-ag-VI2", "pontoonfive", 4, ["VI2"], "levels/village2"], +["scarecrow-a-ag", "scarecrow-a", 4, ["TRA"], "levels/training"], +["scarecrow-b-ag", "scarecrow-b", 4, ["TRA"], "levels/training"], +["trainingcam-ag", "trainingcam", 4, ["TRA"], "levels/training"], +["water-anim-training-ag", "water-anim-training", 4, ["TRA"], "levels/training"], +["training-vis", "training-vis", 4, ["TRA"], "levels/training"], +["tpage-398", "tpage-398", 4, ["VI1"], "levels/village1"], +["tpage-400", "tpage-400", 4, ["VI1"], "levels/village1"], +["tpage-399", "tpage-399", 4, ["VI1"], "levels/village1"], +["tpage-401", "tpage-401", 4, ["VI1"], "levels/village1"], +["tpage-1470", "tpage-1470", 4, ["VI1"], "levels/village1"], +["assistant-ag", "assistant", 4, ["VI1"], "levels/village1"], +["evilplant-ag", "evilplant", 4, ["VI1"], "levels/village1"], +["explorer-ag", "explorer", 4, ["VI1"], "levels/village1"], +["farmer-ag", "farmer", 4, ["VI1"], "levels/village1"], +["fishermans-boat-ag", "fishermans-boat", 4, ["VI1"], "levels/village1"], +["hutlamp-ag", "hutlamp", 4, ["VI1"], "levels/village1"], +["mayorgears-ag", "mayorgears", 4, ["VI1"], "levels/village1"], +["medres-beach-ag", "medres-beach", 4, ["VI1"], "levels/village1"], +["medres-beach1-ag", "medres-beach1", 4, ["VI1"], "levels/village1"], +["medres-beach2-ag", "medres-beach2", 4, ["VI1"], "levels/village1"], +["medres-beach3-ag", "medres-beach3", 4, ["VI1"], "levels/village1"], +["medres-jungle-ag", "medres-jungle", 4, ["VI1"], "levels/village1"], +["medres-jungle1-ag", "medres-jungle1", 4, ["VI1"], "levels/village1"], +["medres-jungle2-ag", "medres-jungle2", 4, ["VI1"], "levels/village1"], +["medres-misty-ag", "medres-misty", 4, ["VI1"], "levels/village1"], +["medres-training-ag", "medres-training", 4, ["VI1"], "levels/village1"], +["medres-village11-ag", "medres-village11", 4, ["VI1"], "levels/village1"], +["medres-village12-ag", "medres-village12", 4, ["VI1"], "levels/village1"], +["medres-village13-ag", "medres-village13", 4, ["VI1"], "levels/village1"], +["oracle-ag-VI1", "oracle", 4, ["VI1"], "levels/village1"], +["oracle-ag-VI2", "oracle", 4, ["VI2"], "levels/village2"], +["oracle-ag-VI3", "oracle", 4, ["VI3"], "levels/village3"], +["reflector-middle-ag", "reflector-middle", 4, ["VI1"], "levels/village1"], +["revcycle-ag", "revcycle", 4, ["VI1"], "levels/village1"], +["revcycleprop-ag", "revcycleprop", 4, ["VI1"], "levels/village1"], +["ropebridge-32-ag", "ropebridge-32", 4, ["VI1"], "levels/village1"], +["sage-ag", "sage", 4, ["VI1"], "levels/village1"], +["sagesail-ag", "sagesail", 4, ["VI1"], "levels/village1"], +["villa-starfish-ag", "villa-starfish", 4, ["VI1"], "levels/village1"], +["village-cam-ag-VI1", "village-cam", 4, ["VI1"], "levels/village1"], +["village-cam-ag-VI2", "village-cam", 4, ["VI2"], "levels/village2"], +["village-cam-ag-VI3", "village-cam", 4, ["VI3"], "levels/village3"], +["village1cam-ag", "village1cam", 4, ["VI1"], "levels/village1"], +["water-anim-village1-ag", "water-anim-village1", 4, ["VI1"], "levels/village1"], +["windmill-sail-ag", "windmill-sail", 4, ["VI1"], "levels/village1"], +["windspinner-ag", "windspinner", 4, ["VI1"], "levels/village1"], +["yakow-ag", "yakow", 4, ["VI1"], "levels/village1"], +["village1-vis", "village1-vis", 4, ["VI1"], "levels/village1"], +["tpage-919", "tpage-919", 4, ["VI2"], "levels/village2"], +["tpage-922", "tpage-922", 4, ["VI2"], "levels/village2"], +["tpage-920", "tpage-920", 4, ["VI2"], "levels/village2"], +["tpage-921", "tpage-921", 4, ["VI2"], "levels/village2"], +["tpage-1476", "tpage-1476", 4, ["VI2"], "levels/village2"], +["allpontoons-ag", "allpontoons", 4, ["VI2"], "levels/village2"], +["assistant-village2-ag", "assistant-village2", 4, ["VI2"], "levels/village2"], +["ceilingflag-ag", "ceilingflag", 4, ["VI2"], "levels/village2"], +["exit-chamber-dummy-ag", "exit-chamber-dummy", 4, ["VI2"], "levels/village2"], +["fireboulder-ag", "fireboulder", 4, ["VI2"], "levels/village2"], +["flutflut-bluehut-ag", "flutflut-bluehut", 4, ["VI2"], "levels/village2"], +["gambler-ag", "gambler", 4, ["VI2"], "levels/village2"], +["geologist-ag", "geologist", 4, ["VI2"], "levels/village2"], +["jaws-ag", "jaws", 4, ["VI2"], "levels/village2"], +["medres-rolling-ag", "medres-rolling", 4, ["VI2"], "levels/village2"], +["medres-rolling1-ag", "medres-rolling1", 4, ["VI2"], "levels/village2"], +["medres-village2-ag", "medres-village2", 4, ["VI2"], "levels/village2"], +["ogreboss-village2-ag", "ogreboss-village2", 4, ["VI2"], "levels/village2"], +["pontoonten-ag", "pontoonten", 4, ["VI2"], "levels/village2"], +["precursor-arm-ag", "precursor-arm", 4, ["VI2"], "levels/village2"], +["sage-bluehut-ag", "sage-bluehut", 4, ["VI2"], "levels/village2"], +["sunken-elevator-ag", "sunken-elevator", 4, ["VI2"], "levels/village2"], +["swamp-blimp-ag", "swamp-blimp", 4, ["VI2"], "levels/village2"], +["swamp-rope-ag", "swamp-rope", 4, ["VI2"], "levels/village2"], +["swamp-tetherrock-ag", "swamp-tetherrock", 4, ["VI2"], "levels/village2"], +["swamp-tetherrock-explode-ag", "swamp-tetherrock-explode", 4, ["VI2"], "levels/village2"], +["village2cam-ag", "village2cam", 4, ["VI2"], "levels/village2"], +["warrior-ag", "warrior", 4, ["VI2"], "levels/village2"], +["water-anim-village2-ag", "water-anim-village2", 4, ["VI2"], "levels/village2"], +["village2-vis", "village2-vis", 4, ["VI2"], "levels/village2"], +["tpage-1208", "tpage-1208", 4, ["VI3"], "levels/village3"], +["tpage-1210", "tpage-1210", 4, ["VI3"], "levels/village3"], +["tpage-1209", "tpage-1209", 4, ["VI3"], "levels/village3"], +["tpage-1194", "tpage-1194", 4, ["VI3"], "levels/village3"], +["assistant-village3-ag", "assistant-village3", 4, ["VI3"], "levels/village3"], +["cavegem-ag", "cavegem", 4, ["VI3"], "levels/village3"], +["evilbro-village3-ag", "evilbro-village3", 4, ["VI3"], "levels/village3"], +["evilsis-village3-ag", "evilsis-village3", 4, ["VI3"], "levels/village3"], +["gondola-ag", "gondola", 4, ["VI3"], "levels/village3"], +["gondolacables-ag", "gondolacables", 4, ["VI3"], "levels/village3"], +["lavaspoutdrip-ag", "lavaspoutdrip", 4, ["VI3"], "levels/village3"], +["medres-finalboss-ag", "medres-finalboss", 4, ["VI3"], "levels/village3"], +["medres-ogre-ag", "medres-ogre", 4, ["VI3"], "levels/village3"], +["medres-ogre2-ag", "medres-ogre2", 4, ["VI3"], "levels/village3"], +["medres-ogre3-ag", "medres-ogre3", 4, ["VI3"], "levels/village3"], +["minecartsteel-ag", "minecartsteel", 4, ["VI3"], "levels/village3"], +["minershort-ag", "minershort", 4, ["VI3"], "levels/village3"], +["minertall-ag", "minertall", 4, ["VI3"], "levels/village3"], +["pistons-ag", "pistons", 4, ["VI3"], "levels/village3"], +["sage-village3-ag", "sage-village3", 4, ["VI3"], "levels/village3"], +["vil3-bridge-36-ag", "vil3-bridge-36", 4, ["VI3"], "levels/village3"], +["water-anim-village3-ag", "water-anim-village3", 4, ["VI3"], "levels/village3"], +["village3-vis", "village3-vis", 4, ["VI3"], "levels/village3"], +["lava", "lava", 3, ["WATER-AN"], "old/lava"]] \ No newline at end of file diff --git a/scripts/make_empty_obj_files.py b/scripts/make_empty_obj_files.py index 61e6409092..ea02fafadd 100755 --- a/scripts/make_empty_obj_files.py +++ b/scripts/make_empty_obj_files.py @@ -4,1093 +4,7 @@ import argparse import glob import os -file_list = [["gcommon", "gcommon", 3, ["KERNEL"], "kernel"], -["gstring-h", "gstring-h", 3, ["KERNEL"], "kernel"], -["gkernel-h", "gkernel-h", 3, ["KERNEL"], "kernel"], -["gkernel", "gkernel", 3, ["KERNEL"], "kernel"], -["pskernel", "pskernel", 3, ["KERNEL"], "kernel"], -["gstring", "gstring", 3, ["KERNEL"], "kernel"], -["dgo-h", "dgo-h", 3, ["KERNEL"], "kernel"], -["gstate", "gstate", 3, ["KERNEL"], "kernel"], -["types-h", "types-h", 3, ["GAME", "ENGINE"], "engine/util"], -["vu1-macros", "vu1-macros", 3, ["GAME", "ENGINE"], "engine/ps2"], -["math", "math", 3, ["GAME", "ENGINE"], "engine/math"], -["vector-h", "vector-h", 3, ["GAME", "ENGINE"], "engine/math"], -["gravity-h", "gravity-h", 3, ["GAME", "ENGINE"], "engine/physics"], -["bounding-box-h", "bounding-box-h", 3, ["GAME", "ENGINE"], "engine/geometry"], -["matrix-h", "matrix-h", 3, ["GAME", "ENGINE"], "engine/math"], -["quaternion-h", "quaternion-h", 3, ["GAME", "ENGINE"], "engine/math"], -["euler-h", "euler-h", 3, ["GAME", "ENGINE"], "engine/math"], -["transform-h", "transform-h", 3, ["GAME", "ENGINE"], "engine/math"], -["geometry-h", "geometry-h", 3, ["GAME", "ENGINE"], "engine/geometry"], -["trigonometry-h", "trigonometry-h", 3, ["GAME", "ENGINE"], "engine/math"], -["transformq-h", "transformq-h", 3, ["GAME", "ENGINE"], "engine/math"], -["bounding-box", "bounding-box", 3, ["GAME", "ENGINE"], "engine/geometry"], -["matrix", "matrix", 3, ["GAME", "ENGINE"], "engine/math"], -["transform", "transform", 3, ["GAME", "ENGINE"], "engine/math"], -["quaternion", "quaternion", 3, ["GAME", "ENGINE"], "engine/math"], -["euler", "euler", 3, ["GAME", "ENGINE"], "engine/math"], -["geometry", "geometry", 3, ["GAME", "ENGINE"], "engine/geometry"], -["trigonometry", "trigonometry", 3, ["GAME", "ENGINE"], "engine/math"], -["gsound-h", "gsound-h", 3, ["GAME", "ENGINE"], "engine/sound"], -["timer-h", "timer-h", 3, ["GAME", "ENGINE"], "engine/ps2"], -["timer", "timer", 3, ["GAME", "ENGINE"], "engine/ps2"], -["vif-h", "vif-h", 3, ["GAME", "ENGINE"], "engine/ps2"], -["dma-h", "dma-h", 3, ["GAME", "ENGINE"], "engine/dma"], -["video-h", "video-h", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], -["vu1-user-h", "vu1-user-h", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], -["dma", "dma", 3, ["GAME", "ENGINE"], "engine/dma"], -["dma-buffer", "dma-buffer", 3, ["GAME", "ENGINE"], "engine/dma"], -["dma-bucket", "dma-bucket", 3, ["GAME", "ENGINE"], "engine/dma"], -["dma-disasm", "dma-disasm", 3, ["GAME", "ENGINE"], "engine/dma"], -["pad", "pad", 3, ["GAME", "ENGINE"], "engine/ps2"], -["gs", "gs", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], -["display-h", "display-h", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], -["vector", "vector", 3, ["GAME", "ENGINE"], "engine/math"], -["file-io", "file-io", 3, ["GAME", "ENGINE"], "engine/load"], -["loader-h", "loader-h", 3, ["GAME", "ENGINE"], "engine/load"], -["texture-h", "texture-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["level-h", "level-h", 3, ["GAME", "ENGINE"], "engine/level"], -["math-camera-h", "math-camera-h", 3, ["GAME", "ENGINE"], "engine/camera"], -["math-camera", "math-camera", 3, ["GAME", "ENGINE"], "engine/camera"], -["font-h", "font-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["decomp-h", "decomp-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["display", "display", 3, ["GAME", "ENGINE"], "engine/gfx/hw"], -["connect", "connect", 3, ["GAME", "ENGINE"], "engine/engine"], -["text-h", "text-h", 3, ["GAME", "ENGINE"], "engine/ui"], -["settings-h", "settings-h", 3, ["GAME", "ENGINE"], "engine/game"], -["capture", "capture", 3, ["GAME", "ENGINE"], "engine/gfx"], -["memory-usage-h", "memory-usage-h", 3, ["GAME", "ENGINE"], "engine/debug"], -["texture", "texture", 3, ["GAME", "ENGINE"], "engine/gfx"], -["main-h", "main-h", 3, ["GAME", "ENGINE"], "engine/game"], -["mspace-h", "mspace-h", 3, ["GAME", "ENGINE"], "engine/anim"], -["drawable-h", "drawable-h", 3, ["GAME", "ENGINE"], "engine/draw"], -["drawable-group-h", "drawable-group-h", 3, ["GAME", "ENGINE"], "engine/draw"], -["drawable-inline-array-h", "drawable-inline-array-h", 3, ["GAME", "ENGINE"], "engine/draw"], -["draw-node-h", "draw-node-h", 3, ["GAME", "ENGINE"], "engine/draw"], -["drawable-tree-h", "drawable-tree-h", 3, ["GAME", "ENGINE"], "engine/draw"], -["drawable-actor-h", "drawable-actor-h", 3, ["GAME", "ENGINE"], "engine/draw"], -["drawable-ambient-h", "drawable-ambient-h", 3, ["GAME", "ENGINE"], "engine/draw"], -["game-task-h", "game-task-h", 3, ["GAME", "ENGINE"], "engine/game/task"], -["hint-control-h", "hint-control-h", 3, ["GAME", "ENGINE"], "engine/game/task"], -["generic-h", "generic-h", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], -["lights-h", "lights-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["ocean-h", "ocean-h", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["ocean-trans-tables", "ocean-trans-tables", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["ocean-tables", "ocean-tables", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["ocean-frames", "ocean-frames", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["sky-h", "sky-h", 3, ["GAME", "ENGINE"], "engine/gfx/sky"], -["mood-h", "mood-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["time-of-day-h", "time-of-day-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["art-h", "art-h", 3, ["GAME", "ENGINE"], "engine/data"], -["generic-vu1-h", "generic-vu1-h", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], -["merc-h", "merc-h", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], -["generic-merc-h", "generic-merc-h", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], -["generic-tie-h", "generic-tie-h", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], -["generic-work-h", "generic-work-h", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], -["shadow-cpu-h", "shadow-cpu-h", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], -["shadow-vu1-h", "shadow-vu1-h", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], -["memcard-h", "memcard-h", 3, ["GAME", "ENGINE"], "engine/ps2"], -["game-info-h", "game-info-h", 3, ["GAME", "ENGINE"], "engine/game"], -["wind-h", "wind-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["prototype-h", "prototype-h", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], -["joint-h", "joint-h", 3, ["GAME", "ENGINE"], "engine/anim"], -["bones-h", "bones-h", 3, ["GAME", "ENGINE"], "engine/anim"], -["engines", "engines", 3, ["GAME", "ENGINE"], "engine/engine"], -["res-h", "res-h", 3, ["GAME", "ENGINE"], "engine/data"], -["res", "res", 3, ["GAME", "ENGINE"], "engine/data"], -["lights", "lights", 3, ["GAME", "ENGINE"], "engine/gfx"], -["dynamics-h", "dynamics-h", 3, ["GAME", "ENGINE"], "engine/physics"], -["surface-h", "surface-h", 3, ["GAME", "ENGINE"], "engine/target"], -["pat-h", "pat-h", 3, ["GAME", "ENGINE"], "engine/target"], -["fact-h", "fact-h", 3, ["GAME", "ENGINE"], "engine/game"], -["aligner-h", "aligner-h", 3, ["GAME", "ENGINE"], "engine/anim"], -["game-h", "game-h", 3, ["GAME", "ENGINE"], "engine/game"], -["generic-obs-h", "generic-obs-h", 3, ["GAME", "ENGINE"], "engine/game"], -["pov-camera-h", "pov-camera-h", 3, ["GAME", "ENGINE"], "engine/camera"], -["sync-info-h", "sync-info-h", 3, ["GAME", "ENGINE"], "engine/util"], -["smush-control-h", "smush-control-h", 3, ["GAME", "ENGINE"], "engine/util"], -["trajectory-h", "trajectory-h", 3, ["GAME", "ENGINE"], "engine/physics"], -["debug-h", "debug-h", 3, ["GAME", "ENGINE"], "engine/debug"], -["joint-mod-h", "joint-mod-h", 3, ["GAME", "ENGINE"], "engine/target"], -["collide-func-h", "collide-func-h", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-mesh-h", "collide-mesh-h", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-shape-h", "collide-shape-h", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-target-h", "collide-target-h", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-touch-h", "collide-touch-h", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-edge-grab-h", "collide-edge-grab-h", 3, ["GAME", "ENGINE"], "engine/collide"], -["process-drawable-h", "process-drawable-h", 3, ["GAME", "ENGINE"], "engine/draw"], -["effect-control-h", "effect-control-h", 3, ["GAME", "ENGINE"], "engine/game"], -["collide-frag-h", "collide-frag-h", 3, ["GAME", "ENGINE"], "engine/collide"], -["projectiles-h", "projectiles-h", 3, ["GAME", "ENGINE"], "engine/game"], -["target-h", "target-h", 3, ["GAME", "ENGINE"], "engine/target"], -["depth-cue-h", "depth-cue-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["stats-h", "stats-h", 3, ["GAME", "ENGINE"], "engine/debug"], -["bsp-h", "bsp-h", 3, ["GAME", "ENGINE"], "engine/gfx/vis"], -["collide-cache-h", "collide-cache-h", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-h", "collide-h", 3, ["GAME", "ENGINE"], "engine/collide"], -["shrubbery-h", "shrubbery-h", 3, ["GAME", "ENGINE"], "engine/gfx/shrub"], -["tie-h", "tie-h", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], -["tfrag-h", "tfrag-h", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], -["background-h", "background-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["subdivide-h", "subdivide-h", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], -["entity-h", "entity-h", 3, ["GAME", "ENGINE"], "engine/entity"], -["sprite-h", "sprite-h", 3, ["GAME", "ENGINE"], "engine/gfx/sprite"], -["shadow-h", "shadow-h", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], -["eye-h", "eye-h", 3, ["GAME", "ENGINE"], "engine/gfx"], -["sparticle-launcher-h", "sparticle-launcher-h", 3, ["GAME", "ENGINE"], "engine/sparticle"], -["sparticle-h", "sparticle-h", 3, ["GAME", "ENGINE"], "engine/sparticle"], -["actor-link-h", "actor-link-h", 3, ["GAME", "ENGINE"], "engine/entity"], -["camera-h", "camera-h", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-debug-h", "cam-debug-h", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-interface-h", "cam-interface-h", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-update-h", "cam-update-h", 3, ["GAME", "ENGINE"], "engine/camera"], -["assert-h", "assert-h", 3, ["GAME", "ENGINE"], "engine/debug"], -["hud-h", "hud-h", 3, ["GAME", "ENGINE"], "engine/ui"], -["progress-h", "progress-h", 3, ["GAME", "ENGINE"], "engine/ui"], -["rpc-h", "rpc-h", 3, ["GAME", "ENGINE"], "engine/ps2"], -["path-h", "path-h", 3, ["GAME", "ENGINE"], "engine/nav"], -["navigate-h", "navigate-h", 3, ["GAME", "ENGINE"], "engine/nav"], -["load-dgo", "load-dgo", 3, ["GAME", "ENGINE"], "engine/load"], -["ramdisk", "ramdisk", 3, ["GAME", "ENGINE"], "engine/load"], -["gsound", "gsound", 3, ["GAME", "ENGINE"], "engine/sound"], -["transformq", "transformq", 3, ["GAME", "ENGINE"], "engine/math"], -["collide-func", "collide-func", 3, ["GAME", "ENGINE"], "engine/collide"], -["joint", "joint", 3, ["GAME", "ENGINE"], "engine/anim"], -["cylinder", "cylinder", 3, ["GAME", "ENGINE"], "engine/geometry"], -["wind", "wind", 3, ["GAME", "ENGINE"], "engine/gfx"], -["bsp", "bsp", 3, ["GAME", "ENGINE"], "engine/gfx/vis"], -["subdivide", "subdivide", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], -["sprite", "sprite", 3, ["GAME", "ENGINE"], "engine/gfx/sprite"], -["sprite-distort", "sprite-distort", 3, ["GAME", "ENGINE"], "engine/gfx/sprite"], -["debug-sphere", "debug-sphere", 3, ["GAME", "ENGINE"], "engine/debug"], -["debug", "debug", 3, ["GAME", "ENGINE"], "engine/debug"], -["merc-vu1", "merc-vu1", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], -["merc-blend-shape", "merc-blend-shape", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], -["merc", "merc", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], -["ripple", "ripple", 3, ["GAME", "ENGINE"], "engine/gfx"], -["bones", "bones", 3, ["GAME", "ENGINE"], "engine/anim"], -["generic-vu0", "generic-vu0", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], -["generic", "generic", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], -["generic-vu1", "generic-vu1", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], -["generic-effect", "generic-effect", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], -["generic-merc", "generic-merc", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], -["generic-tie", "generic-tie", 3, ["GAME", "ENGINE"], "engine/gfx/generic"], -["shadow-cpu", "shadow-cpu", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], -["shadow-vu1", "shadow-vu1", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], -["depth-cue", "depth-cue", 3, ["GAME", "ENGINE"], "engine/gfx"], -["font", "font", 3, ["GAME", "ENGINE"], "engine/gfx"], -["decomp", "decomp", 3, ["GAME", "ENGINE"], "engine/load"], -["background", "background", 3, ["GAME", "ENGINE"], "engine/gfx"], -["draw-node", "draw-node", 3, ["GAME", "ENGINE"], "engine/draw"], -["shrubbery", "shrubbery", 3, ["GAME", "ENGINE"], "engine/gfx/shrub"], -["shrub-work", "shrub-work", 3, ["GAME", "ENGINE"], "engine/gfx/shrub"], -["tfrag-near", "tfrag-near", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], -["tfrag", "tfrag", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], -["tfrag-methods", "tfrag-methods", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], -["tfrag-work", "tfrag-work", 3, ["GAME", "ENGINE"], "engine/gfx/tfrag"], -["tie", "tie", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], -["tie-near", "tie-near", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], -["tie-work", "tie-work", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], -["tie-methods", "tie-methods", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], -["sync-info", "sync-info", 3, ["GAME", "ENGINE"], "engine/util"], -["trajectory", "trajectory", 3, ["GAME", "ENGINE"], "engine/physics"], -["sparticle-launcher", "sparticle-launcher", 3, ["GAME", "ENGINE"], "engine/sparticle"], -["sparticle", "sparticle", 3, ["GAME", "ENGINE"], "engine/sparticle"], -["entity-table", "entity-table", 3, ["GAME", "ENGINE"], "engine/entity"], -["loader", "loader", 3, ["GAME", "ENGINE"], "engine/load"], -["task-control-h", "task-control-h", 3, ["GAME", "ENGINE"], "engine/game/task"], -["game-info", "game-info", 3, ["GAME", "ENGINE"], "engine/game"], -["game-save", "game-save", 3, ["GAME", "ENGINE"], "engine/game"], -["settings", "settings", 3, ["GAME", "ENGINE"], "engine/game"], -["mood-tables", "mood-tables", 3, ["GAME", "ENGINE"], "engine/ambient"], -["mood", "mood", 3, ["GAME", "ENGINE"], "engine/ambient"], -["weather-part", "weather-part", 3, ["GAME", "ENGINE"], "engine/ambient"], -["time-of-day", "time-of-day", 3, ["GAME", "ENGINE"], "engine/gfx"], -["sky-utils", "sky-utils", 3, ["GAME", "ENGINE"], "engine/gfx/sky"], -["sky", "sky", 3, ["GAME", "ENGINE"], "engine/gfx/sky"], -["sky-tng", "sky-tng", 3, ["GAME", "ENGINE"], "engine/gfx/sky"], -["load-boundary-h", "load-boundary-h", 3, ["GAME", "ENGINE"], "engine/level"], -["load-boundary", "load-boundary", 3, ["GAME", "ENGINE"], "engine/level"], -["load-boundary-data", "load-boundary-data", 3, ["GAME", "ENGINE"], "engine/level"], -["level-info", "level-info", 3, ["GAME", "ENGINE"], "engine/level"], -["level", "level", 3, ["GAME", "ENGINE"], "engine/level"], -["text", "text", 3, ["GAME", "ENGINE"], "engine/ui"], -["collide-probe", "collide-probe", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-frag", "collide-frag", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-mesh", "collide-mesh", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-touch", "collide-touch", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-edge-grab", "collide-edge-grab", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-shape", "collide-shape", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-shape-rider", "collide-shape-rider", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide", "collide", 3, ["GAME", "ENGINE"], "engine/collide"], -["collide-planes", "collide-planes", 3, ["GAME", "ENGINE"], "engine/collide"], -["merc-death", "merc-death", 3, ["GAME", "ENGINE"], "engine/gfx/merc"], -["water-h", "water-h", 3, ["GAME", "ENGINE"], "engine/gfx/water"], -["camera", "camera", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-interface", "cam-interface", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-master", "cam-master", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-states", "cam-states", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-states-dbg", "cam-states-dbg", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-combiner", "cam-combiner", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-update", "cam-update", 3, ["GAME", "ENGINE"], "engine/camera"], -["vol-h", "vol-h", 3, ["GAME", "ENGINE"], "engine/geometry"], -["cam-layout", "cam-layout", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-debug", "cam-debug", 3, ["GAME", "ENGINE"], "engine/camera"], -["cam-start", "cam-start", 3, ["GAME", "ENGINE"], "engine/camera"], -["process-drawable", "process-drawable", 3, ["GAME", "ENGINE"], "engine/draw"], -["hint-control", "hint-control", 3, ["GAME", "ENGINE"], "engine/game/task"], -["ambient", "ambient", 3, ["GAME", "ENGINE"], "engine/ambient"], -["assert", "assert", 3, ["GAME", "ENGINE"], "engine/debug"], -["generic-obs", "generic-obs", 3, ["GAME", "ENGINE"], "engine/game"], -["target-util", "target-util", 3, ["GAME", "ENGINE"], "engine/target"], -["target-part", "target-part", 3, ["GAME", "ENGINE"], "engine/target"], -["collide-reaction-target", "collide-reaction-target", 3, ["GAME", "ENGINE"], "engine/collide"], -["logic-target", "logic-target", 3, ["GAME", "ENGINE"], "engine/target"], -["sidekick", "sidekick", 3, ["GAME", "ENGINE"], "engine/target"], -["voicebox", "voicebox", 3, ["GAME", "ENGINE"], "engine/game"], -["target-handler", "target-handler", 3, ["GAME", "ENGINE"], "engine/target"], -["target", "target", 3, ["GAME", "ENGINE"], "engine/target"], -["target2", "target2", 3, ["GAME", "ENGINE"], "engine/target"], -["target-death", "target-death", 3, ["GAME", "ENGINE"], "engine/target"], -["menu", "menu", 3, ["GAME", "ENGINE"], "engine/debug"], -["drawable", "drawable", 3, ["GAME", "ENGINE"], "engine/draw"], -["drawable-group", "drawable-group", 3, ["GAME", "ENGINE"], "engine/draw"], -["drawable-inline-array", "drawable-inline-array", 3, ["GAME", "ENGINE"], "engine/draw"], -["drawable-tree", "drawable-tree", 3, ["GAME", "ENGINE"], "engine/draw"], -["prototype", "prototype", 3, ["GAME", "ENGINE"], "engine/gfx/tie"], -["main-collide", "main-collide", 3, ["GAME", "ENGINE"], "engine/collide"], -["video", "video", 3, ["GAME", "ENGINE"], "engine/game"], -["main", "main", 3, ["GAME", "ENGINE"], "engine/game"], -["collide-cache", "collide-cache", 3, ["GAME", "ENGINE"], "engine/collide"], -["relocate", "relocate", 3, ["GAME", "ENGINE"], "engine/entity"], -["memory-usage", "memory-usage", 3, ["GAME", "ENGINE"], "engine/debug"], -["entity", "entity", 3, ["GAME", "ENGINE"], "engine/entity"], -["path", "path", 3, ["GAME", "ENGINE"], "engine/nav"], -["vol", "vol", 3, ["GAME", "ENGINE"], "engine/geometry"], -["navigate", "navigate", 3, ["GAME", "ENGINE"], "engine/nav"], -["aligner", "aligner", 3, ["GAME", "ENGINE"], "engine/anim"], -["effect-control", "effect-control", 3, ["GAME", "ENGINE"], "engine/game"], -["water", "water", 3, ["GAME", "ENGINE"], "engine/gfx/water"], -["collectables-part", "collectables-part", 3, ["GAME", "ENGINE"], "engine/game"], -["collectables", "collectables", 3, ["GAME", "ENGINE"], "engine/game"], -["task-control", "task-control", 3, ["GAME", "ENGINE"], "engine/game/task"], -["process-taskable", "process-taskable", 3, ["GAME", "ENGINE"], "engine/game/task"], -["pov-camera", "pov-camera", 3, ["GAME", "ENGINE"], "engine/camera"], -["powerups", "powerups", 3, ["GAME", "ENGINE"], "engine/game"], -["crates", "crates", 3, ["GAME", "ENGINE"], "engine/game"], -["hud", "hud", 3, ["GAME", "ENGINE"], "engine/ui"], -["hud-classes", "hud-classes", 3, ["GAME", "ENGINE"], "engine/ui"], -["progress-static", "progress-static", 3, ["GAME", "ENGINE"], "engine/ui/progress"], -["progress-part", "progress-part", 3, ["GAME", "ENGINE"], "engine/ui/progress"], -["progress-draw", "progress-draw", 3, ["GAME", "ENGINE"], "engine/ui/progress"], -["progress", "progress", 3, ["GAME", "ENGINE"], "engine/ui/progress"], -["credits", "credits", 3, ["GAME", "ENGINE"], "engine/ui"], -["projectiles", "projectiles", 3, ["GAME", "ENGINE"], "engine/game"], -["ocean", "ocean", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["ocean-vu0", "ocean-vu0", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["ocean-texture", "ocean-texture", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["ocean-mid", "ocean-mid", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["ocean-transition", "ocean-transition", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["ocean-near", "ocean-near", 3, ["GAME", "ENGINE"], "engine/gfx/ocean"], -["shadow", "shadow", 3, ["GAME", "ENGINE"], "engine/gfx/shadow"], -["eye", "eye", 3, ["GAME", "ENGINE"], "engine/gfx"], -["glist-h", "glist-h", 3, ["GAME", "ENGINE"], "engine/util"], -["glist", "glist", 3, ["GAME", "ENGINE"], "engine/util"], -["anim-tester", "anim-tester", 3, ["GAME", "ENGINE"], "engine/debug"], -["viewer", "viewer", 3, ["GAME", "ENGINE"], "engine/debug"], -["part-tester", "part-tester", 3, ["GAME", "ENGINE"], "engine/debug"], -["default-menu", "default-menu", 3, ["GAME", "ENGINE"], "engine/debug"], -["dir-tpages", "dir-tpages", 4, ["GAME", "ART"], "levels/common"], -["tpage-463", "tpage-463", 4, ["GAME", "ART"], "levels/common"], -["tpage-2", "tpage-2", 4, ["GAME", "ART"], "levels/common"], -["tpage-880", "tpage-880", 4, ["GAME", "ART"], "levels/common"], -["tpage-256", "tpage-256", 4, ["GAME", "ART"], "levels/common"], -["tpage-1278", "tpage-1278", 4, ["GAME", "ART"], "levels/common"], -["texture-upload", "texture-upload", 3, ["GAME", "ART"], "levels/common"], -["tpage-1032", "tpage-1032", 4, ["GAME", "ART"], "levels/common"], -["tpage-62", "tpage-62", 4, ["GAME", "ART"], "levels/common"], -["tpage-1532", "tpage-1532", 4, ["GAME", "ART"], "levels/common"], -["fuel-cell-ag", "fuel-cell", 4, ["GAME", "ART"], "levels/common"], -["money-ag", "money", 4, ["GAME", "ART"], "levels/common"], -["buzzer-ag", "buzzer", 4, ["GAME", "ART"], "levels/common"], -["ecovalve-ag-ART-GAME", "ecovalve", 4, ["GAME", "ART"], "levels/common"], -["ecovalve-ag-BEA", "ecovalve", 4, ["BEA"], "levels/beach"], -["ecovalve-ag-CIT", "ecovalve", 4, ["CIT"], "levels/citadel"], -["ecovalve-ag-FIN", "ecovalve", 4, ["FIN"], "levels/finalboss"], -["ecovalve-ag-JUB-JUN", "ecovalve", 4, ["JUB", "JUN"], "levels/jungle_common"], -["ecovalve-ag-FIC-OGR", "ecovalve", 4, ["FIC", "OGR"], "levels/common"], -["ecovalve-ag-LAV", "ecovalve", 4, ["LAV"], "levels/lavatube"], -["ecovalve-ag-MAI", "ecovalve", 4, ["MAI"], "levels/maincave"], -["ecovalve-ag-ROB", "ecovalve", 4, ["ROB"], "levels/robocave"], -["ecovalve-ag-ROL", "ecovalve", 4, ["ROL"], "levels/rolling"], -["ecovalve-ag-SNO", "ecovalve", 4, ["SNO"], "levels/snow"], -["ecovalve-ag-SUB", "ecovalve", 4, ["SUB"], "levels/sunkenb"], -["ecovalve-ag-SWA", "ecovalve", 4, ["SWA"], "levels/swamp"], -["ecovalve-ag-TRA", "ecovalve", 4, ["TRA"], "levels/training"], -["crate-ag", "crate", 4, ["GAME", "ART"], "levels/common"], -["speaker-ag", "speaker", 4, ["GAME", "ART"], "levels/common"], -["fuelcell-naked-ag", "fuelcell-naked", 4, ["GAME", "ART"], "levels/common"], -["eichar-ag", "eichar", 4, ["GAME", "ART"], "levels/common"], -["sidekick-ag", "sidekick", 4, ["GAME", "ART"], "levels/common"], -["deathcam-ag", "deathcam", 4, ["GAME", "ART"], "levels/common"], -["game-cnt", "game-cnt", 4, ["GAME", "ART"], "levels/common"], -["rigid-body-h", "rigid-body-h", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["water-anim", "water-anim", 3, ["GAME", "COMMON", "L1", "WATER-AN"], "levels/common"], -["dark-eco-pool", "dark-eco-pool", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["rigid-body", "rigid-body", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["nav-enemy-h", "nav-enemy-h", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["nav-enemy", "nav-enemy", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["baseplat", "baseplat", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["basebutton", "basebutton", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["tippy", "tippy", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["joint-exploder", "joint-exploder", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["babak", "babak", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["sharkey", "sharkey", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["orb-cache", "orb-cache", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["plat", "plat", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["plat-button", "plat-button", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["plat-eco", "plat-eco", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["ropebridge", "ropebridge", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["ticky", "ticky", 3, ["GAME", "COMMON", "L1"], "levels/common"], -["mistycannon", "mistycannon", 3, ["BEA", "L1", "MIS"], "levels/common"], -["babak-with-cannon", "babak-with-cannon", 3, ["BEA", "L1", "MIS"], "levels/common"], -["air-h", "air-h", 3, ["BEA", "L1"], "levels/beach"], -["air", "air", 3, ["BEA", "L1"], "levels/beach"], -["wobbler", "wobbler", 3, ["BEA", "L1"], "levels/beach"], -["twister", "twister", 3, ["BEA", "L1"], "levels/beach"], -["beach-obs", "beach-obs", 3, ["BEA", "L1"], "levels/beach"], -["bird-lady", "bird-lady", 3, ["BEA", "L1"], "levels/beach"], -["bird-lady-beach", "bird-lady-beach", 3, ["BEA", "L1"], "levels/beach"], -["mayor", "mayor", 3, ["BEA", "L1"], "levels/beach"], -["sculptor", "sculptor", 3, ["BEA", "L1"], "levels/beach"], -["pelican", "pelican", 3, ["BEA", "L1"], "levels/beach"], -["lurkerworm", "lurkerworm", 3, ["BEA", "L1"], "levels/beach"], -["lurkercrab", "lurkercrab", 3, ["BEA", "L1"], "levels/beach"], -["lurkerpuppy", "lurkerpuppy", 3, ["BEA", "L1"], "levels/beach"], -["beach-rocks", "beach-rocks", 3, ["BEA", "L1"], "levels/beach"], -["seagull", "seagull", 3, ["BEA", "L1"], "levels/beach"], -["beach-part", "beach-part", 3, ["BEA", "L1"], "levels/beach"], -["tpage-212", "tpage-212", 4, ["BEA"], "levels/beach"], -["tpage-214", "tpage-214", 4, ["BEA"], "levels/beach"], -["tpage-213", "tpage-213", 4, ["BEA"], "levels/beach"], -["tpage-215", "tpage-215", 4, ["BEA"], "levels/beach"], -["babak-ag", "babak", 4, ["BEA", "CIT", "JUN", "FIC", "MIS", "ROB", "ROL", "SNO", "SUB", "SUN", "SWA"], "levels/common"], -["barrel-ag-BEA", "barrel", 4, ["BEA"], "levels/beach"], -["barrel-ag-VI2", "barrel", 4, ["VI2"], "levels/village2"], -["beachcam-ag", "beachcam", 4, ["BEA"], "levels/beach"], -["bird-lady-ag", "bird-lady", 4, ["BEA"], "levels/beach"], -["bird-lady-beach-ag", "bird-lady-beach", 4, ["BEA"], "levels/beach"], -["bladeassm-ag", "bladeassm", 4, ["BEA"], "levels/beach"], -["ecoventrock-ag", "ecoventrock", 4, ["BEA"], "levels/beach"], -["flutflut-ag", "flutflut", 4, ["BEA"], "levels/beach"], -["flutflutegg-ag", "flutflutegg", 4, ["BEA"], "levels/beach"], -["grottopole-ag", "grottopole", 4, ["BEA"], "levels/beach"], -["harvester-ag", "harvester", 4, ["BEA"], "levels/beach"], -["kickrock-ag", "kickrock", 4, ["BEA"], "levels/beach"], -["lrocklrg-ag", "lrocklrg", 4, ["BEA"], "levels/beach"], -["lurkercrab-ag", "lurkercrab", 4, ["BEA"], "levels/beach"], -["lurkerpuppy-ag", "lurkerpuppy", 4, ["BEA"], "levels/beach"], -["lurkerworm-ag", "lurkerworm", 4, ["BEA"], "levels/beach"], -["mayor-ag", "mayor", 4, ["BEA"], "levels/beach"], -["mistycannon-ag", "mistycannon", 4, ["BEA", "MIS"], "levels/common"], -["orb-cache-top-ag-BEA", "orb-cache-top", 4, ["BEA"], "levels/beach"], -["orb-cache-top-ag-CIT", "orb-cache-top", 4, ["CIT"], "levels/citadel"], -["orb-cache-top-ag-JUN", "orb-cache-top", 4, ["JUN"], "levels/jungle"], -["orb-cache-top-ag-MIS", "orb-cache-top", 4, ["MIS"], "levels/misty"], -["orb-cache-top-ag-SNO", "orb-cache-top", 4, ["SNO"], "levels/snow"], -["orb-cache-top-ag-SUN", "orb-cache-top", 4, ["SUN"], "levels/sunken"], -["orb-cache-top-ag-VI1", "orb-cache-top", 4, ["VI1"], "levels/village1"], -["orb-cache-top-ag-VI2", "orb-cache-top", 4, ["VI2"], "levels/village2"], -["pelican-ag", "pelican", 4, ["BEA"], "levels/beach"], -["sack-ag-BEA", "sack", 4, ["BEA"], "levels/beach"], -["sack-ag-MIS", "sack", 4, ["MIS"], "levels/misty"], -["sculptor-ag", "sculptor", 4, ["BEA"], "levels/beach"], -["sculptor-muse-ag", "sculptor-muse", 4, ["BEA"], "levels/beach"], -["seagull-ag", "seagull", 4, ["BEA"], "levels/beach"], -["sharkey-ag-BEA-TRA-VI2", "sharkey", 4, ["BEA", "TRA", "VI2"], "levels/common"], -["sharkey-ag-JUN-MIS", "sharkey", 4, ["JUN", "MIS"], "levels/common"], -["sharkey-ag-SWA", "sharkey", 4, ["SWA"], "levels/swamp"], -["sharkey-ag-VI1", "sharkey", 4, ["VI1"], "levels/village1"], -["windmill-one-ag", "windmill-one", 4, ["BEA"], "levels/beach"], -["beach-vis", "beach-vis", 4, ["BEA"], "levels/beach"], -["villagep-obs", "villagep-obs", 3, ["CIT", "L1", "VI1", "VI2", "VI3", "VILLAGEP"], "levels/village_common"], -["oracle", "oracle", 3, ["CIT", "L1", "VI1", "VI2", "VI3", "VILLAGEP"], "levels/village_common"], -["battlecontroller", "battlecontroller", 3, ["CIT", "L1", "MIS", "SWA"], "levels/common"], -["citadel-part", "citadel-part", 3, ["CIT", "L1"], "levels/citadel"], -["citadel-obs", "citadel-obs", 3, ["CIT", "L1"], "levels/citadel"], -["citb-plat", "citb-plat", 3, ["CIT", "L1"], "levels/citadel"], -["citadel-sages", "citadel-sages", 3, ["CIT", "L1"], "levels/citadel"], -["snow-bunny", "snow-bunny", 3, ["CIT", "L1", "SNO"], "levels/common"], -["citb-bunny", "citb-bunny", 3, ["CIT", "L1"], "levels/citadel"], -["citb-drop-plat-CIT", "citb-drop-plat", 3, ["CIT"], "levels/citadel"], -["citb-drop-plat-L1", "citb-drop-plat", 3, ["L1"], "levels/l1_only"], -["assistant-citadel", "assistant-citadel", 3, ["CIT", "L1"], "levels/citadel"], -["tpage-1415", "tpage-1415", 4, ["CIT"], "levels/citadel"], -["tpage-1417", "tpage-1417", 4, ["CIT"], "levels/citadel"], -["tpage-1416", "tpage-1416", 4, ["CIT"], "levels/citadel"], -["tpage-1414", "tpage-1414", 4, ["CIT"], "levels/citadel"], -["assistant-lavatube-end-ag", "assistant-lavatube-end", 4, ["CIT"], "levels/citadel"], -["bluesage-ag", "bluesage", 4, ["CIT"], "levels/citadel"], -["citadelcam-ag", "citadelcam", 4, ["CIT"], "levels/citadel"], -["citb-arm-ag", "citb-arm", 4, ["CIT"], "levels/citadel"], -["citb-arm-shoulder-ag", "citb-arm-shoulder", 4, ["CIT"], "levels/citadel"], -["citb-bunny-ag", "citb-bunny", 4, ["CIT"], "levels/citadel"], -["citb-button-ag", "citb-button", 4, ["CIT"], "levels/citadel"], -["citb-chain-plat-ag", "citb-chain-plat", 4, ["CIT"], "levels/citadel"], -["citb-chains-ag", "citb-chains", 4, ["CIT"], "levels/citadel"], -["citb-coil-ag", "citb-coil", 4, ["CIT"], "levels/citadel"], -["citb-disc-ag", "citb-disc", 4, ["CIT"], "levels/citadel"], -["citb-donut-ag", "citb-donut", 4, ["CIT"], "levels/citadel"], -["citb-drop-plat-ag", "citb-drop-plat", 4, ["CIT"], "levels/citadel"], -["citb-exit-plat-ag", "citb-exit-plat", 4, ["CIT"], "levels/citadel"], -["citb-firehose-ag", "citb-firehose", 4, ["CIT"], "levels/citadel"], -["citb-generator-ag", "citb-generator", 4, ["CIT"], "levels/citadel"], -["citb-hose-ag", "citb-hose", 4, ["CIT"], "levels/citadel"], -["citb-iris-door-ag", "citb-iris-door", 4, ["CIT"], "levels/citadel"], -["citb-launcher-ag", "citb-launcher", 4, ["CIT"], "levels/citadel"], -["citb-robotboss-ag", "citb-robotboss", 4, ["CIT"], "levels/citadel"], -["citb-rotatebox-ag", "citb-rotatebox", 4, ["CIT"], "levels/citadel"], -["citb-sagecage-ag", "citb-sagecage", 4, ["CIT"], "levels/citadel"], -["citb-stopbox-ag", "citb-stopbox", 4, ["CIT"], "levels/citadel"], -["evilbro-citadel-ag", "evilbro-citadel", 4, ["CIT"], "levels/citadel"], -["evilsis-citadel-ag", "evilsis-citadel", 4, ["CIT"], "levels/citadel"], -["green-sagecage-ag", "green-sagecage", 4, ["CIT", "FIN"], "levels/common"], -["plat-citb-ag", "plat-citb", 4, ["CIT"], "levels/citadel"], -["plat-eco-citb-ag", "plat-eco-citb", 4, ["CIT"], "levels/citadel"], -["redsage-ag", "redsage", 4, ["CIT"], "levels/citadel"], -["warp-gate-switch-ag-CIT", "warp-gate-switch", 4, ["CIT"], "levels/citadel"], -["warp-gate-switch-ag-TRA", "warp-gate-switch", 4, ["TRA"], "levels/training"], -["warp-gate-switch-ag-VI1-VI3", "warp-gate-switch", 4, ["VI1", "VI3"], "levels/common"], -["warp-gate-switch-ag-VI2", "warp-gate-switch", 4, ["VI2"], "levels/village2"], -["warpgate-ag", "warpgate", 4, ["CIT", "TRA", "VI1", "VI2", "VI3"], "levels/common"], -["yellowsage-ag", "yellowsage", 4, ["CIT"], "levels/citadel"], -["citadel-vis", "citadel-vis", 4, ["CIT"], "levels/citadel"], -["darkcave-obs", "darkcave-obs", 3, ["DAR", "L1"], "levels/darkcave"], -["tpage-1306", "tpage-1306", 4, ["DAR"], "levels/darkcave"], -["tpage-1307", "tpage-1307", 4, ["DAR"], "levels/darkcave"], -["tpage-1305", "tpage-1305", 4, ["DAR"], "levels/darkcave"], -["tpage-1304", "tpage-1304", 4, ["DAR"], "levels/darkcave"], -["tpage-1352", "tpage-1352", 4, ["DAR"], "levels/darkcave"], -["baby-spider-ag-DAR", "baby-spider", 4, ["DAR"], "levels/darkcave"], -["baby-spider-ag-MAI", "baby-spider", 4, ["MAI"], "levels/maincave"], -["baby-spider-ag-ROB", "baby-spider", 4, ["ROB"], "levels/robocave"], -["cavecrystal-ag", "cavecrystal", 4, ["DAR"], "levels/darkcave"], -["caveelevator-ag", "caveelevator", 4, ["DAR", "ROB"], "levels/cave_common"], -["cavespatula-darkcave-ag", "cavespatula-darkcave", 4, ["DAR"], "levels/darkcave"], -["cavetrapdoor-ag-DAR", "cavetrapdoor", 4, ["DAR"], "levels/darkcave"], -["cavetrapdoor-ag-MAI", "cavetrapdoor", 4, ["MAI"], "levels/maincave"], -["cavetrapdoor-ag-ROB", "cavetrapdoor", 4, ["ROB"], "levels/robocave"], -["dark-crystal-ag", "dark-crystal", 4, ["DAR", "MAI"], "levels/cave_common"], -["mother-spider-ag", "mother-spider", 4, ["DAR", "MAI"], "levels/cave_common"], -["spider-egg-ag-DAR-MAI", "spider-egg", 4, ["DAR", "MAI"], "levels/cave_common"], -["spider-egg-ag-ROB", "spider-egg", 4, ["ROB"], "levels/robocave"], -["water-anim-darkcave-ag", "water-anim-darkcave", 4, ["DAR"], "levels/darkcave"], -["darkcave-vis", "darkcave-vis", 4, ["DAR"], "levels/darkcave"], -["demo-obs", "demo-obs", 3, ["DEM", "L1"], "levels/demo"], -["tpage-1485", "tpage-1485", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1486", "tpage-1486", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1487", "tpage-1487", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1599", "tpage-1599", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1600", "tpage-1600", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1601", "tpage-1601", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1602", "tpage-1602", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1603", "tpage-1603", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1604", "tpage-1604", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1605", "tpage-1605", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1606", "tpage-1606", 4, ["DEM", "L1"], "levels/demo"], -["tpage-1607", "tpage-1607", 4, ["DEM", "L1"], "levels/demo"], -["static-screen", "static-screen", 3, ["DEM", "L1", "TIT"], "levels/common"], -["tpage-1480", "tpage-1480", 4, ["DEM"], "levels/demo"], -["tpage-1479", "tpage-1479", 4, ["DEM"], "levels/demo"], -["demo-vis", "demo-vis", 4, ["DEM"], "levels/demo"], -["robotboss-h", "robotboss-h", 3, ["FIN", "L1"], "levels/finalboss"], -["robotboss-part", "robotboss-part", 3, ["FIN", "L1"], "levels/finalboss"], -["sage-finalboss-part", "sage-finalboss-part", 3, ["FIN", "L1"], "levels/finalboss"], -["light-eco", "light-eco", 3, ["FIN", "L1"], "levels/finalboss"], -["robotboss-weapon", "robotboss-weapon", 3, ["FIN", "L1"], "levels/finalboss"], -["robotboss-misc", "robotboss-misc", 3, ["FIN", "L1"], "levels/finalboss"], -["green-eco-lurker", "green-eco-lurker", 3, ["FIN", "L1"], "levels/finalboss"], -["robotboss", "robotboss", 3, ["FIN", "L1"], "levels/finalboss"], -["final-door", "final-door", 3, ["FIN", "L1"], "levels/finalboss"], -["sage-finalboss-FIN", "sage-finalboss", 3, ["FIN"], "levels/finalboss"], -["sage-finalboss-L1", "sage-finalboss", 3, ["L1"], "levels/l1_only"], -["tpage-1419", "tpage-1419", 4, ["FIN"], "levels/finalboss"], -["tpage-1420", "tpage-1420", 4, ["FIN"], "levels/finalboss"], -["tpage-634", "tpage-634", 4, ["FIN"], "levels/finalboss"], -["tpage-1418", "tpage-1418", 4, ["FIN"], "levels/finalboss"], -["tpage-545", "tpage-545", 4, ["FIN"], "levels/finalboss"], -["darkecobomb-ag", "darkecobomb", 4, ["FIN"], "levels/finalboss"], -["ecoclaw-ag", "ecoclaw", 4, ["FIN"], "levels/finalboss"], -["finalbosscam-ag", "finalbosscam", 4, ["FIN"], "levels/finalboss"], -["green-eco-lurker-ag", "green-eco-lurker", 4, ["FIN"], "levels/finalboss"], -["greenshot-ag", "greenshot", 4, ["FIN"], "levels/finalboss"], -["jak-white-ag", "jak-white", 4, ["FIN"], "levels/finalboss"], -["light-eco-ag", "light-eco", 4, ["FIN"], "levels/finalboss"], -["plat-eco-finalboss-ag", "plat-eco-finalboss", 4, ["FIN"], "levels/finalboss"], -["power-left-ag", "power-left", 4, ["FIN"], "levels/finalboss"], -["power-right-ag", "power-right", 4, ["FIN"], "levels/finalboss"], -["powercellalt-ag", "powercellalt", 4, ["FIN"], "levels/finalboss"], -["redring-ag", "redring", 4, ["FIN"], "levels/finalboss"], -["robotboss-ag", "robotboss", 4, ["FIN"], "levels/finalboss"], -["robotboss-blueeco-ag", "robotboss-blueeco", 4, ["FIN"], "levels/finalboss"], -["robotboss-cinematic-ag", "robotboss-cinematic", 4, ["FIN"], "levels/finalboss"], -["robotboss-redeco-ag", "robotboss-redeco", 4, ["FIN"], "levels/finalboss"], -["robotboss-yelloweco-ag", "robotboss-yelloweco", 4, ["FIN"], "levels/finalboss"], -["silodoor-ag", "silodoor", 4, ["FIN"], "levels/finalboss"], -["water-anim-finalboss-ag", "water-anim-finalboss", 4, ["FIN"], "levels/finalboss"], -["finalboss-vis", "finalboss-vis", 4, ["FIN"], "levels/finalboss"], -["evilbro", "evilbro", 3, ["INT", "L1"], "levels/intro"], -["tpage-1455", "tpage-1455", 4, ["INT"], "levels/intro"], -["tpage-1457", "tpage-1457", 4, ["INT"], "levels/intro"], -["tpage-1456", "tpage-1456", 4, ["INT"], "levels/intro"], -["tpage-1454", "tpage-1454", 4, ["INT"], "levels/intro"], -["evilbro-ag", "evilbro", 4, ["INT"], "levels/intro"], -["evilsis-ag", "evilsis", 4, ["INT"], "levels/intro"], -["intro-vis", "intro-vis", 4, ["INT"], "levels/intro"], -["jungleb-obs", "jungleb-obs", 3, ["JUB", "L1"], "levels/jungleb"], -["plat-flip", "plat-flip", 3, ["JUB", "L1"], "levels/jungleb"], -["plant-boss-main+0-ag", "plant-boss-main+0", 4, ["JUB", "L1"], "levels/jungleb"], -["aphid", "aphid", 3, ["JUB", "L1"], "levels/jungleb"], -["plant-boss", "plant-boss", 3, ["JUB", "L1"], "levels/jungleb"], -["tpage-485", "tpage-485", 4, ["JUB"], "levels/jungleb"], -["tpage-510", "tpage-510", 4, ["JUB"], "levels/jungleb"], -["tpage-507", "tpage-507", 4, ["JUB"], "levels/jungleb"], -["tpage-966", "tpage-966", 4, ["JUB"], "levels/jungleb"], -["aphid-lurker-ag", "aphid-lurker", 4, ["JUB"], "levels/jungleb"], -["darkvine-ag-JUB", "darkvine", 4, ["JUB"], "levels/jungleb"], -["darkvine-ag-JUN", "darkvine", 4, ["JUN"], "levels/jungle"], -["eggtop-ag", "eggtop", 4, ["JUB"], "levels/jungleb"], -["jng-iris-door-ag-JUB", "jng-iris-door", 4, ["JUB"], "levels/jungleb"], -["jng-iris-door-ag-TRA", "jng-iris-door", 4, ["TRA"], "levels/training"], -["plant-boss-ag", "plant-boss", 4, ["JUB"], "levels/jungleb"], -["plat-flip-ag", "plat-flip", 4, ["JUB"], "levels/jungleb"], -["plat-jungleb-ag", "plat-jungleb", 4, ["JUB"], "levels/jungleb"], -["jungleb-vis", "jungleb-vis", 4, ["JUB"], "levels/jungleb"], -["eichar-fish+0-ag-JUN", "eichar-fish+0", 4, ["JUN"], "levels/jungle"], -["eichar-fish+0-ag-JUNGLE", "eichar-fish+0", 4, ["JUNGLE"], "levels/l1_only"], -["eichar-fish+0-ag-L1", "eichar-fish+0", 4, ["L1"], "levels/l1_only"], -["jungle-elevator", "jungle-elevator", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], -["bouncer", "bouncer", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], -["hopper", "hopper", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], -["junglesnake", "junglesnake", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], -["darkvine", "darkvine", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], -["jungle-obs", "jungle-obs", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], -["jungle-mirrors", "jungle-mirrors", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], -["junglefish", "junglefish", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], -["fisher-JUN", "fisher", 3, ["JUN"], "levels/jungle"], -["fisher-JUNGLE-L1", "fisher", 3, ["JUNGLE", "L1"], "levels/jungle"], -["jungle-part", "jungle-part", 3, ["JUN", "JUNGLE", "L1"], "levels/jungle"], -["launcherdoor", "launcherdoor", 3, ["JUN", "JUNGLE", "L1", "MAI", "MAINCAVE", "SUN", "SUNKEN"], "levels/common"], -["tpage-385", "tpage-385", 4, ["JUN"], "levels/jungle"], -["tpage-531", "tpage-531", 4, ["JUN"], "levels/jungle"], -["tpage-386", "tpage-386", 4, ["JUN"], "levels/jungle"], -["tpage-388", "tpage-388", 4, ["JUN"], "levels/jungle"], -["tpage-765", "tpage-765", 4, ["JUN"], "levels/jungle"], -["accordian-ag", "accordian", 4, ["JUN"], "levels/jungle"], -["bounceytarp-ag", "bounceytarp", 4, ["JUN"], "levels/jungle"], -["catch-fisha-ag", "catch-fisha", 4, ["JUN"], "levels/jungle"], -["catch-fishb-ag", "catch-fishb", 4, ["JUN"], "levels/jungle"], -["catch-fishc-ag", "catch-fishc", 4, ["JUN"], "levels/jungle"], -["fish-net-ag", "fish-net", 4, ["JUN"], "levels/jungle"], -["fisher-ag", "fisher", 4, ["JUN"], "levels/jungle"], -["hopper-ag", "hopper", 4, ["JUN"], "levels/jungle"], -["junglecam-ag", "junglecam", 4, ["JUN"], "levels/jungle"], -["junglefish-ag", "junglefish", 4, ["JUN"], "levels/jungle"], -["junglesnake-ag", "junglesnake", 4, ["JUN"], "levels/jungle"], -["launcherdoor-ag-JUN", "launcherdoor", 4, ["JUN"], "levels/jungle"], -["launcherdoor-ag-SUN", "launcherdoor", 4, ["SUN"], "levels/sunken"], -["logtrap-ag", "logtrap", 4, ["JUN"], "levels/jungle"], -["lurkerm-piston-ag", "lurkerm-piston", 4, ["JUN"], "levels/jungle"], -["lurkerm-tall-sail-ag", "lurkerm-tall-sail", 4, ["JUN"], "levels/jungle"], -["maindoor-ag", "maindoor", 4, ["JUN"], "levels/jungle"], -["medres-firecanyon-ag", "medres-firecanyon", 4, ["JUN"], "levels/jungle"], -["periscope-ag", "periscope", 4, ["JUN"], "levels/jungle"], -["plat-button-ag", "plat-button", 4, ["JUN"], "levels/jungle"], -["plat-eco-ag-JUN", "plat-eco", 4, ["JUN"], "levels/jungle"], -["plat-eco-ag-MIS", "plat-eco", 4, ["MIS"], "levels/misty"], -["plat-eco-ag-ROB", "plat-eco", 4, ["ROB"], "levels/robocave"], -["plat-eco-ag-TRA", "plat-eco", 4, ["TRA"], "levels/training"], -["precurbridge-ag", "precurbridge", 4, ["JUN"], "levels/jungle"], -["reflector-mirror-ag", "reflector-mirror", 4, ["JUN"], "levels/jungle"], -["ropebridge-52-ag", "ropebridge-52", 4, ["JUN"], "levels/jungle"], -["ropebridge-70-ag", "ropebridge-70", 4, ["JUN"], "levels/jungle"], -["sidedoor-ag", "sidedoor", 4, ["JUN"], "levels/jungle"], -["towertop-ag", "towertop", 4, ["JUN"], "levels/jungle"], -["water-anim-jungle-ag", "water-anim-jungle", 4, ["JUN"], "levels/jungle"], -["jungle-vis", "jungle-vis", 4, ["JUN"], "levels/jungle"], -["target-racer-h-L1-RACERP", "target-racer-h", 3, ["L1", "RACERP"], "levels/l1_only"], -["target-racer-h-FIC-LAV-MIS-OGR-ROL", "target-racer-h", 3, ["FIC", "LAV", "MIS", "OGR", "ROL"], "levels/racer_common"], -["racer-part", "racer-part", 3, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], -["racer", "racer", 3, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], -["target-racer-L1-RACERP", "target-racer", 3, ["L1", "RACERP"], "levels/l1_only"], -["target-racer-FIC-LAV-MIS-OGR-ROL", "target-racer", 3, ["FIC", "LAV", "MIS", "OGR", "ROL"], "levels/racer_common"], -["racer-states-L1-RACERP", "racer-states", 3, ["L1", "RACERP"], "levels/l1_only"], -["racer-states-FIC-LAV-MIS-OGR-ROL", "racer-states", 3, ["FIC", "LAV", "MIS", "OGR", "ROL"], "levels/racer_common"], -["collide-reaction-racer", "collide-reaction-racer", 3, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], -["eichar-racer+0-ag", "eichar-racer+0", 4, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], -["tpage-1119", "tpage-1119", 4, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL"], "levels/racer_common"], -["blocking-plane", "blocking-plane", 3, ["L1", "FIC", "LAV", "MIS", "OGR", "RACERP", "ROL", "SNO", "SWA"], "levels/common"], -["flut-part", "flut-part", 3, ["L1", "SNO", "SWA"], "levels/flut_common"], -["flutflut", "flutflut", 3, ["L1", "SNO", "SWA"], "levels/flut_common"], -["target-flut", "target-flut", 3, ["L1", "SNO", "SWA"], "levels/flut_common"], -["eichar-flut+0-ag", "eichar-flut+0", 4, ["L1", "SNO", "SWA"], "levels/flut_common"], -["farmer", "farmer", 3, ["L1", "VI1"], "levels/village1"], -["explorer", "explorer", 3, ["L1", "VI1"], "levels/village1"], -["assistant", "assistant", 3, ["L1", "VI1"], "levels/village1"], -["sage", "sage", 3, ["L1", "VI1"], "levels/village1"], -["yakow", "yakow", 3, ["L1", "VI1"], "levels/village1"], -["village-obs-L1", "village-obs", 3, ["L1"], "levels/l1_only"], -["village-obs-VI1", "village-obs", 3, ["VI1"], "levels/village1"], -["fishermans-boat", "fishermans-boat", 3, ["L1", "VI1"], "levels/village1"], -["village1-part", "village1-part", 3, ["L1", "VI1"], "levels/village1"], -["village1-part2", "village1-part2", 3, ["L1", "VI1"], "levels/village1"], -["sequence-a-village1", "sequence-a-village1", 3, ["L1", "VI1"], "levels/village1"], -["training-obs", "training-obs", 3, ["L1", "TRA"], "levels/training"], -["training-part", "training-part", 3, ["L1", "TRA"], "levels/training"], -["misty-obs", "misty-obs", 3, ["L1", "MIS"], "levels/misty"], -["misty-warehouse", "misty-warehouse", 3, ["L1", "MIS"], "levels/misty"], -["misty-conveyor", "misty-conveyor", 3, ["L1", "MIS"], "levels/misty"], -["mud", "mud", 3, ["L1", "MIS"], "levels/misty"], -["muse", "muse", 3, ["L1", "MIS"], "levels/misty"], -["bonelurker", "bonelurker", 3, ["L1", "MIS"], "levels/misty"], -["quicksandlurker", "quicksandlurker", 3, ["L1", "MIS"], "levels/misty"], -["misty-teetertotter", "misty-teetertotter", 3, ["L1", "MIS"], "levels/misty"], -["balloonlurker", "balloonlurker", 3, ["L1", "MIS"], "levels/misty"], -["misty-part", "misty-part", 3, ["L1", "MIS"], "levels/misty"], -["sidekick-human", "sidekick-human", 3, ["L1", "MIS"], "levels/misty"], -["firecanyon-part", "firecanyon-part", 3, ["L1", "FIC"], "levels/firecanyon"], -["assistant-firecanyon", "assistant-firecanyon", 3, ["L1", "FIC"], "levels/firecanyon"], -["village2-part", "village2-part", 3, ["L1", "VI2"], "levels/village2"], -["village2-obs", "village2-obs", 3, ["L1", "VI2"], "levels/village2"], -["village2-part2", "village2-part2", 3, ["L1", "VI2"], "levels/village2"], -["gambler", "gambler", 3, ["L1", "VI2"], "levels/village2"], -["warrior", "warrior", 3, ["L1", "VI2"], "levels/village2"], -["geologist", "geologist", 3, ["L1", "VI2"], "levels/village2"], -["swamp-blimp", "swamp-blimp", 3, ["L1", "VI2"], "levels/village2"], -["sage-bluehut", "sage-bluehut", 3, ["L1", "VI2"], "levels/village2"], -["flutflut-bluehut", "flutflut-bluehut", 3, ["L1", "VI2"], "levels/village2"], -["assistant-village2", "assistant-village2", 3, ["L1", "VI2"], "levels/village2"], -["sunken-elevator", "sunken-elevator", 3, ["L1", "VI2"], "levels/village2"], -["swamp-obs", "swamp-obs", 3, ["L1", "SWA"], "levels/swamp"], -["swamp-bat", "swamp-bat", 3, ["L1", "SWA"], "levels/swamp"], -["swamp-rat", "swamp-rat", 3, ["L1", "SWA"], "levels/swamp"], -["swamp-rat-nest", "swamp-rat-nest", 3, ["L1", "SWA"], "levels/swamp"], -["kermit", "kermit", 3, ["L1", "SWA"], "levels/swamp"], -["swamp-part", "swamp-part", 3, ["L1", "SWA"], "levels/swamp"], -["billy", "billy", 3, ["L1", "SWA"], "levels/swamp"], -["cavecrystal-light", "cavecrystal-light", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["maincave-obs", "maincave-obs", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["maincave-part", "maincave-part", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["spiderwebs", "spiderwebs", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["dark-crystal", "dark-crystal", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["baby-spider", "baby-spider", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["mother-spider-h", "mother-spider-h", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["mother-spider-egg", "mother-spider-egg", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["mother-spider-proj", "mother-spider-proj", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["mother-spider", "mother-spider", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["gnawer", "gnawer", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["driller-lurker", "driller-lurker", 3, ["L1", "MAI", "MAINCAVE"], "levels/maincave"], -["sunken-part", "sunken-part", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["sunken-part2", "sunken-part2", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["sunken-part3", "sunken-part3", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["sunken-part4", "sunken-part4", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["sunken-part5", "sunken-part5", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["target-tube", "target-tube", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["eichar-tube+0-ag-L1-SUNKEN", "eichar-tube+0", 4, ["L1", "SUNKEN"], "levels/l1_only"], -["eichar-tube+0-ag-SUN", "eichar-tube+0", 4, ["SUN"], "levels/sunken"], -["sunken-obs", "sunken-obs", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["shover", "shover", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["square-platform", "square-platform", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["sun-iris-door", "sun-iris-door", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["orbit-plat", "orbit-plat", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["wedge-plats", "wedge-plats", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["wall-plat", "wall-plat", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["qbert-plat", "qbert-plat", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["steam-cap", "steam-cap", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["sun-exit-chamber", "sun-exit-chamber", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["floating-launcher", "floating-launcher", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["sunken-water", "sunken-water", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["whirlpool", "whirlpool", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["sunken-pipegame", "sunken-pipegame", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["bully", "bully", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["double-lurker", "double-lurker", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["helix-water", "helix-water", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["puffer", "puffer", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["sunken-fish", "sunken-fish", 3, ["L1", "SUN", "SUNKEN"], "levels/sunken"], -["rolling-obs", "rolling-obs", 3, ["L1", "ROL"], "levels/rolling"], -["rolling-lightning-mole", "rolling-lightning-mole", 3, ["L1", "ROL"], "levels/rolling"], -["rolling-robber", "rolling-robber", 3, ["L1", "ROL"], "levels/rolling"], -["rolling-race-ring", "rolling-race-ring", 3, ["L1", "ROL"], "levels/rolling"], -["firecanyon-obs", "firecanyon-obs", 3, ["L1", "FIC", "OGR"], "levels/firecanyon"], -["ogre-part", "ogre-part", 3, ["L1", "OGR"], "levels/ogre"], -["ogreboss", "ogreboss", 3, ["L1", "OGR"], "levels/ogre"], -["ogre-obs", "ogre-obs", 3, ["L1", "OGR"], "levels/ogre"], -["flying-lurker", "flying-lurker", 3, ["L1", "OGR"], "levels/ogre"], -["village3-part", "village3-part", 3, ["L1", "VI3"], "levels/village3"], -["village3-obs", "village3-obs", 3, ["L1", "VI3"], "levels/village3"], -["minecart", "minecart", 3, ["L1", "VI3"], "levels/village3"], -["miners", "miners", 3, ["L1", "VI3"], "levels/village3"], -["assistant-village3", "assistant-village3", 3, ["L1", "VI3"], "levels/village3"], -["sage-village3", "sage-village3", 3, ["L1", "VI3"], "levels/village3"], -["cave-trap", "cave-trap", 3, ["L1", "ROB"], "levels/robocave"], -["spider-egg", "spider-egg", 3, ["L1", "ROB"], "levels/robocave"], -["robocave-part", "robocave-part", 3, ["L1", "ROB"], "levels/robocave"], -["target-snowball", "target-snowball", 3, ["L1", "SNO"], "levels/snow"], -["target-ice", "target-ice", 3, ["L1", "SNO"], "levels/snow"], -["ice-cube", "ice-cube", 3, ["L1", "SNO"], "levels/snow"], -["snow-ball", "snow-ball", 3, ["L1", "SNO"], "levels/snow"], -["snow-obs", "snow-obs", 3, ["L1", "SNO"], "levels/snow"], -["snow-flutflut-obs", "snow-flutflut-obs", 3, ["L1", "SNO"], "levels/snow"], -["snow-bumper", "snow-bumper", 3, ["L1", "SNO"], "levels/snow"], -["snow-ram-h", "snow-ram-h", 3, ["L1", "SNO"], "levels/snow"], -["snow-ram-boss", "snow-ram-boss", 3, ["L1", "SNO"], "levels/snow"], -["snow-ram", "snow-ram", 3, ["L1", "SNO"], "levels/snow"], -["snow-part", "snow-part", 3, ["L1", "SNO"], "levels/snow"], -["yeti", "yeti", 3, ["L1", "SNO"], "levels/snow"], -["eichar-pole+0-ag-L1", "eichar-pole+0", 4, ["L1"], "levels/l1_only"], -["eichar-pole+0-ag-ROB", "eichar-pole+0", 4, ["ROB"], "levels/rolling"], -["eichar-pole+0-ag-SNO", "eichar-pole+0", 4, ["SNO"], "levels/snow"], -["eichar-pole+0-ag-SWA", "eichar-pole+0", 4, ["SWA"], "levels/swamp"], -["eichar-ice+0-ag", "eichar-ice+0", 4, ["L1", "SNO"], "levels/snow"], -["lavatube-obs", "lavatube-obs", 3, ["L1", "LAV"], "levels/lavatube"], -["lavatube-energy", "lavatube-energy", 3, ["L1", "LAV"], "levels/lavatube"], -["lavatube-part", "lavatube-part", 3, ["L1", "LAV"], "levels/lavatube"], -["assistant-lavatube", "assistant-lavatube", 3, ["L1", "LAV"], "levels/lavatube"], -["tpage-815", "tpage-815", 4, ["FIC"], "levels/firecanyon"], -["tpage-822", "tpage-822", 4, ["FIC"], "levels/firecanyon"], -["tpage-854", "tpage-854", 4, ["FIC"], "levels/firecanyon"], -["tpage-1123", "tpage-1123", 4, ["FIC"], "levels/firecanyon"], -["assistant-firecanyon-ag", "assistant-firecanyon", 4, ["FIC"], "levels/firecanyon"], -["balloon-ag", "balloon", 4, ["FIC"], "levels/firecanyon"], -["crate-darkeco-cluster-ag-FIC", "crate-darkeco-cluster", 4, ["FIC"], "levels/firecanyon"], -["crate-darkeco-cluster-ag-OGR", "crate-darkeco-cluster", 4, ["OGR"], "levels/ogre"], -["ef-plane-ag-FIC-LAV-OGR-ROL-SNO-SWA", "ef-plane", 4, ["FIC", "LAV", "OGR", "ROL", "SNO", "SWA"], "levels/common"], -["ef-plane-ag-MIS", "ef-plane", 4, ["MIS"], "levels/misty"], -["racer-ag-FIC-ROL", "racer", 4, ["FIC", "ROL"], "levels/common"], -["racer-ag-LAV", "racer", 4, ["LAV"], "levels/lavatube"], -["racer-ag-MIS", "racer", 4, ["MIS"], "levels/misty"], -["racer-ag-OGR", "racer", 4, ["OGR"], "levels/ogre"], -["spike-ag", "spike", 4, ["FIC"], "levels/firecanyon"], -["firecanyon-vis", "firecanyon-vis", 4, ["FIC"], "levels/firecanyon"], -["tpage-1338", "tpage-1338", 4, ["LAV"], "levels/lavatube"], -["tpage-1340", "tpage-1340", 4, ["LAV"], "levels/lavatube"], -["tpage-1339", "tpage-1339", 4, ["LAV"], "levels/lavatube"], -["tpage-1337", "tpage-1337", 4, ["LAV"], "levels/lavatube"], -["assistant-lavatube-start-ag", "assistant-lavatube-start", 4, ["LAV"], "levels/lavatube"], -["chainmine-ag", "chainmine", 4, ["LAV"], "levels/lavatube"], -["darkecobarrel-ag", "darkecobarrel", 4, ["LAV"], "levels/lavatube"], -["energyarm-ag", "energyarm", 4, ["LAV"], "levels/lavatube"], -["energyball-ag", "energyball", 4, ["LAV"], "levels/lavatube"], -["energybase-ag", "energybase", 4, ["LAV"], "levels/lavatube"], -["energydoor-ag", "energydoor", 4, ["LAV"], "levels/lavatube"], -["energyhub-ag", "energyhub", 4, ["LAV"], "levels/lavatube"], -["lavaballoon-ag", "lavaballoon", 4, ["LAV"], "levels/lavatube"], -["lavabase-ag", "lavabase", 4, ["LAV"], "levels/lavatube"], -["lavafall-ag", "lavafall", 4, ["LAV"], "levels/lavatube"], -["lavafallsewera-ag", "lavafallsewera", 4, ["LAV"], "levels/lavatube"], -["lavafallsewerb-ag", "lavafallsewerb", 4, ["LAV"], "levels/lavatube"], -["lavashortcut-ag", "lavashortcut", 4, ["LAV"], "levels/lavatube"], -["lavayellowtarp-ag", "lavayellowtarp", 4, ["LAV"], "levels/lavatube"], -["water-anim-lavatube-ag", "water-anim-lavatube", 4, ["LAV"], "levels/lavatube"], -["lavatube-vis", "lavatube-vis", 4, ["LAV"], "levels/lavatube"], -["tpage-1313", "tpage-1313", 4, ["MAI"], "levels/maincave"], -["tpage-1315", "tpage-1315", 4, ["MAI"], "levels/maincave"], -["tpage-1314", "tpage-1314", 4, ["MAI"], "levels/maincave"], -["tpage-1312", "tpage-1312", 4, ["MAI"], "levels/maincave"], -["tpage-767", "tpage-767", 4, ["MAI"], "levels/maincave"], -["driller-lurker-ag", "driller-lurker", 4, ["MAI", "ROB"], "levels/cave_common"], -["gnawer-ag", "gnawer", 4, ["MAI"], "levels/maincave"], -["launcherdoor-maincave-ag", "launcherdoor-maincave", 4, ["MAI"], "levels/maincave"], -["maincavecam-ag", "maincavecam", 4, ["MAI"], "levels/maincave"], -["plat-ag-MAI", "plat", 4, ["MAI"], "levels/maincave"], -["plat-ag-ROB", "plat", 4, ["ROB"], "levels/robocave"], -["spiderwebs-ag", "spiderwebs", 4, ["MAI", "ROB"], "levels/cave_common"], -["water-anim-maincave-ag", "water-anim-maincave", 4, ["MAI"], "levels/maincave"], -["water-anim-maincave-water-ag", "water-anim-maincave-water", 4, ["MAI"], "levels/maincave"], -["maincave-vis", "maincave-vis", 4, ["MAI"], "levels/maincave"], -["tpage-516", "tpage-516", 4, ["MIS"], "levels/misty"], -["tpage-521", "tpage-521", 4, ["MIS"], "levels/misty"], -["tpage-518", "tpage-518", 4, ["MIS"], "levels/misty"], -["tpage-520", "tpage-520", 4, ["MIS"], "levels/misty"], -["balloonlurker-ag", "balloonlurker", 4, ["MIS"], "levels/misty"], -["boatpaddle-ag", "boatpaddle", 4, ["MIS"], "levels/misty"], -["bonelurker-ag", "bonelurker", 4, ["MIS"], "levels/misty"], -["breakaway-left-ag", "breakaway-left", 4, ["MIS"], "levels/misty"], -["breakaway-mid-ag", "breakaway-mid", 4, ["MIS"], "levels/misty"], -["breakaway-right-ag", "breakaway-right", 4, ["MIS"], "levels/misty"], -["darkecocan-ag", "darkecocan", 4, ["MIS"], "levels/misty"], -["keg-ag", "keg", 4, ["MIS"], "levels/misty"], -["keg-conveyor-ag", "keg-conveyor", 4, ["MIS"], "levels/misty"], -["keg-conveyor-paddle-ag", "keg-conveyor-paddle", 4, ["MIS"], "levels/misty"], -["mis-bone-bridge-ag", "mis-bone-bridge", 4, ["MIS"], "levels/misty"], -["mis-bone-platform-ag", "mis-bone-platform", 4, ["MIS"], "levels/misty"], -["mistycam-ag", "mistycam", 4, ["MIS"], "levels/misty"], -["muse-ag", "muse", 4, ["MIS"], "levels/misty"], -["quicksandlurker-ag", "quicksandlurker", 4, ["MIS"], "levels/misty"], -["ropebridge-36-ag", "ropebridge-36", 4, ["MIS"], "levels/misty"], -["rounddoor-ag", "rounddoor", 4, ["MIS"], "levels/misty"], -["sidekick-human-ag", "sidekick-human", 4, ["MIS"], "levels/misty"], -["silostep-ag", "silostep", 4, ["MIS"], "levels/misty"], -["teetertotter-ag", "teetertotter", 4, ["MIS"], "levels/misty"], -["water-anim-misty-ag", "water-anim-misty", 4, ["MIS"], "levels/misty"], -["wheel-ag", "wheel", 4, ["MIS"], "levels/misty"], -["windturbine-ag", "windturbine", 4, ["MIS"], "levels/misty"], -["misty-vis", "misty-vis", 4, ["MIS"], "levels/misty"], -["tpage-875", "tpage-875", 4, ["OGR"], "levels/ogre"], -["tpage-967", "tpage-967", 4, ["OGR"], "levels/ogre"], -["tpage-884", "tpage-884", 4, ["OGR"], "levels/ogre"], -["tpage-1117", "tpage-1117", 4, ["OGR"], "levels/ogre"], -["flying-lurker-ag", "flying-lurker", 4, ["OGR"], "levels/ogre"], -["medres-snow-ag", "medres-snow", 4, ["OGR"], "levels/ogre"], -["ogre-bridge-ag", "ogre-bridge", 4, ["OGR"], "levels/ogre"], -["ogre-bridgeend-ag", "ogre-bridgeend", 4, ["OGR"], "levels/ogre"], -["ogre-isle-ag", "ogre-isle", 4, ["OGR"], "levels/ogre"], -["ogre-step-ag", "ogre-step", 4, ["OGR"], "levels/ogre"], -["ogreboss-ag", "ogreboss", 4, ["OGR"], "levels/ogre"], -["ogrecam-ag", "ogrecam", 4, ["OGR"], "levels/ogre"], -["plunger-lurker-ag", "plunger-lurker", 4, ["OGR"], "levels/ogre"], -["shortcut-boulder-ag", "shortcut-boulder", 4, ["OGR"], "levels/ogre"], -["tntbarrel-ag", "tntbarrel", 4, ["OGR"], "levels/ogre"], -["water-anim-ogre-ag", "water-anim-ogre", 4, ["OGR"], "levels/ogre"], -["ogre-vis", "ogre-vis", 4, ["OGR"], "levels/ogre"], -["tpage-1318", "tpage-1318", 4, ["ROB"], "levels/robocave"], -["tpage-1319", "tpage-1319", 4, ["ROB"], "levels/robocave"], -["tpage-1317", "tpage-1317", 4, ["ROB"], "levels/robocave"], -["tpage-1316", "tpage-1316", 4, ["ROB"], "levels/robocave"], -["cavecrusher-ag", "cavecrusher", 4, ["ROB"], "levels/robocave"], -["cavespatulatwo-ag", "cavespatulatwo", 4, ["ROB"], "levels/robocave"], -["water-anim-robocave-ag", "water-anim-robocave", 4, ["ROB"], "levels/robocave"], -["robocave-vis", "robocave-vis", 4, ["ROB"], "levels/robocave"], -["tpage-923", "tpage-923", 4, ["ROL"], "levels/rolling"], -["tpage-926", "tpage-926", 4, ["ROL"], "levels/rolling"], -["tpage-924", "tpage-924", 4, ["ROL"], "levels/rolling"], -["tpage-925", "tpage-925", 4, ["ROL"], "levels/rolling"], -["tpage-1353", "tpage-1353", 4, ["ROL"], "levels/rolling"], -["dark-plant-ag", "dark-plant", 4, ["ROL"], "levels/rolling"], -["happy-plant-ag", "happy-plant", 4, ["ROL"], "levels/rolling"], -["lightning-mole-ag", "lightning-mole", 4, ["ROL"], "levels/rolling"], -["pusher-ag", "pusher", 4, ["ROL"], "levels/rolling"], -["race-ring-ag", "race-ring", 4, ["ROL"], "levels/rolling"], -["robber-ag", "robber", 4, ["ROL"], "levels/rolling"], -["rolling-start-ag", "rolling-start", 4, ["ROL"], "levels/rolling"], -["rollingcam-ag", "rollingcam", 4, ["ROL"], "levels/rolling"], -["water-anim-rolling-ag", "water-anim-rolling", 4, ["ROL"], "levels/rolling"], -["rolling-vis", "rolling-vis", 4, ["ROL"], "levels/rolling"], -["tpage-710", "tpage-710", 4, ["SNO"], "levels/snow"], -["tpage-842", "tpage-842", 4, ["SNO"], "levels/snow"], -["tpage-711", "tpage-711", 4, ["SNO"], "levels/snow"], -["tpage-712", "tpage-712", 4, ["SNO"], "levels/snow"], -["flut-saddle-ag-SNO", "flut-saddle", 4, ["SNO"], "levels/snow"], -["flut-saddle-ag-SWA", "flut-saddle", 4, ["SWA"], "levels/swamp"], -["flutflut-plat-large-ag", "flutflut-plat-large", 4, ["SNO"], "levels/snow"], -["flutflut-plat-med-ag", "flutflut-plat-med", 4, ["SNO"], "levels/snow"], -["flutflut-plat-small-ag", "flutflut-plat-small", 4, ["SNO"], "levels/snow"], -["ice-cube-ag", "ice-cube", 4, ["SNO"], "levels/snow"], -["ice-cube-break-ag", "ice-cube-break", 4, ["SNO"], "levels/snow"], -["ram-ag", "ram", 4, ["SNO"], "levels/snow"], -["ram-boss-ag", "ram-boss", 4, ["SNO"], "levels/snow"], -["snow-ball-ag", "snow-ball", 4, ["SNO"], "levels/snow"], -["snow-bridge-36-ag", "snow-bridge-36", 4, ["SNO"], "levels/snow"], -["snow-bumper-ag", "snow-bumper", 4, ["SNO"], "levels/snow"], -["snow-bunny-ag", "snow-bunny", 4, ["SNO"], "levels/snow"], -["snow-button-ag", "snow-button", 4, ["SNO"], "levels/snow"], -["snow-eggtop-ag", "snow-eggtop", 4, ["SNO"], "levels/snow"], -["snow-fort-gate-ag", "snow-fort-gate", 4, ["SNO"], "levels/snow"], -["snow-gears-ag", "snow-gears", 4, ["SNO"], "levels/snow"], -["snow-log-ag", "snow-log", 4, ["SNO"], "levels/snow"], -["snow-spatula-ag", "snow-spatula", 4, ["SNO"], "levels/snow"], -["snow-switch-ag", "snow-switch", 4, ["SNO"], "levels/snow"], -["snowcam-ag", "snowcam", 4, ["SNO"], "levels/snow"], -["snowpusher-ag", "snowpusher", 4, ["SNO"], "levels/snow"], -["yeti-ag", "yeti", 4, ["SNO"], "levels/snow"], -["snow-vis", "snow-vis", 4, ["SNO"], "levels/snow"], -["tpage-163", "tpage-163", 4, ["SUB"], "levels/sunkenb"], -["tpage-164", "tpage-164", 4, ["SUB"], "levels/sunkenb"], -["tpage-166", "tpage-166", 4, ["SUB"], "levels/sunkenb"], -["tpage-162", "tpage-162", 4, ["SUB"], "levels/sunkenb"], -["tpage-764", "tpage-764", 4, ["SUB"], "levels/sunkenb"], -["blue-eco-charger-ag", "blue-eco-charger", 4, ["SUB"], "levels/sunkenb"], -["blue-eco-charger-orb-ag", "blue-eco-charger-orb", 4, ["SUB"], "levels/sunkenb"], -["bully-ag", "bully", 4, ["SUB", "SUN"], "levels/sunken_common"], -["floating-launcher-ag", "floating-launcher", 4, ["SUB"], "levels/sunkenb"], -["helix-button-ag", "helix-button", 4, ["SUB"], "levels/sunkenb"], -["helix-slide-door-ag", "helix-slide-door", 4, ["SUB"], "levels/sunkenb"], -["shover-ag-SUB", "shover", 4, ["SUB"], "levels/sunkenb"], -["shover-ag-SUN", "shover", 4, ["SUN"], "levels/sunken"], -["steam-cap-ag-SUB", "steam-cap", 4, ["SUB"], "levels/sunkenb"], -["steam-cap-ag-SUN", "steam-cap", 4, ["SUN"], "levels/sunken"], -["sunkencam-ag-SUB", "sunkencam", 4, ["SUB"], "levels/sunkenb"], -["sunkencam-ag-SUN", "sunkencam", 4, ["SUN"], "levels/sunken"], -["sunkenfisha-ag", "sunkenfisha", 4, ["SUB", "SUN"], "levels/sunken_common"], -["wall-plat-ag", "wall-plat", 4, ["SUB", "SUN"], "levels/sunken_common"], -["water-anim-sunken-ag", "water-anim-sunken", 4, ["SUB", "SUN"], "levels/sunken_common"], -["water-anim-sunken-dark-eco-ag", "water-anim-sunken-dark-eco", 4, ["SUB", "SUN"], "levels/sunken_common"], -["sunkenb-vis", "sunkenb-vis", 4, ["SUB"], "levels/sunkenb"], -["tpage-661", "tpage-661", 4, ["SUN"], "levels/sunken"], -["tpage-663", "tpage-663", 4, ["SUN"], "levels/sunken"], -["tpage-714", "tpage-714", 4, ["SUN"], "levels/sunken"], -["tpage-662", "tpage-662", 4, ["SUN"], "levels/sunken"], -["tpage-766", "tpage-766", 4, ["SUN"], "levels/sunken"], -["double-lurker-ag", "double-lurker", 4, ["SUN"], "levels/sunken"], -["double-lurker-top-ag", "double-lurker-top", 4, ["SUN"], "levels/sunken"], -["exit-chamber-ag", "exit-chamber", 4, ["SUN"], "levels/sunken"], -["generic-button-ag", "generic-button", 4, ["SUN"], "levels/sunken"], -["orbit-plat-ag", "orbit-plat", 4, ["SUN"], "levels/sunken"], -["orbit-plat-bottom-ag", "orbit-plat-bottom", 4, ["SUN"], "levels/sunken"], -["plat-sunken-ag", "plat-sunken", 4, ["SUN"], "levels/sunken"], -["puffer-ag", "puffer", 4, ["SUN"], "levels/sunken"], -["qbert-plat-ag", "qbert-plat", 4, ["SUN"], "levels/sunken"], -["qbert-plat-on-ag", "qbert-plat-on", 4, ["SUN"], "levels/sunken"], -["seaweed-ag", "seaweed", 4, ["SUN"], "levels/sunken"], -["side-to-side-plat-ag", "side-to-side-plat", 4, ["SUN"], "levels/sunken"], -["square-platform-ag", "square-platform", 4, ["SUN"], "levels/sunken"], -["sun-iris-door-ag", "sun-iris-door", 4, ["SUN"], "levels/sunken"], -["wedge-plat-ag", "wedge-plat", 4, ["SUN"], "levels/sunken"], -["wedge-plat-outer-ag", "wedge-plat-outer", 4, ["SUN"], "levels/sunken"], -["whirlpool-ag", "whirlpool", 4, ["SUN"], "levels/sunken"], -["sunken-vis", "sunken-vis", 4, ["SUN"], "levels/sunken"], -["tpage-358", "tpage-358", 4, ["SWA"], "levels/swamp"], -["tpage-659", "tpage-659", 4, ["SWA"], "levels/swamp"], -["tpage-629", "tpage-629", 4, ["SWA"], "levels/swamp"], -["tpage-630", "tpage-630", 4, ["SWA"], "levels/swamp"], -["balance-plat-ag", "balance-plat", 4, ["SWA"], "levels/swamp"], -["billy-ag", "billy", 4, ["SWA"], "levels/swamp"], -["billy-sidekick-ag", "billy-sidekick", 4, ["SWA"], "levels/swamp"], -["farthy-snack-ag", "farthy-snack", 4, ["SWA"], "levels/swamp"], -["kermit-ag", "kermit", 4, ["SWA"], "levels/swamp"], -["swamp-bat-ag", "swamp-bat", 4, ["SWA"], "levels/swamp"], -["swamp-rat-ag", "swamp-rat", 4, ["SWA"], "levels/swamp"], -["swamp-rat-nest-ag", "swamp-rat-nest", 4, ["SWA"], "levels/swamp"], -["swamp-rock-ag", "swamp-rock", 4, ["SWA"], "levels/swamp"], -["swamp-spike-ag", "swamp-spike", 4, ["SWA"], "levels/swamp"], -["swampcam-ag-SWA", "swampcam", 4, ["SWA"], "levels/swamp"], -["swampcam-ag-VI2", "swampcam", 4, ["VI2"], "levels/village2"], -["tar-plat-ag", "tar-plat", 4, ["SWA"], "levels/swamp"], -["swamp-vis", "swamp-vis", 4, ["SWA"], "levels/swamp"], -["title-obs", "title-obs", 3, ["TIT"], "levels/title"], -["tpage-1609", "tpage-1609", 4, ["TIT"], "levels/title"], -["tpage-416", "tpage-416", 4, ["TIT"], "levels/title"], -["tpage-415", "tpage-415", 4, ["TIT"], "levels/title"], -["tpage-397", "tpage-397", 4, ["TIT"], "levels/title"], -["tpage-1499", "tpage-1499", 4, ["TIT"], "levels/title"], -["logo-ag", "logo", 4, ["TIT"], "levels/title"], -["logo-black-ag", "logo-black", 4, ["TIT"], "levels/title"], -["logo-cam-ag", "logo-cam", 4, ["TIT"], "levels/title"], -["logo-volumes-ag", "logo-volumes", 4, ["TIT"], "levels/title"], -["ndi-ag", "ndi", 4, ["TIT"], "levels/title"], -["ndi-cam-ag", "ndi-cam", 4, ["TIT"], "levels/title"], -["ndi-volumes-ag", "ndi-volumes", 4, ["TIT"], "levels/title"], -["title-vis", "title-vis", 4, ["TIT"], "levels/title"], -["tpage-1309", "tpage-1309", 4, ["TRA"], "levels/training"], -["tpage-1311", "tpage-1311", 4, ["TRA"], "levels/training"], -["tpage-1310", "tpage-1310", 4, ["TRA"], "levels/training"], -["tpage-1308", "tpage-1308", 4, ["TRA"], "levels/training"], -["tpage-775", "tpage-775", 4, ["TRA"], "levels/training"], -["pontoonfive-ag-TRA", "pontoonfive", 4, ["TRA"], "levels/training"], -["pontoonfive-ag-VI2", "pontoonfive", 4, ["VI2"], "levels/village2"], -["scarecrow-a-ag", "scarecrow-a", 4, ["TRA"], "levels/training"], -["scarecrow-b-ag", "scarecrow-b", 4, ["TRA"], "levels/training"], -["trainingcam-ag", "trainingcam", 4, ["TRA"], "levels/training"], -["water-anim-training-ag", "water-anim-training", 4, ["TRA"], "levels/training"], -["training-vis", "training-vis", 4, ["TRA"], "levels/training"], -["tpage-398", "tpage-398", 4, ["VI1"], "levels/village1"], -["tpage-400", "tpage-400", 4, ["VI1"], "levels/village1"], -["tpage-399", "tpage-399", 4, ["VI1"], "levels/village1"], -["tpage-401", "tpage-401", 4, ["VI1"], "levels/village1"], -["tpage-1470", "tpage-1470", 4, ["VI1"], "levels/village1"], -["assistant-ag", "assistant", 4, ["VI1"], "levels/village1"], -["evilplant-ag", "evilplant", 4, ["VI1"], "levels/village1"], -["explorer-ag", "explorer", 4, ["VI1"], "levels/village1"], -["farmer-ag", "farmer", 4, ["VI1"], "levels/village1"], -["fishermans-boat-ag", "fishermans-boat", 4, ["VI1"], "levels/village1"], -["hutlamp-ag", "hutlamp", 4, ["VI1"], "levels/village1"], -["mayorgears-ag", "mayorgears", 4, ["VI1"], "levels/village1"], -["medres-beach-ag", "medres-beach", 4, ["VI1"], "levels/village1"], -["medres-beach1-ag", "medres-beach1", 4, ["VI1"], "levels/village1"], -["medres-beach2-ag", "medres-beach2", 4, ["VI1"], "levels/village1"], -["medres-beach3-ag", "medres-beach3", 4, ["VI1"], "levels/village1"], -["medres-jungle-ag", "medres-jungle", 4, ["VI1"], "levels/village1"], -["medres-jungle1-ag", "medres-jungle1", 4, ["VI1"], "levels/village1"], -["medres-jungle2-ag", "medres-jungle2", 4, ["VI1"], "levels/village1"], -["medres-misty-ag", "medres-misty", 4, ["VI1"], "levels/village1"], -["medres-training-ag", "medres-training", 4, ["VI1"], "levels/village1"], -["medres-village11-ag", "medres-village11", 4, ["VI1"], "levels/village1"], -["medres-village12-ag", "medres-village12", 4, ["VI1"], "levels/village1"], -["medres-village13-ag", "medres-village13", 4, ["VI1"], "levels/village1"], -["oracle-ag-VI1", "oracle", 4, ["VI1"], "levels/village1"], -["oracle-ag-VI2", "oracle", 4, ["VI2"], "levels/village2"], -["oracle-ag-VI3", "oracle", 4, ["VI3"], "levels/village3"], -["reflector-middle-ag", "reflector-middle", 4, ["VI1"], "levels/village1"], -["revcycle-ag", "revcycle", 4, ["VI1"], "levels/village1"], -["revcycleprop-ag", "revcycleprop", 4, ["VI1"], "levels/village1"], -["ropebridge-32-ag", "ropebridge-32", 4, ["VI1"], "levels/village1"], -["sage-ag", "sage", 4, ["VI1"], "levels/village1"], -["sagesail-ag", "sagesail", 4, ["VI1"], "levels/village1"], -["villa-starfish-ag", "villa-starfish", 4, ["VI1"], "levels/village1"], -["village-cam-ag-VI1", "village-cam", 4, ["VI1"], "levels/village1"], -["village-cam-ag-VI2", "village-cam", 4, ["VI2"], "levels/village2"], -["village-cam-ag-VI3", "village-cam", 4, ["VI3"], "levels/village3"], -["village1cam-ag", "village1cam", 4, ["VI1"], "levels/village1"], -["water-anim-village1-ag", "water-anim-village1", 4, ["VI1"], "levels/village1"], -["windmill-sail-ag", "windmill-sail", 4, ["VI1"], "levels/village1"], -["windspinner-ag", "windspinner", 4, ["VI1"], "levels/village1"], -["yakow-ag", "yakow", 4, ["VI1"], "levels/village1"], -["village1-vis", "village1-vis", 4, ["VI1"], "levels/village1"], -["tpage-919", "tpage-919", 4, ["VI2"], "levels/village2"], -["tpage-922", "tpage-922", 4, ["VI2"], "levels/village2"], -["tpage-920", "tpage-920", 4, ["VI2"], "levels/village2"], -["tpage-921", "tpage-921", 4, ["VI2"], "levels/village2"], -["tpage-1476", "tpage-1476", 4, ["VI2"], "levels/village2"], -["allpontoons-ag", "allpontoons", 4, ["VI2"], "levels/village2"], -["assistant-village2-ag", "assistant-village2", 4, ["VI2"], "levels/village2"], -["ceilingflag-ag", "ceilingflag", 4, ["VI2"], "levels/village2"], -["exit-chamber-dummy-ag", "exit-chamber-dummy", 4, ["VI2"], "levels/village2"], -["fireboulder-ag", "fireboulder", 4, ["VI2"], "levels/village2"], -["flutflut-bluehut-ag", "flutflut-bluehut", 4, ["VI2"], "levels/village2"], -["gambler-ag", "gambler", 4, ["VI2"], "levels/village2"], -["geologist-ag", "geologist", 4, ["VI2"], "levels/village2"], -["jaws-ag", "jaws", 4, ["VI2"], "levels/village2"], -["medres-rolling-ag", "medres-rolling", 4, ["VI2"], "levels/village2"], -["medres-rolling1-ag", "medres-rolling1", 4, ["VI2"], "levels/village2"], -["medres-village2-ag", "medres-village2", 4, ["VI2"], "levels/village2"], -["ogreboss-village2-ag", "ogreboss-village2", 4, ["VI2"], "levels/village2"], -["pontoonten-ag", "pontoonten", 4, ["VI2"], "levels/village2"], -["precursor-arm-ag", "precursor-arm", 4, ["VI2"], "levels/village2"], -["sage-bluehut-ag", "sage-bluehut", 4, ["VI2"], "levels/village2"], -["sunken-elevator-ag", "sunken-elevator", 4, ["VI2"], "levels/village2"], -["swamp-blimp-ag", "swamp-blimp", 4, ["VI2"], "levels/village2"], -["swamp-rope-ag", "swamp-rope", 4, ["VI2"], "levels/village2"], -["swamp-tetherrock-ag", "swamp-tetherrock", 4, ["VI2"], "levels/village2"], -["swamp-tetherrock-explode-ag", "swamp-tetherrock-explode", 4, ["VI2"], "levels/village2"], -["village2cam-ag", "village2cam", 4, ["VI2"], "levels/village2"], -["warrior-ag", "warrior", 4, ["VI2"], "levels/village2"], -["water-anim-village2-ag", "water-anim-village2", 4, ["VI2"], "levels/village2"], -["village2-vis", "village2-vis", 4, ["VI2"], "levels/village2"], -["tpage-1208", "tpage-1208", 4, ["VI3"], "levels/village3"], -["tpage-1210", "tpage-1210", 4, ["VI3"], "levels/village3"], -["tpage-1209", "tpage-1209", 4, ["VI3"], "levels/village3"], -["tpage-1194", "tpage-1194", 4, ["VI3"], "levels/village3"], -["assistant-village3-ag", "assistant-village3", 4, ["VI3"], "levels/village3"], -["cavegem-ag", "cavegem", 4, ["VI3"], "levels/village3"], -["evilbro-village3-ag", "evilbro-village3", 4, ["VI3"], "levels/village3"], -["evilsis-village3-ag", "evilsis-village3", 4, ["VI3"], "levels/village3"], -["gondola-ag", "gondola", 4, ["VI3"], "levels/village3"], -["gondolacables-ag", "gondolacables", 4, ["VI3"], "levels/village3"], -["lavaspoutdrip-ag", "lavaspoutdrip", 4, ["VI3"], "levels/village3"], -["medres-finalboss-ag", "medres-finalboss", 4, ["VI3"], "levels/village3"], -["medres-ogre-ag", "medres-ogre", 4, ["VI3"], "levels/village3"], -["medres-ogre2-ag", "medres-ogre2", 4, ["VI3"], "levels/village3"], -["medres-ogre3-ag", "medres-ogre3", 4, ["VI3"], "levels/village3"], -["minecartsteel-ag", "minecartsteel", 4, ["VI3"], "levels/village3"], -["minershort-ag", "minershort", 4, ["VI3"], "levels/village3"], -["minertall-ag", "minertall", 4, ["VI3"], "levels/village3"], -["pistons-ag", "pistons", 4, ["VI3"], "levels/village3"], -["sage-village3-ag", "sage-village3", 4, ["VI3"], "levels/village3"], -["vil3-bridge-36-ag", "vil3-bridge-36", 4, ["VI3"], "levels/village3"], -["water-anim-village3-ag", "water-anim-village3", 4, ["VI3"], "levels/village3"], -["village3-vis", "village3-vis", 4, ["VI3"], "levels/village3"], -["lava", "lava", 3, ["WATER-AN"], "old/lava"]] +from jak1_file_list import file_list def dgo_names_string(names): result = "" diff --git a/scripts/next-decomp-file.py b/scripts/next-decomp-file.py new file mode 100644 index 0000000000..9c76398760 --- /dev/null +++ b/scripts/next-decomp-file.py @@ -0,0 +1,35 @@ +import sys +from jak1_file_list import file_list + +skip_count = 0 +if len(sys.argv) >= 2: + skip_count = int(sys.argv[1]) + +print(skip_count) + +new_file_contents = [] + +for file in file_list: + with open("goal_src/" + file[4] + "/" + file[0] + ".gc") as f: + lines = f.readlines() + # print("goal_src/" + file[4] + "/" + file[0] + ".gc" + " " + str(len(lines))) + if skip_count <= 0 and len(lines) <= 7: + print("Next file to decompile is - " + file[0]) + print("Target is - " + "goal_src/" + file[4] + "/" + file[0] + ".gc") + print("Uses the following CGO / DGO - " + str(file[3])) + # TODO, update the CGO/DGO + with open("decompiler\config\jak1_ntsc_black_label.jsonc", "r") as config_file: + cfg_lines = config_file.readlines() + for line in cfg_lines: + if "allowed_objects" in line: + line = " \"allowed_objects\": [\"" + file[0] + "\"],\n" + new_file_contents.append(line) + if len(new_file_contents) > 0: + with open("decompiler\config\jak1_ntsc_black_label.jsonc", "w") as f: + f.writelines(new_file_contents) + print("Allowed objects list updated") + break + elif len(lines) <= 7: + skip_count = skip_count - 1 + + diff --git a/test/decompiler/reference/all_forward_declarations.gc b/test/decompiler/reference/all_forward_declarations.gc index e3b39b0750..aeb7d3674f 100644 --- a/test/decompiler/reference/all_forward_declarations.gc +++ b/test/decompiler/reference/all_forward_declarations.gc @@ -428,4 +428,12 @@ (declare-type level basic) ;; main-h -(define-extern *dproc* process) \ No newline at end of file +(define-extern *dproc* process) + +;; GEOMETRY - TODO +(define-extern vector-deg-slerp (function vector vector vector float vector)) + +;; bones - TODO +(declare-type vu-lights structure) +(declare-type light-group structure) +(define-extern vu-lights<-light-group! (function vu-lights light-group none)) \ No newline at end of file diff --git a/test/decompiler/reference/lights-h_REF.gc b/test/decompiler/reference/lights-h_REF.gc index 29941af9a0..78c7a9eb0f 100644 --- a/test/decompiler/reference/lights-h_REF.gc +++ b/test/decompiler/reference/lights-h_REF.gc @@ -3,9 +3,9 @@ ;; definition of type vu-lights (deftype vu-lights (structure) - ((direction uint128 3 :offset-assert 0) - (color uint128 3 :offset-assert 48) - (ambient vector :inline :offset-assert 96) + ((direction vector 3 :inline :offset-assert 0) + (color vector 3 :inline :offset-assert 48) + (ambient vector :inline :offset-assert 96) ) :method-count-assert 9 :size-assert #x70 diff --git a/test/decompiler/reference/lights_REF.gc b/test/decompiler/reference/lights_REF.gc new file mode 100644 index 0000000000..1cf554c99b --- /dev/null +++ b/test/decompiler/reference/lights_REF.gc @@ -0,0 +1,96 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for function light-slerp +(defun light-slerp ((arg0 light) (arg1 light) (arg2 light) (arg3 float)) + (let ((s3-0 (fmax 0.0 (fmin 1.0 arg3)))) + (vector-lerp! (-> arg0 color) (-> arg1 color) (-> arg2 color) s3-0) + (vector-deg-slerp + (-> arg0 direction) + (-> arg1 direction) + (-> arg2 direction) + s3-0 + ) + (let ((f0-2 (-> arg1 levels x)) + (f1-2 (-> arg2 levels x)) + ) + (set! (-> arg0 levels x) (+ f0-2 (* s3-0 (- f1-2 f0-2)))) + ) + ) + arg0 + ) + +;; definition for function light-group-slerp +(defun + light-group-slerp + ((arg0 light-group) (arg1 light-group) (arg2 light-group) (arg3 float)) + (dotimes (s2-0 4) + (light-slerp + (the-as light (+ (+ (* 48 s2-0) 0) (the-as int arg0))) + (the-as light (+ (+ (* 48 s2-0) 0) (the-as int arg1))) + (the-as light (+ (+ (* 48 s2-0) 0) (the-as int arg2))) + arg3 + ) + ) + arg0 + ) + +;; definition for function light-group-process! +(defun + light-group-process! + ((arg0 vu-lights) (arg1 light-group) (arg2 vector) (arg3 vector)) + (let ((f0-0 (rotate-y<-vector+vector arg3 arg2))) + ) + (vu-lights<-light-group! arg0 arg1) + (none) + ) + +;; definition for symbol *default-lights*, type vu-lights +(define *default-lights* (the-as vu-lights (new 'global 'vu-lights))) + +;; definition for function vu-lights-default! +(defun vu-lights-default! ((arg0 vu-lights)) + (let ((v1-0 (-> arg0 ambient))) + (set! (-> v1-0 x) 0.3) + (set! (-> v1-0 y) 0.3) + (set! (-> v1-0 z) 0.3) + (set! (-> v1-0 w) 1.0) + ) + (let ((v1-1 (-> arg0 color))) + (set! (-> v1-1 0 x) 1.0) + (set! (-> v1-1 0 y) 1.0) + (set! (-> v1-1 0 z) 1.0) + (set! (-> v1-1 0 w) 1.0) + ) + (let ((v1-2 (-> arg0 color 1))) + (set! (-> v1-2 x) 0.2) + (set! (-> v1-2 y) 0.2) + (set! (-> v1-2 z) 0.2) + (set! (-> v1-2 w) 1.0) + ) + (let ((v1-3 (-> arg0 color 2))) + (set! (-> v1-3 x) 0.0) + (set! (-> v1-3 y) 0.0) + (set! (-> v1-3 z) 0.0) + (set! (-> v1-3 w) 1.0) + ) + (let ((v1-4 (-> arg0 direction))) + (set! (-> v1-4 0 x) 1.0) + (set! (-> v1-4 0 y) 0.0) + (set! (-> v1-4 0 z) 0.0) + (set! (-> v1-4 0 w) 1.0) + ) + (let ((v1-5 (-> arg0 direction 1))) + (set! (-> v1-5 x) 0.0) + (set! (-> v1-5 y) 1.0) + (set! (-> v1-5 z) 0.0) + (set! (-> v1-5 w) 1.0) + ) + (let ((v1-6 (-> arg0 direction 2))) + (set! (-> v1-6 x) 0.0) + (set! (-> v1-6 y) 0.0) + (set! (-> v1-6 z) 1.0) + (set! (-> v1-6 w) 1.0) + ) + arg0 + ) diff --git a/test/offline/offline_test_main.cpp b/test/offline/offline_test_main.cpp index a3687785ac..75ff2394ff 100644 --- a/test/offline/offline_test_main.cpp +++ b/test/offline/offline_test_main.cpp @@ -22,8 +22,9 @@ const std::unordered_set g_object_files_to_decompile = { "connect", "text-h", "settings-h", "capture", "memory-usage-h", /* "texture", */ "main-h", "mspace-h", "drawable-h", "drawable-group-h", "drawable-inline-array-h", "draw-node-h", "drawable-tree-h", "drawable-actor-h", "drawable-ambient-h", "game-task-h", "hint-control-h", - "generic-h", "lights-h", "ocean-h", "ocean-trans-tables", /* "ocean-tables", "ocean-frames", */ - "sky-h", "mood-h", /* "time-of-day-h", */ + "generic-h", "lights-h", "lights", "ocean-h", + "ocean-trans-tables", /* "ocean-tables", "ocean-frames", */ + "sky-h", "mood-h", /* "time-of-day-h", */ /* gap */ "bounding-box", /* gap */ @@ -42,9 +43,9 @@ const std::vector g_object_files_to_check_against_reference = { "display", "connect", "text-h", "settings-h", "capture", "memory-usage-h", /* "texture", */ "main-h", "mspace-h", "drawable-h", "drawable-group-h", "drawable-inline-array-h", "draw-node-h", "drawable-tree-h", "drawable-actor-h", - "drawable-ambient-h", "game-task-h", "hint-control-h", "generic-h", "lights-h", "ocean-h", - "ocean-trans-tables", /* "ocean-tables", "ocean-frames", */ - "sky-h", "mood-h", /* "time-of-day-h", */ + "drawable-ambient-h", "game-task-h", "hint-control-h", "generic-h", "lights-h", "lights", + "ocean-h", "ocean-trans-tables", /* "ocean-tables", "ocean-frames", */ + "sky-h", "mood-h", /* "time-of-day-h", */ /* gap */ "bounding-box", /* gap */ "sync-info-h", "sync-info"};