From 1af0f4a1a7ae063f7e5ffe6c748cad3a83578fbd Mon Sep 17 00:00:00 2001 From: ManDude <7569514+ManDude@users.noreply.github.com> Date: Wed, 30 Jun 2021 01:30:52 +0100 Subject: [PATCH] =?UTF-8?q?[decomp]=20most=20of=20`level`=20and=20some=20g?= =?UTF-8?q?ame=20loop=20functions=20+=20couple=20decomp=E2=80=A6=20(#651)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [decomp] most of `level` and some game loop functions + couple decompiler fixes * add ART.CGO to fake-iso --- common/type_system/TypeSystem.cpp | 2 +- decompiler/Disasm/Register.cpp | 4 +- decompiler/analysis/type_analysis.cpp | 2 +- decompiler/config/all-types.gc | 521 +++--- .../anonymous_function_types.jsonc | 4 + .../config/jak1_ntsc_black_label/hacks.jsonc | 5 +- .../jak1_ntsc_black_label/label_types.jsonc | 32 +- .../stack_structures.jsonc | 11 +- .../jak1_ntsc_black_label/type_casts.jsonc | 49 +- .../jak1_ntsc_black_label/var_names.jsonc | 26 +- decompiler/util/DecompilerTypeSystem.cpp | 5 + game/fake_iso.txt | 1 + goal_src/engine/anim/joint-h.gc | 4 +- goal_src/engine/camera/math-camera-h.gc | 4 +- goal_src/engine/collide/collide-shape-h.gc | 61 +- goal_src/engine/collide/collide-target-h.gc | 14 +- goal_src/engine/data/art-h.gc | 92 +- goal_src/engine/data/res-h.gc | 2 +- goal_src/engine/debug/assert-h.gc | 10 +- goal_src/engine/debug/assert.gc | 51 +- goal_src/engine/draw/drawable-actor-h.gc | 3 +- goal_src/engine/draw/drawable-ambient-h.gc | 14 +- goal_src/engine/draw/drawable-h.gc | 2 +- goal_src/engine/entity/entity-h.gc | 5 +- goal_src/engine/entity/entity.gc | 25 + goal_src/engine/game/game-h.gc | 20 +- goal_src/engine/game/game-info-h.gc | 52 +- goal_src/engine/game/generic-obs-h.gc | 8 - goal_src/engine/game/generic-obs.gc | 7 + goal_src/engine/game/main-h.gc | 3 + goal_src/engine/game/main.gc | 75 + goal_src/engine/gfx/ocean/ocean-h.gc | 8 +- goal_src/engine/gfx/sky/sky-h.gc | 4 +- goal_src/engine/gfx/texture-h.gc | 16 +- goal_src/engine/gfx/texture.gc | 4 +- goal_src/engine/gfx/tfrag/subdivide.gc | 2 + goal_src/engine/gfx/vis/bsp-h.gc | 6 +- goal_src/engine/gfx/water/water-h.gc | 84 +- goal_src/engine/level/level-h.gc | 151 +- goal_src/engine/level/level-info.gc | 96 +- goal_src/engine/level/level.gc | 1574 ++++++++++++++++- goal_src/engine/level/load-boundary-h.gc | 2 + goal_src/engine/level/load-boundary.gc | 98 +- goal_src/engine/load/file-io.gc | 5 +- goal_src/engine/load/load-dgo.gc | 26 +- goal_src/engine/load/loader-h.gc | 74 +- goal_src/engine/math/vector-h.gc | 3 +- goal_src/engine/sound/gsound-h.gc | 1 - goal_src/engine/target/logic-target.gc | 41 + goal_src/engine/target/target-h.gc | 62 +- goal_src/goal-lib.gc | 3 +- goal_src/kernel-defs.gc | 2 +- goal_src/kernel/gkernel-h.gc | 4 +- goal_src/kernel/gkernel.gc | 9 +- goal_src/kernel/gstate.gc | 14 + goalc/compiler/compilation/ControlFlow.cpp | 8 +- .../reference/engine/anim/joint-h_REF.gc | 40 +- .../reference/engine/anim/mspace-h_REF.gc | 2 +- .../engine/collide/collide-shape-h_REF.gc | 10 +- .../engine/collide/collide-target-h_REF.gc | 14 +- .../reference/engine/data/art-h_REF.gc | 11 +- .../reference/engine/data/res-h_REF.gc | 2 +- .../engine/draw/drawable-actor-h_REF.gc | 2 +- .../engine/draw/drawable-ambient-h_REF.gc | 2 +- .../reference/engine/draw/drawable-h_REF.gc | 2 +- .../engine/draw/process-drawable-h_REF.gc | 2 +- .../engine/entity/actor-link-h_REF.gc | 56 +- .../reference/engine/entity/entity-h_REF.gc | 2 +- .../reference/engine/game/fact-h_REF.gc | 20 +- .../reference/engine/game/game-h_REF.gc | 42 +- .../reference/engine/game/game-info-h_REF.gc | 30 +- .../reference/engine/geometry/vol-h_REF.gc | 50 +- .../reference/engine/gfx/ocean/ocean-h_REF.gc | 16 +- .../reference/engine/gfx/texture-h_REF.gc | 13 +- .../reference/engine/gfx/vis/bsp-h_REF.gc | 4 +- .../reference/engine/gfx/water/water-h_REF.gc | 2 +- .../reference/engine/level/level-h_REF.gc | 105 +- .../reference/engine/level/level-info_REF.gc | 130 +- .../reference/engine/load/file-io_REF.gc | 4 +- .../reference/engine/load/load-dgo_REF.gc | 25 +- .../reference/engine/load/loader-h_REF.gc | 31 +- .../reference/engine/math/vector-h_REF.gc | 5 +- .../reference/engine/nav/navigate-h_REF.gc | 10 +- .../reference/engine/nav/path-h_REF.gc | 10 +- .../reference/engine/target/target-h_REF.gc | 56 +- 85 files changed, 3037 insertions(+), 1072 deletions(-) diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp index b4036a40d..89bb97321 100644 --- a/common/type_system/TypeSystem.cpp +++ b/common/type_system/TypeSystem.cpp @@ -161,7 +161,7 @@ void TypeSystem::forward_declare_type_as(const std::string& new_type, auto old_parent_it = m_types.find(fwd_it->second); auto new_parent_it = m_types.find(parent_type); - auto old_ts = TypeSpec(old_parent_it->second->get_name()); + auto old_ts = TypeSpec(fwd_it->second); if (old_parent_it != m_types.end() && new_parent_it != m_types.end()) { auto new_ts = TypeSpec(new_parent_it->second->get_name()); diff --git a/decompiler/Disasm/Register.cpp b/decompiler/Disasm/Register.cpp index 846df4686..6811a2e36 100644 --- a/decompiler/Disasm/Register.cpp +++ b/decompiler/Disasm/Register.cpp @@ -13,7 +13,7 @@ namespace Reg { // clang-format off const bool allowed_local_gprs[Reg::MAX_GPR] = { - false /*R0*/, false /*AT*/, true /*V0*/, true /*V1*/, + false /*R0*/, true /*AT*/, true /*V0*/, true /*V1*/, true /*A0*/, true /*A1*/, true /*A2*/, true /*A3*/, true /*T0*/, true /*T1*/, true /*T2*/, true /*T3*/, true /*T4*/, true /*T5*/, true /*T6*/, true /*T7*/, @@ -273,4 +273,4 @@ bool Register::allowed_local_gpr() const { } return Reg::allowed_local_gprs[get_gpr()]; } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/analysis/type_analysis.cpp b/decompiler/analysis/type_analysis.cpp index cc92fdfea..f6b3f428b 100644 --- a/decompiler/analysis/type_analysis.cpp +++ b/decompiler/analysis/type_analysis.cpp @@ -126,7 +126,7 @@ bool run_type_analysis_ir2(const TypeSpec& my_type, DecompilerTypeSystem& dts, F } catch (std::runtime_error& e) { lg::warn("Function {} failed type prop at op {}: {}", func.guessed_name.to_string(), op_id, e.what()); - func.warnings.type_prop_warning("Failed type prop at op {} ({})\n:{}", op_id, + func.warnings.type_prop_warning("Failed type prop at op {} ({}): {}", op_id, op->to_string(func.ir2.env), e.what()); func.ir2.env.set_types(block_init_types, op_types, *func.ir2.atomic_ops, my_type); return false; diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 90f694b1d..d3ab7e2d4 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -30,7 +30,7 @@ (allocated-length int32 :offset-assert 8) ;; this is 16-byte aligned. ;; children of inline-array-class should define their own data which overlays this one. - (_data uint8 :dynamic :offset 16) + (_data uint8 :score -50 :dynamic :offset 16) ) (:methods (new (symbol type int) _type_ 0)) :method-count-assert 9 @@ -864,6 +864,7 @@ (declare-type connectable structure) (declare-type res-lump basic) +(declare-type entity res-lump) (define-extern process type) ; deftype provided by C Kernel (deftype process (process-tree) ((pool dead-pool :offset-assert #x20) @@ -871,7 +872,7 @@ (pid int32 :offset-assert #x28) (main-thread cpu-thread :offset-assert #x2c) (top-thread thread :offset-assert #x30) - (entity basic :offset-assert #x34) ;; likely a res-lump + (entity entity :offset-assert #x34) ;; likely a res-lump (state state :offset-assert #x38) (trans-hook function :offset-assert #x3c) (post-hook function :offset-assert #x40) @@ -1480,7 +1481,8 @@ ) (deftype box8s-array (inline-array-class) - () + ((data box8s :inline :dynamic :offset 16) + ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 @@ -4038,7 +4040,7 @@ (define-extern file-stream-open (function file-stream basic basic file-stream)) (define-extern file-stream-length (function file-stream int)) (define-extern file-stream-read-string (function file-stream string string)) -(define-extern make-file-name (function file-kind string int string)) +(define-extern make-file-name (function file-kind string int symbol string)) (define-extern make-vfile-name (function file-kind string string)) (define-extern file-info-correct-version? (function file-info file-kind int symbol)) @@ -4055,53 +4057,56 @@ ;; - Types -(declare-type art-group basic) +;; custom fields (deftype load-dir (basic) - ((unknown basic) - (string-array (array string)) - (data-array (array art-group))) + ((unknown basic :offset-assert 4) + (string-array (array string) :offset-assert 8) + (data-array (array basic) :score -50 :offset-assert 12) + ) :flag-assert #xb00000010 (:methods - (new (symbol type int basic) _type_ 0) - (dummy-9 () none 9) - (dummy-10 () none 10) - ) + (new (symbol type int basic) _type_ 0) + (dummy-9 () none 9) + (dummy-10 () none 10) + ) ) - +;; custom fields +(declare-type art-group basic) (deftype load-dir-art-group (load-dir) - () + ((art-group-array (array art-group) :offset 12) + ) :flag-assert #xb00000010 (:methods - (new (symbol type int basic) _type_ 0) - ) + (new (symbol type int basic) _type_ 0) + ) ) (deftype external-art-buffer (basic) ((index int32 :offset-assert 4) (other external-art-buffer :offset-assert 8) - (status basic :offset-assert 12) - (locked? basic :offset-assert 16) - (frame-lock basic :offset-assert 20) + (status symbol :offset-assert 12) + (locked? symbol :offset-assert 16) + (frame-lock symbol :offset-assert 20) (heap kheap :inline :offset-assert 32) - (pending-load-file basic :offset-assert 48) + (pending-load-file string :offset-assert 48) (pending-load-file-part int32 :offset-assert 52) (pending-load-file-owner uint64 :offset-assert 56) (pending-load-file-priority float :offset-assert 64) - (load-file basic :offset-assert 68) + (load-file string :offset-assert 68) (load-file-part int32 :offset-assert 72) (load-file-owner uint64 :offset-assert 80) (load-file-priority float :offset-assert 88) (buf uint32 :offset-assert 92) (len int32 :offset-assert 96) - (art-group basic :offset-assert 100) + (art-group art-group :offset-assert 100) ) :method-count-assert 16 :size-assert #x68 :flag-assert #x1000000068 (:methods - (new (symbol type int) _type_) - (dummy-9 () none 9) + (new (symbol type int) _type_ 0) + (dummy-9 (_type_ symbol int symbol float) none 9) (dummy-10 () none 10) (dummy-11 () none 11) (dummy-12 () none 12) @@ -4112,7 +4117,7 @@ ) (deftype spool-anim (basic) - ((name basic :offset 16) ;; why? + ((name string :offset 16) ;; why? (index int32 :offset-assert 20) (parts int32 :offset-assert 24) (priority float :offset-assert 28) @@ -4142,8 +4147,8 @@ :flag-assert #x1100000118 (:methods (new (symbol type) _type_ 0) - (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-9 (_type_ symbol) none 9) + (dummy-10 (_type_) none 10) (dummy-11 () none 11) (dummy-12 () none 12) (dummy-13 () none 13) @@ -4214,7 +4219,7 @@ (dummy-17 () none 17) (dummy-18 () none 18) (dummy-19 () none 19) - (dummy-20 () none 20) + (dummy-20 (_type_ texture-page) int 20) (upload-one-common! (_type_) symbol 21) (lookup-boot-common-id (_type_ int) int 22) ) @@ -4231,7 +4236,7 @@ (dest uint16 7 :offset-assert 14) ;; dest vram word addr, per leve (clutdest uint16 :offset-assert 28) ;; destination vram word addr of clut. (width uint8 7 :offset-assert 30) ;; mip widths - (name basic :offset-assert 40) + (name string :offset-assert 40) (size uint32 :offset-assert 44) (uv-dist float :offset-assert 48) (masks uint32 3 :offset-assert 52) @@ -4305,15 +4310,16 @@ (deftype texture-page-dir (basic) ((length int32) - (entries texture-page-dir-entry 1 :inline)) - (:methods - (dummy-9 () none 9) + (entries texture-page-dir-entry 1 :inline) ) + (:methods + (dummy-9 (_type_ kheap) int 9) + ) :flag-assert #xa00000014 ) (deftype texture-relocate-later (basic) - ((memcpy basic :offset-assert 4) + ((memcpy symbol :offset-assert 4) (dest uint32 :offset-assert 8) (source uint32 :offset-assert 12) (move uint32 :offset-assert 16) @@ -4344,7 +4350,8 @@ ) (deftype adgif-shader-array (inline-array-class) - () + ((data adgif-shader :inline :dynamic :offset 16) + ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 @@ -4382,10 +4389,11 @@ ;; - Types +(declare-type bsp-header basic) (deftype level-vis-info (basic) - ((level basic :offset-assert 4) - (from-level basic :offset-assert 8) - (from-bsp basic :offset-assert 12) + ((level symbol :offset-assert 4) + (from-level symbol :offset-assert 8) + (from-bsp bsp-header :offset-assert 12) (flags uint32 :offset-assert 16) (length uint32 :offset-assert 20) (allocated-length uint32 :offset-assert 24) @@ -4393,7 +4401,7 @@ (dictionary uint32 :offset-assert 32) (string-block uint32 :offset-assert 36) (ramdisk uint32 :offset-assert 40) - (vis-bits uint32 :offset-assert 44) + (vis-bits pointer :offset-assert 44) (current-vis-string uint32 :offset-assert 48) (vis-string uint8 :dynamic :offset-assert 52) ) @@ -4403,7 +4411,7 @@ ) (deftype level-load-info (basic) - ((name-list symbol 3 :offset-assert 4) + ((name-list symbol 3 :do-not-decompile :offset-assert 4) (index int32 :offset-assert 16) (name symbol :offset 4) (visname symbol :offset 8) @@ -4448,7 +4456,6 @@ :flag-assert #x900000050 ) -(declare-type bsp-header basic) (declare-type engine basic) (declare-type entity-links-array basic) (declare-type entity-ambient-data-array basic) @@ -4465,7 +4472,7 @@ (art-group load-dir-art-group :offset-assert 52) (info level-load-info :offset-assert 56) (texture-page texture-page 9 :offset-assert 60) - (loaded-texture-page basic 16 :offset-assert 96) + (loaded-texture-page texture-page 16 :offset-assert 96) (loaded-texture-page-count int32 :offset-assert 160) ; (foreground-sink-group-0 dma-foreground-sink-group :inline :offset-assert 176) ; (foreground-sink-group-1 dma-foreground-sink-group :inline :offset-assert 208) @@ -4484,7 +4491,7 @@ (meta-inside? symbol :offset-assert 380) (mood mood-context :offset-assert 384) (mood-func function :offset-assert 388) - (vis-bits uint32 :offset-assert 392) + (vis-bits pointer :offset-assert 392) (all-visible? symbol :offset-assert 396) (force-all-visible? symbol :offset-assert 400) (linking basic :offset-assert 404) @@ -4494,8 +4501,8 @@ (vis-buffer uint8 2048 :offset-assert 448) (mem-usage-block basic :offset-assert 2496) (mem-usage int32 :offset-assert 2500) - (code-memory-start uint32 :offset-assert 2504) - (code-memory-end uint32 :offset-assert 2508) + (code-memory-start pointer :offset-assert 2504) + (code-memory-end pointer :offset-assert 2508) (texture-mask uint32 9 :offset-assert 2512) (force-inside? symbol :offset-assert 2548) (pad uint8 56) @@ -4504,26 +4511,26 @@ :size-assert #xa30 :flag-assert #x1d00000a30 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (deactivate (_type_) _type_ 9) + (dummy-10 (_type_ int) symbol 10) (dummy-11 (_type_) none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) - (dummy-23 (_type_ symbol) none 23) - (dummy-24 () none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) - (dummy-27 () none 27) - (dummy-28 (_type_ string) symbol 28) + (unload! (_type_) _type_ 12) + (bsp-name (_type_) symbol 13) + (dummy-14 (_type_) none 14) + (dummy-15 (_type_ vector) symbol 15) + (dummy-16 (_type_) none 16) + (load-continue (_type_) _type_ 17) + (load-begin (_type_) _type_ 18) + (login (_type_) _type_ 19) + (vis-load (_type_) uint 20) + (dummy-21 (_type_) none 21) + (activate (_type_) _type_ 22) + (level-status-set! (_type_ symbol) _type_ 23) + (dummy-24 (_type_) _type_ 24) + (dummy-25 (_type_) int 25) + (vis-clear (_type_) int 26) + (dummy-27 (_type_ vector string) none 27) + (art-group-get-by-name (_type_ string) art-group 28) ) ) @@ -4532,46 +4539,46 @@ ((length int32 :offset-assert 4) (unknown-level-1 level :offset-assert 8) (unknown-level-2 level :offset-assert 12) - (entity-link entity-links :offset 16) ;; not sure what's going on here + (entity-link entity-links :offset-assert 16) ;; not sure what's going on here (border? basic :offset-assert 20) (vis? basic :offset-assert 24) (want-level basic :offset-assert 28) (receiving-level basic :offset-assert 32) - (load-commands pair :offset-assert 36) - (play? basic :offset-assert 40) + (load-commands pair :offset-assert 36) + (play? symbol :offset-assert 40) ;; there's something? from 40 -> 96. - (hack-pad uint8 :offset 90) - ;(level level 3 :inline :offset-assert 96) - ;(data level 3 :inline :offset-assert 100) - (level0 level :inline :offset-assert 96) ;; inline basic - (level1 level :inline :offset-assert 2704) ;; inline basic - (level-default level :inline :offset-assert 5312) ;; inline basic + (_hack-pad uint8 :offset 90) + (level0 level :inline :offset-assert 96) + (level1 level :inline :offset-assert 2704) + (level-default level :inline :offset-assert 5312) ;; this actually went earlier, (level level 3 :inline :offset 96) + ;; and this one too. why another one? + (data level 3 :score -1 :inline :offset 96) (pad uint32) ) :method-count-assert 27 :size-assert #x1ef4 :flag-assert #x1b00001ef4 (:methods - (dummy-9 (_type_ symbol) level 9) - (dummy-10 (_type_ symbol) symbol 10) - (dummy-11 (_type_ symbol symbol) level 11) - (dummy-12 (_type_) none 12) + (level-get (_type_ symbol) level 9) + (level-get-with-status (_type_ symbol) level 10) + (level-get-for-use (_type_ symbol symbol) level 11) + (activate-levels! (_type_) int 12) (dummy-13 () none 13) (dummy-14 () none 14) (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 (_type_) none 17) - (dummy-18 (_type_ symbol) none 18) - (dummy-19 (_type_ pair) none 19) - (dummy-20 () none 20) - (dummy-21 (_type_ level-group int) pair 21) + (dummy-16 (_type_) int 16) + (level-get-target-inside (_type_) level 17) + (alloc-levels! (_type_ symbol) int 18) + (load-commands-set! (_type_ pair) pair 19) + (art-group-get-by-name (_type_ string) art-group 20) + (load-command-get-index (_type_ symbol int) pair 21) (dummy-22 () none 22) (dummy-23 () none 23) (dummy-24 () none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) + (level-status (_type_ symbol) symbol 25) + (level-get-most-disposable (_type_) level 26) ) ) @@ -4674,8 +4681,8 @@ (fov-correction-factor float :offset-assert 1056) ) (:methods - (new (symbol type) _type_ 0) - ) + (new (symbol type) _type_ 0) + ) :method-count-assert 9 :size-assert #x424 :flag-assert #x900000424 @@ -5222,7 +5229,7 @@ (define-extern gs-blocks-used (function int int gs-psm int)) (define-extern texture-page-common-boot-allocate (function texture-pool texture-page kheap int texture-page)) (define-extern texture-page-level-allocate (function texture-pool texture-page kheap int texture-page)) -(define-extern relocate-later (function none)) +(define-extern relocate-later (function symbol)) (define-extern adgif-shader-update! function) (define-extern adgif-shader-login (function adgif-shader none)) (define-extern adgif-shader-login-no-remap (function adgif-shader none)) @@ -5481,7 +5488,7 @@ (dummy-12 (_type_ int) none 12) ; int - length (dummy-13 (_type_ int) none 13) ; int - length (dummy-14 () none 14) - (dummy-15 () none 15) + (dummy-15 (_type_) none 15) (dummy-16 (_type_ object object) object 16) (dummy-17 () none 17) ) @@ -5609,8 +5616,9 @@ ;; - Types +(declare-type entity-actor basic) (deftype drawable-actor (drawable) - ((actor basic :offset 8) + ((actor entity-actor :offset 8) ) :method-count-assert 18 :size-assert #x20 @@ -5637,8 +5645,9 @@ ;; - Types +(declare-type entity-ambient basic) (deftype drawable-ambient (drawable) - ((ambient basic :offset 8) + ((ambient entity-ambient :offset 8) ) :method-count-assert 19 :size-assert #x20 @@ -6245,10 +6254,10 @@ (far-color vector :inline :offset-assert 32) (ocean-spheres ocean-spheres :offset-assert 48) (ocean-colors ocean-colors :offset-assert 52) - (ocean-mid-indices basic :offset-assert 56) - (ocean-trans-indices basic :offset-assert 60) - (ocean-near-indices basic :offset-assert 64) - (ocean-mid-masks basic :offset-assert 68) + (ocean-mid-indices ocean-mid-indices :offset-assert 56) + (ocean-trans-indices ocean-trans-indices :offset-assert 60) + (ocean-near-indices ocean-near-indices :offset-assert 64) + (ocean-mid-masks ocean-mid-masks :offset-assert 68) ) :method-count-assert 9 :size-assert #x48 @@ -6675,7 +6684,7 @@ (deftype sky-parms (basic) ;; check - the alignment on some of these. - ((orbit sky-orbit 3 :inline :offset-assert 4) + ((orbit sky-orbit 3 :inline :offset-assert 4) (upload-data sky-upload-data :inline :offset-assert 112) (sun-lights light-group :inline :offset-assert 560) (moon-lights light-group :inline :offset-assert 752) @@ -6683,8 +6692,8 @@ (default-vu-lights vu-lights :inline :offset-assert 1136) ) (:methods - (new (symbol type) _type_ 0) - ) + (new (symbol type) _type_ 0) + ) :method-count-assert 9 :size-assert #x4e0 :flag-assert #x9000004e0 @@ -7118,12 +7127,8 @@ :size-assert #x20 :flag-assert #xf00000020 (:methods - (dummy-9 (_type_) _type_ 9) - (dummy-10 (_type_ string type) art-element 10) - (dummy-11 (_type_ string type) int 11) - (dummy-12 (_type_) symbol 12) - (dummy-13 () none 13) - (dummy-14 () none 14) + (dummy-13 (_type_) int 13) + (dummy-14 (_type_) int 14) ) ) @@ -7184,7 +7189,7 @@ :size-assert #x21 :flag-assert #xa00000021 (:methods - (dummy-9 () none 9) + (dummy-9 (_type_) _type_ 9) ) ) @@ -7200,7 +7205,7 @@ (jgeo art-joint-geo :offset-assert 12) (mgeo merc-ctrl :offset-assert 16) (dma-add-func function :offset-assert 20) - (skeleton skeleton-group :offset-assert 24) + (skeleton skeleton-group :offset-assert 24) ;; or cspace-array or shadow-control (lod-set lod-set :inline :offset-assert 28) (lod lod-group 4 :inline :offset 28) (max-lod int8 :offset 60) @@ -7237,9 +7242,10 @@ :size-assert #xbc :flag-assert #xc000000bc (:methods + (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) - (dummy-10 () none 10) - (dummy-11 () none 11) + (dummy-10 (_type_ int int) int 10) + (dummy-11 (_type_ pointer) int 11) ) ) @@ -8393,9 +8399,9 @@ (deftype level-buffer-state (structure) ((name basic :offset-assert 0) - (display? basic :offset-assert 4) - (force-vis? basic :offset-assert 8) - (force-inside? basic :offset-assert 12) + (display? symbol :offset-assert 4) + (force-vis? symbol :offset-assert 8) + (force-inside? symbol :offset-assert 12) ) :pack-me :method-count-assert 9 @@ -8405,10 +8411,10 @@ (deftype load-state (basic) ((want level-buffer-state 2 :inline :offset-assert 4) - (vis-nick basic :offset-assert 36) + (vis-nick symbol :offset-assert 36) (command-list pair :offset-assert 40) - (object-name basic 256 :offset-assert 44) - (object-status basic 256 :offset-assert 1068) + (object-name symbol 256 :offset-assert 44) + (object-status basic 256 :offset-assert 1068) ) :method-count-assert 21 :size-assert #x82c @@ -8416,11 +8422,11 @@ (:methods (new (symbol type) _type_ 0) (reset! (_type_) _type_ 9) - (dummy-10 () none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) + (update! (_type_) int 10) + (want-levels (_type_ symbol symbol) int 11) + (want-display-level (_type_ symbol symbol) int 12) + (want-vis (_type_ symbol) int 13) + (want-force-vis (_type_ symbol symbol) int 14) (dummy-15 () none 15) (dummy-16 () none 16) (dummy-17 () none 17) @@ -8510,12 +8516,12 @@ (dummy-11 () none 11) (dummy-12 () none 12) (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) + (dummy-14 (_type_) none 14) + (dummy-15 (_type_) none 15) (dummy-16 () none 16) - (dummy-17 (_type_) none 17) + (dummy-17 (_type_) continue-point 17) (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-19 (_type_ continue-point) none 19) (dummy-20 () none 20) (dummy-21 () none 21) (dummy-22 () none 22) @@ -8722,7 +8728,7 @@ (deftype joint-control (basic) ((status uint16 :offset-assert 4) (allocated-length int16 :offset-assert 6) - (root-channel joint-control-channel :offset 16) + (root-channel (inline-array joint-control-channel) :offset 16) (blend-index int32 :offset-assert 20) (active-channels int32 :offset-assert 24) (generate-frame-function basic :offset-assert 28) @@ -8745,7 +8751,7 @@ :flag-assert #xb000000c0 (:methods (new (symbol type int) _type_ 0) - (dummy-9 () none 9) + (dummy-9 (_type_) none 9) (dummy-10 (_type_ symbol) int 10) ) ) @@ -8958,7 +8964,7 @@ (data-base pointer :offset-assert 12) (data-top pointer :offset-assert 16) (data-size int32 :offset-assert 20) - (extra basic :offset-assert 24) ;; NOTE - can be anything it seems - have seen entity-links + (extra entity-links :offset-assert 24) ;; NOTE - can be anything it seems - have seen entity-links (tag (pointer res-tag) :offset-assert 28) ) :method-count-assert 22 @@ -9350,9 +9356,11 @@ ;; - Types +(declare-type collide-shape basic) (declare-type water-control basic) +(declare-type sparticle-launch-control basic) (deftype process-drawable (process) - ((root trsqv :offset-assert 112) + ((root trsqv :offset-assert 112) (node-list cspace-array :offset-assert 116) (draw draw-control :offset-assert 120) (skel joint-control :offset-assert 124) @@ -9362,7 +9370,7 @@ (vol basic :offset-assert 140) (fact fact-info :offset-assert 144) (link basic :offset-assert 148) - (part basic :offset-assert 152) + (part sparticle-launch-control :offset-assert 152) (water water-control :offset-assert 156) (sound ambient-sound :offset-assert 160) (state-flags uint32 :offset-assert 164) @@ -9374,12 +9382,13 @@ :flag-assert #x14004000b0 ;; inherited inspect of process (:methods - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) + (deactivate (_type_) none 10) + (dummy-14 (_type_ skeleton-group object) none 14) + (dummy-15 (_type_ string object) _type_ 15) + (dummy-16 (_type_ int (inline-array vector) vector) collide-shape 16) + (dummy-17 (_type_) none 17) + (dummy-18 (_type_) symbol 18) + (dummy-19 (_type_) none 19) ) ) @@ -9508,14 +9517,6 @@ :size-assert #x114 :flag-assert #x1400b00114 ;; inherited inspect of process-drawable - (:methods - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) - ) ) (deftype part-spawner (process-drawable) @@ -10481,7 +10482,7 @@ (dummy-32 () none 32) (dummy-33 () none 33) (dummy-34 () none 34) - (dummy-35 () none 35) + (dummy-35 (_type_) none 35) (dummy-36 () none 36) (dummy-37 () none 37) (dummy-38 () none 38) @@ -10490,11 +10491,11 @@ (dummy-41 () none 41) (dummy-42 () none 42) (dummy-43 () none 43) - (dummy-44 () none 44) - (dummy-45 () none 45) + (dummy-44 (_type_) none 44) + (dummy-45 (_type_) none 45) (dummy-46 () none 46) - (dummy-47 () none 47) - (dummy-48 () none 48) + (dummy-47 (_type_) none 47) + (dummy-48 (_type_) none 48) (dummy-49 () none 49) (dummy-50 () none 50) (dummy-51 () none 51) @@ -10536,35 +10537,6 @@ :size-assert #x1bc :flag-assert #x41000001bc (:methods - (dummy-26 () none 26) - (dummy-28 () none 28) - (dummy-29 () none 29) - (dummy-30 () none 30) - (dummy-31 () none 31) - (dummy-32 () none 32) - (dummy-33 () none 33) - (dummy-34 () none 34) - (dummy-35 () none 35) - (dummy-36 () none 36) - (dummy-37 () none 37) - (dummy-38 () none 38) - (dummy-39 () none 39) - (dummy-40 () none 40) - (dummy-41 () none 41) - (dummy-42 () none 42) - (dummy-43 () none 43) - (dummy-44 () none 44) - (dummy-45 () none 45) - (dummy-46 () none 46) - (dummy-47 () none 47) - (dummy-48 () none 48) - (dummy-49 () none 49) - (dummy-50 () none 50) - (dummy-51 () none 51) - (dummy-52 () none 52) - (dummy-53 () none 53) - (dummy-54 () none 54) - (dummy-55 () none 55) (dummy-56 () none 56) (dummy-57 () none 57) (dummy-58 () none 58) @@ -10617,9 +10589,17 @@ (deftype control-info (collide-shape-moving) ( + (unknown-vector00 vector :inline :offset 576) + (unknown-surface surface :offset 660) + (unknown-symbol symbol :offset 664) + (unknown-qword uint128 :offset 1136) + (unknown-vector10 vector :inline :offset 1216) + (unknown-vector11 vector :inline :offset 1232) + (unknown-vector12 vector :inline :offset 1248) + (unknown-vector13 vector :inline :offset 1264) ;; these were determined from racer-collision-reaction. - (array-size int16 :offset 2490) - (history-array collide-history 128 :inline :offset-assert 2496) + (history-length int16 :offset 2490) + (history-data collide-history 128 :inline :offset-assert 2496) (pad uint32 27) ) :size-assert #x4a2c @@ -11067,14 +11047,14 @@ ;; - Types (deftype target (process-drawable) - ((control basic :offset 112) + ((control control-info :score 100 :offset 112) (skel2 basic :offset-assert 176) (racer basic :offset-assert 180) - (game basic :offset-assert 184) - (neck basic :offset-assert 188) + (game game-info :offset-assert 184) + (neck joint-mod :offset-assert 188) (state-hook-time uint64 :offset-assert 192) - (state-hook basic :offset-assert 200) - (cam-user-mode basic :offset-assert 204) + (state-hook function :offset-assert 200) + (cam-user-mode symbol :offset-assert 204) (sidekick uint32 :offset-assert 208) (manipy uint32 :offset-assert 212) (attack-info attack-info :inline :offset-assert 224) @@ -11084,7 +11064,7 @@ (snowball basic :offset-assert 464) (tube basic :offset-assert 468) (flut basic :offset-assert 472) - (current-level basic :offset-assert 476) + (current-level level :offset-assert 476) (saved-pos transformq :inline :offset-assert 480) (saved-owner uint64 :offset-assert 528) (alt-neck-pos vector :inline :offset-assert 544) @@ -11103,7 +11083,7 @@ ) (deftype sidekick (process-drawable) - ((control basic :offset 112) + ((control control-info :offset 112) (anim-seed uint64 :offset 192) (shadow-in-movie? basic :offset-assert 200) ) @@ -11287,8 +11267,8 @@ (:methods (relocate (_type_ int) _type_ 7) (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-18 (_type_) none 18) + (dummy-19 (_type_) none 19) ) ) @@ -12613,8 +12593,7 @@ ;; - Functions -;; may be actor. -(define-extern entity-nav-login (function basic none)) ;; only called in `level` in an asm function...tough, returns nothing +(define-extern entity-nav-login (function entity-actor none)) ;; - Symbols @@ -13443,8 +13422,8 @@ :size-assert #x8 :flag-assert #xb00000008 (:methods - (set-private-assert-info (_type_ string uint16 uint16) int 9) - (print-private-assert-info (_type_) int 10) + (set-pos (_type_ string uint uint) int 9) + (print-pos (_type_) int 10) ) ) @@ -14105,14 +14084,14 @@ ;; - Types (deftype load-dgo-msg (structure) - ((rsvd uint16 :offset-assert 0) - (result load-msg-result :offset-assert 2) - (b1 uint32 :offset-assert 4) - (b2 uint32 :offset-assert 8) - (bt uint32 :offset-assert 12) - (name uint128 :offset-assert 16) - (name-chars uint8 16 :offset 16) - (address uint32 :offset 4) + ((rsvd uint16 :offset-assert 0) ;; unused? + (result load-msg-result :offset-assert 2) ;; status from OVERLORD + (b1 pointer :offset-assert 4) ;; EE -> OVERLORD, first temp load buffer + (b2 pointer :offset-assert 8) ;; EE -> OVERLORD, second temp load buffer + (bt pointer :offset-assert 12) ;; EE -> OVERLORD, location of heap + (name uint128 :offset-assert 16) ;; EE -> OVERLORD, name of file. + (name-chars uint8 16 :offset 16) ;; name of file (as chars) + (address uint32 :offset 4) ;; OVERLORD -> EE, location of loaded file. ) :method-count-assert 9 :size-assert #x20 @@ -14157,7 +14136,7 @@ (define-extern str-ambient-play (function string none)) (define-extern str-ambient-stop (function string none)) (define-extern str-play-kick (function none)) -(define-extern dgo-load-begin (function string int int int load-dgo-msg)) +(define-extern dgo-load-begin (function string pointer pointer pointer load-dgo-msg)) (define-extern dgo-load-get-next (function (pointer symbol) pointer)) (define-extern dgo-load-continue (function pointer int)) (define-extern dgo-load-cancel (function none)) @@ -14475,7 +14454,7 @@ ;; - Unknowns -;;(define-extern *test-shrub* object) ;; unknown type +(define-extern *test-shrub* int) ;; ---------------------- @@ -14498,7 +14477,7 @@ ;; - Unknowns -(define-extern *subdivide-settings* subdivide-settings) ;; unknown type +(define-extern *subdivide-settings* subdivide-settings) ;;(define-extern *tfrag-work* object) ;; unknown type ;;(define-extern *perf-stats* object) ;; unknown type ;;(define-extern *merc-global-stats* object) ;; unknown type @@ -15740,7 +15719,7 @@ (define-extern particle-adgif function) (define-extern lookup-part-group-by-name function) (define-extern lookup-part-group-pointer-by-name function) -(define-extern unlink-part-group-by-heap function) +(define-extern unlink-part-group-by-heap (function kheap int)) (define-extern particle-setup-adgif function) (define-extern sp-queue-launch function) (define-extern sp-adjust-launch function) @@ -15802,7 +15781,7 @@ (define-extern sp-kill-particle function) (define-extern sp-orbiter function) (define-extern memcpy function) -(define-extern kill-all-particles-in-level function) +(define-extern kill-all-particles-in-level (function int)) (define-extern set-particle-frame-time function) (define-extern process-particles function) @@ -15837,11 +15816,11 @@ ;; - Functions -(define-extern ja-channel-push! function) -(define-extern ja-channel-set! function) +(define-extern ja-channel-push! (function int int int)) +(define-extern ja-channel-set! (function int int)) (define-extern kill-current-level-hint function) (define-extern level-hint-surpress! function) -(define-extern ja-aframe-num function) +(define-extern ja-aframe-num (function int float)) (define-extern ja-abort-spooled-anim function) (define-extern art-group-load-check function) (define-extern drawable-load function) @@ -15855,7 +15834,7 @@ ;; - Unknowns -;;(define-extern *art-control* object) ;; unknown type +(define-extern *art-control* external-art-control) ;;(define-extern *preload-spool-anims* object) ;; unknown type ;;(define-extern *stack-top* object) ;; unknown type @@ -16011,8 +15990,8 @@ (define-extern reset-actors function) (define-extern set-blackout-frames (function int uint)) (define-extern set-master-mode (function symbol none)) -(define-extern stop (function symbol int)) ;; logic-target -(define-extern start (function symbol symbol int)) +(define-extern stop (function symbol int)) +(define-extern start (function symbol continue-point target)) (define-extern position-in-front-of-camera! (function vector float float vector)) (define-extern game-task->string function) (define-extern trsq->continue-point function) @@ -16784,10 +16763,10 @@ (define-extern check-closed-boundary function) (define-extern check-open-boundary function) -(define-extern load-state-want-vis (function symbol none)) -(define-extern load-state-want-levels (function symbol symbol none)) -(define-extern load-state-want-display-level (function symbol symbol none)) -(define-extern load-state-want-force-vis function) +(define-extern load-state-want-vis (function symbol int)) +(define-extern load-state-want-levels (function symbol symbol int)) +(define-extern load-state-want-display-level (function symbol symbol int)) +(define-extern load-state-want-force-vis (function symbol symbol int)) (define-extern command-get-param function) (define-extern entity-birth-no-kill function) (define-extern part-tracker-init function) @@ -16838,11 +16817,11 @@ ;; - Unknowns -;;(define-extern *backup-load-state* object) ;; unknown type -;;(define-extern *display-load-commands* object) ;; unknown type -;;(define-extern *triangulation-buffer* object) ;; unknown type -;;(define-extern *lb-editor-parms* object) ;; unknown type -;;(define-extern *boundary-polygon* object) ;; unknown type +(define-extern *backup-load-state* load-state) +(define-extern *display-load-commands* symbol) +(define-extern *triangulation-buffer* pointer) +(define-extern *lb-editor-parms* lb-editor-parms) +(define-extern *boundary-polygon* (inline-array lbvtx)) ;; ---------------------- @@ -16900,25 +16879,25 @@ ;; - Functions -(define-extern update-sound-banks function) -(define-extern load-vis-info function) +(define-extern update-sound-banks (function int)) +(define-extern load-vis-info (function symbol symbol int)) (define-extern on (function symbol process)) -(define-extern level-update-after-load (function level login-state none)) -(define-extern add-bsp-drawable function) -(define-extern remap-level-name (function level-load-info object)) -(define-extern bg (function symbol symbol)) +(define-extern level-update-after-load (function level login-state level)) +(define-extern add-bsp-drawable (function bsp-header level symbol display-frame none)) +(define-extern remap-level-name (function level-load-info symbol)) +(define-extern bg (function symbol int)) (define-extern play (function symbol symbol int)) -(define-extern show-level function) +(define-extern show-level (function symbol int)) ;; - Symbols -(define-extern *print-login* symbol) ;; unknown type +(define-extern *print-login* symbol) ;; - Unknowns -;;(define-extern unload object) ;; unknown type +(define-extern unload (function string none)) (define-extern *login-state* login-state) -;;(define-extern link-resume object) ;; unknown type +(define-extern link-resume (function int)) ;; ---------------------- @@ -17193,7 +17172,7 @@ (deftype water-control (basic) ((flags uint32 :offset-assert 4) - (process basic :offset-assert 8) + (process process :offset-assert 8) (joint-index int32 :offset-assert 12) (top-y-offset float :offset-assert 16) (ripple-size float :offset-assert 20) ; meters @@ -17215,7 +17194,7 @@ (align-offset float :offset 100) ; meters (swim-depth float :offset-assert 104) ; meters (bob smush-control :inline :offset-assert 112) - (volume uint64 :offset-assert 144) + (volume uint64 :offset-assert 144) ;; handle? (bottom vector 2 :inline :offset-assert 160) (top vector 2 :inline :offset-assert 192) (enter-water-pos vector :inline :offset-assert 224) @@ -18025,45 +18004,45 @@ ;; - Functions -(define-extern process-entity-status! function) -(define-extern process-grab? function) -(define-extern process-release? function) -(define-extern ja-post function) -(define-extern make-nodes-from-jg function) +(define-extern process-entity-status! (function process int symbol symbol)) +(define-extern process-grab? (function process symbol)) +(define-extern process-release? (function process symbol)) +(define-extern ja-post (function int)) +(define-extern make-nodes-from-jg (function object pair symbol int)) (define-extern dma-add-process-drawable function) (define-extern add-process-drawable function) -(define-extern vector<-cspace+vector! function) -(define-extern cspace-children function) +(define-extern vector<-cspace+vector! (function vector cspace vector vector)) +(define-extern cspace-children (function process-drawable int pair)) (define-extern cspace-inspect-tree function) -(define-extern fill-skeleton-cache function) -(define-extern execute-math-engine function) -(define-extern draw-joint-spheres function) -(define-extern anim-loop function) -(define-extern ja-done? function) -(define-extern ja-min? function) -(define-extern ja-max? function) -(define-extern ja-num-frames function) -(define-extern ja-frame-num function) -(define-extern ja-aframe function) -(define-extern ja-speed function) -(define-extern ja-step function) -(define-extern ja-group-size function) -(define-extern ja-eval function) -(define-extern ja-blend-eval function) -(define-extern transform-post function) -(define-extern rider-trans function) -(define-extern rider-post function) -(define-extern pusher-post function) -(define-extern process-drawable-delay-player function) -(define-extern process-drawable-fuel-cell-handler function) +(define-extern fill-skeleton-cache (function process-drawable int)) +(define-extern execute-math-engine (function int)) +(define-extern draw-joint-spheres (function process-drawable symbol)) +(define-extern anim-loop (function symbol)) +(define-extern ja-done? (function int symbol)) +(define-extern ja-min? (function int symbol)) +(define-extern ja-max? (function int symbol)) +(define-extern ja-num-frames (function int int)) +(define-extern ja-frame-num (function int float)) +(define-extern ja-aframe (function float int float)) +(define-extern ja-speed (function int float)) +(define-extern ja-step (function int float)) +(define-extern ja-group-size (function int int)) +(define-extern ja-eval (function int)) +(define-extern ja-blend-eval (function int)) +(define-extern transform-post (function int)) +(define-extern rider-trans (function int)) +(define-extern rider-post (function int)) +(define-extern pusher-post (function int)) +(define-extern process-drawable-delay-player (function int int)) +(define-extern process-drawable-fuel-cell-handler (function process-drawable object symbol (pointer int64) symbol)) (define-extern process-drawable-birth-fuel-cell function) -(define-extern process-drawable-valid? function) +(define-extern process-drawable-valid? (function process-drawable symbol)) ;; - Unknowns -;;(define-extern *valid-con* object) ;; unknown type -;;(define-extern *default-skel-template* object) ;; unknown type -;;(define-extern process-drawable-idle object) ;; unknown type +(define-extern *valid-con* string) +(define-extern *default-skel-template* pair) +(define-extern process-drawable-idle state) ;; ---------------------- @@ -18401,7 +18380,7 @@ (define-extern target-height-above-ground function) (define-extern target-align-vel-z-adjust function) -(define-extern target-collide-set! function) +(define-extern target-collide-set! (function symbol float int)) (define-extern target-start-attack function) (define-extern target-danger-set! function) (define-extern average-turn-angle function) @@ -18432,8 +18411,8 @@ ;;(define-extern *TARGET-bank* object) ;; unknown type ;;(define-extern target-slide-down object) ;; unknown type ;;(define-extern target-falling object) ;; unknown type -;;(define-extern *jchar-sg* object) ;; unknown type -;;(define-extern *target-shadow-control* object) ;; unknown type +(define-extern *jchar-sg* skeleton-group) +(define-extern *target-shadow-control* shadow-control) ;; ---------------------- @@ -18475,13 +18454,13 @@ ;; - Functions -(define-extern init-target function) +(define-extern init-target (function continue-point object)) (define-extern target-print-stats function) -(define-extern activate-hud function) -(define-extern reset-target-state function) +(define-extern activate-hud (function process none)) +(define-extern reset-target-state (function symbol none)) (define-extern init-sidekick function) (define-extern target-generic-event-handler function) -(define-extern level-setup function) +(define-extern level-setup (function none)) (define-extern target-exit function) (define-extern target-calc-camera-pos function) (define-extern do-target-shadow function) @@ -18520,7 +18499,7 @@ ;; - Unknowns -;;(define-extern target-continue object) ;; unknown type +(define-extern target-continue state) ;; ---------------------- @@ -19085,7 +19064,7 @@ ;; - Functions (define-extern display-loop (function int)) -(define-extern entity-by-type (function type entity)) +(define-extern entity-by-type (function type entity-actor)) (define-extern scf-get-territory (function int)) (define-extern pause-allowed? (function symbol)) (define-extern menu-respond-to-pause (function int)) diff --git a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc index fc6b41b47..1e6f04c19 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -14,5 +14,9 @@ "main":[ [4, "(function none)"] + ], + + "process-drawable":[ + [29, "(function string symbol)"] ] } \ No newline at end of file diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc index 168afe9aa..07ba3a0d8 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -410,7 +410,7 @@ // ropebridge BUG "(method 27 ropebridge)", - // all unchecked.and in level DGO code + // all unchecked and in level DGO code "(anon-function 11 robotboss)", "(anon-function 18 robotboss)", "(anon-function 49 robotboss)", @@ -466,6 +466,9 @@ "nassoce", "lookup-level-info", "(method 21 level-group)", + "(method 12 level)", + "update-sound-banks", + "(method 16 level-group)", "bg" ] } diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index c3e3b0e8c..ae9d56878 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -78,8 +78,6 @@ "display-h": [["L6", "rgba", true]], - "level-h": [["L3", "level-group", true]], - "level-h": [ ["L3", "level-group", true], ["L3", "_auto_", true] @@ -595,5 +593,33 @@ "geometry": [ ["L125", "float", true] - ] + ], + + "level": [ + ["L452", "_auto_", true], + ["L482", "float", true], + ["L483", "uint64", true], + ["L484", "uint64", true], + ["L485", "uint64", true] + ], + + "process-drawable": [ + ["L257", "float", true], + ["L262", "float", true], + ["L260", "float", true], + ["L259", "float", true] + ], + + "logic-target": [ + ["L264", "float", true], + ["L253", "float", true], + ["L255", "float", true] + ], + + "load-boundary": [ + ["L327", "(inline-array lbvtx)", true, 3] + ], + + // please do not add things after this entry! git is dumb. + "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file":[] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index c3719e055..bd50d262b 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -385,7 +385,12 @@ "draw-ocean-transition": [ [16, "sphere"] - ] - - + ], + + "(method 22 level)": [[16, "event-message-block"]], + "(method 9 level)": [[16, "event-message-block"]], + "(method 10 load-state)": [[16, "event-message-block"]], + + "draw-joint-spheres": [[16, "vector"]], + "(method 16 process-drawable)": [[16, "matrix"], [80, "matrix"], [144, "vector"], [160, "vector"]] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index f694812c1..e98a35d0a 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -219,9 +219,7 @@ // LEVEL "lookup-level-info": [ [3, "a1", "symbol"], - [4, "a1", "level-load-info"], - [8, "a1", "level-load-info"], - [12, "a1", "level-load-info"] + [[4, 16], "a1", "level-load-info"] ], // DISPLAY @@ -702,9 +700,13 @@ "bg": [ [37, "a0", "symbol"] ], + + "start": [ + [27, "t9", "(function process function symbol object)"] + ], "level-update-after-load": [ - [[29, 55], "s2", "drawable-tree-tfrag"], + [[29, 55], "s2", "drawable-tree"], [[121, 146], "s1", "drawable-inline-array-tfrag"], [[150, 151], "s1", "drawable-tree-instance-tie"] ], @@ -769,5 +771,42 @@ [[330, 333], "v1", "symbol"], [[334, 337], "a0", "int"], [[341, 344], "a0", "uint"] - ] + ], + + "(method 12 level)": [ + [151, "a0", "symbol"] + ], + "(method 26 level-group)": [[[65, 96], "v0", "level"]], + "update-sound-banks": [[[21, 52], "t0", "symbol"]], + "(method 16 level-group)": [ + [[122, 146], "s1", "continue-point"], + [[115, 154], "s3", "continue-point"] + ], + "(method 20 level)": [ + [[43, 45], "s3", "ramdisk-rpc-fill"] + ], + //"bg": [[[25, 52], "a0", "string"]], + + "(anon-function 29 process-drawable)": [[[0, 99999], "s6", "process-drawable"]], + "ja-done?": [[[0, 99999], "s6", "process-drawable"]], + "ja-min?": [[[0, 99999], "s6", "process-drawable"]], + "ja-max?": [[[0, 99999], "s6", "process-drawable"]], + "ja-num-frames": [[[0, 99999], "s6", "process-drawable"]], + "ja-frame-num": [[[0, 99999], "s6", "process-drawable"]], + "ja-aframe-num": [[[0, 99999], "s6", "process-drawable"]], + "ja-aframe": [[[0, 99999], "s6", "process-drawable"]], + "ja-step": [[[0, 99999], "s6", "process-drawable"]], + "ja-channel-set!": [[[0, 99999], "s6", "process-drawable"]], + "ja-channel-push!": [[[0, 99999], "s6", "process-drawable"]], + "ja-group-size": [[[0, 99999], "s6", "process-drawable"]], + "ja-eval": [[[0, 99999], "s6", "process-drawable"]], + "ja-blend-eval": [[[0, 99999], "s6", "process-drawable"]], + "ja-post": [[[0, 99999], "s6", "process-drawable"], [54, "a1", "process"]], + "transform-post": [[[0, 99999], "s6", "process-drawable"]], + "rider-trans": [[[0, 99999], "s6", "process-drawable"]], + "rider-post": [[[0, 99999], "s6", "process-drawable"]], + "pusher-post": [[[0, 99999], "s6", "process-drawable"]], + "process-drawable-delay-player": [[[0, 99999], "s6", "process-drawable"]], + + "init-target": [[[0, 99999], "s6", "target"]] } diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index 4e480a971..3657ba19e 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -2092,7 +2092,7 @@ "v1-4":"current-timer", "v1-5":"elapsed-timer", "s2-0":"current-login-pos", - "s2-1":"current-drawable", + "s2-1":["current-drawable", "drawable-tree"], "s1-0":"idx-in-drawable" } }, @@ -2101,5 +2101,29 @@ "vars": { "s3-0": ["conn", "connection"] } + }, + + "(method 12 level)": { + "vars": { + "s5-3": ["s5-3", "pair"] + } + }, + + "update-sound-banks": { + "vars": { + "t0-0": ["t0-0", "symbol"] + } + }, + + "(method 16 level-group)": { + "vars": { + "s1-0": ["s1-0", "continue-point"] + } + }, + + "(method 20 level)": { + "vars": { + "s3-0": ["s3-0", "ramdisk-rpc-fill"] + } } } diff --git a/decompiler/util/DecompilerTypeSystem.cpp b/decompiler/util/DecompilerTypeSystem.cpp index c9e50b7d1..c7a55c29d 100644 --- a/decompiler/util/DecompilerTypeSystem.cpp +++ b/decompiler/util/DecompilerTypeSystem.cpp @@ -409,6 +409,11 @@ int DecompilerTypeSystem::get_format_arg_count(const std::string& str) const { if (i + 1 < str.length() && (str.at(i) == '1') && str.at(i + 1) == 'K') { continue; } + + // ~2j + if (i + 1 < str.length() && (str.at(i) == '2') && str.at(i + 1) == 'j') { + continue; + } arg_count++; } } diff --git a/game/fake_iso.txt b/game/fake_iso.txt index c58a8b24d..db267221d 100644 --- a/game/fake_iso.txt +++ b/game/fake_iso.txt @@ -5,6 +5,7 @@ KERNEL.CGO out/iso/KERNEL.CGO GAME.CGO out/iso/GAME.CGO TEST.CGO resources/TEST.CGO +ART.CGO out/iso/ART.CGO TWEAKVAL.MUS resources/TWEAKVAL.MUS VAGDIR.AYB resources/VAGDIR.AYB SCREEN1.USA resources/SCREEN1.USA diff --git a/goal_src/engine/anim/joint-h.gc b/goal_src/engine/anim/joint-h.gc index e7d5bd8de..87878901d 100644 --- a/goal_src/engine/anim/joint-h.gc +++ b/goal_src/engine/anim/joint-h.gc @@ -31,7 +31,7 @@ (deftype joint-control (basic) ((status uint16 :offset-assert 4) (allocated-length int16 :offset-assert 6) - (root-channel joint-control-channel :offset 16) + (root-channel (inline-array joint-control-channel) :offset 16) (blend-index int32 :offset-assert 20) (active-channels int32 :offset-assert 24) (generate-frame-function basic :offset-assert 28) @@ -54,7 +54,7 @@ :flag-assert #xb000000c0 (:methods (new (symbol type int) _type_ 0) - (dummy-9 () none 9) + (dummy-9 (_type_) none 9) (dummy-10 (_type_ symbol) int 10) ) ) diff --git a/goal_src/engine/camera/math-camera-h.gc b/goal_src/engine/camera/math-camera-h.gc index 62236bada..7c79bfa69 100644 --- a/goal_src/engine/camera/math-camera-h.gc +++ b/goal_src/engine/camera/math-camera-h.gc @@ -93,8 +93,8 @@ (fov-correction-factor float :offset-assert 1056) ) (:methods - (new (symbol type) _type_ 0) - ) + (new (symbol type) _type_ 0) + ) :method-count-assert 9 :size-assert #x424 :flag-assert #x900000424 diff --git a/goal_src/engine/collide/collide-shape-h.gc b/goal_src/engine/collide/collide-shape-h.gc index f54d12a5f..40d8f28f2 100644 --- a/goal_src/engine/collide/collide-shape-h.gc +++ b/goal_src/engine/collide/collide-shape-h.gc @@ -302,36 +302,37 @@ :size-assert #xb8 :flag-assert #x38000000b8 (:methods - (new (symbol type process collide-list-enum) _type_) - (dummy-28 () none 28) - (dummy-29 () none 29) - (dummy-30 () none 30) - (dummy-31 () none 31) - (dummy-32 () none 32) - (dummy-33 () none 33) - (dummy-34 () none 34) - (dummy-35 () none 35) - (dummy-36 () none 36) - (dummy-37 () none 37) - (dummy-38 () none 38) - (dummy-39 () none 39) - (dummy-40 () none 40) - (dummy-41 () none 41) - (dummy-42 () none 42) - (dummy-43 () none 43) - (dummy-44 () none 44) - (dummy-45 () none 45) - (dummy-46 () none 46) - (dummy-47 () none 47) - (dummy-48 () none 48) - (dummy-49 () none 49) - (dummy-50 () none 50) - (dummy-51 () none 51) - (dummy-52 () none 52) - (dummy-53 () none 53) - (dummy-54 () none 54) - (dummy-55 () none 55) - ) + (new (symbol type process collide-list-enum) _type_) + (dummy-26 () none 26) + (dummy-28 () none 28) + (dummy-29 () none 29) + (dummy-30 () none 30) + (dummy-31 () none 31) + (dummy-32 () none 32) + (dummy-33 () none 33) + (dummy-34 () none 34) + (dummy-35 (_type_) none 35) + (dummy-36 () none 36) + (dummy-37 () none 37) + (dummy-38 () none 38) + (dummy-39 () none 39) + (dummy-40 () none 40) + (dummy-41 () none 41) + (dummy-42 () none 42) + (dummy-43 () none 43) + (dummy-44 (_type_) none 44) + (dummy-45 (_type_) none 45) + (dummy-46 () none 46) + (dummy-47 (_type_) none 47) + (dummy-48 (_type_) none 48) + (dummy-49 () none 49) + (dummy-50 () none 50) + (dummy-51 () none 51) + (dummy-52 () none 52) + (dummy-53 () none 53) + (dummy-54 () none 54) + (dummy-55 () none 55) + ) ) ;; More complicated collide-shape? diff --git a/goal_src/engine/collide/collide-target-h.gc b/goal_src/engine/collide/collide-target-h.gc index 2272b01e7..58654a79a 100644 --- a/goal_src/engine/collide/collide-target-h.gc +++ b/goal_src/engine/collide/collide-target-h.gc @@ -32,13 +32,19 @@ (deftype control-info (collide-shape-moving) ( + (unknown-vector00 vector :inline :offset 576) + (unknown-surface surface :offset 660) + (unknown-symbol symbol :offset 664) + (unknown-qword uint128 :offset 1136) + (unknown-vector10 vector :inline :offset 1216) + (unknown-vector11 vector :inline :offset 1232) + (unknown-vector12 vector :inline :offset 1248) + (unknown-vector13 vector :inline :offset 1264) ;; these were determined from racer-collision-reaction. - (array-size int16 :offset 2490) - (history-array collide-history 128 :inline :offset-assert 2496) - ;; what's on the end? + (history-length int16 :offset 2490) + (history-data collide-history 128 :inline :offset-assert 2496) (pad uint32 27) ) - :size-assert #x4a2c :method-count-assert 65 :flag-assert #x4100004a2c diff --git a/goal_src/engine/data/art-h.gc b/goal_src/engine/data/art-h.gc index 1be78f399..04f4e86e7 100644 --- a/goal_src/engine/data/art-h.gc +++ b/goal_src/engine/data/art-h.gc @@ -119,7 +119,6 @@ ) (declare-type art-element basic) -(declare-type entity basic) (deftype art (basic) ((name string :offset 8) (length int32 :offset-assert 12) @@ -180,8 +179,8 @@ :size-assert #x20 :flag-assert #xf00000020 (:methods - (dummy-13 () none 13) - (dummy-14 () none 14) + (dummy-13 (_type_) int 13) + (dummy-14 (_type_) int 14) ) ) @@ -242,7 +241,7 @@ :size-assert #x21 :flag-assert #xa00000021 (:methods - (dummy-9 () none 9) + (dummy-9 (_type_) _type_ 9) ) ) @@ -250,54 +249,55 @@ (declare-type shadow-geo basic) (declare-type shadow-control basic) (deftype draw-control (basic) - ((status uint8 :offset-assert 4) - (matrix-type uint8 :offset-assert 5) - (data-format uint8 :offset-assert 6) - (global-effect uint8 :offset-assert 7) - (art-group art-group :offset-assert 8) - (jgeo art-joint-geo :offset-assert 12) - (mgeo merc-ctrl :offset-assert 16) - (dma-add-func function :offset-assert 20) - (skeleton skeleton-group :offset-assert 24) - (lod-set lod-set :inline :offset-assert 28) - (lod lod-group 4 :inline :offset 28) - (max-lod int8 :offset 60) - (force-lod int8 :offset-assert 61) - (cur-lod int8 :offset-assert 62) - (desired-lod int8 :offset-assert 63) - (ripple ripple-control :offset-assert 64) - (longest-edge float :offset-assert 68) ;; meters - (longest-edge? uint32 :offset 68) - (light-index uint8 :offset-assert 72) - (dummy uint8 2 :offset-assert 73) - (death-draw-overlap uint8 :offset-assert 75) - (death-timer uint8 :offset-assert 76) - (death-timer-org uint8 :offset-assert 77) - (death-vertex-skip uint16 :offset-assert 78) - (death-effect uint32 :offset-assert 80) - (sink-group dma-foreground-sink-group :offset-assert 84) - (process process :offset-assert 88) - (shadow shadow-geo :offset-assert 92) - (shadow-ctrl shadow-control :offset-assert 96) - (origin vector :inline :offset-assert 112) - (bounds vector :inline :offset-assert 128) - (radius float :offset 140) ;; meters - (color-mult rgbaf :inline :offset-assert 144) - (color-emissive rgbaf :inline :offset-assert 160) - (secondary-interp float :offset-assert 176) - (current-secondary-interp float :offset-assert 180) - (shadow-mask uint8 :offset-assert 184) - (level-index uint8 :offset-assert 185) - (origin-joint-index uint8 :offset-assert 186) - (shadow-joint-index uint8 :offset-assert 187) + ((status uint8 :offset-assert 4) + (matrix-type uint8 :offset-assert 5) + (data-format uint8 :offset-assert 6) + (global-effect uint8 :offset-assert 7) + (art-group art-group :offset-assert 8) + (jgeo art-joint-geo :offset-assert 12) + (mgeo merc-ctrl :offset-assert 16) + (dma-add-func function :offset-assert 20) + (skeleton skeleton-group :offset-assert 24) ;; or cspace-array or shadow-control + (lod-set lod-set :inline :offset-assert 28) + (lod lod-group 4 :inline :offset 28) + (max-lod int8 :offset 60) + (force-lod int8 :offset-assert 61) + (cur-lod int8 :offset-assert 62) + (desired-lod int8 :offset-assert 63) + (ripple ripple-control :offset-assert 64) + (longest-edge float :offset-assert 68) ;; meters + (longest-edge? uint32 :offset 68) + (light-index uint8 :offset-assert 72) + (dummy uint8 2 :offset-assert 73) + (death-draw-overlap uint8 :offset-assert 75) + (death-timer uint8 :offset-assert 76) + (death-timer-org uint8 :offset-assert 77) + (death-vertex-skip uint16 :offset-assert 78) + (death-effect uint32 :offset-assert 80) + (sink-group dma-foreground-sink-group :offset-assert 84) ;; dma-foreground-sink-group? + (process process :offset-assert 88) + (shadow shadow-geo :offset-assert 92) + (shadow-ctrl shadow-control :offset-assert 96) + (origin vector :inline :offset-assert 112) + (bounds vector :inline :offset-assert 128) + (radius float :offset 140) ;; meters + (color-mult rgbaf :inline :offset-assert 144) + (color-emissive rgbaf :inline :offset-assert 160) + (secondary-interp float :offset-assert 176) + (current-secondary-interp float :offset-assert 180) + (shadow-mask uint8 :offset-assert 184) + (level-index uint8 :offset-assert 185) + (origin-joint-index uint8 :offset-assert 186) + (shadow-joint-index uint8 :offset-assert 187) ) :method-count-assert 12 :size-assert #xbc :flag-assert #xc000000bc (:methods + (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) - (dummy-10 () none 10) - (dummy-11 () none 11) + (dummy-10 (_type_ int int) int 10) + (dummy-11 (_type_ pointer) int 11) ) ) diff --git a/goal_src/engine/data/res-h.gc b/goal_src/engine/data/res-h.gc index d01b7a6c8..743e0d828 100644 --- a/goal_src/engine/data/res-h.gc +++ b/goal_src/engine/data/res-h.gc @@ -31,7 +31,7 @@ (data-base pointer :offset-assert 12) (data-top pointer :offset-assert 16) (data-size int32 :offset-assert 20) - (extra basic :offset-assert 24) + (extra entity-links :offset-assert 24) (tag (pointer res-tag) :offset-assert 28) ) diff --git a/goal_src/engine/debug/assert-h.gc b/goal_src/engine/debug/assert-h.gc index 7af9ef61c..8c3908cce 100644 --- a/goal_src/engine/debug/assert-h.gc +++ b/goal_src/engine/debug/assert-h.gc @@ -15,21 +15,19 @@ :size-assert #x8 :flag-assert #xb00000008 (:methods - (set-private-assert-info (_type_ string uint16 uint16) int 9) - (print-private-assert-info (_type_) int 10) + (set-pos (_type_ string uint uint) int 9) + (print-pos (_type_) int 10) ) ) - -(defmethod set-private-assert-info __assert-info-private-struct ((obj __assert-info-private-struct) - (filename string) (line-num uint16) (column-num uint16)) +(defmethod set-pos __assert-info-private-struct ((obj __assert-info-private-struct) (filename string) (line-num uint) (column-num uint)) (set! (-> obj filename) filename) (set! (-> obj line-num) line-num) (set! (-> obj column-num) column-num) 0 ) -(defmethod print-private-assert-info __assert-info-private-struct ((obj __assert-info-private-struct)) +(defmethod print-pos __assert-info-private-struct ((obj __assert-info-private-struct)) (format #t "file ~S.gc, line ~D, col ~D.~%" (-> obj filename) (-> obj line-num) (-> obj column-num)) 0 ) diff --git a/goal_src/engine/debug/assert.gc b/goal_src/engine/debug/assert.gc index d4651f582..f5c7fd090 100644 --- a/goal_src/engine/debug/assert.gc +++ b/goal_src/engine/debug/assert.gc @@ -6,46 +6,53 @@ ;; dgos: GAME, ENGINE -(define *run-time-assert-enable* #t) ;; where is this used? +(define *run-time-assert-enable* #t) -(defun __assert ((exp symbol) (msg string)) - "Assert that exp is truthy, print assert information otherwise" - (when (not exp) +;; TODO macros + +(defun __assert ((expr symbol) (msg string)) + "Assert that expr is truthy, print assert information otherwise" + + (when (not expr) (format #t "(ASSERT ~S) FAILED in " msg) - (print-private-assert-info *__private-assert-info*) + (print-pos *__private-assert-info*) ) 0 ) -(defun __assert-min-max-range-float - ((exp float) (minimum float) (maximum float) (msg-exp string) (msg-min string) (msg-max string)) - "Assert that float exp is a larger value than minimum and smaller than maximum, print assert information otherwise" - (when (or (< exp minimum) (< maximum exp)) +(defun __assert-min-max-range-float ((expr float) (minimum float) (maximum float) (msg-expr string) (msg-min string) (msg-max string)) + "Assert that float expr is a larger value than minimum and smaller than maximum, print assert information otherwise" + + (when (or (< expr minimum) (< maximum expr)) (format #t "(ASSERT_MIN_MAX_RANGE_FLOAT ~S ~S ~S) FAILED (values ~F ~F ~F) in " - msg-exp msg-min msg-max exp minimum maximum) - (print-private-assert-info *__private-assert-info*) + msg-expr msg-min msg-max + expr minimum maximum) + (print-pos *__private-assert-info*) ) 0 ) -(defun __assert-min-max-range-int - ((exp int) (minimum int) (maximum int) (msg-exp string) (msg-min string) (msg-max string)) - "Assert that integer exp is a larger value than minimum and smaller than maximum, print assert information otherwise" - (when (or (< exp minimum) (< maximum exp)) +(defun __assert-min-max-range-int ((expr int) (minimum int) (maximum int) (msg-expr string) (msg-min string) (msg-max string)) + "Assert that integer expr is a larger value than minimum and smaller than maximum, print assert information otherwise" + + (when (or (< expr minimum) (< maximum expr)) (format #t "(ASSERT_MIN_MAX_RANGE_INT ~S ~S ~S) FAILED (values ~D ~D ~D) in " - msg-exp msg-min msg-max exp minimum maximum) - (print-private-assert-info *__private-assert-info*) + msg-expr msg-min msg-max + expr minimum maximum) + (print-pos *__private-assert-info*) ) 0 ) -(defun __assert-zero-lim-range-int ((exp int) (maximum int) (msg-exp string) (msg-max string)) - "Assert that integer exp is a larger value than zero and smaller than maximum, print assert information otherwise" - (when (or (< exp 0) (>= exp max)) +(defun __assert-zero-lim-range-int ((expr int) (maximum int) (msg-expr string) (msg-max string)) + "Assert that integer expr is a larger value than zero and smaller than maximum, print assert information otherwise" + + (when (or (< expr 0) (>= expr max)) (format #t "(ASSERT_ZERO_LIM_RANGE_INT ~S ~S) FAILED (values ~D ~D) in " - msg-exp msg-max exp maximum) - (print-private-assert-info *__private-assert-info*) + msg-expr msg-max + expr maximum) + (print-pos *__private-assert-info*) ) 0 ) diff --git a/goal_src/engine/draw/drawable-actor-h.gc b/goal_src/engine/draw/drawable-actor-h.gc index c0d41261b..65e416c61 100644 --- a/goal_src/engine/draw/drawable-actor-h.gc +++ b/goal_src/engine/draw/drawable-actor-h.gc @@ -5,8 +5,9 @@ ;; name in dgo: drawable-actor-h ;; dgos: GAME, ENGINE +(declare-type entity-actor basic) (deftype drawable-actor (drawable) - ((actor basic :offset 8) + ((actor entity-actor :offset 8) ) :method-count-assert 18 :size-assert #x20 diff --git a/goal_src/engine/draw/drawable-ambient-h.gc b/goal_src/engine/draw/drawable-ambient-h.gc index 81da65533..66ca1cec8 100644 --- a/goal_src/engine/draw/drawable-ambient-h.gc +++ b/goal_src/engine/draw/drawable-ambient-h.gc @@ -5,12 +5,10 @@ ;; name in dgo: drawable-ambient-h ;; dgos: GAME, ENGINE -;;-*-Lisp-*- -(in-package goal) -;; definition of type drawable-ambient +(declare-type entity-ambient basic) (deftype drawable-ambient (drawable) - ((ambient basic :offset 8) + ((ambient entity-ambient :offset 8) ) :method-count-assert 19 :size-assert #x20 @@ -20,7 +18,6 @@ ) ) -;; definition for method 3 of type drawable-ambient (defmethod inspect drawable-ambient ((obj drawable-ambient)) (format #t "[~8x] ~A~%" obj (-> obj type)) (format #t "~Tid: ~D~%" (-> obj id)) @@ -29,7 +26,6 @@ obj ) -;; definition of type drawable-tree-ambient (deftype drawable-tree-ambient (drawable-tree) () :method-count-assert 18 @@ -37,24 +33,20 @@ :flag-assert #x1200000024 ) -;; definition of type drawable-inline-array-ambient (deftype drawable-inline-array-ambient (drawable-inline-array) ((data drawable-ambient 1 :inline) (pad uint8 4)) :flag-assert #x1200000044 ) -;; definition for method 10 of type drawable-tree-ambient (defmethod dummy-10 drawable-tree-ambient ((obj _type_) (arg0 drawable) (arg1 display-frame)) 0 ) -;; definition for method 16 of type drawable-tree-ambient (defmethod dummy-16 drawable-tree-ambient ((obj drawable-tree-ambient) (arg0 object) (arg1 object)) arg1 ) -;; definition of type level-hint (deftype level-hint (process) ((text-id-to-display uint32 :offset-assert 112) (sound-to-play basic :offset-assert 116) @@ -76,7 +68,6 @@ ) ) -;; definition for method 3 of type level-hint (defmethod inspect level-hint ((obj level-hint)) (let ((t9-0 (method-of-type process inspect))) (t9-0 obj) @@ -93,7 +84,6 @@ obj ) -;; definition of type ambient-list (deftype ambient-list (structure) ((num-items int32 :offset-assert 0) (items uint32 2048 :offset-assert 4) diff --git a/goal_src/engine/draw/drawable-h.gc b/goal_src/engine/draw/drawable-h.gc index f1f771843..8ea2a3b57 100644 --- a/goal_src/engine/draw/drawable-h.gc +++ b/goal_src/engine/draw/drawable-h.gc @@ -21,7 +21,7 @@ (dummy-12 (_type_ int) none 12) ; int - length (dummy-13 (_type_ int) none 13) ; int - length (dummy-14 () none 14) - (dummy-15 () none 15) + (dummy-15 (_type_) none 15) (dummy-16 (_type_ object object) object 16) (dummy-17 () none 17) ) diff --git a/goal_src/engine/entity/entity-h.gc b/goal_src/engine/entity/entity-h.gc index 0b2b42ad0..b5b768f69 100644 --- a/goal_src/engine/entity/entity-h.gc +++ b/goal_src/engine/entity/entity-h.gc @@ -191,9 +191,9 @@ ;; NOTE - this is a strange pattern...this symbol isn't defined until a later file 'navigate' ;; But this seems to be setting the symbol to nothing if it's not found, but of course, our compiler freaks out -(define-extern entity-nav-login (function basic none)) +(define-extern entity-nav-login (function entity-actor none)) (if (zero? entity-nav-login) - (set! entity-nav-login (the-as (function basic none) nothing)) + (set! entity-nav-login (the-as (function entity-actor none) nothing)) ) ;; definition of type actor-bank @@ -217,4 +217,5 @@ ) (defun-extern entity-by-name string entity) +(defun-extern entity-by-type type entity-actor) (defun-extern entity-by-aid uint entity) diff --git a/goal_src/engine/entity/entity.gc b/goal_src/engine/entity/entity.gc index 500749b92..b2d79afba 100644 --- a/goal_src/engine/entity/entity.gc +++ b/goal_src/engine/entity/entity.gc @@ -92,3 +92,28 @@ ) (the-as entity #f) ) + +(defun entity-by-type ((arg0 type)) + (dotimes (s5-0 (-> *level* length)) + (let ((v1-3 (-> *level* level s5-0))) + (when (= (-> v1-3 status) 'active) + (let ((s4-0 (-> v1-3 bsp actors))) + (when (nonzero? s4-0) + (dotimes (s3-0 (-> s4-0 length)) + (let ((s2-0 (-> s4-0 data s3-0 actor))) + (if + (and + (type-type? (-> s2-0 type) entity-actor) + (= (-> s2-0 etype) arg0) + ) + (return s2-0) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity-actor #f) + ) diff --git a/goal_src/engine/game/game-h.gc b/goal_src/engine/game/game-h.gc index c98bce9fb..9db75e301 100644 --- a/goal_src/engine/game/game-h.gc +++ b/goal_src/engine/game/game-h.gc @@ -6,9 +6,11 @@ ;; dgos: GAME, ENGINE +(declare-type collide-shape basic) (declare-type water-control basic) +(declare-type sparticle-launch-control basic) (deftype process-drawable (process) - ((root trsqv :offset-assert 112) + ((root trsqv :offset-assert 112) (node-list cspace-array :offset-assert 116) (draw draw-control :offset-assert 120) (skel joint-control :offset-assert 124) @@ -18,7 +20,7 @@ (vol basic :offset-assert 140) (fact fact-info :offset-assert 144) (link basic :offset-assert 148) - (part basic :offset-assert 152) + (part sparticle-launch-control :offset-assert 152) (water water-control :offset-assert 156) (sound ambient-sound :offset-assert 160) (state-flags uint32 :offset-assert 164) @@ -28,13 +30,15 @@ :method-count-assert 20 :size-assert #xb0 :flag-assert #x14004000b0 + ;; inherited inspect of process (:methods - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) + (deactivate (_type_) none 10) + (dummy-14 (_type_ skeleton-group object) none 14) + (dummy-15 (_type_ string object) _type_ 15) + (dummy-16 (_type_ int (inline-array vector) vector) collide-shape 16) + (dummy-17 (_type_) none 17) + (dummy-18 (_type_) symbol 18) + (dummy-19 (_type_) none 19) ) ) diff --git a/goal_src/engine/game/game-info-h.gc b/goal_src/engine/game/game-info-h.gc index 5efd1170a..ca5472d37 100644 --- a/goal_src/engine/game/game-info-h.gc +++ b/goal_src/engine/game/game-info-h.gc @@ -33,9 +33,9 @@ (deftype level-buffer-state (structure) ((name basic :offset-assert 0) - (display? basic :offset-assert 4) - (force-vis? basic :offset-assert 8) - (force-inside? basic :offset-assert 12) + (display? symbol :offset-assert 4) + (force-vis? symbol :offset-assert 8) + (force-inside? symbol :offset-assert 12) ) :pack-me :method-count-assert 9 @@ -45,29 +45,29 @@ (deftype load-state (basic) ((want level-buffer-state 2 :inline :offset-assert 4) - (vis-nick basic :offset-assert 36) - (command-list pair :offset-assert 40) - (object-name basic 256 :offset-assert 44) - (object-status basic 256 :offset-assert 1068) + (vis-nick symbol :offset-assert 36) + (command-list pair :offset-assert 40) + (object-name symbol 256 :offset-assert 44) + (object-status basic 256 :offset-assert 1068) ) :method-count-assert 21 :size-assert #x82c :flag-assert #x150000082c (:methods - (new (symbol type) _type_ 0) - (reset! (_type_) _type_ 9) - (dummy-10 () none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) - (dummy-20 () none 20) - ) + (new (symbol type) _type_ 0) + (reset! (_type_) _type_ 9) + (update! (_type_) int 10) + (want-levels (_type_ symbol symbol) int 11) + (want-display-level (_type_ symbol symbol) int 12) + (want-vis (_type_ symbol) int 13) + (want-force-vis (_type_ symbol symbol) int 14) + (dummy-15 () none 15) + (dummy-16 () none 16) + (dummy-17 () none 17) + (dummy-18 () none 18) + (dummy-19 () none 19) + (dummy-20 () none 20) + ) ) (defmethod new load-state ((allocation symbol) (type-to-make type)) @@ -149,19 +149,19 @@ :method-count-assert 29 :size-assert #x144 :flag-assert #x1d00000144 - ;; field dummy is a basic loaded with a signed load + ;; field dummy is a basic loaded with a signed load (:methods (dummy-9 (_type_ symbol symbol string) none 9) (dummy-10 () none 10) (dummy-11 () none 11) (dummy-12 () none 12) (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) + (dummy-14 (_type_) none 14) + (dummy-15 (_type_) none 15) (dummy-16 () none 16) - (dummy-17 (_type_) none 17) + (dummy-17 (_type_) continue-point 17) (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-19 (_type_ continue-point) none 19) (dummy-20 () none 20) (dummy-21 () none 21) (dummy-22 () none 22) diff --git a/goal_src/engine/game/generic-obs-h.gc b/goal_src/engine/game/generic-obs-h.gc index 37e96b51e..373bbfbc2 100644 --- a/goal_src/engine/game/generic-obs-h.gc +++ b/goal_src/engine/game/generic-obs-h.gc @@ -28,14 +28,6 @@ :size-assert #x114 :flag-assert #x1400b00114 ;; inherited inspect of process-drawable - (:methods - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) - ) ) (deftype part-spawner (process-drawable) diff --git a/goal_src/engine/game/generic-obs.gc b/goal_src/engine/game/generic-obs.gc index 110064c7f..9c856b34c 100644 --- a/goal_src/engine/game/generic-obs.gc +++ b/goal_src/engine/game/generic-obs.gc @@ -5,3 +5,10 @@ ;; name in dgo: generic-obs ;; dgos: GAME, ENGINE + +(deftype camera-start (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) \ No newline at end of file diff --git a/goal_src/engine/game/main-h.gc b/goal_src/engine/game/main-h.gc index c3d855adf..68c002f8c 100644 --- a/goal_src/engine/game/main-h.gc +++ b/goal_src/engine/game/main-h.gc @@ -128,3 +128,6 @@ ) (defun-extern movie? symbol) +(defun-extern set-blackout-frames int uint) +(defun-extern on symbol process) +(defun-extern off int) diff --git a/goal_src/engine/game/main.gc b/goal_src/engine/game/main.gc index 067d1c59b..000ac8bfe 100644 --- a/goal_src/engine/game/main.gc +++ b/goal_src/engine/game/main.gc @@ -10,5 +10,80 @@ (nonzero? (logand (-> *kernel-context* prevent-from-run) (process-mask movie))) ) +(defun set-blackout-frames ((arg0 int)) + (cond + ((zero? arg0) + (set! (-> *game-info* blackout-time) (-> *display* base-frame-counter)) + ) + (else + (set! (-> *game-info* blackout-time) (max (-> *game-info* blackout-time) (+ (-> *display* base-frame-counter) arg0))) + ) + ) + ) + +(defun display-loop () + ;; this function doesnt decompile right now + 0 + ) + +(defun on ((release-mode symbol)) + "Turn the game on." + + (when (not *dproc*) + (unless release-mode + (if (= (-> *level* level0 status) 'inactive) + (bg 'halfpipe) + ) + ) + (set! *run* #t) + ;; this is actually a macro (see logic-target.gc) + (let ((new-dproc (swhen (get-process *4k-dead-pool* process (* 16 1024)) + ((method-of-type process activate) bc *display-pool* 'display *kernel-dram-stack*) + ((the (function cpu-thread function object) set-to-run) (-> bc main-thread) display-loop) + (-> bc ppointer) + )) + ) + (set! *dproc* (the process (if new-dproc (-> new-dproc 0 self)))) + ) + (cond + ((or (level-get-with-status *level* 'loaded) + (level-get-with-status *level* 'alive) + (level-get-with-status *level* 'active) + ) + (activate-levels! *level*) + (when (not release-mode) + (let ((entity-cam (entity-by-type camera-start))) + (if (and entity-cam (type-type? (-> entity-cam type) entity-actor)) + (camera-teleport-to-entity entity-cam) + ) + ) + ) + ) + (else + (kill-by-name 'display *active-pool*) + (set! *dproc* #f) + ) + ) + *dproc* + ) + ) + +(defun off () + "Turn the game off." + + ;; stop the game and set the mode to debug + (stop 'debug) + ;; deactivate the levels + (dotimes (i (-> *level* length)) + (let ((lev (-> *level* level i))) + (if (= (-> lev status) 'active) + (deactivate lev) + ) + ) + ) + (set! *run* #f) + 0 + ) + ;; TODO - for credits (define-extern scf-get-territory (function int)) diff --git a/goal_src/engine/gfx/ocean/ocean-h.gc b/goal_src/engine/gfx/ocean/ocean-h.gc index 4a5c06cd9..0654da8a6 100644 --- a/goal_src/engine/gfx/ocean/ocean-h.gc +++ b/goal_src/engine/gfx/ocean/ocean-h.gc @@ -145,10 +145,10 @@ (far-color vector :inline :offset-assert 32) (ocean-spheres ocean-spheres :offset-assert 48) (ocean-colors ocean-colors :offset-assert 52) - (ocean-mid-indices basic :offset-assert 56) - (ocean-trans-indices basic :offset-assert 60) - (ocean-near-indices basic :offset-assert 64) - (ocean-mid-masks basic :offset-assert 68) + (ocean-mid-indices ocean-mid-indices :offset-assert 56) + (ocean-trans-indices ocean-trans-indices :offset-assert 60) + (ocean-near-indices ocean-near-indices :offset-assert 64) + (ocean-mid-masks ocean-mid-masks :offset-assert 68) ) :method-count-assert 9 :size-assert #x48 diff --git a/goal_src/engine/gfx/sky/sky-h.gc b/goal_src/engine/gfx/sky/sky-h.gc index c492bb6a6..9c7918020 100644 --- a/goal_src/engine/gfx/sky/sky-h.gc +++ b/goal_src/engine/gfx/sky/sky-h.gc @@ -98,8 +98,8 @@ (default-vu-lights vu-lights :inline :offset-assert 1136) ) (:methods - (new (symbol type) _type_ 0) - ) + (new (symbol type) _type_ 0) + ) :method-count-assert 9 :size-assert #x4e0 :flag-assert #x9000004e0 diff --git a/goal_src/engine/gfx/texture-h.gc b/goal_src/engine/gfx/texture-h.gc index 1f4eefc16..7ee5e1c30 100644 --- a/goal_src/engine/gfx/texture-h.gc +++ b/goal_src/engine/gfx/texture-h.gc @@ -76,7 +76,7 @@ (dummy-17 () none 17) (dummy-18 () none 18) (dummy-19 () none 19) - (dummy-20 () none 20) + (dummy-20 (_type_ texture-page) int 20) (upload-one-common! (_type_) symbol 21) (lookup-boot-common-id (_type_ int) int 22) ) @@ -93,7 +93,7 @@ (dest uint16 7 :offset-assert 14) (clutdest uint16 :offset-assert 28) (width uint8 7 :offset-assert 30) - (name basic :offset-assert 40) + (name string :offset-assert 40) (size uint32 :offset-assert 44) (uv-dist float :offset-assert 48) (masks uint32 3 :offset-assert 52) @@ -171,15 +171,16 @@ (deftype texture-page-dir (basic) ((length int32) - (entries texture-page-dir-entry 1 :inline)) - (:methods - (dummy-9 () none 9) + (entries texture-page-dir-entry 1 :inline) ) + (:methods + (dummy-9 (_type_ kheap) int 9) + ) :flag-assert #xa00000014 ) (deftype texture-relocate-later (basic) - ((memcpy basic :offset-assert 4) + ((memcpy symbol :offset-assert 4) (dest uint32 :offset-assert 8) (source uint32 :offset-assert 12) (move uint32 :offset-assert 16) @@ -214,7 +215,8 @@ ) (deftype adgif-shader-array (inline-array-class) - () + ((data adgif-shader :inline :dynamic :offset 16) + ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 diff --git a/goal_src/engine/gfx/texture.gc b/goal_src/engine/gfx/texture.gc index 444cad3c0..50043c6fe 100644 --- a/goal_src/engine/gfx/texture.gc +++ b/goal_src/engine/gfx/texture.gc @@ -1264,7 +1264,7 @@ (set! (-> *texture-pool* allocate-func) texture-page-common-allocate) ;; in the level data, there is always code, then TFRAG texture, ;; so mark the code memory end as the start of this page. - (set! (-> *level* unknown-level-2 code-memory-end) (the-as uint page)) + (set! (-> *level* unknown-level-2 code-memory-end) (the pointer page)) page ) @@ -1310,7 +1310,7 @@ ) ) (set! (-> *texture-pool* allocate-func) texture-page-common-allocate) - (set! (-> *level* unknown-level-2 code-memory-end) (the-as uint page)) + (set! (-> *level* unknown-level-2 code-memory-end) (the pointer page)) page ) diff --git a/goal_src/engine/gfx/tfrag/subdivide.gc b/goal_src/engine/gfx/tfrag/subdivide.gc index 9ef8eb199..1a89c7386 100644 --- a/goal_src/engine/gfx/tfrag/subdivide.gc +++ b/goal_src/engine/gfx/tfrag/subdivide.gc @@ -5,3 +5,5 @@ ;; name in dgo: subdivide ;; dgos: GAME, ENGINE + +(define *subdivide-settings* (new 'global 'subdivide-settings (meters 30.0) (meters 70.0))) \ No newline at end of file diff --git a/goal_src/engine/gfx/vis/bsp-h.gc b/goal_src/engine/gfx/vis/bsp-h.gc index 293773e3d..c9b4c946e 100644 --- a/goal_src/engine/gfx/vis/bsp-h.gc +++ b/goal_src/engine/gfx/vis/bsp-h.gc @@ -53,8 +53,10 @@ :size-assert #x190 :flag-assert #x1400000190 (:methods - (dummy-18 () none 18) - (dummy-19 () none 19) + (relocate (_type_ int) _type_ 7) + (dummy-17 () none 17) + (dummy-18 (_type_) none 18) + (dummy-19 (_type_) none 19) ) ) diff --git a/goal_src/engine/gfx/water/water-h.gc b/goal_src/engine/gfx/water/water-h.gc index ea447cbb3..2da83f129 100644 --- a/goal_src/engine/gfx/water/water-h.gc +++ b/goal_src/engine/gfx/water/water-h.gc @@ -7,40 +7,40 @@ ;; definition of type water-control (deftype water-control (basic) - ((flags uint32 :offset-assert 4) - (process basic :offset-assert 8) - (joint-index int32 :offset-assert 12) - (top-y-offset float :offset-assert 16) - (ripple-size float :offset-assert 20) - (enter-water-time uint64 :offset-assert 24) - (wade-time uint64 :offset-assert 32) - (on-water-time uint64 :offset-assert 40) - (enter-swim-time uint64 :offset-assert 48) - (swim-time uint64 :offset-assert 56) - (base-height float :offset-assert 64) - (wade-height float :offset-assert 68) - (swim-height float :offset-assert 72) - (surface-height float :offset-assert 76) - (bottom-height float :offset-assert 80) - (height float :offset-assert 84) - (height-offset float 4 :offset-assert 88) - (real-ocean-offset float :offset 88) - (ocean-offset float :offset 92) - (bob-offset float :offset 96) - (align-offset float :offset 100) - (swim-depth float :offset-assert 104) - (bob smush-control :inline :offset-assert 112) - (volume uint64 :offset-assert 144) - (bottom vector 2 :inline :offset-assert 160) - (top vector 2 :inline :offset-assert 192) - (enter-water-pos vector :inline :offset-assert 224) - (drip-old-pos vector :inline :offset-assert 240) - (drip-joint-index int32 :offset-assert 256) - (drip-wetness float :offset-assert 260) - (drip-time uint64 :offset-assert 264) - (drip-speed float :offset-assert 272) - (drip-height float :offset-assert 276) - (drip-mult float :offset-assert 280) + ((flags uint32 :offset-assert 4) + (process process :offset-assert 8) + (joint-index int32 :offset-assert 12) + (top-y-offset float :offset-assert 16) + (ripple-size float :offset-assert 20) ; meters + (enter-water-time uint64 :offset-assert 24) + (wade-time uint64 :offset-assert 32) + (on-water-time uint64 :offset-assert 40) + (enter-swim-time uint64 :offset-assert 48) + (swim-time uint64 :offset-assert 56) + (base-height float :offset-assert 64) ; meters + (wade-height float :offset-assert 68) ; meters + (swim-height float :offset-assert 72) ; meters + (surface-height float :offset-assert 76) ; meters + (bottom-height float :offset-assert 80) ; meters + (height float :offset-assert 84) ; meters + (height-offset float 4 :offset-assert 88) + (real-ocean-offset float :offset 88) ; meters + (ocean-offset float :offset 92) ; meters + (bob-offset float :offset 96) ; meters + (align-offset float :offset 100) ; meters + (swim-depth float :offset-assert 104) ; meters + (bob smush-control :inline :offset-assert 112) + (volume uint64 :offset-assert 144) ;; handle? + (bottom vector 2 :inline :offset-assert 160) + (top vector 2 :inline :offset-assert 192) + (enter-water-pos vector :inline :offset-assert 224) + (drip-old-pos vector :inline :offset-assert 240) + (drip-joint-index int32 :offset-assert 256) + (drip-wetness float :offset-assert 260) + (drip-time uint64 :offset-assert 264) + (drip-speed float :offset-assert 272) + (drip-height float :offset-assert 276) ; meters + (drip-mult float :offset-assert 280) ) :method-count-assert 17 :size-assert #x11c @@ -58,23 +58,11 @@ ) ) -;; definition for method 14 of type water-control (defmethod display-water-marks? water-control ((obj water-control)) (and *display-water-marks* (nonzero? (logand (-> obj flags) 1))) ) -;; definition for method 0 of type water-control -(defmethod - new - water-control - ((allocation symbol) - (type-to-make type) - (arg0 process) - (arg1 int) - (arg2 float) - (arg3 float) - (arg4 float) - ) +(defmethod new water-control ((allocation symbol) (type-to-make type) (arg0 process) (arg1 int) (arg2 float) (arg3 float) (arg4 float)) (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))) @@ -93,12 +81,10 @@ ) ) -;; definition for method 12 of type water-control (defmethod distance-from-surface water-control ((obj water-control)) (- (-> obj top 0 y) (-> obj height)) ) -;; definition of type water-vol (deftype water-vol (process-drawable) ((water-height float :offset-assert 176) (wade-height float :offset-assert 180) diff --git a/goal_src/engine/level/level-h.gc b/goal_src/engine/level/level-h.gc index 8f2e4e7fb..c2f0f632d 100644 --- a/goal_src/engine/level/level-h.gc +++ b/goal_src/engine/level/level-h.gc @@ -6,14 +6,17 @@ ;; dgos: GAME, ENGINE +(defconstant LEVEL_COUNT 2) ;; there are two levels in memory! + ;; Information related to visibility data for a level. ;; Unclear why there are 8 of these per level. ;; Perhaps there are up to 8 "chunks" of the visibility loaded at a single time? ;; The full visibility data lives on the IOP. +(declare-type bsp-header basic) (deftype level-vis-info (basic) - ((level basic :offset-assert 4) - (from-level basic :offset-assert 8) - (from-bsp basic :offset-assert 12) + ((level symbol :offset-assert 4) + (from-level symbol :offset-assert 8) + (from-bsp bsp-header :offset-assert 12) (flags uint32 :offset-assert 16) (length uint32 :offset-assert 20) (allocated-length uint32 :offset-assert 24) @@ -21,9 +24,9 @@ (dictionary uint32 :offset-assert 32) (string-block uint32 :offset-assert 36) (ramdisk uint32 :offset-assert 40) - (vis-bits uint32 :offset-assert 44) + (vis-bits pointer :offset-assert 44) (current-vis-string uint32 :offset-assert 48) - (vis-string uint8 :dynamic :offset-assert 52) + (vis-string uint8 :dynamic :offset-assert 52) ) :method-count-assert 9 :size-assert #x34 @@ -84,83 +87,81 @@ :flag-assert #x900000050 ) -(declare-type bsp-header basic) (declare-type engine basic) (declare-type entity-links-array basic) (declare-type entity-ambient-data-array basic) (declare-type mood-context basic) -;; Per level-buffer info about the current loaded level. (deftype level (basic) - ((name symbol :offset-assert 4) - (load-name symbol :offset-assert 8) - (nickname symbol :offset-assert 12) + ((name symbol :offset-assert 4) + (load-name symbol :offset-assert 8) + (nickname symbol :offset-assert 12) (index int32 :offset-assert 16) - (status symbol :offset-assert 20) + (status symbol :offset-assert 20) (other level :offset-assert 24) (heap kheap :inline :offset-assert 32) (bsp bsp-header :offset-assert 48) - (art-group load-dir-art-group :offset-assert 52) - (info level-load-info :offset-assert 56) - (texture-page texture-page 9 :offset-assert 60) - (loaded-texture-page basic 16 :offset-assert 96) + (art-group load-dir-art-group :offset-assert 52) + (info level-load-info :offset-assert 56) + (texture-page texture-page 9 :offset-assert 60) + (loaded-texture-page texture-page 16 :offset-assert 96) (loaded-texture-page-count int32 :offset-assert 160) ; (foreground-sink-group-0 dma-foreground-sink-group :inline :offset-assert 176) ; (foreground-sink-group-1 dma-foreground-sink-group :inline :offset-assert 208) ; (foreground-sink-group-2 dma-foreground-sink-group :inline :offset-assert 240) ; (array-pad uint8 12) (foreground-sink-group dma-foreground-sink-group 3 :inline :offset-assert 176) ;; inline basic - (foreground-draw-engine engine 3 :offset-assert 272) + (foreground-draw-engine engine 3 :offset-assert 272) (entity entity-links-array :offset-assert 284) (ambient entity-ambient-data-array :offset-assert 288) - (closest-object float 9 :offset-assert 292) - (upload-size int32 9 :offset-assert 328) - (level-distance float :offset-assert 364) ; meters - (inside-sphere? symbol :offset-assert 368) - (inside-boxes? symbol :offset-assert 372) - (display? symbol :offset-assert 376) - (meta-inside? symbol :offset-assert 380) - (mood mood-context :offset-assert 384) + (closest-object float 9 :offset-assert 292) + (upload-size int32 9 :offset-assert 328) + (level-distance float :offset-assert 364) ; meters + (inside-sphere? symbol :offset-assert 368) + (inside-boxes? symbol :offset-assert 372) + (display? symbol :offset-assert 376) + (meta-inside? symbol :offset-assert 380) + (mood mood-context :offset-assert 384) (mood-func function :offset-assert 388) - (vis-bits uint32 :offset-assert 392) - (all-visible? symbol :offset-assert 396) - (force-all-visible? symbol :offset-assert 400) + (vis-bits pointer :offset-assert 392) + (all-visible? symbol :offset-assert 396) + (force-all-visible? symbol :offset-assert 400) (linking basic :offset-assert 404) (vis-info level-vis-info 8 :offset-assert 408) (vis-self-index int32 :offset-assert 440) (vis-adj-index int32 :offset-assert 444) - (vis-buffer uint8 2048 :offset-assert 448) + (vis-buffer uint8 2048 :offset-assert 448) (mem-usage-block basic :offset-assert 2496) (mem-usage int32 :offset-assert 2500) - (code-memory-start uint32 :offset-assert 2504) - (code-memory-end uint32 :offset-assert 2508) - (texture-mask uint32 9 :offset-assert 2512) - (force-inside? symbol :offset-assert 2548) + (code-memory-start pointer :offset-assert 2504) + (code-memory-end pointer :offset-assert 2508) + (texture-mask uint32 9 :offset-assert 2512) + (force-inside? symbol :offset-assert 2548) (pad uint8 56) ) :method-count-assert 29 :size-assert #xa30 :flag-assert #x1d00000a30 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (deactivate (_type_) _type_ 9) + (dummy-10 (_type_ int) symbol 10) (dummy-11 (_type_) none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) - (dummy-23 (_type_ symbol) none 23) - (dummy-24 () none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) - (dummy-27 () none 27) - (dummy-28 (_type_ string) symbol 28) + (unload! (_type_) _type_ 12) + (bsp-name (_type_) symbol 13) + (dummy-14 (_type_) none 14) + (dummy-15 (_type_ vector) symbol 15) + (dummy-16 (_type_) none 16) + (load-continue (_type_) _type_ 17) + (load-begin (_type_) _type_ 18) + (login (_type_) _type_ 19) + (vis-load (_type_) uint 20) + (dummy-21 (_type_) none 21) + (activate (_type_) _type_ 22) + (level-status-set! (_type_ symbol) _type_ 23) + (dummy-24 (_type_) _type_ 24) + (dummy-25 (_type_) int 25) + (vis-clear (_type_) int 26) + (dummy-27 (_type_ vector string) none 27) + (art-group-get-by-name (_type_ string) art-group 28) ) ) @@ -174,49 +175,53 @@ ((length int32 :offset-assert 4) (unknown-level-1 level :offset-assert 8) (unknown-level-2 level :offset-assert 12) - (entity-link entity-links :offset 16) ;; not sure what's going on here + (entity-link entity-links :offset-assert 16) ;; not sure what's going on here (border? basic :offset-assert 20) (vis? basic :offset-assert 24) (want-level basic :offset-assert 28) (receiving-level basic :offset-assert 32) (load-commands pair :offset-assert 36) - (play? basic :offset-assert 40) - ;; there's something? from 40 -> 96. - (hack-pad uint8 :offset 90) - - ;(level level 3 :inline :offset-assert 96) - ;(data level 3 :inline :offset-assert 100) - (level0 level :inline :offset-assert 96) ;; inline basic - (level1 level :inline :offset-assert 2704) ;; inline basic - (level-default level :inline :offset-assert 5312) ;; inline basic + (play? symbol :offset-assert 40) + ;; there's something? from 40 -> 96. + (_hack-pad uint8 :offset 90) + (level0 level :inline :offset-assert 96) + (level1 level :inline :offset-assert 2704) + (level-default level :inline :offset-assert 5312) + ;; this actually went earlier, (level level 3 :inline :offset 96) + ;; and this one too. why another one? + (data level 3 :score -1 :inline :offset 96) (pad uint32) ) :method-count-assert 27 :size-assert #x1ef4 :flag-assert #x1b00001ef4 (:methods - (dummy-9 (_type_ symbol) level 9) - (dummy-10 (_type_ symbol) symbol 10) - (dummy-11 (_type_ symbol symbol) level 11) - (dummy-12 (_type_) none 12) + (level-get (_type_ symbol) level 9) + (level-get-with-status (_type_ symbol) level 10) + (level-get-for-use (_type_ symbol symbol) level 11) + (activate-levels! (_type_) int 12) (dummy-13 () none 13) (dummy-14 () none 14) (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 (_type_) none 17) - (dummy-18 (_type_ symbol) none 18) - (dummy-19 (_type_ pair) none 19) - (dummy-20 () none 20) - (dummy-21 (_type_ level-group int) pair 21) + (dummy-16 (_type_) int 16) + (level-get-target-inside (_type_) level 17) + (alloc-levels! (_type_ symbol) int 18) + (load-commands-set! (_type_ pair) pair 19) + (art-group-get-by-name (_type_ string) art-group 20) + (load-command-get-index (_type_ symbol int) pair 21) (dummy-22 () none 22) (dummy-23 () none 23) (dummy-24 () none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) + (level-status (_type_ symbol) symbol 25) + (level-get-most-disposable (_type_) level 26) ) ) + +(defun-extern level-update-after-load level login-state level) + + (define-extern *level* level-group) (if (zero? *level*) (set! *level* diff --git a/goal_src/engine/level/level-info.gc b/goal_src/engine/level/level-info.gc index b6e7d42c4..ce34e08cc 100644 --- a/goal_src/engine/level/level-info.gc +++ b/goal_src/engine/level/level-info.gc @@ -7,7 +7,9 @@ (define training (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'training 'training-vis 'tra) + :name 'training + :visname 'training-vis + :nickname 'tra :index 1 :packages '(training) :sound-banks '(training) @@ -114,7 +116,9 @@ ;; definition for symbol village1, type level-load-info (define village1 (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'village1 'village1-vis 'vi1) + :name 'village1 + :visname 'village1-vis + :nickname 'vi1 :index 2 :packages '(village1) :sound-banks '(village1) @@ -233,7 +237,9 @@ ;; definition for symbol beach, type level-load-info (define beach (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'beach 'beach-vis 'bea) + :name 'beach + :visname 'beach-vis + :nickname 'bea :index 3 :packages '(beach) :sound-banks '(beach) @@ -276,7 +282,9 @@ ;; definition for symbol jungle, type level-load-info (define jungle (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'jungle 'jungle-vis 'jun) + :name 'jungle + :visname 'jungle-vis + :nickname 'jun :index 4 :packages '(jungle) :sound-banks '(jungle) @@ -319,7 +327,9 @@ ;; definition for symbol jungleb, type level-load-info (define jungleb (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'jungleb 'jungleb-vis 'jub) + :name 'jungleb + :visname 'jungleb-vis + :nickname 'jub :index 5 :packages '(jungleb) :sound-banks '(jungleb) @@ -360,7 +370,9 @@ ;; definition for symbol misty, type level-load-info (define misty (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'misty 'misty-vis 'mis) + :name 'misty + :visname 'misty-vis + :nickname 'mis :index 6 :packages '(misty) :sound-banks '(misty) @@ -524,7 +536,9 @@ ;; definition for symbol firecanyon, type level-load-info (define firecanyon (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'firecanyon 'firecanyon-vis 'fic) + :name 'firecanyon + :visname 'firecanyon-vis + :nickname 'fic :index 7 :packages '(firecanyon) :sound-banks '(firecanyon) @@ -580,7 +594,9 @@ ;; definition for symbol village2, type level-load-info (define village2 (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'village2 'village2-vis 'vi2) + :name 'village2 + :visname 'village2-vis + :nickname 'vi2 :index 8 :packages '(village2) :sound-banks '(village2) @@ -651,7 +667,9 @@ ;; definition for symbol sunken, type level-load-info (define sunken (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'sunken 'sunken-vis 'sun) + :name 'sunken + :visname 'sunken-vis + :nickname 'sun :index 9 :packages '(sunken) :sound-banks '(sunken) @@ -735,7 +753,9 @@ ;; definition for symbol sunkenb, type level-load-info (define sunkenb (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'sunkenb 'sunkenb-vis 'sub) + :name 'sunkenb + :visname 'sunkenb-vis + :nickname 'sub :index 10 :packages '() :sound-banks '(sunken) @@ -791,7 +811,9 @@ ;; definition for symbol swamp, type level-load-info (define swamp (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'swamp 'swamp-vis 'swa) + :name 'swamp + :visname 'swamp-vis + :nickname 'swa :index 11 :packages '(swamp) :sound-banks '(swamp) @@ -966,7 +988,9 @@ ;; definition for symbol rolling, type level-load-info (define rolling (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'rolling 'rolling-vis 'rol) + :name 'rolling + :visname 'rolling-vis + :nickname 'rol :index 12 :packages '(rolling) :sound-banks '(rolling) @@ -1009,7 +1033,9 @@ ;; definition for symbol ogre, type level-load-info (define ogre (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'ogre 'ogre-vis 'ogr) + :name 'ogre + :visname 'ogre-vis + :nickname 'ogr :index 13 :packages '(ogre) :sound-banks '(ogre) @@ -1079,7 +1105,9 @@ ;; definition for symbol village3, type level-load-info (define village3 (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'village3 'village3-vis 'vi3) + :name 'village3 + :visname 'village3-vis + :nickname 'vi3 :index 14 :packages '(village3) :sound-banks '(village3) @@ -1151,7 +1179,9 @@ ;; definition for symbol snow, type level-load-info (define snow (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'snow 'snow-vis 'sno) + :name 'snow + :visname 'snow-vis + :nickname 'sno :index 15 :packages '(snow) :sound-banks '(snow) @@ -1306,7 +1336,9 @@ ;; definition for symbol maincave, type level-load-info (define maincave (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'maincave 'maincave-vis 'mai) + :name 'maincave + :visname 'maincave-vis + :nickname 'mai :index 16 :packages '(maincave) :sound-banks '(maincave) @@ -1376,7 +1408,9 @@ ;; definition for symbol darkcave, type level-load-info (define darkcave (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'darkcave 'darkcave-vis 'dar) + :name 'darkcave + :visname 'darkcave-vis + :nickname 'dar :index 17 :packages '(darkcave) :sound-banks '(darkcave) @@ -1477,7 +1511,9 @@ ;; definition for symbol lavatube, type level-load-info (define lavatube (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'lavatube 'lavatube-vis 'lav) + :name 'lavatube + :visname 'lavatube-vis + :nickname 'lav :index 19 :packages '(lavatube) :sound-banks '(lavatube) @@ -1565,7 +1601,9 @@ ;; definition for symbol citadel, type level-load-info (define citadel (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'citadel 'citadel-vis 'cit) + :name 'citadel + :visname 'citadel-vis + :nickname 'cit :index 20 :packages '(citadel) :sound-banks '(citadel) @@ -1744,7 +1782,9 @@ ;; definition for symbol finalboss, type level-load-info (define finalboss (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'finalboss 'finalboss-vis 'fin) + :name 'finalboss + :visname 'finalboss-vis + :nickname 'fin :index 21 :packages '(finalboss) :sound-banks '(finalboss) @@ -1806,7 +1846,9 @@ ;; definition for symbol intro, type level-load-info (define intro (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'intro 'intro-vis 'int) + :name 'intro + :visname 'intro-vis + :nickname 'int :index 22 :packages '(intro) :sound-banks '() @@ -1832,7 +1874,9 @@ ;; definition for symbol demo, type level-load-info (define demo (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'demo 'demo-vis 'dem) + :name 'demo + :visname 'demo-vis + :nickname 'dem :index 23 :packages '() :sound-banks '(village1) @@ -1874,7 +1918,9 @@ ;; definition for symbol title, type level-load-info (define title (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'title 'title-vis 'tit) + :name 'title + :visname 'title-vis + :nickname 'tit :index 24 :packages '() :sound-banks '() @@ -1959,7 +2005,9 @@ ;; definition for symbol default-level, type level-load-info (define default-level (new 'static 'level-load-info - :name-list (new 'static 'array symbol 3 'default-level 'default-level-vis 'none) + :name 'default-level + :visname 'default-level-vis + :nickname 'none :index 26 :packages '() :sound-banks '() diff --git a/goal_src/engine/level/level.gc b/goal_src/engine/level/level.gc index c987aa90e..f6722723a 100644 --- a/goal_src/engine/level/level.gc +++ b/goal_src/engine/level/level.gc @@ -5,9 +5,1573 @@ ;; name in dgo: level ;; dgos: GAME, ENGINE -(defun play ((arg0 symbol) (arg1 symbol)) - (format #t "(play ~A ~A) has been called!~%" arg0 arg1) - (format 0 "(play ~A ~A) has been called!~%" arg0 arg1) - (kernel-shutdown) + +(defun lookup-level-info ((name symbol)) + "Get the level-load-info of a level using its name. name can be the level name, the visname or the nickname. First match is returned." + + (let* ((rest *level-load-list*) + (current-sym (the symbol (car rest))) + ) + (while (not (null? rest)) + (let ((info (the level-load-info (-> current-sym value)))) + (if (or (= name (-> info name)) + (= name (-> info visname)) + (= name (-> info nickname)) + ) + (return info) + ) + ) + (set! rest (cdr rest)) + (set! current-sym (the symbol (car rest))) + ) + ) + default-level + ) + + +(defmethod load-command-get-index level-group ((obj level-group) (name symbol) (cmd-idx int)) + (let ((cmd-lst (-> (lookup-level-info name) alt-load-commands))) + (while (nonzero? cmd-idx) + (+! cmd-idx -1) + (set! cmd-lst (cdr cmd-lst)) + (nop!) + (nop!) + (nop!) + ) + (the-as pair (car cmd-lst)) + ) + ) + +(defun remap-level-name ((level-info level-load-info)) + "Get the canonical name for a level using its level-load-info" + + (if (-> *level* vis?) + (-> level-info visname) + (-> level-info name) + ) + ) + +(defmethod art-group-get-by-name level ((obj level) (arg0 string)) + (countdown (i (-> obj art-group art-group-array length)) + (if (name= (-> obj art-group art-group-array i name) arg0) + (return (-> obj art-group art-group-array i)) + ) + ) + (the-as art-group #f) + ) + +(defmethod bsp-name level ((obj level)) + "Get the name of the bsp tree of the level" + + (if (and (!= (-> obj status) 'inactive) + (-> obj bsp) + (nonzero? (-> obj bsp name)) + ) + (-> obj bsp name) + (-> obj name) + ) + ) + +(defun add-bsp-drawable ((bsp bsp-header) (arg1 level) (arg2 symbol) (arg3 display-frame)) + ;;(dummy-10 bsp bsp arg3) + ;;(if (nonzero? *display-strip-lines*) + ;; (dummy-15 bsp) + ;; ) + (none) + ) + +(defmethod print level ((obj level)) + "print a level." + + (format #t "#<~A ~A ~S @ #x~X>" + (-> obj type) + (-> obj status) + (-> obj name) + obj + ) + obj + ) + +;; relocate bsp-header + +(defmethod dummy-24 level ((obj level)) + (unless (or (not (-> obj bsp)) (= *kernel-boot-mode* 'debug-boot)) + (unless (null? (-> obj info packages)) + (load-package "common" global) + ) + ) + obj + ) + +(defmethod vis-clear level ((obj level)) + (countdown (v1-0 8) + (nop!) ;; the usual. + (set! (-> obj vis-info v1-0) #f) + ) + (dotimes (v1-3 128) + (set! (deref int128 (-> obj vis-bits) v1-3) (the-as int128 0)) + ) + (set! (-> obj all-visible?) 'loading) 0 - ) \ No newline at end of file + ) + + +(defmethod vis-load level ((obj level)) + (when (zero? (-> obj vis-info (-> obj vis-self-index) ramdisk)) + (let ((vis (-> obj other vis-info (-> obj other vis-self-index)))) + (when (and vis (nonzero? (-> vis ramdisk))) + (set! (-> vis flags) (logand #xffffffffbfffffff (-> vis flags))) ;; clear #x40000000 + (set! (-> vis ramdisk) 0) + 0 + ) + ) + (let ((visname (make-file-name (file-kind vis) (the-as string (-> obj nickname)) 0 #f)) + (cmd (the-as ramdisk-rpc-fill (add-element *ramdisk-rpc*))) + (s5-0 (+ *current-ramdisk-id* 1)) + ) + (set! *current-ramdisk-id* s5-0) + (set! (-> cmd filename) (string->sound-name visname)) + (set! (-> cmd ee-id) s5-0) + (call *ramdisk-rpc* (the-as uint 1) (the-as pointer 0) (the-as uint 0)) + (set! (-> obj vis-info (-> obj vis-self-index) ramdisk) s5-0) + ) + ) + (-> obj vis-info (-> obj vis-self-index) ramdisk) + ) + +(defun load-vis-info ((vis-name symbol) (old-vis-name symbol)) + "Load a new VIS file and dump the old one. The corresponding level must be active!" + + (dotimes (i (-> *level* length)) + (let ((lev (-> *level* level i))) + (when (= (-> lev status) 'active) + (when (= vis-name (-> lev nickname)) + (format 0 "Swapping in ~A VIS [dumping ~A]~%" vis-name old-vis-name) + (vis-load lev) + ) + ) + ) + ) + 0 + ) + +(defmethod dummy-25 level ((obj level)) + (unless (or (= (-> obj status) 'inactive) + (not (-> obj bsp)) + ) + (set! (-> obj all-visible?) 'loading) + (let ((s5-0 (-> obj bsp vis-info 0))) + (cond + ((and s5-0 (nonzero? s5-0) (valid? s5-0 level-vis-info #f #f 0)) + (set! (-> obj vis-info 0) s5-0) + (set! (-> s5-0 current-vis-string) (the-as uint -1)) + (set! (-> s5-0 from-bsp) (-> obj bsp)) + (set! (-> s5-0 vis-bits) (-> obj vis-bits)) + (set! (-> s5-0 flags) (logand #xffffffff3fffffff (-> s5-0 flags))) ;; clear #x80000000 and #x40000000 + (set! (-> s5-0 flags) (logior #x20000000 (-> s5-0 flags))) + (set! (-> s5-0 ramdisk) 0) + (set! (-> s5-0 string-block) (the-as uint #f)) + (set! *vis-boot* #t) + ) + (else + (set! (-> obj vis-info 0) #f) + ) + ) + ) + (dotimes (s5-1 6) + (let* ((s3-0 (+ s5-1 1)) + (s4-0 (-> obj bsp vis-info s3-0)) + ) + (cond + ((and s4-0 (nonzero? s4-0) (valid? s4-0 level-vis-info #f #f 0)) + (set! (-> obj vis-info s3-0) s4-0) + (set! (-> s4-0 current-vis-string) (the-as uint -1)) + (set! (-> s4-0 from-bsp) #f) + (set! (-> s4-0 vis-bits) (-> obj vis-bits)) + (set! (-> s4-0 flags) (logand #xffffffff1fffffff (-> s4-0 flags))) ;; clear #x80000000 and #x40000000 and #x20000000 + (set! *vis-boot* #t) + ) + (else + (set! (-> obj vis-info s3-0) #f) + ) + ) + ) + ) + ) + 0 + ) + +(defmethod level-get-for-use level-group ((obj level-group) (name symbol) (want-status symbol)) + "Get a level in a playable form, loading it if necessary." + + (local-vars (s5-1 level)) + ;; debug allocate levels if necessary + (alloc-levels! obj #f) + + (let* ((level-info (lookup-level-info name)) + (level-name (remap-level-name level-info)) + ) + (swhen (level-get obj level-name) + (level-status-set! bc want-status) + (return bc) + ) + (let ((a0-7 (level-get-most-disposable obj))) + (set! s5-1 (if a0-7 (level-status-set! a0-7 'inactive) + a0-7 + )) + ) + ;; THIS WAS BUGGED IN THE ORIGINAL GAME!! Probably due to a fault in the original GOAL compiler and because they had + ;; a local variable called "level", this branch here checks for the *TYPE* object called level instead of the + ;; variable. Since the type will never be equal to #f when this code runs, this failsafe never runs, and the game will + ;; proceed to corrupt the symbol table since it thinks #f is a level, which most definitely crashes the game + ;; very quickly. + ;; We are fixing it. + (when (not s5-1) ;;level) + (format 0 "ERROR: could not find a slot to load ~A into.~%" name) + (return (the-as level #f)) + ) + (set! (-> s5-1 info) level-info) + (set! (-> s5-1 name) name) + (set! (-> s5-1 load-name) level-name) + ) + (set! (-> s5-1 mood) (the mood-context (-> s5-1 info mood value))) + (set! (-> s5-1 mood-func) (the function (-> s5-1 info mood-func value))) + (set! (-> s5-1 display?) #f) + (set! (-> s5-1 force-all-visible?) #f) + (set! (-> s5-1 force-inside?) #f) + (level-status-set! s5-1 'loading) + (level-status-set! s5-1 want-status) + s5-1 + ) + +(defmethod level-status level-group ((obj level-group) (level-name symbol)) + "Get the status of an existing level." + + (let ((lev (level-get *level* level-name))) + (if lev + (-> lev status) + ) + ) + ) + +(defmethod level-status-set! level ((obj level) (want-status symbol)) + "Change the status of a level, performing any cleanup and prep work as necessary. + Only change loading statuses in order! + Returns the level." + + (case want-status + (('inactive) + (case (-> obj status) + ) + (unload! obj) + ) + (('loading) + (case (-> obj status) + (('inactive) + (load-begin obj) + ) + ) + ) + (('loading-bt) + (case (-> obj status) + (('loading) + (set! (-> obj status) want-status) + (load-continue obj) + ) + ) + ) + (('loading-done) + (case (-> obj status) + (('loading-bt) + (set! (-> obj status) want-status) + ) + ) + ) + (('loaded) + (case (-> obj status) + (('loading-done) + (login obj) + ) + (('alive 'active) + (deactivate obj) + ) + ) + ) + (('alive 'active) + (when *dproc* + (case (-> obj status) + (('loaded) + (activate obj) + (level-status-set! obj want-status) + ) + (('alive) + (when (and *dproc* (= want-status 'active)) + (remove-by-param1 *background-draw-engine* (-> obj bsp)) + (add-connection *background-draw-engine* *dproc* (the (function object object object object object) add-bsp-drawable) (-> obj bsp) obj #f) + (dotimes (v1-40 9) + (set! (-> obj closest-object v1-40) 0.0) + (set! (-> obj texture-mask v1-40) (the-as uint 0)) + ) + (set! (-> obj level-distance) 0.0) + (set! (-> obj status) 'active) + ) + ) + ) + ) + ) + ) + obj + ) + +(define *login-state* (new 'global 'login-state)) +(define *print-login* #t) + +(defmethod load-continue level ((obj level)) + "Continue loading a level from where we left off last time." + + ;; see if we are still linking some file + (when (-> obj linking) + ;; do some more linking + (when (nonzero? (link-resume)) + ;; done linking and object file! + (set! (-> obj linking) #f) + (case (-> obj status) + (('loading) + ;; load another object if we don't wanna copy anything + (if (not (-> *texture-relocate-later* memcpy)) + (dgo-load-continue (align64 (-> obj heap current))) + ) + ) + (('loading-bt) + ;; finished loading the background! + (level-status-set! obj 'loading-done) + (level-status-set! obj 'loaded) + ) + ) + ) + (return obj) + ) + ;; otherwise, copy stuff that needs copying + (when (-> *texture-relocate-later* memcpy) + ;; (relocate-later) TODO + (dgo-load-continue (align64 (-> obj heap current))) + (return obj) + ) + ;; otherwise, check status + (case (-> obj status) + (('loading) + ;; we are still loading + (let* ((last-obj #f) + (a0-15 (dgo-load-get-next (& last-obj)))) + (when a0-15 + ;; something has finished loading! + (cond + ((not last-obj) + ;; not the last object, so it's some non-background file. start linking + (cond + ((dgo-load-link (the-as dgo-header a0-15) (-> obj heap) *print-login* #f) + ;; linking finished (that was fast) + (if (not (-> *texture-relocate-later* memcpy)) + (dgo-load-continue (align64 (-> obj heap current))) + ) + ) + (else + ;; linking is not done, resume later. + (set! (-> obj linking) #t) + ) + ) + ) + (else + ;; the background is always the last object, so we're loading the background now + (set! (-> obj heap top) (-> obj heap top-base)) + (level-status-set! obj 'loading-bt) + ) + ) + ) + ) + ) + (('login) + ;; run level login + (level-update-after-load obj *login-state*) + ) + (('loading-bt) + ;; link the bt object + (let ((a0-26 (align64 (-> obj heap current)))) + (cond + ((dgo-load-link (the-as dgo-header a0-26) (-> obj heap) *print-login* #t) + (level-status-set! obj 'loading-done) + (level-status-set! obj 'loaded) + ) + (else + (set! (-> obj linking) #t) + ) + ) + ) + ) + ) + obj + ) + +(defmethod load-begin level ((obj level)) + "Start loading the level. Uses 2 megabyte heaps for loading each non-bt object." + + (set! loading-level (-> obj heap)) + (set! (-> *level* unknown-level-2) obj) + (set! (-> *level* unknown-level-1) #f) + (set! (-> obj nickname) #f) + (set! (-> obj bsp) #f) + (set! (-> obj entity) #f) + (set! (-> obj ambient) #f) + (set! (-> obj linking) #f) + (vis-clear obj) + (set! (-> obj status) 'loading) + (set! (-> *texture-pool* allocate-func) texture-page-level-allocate) + (if (= (-> obj load-name) (-> obj info visname)) + (format (clear *temp-string*) "~S" (-> obj info nickname)) + (format (clear *temp-string*) "~S" (-> obj name)) + ) + (set! (-> *temp-string* data 8) (the-as uint 0)) + (format *temp-string* ".DGO") + (set! (-> obj heap top) (-> obj heap top-base)) + (let ((s4-0 (kmalloc (-> obj heap) (* 2 1024 1024) (kmalloc-flags align-64 top) "dgo-level-buf-2")) + (s5-2 (kmalloc (-> obj heap) (* 2 1024 1024) (kmalloc-flags align-64 top) "dgo-level-buf-2")) + ) + (set! (-> obj code-memory-start) (-> obj heap current)) + (format 0 "-----------> begin load ~A [~S]~%" (-> obj load-name) *temp-string*) + (dgo-load-begin *temp-string* s5-2 s4-0 (align64 (-> obj heap current))) + ) + obj + ) + +(defmethod login level ((obj level)) + (set! (-> *texture-pool* allocate-func) texture-page-default-allocate) + (cond + ((-> obj bsp) + (set! (-> *level* unknown-level-1) (the-as level (-> obj bsp))) + (login-level-textures *texture-pool* obj (-> obj bsp unk-data-1-len) (the-as (pointer texture-id) (-> obj bsp unk-data-1))) + (let ((bsp (-> obj bsp))) + (when (nonzero? (-> bsp adgifs)) + (let ((adgifs (-> bsp adgifs))) + (dotimes (i (-> adgifs length)) + ;;(adgif-shader-login-no-remap (-> adgifs data i)) TODO texture.gc + ) + ) + ) + ) + (set! (-> *login-state* state) -1) + (set! (-> *login-state* pos) (the-as uint 0)) + (set! (-> *login-state* elts) (the-as uint 0)) + (set! (-> obj status) 'login) + ) + (else + (level-status-set! obj 'inactive) + (set! loading-level global) + (set! (-> *level* unknown-level-2) (-> *level* level-default)) + ) + ) + obj + ) + +(defun level-update-after-load ((loaded-level level) (level-login-state login-state)) + "Runs a bunch of logins on various things in a level" + + (local-vars + (current-timer int) + (initial-timer int) + ) + 0 + (let ((level-drawable-trees (-> loaded-level bsp drawable-trees))) + 0 + ;;(.mfc0 initial-timer Count) + (label cfg-1) + 0 + ;;(.mfc0 current-timer Count) + (let ((elapsed-timer (- current-timer initial-timer))) + (if (< 100000 elapsed-timer) ;; what is this measuring? + (return loaded-level) + ) + ) + ;; I don't know what this is doing + (let ((current-login-pos (the-as int (-> level-login-state pos)))) + (when (= (-> level-login-state state) -1) + (when (< (the-as int current-login-pos) (-> level-drawable-trees length)) + (let ((current-drawable (the-as drawable-tree (-> level-drawable-trees data (the-as uint current-login-pos))))) + (cond + ((= (-> (the-as drawable current-drawable) type) drawable-tree-tfrag) + (dotimes (idx-in-drawable (-> current-drawable length)) + (cond + ((= (-> current-drawable data idx-in-drawable type) drawable-inline-array-tfrag) + (set! (-> level-login-state elt (-> level-login-state elts)) (-> current-drawable data idx-in-drawable)) + (1+! (-> level-login-state elts)) + ) + (else + (dummy-9 (-> current-drawable data idx-in-drawable)) + ) + ) + ) + ) + (else + (cond + ((= (-> (the-as drawable current-drawable) type) drawable-tree-instance-tie) + (set! (-> level-login-state elt (-> level-login-state elts)) (the-as drawable current-drawable)) + (1+! (-> level-login-state elts)) + ) + (else + (dummy-9 (the-as drawable current-drawable)) + ) + ) + ) + ) + ) + (1+! (-> level-login-state elts)) + (goto cfg-1) + ) + (let ((v1-39 (- (the-as uint current-login-pos) (the-as uint (-> level-drawable-trees length))))) + (when (< (the-as int v1-39) (-> loaded-level art-group art-group-array length)) + (let ((s2-2 (-> loaded-level art-group art-group-array v1-39))) + (dummy-9 s2-2) + (if (dummy-12 s2-2) + (dummy-13 s2-2) + ) + ) + (1+! (-> level-login-state elts)) + (goto cfg-1) + ) + ) + (set! (-> level-login-state pos) (the-as uint 0)) + (set! (-> level-login-state state) 0) + (goto cfg-1) + ) + (when (< (-> level-login-state state) (the-as int (-> level-login-state elts))) + (let ((s1-1 (-> level-login-state elt (-> level-login-state state)))) + (cond + ((= (-> s1-1 type) drawable-inline-array-tfrag) + (cond + ((< (the-as int current-login-pos) (-> (the-as drawable-inline-array-tfrag s1-1) length)) + (dotimes (s0-0 200) + (when (< (the-as int current-login-pos) (-> (the-as drawable-inline-array-tfrag s1-1) length)) + (dummy-9 (-> (the-as drawable-inline-array-tfrag s1-1) data (the-as uint current-login-pos))) + (1+! current-login-pos) + ) + ) + (set! (-> level-login-state pos) (the-as uint current-login-pos)) + ) + (else + (set! (-> level-login-state pos) (the-as uint 0)) + (set! current-login-pos (+ (-> level-login-state state) 1)) + (set! (-> level-login-state state) current-login-pos) + ) + ) + ) + ((= (-> s1-1 type) drawable-tree-instance-tie) + (let ((s1-2 (-> (the-as drawable-tree-instance-tie s1-1) prototypes prototype-array-tie))) + (when (< (the-as int current-login-pos) (-> s1-2 length)) + (dotimes (s0-1 10) + (when (< (the-as int current-login-pos) (-> s1-2 length)) + (let ((sv-16 (-> s1-2 array-data (the-as uint current-login-pos)))) + (dotimes (sv-32 4) + (let ((a0-28 (-> sv-16 geometry sv-32))) + (if (nonzero? a0-28) + (dummy-9 a0-28) + ) + ) + ) + (1+! current-login-pos) + ) + ) + ) + (set! (-> level-login-state pos) (the-as uint current-login-pos)) + ) + (when (= (the-as uint current-login-pos) (-> s1-2 length)) + (dotimes (s2-3 (-> s1-2 length)) + (let ((s0-2 (-> s1-2 array-data s2-3 envmap-shader))) + (when (nonzero? s0-2) + ;;(adgif-shader-login-no-remap s0-2) TODO texture.gc + (set! (-> s0-2 tex1) (the-as uint 96)) + (set! (-> s0-2 clamp) (the-as uint 5)) + (set! (-> s0-2 alpha) (the-as uint 88)) + (set! (-> s0-2 prims 1) (the-as uint 6)) + (set! (-> s0-2 prims 3) (the-as uint 20)) + (set! (-> s0-2 prims 5) (the-as uint 52)) + (set! (-> s0-2 clamp-reg) (the-as uint 8)) + (set! (-> s0-2 prims 9) (the-as uint 66)) + ) + ) + ) + (set! (-> level-login-state pos) (the-as uint 0)) + (1+! (-> level-login-state state)) + ) + ) + ) + ) + ) + (goto cfg-1) + ) + (if (= (-> level-login-state state) (-> level-login-state elts)) + (begin + (let ((v1-115 (-> loaded-level bsp))) + (cond + ((or (zero? (-> v1-115 actors)) + (= (the-as uint current-login-pos) (-> v1-115 actors length)) + ) + (set! (-> level-login-state pos) (the-as uint 0)) + (1+! (-> level-login-state state)) + ) + (else + (let ((a0-36 (-> v1-115 actors data current-login-pos actor))) + (entity-nav-login a0-36) + ) + (1+! (-> level-login-state pos)) + ) + ) + ) + (goto cfg-1) + ) + ) + (when (zero? (the-as uint current-login-pos)) + (set! (-> level-login-state pos) (the-as uint 1)) + (return loaded-level) + ) + ) + ) + (set! (-> loaded-level nickname) (-> loaded-level bsp nickname)) + (if (nonzero? (-> loaded-level bsp nodes)) + (set! *time-of-day-effects* #t) + (set! *time-of-day-effects* #f) + ) + (let ((f0-0 (-> loaded-level bsp unk-data-4)) + (f1-0 (-> loaded-level bsp unk-data-5)) + ) + (when (and (= f0-0 0.0) (= f1-0 0.0)) + (set! f0-0 (meters 30)) + (set! f1-0 (meters 70)) + ) + (set! (-> *subdivide-settings* close (-> loaded-level index)) f0-0) + (set! (-> *subdivide-settings* far (-> loaded-level index)) f1-0) + (set! (-> *subdivide-settings* close 3) f0-0) + (set! (-> *subdivide-settings* far 3) f1-0) + ) + (dummy-25 loaded-level) + (dummy-24 loaded-level) + (set! (-> loaded-level status) 'loaded) + (set! loading-level global) + (set! (-> *level* unknown-level-2) (-> *level* level-default)) + (set! (-> *level* unknown-level-1) #f) + 0 + ;;(.mfc0 v1-154 Count) + ;;(- v1-154 initial-timer) + + loaded-level + ) + +(defmethod activate level ((obj level)) + "Activate a level! It must be loaded." + + (case (-> obj status) + (('loaded) + (protect (loading-level + (-> *level* unknown-level-2) + (-> *level* unknown-level-1) + ) + (set! loading-level (-> obj heap)) + (set! (-> *level* unknown-level-1) (the-as level (-> obj bsp))) + (set! (-> *level* unknown-level-2) obj) + (dummy-18 (-> obj bsp)) + (set! (-> obj status) 'alive) + (dummy-15 *game-info*) + (send-event *camera* 'level-activate (-> obj name)) + (send-event *target* 'level-activate (-> obj name)) + ) + ) + ) + obj + ) + +(defmethod deactivate level ((obj level)) + "Kill the level. This won't remove it from memory." + + (case (-> obj status) + (('active 'alive) + (format 0 "----------- kill ~A (status ~A)~%" obj (-> obj status)) + (dummy-14 *game-info*) + (send-event *camera* 'level-deactivate (-> obj name)) + (send-event *target* 'level-deactivate (-> obj name)) + (remove-by-param1 *background-draw-engine* (-> obj bsp)) + (dummy-19 (-> obj bsp)) + ;; (kill-all-particles-in-level) TODO + (set! (-> obj inside-sphere?) #f) + (set! (-> obj inside-boxes?) #f) + (set! (-> obj meta-inside?) #f) + (set! (-> obj force-inside?) #f) + (set! (-> obj status) 'loaded) + (set! (-> obj all-visible?) 'loading) + ;; clear vis buffers + (dotimes (v1-19 128) + (set! (deref int128 (-> obj vis-bits) v1-19) (the-as int128 0)) + ) + (let ((v1-22 8)) + (while (nonzero? v1-22) + (+! v1-22 -1) + (let ((a0-14 (-> obj vis-info v1-22))) + (if a0-14 + (set! (-> a0-14 current-vis-string) (the-as uint -1)) + ) + ) + ) + ) + ) + ) + (if (= (-> *level* unknown-level-1) (-> obj bsp)) + (set! (-> *level* unknown-level-1) #f) + ) + obj + ) + +(defmethod unload! level ((obj level)) + "Unloads the level. This does not free the heap. The level will be made inactive and ready to be loaded some other time." + + (deactivate obj) + (when (!= (-> obj status) 'inactive) + + ;; no idea + (when (or (= (-> obj status) 'loaded) + (= (-> obj status) 'alive) + (= (-> obj status) 'active) + (= (-> obj status) 'login) + ) + (dotimes (s5-0 (-> obj art-group art-group-array length)) + (let ((s4-0 (-> obj art-group art-group-array s5-0))) + (if (dummy-12 s4-0) + (dummy-14 s4-0) + ) + ) + ) + ) + + ;; turn some things off + (set! (-> obj bsp) #f) + (set! (-> obj entity) #f) + (set! (-> obj ambient) #f) + (set! (-> obj status) 'inactive) + (set! (-> obj art-group string-array length) 0) + (set! (-> obj art-group art-group-array length) 0) + + ;; unload texture pages? + (let ((s5-1 (-> obj loaded-texture-page-count))) + (while (nonzero? s5-1) + (+! s5-1 -1) + (dotimes (v1-27 32) + (when (= (-> obj loaded-texture-page s5-1) (-> *texture-pool* common-page v1-27)) + (set! (-> *texture-pool* common-page v1-27) (the-as texture-page 0)) + ) + ) + (dummy-20 *texture-pool* (-> obj loaded-texture-page s5-1)) + ) + ) + + (set! (-> obj loaded-texture-page-count) 0) + (dummy-9 *texture-page-dir* (-> obj heap)) + ;; (unlink-part-group-by-heap (-> obj heap)) TODO + ; (dotimes (s5-2 2) + ; (let ((v1-41 (-> *art-control* buffer s5-2 pending-load-file))) + ; (if (and (>= (the-as int v1-41) (the-as int (-> obj heap base))) + ; (< (the-as int v1-41) (the-as int (-> obj heap top-base))) + ; ) + ; (dummy-9 (-> *art-control* buffer s5-2) #f -1 #f 100000000.0) + ; ) + ; ) + ; ) + (let* ((s5-3 (-> obj info packages)) + (a0-29 (car s5-3)) + ) + (while (not (null? s5-3)) + (case (rtype-of a0-29) + ((symbol) + (unload (symbol->string (the-as symbol a0-29))) + ) + ((string) + (unload (the-as string a0-29)) + ) + ) + (set! s5-3 (cdr s5-3)) + (set! a0-29 (car s5-3)) + ) + ) + (vis-clear obj) + (let ((v1-64 (-> obj heap))) + (set! (-> v1-64 current) (-> v1-64 base)) + ) + (set! (-> obj code-memory-start) (the pointer 0)) + (set! (-> obj code-memory-end) (the pointer 0)) + (when (= (-> *level* unknown-level-2) obj) + (set! loading-level global) + (set! (-> *level* unknown-level-2) (-> *level* level-default)) + (set! (-> *level* unknown-level-1) #f) + ) + ) + obj + ) + +;; method 10 level +;; method 15 level +;; method 27 level + +(defmethod mem-usage level ((obj level) (arg0 memory-usage-block) (arg1 int)) + "Get the memory usage for a level." + + (when (= (-> obj status) 'active) + (set! (-> arg0 length) (max 65 (-> arg0 length))) + (set! (-> arg0 data 64 name) "entity-links") + (set! + (-> arg0 data 64 count) + (+ (-> arg0 data 64 count) (-> obj entity length)) + ) + (let ((v1-8 (asize-of (-> obj entity)))) + (set! (-> arg0 data 64 used) (+ (-> arg0 data 64 used) v1-8)) + (set! + (-> arg0 data 64 total) + (+ (-> arg0 data 64 total) (logand -16 (+ v1-8 15))) + ) + ) + (set! (-> arg0 length) (max 65 (-> arg0 length))) + (set! (-> arg0 data 64 name) "ambient-links") + (set! + (-> arg0 data 64 count) + (+ (-> arg0 data 64 count) (-> obj ambient length)) + ) + (let ((v1-18 (asize-of (-> obj ambient)))) + (set! (-> arg0 data 64 used) (+ (-> arg0 data 64 used) v1-18)) + (set! + (-> arg0 data 64 total) + (+ (-> arg0 data 64 total) (logand -16 (+ v1-18 15))) + ) + ) + (mem-usage (-> obj art-group) arg0 arg1) + (set! (-> arg0 length) (max 64 (-> arg0 length))) + (set! (-> arg0 data 63 name) "level-code") + (set! (-> arg0 data 63 count) (+ (-> arg0 data 63 count) 1)) + (let + ((v1-30 + (&- (-> obj code-memory-end) (the-as uint (-> obj code-memory-start))) + ) + ) + (set! (-> arg0 data 63 used) (+ (-> arg0 data 63 used) v1-30)) + (set! + (-> arg0 data 63 total) + (+ (-> arg0 data 63 total) (logand -16 (+ v1-30 15))) + ) + ) + (countdown (s3-0 (-> obj loaded-texture-page-count)) + (mem-usage (-> obj loaded-texture-page s3-0) arg0 arg1) + ) + (countdown (s3-1 8) + (let ((s2-0 (-> obj vis-info s3-1))) + (when s2-0 + (cond + ((zero? s3-1) + (set! (-> arg0 length) (max 60 (-> arg0 length))) + (set! (-> arg0 data 59 name) "bsp-leaf-vis-self") + (set! (-> arg0 data 59 count) (+ (-> arg0 data 59 count) 1)) + (let ((v1-50 (asize-of s2-0))) + (set! (-> arg0 data 59 used) (+ (-> arg0 data 59 used) v1-50)) + (set! + (-> arg0 data 59 total) + (+ (-> arg0 data 59 total) (logand -16 (+ v1-50 15))) + ) + ) + ) + (else + (set! (-> arg0 length) (max 61 (-> arg0 length))) + (set! (-> arg0 data 60 name) "bsp-leaf-vis-adj") + (set! (-> arg0 data 60 count) (+ (-> arg0 data 60 count) 1)) + (let + ((v1-61 (+ (asize-of s2-0) (the-as int (-> s2-0 allocated-length))))) + (set! (-> arg0 data 60 used) (+ (-> arg0 data 60 used) v1-61)) + (set! + (-> arg0 data 60 total) + (+ (-> arg0 data 60 total) (logand -16 (+ v1-61 15))) + ) + ) + ) + ) + ) + ) + ) + (mem-usage (-> obj bsp) arg0 arg1) + ) + obj + ) + +(defmethod alloc-levels! level-group ((obj level-group) (compact-level-heaps symbol)) + "Allocate the level heaps and load the common packages for levels." + + ;; only do stuff if levels are not allocated + (when (zero? (-> *level* level0 heap base)) + ;; GAME.CGO is made up of ART.CGO and COMMON.CGO + (when (nmember "game" *kernel-packages*) + (set! *kernel-packages* (cons "art" *kernel-packages*)) + (set! *kernel-packages* (cons "common" *kernel-packages*)) + ) + (load-package "art" global) ;; load ART + (if compact-level-heaps + (load-package "common" global) ;; load COMMON unless we're debugging levels + ) + ;; allocate level heaps. turn on compact-level-heaps for use in 32MB systems + (let ((level-heap-size (if compact-level-heaps (* 10416 1024) + (* 25600 1024))) + ) + (dotimes (lev LEVEL_COUNT) + (let ((level-heap (-> obj level lev heap))) + (set! (-> level-heap base) (malloc 'global level-heap-size)) + (set! (-> level-heap current) (-> level-heap base)) + (set! (-> level-heap top-base) (&+ (-> level-heap base) level-heap-size)) + (set! (-> level-heap top) (-> level-heap top-base)) + ) + ) + ) + ) + 0 + ) + +(defmethod level-get-with-status level-group ((obj level-group) (status symbol)) + (dotimes (i (-> obj length)) + (if (= (-> obj level i status) status) + (return (-> obj level i)) + ) + ) + (the-as level #f) + ) + +(defmethod level-get-most-disposable level-group ((obj level-group)) + "Get a level that's least likely to be in use right now. #f = all levels in use." + + ;; check inactive levels first + (dotimes (v1-0 (-> obj length)) + (case (-> obj level v1-0 status) + (('inactive) + (return (-> obj level v1-0)) + ) + ) + ) + + ;; check for any loading levels + (dotimes (v1-6 (-> obj length)) + (case (-> obj level v1-6 status) + (('loading 'loading-bt) + (return (-> obj level v1-6)) + ) + ) + ) + + ;; check for loaded, but not active, levels. + (dotimes (v1-12 (-> obj length)) + (let ((a1-18 (-> obj level v1-12 status))) + (if (= a1-18 'loaded) + (return (-> obj level v1-12)) + ) + ) + ) + + ;; check active levels. pick one we're not in bounds of. + (let ((v0-0 (the-as level #f))) + (dotimes (v1-18 (-> obj length)) + (case (-> obj level v1-18 status) + (('active) + (if (and (not (-> obj level v1-18 inside-boxes?)) + (or (not v0-0) + (< (-> obj level v1-18 info priority) (-> v0-0 info priority)) + ) + ) + (set! v0-0 (-> obj level v1-18)) + ) + ) + ) + ) + v0-0 + ) + ) + +(defmethod level-get level-group ((obj level-group) (name symbol)) + "Return the level data using its name, if it is available. Returns #f if none are found." + + (dotimes (lev (-> obj length)) + (if (and (!= (-> obj level lev status) 'inactive) + (or (= (-> obj level lev name) name) + (= (-> obj level lev load-name) name) + ) + ) + (return (-> obj level lev)) + ) + ) + (the level #f) + ) + +(defmethod art-group-get-by-name level-group ((obj level-group) (arg0 string)) + (countdown (i 3) + (let ((lev (-> obj level i))) + (countdown (ii (-> lev art-group art-group-array length)) + (if (name= (-> lev art-group art-group-array ii name) arg0) + (return (-> lev art-group art-group-array ii)) + ) + ) + ) + ) + (the-as art-group #f) + ) + + +(defmethod activate-levels! level-group ((obj level-group)) + "Try to activate all levels." + + (dotimes (i (-> obj length)) + (level-status-set! (-> obj level i) 'active) + ) + 0 + ) + +(defmethod level-get-target-inside level-group ((obj level-group)) + "Get the level target is in, or one it is close to. + The distance checks do not work." + + (let ((target-trans (target-pos 0))) + (let ((current-level (-> *game-info* current-continue level))) + (dotimes (i (-> obj length)) + (let ((ilev (-> obj level i))) + (when (= (-> ilev status) 'active) + (if (= (-> ilev name) current-level) + (return ilev) + ))))) + (let ((level-ret (the-as level #f))) + (let ((min-distance-to-level 0.0)) ;; uh-huh + (dotimes (i (-> obj length)) + (let ((ilev (-> obj level i))) + (when (= (-> ilev status) 'active) + (let ((distance-to-level (vector-vector-distance (-> ilev bsp bsphere) target-trans))) + (if (and (-> ilev inside-boxes?) (or (not level-ret) (< distance-to-level min-distance-to-level))) + (set! level-ret ilev) + )))))) + (if level-ret + (return level-ret) + ) + ) + ) + (dotimes (i (-> obj length)) + (let ((ilev (-> obj level i))) + (when (= (-> ilev status) 'active) + (if (-> ilev meta-inside?) + (return ilev) + )))) + (let ((level-ret (the-as level #f))) + (let ((min-distance-to-level 0.0)) ;; why? + (dotimes (i (-> obj length)) + (let ((ilev (-> obj level i))) + (when (= (-> ilev status) 'active) + (if (or (not level-ret) (< (-> ilev level-distance) min-distance-to-level)) + (set! level-ret ilev) + ))))) + level-ret + ) + ) + +(defmethod load-commands-set! level-group ((obj level-group) (load-commands pair)) + (set! (-> obj load-commands) load-commands) + load-commands + ) + +(defmethod mem-usage level-group ((obj level-group) (arg0 memory-usage-block) (arg1 int)) + "Get the memory usage data for a level-group" + + ;; get memory usage of each level + (dotimes (i (-> obj length)) + (mem-usage (-> obj level i) arg0 arg1) + ) + obj + ) + +(defun bg ((level-name symbol)) + (set! *cheat-mode* (if *debug-segment* + 'debug + #f + ) + ) + (let ((v1-2 (lookup-level-info level-name))) + (cond + ((= (-> v1-2 visname) level-name) + (set! (-> *level* vis?) #t) + (set! level-name (-> v1-2 name)) + ) + (else + (set! (-> *level* vis?) #f) + (set! (-> *kernel-context* low-memory-message) #f) + ) + ) + (let* ((s5-0 (-> v1-2 run-packages)) + (a0-8 (car s5-0)) + ) + (while (not (null? s5-0)) + (let ((v1-4 (rtype-of a0-8))) + (cond + ((= v1-4 symbol) + (load-package (symbol->string (the-as symbol a0-8)) global) + ) + ((= v1-4 string) + (load-package (the-as string a0-8) global) + ) + ) + ) + (set! s5-0 (cdr s5-0)) + (set! a0-8 (car s5-0)) + ) + ) + ) + (let ((gp-1 (level-get-for-use *level* level-name 'active))) + (while (and gp-1 (or (= (-> gp-1 status) 'loading) + (= (-> gp-1 status) 'loading-bt) + (= (-> gp-1 status) 'login) + ) + (not *dproc*) + ) + (load-continue gp-1) + ) + (vis-load gp-1) + (set! (-> *load-state* vis-nick) (if (-> *level* vis?) + (-> gp-1 nickname) + #f + )) + (set! (-> *load-state* want 0 name) (-> gp-1 name)) + (set! (-> *load-state* want 0 display?) 'display) + (set! (-> *load-state* want 0 force-vis?) #f) + (set! (-> *load-state* want 0 force-inside?) #f) + (set! (-> *load-state* want 1 name) #f) + (set! (-> *load-state* want 1 display?) #f) + (set! (-> *load-state* want 1 force-inside?) #f) + (if (-> gp-1 info continues) + (dummy-19 *game-info* (the-as continue-point (car (-> gp-1 info continues)))) + ) + ) + (activate-levels! *level*) + (set! *print-login* #f) + 0 + ) + +(defun play ((use-vis symbol) (arg1 symbol)) + "The entry point to the actual game! This allocates the level heaps, loads some data, sets some default parameters and sets the startup level." + + ;; temp + (format #t "(play ~A ~A) has been called!~%" use-vis arg1) + (format 0 "(play ~A ~A) has been called!~%" use-vis arg1) + (kernel-shutdown) + + (let ((startup-level (case *kernel-boot-message* + (('play) + (if *debug-segment* + 'village1 + 'title + ) + ) + (else + 'demo + ) + ) + )) + (stop 'play) + (set! (-> *level* vis?) use-vis) + (set! (-> *level* want-level) #f) + (set! (-> *level* border?) #t) + (set! (-> *setting-control* default border-mode) #t) + (set! (-> *level* play?) #t) + (alloc-levels! *level* #t) + (set! *display-profile* #f) + (set! *cheat-mode* (if *debug-segment* + 'debug + #f + )) + (set! *time-of-day-fast* #f) + (load-commands-set! *level* '()) + ; (when *time-of-day-proc* + ; (set! (-> *time-of-day-proc* 0 time-ratio) (seconds 1.0)) + ; (set! (-> *time-of-day-proc* 0 hour) 7) ;; 7AM waking up in the morning + ; ) + (set-blackout-frames 6) + (unless *dproc* + (reset! *load-state*) + (let ((s4-1 (level-get-for-use *level* startup-level 'active))) + (load-state-want-levels startup-level #f) + (load-state-want-display-level startup-level 'display) + (load-state-want-vis (-> (lookup-level-info startup-level) nickname)) + (while (and s4-1 (or (= (-> s4-1 status) 'loading) + (= (-> s4-1 status) 'loading-bt) + (= (-> s4-1 status) 'login))) + (set-blackout-frames 6) + (load-continue s4-1) + ) + ) + ) + (set! *print-login* #f) + (level-status-set! (level-get *level* startup-level) 'active) + ) + (on #t) + (when arg1 + (dummy-9 *game-info* 'game #f (the-as string #f)) + ) + 0 + ) + +(defun update-sound-banks () + (if (nonzero? (rpc-busy? RPC-SOUND-LOADER)) + (return 0) + ) + (let ((gp-0 #f) + (s5-0 #f) + ) + (dotimes (s4-0 (-> *level* length)) + (let ((v1-5 (-> *level* level s4-0))) + (when (= (-> v1-5 status) 'active) + (let* ((s3-0 (-> v1-5 info sound-banks)) + (t0-0 (the-as symbol (car s3-0))) + ) + (while (not (null? s3-0)) + (cond + ((or (= gp-0 t0-0) (= s5-0 t0-0) (-> *setting-control* current movie)) + ) + ((not gp-0) + (set! gp-0 t0-0) + ) + ((not s5-0) + (set! s5-0 t0-0) + ) + (else + (format + 0 + "ERROR: Soundbanks ~A, ~A and ~A all required~%" + gp-0 + s5-0 + t0-0 + ) + ) + ) + (set! s3-0 (cdr s3-0)) + (set! t0-0 (the-as symbol (car s3-0))) + ) + ) + ) + ) + ) + (when (and gp-0 (!= gp-0 *sound-bank-1*) (!= gp-0 *sound-bank-2*)) + (if (not *sound-bank-1*) + (return (begin + (format 0 "Load soundbank ~A~%" gp-0) + (sound-bank-load (string->sound-name (symbol->string gp-0))) + (set! *sound-bank-1* gp-0) + 0 + ) + ) + ) + (if (not *sound-bank-2*) + (return (begin + (format 0 "Load soundbank ~A~%" gp-0) + (sound-bank-load (string->sound-name (symbol->string gp-0))) + (set! *sound-bank-2* gp-0) + 0 + ) + ) + ) + (if (!= *sound-bank-1* s5-0) + (return (begin + (format 0 "Unload soundbank ~A~%" *sound-bank-1*) + (sound-bank-unload + (string->sound-name (symbol->string *sound-bank-1*)) + ) + (set! *sound-bank-1* #f) + 0 + ) + ) + ) + (if (!= *sound-bank-2* s5-0) + (return (begin + (format 0 "Unload soundbank ~A~%" *sound-bank-2*) + (sound-bank-unload + (string->sound-name (symbol->string *sound-bank-2*)) + ) + (set! *sound-bank-2* #f) + 0 + ) + ) + ) + ) + (when (and s5-0 (!= s5-0 *sound-bank-1*) (!= s5-0 *sound-bank-2*)) + (if (not *sound-bank-1*) + (return (begin + (format 0 "Load soundbank ~A~%" s5-0) + (sound-bank-load (string->sound-name (symbol->string s5-0))) + (set! *sound-bank-1* s5-0) + 0 + ) + ) + ) + (if (not *sound-bank-2*) + (return (begin + (format 0 "Load soundbank ~A~%" s5-0) + (sound-bank-load (string->sound-name (symbol->string s5-0))) + (set! *sound-bank-2* s5-0) + 0 + ) + ) + ) + (if (!= *sound-bank-1* gp-0) + (return (begin + (format 0 "Unload soundbank ~A~%" *sound-bank-1*) + (sound-bank-unload + (string->sound-name (symbol->string *sound-bank-1*)) + ) + (set! *sound-bank-1* #f) + 0 + ) + ) + ) + (if (!= *sound-bank-2* gp-0) + (return (begin + (format 0 "Unload soundbank ~A~%" *sound-bank-2*) + (sound-bank-unload + (string->sound-name (symbol->string *sound-bank-2*)) + ) + (set! *sound-bank-2* #f) + 0 + ) + ) + ) + ) + ) + 0 + ) + +(defmethod update! load-state ((obj load-state)) + "Updates load requests." + + (update-sound-banks) + + (let ((v1-0 #f)) + (dotimes (s5-0 2) + (let ((s4-0 (-> *level* level s5-0))) + (when (!= (-> s4-0 status) 'inactive) + (let ((a0-6 #f)) + (dotimes (a1-2 2) + (if (= (-> s4-0 name) (-> obj want a1-2 name)) + (set! a0-6 #t) + ) + ) + (when (not a0-6) + (format 0 "Discarding level ~A~%" (-> s4-0 name)) + (level-status-set! s4-0 'inactive) + (set! v1-0 #t) + ) + ) + ) + ) + ) + (let ((s5-1 #f)) + (if (and (= (-> *level* level0 status) 'inactive) + (= (-> *level* level1 status) 'inactive) + ) + (set! s5-1 #t) + ) + (if v1-0 + (return 0) + ) + (let ((a0-20 #f) + (v1-5 #f) + ) + (when (-> obj want 0 name) + (set! a0-20 #t) + (dotimes (a1-12 3) + (let ((a2-9 (-> *level* level a1-12))) + (if (and (!= (-> a2-9 status) 'inactive) + (= (-> a2-9 name) (-> obj want 0 name)) + ) + (set! a0-20 #f) + ) + ) + ) + ) + (when (-> obj want 1 name) + (set! v1-5 #t) + (dotimes (a1-17 3) + (let ((a2-17 (-> *level* level a1-17))) + (if (and (!= (-> a2-17 status) 'inactive) + (= (-> a2-17 name) (-> obj want 1 name)) + ) + (set! v1-5 #f) + ) + ) + ) + ) + (let ((s4-1 -1)) + (cond + ((and a0-20 v1-5) + (set! s4-1 0) + (if (and (-> obj want 1 display?) + (not (-> obj want 0 display?)) + ) + (set! s4-1 1) + ) + ) + (a0-20 + (set! s4-1 0) + ) + (v1-5 + (set! s4-1 1) + ) + ) + (when (!= s4-1 -1) + (when (or s5-1 (not (check-busy *load-dgo-rpc*))) + (format 0 "Adding level ~A~%" (-> obj want s4-1 name)) + (let ((s3-0 (level-get-for-use *level* (the-as symbol (-> obj want s4-1 name)) 'loaded))) + (when (and s5-1 (-> obj want s4-1 display?)) + (format 0 "Waiting for level to load~%") + (while (or (= (-> s3-0 status) 'loading) + (= (-> s3-0 status) 'loading-bt) + (= (-> s3-0 status) 'login) + ) + (load-continue s3-0) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (dotimes (s5-2 2) + (when (-> obj want s5-2 name) + (dotimes (s4-2 3) + (let ((s3-1 (-> *level* level s4-2))) + (when (!= (-> s3-1 status) 'inactive) + (when (= (-> s3-1 name) (-> obj want s5-2 name)) + (when (!= (-> s3-1 display?) (-> obj want s5-2 display?)) + (cond + ((not (-> s3-1 display?)) + (cond + ((or (= (-> s3-1 status) 'loaded) (= (-> s3-1 status) 'active)) + (format 0 "Displaying level ~A [~A]~%" (-> obj want s5-2 name) (-> obj want s5-2 display?)) + (level-get-for-use *level* (-> s3-1 info name) 'active) + (set! (-> s3-1 display?) (-> obj want s5-2 display?)) + ) + (else + (when (and (-> s3-1 info wait-for-load) + (!= (-> obj want s5-2 display?) 'display-no-wait) + ) + (send-event *target* 'loading) + ) + (if (= *cheat-mode* 'debug) + (format *stdcon* "display on for ~A but level is loading~%" (-> obj want s5-2 name)) + ) + ) + ) + ) + (else + (cond + ((not (-> obj want s5-2 display?)) + (set! (-> s3-1 display?) #f) + (format 0 "Turning level ~A off~%" (-> s3-1 name)) + (deactivate s3-1) + ) + (else + (format 0 "Setting level ~A display command to ~A~%" (-> obj want s5-2 name) (-> obj want s5-2 display?)) + (set! (-> s3-1 display?) (-> obj want s5-2 display?)) + ) + ) + ) + ) + ) + (when (!= (-> s3-1 force-all-visible?) (-> obj want s5-2 force-vis?)) + (set! (-> s3-1 force-all-visible?) (-> obj want s5-2 force-vis?)) + (format 0 "Setting force-all-visible?[~A] to ~A~%" (-> obj want s5-2 name) (-> obj want s5-2 force-vis?)) + ) + (when (!= (-> s3-1 force-inside?) (-> obj want s5-2 force-inside?)) + (set! (-> s3-1 force-inside?) (-> obj want s5-2 force-inside?)) + (format 0 "Setting force-inside?[~A] to ~A~%" (-> obj want s5-2 name) (-> obj want s5-2 force-inside?)) + ) + ) + ) + ) + ) + ) + ) + (let ((s5-3 #f)) + (dotimes (v1-121 (-> *level* length)) + (let ((a0-55 (-> *level* level v1-121))) + (when (= (-> a0-55 status) 'active) + (if (nonzero? (-> a0-55 vis-info (-> a0-55 vis-self-index) ramdisk)) + (set! s5-3 (-> a0-55 nickname)) + ) + ) + ) + ) + (when (and (!= s5-3 (-> obj vis-nick)) (-> *level* vis?)) + (when (-> obj vis-nick) + (dotimes (s4-3 (-> *level* length)) + (let ((v1-133 (-> *level* level s4-3))) + (when (= (-> v1-133 status) 'active) + (if (and (= (-> v1-133 nickname) (-> obj vis-nick)) + (-> v1-133 inside-boxes?) + ) + (load-vis-info (-> obj vis-nick) s5-3) + ) + ) + ) + ) + ) + ) + ) + 0 + ) + +;; method 16 level-group (debug text stuff) + +(defun-debug show-level ((level-name symbol)) + (set! (-> *setting-control* default border-mode) #t) + (load-state-want-levels (-> (level-get-target-inside *level*) name) level-name) + (load-state-want-display-level level-name 'display) + 0 + ) + +;; init art buffers and engines +(when (zero? (-> *level* level0 art-group)) + (let ((lev-group *level*)) + (set! (-> lev-group vis?) #f) + (set! (-> lev-group unknown-level-2) (-> lev-group level-default)) + (set! (-> lev-group level0 art-group) (new 'global 'load-dir-art-group 50 (-> lev-group level0))) + (set! (-> lev-group level0 foreground-draw-engine 0) (new 'global 'engine 'draw 280)) + (set! (-> lev-group level0 foreground-draw-engine 1) (new 'global 'engine 'draw 280)) + (set! (-> lev-group level0 foreground-draw-engine 2) (new 'global 'engine 'draw 16)) + (set! (-> lev-group level1 art-group) (new 'global 'load-dir-art-group 50 (-> lev-group level1))) + (set! (-> lev-group level1 foreground-draw-engine 0) (new 'global 'engine 'draw 280)) + (set! (-> lev-group level1 foreground-draw-engine 1) (new 'global 'engine 'draw 280)) + (set! (-> lev-group level1 foreground-draw-engine 2) (new 'global 'engine 'draw 16)) + (set! (-> lev-group level-default art-group) (new 'global 'load-dir-art-group 50 (-> lev-group level1))) + (set! (-> lev-group level-default foreground-draw-engine 0) (new 'global 'engine 'draw 280)) + (set! (-> lev-group level-default foreground-draw-engine 1) (new 'global 'engine 'draw 10)) + (set! (-> lev-group level0 other) (-> lev-group level1)) + (set! (-> lev-group level1 other) (-> lev-group level0)) + (set! (-> lev-group level-default other) #f) + (dotimes (i 2) + (let ((lev (-> lev-group level i))) + (set! (-> lev vis-bits) (malloc 'global 2048)) + (vis-clear lev) + ) + ) + (dotimes (i 3) + (let ((lev (-> lev-group level i))) + (set! (-> lev linking) #f) + (dotimes (ii 3) + (set! (-> lev foreground-sink-group ii level) lev) + ) + ) + ) + ) + ) + + + + diff --git a/goal_src/engine/level/load-boundary-h.gc b/goal_src/engine/level/load-boundary-h.gc index d8c952cd1..732a4c6e4 100644 --- a/goal_src/engine/level/load-boundary-h.gc +++ b/goal_src/engine/level/load-boundary-h.gc @@ -5,3 +5,5 @@ ;; name in dgo: load-boundary-h ;; dgos: GAME, ENGINE + +(define-extern *load-state* load-state) diff --git a/goal_src/engine/level/load-boundary.gc b/goal_src/engine/level/load-boundary.gc index e1d3e6de5..d9442e57e 100644 --- a/goal_src/engine/level/load-boundary.gc +++ b/goal_src/engine/level/load-boundary.gc @@ -7,7 +7,6 @@ (defmethod reset! load-state ((obj load-state)) - (local-vars (v1-1 int)) (set! (-> obj want 0 name) #f) (set! (-> obj want 0 display?) #f) (set! (-> obj want 0 force-vis?) #f) @@ -17,11 +16,100 @@ (set! (-> obj want 1 force-vis?) #f) (set! (-> obj want 1 force-inside?) #f) (set! (-> obj command-list) '()) - (set! v1-1 0) - (while (< v1-1 256) + (dotimes (v1-1 256) (set! (-> obj object-name v1-1) #f) - (set! (-> obj object-status v1-1) (the basic 0)) - (+! v1-1 1) + (set! (-> obj object-status v1-1) (the-as basic 0)) ) obj ) + +(defmethod want-levels load-state ((obj load-state) (arg0 symbol) (arg1 symbol)) + (dotimes (v1-0 LEVEL_COUNT) + (cond + ((= (-> obj want v1-0 name) arg0) + (set! arg0 #f) + ) + ((= (-> obj want v1-0 name) arg1) + (set! arg1 #f) + ) + (else + (set! (-> obj want v1-0 name) #f) + ) + ) + ) + (when arg0 + (dotimes (v1-4 LEVEL_COUNT) + (when (not (-> obj want v1-4 name)) + (set! (-> obj want v1-4 name) arg0) + (set! (-> obj want v1-4 display?) #f) + (set! (-> obj want v1-4 force-vis?) #f) + (set! (-> obj want v1-4 force-inside?) #f) + (set! v1-4 LEVEL_COUNT) + ) + ) + ) + (when arg1 + (dotimes (v1-10 LEVEL_COUNT) + (when (not (-> obj want v1-10 name)) + (set! (-> obj want v1-10 name) arg1) + (set! (-> obj want v1-10 display?) #f) + (set! (-> obj want v1-10 force-vis?) #f) + (set! (-> obj want v1-10 force-inside?) #f) + (set! v1-10 LEVEL_COUNT) + ) + ) + ) + 0 + ) + +(defmethod want-display-level load-state ((obj load-state) (arg0 symbol) (arg1 symbol)) + (dotimes (v1-0 LEVEL_COUNT) + (when (= (-> obj want v1-0 name) arg0) + (set! (-> obj want v1-0 display?) arg1) + (return 0) + ) + ) + (if arg1 + (format 0 "ERROR: can't display ~A because it isn't loaded~%" arg0) + ) + 0 + ) + +(defmethod want-vis load-state ((obj load-state) (arg0 symbol)) + (set! (-> obj vis-nick) arg0) + 0 + ) + +(defmethod want-force-vis load-state ((obj load-state) (arg0 symbol) (arg1 symbol)) + (dotimes (v1-0 LEVEL_COUNT) + (if (= (-> obj want v1-0 name) arg0) + (set! (-> obj want v1-0 force-vis?) arg1) + (return 0) + ) + ) + (format 0 "ERROR: can't force vis on ~A because it isn't loaded~%" arg0) + 0 + ) + +(defun load-state-want-levels ((arg0 symbol) (arg1 symbol)) + (want-levels *load-state* arg0 arg1) + ) + +(defun load-state-want-display-level ((arg0 symbol) (arg1 symbol)) + (want-display-level *load-state* arg0 arg1) + ) + +(defun load-state-want-vis ((arg0 symbol)) + (want-vis *load-state* arg0) + ) + +(defun load-state-want-force-vis ((arg0 symbol) (arg1 symbol)) + (want-force-vis *load-state* arg0 arg1) + ) + + +(define *display-load-commands* #f) +(define *backup-load-state* (new 'global 'load-state)) + +(define-perm *load-state* load-state (new 'global 'load-state)) + diff --git a/goal_src/engine/load/file-io.gc b/goal_src/engine/load/file-io.gc index 5fa4ad852..8f8c40b5e 100644 --- a/goal_src/engine/load/file-io.gc +++ b/goal_src/engine/load/file-io.gc @@ -94,14 +94,15 @@ (defconstant LEVEL_VS_FILE_VERSION 30) (defconstant TX_FILE_VERSION 1) -(defun make-file-name ((kind file-kind) (name string) (art-group-version int)) +(defun make-file-name ((kind file-kind) (name string) (art-group-version int) (arg3 symbol)) "Get a file name to open a file with the given kind and name. The art-group-version argument can be used to override the version of the art-group. Set it to 0 or less to use the default version Similar to MakeFileName in C. Note: file type enum is different between C and GOAL. File versions should match those in versions.h. - Uses a single *file-temp-string* buffer, shared with make-vfile-name" + Uses a single *file-temp-string* buffer, shared with make-vfile-name. + arg3 is unused." (clear *file-temp-string*) (cond ((= kind (file-kind dir-tpage)) diff --git a/goal_src/engine/load/load-dgo.gc b/goal_src/engine/load/load-dgo.gc index 8ea968e99..359218f63 100644 --- a/goal_src/engine/load/load-dgo.gc +++ b/goal_src/engine/load/load-dgo.gc @@ -25,11 +25,11 @@ ;; The OVERLORD responds with the same message. (deftype load-dgo-msg (structure) ((rsvd uint16 :offset-assert 0) ;; unused? - (result load-msg-result :offset-assert 2) ;; status from OVERLORD - (b1 uint32 :offset-assert 4) ;; EE -> OVERLORD, first temp load buffer - (b2 uint32 :offset-assert 8) ;; EE -> OVERLORD, second temp load buffer - (bt uint32 :offset-assert 12) ;; EE -> OVERLORD, location of heap - (name uint128 :offset-assert 16) ;; EE -> OVERLORD, name of file. + (result load-msg-result :offset-assert 2) ;; status from OVERLORD + (b1 pointer :offset-assert 4) ;; EE -> OVERLORD, first temp load buffer + (b2 pointer :offset-assert 8) ;; EE -> OVERLORD, second temp load buffer + (bt pointer :offset-assert 12) ;; EE -> OVERLORD, location of heap + (name uint128 :offset-assert 16) ;; EE -> OVERLORD, name of file. (name-chars uint8 16 :offset 16) ;; name of file (as chars) (address uint32 :offset 4) ;; OVERLORD -> EE, location of loaded file. ) @@ -268,7 +268,7 @@ struct DgoHeader { (define *dgo-time* (the-as uint 0)) -(defun dgo-load-begin ((name string) (buffer1 int) (buffer2 int) (current-heap int)) +(defun dgo-load-begin ((name string) (buffer1 pointer) (buffer2 pointer) (buffer-top pointer)) "Send a DGO load RPC!" ;; remember when we started @@ -282,9 +282,9 @@ struct DgoHeader { (let ((cmd (the-as load-dgo-msg (add-element *load-dgo-rpc*)))) ;; set parameters (set! (-> cmd result) (load-msg-result invalid)) - (set! (-> cmd b1) (the-as uint buffer1)) - (set! (-> cmd b2) (the-as uint buffer2)) - (set! (-> cmd bt) (the-as uint current-heap)) + (set! (-> cmd b1) buffer1) + (set! (-> cmd b2) buffer2) + (set! (-> cmd bt) buffer-top) ;; modified due to OpenGOAL not supporting uint128 return values yet (set! (-> cmd name) (string->sound-name name)) ;; call now! @@ -333,13 +333,13 @@ struct DgoHeader { ) ) -(defun dgo-load-continue ((current-heap pointer)) +(defun dgo-load-continue ((buffer-top pointer)) "Send a command to to the IOP to continue loading a DGO" (let ((cmd (the-as load-dgo-msg (add-element *load-dgo-rpc*)))) (set! (-> cmd result) (load-msg-result invalid)) - (set! (-> cmd b1) (the-as uint 0)) - (set! (-> cmd b2) (the-as uint 0)) - (set! (-> cmd bt) (the-as uint current-heap)) + (set! (-> cmd b1) (the pointer 0)) + (set! (-> cmd b2) (the pointer 0)) + (set! (-> cmd bt) buffer-top) (set! (-> cmd name) (the-as uint128 0)) (call *load-dgo-rpc* (the-as uint 1) (the-as pointer cmd) (the-as uint 32)) (the-as int cmd) diff --git a/goal_src/engine/load/loader-h.gc b/goal_src/engine/load/loader-h.gc index 6c1142244..37d89c15d 100644 --- a/goal_src/engine/load/loader-h.gc +++ b/goal_src/engine/load/loader-h.gc @@ -8,25 +8,27 @@ ;; This type didn't have an inspect method, so these field names are made up. (declare-type art-group basic) (deftype load-dir (basic) - ((unknown basic) - (string-array (array string)) ;; these are the names - (data-array (array art-group)) ;; this is the file data. + ((unknown basic :offset-assert 4) + (string-array (array string) :offset-assert 8) ;; these are the names + (data-array (array basic) :offset-assert 12) ;; this is the file data. ) :flag-assert #xb00000010 (:methods - (new (symbol type int basic) _type_ 0) - (dummy-9 () none 9) - (dummy-10 () none 10) - ) + (new (symbol type int basic) _type_ 0) + (dummy-9 () none 9) + (dummy-10 () none 10) + ) ) ;; specialization of load-dir where the data-array holds art-groups. +(declare-type art-group basic) (deftype load-dir-art-group (load-dir) - () - (:methods - (new (symbol type int basic) _type_ 0) + ((art-group-array (array art-group) :offset 12) ) :flag-assert #xb00000010 + (:methods + (new (symbol type int basic) _type_ 0) + ) ) @@ -65,35 +67,35 @@ (deftype external-art-buffer (basic) ((index int32 :offset-assert 4) (other external-art-buffer :offset-assert 8) - (status basic :offset-assert 12) - (locked? basic :offset-assert 16) - (frame-lock basic :offset-assert 20) + (status symbol :offset-assert 12) + (locked? symbol :offset-assert 16) + (frame-lock symbol :offset-assert 20) (heap kheap :inline :offset-assert 32) - (pending-load-file basic :offset-assert 48) + (pending-load-file string :offset-assert 48) (pending-load-file-part int32 :offset-assert 52) (pending-load-file-owner uint64 :offset-assert 56) (pending-load-file-priority float :offset-assert 64) - (load-file basic :offset-assert 68) + (load-file string :offset-assert 68) (load-file-part int32 :offset-assert 72) (load-file-owner uint64 :offset-assert 80) (load-file-priority float :offset-assert 88) (buf uint32 :offset-assert 92) (len int32 :offset-assert 96) - (art-group basic :offset-assert 100) + (art-group art-group :offset-assert 100) ) :method-count-assert 16 :size-assert #x68 :flag-assert #x1000000068 (:methods - (new (symbol type int) _type_ 0) - (dummy-9 () none 9) - (dummy-10 () none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - ) + (new (symbol type int) _type_ 0) + (dummy-9 (_type_ symbol int symbol float) none 9) + (dummy-10 () none 10) + (dummy-11 () none 11) + (dummy-12 () none 12) + (dummy-13 () none 13) + (dummy-14 () none 14) + (dummy-15 () none 15) + ) ) (defmethod new external-art-buffer ((allocation symbol) (type-to-make type) (idx int)) @@ -117,7 +119,7 @@ ) (deftype spool-anim (basic) - ((name basic :offset 16) ;; why? + ((name string :offset 16) ;; why? (index int32 :offset-assert 20) (parts int32 :offset-assert 24) (priority float :offset-assert 28) @@ -145,16 +147,16 @@ :size-assert #x118 :flag-assert #x1100000118 (:methods - (new (symbol type) _type_ 0) - (dummy-9 () none 9) - (dummy-10 () none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - ) + (new (symbol type) _type_ 0) + (dummy-9 (_type_ symbol) none 9) + (dummy-10 (_type_) none 10) + (dummy-11 () none 11) + (dummy-12 () none 12) + (dummy-13 () none 13) + (dummy-14 () none 14) + (dummy-15 () none 15) + (dummy-16 () none 16) + ) ) (defmethod new external-art-control ((allocation symbol) (type-to-make type)) diff --git a/goal_src/engine/math/vector-h.gc b/goal_src/engine/math/vector-h.gc index d5a6f5239..2a3f65ad4 100644 --- a/goal_src/engine/math/vector-h.gc +++ b/goal_src/engine/math/vector-h.gc @@ -408,7 +408,8 @@ ) (deftype box8s-array (inline-array-class) - () + ((data box8s :inline :dynamic :offset 16) + ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 diff --git a/goal_src/engine/sound/gsound-h.gc b/goal_src/engine/sound/gsound-h.gc index cddd37b33..8465497a0 100644 --- a/goal_src/engine/sound/gsound-h.gc +++ b/goal_src/engine/sound/gsound-h.gc @@ -372,7 +372,6 @@ (define *current-sound-id* (the sound-id 65536)) -(declare-type entity basic) (deftype ambient-sound (basic) ((spec sound-spec :offset-assert 4) (playing-id sound-id :offset-assert 8) diff --git a/goal_src/engine/target/logic-target.gc b/goal_src/engine/target/logic-target.gc index 1cc584a5c..f8ce58081 100644 --- a/goal_src/engine/target/logic-target.gc +++ b/goal_src/engine/target/logic-target.gc @@ -5,3 +5,44 @@ ;; name in dgo: logic-target ;; dgos: GAME, ENGINE + +;; temp, this function is massive and a whole can of worms. Just do nothing for now, it's fine. +(defun init-target ((cont continue-point)) + + "NOTHING11!!!!" + (the object 0) + ) + +(defun stop ((game-mode symbol)) + "Stop the target system" + + (when *target* + (kill-by-name 'target *active-pool*) + (set! *target* #f) + ) + (set! (-> *game-info* mode) game-mode) + 0 + ) + +(defun start ((game-mode symbol) (cont continue-point)) + "Start the target system" + + (set! (-> *level* border?) #f) + (set! (-> *setting-control* default border-mode) #f) + (stop game-mode) + ;; this is also that same macro... i just have no idea how to write it. + (let* ((s5-0 (the target (get-process *target-dead-pool* target #x4000))) + (v1-3 (when s5-0 + ((method-of-type target activate) s5-0 *target-pool* 'target *kernel-dram-stack*) + ((the (function object object object object) run-function-in-process) s5-0 init-target cont) + (-> s5-0 ppointer) + )) + ) + (if v1-3 + (set! *target* (the target (-> v1-3 0 self))) + (set! *target* #f) + ) + ) + *target* + ) + diff --git a/goal_src/engine/target/target-h.gc b/goal_src/engine/target/target-h.gc index 3833ee684..d5be2b8aa 100644 --- a/goal_src/engine/target/target-h.gc +++ b/goal_src/engine/target/target-h.gc @@ -7,51 +7,57 @@ ;; definition of type target (deftype target (process-drawable) - ((control basic :offset 112) - (skel2 basic :offset-assert 176) - (racer basic :offset-assert 180) - (game basic :offset-assert 184) - (neck basic :offset-assert 188) - (state-hook-time uint64 :offset-assert 192) - (state-hook basic :offset-assert 200) - (cam-user-mode basic :offset-assert 204) - (sidekick uint32 :offset-assert 208) - (manipy uint32 :offset-assert 212) - (attack-info attack-info :inline :offset-assert 224) - (attack-info-rec attack-info :inline :offset-assert 336) - (anim-seed uint64 :offset-assert 440) - (alt-cam-pos vector :inline :offset-assert 448) - (snowball basic :offset-assert 464) - (tube basic :offset-assert 468) - (flut basic :offset-assert 472) - (current-level basic :offset-assert 476) - (saved-pos transformq :inline :offset-assert 480) - (saved-owner uint64 :offset-assert 528) - (alt-neck-pos vector :inline :offset-assert 544) - (fp-hud uint64 :offset-assert 560) - (no-load-wait uint64 :offset-assert 568) - (no-look-around-wait uint64 :offset-assert 576) + ((control control-info :score 100 :offset 112) + (skel2 basic :offset-assert 176) + (racer basic :offset-assert 180) + (game game-info :offset-assert 184) + (neck joint-mod :offset-assert 188) + (state-hook-time uint64 :offset-assert 192) + (state-hook function :offset-assert 200) + (cam-user-mode symbol :offset-assert 204) + (sidekick uint32 :offset-assert 208) + (manipy uint32 :offset-assert 212) + (attack-info attack-info :inline :offset-assert 224) + (attack-info-rec attack-info :inline :offset-assert 336) + (anim-seed uint64 :offset-assert 440) + (alt-cam-pos vector :inline :offset-assert 448) + (snowball basic :offset-assert 464) + (tube basic :offset-assert 468) + (flut basic :offset-assert 472) + (current-level level :offset-assert 476) + (saved-pos transformq :inline :offset-assert 480) + (saved-owner uint64 :offset-assert 528) + (alt-neck-pos vector :inline :offset-assert 544) + (fp-hud uint64 :offset-assert 560) + (no-load-wait uint64 :offset-assert 568) + (no-look-around-wait uint64 :offset-assert 576) ) :heap-base #x1e0 :method-count-assert 21 :size-assert #x248 :flag-assert #x1501e00248 + ;; inherited inspect of process-drawable (:methods (dummy-20 () none 20) ) ) -;; definition of type sidekick (deftype sidekick (process-drawable) - ((control basic :offset 112) - (anim-seed uint64 :offset 192) - (shadow-in-movie? basic :offset-assert 200) + ((control control-info :offset 112) + (anim-seed uint64 :offset 192) + (shadow-in-movie? basic :offset-assert 200) ) :heap-base #x60 :method-count-assert 20 :size-assert #xcc :flag-assert #x14006000cc + ;; inherited inspect of process-drawable ) (define-perm *target* target #f) (define-perm *sidekick* sidekick #f) + + +(defun-extern stop symbol int) +(defun-extern start symbol continue-point target) + diff --git a/goal_src/goal-lib.gc b/goal_src/goal-lib.gc index d35c730fa..7a3c808b7 100644 --- a/goal_src/goal-lib.gc +++ b/goal_src/goal-lib.gc @@ -322,6 +322,7 @@ ;; Backup some values, and restore after executing body. ;; Non-dynamic (nonlocal jumps out of body will skip restore) +;; NOTE : GOAL protected defs in a FIFO manner (this is FILO/LIFO), this should be fixed at some point (defmacro protect (defs &rest body) (if (null? defs) ;; nothing to backup, just insert body (base case) @@ -510,7 +511,7 @@ ) (defmacro align64 (value) - `(logand -64 (+ (the-as int ,value) 63)) + `(logand -64 (&+ (the-as pointer ,value) 63)) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/goal_src/kernel-defs.gc b/goal_src/kernel-defs.gc index 502c2e8f0..31c40b915 100644 --- a/goal_src/kernel-defs.gc +++ b/goal_src/kernel-defs.gc @@ -172,7 +172,7 @@ ;; *stack-top* ;; *stack-base* ;; *stack-size* -;; *kernel-boot-message* +(define-extern *kernel-boot-message* symbol) ;; *kernel-boot-mode* ;; *kernel-boot-level* diff --git a/goal_src/kernel/gkernel-h.gc b/goal_src/kernel/gkernel-h.gc index 89e4cb17d..be7c15196 100644 --- a/goal_src/kernel/gkernel-h.gc +++ b/goal_src/kernel/gkernel-h.gc @@ -223,13 +223,15 @@ ;; A GOAL process. A GOAL process contains memory and a suspendable main-thread. +(declare-type res-lump basic) +(declare-type entity res-lump) (deftype process (process-tree) ((pool dead-pool :offset-assert #x20) (status basic :offset-assert #x24) (pid int32 :offset-assert #x28) (main-thread cpu-thread :offset-assert #x2c) (top-thread thread :offset-assert #x30) - (entity basic :offset-assert #x34) + (entity entity :offset-assert #x34) (state state :offset-assert #x38) (trans-hook function :offset-assert #x3c) (post-hook function :offset-assert #x40) diff --git a/goal_src/kernel/gkernel.gc b/goal_src/kernel/gkernel.gc index 74cd3550a..c1e423e5a 100644 --- a/goal_src/kernel/gkernel.gc +++ b/goal_src/kernel/gkernel.gc @@ -95,13 +95,13 @@ ) ;; the main stack for running GOAL code! -;; all user code (that I know of) runs using *dram-stack* +;; most user code runs using *dram-stack* (define *dram-stack* (new 'global 'array 'uint8 DPROCESS_STACK_SIZE)) ;; note - this name is a bit confusing. The kernel-dram-stack is not the stack that the kernel runs in. ;; I think it refers to the fact that it's _not_ the scratchpad stack (defconstant *kernel-dram-stack* (&+ *dram-stack* DPROCESS_STACK_SIZE)) -;; I don't think this stack is used, but I'm not sure. +;; another stack for running GOAL processes, this one uses the scratchpad (fast memory). (set! (-> *kernel-context* fast-stack-top) *scratch-memory-top*) ;; A context with all process masks set to 0. This can be used to iterate through a process tree @@ -959,7 +959,7 @@ ;; they actually need. To avoid heap fragmentation, the dead-pool-heap system will relocate ;; processes. This requires that you implement the relocate method on your process. -;; DANGER: the dead pool heap is _not_ a proper process tree. Do not attempt to treat it like on. +;; DANGER: the dead pool heap is _not_ a proper process tree. Do not attempt to treat it like one. ;; If you get-process, you should immediately activate it. The activate method will (change-parent) ;; and this will get stuck in an endless loop if you do it on a process that wasn't the most recent one. @@ -1645,8 +1645,7 @@ (define-extern *active-pool* process-tree) (defun kernel-dispatcher () - "Run the kernel! - " + "Run the kernel!" (when *listener-function* (let ((result (reset-and-call (-> *listener-process* main-thread) *listener-function*))) diff --git a/goal_src/kernel/gstate.gc b/goal_src/kernel/gstate.gc index 44d283287..1c9f7fc8d 100644 --- a/goal_src/kernel/gstate.gc +++ b/goal_src/kernel/gstate.gc @@ -332,6 +332,20 @@ There are several ways to "go" ) ) +(defmacro send-event (proc msg &rest params) + `(with-pp + (let ((event-data (new 'stack-no-clear 'event-message-block))) + (set! (-> event-data from) pp) + (set! (-> event-data num-params) ,(length params)) + (set! (-> event-data message) ,msg) + ,@(let ((ep 0)) + (apply (lambda (x) `(set! (-> event-data param ep) ,x) (inc! ep)) params) + ) + (send-event-function ,proc event-data) + ) + ) + ) + (defun looping-code () "Loop." (while #t diff --git a/goalc/compiler/compilation/ControlFlow.cpp b/goalc/compiler/compilation/ControlFlow.cpp index 123eee1fa..d7625d34c 100644 --- a/goalc/compiler/compilation/ControlFlow.cpp +++ b/goalc/compiler/compilation/ControlFlow.cpp @@ -248,7 +248,11 @@ Val* Compiler::compile_cond(const goos::Object& form, const goos::Object& rest, env->emit(std::move(get_false)); } - result->set_type(coerce_to_reg_type(m_ts.lowest_common_ancestor(case_result_types))); + if (case_result_types.empty()) { + result->set_type(TypeSpec("none")); + } else { + result->set_type(coerce_to_reg_type(m_ts.lowest_common_ancestor(case_result_types))); + } // PATCH END end_label->idx = fenv->code().size(); @@ -323,4 +327,4 @@ Val* Compiler::compile_and_or(const goos::Object& form, const goos::Object& rest result->set_type(m_ts.lowest_common_ancestor(case_result_types)); return result; -} \ No newline at end of file +} diff --git a/test/decompiler/reference/engine/anim/joint-h_REF.gc b/test/decompiler/reference/engine/anim/joint-h_REF.gc index e43909a84..b75805599 100644 --- a/test/decompiler/reference/engine/anim/joint-h_REF.gc +++ b/test/decompiler/reference/engine/anim/joint-h_REF.gc @@ -44,32 +44,32 @@ ;; definition of type joint-control (deftype joint-control (basic) - ((status uint16 :offset-assert 4) - (allocated-length int16 :offset-assert 6) - (root-channel joint-control-channel :offset 16) - (blend-index int32 :offset-assert 20) - (active-channels int32 :offset-assert 24) - (generate-frame-function basic :offset-assert 28) - (prebind-function basic :offset-assert 32) - (postbind-function basic :offset-assert 36) - (effect basic :offset-assert 40) - (channel joint-control-channel 3 :inline :offset-assert 48) - (frame-group0 art-joint-anim :offset 60) - (frame-num0 float :offset 64) - (frame-interp0 float :offset 56) - (frame-group1 art-joint-anim :offset 108) - (frame-num1 float :offset 112) - (frame-interp1 float :offset 104) - (frame-group2 art-joint-anim :offset 156) - (frame-num2 float :offset 160) - (frame-interp2 float :offset 152) + ((status uint16 :offset-assert 4) + (allocated-length int16 :offset-assert 6) + (root-channel (inline-array joint-control-channel) :offset 16) + (blend-index int32 :offset-assert 20) + (active-channels int32 :offset-assert 24) + (generate-frame-function basic :offset-assert 28) + (prebind-function basic :offset-assert 32) + (postbind-function basic :offset-assert 36) + (effect basic :offset-assert 40) + (channel joint-control-channel 3 :inline :offset-assert 48) + (frame-group0 art-joint-anim :offset 60) + (frame-num0 float :offset 64) + (frame-interp0 float :offset 56) + (frame-group1 art-joint-anim :offset 108) + (frame-num1 float :offset 112) + (frame-interp1 float :offset 104) + (frame-group2 art-joint-anim :offset 156) + (frame-num2 float :offset 160) + (frame-interp2 float :offset 152) ) :method-count-assert 11 :size-assert #xc0 :flag-assert #xb000000c0 (:methods (new (symbol type int) _type_ 0) - (dummy-9 () none 9) + (dummy-9 (_type_) none 9) (dummy-10 (_type_ symbol) int 10) ) ) diff --git a/test/decompiler/reference/engine/anim/mspace-h_REF.gc b/test/decompiler/reference/engine/anim/mspace-h_REF.gc index ebfbc438b..8f22ddd47 100644 --- a/test/decompiler/reference/engine/anim/mspace-h_REF.gc +++ b/test/decompiler/reference/engine/anim/mspace-h_REF.gc @@ -135,7 +135,7 @@ (format #t "[~8x] ~A~%" obj (-> obj type)) (format #t "~Tlength: ~D~%" (-> obj length)) (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) - (format #t "~Tdata[0] @ #x~X~%" (-> obj _data)) + (format #t "~Tdata[0] @ #x~X~%" (-> obj data)) obj ) diff --git a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc index e4451b1e5..fd3d5409c 100644 --- a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc @@ -413,7 +413,7 @@ (dummy-32 () none 32) (dummy-33 () none 33) (dummy-34 () none 34) - (dummy-35 () none 35) + (dummy-35 (_type_) none 35) (dummy-36 () none 36) (dummy-37 () none 37) (dummy-38 () none 38) @@ -422,11 +422,11 @@ (dummy-41 () none 41) (dummy-42 () none 42) (dummy-43 () none 43) - (dummy-44 () none 44) - (dummy-45 () none 45) + (dummy-44 (_type_) none 44) + (dummy-45 (_type_) none 45) (dummy-46 () none 46) - (dummy-47 () none 47) - (dummy-48 () none 48) + (dummy-47 (_type_) none 47) + (dummy-48 (_type_) none 48) (dummy-49 () none 49) (dummy-50 () none 50) (dummy-51 () none 51) diff --git a/test/decompiler/reference/engine/collide/collide-target-h_REF.gc b/test/decompiler/reference/engine/collide/collide-target-h_REF.gc index 479889562..562a6b408 100644 --- a/test/decompiler/reference/engine/collide/collide-target-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-target-h_REF.gc @@ -40,9 +40,17 @@ ;; definition of type control-info (deftype control-info (collide-shape-moving) - ((array-size int16 :offset 2490) - (history-array collide-history 128 :inline :offset-assert 2496) - (pad uint32 27 :offset-assert 18880) + ((unknown-vector00 vector :inline :offset 576) + (unknown-surface surface :offset 660) + (unknown-symbol symbol :offset 664) + (unknown-qword uint128 :offset 1136) + (unknown-vector10 vector :inline :offset 1216) + (unknown-vector11 vector :inline :offset 1232) + (unknown-vector12 vector :inline :offset 1248) + (unknown-vector13 vector :inline :offset 1264) + (history-length int16 :offset 2490) + (history-data collide-history 128 :inline :offset-assert 2496) + (pad uint32 27 :offset-assert 18880) ) :method-count-assert 65 :size-assert #x4a2c diff --git a/test/decompiler/reference/engine/data/art-h_REF.gc b/test/decompiler/reference/engine/data/art-h_REF.gc index 8b9a8ec89..f804c30b4 100644 --- a/test/decompiler/reference/engine/data/art-h_REF.gc +++ b/test/decompiler/reference/engine/data/art-h_REF.gc @@ -295,8 +295,8 @@ :size-assert #x20 :flag-assert #xf00000020 (:methods - (dummy-13 () none 13) - (dummy-14 () none 14) + (dummy-13 (_type_) int 13) + (dummy-14 (_type_) int 14) ) ) @@ -388,7 +388,7 @@ :size-assert #x21 :flag-assert #xa00000021 (:methods - (dummy-9 () none 9) + (dummy-9 (_type_) _type_ 9) ) ) @@ -447,9 +447,10 @@ :size-assert #xbc :flag-assert #xc000000bc (:methods + (new (symbol type process art-joint-geo) _type_ 0) (dummy-9 (_type_) (pointer int8) 9) - (dummy-10 () none 10) - (dummy-11 () none 11) + (dummy-10 (_type_ int int) int 10) + (dummy-11 (_type_ pointer) int 11) ) ) diff --git a/test/decompiler/reference/engine/data/res-h_REF.gc b/test/decompiler/reference/engine/data/res-h_REF.gc index 12f4d2e4b..c81613787 100644 --- a/test/decompiler/reference/engine/data/res-h_REF.gc +++ b/test/decompiler/reference/engine/data/res-h_REF.gc @@ -22,7 +22,7 @@ (data-base pointer :offset-assert 12) (data-top pointer :offset-assert 16) (data-size int32 :offset-assert 20) - (extra basic :offset-assert 24) + (extra entity-links :offset-assert 24) (tag (pointer res-tag) :offset-assert 28) ) :method-count-assert 22 diff --git a/test/decompiler/reference/engine/draw/drawable-actor-h_REF.gc b/test/decompiler/reference/engine/draw/drawable-actor-h_REF.gc index 88a35ab2b..cfacb9db8 100644 --- a/test/decompiler/reference/engine/draw/drawable-actor-h_REF.gc +++ b/test/decompiler/reference/engine/draw/drawable-actor-h_REF.gc @@ -3,7 +3,7 @@ ;; definition of type drawable-actor (deftype drawable-actor (drawable) - ((actor basic :offset 8) + ((actor entity-actor :offset 8) ) :method-count-assert 18 :size-assert #x20 diff --git a/test/decompiler/reference/engine/draw/drawable-ambient-h_REF.gc b/test/decompiler/reference/engine/draw/drawable-ambient-h_REF.gc index b7075ac88..9267d28cb 100644 --- a/test/decompiler/reference/engine/draw/drawable-ambient-h_REF.gc +++ b/test/decompiler/reference/engine/draw/drawable-ambient-h_REF.gc @@ -3,7 +3,7 @@ ;; definition of type drawable-ambient (deftype drawable-ambient (drawable) - ((ambient basic :offset 8) + ((ambient entity-ambient :offset 8) ) :method-count-assert 19 :size-assert #x20 diff --git a/test/decompiler/reference/engine/draw/drawable-h_REF.gc b/test/decompiler/reference/engine/draw/drawable-h_REF.gc index ae01d1e47..2da5a72b2 100644 --- a/test/decompiler/reference/engine/draw/drawable-h_REF.gc +++ b/test/decompiler/reference/engine/draw/drawable-h_REF.gc @@ -16,7 +16,7 @@ (dummy-12 (_type_ int) none 12) (dummy-13 (_type_ int) none 13) (dummy-14 () none 14) - (dummy-15 () none 15) + (dummy-15 (_type_) none 15) (dummy-16 (_type_ object object) object 16) (dummy-17 () none 17) ) diff --git a/test/decompiler/reference/engine/draw/process-drawable-h_REF.gc b/test/decompiler/reference/engine/draw/process-drawable-h_REF.gc index c6e3b3df5..d0bccdab0 100644 --- a/test/decompiler/reference/engine/draw/process-drawable-h_REF.gc +++ b/test/decompiler/reference/engine/draw/process-drawable-h_REF.gc @@ -12,7 +12,7 @@ ) (else (format 0 "no cspace (~A)~%" arg1) - (the-as cspace (-> arg0 node-list _data)) + (the-as cspace (-> arg0 node-list data)) ) ) ) diff --git a/test/decompiler/reference/engine/entity/actor-link-h_REF.gc b/test/decompiler/reference/engine/entity/actor-link-h_REF.gc index 5e7cbccf4..6356d109c 100644 --- a/test/decompiler/reference/engine/entity/actor-link-h_REF.gc +++ b/test/decompiler/reference/engine/entity/actor-link-h_REF.gc @@ -120,16 +120,10 @@ ) (set! (-> obj process) proc) (let ((ent (-> proc entity))) - (set! - (-> obj next) - (entity-actor-lookup (the-as res-lump ent) 'next-actor 0) - ) + (set! (-> obj next) (entity-actor-lookup ent 'next-actor 0)) ) (let ((a0-2 (-> proc entity))) - (set! - (-> obj prev) - (entity-actor-lookup (the-as res-lump a0-2) 'prev-actor 0) - ) + (set! (-> obj prev) (entity-actor-lookup a0-2 'prev-actor 0)) ) obj ) @@ -166,16 +160,10 @@ ;; definition for method 11 of type actor-link-info (defmethod link actor-link-info ((obj actor-link-info)) (let ((a0-1 (-> obj process entity))) - (set! - (-> obj next) - (entity-actor-lookup (the-as res-lump a0-1) 'next-actor 0) - ) + (set! (-> obj next) (entity-actor-lookup a0-1 'next-actor 0)) ) (let ((a0-2 (-> obj process entity))) - (set! - (-> obj prev) - (entity-actor-lookup (the-as res-lump a0-2) 'prev-actor 0) - ) + (set! (-> obj prev) (entity-actor-lookup a0-2 'prev-actor 0)) ) (-> obj next) ) @@ -228,16 +216,16 @@ ) (let ((s4-0 (-> obj process entity))) (while (let ((a0-2 s4-0)) - (entity-actor-lookup (the-as res-lump a0-2) 'prev-actor 0) + (entity-actor-lookup a0-2 'prev-actor 0) ) - (set! s4-0 (entity-actor-lookup (the-as res-lump s4-0) 'prev-actor 0)) + (set! s4-0 (entity-actor-lookup s4-0 'prev-actor 0)) ) (while s4-0 (if (arg0 (the-as entity-actor s4-0) arg1) (return (the-as int #f)) ) (let ((a0-4 s4-0)) - (set! s4-0 (entity-actor-lookup (the-as res-lump a0-4) 'next-actor 0)) + (set! s4-0 (entity-actor-lookup a0-4 'next-actor 0)) ) ) ) @@ -318,14 +306,14 @@ (count 0) ) (while (let ((a0-2 actor)) - (entity-actor-lookup (the-as res-lump a0-2) 'prev-actor 0) + (entity-actor-lookup a0-2 'prev-actor 0) ) - (set! actor (entity-actor-lookup (the-as res-lump actor) 'prev-actor 0)) + (set! actor (entity-actor-lookup actor 'prev-actor 0)) ) (while actor (+! count 1) (let ((a0-3 actor)) - (set! actor (entity-actor-lookup (the-as res-lump a0-3) 'next-actor 0)) + (set! actor (entity-actor-lookup a0-3 'next-actor 0)) ) ) count @@ -367,14 +355,14 @@ (count 0) ) (while (let ((a0-2 actor)) - (entity-actor-lookup (the-as res-lump a0-2) 'prev-actor 0) + (entity-actor-lookup a0-2 'prev-actor 0) ) - (set! actor (entity-actor-lookup (the-as res-lump actor) 'prev-actor 0)) + (set! actor (entity-actor-lookup actor 'prev-actor 0)) ) (while (!= actor this-actor) (+! count 1) (let ((a0-3 actor)) - (set! actor (entity-actor-lookup (the-as res-lump a0-3) 'next-actor 0)) + (set! actor (entity-actor-lookup a0-3 'next-actor 0)) ) ) count @@ -423,22 +411,12 @@ ;; definition for function alt-actor-list-subtask-incomplete-count (defun alt-actor-list-subtask-incomplete-count ((arg0 process-drawable)) - (let - ((alt-actor-count - (entity-actor-count (the-as res-lump (-> arg0 entity)) 'alt-actor) - ) - (incomplete-count 0) - ) + (let ((alt-actor-count (entity-actor-count (-> arg0 entity) 'alt-actor)) + (incomplete-count 0) + ) (dotimes (alt-actor-idx alt-actor-count) (let - ((a0-3 - (entity-actor-lookup - (the-as res-lump (-> arg0 entity)) - 'alt-actor - alt-actor-idx - ) - ) - ) + ((a0-3 (entity-actor-lookup (-> arg0 entity) 'alt-actor alt-actor-idx))) (if (or (not a0-3) diff --git a/test/decompiler/reference/engine/entity/entity-h_REF.gc b/test/decompiler/reference/engine/entity/entity-h_REF.gc index 1f1d66782..b161104a6 100644 --- a/test/decompiler/reference/engine/entity/entity-h_REF.gc +++ b/test/decompiler/reference/engine/entity/entity-h_REF.gc @@ -276,7 +276,7 @@ ;; failed to figure out what this is: (if (zero? entity-nav-login) - (set! entity-nav-login (the-as (function basic none) nothing)) + (set! entity-nav-login (the-as (function entity-actor none) nothing)) ) ;; definition of type actor-bank diff --git a/test/decompiler/reference/engine/game/fact-h_REF.gc b/test/decompiler/reference/engine/game/fact-h_REF.gc index 630f6225f..c872fbc4e 100644 --- a/test/decompiler/reference/engine/game/fact-h_REF.gc +++ b/test/decompiler/reference/engine/game/fact-h_REF.gc @@ -271,7 +271,7 @@ (the-as (pointer int32) ((method-of-type res-lump get-property-data) - (the-as res-lump ent) + ent 'eco-info 'interp 0.0 @@ -310,7 +310,7 @@ (the-as uint ((method-of-type res-lump get-property-value) - (the-as res-lump ent) + ent 'options 'interp -1000000000.0 @@ -332,7 +332,7 @@ (the-as float ((method-of-type res-lump get-property-value-float) - (the-as res-lump ent) + ent 'timeout 'interp -1000000000.0 @@ -382,7 +382,7 @@ (the-as float ((method-of-type res-lump get-property-value-float) - (the-as res-lump entity) + entity 'speed 'interp -1000000000.0 @@ -397,7 +397,7 @@ (the-as float ((method-of-type res-lump get-property-value-float) - (the-as res-lump entity) + entity 'idle-distance 'interp -1000000000.0 @@ -412,7 +412,7 @@ (the-as float ((method-of-type res-lump get-property-value-float) - (the-as res-lump entity) + entity 'notice-top 'interp -1000000000.0 @@ -427,7 +427,7 @@ (the-as float ((method-of-type res-lump get-property-value-float) - (the-as res-lump entity) + entity 'notice-bottom 'interp -1000000000.0 @@ -442,7 +442,7 @@ (the-as float ((method-of-type res-lump get-property-value-float) - (the-as res-lump entity) + entity 'cam-horz 'interp -1000000000.0 @@ -457,7 +457,7 @@ (the-as float ((method-of-type res-lump get-property-value-float) - (the-as res-lump entity) + entity 'cam-vert 'interp -1000000000.0 @@ -472,7 +472,7 @@ (the-as float ((method-of-type res-lump get-property-value-float) - (the-as res-lump entity) + entity 'cam-notice-dist 'interp -1000000000.0 diff --git a/test/decompiler/reference/engine/game/game-h_REF.gc b/test/decompiler/reference/engine/game/game-h_REF.gc index 77f7edf8c..bb2899a3c 100644 --- a/test/decompiler/reference/engine/game/game-h_REF.gc +++ b/test/decompiler/reference/engine/game/game-h_REF.gc @@ -3,33 +3,33 @@ ;; definition of type process-drawable (deftype process-drawable (process) - ((root trsqv :offset-assert 112) - (node-list cspace-array :offset-assert 116) - (draw draw-control :offset-assert 120) - (skel joint-control :offset-assert 124) - (nav basic :offset-assert 128) - (align align-control :offset-assert 132) - (path basic :offset-assert 136) - (vol basic :offset-assert 140) - (fact fact-info :offset-assert 144) - (link basic :offset-assert 148) - (part basic :offset-assert 152) - (water water-control :offset-assert 156) - (sound ambient-sound :offset-assert 160) - (state-flags uint32 :offset-assert 164) - (state-time uint64 :offset-assert 168) + ((root trsqv :offset-assert 112) + (node-list cspace-array :offset-assert 116) + (draw draw-control :offset-assert 120) + (skel joint-control :offset-assert 124) + (nav basic :offset-assert 128) + (align align-control :offset-assert 132) + (path basic :offset-assert 136) + (vol basic :offset-assert 140) + (fact fact-info :offset-assert 144) + (link basic :offset-assert 148) + (part sparticle-launch-control :offset-assert 152) + (water water-control :offset-assert 156) + (sound ambient-sound :offset-assert 160) + (state-flags uint32 :offset-assert 164) + (state-time uint64 :offset-assert 168) ) :heap-base #x40 :method-count-assert 20 :size-assert #xb0 :flag-assert #x14004000b0 (:methods - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-14 (_type_ skeleton-group object) none 14) + (dummy-15 (_type_ string object) _type_ 15) + (dummy-16 (_type_ int (inline-array vector) vector) collide-shape 16) + (dummy-17 (_type_) none 17) + (dummy-18 (_type_) symbol 18) + (dummy-19 (_type_) none 19) ) ) diff --git a/test/decompiler/reference/engine/game/game-info-h_REF.gc b/test/decompiler/reference/engine/game/game-info-h_REF.gc index 3279570fc..124e5a3f2 100644 --- a/test/decompiler/reference/engine/game/game-info-h_REF.gc +++ b/test/decompiler/reference/engine/game/game-info-h_REF.gc @@ -49,10 +49,10 @@ ;; definition of type level-buffer-state (deftype level-buffer-state (structure) - ((name basic :offset-assert 0) - (display? basic :offset-assert 4) - (force-vis? basic :offset-assert 8) - (force-inside? basic :offset-assert 12) + ((name basic :offset-assert 0) + (display? symbol :offset-assert 4) + (force-vis? symbol :offset-assert 8) + (force-inside? symbol :offset-assert 12) ) :pack-me :method-count-assert 9 @@ -73,9 +73,9 @@ ;; definition of type load-state (deftype load-state (basic) ((want level-buffer-state 2 :inline :offset-assert 4) - (vis-nick basic :offset-assert 36) + (vis-nick symbol :offset-assert 36) (command-list pair :offset-assert 40) - (object-name basic 256 :offset-assert 44) + (object-name symbol 256 :offset-assert 44) (object-status basic 256 :offset-assert 1068) ) :method-count-assert 21 @@ -84,11 +84,11 @@ (:methods (new (symbol type) _type_ 0) (reset! (_type_) _type_ 9) - (dummy-10 () none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) + (update! (_type_) int 10) + (want-levels (_type_ symbol symbol) int 11) + (want-display-level (_type_ symbol symbol) int 12) + (want-vis (_type_ symbol) int 13) + (want-force-vis (_type_ symbol symbol) int 14) (dummy-15 () none 15) (dummy-16 () none 16) (dummy-17 () none 17) @@ -215,12 +215,12 @@ (dummy-11 () none 11) (dummy-12 () none 12) (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) + (dummy-14 (_type_) none 14) + (dummy-15 (_type_) none 15) (dummy-16 () none 16) - (dummy-17 (_type_) none 17) + (dummy-17 (_type_) continue-point 17) (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-19 (_type_ continue-point) none 19) (dummy-20 () none 20) (dummy-21 () none 21) (dummy-22 () none 22) diff --git a/test/decompiler/reference/engine/geometry/vol-h_REF.gc b/test/decompiler/reference/engine/geometry/vol-h_REF.gc index 9a5d9f9d9..263e7f4bd 100644 --- a/test/decompiler/reference/engine/geometry/vol-h_REF.gc +++ b/test/decompiler/reference/engine/geometry/vol-h_REF.gc @@ -100,29 +100,20 @@ ) ) (set! (-> (the-as vol-control gp-0) process) arg0) - (let* ((s5-1 (-> (the-as vol-control gp-0) process entity)) - (s4-0 - (-> - ((method-of-type res-lump lookup-tag-idx) - (the-as res-lump s5-1) - 'vol - 'exact - 0.0 - ) - lo - ) - ) - ) + (let* + ((s5-1 (the-as res-lump (-> (the-as vol-control gp-0) process entity))) + (s4-0 (-> (lookup-tag-idx (the-as entity s5-1) 'vol 'exact 0.0) lo)) + ) (when (>= s4-0 0) (let ((s3-0 s4-0) - (s2-0 (-> (the-as res-lump s5-1) tag s4-0)) + (s2-0 (-> s5-1 tag s4-0)) ) 0 - (while (= (-> s2-0 name) (-> (the-as res-lump s5-1) tag s4-0 name)) + (while (= (-> s2-0 name) (-> s5-1 tag s4-0 name)) (let ((v1-12 (make-property-data - (the-as res-lump s5-1) + s5-1 0.0 (the-as res-tag-pair s3-0) (the-as pointer #f) @@ -144,34 +135,25 @@ (+ (-> (the-as vol-control gp-0) pos-vol-count) 1) ) (+! s3-0 1) - (set! s2-0 (-> (the-as res-lump s5-1) tag s3-0)) + (set! s2-0 (-> s5-1 tag s3-0)) ) ) ) ) - (let* ((s5-2 (-> (the-as vol-control gp-0) process entity)) - (s4-1 - (-> - ((method-of-type res-lump lookup-tag-idx) - (the-as res-lump s5-2) - 'cutoutvol - 'exact - 0.0 - ) - lo - ) - ) - ) + (let* + ((s5-2 (the-as res-lump (-> (the-as vol-control gp-0) process entity))) + (s4-1 (-> (lookup-tag-idx (the-as entity s5-2) 'cutoutvol 'exact 0.0) lo)) + ) (when (>= s4-1 0) (let ((s3-1 s4-1) - (s2-1 (-> (the-as res-lump s5-2) tag s4-1)) + (s2-1 (-> s5-2 tag s4-1)) ) 0 - (while (= (-> s2-1 name) (-> (the-as res-lump s5-2) tag s4-1 name)) + (while (= (-> s2-1 name) (-> s5-2 tag s4-1 name)) (let ((v1-31 (make-property-data - (the-as res-lump s5-2) + s5-2 0.0 (the-as res-tag-pair s3-1) (the-as pointer #f) @@ -193,7 +175,7 @@ (+ (-> (the-as vol-control gp-0) neg-vol-count) 1) ) (+! s3-1 1) - (set! s2-1 (-> (the-as res-lump s5-2) tag s3-1)) + (set! s2-1 (-> s5-2 tag s3-1)) ) ) ) diff --git a/test/decompiler/reference/engine/gfx/ocean/ocean-h_REF.gc b/test/decompiler/reference/engine/gfx/ocean/ocean-h_REF.gc index 025ace78f..b4c9ab997 100644 --- a/test/decompiler/reference/engine/gfx/ocean/ocean-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/ocean/ocean-h_REF.gc @@ -268,14 +268,14 @@ ;; definition of type ocean-map (deftype ocean-map (basic) - ((start-corner vector :inline :offset-assert 16) - (far-color vector :inline :offset-assert 32) - (ocean-spheres ocean-spheres :offset-assert 48) - (ocean-colors ocean-colors :offset-assert 52) - (ocean-mid-indices basic :offset-assert 56) - (ocean-trans-indices basic :offset-assert 60) - (ocean-near-indices basic :offset-assert 64) - (ocean-mid-masks basic :offset-assert 68) + ((start-corner vector :inline :offset-assert 16) + (far-color vector :inline :offset-assert 32) + (ocean-spheres ocean-spheres :offset-assert 48) + (ocean-colors ocean-colors :offset-assert 52) + (ocean-mid-indices ocean-mid-indices :offset-assert 56) + (ocean-trans-indices ocean-trans-indices :offset-assert 60) + (ocean-near-indices ocean-near-indices :offset-assert 64) + (ocean-mid-masks ocean-mid-masks :offset-assert 68) ) :method-count-assert 9 :size-assert #x48 diff --git a/test/decompiler/reference/engine/gfx/texture-h_REF.gc b/test/decompiler/reference/engine/gfx/texture-h_REF.gc index 5e82bc504..3c71e58aa 100644 --- a/test/decompiler/reference/engine/gfx/texture-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/texture-h_REF.gc @@ -73,7 +73,7 @@ (dummy-17 () none 17) (dummy-18 () none 18) (dummy-19 () none 19) - (dummy-20 () none 20) + (dummy-20 (_type_ texture-page) int 20) (upload-one-common! (_type_) symbol 21) (lookup-boot-common-id (_type_ int) int 22) ) @@ -115,7 +115,7 @@ (dest uint16 7 :offset-assert 14) (clutdest uint16 :offset-assert 28) (width uint8 7 :offset-assert 30) - (name basic :offset-assert 40) + (name string :offset-assert 40) (size uint32 :offset-assert 44) (uv-dist float :offset-assert 48) (masks uint32 3 :offset-assert 52) @@ -271,13 +271,13 @@ :size-assert #x14 :flag-assert #xa00000014 (:methods - (dummy-9 () none 9) + (dummy-9 (_type_ kheap) int 9) ) ) ;; definition of type texture-relocate-later (deftype texture-relocate-later (basic) - ((memcpy basic :offset-assert 4) + ((memcpy symbol :offset-assert 4) (dest uint32 :offset-assert 8) (source uint32 :offset-assert 12) (move uint32 :offset-assert 16) @@ -348,7 +348,8 @@ ;; definition of type adgif-shader-array (deftype adgif-shader-array (inline-array-class) - () + ((data adgif-shader :inline :dynamic :offset 16) + ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 @@ -359,7 +360,7 @@ (format #t "[~8x] ~A~%" obj (-> obj type)) (format #t "~Tlength: ~D~%" (-> obj length)) (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) - (format #t "~Tdata[0] @ #x~X~%" (-> obj _data)) + (format #t "~Tdata[0] @ #x~X~%" (-> obj data)) obj ) diff --git a/test/decompiler/reference/engine/gfx/vis/bsp-h_REF.gc b/test/decompiler/reference/engine/gfx/vis/bsp-h_REF.gc index 7f1ebd41b..582712df9 100644 --- a/test/decompiler/reference/engine/gfx/vis/bsp-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/vis/bsp-h_REF.gc @@ -60,8 +60,8 @@ :size-assert #x190 :flag-assert #x1400000190 (:methods - (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-18 (_type_) none 18) + (dummy-19 (_type_) none 19) ) ) diff --git a/test/decompiler/reference/engine/gfx/water/water-h_REF.gc b/test/decompiler/reference/engine/gfx/water/water-h_REF.gc index c0829b695..8f09db4d3 100644 --- a/test/decompiler/reference/engine/gfx/water/water-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/water/water-h_REF.gc @@ -4,7 +4,7 @@ ;; definition of type water-control (deftype water-control (basic) ((flags uint32 :offset-assert 4) - (process basic :offset-assert 8) + (process process :offset-assert 8) (joint-index int32 :offset-assert 12) (top-y-offset float :offset-assert 16) (ripple-size float :offset-assert 20) diff --git a/test/decompiler/reference/engine/level/level-h_REF.gc b/test/decompiler/reference/engine/level/level-h_REF.gc index aac9831dc..3d94458b2 100644 --- a/test/decompiler/reference/engine/level/level-h_REF.gc +++ b/test/decompiler/reference/engine/level/level-h_REF.gc @@ -3,19 +3,19 @@ ;; definition of type level-vis-info (deftype level-vis-info (basic) - ((level basic :offset-assert 4) - (from-level basic :offset-assert 8) - (from-bsp basic :offset-assert 12) - (flags uint32 :offset-assert 16) - (length uint32 :offset-assert 20) - (allocated-length uint32 :offset-assert 24) - (dictionary-length uint32 :offset-assert 28) - (dictionary uint32 :offset-assert 32) - (string-block uint32 :offset-assert 36) - (ramdisk uint32 :offset-assert 40) - (vis-bits uint32 :offset-assert 44) - (current-vis-string uint32 :offset-assert 48) - (vis-string uint8 :dynamic :offset-assert 52) + ((level symbol :offset-assert 4) + (from-level symbol :offset-assert 8) + (from-bsp bsp-header :offset-assert 12) + (flags uint32 :offset-assert 16) + (length uint32 :offset-assert 20) + (allocated-length uint32 :offset-assert 24) + (dictionary-length uint32 :offset-assert 28) + (dictionary uint32 :offset-assert 32) + (string-block uint32 :offset-assert 36) + (ramdisk uint32 :offset-assert 40) + (vis-bits pointer :offset-assert 44) + (current-vis-string uint32 :offset-assert 48) + (vis-string uint8 :dynamic :offset-assert 52) ) :method-count-assert 9 :size-assert #x34 @@ -85,7 +85,7 @@ ;; definition for method 3 of type level-load-info (defmethod inspect level-load-info ((obj level-load-info)) (format #t "[~8x] ~A~%" obj (-> obj type)) - (format #t "~Tname-list[3] @ #x~X~%" (-> obj name-list)) + (format #t "~Tname-list[3] @ #x~X~%" (&-> obj name)) (format #t "~Tindex: ~D~%" (-> obj index)) (format #t "~Tname: ~A~%" (-> obj name)) (format #t "~Tvisname: ~A~%" (-> obj visname)) @@ -150,7 +150,7 @@ (art-group load-dir-art-group :offset-assert 52) (info level-load-info :offset-assert 56) (texture-page texture-page 9 :offset-assert 60) - (loaded-texture-page basic 16 :offset-assert 96) + (loaded-texture-page texture-page 16 :offset-assert 96) (loaded-texture-page-count int32 :offset-assert 160) (foreground-sink-group dma-foreground-sink-group 3 :inline :offset-assert 176) (foreground-draw-engine engine 3 :offset-assert 272) @@ -165,7 +165,7 @@ (meta-inside? symbol :offset-assert 380) (mood mood-context :offset-assert 384) (mood-func function :offset-assert 388) - (vis-bits uint32 :offset-assert 392) + (vis-bits pointer :offset-assert 392) (all-visible? symbol :offset-assert 396) (force-all-visible? symbol :offset-assert 400) (linking basic :offset-assert 404) @@ -175,8 +175,8 @@ (vis-buffer uint8 2048 :offset-assert 448) (mem-usage-block basic :offset-assert 2496) (mem-usage int32 :offset-assert 2500) - (code-memory-start uint32 :offset-assert 2504) - (code-memory-end uint32 :offset-assert 2508) + (code-memory-start pointer :offset-assert 2504) + (code-memory-end pointer :offset-assert 2508) (texture-mask uint32 9 :offset-assert 2512) (force-inside? symbol :offset-assert 2548) (pad uint8 56 :offset-assert 2552) @@ -185,26 +185,26 @@ :size-assert #xa30 :flag-assert #x1d00000a30 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (deactivate (_type_) _type_ 9) + (dummy-10 (_type_ int) symbol 10) (dummy-11 (_type_) none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) - (dummy-23 (_type_ symbol) none 23) - (dummy-24 () none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) - (dummy-27 () none 27) - (dummy-28 (_type_ string) symbol 28) + (unload! (_type_) _type_ 12) + (bsp-name (_type_) symbol 13) + (dummy-14 (_type_) none 14) + (dummy-15 (_type_ vector) symbol 15) + (dummy-16 (_type_) none 16) + (load-continue (_type_) _type_ 17) + (load-begin (_type_) _type_ 18) + (login (_type_) _type_ 19) + (vis-load (_type_) uint 20) + (dummy-21 (_type_) none 21) + (activate (_type_) _type_ 22) + (level-status-set! (_type_ symbol) _type_ 23) + (dummy-24 (_type_) _type_ 24) + (dummy-25 (_type_) int 25) + (vis-clear (_type_) int 26) + (dummy-27 (_type_ vector string) none 27) + (art-group-get-by-name (_type_ string) art-group 28) ) ) @@ -271,42 +271,43 @@ ((length int32 :offset-assert 4) (unknown-level-1 level :offset-assert 8) (unknown-level-2 level :offset-assert 12) - (entity-link entity-links :offset 16) + (entity-link entity-links :offset-assert 16) (border? basic :offset-assert 20) (vis? basic :offset-assert 24) (want-level basic :offset-assert 28) (receiving-level basic :offset-assert 32) (load-commands pair :offset-assert 36) - (play? basic :offset-assert 40) - (hack-pad uint8 :offset 90) + (play? symbol :offset-assert 40) + (_hack-pad uint8 :offset 90) (level0 level :inline :offset-assert 96) (level1 level :inline :offset-assert 2704) (level-default level :inline :offset-assert 5312) (level level 3 :inline :offset 96) + (data level 3 :inline :offset 96) (pad uint32 :offset-assert 7920) ) :method-count-assert 27 :size-assert #x1ef4 :flag-assert #x1b00001ef4 (:methods - (dummy-9 (_type_ symbol) level 9) - (dummy-10 (_type_ symbol) symbol 10) - (dummy-11 (_type_ symbol symbol) level 11) - (dummy-12 (_type_) none 12) + (level-get (_type_ symbol) level 9) + (level-get-with-status (_type_ symbol) level 10) + (level-get-for-use (_type_ symbol symbol) level 11) + (activate-levels! (_type_) int 12) (dummy-13 () none 13) (dummy-14 () none 14) (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 (_type_) none 17) - (dummy-18 (_type_ symbol) none 18) - (dummy-19 (_type_ pair) none 19) - (dummy-20 () none 20) - (dummy-21 (_type_ level-group int) pair 21) + (dummy-16 (_type_) int 16) + (level-get-target-inside (_type_) level 17) + (alloc-levels! (_type_ symbol) int 18) + (load-commands-set! (_type_ pair) pair 19) + (art-group-get-by-name (_type_ string) art-group 20) + (load-command-get-index (_type_ symbol int) pair 21) (dummy-22 () none 22) (dummy-23 () none 23) (dummy-24 () none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) + (level-status (_type_ symbol) symbol 25) + (level-get-most-disposable (_type_) level 26) ) ) diff --git a/test/decompiler/reference/engine/level/level-info_REF.gc b/test/decompiler/reference/engine/level/level-info_REF.gc index 06141eccb..aec44b380 100644 --- a/test/decompiler/reference/engine/level/level-info_REF.gc +++ b/test/decompiler/reference/engine/level/level-info_REF.gc @@ -5,9 +5,10 @@ (define training (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'training 'training-vis 'tra) :index 1 + :name 'training + :visname 'training-vis + :nickname 'tra :packages '(training) :sound-banks '(training) :music-bank 'village1 @@ -232,9 +233,10 @@ (define village1 (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'village1 'village1-vis 'vi1) :index 2 + :name 'village1 + :visname 'village1-vis + :nickname 'vi1 :packages '(village1) :sound-banks '(village1) :music-bank 'village1 @@ -461,9 +463,10 @@ (define beach (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'beach 'beach-vis 'bea) :index 3 + :name 'beach + :visname 'beach-vis + :nickname 'bea :packages '(beach) :sound-banks '(beach) :music-bank 'beach @@ -525,9 +528,10 @@ (define jungle (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'jungle 'jungle-vis 'jun) :index 4 + :name 'jungle + :visname 'jungle-vis + :nickname 'jun :packages '(jungle) :sound-banks '(jungle) :music-bank 'jungle @@ -592,9 +596,10 @@ (define jungleb (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'jungleb 'jungleb-vis 'jub) :index 5 + :name 'jungleb + :visname 'jungleb-vis + :nickname 'jub :packages '(jungleb) :sound-banks '(jungleb) :music-bank 'jungleb @@ -651,9 +656,10 @@ (define misty (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'misty 'misty-vis 'mis) :index 6 + :name 'misty + :visname 'misty-vis + :nickname 'mis :packages '(misty) :sound-banks '(misty) :music-bank 'misty @@ -1042,9 +1048,10 @@ (define firecanyon (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'firecanyon 'firecanyon-vis 'fic) :index 7 + :name 'firecanyon + :visname 'firecanyon-vis + :nickname 'fic :packages '(firecanyon) :sound-banks '(firecanyon) :music-bank 'firecanyon @@ -1133,9 +1140,10 @@ (define village2 (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'village2 'village2-vis 'vi2) :index 8 + :name 'village2 + :visname 'village2-vis + :nickname 'vi2 :packages '(village2) :sound-banks '(village2) :music-bank 'village2 @@ -1253,9 +1261,10 @@ (define sunken (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'sunken 'sunken-vis 'sun) :index 9 + :name 'sunken + :visname 'sunken-vis + :nickname 'sun :packages '(sunken) :sound-banks '(sunken) :music-bank 'sunken @@ -1397,9 +1406,10 @@ (define sunkenb (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'sunkenb 'sunkenb-vis 'sub) :index 10 + :name 'sunkenb + :visname 'sunkenb-vis + :nickname 'sub :packages '() :sound-banks '(sunken) :music-bank 'sunken @@ -1484,9 +1494,10 @@ (define swamp (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'swamp 'swamp-vis 'swa) :index 11 + :name 'swamp + :visname 'swamp-vis + :nickname 'swa :packages '(swamp) :sound-banks '(swamp) :music-bank 'swamp @@ -1848,9 +1859,10 @@ (define rolling (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'rolling 'rolling-vis 'rol) :index 12 + :name 'rolling + :visname 'rolling-vis + :nickname 'rol :packages '(rolling) :sound-banks '(rolling) :music-bank 'rolling @@ -1911,9 +1923,10 @@ (define ogre (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'ogre 'ogre-vis 'ogr) :index 13 + :name 'ogre + :visname 'ogre-vis + :nickname 'ogr :packages '(ogre) :sound-banks '(ogre) :music-bank 'ogre @@ -2030,9 +2043,10 @@ (define village3 (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'village3 'village3-vis 'vi3) :index 14 + :name 'village3 + :visname 'village3-vis + :nickname 'vi3 :packages '(village3) :sound-banks '(village3) :music-bank 'village3 @@ -2150,9 +2164,10 @@ (define snow (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'snow 'snow-vis 'sno) :index 15 + :name 'snow + :visname 'snow-vis + :nickname 'sno :packages '(snow) :sound-banks '(snow) :music-bank 'snow @@ -2438,9 +2453,10 @@ (define maincave (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'maincave 'maincave-vis 'mai) :index 16 + :name 'maincave + :visname 'maincave-vis + :nickname 'mai :packages '(maincave) :sound-banks '(maincave) :music-bank 'maincave @@ -2557,9 +2573,10 @@ (define darkcave (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'darkcave 'darkcave-vis 'dar) :index 17 + :name 'darkcave + :visname 'darkcave-vis + :nickname 'dar :packages '(darkcave) :sound-banks '(darkcave) :music-bank 'maincave @@ -2617,9 +2634,10 @@ (define robocave (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'robocave 'robocave-vis 'rob) :index 18 + :name 'robocave + :visname 'robocave-vis + :nickname 'rob :packages '(robocave) :sound-banks '(robocave) :music-bank 'maincave @@ -2705,9 +2723,10 @@ (define lavatube (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'lavatube 'lavatube-vis 'lav) :index 19 + :name 'lavatube + :visname 'lavatube-vis + :nickname 'lav :packages '(lavatube) :sound-banks '(lavatube) :music-bank 'lavatube @@ -2852,9 +2871,10 @@ (define citadel (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'citadel 'citadel-vis 'cit) :index 20 + :name 'citadel + :visname 'citadel-vis + :nickname 'cit :packages '(citadel) :sound-banks '(citadel) :music-bank 'citadel @@ -3168,9 +3188,10 @@ (define finalboss (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'finalboss 'finalboss-vis 'fin) :index 21 + :name 'finalboss + :visname 'finalboss-vis + :nickname 'fin :packages '(finalboss) :sound-banks '(finalboss) :music-bank 'finalboss @@ -3263,9 +3284,10 @@ (define intro (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'intro 'intro-vis 'int) :index 22 + :name 'intro + :visname 'intro-vis + :nickname 'int :packages '(intro) :sound-banks '() :music-bank #f @@ -3291,9 +3313,10 @@ (define demo (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'demo 'demo-vis 'dem) :index 23 + :name 'demo + :visname 'demo-vis + :nickname 'dem :packages '() :sound-banks '(village1) :music-bank 'village1 @@ -3349,9 +3372,10 @@ (define title (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'title 'title-vis 'tit) :index 24 + :name 'title + :visname 'title-vis + :nickname 'tit :packages '() :sound-banks '() :music-bank 'village1 @@ -3409,9 +3433,10 @@ (define halfpipe (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'halfpipe 'halfpipe-vis 'none) :index 25 + :name 'halfpipe + :visname 'halfpipe-vis + :nickname 'none :packages '() :sound-banks '() :music-bank #f @@ -3468,9 +3493,10 @@ (define default-level (new 'static 'level-load-info - :name-list - (new 'static 'array symbol 3 'default-level 'default-level-vis 'none) :index 26 + :name 'default-level + :visname 'default-level-vis + :nickname 'none :packages '() :sound-banks '() :music-bank #f diff --git a/test/decompiler/reference/engine/load/file-io_REF.gc b/test/decompiler/reference/engine/load/file-io_REF.gc index f40ab0e72..db54da4a1 100644 --- a/test/decompiler/reference/engine/load/file-io_REF.gc +++ b/test/decompiler/reference/engine/load/file-io_REF.gc @@ -96,7 +96,9 @@ (define *file-temp-string* (new 'global 'string 128 (the-as string #f))) ;; definition for function make-file-name -(defun make-file-name ((kind file-kind) (name string) (art-group-version int)) +(defun + make-file-name + ((kind file-kind) (name string) (art-group-version int) (arg3 symbol)) (clear *file-temp-string*) (cond ((= kind (file-kind dir-tpage)) diff --git a/test/decompiler/reference/engine/load/load-dgo_REF.gc b/test/decompiler/reference/engine/load/load-dgo_REF.gc index a3a127c67..06e068321 100644 --- a/test/decompiler/reference/engine/load/load-dgo_REF.gc +++ b/test/decompiler/reference/engine/load/load-dgo_REF.gc @@ -5,9 +5,9 @@ (deftype load-dgo-msg (structure) ((rsvd uint16 :offset-assert 0) (result load-msg-result :offset-assert 2) - (b1 uint32 :offset-assert 4) - (b2 uint32 :offset-assert 8) - (bt uint32 :offset-assert 12) + (b1 pointer :offset-assert 4) + (b2 pointer :offset-assert 8) + (bt pointer :offset-assert 12) (name uint128 :offset-assert 16) (name-chars uint8 16 :offset 16) (address uint32 :offset 4) @@ -233,15 +233,15 @@ ;; Used lq/sq (defun dgo-load-begin - ((name string) (buffer1 int) (buffer2 int) (current-heap int)) + ((name string) (buffer1 pointer) (buffer2 pointer) (current-heap pointer)) (set! *dgo-time* (-> *display* real-integral-frame-counter)) (format 0 "Starting level load clock~%") (sync *load-dgo-rpc* #t) (let ((cmd (the-as load-dgo-msg (add-element *load-dgo-rpc*)))) (set! (-> cmd result) (load-msg-result invalid)) - (set! (-> cmd b1) (the-as uint buffer1)) - (set! (-> cmd b2) (the-as uint buffer2)) - (set! (-> cmd bt) (the-as uint current-heap)) + (set! (-> cmd b1) buffer1) + (set! (-> cmd b2) buffer2) + (set! (-> cmd bt) current-heap) (set! (-> cmd name) (string->sound-name name)) (call *load-dgo-rpc* (the-as uint 0) (the-as pointer cmd) (the-as uint 32)) cmd @@ -249,7 +249,6 @@ ) ;; definition for function dgo-load-get-next -;; INFO: Return type mismatch uint vs pointer. (defun dgo-load-get-next ((last-object (pointer symbol))) (set! (-> last-object 0) #t) (let ((load-location (the-as pointer #f))) @@ -261,7 +260,7 @@ (= (-> response result) (load-msg-result done)) (= (-> response result) (load-msg-result more)) ) - (set! load-location (the-as pointer (-> response b1))) + (set! load-location (-> response b1)) ) (if (= (-> response result) (load-msg-result more)) (set! (-> last-object 0) #f) @@ -279,7 +278,7 @@ ) ) ) - (the-as pointer load-location) + load-location ) ) @@ -289,9 +288,9 @@ (defun dgo-load-continue ((current-heap pointer)) (let ((cmd (the-as load-dgo-msg (add-element *load-dgo-rpc*)))) (set! (-> cmd result) (load-msg-result invalid)) - (set! (-> cmd b1) (the-as uint 0)) - (set! (-> cmd b2) (the-as uint 0)) - (set! (-> cmd bt) (the-as uint current-heap)) + (set! (-> cmd b1) (the-as pointer 0)) + (set! (-> cmd b2) (the-as pointer 0)) + (set! (-> cmd bt) current-heap) (set! (-> cmd name) (the-as uint128 0)) (call *load-dgo-rpc* (the-as uint 1) (the-as pointer cmd) (the-as uint 32)) (the-as int cmd) diff --git a/test/decompiler/reference/engine/load/loader-h_REF.gc b/test/decompiler/reference/engine/load/loader-h_REF.gc index a7f127150..77103d129 100644 --- a/test/decompiler/reference/engine/load/loader-h_REF.gc +++ b/test/decompiler/reference/engine/load/loader-h_REF.gc @@ -3,9 +3,9 @@ ;; definition of type load-dir (deftype load-dir (basic) - ((unknown basic :offset-assert 4) - (string-array (array string) :offset-assert 8) - (data-array (array art-group) :offset-assert 12) + ((unknown basic :offset-assert 4) + (string-array (array string) :offset-assert 8) + (data-array (array basic) :offset-assert 12) ) :method-count-assert 11 :size-assert #x10 @@ -19,7 +19,8 @@ ;; definition of type load-dir-art-group (deftype load-dir-art-group (load-dir) - () + ((art-group-array (array art-group) :offset 12) + ) :method-count-assert 11 :size-assert #x10 :flag-assert #xb00000010 @@ -50,7 +51,7 @@ (set! (-> obj data-array) (the-as - (array art-group) + (array basic) ((method-of-type array new) allocation array basic length) ) ) @@ -76,28 +77,28 @@ (deftype external-art-buffer (basic) ((index int32 :offset-assert 4) (other external-art-buffer :offset-assert 8) - (status basic :offset-assert 12) - (locked? basic :offset-assert 16) - (frame-lock basic :offset-assert 20) + (status symbol :offset-assert 12) + (locked? symbol :offset-assert 16) + (frame-lock symbol :offset-assert 20) (heap kheap :inline :offset-assert 32) - (pending-load-file basic :offset-assert 48) + (pending-load-file string :offset-assert 48) (pending-load-file-part int32 :offset-assert 52) (pending-load-file-owner uint64 :offset-assert 56) (pending-load-file-priority float :offset-assert 64) - (load-file basic :offset-assert 68) + (load-file string :offset-assert 68) (load-file-part int32 :offset-assert 72) (load-file-owner uint64 :offset-assert 80) (load-file-priority float :offset-assert 88) (buf uint32 :offset-assert 92) (len int32 :offset-assert 96) - (art-group basic :offset-assert 100) + (art-group art-group :offset-assert 100) ) :method-count-assert 16 :size-assert #x68 :flag-assert #x1000000068 (:methods (new (symbol type int) _type_ 0) - (dummy-9 () none 9) + (dummy-9 (_type_ symbol int symbol float) none 9) (dummy-10 () none 10) (dummy-11 () none 11) (dummy-12 () none 12) @@ -163,7 +164,7 @@ ;; definition of type spool-anim (deftype spool-anim (basic) - ((name basic :offset 16) + ((name string :offset 16) (index int32 :offset-assert 20) (parts int32 :offset-assert 24) (priority float :offset-assert 28) @@ -205,8 +206,8 @@ :flag-assert #x1100000118 (:methods (new (symbol type) _type_ 0) - (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-9 (_type_ symbol) none 9) + (dummy-10 (_type_) none 10) (dummy-11 () none 11) (dummy-12 () none 12) (dummy-13 () none 13) diff --git a/test/decompiler/reference/engine/math/vector-h_REF.gc b/test/decompiler/reference/engine/math/vector-h_REF.gc index b146fea6c..639846531 100644 --- a/test/decompiler/reference/engine/math/vector-h_REF.gc +++ b/test/decompiler/reference/engine/math/vector-h_REF.gc @@ -661,7 +661,8 @@ ;; definition of type box8s-array (deftype box8s-array (inline-array-class) - () + ((data box8s :inline :dynamic :offset 16) + ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 @@ -672,7 +673,7 @@ (format #t "[~8x] ~A~%" obj (-> obj type)) (format #t "~Tlength: ~D~%" (-> obj length)) (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) - (format #t "~Tdata[0] @ #x~X~%" (-> obj _data)) + (format #t "~Tdata[0] @ #x~X~%" (-> obj data)) obj ) diff --git a/test/decompiler/reference/engine/nav/navigate-h_REF.gc b/test/decompiler/reference/engine/nav/navigate-h_REF.gc index 261c984a5..d2afb92d6 100644 --- a/test/decompiler/reference/engine/nav/navigate-h_REF.gc +++ b/test/decompiler/reference/engine/nav/navigate-h_REF.gc @@ -453,7 +453,11 @@ (when (zero? (-> (the-as entity-actor ent) nav-mesh)) (let ((lookup-entity - (entity-actor-lookup (the-as res-lump ent) 'nav-mesh-actor 0) + (entity-actor-lookup + (the-as entity-actor ent) + 'nav-mesh-actor + 0 + ) ) ) (if lookup-entity @@ -484,7 +488,7 @@ (let ((a3-1 ((method-of-type res-lump get-property-value) - (the-as res-lump ent) + ent 'nav-max-users 'interp -1000000000.0 @@ -585,7 +589,7 @@ (set! (-> obj nearest-y-threshold) ((method-of-type res-lump get-property-value-float) - (the-as res-lump ent) + ent 'nearest-y-threshold 'interp -1000000000.0 diff --git a/test/decompiler/reference/engine/nav/path-h_REF.gc b/test/decompiler/reference/engine/nav/path-h_REF.gc index b3d62c822..d435d8522 100644 --- a/test/decompiler/reference/engine/nav/path-h_REF.gc +++ b/test/decompiler/reference/engine/nav/path-h_REF.gc @@ -100,11 +100,7 @@ (set! (-> obj name) name) (let ((ent (-> proc entity))) (when (= name 'path) - (let - ((lookup-entity - (entity-actor-lookup (the-as res-lump ent) 'path-actor 0) - ) - ) + (let ((lookup-entity (entity-actor-lookup ent 'path-actor 0))) (if lookup-entity (set! ent lookup-entity) ) @@ -114,7 +110,7 @@ (let ((data ((method-of-type res-lump get-property-data) - (the-as res-lump ent) + ent name 'interp time @@ -182,7 +178,7 @@ ) (set! (-> obj process) proc) (set! (-> obj name) name) - (let* ((ent (the-as entity (-> proc entity))) + (let* ((ent (-> proc entity)) (v1-2 name) (s2-0 (cond ((= v1-2 'path) diff --git a/test/decompiler/reference/engine/target/target-h_REF.gc b/test/decompiler/reference/engine/target/target-h_REF.gc index 86309621b..5903a04d3 100644 --- a/test/decompiler/reference/engine/target/target-h_REF.gc +++ b/test/decompiler/reference/engine/target/target-h_REF.gc @@ -3,30 +3,30 @@ ;; definition of type target (deftype target (process-drawable) - ((control basic :offset 112) - (skel2 basic :offset-assert 176) - (racer basic :offset-assert 180) - (game basic :offset-assert 184) - (neck basic :offset-assert 188) - (state-hook-time uint64 :offset-assert 192) - (state-hook basic :offset-assert 200) - (cam-user-mode basic :offset-assert 204) - (sidekick uint32 :offset-assert 208) - (manipy uint32 :offset-assert 212) - (attack-info attack-info :inline :offset-assert 224) - (attack-info-rec attack-info :inline :offset-assert 336) - (anim-seed uint64 :offset-assert 440) - (alt-cam-pos vector :inline :offset-assert 448) - (snowball basic :offset-assert 464) - (tube basic :offset-assert 468) - (flut basic :offset-assert 472) - (current-level basic :offset-assert 476) - (saved-pos transformq :inline :offset-assert 480) - (saved-owner uint64 :offset-assert 528) - (alt-neck-pos vector :inline :offset-assert 544) - (fp-hud uint64 :offset-assert 560) - (no-load-wait uint64 :offset-assert 568) - (no-look-around-wait uint64 :offset-assert 576) + ((control control-info :offset 112) + (skel2 basic :offset-assert 176) + (racer basic :offset-assert 180) + (game game-info :offset-assert 184) + (neck joint-mod :offset-assert 188) + (state-hook-time uint64 :offset-assert 192) + (state-hook function :offset-assert 200) + (cam-user-mode symbol :offset-assert 204) + (sidekick uint32 :offset-assert 208) + (manipy uint32 :offset-assert 212) + (attack-info attack-info :inline :offset-assert 224) + (attack-info-rec attack-info :inline :offset-assert 336) + (anim-seed uint64 :offset-assert 440) + (alt-cam-pos vector :inline :offset-assert 448) + (snowball basic :offset-assert 464) + (tube basic :offset-assert 468) + (flut basic :offset-assert 472) + (current-level level :offset-assert 476) + (saved-pos transformq :inline :offset-assert 480) + (saved-owner uint64 :offset-assert 528) + (alt-neck-pos vector :inline :offset-assert 544) + (fp-hud uint64 :offset-assert 560) + (no-load-wait uint64 :offset-assert 568) + (no-look-around-wait uint64 :offset-assert 576) ) :heap-base #x1e0 :method-count-assert 21 @@ -42,7 +42,7 @@ (let ((t9-0 (method-of-type process-drawable inspect))) (t9-0 obj) ) - (format #t "~T~Tcontrol: ~A~%" (-> obj root)) + (format #t "~T~Tcontrol: ~A~%" (-> obj control)) (format #t "~T~Tskel2: ~A~%" (-> obj skel2)) (format #t "~T~Tracer: ~A~%" (-> obj racer)) (format #t "~T~Tgame: ~A~%" (-> obj game)) @@ -78,9 +78,9 @@ ;; definition of type sidekick (deftype sidekick (process-drawable) - ((control basic :offset 112) - (anim-seed uint64 :offset 192) - (shadow-in-movie? basic :offset-assert 200) + ((control control-info :offset 112) + (anim-seed uint64 :offset 192) + (shadow-in-movie? basic :offset-assert 200) ) :heap-base #x60 :method-count-assert 20