From 6a1bde4168c693ad4016042e94e774af3b58b58e Mon Sep 17 00:00:00 2001 From: water111 <48171810+water111@users.noreply.github.com> Date: Fri, 16 Sep 2022 20:42:33 -0400 Subject: [PATCH] [decomp] fix up debug menu rendering, add a few others (#1892) ![image](https://user-images.githubusercontent.com/48171810/190832869-e609d346-9c4a-43fb-ad94-2a9690521adc.png) actor vis boxes for PRI.DGO --- decompiler/IR2/FormExpressionAnalysis.cpp | 124 +- decompiler/analysis/label_types.cpp | 7 + decompiler/config/jak2/all-types.gc | 236 +- .../jak2/anonymous_function_types.jsonc | 8 +- decompiler/config/jak2/hacks.jsonc | 13 +- decompiler/config/jak2/stack_structures.jsonc | 3 + decompiler/config/jak2/type_casts.jsonc | 86 + decompiler/config/jak2/var_names.jsonc | 68 + decompiler/config/jak2_ntsc_v1.jsonc | 2 +- decompiler/types2/ForwardProp.cpp | 15 + decompiler/util/TP_Type.cpp | 6 + decompiler/util/TP_Type.h | 10 + .../opengl_renderer/OpenGLRenderer.cpp | 7 +- game/graphics/opengl_renderer/buckets.h | 3 +- game/kernel/jak2/kmachine.cpp | 16 + game/kernel/jak2/kmachine.h | 35 +- game/kernel/jak2/kscheme.cpp | 4 +- game/overlord/srpc.cpp | 8 + goal_src/jak1/examples/debug-jak2.gc | 114 - goal_src/jak2/dgos/pri.gd | 20 + goal_src/jak2/engine/anim/joint-mod-h.gc | 2 +- goal_src/jak2/engine/anim/joint-mod.gc | 6 +- goal_src/jak2/engine/camera/cam-debug.gc | 22 +- goal_src/jak2/engine/camera/cam-layout.gc | 22 +- goal_src/jak2/engine/camera/cam-states.gc | 2 +- goal_src/jak2/engine/debug/anim-tester.gc | 1 + goal_src/jak2/engine/debug/debug.gc | 4 +- goal_src/jak2/engine/debug/default-menu.gc | 76 +- goal_src/jak2/engine/debug/editable.gc | 14 +- goal_src/jak2/engine/debug/menu.gc | 13 +- goal_src/jak2/engine/dma/dma-disasm.gc | 76 +- goal_src/jak2/engine/draw/drawable-h.gc | 2 + goal_src/jak2/engine/draw/drawable.gc | 324 +- goal_src/jak2/engine/entity/entity-h.gc | 21 +- goal_src/jak2/engine/entity/entity-table.gc | 369 ++- goal_src/jak2/engine/entity/entity.gc | 2726 ++++++++++++++++ goal_src/jak2/engine/game/game-info-h.gc | 6 +- goal_src/jak2/engine/game/game-info.gc | 8 + goal_src/jak2/engine/game/main-h.gc | 5 + goal_src/jak2/engine/game/main.gc | 363 ++- goal_src/jak2/engine/game/settings-h.gc | 8 +- goal_src/jak2/engine/game/settings.gc | 40 +- .../jak2/engine/game/task/task-control-h.gc | 2 + goal_src/jak2/engine/geometry/path-h.gc | 2 +- goal_src/jak2/engine/geometry/vol-h.gc | 2 +- goal_src/jak2/engine/geometry/vol.gc | 4 +- .../jak2/engine/gfx/background/subdivide.gc | 1 + goal_src/jak2/engine/gfx/blit-displays.gc | 61 + goal_src/jak2/engine/gfx/hw/video-h.gc | 18 +- goal_src/jak2/engine/gfx/hw/video.gc | 115 + goal_src/jak2/engine/gfx/lightning-h.gc | 3 + goal_src/jak2/engine/gfx/mood/mood.gc | 106 +- .../sprite/particles/sparticle-launcher.gc | 6 +- goal_src/jak2/engine/gfx/vu1-user-h.gc | 11 +- goal_src/jak2/engine/level/bsp-h.gc | 21 +- goal_src/jak2/engine/level/level-h.gc | 48 +- goal_src/jak2/engine/level/level-info.gc | 336 +- goal_src/jak2/engine/level/level.gc | 2825 ++++++++++++++++- goal_src/jak2/engine/level/region-h.gc | 2 +- goal_src/jak2/engine/load/load-state.gc | 317 ++ goal_src/jak2/engine/nav/nav-control-h.gc | 2 +- goal_src/jak2/engine/physics/trajectory.gc | 8 +- .../process-drawable/process-drawable.gc | 5 + goal_src/jak2/engine/ps2/pad.gc | 2 +- goal_src/jak2/engine/sound/gsound.gc | 52 +- .../jak2/engine/spatial-hash/actor-hash-h.gc | 1 + goal_src/jak2/engine/target/logic-target.gc | 161 +- goal_src/jak2/engine/target/target-util.gc | 18 +- .../jak2/engine/ui/progress/progress-h.gc | 6 +- goal_src/jak2/engine/ui/progress/progress.gc | 1 + goal_src/jak2/engine/ui/text-h.gc | 2 +- goal_src/jak2/examples/debug-jak2.gc | 247 ++ goal_src/jak2/game.gp | 27 + goal_src/jak2/kernel-defs.gc | 8 + scripts/update_decomp_reference.py | 9 +- .../jak1/engine/collide/collide_REF.gc | 29 +- .../jak1/engine/dma/dma-disasm_REF.gc | 322 +- .../jak1/engine/entity/entity-table_REF.gc | 271 +- .../jak1/engine/gfx/generic/generic_REF.gc | 4 +- .../reference/jak1/engine/gfx/texture_REF.gc | 552 ++-- .../reference/jak1/engine/gfx/wind-h_REF.gc | 69 +- .../reference/jak1/engine/math/euler-h_REF.gc | 4 +- .../jak1/engine/math/trigonometry_REF.gc | 138 +- .../reference/jak1/engine/nav/navigate_REF.gc | 6 +- .../jak1/engine/target/target-death_REF.gc | 26 +- .../reference/jak1/engine/ui/text-h_REF.gc | 2 +- .../jak1/levels/common/basebutton_REF.gc | 15 +- .../jak1/levels/common/water-anim_REF.gc | 394 ++- .../jak1/levels/maincave/dark-crystal_REF.gc | 4 +- .../jak1/levels/misty/misty-conveyor_REF.gc | 4 +- .../jak1/levels/misty/sidekick-human_REF.gc | 112 +- .../jak1/levels/ogre/ogre-obs_REF.gc | 4 +- .../jak2/engine/anim/joint-mod-h_REF.gc | 2 +- .../jak2/engine/anim/joint-mod_REF.gc | 6 +- .../jak2/engine/camera/cam-debug_REF.gc | 46 +- .../jak2/engine/camera/cam-layout_REF.gc | 22 +- .../jak2/engine/camera/cam-states_REF.gc | 2 +- .../reference/jak2/engine/debug/debug_REF.gc | 4 +- .../jak2/engine/debug/default-menu_REF.gc | 10 +- .../jak2/engine/debug/editable_REF.gc | 16 +- .../reference/jak2/engine/debug/menu_REF.gc | 12 +- .../jak2/engine/dma/dma-disasm_REF.gc | 322 +- .../jak2/engine/entity/entity-h_REF.gc | 20 +- .../jak2/engine/entity/entity-table_REF.gc | 369 ++- .../jak2/engine/entity/entity_REF.gc | 2737 ++++++++++++++++ .../jak2/engine/game/game-info-h_REF.gc | 6 +- .../jak2/engine/game/settings-h_REF.gc | 8 +- .../jak2/engine/game/settings_REF.gc | 32 +- .../jak2/engine/geometry/path-h_REF.gc | 2 +- .../jak2/engine/geometry/vol-h_REF.gc | 2 +- .../reference/jak2/engine/geometry/vol_REF.gc | 4 +- .../jak2/engine/gfx/background/wind-h_REF.gc | 73 +- .../jak2/engine/gfx/hw/video-h_REF.gc | 22 +- .../jak2/engine/gfx/mood/mood_REF.gc | 97 +- .../particles/sparticle-launcher_REF.gc | 4 +- .../jak2/engine/gfx/texture/texture-h_REF.gc | 1308 ++++---- .../reference/jak2/engine/level/bsp-h_REF.gc | 66 +- .../jak2/engine/level/level-h_REF.gc | 146 +- .../jak2/engine/level/level-info_REF.gc | 215 +- .../jak2/engine/level/region-h_REF.gc | 2 +- .../reference/jak2/engine/math/euler-h_REF.gc | 8 +- .../jak2/engine/math/trigonometry_REF.gc | 138 +- .../jak2/engine/nav/nav-control-h_REF.gc | 2 +- .../jak2/engine/physics/trajectory_REF.gc | 16 +- .../reference/jak2/engine/ps2/pad_REF.gc | 2 +- .../reference/jak2/engine/sound/gsound_REF.gc | 51 +- .../jak2/engine/target/logic-target_REF.gc | 72 +- .../jak2/engine/ui/progress/progress-h_REF.gc | 6 +- .../reference/jak2/engine/ui/text-h_REF.gc | 2 +- .../reference/jak2/engine/ui/text_REF.gc | 8 +- .../reference/jak2/kernel/gkernel_REF.gc | 1 + .../jak2/levels/common/airlock_REF.gc | 2 +- 132 files changed, 13617 insertions(+), 3526 deletions(-) delete mode 100644 goal_src/jak1/examples/debug-jak2.gc create mode 100644 goal_src/jak2/dgos/pri.gd create mode 100644 goal_src/jak2/examples/debug-jak2.gc create mode 100644 test/decompiler/reference/jak2/engine/entity/entity_REF.gc diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index 3f1d7999ea..ab0364a0f7 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -134,6 +134,16 @@ Form* try_cast_simplify(Form* in, if (new_type == TypeSpec("meters")) { auto fc = get_goal_float_constant(in); + if (!fc && env.version == GameVersion::Jak2) { + auto ic = get_goal_integer_constant(in, env); + if (ic) { + ASSERT((s64)*ic == (s64)(s32)*ic); + float f; + memcpy(&f, &ic.value(), sizeof(float)); + fc = f; + } + } + if (fc) { double div = (double)*fc / METER_LENGTH; // GOOS will use doubles here if (div * METER_LENGTH == *fc) { @@ -1986,63 +1996,77 @@ void SimpleExpressionElement::update_from_stack_left_shift(const Env& env, FormStack& stack, std::vector* result, bool allow_side_effects) { - auto arg0_type = env.get_variable_type(m_expr.get_arg(0).var(), true); + TypeSpec arg0_type; + auto& arg0 = m_expr.get_arg(0); + if (arg0.is_var()) { + arg0_type = env.get_variable_type(m_expr.get_arg(0).var(), true); + auto type_info = env.dts->ts.lookup_type(arg0_type); + auto bitfield_info = dynamic_cast(type_info); + if (arg0_type.base_type() != "time-frame" && bitfield_info && m_expr.get_arg(1).is_int()) { + auto base = + pop_to_forms({m_expr.get_arg(0).var()}, env, pool, stack, allow_side_effects).at(0); + auto read_elt = pool.alloc_element(base, arg0_type); + BitfieldManip step(BitfieldManip::Kind::LEFT_SHIFT, m_expr.get_arg(1).get_int()); + auto other = read_elt->push_step(step, env.dts->ts, pool, env); + ASSERT(!other); // shouldn't be complete. + result->push_back(read_elt); + } else { + // try to turn this into a multiplication, if possible + if (m_expr.get_arg(1).is_int()) { + auto args = pop_to_forms({m_expr.get_arg(0).var()}, env, pool, stack, allow_side_effects); + int sa = m_expr.get_arg(1).get_int(); - auto type_info = env.dts->ts.lookup_type(arg0_type); - auto bitfield_info = dynamic_cast(type_info); - if (arg0_type.base_type() != "time-frame" && bitfield_info && m_expr.get_arg(1).is_int()) { - auto base = pop_to_forms({m_expr.get_arg(0).var()}, env, pool, stack, allow_side_effects).at(0); - auto read_elt = pool.alloc_element(base, arg0_type); - BitfieldManip step(BitfieldManip::Kind::LEFT_SHIFT, m_expr.get_arg(1).get_int()); - auto other = read_elt->push_step(step, env.dts->ts, pool, env); - ASSERT(!other); // shouldn't be complete. - result->push_back(read_elt); - } else { - // try to turn this into a multiplication, if possible - if (m_expr.get_arg(1).is_int()) { - auto args = pop_to_forms({m_expr.get_arg(0).var()}, env, pool, stack, allow_side_effects); - int sa = m_expr.get_arg(1).get_int(); + auto as_ba = args.at(0)->try_as_element(); + if (as_ba) { + BitfieldManip step(BitfieldManip::Kind::LEFT_SHIFT, m_expr.get_arg(1).get_int()); + auto other = as_ba->push_step(step, env.dts->ts, pool, env); + ASSERT(!other); // shouldn't be complete. + result->push_back(as_ba); + return; + } + + // somewhat arbitrary threshold to switch from multiplications to shift. + if (sa < 10) { + s64 multiplier = (s64(1) << sa); + + auto new_form = pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::MULTIPLICATION), args.at(0), + pool.form(SimpleAtom::make_int_constant(multiplier))); + result->push_back(new_form); + return; + } + + auto arg0_i = is_int_type(env, m_my_idx, m_expr.get_arg(0).var()); + auto arg0_u = is_uint_type(env, m_my_idx, m_expr.get_arg(0).var()); + if (!arg0_i && !arg0_u) { + auto new_form = pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::SHL), + pool.form(TypeSpec("int"), args.at(0)), + pool.form(m_expr.get_arg(1))); + result->push_back(new_form); + } else { + auto new_form = pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::SHL), args.at(0), + pool.form(m_expr.get_arg(1))); + result->push_back(new_form); + } - auto as_ba = args.at(0)->try_as_element(); - if (as_ba) { - BitfieldManip step(BitfieldManip::Kind::LEFT_SHIFT, m_expr.get_arg(1).get_int()); - auto other = as_ba->push_step(step, env.dts->ts, pool, env); - ASSERT(!other); // shouldn't be complete. - result->push_back(as_ba); return; } - // somewhat arbitrary threshold to switch from multiplications to shift. - if (sa < 10) { - s64 multiplier = (s64(1) << sa); - - auto new_form = pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::MULTIPLICATION), args.at(0), - pool.form(SimpleAtom::make_int_constant(multiplier))); - result->push_back(new_form); - return; - } - - auto arg0_i = is_int_type(env, m_my_idx, m_expr.get_arg(0).var()); - auto arg0_u = is_uint_type(env, m_my_idx, m_expr.get_arg(0).var()); - if (!arg0_i && !arg0_u) { - auto new_form = - pool.alloc_element(GenericOperator::make_fixed(FixedOperatorKind::SHL), - pool.form(TypeSpec("int"), args.at(0)), - pool.form(m_expr.get_arg(1))); - result->push_back(new_form); - } else { - auto new_form = pool.alloc_element( - GenericOperator::make_fixed(FixedOperatorKind::SHL), args.at(0), - pool.form(m_expr.get_arg(1))); - result->push_back(new_form); - } - - return; + update_from_stack_copy_first_int_2(env, FixedOperatorKind::SHL, pool, stack, result, + allow_side_effects); } + } else if ((arg0.is_sym_val("#f") || arg0.is_sym_ptr("#f")) && m_expr.get_arg(1).is_int()) { + auto new_form = pool.alloc_element( + GenericOperator::make_fixed(FixedOperatorKind::SHL), + pool.form(TypeSpec("int"), pool.form(m_expr.get_arg(0))), + pool.form(m_expr.get_arg(1))); + result->push_back(new_form); + return; - update_from_stack_copy_first_int_2(env, FixedOperatorKind::SHL, pool, stack, result, - allow_side_effects); + } else { + ASSERT(false); } } diff --git a/decompiler/analysis/label_types.cpp b/decompiler/analysis/label_types.cpp index f8ad6937b4..343d5fa206 100644 --- a/decompiler/analysis/label_types.cpp +++ b/decompiler/analysis/label_types.cpp @@ -81,6 +81,13 @@ void find_boxed(LabelDB* db, LinkedObjectFile* file) { // so it can actually share a label with something else. if (word.kind() == LinkedWord::TYPE_PTR && word.symbol_name() != "snowball-bank") { TypeSpec basic_type(word.symbol_name()); + if (word.symbol_name() == "array") { + const auto& type_word = + file->words_by_seg.at(lab.target_segment).at((lab.offset - 4 + 12) / 4); + if (type_word.kind() == LinkedWord::TYPE_PTR) { + basic_type.add_arg(TypeSpec(type_word.symbol_name())); + } + } const auto& existing = db->lookup(lab.name); if (existing.known) { if (existing.result_type.base_type() != basic_type.base_type()) { diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index 72f833eaee..ec745617a7 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -103,6 +103,7 @@ (define-extern loading-level kheap) (define-extern dma-sync (function pointer int int int)) +(define-extern unload (function string none)) @@ -2649,8 +2650,8 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype video-params (structure) - ((set-video-mode basic :offset-assert 0) - (reset-video-mode basic :offset-assert 4) + ((set-video-mode symbol :offset-assert 0) + (reset-video-mode symbol :offset-assert 4) (display-fbp int32 :offset-assert 8) (relative-x-scale float :offset 16) (display-dx int32 :offset-assert 20) @@ -3076,15 +3077,16 @@ (bucket-315 315) ;; effects (tex-all-warp 316) ;; tex (bucket-317 317) ;; mercneric - (bucket-318 318) ;; debug, no zbuf + + (debug-no-zbuf1 318) ;; debug, no zbuf (tex-all-map 319) ;; tex (bucket-320 320) ;; hud - (bucket-321 321) ;; hud letterbox, no zbuf + (screen-filter 321) ;; hud letterbox, no zbuf (bucket-322 322) ;; hud (bucket-323 323) ;; hud - (bucket-324 324) ;; debug - (debug-no-zbuf 325) ;; debug - (debug-unknown-326 326) + (debug2 324) ;; debug + (debug-no-zbuf2 325) ;; debug + (debug3 326) ) ;; TODO - names in `render` menu @@ -5710,6 +5712,31 @@ (movie0 16) ;; 0x10000 (movie1 17) ;; 0x20000 (movie2 18) ;; 0x40000 + + (tm19) + (tm20) + (tm21) + (tm22) + (tm23) + (tm24) + (tm25) + (tm26) + (tm27) + (tm28) + (tm29) + (tm30) + (tm31) + + ) + +(defenum load-buffer-mode + :type uint32 + (small-edge 0) + (small-center 1) + (medium 2) + (large 3) + (borrow 4) + (ten 10) ) (deftype level-load-info (basic) @@ -5723,7 +5750,7 @@ (taskname symbol :offset 20) (other-name-1 symbol :offset 24) (packages pair :offset-assert 32) ;; guess on type - (memory-mode uint32 :offset-assert 36) + (memory-mode load-buffer-mode :offset-assert 36) (music-bank symbol :offset-assert 40) (ambient-sounds symbol :offset-assert 44) (sound-reverb float :offset-assert 48) @@ -5841,7 +5868,7 @@ (vis-bits pointer :offset-assert 2392) (all-visible? symbol :offset-assert 2396) (force-all-visible? symbol :offset-assert 2400) - (linking basic :offset-assert 2404) + (linking symbol :offset-assert 2404) (vis-info level-vis-info 8 :offset-assert 2408) (vis-self-index int32 :offset-assert 2440) (vis-adj-index int32 :offset-assert 2444) @@ -5859,7 +5886,7 @@ (display-start-time time-frame :offset-assert 4552) (memory-mask uint32 :offset-assert 4560) (task-mask task-mask :offset-assert 4564) - (tfrag-gs-test uint64 :offset-assert 4568) + (tfrag-gs-test gs-test :offset-assert 4568) (texture-dirty-masks texture-mask 10 :inline :offset-assert 4576) (texture-mask texture-mask 18 :inline :offset-assert 4736) (sky-mask texture-mask :inline :offset-assert 5024) @@ -5892,12 +5919,12 @@ ;; Failed to read fields. (:methods (deactivate (_type_) _type_ 9) - (level-method-10 () none 10) ;; (is-object-visible? (_type_ int) symbol 10) + (is-object-visible? (_type_ int) symbol 10) (level-method-11 () none 11) ;; (add-irq-to-tex-buckets! (_type_) none 11) (unload! (_type_) _type_ 12) (bsp-name (_type_) symbol 13) (compute-memory-usage (_type_ object) memory-usage-block 14) - (point-in-boxes? (_type_ vector) symbol 15) + (inside-boxes-check (_type_ vector) symbol 15) (level-method-16 () none 16) ;; (update-vis! (_type_ level-vis-info uint uint) symbol 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) @@ -5968,21 +5995,21 @@ (level-get-with-status (_type_ symbol) level 10) (get-level-by-heap-ptr-and-status (_type_ pointer symbol) level 11) ;; (level-get-for-use (_type_ symbol symbol) level 12) - (activate-levels! (_type_) int 13) ;; (debug-print-entities (_type_ symbol type) none 13) - (level-group-method-14 () none 14) + (activate-levels! (_type_) int 13) + (debug-print-entities (_type_ symbol type) none 14) (debug-draw-actors (_type_ symbol) none 15) (assign-draw-indices (_type_) none 16) ;; (level-update (_type_) int 16) (actors-update (_type_) none 17) ;; (level-get-target-inside (_type_) level 17) - (level-group-method-18 () none 18) ;; (alloc-levels! (_type_ symbol) int 18) + (level-group-method-18 (_type_) none 18) ;; (alloc-levels! (_type_ symbol) int 18) (level-update (_type_) none 19) ;; (level-get-target-inside (_type_) level 20) ;; (art-group-get-by-name (_type_ string) art-group 20) (alloc-levels-if-needed (_type_ symbol) none 21) - (load-commands-set! (_type_ pair) none 22) ;; (update-vis-volumes (_type_) none 22) - (art-group-get-by-name (_type_ string (pointer uint32)) art-group 23) ;; (update-vis-volumes-from-nav-mesh (_type_) none 23) - (load-command-get-index (_type_ symbol int) pair 24) ;; (print-volume-sizes (_type_) none 24) - (level-group-method-25 () none 25) ;; (level-status (_type_ symbol) symbol 25) - (level-group-method-26 () none 26) - (level-group-method-27 () none 27) + (load-commands-set! (_type_ pair) none 22) + (art-group-get-by-name (_type_ string (pointer uint32)) art-group 23) + (alt-load-command-get-index (_type_ symbol int) pair 24) ;; (print-volume-sizes (_type_) none 24) + (update-vis-volumes (_type_) none 25) ;; (level-status (_type_ symbol) symbol 25) + (update-vis-volumes-from-nav-mesh (_type_) none 26) + (print-volume-sizes (_type_) none 27) (level-status (_type_ symbol) symbol 28) (load-in-progress? (_type_) symbol 29) (level-get-most-disposable (_type_) level 30) @@ -7189,8 +7216,8 @@ (process-mask process-mask) (unknown-int32-00 int32 :offset-assert 8) (language language-enum :offset 16) - (unknown-int32-01 int32 :offset-assert 24) - (unknown-int32-02 int32 :offset-assert 28) + (display-dx int32 :offset-assert 24) ;; video mode related, 0 for both ntsc/pal + (display-dy int32 :offset-assert 28) ;; video mode related, 8 for ntsc, 24 pal (vibration symbol :offset 32) (play-hints symbol :offset 36) (movie (pointer process) :offset 40) @@ -7200,7 +7227,7 @@ (ambient (pointer process) :offset-assert 56) (video-mode symbol) (aspect-ratio symbol :offset-assert 64) - (unknown-uint32-00 uint32 :offset 68) + (use-progressive-scan symbol :offset 68) (auto-save symbol :offset 72) (bg-r float :offset-assert 76) (bg-g float) @@ -7274,7 +7301,7 @@ (movie-skip-frame float) (allow-blackout symbol) (race-minimap int32 :offset-assert 364) - (extra-bank symbol) + (extra-bank pair) (beard symbol) (ignore-target symbol) (subtitle-language language-enum) @@ -8161,12 +8188,13 @@ :size-assert #x20 :flag-assert #x1400000020 (:methods - (drawable-region-prim-method-17 () none 17) + (debug-draw-region (_type_ int) none 17) (drawable-region-prim-method-18 () none 18) (drawable-region-prim-method-19 () none 19) ) ) +(declare-type drawable-inline-array-region-prim drawable) (deftype drawable-tree-region-prim (drawable-tree) ((name basic :offset 8) @@ -11623,12 +11651,12 @@ (want-display-level (_type_ symbol symbol) int 13) (want-vis-level (_type_ symbol) none 14) (want-force-vis (_type_ symbol symbol) int 15) - (execute-command (_type_ pair object) none 16) + (want-force-inside (_type_ symbol symbol) none 16) (execute-commands-up-to (_type_ float) none 17) (backup-load-state-and-set-cmds (_type_ pair) int 18) (restore-load-state-and-cleanup (_type_) int 19) (restore-load-state (_type_) int 20) - (set-force-inside! (_type_ symbol symbol) none 21) + (add-borrow-levels (_type_) none 21) ) ) @@ -11885,7 +11913,7 @@ (game-info-method-18 () none 18) (get-current-continue-point (_type_) continue-point 19) (get-continue-by-name (_type_ string) continue-point 20) - (set-continue! (_type_ basic symbol) continue-point 21) + (set-continue! (_type_ basic object) continue-point 21) (game-info-method-22 () none 22) (game-info-method-23 () none 23) (game-info-method-24 () none 24) @@ -16887,7 +16915,9 @@ (defenum texture-page-flag :type uint16 - :bitfield #t) + :bitfield #t + (alpha-enable 0) + ) (deftype bsp-header (drawable) ( @@ -16919,12 +16949,12 @@ ;; 0 (maybe current-leaf-idx?) 128 (texture-flags texture-page-flag 10 :offset 130) ;; 0 (maybe padding) 150 - ;; 0 (was boxes, current back flags?, byte?) 152 + (require-force-inside uint8 :offset 152) (ambients symbol :offset 156) ;; now just #t? (subdivide-close float :offset 160) (subdivide-far float :offset-assert 164) (race-meshes (array entity-race-mesh) :offset-assert 168) - ;; pointer to table of sorted floats 172 + (actor-birth-order (pointer uint32) :offset 172) (light-hash light-hash :offset 176) (nav-meshes (array entity-nav-mesh) :offset-assert 180) (actor-groups (array actor-group) :offset-assert 184) @@ -16934,13 +16964,19 @@ ;; 200 is some array ;; 204 is maybe that array's length ;; 216 is a vector array - ;; (vec-array (pointer vector) :offset 216) ; TODO see - `update-visible` hits assertion + ;; (vec-array (pointer vector) :offset 216) ; TODO see - `update-visible` hits assertion (region-tree drawable-tree-region-prim :offset 252) ; (actor-birth-order (pointer uint32) :offset-assert 172) ; (split-box-indices (pointer uint16) :offset-assert 176) - (unk-data-8 uint32 55 :offset 180) + (unk-data uint32 18 :offset 180) + (tfrag-texture-masks-array texture-masks-array) + + (tmask0 texture-masks-array :offset 272) + (tmask2 texture-masks-array :offset 280) + + (end uint8 :offset 399) ) :method-count-assert 19 :size-assert #x190 @@ -18169,10 +18205,10 @@ (defenum entity-perm-status :bitfield #t :type uint16 - (bit-0 0) + (bit-0 0) ;; blocks birth (bit-1 1) (dead 2) - (bit-3 3) + (no-kill 3) (bit-4 4) (bit-5 5) (subtask-complete 6) @@ -18203,7 +18239,7 @@ :size-assert #x10 :flag-assert #xa00000010 (:methods - (entity-perm-method-9 () none 9) ;; (update-perm! (_type_ symbol entity-perm-status) _type_ 9) + (update-perm! (_type_ symbol entity-perm-status) _type_ 9) ) ) @@ -18228,7 +18264,7 @@ :flag-assert #xa00000040 ;; Failed to read fields. (:methods - (entity-links-method-9 () none 9) ;; (birth? (_type_ vector) symbol 9) + (birth? (_type_ vector) symbol 9) ) ) @@ -18258,11 +18294,11 @@ :flag-assert #x1b00000034 ;; Failed to read fields. (:methods - (entity-method-22 (_type_) _type_ 22) ;; (birth! (_type_) _type_ 22) - (kill! (_type_ ) _type_ 23) ;; (kill! (_type_) _type_ 23) - (entity-method-24 () none 24) ;; (add-to-level! (_type_ level-group level actor-id) none 24) - (entity-method-25 () none 25) ;; (remove-from-level! (_type_ level-group) _type_ 25) - (entity-method-26 () none 26) ;; (get-level (_type_) level 26) + (birth! (_type_) _type_ 22) + (kill! (_type_) _type_ 23) + (add-to-level! (_type_ level-group level actor-id) none 24) + (remove-from-level! (_type_ level-group) _type_ 25) + (get-level (_type_) level 26) ) ) @@ -18310,17 +18346,18 @@ (:methods (next-actor (_type_) entity-actor 27) (prev-actor (_type_) entity-actor 28) - (entity-actor-method-29 () none 29) ;; (debug-print (_type_ symbol type) none 29) - (entity-actor-method-30 (_type_ entity-perm-status symbol) none 30) ;; (dummy-30 (_type_ entity-perm-status symbol) none 30) + (debug-print (_type_ symbol type) none 29) + (toggle-status (_type_ entity-perm-status symbol) none 30) (entity-actor-method-31 (_type_ vector vector vector object float) nav-mesh 31) (entity-actor-method-32 (_type_ vector vector nav-poly float) nav-poly 32) ) ) (deftype actor-reference (structure) - ((actor basic :offset-assert 0) + ((actor entity :offset-assert 0) (id uint32 :offset-assert 4) ) + :pack-me :method-count-assert 9 :size-assert #x8 :flag-assert #x900000008 @@ -19948,12 +19985,12 @@ (progress-method-24 () none 24) ;; (draw-fuel-cell-screen (_type_ int) none 24) (progress-method-25 () none 25) ;; (draw-money-screen (_type_ int) none 25) (progress-method-26 () none 26) ;; (draw-buzzer-screen (_type_ int) none 26) - (progress-method-27 () none 27) ;; (draw-notice-screen (_type_) none 27) + (can-go-back? (_type_) symbol 27) ;; (draw-notice-screen (_type_) none 27) (progress-method-28 () none 28) ;; (draw-options (_type_ int int float) none 28) (progress-method-29 () none 29) ;; (respond-common (_type_) none 29) (progress-method-30 () none 30) ;; (respond-progress (_type_) none 30) (progress-method-31 () none 31) ;; (respond-memcard (_type_) none 31) - (progress-method-32 () none 32) ;; (can-go-back? (_type_) symbol 32) + (progress-method-32 () none 32) ) ) @@ -20583,7 +20620,7 @@ :flag-assert #x1b00000024 (:methods (new (symbol type process symbol float entity symbol) _type_ 0) - (path-control-method-9 () none 9) ;; (dummy-9 (_type_) none 9) + (debug-draw (_type_) none 9) (path-control-method-10 () none 10) ;; (eval-path-curve-div! (_type_ vector float symbol) vector 10) (path-control-method-11 () none 11) ;; (get-random-point (_type_ vector) vector 11) (path-control-method-12 () none 12) ;; (TODO-RENAME-12 (_type_ vector float) vector 12) @@ -21061,7 +21098,7 @@ ;; Failed to read fields. (:methods ;; (new (symbol type collide-shape int float) _type_ 0) - (nav-control-method-9 () none 9) ;; (debug-draw (_type_) none 9) + (debug-draw (_type_) none 9) (point-in-bounds? "Is the given point ([[vector]]) outside of the [[nav-mesh]]'s `bounds` [[sphere]] radius" (_type_ vector) symbol 10) @@ -21649,7 +21686,7 @@ ;; subdivide ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern *merc-global-stats* object) ;; merc-global-stats +(define-extern *merc-global-stats* merc-global-stats) ;; (define-extern clear-tr-stat function) ;; (function tr-stat none) (define-extern *stat-string-tfrag* string) (define-extern *stat-string-tfrag-scissor* string) @@ -21659,14 +21696,14 @@ ;; (define-extern update-subdivide-settings! function) ;; (function subdivide-settings math-camera int none) (define-extern *subdivide-settings* subdivide-settings) ;; (define-extern set-tfrag-dists! function) ;; (function tfrag-dists none) -;; (define-extern *terrain-context* object) ;; terrain-context -;; (define-extern GSH_ENABLE object) ;; symbol -;; (define-extern GSH_BUCKET object) ;; bucket-id -;; (define-extern GSH_WHICH_STAT object) ;; int -;; (define-extern GSH_MAX_DISPLAY object) ;; basic -;; (define-extern GSH_TIME object) ;; int +(define-extern *terrain-context* terrain-context) +(define-extern GSH_ENABLE symbol) +(define-extern GSH_BUCKET bucket-id) +(define-extern GSH_WHICH_STAT int) +(define-extern GSH_MAX_DISPLAY basic) +(define-extern GSH_TIME int) (define-extern *perf-stats* perf-stat-array) -;; (define-extern *gomi-stats-hack* object) ;; (inline-array perf-stat) +(define-extern *gomi-stats-hack* (inline-array perf-stat)) (define-extern start-perf-stat-collection (function none)) (define-extern end-perf-stat-collection (function none)) (define-extern print-perf-stats (function none)) @@ -24630,8 +24667,8 @@ ;; load-state ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; (define-extern *display-load-commands* object) ;; symbol -(define-extern *backup-load-state* load-state) ;; +(define-extern *display-load-commands* symbol) +(define-extern *backup-load-state* load-state) (define-extern *load-state* load-state) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -24808,12 +24845,12 @@ (define-extern add-bsp-drawable (function bsp-header level symbol display-frame none)) (define-extern *login-state* login-state) (define-extern *print-login* symbol) -(define-extern load-buffer-resize (function level pointer none)) +(define-extern load-buffer-resize (function level dgo-header none)) (define-extern level-update-after-load (function level login-state level)) (define-extern bg (function symbol none)) (define-extern play (function symbol symbol int)) (define-extern play-boot (function none)) -;; (define-extern update-sound-banks function) ;; (function int) +(define-extern update-sound-banks (function int)) (define-extern show-level (function symbol int)) (define-extern *default-level* level) @@ -25629,7 +25666,7 @@ :flag-assert #xc0000061c (:methods (new (symbol type process-drawable) _type_ 0) - (vol-control-method-9 (_type_) none 9) + (debug-draw (_type_) none 9) (vol-control-method-10 (_type_ plane) symbol 10) (should-display? "Returns true/false if the volume's marks should be displayed" @@ -26003,7 +26040,7 @@ ;; (define-extern cspace-children function) ;; (function process-drawable int pair) ;; (define-extern cspace-inspect-tree function) ;; (function process-drawable cspace int int object object) (define-extern execute-math-engine (function int)) -;; (define-extern draw-joint-axes function) +(define-extern draw-joint-axes (function process-drawable none)) ;; (define-extern draw-root function) ;; (define-extern empty-state state) ;; (state process) (define-extern process-drawable-art-error (state string process-drawable)) @@ -26244,7 +26281,7 @@ ;; (define-extern *lightning-globals* object) ;; (define-extern *lightning* object) (define-extern lightning-draw-all (function none)) -;; (define-extern unlink-lightning-spec-by-heap function) +(define-extern unlink-lightning-spec-by-heap (function kheap none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; carry-h ;; @@ -27874,11 +27911,11 @@ (define-extern sphere-in-view-frustum? (function sphere symbol)) (define-extern line-in-view-frustum? (function vector vector symbol)) (define-extern vis-cull (function int symbol)) -;; (define-extern vis-cull-debug function) +(define-extern vis-cull-debug (function work-area int symbol)) (define-extern error-sphere (function drawable-error string none)) (define-extern *edit-instance* string) (define-extern *instance-mem-usage* memory-usage-block) -;; (define-extern find-instance-by-name-level function) +(define-extern find-instance-by-name-level (function string level prototype-bucket)) (define-extern find-instance-by-name (function string prototype-bucket)) ;; (define-extern prototypes-game-visible-set! function) ;; (define-extern find-instance-by-index function) ;; (function type int bsp-header prototype-bucket) @@ -27945,12 +27982,13 @@ ;; video ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +(define-extern *video-mode* int) ;; (define-extern set-video-mode function) ;; (function symbol none) (define-extern get-video-mode (function symbol)) -;; (define-extern set-aspect-ratio function) ;; (function symbol none) -;; (define-extern get-aspect-ratio function) ;; (function symbol) -;; (define-extern set-progressive-scan function) -;; (define-extern get-progressive-scan function) +(define-extern set-aspect-ratio (function symbol none)) +(define-extern get-aspect-ratio (function symbol)) +(define-extern set-progressive-scan (function symbol none)) +(define-extern get-progressive-scan (function symbol)) (define-extern *smode2* int) (define-extern set-graphics-mode (function none)) @@ -28073,10 +28111,9 @@ |# -#| (deftype debug-actor-info (basic) ((name basic :offset-assert 4) - (handle uint64 :offset-assert 8) + (handle handle :offset-assert 8) (process basic :offset-assert 16) (pid int32 :offset-assert 20) ) @@ -28084,7 +28121,6 @@ :size-assert #x18 :flag-assert #x900000018 ) -|# (define-extern *spawn-actors* symbol) (define-extern *compact-actors* symbol) @@ -28092,38 +28128,38 @@ (define-extern entity-by-name (function string entity)) (define-extern entity-by-type (function type entity-actor)) (define-extern entity-by-aid (function uint entity)) -;; (define-extern entity-actor-from-level-name function) +(define-extern entity-actor-from-level-name (function level entity-actor)) (define-extern entity-nav-mesh-by-aid (function actor-id entity-nav-mesh)) (define-extern nav-mesh-from-res-tag (function entity symbol int nav-mesh)) -;; (define-extern entity-by-meters function) ;; (function float float float entity-actor) -;; (define-extern process-by-ename function) ;; (function string process) -;; (define-extern entity-process-count function) ;; (function symbol int) -;; (define-extern entity-count function) ;; (function int) -;; (define-extern entity-remap-names function) ;; (function pair none) -;; (define-extern process-status-bits function) ;; (function process symbol none) -;; (define-extern process-entity-set! function) +(define-extern entity-by-meters (function float float float entity-actor)) +(define-extern process-by-ename (function string process)) +(define-extern entity-process-count (function symbol int)) +(define-extern entity-count (function int)) +(define-extern entity-remap-names (function pair none)) +(define-extern process-status-bits (function process symbol none)) +(define-extern process-entity-set! (function process entity entity)) (define-extern process-task-mask (function process task-mask)) -;; (define-extern update-actor-vis-box function) ;; (function process-drawable vector vector none) -;; (define-extern expand-bounding-box function) -;; (define-extern expand-vis-box-with-point function) ;; (function entity vector none) -;; (define-extern *debug-actor-info* debug-actor-info) -;; (define-extern *pid-string* object) +(define-extern update-actor-vis-box (function process-drawable vector vector none)) +(define-extern expand-bounding-box (function vector vector vector vector none)) +(define-extern expand-vis-box-with-point (function entity vector none)) +(define-extern *debug-actor-info* debug-actor-info) +(define-extern *pid-string* string) (define-extern debug-actor (function string none)) -;; (define-extern draw-actor-marks function) -;; (define-extern init-entity function) ;; (function process entity-actor none) +(define-extern draw-actor-marks (function process none)) +(define-extern init-entity (function process entity-actor none)) ;; (define-extern entity-deactivate-handler function) ;; (function process entity-actor none) -;; (define-extern check-for-rougue-process function) -;; (define-extern process-drawable-scale-from-entity! function) +(define-extern check-for-rougue-process (function process int int level none)) +(define-extern process-drawable-scale-from-entity! (function process-drawable entity none)) (define-extern process-drawable-from-entity! (function process-drawable entity-actor none)) ;; (define-extern reset-actors (function symbol none)) (define-extern reset-cameras (function none)) -(define-extern entity-birth-no-kill (function entity none)) ;; -;; (define-extern entity-task-complete-on function) ;; (function entity none) -;; (define-extern entity-task-complete-off function) ;; (function entity none) +(define-extern entity-birth-no-kill (function entity process)) +(define-extern entity-task-complete-on (function entity none)) +(define-extern entity-task-complete-off (function entity none)) (define-extern process-entity-status! (function process entity-perm-status symbol int)) ;; -;; (define-extern find-nearest-entity function) -;; (define-extern entity-speed-test function) ;; (function string none) -;; (define-extern dump-entity-remap function) +(define-extern find-nearest-entity (function vector type entity)) +(define-extern entity-speed-test (function string none)) +(define-extern dump-entity-remap (function object object none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; path ;; @@ -28595,7 +28631,7 @@ (define-extern task-node-close! (function game-task none)) (define-extern task-node-open? (function game-task symbol)) (define-extern task-node-open! (function game-task none)) -;; (define-extern task-node-reset function) +(define-extern task-node-reset (function symbol none)) ;; (define-extern task-node-dump function) ;; (define-extern fail-mission-init-by-other function) (define-extern task-manager-init-by-other (function game-task-node-info object none)) @@ -28917,7 +28953,7 @@ ;; (define-extern progress-init-by-other function) ;; (function none :behavior progress) ;; (define-extern set-ring-position function) (define-extern activate-progress (function process symbol none)) -;; (define-extern deactivate-progress function) ;; (function none) +(define-extern deactivate-progress (function none)) (define-extern hide-progress-screen (function none)) (define-extern progress-allowed? (function symbol)) ;; (define-extern menu-update-purchase-secrets function) @@ -29462,7 +29498,7 @@ ;; (define-extern init-viewer function) ;; (function string object :behavior viewer) ;; (define-extern init-viewer-for-other function) ;; (function string vector none :behavior viewer) ;; (define-extern add-a-bunch function) ;; (function string int int float symbol) -;; (define-extern birth-viewer function) ;; (function process entity-actor object) +(define-extern birth-viewer (function process entity-actor object)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; part-tester ;; diff --git a/decompiler/config/jak2/anonymous_function_types.jsonc b/decompiler/config/jak2/anonymous_function_types.jsonc index 8365b52a5f..04a4a9a535 100644 --- a/decompiler/config/jak2/anonymous_function_types.jsonc +++ b/decompiler/config/jak2/anonymous_function_types.jsonc @@ -325,5 +325,11 @@ [84, "(function script-context meters)"], [85, "(function script-context object)"], [15, "(function script-context pair :behavior process)"] // NOTE - an interesting one - ] + ], + "entity": [ + [16, "(function process none)"], + [11, "(function process none)"], + [59, "(function process none)"], + [56, "(function process-drawable none)"] + ] } diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 28698e26c8..b3b28a16e0 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -117,7 +117,6 @@ // "reset-target-tracking", "(anon-function 1 target)", - "find-nearest-entity", "target-land-effect", "(method 12 effect-control)", "(method 11 effect-control)", @@ -212,7 +211,13 @@ "(method 28 editable)", "execute-select", "(method 29 editable)", - "(method 25 editable)" + "(method 25 editable)", + "(method 17 load-state)", + "(method 12 level)", + "bg", + "update-sound-banks", + "entity-remap-names" + ], // If format is used with the wrong number of arguments, @@ -263,7 +268,9 @@ "point-poly-distance-min": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], "(method 34 nav-mesh)": [1, 2, 3, 7], "(method 35 nav-mesh)": [2, 4], - "(method 18 mysql-nav-graph)": [0, 1, 3, 4, 5, 9] + "(method 18 mysql-nav-graph)": [0, 1, 3, 4, 5, 9], + "draw-actor-marks": [8], + "find-nearest-entity": [7, 9, 10, 11, 12, 13, 14] }, // Sometimes the game might use format strings that are fetched dynamically, diff --git a/decompiler/config/jak2/stack_structures.jsonc b/decompiler/config/jak2/stack_structures.jsonc index 633f1b8c6d..626efc9ce4 100644 --- a/decompiler/config/jak2/stack_structures.jsonc +++ b/decompiler/config/jak2/stack_structures.jsonc @@ -776,6 +776,9 @@ [16, "vector"], [32, "vector"] ], + "(method 19 load-state)": [[16, ["inline-array", "level-buffer-state", 6]]], + "(method 17 load-state)": [[16, "script-context"]], + "(method 26 level-group)": [[64, "vector"], [80, "vector"]], // placeholder "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 7a56649c21..626c3eef3b 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -2179,6 +2179,92 @@ "(anon-function 54 script)": [[66, "v1", "entity-actor"]], "(anon-function 53 script)": [[40, "v1", "entity-actor"]], "(anon-function 71 script)": [[4, "v1", "symbol"]], + "command-get-float": [ + [20, "gp", "bfloat"] + ], + "command-get-int": [ + [17, "gp", "bfloat"] + ], + "letterbox": [ + [[27, 33], "v1", "dma-packet"] + ], + "blackout": [ + [[18, 23], "v1", "dma-packet"] + ], + "(method 12 level)": [ + [[182, 185], "a0", "texture-anim-array"], + [343, "a0", "symbol"], + [93, "t9", "(function level none)"], + [[314, 322], "a1", "type"] + ], + "bg": [ + [47, "a0", "symbol"] + ], + "(method 10 load-state)": [ + [436, "v1", "level"], + [442, "v1", "level"] + ], + "(method 14 level-group)": [ + [[53, 61], "a0", "entity-actor"] + ], + "(method 27 level-group)": [ + [[112, 122], "s3", "entity-actor"], + ["_stack_", 32, "vector"], + ["_stack_", 36, "vector"] + ], + "expand-vis-box-with-point":[ + [[10, 40], "v1", "(inline-array vector)"] + ], + "check-for-rougue-process": [ + [[103,115], "v1", "part-tracker"], + [[126, 140], "v1", "part-spawner"], + [[153, 169], "v1", "process-drawable"], + [[178, 194], "v1", "process-drawable"] + ], + "process-drawable-scale-from-entity!": [ + [15, "v1", "vector"] + ], + "reset-actors": [ + [161, "s3", "(function level symbol none)"] + ], + "process-status-bits": [ + [[12, 58], "s3", "process-drawable"] + ], + "(method 26 level-group)": [ + [134, "v0", "(pointer actor-group)"], + // [135, "s2", "actor-group"], + // [140, "v1", "(pointer uint32)"], + [37, "f0", "float"], + [40, "f0", "float"], + [83, "f0", "float"], + [86, "f0", "float"], + ["_stack_", 48, "res-tag"], + ["_stack_", 20, "vector"], + ["_stack_", 24, "vector"] + ], + "set-graphics-mode": [ + [[0, 100], "gp", "gs-bank"] + ], + "(method 3 entity-nav-mesh)": [ + [7, "t9", "(function object object)"] + ], + "draw-actor-marks": [ + [20, "gp", "part-spawner"], + [[29, 273], "gp", "process-drawable"], + ["_stack_", 20, "(pointer int32)"] + ], + "(method 15 level-group)": [ + [[233, 252], "s0", "process-drawable"], + [[281, 427], "s5", "process-drawable"], + [[627, 631], "a0", "drawable-region-prim"], + [625, "a0", "drawable-inline-array-region-prim"], + [639, "a0", "drawable-inline-array-region-prim"], + [688, "a0", "drawable-inline-array-region-prim"], + [705, "a0", "drawable-inline-array-region-prim"], + + [[690, 694], "a0", "drawable-region-prim"] + ], + // placeholder "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index b43bc344a8..46d45c3361 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -995,5 +995,73 @@ "s1-2": ["nav-edge", "mysql-nav-edge"], "s1-4": ["nav-visnode", "mysql-nav-visnode"] } + }, + "(method 18 level)": { + "vars": { + "s5-0" :"mem-mode", + "v1-5":"slot-in-borrow-from-lev", + "a0-4":"borrow-from-lev-idx", + "a1-3":"maybe-borrow-from-lev", + "a2-5":"check-slot-idx", + "a2-7":"found-borrow", + "a1-4":"borrow-from-lev", + "s2-0":"memory-unused?", + "v1-17":"bits-to-use", + "s4-0":"heap-size", + "s3-0":"offset-in-level-heap" + } + }, + "level-update-after-load": { + "args": ["lev", "lstate"], + "vars": { + "s3-0":"drawable-trees", + "s5-0":"start-time", + "v1-5":"current-time", + "s1-0":"login-state-pos", + "s2-0":"current-tree", + "s1-1":"tree-array-idx", + "v1-40":"art-group-array-idx", + "s2-1":"current-ag", + "s0-0":"current-array", + "s2-3":"proto-array", + "s0-1":"protos", + "sv-32":"proto", + "sv-48":"geom-idx", + "a0-56":"geom", + "s1-2":"proto2-idx", + "v1-134":"proto2", + "s0-2":"envmap-shader", + "v0-7":"envmap-tex", + "v1-155":"lev-bsp", + "f0-6":"close-dist", + "f1-3":"far-dist", + "v1-122":"borrower-idx", + "a0-104":"borrower-heap", + "v1-225":"end-time" + } + }, + + "(method 10 load-state)": { + "vars": { + "v1-0":"discarded-level", + "s5-0":"most-recent-load-order", + "s4-0":"unload-attempt", + "a0-2":"unload-idx", + "a1-0":"unload-candidate-idx", + "a2-3":"unload-candidate-lev", + "a3-5":"still-wanted", + "s3-0":"lev-to-unload", + "a0-10":"all-levels-inactive", + "s5-1":"no-levels-at-all", + "v1-8":"desired-levels", + "a0-17":"want-lev-idx", + "s4-1":"want-lev-idx-to-load", + "s3-1":"new-lev", + "s5-2":"want-lev-i", + "s4-2":"lev-i", + "s3-2":"lev", + "v1-122":"lev-for-vis", + "a0-53":"num-vis-levs" + } } } diff --git a/decompiler/config/jak2_ntsc_v1.jsonc b/decompiler/config/jak2_ntsc_v1.jsonc index 873b2858fb..9e543fc4cc 100644 --- a/decompiler/config/jak2_ntsc_v1.jsonc +++ b/decompiler/config/jak2_ntsc_v1.jsonc @@ -7,7 +7,7 @@ // if you want to filter to only some object names. // it will make the decompiler much faster. - "allowed_objects": [], + "allowed_objects": ["level", "bsp", "entity", "process-drawable"], "banned_objects": ["effect-control", "time-of-day"], //////////////////////////// diff --git a/decompiler/types2/ForwardProp.cpp b/decompiler/types2/ForwardProp.cpp index 885ea0420c..df8877a7ab 100644 --- a/decompiler/types2/ForwardProp.cpp +++ b/decompiler/types2/ForwardProp.cpp @@ -2463,6 +2463,21 @@ void CallOp::propagate_types2(types2::Instruction& instr, out_types[Register(Reg::GPR, Reg::V0)]->type = TP_Type::make_from_ts(in_type.last_arg()); + if (in_tp.kind == TP_Type::Kind::NON_OBJECT_NEW_METHOD && + in_type.last_arg() == TypeSpec("array") && input_types[Register(Reg::GPR, arg_regs[2])]) { + // array new: + auto& a2 = input_types[Register(Reg::GPR, arg_regs[2])]; + auto& a1 = input_types[Register(Reg::GPR, arg_regs[1])]; + + // the is_symbol() check here makes sure it's a symbol known at compile time. + if (a2->type && a2->type->kind == TP_Type::Kind::TYPE_OF_TYPE_NO_VIRTUAL && a1->type && + a1->type->is_symbol()) { + out_types[Register(Reg::GPR, Reg::V0)]->type = TP_Type::make_from_ts(TypeSpec( + "array", + {input_types[Register(Reg::GPR, arg_regs[2])]->type->get_type_objects_typespec()})); + } + } + // we can also update register usage here. m_read_regs.clear(); m_arg_vars.clear(); diff --git a/decompiler/util/TP_Type.cpp b/decompiler/util/TP_Type.cpp index 108411fc76..601e8f0a9d 100644 --- a/decompiler/util/TP_Type.cpp +++ b/decompiler/util/TP_Type.cpp @@ -82,6 +82,8 @@ std::string TP_Type::print() const { return ""; case Kind::GET_ART_BY_NAME_METHOD: return ""; + case Kind::SYMBOL: + return fmt::format("", m_str); case Kind::INVALID: default: ASSERT(false); @@ -137,6 +139,8 @@ bool TP_Type::operator==(const TP_Type& other) const { return m_pcpyud == other.m_pcpyud && m_ts == other.m_ts; case Kind::PCPYUD_BITFIELD_AND: return m_pcpyud == other.m_pcpyud && m_ts == other.m_ts; + case Kind::SYMBOL: + return m_str == other.m_str; case Kind::LABEL_ADDR: case Kind::ENTER_STATE_FUNCTION: case Kind::RUN_FUNCTION_IN_PROCESS_FUNCTION: @@ -213,6 +217,8 @@ TypeSpec TP_Type::typespec() const { return TypeSpec("function"); case Kind::GET_ART_BY_NAME_METHOD: return m_ts; + case Kind::SYMBOL: + return TypeSpec("symbol"); case Kind::INVALID: default: ASSERT(false); diff --git a/decompiler/util/TP_Type.h b/decompiler/util/TP_Type.h index 56a105a711..476397ba20 100644 --- a/decompiler/util/TP_Type.h +++ b/decompiler/util/TP_Type.h @@ -43,6 +43,7 @@ class TP_Type { RUN_FUNCTION_IN_PROCESS_FUNCTION, SET_TO_RUN_FUNCTION, GET_ART_BY_NAME_METHOD, + SYMBOL, INVALID } kind = Kind::UNINITIALIZED; TP_Type() = default; @@ -77,6 +78,7 @@ class TP_Type { case Kind::SET_TO_RUN_FUNCTION: case Kind::GET_ART_BY_NAME_METHOD: case Kind::NON_OBJECT_NEW_METHOD: + case Kind::SYMBOL: return false; case Kind::UNINITIALIZED: case Kind::OBJECT_NEW_METHOD: @@ -100,6 +102,7 @@ class TP_Type { } bool is_format_string() const { return kind == Kind::FORMAT_STRING; } bool can_be_format_string() const { return is_format_string() || is_constant_string(); } + bool is_symbol() const { return kind == Kind::SYMBOL; } int get_format_string_arg_count() const { ASSERT(is_format_string()); @@ -176,6 +179,13 @@ class TP_Type { return result; } + static TP_Type make_symbol(const std::string& name) { + TP_Type result; + result.kind = Kind::SYMBOL; + result.m_str = name; + return result; + } + static TP_Type make_uninitialized() { TP_Type result; result.kind = Kind::UNINITIALIZED; diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index 3774ccb5ed..f1f17c56ca 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -88,8 +88,11 @@ void OpenGLRenderer::init_bucket_renderers_jak2() { m_bucket_renderers.resize((int)BucketId::MAX_BUCKETS); m_bucket_categories.resize((int)BucketId::MAX_BUCKETS, BucketCategory::OTHER); - init_bucket_renderer("debug-no-zbuf", BucketCategory::OTHER, - BucketId::DEBUG_NO_ZBUF, 0x8000); + init_bucket_renderer("debug-no-zbuf1", BucketCategory::OTHER, + BucketId::DEBUG_NO_ZBUF1, 0x8000); + init_bucket_renderer("debug-no-zbuf2", BucketCategory::OTHER, + BucketId::DEBUG_NO_ZBUF2, 0x8000); + init_bucket_renderer("debug3", BucketCategory::OTHER, BucketId::DEBUG3, 0x8000); // for now, for any unset renderers, just set them to an EmptyBucketRenderer. for (size_t i = 0; i < m_bucket_renderers.size(); i++) { diff --git a/game/graphics/opengl_renderer/buckets.h b/game/graphics/opengl_renderer/buckets.h index 4e20ff6a2f..f5bb64bf15 100644 --- a/game/graphics/opengl_renderer/buckets.h +++ b/game/graphics/opengl_renderer/buckets.h @@ -79,7 +79,8 @@ enum class BucketId { } namespace jak2 { -enum class BucketId { DEBUG_NO_ZBUF = 325, MAX_BUCKETS = 327 }; + +enum class BucketId { DEBUG_NO_ZBUF1 = 318, DEBUG_NO_ZBUF2 = 325, DEBUG3 = 326, MAX_BUCKETS = 327 }; } enum class BucketCategory { diff --git a/game/kernel/jak2/kmachine.cpp b/game/kernel/jak2/kmachine.cpp index aa3754efa2..50f893e50f 100644 --- a/game/kernel/jak2/kmachine.cpp +++ b/game/kernel/jak2/kmachine.cpp @@ -426,6 +426,22 @@ int ShutdownMachine() { Ptr MouseGetData(Ptr mouse) { // stubbed out in the actual game + static double px = 0; + static double py = 0; + + mouse->active = offset_of_s7() + jak2_symbols::FIX_SYM_TRUE; + mouse->valid = offset_of_s7() + jak2_symbols::FIX_SYM_TRUE; + mouse->status = 1; + mouse->button0 = 0; + + // TODO: actually hook these up. + double last_cursor_x_position = 0; + double last_cursor_y_position = 0; + + mouse->deltax = last_cursor_x_position - px; + mouse->deltay = last_cursor_y_position - py; + px = last_cursor_x_position; + py = last_cursor_y_position; return mouse; } diff --git a/game/kernel/jak2/kmachine.h b/game/kernel/jak2/kmachine.h index dd9c1b2d32..e539ea22a9 100644 --- a/game/kernel/jak2/kmachine.h +++ b/game/kernel/jak2/kmachine.h @@ -1,5 +1,7 @@ #pragma once +#include "common/common_types.h" + namespace jak2 { void InitParms(int argc, const char* const* argv); void InitIOP(); @@ -7,5 +9,36 @@ int InitMachine(); int ShutdownMachine(); void InitMachineScheme(); -struct MouseInfo {}; +struct MouseInfo { + // ((active symbol :offset-assert 4) + u32 active; + // (cursor basic :offset-assert 8) + u32 cursor; + // (valid symbol :offset-assert 12) + u32 valid; + // (id uint8 :offset-assert 16) + u8 id; + u8 pad; + // (status uint16 :offset-assert 18) + u16 status; + // (button0 uint16 :offset-assert 20) + u16 button0; + // (deltax int8 :offset-assert 22) + s8 deltax; + // (deltay int8 :offset-assert 23) + s8 deltay; + // (wheel uint8 :offset-assert 24) + u8 wheel; + // (change-time time-frame :offset-assert 32) + // (button0-abs uint32 3 :offset-assert 40) + // (button0-shadow-abs uint32 1 :offset-assert 52) + // (button0-rel uint32 3 :offset-assert 56) + // (pos vector 2 :inline :offset-assert 80) + // (posx float :offset 80) + // (posy float :offset 84) + // (oldposx float :offset 96 :do-not-decompile) + // (oldposy float :offset 100) + // (speedx float :offset 92) + // (speedy float :offset 108) +}; } // namespace jak2 \ No newline at end of file diff --git a/game/kernel/jak2/kscheme.cpp b/game/kernel/jak2/kscheme.cpp index 8521ace527..35afc14031 100644 --- a/game/kernel/jak2/kscheme.cpp +++ b/game/kernel/jak2/kscheme.cpp @@ -1652,7 +1652,7 @@ int InitHeapAndSymbol() { make_function_symbol_from_c("kmemclose", (void*)kmemclose); make_function_symbol_from_c("new-dynamic-structure", (void*)new_dynamic_structure); make_function_symbol_from_c("method-set!", (void*)method_set); - make_function_symbol_from_c("link", (void*)link_and_exec); + make_stack_arg_function_symbol_from_c("link", (void*)link_and_exec); make_function_symbol_from_c("link-busy?", (void*)link_busy); make_function_symbol_from_c("link-reset", (void*)link_reset); make_function_symbol_from_c("dgo-load", (void*)load_and_link_dgo); @@ -1660,7 +1660,7 @@ int InitHeapAndSymbol() { make_raw_function_symbol_from_c("memcpy-and-rellink", 0); make_raw_function_symbol_from_c("symlink2", 0); make_raw_function_symbol_from_c("symlink3", 0); - make_function_symbol_from_c("link-begin", (void*)link_begin); + make_stack_arg_function_symbol_from_c("link-begin", (void*)link_begin); make_function_symbol_from_c("link-resume", (void*)link_resume); make_function_symbol_from_c("sql-query", (void*)sql_query_sync); make_function_symbol_from_c("mc-run", (void*)MC_run); diff --git a/game/overlord/srpc.cpp b/game/overlord/srpc.cpp index a07737d671..f4ec4a4c86 100644 --- a/game/overlord/srpc.cpp +++ b/game/overlord/srpc.cpp @@ -91,6 +91,10 @@ u32 Thread_Loader() { } void* RPC_Player(unsigned int /*fno*/, void* data, int size) { + if (g_game_version == GameVersion::Jak2) { + printf("RPC_Player skip\n"); + return nullptr; + } if (gSoundEnable) { gFreeMem = QueryTotalFreeMemSize(); if (!PollSema(gSema)) { @@ -353,6 +357,10 @@ void* RPC_Player(unsigned int /*fno*/, void* data, int size) { } void* RPC_Loader(unsigned int /*fno*/, void* data, int size) { + if (g_game_version == GameVersion::Jak2) { + printf("RPC_Loader skip\n"); + return nullptr; + } int n_messages = size / SRPC_MESSAGE_SIZE; SoundRpcCommand* cmd = (SoundRpcCommand*)(data); if (gSoundEnable) { diff --git a/goal_src/jak1/examples/debug-jak2.gc b/goal_src/jak1/examples/debug-jak2.gc deleted file mode 100644 index 9219e1fe9d..0000000000 --- a/goal_src/jak1/examples/debug-jak2.gc +++ /dev/null @@ -1,114 +0,0 @@ -(defun hack-update-camera ((location vector) (inv-rot matrix)) - "Debugging function to set the camera's position and orientation" - ;; update to compute the perspective matrix. - (update-math-camera - *math-camera* - 'ntsc - 'aspect4x3 - (-> *math-camera* fov) - ) - - ;; copy the input rotation - (matrix-copy! (-> *math-camera* inv-camera-rot) inv-rot) - ;; inverse of rotation matrix matrix is its transpose - (matrix-transpose! (-> *math-camera* camera-rot) (-> *math-camera* inv-camera-rot)) - - ;; fake some value here - (set! (-> *math-camera* fov-correction-factor) 1.0) - - ;; do the math - (set! (-> *math-camera* trans quad) (-> location quad)) - (let ((cam-temp (-> *math-camera* camera-temp)) - (cam-rot (-> *math-camera* camera-rot)) - (inv-cam-rot (-> *math-camera* inv-camera-rot)) - (cam-trans (-> *math-camera* trans)) - ) - (let ((rotated-trans (new-stack-vector0))) - (set! (-> rotated-trans x) (- (-> cam-trans x))) - (set! (-> rotated-trans y) (- (-> cam-trans y))) - (set! (-> rotated-trans z) (- (-> cam-trans z))) - (set! (-> rotated-trans w) 1.0) - (vector-matrix*! rotated-trans rotated-trans cam-rot) - (set! (-> cam-rot vector 3 quad) (-> rotated-trans quad)) - ) - (matrix*! cam-temp cam-rot (-> *math-camera* perspective)) - (set! (-> inv-cam-rot vector 3 quad) (-> cam-trans quad)) - - ;; fixes it! - ;(set! (-> *math-camera* camera-temp data 15) -6.) - ) - - (none) - ) - -(defun test-function ((iter int)) - "This function draws the debug stuff. You can edit this, then reload this file to play with it." - - ;; val will increase from 0 to 1, then reset back to 0. - (let* ((frame (the float (mod (* 4 iter) 1600))) - (val (/ frame 1600.0))) - (format *stdcon* "~0kval ~f~%" val) - - ;; orbit the camera around in a circle with radius 5 m. - (let* ((rad (meters 5.0)) - (x (* rad (sin (* (degrees 360.0) val)))) - (z (* rad (cos (* (degrees 360.0) val)))) - (cam-pos (new 'stack 'vector)) - (cam-inv-rot (new 'stack 'matrix)) - ) - ;; this matrix will look directly at the origin... - (set! (-> cam-pos x) x) - (set! (-> cam-pos z) z) - (set! (-> cam-pos y) (meters 1.)) - (forward-down->inv-matrix cam-inv-rot cam-pos (new 'static 'vector :y 1.0)) - - ;; if the camera is here. - (set! (-> cam-pos x) (- 0. x)) - (set! (-> cam-pos z) (- 0. z)) - (set! (-> cam-pos y) (meters -3.)) - (hack-update-camera cam-pos cam-inv-rot) - - - ;; create some test points - (let ((p0 (new 'static 'vector :x (meters .8) :y (meters .2) :z (meters 2.0))) - (p1 (new 'static 'vector :x (meters .3) :y (meters .3) :z (meters 2.5))) - (p2 (new 'static 'vector :x (meters .5) :y (meters .7) :z (meters 1.5))) - (b0 (new 'static 'vector :x (meters .5) :y (meters .5) :z (meters .5))) - (b1 (new 'static 'vector :x (meters -.5) :y (meters -.5) :z (meters -.5))) - - ) - - (add-debug-cross #t (bucket-id debug-no-zbuf) (new 'static 'vector) (meters 2.0)) - (add-debug-box #t (bucket-id debug-no-zbuf) p0 p2 (new 'static 'rgba :b #x80 :r #x80 :g #x80 :a #x80)) - (add-debug-flat-triangle #t (bucket-id debug-no-zbuf) p0 p1 p2 (new 'static 'rgba :r #x80 :a #x80)) - (add-debug-text-3d #t (bucket-id debug-no-zbuf) "triangle!" p0 (the font-color 1) (the vector2h #f)) - (add-debug-sphere #t (bucket-id debug-no-zbuf) p0 (meters 0.5) (new 'static 'rgba :r #x80 :a #x80)) - - (add-debug-line-sphere #t (bucket-id debug-no-zbuf) - (new 'static 'vector :x (meters 0.8)) - (new 'static 'vector :y (meters -4.0)) - (meters 1.0) (new 'static 'rgba :r #x40 :g #x80 :a #x80)) - ) - ) - ) - (none) - ) - - -(defun launch-test-process () - "Call this to launch a process that draws the debug demo" - (let ((proc (get-process *nk-dead-pool* process 1024))) - (activate proc *active-pool* "test" *kernel-dram-stack*) - (run-next-time-in-process proc (lambda () - (let ((iter 0)) - (while #t - (test-function iter) - (suspend) - (+! iter 1) - ) - ) - ) - ) - proc) - - ) \ No newline at end of file diff --git a/goal_src/jak2/dgos/pri.gd b/goal_src/jak2/dgos/pri.gd new file mode 100644 index 0000000000..e740ddc4a9 --- /dev/null +++ b/goal_src/jak2/dgos/pri.gd @@ -0,0 +1,20 @@ +("PRI.DGO" + ("intro-texture.o" "intro-texture") + ("prison-part.o" "prison-part") + ("prison-obs.o" "prison-obs") + ("tpage-1578.go" "tpage-1578") + ("tpage-1950.go" "tpage-1950") + ("tpage-1579.go" "tpage-1579") + ("tpage-2647.go" "tpage-2647") + ("daxter-highres-ag.go" "daxter-highres") + ("prsn-torture-ag.go" "prsn-torture") + ("prsn-chair-shackle-ag.go" "prsn-chair-shackle") + ("prsn-hang-cell-ag.go" "prsn-hang-cell") + ("warp-gate-b-ag.go" "warp-gate-b") + ("prsn-vent-fan-ag.go" "prsn-vent-fan") + ("fort-entry-gate-ag.go" "fort-entry-gate") + ("prsn-cell-door-ag.go" "prsn-cell-door") + ("prison-vis.go" "prison-vis") + ) + + diff --git a/goal_src/jak2/engine/anim/joint-mod-h.gc b/goal_src/jak2/engine/anim/joint-mod-h.gc index 1fa33827ee..11b9c1a23d 100644 --- a/goal_src/jak2/engine/anim/joint-mod-h.gc +++ b/goal_src/jak2/engine/anim/joint-mod-h.gc @@ -126,7 +126,7 @@ (defun-debug joint-mod-debug-draw ((arg0 joint-mod)) - (add-debug-matrix #t (bucket-id bucket-318) (-> arg0 joint bone transform) (meters 2.0)) + (add-debug-matrix #t (bucket-id debug-no-zbuf1) (-> arg0 joint bone transform) (meters 2.0)) 0 (none) ) diff --git a/goal_src/jak2/engine/anim/joint-mod.gc b/goal_src/jak2/engine/anim/joint-mod.gc index cc865dfb0b..ec13cb6a53 100644 --- a/goal_src/jak2/engine/anim/joint-mod.gc +++ b/goal_src/jak2/engine/anim/joint-mod.gc @@ -966,7 +966,7 @@ (if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> gp-0 target) (meters 0.2) "look" @@ -1090,7 +1090,7 @@ (if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> gp-0 target) (meters 0.2) "look" @@ -1202,7 +1202,7 @@ (if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> gp-0 target) (meters 0.2) "look" diff --git a/goal_src/jak2/engine/camera/cam-debug.gc b/goal_src/jak2/engine/camera/cam-debug.gc index c8dc78a431..7ce7475de7 100644 --- a/goal_src/jak2/engine/camera/cam-debug.gc +++ b/goal_src/jak2/engine/camera/cam-debug.gc @@ -241,7 +241,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) a2-0 (the-as (pointer dma-tag) a3-16) ) @@ -676,7 +676,7 @@ (new 'static 'vector :z 1024.0) (-> *cam-debug-los-tri* gp-1 intersect) (-> *cam-debug-los-tri* gp-1 color) - (the-as meters #x44800000) + (meters 0.25) ) ) ) @@ -702,7 +702,7 @@ (new 'static 'vector :z 1024.0) (-> *cam-debug-coll-tri* gp-2 intersect) (-> *cam-debug-coll-tri* gp-2 color) - (the-as meters #x44800000) + (meters 0.25) ) ) #f @@ -949,7 +949,7 @@ (new 'static 'vector :z 1024.0) s3-0 (new 'static 'vector4w :x #xff :w #x80) - (the-as meters #x44800000) + (meters 0.25) ) (tracking-spline-method-19 obj (-> obj sample-len) s3-0 (the-as tracking-spline-sampler #f)) (camera-cross @@ -957,7 +957,7 @@ (new 'static 'vector :z 1024.0) s3-0 (new 'static 'vector4w :x #xff :w #x80) - (the-as meters #x44800000) + (meters 0.25) ) ) ) @@ -977,7 +977,7 @@ (new 'static 'vector :z 1024.0) (the-as vector (-> obj point s5-0)) (new 'static 'vector4w :x #xff :w #x80) - (the-as meters #x44800000) + (meters 0.25) ) ) ) @@ -1109,7 +1109,7 @@ (new 'static 'vector :z 1024.0) (-> *setting-control* cam-current point-of-interest) (new 'static 'vector4w :x #x80 :z #x80 :w #x80) - (the-as meters #x44800000) + (meters 0.25) ) ) (let ((f30-0 (* 0.5 (-> *camera-combiner* fov)))) @@ -1462,7 +1462,7 @@ (set! (-> a0-3 w) 1.0) (vector+! a1-4 v1-4 a0-3) ) - (add-debug-line #t (bucket-id bucket-318) gp-0 s5-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf1) gp-0 s5-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1)) (let ((a1-7 s5-0) (v1-5 gp-0) (a0-5 s5-0) @@ -1473,7 +1473,7 @@ (set! (-> a0-5 w) 1.0) (vector+! a1-7 v1-5 a0-5) ) - (add-debug-line #t (bucket-id bucket-318) gp-0 s5-0 (new 'static 'rgba :g #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf1) gp-0 s5-0 (new 'static 'rgba :g #xff :a #x80) #f (the-as rgba -1)) (let ((a1-10 s5-0) (v1-6 gp-0) (a0-7 s5-0) @@ -1484,14 +1484,14 @@ (set! (-> a0-7 w) 1.0) (vector+! a1-10 v1-6 a0-7) ) - (add-debug-line #t (bucket-id bucket-318) gp-0 s5-0 (new 'static 'rgba :b #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf1) gp-0 s5-0 (new 'static 'rgba :b #xff :a #x80) #f (the-as rgba -1)) (when arg0 (set! (-> s5-0 quad) (-> arg0 quad)) (vector-normalize! s5-0 4096.0) (vector+! s5-0 gp-0 s5-0) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) gp-0 s5-0 (new 'static 'rgba :r #x7f :g #x7f :a #x80) diff --git a/goal_src/jak2/engine/camera/cam-layout.gc b/goal_src/jak2/engine/camera/cam-layout.gc index 81a69eb42e..d3f216d212 100644 --- a/goal_src/jak2/engine/camera/cam-layout.gc +++ b/goal_src/jak2/engine/camera/cam-layout.gc @@ -296,7 +296,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id bucket-324) + (bucket-id debug2) gp-0 (the-as (pointer dma-tag) a3-2) ) @@ -721,7 +721,7 @@ (new 'static 'vector :z 1024.0) s5-0 (-> arg1 color) - (the-as meters #x45800000) + (meters 1.0) ) ) (none) @@ -748,7 +748,7 @@ (new 'static 'vector :z 1024.0) s5-0 (-> arg1 color) - (the-as meters #x45800000) + (meters 1.0) ) ) (none) @@ -778,7 +778,7 @@ (new 'static 'vector :z 1024.0) s5-1 (new 'static 'vector4w :x #x80 :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -791,7 +791,7 @@ (new 'static 'vector :z 1024.0) s5-2 (new 'static 'vector4w :y #x80 :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -806,7 +806,7 @@ (new 'static 'vector :z 1024.0) s5-3 (new 'static 'vector4w :x #x80 :z #x80 :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -857,7 +857,7 @@ (new 'static 'vector :z 1024.0) s5-4 (new 'static 'vector4w :x #xff :y #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -900,7 +900,7 @@ (new 'static 'vector :z 1024.0) s5-5 (new 'static 'vector4w :z #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) (curve-get-pos! s5-5 (cam-slave-get-float arg0 'intro-exitValue 0.0) s3-2) (vector+! s5-5 s5-5 s4-2) @@ -909,7 +909,7 @@ (new 'static 'vector :z 1024.0) s5-5 (new 'static 'vector4w :z #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -939,7 +939,7 @@ (new 'static 'vector :z 1024.0) s5-6 (new 'static 'vector4w :x #xff :y #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -965,7 +965,7 @@ (new 'static 'vector :z 1024.0) s5-7 (new 'static 'vector4w :y #xff :z #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) diff --git a/goal_src/jak2/engine/camera/cam-states.gc b/goal_src/jak2/engine/camera/cam-states.gc index 388763e2e0..50e67ea075 100644 --- a/goal_src/jak2/engine/camera/cam-states.gc +++ b/goal_src/jak2/engine/camera/cam-states.gc @@ -1007,7 +1007,7 @@ (let ((t1-0 #x40000080)) (add-debug-flat-triangle #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (the-as vector (-> (the-as (inline-array collide-cache-tri) gp-0) 0)) (-> (the-as (inline-array collide-cache-tri) gp-0) 0 vertex 1) (-> (the-as (inline-array collide-cache-tri) gp-0) 0 vertex 2) diff --git a/goal_src/jak2/engine/debug/anim-tester.gc b/goal_src/jak2/engine/debug/anim-tester.gc index 05616cb6d1..4fd0a9165d 100644 --- a/goal_src/jak2/engine/debug/anim-tester.gc +++ b/goal_src/jak2/engine/debug/anim-tester.gc @@ -90,3 +90,4 @@ ) (define-extern *anim-tester* (pointer anim-tester)) +(set! *anim-tester* #f) ;; temp \ No newline at end of file diff --git a/goal_src/jak2/engine/debug/debug.gc b/goal_src/jak2/engine/debug/debug.gc index b550c2082d..122efcafe8 100644 --- a/goal_src/jak2/engine/debug/debug.gc +++ b/goal_src/jak2/engine/debug/debug.gc @@ -1558,7 +1558,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id bucket-324) + (bucket-id debug2) tag-start (the-as (pointer dma-tag) tag-end) ) @@ -1705,7 +1705,7 @@ (if (!= (+ i 1) (-> history h-first)) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> history points i) (-> history points (+ i 1)) (new 'static 'rgba :r #x80 :g #xc0 :b #x80 :a #x80) diff --git a/goal_src/jak2/engine/debug/default-menu.gc b/goal_src/jak2/engine/debug/default-menu.gc index 25eeb1451b..c4ff9a55a6 100644 --- a/goal_src/jak2/engine/debug/default-menu.gc +++ b/goal_src/jak2/engine/debug/default-menu.gc @@ -1184,8 +1184,8 @@ (string= (the-as string s5-1) "outro-nest") ) ) - (set! (-> palout memory-mode) (the-as uint 4)) - (set! (-> hiphog memory-mode) (the-as uint 1)) + (set! (-> palout memory-mode) (load-buffer-mode borrow)) + (set! (-> hiphog memory-mode) (load-buffer-mode small-center)) ) (process-spawn scene-player :init scene-player-init s5-1 #t (car arg0)) ) @@ -3325,11 +3325,11 @@ #f (lambda ((arg0 object) (arg1 debug-menu-msg)) (if (= arg1 (debug-menu-msg press)) - (set! (-> *setting-control* user-default unknown-uint32-00) - (the-as uint (not (-> *setting-control* user-default unknown-uint32-00))) + (set! (-> *setting-control* user-default use-progressive-scan) + (not (-> *setting-control* user-default use-progressive-scan)) ) ) - (-> *setting-control* user-default unknown-uint32-00) + (-> *setting-control* user-default use-progressive-scan) ) ) (flag @@ -5871,8 +5871,15 @@ ) ) ) - (debug-menu-append-item s5-0 (debug-menu-make-task-menu arg0)) - (debug-menu-append-item s5-0 (the-as debug-menu-node (debug-menu-make-play-menu (the-as symbol arg0)))) + + ;; added these checks + (when (nonzero? (-> *game-info* sub-task-list)) + (debug-menu-append-item s5-0 (debug-menu-make-task-menu arg0)) + ) + + (when (nonzero? (-> *game-info* play-list)) + (debug-menu-append-item s5-0 (the-as debug-menu-node (debug-menu-make-play-menu (the-as symbol arg0)))) + ) ) arg0 ) @@ -5997,36 +6004,43 @@ arg0 ) -;; NOTE - disabled for now to prevent a crash at startup -;; The debug menu stuff accesses a lot of stuff that is currently undefined, which will crash the game -;; (debug-menu-context-make-default-menus *debug-menu-context*) -;; (popup-menu-context-make-default-menus *popup-menu-context*) +(debug-menu-context-make-default-menus *debug-menu-context*) +(popup-menu-context-make-default-menus *popup-menu-context*) (defun menu-respond-to-pause () (case *master-mode* - (('menu) - (cond - ((and (cpad-hold? 0 l3) (cpad-hold? 0 select)) - (debug-menu-context-send-msg *popup-menu-context* (debug-menu-msg activate) (debug-menu-dest activation)) - (debug-menu-context-send-msg *debug-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) - (debug-menu-context-send-msg *editable-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) - ) - ((and (cpad-hold? 1 start) *editable*) - (debug-menu-context-send-msg *editable-menu-context* (debug-menu-msg activate) (debug-menu-dest activation)) - (debug-menu-context-send-msg *debug-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) - (debug-menu-context-send-msg *popup-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) - ) - ((and (cpad-hold? 0 l3) (cpad-hold? 0 start)) - (debug-menu-context-send-msg *debug-menu-context* (debug-menu-msg activate) (debug-menu-dest activation)) - (debug-menu-context-send-msg *popup-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) - (debug-menu-context-send-msg *editable-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) - ) - ) - ) + (('menu) + (cond + ((and (cpad-hold? 0 l3) (cpad-hold? 0 select)) + (debug-menu-context-send-msg *popup-menu-context* (debug-menu-msg activate) (debug-menu-dest activation)) + (debug-menu-context-send-msg *debug-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) + ;; added + (when (nonzero? *editable-menu-context*) + (debug-menu-context-send-msg *editable-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) + ) + ) + ((and (cpad-hold? 1 start) *editable*) + (when (nonzero? *editable-menu-context*) + (debug-menu-context-send-msg *editable-menu-context* (debug-menu-msg activate) (debug-menu-dest activation)) + ) + (debug-menu-context-send-msg *debug-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) + (debug-menu-context-send-msg *popup-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) + ) + ((and (cpad-hold? 0 l3) (cpad-hold? 0 start)) + (debug-menu-context-send-msg *debug-menu-context* (debug-menu-msg activate) (debug-menu-dest activation)) + (debug-menu-context-send-msg *popup-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) + (when (nonzero? *editable-menu-context*) + (debug-menu-context-send-msg *editable-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) + ) + ) + ) + ) (else (debug-menu-context-send-msg *debug-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) (debug-menu-context-send-msg *popup-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) - (debug-menu-context-send-msg *editable-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) + (when (nonzero? *editable-menu-context*) + (debug-menu-context-send-msg *editable-menu-context* (debug-menu-msg deactivate) (debug-menu-dest activation)) + ) ) ) #f diff --git a/goal_src/jak2/engine/debug/editable.gc b/goal_src/jak2/engine/debug/editable.gc index ab8f45087b..f3119aa874 100644 --- a/goal_src/jak2/engine/debug/editable.gc +++ b/goal_src/jak2/engine/debug/editable.gc @@ -125,7 +125,7 @@ (defmethod editable-region-method-11 editable-region ((obj editable-region) (arg0 vector) (arg1 int)) (local-vars (sv-32 vector2h)) (set! sv-32 (new 'stack 'vector2h)) - (add-debug-x #t (bucket-id bucket-318) arg0 (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0))) + (add-debug-x #t (bucket-id debug-no-zbuf1) arg0 (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0))) (let ((s3-0 add-debug-text-3d) (s2-0 #t) (s1-0 318) @@ -329,12 +329,12 @@ (let ((s5-0 (new 'stack-no-clear 'vector))) (when (editable-method-11 obj s5-0) (set! (-> s5-0 y) (-> s5-0 y)) - (add-debug-x #t (bucket-id bucket-318) s5-0 (the-as rgba (-> (new 'static 'array uint64 1 #x80ffffff) 0))) + (add-debug-x #t (bucket-id debug-no-zbuf1) s5-0 (the-as rgba (-> (new 'static 'array uint64 1 #x80ffffff) 0))) ) ) (add-debug-x #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (edit-get-trans obj) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) @@ -666,7 +666,7 @@ ) ) (add-debug-sphere-from-table - (bucket-id bucket-324) + (bucket-id debug2) (-> obj trans) (-> obj radius) (get-color obj (the-as int a1-0)) @@ -974,7 +974,7 @@ (if (!= (-> obj direction w) 0.0) (add-debug-vector #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (edit-get-trans obj) (-> obj direction) (* -1.2 (-> obj radius)) @@ -1160,7 +1160,7 @@ (let ((s1-0 (editable-face-method-31 obj (new 'stack-no-clear 'vector)))) (add-debug-vector #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (edit-get-trans obj) s1-0 (the-as meters #x46000000) @@ -1473,7 +1473,7 @@ (when (>= s4-0 3) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (edit-get-trans (-> obj vertex 0)) (edit-get-trans (-> obj vertex 1)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) diff --git a/goal_src/jak2/engine/debug/menu.gc b/goal_src/jak2/engine/debug/menu.gc index d12564b11b..6edb2e5519 100644 --- a/goal_src/jak2/engine/debug/menu.gc +++ b/goal_src/jak2/engine/debug/menu.gc @@ -529,6 +529,7 @@ (defun debug-menu-item-get-max-width ((arg0 debug-menu-item) (arg1 debug-menu)) (local-vars (v0-1 int)) 0 + (cond ((= (-> arg0 type) debug-menu-item-submenu) (set! v0-1 (+ (the int (-> (get-string-length (-> arg0 name) (-> arg1 context font)) length)) 16)) @@ -919,7 +920,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s4-0 (the-as (pointer dma-tag) a3-1) ) @@ -968,7 +969,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s5-0 (the-as (pointer dma-tag) a3-1) ) @@ -1017,7 +1018,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s5-0 (the-as (pointer dma-tag) a3-1) ) @@ -1085,7 +1086,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s4-0 (the-as (pointer dma-tag) a3-1) ) @@ -1156,7 +1157,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s1-0 (the-as (pointer dma-tag) a3-2) ) @@ -1193,7 +1194,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) sv-32 (the-as (pointer dma-tag) a3-3) ) diff --git a/goal_src/jak2/engine/dma/dma-disasm.gc b/goal_src/jak2/engine/dma/dma-disasm.gc index 8936ca4993..bed682ff74 100644 --- a/goal_src/jak2/engine/dma/dma-disasm.gc +++ b/goal_src/jak2/engine/dma/dma-disasm.gc @@ -27,45 +27,43 @@ (define *vif-disasm-table* - (the-as (array vif-disasm-element) - (new 'static 'boxed-array :type vif-disasm-element - (new 'static 'vif-disasm-element :mask #x7f :string1 "nop") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stcycl) :print #x2 :string1 "stcycl") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 offset) :print #x1 :string1 "offset" :string2 "offset") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 base) :print #x1 :string1 "base" :string2 "base") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 itop) :print #x1 :string1 "itop" :string2 "addr") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stmod) :print #x1 :string1 "stmod" :string2 "mode") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mskpath3) :print #x1 :string1 "mskpath3" :string2 "mask") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mark) :print #x1 :string1 "mark" :string2 "mark") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flushe) :string1 "flushe") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flush) :string1 "flush") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flusha) :string1 "flusha") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscal) :print #x1 :string1 "mscal" :string2 "addr") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscnt) :string1 "mscnt") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscalf) :print #x1 :string1 "mscalf" :string2 "addr") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stmask) :print #x3 :string1 "stmask" :string2 "mask") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 strow) :print #x4 :string1 "strow" :string2 "row") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stcol) :print #x4 :string1 "stcol" :string2 "col") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mpg) :print #x5 :string1 "mpg") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 direct) :print #x6 :string1 "direct") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 directhl) :print #x6 :string1 "directhl") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-s-32) :val #x10 :print #x7 :string1 "unpack-s-32") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-s-16) :val #x8 :print #x7 :string1 "unpack-s-16") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-s-8) :val #x4 :print #x7 :string1 "unpack-s-8") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v2-32) :val #x8 :print #x7 :string1 "unpack-v2-32") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v2-16) :val #x4 :print #x7 :string1 "unpack-v2-16") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v2-8) :val #x2 :print #x7 :string1 "unpack-v2-8") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v3-32) :val #xc :print #x7 :string1 "unpack-v3-32") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v3-16) :val #x6 :print #x7 :string1 "unpack-v3-16") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v3-8) :val #x3 :print #x7 :string1 "unpack-v3-8") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v4-32) :val #x10 :print #x7 :string1 "unpack-v4-32") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v4-16) :val #x8 :print #x7 :string1 "unpack-v4-16") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v4-8) :val #x4 :print #x7 :string1 "unpack-v4-8") - (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v4-5) :val #x2 :print #x7 :string1 "unpack-v4-5") - (new 'static 'vif-disasm-element :print #x8) - ) - ) - ) + (new 'static 'boxed-array :type vif-disasm-element + (new 'static 'vif-disasm-element :mask #x7f :string1 "nop") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stcycl) :print #x2 :string1 "stcycl") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 offset) :print #x1 :string1 "offset" :string2 "offset") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 base) :print #x1 :string1 "base" :string2 "base") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 itop) :print #x1 :string1 "itop" :string2 "addr") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stmod) :print #x1 :string1 "stmod" :string2 "mode") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mskpath3) :print #x1 :string1 "mskpath3" :string2 "mask") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mark) :print #x1 :string1 "mark" :string2 "mark") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flushe) :string1 "flushe") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flush) :string1 "flush") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flusha) :string1 "flusha") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscal) :print #x1 :string1 "mscal" :string2 "addr") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscnt) :string1 "mscnt") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscalf) :print #x1 :string1 "mscalf" :string2 "addr") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stmask) :print #x3 :string1 "stmask" :string2 "mask") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 strow) :print #x4 :string1 "strow" :string2 "row") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stcol) :print #x4 :string1 "stcol" :string2 "col") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mpg) :print #x5 :string1 "mpg") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 direct) :print #x6 :string1 "direct") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 directhl) :print #x6 :string1 "directhl") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-s-32) :val #x10 :print #x7 :string1 "unpack-s-32") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-s-16) :val #x8 :print #x7 :string1 "unpack-s-16") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-s-8) :val #x4 :print #x7 :string1 "unpack-s-8") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v2-32) :val #x8 :print #x7 :string1 "unpack-v2-32") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v2-16) :val #x4 :print #x7 :string1 "unpack-v2-16") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v2-8) :val #x2 :print #x7 :string1 "unpack-v2-8") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v3-32) :val #xc :print #x7 :string1 "unpack-v3-32") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v3-16) :val #x6 :print #x7 :string1 "unpack-v3-16") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v3-8) :val #x3 :print #x7 :string1 "unpack-v3-8") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v4-32) :val #x10 :print #x7 :string1 "unpack-v4-32") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v4-16) :val #x8 :print #x7 :string1 "unpack-v4-16") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v4-8) :val #x4 :print #x7 :string1 "unpack-v4-8") + (new 'static 'vif-disasm-element :mask #x6f :tag (vif-cmd-32 unpack-v4-5) :val #x2 :print #x7 :string1 "unpack-v4-5") + (new 'static 'vif-disasm-element :print #x8) + ) + ) (defun disasm-vif-details ((arg0 symbol) (arg1 (pointer uint8)) (arg2 vif-cmd) (arg3 int)) (let ((s4-0 arg3)) diff --git a/goal_src/jak2/engine/draw/drawable-h.gc b/goal_src/jak2/engine/draw/drawable-h.gc index 7f7a249c12..c0a5883c9e 100644 --- a/goal_src/jak2/engine/draw/drawable-h.gc +++ b/goal_src/jak2/engine/draw/drawable-h.gc @@ -16,6 +16,8 @@ (define-extern prototype-bucket-type (function prototype-bucket type)) (define-extern print-prototype-list (function none)) (define-extern prototype-bucket-recalc-fields (function prototype-bucket prototype-bucket)) +(define-extern determine-pause-mode (function int)) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/draw/drawable.gc b/goal_src/jak2/engine/draw/drawable.gc index f3f95a3977..dc8adb76d4 100644 --- a/goal_src/jak2/engine/draw/drawable.gc +++ b/goal_src/jak2/engine/draw/drawable.gc @@ -7,14 +7,272 @@ ;; DECOMP BEGINS -;; sphere-cull -;; guard-band-cull -;; sphere-in-view-frustum? -;; line-in-view-frustum? -;; vis-cull -;; error-sphere +;; TODO +(defmacro spr-work () + `(the work-area *fake-scratchpad-data*)) + +(defun sphere-cull ((arg0 vector)) + "Is the given sphere in the view frustum?" + (local-vars (v1-0 uint128) (v1-1 uint128) (v1-2 uint128)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf10 :class vf) + (vf16 :class vf) + (vf17 :class vf) + (vf18 :class vf) + (vf19 :class vf) + (vf9 :class vf) + ) + ;; modified for PC: these register would be loaded by the draw method of bsp. + (let ((at-0 *math-camera*)) + (.lvf vf16 (&-> at-0 guard-plane 0 quad)) + (.lvf vf17 (&-> at-0 guard-plane 1 quad)) + (.lvf vf18 (&-> at-0 guard-plane 2 quad)) + (.lvf vf19 (&-> at-0 guard-plane 3 quad)) + ) + (init-vf0-vector) + (.lvf vf10 (&-> arg0 quad)) + (.mul.x.vf acc vf16 vf10) + (.add.mul.y.vf acc vf17 vf10 acc) + (.add.mul.z.vf acc vf18 vf10 acc) + (.sub.mul.w.vf vf9 vf19 vf0 acc) + (.add.w.vf vf9 vf9 vf10) + (.mov v1-0 vf9) + (.pcgtw v1-1 0 v1-0) + (.ppach v1-2 (the-as uint128 0) v1-1) + (zero? (the-as int v1-2)) + ) + ) + + +(defun guard-band-cull ((arg0 vector)) + "Is the given sphere within the guard band, and possibly needs clipping?" + (local-vars (v1-0 uint128) (v1-1 uint128) (v1-2 uint128)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf10 :class vf) + (vf20 :class vf) + (vf21 :class vf) + (vf22 :class vf) + (vf23 :class vf) + (vf9 :class vf) + ) + (init-vf0-vector) + ;; modified for PC: these registers would be loaded in dma-add-process-drawable + (let ((at-0 *math-camera*)) + (.lvf vf20 (&-> at-0 guard-plane 0 quad)) + (.lvf vf21 (&-> at-0 guard-plane 1 quad)) + (.lvf vf22 (&-> at-0 guard-plane 2 quad)) + (.lvf vf23 (&-> at-0 guard-plane 3 quad)) + ) + (.lvf vf10 (&-> arg0 quad)) + (.mul.x.vf acc vf20 vf10) + (.add.mul.y.vf acc vf21 vf10 acc) + (.add.mul.z.vf acc vf22 vf10 acc) + (.sub.mul.w.vf vf9 vf23 vf0 acc) + (.sub.w.vf vf9 vf9 vf10) + (.mov v1-0 vf9) + (.pcgtw v1-1 0 v1-0) + (.ppach v1-2 (the-as uint128 0) v1-1) + (nonzero? (the-as int v1-2)) + ) + ) + +(defun sphere-in-view-frustum? ((arg0 sphere)) + "Is the given sphere in the view frustum? + Safe to use anywhere (unlike sphere-cull, which only works if service-mouse + registers are still set from draw bsp.) + " + (local-vars (v1-1 uint128) (v1-2 uint128) (v1-3 uint128)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf3 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + ) + (init-vf0-vector) + (let ((v1-0 *math-camera*)) + (.lvf vf6 (&-> arg0 quad)) + (.lvf vf1 (&-> v1-0 plane 0 quad)) + (.lvf vf2 (&-> v1-0 plane 1 quad)) + (.lvf vf3 (&-> v1-0 plane 2 quad)) + (.lvf vf4 (&-> v1-0 plane 3 quad)) + ) + (.mul.x.vf acc vf1 vf6) + (.add.mul.y.vf acc vf2 vf6 acc) + (.add.mul.z.vf acc vf3 vf6 acc) + (.sub.mul.w.vf vf5 vf4 vf0 acc) + (.add.w.vf vf5 vf5 vf6) + (.mov v1-1 vf5) + (.pcgtw v1-2 0 v1-1) + (.ppach v1-3 (the-as uint128 0) v1-2) + (zero? (the-as int v1-3)) + ) + ) + +(defun line-in-view-frustum? ((arg0 vector) (arg1 vector)) + "Is the line segment at least partially in the view frustum?" + (local-vars (v1-1 uint128) (v1-2 uint128) (v1-3 uint128) (a0-1 uint128) (a0-2 uint128) (a0-3 uint128)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf10 :class vf) + (vf16 :class vf) + (vf17 :class vf) + (vf18 :class vf) + (vf19 :class vf) + (vf9 :class vf) + ) + (init-vf0-vector) + (let ((v1-0 *math-camera*)) + (.lvf vf9 (&-> arg0 quad)) + (.lvf vf10 (&-> arg1 quad)) + (.lvf vf16 (&-> v1-0 plane 0 quad)) + (.lvf vf17 (&-> v1-0 plane 1 quad)) + (.lvf vf18 (&-> v1-0 plane 2 quad)) + (.lvf vf19 (&-> v1-0 plane 3 quad)) + ) + (.mul.x.vf acc vf16 vf9) + (.add.mul.y.vf acc vf17 vf9 acc) + (.add.mul.z.vf acc vf18 vf9 acc) + (.sub.mul.w.vf vf9 vf19 vf0 acc) + (.mul.x.vf acc vf16 vf10) + (.add.mul.y.vf acc vf17 vf10 acc) + (.add.mul.z.vf acc vf18 vf10 acc) + (.sub.mul.w.vf vf10 vf19 vf0 acc) + (.mov v1-1 vf9) + (.pcgtw v1-2 0 v1-1) + (.ppach v1-3 (the-as uint128 0) v1-2) + (.mov a0-1 vf10) + (.pcgtw a0-2 0 a0-1) + (.ppach a0-3 (the-as uint128 0) a0-2) + (zero? (logand (the-as int v1-3) (the-as int a0-3))) + ) + ) + +(defun vis-cull ((id int)) + "Is this thing visible in the precomputed visiblity data? By draw-node id. + Assumes the scratchpad has the vis-list loaded." + (let* ((vis-byte (-> (spr-work) background vis-list (/ id 8))) ;; vis byte + (shift-amount (+ 56 (logand id 7))) + (shifted (shl vis-byte shift-amount)) + ) + (< (the-as int shifted) 0) + ) + ) + +(defun-debug vis-cull-debug ((a0-0 work-area) (id int)) + "Like vis-cull, but you can specify a different work-area. + Unused." + (let* ((vis-byte (-> a0-0 background vis-list (/ id 8))) ;; vis byte + (shift-amount (+ 56 (logand id 7))) + (shifted (shl vis-byte shift-amount)) + ) + (< (the-as int shifted) 0) + ) + ) + +(defun error-sphere ((arg0 drawable-error) (arg1 string)) + "Draw a sphere with an error message around this drawable-error." + (when *artist-error-spheres* + (when (vis-cull (-> arg0 id)) + (when (sphere-cull (-> arg0 bsphere)) + (add-debug-sphere + #t + (bucket-id debug2) + (-> arg0 bsphere) + (-> arg0 bsphere w) + (new 'static 'rgba :r #x80 :a #x80) + ) + (add-debug-text-3d + #t + (bucket-id debug-no-zbuf1) + arg1 + (-> arg0 bsphere) + (font-color #dadada) + (the-as vector2h #f) + ) + ) + ) + ) + 0 + (none) + ) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; drawable methods +;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;; the drawable class is the base class for tons of things +;; basically anything in the a tree-like structure in the level uses this +;; so these methods are super vague and not well defined. +;; Generally, you shouldn't call any of these unless you know the type and +;; what they will do. + +(defmethod login drawable ((obj drawable)) + "Initialize a drawable after load." + obj + ) + +(defmethod draw drawable ((obj drawable) (arg0 drawable) (arg1 display-frame)) + "Draw something. The meaning of this depends on the exact drawable class, + but in general the heavy work isn't here - this just adds stuff to lists." + 0 + (none) + ) + +(defmethod drawable-method-11 drawable () + 0 + (none) + ) + +(defmethod drawable-method-12 drawable () + 0 + (none) + ) + +(defmethod collect-regions drawable ((obj drawable) (arg0 sphere) (arg1 int) (arg2 region-prim-list)) + "Collect a list of regions that we're in, recursively." + 0 + (none) + ) + +(defmethod collect-stats drawable ((obj drawable)) + "Collect statistics for debugging" + 0 + (none) + ) + +(defmethod debug-draw drawable ((obj drawable) (arg0 drawable) (arg1 display-frame)) + "Draw debug visualizations" + 0 + (none) + ) + +(defmethod draw drawable-error ((obj drawable-error) (arg0 drawable-error) (arg1 display-frame)) + "Draw a debug sphere." + (error-sphere arg0 (-> arg0 name)) + 0 + (none) + ) + +(defmethod unpack-vis drawable ((obj drawable) (arg0 (pointer int8)) (arg1 (pointer int8))) + "Unpack vis data from arg1 to arg0, unpacking it. Return pointer to next thing." + arg1 + ) + +;; instance debug +(define *edit-instance* (the-as string #f)) +(when *debug-segment* + (define *instance-mem-usage* (new 'debug 'memory-usage-block)) + ) + +;;hack +(defun find-instance-by-name ((a0-0 string)) + (the prototype-bucket #f)) (defun real-main-draw-hook () (local-vars (a0-96 int) (a0-98 int)) @@ -33,7 +291,7 @@ ;; update render/texture upload masks (set! (-> *display* vu1-enable-user) (-> *display* vu1-enable-user-menu)) - ;(set! (-> *texture-pool* texture-enable-user) (-> *texture-pool* texture-enable-user-menu)) + (set! (-> *texture-pool* texture-enable-user) (-> *texture-pool* texture-enable-user-menu)) ;; display memory stats ; (when *debug-segment* @@ -126,7 +384,7 @@ ;; debug draw collision stuff before processing it. (when *debug-segment* - ; (debug-draw-actors *level* *display-actor-marks*) + (debug-draw-actors *level* *display-actor-marks*) ; (collide-shape-draw-debug-marks) ) @@ -482,8 +740,8 @@ (set! (-> s5-1 bucket-group) (dma-buffer-add-buckets (-> s5-1 calc-buf) 327)) ) - ; (service-cpads) - ; (service-mouse) + (service-cpads) + (service-mouse) ; (execute-connections *pad-engine* #f) (none) ) @@ -698,7 +956,7 @@ ) ;; screenshot/pause stuff. - ; (determine-pause-mode) + (determine-pause-mode) ; (when (and (nonzero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1) (!= (-> *screen-shot-work* size) -1)) ; (let ((v1-77 (-> *screen-shot-work* size))) ; (set! (-> *screen-shot-work* count) (* v1-77 v1-77)) @@ -776,17 +1034,17 @@ ;; initialize buckets with weird custom settings (disable z buffer) (default-init-buffer - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)) ) (default-init-buffer - (bucket-id debug-no-zbuf) + (bucket-id debug-no-zbuf2) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)) ) (default-init-buffer - (bucket-id bucket-321) + (bucket-id screen-filter) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24) :zmsk #x1) (new 'static 'gs-test :zte #x1 :ztst (gs-ztest always)) ) @@ -840,6 +1098,44 @@ ) ) +;; definition for function determine-pause-mode +(defun determine-pause-mode () + (when (and (or (not *progress-process*) (can-go-back? (-> *progress-process* 0))) + (or (!= *master-mode* 'freeze) (and *debug-segment* (cpad-pressed? 0 select start) (cpad-hold? 0 l3))) + ) + (if (or (cpad-pressed? 0 select start) + (cond + ((= *master-mode* 'menu) + (cpad-pressed? 0 r3 r2 triangle circle) + ) + (*cam-layout* + #f + ) + (else + #f + ) + ) + (or (and (logtest? (-> *cpad-list* cpads 0 valid) 128) + (= *master-mode* 'game) + (>= (-> *display* base-clock frame-counter) (-> *game-info* blackout-time)) + (= (-> *setting-control* user-current bg-a) 0.0) + (and (= (-> *setting-control* user-current bg-a-force) 0.0) + (< (seconds 1003) (-> *display* real-clock frame-counter)) + ) + ) + (and (cpad-pressed? 0 r2) (or (= *master-mode* 'pause) (= *master-mode* 'menu))) + *pause-lock* + ) + ) + (toggle-pause) + ) + ) + (if (and *progress-process* (!= *master-mode* 'progress)) + (deactivate-progress) + ) + 0 + ) + (defun swap-display ((arg0 display)) (display-frame-finish arg0) (display-sync arg0) diff --git a/goal_src/jak2/engine/entity/entity-h.gc b/goal_src/jak2/engine/entity/entity-h.gc index 9a88fb1371..915decc54e 100644 --- a/goal_src/jak2/engine/entity/entity-h.gc +++ b/goal_src/jak2/engine/entity/entity-h.gc @@ -11,7 +11,7 @@ (bit-0 0) (bit-1 1) (dead 2) - (bit-3 3) + (no-kill 3) (bit-4 4) (bit-5 5) (subtask-complete 6) @@ -66,7 +66,7 @@ :size-assert #x10 :flag-assert #xa00000010 (:methods - (entity-perm-method-9 () none 9) + (update-perm! (_type_ symbol entity-perm-status) _type_ 9) ) ) @@ -90,7 +90,7 @@ :size-assert #x40 :flag-assert #xa00000040 (:methods - (entity-links-method-9 () none 9) + (birth? (_type_ vector) symbol 9) ) ) @@ -125,11 +125,11 @@ :size-assert #x34 :flag-assert #x1b00000034 (:methods - (entity-method-22 (_type_) _type_ 22) + (birth! (_type_) _type_ 22) (kill! (_type_) _type_ 23) - (entity-method-24 () none 24) - (entity-method-25 () none 25) - (entity-method-26 () none 26) + (add-to-level! (_type_ level-group level actor-id) none 24) + (remove-from-level! (_type_ level-group) _type_ 25) + (get-level (_type_) level 26) ) ) @@ -178,17 +178,18 @@ (:methods (next-actor (_type_) entity-actor 27) (prev-actor (_type_) entity-actor 28) - (entity-actor-method-29 () none 29) - (entity-actor-method-30 (_type_ entity-perm-status symbol) none 30) + (debug-print (_type_ symbol type) none 29) + (toggle-status (_type_ entity-perm-status symbol) none 30) (entity-actor-method-31 (_type_ vector vector vector object float) nav-mesh 31) (entity-actor-method-32 (_type_ vector vector nav-poly float) nav-poly 32) ) ) (deftype actor-reference (structure) - ((actor basic :offset-assert 0) + ((actor entity :offset-assert 0) (id uint32 :offset-assert 4) ) + :pack-me :method-count-assert 9 :size-assert #x8 :flag-assert #x900000008 diff --git a/goal_src/jak2/engine/entity/entity-table.gc b/goal_src/jak2/engine/entity/entity-table.gc index d92f65ad6a..458dfb4302 100644 --- a/goal_src/jak2/engine/entity/entity-table.gc +++ b/goal_src/jak2/engine/entity/entity-table.gc @@ -7,191 +7,190 @@ ;; DECOMP BEGINS -(define *entity-info* (the-as (array entity-info) (new 'static 'boxed-array :type entity-info - (new 'static 'entity-info - :ptype (type-ref stadium-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref citywide-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctywide-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref tomb-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctyslumb-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctygena-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctyindb-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref jellyfish :method-count 167) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x10000 - ) - (new 'static 'entity-info - :ptype (type-ref widow :method-count 47) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x10000 - ) - (new 'static 'entity-info - :ptype (type-ref nav-graph :method-count 47) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref pal-electric-fan :method-count 23) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x6000 - ) - (new 'static 'entity-info - :ptype (type-ref lurker-pipe-lid :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctyn-lamp :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref burning-bush :method-count 35) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref sail-boat-a :method-count 179) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref barge :method-count 151) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref propa :method-count 35) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref city-window-a :method-count 179) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref cty-window-a :method-count 179) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref parking-spot :method-count 27) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref security-wall :method-count 27) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref cty-guard-turret :method-count 39) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref cty-fruit-stand :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref fruit-stand :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref torn :method-count 179) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref neon-baron :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x10000 - ) - ) - ) +(define *entity-info* (new 'static 'boxed-array :type entity-info + (new 'static 'entity-info + :ptype (type-ref stadium-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref citywide-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctywide-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref tomb-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctyslumb-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctygena-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctyindb-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref jellyfish :method-count 167) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x10000 + ) + (new 'static 'entity-info + :ptype (type-ref widow :method-count 47) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x10000 + ) + (new 'static 'entity-info + :ptype (type-ref nav-graph :method-count 47) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref pal-electric-fan :method-count 23) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x6000 + ) + (new 'static 'entity-info + :ptype (type-ref lurker-pipe-lid :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctyn-lamp :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref burning-bush :method-count 35) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref sail-boat-a :method-count 179) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref barge :method-count 151) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref propa :method-count 35) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref city-window-a :method-count 179) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref cty-window-a :method-count 179) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref parking-spot :method-count 27) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref security-wall :method-count 27) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref cty-guard-turret :method-count 39) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref cty-fruit-stand :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref fruit-stand :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref torn :method-count 179) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref neon-baron :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x10000 + ) + ) ) (defun entity-info-lookup ((arg0 type)) diff --git a/goal_src/jak2/engine/entity/entity.gc b/goal_src/jak2/engine/entity/entity.gc index 9edfae201c..1d9d8aaf83 100644 --- a/goal_src/jak2/engine/entity/entity.gc +++ b/goal_src/jak2/engine/entity/entity.gc @@ -5,5 +5,2731 @@ ;; name in dgo: entity ;; dgos: ENGINE, GAME + +(define-extern birth-viewer (function process entity-actor object)) + + ;; DECOMP BEGINS +(define *spawn-actors* #t) +(define *compact-actors* #t) +(define *vis-actors* #t) + +(defmethod mem-usage drawable-actor ((obj drawable-actor) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 44 (-> arg0 length))) + (set! (-> arg0 data 43 name) "entity") + (+! (-> arg0 data 43 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 43 used) v1-6) + (+! (-> arg0 data 43 total) (logand -16 (+ v1-6 15))) + ) + (mem-usage (-> obj actor) arg0 (logior arg1 64)) + (the-as drawable-actor 0) + ) + +(defmethod mem-usage drawable-inline-array-actor ((obj drawable-inline-array-actor) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 1 (-> arg0 length))) + (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) + (+! (-> arg0 data 0 count) 1) + (let ((v1-7 32)) + (+! (-> arg0 data 0 used) v1-7) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-7 15))) + ) + (dotimes (s3-0 (-> obj length)) + (mem-usage (-> obj data s3-0) arg0 arg1) + ) + (the-as drawable-inline-array-actor 0) + ) + +(defmethod print entity-links ((obj entity-links)) + (format #t "#" (-> obj process) obj) + obj + ) + +(defmethod print entity-perm ((obj entity-perm)) + (format + #t + "#" + (-> obj aid) + (-> obj task) + (-> obj status) + (-> obj user-uint64) + obj + ) + obj + ) + +(defmethod print actor-group ((obj actor-group)) + (format #t "# obj length)) + (format #t " ~A" (-> obj data s5-0 actor)) + ) + (format #t " @ #x~X>" obj) + obj + ) + +(defmethod inspect actor-group ((obj actor-group)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tlength: ~D~%" (-> obj length)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tdata[~D]: @ #x~X~%" (-> obj length) (-> obj data)) + (dotimes (s5-0 (-> obj length)) + (format #t "~T [~D] ~A / ~D~%" s5-0 (-> obj data s5-0 actor) (-> obj data s5-0 id)) + ) + obj + ) + +(defmethod birth! entity ((obj entity)) + (format #t "birth ~A~%" obj) + obj + ) + +;; definition for method 23 of type entity +(defmethod kill! entity ((obj entity)) + (format #t "kill ~A~%" obj) + obj + ) + +;; definition for method 2 of type entity +(defmethod print entity ((obj entity)) + (format #t "#<~A :name ~S @ #x~X>" (-> obj type) (res-lump-struct obj 'name structure) obj) + obj + ) + +;; definition for method 26 of type entity +(defmethod get-level entity ((obj entity)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (if (and (>= (the-as int obj) (the-as int (-> a1-3 heap base))) + (< (the-as int obj) (the-as int (-> a1-3 heap top-base))) + ) + (return a1-3) + ) + ) + ) + ) + (-> *level* default-level) + ) + +;; definition for function entity-by-name +(defun entity-by-name ((arg0 string)) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (let ((s3-0 (-> s4-0 bsp actors))) + (when (nonzero? s3-0) + (dotimes (s2-0 (-> s3-0 length)) + (let ((s1-0 (-> s3-0 data s2-0 actor))) + (if (string= (res-lump-struct s1-0 'name string) arg0) + (return s1-0) + ) + ) + ) + ) + ) + (let ((s3-1 (-> s4-0 bsp nav-meshes))) + (when (nonzero? s3-1) + (dotimes (s2-1 (-> s3-1 length)) + (let ((s1-1 (-> s3-1 s2-1))) + (if (string= (res-lump-struct s1-1 'name string) arg0) + (return s1-1) + ) + ) + ) + ) + ) + (let ((s3-2 (-> s4-0 bsp race-meshes))) + (when (nonzero? s3-2) + (dotimes (s2-2 (-> s3-2 length)) + (let ((s1-2 (-> s3-2 s2-2))) + (if (string= (res-lump-struct s1-2 'name string) arg0) + (return s1-2) + ) + ) + ) + ) + ) + (let ((s4-1 (-> s4-0 bsp cameras))) + (when (nonzero? s4-1) + (dotimes (s3-3 (-> s4-1 length)) + (let ((s2-3 (-> s4-1 s3-3))) + (if (string= (res-lump-struct s2-3 'name string) arg0) + (return s2-3) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity #f) + ) + +;; definition for function entity-by-type +(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? s2-0 entity-actor) (= (-> s2-0 etype) arg0)) + (return s2-0) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity-actor #f) + ) + +;; definition for function entity-by-aid +(defun entity-by-aid ((arg0 uint)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (let ((a1-4 (-> a1-3 entity))) + (when (nonzero? a1-4) + (let ((a2-4 0) + (a3-2 (+ (-> a1-4 length) -1)) + ) + 0 + (while (>= a3-2 a2-4) + (let* ((t0-3 (+ a2-4 (/ (- a3-2 a2-4) 2))) + (t1-2 (-> a1-4 data t0-3)) + (t2-0 (-> t1-2 perm aid)) + ) + (cond + ((= t2-0 arg0) + (return (-> t1-2 entity)) + ) + ((< (the-as uint t2-0) arg0) + (set! a2-4 (+ t0-3 1)) + ) + (else + (set! a3-2 (+ t0-3 -1)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity #f) + ) + +;; definition for function entity-actor-from-level-name +;; WARN: Return type mismatch entity vs entity-actor. +(defun entity-actor-from-level-name ((arg0 level)) + (let ((v0-0 (the-as entity #f))) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (when (= (-> s4-0 name) arg0) + (when (zero? (-> s4-0 entity length)) + (format 0 "ERROR: level ~s has no entities!!" (-> s4-0 name)) + (when *debug-segment* + (break!) + 0 + ) + ) + (set! v0-0 (-> s4-0 entity data 0 entity)) + ) + ) + ) + ) + (the-as entity-actor v0-0) + ) + ) + +;; definition for method 18 of type level-group +;; WARN: Return type mismatch int vs none. +(defmethod level-group-method-18 level-group ((obj level-group)) + (when (not (paused?)) + (dotimes (s5-0 (-> obj length)) + (let ((v1-4 (-> obj level s5-0))) + (when (= (-> v1-4 status) 'active) + (let ((s4-0 (-> v1-4 bsp nav-meshes))) + (when (nonzero? s4-0) + (dotimes (s3-0 (-> s4-0 length)) + (nav-mesh-method-26 (-> s4-0 s3-0 nav-mesh)) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function entity-nav-mesh-by-aid +(defun entity-nav-mesh-by-aid ((arg0 actor-id)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (let ((a1-5 (-> a1-3 bsp nav-meshes))) + (when (nonzero? a1-5) + (let ((a2-4 0) + (a3-2 (+ (-> a1-5 length) -1)) + ) + 0 + (while (>= a3-2 a2-4) + (let* ((t0-3 (+ a2-4 (/ (- a3-2 a2-4) 2))) + (t1-2 (-> a1-5 t0-3)) + (t2-0 (-> t1-2 aid)) + ) + (cond + ((= t2-0 arg0) + (return t1-2) + ) + ((< t2-0 (the-as uint arg0)) + (set! a2-4 (+ t0-3 1)) + ) + (else + (set! a3-2 (+ t0-3 -1)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity-nav-mesh #f) + ) + +;; definition for function nav-mesh-from-res-tag +(defun nav-mesh-from-res-tag ((arg0 entity) (arg1 symbol) (arg2 int)) + (let ((v1-1 (res-lump-data arg0 arg1 pointer)) + (gp-0 (the-as nav-mesh #f)) + ) + (when v1-1 + (let* ((s5-1 (entity-nav-mesh-by-aid (the-as actor-id (-> (the-as (pointer uint32) (&+ v1-1 (* arg2 4))))))) + (v1-3 (if (type? s5-1 entity-nav-mesh) + s5-1 + ) + ) + ) + (if v1-3 + (set! gp-0 (-> v1-3 nav-mesh)) + ) + ) + ) + gp-0 + ) + ) + +;; definition for function entity-by-meters +(defun entity-by-meters ((arg0 float) (arg1 float) (arg2 float)) + (dotimes (v1-0 (-> *level* length)) + (let ((a3-3 (-> *level* level v1-0))) + (when (= (-> a3-3 status) 'active) + (let ((a3-5 (-> a3-3 bsp actors))) + (when (nonzero? a3-5) + (dotimes (t0-4 (-> a3-5 length)) + (let* ((t1-3 (-> a3-5 data t0-4 actor)) + (t2-1 (-> t1-3 extra trans)) + ) + (if (and (= (the float (the int (-> t2-1 x))) arg0) + (= (the float (the int (-> t2-1 y))) arg1) + (= (the float (the int (-> t2-1 z))) arg2) + ) + (return t1-3) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity-actor #f) + ) + +;; definition for function process-by-ename +(defun process-by-ename ((arg0 string)) + (let ((v1-0 (entity-by-name arg0))) + (if v1-0 + (-> v1-0 extra process) + ) + ) + ) + +;; definition for function entity-process-count +(defun entity-process-count ((arg0 symbol)) + (let ((gp-0 0)) + (dotimes (s4-0 (-> *level* length)) + (let ((s3-0 (-> *level* level s4-0))) + (when (= (-> s3-0 status) 'active) + (let ((s2-0 (-> s3-0 bsp level entity))) + (dotimes (s1-0 (-> s2-0 length)) + (let ((v1-9 (-> s2-0 data s1-0 entity))) + (case arg0 + (('vis) + (if (is-object-visible? s3-0 (-> v1-9 extra vis-id)) + (+! gp-0 1) + ) + ) + (else + (if (-> v1-9 extra process) + (+! gp-0 1) + ) + ) + ) + ) + ) + ) + ) + ) + ) + gp-0 + ) + ) + +;; definition for function entity-count +(defun entity-count () + (let ((v0-0 0)) + (dotimes (v1-0 (-> *level* length)) + (let ((a0-3 (-> *level* level v1-0))) + (when (= (-> a0-3 status) 'active) + (let ((a0-6 (-> a0-3 bsp level entity))) + (dotimes (a1-3 (-> a0-6 length)) + (-> a0-6 data a1-3 entity) + (+! v0-0 1) + ) + ) + ) + ) + ) + v0-0 + ) + ) + +;; definition for function entity-remap-names +;; WARN: Return type mismatch int vs none. +(defun entity-remap-names ((arg0 pair)) + (let ((s5-0 (car arg0))) + (while (not (null? arg0)) + (let ((a0-2 (entity-by-meters + (the float (/ (the-as int (car (cdr s5-0))) 8)) + (the float (/ (the-as int (car (cdr (cdr s5-0)))) 8)) + (the float (/ (the-as int (car (cdr (cdr (cdr s5-0))))) 8)) + ) + ) + ) + (if a0-2 + (add-data! + a0-2 + (new 'static 'res-tag :name 'name :key-frame -1000000000.0 :elt-count #x1 :elt-type string) + (the-as pointer (car s5-0)) + ) + ) + ) + (set! arg0 (cdr arg0)) + (set! s5-0 (car arg0)) + ) + ) + 0 + (none) + ) + +;; definition (debug) for function process-status-bits +;; WARN: Return type mismatch int vs none. +(defun-debug process-status-bits ((arg0 process) (arg1 symbol)) + (let* ((s5-0 arg0) + (s3-0 (if (type? s5-0 process-drawable) + s5-0 + ) + ) + ) + (if (and s3-0 (zero? (-> (the-as process-drawable s3-0) draw))) + (set! s3-0 (the-as process #f)) + ) + (let ((s5-1 format) + (s4-0 "~C~C~C") + (a2-0 (if (and arg0 (zero? (logand (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) + 114 + 32 + ) + ) + (a3-0 (if (and (the-as process-drawable s3-0) + (logtest? (-> (the-as process-drawable s3-0) draw status) (draw-control-status on-screen)) + ) + 100 + 32 + ) + ) + (t0-0 (cond + ((and (the-as process-drawable s3-0) + (logtest? (-> (the-as process-drawable s3-0) draw status) (draw-control-status on-screen)) + ) + (let ((v1-14 (-> (the-as process-drawable s3-0) draw cur-lod))) + (cond + ((zero? v1-14) + 48 + ) + ((= v1-14 1) + 49 + ) + ((= v1-14 2) + 50 + ) + ((= v1-14 3) + 51 + ) + ((= v1-14 4) + 52 + ) + ) + ) + ) + (else + 32 + ) + ) + ) + ) + (s5-1 arg1 s4-0 a2-0 a3-0 t0-0) + ) + ) + 0 + (none) + ) + +;; definition for function process-entity-set! +(defun process-entity-set! ((arg0 process) (arg1 entity)) + (set! (-> arg0 entity) arg1) + (if arg1 + (set! (-> arg0 level) (-> arg1 extra level)) + (set! (-> arg0 level) (-> *level* default-level)) + ) + arg1 + ) + +;; definition for function process-task-mask +(defun process-task-mask ((arg0 process)) + (-> arg0 level task-mask) + ) + +;; definition for method 2 of type process +(defmethod print process ((obj process)) + (cond + ((and (-> obj top-thread) (!= (-> obj status) 'dead)) + (format #t "#<~A ~S ~A :state ~S :flags " (-> obj type) (-> obj name) (-> obj status) (if (-> obj state) + (-> obj state name) + ) + ) + (process-status-bits obj #t) + (format + #t + " :stack ~D/~D :heap ~D/~D @ #x~X>" + (&- (-> obj top-thread stack-top) (the-as uint (-> obj top-thread sp))) + (-> obj main-thread stack-size) + (- (-> obj allocated-length) (&- (-> obj heap-top) (the-as uint (-> obj heap-cur)))) + (-> obj allocated-length) + obj + ) + ) + (else + (format + #t + "#<~A ~S ~A :state ~S @ #x~X" + (-> obj type) + (-> obj name) + (-> obj status) + (if (-> obj state) + (-> obj state name) + ) + obj + ) + ) + ) + obj + ) + +;; definition for method 3 of type entity +(defmethod inspect entity ((obj entity)) + ((the-as (function entity entity) (find-parent-method entity 3)) obj) + (format #t "~Ttrans: ~`vector`P~%" (-> obj trans)) + (format #t "~Taid: ~D~%" (-> obj aid)) + obj + ) + +;; definition for method 3 of type entity-nav-mesh +(defmethod inspect entity-nav-mesh ((obj entity-nav-mesh)) + ((the-as (function object object) (find-parent-method entity-nav-mesh 3)) obj) + (format #t "~Tnav-mesh ~A~%" (-> obj nav-mesh)) + (if (and (-> obj nav-mesh) (nonzero? (-> obj nav-mesh))) + (inspect (-> obj nav-mesh)) + ) + obj + ) + +;; definition for method 3 of type entity-actor +(defmethod inspect entity-actor ((obj entity-actor)) + ((the-as (function entity entity) (find-parent-method entity-actor 3)) obj) + (format #t "~Tetype: ~A~%" (-> obj etype)) + (format #t "~Ttask: ~d~%" (-> obj task)) + (format #t "~Tkill-mask: #x~X : (" (-> obj kill-mask)) + (let ((s5-0 (-> obj kill-mask))) + (if (= (logand s5-0 (task-mask task0)) (task-mask task0)) + (format #t "task0 ") + ) + (if (= (logand s5-0 (task-mask task2)) (task-mask task2)) + (format #t "task2 ") + ) + (if (= (logand s5-0 (task-mask task4)) (task-mask task4)) + (format #t "task4 ") + ) + (if (= (logand s5-0 (task-mask task6)) (task-mask task6)) + (format #t "task6 ") + ) + (if (= (logand s5-0 (task-mask ctywide)) (task-mask ctywide)) + (format #t "ctywide ") + ) + (if (= (logand s5-0 (task-mask never)) (task-mask never)) + (format #t "never ") + ) + (if (= (logand (task-mask movie1) s5-0) (task-mask movie1)) + (format #t "movie1 ") + ) + (if (= (logand s5-0 (task-mask dummy1)) (task-mask dummy1)) + (format #t "dummy1 ") + ) + (if (= (logand s5-0 (task-mask primary0)) (task-mask primary0)) + (format #t "primary0 ") + ) + (if (= (logand s5-0 (task-mask task1)) (task-mask task1)) + (format #t "task1 ") + ) + (if (= (logand s5-0 (task-mask task3)) (task-mask task3)) + (format #t "task3 ") + ) + (if (= (logand s5-0 (task-mask task5)) (task-mask task5)) + (format #t "task5 ") + ) + (if (= (logand s5-0 (task-mask task7)) (task-mask task7)) + (format #t "task7 ") + ) + (if (= (logand (task-mask movie2) s5-0) (task-mask movie2)) + (format #t "movie2 ") + ) + (if (= (logand s5-0 (task-mask dummy2)) (task-mask dummy2)) + (format #t "dummy2 ") + ) + (if (= (logand s5-0 (task-mask done)) (task-mask done)) + (format #t "done ") + ) + (if (= (logand s5-0 (task-mask special)) (task-mask special)) + (format #t "special ") + ) + (if (= (logand (task-mask movie0) s5-0) (task-mask movie0)) + (format #t "movie0 ") + ) + (if (= (logand s5-0 (task-mask dummy0)) (task-mask dummy0)) + (format #t "dummy0 ") + ) + ) + (format #t ")~%") + (format #t "~Tvis-id: ~d~%" (-> obj vis-id)) + (format #t "~Tquat: ~`vector`P~%" (-> obj quat)) + obj + ) + +;; definition for method 29 of type entity-actor +;; WARN: Return type mismatch entity-actor vs none. +(defmethod debug-print entity-actor ((obj entity-actor) (arg0 symbol) (arg1 type)) + (let ((s4-0 (-> obj etype))) + (when (or (not arg1) (and s4-0 (valid? s4-0 type #f #f 0) (type-type? s4-0 arg1))) + (format #t "~5D #x~8X ~-26S" (-> obj extra vis-id) obj (res-lump-struct obj 'name structure)) + (let ((t9-4 format) + (a0-5 #t) + (a1-5 "~8D ~3D ~-8S #x~4X") + (a2-4 (-> obj extra perm aid)) + (a3-3 (-> obj extra perm task)) + (t0-3 (the-as object (-> obj extra level nickname))) + ) + (set! t0-3 (cond + ((the-as string t0-3) + (empty) + t0-3 + ) + (else + (-> obj extra level name) + ) + ) + ) + (t9-4 a0-5 a1-5 a2-4 a3-3 t0-3 (-> obj extra perm status)) + ) + (if (= arg0 'entity-meters) + (format #t " :trans ~14m ~14m ~14m " (-> obj extra trans x) (-> obj extra trans y) (-> obj extra trans z)) + (format #t " :trans ~14f ~14f ~14f " (-> obj extra trans x) (-> obj extra trans y) (-> obj extra trans z)) + ) + (let* ((s3-2 (-> obj extra process)) + (s4-2 (if (type? s3-2 process-drawable) + s3-2 + ) + ) + ) + (format + #t + ":pr #x~8X ~-12S ~-21S ~-5S/~-5S " + (if (-> obj extra process) + (-> obj extra process) + 0 + ) + (if (-> obj extra process) + (-> obj extra process name) + "" + ) + (if (and (-> obj extra process) (-> obj extra process state)) + (-> obj extra process state name) + "" + ) + (if (-> obj extra process) + (* (- (-> obj extra process allocated-length) + (&- (-> obj extra process heap-top) (the-as uint (-> obj extra process heap-cur))) + ) + 8 + ) + "" + ) + (if (-> obj extra process) + (* (-> obj extra process allocated-length) 8) + "" + ) + ) + (process-status-bits s4-2 #t) + ) + (format #t "~%") + (if (= arg0 'entity-perm) + (format #t " ~`entity-perm`P~%" (-> obj extra perm)) + ) + ) + ) + (none) + ) + +;; definition for method 14 of type level-group +;; WARN: Return type mismatch int vs none. +(defmethod debug-print-entities level-group ((obj level-group) (arg0 symbol) (arg1 type)) + (let ((t9-0 format) + (a0-1 #t) + (a1-1 + " id address name aid tsk lev status x y z address name state heap flags~%" + ) + ) + 0 + 0 + 0 + (t9-0 a0-1 a1-1) + ) + (dotimes (s3-0 (-> obj length)) + (let ((s2-0 (-> obj level s3-0))) + (when (= (-> s2-0 status) 'active) + (case arg0 + (('art-group) + (format #t "level ~A~%" (-> s2-0 name)) + (dotimes (s1-0 (-> s2-0 art-group art-group-array length)) + (format #t "~T~2D ~S~%" s1-0 (-> s2-0 art-group art-group-array s1-0 name)) + ) + ) + (else + (let ((s2-1 (-> s2-0 bsp level entity))) + (dotimes (s1-1 (-> s2-1 length)) + (debug-print (the-as entity-actor (-> s2-1 data s1-1 entity)) arg0 arg1) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 24 of type entity-actor +;; INFO: Used lq/sq +;; WARN: Return type mismatch entity-actor vs none. +(defmethod add-to-level! entity-actor ((obj entity-actor) (arg0 level-group) (arg1 level) (arg2 actor-id)) + (let ((v1-4 (-> arg1 entity data (-> arg1 entity length)))) + (+! (-> arg1 entity length) 1) + (set! (-> v1-4 process) #f) + (set! (-> v1-4 entity) obj) + (set! (-> obj extra) v1-4) + (cond + ((-> arg0 entity-link) + (let* ((a0-6 (-> arg0 entity-link)) + (t0-1 (-> a0-6 next-link)) + ) + (set! (-> a0-6 next-link) v1-4) + (set! (-> v1-4 prev-link) a0-6) + (set! (-> v1-4 next-link) t0-1) + (set! (-> t0-1 prev-link) v1-4) + ) + ) + (else + (set! (-> v1-4 prev-link) v1-4) + (set! (-> v1-4 next-link) v1-4) + ) + ) + (set! (-> arg0 entity-link) v1-4) + (set! (-> v1-4 trans quad) (-> obj trans quad)) + ) + (set! (-> obj extra perm aid) arg2) + (set! (-> obj extra level) arg1) + (set! (-> obj extra kill-mask) + (logior (logand (-> obj kill-mask) + (task-mask + task0 + task1 + task2 + task3 + task4 + task5 + task6 + task7 + done + dummy0 + dummy1 + dummy2 + special + primary0 + ctywide + never + ) + ) + (logclear + (task-mask movie0 movie1 movie2 tm19 tm20 tm21 tm22 tm23 tm24 tm25 tm26 tm27 tm28 tm29 tm30 tm31) + (-> obj kill-mask) + ) + ) + ) + (if (not (-> arg1 vis-info 0)) + (set! (-> obj extra vis-dist) (res-lump-float obj 'vis-dist :default 40960000.0)) + ) + (cond + ((= (-> obj type) entity-actor) + (set! (-> obj extra perm task) (the-as uint (-> obj task))) + (set! (-> obj extra vis-id) (-> obj vis-id)) + ) + (else + (set! (-> obj extra perm task) (the-as uint 0)) + (set! (-> obj extra vis-id) 0) + 0 + ) + ) + (none) + ) + +;; definition for method 25 of type entity +(defmethod remove-from-level! entity ((obj entity) (arg0 level-group)) + (let ((v1-0 (-> obj extra))) + (cond + ((= (-> v1-0 next-link) v1-0) + (set! (-> arg0 entity-link) #f) + ) + (else + (set! (-> v1-0 next-link prev-link) (-> v1-0 prev-link)) + (set! (-> v1-0 prev-link next-link) (-> v1-0 next-link)) + (if (= (-> arg0 entity-link) v1-0) + (set! (-> arg0 entity-link) (-> v1-0 prev-link)) + ) + ) + ) + ) + obj + ) + +;; definition for function update-actor-vis-box +;; WARN: Return type mismatch int vs none. +(defun update-actor-vis-box ((arg0 process-drawable) (arg1 vector) (arg2 vector)) + (when (and arg0 (nonzero? (-> arg0 draw)) (zero? (logand (-> arg0 draw status) (draw-control-status no-draw)))) + (let ((v1-5 (-> arg0 draw origin)) + (f0-0 (-> arg0 draw bounds w)) + ) + (set! (-> arg1 x) (fmin (-> arg1 x) (- (-> v1-5 x) f0-0))) + (set! (-> arg1 y) (fmin (-> arg1 y) (- (-> v1-5 y) f0-0))) + (set! (-> arg1 z) (fmin (-> arg1 z) (- (-> v1-5 z) f0-0))) + (set! (-> arg2 x) (fmax (-> arg2 x) (+ (-> v1-5 x) f0-0))) + (set! (-> arg2 y) (fmax (-> arg2 y) (+ (-> v1-5 y) f0-0))) + (set! (-> arg2 z) (fmax (-> arg2 z) (+ (-> v1-5 z) f0-0))) + ) + ) + 0 + (none) + ) + +;; definition for method 25 of type level-group +;; WARN: Return type mismatch int vs none. +(defmethod update-vis-volumes level-group ((obj level-group)) + (local-vars (sv-16 pointer) (sv-20 pointer) (sv-24 pointer) (sv-28 process)) + (dotimes (s5-0 (-> obj length)) + (let ((v1-3 (-> obj level s5-0))) + (when (= (-> v1-3 status) 'active) + (let ((s4-0 (-> v1-3 bsp level entity))) + (dotimes (s3-0 (-> s4-0 length)) + (let ((s2-0 (-> s4-0 data s3-0 entity))) + (set! sv-16 (res-lump-data s2-0 'visvol pointer)) + (set! sv-20 (&+ sv-16 0)) + (set! sv-24 (&+ sv-16 16)) + (let ((s2-1 (-> s2-0 extra process))) + (set! sv-28 (if (type? s2-1 process-drawable) + s2-1 + ) + ) + ) + ) + (when sv-28 + (update-actor-vis-box (the-as process-drawable sv-28) (the-as vector sv-20) (the-as vector sv-24)) + (let ((s2-2 (-> sv-28 child))) + (while s2-2 + (let ((s1-0 update-actor-vis-box) + (s0-0 (-> s2-2 0)) + ) + (s1-0 + (the-as process-drawable (if (type? s0-0 process-drawable) + s0-0 + ) + ) + (the-as vector sv-20) + (the-as vector sv-24) + ) + ) + (set! s2-2 (-> s2-2 0 brother)) + ) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function expand-bounding-box +;; WARN: Return type mismatch int vs none. +(defun expand-bounding-box ((arg0 vector) (arg1 vector) (arg2 vector) (arg3 vector)) + (set! (-> arg0 x) (fmin (-> arg0 x) (-> arg2 x))) + (set! (-> arg0 y) (fmin (-> arg0 y) (-> arg2 y))) + (set! (-> arg0 z) (fmin (-> arg0 z) (-> arg2 z))) + (set! (-> arg1 x) (fmax (-> arg1 x) (-> arg3 x))) + (set! (-> arg1 y) (fmax (-> arg1 y) (-> arg3 y))) + (set! (-> arg1 z) (fmax (-> arg1 z) (-> arg3 z))) + 0 + (none) + ) + +;; definition for method 26 of type level-group +;; INFO: Used lq/sq +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Return type mismatch int vs none. +(defmethod update-vis-volumes-from-nav-mesh level-group ((obj level-group)) + (local-vars + (sv-16 pointer) + (sv-20 vector) + (sv-24 vector) + (sv-28 float) + (sv-32 float) + (sv-36 vector) + (sv-40 entity) + (sv-48 res-tag) + (sv-96 vector) + (sv-112 vector) + ) + (dotimes (s5-0 (-> obj length)) + (let ((v1-3 (-> obj level s5-0))) + (when (= (-> v1-3 status) 'active) + (let ((s4-0 (-> v1-3 bsp level entity))) + (dotimes (s3-0 (-> s4-0 length)) + (let ((s2-0 (-> s4-0 data s3-0 entity))) + (set! sv-16 (res-lump-data s2-0 'visvol pointer)) + (set! sv-20 (the-as vector (&+ sv-16 0))) + (set! sv-24 (the-as vector (&+ sv-16 16))) + (set! sv-28 (the-as float -12288.0)) + (set! sv-32 (the-as float 12288.0)) + (set! sv-36 (-> s2-0 extra trans)) + (set! sv-40 s2-0) + (let ((v0-1 (entity-actor-lookup s2-0 'nav-mesh-actor 0))) + (if v0-1 + (set! sv-40 v0-1) + ) + ) + ) + (cond + ((type? sv-40 entity-actor) + (let ((v0-3 (res-lump-value sv-40 'enemy-options uint128 :time -1000000000.0))) + (cond + ((logtest? #x80000 v0-3) + (set! (-> sv-20 quad) (-> sv-36 quad)) + (set! (-> sv-24 quad) (-> sv-36 quad)) + (set! sv-28 (the-as float 409.6)) + (set! sv-32 (the-as float 409.6)) + ) + ((string-prefix= "battle" (res-lump-struct sv-40 'name string)) + (set! (-> sv-20 quad) (-> sv-36 quad)) + (set! (-> sv-24 quad) (-> sv-36 quad)) + (set! sv-48 (new 'static 'res-tag)) + (let ((v0-6 (res-lump-data sv-40 'actor-groups pointer :tag-ptr (& sv-48)))) + (when (and v0-6 (nonzero? (-> sv-48 elt-count))) + (let* ((s2-2 (-> (the-as (pointer actor-group) v0-6) 0)) + (s1-1 (-> s2-2 length)) + ) + (dotimes (s0-0 s1-1) + (let* ((a0-24 (-> s2-2 data s0-0 actor)) + (a0-25 (nav-mesh-from-res-tag a0-24 'nav-mesh-actor 0)) + ) + (when a0-25 + (set! sv-96 (new 'stack-no-clear 'vector)) + (set! sv-112 (new 'stack-no-clear 'vector)) + (nav-mesh-method-22 a0-25 sv-96 sv-112) + (expand-bounding-box sv-20 sv-24 sv-96 sv-112) + ) + ) + ) + ) + ) + ) + ) + (else + (let ((a0-28 (nav-mesh-from-res-tag sv-40 'nav-mesh-actor 0))) + (if a0-28 + (nav-mesh-method-22 a0-28 sv-20 sv-24) + ) + ) + ) + ) + ) + ) + (else + (set! (-> sv-20 quad) (-> sv-36 quad)) + (set! (-> sv-24 quad) (-> sv-36 quad)) + ) + ) + (+! (-> sv-20 x) sv-28) + (+! (-> sv-20 y) sv-28) + (+! (-> sv-20 z) sv-28) + (+! (-> sv-24 x) sv-32) + (+! (-> sv-24 y) sv-32) + (+! (-> sv-24 z) sv-32) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 27 of type level-group +;; INFO: Used lq/sq +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Return type mismatch int vs none. +(defmethod print-volume-sizes level-group ((obj level-group)) + (local-vars + (sv-16 pointer) + (sv-20 float) + (sv-24 vector) + (sv-28 type) + (sv-32 vector) + (sv-36 vector) + (sv-48 int) + (sv-64 entity) + (sv-80 structure) + ) + (let ((s5-0 0)) + (dotimes (v1-0 (-> obj length)) + (let ((a0-4 (-> obj level v1-0))) + (if (= (-> a0-4 status) 'active) + (+! s5-0 (-> a0-4 entity length)) + ) + ) + ) + (let ((s4-0 (the-as structure #f))) + (while (nonzero? s5-0) + 0 + (let ((s2-0 (the-as structure #f)) + (s3-0 (the-as entity #f)) + ) + (dotimes (s1-0 (-> obj length)) + (let ((v1-7 (-> obj level s1-0))) + (when (= (-> v1-7 status) 'active) + (let ((s0-0 (-> v1-7 entity))) + (set! sv-48 (-> s0-0 length)) + (while (nonzero? sv-48) + (set! sv-48 (+ sv-48 -1)) + (set! sv-64 (-> s0-0 data sv-48 entity)) + (set! sv-80 (res-lump-struct sv-64 'name structure)) + (when (and (or (not s4-0) (string>? (the-as string sv-80) (the-as string s4-0))) + (or (not s2-0) (string (the-as entity-actor s3-0) extra trans)) + (set! sv-28 (if (type? (the-as entity-actor s3-0) entity-actor) + (-> (the-as entity-actor s3-0) etype) + (the-as type #f) + ) + ) + (set! sv-32 (the-as vector (&+ sv-16 0))) + (set! sv-36 (the-as vector (&+ sv-16 16))) + (format #t "actor-vis ~S ~6,,1M " (res-lump-struct s3-0 'name structure) sv-20) + (format + #t + "~6,,1M ~6,,1M ~6,,1M ~6,,1M ~6,,1M ~6,,1M~%" + (- (-> sv-32 x) (-> sv-24 x)) + (- (-> sv-32 y) (-> sv-24 y)) + (- (-> sv-32 z) (-> sv-24 z)) + (- (-> sv-36 x) (-> sv-24 x)) + (- (-> sv-36 y) (-> sv-24 y)) + (- (-> sv-36 z) (-> sv-24 z)) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function expand-vis-box-with-point +;; WARN: Return type mismatch int vs none. +(defun expand-vis-box-with-point ((arg0 entity) (arg1 vector)) + (let ((v1-1 (res-lump-data arg0 'visvol (inline-array vector)))) + (when v1-1 + (let ((a0-2 (-> v1-1 0)) + (v1-2 (the-as (inline-array vector) (-> v1-1 1))) + ) + (set! (-> a0-2 x) (fmin (-> a0-2 x) (-> arg1 x))) + (set! (-> a0-2 y) (fmin (-> a0-2 y) (-> arg1 y))) + (set! (-> a0-2 z) (fmin (-> a0-2 z) (-> arg1 z))) + (set! (-> v1-2 0 x) (fmax (-> v1-2 0 x) (-> arg1 x))) + (set! (-> v1-2 0 y) (fmax (-> v1-2 0 y) (-> arg1 y))) + (set! (-> v1-2 0 z) (fmax (-> v1-2 0 z) (-> arg1 z))) + ) + ) + ) + 0 + (none) + ) + +;; definition of type debug-actor-info +(deftype debug-actor-info (basic) + ((name basic :offset-assert 4) + (handle handle :offset-assert 8) + (process basic :offset-assert 16) + (pid int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; definition for method 3 of type debug-actor-info +(defmethod inspect debug-actor-info ((obj debug-actor-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tname: ~A~%" (-> obj name)) + (format #t "~1Thandle: ~D~%" (-> obj handle)) + (format #t "~1Tprocess: ~A~%" (-> obj process)) + (format #t "~1Tpid: ~D~%" (-> obj pid)) + (label cfg-4) + obj + ) + +;; definition for symbol *debug-actor-info*, type debug-actor-info +(define *debug-actor-info* (new 'static 'debug-actor-info :name #f)) + +;; definition for symbol *pid-string*, type string +(define *pid-string* (new 'global 'string 128 (the-as string #f))) + +;; definition (debug) for function debug-actor +;; WARN: Return type mismatch int vs none. +(defun-debug debug-actor ((arg0 string)) + (let ((gp-0 *debug-actor-info*)) + (set! (-> gp-0 name) #f) + (set! (-> gp-0 handle) (the-as handle #f)) + (cond + ((string-prefix= "pid " arg0) + (let ((s4-0 (length arg0))) + (when (< 4 s4-0) + (clear *pid-string*) + (catn-string<-charp *pid-string* (&-> arg0 data 4) (+ s4-0 -4)) + (set! (-> gp-0 pid) (string->int *pid-string*)) + ) + ) + (let ((gp-1 (lambda ((arg0 process)) + (let ((v1-0 *debug-actor-info*)) + (if (= (-> arg0 pid) (-> v1-0 pid)) + (set! (-> v1-0 handle) (process->handle arg0)) + ) + ) + (none) + ) + ) + ) + (iterate-process-tree *pusher-pool* (the-as (function object object) gp-1) *null-kernel-context*) + (iterate-process-tree *entity-pool* (the-as (function object object) gp-1) *null-kernel-context*) + ) + ) + (else + (set! (-> gp-0 name) arg0) + ) + ) + ) + 0 + (none) + ) + +;; definition (debug) for function draw-actor-marks +;; WARN: Return type mismatch int vs none. +(defun-debug draw-actor-marks ((arg0 process)) + (local-vars (sv-16 entity) (sv-20 (pointer int32))) + (b! + (not (and (or (type? arg0 process-drawable) (= (-> arg0 type) part-tracker) (type? arg0 part-spawner)) + (nonzero? (-> (the-as part-spawner arg0) root)) + ) + ) + cfg-51 + :delay (nop!) + ) + (when (type? arg0 process-drawable) + (when (and (-> (the-as process-drawable arg0) nav) (nonzero? (-> (the-as process-drawable arg0) nav))) + (if (= (the-as process-drawable arg0) *debug-actor*) + (debug-draw (-> (the-as process-drawable arg0) nav)) + ) + ) + (if (nonzero? (-> (the-as process-drawable arg0) path)) + (debug-draw (-> (the-as process-drawable arg0) path)) + ) + (if (nonzero? (-> (the-as process-drawable arg0) vol)) + (debug-draw (-> (the-as process-drawable arg0) vol)) + ) + (if (and (nonzero? (-> (the-as process-drawable arg0) draw)) *display-actor-vis*) + (add-debug-sphere + #t + (bucket-id debug2) + (-> (the-as process-drawable arg0) draw origin) + (-> (the-as process-drawable arg0) draw bounds w) + (new 'static 'rgba :r #x80 :a #x80) + ) + ) + ) + (add-debug-x + #t + (bucket-id debug-no-zbuf1) + (-> (the-as process-drawable arg0) root trans) + (new 'static 'rgba :r #x80 :g #xff :b #x80 :a #x80) + ) + (set! sv-16 (-> (the-as process-drawable arg0) entity)) + (cond + ((and sv-16 (= (-> sv-16 extra process) (the-as process-drawable arg0))) + (add-debug-text-3d + #t + (bucket-id debug-no-zbuf1) + (res-lump-struct sv-16 'name string) + (-> (the-as process-drawable arg0) root trans) + (if (logtest? (-> sv-16 extra perm status) (entity-perm-status bit-0 bit-1)) + (font-color precursor-#ec3b00) + (font-color #dadada) + ) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 8)) + ) + (set! sv-20 (res-lump-data sv-16 'eco-info (pointer int32) :time 0.0)) + (when sv-20 + (let ((s5-1 add-debug-text-3d) + (s4-1 #t) + (s3-1 318) + ) + (format (clear *temp-string*) "~S ~D~%" (pickup-type->string (the-as pickup-type (-> sv-20 0))) (-> sv-20 1)) + (s5-1 + s4-1 + (the-as bucket-id s3-1) + *temp-string* + (-> (the-as process-drawable arg0) root trans) + (font-color #dadada) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 24)) + ) + ) + ) + (let ((v1-49 (res-lump-struct sv-16 'art-name structure))) + (if (and v1-49 (logtest? (the-as int v1-49) 1)) + (add-debug-text-3d + #t + (bucket-id debug-no-zbuf1) + (symbol->string v1-49) + (-> (the-as process-drawable arg0) root trans) + (font-color #dadada) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 24)) + ) + ) + ) + (when *display-actor-vis* + (let ((v1-54 (res-lump-data sv-16 'visvol pointer)) + (a1-14 (-> sv-16 extra vis-id)) + ) + (if v1-54 + (add-debug-box + #t + (bucket-id debug-no-zbuf1) + (the-as vector (&+ v1-54 0)) + (the-as vector (&+ v1-54 16)) + (if (is-object-visible? (-> sv-16 extra level) a1-14) + (new 'static 'rgba :g #x80 :b #x80 :a #x80) + (new 'static 'rgba :r #x80 :b #x80 :a #x80) + ) + ) + ) + ) + ) + ) + (else + (let ((s5-3 add-debug-text-3d) + (s4-3 #t) + (s3-3 318) + ) + (format (clear *temp-string*) "pid ~d" (-> (the-as process-drawable arg0) pid)) + (s5-3 + s4-3 + (the-as bucket-id s3-3) + *temp-string* + (-> (the-as process-drawable arg0) root trans) + (font-color green-#3df23d) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 8)) + ) + ) + ) + ) + (add-debug-text-3d + #t + (bucket-id debug-no-zbuf1) + (if (-> (the-as process-drawable arg0) state) + (symbol->string (-> (the-as process-drawable arg0) state name)) + "#f" + ) + (-> (the-as process-drawable arg0) root trans) + (font-color #dadada) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 16)) + ) + (label cfg-51) + 0 + (none) + ) + +;; definition for method 15 of type level-group +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-actors level-group ((obj level-group) (arg0 symbol)) + (local-vars + (sv-16 symbol) + (sv-20 vector) + (sv-32 int) + (sv-48 (function symbol bucket-id vector vector rgba symbol)) + (sv-64 symbol) + (sv-80 int) + (sv-96 pointer) + (sv-112 pointer) + (sv-128 int) + ) + (with-pp + (let ((s4-0 *debug-actor-info*)) + (set! (-> s4-0 process) #f) + (if (zero? (-> s4-0 handle pid)) + (set! (-> s4-0 handle) + (logior (logand (-> s4-0 handle) (shl (the-as uint #xffffffff) 32)) (shr (shl (the-as int #f) 32) 32)) + ) + ) + (let ((v0-0 (handle->process (-> s4-0 handle)))) + (when (not v0-0) + (if (-> s4-0 name) + (set! v0-0 (process-by-name (the-as string (-> s4-0 name)) *active-pool*)) + ) + ) + (set! (-> s4-0 process) v0-0) + ) + (set! *debug-actor* (-> s4-0 process)) + ) + (set! sv-16 arg0) + (when (and sv-16 (not (or (= *master-mode* 'menu) (= *master-mode* 'progress)))) + (cond + ((= sv-16 'process) + (let ((s5-1 draw-actor-marks)) + (iterate-process-tree *pusher-pool* (the-as (function object object) s5-1) *null-kernel-context*) + (iterate-process-tree *entity-pool* (the-as (function object object) s5-1) *null-kernel-context*) + ) + ) + (else + (dotimes (s5-2 (-> obj length)) + (let ((v1-25 (-> obj level s5-2))) + (when (= (-> v1-25 status) 'active) + (let ((s4-1 (-> v1-25 bsp level entity))) + (dotimes (s3-0 (-> s4-1 length)) + (let ((s2-0 (-> s4-1 data s3-0 entity))) + (set! sv-20 (-> s2-0 extra trans)) + (when (or (= sv-16 'full) (-> s2-0 extra process)) + (add-debug-x #t (bucket-id debug-no-zbuf1) sv-20 (if (-> s2-0 extra process) + (new 'static 'rgba :r #x80 :g #xff :b #x80 :a #x80) + (new 'static 'rgba :r #xff :a #x80) + ) + ) + (let ((s1-0 add-debug-text-3d) + (s0-0 #t) + ) + (set! sv-32 318) + (let ((a2-4 (res-lump-struct s2-0 'name structure)) + (a3-2 sv-20) + (t0-1 (if (logtest? (-> s2-0 extra perm status) (entity-perm-status bit-0 bit-1)) + 1 + 5 + ) + ) + (t1-1 (new 'static 'vector2h :data (new 'static 'array int16 2 0 8))) + ) + (s1-0 s0-0 (the-as bucket-id sv-32) (the-as string a2-4) a3-2 (the-as font-color t0-1) t1-1) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (when (and *display-actor-vis* (not *debug-actor*)) + (let ((s5-3 *display-actor-vis*)) + (dotimes (s4-2 (-> obj length)) + (let ((s3-1 (-> obj level s4-2))) + (when (= (-> s3-1 status) 'active) + (let ((s2-1 (-> s3-1 bsp level entity))) + (dotimes (s1-1 (-> s2-1 length)) + (let ((s0-1 (-> s2-1 data s1-1 entity))) + (let ((v0-6 (res-lump-data s0-1 'visvol pointer)) + (a1-10 (-> s0-1 extra vis-id)) + ) + (when (and v0-6 (or (= s5-3 #t) (= s5-3 'box))) + (set! sv-48 add-debug-box) + (set! sv-64 #t) + (set! sv-80 318) + (set! sv-96 (&+ v0-6 0)) + (set! sv-112 (&+ v0-6 16)) + (let ((t0-3 (if (is-object-visible? s3-1 a1-10) + (the-as uint #x80808000) + (the-as uint #x80800080) + ) + ) + ) + (sv-48 sv-64 (the-as bucket-id sv-80) (the-as vector sv-96) (the-as vector sv-112) (the-as rgba t0-3)) + ) + ) + ) + (when (or (= s5-3 #t) (= s5-3 'sphere)) + (let ((s0-2 (-> s0-1 extra process))) + (when s0-2 + (when (and (type? s0-2 process-drawable) (nonzero? (-> (the-as process-drawable s0-2) draw))) + (add-debug-x + #t + (bucket-id debug-no-zbuf1) + (-> (the-as process-drawable s0-2) root trans) + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + ) + (add-debug-sphere + #t + (bucket-id debug2) + (-> (the-as process-drawable s0-2) draw origin) + (-> (the-as process-drawable s0-2) draw bounds w) + (new 'static 'rgba :r #x80 :a #x80) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if *generate-actor-vis* + (update-vis-volumes obj) + ) + (cond + (*debug-actor* + (let* ((s4-3 *debug-actor*) + (s5-4 (if (type? s4-3 process-drawable) + s4-3 + ) + ) + ) + (when s5-4 + (if (nonzero? (-> (the-as process-drawable s5-4) skel)) + (debug-print-channels (-> (the-as process-drawable s5-4) skel) (the-as symbol *stdcon*)) + ) + (when (and (nonzero? (-> (the-as process-drawable s5-4) nav)) + (-> (the-as process-drawable s5-4) nav) + *display-nav-marks* + ) + (let ((s4-4 (-> (the-as process-drawable s5-4) nav state flags))) + (if (= (logand s4-4 (nav-state-flag in-target-poly)) (nav-state-flag in-target-poly)) + (format *stdcon* "in-target-poly ") + ) + (if (= (logand s4-4 (nav-state-flag directional-mode)) (nav-state-flag directional-mode)) + (format *stdcon* "directional-mode ") + ) + (if (= (logand s4-4 (nav-state-flag initialized)) (nav-state-flag initialized)) + (format *stdcon* "initialized ") + ) + (if (= (logand s4-4 (nav-state-flag display-marks)) (nav-state-flag display-marks)) + (format *stdcon* "display-marks ") + ) + (if (= (logand s4-4 (nav-state-flag recovery-mode)) (nav-state-flag recovery-mode)) + (format *stdcon* "recovery-mode ") + ) + (if (= (logand s4-4 (nav-state-flag touching-sphere)) (nav-state-flag touching-sphere)) + (format *stdcon* "touching-sphere ") + ) + (if (= (logand s4-4 (nav-state-flag trapped-by-sphere)) (nav-state-flag trapped-by-sphere)) + (format *stdcon* "trapped-by-sphere ") + ) + (if (= (logand s4-4 (nav-state-flag blocked)) (nav-state-flag blocked)) + (format *stdcon* "blocked ") + ) + (if (= (logand s4-4 (nav-state-flag avoiding-sphere)) (nav-state-flag avoiding-sphere)) + (format *stdcon* "avoiding-sphere ") + ) + (if (= (logand s4-4 (nav-state-flag target-inside)) (nav-state-flag target-inside)) + (format *stdcon* "target-inside ") + ) + (if (= (logand s4-4 (nav-state-flag debug)) (nav-state-flag debug)) + (format *stdcon* "debug ") + ) + (if (= (logand s4-4 (nav-state-flag at-gap)) (nav-state-flag at-gap)) + (format *stdcon* "at-gap ") + ) + (if (= (logand s4-4 (nav-state-flag in-mesh)) (nav-state-flag in-mesh)) + (format *stdcon* "in-mesh ") + ) + (if (= (logand s4-4 (nav-state-flag at-target)) (nav-state-flag at-target)) + (format *stdcon* "at-target ") + ) + (if (= (logand s4-4 (nav-state-flag target-poly-dirty)) (nav-state-flag target-poly-dirty)) + (format *stdcon* "target-poly-dirty ") + ) + ) + (format *stdcon* "~%") + ) + (when *display-joint-axes* + (if (and (type? (the-as process-drawable s5-4) process-drawable) + (nonzero? (-> (the-as process-drawable s5-4) draw)) + ) + (draw-joint-axes (the-as process-drawable s5-4)) + ) + ) + (draw-actor-marks (the-as process-drawable s5-4)) + ) + ) + ) + (*display-nav-mesh* + (dotimes (s5-5 (-> obj length)) + (let ((v1-145 (-> obj level s5-5))) + (when (= (-> v1-145 status) 'active) + (let ((s4-5 (-> v1-145 bsp nav-meshes))) + (when (nonzero? s4-5) + (dotimes (s3-2 (-> s4-5 length)) + (let ((s2-2 (-> s4-5 s3-2))) + (if (name= *display-nav-mesh* (res-lump-struct s2-2 'name structure)) + (debug-draw s2-2) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (else + (when *display-nav-marks* + (dotimes (s5-6 (-> obj length)) + (let ((v1-163 (-> obj level s5-6))) + (when (= (-> v1-163 status) 'active) + (let ((s4-6 (-> v1-163 bsp nav-meshes))) + (when (nonzero? s4-6) + (dotimes (s3-3 (-> s4-6 length)) + (debug-draw (-> s4-6 s3-3)) + ) + ) + ) + ) + ) + ) + ) + (if (or *display-path-marks* *display-vol-marks*) + (iterate-process-tree + *active-pool* + (the-as (function object object) (lambda ((arg0 process-drawable)) + (when (type? arg0 process-drawable) + (if (nonzero? (-> arg0 path)) + (debug-draw (-> arg0 path)) + ) + (if (nonzero? (-> arg0 vol)) + (debug-draw (-> arg0 vol)) + ) + ) + (none) + ) + ) + *null-kernel-context* + ) + ) + ) + ) + (when (and *display-actor-graph* (not (or (= *master-mode* 'menu) (= *master-mode* 'progress)))) + (if (not (paused?)) + (float-save-timeplot (if (< (the int (the float (mod (-> pp clock frame-counter) 600))) 300) + 1.0 + 0.0 + ) + ) + ) + (camera-plot-float-func + 0.0 + 399.0 + -81920.0 + 81920.0 + float-lookup-redline + (new 'static 'vector4w :x #xff :w #x80) + ) + (camera-plot-float-func + 0.0 + 399.0 + -81920.0 + 81920.0 + float-lookup-blueline + (new 'static 'vector4w :z #xff :w #x80) + ) + (camera-plot-float-func + 0.0 + 399.0 + -81920.0 + 81920.0 + float-lookup-greenline + (new 'static 'vector4w :y #xff :w #x80) + ) + (camera-plot-float-func + 0.0 + 399.0 + 0.0 + 409600.0 + float-lookup-yellowline + (new 'static 'vector4w :x #xff :y #xff :w #x80) + ) + (camera-plot-float-func + 0.0 + 399.0 + 0.0 + 1.0 + float-lookup-timeplot + (new 'static 'vector4w :x #x80 :y #x80 :z #x80 :w #x80) + ) + ) + (when *display-split-boxes* + (dotimes (s5-7 (-> obj length)) + (let ((v1-193 (-> obj level s5-7))) + (when (= (-> v1-193 status) 'active) + (let ((s4-7 (-> v1-193 bsp region-tree))) + (when (nonzero? s4-7) + (let* ((s3-4 (-> s4-7 data2 (+ (-> s4-7 length) -1) length)) + (s2-3 0) + (a0-102 (-> (the-as drawable-inline-array-region-prim (-> s4-7 data2 (+ (-> s4-7 length) -1))) data s2-3)) + ) + (while (< s2-3 s3-4) + (debug-draw-region a0-102 0) + (+! s2-3 1) + (set! a0-102 + (-> (the-as drawable-inline-array-region-prim (-> s4-7 data2 (+ (-> s4-7 length) -1))) data s2-3) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (when *display-region-marks* + (dotimes (s5-8 (-> obj length)) + (let ((s4-8 (-> obj level s5-8))) + (when (= (-> s4-8 status) 'active) + (when (nonzero? (-> s4-8 bsp region-trees)) + (let* ((s3-5 (-> s4-8 bsp region-trees length)) + (s2-4 0) + (s1-3 (-> s4-8 bsp region-trees s2-4)) + ) + (while (< s2-4 s3-5) + (let ((s0-4 (-> s1-3 data2 (+ (-> s1-3 length) -1) length))) + (set! sv-128 0) + (let ((a0-117 (-> (the-as drawable-inline-array-region-prim (-> s1-3 data2 (+ (-> s1-3 length) -1))) data sv-128))) + (while (< sv-128 s0-4) + (debug-draw-region a0-117 0) + (set! sv-128 (+ sv-128 1)) + (set! a0-117 + (-> (the-as drawable-inline-array-region-prim (-> s1-3 data2 (+ (-> s1-3 length) -1))) data sv-128) + ) + ) + ) + ) + (+! s2-4 1) + (set! s1-3 (-> s4-8 bsp region-trees s2-4)) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 22 of type entity-camera +(defmethod birth! entity-camera ((obj entity-camera)) + (add-connection *camera-engine* *camera* nothing obj #f #f) + obj + ) + +;; definition for method 23 of type entity-camera +(defmethod kill! entity-camera ((obj entity-camera)) + (remove-by-param1 *camera-engine* (the-as int obj)) + obj + ) + +;; definition for function init-entity +;; WARN: Return type mismatch process vs none. +(defun init-entity ((arg0 process) (arg1 entity-actor)) + (activate arg0 *entity-pool* (res-lump-struct arg1 'name basic) (the-as pointer #x70004000)) + (set! (-> arg0 entity) arg1) + (set! (-> arg0 level) (-> arg1 extra level)) + (set! (-> arg1 extra process) arg0) + (run-now-in-process arg0 (method-of-object arg0 init-from-entity!) arg0 arg1) + (none) + ) + +;; definition for method 22 of type entity-actor +(defmethod birth! entity-actor ((obj entity-actor)) + (let* ((s5-0 (-> obj etype)) + (v1-0 (entity-info-lookup s5-0)) + (s4-0 (get-process *default-dead-pool* s5-0 (if v1-0 + (-> v1-0 heap-size) + #x4000 + ) + ) + ) + ) + (cond + ((not s4-0) + ) + ((begin + (set! (-> s4-0 type) s5-0) + (and s5-0 (valid? s5-0 type #f #f 0) (valid? (method-of-object s4-0 init-from-entity!) function #f #f 0)) + ) + (init-entity s4-0 obj) + ) + (else + (when (not (birth-viewer s4-0 obj)) + (format 0 "ERROR: no proper process type named ~A exists in the code, could not start ~A~%" s5-0 obj) + (logior! (-> obj extra perm status) (entity-perm-status bit-0)) + ) + ) + ) + ) + obj + ) + +;; definition for function entity-deactivate-handler +;; WARN: Return type mismatch symbol vs none. +(defun entity-deactivate-handler ((arg0 process) (arg1 entity-actor)) + (when (= arg0 (-> arg1 extra process)) + (logclear! (-> arg1 extra perm status) (entity-perm-status bit-1 no-kill)) + (set! (-> arg1 extra process) #f) + ) + (none) + ) + +;; definition for method 23 of type entity-actor +(defmethod kill! entity-actor ((obj entity-actor)) + (let ((a0-1 (-> obj extra process))) + (if a0-1 + (deactivate a0-1) + (entity-deactivate-handler a0-1 obj) + ) + ) + obj + ) + +;; definition for method 17 of type bsp-header +;; INFO: Used lq/sq +;; WARN: Return type mismatch bsp-header vs none. +;; ERROR: Unsupported inline assembly instruction kind - [mfc0 s5, Count] +;; ERROR: Unsupported inline assembly instruction kind - [mfc0 v1, Count] +(defmethod birth bsp-header ((obj bsp-header)) + (local-vars (v1-74 int) (s5-0 int) (sv-16 int)) + (.mfc0 s5-0 Count) + (let ((a2-0 (if (nonzero? (-> obj actors)) + (-> obj actors length) + 0 + ) + ) + ) + (cond + ((not (-> obj level entity)) + (set! (-> obj level entity) (new 'loading-level 'entity-links-array a2-0)) + ) + ((< (-> obj level entity allocated-length) a2-0) + (format + 0 + "ERROR: Attempting to rebirth level ~A with incorrect entity table size ~D/~D~%" + (-> obj level) + a2-0 + (-> obj level entity allocated-length) + ) + ) + ) + ) + (set! (-> obj level entity length) 0) + 0 + (when (nonzero? (-> obj actors)) + (dotimes (s4-0 (-> obj actors length)) + (let* ((a0-4 (-> obj actor-birth-order s4-0)) + (v1-23 (-> obj actors data (logand a0-4 #xffff) actor)) + ) + (add-to-level! v1-23 *level* (-> obj level) (the-as actor-id (-> v1-23 aid))) + ) + ) + ) + (let ((s4-1 (-> obj cameras))) + (when (nonzero? s4-1) + (dotimes (s3-0 (-> s4-1 length)) + (birth! (-> s4-1 s3-0)) + ) + ) + ) + (let ((s4-2 (-> obj level status))) + (set! (-> obj level status) 'active) + (dotimes (s3-1 (-> *level* length)) + (let ((s2-0 (-> *level* level s3-1))) + (when (= (-> s2-0 status) 'active) + (when (nonzero? (-> s2-0 bsp actor-groups)) + (countdown (s1-0 (-> s2-0 bsp actor-groups length)) + (let ((s0-0 (-> s2-0 bsp actor-groups s1-0))) + (set! sv-16 0) + (while (< sv-16 (-> s0-0 length)) + (if (not (-> s0-0 data sv-16 actor)) + (set! (-> s0-0 data sv-16 actor) (entity-by-aid (-> s0-0 data sv-16 id))) + ) + (set! sv-16 (+ sv-16 1)) + ) + ) + ) + ) + ) + ) + ) + (set! (-> obj level status) s4-2) + ) + (.mfc0 v1-74 Count) + (let ((a3-2 (- v1-74 s5-0))) + (format 0 "Done ~S in ~D~%" "birth" a3-2) + ) + (none) + ) + +;; definition for function check-for-rougue-process +;; WARN: Return type mismatch int vs none. +(defun check-for-rougue-process ((arg0 process) (arg1 int) (arg2 int) (arg3 level)) + (cond + ((-> arg0 entity) + (cond + ((or (= (-> arg0 level) arg3) (= (-> arg0 entity extra level) arg3)) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ((let ((v1-9 (-> arg0 name))) + (and (>= (the-as int v1-9) arg1) (< (the-as int v1-9) arg2)) + ) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ((and (logtest? (-> arg0 entity extra kill-mask) (task-mask ctywide)) (= (-> arg3 name) 'ctywide)) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ((and (logtest? (-> arg0 entity extra kill-mask) (task-mask primary0)) + (logtest? (-> arg3 info base-task-mask) (task-mask primary0)) + ) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ) + ) + ((= (-> arg0 level) arg3) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ((= (-> arg0 type) part-tracker) + (let ((v1-34 (the-as part-tracker arg0))) + (if (the-as + part-tracker + (and (nonzero? (-> v1-34 part)) + (>= (the-as int (-> v1-34 part group)) arg1) + (the-as + part-tracker + (< (the-as int (the-as part-tracker (-> (the-as part-tracker (-> v1-34 part)) parent))) arg2) + ) + ) + ) + (deactivate arg0) + ) + ) + ) + ((type? arg0 part-spawner) + (let ((v1-39 (the-as part-spawner arg0))) + (if (the-as + part-spawner + (and (nonzero? (-> v1-39 part)) + (>= (the-as int (-> v1-39 part group)) arg1) + (the-as + part-spawner + (< (the-as int (the-as part-spawner (-> (the-as part-spawner (-> v1-39 part)) parent))) arg2) + ) + ) + ) + (deactivate arg0) + ) + ) + ) + (else + (let* ((s3-0 arg0) + (v1-44 (if (type? s3-0 process-drawable) + s3-0 + ) + ) + ) + (when v1-44 + (cond + ((and (nonzero? (-> (the-as process-drawable v1-44) part)) + (>= (the-as int (-> (the-as process-drawable v1-44) part group)) arg1) + (< (the-as int (-> (the-as process-drawable v1-44) part group)) arg2) + ) + (format + #t + "NOTICE: rogue null level entity (using part ~A) ~A still alive~%" + (-> (the-as process-drawable v1-44) part group) + arg0 + ) + (deactivate arg0) + ) + ((and (nonzero? (-> (the-as process-drawable v1-44) draw)) + (>= (the-as int (-> (the-as process-drawable v1-44) draw art-group)) arg1) + (< (the-as int (-> (the-as process-drawable v1-44) draw art-group)) arg2) + ) + (format + #t + "NOTICE: rogue null level entity (using art ~A) ~A still alive~%" + (-> (the-as process-drawable v1-44) draw art-group) + arg0 + ) + (deactivate arg0) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 18 of type bsp-header +;; WARN: Return type mismatch bsp-header vs none. +(defmethod deactivate-entities bsp-header ((obj bsp-header)) + (let ((v1-1 (-> obj level heap base)) + (a0-2 (-> obj level heap top-base)) + ) + (when (nonzero? (-> obj actor-groups)) + (dotimes (a1-2 (-> obj actor-groups length)) + (let ((a2-2 (-> obj actor-groups a1-2))) + (dotimes (a3-1 (-> a2-2 length)) + (let ((t0-2 (-> a2-2 data a3-1 actor))) + (if (and t0-2 (not (and (>= (the-as int t0-2) (the-as int v1-1)) (< (the-as int t0-2) (the-as int a0-2))))) + (set! (-> a2-2 data a3-1 actor) #f) + ) + ) + ) + ) + ) + ) + (dotimes (a1-5 (-> *level* length)) + (let ((a2-10 (-> *level* level a1-5))) + (when (= (-> a2-10 status) 'active) + (when (!= a2-10 (-> obj level)) + (when (nonzero? (-> a2-10 bsp actor-groups)) + (dotimes (a3-10 (-> a2-10 bsp actor-groups length)) + (let ((t0-13 (-> a2-10 bsp actor-groups a3-10))) + (dotimes (t1-2 (-> t0-13 length)) + (let ((t2-3 (-> t0-13 data t1-2 actor))) + (if (and t2-3 (>= (the-as int t2-3) (the-as int v1-1)) (< (the-as int t2-3) (the-as int a0-2))) + (set! (-> t0-13 data t1-2 actor) #f) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (let ((s5-0 (-> obj actors))) + (when (nonzero? s5-0) + (dotimes (s4-0 (-> s5-0 length)) + (let ((s3-0 (-> s5-0 data s4-0 actor))) + (kill! s3-0) + (remove-from-level! s3-0 *level*) + ) + ) + ) + ) + (let ((s5-1 (-> obj cameras))) + (when (nonzero? s5-1) + (dotimes (s4-1 (-> s5-1 length)) + (kill! (-> s5-1 s4-1)) + ) + ) + ) + (let ((v1-23 (-> obj level heap base)) + (a0-7 (-> obj level heap top-base)) + (s5-2 (lambda ((arg0 process)) + (check-for-rougue-process + arg0 + (-> *kernel-context* relocating-min) + (-> *kernel-context* relocating-max) + (-> *kernel-context* relocating-level) + ) + (none) + ) + ) + ) + (set! (-> *kernel-context* relocating-min) (the-as int v1-23)) + (set! (-> *kernel-context* relocating-max) (the-as int a0-7)) + (set! (-> *kernel-context* relocating-level) (-> obj level)) + (iterate-process-tree *pusher-pool* (the-as (function object object) s5-2) *null-kernel-context*) + (iterate-process-tree *entity-pool* (the-as (function object object) s5-2) *null-kernel-context*) + (iterate-process-tree *default-pool* (the-as (function object object) s5-2) *null-kernel-context*) + ) + (let ((s5-3 (-> obj nav-meshes))) + (when (nonzero? s5-3) + (dotimes (s4-2 (-> s5-3 length)) + (kill! (-> s5-3 s4-2)) + ) + ) + ) + (none) + ) + +;; definition for function process-drawable-scale-from-entity! +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun process-drawable-scale-from-entity! ((arg0 process-drawable) (arg1 entity)) + (let ((v1-1 (res-lump-struct arg1 'scale structure))) + (if v1-1 + (set! (-> arg0 root scale quad) (-> (the-as vector v1-1) quad)) + (vector-identity! (-> arg0 root scale)) + ) + ) + 0 + (none) + ) + +;; definition for function process-drawable-from-entity! +;; INFO: Used lq/sq +;; WARN: Return type mismatch process-drawable vs none. +(defun process-drawable-from-entity! ((arg0 process-drawable) (arg1 entity-actor)) + (logior! (-> arg0 mask) (process-mask actor-pause)) + (set! (-> arg0 root trans quad) (-> arg1 extra trans quad)) + (quaternion-copy! (-> arg0 root quat) (-> arg1 quat)) + (vector-identity! (-> arg0 root scale)) + (none) + ) + +;; definition for method 9 of type entity-perm +(defmethod update-perm! entity-perm ((obj entity-perm) (arg0 symbol) (arg1 entity-perm-status)) + (cond + ((= arg0 'game) + (logclear! (-> obj status) arg1) + ) + ((task-complete? *game-info* (the-as game-task (-> obj task))) + (logclear! (-> obj status) (logior (if (logtest? (-> obj status) (entity-perm-status bit-4)) + 524 + 0 + ) + 515 + ) + ) + ) + (else + (logclear! (-> obj status) (logior arg1 (if (logtest? (-> obj status) (entity-perm-status bit-4)) + 524 + 0 + ) + ) + ) + ) + ) + (when (zero? (logand (-> obj status) (entity-perm-status bit-5))) + (set! (-> obj user-uint64) (the-as uint 0)) + 0 + ) + obj + ) + +;; definition for function reset-actors +;; WARN: Return type mismatch int vs none. +(defun reset-actors ((arg0 symbol)) + (let* ((v1-0 arg0) + (s5-0 (cond + ((or (= v1-0 'life) (= v1-0 'debug)) + 4719 + ) + ((= v1-0 'try) + 4719 + ) + ((= v1-0 'game) + 8063 + ) + (else + 5759 + ) + ) + ) + (s4-0 *game-info*) + ) + (dotimes (s3-0 (-> *level* length)) + (let ((v1-4 (-> *level* level s3-0))) + (when (= (-> v1-4 status) 'active) + (when (-> v1-4 part-engine) + (set! (-> v1-4 part-engine length) 0) + 0 + ) + (let ((s2-0 (-> v1-4 bsp level entity))) + (dotimes (s1-0 (-> s2-0 length)) + (let ((s0-0 (-> s2-0 data s1-0 entity))) + (if (not (and (-> s0-0 extra process) (logtest? (-> s0-0 extra process mask) (process-mask no-kill)))) + (kill! s0-0) + ) + (update-perm! (-> s0-0 extra perm) arg0 (the-as entity-perm-status s5-0)) + ) + ) + ) + ) + ) + ) + (let ((s3-1 (-> s4-0 task-perm-list))) + (dotimes (s2-1 (-> s3-1 length)) + (update-perm! (-> s3-1 data s2-1) arg0 (the-as entity-perm-status s5-0)) + ) + (logior! (-> s3-1 data 1 status) (entity-perm-status complete)) + ) + (let ((s4-1 (-> s4-0 perm-list))) + (dotimes (s3-2 (-> s4-1 length)) + (update-perm! (-> s4-1 data s3-2) arg0 (the-as entity-perm-status s5-0)) + ) + ) + ) + (let ((s5-1 (lambda ((arg0 process)) + (if (zero? (logand (-> arg0 mask) (process-mask no-kill))) + (deactivate arg0) + ) + (none) + ) + ) + ) + (iterate-process-tree *pusher-pool* (the-as (function object object) s5-1) *null-kernel-context*) + (iterate-process-tree *entity-pool* (the-as (function object object) s5-1) *null-kernel-context*) + ) + (if #t + (task-node-reset arg0) + ) + (dotimes (s5-2 (-> *level* length)) + (let ((s4-2 (-> *level* level s5-2))) + (when (= (-> s4-2 status) 'active) + (when (-> s4-2 info activate-func) + (let ((s3-3 (-> s4-2 info activate-func value))) + (if (and s3-3 (nonzero? s3-3) (type? s3-3 function)) + ((the-as (function level symbol none) s3-3) s4-2 arg0) + ) + ) + ) + ) + ) + ) + (set! (-> *ACTOR-bank* birth-max) 1000) + (update-task-masks arg0) + 0 + (none) + ) + +;; definition for function reset-cameras +;; WARN: Return type mismatch int vs none. +(defun reset-cameras () + (remove-all *camera-engine*) + (dotimes (gp-0 (-> *level* length)) + (let ((v1-5 (-> *level* level gp-0))) + (when (= (-> v1-5 status) 'active) + (let ((s5-0 (-> v1-5 bsp cameras))) + (when (nonzero? s5-0) + (dotimes (s4-0 (-> s5-0 length)) + (birth! (-> s5-0 s4-0)) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 12 of type process-drawable +(defmethod run-logic? process-drawable ((obj process-drawable)) + (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root pause-adjust-distance)) + (vector-vector-distance (-> obj root trans) (math-camera-pos)) + ) + (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-control-status uninited))) + ) + ) + ) + +;; definition for method 9 of type entity-links +(defmethod birth? entity-links ((obj entity-links) (arg0 vector)) + (and (zero? (logand (-> obj perm status) (entity-perm-status bit-0 dead))) + (< (vector-vector-distance (-> obj trans) arg0) (-> *ACTOR-bank* birth-dist)) + ) + ) + +;; definition for method 17 of type level-group +;; INFO: Used lq/sq +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 17 level-group) has a return type of none, but the expression builder found a return statement. +(defmethod actors-update level-group ((obj level-group)) + (local-vars + (sv-16 vector) + (sv-24 int) + (sv-32 task-mask) + (sv-48 entity-links) + (sv-64 string) + (sv-80 string) + (sv-96 float) + ) + (with-pp + (when *compact-actors* + (if (and (= *compact-actors* 'debug) (= (-> *nk-dead-pool* alive-list prev) (-> *nk-dead-pool* first-gap))) + (churn *nk-dead-pool* 1) + ) + (let ((s5-0 + (the int + (lerp-scale 8.0 1.0 (the float (-> *display* frames (-> *display* last-screen) run-time)) 2000.0 8000.0) + ) + ) + ) + (if (nonzero? *debug-dead-pool*) + (compact *debug-dead-pool* 10) + ) + (compact *nk-dead-pool* s5-0) + (compact *city-dead-pool* s5-0) + ) + ) + (update-actor-hash) + (when (not (paused?)) + (let ((s5-1 (-> *display* frames (-> *display* last-screen) run-time))) + (let ((f0-5 (fmax + 327680.0 + (fmin (+ 327680.0 (* 204.8 (the float (- (seconds 23.335) s5-1)))) (-> *ACTOR-bank* birth-dist)) + ) + ) + ) + (seek! (-> *ACTOR-bank* pause-dist) f0-5 (* 81920.0 (-> pp clock seconds-per-frame))) + ) + (seekl! (-> *ACTOR-bank* birth-max) (the int (lerp-scale 25.0 2.0 (the float s5-1) 2000.0 7000.0)) 10) + ) + (if (movie?) + (set! (-> *ACTOR-bank* birth-max) 1000) + ) + ) + (when *spawn-actors* + (set! sv-16 (if (movie?) + (math-camera-pos) + (camera-pos) + ) + ) + (set! sv-24 0) + (dotimes (s5-2 (-> obj length)) + (let ((s4-1 (-> obj level s5-2))) + (when (= (-> s4-1 status) 'active) + (set! sv-32 (-> s4-1 task-mask)) + (cond + ((= (-> s4-1 display?) 'special) + (let* ((s4-2 (-> s4-1 entity)) + (s3-1 (-> s4-2 length)) + ) + (dotimes (s2-0 s3-1) + (let ((v1-54 (-> s4-2 data s2-0))) + (cond + ((and (logtest? (-> v1-54 kill-mask) (task-mask special)) (zero? (logand (-> v1-54 kill-mask) sv-32))) + (when (not (or (-> v1-54 process) (logtest? (-> v1-54 perm status) (entity-perm-status bit-0 dead)))) + (birth! (-> v1-54 entity)) + (set! sv-24 (+ sv-24 1)) + (if (>= sv-24 (-> *ACTOR-bank* birth-max)) + (return #f) + ) + ) + ) + (else + (if (and (-> v1-54 process) + (zero? (logand (-> v1-54 perm status) (entity-perm-status no-kill))) + (zero? (logand (-> v1-54 process mask) (process-mask no-kill))) + ) + (kill! (-> v1-54 entity)) + ) + ) + ) + ) + ) + ) + ) + ((= (-> s4-1 display?) 'actor) + (let* ((s4-3 (-> s4-1 entity)) + (s3-2 (-> s4-3 length)) + ) + (dotimes (s2-1 s3-2) + (let ((v1-67 (-> s4-3 data s2-1))) + (cond + ((zero? (logand (-> v1-67 kill-mask) sv-32)) + (when (not (or (-> v1-67 process) (logtest? (-> v1-67 perm status) (entity-perm-status bit-0 dead)))) + (birth! (-> v1-67 entity)) + (set! sv-24 (+ sv-24 1)) + (if (>= sv-24 (-> *ACTOR-bank* birth-max)) + (return #f) + ) + ) + ) + (else + (if (and (-> v1-67 process) + (zero? (logand (-> v1-67 perm status) (entity-perm-status no-kill))) + (zero? (logand (-> v1-67 process mask) (process-mask no-kill))) + ) + (kill! (-> v1-67 entity)) + ) + ) + ) + ) + ) + ) + ) + ((not *vis-actors*) + (let* ((s4-4 (-> s4-1 entity)) + (s3-3 (-> s4-4 length)) + ) + (dotimes (s2-2 s3-3) + (let ((s1-0 (-> s4-4 data s2-2))) + (cond + ((and (< (vector-vector-distance (-> s1-0 trans) sv-16) (-> *ACTOR-bank* birth-dist)) + (zero? (logand (-> s1-0 perm status) (entity-perm-status bit-9 bit-10))) + (zero? (logand (-> s1-0 kill-mask) sv-32)) + ) + (when (not (or (-> s1-0 process) (logtest? (-> s1-0 perm status) (entity-perm-status bit-0 dead)))) + (birth! (-> s1-0 entity)) + (set! sv-24 (+ sv-24 1)) + (if (>= sv-24 (-> *ACTOR-bank* birth-max)) + (return #f) + ) + ) + ) + (else + (if (and (-> s1-0 process) + (zero? (logand (-> s1-0 perm status) (entity-perm-status no-kill))) + (zero? (logand (-> s1-0 process mask) (process-mask no-kill))) + ) + (kill! (-> s1-0 entity)) + ) + ) + ) + ) + ) + ) + ) + (*vis-actors* + (when (not (and (-> s4-1 vis-info 0) (-> s4-1 all-visible?))) + (let* ((s3-4 (-> s4-1 entity)) + (s2-3 (-> s3-4 length)) + (s0-0 #f) + ) + (dotimes (s1-1 s2-3) + (set! sv-48 (-> s3-4 data s1-1)) + (cond + ((and (is-object-visible? s4-1 (-> sv-48 vis-id)) + (zero? (logand (-> sv-48 perm status) (entity-perm-status bit-9 bit-10))) + (zero? (logand (-> sv-48 kill-mask) sv-32)) + (or (-> s4-1 vis-info 0) (< (vector-vector-distance (-> sv-48 trans) sv-16) (-> sv-48 vis-dist))) + ) + (when (not (or (-> sv-48 process) (logtest? (-> sv-48 perm status) (entity-perm-status bit-0 dead)) s0-0)) + (birth! (-> sv-48 entity)) + (set! sv-24 (+ sv-24 1)) + (when (< (/ (the float (memory-free *nk-dead-pool*)) (the float (memory-total *nk-dead-pool*))) 0.1) + (when *debug-segment* + (let ((s0-1 format)) + (set! sv-64 *stdcon*) + (set! sv-80 "low actor memory, no birth triggered!!! ~,,0fK/~,,0fK~%") + (set! sv-96 (* 0.0009765625 (the float (memory-free *nk-dead-pool*)))) + (let ((a3-2 (* 0.0009765625 (the float (memory-total *nk-dead-pool*))))) + (s0-1 sv-64 sv-80 sv-96 a3-2) + ) + ) + ) + (set! s0-0 #t) + ) + ) + ) + (else + (when (and (-> sv-48 process) + (zero? (logand (-> sv-48 perm status) (entity-perm-status no-kill))) + (zero? (logand (-> sv-48 process mask) (process-mask no-kill))) + ) + (kill! (-> sv-48 entity)) + (set! sv-24 (+ sv-24 1)) + ) + ) + ) + (if (>= sv-24 (-> *ACTOR-bank* birth-max)) + (return #f) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for function entity-birth-no-kill +(defun entity-birth-no-kill ((arg0 entity)) + (let ((gp-0 (-> arg0 extra))) + (logior! (-> gp-0 perm status) (entity-perm-status no-kill)) + (if (not (or (-> gp-0 process) (logtest? (-> gp-0 perm status) (entity-perm-status bit-0 dead)))) + (birth! (-> gp-0 entity)) + ) + (-> gp-0 process) + ) + ) + +;; definition for function entity-task-complete-on +;; WARN: Return type mismatch int vs none. +(defun entity-task-complete-on ((arg0 entity)) + (let ((v1-0 (-> arg0 extra))) + (if (nonzero? (-> v1-0 perm task)) + (logior! (-> *game-info* task-perm-list data (-> v1-0 perm task) status) (entity-perm-status complete)) + ) + ) + 0 + (none) + ) + +;; definition for function entity-task-complete-off +;; WARN: Return type mismatch int vs none. +(defun entity-task-complete-off ((arg0 entity)) + (let ((v1-0 (-> arg0 extra))) + (if (!= (-> v1-0 perm task) 1) + (logclear! (-> *game-info* task-perm-list data (-> v1-0 perm task) status) (entity-perm-status complete)) + ) + ) + 0 + (none) + ) + +;; definition for method 30 of type entity-actor +;; WARN: Return type mismatch entity-perm-status vs none. +(defmethod toggle-status entity-actor ((obj entity-actor) (arg0 entity-perm-status) (arg1 symbol)) + (let ((v1-0 (-> obj extra))) + (if arg1 + (logior! (-> v1-0 perm status) arg0) + (logclear! (-> v1-0 perm status) arg0) + ) + (-> v1-0 perm status) + ) + (none) + ) + +;; definition for function process-entity-status! +(defun process-entity-status! ((arg0 process) (arg1 entity-perm-status) (arg2 symbol)) + (cond + ((and (-> arg0 entity) arg0 (= arg0 (-> arg0 entity extra process))) + (let ((v1-6 (-> arg0 entity extra))) + (if arg2 + (logior! (-> v1-6 perm status) arg1) + (logclear! (-> v1-6 perm status) arg1) + ) + (the-as int (-> v1-6 perm status)) + ) + ) + (else + 0 + ) + ) + ) + +;; definition for function find-nearest-entity +;; WARN: Return type mismatch entity-actor vs entity. +(defun find-nearest-entity ((arg0 vector) (arg1 type)) + (local-vars (v1-9 object)) + (let ((gp-0 (the-as entity-actor #f))) + (let ((f30-0 0.0) + (f0-0 0.0) + ) + (dotimes (s3-0 (-> *level* length)) + (let ((v1-3 (-> *level* level s3-0))) + (when (= (-> v1-3 status) 'active) + (let ((s2-0 (-> v1-3 bsp actors))) + (when (nonzero? s2-0) + (dotimes (s1-0 (-> s2-0 length)) + (let ((s0-0 (-> s2-0 data s1-0 actor))) + (let ((v1-7 (or (not arg1) (= (-> s0-0 etype) arg1)))) + (b! (not v1-7) cfg-15 :likely-delay (set! v1-9 v1-7)) + ) + (set! f0-0 (vector-vector-distance arg0 (-> s0-0 extra trans))) + (set! v1-9 f0-0) + (b! (not (the int v1-9)) cfg-15 :likely-delay (nop!)) + (b! (not gp-0) cfg-15 :likely-delay (set! v1-9 #t)) + (b! (< f0-0 f30-0) cfg-15 :delay (set! v1-9 #t)) + (set! v1-9 #f) + (label cfg-15) + (when v1-9 + (set! gp-0 s0-0) + (set! f30-0 f0-0) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity gp-0) + ) + ) + +;; definition (debug) for function entity-speed-test +;; WARN: Return type mismatch entity vs none. +;; ERROR: Unsupported inline assembly instruction kind - [mtc0 Count, r0] +;; ERROR: Unsupported inline assembly instruction kind - [sync.p] +;; ERROR: Unsupported inline assembly instruction kind - [mfc0 s4, Count] +(defun-debug entity-speed-test ((arg0 string)) + (local-vars (s4-0 int)) + (let ((gp-0 (entity-by-name arg0))) + (when gp-0 + (set! *spawn-actors* #f) + (reset-actors 'debug) + 0 + (disable-irq) + (.mtc0 Count r0) + (.sync.p) + (birth! gp-0) + (.mfc0 s4-0 Count) + (enable-irq) + (format #t "~D spawn ~A ~A ~%" s4-0 arg0 (-> gp-0 extra process)) + (kill! gp-0) + ) + ) + (none) + ) + +;; definition (debug) for function dump-entity-remap +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun-debug dump-entity-remap ((arg0 object) (arg1 object)) + (local-vars + (sv-16 symbol) + (sv-32 string) + (sv-48 symbol) + (sv-64 string) + (sv-80 symbol) + (sv-96 string) + (sv-112 string) + ) + (format #t "~%(:eval (remap-entity-list '(") + (dotimes (s4-0 (-> *level* length)) + (let ((s3-0 (-> *level* level s4-0))) + (when (= (-> s3-0 status) 'active) + (when (= (-> s3-0 name) arg0) + (let ((s2-0 (-> s3-0 bsp actors))) + (when (nonzero? s2-0) + (dotimes (s1-0 (-> s2-0 length)) + (let ((a0-4 (-> s2-0 data s1-0 actor)) + (s0-0 format) + ) + (set! sv-16 #t) + (set! sv-32 "~A ") + (let ((a2-1 (res-lump-struct a0-4 'name structure))) + (s0-0 sv-16 sv-32 a2-1) + ) + ) + ) + ) + ) + (let ((s2-1 (-> s3-0 bsp nav-meshes))) + (when (nonzero? s2-1) + (dotimes (s1-1 (-> s2-1 length)) + (let ((a0-6 (-> s2-1 s1-1)) + (s0-1 format) + ) + (set! sv-48 #t) + (set! sv-64 "~A ") + (let ((a2-3 (res-lump-struct a0-6 'name structure))) + (s0-1 sv-48 sv-64 a2-3) + ) + ) + ) + ) + ) + (let ((s2-2 (-> s3-0 bsp race-meshes))) + (when (nonzero? s2-2) + (dotimes (s1-2 (-> s2-2 length)) + (let ((a0-8 (-> s2-2 s1-2)) + (s0-2 format) + ) + (set! sv-80 #t) + (set! sv-96 "~A ") + (let ((a2-5 (res-lump-struct a0-8 'name structure))) + (s0-2 sv-80 sv-96 a2-5) + ) + ) + ) + ) + ) + (let ((s3-1 (-> s3-0 bsp cameras))) + (when (nonzero? s3-1) + (dotimes (s2-3 (-> s3-1 length)) + (let ((a0-10 (-> s3-1 s2-3)) + (s1-3 format) + (s0-3 #t) + ) + (set! sv-112 "~A ") + (let ((a2-7 (res-lump-struct a0-10 'name structure))) + (s1-3 s0-3 sv-112 a2-7) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (format #t ") '~A '~A))~%~%" arg0 arg1) + 0 + (none) + ) + + + + diff --git a/goal_src/jak2/engine/game/game-info-h.gc b/goal_src/jak2/engine/game/game-info-h.gc index 0c5225cefc..687101ffe8 100644 --- a/goal_src/jak2/engine/game/game-info-h.gc +++ b/goal_src/jak2/engine/game/game-info-h.gc @@ -212,12 +212,12 @@ (want-display-level (_type_ symbol symbol) int 13) (want-vis-level (_type_ symbol) none 14) (want-force-vis (_type_ symbol symbol) int 15) - (execute-command (_type_ pair object) none 16) + (want-force-inside (_type_ symbol symbol) none 16) (execute-commands-up-to (_type_ float) none 17) (backup-load-state-and-set-cmds (_type_ pair) int 18) (restore-load-state-and-cleanup (_type_) int 19) (restore-load-state (_type_) int 20) - (set-force-inside! (_type_ symbol symbol) none 21) + (add-borrow-levels (_type_) none 21) ) ) @@ -364,7 +364,7 @@ (game-info-method-18 () none 18) (get-current-continue-point (_type_) continue-point 19) (get-continue-by-name (_type_ string) continue-point 20) - (set-continue! (_type_ basic symbol) continue-point 21) + (set-continue! (_type_ basic object) continue-point 21) (game-info-method-22 () none 22) (game-info-method-23 () none 23) (game-info-method-24 () none 24) diff --git a/goal_src/jak2/engine/game/game-info.gc b/goal_src/jak2/engine/game/game-info.gc index 7584ec42c9..1526304e61 100644 --- a/goal_src/jak2/engine/game/game-info.gc +++ b/goal_src/jak2/engine/game/game-info.gc @@ -7,3 +7,11 @@ ;; DECOMP BEGINS +(defmethod invert-analog-if-needed cpad-info ((obj cpad-info)) + (when (logtest? (-> *game-info* secrets) (game-secrets hflip-screen)) + (set! (-> obj leftx) (- 255 (the-as int (-> obj leftx)))) + (set! (-> obj rightx) (- 255 (the-as int (-> obj rightx)))) + ) + 0 + (none) + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/game/main-h.gc b/goal_src/jak2/engine/game/main-h.gc index bbe746c23b..1b83581bf1 100644 --- a/goal_src/jak2/engine/game/main-h.gc +++ b/goal_src/jak2/engine/game/main-h.gc @@ -105,6 +105,9 @@ ;; NOTE - for default-menu (define-extern set-master-mode (function symbol none)) +(define-extern set-blackout-frames (function time-frame none)) + + ;; DECOMP BEGINS ;; engine debug settings @@ -316,5 +319,7 @@ (define-extern movie? (function symbol)) (define-extern paused? (function symbol)) (define-extern set-master-mode (function symbol none)) +(define-extern toggle-pause (function int)) (define-extern on (function symbol process)) +(define-extern menu-respond-to-pause (function symbol)) \ No newline at end of file diff --git a/goal_src/jak2/engine/game/main.gc b/goal_src/jak2/engine/game/main.gc index fe976761e6..3a2625ee23 100644 --- a/goal_src/jak2/engine/game/main.gc +++ b/goal_src/jak2/engine/game/main.gc @@ -7,14 +7,314 @@ ;; DECOMP BEGINS +(defun set-letterbox-frames ((arg0 time-frame)) + "Set the remaining time until letterboxing is removed. + This uses the current clock ratio of the process and the game-clock. + This overrides any previous letterboxing." + (with-pp + (set! (-> *game-info* letterbox-time) + (+ (-> *display* base-clock frame-counter) + (the int (/ (* (the float arg0) (-> *display* game-clock clock-ratio)) (-> pp clock clock-ratio))) + ) + ) + (none) + ) + ) + +(defun letterbox () + "Draw letterbox bars." + (let* ((s5-0 (-> *display* frames (-> *display* on-screen) global-buf)) + (gp-0 (-> s5-0 base)) + ) + (draw-sprite2d-xy-absolute s5-0 0 0 512 46 (new 'static 'rgba :a #x80)) + (draw-sprite2d-xy-absolute s5-0 0 370 512 47 (new 'static 'rgba :a #x80)) + (let ((a3-2 (-> s5-0 base))) + (let ((v1-7 (the-as dma-packet (-> s5-0 base)))) + (set! (-> v1-7 dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> v1-7 vif0) (new 'static 'vif-tag)) + (set! (-> v1-7 vif1) (new 'static 'vif-tag)) + (set! (-> s5-0 base) (the-as pointer (&+ v1-7 16))) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) bucket-group) + (bucket-id screen-filter) + gp-0 + (the-as (pointer dma-tag) a3-2) + ) + ) + ) + (none) + ) + +(defun set-blackout-frames ((arg0 time-frame)) + "Set the remaining time until blackout is removed. + Unlike letterbox, this only can increase the time, unless + you request 0, in which case blackout is disabled immediately" + (with-pp + (if (zero? arg0) + (set! (-> *game-info* blackout-time) (-> *display* base-clock frame-counter)) + (set! (-> *game-info* blackout-time) + (the-as time-frame + (max (-> *game-info* blackout-time) + (+ (-> *display* base-clock frame-counter) + (the int (/ (* (the float arg0) (-> *display* game-clock clock-ratio)) (-> pp clock clock-ratio))) + arg0 + ) + ) + ) + ) + ) + (none) + ) + ) + +(defun blackout () + "Draw blackout over the whole screen. + This isn't used - instead they adjust some GS setting to fade the whole + screen to black, which is much faster than drawing over the entire screen." + (let* ((s5-0 (-> *display* frames (-> *display* on-screen) global-buf)) + (gp-0 (-> s5-0 base)) + ) + (draw-sprite2d-xy-absolute s5-0 0 0 512 416 (new 'static 'rgba :a #x80)) + (let ((a3-1 (-> s5-0 base))) + (let ((v1-6 (the-as object (-> s5-0 base)))) + (set! (-> (the-as dma-packet v1-6) dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> (the-as dma-packet v1-6) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-6) vif1) (new 'static 'vif-tag)) + (set! (-> s5-0 base) (&+ (the-as pointer v1-6) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) bucket-group) + (bucket-id debug-no-zbuf2) + gp-0 + (the-as (pointer dma-tag) a3-1) + ) + ) + ) + (none) + ) + (defun paused? () + "Are we paused, or in some menu that should make us pause?" (or (= *master-mode* 'pause) (= *master-mode* 'progress) (= *master-mode* 'menu) (= *master-mode* 'freeze)) ) (defun movie? () + "Are we in a movie?" (logtest? (-> *kernel-context* prevent-from-run) (process-mask movie)) ) +(defun demo? () + "Are we a demo version?" + (or (= *kernel-boot-message* 'demo) (= *kernel-boot-message* 'demo-shared)) + ) + +;; the "master-mode" is a single "mode" for the game: +;; - 'game: normal play +;; - 'pause: select pause (with PAUSE on screen) +;; - 'freeze: a pause, but without PAUSE on screen +;; - 'menu: debug menu system open +;; - 'progress: progress menu open (start menu) + +(define *last-master-mode* 'game) + +(defun set-master-mode ((arg0 symbol)) + "Change the master mode, updating pause masks in the kernel/sound system as needed." + (when (!= arg0 *master-mode*) + (set! *last-master-mode* *master-mode*) + (set! *master-mode* arg0) + + ;; transition stuff: + (case *master-mode* + (('pause) + ;; entering pause, set pause bit in masks + (if (not *debug-pause*) + (logior! (-> *setting-control* user-default process-mask) (process-mask pause)) + ) + (logclear! (-> *setting-control* user-default process-mask) (process-mask freeze menu)) + (set! *pause-lock* #f) + (sound-group-pause (sound-group sfx sog1 sog2 sog3 sog4 sog5 sog6 sog7)) + (set! (-> *game-info* pause-start-time) (-> *display* real-clock frame-counter)) + ) + (('freeze) + (logior! (-> *setting-control* user-default process-mask) (process-mask freeze)) + (logclear! (-> *setting-control* user-default process-mask) (process-mask pause menu)) + (sound-group-pause (sound-group sfx sog4)) + (set! (-> *game-info* pause-start-time) (-> *display* real-clock frame-counter)) + ) + (('menu) + (logior! (-> *setting-control* user-default process-mask) (process-mask menu)) + (logclear! (-> *setting-control* user-default process-mask) (process-mask freeze pause progress)) + (sound-group-pause (sound-group sfx sog1 sog2 sog3 sog4 sog5 sog6 sog7)) + (set! *pause-lock* #f) + ) + (('progress) + ;; entering progress, start the process + (logclear! (-> *setting-control* user-default process-mask) (process-mask freeze pause menu)) + (sound-group-pause (sound-group sfx sog1 sog2 sog3 sog4 sog5 sog6 sog7)) + (when (not *progress-process*) + (activate-progress *dproc* 'main) + (if (not *progress-process*) ;; process didn't start, back to game. + (set-master-mode 'game) + ) + ) + (set! (-> *game-info* pause-start-time) (-> *display* real-clock frame-counter)) + ) + (('game) + (logclear! (-> *setting-control* user-default process-mask) (process-mask freeze pause menu)) + (sound-group-continue (sound-group sfx sog1 sog2 sog3 sog4 sog5 sog6 sog7)) + ) + ) + + ;; update from setting-control to kernel + (apply-settings *setting-control*) + ) + + ;; tell the debug menu system we changed modes. + (if *debug-segment* + (menu-respond-to-pause) + ) + 0 + (none) + ) + +(defun pause-allowed? () + "Are you allowed to pause?" + (not (or (< (-> *display* base-clock frame-counter) (-> *game-info* blackout-time)) + (!= (-> *setting-control* user-current bg-a) 0.0) + (!= (-> *setting-control* user-current bg-a-force) 0.0) + (not (-> *setting-control* user-current allow-pause)) + (handle->process (-> *game-info* auto-save-proc)) + (= *master-mode* 'freeze) + (not *target*) + *master-exit* + (not *common-text*) + ) + ) + ) + +(defun toggle-pause () + "Update the current master mode because a pause has been requested. + This can reject the transition, or decide to go to any mode." + (case *master-mode* + (('game) + (set-master-mode + (cond + ((and (logtest? (-> *cpad-list* cpads 0 valid) 128) + *target* + (>= (-> *display* base-clock frame-counter) (-> *game-info* blackout-time)) + (= (-> *setting-control* user-current bg-a) 0.0) + (and (= (-> *setting-control* user-current bg-a-force) 0.0) + (< (seconds 1003) (-> *display* real-clock frame-counter)) + ) + ) + ;; in 'game, controller fell out, target is spawned, can pause if it's allowed, and not in progress. + (if (or *progress-process* (not (-> *setting-control* user-current allow-pause))) + *master-mode* + 'pause + ) + ) + ;; game -> debug menu when pressing select/start with L3. + ((and (cpad-pressed? 0 select start) (cpad-hold? 0 l3) *debug-segment*) + 'menu + ) + ;; select in debug pauses (also check R2 here for the frame-advance feature) + ((and (or (cpad-hold? 0 select) (cpad-hold? 0 r2)) *debug-segment*) + 'pause + ) + ;; not debugging, not pressing start, should pause if possible + ((and (not *debug-segment*) (zero? (logand (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons start)))) + (if (pause-allowed?) + 'pause + *master-mode* ;; and if we can't, reject + ) + ) + ;; if we can't open progress, fall back to pause + ((not (progress-allowed?)) + (if (pause-allowed?) + 'pause + *master-mode* ;; otherwise reject + ) + ) + ((cpad-hold? 0 start) ;; finally, if we're pressing start and pausing is impossible, open progress + 'progress + ) + (else + *master-mode* ;; otherwise reject + ) + ) + ) + ) + (('menu) + (set-master-mode (cond + ((and *debug-segment* (cpad-hold? 0 l3) (cpad-pressed? 0 select start)) + 'menu + ) + ((cpad-hold? 0 select r2) + (if *debug-segment* + 'pause + *master-mode* + ) + ) + ((cpad-hold? 0 r3 r2 triangle circle) + 'game + ) + ((cpad-hold? 0 start) + 'game + ) + (else + *master-mode* + ) + ) + ) + (set! *pause-lock* #f) + ) + (('pause) + (set-master-mode (cond + ((and (cpad-pressed? 0 select start) (cpad-hold? 0 l3) *debug-segment*) + 'menu + ) + ((and (not *debug-segment*) (cpad-hold? 0 select)) + 'game + ) + ((and *cheat-mode* (cpad-hold? 0 select r2)) + 'game + ) + ((cpad-hold? 0 start) + 'game + ) + (else + *master-mode* + ) + ) + ) + (set! *pause-lock* (and *cheat-mode* (cpad-hold? 0 r2))) + ) + (('freeze) + (set-master-mode (if (and (cpad-pressed? 0 select start) (cpad-hold? 0 l3) *debug-segment*) + 'menu + *master-mode* + ) + ) + ) + (('progress) + (if (cpad-hold? 0 start) + (hide-progress-screen) + ) + (set! *pause-lock* (and *cheat-mode* (cpad-hold? 0 r2))) + ) + ) + 0 + ) + +;; TODO screen filter + +(define *cheat-temp* (the-as (pointer int32) (malloc 'global 20))) +(define *master-exit* #f) +(define *progress-cheat* #f) +(define *first-boot* #t) + +;; TODO cheats ;; Rough loop outline: ;; (while *run* @@ -56,7 +356,7 @@ (when *debug-segment* ;; do all debug drawing. ; (debug-draw-buffers) - (with-dma-buffer-add-bucket ((s3-0 (-> arg0 frames (-> arg0 on-screen) debug-buf)) (bucket-id debug-no-zbuf)) + (with-dma-buffer-add-bucket ((s3-0 (-> arg0 frames (-> arg0 on-screen) debug-buf)) (bucket-id debug-no-zbuf2)) (when (or *display-profile* *stats-profile-bars*) (setup-categories! (-> arg0 frames (-> arg0 on-screen) profile-array)) (let ((a2-0 7)) @@ -68,13 +368,13 @@ (draw-text! *profile-array*) ) ) - ; (when *display-deci-count* - ; (let ((s2-0 draw-string-xy)) - ; (format (clear *temp-string*) "~D" *deci-count*) - ; (s2-0 *temp-string* s3-0 448 210 (font-color default-#cddbcd) (font-flags shadow)) - ; ) - ; ) - ; (display-file-info) + (when *display-deci-count* + (let ((s2-0 draw-string-xy)) + (format (clear *temp-string*) "~D" *deci-count*) + (s2-0 *temp-string* s3-0 448 210 (font-color default-#cddbcd) (font-flags shadow)) + ) + ) + (display-file-info) ) ) @@ -85,7 +385,7 @@ ) ) ) - (with-dma-buffer-add-bucket ((s3-0 buf) (bucket-id debug-no-zbuf)) + (with-dma-buffer-add-bucket ((s3-0 buf) (bucket-id debug-no-zbuf2)) (if (and (= *master-mode* 'pause) (and (!= *cheat-mode* 'camera) (or (zero? *screen-shot-work*) (= (-> *screen-shot-work* count) -1))) ) @@ -173,9 +473,9 @@ (with-pp ; ;; LOAD LEVEL - ; (if (-> *level* loading-level) - ; (load-continue (-> *level* loading-level)) - ; ) + (if (-> *level* loading-level) + (load-continue (-> *level* loading-level)) + ) ; ;; Run blerc to modify foreground models ; (with-profiler 'merc *profile-merc-color* @@ -225,18 +525,18 @@ ) ;; another level load - ; (if (-> *level* loading-level) - ; (load-continue (-> *level* loading-level)) - ; ) + (if (-> *level* loading-level) + (load-continue (-> *level* loading-level)) + ) ; (if *display-color-bars* ; (draw-color-bars) ; ) ;; draw and update menus - ; (with-profiler 'menu-hook *profile-menu-hook-color* - ; (*menu-hook*) - ; ) + (with-profiler 'menu-hook *profile-menu-hook-color* + (*menu-hook*) + ) ;; load text files as needed from the menu update ; (load-level-text-files -1) @@ -350,7 +650,7 @@ ; (str-play-kick) ;; handle spawning/despawning as needed. - ; (level-update *level*) + (level-update *level*) ;; do some memory card operations, check auto-save ; (mc-run) @@ -474,12 +774,12 @@ ) ) (format 0 "SKIP: level activation in on~%") - ; (cond - ; ((or (level-get-with-status *level* 'loaded) - ; (level-get-with-status *level* 'alive) - ; (level-get-with-status *level* 'active) - ; ) - ; (activate-levels! *level*) + (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 arg0) ; (let ((gp-1 (entity-by-type camera-start))) ; (when (and gp-1 (type? gp-1 entity-actor)) @@ -492,12 +792,13 @@ ; (if (and (= *kernel-boot-message* 'art-group) *kernel-boot-art-group*) ; (anim-tester-add-object *kernel-boot-art-group*) ; ) - ; ) - ; (else - ; (kill-by-name "display" *active-pool*) - ; (set! *dproc* #f) - ; ) - ; ) + ) + (else + (format 0 "startup failed, killing dproc~%") + (kill-by-name "display" *active-pool*) + (set! *dproc* #f) + ) + ) ) *dproc* ) diff --git a/goal_src/jak2/engine/game/settings-h.gc b/goal_src/jak2/engine/game/settings-h.gc index 0953a18fdd..359318831c 100644 --- a/goal_src/jak2/engine/game/settings-h.gc +++ b/goal_src/jak2/engine/game/settings-h.gc @@ -83,8 +83,8 @@ (process-mask process-mask :offset-assert 4) (unknown-int32-00 int32 :offset-assert 8) (language language-enum :offset 16) - (unknown-int32-01 int32 :offset-assert 24) - (unknown-int32-02 int32 :offset-assert 28) + (display-dx int32 :offset-assert 24) + (display-dy int32 :offset-assert 28) (vibration symbol :offset 32) (play-hints symbol :offset 36) (movie (pointer process) :offset 40) @@ -94,7 +94,7 @@ (ambient (pointer process) :offset-assert 56) (video-mode symbol :offset-assert 60) (aspect-ratio symbol :offset-assert 64) - (unknown-uint32-00 uint32 :offset 68) + (use-progressive-scan symbol :offset 68) (auto-save symbol :offset 72) (bg-r float :offset-assert 76) (bg-g float :offset-assert 80) @@ -168,7 +168,7 @@ (movie-skip-frame float :offset-assert 356) (allow-blackout symbol :offset-assert 360) (race-minimap int32 :offset-assert 364) - (extra-bank symbol :offset-assert 368) + (extra-bank pair :offset-assert 368) (beard symbol :offset-assert 372) (ignore-target symbol :offset-assert 376) (subtitle-language language-enum :offset-assert 384) diff --git a/goal_src/jak2/engine/game/settings.gc b/goal_src/jak2/engine/game/settings.gc index 231bcc4077..7fa6365804 100644 --- a/goal_src/jak2/engine/game/settings.gc +++ b/goal_src/jak2/engine/game/settings.gc @@ -108,7 +108,7 @@ (set! (-> obj music) arg1) ) (('extra-bank) - (set! (-> obj extra-bank) arg1) + (set! (-> obj extra-bank) (the-as pair arg1)) ) (('process-mask) (case arg1 @@ -904,8 +904,12 @@ ) (defmethod apply-settings setting-control ((obj setting-control)) - *speech-control* - ((method-of-type speech-control speech-control-method-11)) + ;; added + (when (nonzero? *speech-control*) + *speech-control* + ((method-of-type speech-control speech-control-method-11)) + ) + (let ((s5-0 (-> obj user-current))) (let ((s4-0 (-> obj user-target))) (mem-copy! (the-as pointer s4-0) (the-as pointer (-> obj user-default)) 528) @@ -1205,21 +1209,21 @@ (set! (-> s5-0 aspect-ratio) (-> s4-0 aspect-ratio)) (set-aspect-ratio (-> s5-0 aspect-ratio)) ) - (when (!= (-> s5-0 unknown-uint32-00) (-> s4-0 unknown-uint32-00)) - (set! (-> s5-0 unknown-uint32-00) (-> s4-0 unknown-uint32-00)) - (set! (-> *video-params* set-video-mode) (the-as basic #t)) + (when (!= (-> s5-0 use-progressive-scan) (-> s4-0 use-progressive-scan)) + (set! (-> s5-0 use-progressive-scan) (-> s4-0 use-progressive-scan)) + (set! (-> *video-params* set-video-mode) #t) ) (when (!= (-> s5-0 video-mode) (-> s4-0 video-mode)) (set! (-> s5-0 video-mode) (-> s4-0 video-mode)) (set-video-mode (-> s5-0 video-mode)) ) - (when (!= (-> s5-0 unknown-int32-01) (-> s4-0 unknown-int32-01)) - (set! (-> s5-0 unknown-int32-01) (-> s4-0 unknown-int32-01)) - (set! (-> *video-params* display-dx) (/ (-> s4-0 unknown-int32-01) 2)) + (when (!= (-> s5-0 display-dx) (-> s4-0 display-dx)) + (set! (-> s5-0 display-dx) (-> s4-0 display-dx)) + (set! (-> *video-params* display-dx) (/ (-> s4-0 display-dx) 2)) ) - (when (!= (-> s5-0 unknown-int32-02) (-> s4-0 unknown-int32-02)) - (set! (-> s5-0 unknown-int32-02) (-> s4-0 unknown-int32-02)) - (set! (-> *video-params* display-dy) (* (/ (-> s4-0 unknown-int32-02) 2) 2)) + (when (!= (-> s5-0 display-dy) (-> s4-0 display-dy)) + (set! (-> s5-0 display-dy) (-> s4-0 display-dy)) + (set! (-> *video-params* display-dy) (* (/ (-> s4-0 display-dy) 2) 2)) ) (set! (-> *blit-displays-work* horizontal-flip-flag) (the-as basic (logtest? (-> *game-info* secrets) (game-secrets hflip-screen))) @@ -1425,9 +1429,9 @@ (set! (-> gp-0 language) (scf-get-language)) (set! (-> gp-0 subtitle-language) (-> gp-0 language)) (set! (-> gp-0 process-mask) (process-mask execute sleep)) - (set! (-> gp-0 unknown-uint32-00) (the-as uint #f)) - (set! (-> gp-0 unknown-int32-01) 0) - (set! (-> gp-0 unknown-int32-02) 0) + (set! (-> gp-0 use-progressive-scan) #f) + (set! (-> gp-0 display-dx) 0) + (set! (-> gp-0 display-dy) 0) (set! (-> gp-0 vibration) (if (or (= *kernel-boot-message* 'demo) (= *kernel-boot-message* 'demo-shared) (nonzero? (scf-get-territory))) #f @@ -1486,7 +1490,7 @@ (set! (-> gp-0 sound-reverb) 0.0) (set! (-> gp-0 mode-sound-bank) (the-as uint #f)) (set! (-> gp-0 music) #f) - (set! (-> gp-0 extra-bank) (the-as symbol '())) + (set! (-> gp-0 extra-bank) '()) (set! (-> gp-0 bg-a-speed) 8.0) (set! (-> gp-0 under-water-pitch-mod) 0.0) (set! (-> gp-0 allow-pause) #t) @@ -1532,10 +1536,10 @@ (set! (-> s5-0 language) (+ (-> gp-0 language) -1)) (set! (-> s5-0 subtitle-language) (-> gp-0 subtitle-language)) (set! (-> s5-0 aspect-ratio) #f) - (set! (-> s5-0 unknown-uint32-00) (the-as uint #f)) + (set! (-> s5-0 use-progressive-scan) #f) (set! (-> s5-0 video-mode) #f) (set! (-> s5-0 music) #f) - (set! (-> s5-0 extra-bank) (the-as symbol '())) + (set! (-> s5-0 extra-bank) '()) (set! (-> s5-0 allow-blackout) (-> gp-0 allow-blackout)) (set! (-> s5-0 bg-a-speed) (-> gp-0 bg-a-speed)) (set! (-> s5-0 under-water-pitch-mod) (-> gp-0 under-water-pitch-mod)) diff --git a/goal_src/jak2/engine/game/task/task-control-h.gc b/goal_src/jak2/engine/game/task/task-control-h.gc index c7c4a70225..b89b5ae8c2 100644 --- a/goal_src/jak2/engine/game/task/task-control-h.gc +++ b/goal_src/jak2/engine/game/task/task-control-h.gc @@ -5,6 +5,8 @@ ;; name in dgo: task-control-h ;; dgos: ENGINE, GAME +(define-extern task-node-reset (function symbol none)) + (defenum game-task-actor :bitfield #f :type uint8 diff --git a/goal_src/jak2/engine/geometry/path-h.gc b/goal_src/jak2/engine/geometry/path-h.gc index 269d4269e1..0f9ed46a34 100644 --- a/goal_src/jak2/engine/geometry/path-h.gc +++ b/goal_src/jak2/engine/geometry/path-h.gc @@ -31,7 +31,7 @@ :flag-assert #x1b00000024 (:methods (new (symbol type process symbol float entity symbol) _type_ 0) - (path-control-method-9 () none 9) + (debug-draw (_type_) none 9) (path-control-method-10 () none 10) (path-control-method-11 () none 11) (path-control-method-12 () none 12) diff --git a/goal_src/jak2/engine/geometry/vol-h.gc b/goal_src/jak2/engine/geometry/vol-h.gc index a6e17e6136..383ce98eee 100644 --- a/goal_src/jak2/engine/geometry/vol-h.gc +++ b/goal_src/jak2/engine/geometry/vol-h.gc @@ -52,7 +52,7 @@ :flag-assert #xc0000061c (:methods (new (symbol type process-drawable) _type_ 0) - (vol-control-method-9 (_type_) none 9) + (debug-draw (_type_) none 9) (vol-control-method-10 (_type_ plane) symbol 10) (should-display? (_type_) symbol 11) ) diff --git a/goal_src/jak2/engine/geometry/vol.gc b/goal_src/jak2/engine/geometry/vol.gc index 8d97eeeb01..915e92ac5a 100644 --- a/goal_src/jak2/engine/geometry/vol.gc +++ b/goal_src/jak2/engine/geometry/vol.gc @@ -271,7 +271,7 @@ (dotimes (s3-0 (/ (-> obj point-count) 2)) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (the-as vector s4-0) (the-as vector (&-> s4-0 4)) (the-as rgba s5-0) @@ -296,7 +296,7 @@ ) ;; WARN: Return type mismatch int vs none. -(defmethod vol-control-method-9 vol-control ((obj vol-control)) +(defmethod debug-draw vol-control ((obj vol-control)) (with-pp (let ((a0-1 obj)) (when (and (and *display-vol-marks* (logtest? (-> a0-1 flags) (vol-flags display?))) diff --git a/goal_src/jak2/engine/gfx/background/subdivide.gc b/goal_src/jak2/engine/gfx/background/subdivide.gc index 09c506a3b9..e253581798 100644 --- a/goal_src/jak2/engine/gfx/background/subdivide.gc +++ b/goal_src/jak2/engine/gfx/background/subdivide.gc @@ -7,3 +7,4 @@ ;; DECOMP BEGINS +(define *subdivide-settings* (new 'global 'subdivide-settings (meters 30.0) (meters 70.0))) \ No newline at end of file diff --git a/goal_src/jak2/engine/gfx/blit-displays.gc b/goal_src/jak2/engine/gfx/blit-displays.gc index 34773ffb36..5b98c8e2a7 100644 --- a/goal_src/jak2/engine/gfx/blit-displays.gc +++ b/goal_src/jak2/engine/gfx/blit-displays.gc @@ -5,5 +5,66 @@ ;; name in dgo: blit-displays ;; dgos: ENGINE, GAME +(define *blit-displays-work* (new 'static 'blit-displays-work + :adgif-tmpl (new 'static 'dma-gif-packet + :dma-vif (new 'static 'dma-packet + :dma (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt)) + :vif1 (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1) + ) + :gif (new 'static 'array uint64 2 #x1000000000008005 #xe) + ) + :sprite-tmpl (new 'static 'dma-gif-packet + :dma-vif (new 'static 'dma-packet + :dma (new 'static 'dma-tag :qwc #x51 :id (dma-tag-id cnt)) + :vif1 (new 'static 'vif-tag :imm #x51 :cmd (vif-cmd direct) :msk #x1) + ) + :gif (new 'static 'array uint64 2 #x508b400000008010 #x53531) + ) + :sprite-slow-tmpl (new 'static 'dma-gif-packet + :dma-vif (new 'static 'dma-packet + :dma (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt)) + :vif1 (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1) + ) + :gif (new 'static 'array uint64 2 #x508b400000008001 #x53531) + ) + :line-tmpl (new 'static 'dma-gif-packet + :dma-vif (new 'static 'dma-packet + :dma (new 'static 'dma-tag :qwc #x41 :id (dma-tag-id cnt)) + :vif1 (new 'static 'vif-tag :imm #x41 :cmd (vif-cmd direct) :msk #x1) + ) + :gif (new 'static 'array uint64 2 #x2020c00000008020 #x55) + ) + :scan-tmpl (new 'static 'dma-gif-packet + :dma-vif (new 'static 'dma-packet + :dma (new 'static 'dma-tag :qwc #x4c :id (dma-tag-id cnt)) + :vif1 (new 'static 'vif-tag :imm #x4c :cmd (vif-cmd direct) :msk #x1) + ) + :gif (new 'static 'array uint64 2 #x5020c0000000800f #x55551) + ) + :color (new 'static 'vector4w :x #x80 :y #x80 :z #x80 :w #x80) + :line-color #x3f80000000000000 + :scan-colors (new 'static 'inline-array vector4w 15 + (new 'static 'vector4w :y 1 :z 1) + (new 'static 'vector4w :y 1 :z 1) + (new 'static 'vector4w :y 1 :z 1) + (new 'static 'vector4w :y 1 :z 1) + (new 'static 'vector4w :x 1 :y 3 :z 2) + (new 'static 'vector4w :x 1 :y 4 :z 3) + (new 'static 'vector4w :x 2 :y 6 :z 5) + (new 'static 'vector4w :x 3 :y 8 :z 7) + (new 'static 'vector4w :x 5 :y 11 :z 10) + (new 'static 'vector4w :x 6 :y 14 :z 13) + (new 'static 'vector4w :x 9 :y 20 :z 17) + (new 'static 'vector4w :x 13 :y 27 :z 21) + (new 'static 'vector4w :x 17 :y 36 :z 24) + (new 'static 'vector4w :x 22 :y 45 :z 28) + (new 'static 'vector4w :x 32 :y 63 :z 32) + ) + :menu-mode #f + :screen-copied #f + :horizontal-flip-flag #f + ) + ) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/gfx/hw/video-h.gc b/goal_src/jak2/engine/gfx/hw/video-h.gc index efea3a99c5..bac7a3672e 100644 --- a/goal_src/jak2/engine/gfx/hw/video-h.gc +++ b/goal_src/jak2/engine/gfx/hw/video-h.gc @@ -14,15 +14,15 @@ ;; very basic settings for video output. (deftype video-params (structure) - ((set-video-mode basic :offset-assert 0) - (reset-video-mode basic :offset-assert 4) - (display-fbp int32 :offset-assert 8) - (relative-x-scale float :offset 16) - (display-dx int32 :offset-assert 20) - (display-dy int32 :offset-assert 24) - (display-sy int32 :offset-assert 28) - (relative-x-scale-reciprical float :offset-assert 32) - (screen-pages-high int32 :offset-assert 36) + ((set-video-mode symbol :offset-assert 0) + (reset-video-mode symbol :offset-assert 4) + (display-fbp int32 :offset-assert 8) + (relative-x-scale float :offset 16) + (display-dx int32 :offset-assert 20) + (display-dy int32 :offset-assert 24) + (display-sy int32 :offset-assert 28) + (relative-x-scale-reciprical float :offset-assert 32) + (screen-pages-high int32 :offset-assert 36) ) :method-count-assert 9 :size-assert #x28 diff --git a/goal_src/jak2/engine/gfx/hw/video.gc b/goal_src/jak2/engine/gfx/hw/video.gc index a8b8bc5595..4862a4f54c 100644 --- a/goal_src/jak2/engine/gfx/hw/video.gc +++ b/goal_src/jak2/engine/gfx/hw/video.gc @@ -5,8 +5,123 @@ ;; name in dgo: video ;; dgos: ENGINE, GAME +(define-extern *video-mode* int) ;; DECOMP BEGINS +(defun set-video-mode ((arg0 symbol)) + (case arg0 + (('ntsc) + (set! (-> *setting-control* user-default display-dx) 0) + (set! (-> *setting-control* user-default display-dy) 8) + (set! (-> *video-params* display-fbp) 164) + (set! (-> *video-params* display-sy) 224) + (set! *video-mode* 0) + (sound-set-fps 60) + ) + (('pal) + (set! (-> *setting-control* user-default display-dx) 0) + (set! (-> *setting-control* user-default display-dy) 24) + (set! (-> *video-params* display-fbp) 144) + (set! (-> *video-params* display-sy) 256) + (set! *video-mode* 1) + (sound-set-fps 50) + ) + ) + (set-time-ratios *display* (-> *display* dog-ratio)) + (set! (-> *video-params* reset-video-mode) #t) + (set! (-> *math-camera* isometric vector 1 y) 0.5) + (set! (-> *math-camera* y-clip) 416.0) + (set! (-> *math-camera* y-pix) (* 0.5 (-> *math-camera* y-clip))) + (set! *profile-y* 1848) + (set! (-> *video-params* set-video-mode) #t) + 0 + (none) + ) (defun get-video-mode () (-> *setting-control* user-current video-mode) ) + +(defun set-aspect-ratio ((arg0 symbol)) + (case arg0 + (('aspect4x3) + (set! (-> *video-params* relative-x-scale) 1.0) + (set! (-> *video-params* relative-x-scale-reciprical) 1.0) + ) + (('aspect16x9) + (set! (-> *video-params* relative-x-scale) 0.75) + (set! (-> *video-params* relative-x-scale-reciprical) 1.3333334) + ) + ) + 0 + (none) + ) + +(defun get-aspect-ratio () + (-> *setting-control* user-current aspect-ratio) + ) + +(defun set-progressive-scan ((arg0 symbol)) + (set! (-> *setting-control* user-default use-progressive-scan) arg0) + (none) + ) + + +(defun get-progressive-scan () + (-> *setting-control* user-current use-progressive-scan) + ) + +(define *smode2* 0) + +(defun set-graphics-mode () + (let ((v1-0 *setting-control*) + (gp-0 (the-as gs-bank #x12000000)) + (s5-0 *video-params*) + ) + (let ((s4-0 *display*)) + (cond + ((-> v1-0 user-current use-progressive-scan) + (when (nonzero? *smode2*) + (reset-graph 0 0 80 0) + (set! *smode2* 0) + 0 + ) + (set! (-> gp-0 display1) (new 'static 'gs-display + :magh #x1 + :dw #x4ff + :dy (+ (-> s5-0 display-dy) 50) + :dx (+ (* (-> s5-0 display-dx) 2) 326) + :dh (+ (* (-> s5-0 display-sy) 2) -1) + ) + ) + ) + (else + (when (or (!= *smode2* 1) (-> *video-params* set-video-mode)) + (if (= (-> *setting-control* user-current video-mode) 'ntsc) + (reset-graph 0 1 2 0) + (reset-graph 0 1 3 0) + ) + (set! *smode2* 1) + (set! (-> *video-params* set-video-mode) #f) + ) + (set! (-> gp-0 display1) (new 'static 'gs-display + :magh #x3 + :dw #x9ff + :dy (+ (-> s5-0 display-dy) 50) + :dx (+ (* (-> s5-0 display-dx) 4) 652) + :dh (+ (* (-> s5-0 display-sy) 2) -1) + ) + ) + ) + ) + (set! (-> gp-0 pmode) (-> s4-0 pmode)) + (set! (-> gp-0 bgcolor) (the-as gs-bgcolor (-> s4-0 bgcolor))) + ) + (set! (-> gp-0 dspfb1) (new 'static 'gs-display-fb :fbw #xa :fbp (-> s5-0 display-fbp))) + ) + 0 + (none) + ) + + + + diff --git a/goal_src/jak2/engine/gfx/lightning-h.gc b/goal_src/jak2/engine/gfx/lightning-h.gc index 1463e11a0b..d30df310f8 100644 --- a/goal_src/jak2/engine/gfx/lightning-h.gc +++ b/goal_src/jak2/engine/gfx/lightning-h.gc @@ -23,6 +23,9 @@ (lm3 3) ) +(define-extern unlink-lightning-spec-by-heap (function kheap none)) + + ;; DECOMP BEGINS (deftype lightning-spec (basic) diff --git a/goal_src/jak2/engine/gfx/mood/mood.gc b/goal_src/jak2/engine/gfx/mood/mood.gc index 9af282d912..0cdab3330e 100644 --- a/goal_src/jak2/engine/gfx/mood/mood.gc +++ b/goal_src/jak2/engine/gfx/mood/mood.gc @@ -393,79 +393,55 @@ ) ) -(define *flash0* - (the-as (array float) - (new 'static 'boxed-array :type float 1.0 0.0 0.5 1.0 0.5 0.0 0.5 0.35 0.4 0.35 0.25 0.1 0.04) - ) - ) +(define *flash0* (new 'static 'boxed-array :type float 1.0 0.0 0.5 1.0 0.5 0.0 0.5 0.35 0.4 0.35 0.25 0.1 0.04)) -(define *flash1* - (the-as (array float) (new 'static 'boxed-array :type float 1.0 0.8 0.0 1.0 0.5 1.0 0.4 0.2 0.1)) - ) +(define *flash1* (new 'static 'boxed-array :type float 1.0 0.8 0.0 1.0 0.5 1.0 0.4 0.2 0.1)) -(define *flash2* - (the-as (array float) (new 'static 'boxed-array :type float 1.0 0.9 0.8 0.7 0.0 0.0 1.0 0.0 1.0 0.5)) - ) +(define *flash2* (new 'static 'boxed-array :type float 1.0 0.9 0.8 0.7 0.0 0.0 1.0 0.0 1.0 0.5)) -(define *flash3* - (the-as (array float) - (new 'static 'boxed-array :type float 0.5 0.0 1.0 0.9 1.0 0.8 0.3 0.0 0.0 0.5 0.1 0.5 0.35) - ) - ) +(define *flash3* (new 'static 'boxed-array :type float 0.5 0.0 1.0 0.9 1.0 0.8 0.3 0.0 0.0 0.5 0.1 0.5 0.35)) -(define *flash4* - (the-as (array float) - (new 'static 'boxed-array :type float 1.0 0.0 1.0 0.0 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.5 0.4 0.3 0.2 0.1) - ) - ) +(define *flash4* (new 'static 'boxed-array :type float 1.0 0.0 1.0 0.0 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.5 0.4 0.3 0.2 0.1)) + +(define *flash5* (new 'static 'boxed-array :type float + 1.0 + 0.0 + 1.0 + 0.0 + 1.0 + 0.95 + 0.9 + 0.85 + 0.8 + 0.75 + 0.7 + 0.65 + 0.6 + 0.55 + 0.5 + 0.45 + 0.4 + 0.35 + 0.3 + 0.25 + 0.2 + 0.5 + 0.45 + 0.4 + 0.35 + 0.3 + 0.25 + 0.2 + 0.15 + 0.1 + 0.05 + ) -(define *flash5* (the-as (array float) (new 'static 'boxed-array :type float - 1.0 - 0.0 - 1.0 - 0.0 - 1.0 - 0.95 - 0.9 - 0.85 - 0.8 - 0.75 - 0.7 - 0.65 - 0.6 - 0.55 - 0.5 - 0.45 - 0.4 - 0.35 - 0.3 - 0.25 - 0.2 - 0.5 - 0.45 - 0.4 - 0.35 - 0.3 - 0.25 - 0.2 - 0.15 - 0.1 - 0.05 - ) - ) ) -(define *flash6* - (the-as (array float) - (new 'static 'boxed-array :type float 1.0 0.0 1.0 0.0 0.5 0.0 0.5 0.35 0.0 0.0 1.0 0.0 0.2 0.1) - ) - ) +(define *flash6* (new 'static 'boxed-array :type float 1.0 0.0 1.0 0.0 0.5 0.0 0.5 0.35 0.0 0.0 1.0 0.0 0.2 0.1)) -(define *flash7* - (the-as (array float) - (new 'static 'boxed-array :type float 1.0 0.8 0.3 0.0 0.6 0.5 0.4 0.3 0.2 0.5 0.4 0.3 0.2 0.1) - ) - ) +(define *flash7* (new 'static 'boxed-array :type float 1.0 0.8 0.3 0.0 0.6 0.5 0.4 0.3 0.2 0.5 0.4 0.3 0.2 0.1)) (deftype light-state (structure) ((time float :offset-assert 0) diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc index dfcfed7add..ba6e2a7cb0 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher.gc @@ -16,7 +16,7 @@ ;; og:ignore-form:sparticle-motion-blur ;; og:ignore-form:birth-func-texture-group ;; og:ignore-form:sparticle-launcher-method-10 -(define-extern sp-init-fields! (function object (inline-array sp-field-init-spec) sp-field-id sp-field-id symbol object)) ;; TODO - mips2c +(define-extern sp-init-fields! (function object (inline-array sp-field-init-spec) sp-field-id sp-field-id symbol object)) ;; TODO - mips2c (define-extern particle-adgif (function adgif-shader texture-id none)) ;; TODO - particle-adgif atomic ops, MIPS2C (define-extern particle-adgif-callback (function adgif-shader none)) ;; TODO bad VF dependencies @@ -707,12 +707,12 @@ (when (or *display-sprite-marks* *display-sprite-spheres* (and *display-actor-vis* (= (-> obj proc) *debug-actor*))) (add-debug-sphere *display-sprite-spheres* - (bucket-id bucket-324) + (bucket-id debug2) s5-1 (-> s5-1 w) (new 'static 'rgba :g #xff :a #x80) ) - (add-debug-matrix *display-sprite-marks* (bucket-id bucket-324) (-> obj origin) (meters 2.0)) + (add-debug-matrix *display-sprite-marks* (bucket-id debug2) (-> obj origin) (meters 2.0)) ) (sphere-in-view-frustum? (the-as sphere s5-1)) ) diff --git a/goal_src/jak2/engine/gfx/vu1-user-h.gc b/goal_src/jak2/engine/gfx/vu1-user-h.gc index 686106e85b..9518700435 100644 --- a/goal_src/jak2/engine/gfx/vu1-user-h.gc +++ b/goal_src/jak2/engine/gfx/vu1-user-h.gc @@ -385,15 +385,16 @@ (bucket-315 315) ;; effects (tex-all-warp 316) ;; tex (bucket-317 317) ;; mercneric - (bucket-318 318) ;; debug, no zbuf + + (debug-no-zbuf1 318) ;; debug, no zbuf (tex-all-map 319) ;; tex (bucket-320 320) ;; hud - (bucket-321 321) ;; hud letterbox, no zbuf + (screen-filter 321) ;; hud letterbox, no zbuf (bucket-322 322) ;; hud (bucket-323 323) ;; hud - (bucket-324 324) ;; debug - (debug-no-zbuf 325) ;; debug - (debug-unknown-326 326) ;; debug + (debug2 324) ;; debug + (debug-no-zbuf2 325) ;; debug + (debug3 326) ) (defenum vu1-renderer-mask diff --git a/goal_src/jak2/engine/level/bsp-h.gc b/goal_src/jak2/engine/level/bsp-h.gc index a4cd64d682..d3b446249b 100644 --- a/goal_src/jak2/engine/level/bsp-h.gc +++ b/goal_src/jak2/engine/level/bsp-h.gc @@ -14,7 +14,9 @@ (defenum texture-page-flag :type uint16 - :bitfield #t) + :bitfield #t + (alpha-enable 0) + ) ;; DECOMP BEGINS @@ -64,12 +66,12 @@ ;; 0 (maybe current-leaf-idx?) 128 (texture-flags texture-page-flag 10 :offset 130) ;; 0 (maybe padding) 150 - ;; 0 (was boxes, current back flags?, byte?) 152 - (ambients symbol :offset 156) + (require-force-inside uint8 :offset 152) + (ambients symbol :offset 156) ;; now just #t? (subdivide-close float :offset 160) (subdivide-far float :offset-assert 164) (race-meshes (array entity-race-mesh) :offset-assert 168) - ;; pointer to table of sorted floats 172 + (actor-birth-order (pointer uint32) :offset 172) (light-hash light-hash :offset 176) (nav-meshes (array entity-nav-mesh) :offset-assert 180) (actor-groups (array actor-group) :offset-assert 184) @@ -79,13 +81,19 @@ ;; 200 is some array ;; 204 is maybe that array's length ;; 216 is a vector array - ;; (vec-array (pointer vector) :offset 216) ; TODO see - `update-visible` hits assertion + ;; (vec-array (pointer vector) :offset 216) ; TODO see - `update-visible` hits assertion (region-tree drawable-tree-region-prim :offset 252) ; (actor-birth-order (pointer uint32) :offset-assert 172) ; (split-box-indices (pointer uint16) :offset-assert 176) - (unk-data-8 uint32 55 :offset 180) + (unk-data uint32 18 :offset 180) + (tfrag-texture-masks-array texture-masks-array) + + (tmask0 texture-masks-array :offset 272) + (tmask2 texture-masks-array :offset 280) + + (end uint8 :offset 399) ) :method-count-assert 19 :size-assert #x190 @@ -197,3 +205,4 @@ (define-extern level-remap-texture (function texture-id texture-id)) +(define-extern build-masks (function bsp-header none)) diff --git a/goal_src/jak2/engine/level/level-h.gc b/goal_src/jak2/engine/level/level-h.gc index 6214a4044f..d7b4383e4e 100644 --- a/goal_src/jak2/engine/level/level-h.gc +++ b/goal_src/jak2/engine/level/level-h.gc @@ -93,6 +93,20 @@ (movie0 16) ;; 0x10000 (movie1 17) ;; 0x20000 (movie2 18) ;; 0x40000 + + (tm19) + (tm20) + (tm21) + (tm22) + (tm23) + (tm24) + (tm25) + (tm26) + (tm27) + (tm28) + (tm29) + (tm30) + (tm31) ) (declare-type game-text-id uint32) @@ -139,7 +153,7 @@ (taskname symbol :offset 20) (other-name-1 symbol :offset 24) (packages pair :offset-assert 32) - (memory-mode uint32 :offset-assert 36) + (memory-mode load-buffer-mode :offset-assert 36) (music-bank symbol :offset-assert 40) (ambient-sounds symbol :offset-assert 44) (sound-reverb float :offset-assert 48) @@ -243,7 +257,7 @@ (vis-bits pointer :offset-assert 2392) (all-visible? symbol :offset-assert 2396) (force-all-visible? symbol :offset-assert 2400) - (linking basic :offset-assert 2404) + (linking symbol :offset-assert 2404) (vis-info level-vis-info 8 :offset-assert 2408) (vis-self-index int32 :offset-assert 2440) (vis-adj-index int32 :offset-assert 2444) @@ -261,7 +275,7 @@ (display-start-time time-frame :offset-assert 4552) (memory-mask uint32 :offset-assert 4560) (task-mask task-mask :offset-assert 4564) - (tfrag-gs-test uint64 :offset-assert 4568) + (tfrag-gs-test gs-test :offset-assert 4568) (texture-dirty-masks texture-mask 10 :inline :offset-assert 4576) (texture-mask texture-mask 18 :inline :offset-assert 4736) (sky-mask texture-mask :inline :offset-assert 5024) @@ -291,12 +305,12 @@ :flag-assert #x1e0000146c (:methods (deactivate (_type_) _type_ 9) - (level-method-10 () none 10) + (is-object-visible? (_type_ int) symbol 10) (level-method-11 () none 11) (unload! (_type_) _type_ 12) (bsp-name (_type_) symbol 13) (compute-memory-usage (_type_ object) memory-usage-block 14) - (point-in-boxes? (_type_ vector) symbol 15) + (inside-boxes-check (_type_ vector) symbol 15) (level-method-16 () none 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) @@ -357,23 +371,23 @@ (:methods (level-get (_type_ symbol) level 9) (level-get-with-status (_type_ symbol) level 10) - (get-level-by-heap-ptr-and-status (_type_ pointer symbol) level 11) + (get-level-by-heap-ptr-and-status (_type_ pointer symbol) level 11) ;; (level-get-for-use (_type_ symbol symbol) level 12) (activate-levels! (_type_) int 13) - (level-group-method-14 () none 14) + (debug-print-entities (_type_ symbol type) none 14) (debug-draw-actors (_type_ symbol) none 15) - (assign-draw-indices (_type_) none 16) - (actors-update (_type_) none 17) - (level-group-method-18 () none 18) - (level-update (_type_) none 19) - (level-get-target-inside (_type_) level 20) + (assign-draw-indices (_type_) none 16) ;; (level-update (_type_) int 16) + (actors-update (_type_) none 17) ;; (level-get-target-inside (_type_) level 17) + (level-group-method-18 (_type_) none 18) ;; (alloc-levels! (_type_ symbol) int 18) + (level-update (_type_) none 19) ;; + (level-get-target-inside (_type_) level 20) ;; (art-group-get-by-name (_type_ string) art-group 20) (alloc-levels-if-needed (_type_ symbol) none 21) (load-commands-set! (_type_ pair) none 22) - (art-group-get-by-name (_type_ string (pointer uint32)) art-group 23) - (load-command-get-index (_type_ symbol int) pair 24) - (level-group-method-25 () none 25) - (level-group-method-26 () none 26) - (level-group-method-27 () none 27) + (art-group-get-by-name (_type_ string (pointer uint32)) art-group 23) ;; (update-vis-volumes-from-nav-mesh (_type_) none 23) + (alt-load-command-get-index (_type_ symbol int) pair 24) ;; (print-volume-sizes (_type_) none 24) + (update-vis-volumes (_type_) none 25) ;; (level-status (_type_ symbol) symbol 25) + (update-vis-volumes-from-nav-mesh (_type_) none 26) + (print-volume-sizes (_type_) none 27) (level-status (_type_ symbol) symbol 28) (load-in-progress? (_type_) symbol 29) (level-get-most-disposable (_type_) level 30) diff --git a/goal_src/jak2/engine/level/level-info.gc b/goal_src/jak2/engine/level/level-info.gc index 94cb1c8231..9eda285908 100644 --- a/goal_src/jak2/engine/level/level-info.gc +++ b/goal_src/jak2/engine/level/level-info.gc @@ -29,6 +29,7 @@ ) ) +;; definition for symbol default-level, type level-load-info (define default-level (new 'static 'level-load-info :index 1 :name 'default-level @@ -37,7 +38,7 @@ :dbname 'default-level :taskname 'default :packages '() - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -83,8 +84,10 @@ ) ) +;; failed to figure out what this is: (set! (-> default-level dbname) #f) +;; definition for symbol intro, type level-load-info (define intro (new 'static 'level-load-info :index 2 :name 'intro @@ -93,7 +96,7 @@ :dbname 'intro :taskname 'default :packages '(intro) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -139,6 +142,7 @@ ) ) +;; definition for symbol demo, type level-load-info (define demo (new 'static 'level-load-info :index 3 @@ -148,7 +152,7 @@ :dbname 'demo :taskname 'default :packages '(demo) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -293,6 +297,7 @@ ) ) +;; definition for symbol title, type level-load-info (define title (new 'static 'level-load-info :index 4 @@ -427,6 +432,7 @@ ) ) +;; definition for symbol vinroom, type level-load-info (define vinroom (new 'static 'level-load-info :index 5 @@ -621,6 +627,7 @@ ) ) +;; definition for symbol drillmid, type level-load-info (define drillmid (new 'static 'level-load-info :index 6 @@ -631,7 +638,7 @@ :dbname 'drillmid :taskname 'drill :packages '(hoverp turretp drill) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'strip :ambient-sounds '() :mood-func 'update-mood-drill @@ -837,6 +844,7 @@ ) ) +;; definition for symbol drill, type level-load-info (define drill (new 'static 'level-load-info :index 7 :task-level #xa @@ -891,6 +899,7 @@ ) ) +;; definition for symbol drillb, type level-load-info (define drillb (new 'static 'level-load-info :index 8 :task-level #xa @@ -945,6 +954,7 @@ ) ) +;; definition for symbol drillmtn, type level-load-info (define drillmtn (new 'static 'level-load-info :index 9 :task-level #xa @@ -999,6 +1009,7 @@ ) ) +;; definition for symbol sewer, type level-load-info (define sewer (new 'static 'level-load-info :index 10 @@ -1009,7 +1020,7 @@ :dbname 'sewer :taskname 'sewer :packages '() - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'sewer :ambient-sounds '() :mood-func 'update-mood-copy-sewerb @@ -1095,6 +1106,7 @@ ) ) +;; definition for symbol sewerb, type level-load-info (define sewerb (new 'static 'level-load-info :index 11 :task-level #x7 @@ -1149,6 +1161,7 @@ ) ) +;; definition for symbol sewesc, type level-load-info (define sewesc (new 'static 'level-load-info :index 12 @@ -1159,7 +1172,7 @@ :dbname 'sewer :taskname 'sewer :packages '(botp halp rufp sewer) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'sewer :ambient-sounds '() :mood-func 'update-mood-copy-sewescb @@ -1297,6 +1310,7 @@ ) ) +;; definition for symbol sewescb, type level-load-info (define sewescb (new 'static 'level-load-info :index 13 :task-level #x7 @@ -1351,6 +1365,7 @@ ) ) +;; definition for symbol tomba, type level-load-info (define tomba (new 'static 'level-load-info :index 14 @@ -1361,7 +1376,7 @@ :dbname 'tomba :taskname 'tomb :packages '(tomb) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'tomb :ambient-sounds '() :sound-reverb 0.2 @@ -1533,6 +1548,7 @@ ) ) +;; definition for symbol tombb, type level-load-info (define tombb (new 'static 'level-load-info :index 15 @@ -1627,6 +1643,7 @@ ) ) +;; definition for symbol tombc, type level-load-info (define tombc (new 'static 'level-load-info :index 16 @@ -1701,6 +1718,7 @@ ) ) +;; definition for symbol tombd, type level-load-info (define tombd (new 'static 'level-load-info :index 17 @@ -1774,6 +1792,7 @@ ) ) +;; definition for symbol tombe, type level-load-info (define tombe (new 'static 'level-load-info :index 18 @@ -1892,6 +1911,7 @@ ) ) +;; definition for symbol tombext, type level-load-info (define tombext (new 'static 'level-load-info :index 19 :task-level #xc @@ -1945,6 +1965,7 @@ ) ) +;; definition for symbol tombboss, type level-load-info (define tombboss (new 'static 'level-load-info :index 20 @@ -2038,6 +2059,7 @@ ) ) +;; definition for symbol under, type level-load-info (define under (new 'static 'level-load-info :index 21 @@ -2048,7 +2070,7 @@ :dbname 'under :taskname 'under :packages '() - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'sewer :ambient-sounds '() :mood-func 'update-mood-copy-underb @@ -2114,6 +2136,7 @@ ) ) +;; definition for symbol underb, type level-load-info (define underb (new 'static 'level-load-info :index 22 @@ -2249,6 +2272,7 @@ ) ) +;; definition for symbol palcab, type level-load-info (define palcab (new 'static 'level-load-info :index 23 @@ -2259,7 +2283,7 @@ :dbname 'palcab :taskname 'palace :packages '(palcab) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'palcab :ambient-sounds '() :mood-func 'update-mood-palcab @@ -2346,6 +2370,7 @@ ) ) +;; definition for symbol palshaft, type level-load-info (define palshaft (new 'static 'level-load-info :index 24 @@ -2421,6 +2446,7 @@ ) ) +;; definition for symbol palboss, type level-load-info (define palboss (new 'static 'level-load-info :index 25 :task-level #xb @@ -2476,6 +2502,7 @@ ) ) +;; definition for symbol palroof, type level-load-info (define palroof (new 'static 'level-load-info :index 26 @@ -2592,6 +2619,7 @@ ) ) +;; definition for symbol palout, type level-load-info (define palout (new 'static 'level-load-info :index 27 :task-level #xb @@ -2647,6 +2675,7 @@ ) ) +;; definition for symbol throne, type level-load-info (define throne (new 'static 'level-load-info :index 28 @@ -2743,6 +2772,7 @@ ) ) +;; definition for symbol lbrnermk, type level-load-info (define lbrnermk (new 'static 'level-load-info :index 29 :task-level #xb @@ -2752,7 +2782,7 @@ :dbname 'lbrnermk :taskname 'palace :packages '(metalkorp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -2798,6 +2828,7 @@ ) ) +;; definition for symbol lashthrn, type level-load-info (define lashthrn (new 'static 'level-load-info :index 30 :task-level #xb @@ -2807,7 +2838,7 @@ :dbname 'lashthrn :taskname 'palace :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -2853,6 +2884,7 @@ ) ) +;; definition for symbol lthrnout, type level-load-info (define lthrnout (new 'static 'level-load-info :index 31 :task-level #xb @@ -2862,7 +2894,7 @@ :dbname 'lthrnout :taskname 'palace :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-palent @@ -2908,6 +2940,7 @@ ) ) +;; definition for symbol palent, type level-load-info (define palent (new 'static 'level-load-info :index 32 @@ -2918,7 +2951,7 @@ :dbname 'palent :taskname 'palace :packages '() - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'palcab :ambient-sounds '() :mood-func 'update-mood-palent @@ -3003,6 +3036,7 @@ ) ) +;; definition for symbol prison, type level-load-info (define prison (new 'static 'level-load-info :index 33 @@ -3013,7 +3047,7 @@ :dbname 'prison :taskname 'fortress :packages '(prison) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'fortress :ambient-sounds '() :mood-func 'update-mood-prison @@ -3119,6 +3153,7 @@ ) ) +;; definition for symbol ldjakbrn, type level-load-info (define ldjakbrn (new 'static 'level-load-info :index 34 :name 'ldjakbrn @@ -3127,7 +3162,7 @@ :dbname 'ldjakbrn :taskname 'default :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-prison @@ -3173,6 +3208,7 @@ ) ) +;; definition for symbol lprsncst, type level-load-info (define lprsncst (new 'static 'level-load-info :index 35 :name 'lprsncst @@ -3181,7 +3217,7 @@ :dbname 'lprsncst :taskname 'default :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-prison @@ -3227,6 +3263,7 @@ ) ) +;; definition for symbol forexita, type level-load-info (define forexita (new 'static 'level-load-info :index 36 @@ -3321,6 +3358,7 @@ ) ) +;; definition for symbol forexitb, type level-load-info (define forexitb (new 'static 'level-load-info :index 37 @@ -3416,6 +3454,7 @@ ) ) +;; definition for symbol forresca, type level-load-info (define forresca (new 'static 'level-load-info :index 38 @@ -3490,6 +3529,7 @@ ) ) +;; definition for symbol forrescb, type level-load-info (define forrescb (new 'static 'level-load-info :index 39 @@ -3565,6 +3605,7 @@ ) ) +;; definition for symbol fordumpa, type level-load-info (define fordumpa (new 'static 'level-load-info :index 40 @@ -3659,6 +3700,7 @@ ) ) +;; definition for symbol fordumpb, type level-load-info (define fordumpb (new 'static 'level-load-info :index 41 @@ -3669,7 +3711,7 @@ :dbname 'fordumpb :taskname 'fortress :packages '(guardp fordumpb) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'fortress :ambient-sounds '() :mood-func 'update-mood-fortress @@ -3735,6 +3777,7 @@ ) ) +;; definition for symbol fordumpc, type level-load-info (define fordumpc (new 'static 'level-load-info :index 42 @@ -3850,6 +3893,7 @@ ) ) +;; definition for symbol fordumpd, type level-load-info (define fordumpd (new 'static 'level-load-info :index 43 :task-level #x3 @@ -3904,6 +3948,7 @@ ) ) +;; definition for symbol strip, type level-load-info (define strip (new 'static 'level-load-info :index 44 @@ -3914,7 +3959,7 @@ :dbname 'strip :taskname 'strip :packages '(hoverp strip) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'strip :ambient-sounds '() :mood-func 'update-mood-strip @@ -4041,6 +4086,7 @@ ) ) +;; definition for symbol ruins, type level-load-info (define ruins (new 'static 'level-load-info :index 45 @@ -4051,7 +4097,7 @@ :dbname 'ruins :taskname 'ruins :packages '(mechp ruins) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'ruins :ambient-sounds '() :mood-func 'update-mood-ruins @@ -4203,6 +4249,7 @@ ) ) +;; definition for symbol sagehut, type level-load-info (define sagehut (new 'static 'level-load-info :index 46 :task-level #x4 @@ -4258,6 +4305,7 @@ ) ) +;; definition for symbol atoll, type level-load-info (define atoll (new 'static 'level-load-info :index 47 @@ -4268,7 +4316,7 @@ :dbname 'atoll :taskname 'atoll :packages '(gun-buoyp atoll) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'atoll :ambient-sounds '() :mood-func 'update-mood-atoll @@ -4494,6 +4542,7 @@ ) ) +;; definition for symbol atollext, type level-load-info (define atollext (new 'static 'level-load-info :index 48 :task-level #x6 @@ -4548,6 +4597,7 @@ ) ) +;; definition for symbol mountain, type level-load-info (define mountain (new 'static 'level-load-info :index 49 @@ -4558,7 +4608,7 @@ :dbname 'mountain :taskname 'mountain :packages '(mountain) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'mountain :ambient-sounds '() :mood-func 'update-mood-mountain @@ -4810,6 +4860,7 @@ ) ) +;; definition for symbol mtnext, type level-load-info (define mtnext (new 'static 'level-load-info :index 50 :task-level #x8 @@ -4819,7 +4870,7 @@ :dbname 'mtnext :taskname 'mountain :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-mountain @@ -4866,6 +4917,7 @@ ) ) +;; definition for symbol forest, type level-load-info (define forest (new 'static 'level-load-info :index 51 @@ -4876,7 +4928,7 @@ :dbname 'forest :taskname 'forest :packages '(spyderp guardp hoverp forest) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'forest :ambient-sounds '() :mood-func 'update-mood-forest @@ -4962,6 +5014,7 @@ ) ) +;; definition for symbol forestb, type level-load-info (define forestb (new 'static 'level-load-info :index 52 :task-level #x9 @@ -4971,7 +5024,7 @@ :dbname 'forestb :taskname 'forest :packages '(forestb) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'forest :ambient-sounds '() :mood-func 'update-mood-default @@ -5018,6 +5071,7 @@ ) ) +;; definition for symbol mincan, type level-load-info (define mincan (new 'static 'level-load-info :index 53 @@ -5114,6 +5168,7 @@ ) ) +;; definition for symbol ctywide, type level-load-info (define ctywide (new 'static 'level-load-info :index 54 :task-level #x1 @@ -5123,7 +5178,7 @@ :dbname 'ctywide :taskname 'city :packages '(ctywide) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'city1 :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -5172,6 +5227,7 @@ ) ) +;; definition for symbol lwidea, type level-load-info (define lwidea (new 'static 'level-load-info :index 55 :task-level #x1 @@ -5181,7 +5237,7 @@ :dbname 'lwidea :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -5228,6 +5284,7 @@ ) ) +;; definition for symbol lwideb, type level-load-info (define lwideb (new 'static 'level-load-info :index 56 :task-level #x1 @@ -5237,7 +5294,7 @@ :dbname 'lwideb :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -5284,6 +5341,7 @@ ) ) +;; definition for symbol lwidec, type level-load-info (define lwidec (new 'static 'level-load-info :index 57 :task-level #x1 @@ -5293,7 +5351,7 @@ :dbname 'lwidec :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -5340,6 +5398,7 @@ ) ) +;; definition for symbol ctykora, type level-load-info (define ctykora (new 'static 'level-load-info :index 58 :task-level #x1 @@ -5395,6 +5454,7 @@ ) ) +;; definition for symbol ctyasha, type level-load-info (define ctyasha (new 'static 'level-load-info :index 59 :task-level #x1 @@ -5450,6 +5510,7 @@ ) ) +;; definition for symbol ctygena, type level-load-info (define ctygena (new 'static 'level-load-info :index 60 @@ -5567,6 +5628,7 @@ ) ) +;; definition for symbol ctygenb, type level-load-info (define ctygenb (new 'static 'level-load-info :index 61 @@ -5684,6 +5746,7 @@ ) ) +;; definition for symbol ctygenc, type level-load-info (define ctygenc (new 'static 'level-load-info :index 62 @@ -5801,6 +5864,7 @@ ) ) +;; definition for symbol ctysluma, type level-load-info (define ctysluma (new 'static 'level-load-info :index 63 @@ -6057,6 +6121,7 @@ ) ) +;; definition for symbol ctyslumb, type level-load-info (define ctyslumb (new 'static 'level-load-info :index 64 @@ -6192,6 +6257,7 @@ ) ) +;; definition for symbol ctyslumc, type level-load-info (define ctyslumc (new 'static 'level-load-info :index 65 @@ -6328,6 +6394,7 @@ ) ) +;; definition for symbol ctyport, type level-load-info (define ctyport (new 'static 'level-load-info :index 66 @@ -6723,6 +6790,7 @@ ) ) +;; definition for symbol ljkdxash, type level-load-info (define ljkdxash (new 'static 'level-load-info :index 67 :name 'ljkdxash @@ -6777,6 +6845,7 @@ ) ) +;; definition for symbol ctyfarma, type level-load-info (define ctyfarma (new 'static 'level-load-info :index 68 @@ -6915,6 +6984,7 @@ ) ) +;; definition for symbol ctyfarmb, type level-load-info (define ctyfarmb (new 'static 'level-load-info :index 69 @@ -7013,6 +7083,7 @@ ) ) +;; definition for symbol ctyinda, type level-load-info (define ctyinda (new 'static 'level-load-info :index 70 @@ -7168,6 +7239,7 @@ ) ) +;; definition for symbol consite, type level-load-info (define consite (new 'static 'level-load-info :index 71 @@ -7178,7 +7250,7 @@ :dbname 'consite :taskname 'consite :packages '(consite) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-consite @@ -7264,6 +7336,7 @@ ) ) +;; definition for symbol consiteb, type level-load-info (define consiteb (new 'static 'level-load-info :index 72 @@ -7338,6 +7411,7 @@ ) ) +;; definition for symbol ctyindb, type level-load-info (define ctyindb (new 'static 'level-load-info :index 73 @@ -7454,6 +7528,7 @@ ) ) +;; definition for symbol ctymarka, type level-load-info (define ctymarka (new 'static 'level-load-info :index 74 @@ -7552,6 +7627,7 @@ ) ) +;; definition for symbol ctymarkb, type level-load-info (define ctymarkb (new 'static 'level-load-info :index 75 @@ -7690,6 +7766,7 @@ ) ) +;; definition for symbol ctypal, type level-load-info (define ctypal (new 'static 'level-load-info :index 76 @@ -7827,6 +7904,7 @@ ) ) +;; definition for symbol stadium, type level-load-info (define stadium (new 'static 'level-load-info :index 77 @@ -7982,6 +8060,7 @@ ) ) +;; definition for symbol stadiumb, type level-load-info (define stadiumb (new 'static 'level-load-info :index 78 @@ -8137,6 +8216,7 @@ ) ) +;; definition for symbol stadiumc, type level-load-info (define stadiumc (new 'static 'level-load-info :index 79 @@ -8312,6 +8392,7 @@ ) ) +;; definition for symbol stadiumd, type level-load-info (define stadiumd (new 'static 'level-load-info :index 80 @@ -8467,6 +8548,7 @@ ) ) +;; definition for symbol skatea, type level-load-info (define skatea (new 'static 'level-load-info :index 81 @@ -8580,6 +8662,7 @@ ) ) +;; definition for symbol garage, type level-load-info (define garage (new 'static 'level-load-info :index 82 @@ -8695,6 +8778,7 @@ ) ) +;; definition for symbol stadblmp, type level-load-info (define stadblmp (new 'static 'level-load-info :index 83 :task-level #x2 @@ -8749,6 +8833,7 @@ ) ) +;; definition for symbol lwidesta, type level-load-info (define lwidesta (new 'static 'level-load-info :index 84 :task-level #x2 @@ -8758,7 +8843,7 @@ :dbname 'lwidesta :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-stadiumb @@ -8805,6 +8890,7 @@ ) ) +;; definition for symbol lerrol, type level-load-info (define lerrol (new 'static 'level-load-info :index 85 :task-level #x2 @@ -8814,7 +8900,7 @@ :dbname 'lerrol :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -8861,6 +8947,7 @@ ) ) +;; definition for symbol lkeirift, type level-load-info (define lkeirift (new 'static 'level-load-info :index 86 :task-level #x2 @@ -8870,7 +8957,7 @@ :dbname 'lkeirift :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -8917,6 +9004,7 @@ ) ) +;; definition for symbol lracelit, type level-load-info (define lracelit (new 'static 'level-load-info :index 87 :task-level #x2 @@ -8926,7 +9014,7 @@ :dbname 'lracelit :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -8973,6 +9061,7 @@ ) ) +;; definition for symbol lracebb, type level-load-info (define lracebb (new 'static 'level-load-info :index 88 :task-level #x2 @@ -8982,7 +9071,7 @@ :dbname 'lracebb :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9029,6 +9118,7 @@ ) ) +;; definition for symbol lracebf, type level-load-info (define lracebf (new 'static 'level-load-info :index 89 :task-level #x2 @@ -9038,7 +9128,7 @@ :dbname 'lracebf :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9085,6 +9175,7 @@ ) ) +;; definition for symbol lracecb, type level-load-info (define lracecb (new 'static 'level-load-info :index 90 :task-level #x2 @@ -9094,7 +9185,7 @@ :dbname 'lracecb :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9141,6 +9232,7 @@ ) ) +;; definition for symbol lracecf, type level-load-info (define lracecf (new 'static 'level-load-info :index 91 :task-level #x2 @@ -9150,7 +9242,7 @@ :dbname 'lracecf :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9197,6 +9289,7 @@ ) ) +;; definition for symbol lracedb, type level-load-info (define lracedb (new 'static 'level-load-info :index 92 :task-level #x2 @@ -9206,7 +9299,7 @@ :dbname 'lracedb :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9253,6 +9346,7 @@ ) ) +;; definition for symbol lracedf, type level-load-info (define lracedf (new 'static 'level-load-info :index 93 :task-level #x2 @@ -9262,7 +9356,7 @@ :dbname 'lracedf :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9309,6 +9403,7 @@ ) ) +;; definition for symbol lgarcsta, type level-load-info (define lgarcsta (new 'static 'level-load-info :index 94 :task-level #x1 @@ -9318,7 +9413,7 @@ :dbname 'lgarcsta :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-garage @@ -9364,6 +9459,7 @@ ) ) +;; definition for symbol lsamergd, type level-load-info (define lsamergd (new 'static 'level-load-info :index 95 :task-level #x1 @@ -9373,7 +9469,7 @@ :dbname 'lsamergd :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -9419,6 +9515,7 @@ ) ) +;; definition for symbol lerbrngd, type level-load-info (define lerbrngd (new 'static 'level-load-info :index 96 :task-level #x1 @@ -9428,7 +9525,7 @@ :dbname 'lerbrngd :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -9474,6 +9571,7 @@ ) ) +;; definition for symbol lsmysbrt, type level-load-info (define lsmysbrt (new 'static 'level-load-info :index 97 :task-level #x1 @@ -9483,7 +9581,7 @@ :dbname 'lsmysbrt :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -9529,6 +9627,7 @@ ) ) +;; definition for symbol lashgrd, type level-load-info (define lashgrd (new 'static 'level-load-info :index 98 :task-level #x1 @@ -9538,7 +9637,7 @@ :dbname 'lashgrd :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-garage @@ -9584,6 +9683,7 @@ ) ) +;; definition for symbol onintent, type level-load-info (define onintent (new 'static 'level-load-info :index 99 @@ -9659,6 +9759,7 @@ ) ) +;; definition for symbol ltentout, type level-load-info (define ltentout (new 'static 'level-load-info :index 100 :task-level #x1 @@ -9668,7 +9769,7 @@ :dbname 'ltentout :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank 'city1 :ambient-sounds '() :mood-func 'update-mood-ltentout @@ -9715,6 +9816,7 @@ ) ) +;; definition for symbol ltentob, type level-load-info (define ltentob (new 'static 'level-load-info :index #x65 :task-level #x1 @@ -9724,7 +9826,7 @@ :dbname 'ltentob :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank 'city1 :ambient-sounds '() :mood-func 'update-mood-ltentout @@ -9771,6 +9873,7 @@ ) ) +;; definition for symbol kiosk, type level-load-info (define kiosk (new 'static 'level-load-info :index #x66 @@ -9845,6 +9948,7 @@ ) ) +;; definition for symbol oracle, type level-load-info (define oracle (new 'static 'level-load-info :index #x67 @@ -9919,6 +10023,7 @@ ) ) +;; definition for symbol hideout, type level-load-info (define hideout (new 'static 'level-load-info :index #x68 @@ -10013,6 +10118,7 @@ ) ) +;; definition for symbol ltrntess, type level-load-info (define ltrntess (new 'static 'level-load-info :index #x69 :task-level #x1 @@ -10067,6 +10173,7 @@ ) ) +;; definition for symbol ltrnkrkd, type level-load-info (define ltrnkrkd (new 'static 'level-load-info :index #x6a :task-level #x1 @@ -10076,7 +10183,7 @@ :dbname 'ltrnkrkd :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hideout @@ -10122,6 +10229,7 @@ ) ) +;; definition for symbol ltrnysam, type level-load-info (define ltrnysam (new 'static 'level-load-info :index #x6b :task-level #x1 @@ -10131,7 +10239,7 @@ :dbname 'ltrnysam :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hideout @@ -10177,6 +10285,7 @@ ) ) +;; definition for symbol lysamsam, type level-load-info (define lysamsam (new 'static 'level-load-info :index #x6c :task-level #x1 @@ -10186,7 +10295,7 @@ :dbname 'lysamsam :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hideout @@ -10232,6 +10341,7 @@ ) ) +;; definition for symbol lyskdcd, type level-load-info (define lyskdcd (new 'static 'level-load-info :index #x6d :task-level #x1 @@ -10286,6 +10396,7 @@ ) ) +;; definition for symbol lkiddoge, type level-load-info (define lkiddoge (new 'static 'level-load-info :index #x6e :task-level #x1 @@ -10295,7 +10406,7 @@ :dbname 'lkiddoge :taskname 'city :packages '(botp halp esckidp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10341,6 +10452,7 @@ ) ) +;; definition for symbol lhelldog, type level-load-info (define lhelldog (new 'static 'level-load-info :index #x6f :task-level #x1 @@ -10350,7 +10462,7 @@ :dbname 'lhelldog :taskname 'city :packages '(helldogp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10396,6 +10508,7 @@ ) ) +;; definition for symbol lpackage, type level-load-info (define lpackage (new 'static 'level-load-info :index #x70 :task-level #x1 @@ -10405,7 +10518,7 @@ :dbname 'lpackage :taskname 'city :packages '(deliveryp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10451,6 +10564,7 @@ ) ) +;; definition for symbol lsack, type level-load-info (define lsack (new 'static 'level-load-info :index #x71 :task-level #x1 @@ -10460,7 +10574,7 @@ :dbname 'lsack :taskname 'city :packages '(collectionp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10506,6 +10620,7 @@ ) ) +;; definition for symbol lportrun, type level-load-info (define lportrun (new 'static 'level-load-info :index #x72 :task-level #x1 @@ -10515,7 +10630,7 @@ :dbname 'lportrun :taskname 'city :packages '(portrunp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10561,6 +10676,7 @@ ) ) +;; definition for symbol lshuttle, type level-load-info (define lshuttle (new 'static 'level-load-info :index #x73 :task-level #x1 @@ -10570,7 +10686,7 @@ :dbname 'lshuttle :taskname 'city :packages '(shuttlep) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10616,6 +10732,7 @@ ) ) +;; definition for symbol lmeetbrt, type level-load-info (define lmeetbrt (new 'static 'level-load-info :index #x74 :task-level #x1 @@ -10625,7 +10742,7 @@ :dbname 'lmeetbrt :taskname 'city :packages '(meetbrtp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10671,6 +10788,7 @@ ) ) +;; definition for symbol lpower, type level-load-info (define lpower (new 'static 'level-load-info :index #x75 :task-level #x1 @@ -10680,7 +10798,7 @@ :dbname 'lpower :taskname 'city :packages '(ctypowerp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10726,6 +10844,7 @@ ) ) +;; definition for symbol lerlchal, type level-load-info (define lerlchal (new 'static 'level-load-info :index #x76 :task-level #x1 @@ -10735,7 +10854,7 @@ :dbname 'lerlchal :taskname 'city :packages '(racep errol-chalp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10781,6 +10900,7 @@ ) ) +;; definition for symbol lprtrace, type level-load-info (define lprtrace (new 'static 'level-load-info :index #x77 :task-level #x1 @@ -10790,7 +10910,7 @@ :dbname 'lprtrace :taskname 'city :packages '(racep errol-chalp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10836,6 +10956,7 @@ ) ) +;; definition for symbol lbombbot, type level-load-info (define lbombbot (new 'static 'level-load-info :index #x78 :task-level #x1 @@ -10845,7 +10966,7 @@ :dbname 'lbombbot :taskname 'city :packages '(bombbotp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10891,6 +11012,7 @@ ) ) +;; definition for symbol lbbush, type level-load-info (define lbbush (new 'static 'level-load-info :index #x79 :task-level #x1 @@ -10900,7 +11022,7 @@ :dbname 'lbbush :taskname 'city :packages '(bbushp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10946,6 +11068,7 @@ ) ) +;; definition for symbol lprotect, type level-load-info (define lprotect (new 'static 'level-load-info :index #x7a :task-level #x1 @@ -10955,7 +11078,7 @@ :dbname 'lprotect :taskname 'city :packages '(gun-buoyp protectp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -11001,6 +11124,7 @@ ) ) +;; definition for symbol hiphog, type level-load-info (define hiphog (new 'static 'level-load-info :index #x7b @@ -11176,6 +11300,7 @@ ) ) +;; definition for symbol ltess, type level-load-info (define ltess (new 'static 'level-load-info :index #x7c :task-level #x1 @@ -11185,7 +11310,7 @@ :dbname 'ltess :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11231,6 +11356,7 @@ ) ) +;; definition for symbol lhipout, type level-load-info (define lhipout (new 'static 'level-load-info :index #x7d :task-level #x1 @@ -11240,7 +11366,7 @@ :dbname 'lhipout :taskname 'city :packages '(whackp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11286,6 +11412,7 @@ ) ) +;; definition for symbol lwhack, type level-load-info (define lwhack (new 'static 'level-load-info :index #x7e :task-level #x1 @@ -11295,7 +11422,7 @@ :dbname 'lwhack :taskname 'city :packages '(whackp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11341,6 +11468,7 @@ ) ) +;; definition for symbol lguard, type level-load-info (define lguard (new 'static 'level-load-info :index #x7f :task-level #x1 @@ -11350,7 +11478,7 @@ :dbname 'lguard :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11396,6 +11524,7 @@ ) ) +;; definition for symbol lcguard, type level-load-info (define lcguard (new 'static 'level-load-info :index #x80 :task-level #x1 @@ -11405,7 +11534,7 @@ :dbname 'lcguard :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -11451,6 +11580,7 @@ ) ) +;; definition for symbol lerltess, type level-load-info (define lerltess (new 'static 'level-load-info :index #x81 :task-level #x1 @@ -11460,7 +11590,7 @@ :dbname 'lerltess :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11506,6 +11636,7 @@ ) ) +;; definition for symbol gungame, type level-load-info (define gungame (new 'static 'level-load-info :index #x82 @@ -11600,6 +11731,7 @@ ) ) +;; definition for symbol dig1, type level-load-info (define dig1 (new 'static 'level-load-info :index #x83 @@ -11610,7 +11742,7 @@ :dbname 'dig1 :taskname 'dig :packages '(guardp dig) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'dig :ambient-sounds '() :sound-reverb 0.2 @@ -11677,6 +11809,7 @@ ) ) +;; definition for symbol dig3a, type level-load-info (define dig3a (new 'static 'level-load-info :index #x84 @@ -11687,7 +11820,7 @@ :dbname 'dig3a :taskname 'dig :packages '(hoverp dig) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'dig :ambient-sounds '() :sound-reverb 0.2 @@ -11818,6 +11951,7 @@ ) ) +;; definition for symbol dig3b, type level-load-info (define dig3b (new 'static 'level-load-info :index #x85 :task-level #xd @@ -11872,6 +12006,7 @@ ) ) +;; definition for symbol caspad, type level-load-info (define caspad (new 'static 'level-load-info :index #x86 @@ -11987,6 +12122,7 @@ ) ) +;; definition for symbol castle, type level-load-info (define castle (new 'static 'level-load-info :index #x87 @@ -11997,7 +12133,7 @@ :dbname 'castle :taskname 'castle :packages '(guardp castle) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'palcab :ambient-sounds '() :mood-func 'update-mood-castle @@ -12082,6 +12218,7 @@ ) ) +;; definition for symbol casboss, type level-load-info (define casboss (new 'static 'level-load-info :index #x88 @@ -12158,6 +12295,7 @@ ) ) +;; definition for symbol casext, type level-load-info (define casext (new 'static 'level-load-info :index #x89 :task-level #xe @@ -12213,6 +12351,7 @@ ) ) +;; definition for symbol cascity, type level-load-info (define cascity (new 'static 'level-load-info :index #x8a :task-level #xe @@ -12222,7 +12361,7 @@ :dbname 'cascity :taskname 'castle :packages '() - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -12269,6 +12408,7 @@ ) ) +;; definition for symbol village1, type level-load-info (define village1 (new 'static 'level-load-info :index #x8b @@ -12278,7 +12418,7 @@ :dbname 'village1 :taskname 'default :packages '() - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-village1 @@ -12385,6 +12525,7 @@ ) ) +;; definition for symbol introcst, type level-load-info (define introcst (new 'static 'level-load-info :index #x8c :name 'introcst @@ -12440,6 +12581,7 @@ ) ) +;; definition for symbol lcitylow, type level-load-info (define lcitylow (new 'static 'level-load-info :index #x8d :task-level #x1 @@ -12449,7 +12591,7 @@ :dbname 'lcitylow :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -12496,6 +12638,7 @@ ) ) +;; definition for symbol lintcstb, type level-load-info (define lintcstb (new 'static 'level-load-info :index #x8e :name 'lintcstb @@ -12504,7 +12647,7 @@ :dbname 'lintcstb :taskname 'default :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-village1 @@ -12551,6 +12694,7 @@ ) ) +;; definition for symbol ljakdax, type level-load-info (define ljakdax (new 'static 'level-load-info :index #x8f :name 'ljakdax @@ -12605,6 +12749,7 @@ ) ) +;; definition for symbol nest, type level-load-info (define nest (new 'static 'level-load-info :index #x90 @@ -12615,7 +12760,7 @@ :dbname 'nest :taskname 'nest :packages '(gun-buoyp nest) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'strip :ambient-sounds '() :mood-func 'update-mood-nest @@ -12741,6 +12886,7 @@ ) ) +;; definition for symbol nestb, type level-load-info (define nestb (new 'static 'level-load-info :index #x91 @@ -12751,7 +12897,7 @@ :dbname 'nestb :taskname 'nest :packages '(hoverp nestb) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'strip :ambient-sounds '() :mood-func 'update-mood-nestb @@ -12876,6 +13022,7 @@ ) ) +;; definition for symbol outrocst, type level-load-info (define outrocst (new 'static 'level-load-info :index #x92 :name 'outrocst @@ -12931,6 +13078,7 @@ ) ) +;; definition for symbol portwall, type level-load-info (define portwall (new 'static 'level-load-info :index #x93 :task-level #x1 @@ -12940,7 +13088,7 @@ :dbname 'portwall :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -12987,6 +13135,7 @@ ) ) +;; definition for symbol loutcstb, type level-load-info (define loutcstb (new 'static 'level-load-info :index #x94 :name 'loutcstb @@ -12995,7 +13144,7 @@ :dbname 'loutcstb :taskname 'default :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-nestb @@ -13042,6 +13191,7 @@ ) ) +;; definition for symbol island1, type level-load-info (define island1 (new 'static 'level-load-info :index #x95 @@ -13115,6 +13265,8 @@ ) ) +;; definition (debug) for function city-start +;; WARN: Return type mismatch target vs none. (defun-debug city-start () (let ((v1-1 (level-get-target-inside *level*))) (when v1-1 @@ -13131,6 +13283,7 @@ (none) ) +;; definition for symbol skatepark, type level-load-info (define skatepark (new 'static 'level-load-info :index #x96 @@ -13140,7 +13293,7 @@ :dbname 'skatepark :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13206,6 +13359,7 @@ ) ) +;; definition for symbol halfpipe, type level-load-info (define halfpipe (new 'static 'level-load-info :index #x97 @@ -13215,7 +13369,7 @@ :dbname 'halfpipe :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13282,6 +13436,7 @@ ) ) +;; definition for symbol vistest, type level-load-info (define vistest (new 'static 'level-load-info :index #x98 :name 'vistest @@ -13290,7 +13445,7 @@ :dbname 'vistest :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13337,6 +13492,7 @@ ) ) +;; definition for symbol woodstest, type level-load-info (define woodstest (new 'static 'level-load-info :index #x99 :name 'woodstest @@ -13345,7 +13501,7 @@ :dbname 'woodstest :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13392,6 +13548,7 @@ ) ) +;; definition for symbol tobytest, type level-load-info (define tobytest (new 'static 'level-load-info :index #x9a :name 'tobytest @@ -13400,7 +13557,7 @@ :dbname 'tobytest :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default-interior @@ -13447,6 +13604,7 @@ ) ) +;; definition for symbol chartest, type level-load-info (define chartest (new 'static 'level-load-info :index #x9b @@ -13456,7 +13614,7 @@ :dbname 'chartest :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13522,6 +13680,7 @@ ) ) +;; definition for symbol dptest, type level-load-info (define dptest (new 'static 'level-load-info :index #x9c @@ -13596,6 +13755,7 @@ ) ) +;; definition for symbol ctyfence, type level-load-info (define ctyfence (new 'static 'level-load-info :index #x9d :task-level #x1 @@ -13605,7 +13765,7 @@ :dbname 'ctyfence :taskname 'city :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'city1 :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -13652,11 +13812,13 @@ ) ) +;; failed to figure out what this is: (when (or (= *kernel-boot-message* 'demo) (= *kernel-boot-message* 'demo-shared)) - (set! (-> ctywide memory-mode) (the-as uint 0)) + (set! (-> ctywide memory-mode) (load-buffer-mode small-edge)) 0 ) +;; definition for symbol *level-load-list*, type pair (define *level-load-list* '(default-level intro demo diff --git a/goal_src/jak2/engine/level/level.gc b/goal_src/jak2/engine/level/level.gc index be73725adc..095c62b857 100644 --- a/goal_src/jak2/engine/level/level.gc +++ b/goal_src/jak2/engine/level/level.gc @@ -7,6 +7,9 @@ ;; DECOMP BEGINS +(define-extern level-update-after-load (function level login-state level)) +(define-extern *level-type-list* type) + (defmacro test-play () "Temporary start macro" `(begin @@ -31,7 +34,93 @@ ) ) +(defun lookup-level-info ((arg0 symbol)) + "Get level-load-info for the specified level. + The level-load-info for all levels is always available to the engine and is used + to figure out how to load levels." + (let* ((v1-0 *level-load-list*) + (a1-0 (car v1-0)) + ) + (while (not (null? v1-0)) + (let ((a1-1 (the-as level-load-info (-> (the-as symbol a1-0) value)))) + (if (or (= arg0 (-> a1-1 name)) (= arg0 (-> a1-1 visname)) (= arg0 (-> a1-1 nickname))) + (return a1-1) + ) + ) + (set! v1-0 (cdr v1-0)) + (set! a1-0 (car v1-0)) + ) + ) + default-level + ) + +(defmethod alt-load-command-get-index level-group ((obj level-group) (arg0 symbol) (arg1 int)) + "Get the n-th alt-load-command for the given level. + This is likely unused in jak 2 because no levels have alt-load-commands." + (let ((v1-1 (-> (lookup-level-info arg0) alt-load-commands))) + (while (nonzero? arg1) + (+! arg1 -1) + (set! v1-1 (cdr v1-1)) + (nop!) + (nop!) + (nop!) + ) + (the-as pair (car v1-1)) + ) + ) + +(defmethod load-in-progress? level-group ((obj level-group)) + "Is a level being loaded right now?" + (!= (-> *level* loading-level) (-> *level* default-level)) + ) + +(defmethod get-level-by-heap-ptr-and-status level-group ((obj level-group) (arg0 pointer) (arg1 symbol)) + "Get a level by a heap pointer and status. + If no matching level is found, return #f. + The purpose of the status check is possibly to prevent bugs with getting stuff + from a level that's just been replaced with another." + (case arg1 + (('active) + (dotimes (v1-1 (-> obj length)) + (let ((a2-6 (-> obj level v1-1))) + (when (= (-> a2-6 status) 'active) + (if (and (>= (the-as int arg0) (the-as int (-> a2-6 heap base))) + (< (the-as int arg0) (the-as int (-> a2-6 heap top-base))) + ) + (return a2-6) + ) + ) + ) + ) + ) + (('loading) + (dotimes (v1-5 (-> obj length)) + (let ((a2-12 (-> obj level v1-5))) + (when (!= (-> a2-12 status) 'inactive) + (if (and (>= (the-as int arg0) (the-as int (-> a2-12 heap base))) + (< (the-as int arg0) (the-as int (-> a2-12 heap top-base))) + ) + (return a2-12) + ) + ) + ) + ) + ) + ) + (the-as level #f) + ) + +(defun remap-level-name ((arg0 level-load-info)) + "Get the name of a level to use. Picks the visname if the vis? setting is on." + (if (-> *level* vis?) + (-> arg0 visname) + (-> arg0 name) + ) + ) + (defmethod get-art-group-by-name level ((obj level) (arg0 string)) + "As the name implies, look through the art-groups of this level and get the one + with the given name. Return #f if not found." (countdown (s4-0 (-> obj art-group art-group-array length)) (if (name= (-> obj art-group art-group-array s4-0 name) arg0) (return (-> obj art-group art-group-array s4-0)) @@ -40,7 +129,87 @@ (the-as art-group #f) ) +(defmethod bsp-name level ((obj level)) + "Get the name of the bsp. If this can't be done, get the name of the level." + (if (and (!= (-> obj status) 'inactive) (-> obj bsp) (nonzero? (-> obj bsp name))) + (-> obj bsp name) + (-> obj name) + ) + ) + +(defun add-bsp-drawable ((arg0 bsp-header) (arg1 level) (arg2 symbol) (arg3 display-frame)) + "Draw this bsp! + Calling draw on a bsp mostly just adds stuff to background-work, so maybe that's why + it's called 'add'. This also will do a debug-draw on the entire bsp if the + display-strip-lines option is set." + (draw arg0 arg0 arg3) + (if (nonzero? *display-strip-lines*) + (debug-draw arg0 arg0 arg3) + ) + (none) + ) + +(defmethod print level ((obj level)) + (format #t "#<~A ~A ~S @ #x~X>" (-> obj type) (-> obj status) (-> obj name) obj) + obj + ) + +(defmethod relocate bsp-header ((obj bsp-header) (arg0 int)) + "Handle the load of a new bsp-header. The linker calls this function + when the bsp-header is linked. + Do some sanity checks and link the bsp-header and level to each other." + (let ((s5-0 (-> *level* loading-level))) + (when s5-0 + (cond + (obj + (cond + ((not (type? obj bsp-header)) + (format 0 "ERROR: level ~A is not a bsp-header.~%" (-> s5-0 name)) + (the-as bsp-header #f) + ) + ((not (file-info-correct-version? (-> obj info) (file-kind level-bt) 0)) + (the-as bsp-header #f) + ) + ((< 2048 (-> obj visible-list-length)) + (format + 0 + "ERROR: level ~A visible-list-length ~d is greater than 2048 (16384 drawables).~%" + (-> s5-0 name) + (-> obj visible-list-length) + ) + (the-as bsp-header #f) + ) + (else + (set! (-> s5-0 bsp) obj) + (set! (-> obj level) s5-0) + obj + ) + ) + ) + (else + (format 0 "ERROR: level ~A is not a valid file.~%" (-> s5-0 name)) + (the-as bsp-header #f) + ) + ) + ) + ) + ) + +(defmethod load-required-packages level ((obj level)) + "Load packages for a level. + This just loads common, and this feature is not really useful. + Packages were only used during development, and seem only partially used in Jak 2 + (the only package is common)." + (when (not (or (not (-> obj bsp)) (= *kernel-boot-mode* 'debug-boot))) + (if (not (null? (-> obj info packages))) + (load-package "common" global) + ) + ) + obj + ) + (defmethod vis-clear level ((obj level)) + "Completely invalide all visibility data, vis-info, and set all-visible? to loading." (countdown (v1-0 8) (nop!) (set! (-> obj vis-info v1-0) #f) @@ -53,12 +222,1619 @@ (none) ) +(defmethod init-vis-from-bsp level ((obj level)) + "Set up a level's vis-infos from a bsp." + (when (not (or (= (-> obj status) 'inactive) (not (-> obj bsp)))) + ;; mark our visibility as 'loading. + (set! (-> obj all-visible?) 'loading) + ;; check vis-info's from the loaded bsp: + (dotimes (s5-0 8) + (let ((s4-0 (-> obj bsp vis-info s5-0))) + (cond + ((and s4-0 (nonzero? s4-0) (valid? s4-0 level-vis-info #f #f 0)) + ;; looks good + + ;; level -> vis info + (set! (-> obj vis-info s5-0) s4-0) + + (set! (-> s4-0 current-vis-string) (the-as uint -1)) + + ;; vis info -> bsp + (if (= (-> s4-0 from-level) (-> obj load-name)) + (set! (-> s4-0 from-bsp) (-> obj bsp)) + (set! (-> s4-0 from-bsp) #f) + ) + + ;; vis info -> level's vis-bits + (set! (-> s4-0 vis-bits) (the-as uint (-> obj vis-bits))) + + (set! (-> s4-0 flags) + (the-as vis-info-flag (logclear (-> s4-0 flags) (vis-info-flag in-iop loading vis-valid))) + ) + (set! *vis-boot* #t) + ) + (else + (set! (-> obj vis-info s5-0) #f) + ) + ) + ) + ) + ) + 0 + (none) + ) + +(defmethod level-get-for-use level-group ((obj level-group) (arg0 symbol) (arg1 symbol)) + "Request a level by name in the given state. + Will return quickly (non-blocking) and might not be able to get a level in the desired state, + though it will ofborrow do some small amount of work to make progress on loading. + + This is the most general/powerful function like this: if there is no level with this name + it will kick out levels as needed to make a free slot, and set up a new level, and start + the load. This should only be used when you might want to start a load. + " + (local-vars (s5-1 level)) + + (start-debug "level-get-for-use: ~A ~A~%" arg0 arg1) + ;; make sure we have level heaps + (alloc-levels-if-needed obj #f) + + ;; look up the requested level + (let* ((s2-0 (lookup-level-info arg0)) + (s1-0 (remap-level-name s2-0)) + ) + + (start-debug "level info: ~A, remapped name: ~A~%" s2-0 s1-0) + + ;; if we already have it, try updating status, then return it + (let ((s5-0 (level-get obj s1-0))) + (when s5-0 + (level-status-update! s5-0 arg1) + (set! s5-1 s5-0) + (goto cfg-13) + ) + ) + + (start-debug "level isn't loaded already, need to find a level~%") + + ;; find slot to load into + (let ((a0-7 (level-get-most-disposable obj))) + (start-debug "found slot: ~A~%" a0-7) + ;; mark it as inactive, we're kicking it out. + (set! s5-1 (if a0-7 + (level-status-update! a0-7 'inactive) + a0-7 + ) + ) + ) + + ;; oops: same bug as jak 1 here... + (when (not level) + (format 0 "ERROR: could not find a slot to load ~A into.~%" arg0) + (set! s5-1 (the-as level #f)) + (goto cfg-13) + ) + + ;; remember where we were loaded + (let ((v1-13 (+ (-> obj load-order) 1))) + (set! (-> obj load-order) v1-13) + (set! (-> s5-1 load-order) (the-as int v1-13)) + ) + + ;; set up the level info + (set! (-> s5-1 info) s2-0) + (set! (-> s5-1 name) arg0) + (set! (-> s5-1 load-name) (the-as string s1-0)) + ) + + ;; other setup from level-info + (set! (-> s5-1 mood-func) (the-as (function mood-context float int none) (-> s5-1 info mood-func value))) + (set! (-> s5-1 mood-init) (the-as (function mood-context none) (-> s5-1 info mood-init value))) + + ;; clear old stuff in level + (dotimes (v1-20 10) + (set! (-> s5-1 texture-anim-array v1-20) #f) + ) + (set! (-> s5-1 display?) #f) + (set! (-> s5-1 force-all-visible?) #f) + (set! (-> s5-1 force-inside?) #f) + + ;; kick off the load! + (start-debug "about to start loading~%") + (level-status-update! s5-1 'loading) + (start-debug "done with load in level-get-for-use, now updating to ~A~%" arg1) + (level-status-update! s5-1 arg1) + (label cfg-13) + s5-1 + ) + +(defmethod level-status level-group ((obj level-group) (arg0 symbol)) + "Get the status of a level by name, return #f if no level is found." + (let ((v1-1 (level-get *level* arg0))) + (if v1-1 + (-> v1-1 status) + ) + ) + ) + +(defmethod level-status-update! level ((obj level) (arg0 symbol)) + "Try to update the level to the given status, calling whatever is needed + to make it happen. + This can do both loading, linking, login, and activation. + This is somewhat similar to level-get-for-use, but requires that you already have + the level object. + This function is the way to transition from loaded to alive/active." + + (start-debug "level-status-update trying to do ~A to ~A~%" (-> obj status) arg0) + (case arg0 + (('inactive) + ;; any request to go inactive should unload. + (-> obj status) + (unload! obj) + ) + (('loading) + (case (-> obj status) + (('inactive) + ;; inactive -> loading transition, start the loader + (load-begin obj) + ) + ) + ) + (('loading-bt) + (case (-> obj status) + (('loading) + ;; loading -> loading-bt, transition immediately and do one load-continue + (set! (-> obj status) arg0) + (load-continue obj) + ) + ) + ) + (('loading-done) + (case (-> obj status) + (('loading-bt) + ;; loading-bt -> loading-done, the only allowed transition to loading-done + (set! (-> obj status) arg0) + ) + ) + ) + (('loaded) + (case (-> obj status) + (('loading-done) + ;; loading-done->loaded, need to log in first + (login-begin obj) + ) + (('alive 'active) + ;; deactivating + (deactivate obj) + ) + ) + ) + (('alive 'active) + (when *dproc* + ;; we do this twice, once to alive, then once to active. + ;; alive means that entities are alive, active means alive and + ;; added to draw engine. + (case (-> obj status) + (('loaded) + ;; loaded (so logged in too), do birth (will set to alive), then try again + (birth obj) + (level-status-update! obj arg0) + ) + (('alive) + ;; on the second run, gets here: + (when (and *dproc* (= arg0 'active)) + ;; remember when + (when (zero? (-> obj display-start-time)) + (set! (-> obj display-start-time) (-> *display* real-clock frame-counter)) + 0 + ) + ;; add us to the background draw engine! this will cause us to be drawn. + (remove-by-param1 *background-draw-engine* (the-as int (-> obj bsp))) + (add-connection *background-draw-engine* *dproc* add-bsp-drawable (-> obj bsp) obj #f) + ;; not sure why this becomes 0... + (dotimes (v1-46 18) + (set! (-> obj closest-object-array v1-46) 0.0) + (set! (-> obj texture-mask v1-46 mask quad) (the-as uint128 0)) + ) + (set! (-> obj status) 'active) + ;; set up for drawing. + (assign-draw-indices *level*) + ) + ) + ) + ) + ) + ) + obj + ) + +(define *login-state* (new 'global 'login-state)) +(define *print-login* #t) + +;; load buffering: +;; the dgo loader and linker are double buffered and require two temp buffers +;; while the dgo loader is loading from the DVD to one buffer, the linker is using the other. +;; the linker will copy data from the temp buffer to the heap. + +;; the final object loaded by the DGO loader will be loaded directly to the heap, not the temporary buffer. +;; this is the bt load (buffer top?). This can't be double buffered - the linker and login process may allocate memory. +;; the extra syncronization point is in RunDGOStateMachine in the Overlord (see DgoState::Read_Last_Obj) + +;; this approach has 2 advantages: +;; - this final load can completely fill up the heap, without needing a separate temporary load buffer +;; - this final load can skip copying data from a temporary buffer (requires v4 format) +;; - the final load can be an object much larger than the temporary buffers. + +(defun load-buffer-resize ((arg0 level) (arg1 dgo-header)) + "Adjust the load buffers size and location. + The dgo-header passed in should be the load buffer we're about to use." + + ;; first, determine the size. + + ;; interestingly, if we are in the 'medium' mode, we use the size of the + ;; previous object, plus 2048 bytes. Maybe the objects are sorted in decreasing size, + ;; so this allows the big ones to load first, then shrink the temp buffer as the rest come in. + ;; also seems to be no way to hit this case - the load-buffer-mode is eventually + ;; forced to small-edge in all cases that I see. + (case (-> arg0 load-buffer-mode) + (((load-buffer-mode small-center)) + (set! (-> arg0 load-buffer-size) (the-as uint #x113000)) ;; 1.126 MB + ) + (((load-buffer-mode medium)) + (set! (-> arg0 load-buffer-size) (+ (-> arg1 length) 2048)) + ) + ) + + ;; adjust the load buffer location + ;; the two load buffers are located at the top of the heap, like in jak 1. + (let ((v1-6 (logand -64 (+ (-> arg0 load-buffer-size) 63)))) + (if (= arg1 (-> arg0 load-buffer 0)) + ;; loading to 0, just place this before load-buffer 1 (in use, can't modify) + (set! (-> arg0 load-buffer 0) (- (-> arg0 load-buffer 1) v1-6)) + ;; loading to 1, place relative to the top of the heap. + (set! (-> arg0 load-buffer 1) + (the-as uint (&- (logand -64 (&+ (-> arg0 heap top-base) 0)) (the-as uint v1-6))) + ) + ) + ) + + ;; update heap top pointer. + (set! (-> arg0 heap top) (the-as pointer (-> arg0 load-buffer 0))) + 0 + (none) + ) + +;; borrowing system: +;; the "borrow" system allows a "borrower" level to use the heap of another level. +;; for an unknown reason, the borrow system doesn't use the double buffering of normal. +;; it's unclear exactly how the linking/loading works here, and it may be that we're missing +;; a case in the DGO loader here. If the objects come in totally corrupted, we're likely missing +;; some additional syncronization. + +(defmethod load-continue level ((obj level)) + "Run the loading/login state machine. + This will only make progress on loading, linking, and login for loads that have already started. + No 'scary' state transitions (like birth, alive, deactivate) are made here." + (local-vars (sv-16 symbol)) + + ;; if any linking is in progress, do that first. + (when (-> obj linking) + (start-debug "load-continue: run linker~%") + (when (nonzero? (link-resume)) ;; run linker + ;; linker return is nonzero, we're done! + (start-debug "link done!~%") + (set! (-> obj linking) #f) + (case (-> obj status) + (('loading) ;; we're loading to b0/b1, not the top buffer + ;; if we are doing a texture relocate later, don't do anything now, come back later. + (when (not (-> *texture-relocate-later* memcpy)) + (cond + ((= (-> obj load-buffer-mode) (load-buffer-mode borrow)) + ;; in this "borrow" mode, load directly to the heap. + (let ((a2-0 (logand -64 (&+ (-> obj heap current) 63)))) + (dgo-load-continue a2-0 a2-0 a2-0) + ) + ) + (else + ;; otherwise, continue with double buffered load to b0/b1 like normal + ;; update load buffers, and make the dgo loader continue. + (load-buffer-resize obj (the-as dgo-header (-> obj load-buffer-last))) + (start-debug "kicking next load~%") + (dgo-load-continue + (the-as pointer (-> obj load-buffer 0)) + (the-as pointer (-> obj load-buffer 1)) + (logand -64 (&+ (-> obj heap current) 63)) + ) + ) + ) + ) + ) + (('loading-bt) + ;; finished linking the final object! begin login. + (level-status-update! obj 'loading-done) + (level-status-update! obj 'loaded) + ) + ) + ) + (set! obj obj) + (goto cfg-39) + ) + + + ;; if any pending texture-relocate, do that, then kick the dgo loader. + ;; (note that this doens't handle mode "borrow") + (when (-> *texture-relocate-later* memcpy) + (relocate-later) + (load-buffer-resize obj (the-as dgo-header (-> obj load-buffer-last))) + (dgo-load-continue + (the-as pointer (-> obj load-buffer 0)) + (the-as pointer (-> obj load-buffer 1)) + (logand -64 (&+ (-> obj heap current) 63)) + ) + (set! obj obj) + (goto cfg-39) + ) + + ;; not waiting on the linker, check other cases + + (case (-> obj status) + (('loading) + ;; if loading, we are waiting on the DGO loader. Check it again: + (set! sv-16 (the-as symbol #f)) + (let ((s5-0 (dgo-load-get-next (& sv-16)))) + (when s5-0 + (start-debug "dgo-load-get-next: #x~X~%" s5-0) + ;; we got something! remember where and update stats + (set! (-> obj load-buffer-last) (the-as uint s5-0)) + (+! (-> *level* load-size) (-> (the-as (pointer uint32) s5-0))) + (set! (-> *level* load-time) + (* 0.016666668 (the float (- (-> *display* real-clock integral-frame-counter) (the-as uint *dgo-time*)))) + ) + (set! (-> *level* load-login-time) + (* 0.016666668 (the float (- (-> *display* real-clock integral-frame-counter) (the-as uint *dgo-time*)))) + ) + (cond + ((not sv-16) + + ;; not the last object + (cond + ((= (-> obj load-buffer-mode) (load-buffer-mode borrow)) + + ;; start the linker. in "borrow" mode, load directly to the heap again. + (cond + ((dgo-load-link (the-as dgo-header s5-0) (-> obj heap) (the-as uint (-> obj heap top-base)) *print-login* #f) + ;; linker finished immediately, kick off next load + (when (not (-> *texture-relocate-later* memcpy)) + (let ((a2-8 (logand -64 (&+ (-> obj heap current) 63)))) + (dgo-load-continue a2-8 a2-8 a2-8) + ) + ) + ) + (else + ;; linker still going, remember and come back later. + (set! (-> obj linking) #t) + ) + ) + ) + + ;; not borrow mode, start linker + ((dgo-load-link (the-as dgo-header s5-0) (-> obj heap) (-> obj load-buffer 1) *print-login* #f) + ;; finished immediately, kick off next loa + (when (not (-> *texture-relocate-later* memcpy)) + (load-buffer-resize obj (the-as dgo-header s5-0)) + (dgo-load-continue + (the-as pointer (-> obj load-buffer 0)) + (the-as pointer (-> obj load-buffer 1)) + (logand -64 (&+ (-> obj heap current) 63)) + ) + ) + ) + (else + ;; otherwise remember we're loading. + (set! (-> obj linking) #t) + ) + ) + ) + + (else + ;; we are the last object. update heap top and go to bt load. + (set! (-> obj heap top) (-> obj heap top-base)) + (level-status-update! obj 'loading-bt) + ) + ) + ) + ) + ) + (('login) + ;; logging in, load already finished. run the login state machine + (level-update-after-load obj *login-state*) + ) + (('loading-bt) + ;; last object was loaded, start linking it. + (let ((a0-36 (logand -64 (&+ (-> obj heap current) 63)))) + (cond + ((dgo-load-link (the-as dgo-header a0-36) (-> obj heap) (the-as uint (-> obj heap top-base)) *print-login* #t) + (level-status-update! obj 'loading-done) + (level-status-update! obj 'loaded) + ) + (else + (set! (-> obj linking) #t) + ) + ) + ) + ) + ) + (label cfg-39) + obj + ) + +(defmethod load-begin level ((obj level)) + "Begin loading a level. + This assigns memory to a level and is somewhat confusing." + (local-vars (bits-to-use int) (borrow-from-lev level) (found-borrow symbol)) + + ;; a "borrow" level will borrow the heap of an existing level + (dotimes (v1-0 2) + (set! (-> obj borrow-level v1-0) #f) ;; levels that borrow our heap + ) + (set! (-> obj borrow-from-level) #f) ;; level that we borrow our heap for. + + (set! (-> obj memory-mask) (the-as uint 0)) ;; bits representing which sections of the big level heap we use. + + (let ((mem-mode (-> obj info memory-mode))) + (case mem-mode + (((load-buffer-mode borrow)) + ;; we need to find a level to borrow from. + ;; borrowing is a two-way thing. the host level has to have our name. + + (let ((slot-in-borrow-from-lev -1)) ;; the slot in the host + (dotimes (borrow-from-lev-idx 6) ;; loop over all levels + (let ((maybe-borrow-from-lev (-> *level* level borrow-from-lev-idx))) + ;; only can borrow from loaded level + (when (and (or (= (-> maybe-borrow-from-lev status) 'active) (= (-> maybe-borrow-from-lev status) 'loaded)) + (begin + (dotimes (check-slot-idx 2) ;; check both borrow slots in the host + (when (and (= (-> maybe-borrow-from-lev info borrow-level check-slot-idx) (-> obj name)) ;; match name! + (nonzero? (-> maybe-borrow-from-lev info borrow-size check-slot-idx)) ;; has room! + ) + (set! slot-in-borrow-from-lev check-slot-idx) + (set! found-borrow #t) + (goto cfg-20) + ) + ) + (set! found-borrow #f) + (label cfg-20) + (and found-borrow + (>= slot-in-borrow-from-lev 0) + (not (-> maybe-borrow-from-lev borrow-level slot-in-borrow-from-lev)) ;; nobody else using the slot (how?) + ) + ) + ) + (set! borrow-from-lev maybe-borrow-from-lev) ;; success, found somebody to borrow from + (goto cfg-32) + ) + ) + ) + (set! borrow-from-lev (the-as level #f)) + (label cfg-32) + (cond + (borrow-from-lev + ;; link to borrow level + (set! (-> obj borrow-from-level) borrow-from-lev) + (set! (-> borrow-from-lev borrow-level slot-in-borrow-from-lev) obj) + ;; and copy the heap. seems kind of weird to copy the actual kheap object, but the host actually prepared + ;; for this, so it should be fine. + (mem-copy! + (the-as pointer (-> obj heap)) + (the-as pointer (-> borrow-from-lev borrow-heap slot-in-borrow-from-lev)) + 16 + ) + ) + (else + ;; couldn't find it, die. + (format 0 "ERROR: level ~A could not find free ~S bank in the level-group heap~%" + (-> obj name) + (cond + ((= mem-mode (load-buffer-mode large)) + "large" + ) + ((= mem-mode (load-buffer-mode borrow)) + "borrow" + ) + ((= mem-mode (load-buffer-mode small-center)) + "small-center" + ) + ((= mem-mode (load-buffer-mode medium)) + "medium" + ) + ((= mem-mode (load-buffer-mode small-edge)) + "small-edge" + ) + (else + "*unknown*" + ) + ) + ) + (break!) + 0 + ) + ) + ) + ) + (else + (start-debug "load-begin, no borrow~%") + ;; not borrowing, we have to find our own memory. + ;; there's a bit mask to indicate which sections of memory are used, with 6 bits. + + ;; large = 4 bits, medium = 3 bits, small = 2 bits. + ;; note that the the "bits" are not exact sizes, so there is some code to fudge the boundaries a bit + ;; depending on the layout - there are 6 bits, but the heap is divided into 146ths, and the actual + ;; boundaries are set so the following combinations work: + + ;; the supported layouts are + ;; large + small + ;; small + large + ;; medium + medium + ;; small + medium + ;; medium + small + ;; small + small-center + small + + ;; note that small-center cannot exist at the same time as any medium/large. + + ;; helper function to check to see if a certain group of bits is unused. + (let* ((memory-unused? (lambda ((arg0 level-group) (arg1 int)) + (dotimes (v1-0 7) + (if (logtest? (-> arg0 level v1-0 memory-mask) arg1) + (return #f) + ) + ) + #t + ) + ) + (offset-in-level-heap 0) + (v1-14 mem-mode) + (heap-size (cond + ((= v1-14 (load-buffer-mode large)) + #xbd0000 ;; ~12 MB, can't have large + large, or large + medium + ) + ((= v1-14 (load-buffer-mode medium)) + #x8fb800 ;; ~9 MB, can have medium + medium + ) + ((= v1-14 (load-buffer-mode small-center)) + #x627000 ;; ~6 MB, can have small + small + small, or small + medium + ) + (else + #x5e8000 ;; ~6 MB + ) + ) + ) + ) + (case mem-mode + (((load-buffer-mode large)) + ;; need 4 bits in the mask. first try lower 4 + (when (memory-unused? *level* #b001111) + (set! bits-to-use #b1111) + (goto cfg-83) + ) + ;; nope, try upper 4. + (when (memory-unused? *level* #b111100) + (set! offset-in-level-heap 48) + (set! bits-to-use 60) + (goto cfg-83) + ) + ) + (((load-buffer-mode medium)) + ;; need 3 bits in the mask. + ;; like large, check both ends. + (when (memory-unused? *level* #xb000111) + (set! bits-to-use 7) + (goto cfg-83) + ) + (when (memory-unused? *level* #xb111000) + (set! offset-in-level-heap 73) ;; weird sizing + (set! bits-to-use #xb111000) + (goto cfg-83) + ) + ) + (((load-buffer-mode small-center)) + ;; only one place for us to go, in the center + (when (memory-unused? *level* #xb001100) + (set! offset-in-level-heap 48) + (set! bits-to-use #xb1100) + (goto cfg-83) + ) + ) + (((load-buffer-mode small-edge)) + ;; check one side + (when (memory-unused? *level* #xb000011) + (set! bits-to-use #xb000011) + (goto cfg-83) + ) + ;; and the other + (when (memory-unused? *level* #xb110000) + (set! offset-in-level-heap 98) + (set! bits-to-use #xb110000) + (goto cfg-83) + ) + ) + ) + (set! bits-to-use 0) + (label cfg-83) + (cond + ((zero? bits-to-use) + ;; darn, couldn't find a spot. + (let ((v1-32 mem-mode)) + (format + 0 + "ERROR: level ~A could not find free ~S bank in the level-group heap~%" + (-> obj name) + (cond + ((= v1-32 (load-buffer-mode large)) + "large" + ) + ((= v1-32 (load-buffer-mode borrow)) + "borrow" + ) + ((= v1-32 (load-buffer-mode small-center)) + "small-center" + ) + ((= v1-32 (load-buffer-mode medium)) + "medium" + ) + ((= v1-32 (load-buffer-mode small-edge)) + "small-edge" + ) + (else + "*unknown*" + ) + ) + ) + ) + (dotimes (s5-1 7) + (if (!= (-> *level* level s5-1 status) 'inactive) + (format + 0 + "~Tlevel ~16S using bits #x~6,'0B~%" + (-> *level* level s5-1 name) + (-> *level* level s5-1 memory-mask) + ) + ) + ) + #t + (break!) + 0 + ) + (else + (start-debug "successfully found load: size #x~X, bits #b~6,'0B, offset ~D~%" + heap-size bits-to-use offset-in-level-heap) + ;; found a spot, set mask. + (set! (-> obj memory-mask) (the-as uint bits-to-use)) + (cond + ;; are we using debug sized large level? + ((= (&- (-> *level* heap top) (the-as uint (-> *level* heap base))) #x1af2800) + ;; if so, everything is 1.5x bigger! + (let ((v1-44 (-> obj heap))) + (set! (-> v1-44 base) (&+ (-> *level* heap base) (* #x2f400 offset-in-level-heap))) + (set! (-> v1-44 current) (-> v1-44 base)) + (set! (-> v1-44 top-base) (&+ (-> v1-44 base) (+ heap-size (/ heap-size 2)))) + (set! (-> v1-44 top) (-> v1-44 top-base)) + ) + ) + (else + (let ((v1-45 (-> obj heap))) + ;; no debug size heaps. set up our heap. + ;; offset-in-level-heap is in 146ths of the total size. + (set! (-> v1-45 base) (&+ (-> *level* heap base) (* #x1f800 offset-in-level-heap))) + (set! (-> v1-45 current) (-> v1-45 base)) + (set! (-> v1-45 top-base) (&+ (-> v1-45 base) heap-size)) + (set! (-> v1-45 top) (-> v1-45 top-base)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + + ;; our heap is now set up, prepare for loading. + + ;; the global loading-level heap is used by many relocate/top-level code to allocate on the level heap + (set! loading-level (-> obj heap)) + (set! (-> *level* loading-level) obj) + + ;; start linked list of types associated with this level + (set! (-> obj level-type) #f) + (set! *level-type-list* (the-as type (&-> obj level-type))) + + ;; clear stuff out + (set! (-> *level* log-in-level-bsp) #f) + (set! (-> obj nickname) #f) + (set! (-> obj bsp) #f) + (set! (-> obj entity) #f) + (set! (-> obj linking) #f) + (set! (-> obj task-mask) (-> *setting-control* user-current task-mask)) + (vis-clear obj) + (set! (-> obj load-start-time) (-> *display* real-clock frame-counter)) + (set! (-> obj load-stop-time) 0) + (set! (-> obj display-start-time) 0) + (set! (-> obj part-engine) #f) + (dotimes (v1-57 4) + (set! (-> obj user-object v1-57) #f) + ) + + ;; go straight to loading + (set! (-> obj status) 'loading) + + ;; non-permanent allocator + (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)) + (set! (-> *level* load-level) (-> obj load-name)) + (set! (-> *level* load-size) (the-as uint 0)) + (set! (-> *level* load-time) 0.0) + (set! (-> *level* load-login-time) 0.0) + + ;; code comes first + (set! (-> obj code-memory-start) (-> obj heap current)) + (cond + ((= (-> obj info memory-mode) (load-buffer-mode borrow)) + ;; if we're borrowing, we should load directly to heap current. + ;; this is somewhat strange, and has two drawbacks: + ;; - we can't discard link data easily, like we would normally with the double buffer setup + ;; - we can't allocate during login. Or if we allocate more than our link data, then bad things happen. + (set! (-> obj load-buffer-mode) (load-buffer-mode borrow)) + (let ((a3-19 (logand -64 (&+ (-> obj heap current) 63)))) + ;; start dgo loader! + (dgo-load-begin *temp-string* a3-19 a3-19 a3-19) + ) + ) + (else + ;; normal loading into a new heap. + ;; allocate the two dgo level load buffers on top, like normal + (let* ((s3-1 #x1b5800) + (s4-1 (kmalloc (-> obj heap) s3-1 (kmalloc-flags align-64 top) "dgo-level-buf-2")) + (s5-4 (kmalloc (-> obj heap) s3-1 (kmalloc-flags align-64 top) "dgo-level-buf-2")) + ) + (format 0 "-----------> begin load ~A [~S]~%" (-> obj load-name) *temp-string*) + (set! (-> obj load-buffer 0) (the-as uint s5-4)) + (set! (-> obj load-buffer 1) (the-as uint s4-1)) + (set! (-> obj load-buffer-size) (the-as uint s3-1)) + ;; unclear why they do this, I guess it avoids the weird "medium" case in load-buffer-resize. + (set! (-> obj load-buffer-mode) (load-buffer-mode small-edge)) + + (start-debug "DGO-LOAD-BEGIN: #x~X #x~X #x~X~%" s5-4 s4-1 (logand -64 (&+ (-> obj heap current) 63))) + (dgo-load-begin *temp-string* s5-4 s4-1 (logand -64 (&+ (-> obj heap current) 63))) + ) + ) + ) + obj + ) + +(defmethod login-begin level ((obj level)) + "Begin login of a level after linking. + The login is spread over multiple frames." + + ;; link done, revert allocate-func back to "normal". + (set! (-> *texture-pool* allocate-func) texture-page-default-allocate) + (cond + ((-> obj bsp) + (let ((s5-0 (-> obj bsp))) + (set! (-> s5-0 level tfrag-gs-test) + (if (logtest? (-> s5-0 texture-flags 0) (texture-page-flag alpha-enable)) + (new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest greater-equal)) + (new 'static 'gs-test + :ate #x1 + :atst (gs-atest greater-equal) + :aref #x26 + :zte #x1 + :ztst (gs-ztest greater-equal) + ) + ) + ) + (set! (-> *level* log-in-level-bsp) (-> obj bsp)) + (login-level-textures *texture-pool* obj (-> obj bsp texture-page-count) (-> obj bsp texture-ids)) + (dotimes (v1-10 6) + (set! (-> obj sky-mask mask data v1-10) 0) + ) + (dotimes (s4-0 10) + (let ((a0-8 (-> obj info texture-anim s4-0))) + (when a0-8 + (format 0 "SKIP: texture-anim-array in login-begin~%") + (format #t "SKIP: texture-anim-array in login-begin~%") + + #|(set! (-> obj texture-anim-array s4-0) + (the-as + texture-anim-array + ((method-of-object (the-as texture-anim-array (-> a0-8 value)) texture-anim-array-method-9)) + ) + )|# + ) + ) + ) + (when (nonzero? build-masks) (build-masks s5-0)) ;; ADDED nonzero check. + ) + (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-update! obj 'inactive) + (set! loading-level global) + (set! (-> *level* loading-level) (-> *level* default-level)) + (set! *level-type-list* (the-as type 0)) + 0 + ) + ) + obj + ) + +(defun level-update-after-load ((lev level) (lstate login-state)) + "Make progress on login. + Will set status to loaded when done." + (local-vars + (current-time int) + (end-time int) + (start-time int) + (sv-16 int) + (proto prototype-bucket-tie) + (geom-idx int) + ) + + ;; in the pc port, lets just do all the login all at once for now. + + (set! *level-index* (-> lev index)) + 0 + (let ((drawable-trees (-> lev bsp drawable-trees))) + ;; periodically, the code would jump back up here, see if it's been too long. + ;; if so, it would return early. + ;(.mfc0 start-time Count) + (label cfg-1) + ;(.mfc0 current-time Count) + ;(let ((v1-6 (- current-time start-time))) + ; (when (< #x186a0 v1-6) + ; (set! lev lev) + ; (goto cfg-113) + ; ) + ; ) + (let ((login-state-pos (the-as int (-> lstate pos)))) + + ;;;;;;;;;;;;;; STATE -1: first pass of tree login, art group login. + ;; this pass adds drawable-inline-array-tfrag and drawable-tree-instance-tie's to + ;; a list in lstate, logs in all other drawable-trees (fast), logs in all art groups, + ;; and links all art. + (when (= (-> lstate state) -1) + + ;; STATE -1, part 1: drawable trees + (when (< login-state-pos (-> drawable-trees length)) + (let ((current-tree (-> drawable-trees trees (the-as uint login-state-pos)))) + (cond + ((= (-> current-tree type) drawable-tree-tfrag) + ;; for tfrags, iterate through all arrays + (dotimes (tree-array-idx (-> current-tree length)) + (cond + ;; for the actual tfrags, defer + ((= (-> current-tree data tree-array-idx type) drawable-inline-array-tfrag) + (set! (-> lstate elt (-> lstate elts)) (-> current-tree data tree-array-idx)) + (+! (-> lstate elts) 1) + ) + (else + ;; for the draw node arrays, just do them now (doesn't do anything, I think.) + (login (-> current-tree data tree-array-idx)) + ) + ) + ) + ) + ((= (-> current-tree type) drawable-tree-instance-tie) + ;; instance-ties are deferred. This time, the whole thing is put off, including draw-node arrays + (set! (-> lstate elt (-> lstate elts)) current-tree) + (+! (-> lstate elts) 1) + ) + (else + ;; other trees are logged in hers. + (login current-tree) + ) + ) + ) + ;; on to the next tree. Check time + (+! (-> lstate pos) 1) + (goto cfg-1) + ) + + ;; STATE -1, part 2: art gropus: + (let ((art-group-array-idx (- (the-as uint login-state-pos) (-> drawable-trees length)))) + (when (< (the-as int art-group-array-idx) (-> lev art-group art-group-array length)) + (let ((current-ag (-> lev art-group art-group-array art-group-array-idx))) + ;; login and link. only janim's need linking. + (login current-ag) + (if (needs-link? current-ag) + (link-art! current-ag) + ) + ) + (+! (-> lstate pos) 1) + (goto cfg-1) + ) + ) + (set! (-> lstate pos) (the-as uint 0)) + (set! (-> lstate state) 0) + (goto cfg-1) + ) + + ;; next state is the arrays we put off from last state. + (when (< (-> lstate state) (the-as int (-> lstate elts))) + (let ((current-array (-> lstate elt (-> lstate state)))) + (cond + ((= (-> current-array type) drawable-inline-array-tfrag) + (set! *texture-masks-array* (-> lev bsp tfrag-texture-masks-array)) + (cond + ((< login-state-pos (-> (the-as drawable-inline-array-tfrag current-array) length)) + (dotimes (s2-2 200) + (when (< login-state-pos (-> (the-as drawable-inline-array-tfrag current-array) length)) + (login (-> (the-as drawable-inline-array-tfrag current-array) data (the-as uint login-state-pos))) + (set! login-state-pos (the-as int (+ (the-as uint login-state-pos) 1))) + ) + ) + (set! (-> lstate pos) (the-as uint login-state-pos)) + ) + (else + (set! (-> lstate pos) (the-as uint 0)) + (set! login-state-pos (+ (-> lstate state) 1)) + (set! (-> lstate state) login-state-pos) + ) + ) + ) + ((= (-> current-array type) drawable-tree-instance-tie) + (let ((proto-array (-> (the-as drawable-tree-instance-tie current-array) prototypes prototype-array-tie))) + (let ((protos (-> (the-as drawable-tree-instance-tie current-array) prototypes))) + (when (< login-state-pos (-> proto-array length)) + (set! sv-16 0) + (while (< sv-16 10) + (when (< login-state-pos (-> proto-array length)) + (set! proto (-> proto-array array-data (the-as uint login-state-pos))) + (+! (-> protos prototype-max-qwc) 32) + (cond + ((logtest? (-> proto flags) 4) + (set! *texture-masks* (-> *level* level *level-index* bsp tmask0 data (-> proto texture-masks-index))) + ) + ((logtest? (-> proto flags) 128) + (set! *texture-masks* (-> *level* level *level-index* bsp tmask2 data (-> proto texture-masks-index))) + ) + (else + (set! *texture-masks* + (-> *level* level *level-index* bsp tfrag-texture-masks-array data (-> proto texture-masks-index)) + ) + ) + ) + (when (and *debug-segment* (-> *screen-shot-work* highres-enable)) + (dotimes (v1-105 4) + (set! (-> proto dists data v1-105) (+ 40960000.0 (-> proto dists data v1-105))) + (set! (-> proto rdists data v1-105) (/ 1.0 (-> proto dists data v1-105))) + ) + ) + (set! geom-idx 0) + (while (< geom-idx 4) + (let ((geom (-> proto tie-geom geom-idx))) + (when (nonzero? geom) + (+! (-> protos prototype-max-qwc) (* 7 (-> geom length))) + (login geom) + ) + ) + (set! geom-idx (+ geom-idx 1)) + ) + (set! login-state-pos (the-as int (+ (the-as uint login-state-pos) 1))) + ) + (set! sv-16 (+ sv-16 1)) + ) + (set! (-> lstate pos) (the-as uint login-state-pos)) + ) + ) + (when (= (the-as uint login-state-pos) (-> proto-array length)) + (dotimes (proto2-idx (-> proto-array length)) + (let ((proto2 (-> proto-array array-data proto2-idx))) + (cond + ((logtest? (-> proto2 flags) 4) + (set! *texture-masks* (-> *level* level *level-index* bsp tmask0 data (-> proto2 texture-masks-index))) + ) + ((logtest? (-> proto2 flags) 128) + (set! *texture-masks* (-> *level* level *level-index* bsp tmask2 data (-> proto2 texture-masks-index))) + ) + (else + (set! *texture-masks* + (-> *level* level *level-index* bsp tfrag-texture-masks-array data (-> proto2 texture-masks-index)) + ) + ) + ) + (let ((envmap-shader (-> proto2 envmap-shader))) + (when (nonzero? envmap-shader) + (let ((envmap-tex (adgif-shader-login-no-remap envmap-shader))) + (when envmap-tex + (dotimes (v1-137 3) + (dotimes (a0-74 3) + (set! (-> (the-as (pointer int32) (+ (+ (* v1-137 16) (* a0-74 4)) (the-as int *texture-masks*)))) + (logior (-> (the-as (pointer int32) (+ (* a0-74 4) (the-as int *texture-masks*) (* v1-137 16))) 0) + (-> (the-as (pointer int32) (+ (* a0-74 4) (the-as int envmap-tex) (* v1-137 16))) 15) + ) + ) + ) + (set! (-> *texture-masks* data v1-137 mask w) + (the-as int (fmax (-> *texture-masks* data v1-137 dist) (-> envmap-tex masks data v1-137 dist))) + ) + ) + ) + ) + (set! (-> envmap-shader tex1) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1)) + (set! (-> envmap-shader clamp) + (new 'static 'gs-clamp :wms (gs-tex-wrap-mode clamp) :wmt (gs-tex-wrap-mode clamp)) + ) + (set! (-> envmap-shader alpha) (new 'static 'gs-alpha :b #x2 :c #x1 :d #x1)) + (set! (-> envmap-shader prims 1) (gs-reg64 tex0-1)) + (set! (-> envmap-shader prims 3) (gs-reg64 tex1-1)) + (set! (-> envmap-shader prims 5) (gs-reg64 miptbp1-1)) + (set! (-> envmap-shader clamp-reg) (gs-reg64 clamp-1)) + (set! (-> envmap-shader prims 9) (gs-reg64 alpha-1)) + ) + ) + ) + ) + (set! (-> lstate pos) (the-as uint 0)) + (+! (-> lstate state) 1) + ) + ) + ) + ) + ) + ;; (goto cfg-1) + ) + + ;; next is nav-meshes + (when (= (-> lstate state) (-> lstate elts)) + (let ((lev-bsp (-> lev bsp))) + (cond + ((or (zero? (-> lev-bsp nav-meshes)) (= (the-as uint login-state-pos) (-> lev-bsp nav-meshes length))) + (set! (-> lstate pos) (the-as uint 0)) + (+! (-> lstate state) 1) + ) + (else + (entity-nav-mesh-method-27 (-> lev-bsp nav-meshes (the-as uint login-state-pos))) + (+! (-> lstate pos) 1) + ) + ) + ) + ;; (goto cfg-1) + ) + + + (when (zero? (the-as uint login-state-pos)) + (set! (-> lstate pos) (the-as uint 1)) + (set! lev lev) + (goto cfg-113) + ) + ) + ) + + ;; final! + + ;; name + (set! (-> lev nickname) (the-as string (-> lev bsp nickname))) + + ;; subdivide distances + (let ((close-dist (-> lev bsp subdivide-close)) + (far-dist (-> lev bsp subdivide-far)) + ) + (when (and (= close-dist 0.0) (= far-dist 0.0)) + (set! close-dist 122880.0) + (set! far-dist 286720.0) + ) + (set! (-> *subdivide-settings* close (-> lev index)) close-dist) + (set! (-> *subdivide-settings* far (-> lev index)) far-dist) + (set! (-> *subdivide-settings* close 7) close-dist) + (set! (-> *subdivide-settings* far 7) far-dist) + ) + (when (and *debug-segment* (-> *screen-shot-work* highres-enable)) + (set! (-> *subdivide-settings* close (-> lev index)) 40960000.0) + (set! (-> *subdivide-settings* far (-> lev index)) 41369600.0) + (set! (-> *subdivide-settings* close 7) 40960000.0) + (set! (-> *subdivide-settings* far 7) 41369600.0) + ) + + ;; visibility info + (init-vis-from-bsp lev) + + ;; particle engines + (if (nonzero? (-> lev info part-engine-max)) + (set! (-> lev part-engine) + (new 'loading-level 'engine 'sparticle-launcher (-> lev info part-engine-max) connection) + ) + ) + + ;; load other packages (used only for development, I think) + (load-required-packages lev) + + ;; mood setup + (clear-mood-context (-> lev mood-context)) + (if (-> lev mood-init) + ((-> lev mood-init) (-> lev mood-context)) + ) + + ;; if somebody will borrow from us, set aside some memory for them on the top of our heap + (dotimes (v1-211 2) + (set! (-> lev heap top-base) + (the pointer (&- (-> lev heap top-base) (the-as uint (shl (-> lev info borrow-size v1-211) 10)))) + ) + (set! (-> lev heap top) (-> lev heap top-base)) + (let ((borrower-heap (-> lev borrow-heap v1-211))) + (set! (-> borrower-heap base) (-> lev heap top)) + (set! (-> borrower-heap current) (-> borrower-heap base)) + (set! (-> borrower-heap top-base) (&+ (-> borrower-heap base) (shl (-> lev info borrow-size v1-211) 10))) + (set! (-> borrower-heap top) (-> borrower-heap top-base)) + ) + ) + + ;; end the load + (set! (-> lev draw-priority) (-> lev info draw-priority)) + (set! (-> lev status) 'loaded) + (mark-hud-warp-sprite-dirty *texture-pool*) + (set! loading-level global) + (set! (-> *level* loading-level) (-> *level* default-level)) + (set! *level-type-list* (the-as type 0)) + (set! (-> *level* log-in-level-bsp) #f) + (set! (-> lev load-stop-time) (-> *display* real-clock frame-counter)) + 0 + (.mfc0 end-time Count) + (- end-time start-time) + (set! (-> *level* load-login-time) + (* 0.016666668 (the float (- (-> *display* real-clock integral-frame-counter) (the-as uint *dgo-time*)))) + ) + (label cfg-113) + lev + ) + +(defmethod birth level ((obj level)) + "Start running code for a level that has been loaded." + (local-vars (sv-96 int)) + (case (-> obj status) + (('loaded) + (let ((s5-0 loading-level) + (s4-0 (-> *level* loading-level)) + (s3-0 (-> *level* log-in-level-bsp)) + (s2-1 *level-type-list*) + ) + (let ((s1-0 (not (-> obj entity)))) + (set! loading-level (-> obj heap)) + (set! (-> *level* log-in-level-bsp) (-> obj bsp)) + (set! (-> *level* loading-level) obj) + (set! *level-type-list* (the-as type (&-> obj level-type))) + (cond + ((valid? (-> obj bsp light-hash) light-hash #f #t 0) + (set! (-> obj light-hash) (-> obj bsp light-hash)) + ) + (else + (set! (-> obj light-hash) (the-as light-hash 0)) + 0 + ) + ) + (birth (-> obj bsp)) + (set! (-> obj status) 'alive) + (set! (-> obj render?) #t) + (format 0 "SKIP: copy-perms-to-level~%") + (format #t "SKIP: copy-perms-to-level~%") + + ;(copy-perms-to-level! *game-info* obj) + (send-event *camera* 'level-activate (-> obj name)) + (send-event *target* 'level-activate (-> obj name)) + (when (and (-> obj info login-func) s1-0) + (let ((s1-1 (-> obj info login-func value))) + (if (and s1-1 (nonzero? s1-1) (type? s1-1 function)) + ((the (function level none) s1-1) obj) + ) + ) + ) + ) + (let ((s1-2 (-> obj status))) + (set! (-> obj status) 'active) + (when (nonzero? update-task-masks) (update-task-masks 'level)) ;; added nonzero check + (assign-draw-indices *level*) + (let ((s0-0 (-> obj bsp nav-meshes))) + (when (nonzero? s0-0) + (set! sv-96 0) + (while (< sv-96 (-> s0-0 length)) + (birth! (-> s0-0 sv-96)) + (set! sv-96 (+ sv-96 1)) + ) + ) + ) + (if (and (!= (-> obj bsp unk-data 7) 0) *traffic-manager*) + (send-event *traffic-manager* 'level-loaded obj) + ) + (when (-> obj info activate-func) + (let ((s0-1 (-> obj info activate-func value))) + (if (and s0-1 (nonzero? s0-1) (type? s0-1 function)) + ((the (function level symbol none) s0-1) obj 'display) + ) + ) + ) + (set! (-> obj status) s1-2) + ) + (set! loading-level s5-0) + (set! (-> *level* loading-level) s4-0) + (set! (-> *level* log-in-level-bsp) s3-0) + (set! *level-type-list* s2-1) + ) + ) + ) + obj + ) + +(defmethod deactivate level ((obj level)) + "Take a level out of active/alive" + (case (-> obj status) + (('active 'alive) + (format 0 "----------- kill ~A (status ~A)~%" obj (-> obj status)) + + ;; send event to traffic manager. + (if (and (!= (-> obj bsp unk-data 7) 0) *traffic-manager*) + (send-event *traffic-manager* 'level-killed obj) + ) + + ;; run kill callbacks + (when (-> obj info kill-func) + (let ((s5-0 (-> obj info kill-func value))) + (if (and s5-0 (nonzero? s5-0) (type? s5-0 function)) + ((the (function level none )s5-0) obj) + ) + ) + ) + + ;; copy data from entities to permanent storage + (copy-perms-from-level! *game-info* obj) + + ;; tell target + (send-event *target* 'level-deactivate (-> obj name)) + + ;; remove from background draw system + (remove-by-param1 *background-draw-engine* (the-as int (-> obj bsp))) + + ;; kill entities, particles, anims + (deactivate-entities (-> obj bsp)) + (kill-all-particles-in-level obj) + (unload-from-level *anim-manager* obj) + + ;; reset status + (set! (-> obj inside-boxes) #f) + (set! (-> obj meta-inside?) #f) + (set! (-> obj force-inside?) #f) + (set! (-> obj status) 'loaded) + (set! (-> obj light-hash) (the-as light-hash 0)) + (set! (-> obj all-visible?) 'loading) + + ;; clear vis. + (dotimes (v1-34 128) + (set! (-> (the-as (pointer int128) (&+ (-> obj vis-bits) (* v1-34 16)))) (the int128 0)) + ) + (countdown (v1-37 8) + (let ((a0-20 (-> obj vis-info v1-37))) + (if a0-20 + (set! (-> a0-20 current-vis-string) (the-as uint -1)) + ) + ) + ) + ) + ) + (if (= (-> *level* log-in-level-bsp) (-> obj bsp)) + (set! (-> *level* log-in-level-bsp) #f) + ) + obj + ) + +(defmethod unload! level ((obj level)) + "Unload a level." + + ;; make sure it's not alive/active + (deactivate obj) + + (when (!= (-> obj status) 'inactive) + ;; first, unload anybody who borrows from us. + (dotimes (s5-0 2) + (when (-> obj borrow-level s5-0) + (unload! (-> obj borrow-level s5-0)) + (set! (-> obj borrow-level s5-0) #f) + ) + ) + ;; if we borrow from soembody, remove ourselves from them + (when (-> obj borrow-from-level) + (dotimes (v1-19 2) + (if (= obj (-> obj borrow-from-level borrow-level v1-19)) + (set! (-> obj borrow-from-level borrow-level v1-19) #f) + ) + ) + (set! (-> obj borrow-from-level) #f) + ) + + (case (-> obj status) + (('loading 'loading-bt) + ;; kill the linker if we're mid link. + (if (nonzero? link-reset) + (link-reset) + ) + ) + (('alive 'active 'loaded) + ;; run deactivate func. + (when (-> obj info deactivate-func) + (let ((s5-1 (-> obj info deactivate-func value))) + (if (and s5-1 (nonzero? s5-1) (type? s5-1 function)) + ((the (function level none) s5-1) obj) + ) + ) + ) + ) + ) + + ;; unlink art groups. + (when (or (= (-> obj status) 'loaded) + (= (-> obj status) 'alive) + (= (-> obj status) 'active) + (= (-> obj status) 'login) + ) + (dotimes (s5-2 (-> obj art-group art-group-array length)) + (let ((s4-0 (-> obj art-group art-group-array s5-2))) + (if (needs-link? s4-0) + (unlink-art! s4-0) + ) + ) + ) + ) + (set! (-> obj bsp) #f) + (set! (-> obj entity) #f) + (set! (-> obj status) 'inactive) + (set! (-> obj linking) #f) + (set! (-> obj art-group string-array length) 0) + (set! (-> obj art-group art-group-array length) 0) + (set! (-> obj mem-usage-block) (the-as memory-usage-block 0)) + (set! (-> obj mem-usage) 0) + (set! (-> obj part-engine) #f) + (dotimes (v1-60 4) + (set! (-> obj user-object v1-60) #f) + ) + + ;; kill texture anims + (let ((v1-63 (-> obj status))) + (when (or (= v1-63 'alive) (or (= v1-63 'active) (= v1-63 'loaded))) + (dotimes (s5-3 10) + (let ((a0-37 (-> obj info texture-anim s5-3))) + (if a0-37 + (set! (-> obj texture-anim-array s5-3) + (the-as + texture-anim-array + ((method-of-object (the-as texture-anim-array (-> a0-37 value)) texture-anim-array-method-10)) + ) + ) + ) + ) + ) + ) + ) + (dotimes (v1-73 10) + (set! (-> obj texture-anim-array v1-73) #f) + ) + (countdown (s5-4 (-> obj loaded-texture-page-count)) + (dotimes (v1-76 32) + (when (= (-> obj loaded-texture-page s5-4) (-> *texture-pool* common-page v1-76)) + (set! (-> *texture-pool* common-page v1-76) (the-as texture-page 0)) + 0 + ) + ) + (unload-page *texture-pool* (-> obj loaded-texture-page s5-4)) + ) + (set! (-> obj loaded-texture-page-count) 0) + (unlink-shaders-in-heap *texture-page-dir* (-> obj heap)) + (unlink-part-group-by-heap (-> obj heap)) + (unlink-lightning-spec-by-heap (-> obj heap)) + (particle-adgif-cache-flush) + (set! (-> obj loaded-text-info-count) 0) + (dotimes (s5-5 2) + (let ((v1-90 (-> *art-control* buffer s5-5 pending-load-file))) + (if (and (>= (the-as int v1-90) (the-as int (-> obj heap base))) + (< (the-as int v1-90) (the-as int (-> obj heap top-base))) + ) + (set-pending-file (-> *art-control* buffer s5-5) (the-as string #f) -1 (the-as handle #f) 100000000.0) + ) + ) + ) + (let ((v1-100 (-> *game-info* sub-task-list))) + (dotimes (a0-59 (-> v1-100 length)) + (when (nonzero? a0-59) + (let ((a1-20 (-> v1-100 a0-59))) + (when (and (-> a1-20 info) (= (-> a1-20 info level) (-> obj name))) + (countdown (a2-6 7) + (let ((a3-3 (+ (* a2-6 4) (the-as int (-> a1-20 info))))) + (s.w! (+ a3-3 44) #f) + ) + ) + ) + ) + ) + ) + ) + (let ((v1-103 0) + (a0-60 0) + (a1-23 (the-as basic (-> obj level-type))) + ) + (while a1-23 + (+! a0-60 1) + (+! v1-103 (-> (the-as type a1-23) psize)) + (set! (-> (the-as type a1-23) symbol value) (the-as object 0)) + (set! a1-23 (-> (the-as type a1-23) method-table 8)) + ) + ) + (let* ((s5-6 (-> obj info packages)) + (a0-61 (car s5-6)) + ) + (while (not (null? s5-6)) + (case (rtype-of a0-61) + ((symbol) + (unload (symbol->string (the-as symbol a0-61))) + ) + ((string) + (unload (the-as string a0-61)) + ) + ) + (set! s5-6 (cdr s5-6)) + (set! a0-61 (car s5-6)) + ) + ) + (vis-clear obj) + (let ((v1-120 (-> obj heap))) + (set! (-> v1-120 current) (-> v1-120 base)) + ) + (set! (-> obj memory-mask) (the-as uint 0)) + (set! (-> obj code-memory-start) (the-as pointer 0)) + (set! (-> obj code-memory-end) (the-as pointer 0)) + (set! (-> obj level-type) #f) + (when (= (-> *level* loading-level) obj) + (set! loading-level global) + (set! (-> *level* loading-level) (-> *level* default-level)) + (set! (-> *level* log-in-level-bsp) #f) + (set! *level-type-list* (the-as type 0)) + 0 + ) + (assign-draw-indices *level*) + ) + obj + ) + +(defmethod is-object-visible? level ((obj level) (arg0 int)) + "Is drawable arg0 visible? Note that this will return #f if the visibility data is not loaded." + + ;; check the vis bits! + (let* (;; lwu v1, 388(a0) + (vis-data (-> obj vis-bits)) + ;; sra a0, a1, 3 + (byte-idx (sar arg0 3)) + ;; daddu v1, a0, v1 + ;; lb v1, 0(v1) + (vis-byte (-> (the (pointer int8) vis-data) byte-idx)) + ;; andi a0, a1, 7 + (bit-idx (logand arg0 #b111)) + ;; addiu a0, a0, 56 + (shift-amount (+ bit-idx 56)) ;; 56 + 8 = 64, to set the sign bit + ;; dsllv v1, v1, a0 + (check-sign-word (the int (shl vis-byte shift-amount))) ;; signed + ) + ;; slt v1, v1, r0 v1 = (csw < 0) + ;; daddiu v0, s7, 8 + ;; movz v0, s7, v1 if (csw >= 0) result = false + ;;(format 0 "vis check ~D ~X ~X ~A~%" arg0 vis-byte check-sign-word (>= check-sign-word 0)) + (< check-sign-word 0) + ) + ) + +(defmethod inside-boxes-check level ((obj level) (arg0 vector)) + "NOTE: this function used to check if we were in boxes - here it just checks + a flag. However, it is still used to set the inside-boxes field, so it keeps + the name we gave it in Jak 1. + + The jak 2 behavior is that any loaded level (with a bsp) is considered 'in-boxes' + except for if the require-force-inside flag is set in the bsp-header, in which case + it requires the level to be marked as force-inside?" + (cond + ((not (-> obj bsp)) + #f + ) + ((-> obj force-inside?) + #t + ) + (else + (zero? (-> obj bsp require-force-inside)) + ) + ) + ) + +(defmethod debug-print-region-splitbox level ((obj level) (arg0 vector) (arg1 object)) + "Display debug info about the regions of a level." + (cond + ((or (not (-> obj bsp)) (zero? (-> obj bsp region-tree))) + ) + ((nonzero? (-> obj bsp region-tree)) + (debug-print (-> obj bsp region-tree) arg0 arg1) + ) + ) + 0 + (none) + ) + +(defmethod mem-usage level ((obj level) (arg0 memory-usage-block) (arg1 int)) + "Compute the memory usage of a level." + (when (= (-> obj status) 'active) + (set! (-> arg0 length) (max 67 (-> arg0 length))) + (set! (-> arg0 data 66 name) "entity-links") + (+! (-> arg0 data 66 count) (-> obj entity length)) + (let ((v1-8 (asize-of (-> obj entity)))) + (+! (-> arg0 data 66 used) v1-8) + (+! (-> arg0 data 66 total) (logand -16 (+ v1-8 15))) + ) + (mem-usage (-> obj art-group) arg0 arg1) + (set! (-> arg0 length) (max 66 (-> arg0 length))) + (set! (-> arg0 data 65 name) "level-code") + (+! (-> arg0 data 65 count) 1) + (let ((v1-20 (&- (-> obj code-memory-end) (the-as uint (-> obj code-memory-start))))) + (+! (-> arg0 data 65 used) v1-20) + (+! (-> arg0 data 65 total) (logand -16 (+ v1-20 15))) + ) + (countdown (s3-0 (-> obj loaded-texture-page-count)) + (mem-usage (-> obj loaded-texture-page s3-0) arg0 arg1) + ) + (countdown (s3-1 (-> obj loaded-text-info-count)) + (mem-usage (-> obj loaded-text-info s3-1) arg0 arg1) + ) + (countdown (s3-2 8) + (let ((s2-0 (-> obj vis-info s3-2))) + (when s2-0 + (cond + ((zero? s3-2) + (set! (-> arg0 length) (max 62 (-> arg0 length))) + (set! (-> arg0 data 61 name) "bsp-leaf-vis-self") + (+! (-> arg0 data 61 count) 1) + (let ((v1-47 (+ (asize-of s2-0) (-> s2-0 allocated-length)))) + (+! (-> arg0 data 61 used) v1-47) + (+! (-> arg0 data 61 total) (logand -16 (+ v1-47 15))) + ) + ) + (else + (set! (-> arg0 length) (max 63 (-> arg0 length))) + (set! (-> arg0 data 62 name) "bsp-leaf-vis-adj") + (+! (-> arg0 data 62 count) 1) + (let ((v1-58 (+ (asize-of s2-0) (-> s2-0 allocated-length)))) + (+! (-> arg0 data 62 used) v1-58) + (+! (-> arg0 data 62 total) (logand -16 (+ v1-58 15))) + ) + ) + ) + ) + ) + ) + ;; most of this is in the bsp: + (mem-usage (-> obj bsp) arg0 arg1) + ) + obj + ) + + + (defmethod alloc-levels-if-needed level-group ((obj level-group) (arg0 symbol)) "Setup for playing levels by loading the required base packages (art, common) and allocating the level heap." (when (zero? (-> *level* heap base)) + (start-debug "level one-time setup~%") (kmemopen global "level-heaps") (when (nmember "game" *kernel-packages*) + (start-debug "game already loaded, provides art/common~%") (set! *kernel-packages* (cons "art" *kernel-packages*)) (set! *kernel-packages* (cons "common" *kernel-packages*)) ) @@ -73,6 +1849,7 @@ ) (gp-1 (-> obj heap)) ) + (start-debug "about to allocate level heap with size #x~X (~f MB)~%" s5-1 (/ (the float s5-1) 1024.)) (set! (-> gp-1 base) (kmalloc global s5-1 (kmalloc-flags) "heap")) (set! (-> gp-1 current) (-> gp-1 base)) (set! (-> gp-1 top-base) (&+ (-> gp-1 base) s5-1)) @@ -84,13 +1861,279 @@ (none) ) +(defmethod level-get-with-status level-group ((obj level-group) (arg0 symbol)) + "Get a level with the given status." + (dotimes (v1-0 (-> obj length)) + (if (= (-> obj level v1-0 status) arg0) + (return (-> obj level v1-0)) + ) + ) + (the-as level #f) + ) + +(defmethod level-get-most-disposable level-group ((obj level-group)) + "Get the level that's least useful." + (dotimes (v1-0 (-> obj length)) + (case (-> obj level v1-0 status) + (('inactive) + (return (-> obj level v1-0)) + ) + ) + ) + (dotimes (v1-6 (-> obj length)) + (case (-> obj level v1-6 status) + (('loading 'loading-bt) + (return (-> obj level v1-6)) + ) + ) + ) + (dotimes (v1-12 (-> obj length)) + (case (-> obj level v1-12 status) + (('loaded) + (return (-> obj level v1-12)) + ) + ) + ) + (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) (arg0 symbol)) + "Get a level by name or load-name" + (dotimes (v1-0 (-> obj length)) + (if (and (!= (-> obj level v1-0 status) 'inactive) + (or (= (-> obj level v1-0 name) arg0) (= (-> obj level v1-0 load-name) arg0)) + ) + (return (-> obj level v1-0)) + ) + ) + (the-as level #f) + ) + +(defmethod art-group-get-by-name level-group ((obj level-group) (arg0 string) (arg1 (pointer uint32))) + "Search all levels for an art-group. Return the art group, or #f. Optionally return the level index." + (countdown (s4-0 7) + (let ((s3-0 (-> *level* level s4-0))) + (when (or (= (-> s3-0 status) 'active) (= (-> s3-0 status) 'reserved)) + (countdown (s2-0 (-> s3-0 art-group art-group-array length)) + (when (name= (-> s3-0 art-group art-group-array s2-0 name) arg0) + (if arg1 + (set! (-> arg1 0) (the-as uint s3-0)) + ) + (return (-> s3-0 art-group art-group-array s2-0)) + ) + ) + ) + ) + ) + (the-as art-group #f) + ) + +(defmethod activate-levels! level-group ((obj level-group)) + "Set all levels to active." + (dotimes (s5-0 (-> obj length)) + (level-status-update! (-> obj level s5-0) 'active) + ) + 0 + ) + +(defmethod level-get-target-inside level-group ((obj level-group)) + "Get the level that target is 'in'. With a bunch of tricks for what 'in' really means." + + (let ((s5-0 (target-pos 0))) + + ;; first, try the level that we want for visibility data. + ;; this is the most 'in' level. + (let ((v1-1 (-> *load-state* vis-nick))) + (when v1-1 + (dotimes (a0-3 (-> obj length)) + (let ((a1-3 (-> obj level a0-3))) + (when (= (-> a1-3 status) 'active) + (if (= (-> a1-3 name) v1-1) + (return a1-3) + ) + ) + ) + ) + ) + ) + + ;; next, try the level for the continue point. + (let ((v1-5 (-> *game-info* current-continue level))) + (dotimes (a0-5 (-> obj length)) + (let ((a1-8 (-> obj level a0-5))) + (when (= (-> a1-8 status) 'active) + (if (= (-> a1-8 name) v1-5) + (return a1-8) + ) + ) + ) + ) + ) + + ;; next, try using bounding spheres to find the closest. + ;; (note that this is slightly broken, f30-0 is never updated) + (let ((s4-0 (the-as level #f))) + (let ((f30-0 0.0)) + (dotimes (s3-0 (-> obj length)) + (let ((s2-0 (-> obj level s3-0))) + (when (= (-> s2-0 status) 'active) + (let ((f0-0 (vector-vector-distance (-> s2-0 bsp bsphere) s5-0))) + (if (and (-> s2-0 inside-boxes) (or (not s4-0) (< f0-0 f30-0))) + (set! s4-0 s2-0) + ) + ) + ) + ) + ) + ) + (if s4-0 + (return s4-0) + ) + ) + ) + + ;; if all that failed, try any with the meta-inside? flag. + (dotimes (v1-23 (-> obj length)) + (let ((a0-11 (-> obj level v1-23))) + (when (= (-> a0-11 status) 'active) + (if (-> a0-11 meta-inside?) + (return a0-11) + ) + ) + ) + ) + + ;; if that still didn't work, return any active level. + (let ((v0-1 (the-as level #f))) + 0.0 + (dotimes (v1-26 (-> obj length)) + (let ((a0-16 (-> obj level v1-26))) + (when (= (-> a0-16 status) 'active) + (if (not v0-1) + (set! v0-1 a0-16) + ) + ) + ) + ) + v0-1 + ) + ) + + (defmethod load-commands-set! level-group ((obj level-group) (arg0 pair)) + "Set the load-commands of a level." (set! (-> obj load-commands) arg0) (none) ) +(defmethod mem-usage level-group ((obj level-group) (arg0 memory-usage-block) (arg1 int)) + "Compute mem-usage for an entire level-group." + (dotimes (s3-0 (-> obj length)) + (mem-usage (-> obj level s3-0) arg0 arg1) + ) + obj + ) + +(defun bg ((arg0 symbol)) + "Begin playing a level. Works with or without dproc running (won't start it)." + + ;; enable cheat-mode if debugging + (set! *cheat-mode* (if *debug-segment* + 'debug + #f + ) + ) + + (let ((v1-2 (lookup-level-info arg0))) + (cond + ((= (-> v1-2 visname) arg0) ;; we used a visname, enable vis! + (set! (-> *level* vis?) #t) + (set! arg0 (-> v1-2 name)) ;; and use the normal name for loading. + ) + (else + ;; otherwise disable vis, low memory warnings. + (set! (-> *level* vis?) #f) + (set! (-> *kernel-context* low-memory-message) #f) + ) + ) + + ;; disable borrow mode, as we might not have anybody to borrow from. + (case (-> v1-2 memory-mode) + (((load-buffer-mode borrow)) + (set! (-> v1-2 memory-mode) (load-buffer-mode small-edge)) + 0 + ) + ) + + ;; load all required packages + (let* ((s5-0 (-> v1-2 run-packages)) + (a0-11 (car s5-0)) + ) + (while (not (null? s5-0)) + (case (rtype-of a0-11) + ((symbol) + (load-package (symbol->string (the-as symbol a0-11)) global) + ) + ((string) + (load-package (the-as string a0-11) global) + ) + ) + (set! s5-0 (cdr s5-0)) + (set! a0-11 (car s5-0)) + ) + ) + ) + + ;; start the load! + (let ((gp-1 (level-get-for-use *level* arg0 'active))) + ;; if dproc isn't running, run the load here... + (while (and gp-1 + (or (= (-> gp-1 status) 'loading) (= (-> gp-1 status) 'loading-bt) (= (-> gp-1 status) 'login)) + (not *dproc*) + ) + (load-continue gp-1) + ) + + ;; otherwise, set up the load-state. level-update will be called from dproc, which will read this and load it. + (reset! *load-state*) + (set! (-> *load-state* vis-nick) (-> gp-1 name)) + (set! (-> *load-state* want 0 name) (-> gp-1 name)) + (set! (-> *load-state* want 0 display?) 'display) + + ;; load the first continue point + (if (-> gp-1 info continues) + (set-continue! *game-info* (the-as basic (car (-> gp-1 info continues))) #f) + ) + ) + (dotimes (v1-37 3) + (set! (-> *load-state* want-sound v1-37) (-> *game-info* current-continue want-sound v1-37)) + ) + + ;; also try to load borrow level + (add-borrow-levels *load-state*) + + ;; if we loaded, activate now. + (activate-levels! *level*) + + (set! *print-login* #f) + (set! (-> *time-of-day-context* mode) (time-of-day-palette-id unk3)) + 0 + (none) + ) -(define-extern bg (function symbol none)) ;; TODO (defun play ((arg0 symbol) (arg1 symbol)) "Set up the game engine for playing." @@ -145,34 +2188,38 @@ ; (set! (-> *time-of-day-context* mode) (the-as uint 8)) ; (set! (-> *mood-control* overide-weather-flag) #f) ; (set-blackout-frames (seconds 0.02)) - ; (when (not *dproc*) - ; (reset! *load-state*) - ; (let ((s4-1 (level-get-for-use *level* s5-0 'active))) - ; (let ((a1-11 (new 'stack-no-clear 'array 'symbol 10))) - ; (set! (-> a1-11 5) #f) - ; (set! (-> a1-11 4) #f) - ; (set! (-> a1-11 3) #f) - ; (set! (-> a1-11 2) #f) - ; (set! (-> a1-11 1) (if (= s5-0 'ctysluma) - ; 'ctywide - ; ) - ; ) - ; (set! (-> a1-11 0) s5-0) - ; (want-levels *load-state* a1-11) - ; ) - ; (want-display-level *load-state* s5-0 'display) - ; (if (= s5-0 'ctysluma) - ; (want-display-level *load-state* 'ctywide 'display) - ; ) - ; (want-vis-level *load-state* s5-0) - ; (while (and s4-1 (or (= (-> s4-1 status) 'loading) (= (-> s4-1 status) 'loading-bt) (= (-> s4-1 status) 'login))) - ; (set-blackout-frames (seconds 0.02)) - ; (load-continue s4-1) - ; ) - ; ) - ; ) - ; (set! *print-login* #f) - ; (level-status-update! (level-get *level* s5-0) 'active) + (when (not *dproc*) + (reset! *load-state*) + (let ((s4-1 (level-get-for-use *level* s5-0 'active))) + (let ((a1-11 (new 'stack-no-clear 'array 'symbol 10))) + (set! (-> a1-11 5) #f) + (set! (-> a1-11 4) #f) + (set! (-> a1-11 3) #f) + (set! (-> a1-11 2) #f) + (set! (-> a1-11 1) (if (= s5-0 'ctysluma) + 'ctywide + ) + ) + (set! (-> a1-11 0) s5-0) + (start-debug "setting load-state want-levels~%") + (want-levels *load-state* a1-11) + ) + (start-debug "setting load-state want-display-level~%") + (want-display-level *load-state* s5-0 'display) + (if (= s5-0 'ctysluma) + (want-display-level *load-state* 'ctywide 'display) + ) + (start-debug "setting load-state want-vis-level~%") + + (want-vis-level *load-state* s5-0) + (while (and s4-1 (or (= (-> s4-1 status) 'loading) (= (-> s4-1 status) 'loading-bt) (= (-> s4-1 status) 'login))) + (set-blackout-frames (seconds 0.02)) + (load-continue s4-1) + ) + ) + ) + (set! *print-login* #f) + (level-status-update! (level-get *level* s5-0) 'active) ) (start-debug "PLAY: starting dproc~%") (on #t) @@ -199,6 +2246,718 @@ (none) ) +(defun update-sound-banks () + "Load sound banks as needed." + (local-vars (v1-21 level-load-info) (v1-28 level-load-info) (a0-24 symbol)) + (if (or (nonzero? (rpc-busy? 1)) + (nonzero? (rpc-busy? 3)) + (load-in-progress? *level*) + (not (-> *setting-control* user-current sound-bank-load)) + ) + (return 0) + ) + (let ((gp-0 (new 'static 'boxed-array :type symbol :length 0 :allocated-length 3))) + (set! (-> gp-0 length) 3) + (dotimes (s5-0 3) + (let ((s4-0 (the-as object (-> *load-state* want-sound s5-0)))) + (let ((v1-13 (and (not (null? (-> *setting-control* user-current extra-bank))) + (-> *setting-control* user-current extra-bank) + ) + ) + ) + (when v1-13 + (let ((a0-7 (car v1-13))) + (while (not (null? v1-13)) + (cond + ((and (= s5-0 2) (= (car a0-7) 'force2)) + (set! s4-0 (car (cdr a0-7))) + ) + ((= (car a0-7) s4-0) + (set! s4-0 (car (cdr a0-7))) + ) + ) + (set! v1-13 (cdr v1-13)) + (set! a0-7 (car (the-as pair v1-13))) + ) + ) + ) + ) + (let ((v1-19 (and (-> ctywide borrow-level 0) + (begin (set! v1-21 (lookup-level-info (-> ctywide borrow-level 0))) v1-21) + (-> v1-21 extra-sound-bank) + ) + ) + ) + (when v1-19 + (let ((a0-14 (car v1-19))) + (while (not (null? v1-19)) + (if (= (car a0-14) s4-0) + (set! s4-0 (car (cdr a0-14))) + ) + (set! v1-19 (cdr v1-19)) + (set! a0-14 (car (the-as pair v1-19))) + ) + ) + ) + ) + (let ((v1-26 (and (-> ctywide borrow-level 1) + (begin (set! v1-28 (lookup-level-info (-> ctywide borrow-level 1))) v1-28) + (-> v1-28 extra-sound-bank) + ) + ) + ) + (when v1-26 + (let ((a0-19 (car v1-26))) + (while (not (null? v1-26)) + (if (= (car a0-19) s4-0) + (set! s4-0 (car (cdr a0-19))) + ) + (set! v1-26 (cdr v1-26)) + (set! a0-19 (car (the-as pair v1-26))) + ) + ) + ) + ) + (set! (-> gp-0 s5-0) (the-as symbol s4-0)) + ) + ) + (dotimes (v1-35 3) + (let ((s5-1 (-> gp-0 v1-35))) + (set! a0-24 (and s5-1 (begin + (dotimes (a0-25 3) + (when (= s5-1 (-> *level* sound-bank a0-25)) + (set! a0-24 #f) + (goto cfg-63) + ) + ) + #t + ) + ) + ) + (label cfg-63) + (when a0-24 + (let ((s4-1 -1)) + (dotimes (a0-28 3) + (when (not (-> *level* sound-bank a0-28)) + (set! s4-1 a0-28) + (goto cfg-81) + ) + ) + (dotimes (s3-0 3) + (countdown (a0-32 3) + (if (= (-> gp-0 a0-32) (-> *level* sound-bank s3-0)) + (goto cfg-78) + ) + ) + (format 0 "Unload soundbank ~A from slot ~D (want ~A)~%" (-> *level* sound-bank s3-0) s3-0 gp-0) + (sound-bank-unload (string->sound-name (symbol->string (-> *level* sound-bank s3-0)))) + (set! (-> *level* sound-bank s3-0) #f) + (return 0) + (label cfg-78) + ) + (label cfg-81) + (when (>= s4-1 0) + (format 0 "Load soundbank ~A in slot ~D (want ~A)~%" s5-1 s4-1 gp-0) + (sound-bank-load (string->sound-name (symbol->string s5-1))) + (set! (-> *level* sound-bank s4-1) (the-as basic s5-1)) + (return 0) + ) + ) + ) + ) + ) + ) + 0 + ) + +(defmethod update! load-state ((obj load-state)) + "Update level stuff based on load state. + This does scary transitions." + + (local-vars (all-levels-inactive symbol)) + (let ((discarded-level #f)) ;; set if we end up unloading anything. + + ;; First, discard levels. We'll discard levels that are no longer wanted, in reverse load order + (let ((most-recent-load-order 0)) + -1 + + ;; unload up to 6 levels, so try 6 times + (countdown (unload-attempt 6) + (let ((unload-idx -1)) ;; which is best to unload + + ;; try all six, to find the best to unload + (countdown (unload-candidate-idx 6) + (let ((unload-candidate-lev (-> *level* level unload-candidate-idx))) + (when (and (!= (-> unload-candidate-lev status) 'inactive) ;; in use + (>= (the-as uint (-> unload-candidate-lev load-order)) (the-as uint most-recent-load-order)) ;; newer that best + ) + ;; check if still wanted + (let ((still-wanted #f)) + (dotimes (t0-2 6) + (if (= (-> unload-candidate-lev name) (-> obj want t0-2 name)) + (set! still-wanted #t) + ) + ) + (when (not still-wanted) + ;; not wanted, and best so far, remember. + (set! most-recent-load-order (-> unload-candidate-lev load-order)) + (set! unload-idx unload-candidate-idx) + ) + ) + ) + ) + ) + + (when (>= unload-idx 0) ;; did we find one to unload? + (let ((lev-to-unload (-> *level* level unload-idx))) + (format 0 "Discarding level ~A~%" (-> lev-to-unload name)) + (level-status-update! lev-to-unload 'inactive) ;; kill it. + ) + (set! discarded-level #t) + ) + ) + ) + ) + + ;; next, start loads + (let ((no-levels-at-all #f)) + + ;; see if all levels inactive + (countdown (a0-9 6) + (when (!= (-> *level* level a0-9 status) 'inactive) + (set! all-levels-inactive #f) + (goto cfg-23) + ) + ) + (set! all-levels-inactive #t) + (label cfg-23) + (if all-levels-inactive + (set! no-levels-at-all #t) ;; weird macro or something. + ) + + (if discarded-level ;; if we discarded stuff on this frame, don't also start a load + (return 0) + ) + + ;; build array of desired levels that we might want to load + (let ((desired-levels (new 'static 'boxed-array :type symbol :length 0 :allocated-length 6))) + (countdown (a0-14 6) + (set! (-> desired-levels a0-14) #f) + ) + (dotimes (want-lev-idx 6) ;; loop over wants + (when (-> obj want want-lev-idx name) + (set! (-> desired-levels want-lev-idx) (-> obj want want-lev-idx name)) + ;; check if this wanted level is already present, in any state. + (dotimes (a1-17 6) + (let ((a2-13 (-> *level* level a1-17))) + (if (and (!= (-> a2-13 status) 'inactive) (= (-> a2-13 name) (-> obj want want-lev-idx name))) + (set! (-> desired-levels want-lev-idx) #f) ;; it's already there, not candidate for load start + ) + ) + ) + ) + ) + + ;; find the first level in the possible load array that's not #f (nothing, or already assigned to a level) + (let ((want-lev-idx-to-load -1)) + (dotimes (a0-20 6) + (when (-> desired-levels a0-20) + (set! want-lev-idx-to-load a0-20) + (goto cfg-51) + ) + ) + (label cfg-51) + (when (!= want-lev-idx-to-load -1) + ;; we have a level that we should start loading! + ;; loading only starts if we're not busy - there's a strange exception that if we have no levels at all, + ;; and dgo is busy, we at least start the load. + (when (and (or no-levels-at-all (not (check-busy *load-dgo-rpc*))) (not (load-in-progress? *level*))) + (format 0 "Adding level ~A~%" (-> obj want want-lev-idx-to-load name)) + + ;; do the actual level assignment + (let ((new-lev (level-get-for-use *level* (-> obj want want-lev-idx-to-load name) 'loaded))) + + ;; if we have no levels at all, there's nothing we can show until this one is loading, so block here and load. + (when (and no-levels-at-all (-> obj want want-lev-idx-to-load display?)) + (format 0 "Waiting for level to load~%") + (while (or (= (-> new-lev status) 'loading) (= (-> new-lev status) 'loading-bt) (= (-> new-lev status) 'login)) + (load-continue new-lev) + ) + ) + ) + ) + ) + ) + ) + ) + ) + + ;; process other changes in want. + ;; loop over all wanted levels + (dotimes (want-lev-i 6) + (when (-> obj want want-lev-i name) + ;; and find the associated level + (dotimes (lev-i 7) + (let ((lev (-> *level* level lev-i))) + (when (!= (-> lev status) 'inactive) + (when (= (-> lev name) (-> obj want want-lev-i name)) + + ;; change in display: + (when (!= (-> lev display?) (-> obj want want-lev-i display?)) + (cond + ((not (-> lev display?)) ;; off to on: + (cond + ((or (= (-> lev status) 'loaded) (= (-> lev status) 'active)) + (format 0 "Displaying level ~A [~A]~%" (-> obj want want-lev-i name) (-> obj want want-lev-i display?)) + ;; will activate/birth, starting entities and background drawing. + (level-get-for-use *level* (-> lev info name) 'active) + (set! (-> lev display?) (-> obj want want-lev-i display?)) + ) + (else + ;; but the level isn't ready! trip jak (unless we have display-no-wait.) + (if (and (-> lev info wait-for-load) (!= (-> obj want want-lev-i display?) 'display-no-wait)) + (send-event *target* 'loading) + ) + (if (= *cheat-mode* 'debug) + (format *stdcon* "display on for ~A but level is loading~%" (-> obj want want-lev-i name)) + ) + ) + ) + ) + ((not (-> obj want want-lev-i display?)) ;; on -> off. + (set! (-> lev display?) #f) + (format 0 "Turning level ~A off~%" (-> lev name)) + (deactivate lev) + ) + (else + ;; other change (special, etc) + (format 0 "Setting level ~A display command to ~A~%" + (-> obj want want-lev-i name) + (-> obj want want-lev-i display?) + ) + (set! (-> lev display?) (-> obj want want-lev-i display?)) + ) + ) + ) + + ;; update force-all-visible + (when (!= (-> lev force-all-visible?) (-> obj want want-lev-i force-vis?)) + (set! (-> lev force-all-visible?) (-> obj want want-lev-i force-vis?)) + (format 0 "Setting force-all-visible?[~A] to ~A~%" + (-> obj want want-lev-i name) + (-> obj want want-lev-i force-vis?) + ) + ) + + ;; update force-inside + (when (!= (-> lev force-inside?) (-> obj want want-lev-i force-inside?)) + (format 0 "Setting force-inside?[~A] ~A->~A~%" + (-> obj want want-lev-i name) + (-> lev force-inside?) + (-> obj want want-lev-i force-inside?) + ) + (set! (-> lev force-inside?) (-> obj want want-lev-i force-inside?)) + ) + ) + ) + ) + ) + ) + ) + + ;; update vis level. this actually modifies the load state. + (let ((lev-for-vis (the-as level #f)) + (num-vis-levs 0) + ) + (dotimes (a1-35 (-> *level* length)) + (let ((a2-32 (-> *level* level a1-35))) + (when (= (-> a2-32 status) 'active) + ;; take any level that we're inside of, and has continue points + (when (and (-> a2-32 inside-boxes) (not (null? (-> a2-32 info continues)))) + (if (= (-> a2-32 name) (-> obj vis-nick)) + (goto cfg-125) + ) + (set! lev-for-vis a2-32) + (+! num-vis-levs 1) + ) + ) + ) + ) + (if (and (>= num-vis-levs 1) (!= (-> lev-for-vis name) (-> obj vis-nick))) + (want-vis-level obj (-> lev-for-vis name)) + ) + ) + (label cfg-125) + (update-sound-banks) + 0 + ) + +;; "draw" levels: +;; the "draw level" system is used to order the levels for drawing. +;; the draw-level array of level-group stores levels in the order they should be drawn. +;; eg: level3 of the DMA bucket array is actually (-> *level* draw-level 3), not (-> *level* level 3). + +(defmethod assign-draw-indices level-group ((obj level-group)) + "Sort the levels by draw priority." + (local-vars (t0-3 symbol)) + (set! (-> obj draw-level-count) 0) + (dotimes (v1-0 7) + (let ((f0-0 100000.0) + (a1-1 (the-as level #f)) + ) + (dotimes (a2-0 (-> obj length)) + (let ((a3-3 (-> obj level a2-0))) + (when (= (-> a3-3 status) 'active) + (set! t0-3 (and (< (-> a3-3 draw-priority) f0-0) (begin + (dotimes (t0-4 (-> obj draw-level-count)) + (when (= a3-3 (-> obj draw-level t0-4)) + (set! t0-3 #f) + (goto cfg-14) + ) + ) + #t + ) + ) + ) + (label cfg-14) + (when t0-3 + (set! a1-1 a3-3) + (set! f0-0 (-> a1-1 draw-priority)) + ) + ) + ) + ) + (when a1-1 + (set! (-> obj draw-level (-> obj draw-level-count)) a1-1) + (set! (-> a1-1 draw-index) (-> obj draw-level-count)) + (+! (-> obj draw-level-count) 1) + ) + ) + ) + (while (< (-> obj draw-level-count) 7) + (set! (-> obj draw-level (-> obj draw-level-count)) #f) + (+! (-> obj draw-level-count) 1) + ) + (set! (-> obj draw-level 6) (-> obj default-level)) + (set! (-> (&-> obj default-level draw-index) 0) 6) + (dotimes (v1-12 7) + (let ((a2-9 (-> obj level v1-12))) + (if a2-9 + (set! (-> obj draw-index-map v1-12) (the-as uint (-> a2-9 draw-index))) + ) + ) + ) + 0 + (none) + ) + + +(define *printed-level-update-warning* #f) ;; added + +(defmethod level-update level-group ((obj level-group)) + "NOT DONE: commented out stuff!" + (when (not *printed-level-update-warning*) + (set! *printed-level-update-warning* #t) + (format 0 "SKIP level-update not fully implemented~%") + (format #t "SKIP level-update not fully implemented~%") + + ) + (local-vars (v1-101 symbol)) + (camera-pos) + (new 'static 'boxed-array :type symbol :length 0 :allocated-length 6) + ;; (update *setting-control*) + ;; (update *gui-control* #t) + ;; (update *art-control* #t) + ;; (clear-rec *art-control*) + (dotimes (s5-0 6) + (load-continue (-> obj level s5-0)) + ) + (dotimes (s5-1 (-> obj length)) + (let ((s4-0 (-> obj level s5-1))) + (when (= (-> s4-0 status) 'active) + (set! (-> s4-0 inside-boxes) (inside-boxes-check s4-0 (-> *math-camera* trans))) + (if (-> s4-0 inside-boxes) + (set! (-> s4-0 meta-inside?) #t) + ) + ) + ) + ) + (update! *load-state*) + + #| + (dotimes (s5-2 (-> obj length)) + (let ((s4-1 (-> obj level s5-2))) + (when (= (-> s4-1 status) 'active) + (when (-> s4-1 inside-boxes) + (dotimes (v1-40 (-> obj length)) + (let ((a0-13 (-> obj level v1-40))) + (when (= (-> a0-13 status) 'active) + (if (and (!= s4-1 a0-13) (not (-> a0-13 inside-boxes))) + (set! (-> a0-13 meta-inside?) #f) + ) + ) + ) + ) + ) + (when (and (null? (-> obj load-commands)) + (= (-> s4-1 name) (-> *load-state* vis-nick)) + (begin + (set! (-> *setting-control* user-default music) (-> s4-1 info music-bank)) + (set! (-> *setting-control* user-default sound-reverb) (-> s4-1 info sound-reverb)) + #t + ) + (or (-> *level* border?) (logtest? (-> *game-info* current-continue flags) (continue-flags cf2))) + (or (!= (-> s4-1 name) (-> *game-info* current-continue level)) + (logtest? (-> *game-info* current-continue flags) (continue-flags cf2)) + ) + (not (null? (-> s4-1 info continues))) + (-> *setting-control* user-current allow-continue) + ) + (let ((s3-0 (car (-> s4-1 info continues)))) + (let* ((s2-0 (target-pos 0)) + (s4-2 (-> s4-1 info continues)) + (s1-0 (car s4-2)) + ) + (while (not (null? s4-2)) + (when (and (or (< (vector-vector-distance s2-0 (-> (the-as continue-point s1-0) trans)) + (vector-vector-distance s2-0 (-> (the-as continue-point s3-0) trans)) + ) + (string= (-> *game-info* current-continue name) (-> (the-as continue-point s1-0) name)) + ) + (zero? (logand (-> (the-as continue-point s1-0) flags) (continue-flags cf2 cf3))) + ) + (set! s3-0 (the-as continue-point s1-0)) + (if (string= (-> *game-info* current-continue name) (-> (the-as continue-point s1-0) name)) + (goto cfg-59) + ) + ) + (set! s4-2 (cdr s4-2)) + (set! s1-0 (car s4-2)) + ) + ) + (label cfg-59) + (if (and (the-as continue-point s3-0) + (zero? (logand (-> (the-as continue-point s3-0) flags) (continue-flags cf2 cf3))) + ) + (set-continue! *game-info* (the-as basic s3-0) #f) + ) + ) + ) + ) + ) + ) + |# + (dotimes (v1-88 (-> obj length)) + (let ((a0-48 (-> obj level v1-88))) + (when (= (-> a0-48 status) 'active) + (set! (-> a0-48 vis-self-index) 0) + 0 + ) + ) + ) + (when (= *cheat-mode* 'debug) + (dotimes (s5-3 (-> obj length)) + (let ((v1-96 (-> obj level s5-3))) + (when (= (-> v1-96 status) 'active) + (if (and (= (-> v1-96 status) 'active) + (!= (-> v1-96 display?) 'special) + (nonzero? (-> v1-96 bsp require-force-inside)) + ) + (format *stdcon* "~3Loutside of bsp ~S~%~0L" (-> v1-96 name)) + ) + ) + ) + ) + ) + (countdown (v1-100 6) + (when (-> obj level v1-100 inside-boxes) + (set! v1-101 #f) + (goto cfg-90) + ) + ) + (set! v1-101 #t) + (label cfg-90) + (cond + (v1-101 + 0 + ) + (else + (dotimes (s5-4 (-> obj length)) + (let ((s4-3 (-> obj level s5-4))) + (when (= (-> s4-3 status) 'active) + (dotimes (s3-1 8) + (let ((s2-1 (-> s4-3 vis-info s3-1))) + (when s2-1 + (set! (-> s2-1 flags) (the-as vis-info-flag (logclear (-> s2-1 flags) (vis-info-flag vis-valid)))) + (cond + ((= s3-1 (-> s4-3 vis-self-index)) + (set! (-> s2-1 from-bsp) (-> s4-3 bsp)) + ) + (else + (let ((v1-114 (level-get obj (the-as symbol (-> s2-1 from-level))))) + (set! (-> s2-1 from-bsp) (if v1-114 + (-> v1-114 bsp) + ) + ) + ) + ) + ) + ) + ) + ) + (let ((v1-117 #f)) + (cond + ((= (-> s4-3 display?) 'display-self) + (let ((v1-121 (-> s4-3 vis-info (-> s4-3 vis-self-index)))) + (if v1-121 + (set! (-> v1-121 flags) (the-as vis-info-flag (logior (vis-info-flag vis-valid) (-> v1-121 flags)))) + ) + ) + ) + ((and (-> s4-3 inside-boxes) (not v1-117)) + (let ((v1-126 (-> s4-3 vis-info (-> s4-3 vis-self-index)))) + (if v1-126 + (set! (-> v1-126 flags) (the-as vis-info-flag (logior (vis-info-flag vis-valid) (-> v1-126 flags)))) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (assign-draw-indices obj) + (when (or *display-level-border* *display-texture-distances* *display-texture-download* *display-split-box-info*) + (when *display-level-border* + (format + *stdcon* + " want: ~A ~A/~A ~A ~A/~A~%" + (-> *load-state* want 0 name) + (-> *load-state* want 0 display?) + (-> *load-state* want 0 force-vis?) + (-> *load-state* want 1 name) + (-> *load-state* want 1 display?) + (-> *load-state* want 1 force-vis?) + ) + (let ((t9-18 format) + (a0-86 *stdcon*) + (a1-30 " nick ~A cur ~S cont ~A~%~%") + (a2-6 (-> *load-state* vis-nick)) + (v1-147 (and *target* (-> *target* current-level) (-> *target* current-level name))) + ) + (t9-18 + a0-86 + a1-30 + a2-6 + (if v1-147 + (symbol->string (the-as symbol v1-147)) + ) + (-> *game-info* current-continue name) + ) + ) + ) + (dotimes (s5-5 7) + (let ((s4-4 (-> obj level s5-5))) + (when (or (= (-> s4-4 status) 'active) (= (-> s4-4 status) 'reserved)) + (let ((t9-19 format) + (a0-90 *stdcon*) + (a1-31 "~A: ~S ~A~%") + (a2-7 (-> s4-4 name)) + (a3-3 (if (-> s4-4 inside-boxes) + "inside" + ) + ) + ) + (t9-19 a0-90 a1-31 a2-7 a3-3 (-> s4-4 display?)) + (when *display-texture-distances* + (format *stdcon* "~10Htfrag: ~8,,0m" (-> s4-4 closest-object) (the-as none a3-3)) + (format *stdcon* "~140Hshrub: ~8,,0m" (-> s4-4 closest-object-array 2) (the-as none a3-3)) + (format *stdcon* "~272Halpha: ~8,,0m~%" (-> s4-4 closest-object-array 3) (the-as none a3-3)) + (format *stdcon* "~27Htie: ~8,,0m" (-> s4-4 closest-object-array 10) (the-as none a3-3)) + (format *stdcon* "~140Hfg-tf: ~8,,0m" (-> s4-4 closest-object-array 11) (the-as none a3-3)) + (format *stdcon* "~270Hfg-pr: ~8,,0m~%" (-> s4-4 closest-object-array 12) (the-as none a3-3)) + (format *stdcon* "~10Hfg-wa: ~8,,0m" (-> s4-4 closest-object-array 15) (the-as none a3-3)) + (format *stdcon* "~140Hfg-sh: ~8,,0m" (-> s4-4 closest-object-array 13) (the-as none a3-3)) + (format *stdcon* "~267Hfg-p2: ~8,,0m~%" (-> s4-4 closest-object-array 17) (the-as none a3-3)) + ) + ) + (when *display-texture-download* + (format + *stdcon* + "~30Htf: ~8D~134Hpr: ~8D~252Hsh: ~8D~370Hhd: ~8D~%" + (-> s4-4 upload-size 0) + (-> s4-4 upload-size 1) + (-> s4-4 upload-size 2) + (-> s4-4 upload-size 8) + ) + (let ((t9-30 format) + (a0-101 *stdcon*) + (a1-42 "~30Hal: ~8D~131Hwa: ~8D~252Hsp: ~8D~370Hwp: ~8D~%") + (a2-18 (-> s4-4 upload-size 3)) + (a3-5 (-> s4-4 upload-size 4)) + ) + (t9-30 a0-101 a1-42 a2-18 a3-5 (-> s4-4 upload-size 7) (-> s4-4 upload-size 5)) + (format *stdcon* "~30Hp2: ~8D~%~1K" (-> s4-4 upload-size 6) (the-as none a3-5)) + ) + ) + (if *display-split-box-info* + (debug-print-region-splitbox s4-4 (-> *math-camera* trans) *stdcon*) + ) + ) + ) + ) + ) + (when (and (-> obj disk-load-timing?) (-> obj load-level)) + (let ((s5-6 format) + (s4-5 *stdcon*) + (s3-2 "~0Kload ~16S ~5S ~5DK ~5,,2fs ~5,,2fs~1K ~5,,0f k/s~%") + (s2-2 (-> obj load-level)) + (v1-180 (lookup-level-info (the-as symbol (-> obj load-level)))) + ) + (s5-6 + s4-5 + s3-2 + s2-2 + (if v1-180 + (-> v1-180 nickname) + "" + ) + (shr (-> obj load-size) 10) + (-> obj load-time) + (-> obj load-login-time) + (if (= (-> obj load-time) 0.0) + 0 + (* 0.0009765625 (/ (the float (-> obj load-size)) (-> obj load-time))) + ) + ) + ) + ) + (let ((v1-186 (- #x2000000 (the-as int (-> global current))))) + (if (and (not *debug-segment*) (< v1-186 #x10000)) + (format *stdcon* "~3Lglobal heap fatally low at ~DK free~%~0L" (sar v1-186 10)) + ) + ) + 0 + (none) + ) + +(defun-debug show-level ((arg0 symbol)) + (set! (-> *setting-control* user-default border-mode) #t) + (let ((s5-0 (new 'stack-no-clear 'array 'symbol 10))) + (set! (-> s5-0 5) #f) + (set! (-> s5-0 4) #f) + (set! (-> s5-0 3) #f) + (set! (-> s5-0 2) #f) + (set! (-> s5-0 1) arg0) + (set! (-> s5-0 0) (-> (level-get-target-inside *level*) name)) + (want-levels *load-state* s5-0) + ) + (want-display-level *load-state* arg0 'display) + 0 + ) + (when (zero? (-> *level* level0 art-group)) (kmemopen global "level") (let ((gp-0 *level*)) @@ -227,10 +2986,10 @@ ) ) ) - ; (set! (-> (the-as (pointer int32) (+ #x8fa8 (the-as int gp-0)))) *sky-texture-anim-array*) - ; (set! (-> (the-as (pointer int32) (+ #x8f88 (the-as int gp-0)))) *darkjak-texture-anim-array*) - ; (set! (-> (the-as (pointer int32) (+ #x8f94 (the-as int gp-0)))) *bomb-texture-anim-array*) - ; (set! (-> (the-as (pointer float) (+ #x8fb0 (the-as int gp-0)))) 20.0) + (set! (-> (&-> gp-0 default-level texture-anim-array 9) 0) *sky-texture-anim-array*) + (set! (-> (&-> gp-0 default-level texture-anim-array 1) 0) *darkjak-texture-anim-array*) + (set! (-> (&-> gp-0 default-level texture-anim-array 4) 0) *bomb-texture-anim-array*) + (set! (-> (&-> gp-0 default-level draw-priority) 0) 20.0) (set! *default-level* (-> gp-0 default-level)) ) (kmemclose) diff --git a/goal_src/jak2/engine/level/region-h.gc b/goal_src/jak2/engine/level/region-h.gc index cbdba7f384..d785826f7a 100644 --- a/goal_src/jak2/engine/level/region-h.gc +++ b/goal_src/jak2/engine/level/region-h.gc @@ -37,7 +37,7 @@ :size-assert #x20 :flag-assert #x1400000020 (:methods - (drawable-region-prim-method-17 () none 17) + (debug-draw-region (_type_ int) none 17) (drawable-region-prim-method-18 () none 18) (drawable-region-prim-method-19 () none 19) ) diff --git a/goal_src/jak2/engine/load/load-state.gc b/goal_src/jak2/engine/load/load-state.gc index f9cbc81261..425afc9fac 100644 --- a/goal_src/jak2/engine/load/load-state.gc +++ b/goal_src/jak2/engine/load/load-state.gc @@ -5,5 +5,322 @@ ;; name in dgo: load-state ;; dgos: ENGINE, GAME +(define-extern *backup-load-state* load-state) + + ;; DECOMP BEGINS +(defmethod print level-buffer-state ((obj level-buffer-state)) + (format + #t + "#" + (-> obj name) + (-> obj display?) + (-> obj force-vis?) + (-> obj force-inside?) + obj + ) + obj + ) + +(defmethod reset! load-state ((obj load-state)) + (dotimes (v1-0 6) + (set! (-> obj want v1-0 name) #f) + (set! (-> obj want v1-0 display?) #f) + (set! (-> obj want v1-0 force-vis?) #f) + (set! (-> obj want v1-0 force-inside?) #f) + ) + (dotimes (v1-3 3) + (set! (-> obj want-sound v1-3) #f) + ) + (set! (-> obj command-list) '()) + (dotimes (v1-7 256) + (set! (-> obj object-name v1-7) #f) + (set! (-> obj object-status v1-7) (the-as basic 0)) + ) + obj + ) + +(defmethod want-levels load-state ((obj load-state) (arg0 (pointer symbol))) + (dotimes (v1-0 6) + (dotimes (a2-0 6) + (when (= (-> obj want v1-0 name) (-> arg0 a2-0)) + (set! (-> arg0 a2-0) #f) + (goto cfg-8) + ) + ) + (set! (-> obj want v1-0 name) #f) + (label cfg-8) + ) + (dotimes (v1-3 6) + (when (-> arg0 v1-3) + (dotimes (a2-13 6) + (when (not (-> obj want a2-13 name)) + (set! (-> obj want a2-13 name) (-> arg0 v1-3)) + (set! (-> obj want a2-13 display?) #f) + (set! (-> obj want a2-13 force-vis?) #f) + (set! (-> obj want a2-13 force-inside?) #f) + (goto cfg-19) + ) + ) + ) + (label cfg-19) + ) + (add-borrow-levels obj) + 0 + ) + +(defmethod want-sound-banks load-state ((obj load-state) (arg0 (pointer symbol))) + (dotimes (v1-0 3) + (dotimes (a2-0 3) + (when (= (-> obj want-sound v1-0) (-> arg0 a2-0)) + (set! (-> arg0 a2-0) #f) + (goto cfg-8) + ) + ) + (set! (-> obj want-sound v1-0) #f) + (label cfg-8) + ) + (dotimes (v1-3 3) + (when (-> arg0 v1-3) + (dotimes (a2-13 3) + (when (not (-> obj want-sound a2-13)) + (set! (-> obj want-sound a2-13) (-> arg0 v1-3)) + (goto cfg-19) + ) + ) + ) + (label cfg-19) + ) + 0 + (none) + ) + +(defmethod want-display-level load-state ((obj load-state) (arg0 symbol) (arg1 symbol)) + (dotimes (v1-0 6) + (when (= (-> obj want v1-0 name) arg0) + (set! (-> obj want v1-0 display?) arg1) + (add-borrow-levels obj) + (return 0) + ) + ) + (if arg1 + (format 0 "ERROR: can't display ~A because it isn't loaded~%" arg0) + ) + 0 + ) + +(defmethod want-vis-level load-state ((obj load-state) (arg0 symbol)) + (let ((v1-0 (lookup-level-info arg0))) + (if v1-0 + (set! arg0 (-> v1-0 name)) + ) + ) + (set! (-> obj vis-nick) arg0) + 0 + (none) + ) + +(defmethod want-force-vis load-state ((obj load-state) (arg0 symbol) (arg1 symbol)) + (dotimes (v1-0 6) + (when (= (-> 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 + ) + +(defmethod want-force-inside load-state ((obj load-state) (arg0 symbol) (arg1 symbol)) + (dotimes (v1-0 6) + (when (= (-> obj want v1-0 name) arg0) + (set! (-> obj want v1-0 force-inside?) arg1) + (return 0) + ) + ) + (format 0 "ERROR: can't force inside on ~A because it isn't loaded~%" arg0) + 0 + (none) + ) + +(defmethod add-borrow-levels load-state ((obj load-state)) + "Update the load state so it includes the 'borrow' levels associated with the desired levels. + This will also remove borrow levels that are no longer needed." + + ;; remove borrow levels + (dotimes (s5-0 6) + (let ((a0-1 (-> obj want s5-0 name))) + (when a0-1 + (let ((a0-2 (lookup-level-info a0-1))) + (when (= (-> a0-2 memory-mode) (load-buffer-mode borrow)) + (set! (-> obj want s5-0 name) #f) + (set! (-> obj want s5-0 display?) #f) + (set! (-> obj want s5-0 force-vis?) #f) + (set! (-> obj want s5-0 force-inside?) #f) + ) + ) + ) + ) + ) + + ;; add 4 symbols to this array per level: name, display, force-vis, force-inside. + ;(let ((s5-1 (the-as (array symbol) (new 'stack 'array symbol 24)))) + (let ((symbol-array (new 'stack-no-clear 'array 'symbol 24)) + (used-slots 0)) + ; (set! (-> s5-1 length) 0) + (dotimes (s4-0 6) + (let ((a0-5 (-> obj want s4-0 name))) + ;; add level from the want state + (when a0-5 + (set! (-> symbol-array used-slots) a0-5) + (set! (-> symbol-array (+ used-slots 1)) (-> obj want s4-0 display?)) + (set! (-> symbol-array (+ used-slots 2)) (-> obj want s4-0 force-vis?)) + (set! (-> symbol-array (+ used-slots 3)) (-> obj want s4-0 force-inside?)) + (+! used-slots 4) + ;; and add borrows. + (let ((v1-34 (lookup-level-info a0-5))) + (countdown (a0-6 2) + (when (and (-> v1-34 borrow-level a0-6) (< used-slots 24)) + (set! (-> symbol-array used-slots) (-> v1-34 borrow-level a0-6)) + (set! (-> symbol-array (+ used-slots 1)) (if (-> obj want s4-0 display?) + (-> v1-34 borrow-display? a0-6) + ) + ) + (set! (-> symbol-array (+ used-slots 2)) #f) + (set! (-> symbol-array (+ used-slots 3)) #f) + (+! used-slots 4) + ) + ) + ) + ) + ) + ) + ;; copy back to actual load-state. + (dotimes (v1-39 6) + (cond + ((< (* v1-39 4) used-slots) + (set! (-> obj want v1-39 name) (-> symbol-array (* v1-39 4))) + (set! (-> obj want v1-39 display?) (-> symbol-array (+ (* v1-39 4) 1))) + (set! (-> obj want v1-39 force-vis?) (-> symbol-array (+ (* v1-39 4) 2))) + (set! (-> obj want v1-39 force-inside?) (-> symbol-array (+ (* v1-39 4) 3))) + ) + (else + (set! (-> obj want v1-39 name) #f) + (set! (-> obj want v1-39 display?) #f) + (set! (-> obj want v1-39 force-vis?) #f) + (set! (-> obj want v1-39 force-inside?) #f) + ) + ) + ) + ) + 0 + (none) + ) + +(define *display-load-commands* #f) + +(defmethod backup-load-state-and-set-cmds load-state ((obj load-state) (arg0 pair)) + (dotimes (s4-0 256) + (when (-> obj object-name s4-0) + (format 0 "WARNING: load state somehow aquired object command ~A~%" (-> obj object-name s4-0)) + (set! (-> obj object-name s4-0) #f) + ) + ) + (mem-copy! (&-> *backup-load-state* type) (&-> obj type) 2168) + (set! (-> *backup-load-state* command-list) '()) + (set! (-> obj command-list) arg0) + 0 + ) + +(defmethod restore-load-state-and-cleanup load-state ((obj load-state)) + (with-pp + (execute-commands-up-to obj 100000.0) + (dotimes (s5-0 256) + (when (-> obj object-name s5-0) + (let ((a0-3 (entity-by-name (-> obj object-name s5-0)))) + (set! (-> a0-3 extra perm status) (the-as entity-perm-status (-> obj object-status s5-0))) + (if (-> a0-3 extra process) + (kill! a0-3) + ) + ) + (set! (-> obj object-name s5-0) #f) + ) + ) + (let ((s5-1 (new 'stack-no-clear 'inline-array 'level-buffer-state 6))) + (dotimes (s4-0 6) + ((method-of-type level-buffer-state new) (the-as symbol (-> s5-1 s4-0)) level-buffer-state) + ) + (dotimes (s4-1 6) + (mem-copy! (the-as pointer (-> s5-1 s4-1)) (the-as pointer (-> *load-state* want s4-1)) 16) + ) + (mem-copy! (&-> obj type) (&-> *backup-load-state* type) 2168) + (when (!= (-> pp type) scene-player) + (dotimes (gp-1 6) + (mem-copy! (the-as pointer (-> *load-state* want gp-1)) (the-as pointer (-> s5-1 gp-1)) 16) + ) + ) + ) + (add-borrow-levels *load-state*) + 0 + ) + ) + +(defmethod restore-load-state load-state ((obj load-state)) + (dotimes (v1-0 256) + (if (-> obj object-name v1-0) + (set! (-> obj object-name v1-0) #f) + ) + ) + (mem-copy! (&-> obj type) (&-> *backup-load-state* type) 2168) + 0 + ) + +(defmethod execute-commands-up-to load-state ((obj load-state) (arg0 float)) + (with-pp + (let ((s4-0 (new 'stack 'script-context (the-as basic (process->ppointer pp)) pp (the-as vector #f)))) + (set! (-> s4-0 load-state) obj) + (while (not (null? (-> obj command-list))) + (let ((f0-0 (command-get-float (car (car (-> obj command-list))) 0.0)) + (s3-0 (cdr (car (-> obj command-list)))) + ) + (if (< arg0 f0-0) + (return #f) + ) + (if *display-load-commands* + (format 0 "NOTICE: ~D: ~f: execute command ~A~%" (-> pp clock frame-counter) f0-0 s3-0) + ) + (cond + ((pair? (car s3-0)) + (let ((a1-4 (car s3-0))) + (while (not (null? s3-0)) + (eval! s4-0 (the-as structure a1-4)) + (set! s3-0 (cdr s3-0)) + (set! a1-4 (car s3-0)) + ) + ) + ) + (else + (eval! s4-0 (the-as structure s3-0)) + ) + ) + ) + (set! (-> obj command-list) (cdr (-> obj command-list))) + ) + ) + 0 + (none) + ) + ) + +(kmemopen global "load-state") + +(define *backup-load-state* (new 'global 'load-state)) + +(define-perm *load-state* load-state (new 'global 'load-state)) + +(kmemclose) + + + + diff --git a/goal_src/jak2/engine/nav/nav-control-h.gc b/goal_src/jak2/engine/nav/nav-control-h.gc index f53cab45fc..cb18127528 100644 --- a/goal_src/jak2/engine/nav/nav-control-h.gc +++ b/goal_src/jak2/engine/nav/nav-control-h.gc @@ -192,7 +192,7 @@ :size-assert #x120 :flag-assert #x2f00000120 (:methods - (nav-control-method-9 () none 9) + (debug-draw (_type_) none 9) (point-in-bounds? (_type_ vector) symbol 10) (nav-control-method-11 (_type_ vector) vector 11) (nav-control-method-12 () none 12) diff --git a/goal_src/jak2/engine/physics/trajectory.gc b/goal_src/jak2/engine/physics/trajectory.gc index 4bc878da55..1f172e035b 100644 --- a/goal_src/jak2/engine/physics/trajectory.gc +++ b/goal_src/jak2/engine/physics/trajectory.gc @@ -148,7 +148,7 @@ (let ((f0-1 (* (-> obj time) (/ (+ 1.0 (the float s2-0)) (the float s3-0))))) (compute-trans-at-time obj f0-1 s4-0) ) - (add-debug-line #t (bucket-id bucket-318) s5-0 s4-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line #t (bucket-id debug-no-zbuf1) s5-0 s4-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1)) ) ) 0 @@ -517,16 +517,16 @@ (s4-0 10) ) (cubic-curve-method-10 obj (-> s5-0 initial-velocity) 0.0) - (add-debug-x #t (bucket-id bucket-318) (-> s5-0 initial-velocity) *color-red*) + (add-debug-x #t (bucket-id debug-no-zbuf1) (-> s5-0 initial-velocity) *color-red*) (dotimes (s3-0 s4-0) (set! (-> s5-0 initial-position quad) (-> s5-0 initial-velocity quad)) (let ((f0-2 (/ (+ 1.0 (the float s3-0)) (the float s4-0)))) (cubic-curve-method-10 obj (-> s5-0 initial-velocity) f0-2) ) - (add-debug-x #t (bucket-id bucket-318) (-> s5-0 initial-velocity) *color-red*) + (add-debug-x #t (bucket-id debug-no-zbuf1) (-> s5-0 initial-velocity) *color-red*) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> s5-0 initial-position) (-> s5-0 initial-velocity) *color-red* diff --git a/goal_src/jak2/engine/process-drawable/process-drawable.gc b/goal_src/jak2/engine/process-drawable/process-drawable.gc index 675d64b30f..0bd79743d8 100644 --- a/goal_src/jak2/engine/process-drawable/process-drawable.gc +++ b/goal_src/jak2/engine/process-drawable/process-drawable.gc @@ -33,6 +33,11 @@ ) ) +(defun draw-joint-axes ((arg0 process-drawable)) + (format 0 "draw-joint-axes not yet implemented~%") + (none) + ) + ;; DECOMP BEGINS ;; ERROR: top level function was not converted to expressions. Cannot decompile. diff --git a/goal_src/jak2/engine/ps2/pad.gc b/goal_src/jak2/engine/ps2/pad.gc index 9db46b28a9..ec3e5762ff 100644 --- a/goal_src/jak2/engine/ps2/pad.gc +++ b/goal_src/jak2/engine/ps2/pad.gc @@ -605,7 +605,7 @@ (if (and (-> gp-0 active) (-> gp-0 valid) (-> gp-0 cursor)) (add-debug-cursor #t - (bucket-id debug-no-zbuf) + (bucket-id debug-no-zbuf2) (+ (the int (-> gp-0 posx)) 256) (+ (the int (-> gp-0 posy)) 208) (the-as int (-> gp-0 button0-abs 0)) diff --git a/goal_src/jak2/engine/sound/gsound.gc b/goal_src/jak2/engine/sound/gsound.gc index 2fe913f0bd..38d09d2fff 100644 --- a/goal_src/jak2/engine/sound/gsound.gc +++ b/goal_src/jak2/engine/sound/gsound.gc @@ -987,34 +987,32 @@ (defun sound-bank-reload () (process-spawn-function process - (lambda () - (with-pp - (let ((gp-0 (the-as (array symbol) (new 'static 'boxed-array :type symbol :length 0 :allocated-length 3)))) - (dotimes (v1-0 3) - (set! (-> gp-0 v1-0) (the-as symbol (-> *level* sound-bank v1-0))) + (lambda () (with-pp + (let ((gp-0 (new 'static 'boxed-array :type symbol :length 0 :allocated-length 3))) + (dotimes (v1-0 3) + (set! (-> gp-0 v1-0) (the-as symbol (-> *level* sound-bank v1-0))) + ) + (let ((a1-3 (new 'stack-no-clear 'array 'symbol 4))) + (set! (-> a1-3 2) 'empty2) + (set! (-> a1-3 1) 'empty1) + (set! (-> a1-3 0) 'empty0) + (want-sound-banks *load-state* a1-3) + ) + (let ((s5-0 (-> pp clock frame-counter))) + (until (>= (- (-> pp clock frame-counter) s5-0) (seconds 1)) + (suspend) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'array 'symbol 4))) + (set! (-> a1-4 2) (-> gp-0 2)) + (set! (-> a1-4 1) (-> gp-0 1)) + (set! (-> a1-4 0) (-> gp-0 0)) + (want-sound-banks *load-state* a1-4) + ) + ) + (none) + ) ) - (let ((a1-3 (new 'stack-no-clear 'array 'symbol 4))) - (set! (-> a1-3 2) 'empty2) - (set! (-> a1-3 1) 'empty1) - (set! (-> a1-3 0) 'empty0) - (want-sound-banks *load-state* a1-3) - ) - (let ((s5-0 (-> pp clock frame-counter))) - (until (>= (- (-> pp clock frame-counter) s5-0) (seconds 1)) - (suspend) - ) - ) - (let ((a1-4 (new 'stack-no-clear 'array 'symbol 4))) - (set! (-> a1-4 2) (-> gp-0 2)) - (set! (-> a1-4 1) (-> gp-0 1)) - (set! (-> a1-4 0) (-> gp-0 0)) - (want-sound-banks *load-state* a1-4) - ) - ) - (none) - ) - ) - :name (symbol->string (-> process symbol)) :to *display-pool* ) 0 diff --git a/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc b/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc index d08c524cda..fa646d827e 100644 --- a/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc +++ b/goal_src/jak2/engine/spatial-hash/actor-hash-h.gc @@ -7,6 +7,7 @@ ;; NOTE - for trajectory (define-extern *actor-hash* spatial-hash) +(define-extern update-actor-hash (function none)) ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/target/logic-target.gc b/goal_src/jak2/engine/target/logic-target.gc index 5f7d445fc1..9906fb022c 100644 --- a/goal_src/jak2/engine/target/logic-target.gc +++ b/goal_src/jak2/engine/target/logic-target.gc @@ -30,6 +30,8 @@ ;; DECOMP BEGINS +;; definition for function build-conversions +;; INFO: Used lq/sq (defbehavior build-conversions target ((arg0 vector)) (when (!= (-> self control unknown-surface02) (-> self control surf)) (set! (-> self control unknown-surface02) (-> self control surf)) @@ -84,6 +86,8 @@ ) ) +;; definition for function vector-turn-to +;; INFO: Used lq/sq (defbehavior vector-turn-to target ((arg0 vector)) (forward-up-nopitch->quaternion (-> self control dir-targ) @@ -94,6 +98,7 @@ (build-conversions (-> self control transv)) ) +;; definition for function reverse-conversions ;; WARN: Return type mismatch cshape-moving-flags vs none. (defbehavior reverse-conversions target ((arg0 vector)) (let ((v1-1 (-> self control unknown-vector00))) @@ -104,6 +109,7 @@ (none) ) +;; definition (debug) for function draw-history (defun-debug draw-history ((arg0 control-info)) (when (nonzero? *display-collide-history*) (when (cpad-pressed? 0 l3) @@ -142,8 +148,11 @@ (none) ) +;; definition (debug) for function target-history-print ;; ERROR: function was not converted to expressions. Cannot decompile. +;; definition (debug) for function target-print-stats +;; INFO: Used lq/sq (defun-debug target-print-stats ((arg0 target) (arg1 symbol)) (local-vars (sv-64 int) @@ -527,6 +536,8 @@ ) ) +;; definition for function read-pad +;; INFO: Used lq/sq (defbehavior read-pad target ((arg0 vector)) (when (!= (-> self control unknown-dword01) (-> *display* real-clock frame-counter)) (set! (-> self control unknown-vector13 quad) (-> self control unknown-vector12 quad)) @@ -560,6 +571,7 @@ (vector-matrix*! arg0 arg0 (-> self control unknown-matrix03)) ) +;; definition for function set-pad (defbehavior set-pad target ((arg0 vector)) (set! (-> self control unknown-float12) (vector-length arg0)) (let ((s5-0 vector-matrix*!) @@ -573,12 +585,16 @@ arg0 ) +;; definition for function warp-vector-into-surface! +;; INFO: Used lq/sq (defun warp-vector-into-surface! ((arg0 vector) (arg1 vector) (arg2 vector) (arg3 matrix)) (let ((a2-1 (matrix-from-two-vectors! (new-stack-matrix0) (-> arg3 vector 1) arg2))) (vector-matrix*! arg0 arg1 a2-1) ) ) +;; definition for function vector<-pad-in-surface! +;; INFO: Used lq/sq (defbehavior vector<-pad-in-surface! target ((arg0 vector) (arg1 symbol)) (let ((a1-1 (read-pad (new-stack-vector0)))) (warp-vector-into-surface! arg0 a1-1 (-> self control local-normal) (-> self control unknown-matrix03)) @@ -589,6 +605,7 @@ arg0 ) +;; definition for function vector<-pad-in-matrix! ;; WARN: Return type mismatch vector vs none. (defun vector<-pad-in-matrix! ((arg0 vector) (arg1 cpad-info) (arg2 matrix)) (let ((gp-0 (new 'stack-no-clear 'vector)) @@ -611,6 +628,8 @@ (none) ) +;; definition for function local-pad-angle +;; INFO: Used lq/sq (defbehavior local-pad-angle target () (let ((a0-1 (vector<-pad-in-surface! (new-stack-vector0) #f))) (vector-dot @@ -620,6 +639,8 @@ ) ) +;; definition for function turn-around? +;; INFO: Used lq/sq (defbehavior turn-around? target () (let* ((a0-1 (vector<-pad-in-surface! (new-stack-vector0) #f)) (gp-0 (vector-normalize! a0-1 1.0)) @@ -668,6 +689,8 @@ ) ) +;; definition for function wall-hide? +;; INFO: Used lq/sq (defbehavior wall-hide? target () (when (and (< 0.7 (-> self control unknown-float12)) (< 0.7 (-> self control unknown-float26)) @@ -739,6 +762,8 @@ ) ) +;; definition for function target-log-trans +;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. (defbehavior target-log-trans target () (let ((v1-1 (-> self control unknown-word00))) @@ -750,6 +775,8 @@ (none) ) +;; definition for function target-move-dist +;; INFO: Used lq/sq (defbehavior target-move-dist target ((arg0 time-frame)) (let ((s5-0 (new-stack-vector0)) (f30-0 0.0) @@ -780,6 +807,8 @@ ) ) +;; definition for function turn-to-vector +;; INFO: Used lq/sq (defbehavior turn-to-vector target ((arg0 vector) (arg1 float)) (let ((gp-0 (new-stack-vector0))) (warp-vector-into-surface! gp-0 arg0 (-> self control local-normal) (-> self control unknown-matrix03)) @@ -818,15 +847,16 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) gp-1 - (the-as meters #x444ccccd) + (meters 0.2) "target" (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) ) ) +;; definition for function target-bend-vel-turn (defbehavior target-bend-vel-turn target ((arg0 vector)) (cond ((= (-> self control unknown-surface01 vel-turn) 0.0) @@ -854,6 +884,8 @@ arg0 ) +;; definition for function target-add-slide-factor +;; INFO: Used lq/sq (defbehavior target-add-slide-factor target ((arg0 vector)) (rlet ((acc :class vf) (vf0 :class vf) @@ -941,6 +973,8 @@ ) ) +;; definition for function add-thrust +;; INFO: Used lq/sq (defbehavior add-thrust target () (let ((s5-0 (-> self control unknown-vector01)) (gp-0 (-> self control unknown-vector00)) @@ -1080,9 +1114,9 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) gp-1 - (the-as meters #x444ccccd) + (meters 0.2) "ltransv" (the-as rgba (-> (new 'static 'array uint64 1 #x8000ff00) 0)) ) @@ -1091,15 +1125,17 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) gp-1 - (the-as meters #x444ccccd) + (meters 0.2) "btransv" (the-as rgba (-> (new 'static 'array uint64 1 #x80ffffff) 0)) ) ) ) +;; definition for function add-gravity +;; INFO: Used lq/sq (defbehavior add-gravity target () (let ((s5-0 (new-stack-vector0)) (gp-0 (new-stack-vector0)) @@ -1142,6 +1178,7 @@ ) ) +;; definition for function target-compute-slopes (defbehavior target-compute-slopes target ((arg0 vector)) (let ((gp-0 (new 'stack-no-clear 'vector)) (s4-0 (vector-y-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00))) @@ -1173,6 +1210,7 @@ 0 ) +;; definition for function do-rotations1 (defbehavior do-rotations1 target () (rotate-toward-orientation! (-> self control) @@ -1185,6 +1223,8 @@ ) ) +;; definition for function do-rotations2 +;; INFO: Used lq/sq (defbehavior do-rotations2 target () (let ((gp-0 (vector-z-quaternion! (new-stack-vector0) (-> self control dir-targ))) (s5-0 @@ -1246,27 +1286,27 @@ ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) gp-0 - (the-as meters #x46000000) + (meters 2.0) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) s5-0 - (the-as meters #x46000000) + (meters 2.0) (the-as rgba (-> (new 'static 'array uint64 1 #x800080ff) 0)) ) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control unknown-matrix01 vector 2) - (the-as meters #x46000000) + (meters 2.0) (the-as rgba (-> (new 'static 'array uint64 1 #x80ff00ff) 0)) ) (rotate-toward-orientation! @@ -1299,6 +1339,8 @@ (target-compute-slopes (-> self control dynam gravity-normal)) ) +;; definition for function leg-ik-callback +;; INFO: Used lq/sq (defun leg-ik-callback ((arg0 joint-mod-ik) (arg1 object) (arg2 object) (arg3 vector)) (rlet ((acc :class vf) (vf0 :class vf) @@ -1397,6 +1439,8 @@ ) ) +;; definition for function target-update-ik +;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. (defbehavior target-update-ik target () (rlet ((acc :class vf) @@ -1570,6 +1614,8 @@ ) ) +;; definition for function pre-collide-setup +;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. (defbehavior pre-collide-setup target () (if (>= (-> self clock frame-counter) (-> self control unknown-time-frame04)) @@ -1605,6 +1651,7 @@ (none) ) +;; definition for function level-setup ;; WARN: Return type mismatch int vs none. (defbehavior level-setup target () (let ((gp-0 (-> self current-level))) @@ -1622,6 +1669,8 @@ (none) ) +;; definition for function flag-setup +;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. (defbehavior flag-setup target () (cond @@ -1901,6 +1950,7 @@ (none) ) +;; definition for function post-flag-setup ;; WARN: Return type mismatch int vs none. (defbehavior post-flag-setup target () (if (logtest? (-> self control status) (cshape-moving-flags t-wall t-act)) @@ -1990,6 +2040,8 @@ (none) ) +;; definition for function bend-gravity +;; INFO: Used lq/sq (defbehavior bend-gravity target () (if (and (logtest? (-> self control root-prim prim-core action) (collide-action no-normal-reset)) (zero? (logand (-> self control status) (cshape-moving-flags on-surface))) @@ -2043,56 +2095,58 @@ (vector-normalize! (-> self control unknown-vector02) 1.0) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) gp-0 - (the-as meters #x46000000) + (meters 2.0) (new 'static 'rgba :b #xff :a #x80) ) ) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control local-normal) - (the-as meters #x46000000) + (meters 2.0) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control unknown-dynamics00 gravity-normal) - (the-as meters #x46200000) + (meters 2.5) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control dynam gravity-normal) - (the-as meters #x46400000) + (meters 3.0) (the-as rgba (-> (new 'static 'array uint64 1 #x80ff00ff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control unknown-vector02) - (the-as meters #x46400000) + (meters 3.0) (the-as rgba (-> (new 'static 'array uint64 1 #x80ff00ff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (vector-y-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00)) - (the-as meters #x46400000) + (meters 3.0) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) ) ) +;; definition for function target-compute-edge +;; INFO: Used lq/sq (defbehavior target-compute-edge target () (let ((s5-0 *edge-grab-info*)) (cond @@ -2242,6 +2296,8 @@ (none) ) +;; definition for function target-compute-edge-rider +;; INFO: Used lq/sq (defbehavior target-compute-edge-rider target () (let ((gp-0 *edge-grab-info*)) (cond @@ -2306,6 +2362,8 @@ (none) ) +;; definition for function target-compute-pole +;; INFO: Used lq/sq (defbehavior target-compute-pole target () (rlet ((acc :class vf) (vf0 :class vf) @@ -2366,40 +2424,34 @@ (when *display-edge-collision-marks* (add-debug-vector #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> (the-as swingpole s2-0) root trans) (the-as vector (&-> s2-0 stack 96)) - (the-as meters #x46400000) + (meters 3.0) (the-as rgba (-> (new 'static 'array uint64 1 #x80ff00ff) 0)) ) (add-debug-sphere #t - (bucket-id bucket-324) + (bucket-id debug2) (-> self control unknown-vector30) - (the-as meters #x444ccccd) + (meters 0.2) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) ) (add-debug-sphere #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) s4-0 - (the-as meters #x444ccccd) + (meters 0.2) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ff00) 0)) ) (add-debug-sphere #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) s3-0 - (the-as meters #x444ccccd) + (meters 0.2) (the-as rgba (-> (new 'static 'array uint64 1 #x8040ff00) 0)) ) - (add-debug-sphere - #t - (bucket-id bucket-318) - s5-0 - (the-as meters #x444ccccd) - (new 'static 'rgba :b #xff :a #x80) - ) + (add-debug-sphere #t (bucket-id debug-no-zbuf1) s5-0 (meters 0.2) (new 'static 'rgba :b #xff :a #x80)) ) ) ) @@ -2439,6 +2491,8 @@ ) ) +;; definition for function target-calc-camera-pos +;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. (defbehavior target-calc-camera-pos target () (let ((s5-0 (new 'stack-no-clear 'vector)) @@ -2530,6 +2584,8 @@ (none) ) +;; definition for function joint-points +;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. (defbehavior joint-points target () (let ((f0-1 (* 0.00078125 (the float (-> self neck loock-at-count))))) @@ -2627,6 +2683,8 @@ (none) ) +;; definition for function do-target-gspot +;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. (defbehavior do-target-gspot target () (cond @@ -2659,6 +2717,8 @@ (none) ) +;; definition for function target-real-post +;; INFO: Used lq/sq (defbehavior target-real-post target () (let ((f30-0 (-> self clock clock-ratio))) (let ((gp-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -2825,11 +2885,14 @@ (none) ) +;; definition for function target-post (defbehavior target-post target () (target-real-post) (none) ) +;; definition for function target-swim-post +;; INFO: Used lq/sq (defbehavior target-swim-post target () (let ((f30-0 (-> self clock clock-ratio))) (let ((gp-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -2957,6 +3020,8 @@ (none) ) +;; definition for function target-no-stick-post +;; INFO: Used lq/sq (defbehavior target-no-stick-post target () (let ((f30-0 (-> self clock clock-ratio))) (let ((gp-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -3085,6 +3150,8 @@ (none) ) +;; definition for function target-no-move-post +;; INFO: Used lq/sq (defbehavior target-no-move-post target () (let ((f30-0 (-> self clock clock-ratio))) (let ((gp-1 (max 1 (the int (-> self clock time-adjust-ratio))))) @@ -3182,6 +3249,7 @@ (none) ) +;; definition for function target-no-ja-move-post (defbehavior target-no-ja-move-post target () (vector-! (-> self control unknown-vector05) @@ -3201,6 +3269,8 @@ (none) ) +;; definition for function reset-target-state +;; INFO: Used lq/sq (defbehavior reset-target-state target ((arg0 symbol)) (when arg0 (vector-identity! (-> self control scale)) @@ -3230,6 +3300,8 @@ self ) +;; definition for method 28 of type target +;; INFO: Used lq/sq ;; WARN: Return type mismatch int vs none. (defmethod init-target target ((obj target) (arg0 continue-point) (arg1 symbol)) (local-vars (s1-0 int) (s2-0 int) (s3-0 int) (s4-0 int) (sv-16 collide-shape-prim-group)) @@ -3465,6 +3537,7 @@ (none) ) +;; definition for function target-init ;; WARN: Return type mismatch object vs none. (defbehavior target-init target ((arg0 continue-point)) (init-target self arg0 #f) @@ -3474,6 +3547,7 @@ (none) ) +;; definition for function tobot-init ;; WARN: Return type mismatch object vs none. (defbehavior tobot-init target ((arg0 symbol)) (init-target self (the-as continue-point #f) 'tobot) @@ -3484,6 +3558,7 @@ (none) ) +;; definition for method 10 of type target (defmethod deactivate target ((obj target)) (kill-persister *setting-control* (the-as engine-pers 'bg-a-speed) 'bg-a-speed) (if (nonzero? (-> obj darkjak)) @@ -3495,6 +3570,7 @@ (none) ) +;; definition for function stop (defun stop ((arg0 symbol)) (when *target* (kill-by-name "target" *active-pool*) @@ -3504,6 +3580,7 @@ 0 ) +;; definition for function start (defun start ((arg0 symbol) (arg1 continue-point)) (let ((v1-0 arg0)) (set! (-> *level* play?) (if (= v1-0 'play) @@ -3534,6 +3611,7 @@ *target* ) +;; definition for function tobot-start ;; WARN: Return type mismatch (pointer process) vs target. (defun tobot-start ((arg0 symbol)) (the-as target (process-spawn @@ -3547,11 +3625,8 @@ ) ) +;; definition for function tobot-stop (defun tobot-stop () (kill-by-name "tobot" *active-pool*) 0 ) - - - - diff --git a/goal_src/jak2/engine/target/target-util.gc b/goal_src/jak2/engine/target/target-util.gc index 3dfe91c9fa..2719523973 100644 --- a/goal_src/jak2/engine/target/target-util.gc +++ b/goal_src/jak2/engine/target/target-util.gc @@ -118,4 +118,20 @@ ) (define-extern *target-shadow-control* shadow-control) -(define-extern *TARGET-bank* target-bank) \ No newline at end of file +(define-extern *TARGET-bank* target-bank) + +(defun target-pos ((arg0 int)) + (let ((a1-0 *target*)) + (cond + (a1-0 + (if (zero? arg0) + (-> a1-0 control trans) + (vector<-cspace! (new 'static 'vector) (-> a1-0 node-list data arg0)) + ) + ) + (else + (camera-pos) + ) + ) + ) + ) \ No newline at end of file diff --git a/goal_src/jak2/engine/ui/progress/progress-h.gc b/goal_src/jak2/engine/ui/progress/progress-h.gc index b92793692a..e0e9d58ea5 100644 --- a/goal_src/jak2/engine/ui/progress/progress-h.gc +++ b/goal_src/jak2/engine/ui/progress/progress-h.gc @@ -5,6 +5,10 @@ ;; name in dgo: progress-h ;; dgos: ENGINE, GAME +(define-extern deactivate-progress (function none)) +(define-extern progress-allowed? (function symbol)) +(define-extern hide-progress-screen (function none)) + ;; DECOMP BEGINS (deftype progress (process-drawable) @@ -46,7 +50,7 @@ (progress-method-24 () none 24) (progress-method-25 () none 25) (progress-method-26 () none 26) - (progress-method-27 () none 27) + (can-go-back? (_type_) symbol 27) (progress-method-28 () none 28) (progress-method-29 () none 29) (progress-method-30 () none 30) diff --git a/goal_src/jak2/engine/ui/progress/progress.gc b/goal_src/jak2/engine/ui/progress/progress.gc index e5437259c1..06b4dd2d49 100644 --- a/goal_src/jak2/engine/ui/progress/progress.gc +++ b/goal_src/jak2/engine/ui/progress/progress.gc @@ -5,5 +5,6 @@ ;; name in dgo: progress ;; dgos: ENGINE, GAME +(set! *progress-process* #f) ;; DECOMP BEGINS diff --git a/goal_src/jak2/engine/ui/text-h.gc b/goal_src/jak2/engine/ui/text-h.gc index f6f88428b3..279c156f7c 100644 --- a/goal_src/jak2/engine/ui/text-h.gc +++ b/goal_src/jak2/engine/ui/text-h.gc @@ -31,6 +31,6 @@ ) ) -(define *text-group-names* (the-as (array string) (new 'static 'boxed-array :type string "common"))) +(define *text-group-names* (new 'static 'boxed-array :type string "common")) (define *common-text-heap* (new 'global 'kheap)) (define *common-text* (the-as game-text-info #f)) diff --git a/goal_src/jak2/examples/debug-jak2.gc b/goal_src/jak2/examples/debug-jak2.gc new file mode 100644 index 0000000000..46481b56ba --- /dev/null +++ b/goal_src/jak2/examples/debug-jak2.gc @@ -0,0 +1,247 @@ +(defun hack-update-camera ((location vector) (inv-rot matrix)) + "Debugging function to set the camera's position and orientation" + ;; update to compute the perspective matrix. + (update-math-camera + *math-camera* + 'ntsc + 'aspect4x3 + (-> *math-camera* fov) + ) + + ;; need to set this - math-camera starts up wrong + (set-video-mode 'ntsc) + + ;; copy the input rotation + (matrix-copy! (-> *math-camera* inv-camera-rot) inv-rot) + ;; inverse of rotation matrix matrix is its transpose + (matrix-transpose! (-> *math-camera* camera-rot) (-> *math-camera* inv-camera-rot)) + + ;; fake some value here + (set! (-> *math-camera* fov-correction-factor) 1.0) + + ;; do the math + (set! (-> *math-camera* trans quad) (-> location quad)) + (let ((cam-temp (-> *math-camera* camera-temp)) + (cam-rot (-> *math-camera* camera-rot)) + (inv-cam-rot (-> *math-camera* inv-camera-rot)) + (cam-trans (-> *math-camera* trans)) + ) + (let ((rotated-trans (new-stack-vector0))) + (set! (-> rotated-trans x) (- (-> cam-trans x))) + (set! (-> rotated-trans y) (- (-> cam-trans y))) + (set! (-> rotated-trans z) (- (-> cam-trans z))) + (set! (-> rotated-trans w) 1.0) + (vector-matrix*! rotated-trans rotated-trans cam-rot) + (set! (-> cam-rot vector 3 quad) (-> rotated-trans quad)) + ) + (matrix*! cam-temp cam-rot (-> *math-camera* perspective)) + (set! (-> inv-cam-rot vector 3 quad) (-> cam-trans quad)) + + ;; fixes it! + ;(set! (-> *math-camera* camera-temp data 15) -6.) + ) + + (none) + ) + +(defun test-function ((iter int)) + "This function draws the debug stuff. You can edit this, then reload this file to play with it." + + ;; val will increase from 0 to 1, then reset back to 0. + (let* ((frame (the float (mod (* 4 iter) 1600))) + (val (/ frame 1600.0))) + (format *stdcon* "~0kval ~f~%" val) + + ;; orbit the camera around in a circle with radius 5 m. + (let* ((rad (meters 5.0)) + (x (* rad (sin (* (degrees 360.0) val)))) + (z (* rad (cos (* (degrees 360.0) val)))) + (cam-pos (new 'stack 'vector)) + (cam-inv-rot (new 'stack 'matrix)) + ) + ;; this matrix will look directly at the origin... + (set! (-> cam-pos x) x) + (set! (-> cam-pos z) z) + (set! (-> cam-pos y) (meters 1.)) + (forward-down->inv-matrix cam-inv-rot cam-pos (new 'static 'vector :y 1.0)) + + ;; if the camera is here. + (set! (-> cam-pos x) (- 0. x)) + (set! (-> cam-pos z) (- 0. z)) + (set! (-> cam-pos y) (meters -3.)) + ;; (hack-update-camera cam-pos cam-inv-rot) + + + ;; create some test points + (let ((p0 (new 'static 'vector :x (meters .8) :y (meters .2) :z (meters 2.0))) + (p1 (new 'static 'vector :x (meters .3) :y (meters .3) :z (meters 2.5))) + (p2 (new 'static 'vector :x (meters .5) :y (meters .7) :z (meters 1.5))) + (b0 (new 'static 'vector :x (meters .5) :y (meters .5) :z (meters .5))) + (b1 (new 'static 'vector :x (meters -.5) :y (meters -.5) :z (meters -.5))) + + ) + + (add-debug-cross #t (bucket-id debug-no-zbuf1) (new 'static 'vector) (meters 2.0)) + (add-debug-box #t (bucket-id debug-no-zbuf1) p0 p2 (new 'static 'rgba :b #x80 :r #x80 :g #x80 :a #x80)) + (add-debug-flat-triangle #t (bucket-id debug-no-zbuf1) p0 p1 p2 (new 'static 'rgba :r #x80 :a #x80)) + (add-debug-text-3d #t (bucket-id debug-no-zbuf1) "triangle!" p0 (the font-color 1) (the vector2h #f)) + (add-debug-sphere #t (bucket-id debug-no-zbuf1) p0 (meters 0.5) (new 'static 'rgba :r #x80 :a #x80)) + + (add-debug-line-sphere #t (bucket-id debug-no-zbuf1) + (new 'static 'vector :x (meters 0.8)) + (new 'static 'vector :y (meters -4.0)) + (meters 1.0) (new 'static 'rgba :r #x40 :g #x80 :a #x80)) + ) + ) + ) + (none) + ) + + +(defun launch-test-process () + "Call this to launch a process that draws the debug demo" + (let ((proc (get-process *nk-dead-pool* process 1024))) + (activate proc *active-pool* "test" *kernel-dram-stack*) + (run-next-time-in-process proc (lambda () + (let ((iter 0)) + (while #t + (test-function iter) + (suspend) + (+! iter 1) + ) + ) + ) + ) + proc) + + ) + +(define *wasd-camera-transform* (new 'global 'transform)) +(defun wasd-camera-update () + (let ((local-trans (new-stack-vector0)) + (trans *wasd-camera-transform*) + (fast-mode (cpad-hold? 0 r2)) + (pad-idx 0)) + ;; circle/square move camera relative x (left and right) + (set! (-> local-trans x) + (cond + ((cpad-hold? 0 circle) + -1600.0 + ) + ((cpad-hold? 0 square) + 1600.0 + ) + (else + 0.0 + ) + ) + ) + + ;; no way to move camera relative y (up/down) + (set! (-> local-trans y) 0.0) + + ;; in and out movement + (set! (-> local-trans z) + (cond + ((cpad-hold? 0 down) + -1600.0 + ) + ((cpad-hold? 0 up) + 1600.0 + ) + (else + 0.0 + ) + ) + ) + (set! (-> local-trans w) 1.0) + + (when fast-mode + (vector-float*! local-trans local-trans 10.) + ) + + ;; rotate this into world frame + (let ((inv-cam-rot (new-stack-vector0)) + (cam-rot-mat (new-stack-matrix0))) + ;; unused. + (vector-negate! inv-cam-rot (-> trans rot)) + ;; convert rotation to rotation matrix. + (matrix-rotate-xyz! cam-rot-mat (-> trans rot)) + ;; and rotate the translation. + (vector-matrix*! local-trans local-trans cam-rot-mat) + ) + + ;; and update the transform + (vector+! (-> trans trans) (-> trans trans) local-trans) + + + ;; don't forget to fix w. + (set! (-> trans trans w) 1.0) + + ;; global translation + (let ((diff (if fast-mode 10000.0 2000.0))) + (if (cpad-hold? 0 l1) + (set! (-> trans trans y) (+ diff (-> trans trans y))) + ) + (if (cpad-hold? 0 r1) + (set! (-> trans trans y) (+ (- diff) (-> trans trans y))) + ) + ) + + + ;; rotation (don't allow camera roll) + (if (cpad-hold? 0 x) + (set! (-> trans rot x) (+ 200. (-> trans rot x))) + ) + (if (cpad-hold? 0 triangle) + (set! (-> trans rot x) (+ -200. (-> trans rot x))) + ) + (if (cpad-hold? 0 left) + (set! (-> trans rot y) (+ 300. (-> trans rot y))) + ) + (if (cpad-hold? 0 right) + (set! (-> trans rot y) (+ -300. (-> trans rot y))) + ) + + (set! (-> trans scale x) 1.) + (set! (-> trans scale y) 1.) + (set! (-> trans scale z) 1.) + (set! (-> trans scale w) 1.) + ) + ) + + + +(defun launch-wasd-process () + "Launch a process to control the camera with keyboard. + Note that the test process above also controls the camera and should be killed first. + For example, after loading this file, do + (kill-test-procs) + (launch-wasd-process)" + (let ((proc (get-process *nk-dead-pool* process 1024))) + (activate proc *active-pool* "test" *kernel-dram-stack*) + (set! (-> *wasd-camera-transform* trans y) (meters 4.0)) + (run-next-time-in-process proc (lambda () + (let ((iter 0)) + (while #t + (wasd-camera-update) + (let ((mat (new-stack-matrix0))) + (transform-matrix-calc! *wasd-camera-transform* mat) + (set! (-> mat data 3) 0.) + (set! (-> mat data 7) 0.) + (set! (-> mat data 11) 0.) + (set! (-> mat data 12) 0.) + (set! (-> mat data 13) 0.) + (set! (-> mat data 14) 0.) + (set! (-> mat data 15) 1.) + ;;(matrix-transpose! mat mat) + (hack-update-camera (-> *wasd-camera-transform* trans) mat) + ) + (suspend) + (+! iter 1) + ) + ) + ) + ) + proc) + ) \ No newline at end of file diff --git a/goal_src/jak2/game.gp b/goal_src/jak2/game.gp index dbb2d28357..11ebbc81e2 100644 --- a/goal_src/jak2/game.gp +++ b/goal_src/jak2/game.gp @@ -660,6 +660,33 @@ ) +;;;;;;;;;;;;;;;;;;;;; +;; PRISON +;;;;;;;;;;;;;;;;;;;;; + +(cgo "PRI.DGO" "pri.gd") + +(goal-src-sequence + "levels/" + :deps ("$OUT/obj/los-control.o") + "fortress/prison/intro-texture.gc" + "fortress/prison/prison-part.gc" + "fortress/prison/prison-obs.gc" + ) + +(copy-textures 1578 1950 1579 2647) + +(copy-gos + "daxter-highres-ag" + "prsn-torture-ag" + "prsn-chair-shackle-ag" + "prsn-hang-cell-ag" + "warp-gate-b-ag" + "prsn-vent-fan-ag" + "fort-entry-gate-ag" + "prsn-cell-door-ag" + "prison-vis" + ) ;;;;;;;;;;;;;;;;;;;;; diff --git a/goal_src/jak2/kernel-defs.gc b/goal_src/jak2/kernel-defs.gc index 15f6271334..55e74cb1f5 100644 --- a/goal_src/jak2/kernel-defs.gc +++ b/goal_src/jak2/kernel-defs.gc @@ -154,6 +154,8 @@ (define-extern string->symbol (function string symbol)) (define-extern link-begin (function pointer (pointer uint8) int kheap link-flag int)) +(define-extern link-reset (function none)) + (define-extern kset-language (function language-enum int)) (define-extern syncv (function int int)) (define-extern __pc-get-mips2c (function string function)) @@ -163,6 +165,12 @@ (define-extern __pc-texture-upload-now (function object object none)) (define-extern __pc-texture-relocate (function object object object none)) +(define-extern link-resume (function int)) +(define-extern unload (function string none)) + +(define-extern reset-graph (function int int int int none)) + + ;; PC stuff (defenum pc-prof-event (begin 0) diff --git a/scripts/update_decomp_reference.py b/scripts/update_decomp_reference.py index 58e4fbba9a..1f022c0baf 100644 --- a/scripts/update_decomp_reference.py +++ b/scripts/update_decomp_reference.py @@ -18,6 +18,13 @@ def get_failures(root_dir): for f in glob.glob(os.path.join(file[0], "*.gc")) ] +# removesuffix only added in python 3.9.... +def removesuffix(self: str, suffix: str, /) -> str: + if self.endswith(suffix): + return self[:-len(suffix)] + else: + return self[:] + def main(): parser = argparse.ArgumentParser() parser.add_argument(dest="diff", help="the failures folder") @@ -26,7 +33,7 @@ def main(): args = parser.parse_args() for replacement in get_failures(args.diff): - obj_name = os.path.basename(replacement).removesuffix(".gc").replace("_REF", "") + obj_name = removesuffix(os.path.basename(replacement), ".gc").replace("_REF", "") # Find gsrc path, given game-name ref_path = get_ref_path_from_filename(args.game, obj_name, args.reference) diff --git a/test/decompiler/reference/jak1/engine/collide/collide_REF.gc b/test/decompiler/reference/jak1/engine/collide/collide_REF.gc index 92b0a5866d..d7d1145769 100644 --- a/test/decompiler/reference/jak1/engine/collide/collide_REF.gc +++ b/test/decompiler/reference/jak1/engine/collide/collide_REF.gc @@ -2,19 +2,18 @@ (in-package goal) ;; definition for symbol *collide-vif0-init*, type (array uint32) -(define *collide-vif0-init* (the-as (array uint32) (new 'static 'boxed-array :type uint32 - #x30000000 - #x4d000000 - #x4d000000 - #x4d000000 - #x3f800000 - #x5000001 - #x20000000 - #x40404040 - #x1000404 - #x0 - #x0 - #x0 - ) - ) +(define *collide-vif0-init* (new 'static 'boxed-array :type uint32 + #x30000000 + #x4d000000 + #x4d000000 + #x4d000000 + #x3f800000 + #x5000001 + #x20000000 + #x40404040 + #x1000404 + #x0 + #x0 + #x0 + ) ) diff --git a/test/decompiler/reference/jak1/engine/dma/dma-disasm_REF.gc b/test/decompiler/reference/jak1/engine/dma/dma-disasm_REF.gc index c1cfb0aaf2..591db4bb8c 100644 --- a/test/decompiler/reference/jak1/engine/dma/dma-disasm_REF.gc +++ b/test/decompiler/reference/jak1/engine/dma/dma-disasm_REF.gc @@ -32,169 +32,167 @@ ;; definition for symbol *vif-disasm-table*, type (array vif-disasm-element) (define *vif-disasm-table* - (the-as (array vif-disasm-element) - (new 'static 'boxed-array :type vif-disasm-element - (new 'static 'vif-disasm-element :mask #x7f :string1 "nop") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stcycl) :print #x2 :string1 "stcycl") - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 offset) - :print #x1 - :string1 "offset" - :string2 "offset" - ) - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 base) :print #x1 :string1 "base" :string2 "base") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 itop) :print #x1 :string1 "itop" :string2 "addr") - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 stmod) - :print #x1 - :string1 "stmod" - :string2 "mode" - ) - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 mskpath3) - :print #x1 - :string1 "mskpath3" - :string2 "mask" - ) - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mark) :print #x1 :string1 "mark" :string2 "mark") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flushe) :string1 "flushe") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flush) :string1 "flush") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flusha) :string1 "flusha") - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 mscal) - :print #x1 - :string1 "mscal" - :string2 "addr" - ) - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscnt) :string1 "mscnt") - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 mscalf) - :print #x1 - :string1 "mscalf" - :string2 "addr" - ) - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 stmask) - :print #x3 - :string1 "stmask" - :string2 "mask" - ) - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 strow) - :print #x4 - :string1 "strow" - :string2 "row" - ) - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 stcol) - :print #x4 - :string1 "stcol" - :string2 "col" - ) - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mpg) :print #x5 :string1 "mpg") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 direct) :print #x6 :string1 "direct") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 directhl) :print #x6 :string1 "directhl") - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-s-32) - :val #x10 - :print #x7 - :string1 "unpack-s-32" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-s-16) - :val #x8 - :print #x7 - :string1 "unpack-s-16" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-s-8) - :val #x4 - :print #x7 - :string1 "unpack-s-8" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v2-32) - :val #x8 - :print #x7 - :string1 "unpack-v2-32" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v2-16) - :val #x4 - :print #x7 - :string1 "unpack-v2-16" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v2-8) - :val #x2 - :print #x7 - :string1 "unpack-v2-8" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v3-32) - :val #xc - :print #x7 - :string1 "unpack-v3-32" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v3-16) - :val #x6 - :print #x7 - :string1 "unpack-v3-16" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v3-8) - :val #x3 - :print #x7 - :string1 "unpack-v3-8" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v4-32) - :val #x10 - :print #x7 - :string1 "unpack-v4-32" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v4-16) - :val #x8 - :print #x7 - :string1 "unpack-v4-16" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v4-8) - :val #x4 - :print #x7 - :string1 "unpack-v4-8" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v4-5) - :val #x2 - :print #x7 - :string1 "unpack-v4-5" - ) - (new 'static 'vif-disasm-element :print #x8) + (new 'static 'boxed-array :type vif-disasm-element + (new 'static 'vif-disasm-element :mask #x7f :string1 "nop") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stcycl) :print #x2 :string1 "stcycl") + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 offset) + :print #x1 + :string1 "offset" + :string2 "offset" ) + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 base) :print #x1 :string1 "base" :string2 "base") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 itop) :print #x1 :string1 "itop" :string2 "addr") + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 stmod) + :print #x1 + :string1 "stmod" + :string2 "mode" + ) + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 mskpath3) + :print #x1 + :string1 "mskpath3" + :string2 "mask" + ) + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mark) :print #x1 :string1 "mark" :string2 "mark") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flushe) :string1 "flushe") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flush) :string1 "flush") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flusha) :string1 "flusha") + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 mscal) + :print #x1 + :string1 "mscal" + :string2 "addr" + ) + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscnt) :string1 "mscnt") + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 mscalf) + :print #x1 + :string1 "mscalf" + :string2 "addr" + ) + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 stmask) + :print #x3 + :string1 "stmask" + :string2 "mask" + ) + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 strow) + :print #x4 + :string1 "strow" + :string2 "row" + ) + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 stcol) + :print #x4 + :string1 "stcol" + :string2 "col" + ) + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mpg) :print #x5 :string1 "mpg") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 direct) :print #x6 :string1 "direct") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 directhl) :print #x6 :string1 "directhl") + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-s-32) + :val #x10 + :print #x7 + :string1 "unpack-s-32" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-s-16) + :val #x8 + :print #x7 + :string1 "unpack-s-16" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-s-8) + :val #x4 + :print #x7 + :string1 "unpack-s-8" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v2-32) + :val #x8 + :print #x7 + :string1 "unpack-v2-32" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v2-16) + :val #x4 + :print #x7 + :string1 "unpack-v2-16" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v2-8) + :val #x2 + :print #x7 + :string1 "unpack-v2-8" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v3-32) + :val #xc + :print #x7 + :string1 "unpack-v3-32" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v3-16) + :val #x6 + :print #x7 + :string1 "unpack-v3-16" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v3-8) + :val #x3 + :print #x7 + :string1 "unpack-v3-8" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v4-32) + :val #x10 + :print #x7 + :string1 "unpack-v4-32" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v4-16) + :val #x8 + :print #x7 + :string1 "unpack-v4-16" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v4-8) + :val #x4 + :print #x7 + :string1 "unpack-v4-8" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v4-5) + :val #x2 + :print #x7 + :string1 "unpack-v4-5" + ) + (new 'static 'vif-disasm-element :print #x8) ) ) diff --git a/test/decompiler/reference/jak1/engine/entity/entity-table_REF.gc b/test/decompiler/reference/jak1/engine/entity/entity-table_REF.gc index 494fe77e2e..9063a9305a 100644 --- a/test/decompiler/reference/jak1/engine/entity/entity-table_REF.gc +++ b/test/decompiler/reference/jak1/engine/entity/entity-table_REF.gc @@ -2,142 +2,141 @@ (in-package goal) ;; definition for symbol *entity-info*, type (array entity-info) -(define *entity-info* (the-as (array entity-info) (new 'static 'boxed-array :type entity-info - (new 'static 'entity-info - :ptype (type-ref sage-finalboss :method-count 53) - :package "l1" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x8000 - ) - (new 'static 'entity-info - :ptype (type-ref robotboss :method-count 21) - :package "l1" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x8000 - ) - (new 'static 'entity-info - :ptype (type-ref assistant-levitator :method-count 53) - :package "l1" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x8000 - ) - (new 'static 'entity-info - :ptype (type-ref babak :method-count 76) - :package "l1" - :art-group '("babak") - :pool '*16k-dead-pool* - :heap-size #x2800 - ) - (new 'static 'entity-info - :ptype (type-ref racer :method-count 24) - :package "game" - :art-group '("racer") - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref springbox :method-count 20) - :package "game" - :art-group '("bounceytarp") - :pool '*16k-dead-pool* - :heap-size #x1400 - ) - (new 'static 'entity-info - :ptype (type-ref launcher :method-count 20) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x400 - ) - (new 'static 'entity-info - :ptype (type-ref pickup-spawner :method-count 30) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #xc00 - ) - (new 'static 'entity-info - :ptype (type-ref bucket :method-count 30) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #xc00 - ) - (new 'static 'entity-info - :ptype (type-ref barrel :method-count 30) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #xc00 - ) - (new 'static 'entity-info - :ptype (type-ref crate :method-count 30) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #xc00 - ) - (new 'static 'entity-info - :ptype (type-ref orb-cache-top :method-count 29) - :package "game" - :art-group '("orb-cache-top") - :pool '*16k-dead-pool* - :heap-size #x1000 - ) - (new 'static 'entity-info - :ptype (type-ref eco :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x1000 - ) - (new 'static 'entity-info - :ptype (type-ref ecovent :method-count 21) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x1000 - ) - (new 'static 'entity-info - :ptype (type-ref fuel-cell :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x1400 - ) - (new 'static 'entity-info - :ptype (type-ref buzzer :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x1000 - ) - (new 'static 'entity-info - :ptype (type-ref money :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x800 - ) - (new 'static 'entity-info - :ptype (type-ref water-vol :method-count 30) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #xc00 - ) - (new 'static 'entity-info - :ptype (type-ref target-start :method-count 15) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x400 - ) - ) - ) +(define *entity-info* (new 'static 'boxed-array :type entity-info + (new 'static 'entity-info + :ptype (type-ref sage-finalboss :method-count 53) + :package "l1" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x8000 + ) + (new 'static 'entity-info + :ptype (type-ref robotboss :method-count 21) + :package "l1" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x8000 + ) + (new 'static 'entity-info + :ptype (type-ref assistant-levitator :method-count 53) + :package "l1" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x8000 + ) + (new 'static 'entity-info + :ptype (type-ref babak :method-count 76) + :package "l1" + :art-group '("babak") + :pool '*16k-dead-pool* + :heap-size #x2800 + ) + (new 'static 'entity-info + :ptype (type-ref racer :method-count 24) + :package "game" + :art-group '("racer") + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref springbox :method-count 20) + :package "game" + :art-group '("bounceytarp") + :pool '*16k-dead-pool* + :heap-size #x1400 + ) + (new 'static 'entity-info + :ptype (type-ref launcher :method-count 20) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x400 + ) + (new 'static 'entity-info + :ptype (type-ref pickup-spawner :method-count 30) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #xc00 + ) + (new 'static 'entity-info + :ptype (type-ref bucket :method-count 30) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #xc00 + ) + (new 'static 'entity-info + :ptype (type-ref barrel :method-count 30) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #xc00 + ) + (new 'static 'entity-info + :ptype (type-ref crate :method-count 30) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #xc00 + ) + (new 'static 'entity-info + :ptype (type-ref orb-cache-top :method-count 29) + :package "game" + :art-group '("orb-cache-top") + :pool '*16k-dead-pool* + :heap-size #x1000 + ) + (new 'static 'entity-info + :ptype (type-ref eco :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x1000 + ) + (new 'static 'entity-info + :ptype (type-ref ecovent :method-count 21) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x1000 + ) + (new 'static 'entity-info + :ptype (type-ref fuel-cell :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x1400 + ) + (new 'static 'entity-info + :ptype (type-ref buzzer :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x1000 + ) + (new 'static 'entity-info + :ptype (type-ref money :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x800 + ) + (new 'static 'entity-info + :ptype (type-ref water-vol :method-count 30) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #xc00 + ) + (new 'static 'entity-info + :ptype (type-ref target-start :method-count 15) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x400 + ) + ) ) ;; definition for function entity-info-lookup diff --git a/test/decompiler/reference/jak1/engine/gfx/generic/generic_REF.gc b/test/decompiler/reference/jak1/engine/gfx/generic/generic_REF.gc index 1d11e3d7a9..21849f61a6 100644 --- a/test/decompiler/reference/jak1/engine/gfx/generic/generic_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/generic/generic_REF.gc @@ -3,9 +3,7 @@ ;; definition for symbol *generic-foreground-sinks*, type (array generic-dma-foreground-sink) (define *generic-foreground-sinks* - (the-as (array generic-dma-foreground-sink) - (new 'static 'boxed-array :type generic-dma-foreground-sink :length 0 :allocated-length 9) - ) + (new 'static 'boxed-array :type generic-dma-foreground-sink :length 0 :allocated-length 9) ) ;; failed to figure out what this is: diff --git a/test/decompiler/reference/jak1/engine/gfx/texture_REF.gc b/test/decompiler/reference/jak1/engine/gfx/texture_REF.gc index bcf253f44a..28ccf3b45a 100644 --- a/test/decompiler/reference/jak1/engine/gfx/texture_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/texture_REF.gc @@ -144,307 +144,299 @@ ) ;; definition for symbol ct32-24-block-table, type (array int32) -(define ct32-24-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 1 - 4 - 5 - 16 - 17 - 20 - 21 - 2 - 3 - 6 - 7 - 18 - 19 - 22 - 23 - 8 - 9 - 12 - 13 - 24 - 25 - 28 - 29 - 10 - 11 - 14 - 15 - 26 - 27 - 30 - 31 - ) - ) +(define ct32-24-block-table (new 'static 'boxed-array :type int32 + 0 + 1 + 4 + 5 + 16 + 17 + 20 + 21 + 2 + 3 + 6 + 7 + 18 + 19 + 22 + 23 + 8 + 9 + 12 + 13 + 24 + 25 + 28 + 29 + 10 + 11 + 14 + 15 + 26 + 27 + 30 + 31 + ) ) ;; definition for symbol mz32-24-block-table, type (array int32) -(define mz32-24-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 16 - 17 - 20 - 21 - 0 - 1 - 4 - 5 - 18 - 19 - 22 - 23 - 2 - 3 - 6 - 7 - 24 - 25 - 28 - 29 - 8 - 9 - 12 - 13 - 26 - 27 - 30 - 31 - 10 - 11 - 14 - 15 - ) - ) +(define mz32-24-block-table (new 'static 'boxed-array :type int32 + 16 + 17 + 20 + 21 + 0 + 1 + 4 + 5 + 18 + 19 + 22 + 23 + 2 + 3 + 6 + 7 + 24 + 25 + 28 + 29 + 8 + 9 + 12 + 13 + 26 + 27 + 30 + 31 + 10 + 11 + 14 + 15 + ) ) ;; definition for symbol ct16-block-table, type (array int32) -(define ct16-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 2 - 8 - 10 - 1 - 3 - 9 - 11 - 4 - 6 - 12 - 14 - 5 - 7 - 13 - 15 - 16 - 18 - 24 - 26 - 17 - 19 - 25 - 27 - 20 - 22 - 28 - 30 - 21 - 23 - 29 - 31 - ) - ) +(define ct16-block-table (new 'static 'boxed-array :type int32 + 0 + 2 + 8 + 10 + 1 + 3 + 9 + 11 + 4 + 6 + 12 + 14 + 5 + 7 + 13 + 15 + 16 + 18 + 24 + 26 + 17 + 19 + 25 + 27 + 20 + 22 + 28 + 30 + 21 + 23 + 29 + 31 + ) ) ;; definition for symbol ct16s-block-table, type (array int32) -(define ct16s-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 2 - 16 - 18 - 1 - 3 - 17 - 19 - 8 - 10 - 24 - 26 - 9 - 11 - 25 - 27 - 4 - 6 - 20 - 22 - 5 - 7 - 21 - 23 - 12 - 14 - 28 - 30 - 13 - 15 - 29 - 31 - ) - ) +(define ct16s-block-table (new 'static 'boxed-array :type int32 + 0 + 2 + 16 + 18 + 1 + 3 + 17 + 19 + 8 + 10 + 24 + 26 + 9 + 11 + 25 + 27 + 4 + 6 + 20 + 22 + 5 + 7 + 21 + 23 + 12 + 14 + 28 + 30 + 13 + 15 + 29 + 31 + ) ) ;; definition for symbol mz16-block-table, type (array int32) -(define mz16-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 16 - 18 - 24 - 26 - 17 - 19 - 25 - 27 - 20 - 22 - 28 - 30 - 21 - 23 - 29 - 31 - 0 - 2 - 8 - 10 - 1 - 3 - 9 - 11 - 4 - 6 - 12 - 14 - 5 - 7 - 13 - 15 - ) - ) +(define mz16-block-table (new 'static 'boxed-array :type int32 + 16 + 18 + 24 + 26 + 17 + 19 + 25 + 27 + 20 + 22 + 28 + 30 + 21 + 23 + 29 + 31 + 0 + 2 + 8 + 10 + 1 + 3 + 9 + 11 + 4 + 6 + 12 + 14 + 5 + 7 + 13 + 15 + ) ) ;; definition for symbol mz16s-block-table, type (array int32) -(define mz16s-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 16 - 18 - 0 - 2 - 17 - 19 - 1 - 3 - 24 - 26 - 8 - 10 - 25 - 27 - 9 - 11 - 20 - 22 - 4 - 6 - 21 - 23 - 5 - 7 - 28 - 30 - 12 - 14 - 29 - 31 - 13 - 15 - ) - ) +(define mz16s-block-table (new 'static 'boxed-array :type int32 + 16 + 18 + 0 + 2 + 17 + 19 + 1 + 3 + 24 + 26 + 8 + 10 + 25 + 27 + 9 + 11 + 20 + 22 + 4 + 6 + 21 + 23 + 5 + 7 + 28 + 30 + 12 + 14 + 29 + 31 + 13 + 15 + ) ) ;; definition for symbol mt8-block-table, type (array int32) -(define mt8-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 1 - 4 - 5 - 16 - 17 - 20 - 21 - 2 - 3 - 6 - 7 - 18 - 19 - 22 - 23 - 8 - 9 - 12 - 13 - 24 - 25 - 28 - 29 - 10 - 11 - 14 - 15 - 26 - 27 - 30 - 31 - ) - ) +(define mt8-block-table (new 'static 'boxed-array :type int32 + 0 + 1 + 4 + 5 + 16 + 17 + 20 + 21 + 2 + 3 + 6 + 7 + 18 + 19 + 22 + 23 + 8 + 9 + 12 + 13 + 24 + 25 + 28 + 29 + 10 + 11 + 14 + 15 + 26 + 27 + 30 + 31 + ) ) ;; definition for symbol mt4-block-table, type (array int32) -(define mt4-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 2 - 8 - 10 - 1 - 3 - 9 - 11 - 4 - 6 - 12 - 14 - 5 - 7 - 13 - 15 - 16 - 18 - 24 - 26 - 17 - 19 - 25 - 27 - 20 - 22 - 28 - 30 - 21 - 23 - 29 - 31 - ) - ) +(define mt4-block-table (new 'static 'boxed-array :type int32 + 0 + 2 + 8 + 10 + 1 + 3 + 9 + 11 + 4 + 6 + 12 + 14 + 5 + 7 + 13 + 15 + 16 + 18 + 24 + 26 + 17 + 19 + 25 + 27 + 20 + 22 + 28 + 30 + 21 + 23 + 29 + 31 + ) ) ;; definition for function gs-find-block diff --git a/test/decompiler/reference/jak1/engine/gfx/wind-h_REF.gc b/test/decompiler/reference/jak1/engine/gfx/wind-h_REF.gc index 3a221c1aa0..ea957feb81 100644 --- a/test/decompiler/reference/jak1/engine/gfx/wind-h_REF.gc +++ b/test/decompiler/reference/jak1/engine/gfx/wind-h_REF.gc @@ -20,41 +20,40 @@ ) ;; definition for symbol *wind-scales*, type (array uint8) -(define *wind-scales* (the-as (array uint8) (new 'static 'boxed-array :type uint8 - #x2 - #x5 - #x2 - #x3 - #x2 - #x2 - #x3 - #x10 - #xa - #x2 - #x4 - #x2 - #x8 - #x2 - #x2 - #x10 - #x2 - #x2 - #x8 - #x2 - #x10 - #x2 - #x4 - #x10 - #xa - #x2 - #x4 - #x2 - #x8 - #x2 - #x2 - #x10 - ) - ) +(define *wind-scales* (new 'static 'boxed-array :type uint8 + #x2 + #x5 + #x2 + #x3 + #x2 + #x2 + #x3 + #x10 + #xa + #x2 + #x4 + #x2 + #x8 + #x2 + #x2 + #x10 + #x2 + #x2 + #x8 + #x2 + #x10 + #x2 + #x4 + #x10 + #xa + #x2 + #x4 + #x2 + #x8 + #x2 + #x2 + #x10 + ) ) ;; definition of type wind-work diff --git a/test/decompiler/reference/jak1/engine/math/euler-h_REF.gc b/test/decompiler/reference/jak1/engine/math/euler-h_REF.gc index 9fc6eafa31..7ad6d5c905 100644 --- a/test/decompiler/reference/jak1/engine/math/euler-h_REF.gc +++ b/test/decompiler/reference/jak1/engine/math/euler-h_REF.gc @@ -2,10 +2,10 @@ (in-package goal) ;; definition for symbol EulSafe, type (array int32) -(define EulSafe (the-as (array int32) (new 'static 'boxed-array :type int32 0 1 2 0))) +(define EulSafe (new 'static 'boxed-array :type int32 0 1 2 0)) ;; definition for symbol EulNext, type (array int32) -(define EulNext (the-as (array int32) (new 'static 'boxed-array :type int32 1 2 0 1))) +(define EulNext (new 'static 'boxed-array :type int32 1 2 0 1)) ;; definition of type euler-angles (deftype euler-angles (vector) diff --git a/test/decompiler/reference/jak1/engine/math/trigonometry_REF.gc b/test/decompiler/reference/jak1/engine/math/trigonometry_REF.gc index e13ed2db78..05b6947c64 100644 --- a/test/decompiler/reference/jak1/engine/math/trigonometry_REF.gc +++ b/test/decompiler/reference/jak1/engine/math/trigonometry_REF.gc @@ -81,79 +81,77 @@ ) ;; definition for symbol binary-table, type (array float) -(define binary-table (the-as (array float) (new 'static 'boxed-array :type float - 1.0 - 0.5 - 0.25 - 0.125 - 0.0625 - 0.03125 - 0.015625 - 0.0078125 - 0.00390625 - 0.001953125 - 0.0009765625 - 0.00048828125 - 0.00024414062 - 0.00012207031 - 0.000061035156 - 0.000030517578 - 0.000015258789 - 0.0000076293945 - 0.0000038146973 - 0.0000019073486 - 0.0000009536743 - 0.00000047683716 - 0.00000023841858 - 0.00000011920929 - 0.000000059604645 - 0.000000029802322 - 0.000000014901161 - 0.000000007450581 - 0.0000000037252903 - 0.0000000018626451 - 0.0000000009313226 - 0.0000000004656613 - ) - ) +(define binary-table (new 'static 'boxed-array :type float + 1.0 + 0.5 + 0.25 + 0.125 + 0.0625 + 0.03125 + 0.015625 + 0.0078125 + 0.00390625 + 0.001953125 + 0.0009765625 + 0.00048828125 + 0.00024414062 + 0.00012207031 + 0.000061035156 + 0.000030517578 + 0.000015258789 + 0.0000076293945 + 0.0000038146973 + 0.0000019073486 + 0.0000009536743 + 0.00000047683716 + 0.00000023841858 + 0.00000011920929 + 0.000000059604645 + 0.000000029802322 + 0.000000014901161 + 0.000000007450581 + 0.0000000037252903 + 0.0000000018626451 + 0.0000000009313226 + 0.0000000004656613 + ) ) ;; definition for symbol sincos-table, type (array float) -(define sincos-table (the-as (array float) (new 'static 'boxed-array :type float - 0.7853982 - 0.4636476 - 0.24497867 - 0.124354996 - 0.06241881 - 0.031239834 - 0.015623729 - 0.007812341 - 0.0039062302 - 0.0019531226 - 0.0009765622 - 0.0004882812 - 0.00024414062 - 0.00012207031 - 0.000061035156 - 0.000030517578 - 0.000015258789 - 0.0000076293945 - 0.0000038146973 - 0.0000019073486 - 0.0000009536743 - 0.00000047683716 - 0.00000023841858 - 0.00000011920929 - 0.000000059604645 - 0.000000029802322 - 0.000000014901161 - 0.000000007450581 - 0.0000000037252903 - 0.0000000018626451 - 0.0000000009313226 - 0.0000000004656613 - ) - ) +(define sincos-table (new 'static 'boxed-array :type float + 0.7853982 + 0.4636476 + 0.24497867 + 0.124354996 + 0.06241881 + 0.031239834 + 0.015623729 + 0.007812341 + 0.0039062302 + 0.0019531226 + 0.0009765622 + 0.0004882812 + 0.00024414062 + 0.00012207031 + 0.000061035156 + 0.000030517578 + 0.000015258789 + 0.0000076293945 + 0.0000038146973 + 0.0000019073486 + 0.0000009536743 + 0.00000047683716 + 0.00000023841858 + 0.00000011920929 + 0.000000059604645 + 0.000000029802322 + 0.000000014901161 + 0.000000007450581 + 0.0000000037252903 + 0.0000000018626451 + 0.0000000009313226 + 0.0000000004656613 + ) ) ;; definition for function sin diff --git a/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc b/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc index 9b5f755c73..49ad74afb2 100644 --- a/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc +++ b/test/decompiler/reference/jak1/engine/nav/navigate_REF.gc @@ -279,13 +279,13 @@ ) ;; definition for symbol *edge-vert0-table*, type (array int8) -(define *edge-vert0-table* (the-as (array int8) (new 'static 'boxed-array :type int8 1 2 0))) +(define *edge-vert0-table* (new 'static 'boxed-array :type int8 1 2 0)) ;; definition for symbol *edge-vert1-table*, type (array int8) -(define *edge-vert1-table* (the-as (array int8) (new 'static 'boxed-array :type int8 2 0 1))) +(define *edge-vert1-table* (new 'static 'boxed-array :type int8 2 0 1)) ;; definition for symbol *edge-mask-table*, type (array int8) -(define *edge-mask-table* (the-as (array int8) (new 'static 'boxed-array :type int8 1 2 4))) +(define *edge-mask-table* (new 'static 'boxed-array :type int8 1 2 4)) ;; definition for function inc-mod3 (defun inc-mod3 ((arg0 int)) diff --git a/test/decompiler/reference/jak1/engine/target/target-death_REF.gc b/test/decompiler/reference/jak1/engine/target/target-death_REF.gc index 9eba9cd403..38f4281de2 100644 --- a/test/decompiler/reference/jak1/engine/target/target-death_REF.gc +++ b/test/decompiler/reference/jak1/engine/target/target-death_REF.gc @@ -976,20 +976,18 @@ ;; definition for symbol *death-spool-array*, type (array spool-anim) (define *death-spool-array* - (the-as (array spool-anim) - (new 'static 'boxed-array :type spool-anim - (new 'static 'spool-anim :name "death-0181" :index 3 :parts 1 :command-list '()) - (new 'static 'spool-anim :name "death-0182" :index 4 :parts 1 :command-list '()) - (new 'static 'spool-anim :name "death-0184" :index 5 :parts 1 :command-list '()) - (new 'static 'spool-anim :name "death-0186" :index 6 :parts 1 :command-list '()) - (new 'static 'spool-anim :name "death-0187" :index 7 :parts 1 :command-list '()) - (new 'static 'spool-anim :name "death-0191" :index 8 :parts 1 :command-list '()) - (new 'static 'spool-anim :name "death-0193" :index 9 :parts 2 :command-list '()) - (new 'static 'spool-anim :name "death-0195" :index 10 :parts 1 :command-list '()) - (new 'static 'spool-anim :name "death-0197" :index 11 :parts 2 :command-list '()) - (new 'static 'spool-anim :name "death-0199" :index 12 :parts 2 :command-list '()) - (new 'static 'spool-anim :name "death-0202" :index 13 :parts 1 :command-list '()) - ) + (new 'static 'boxed-array :type spool-anim + (new 'static 'spool-anim :name "death-0181" :index 3 :parts 1 :command-list '()) + (new 'static 'spool-anim :name "death-0182" :index 4 :parts 1 :command-list '()) + (new 'static 'spool-anim :name "death-0184" :index 5 :parts 1 :command-list '()) + (new 'static 'spool-anim :name "death-0186" :index 6 :parts 1 :command-list '()) + (new 'static 'spool-anim :name "death-0187" :index 7 :parts 1 :command-list '()) + (new 'static 'spool-anim :name "death-0191" :index 8 :parts 1 :command-list '()) + (new 'static 'spool-anim :name "death-0193" :index 9 :parts 2 :command-list '()) + (new 'static 'spool-anim :name "death-0195" :index 10 :parts 1 :command-list '()) + (new 'static 'spool-anim :name "death-0197" :index 11 :parts 2 :command-list '()) + (new 'static 'spool-anim :name "death-0199" :index 12 :parts 2 :command-list '()) + (new 'static 'spool-anim :name "death-0202" :index 13 :parts 1 :command-list '()) ) ) diff --git a/test/decompiler/reference/jak1/engine/ui/text-h_REF.gc b/test/decompiler/reference/jak1/engine/ui/text-h_REF.gc index 079e18108b..48bfdce216 100644 --- a/test/decompiler/reference/jak1/engine/ui/text-h_REF.gc +++ b/test/decompiler/reference/jak1/engine/ui/text-h_REF.gc @@ -47,7 +47,7 @@ ) ;; definition for symbol *text-group-names*, type (array string) -(define *text-group-names* (the-as (array string) (new 'static 'boxed-array :type string "common"))) +(define *text-group-names* (new 'static 'boxed-array :type string "common")) ;; definition for symbol *common-text-heap*, type kheap (define *common-text-heap* (new 'global 'kheap)) diff --git a/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc b/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc index db5e7bf756..5fb6020d23 100644 --- a/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/basebutton_REF.gc @@ -476,14 +476,13 @@ ) ;; definition for symbol *warp-info*, type (array string) -(define *warp-info* (the-as (array string) (new 'static 'boxed-array :type string - "training-warp" - "village1-warp" - "village2-warp" - "village3-warp" - "citadel-warp" - ) - ) +(define *warp-info* (new 'static 'boxed-array :type string + "training-warp" + "village1-warp" + "village2-warp" + "village3-warp" + "citadel-warp" + ) ) ;; definition of type warp-gate diff --git a/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc b/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc index 334da653d2..401e74e9c6 100644 --- a/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc +++ b/test/decompiler/reference/jak1/levels/common/water-anim_REF.gc @@ -350,205 +350,203 @@ ;; definition for symbol *water-anim-look*, type (array water-anim-look) (define *water-anim-look* - (the-as (array water-anim-look) - (new 'static 'boxed-array :type water-anim-look - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-big-room-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 70 :fo-max 80) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-first-room-from-entrance-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 50 :fo-max 60) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-qbert-room-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 48 :fo-max 58) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-first-right-branch-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 30 :fo-max 40) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-circular-with-bullys-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 15 :fo-max 25) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-hall-with-one-whirlpool-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 27 :fo-max 37) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-hall-with-three-whirlpools-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 26 :fo-max 36) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-start-of-helix-slide-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 25 :fo-max 35) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-room-above-exit-chamber-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 45 :fo-max 55) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-hall-before-big-room-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 20 :fo-max 30) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-dark-eco-qbert-sg* - :anim 6 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 40 :fo-max 50) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-short-piece-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 20 :fo-max 30) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-big-room-upper-water-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 27 :fo-max 37) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-dark-eco-platform-room-sg* - :anim 6 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 22 :fo-max 32) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-maincave-water-with-crystal-sg* - :anim 2 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-maincave-center-pool-sg* - :anim 10 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 70 :fo-max 80) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-maincave-lower-right-pool-sg* - :anim 10 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 40 :fo-max 50) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-maincave-mid-right-pool-sg* - :anim 10 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 37 :fo-max 47) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-maincave-lower-left-pool-sg* - :anim 10 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 20 :fo-max 30) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-maincave-mid-left-pool-sg* - :anim 10 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 51 :fo-max 61) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-robocave-main-pool-sg* - :anim 3 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 54 :fo-max 64) - ) - (new 'static 'water-anim-look :skel-group '*water-anim-misty-mud-by-arena-sg* :anim 24 :ambient-sound-spec #f) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-mud-above-skeleton-sg* - :anim 24 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-mud-behind-skeleton-sg* - :anim 24 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-mud-above-skull-back-sg* - :anim 24 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-mud-above-skull-front-sg* - :anim 24 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-mud-other-near-skull-sg* - :anim 24 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-mud-near-skull-sg* - :anim 24 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-mud-under-spine-sg* - :anim 24 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look :skel-group '*water-anim-misty-mud-by-dock-sg* :anim 24 :ambient-sound-spec #f) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-mud-island-near-dock-sg* - :anim 24 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-mud-lonely-island-sg* - :anim 24 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-misty-dark-eco-pool-sg* - :anim 24 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 17 :fo-max 27) - ) - (new 'static 'water-anim-look :skel-group '*water-anim-ogre-lava-sg* :anim 2 :ambient-sound-spec #f) - (new 'static 'water-anim-look :skel-group '*water-anim-jungle-river-sg* :anim 3 :ambient-sound-spec #f) - (new 'static 'water-anim-look :skel-group '*water-anim-village3-lava-sg* :anim 3 :ambient-sound-spec #f) - (new 'static 'water-anim-look :skel-group '*water-anim-training-lake-sg* :anim 2 :ambient-sound-spec #f) - (new 'static 'water-anim-look - :skel-group '*water-anim-darkcave-water-with-crystal-sg* - :anim 2 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look :skel-group '*water-anim-rolling-water-back-sg* :anim 4 :ambient-sound-spec #f) - (new 'static 'water-anim-look :skel-group '*water-anim-rolling-water-front-sg* :anim 4 :ambient-sound-spec #f) - (new 'static 'water-anim-look - :skel-group '*water-anim-sunken-dark-eco-helix-room-sg* - :anim 6 - :ambient-sound-spec (static-sound-spec "helix-dark-eco" :fo-min 120 :fo-max 130) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-finalboss-dark-eco-pool-sg* - :anim 2 - :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 19 :fo-max 29) - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-lavatube-energy-lava-sg* - :anim 2 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look :skel-group '*water-anim-village1-rice-paddy-sg* :anim 8 :ambient-sound-spec #f) - (new 'static 'water-anim-look :skel-group '*water-anim-village1-fountain-sg* :anim 8 :ambient-sound-spec #f) - (new 'static 'water-anim-look - :skel-group '*water-anim-village1-rice-paddy-mid-sg* - :anim 8 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look - :skel-group '*water-anim-village1-rice-paddy-top-sg* - :anim 8 - :ambient-sound-spec #f - ) - (new 'static 'water-anim-look :skel-group '*water-anim-village2-bucket-sg* :anim 2 :ambient-sound-spec #f) + (new 'static 'boxed-array :type water-anim-look + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-big-room-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 70 :fo-max 80) ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-first-room-from-entrance-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 50 :fo-max 60) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-qbert-room-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 48 :fo-max 58) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-first-right-branch-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 30 :fo-max 40) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-circular-with-bullys-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 15 :fo-max 25) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-hall-with-one-whirlpool-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 27 :fo-max 37) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-hall-with-three-whirlpools-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 26 :fo-max 36) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-start-of-helix-slide-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 25 :fo-max 35) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-room-above-exit-chamber-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 45 :fo-max 55) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-hall-before-big-room-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 20 :fo-max 30) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-dark-eco-qbert-sg* + :anim 6 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 40 :fo-max 50) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-short-piece-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 20 :fo-max 30) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-big-room-upper-water-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "water-loop" :fo-min 27 :fo-max 37) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-dark-eco-platform-room-sg* + :anim 6 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 22 :fo-max 32) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-maincave-water-with-crystal-sg* + :anim 2 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-maincave-center-pool-sg* + :anim 10 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 70 :fo-max 80) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-maincave-lower-right-pool-sg* + :anim 10 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 40 :fo-max 50) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-maincave-mid-right-pool-sg* + :anim 10 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 37 :fo-max 47) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-maincave-lower-left-pool-sg* + :anim 10 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 20 :fo-max 30) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-maincave-mid-left-pool-sg* + :anim 10 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 51 :fo-max 61) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-robocave-main-pool-sg* + :anim 3 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 54 :fo-max 64) + ) + (new 'static 'water-anim-look :skel-group '*water-anim-misty-mud-by-arena-sg* :anim 24 :ambient-sound-spec #f) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-mud-above-skeleton-sg* + :anim 24 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-mud-behind-skeleton-sg* + :anim 24 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-mud-above-skull-back-sg* + :anim 24 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-mud-above-skull-front-sg* + :anim 24 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-mud-other-near-skull-sg* + :anim 24 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-mud-near-skull-sg* + :anim 24 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-mud-under-spine-sg* + :anim 24 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look :skel-group '*water-anim-misty-mud-by-dock-sg* :anim 24 :ambient-sound-spec #f) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-mud-island-near-dock-sg* + :anim 24 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-mud-lonely-island-sg* + :anim 24 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-misty-dark-eco-pool-sg* + :anim 24 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 17 :fo-max 27) + ) + (new 'static 'water-anim-look :skel-group '*water-anim-ogre-lava-sg* :anim 2 :ambient-sound-spec #f) + (new 'static 'water-anim-look :skel-group '*water-anim-jungle-river-sg* :anim 3 :ambient-sound-spec #f) + (new 'static 'water-anim-look :skel-group '*water-anim-village3-lava-sg* :anim 3 :ambient-sound-spec #f) + (new 'static 'water-anim-look :skel-group '*water-anim-training-lake-sg* :anim 2 :ambient-sound-spec #f) + (new 'static 'water-anim-look + :skel-group '*water-anim-darkcave-water-with-crystal-sg* + :anim 2 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look :skel-group '*water-anim-rolling-water-back-sg* :anim 4 :ambient-sound-spec #f) + (new 'static 'water-anim-look :skel-group '*water-anim-rolling-water-front-sg* :anim 4 :ambient-sound-spec #f) + (new 'static 'water-anim-look + :skel-group '*water-anim-sunken-dark-eco-helix-room-sg* + :anim 6 + :ambient-sound-spec (static-sound-spec "helix-dark-eco" :fo-min 120 :fo-max 130) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-finalboss-dark-eco-pool-sg* + :anim 2 + :ambient-sound-spec (static-sound-spec "darkeco-pool" :fo-min 19 :fo-max 29) + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-lavatube-energy-lava-sg* + :anim 2 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look :skel-group '*water-anim-village1-rice-paddy-sg* :anim 8 :ambient-sound-spec #f) + (new 'static 'water-anim-look :skel-group '*water-anim-village1-fountain-sg* :anim 8 :ambient-sound-spec #f) + (new 'static 'water-anim-look + :skel-group '*water-anim-village1-rice-paddy-mid-sg* + :anim 8 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look + :skel-group '*water-anim-village1-rice-paddy-top-sg* + :anim 8 + :ambient-sound-spec #f + ) + (new 'static 'water-anim-look :skel-group '*water-anim-village2-bucket-sg* :anim 2 :ambient-sound-spec #f) ) ) diff --git a/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc b/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc index d237501c2b..9735b0e74d 100644 --- a/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc +++ b/test/decompiler/reference/jak1/levels/maincave/dark-crystal_REF.gc @@ -58,9 +58,7 @@ ) ;; definition for symbol *dark-crystal-flash-delays*, type (array int32) -(define *dark-crystal-flash-delays* - (the-as (array int32) (new 'static 'boxed-array :type int32 #xb4 #x96 #x78 90 60 30 15 7 3)) - ) +(define *dark-crystal-flash-delays* (new 'static 'boxed-array :type int32 #xb4 #x96 #x78 90 60 30 15 7 3)) ;; definition for symbol *dark-crystal-exploder-params*, type joint-exploder-static-params (define *dark-crystal-exploder-params* diff --git a/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc b/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc index acf846f3a0..4a489abb9a 100644 --- a/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/misty-conveyor_REF.gc @@ -505,9 +505,7 @@ ) ;; definition for symbol *keg-conveyor-keg-spawn-table*, type (array int8) -(define *keg-conveyor-keg-spawn-table* - (the-as (array int8) (new 'static 'boxed-array :type int8 1 2 1 1 2 1)) - ) +(define *keg-conveyor-keg-spawn-table* (new 'static 'boxed-array :type int8 1 2 1 1 2 1)) ;; failed to figure out what this is: (defstate keg-conveyor-idle (keg-conveyor) diff --git a/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc b/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc index 612d1772ce..02997a808f 100644 --- a/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc +++ b/test/decompiler/reference/jak1/levels/misty/sidekick-human_REF.gc @@ -1257,63 +1257,61 @@ ) ;; definition for symbol *lurker-army*, type (array army-info) -(define *lurker-army* - (the-as (array army-info) (new 'static 'boxed-array :type army-info - (new 'static 'army-info - :pos (new 'static 'vector :x -920633.4 :y 83546.11 :z 4210409.5) - :rot 28556.04 - :skel 'babak - ) - (new 'static 'army-info - :pos (new 'static 'vector :x -873488.4 :y 86441.984 :z 4225454.0) - :rot 37861.24 - :start-frame 5.0 - :skel 'babak - ) - (new 'static 'army-info - :pos (new 'static 'vector :x -905871.4 :y 83132.414 :z 4231934.0) - :rot 32054.021 - :start-frame 10.0 - :skel 'babak - ) - (new 'static 'army-info - :pos (new 'static 'vector :x -926765.06 :y 83496.96 :z 4236230.5) - :rot 30001.652 - :start-frame 15.0 - :skel 'babak - ) - (new 'static 'army-info - :pos (new 'static 'vector :x -893345.8 :y 83517.44 :z 4212961.5) - :rot 32755.074 - :start-frame 20.0 - :skel 'babak - ) - (new 'static 'army-info - :pos (new 'static 'vector :x -842797.06 :y 84041.73 :z 4218855.5) - :rot 43916.402 - :skel 'bonelurker - ) - (new 'static 'army-info - :pos (new 'static 'vector :x -839274.5 :y 82644.99 :z 4248723.5) - :rot 40510.715 - :start-frame 6.0 - :skel 'bonelurker - ) - (new 'static 'army-info - :pos (new 'static 'vector :x -871485.44 :y 85909.51 :z 4243181.5) - :rot 37046.043 - :start-frame 12.0 - :skel 'bonelurker - ) - (new 'static 'army-info - :pos (new 'static 'vector :x -947523.56 :y 85835.77 :z 4219314.0) - :rot 26980.078 - :start-frame 18.0 - :skel 'bonelurker - ) - ) - ) - ) +(define *lurker-army* (new 'static 'boxed-array :type army-info + (new 'static 'army-info + :pos (new 'static 'vector :x -920633.4 :y 83546.11 :z 4210409.5) + :rot 28556.04 + :skel 'babak + ) + (new 'static 'army-info + :pos (new 'static 'vector :x -873488.4 :y 86441.984 :z 4225454.0) + :rot 37861.24 + :start-frame 5.0 + :skel 'babak + ) + (new 'static 'army-info + :pos (new 'static 'vector :x -905871.4 :y 83132.414 :z 4231934.0) + :rot 32054.021 + :start-frame 10.0 + :skel 'babak + ) + (new 'static 'army-info + :pos (new 'static 'vector :x -926765.06 :y 83496.96 :z 4236230.5) + :rot 30001.652 + :start-frame 15.0 + :skel 'babak + ) + (new 'static 'army-info + :pos (new 'static 'vector :x -893345.8 :y 83517.44 :z 4212961.5) + :rot 32755.074 + :start-frame 20.0 + :skel 'babak + ) + (new 'static 'army-info + :pos (new 'static 'vector :x -842797.06 :y 84041.73 :z 4218855.5) + :rot 43916.402 + :skel 'bonelurker + ) + (new 'static 'army-info + :pos (new 'static 'vector :x -839274.5 :y 82644.99 :z 4248723.5) + :rot 40510.715 + :start-frame 6.0 + :skel 'bonelurker + ) + (new 'static 'army-info + :pos (new 'static 'vector :x -871485.44 :y 85909.51 :z 4243181.5) + :rot 37046.043 + :start-frame 12.0 + :skel 'bonelurker + ) + (new 'static 'army-info + :pos (new 'static 'vector :x -947523.56 :y 85835.77 :z 4219314.0) + :rot 26980.078 + :start-frame 18.0 + :skel 'bonelurker + ) + ) + ) ;; definition for function evilsib-trans-hook-hover ;; INFO: Return type mismatch int vs none. diff --git a/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc b/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc index d3d69dd1cc..ed54ae5dc8 100644 --- a/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc +++ b/test/decompiler/reference/jak1/levels/ogre/ogre-obs_REF.gc @@ -1154,9 +1154,7 @@ ) ;; definition for symbol *ogre-bridge-joint-array*, type (array uint8) -(define *ogre-bridge-joint-array* - (the-as (array uint8) (new 'static 'boxed-array :type uint8 #x4 #x9 #xc #x11 #x7 #xa #xf #x12)) - ) +(define *ogre-bridge-joint-array* (new 'static 'boxed-array :type uint8 #x4 #x9 #xc #x11 #x7 #xa #xf #x12)) ;; definition for method 11 of type ogre-bridge ;; INFO: Return type mismatch object vs none. diff --git a/test/decompiler/reference/jak2/engine/anim/joint-mod-h_REF.gc b/test/decompiler/reference/jak2/engine/anim/joint-mod-h_REF.gc index 27abd1f900..ab8c1d077b 100644 --- a/test/decompiler/reference/jak2/engine/anim/joint-mod-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/joint-mod-h_REF.gc @@ -156,7 +156,7 @@ ;; definition (debug) for function joint-mod-debug-draw ;; WARN: Return type mismatch int vs none. (defun-debug joint-mod-debug-draw ((arg0 joint-mod)) - (add-debug-matrix #t (bucket-id bucket-318) (-> arg0 joint bone transform) (meters 2.0)) + (add-debug-matrix #t (bucket-id debug-no-zbuf1) (-> arg0 joint bone transform) (meters 2.0)) 0 (none) ) diff --git a/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc b/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc index cd893fd57d..926b1d0722 100644 --- a/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc +++ b/test/decompiler/reference/jak2/engine/anim/joint-mod_REF.gc @@ -1004,7 +1004,7 @@ (if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> gp-0 target) (meters 0.2) "look" @@ -1131,7 +1131,7 @@ (if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> gp-0 target) (meters 0.2) "look" @@ -1248,7 +1248,7 @@ (if (and (= (-> gp-0 process type) target) (!= (-> gp-0 blend) 0.0)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> gp-0 target) (meters 0.2) "look" diff --git a/test/decompiler/reference/jak2/engine/camera/cam-debug_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-debug_REF.gc index 84772da69d..c94c020f69 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-debug_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-debug_REF.gc @@ -269,7 +269,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) a2-0 (the-as (pointer dma-tag) a3-16) ) @@ -754,7 +754,7 @@ (new 'static 'vector :z 1024.0) (-> *cam-debug-los-tri* gp-1 intersect) (-> *cam-debug-los-tri* gp-1 color) - (the-as meters #x44800000) + (meters 0.25) ) ) ) @@ -780,7 +780,7 @@ (new 'static 'vector :z 1024.0) (-> *cam-debug-coll-tri* gp-2 intersect) (-> *cam-debug-coll-tri* gp-2 color) - (the-as meters #x44800000) + (meters 0.25) ) ) #f @@ -1037,7 +1037,7 @@ (new 'static 'vector :z 1024.0) s3-0 (new 'static 'vector4w :x #xff :w #x80) - (the-as meters #x44800000) + (meters 0.25) ) (tracking-spline-method-19 obj (-> obj sample-len) s3-0 (the-as tracking-spline-sampler #f)) (camera-cross @@ -1045,7 +1045,7 @@ (new 'static 'vector :z 1024.0) s3-0 (new 'static 'vector4w :x #xff :w #x80) - (the-as meters #x44800000) + (meters 0.25) ) ) ) @@ -1065,7 +1065,7 @@ (new 'static 'vector :z 1024.0) (the-as vector (-> obj point s5-0)) (new 'static 'vector4w :x #xff :w #x80) - (the-as meters #x44800000) + (meters 0.25) ) ) ) @@ -1202,7 +1202,7 @@ (new 'static 'vector :z 1024.0) (-> *setting-control* cam-current point-of-interest) (new 'static 'vector4w :x #x80 :z #x80 :w #x80) - (the-as meters #x44800000) + (meters 0.25) ) ) (let ((f30-0 (* 0.5 (-> *camera-combiner* fov)))) @@ -1558,7 +1558,15 @@ (set! (-> a0-3 w) 1.0) (vector+! a1-4 v1-4 a0-3) ) - (add-debug-line #t (bucket-id bucket-318) gp-0 s5-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line + #t + (bucket-id debug-no-zbuf1) + gp-0 + s5-0 + (new 'static 'rgba :r #xff :a #x80) + #f + (the-as rgba -1) + ) (let ((a1-7 s5-0) (v1-5 gp-0) (a0-5 s5-0) @@ -1569,7 +1577,15 @@ (set! (-> a0-5 w) 1.0) (vector+! a1-7 v1-5 a0-5) ) - (add-debug-line #t (bucket-id bucket-318) gp-0 s5-0 (new 'static 'rgba :g #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line + #t + (bucket-id debug-no-zbuf1) + gp-0 + s5-0 + (new 'static 'rgba :g #xff :a #x80) + #f + (the-as rgba -1) + ) (let ((a1-10 s5-0) (v1-6 gp-0) (a0-7 s5-0) @@ -1580,14 +1596,22 @@ (set! (-> a0-7 w) 1.0) (vector+! a1-10 v1-6 a0-7) ) - (add-debug-line #t (bucket-id bucket-318) gp-0 s5-0 (new 'static 'rgba :b #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line + #t + (bucket-id debug-no-zbuf1) + gp-0 + s5-0 + (new 'static 'rgba :b #xff :a #x80) + #f + (the-as rgba -1) + ) (when arg0 (set! (-> s5-0 quad) (-> arg0 quad)) (vector-normalize! s5-0 4096.0) (vector+! s5-0 gp-0 s5-0) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) gp-0 s5-0 (new 'static 'rgba :r #x7f :g #x7f :a #x80) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc index 88aeb3c12f..89d00ed047 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-layout_REF.gc @@ -310,7 +310,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id bucket-324) + (bucket-id debug2) gp-0 (the-as (pointer dma-tag) a3-2) ) @@ -745,7 +745,7 @@ (new 'static 'vector :z 1024.0) s5-0 (-> arg1 color) - (the-as meters #x45800000) + (meters 1.0) ) ) (none) @@ -774,7 +774,7 @@ (new 'static 'vector :z 1024.0) s5-0 (-> arg1 color) - (the-as meters #x45800000) + (meters 1.0) ) ) (none) @@ -806,7 +806,7 @@ (new 'static 'vector :z 1024.0) s5-1 (new 'static 'vector4w :x #x80 :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -819,7 +819,7 @@ (new 'static 'vector :z 1024.0) s5-2 (new 'static 'vector4w :y #x80 :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -834,7 +834,7 @@ (new 'static 'vector :z 1024.0) s5-3 (new 'static 'vector4w :x #x80 :z #x80 :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -885,7 +885,7 @@ (new 'static 'vector :z 1024.0) s5-4 (new 'static 'vector4w :x #xff :y #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -928,7 +928,7 @@ (new 'static 'vector :z 1024.0) s5-5 (new 'static 'vector4w :z #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) (curve-get-pos! s5-5 (cam-slave-get-float arg0 'intro-exitValue 0.0) s3-2) (vector+! s5-5 s5-5 s4-2) @@ -937,7 +937,7 @@ (new 'static 'vector :z 1024.0) s5-5 (new 'static 'vector4w :z #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -967,7 +967,7 @@ (new 'static 'vector :z 1024.0) s5-6 (new 'static 'vector4w :x #xff :y #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) @@ -993,7 +993,7 @@ (new 'static 'vector :z 1024.0) s5-7 (new 'static 'vector4w :y #xff :z #xff :w #x80) - (the-as meters #x45800000) + (meters 1.0) ) ) ) diff --git a/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc b/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc index 17fe8edff5..43cd9820bc 100644 --- a/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc +++ b/test/decompiler/reference/jak2/engine/camera/cam-states_REF.gc @@ -1333,7 +1333,7 @@ (let ((t1-0 #x40000080)) (add-debug-flat-triangle #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (the-as vector (-> (the-as (inline-array collide-cache-tri) gp-0) 0)) (-> (the-as (inline-array collide-cache-tri) gp-0) 0 vertex 1) (-> (the-as (inline-array collide-cache-tri) gp-0) 0 vertex 2) diff --git a/test/decompiler/reference/jak2/engine/debug/debug_REF.gc b/test/decompiler/reference/jak2/engine/debug/debug_REF.gc index 107318da4d..2b228a3214 100644 --- a/test/decompiler/reference/jak2/engine/debug/debug_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/debug_REF.gc @@ -1644,7 +1644,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id bucket-324) + (bucket-id debug2) tag-start (the-as (pointer dma-tag) tag-end) ) @@ -1799,7 +1799,7 @@ (if (!= (+ i 1) (-> history h-first)) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> history points i) (-> history points (+ i 1)) (new 'static 'rgba :r #x80 :g #xc0 :b #x80 :a #x80) diff --git a/test/decompiler/reference/jak2/engine/debug/default-menu_REF.gc b/test/decompiler/reference/jak2/engine/debug/default-menu_REF.gc index 6cd3ea5edc..90aa9125b0 100644 --- a/test/decompiler/reference/jak2/engine/debug/default-menu_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/default-menu_REF.gc @@ -1249,8 +1249,8 @@ (string= (the-as string s5-1) "outro-nest") ) ) - (set! (-> palout memory-mode) (the-as uint 4)) - (set! (-> hiphog memory-mode) (the-as uint 1)) + (set! (-> palout memory-mode) (load-buffer-mode borrow)) + (set! (-> hiphog memory-mode) (load-buffer-mode small-center)) ) (process-spawn scene-player :init scene-player-init s5-1 #t (car arg0)) ) @@ -3459,11 +3459,11 @@ #f (lambda ((arg0 object) (arg1 debug-menu-msg)) (if (= arg1 (debug-menu-msg press)) - (set! (-> *setting-control* user-default unknown-uint32-00) - (the-as uint (not (-> *setting-control* user-default unknown-uint32-00))) + (set! (-> *setting-control* user-default use-progressive-scan) + (not (-> *setting-control* user-default use-progressive-scan)) ) ) - (-> *setting-control* user-default unknown-uint32-00) + (the-as uint (-> *setting-control* user-default use-progressive-scan)) ) ) (flag diff --git a/test/decompiler/reference/jak2/engine/debug/editable_REF.gc b/test/decompiler/reference/jak2/engine/debug/editable_REF.gc index 78776a97e7..6537ebf917 100644 --- a/test/decompiler/reference/jak2/engine/debug/editable_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/editable_REF.gc @@ -118,7 +118,7 @@ (defmethod editable-region-method-11 editable-region ((obj editable-region) (arg0 vector) (arg1 int)) (local-vars (sv-32 vector2h)) (set! sv-32 (new 'stack 'vector2h)) - (add-debug-x #t (bucket-id bucket-318) arg0 (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0))) + (add-debug-x #t (bucket-id debug-no-zbuf1) arg0 (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0))) (let ((s3-0 add-debug-text-3d) (s2-0 #t) (s1-0 318) @@ -329,12 +329,12 @@ (let ((s5-0 (new 'stack-no-clear 'vector))) (when (editable-method-11 obj s5-0) (set! (-> s5-0 y) (-> s5-0 y)) - (add-debug-x #t (bucket-id bucket-318) s5-0 (the-as rgba (-> (new 'static 'array uint64 1 #x80ffffff) 0))) + (add-debug-x #t (bucket-id debug-no-zbuf1) s5-0 (the-as rgba (-> (new 'static 'array uint64 1 #x80ffffff) 0))) ) ) (add-debug-x #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (edit-get-trans obj) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) @@ -689,7 +689,7 @@ ) ) (add-debug-sphere-from-table - (bucket-id bucket-324) + (bucket-id debug2) (-> obj trans) (-> obj radius) (get-color obj (the-as int a1-0)) @@ -1014,7 +1014,7 @@ (if (!= (-> obj direction w) 0.0) (add-debug-vector #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (edit-get-trans obj) (-> obj direction) (* -1.2 (-> obj radius)) @@ -1628,10 +1628,10 @@ (let ((s1-0 (editable-face-method-31 obj (new 'stack-no-clear 'vector)))) (add-debug-vector #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (edit-get-trans obj) s1-0 - (the-as meters #x46000000) + (meters 2.0) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) ) @@ -2134,7 +2134,7 @@ (when (>= s4-0 3) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (edit-get-trans (-> obj vertex 0)) (edit-get-trans (-> obj vertex 1)) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) diff --git a/test/decompiler/reference/jak2/engine/debug/menu_REF.gc b/test/decompiler/reference/jak2/engine/debug/menu_REF.gc index a1f1f81c53..68b5c94dcf 100644 --- a/test/decompiler/reference/jak2/engine/debug/menu_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/menu_REF.gc @@ -954,7 +954,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s4-0 (the-as (pointer dma-tag) a3-1) ) @@ -1004,7 +1004,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s5-0 (the-as (pointer dma-tag) a3-1) ) @@ -1054,7 +1054,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s5-0 (the-as (pointer dma-tag) a3-1) ) @@ -1123,7 +1123,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s4-0 (the-as (pointer dma-tag) a3-1) ) @@ -1197,7 +1197,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) s1-0 (the-as (pointer dma-tag) a3-2) ) @@ -1234,7 +1234,7 @@ ) (dma-bucket-insert-tag (-> *display* frames (-> *display* on-screen) bucket-group) - (bucket-id debug-unknown-326) + (bucket-id debug3) sv-32 (the-as (pointer dma-tag) a3-3) ) diff --git a/test/decompiler/reference/jak2/engine/dma/dma-disasm_REF.gc b/test/decompiler/reference/jak2/engine/dma/dma-disasm_REF.gc index 3ebf1697c0..c467d2a0af 100644 --- a/test/decompiler/reference/jak2/engine/dma/dma-disasm_REF.gc +++ b/test/decompiler/reference/jak2/engine/dma/dma-disasm_REF.gc @@ -37,169 +37,167 @@ ;; definition for symbol *vif-disasm-table*, type (array vif-disasm-element) (define *vif-disasm-table* - (the-as (array vif-disasm-element) - (new 'static 'boxed-array :type vif-disasm-element - (new 'static 'vif-disasm-element :mask #x7f :string1 "nop") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stcycl) :print #x2 :string1 "stcycl") - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 offset) - :print #x1 - :string1 "offset" - :string2 "offset" - ) - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 base) :print #x1 :string1 "base" :string2 "base") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 itop) :print #x1 :string1 "itop" :string2 "addr") - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 stmod) - :print #x1 - :string1 "stmod" - :string2 "mode" - ) - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 mskpath3) - :print #x1 - :string1 "mskpath3" - :string2 "mask" - ) - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mark) :print #x1 :string1 "mark" :string2 "mark") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flushe) :string1 "flushe") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flush) :string1 "flush") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flusha) :string1 "flusha") - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 mscal) - :print #x1 - :string1 "mscal" - :string2 "addr" - ) - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscnt) :string1 "mscnt") - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 mscalf) - :print #x1 - :string1 "mscalf" - :string2 "addr" - ) - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 stmask) - :print #x3 - :string1 "stmask" - :string2 "mask" - ) - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 strow) - :print #x4 - :string1 "strow" - :string2 "row" - ) - (new 'static 'vif-disasm-element - :mask #x7f - :tag (vif-cmd-32 stcol) - :print #x4 - :string1 "stcol" - :string2 "col" - ) - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mpg) :print #x5 :string1 "mpg") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 direct) :print #x6 :string1 "direct") - (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 directhl) :print #x6 :string1 "directhl") - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-s-32) - :val #x10 - :print #x7 - :string1 "unpack-s-32" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-s-16) - :val #x8 - :print #x7 - :string1 "unpack-s-16" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-s-8) - :val #x4 - :print #x7 - :string1 "unpack-s-8" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v2-32) - :val #x8 - :print #x7 - :string1 "unpack-v2-32" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v2-16) - :val #x4 - :print #x7 - :string1 "unpack-v2-16" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v2-8) - :val #x2 - :print #x7 - :string1 "unpack-v2-8" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v3-32) - :val #xc - :print #x7 - :string1 "unpack-v3-32" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v3-16) - :val #x6 - :print #x7 - :string1 "unpack-v3-16" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v3-8) - :val #x3 - :print #x7 - :string1 "unpack-v3-8" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v4-32) - :val #x10 - :print #x7 - :string1 "unpack-v4-32" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v4-16) - :val #x8 - :print #x7 - :string1 "unpack-v4-16" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v4-8) - :val #x4 - :print #x7 - :string1 "unpack-v4-8" - ) - (new 'static 'vif-disasm-element - :mask #x6f - :tag (vif-cmd-32 unpack-v4-5) - :val #x2 - :print #x7 - :string1 "unpack-v4-5" - ) - (new 'static 'vif-disasm-element :print #x8) + (new 'static 'boxed-array :type vif-disasm-element + (new 'static 'vif-disasm-element :mask #x7f :string1 "nop") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 stcycl) :print #x2 :string1 "stcycl") + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 offset) + :print #x1 + :string1 "offset" + :string2 "offset" ) + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 base) :print #x1 :string1 "base" :string2 "base") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 itop) :print #x1 :string1 "itop" :string2 "addr") + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 stmod) + :print #x1 + :string1 "stmod" + :string2 "mode" + ) + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 mskpath3) + :print #x1 + :string1 "mskpath3" + :string2 "mask" + ) + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mark) :print #x1 :string1 "mark" :string2 "mark") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flushe) :string1 "flushe") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flush) :string1 "flush") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 flusha) :string1 "flusha") + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 mscal) + :print #x1 + :string1 "mscal" + :string2 "addr" + ) + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mscnt) :string1 "mscnt") + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 mscalf) + :print #x1 + :string1 "mscalf" + :string2 "addr" + ) + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 stmask) + :print #x3 + :string1 "stmask" + :string2 "mask" + ) + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 strow) + :print #x4 + :string1 "strow" + :string2 "row" + ) + (new 'static 'vif-disasm-element + :mask #x7f + :tag (vif-cmd-32 stcol) + :print #x4 + :string1 "stcol" + :string2 "col" + ) + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 mpg) :print #x5 :string1 "mpg") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 direct) :print #x6 :string1 "direct") + (new 'static 'vif-disasm-element :mask #x7f :tag (vif-cmd-32 directhl) :print #x6 :string1 "directhl") + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-s-32) + :val #x10 + :print #x7 + :string1 "unpack-s-32" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-s-16) + :val #x8 + :print #x7 + :string1 "unpack-s-16" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-s-8) + :val #x4 + :print #x7 + :string1 "unpack-s-8" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v2-32) + :val #x8 + :print #x7 + :string1 "unpack-v2-32" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v2-16) + :val #x4 + :print #x7 + :string1 "unpack-v2-16" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v2-8) + :val #x2 + :print #x7 + :string1 "unpack-v2-8" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v3-32) + :val #xc + :print #x7 + :string1 "unpack-v3-32" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v3-16) + :val #x6 + :print #x7 + :string1 "unpack-v3-16" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v3-8) + :val #x3 + :print #x7 + :string1 "unpack-v3-8" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v4-32) + :val #x10 + :print #x7 + :string1 "unpack-v4-32" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v4-16) + :val #x8 + :print #x7 + :string1 "unpack-v4-16" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v4-8) + :val #x4 + :print #x7 + :string1 "unpack-v4-8" + ) + (new 'static 'vif-disasm-element + :mask #x6f + :tag (vif-cmd-32 unpack-v4-5) + :val #x2 + :print #x7 + :string1 "unpack-v4-5" + ) + (new 'static 'vif-disasm-element :print #x8) ) ) diff --git a/test/decompiler/reference/jak2/engine/entity/entity-h_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity-h_REF.gc index 88eca62a06..df88ed5e27 100644 --- a/test/decompiler/reference/jak2/engine/entity/entity-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/entity-h_REF.gc @@ -31,7 +31,7 @@ :size-assert #x10 :flag-assert #xa00000010 (:methods - (entity-perm-method-9 () none 9) + (update-perm! (_type_ symbol entity-perm-status) _type_ 9) ) ) @@ -81,7 +81,7 @@ :size-assert #x40 :flag-assert #xa00000040 (:methods - (entity-links-method-9 () none 9) + (birth? (_type_ vector) symbol 9) ) ) @@ -230,11 +230,11 @@ :size-assert #x34 :flag-assert #x1b00000034 (:methods - (entity-method-22 (_type_) _type_ 22) + (birth! (_type_) _type_ 22) (kill! (_type_) _type_ 23) - (entity-method-24 () none 24) - (entity-method-25 () none 25) - (entity-method-26 () none 26) + (add-to-level! (_type_ level-group level actor-id) none 24) + (remove-from-level! (_type_ level-group) _type_ 25) + (get-level (_type_) level 26) ) ) @@ -287,8 +287,8 @@ (:methods (next-actor (_type_) entity-actor 27) (prev-actor (_type_) entity-actor 28) - (entity-actor-method-29 () none 29) - (entity-actor-method-30 (_type_ entity-perm-status symbol) none 30) + (debug-print (_type_ symbol type) none 29) + (toggle-status (_type_ entity-perm-status symbol) none 30) (entity-actor-method-31 (_type_ vector vector vector object float) nav-mesh 31) (entity-actor-method-32 (_type_ vector vector nav-poly float) nav-poly 32) ) @@ -296,9 +296,10 @@ ;; definition of type actor-reference (deftype actor-reference (structure) - ((actor basic :offset-assert 0) + ((actor entity :offset-assert 0) (id uint32 :offset-assert 4) ) + :pack-me :method-count-assert 9 :size-assert #x8 :flag-assert #x900000008 @@ -327,6 +328,7 @@ ) ;; definition for method 3 of type actor-group +;; INFO: this function exists in multiple non-identical object files (defmethod inspect actor-group ((obj actor-group)) (when (not obj) (set! obj obj) diff --git a/test/decompiler/reference/jak2/engine/entity/entity-table_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity-table_REF.gc index e665f75eb5..9c3419ce18 100644 --- a/test/decompiler/reference/jak2/engine/entity/entity-table_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/entity-table_REF.gc @@ -2,191 +2,190 @@ (in-package goal) ;; definition for symbol *entity-info*, type (array entity-info) -(define *entity-info* (the-as (array entity-info) (new 'static 'boxed-array :type entity-info - (new 'static 'entity-info - :ptype (type-ref stadium-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref citywide-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctywide-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref tomb-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctyslumb-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctygena-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctyindb-part :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref jellyfish :method-count 167) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x10000 - ) - (new 'static 'entity-info - :ptype (type-ref widow :method-count 47) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x10000 - ) - (new 'static 'entity-info - :ptype (type-ref nav-graph :method-count 47) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref pal-electric-fan :method-count 23) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x6000 - ) - (new 'static 'entity-info - :ptype (type-ref lurker-pipe-lid :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref ctyn-lamp :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref burning-bush :method-count 35) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref sail-boat-a :method-count 179) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref barge :method-count 151) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref propa :method-count 35) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref city-window-a :method-count 179) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref cty-window-a :method-count 179) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref parking-spot :method-count 27) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref security-wall :method-count 27) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref cty-guard-turret :method-count 39) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref cty-fruit-stand :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref fruit-stand :method-count 31) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref torn :method-count 179) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x4000 - ) - (new 'static 'entity-info - :ptype (type-ref neon-baron :method-count 19) - :package "game" - :art-group '() - :pool '*16k-dead-pool* - :heap-size #x10000 - ) - ) - ) +(define *entity-info* (new 'static 'boxed-array :type entity-info + (new 'static 'entity-info + :ptype (type-ref stadium-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref citywide-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctywide-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref tomb-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctyslumb-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctygena-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctyindb-part :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref jellyfish :method-count 167) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x10000 + ) + (new 'static 'entity-info + :ptype (type-ref widow :method-count 47) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x10000 + ) + (new 'static 'entity-info + :ptype (type-ref nav-graph :method-count 47) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref pal-electric-fan :method-count 23) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x6000 + ) + (new 'static 'entity-info + :ptype (type-ref lurker-pipe-lid :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref ctyn-lamp :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref burning-bush :method-count 35) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref sail-boat-a :method-count 179) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref barge :method-count 151) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref propa :method-count 35) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref city-window-a :method-count 179) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref cty-window-a :method-count 179) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref parking-spot :method-count 27) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref security-wall :method-count 27) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref cty-guard-turret :method-count 39) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref cty-fruit-stand :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref fruit-stand :method-count 31) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref torn :method-count 179) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x4000 + ) + (new 'static 'entity-info + :ptype (type-ref neon-baron :method-count 19) + :package "game" + :art-group '() + :pool '*16k-dead-pool* + :heap-size #x10000 + ) + ) ) ;; definition for function entity-info-lookup diff --git a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc new file mode 100644 index 0000000000..abb4c0e865 --- /dev/null +++ b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc @@ -0,0 +1,2737 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *spawn-actors*, type symbol +(define *spawn-actors* #t) + +;; definition for symbol *compact-actors*, type symbol +(define *compact-actors* #t) + +;; definition for symbol *vis-actors*, type symbol +(define *vis-actors* #t) + +;; definition for method 8 of type drawable-actor +;; WARN: Return type mismatch int vs drawable-actor. +(defmethod mem-usage drawable-actor ((obj drawable-actor) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 44 (-> arg0 length))) + (set! (-> arg0 data 43 name) "entity") + (+! (-> arg0 data 43 count) 1) + (let ((v1-6 (asize-of obj))) + (+! (-> arg0 data 43 used) v1-6) + (+! (-> arg0 data 43 total) (logand -16 (+ v1-6 15))) + ) + (mem-usage (-> obj actor) arg0 (logior arg1 64)) + (the-as drawable-actor 0) + ) + +;; definition for method 8 of type drawable-inline-array-actor +;; WARN: Return type mismatch int vs drawable-inline-array-actor. +(defmethod mem-usage drawable-inline-array-actor ((obj drawable-inline-array-actor) (arg0 memory-usage-block) (arg1 int)) + (set! (-> arg0 length) (max 1 (-> arg0 length))) + (set! (-> arg0 data 0 name) (symbol->string 'drawable-group)) + (+! (-> arg0 data 0 count) 1) + (let ((v1-7 32)) + (+! (-> arg0 data 0 used) v1-7) + (+! (-> arg0 data 0 total) (logand -16 (+ v1-7 15))) + ) + (dotimes (s3-0 (-> obj length)) + (mem-usage (-> obj data s3-0) arg0 arg1) + ) + (the-as drawable-inline-array-actor 0) + ) + +;; definition for method 2 of type entity-links +(defmethod print entity-links ((obj entity-links)) + (format #t "#" (-> obj process) obj) + obj + ) + +;; definition for method 2 of type entity-perm +(defmethod print entity-perm ((obj entity-perm)) + (format + #t + "#" + (-> obj aid) + (-> obj task) + (-> obj status) + (-> obj user-uint64) + obj + ) + obj + ) + +;; definition for method 2 of type actor-group +(defmethod print actor-group ((obj actor-group)) + (format #t "# obj length)) + (format #t " ~A" (-> obj data s5-0 actor)) + ) + (format #t " @ #x~X>" obj) + obj + ) + +;; definition for method 3 of type actor-group +;; INFO: this function exists in multiple non-identical object files +(defmethod inspect actor-group ((obj actor-group)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tlength: ~D~%" (-> obj length)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tdata[~D]: @ #x~X~%" (-> obj length) (-> obj data)) + (dotimes (s5-0 (-> obj length)) + (format #t "~T [~D] ~A / ~D~%" s5-0 (-> obj data s5-0 actor) (-> obj data s5-0 id)) + ) + obj + ) + +;; definition for method 22 of type entity +(defmethod birth! entity ((obj entity)) + (format #t "birth ~A~%" obj) + obj + ) + +;; definition for method 23 of type entity +(defmethod kill! entity ((obj entity)) + (format #t "kill ~A~%" obj) + obj + ) + +;; definition for method 2 of type entity +(defmethod print entity ((obj entity)) + (format #t "#<~A :name ~S @ #x~X>" (-> obj type) (res-lump-struct obj 'name structure) obj) + obj + ) + +;; definition for method 26 of type entity +(defmethod get-level entity ((obj entity)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (if (and (>= (the-as int obj) (the-as int (-> a1-3 heap base))) + (< (the-as int obj) (the-as int (-> a1-3 heap top-base))) + ) + (return a1-3) + ) + ) + ) + ) + (-> *level* default-level) + ) + +;; definition for function entity-by-name +(defun entity-by-name ((arg0 string)) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (let ((s3-0 (-> s4-0 bsp actors))) + (when (nonzero? s3-0) + (dotimes (s2-0 (-> s3-0 length)) + (let ((s1-0 (-> s3-0 data s2-0 actor))) + (if (string= (res-lump-struct s1-0 'name string) arg0) + (return s1-0) + ) + ) + ) + ) + ) + (let ((s3-1 (-> s4-0 bsp nav-meshes))) + (when (nonzero? s3-1) + (dotimes (s2-1 (-> s3-1 length)) + (let ((s1-1 (-> s3-1 s2-1))) + (if (string= (res-lump-struct s1-1 'name string) arg0) + (return s1-1) + ) + ) + ) + ) + ) + (let ((s3-2 (-> s4-0 bsp race-meshes))) + (when (nonzero? s3-2) + (dotimes (s2-2 (-> s3-2 length)) + (let ((s1-2 (-> s3-2 s2-2))) + (if (string= (res-lump-struct s1-2 'name string) arg0) + (return s1-2) + ) + ) + ) + ) + ) + (let ((s4-1 (-> s4-0 bsp cameras))) + (when (nonzero? s4-1) + (dotimes (s3-3 (-> s4-1 length)) + (let ((s2-3 (-> s4-1 s3-3))) + (if (string= (res-lump-struct s2-3 'name string) arg0) + (return s2-3) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity #f) + ) + +;; definition for function entity-by-type +(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? s2-0 entity-actor) (= (-> s2-0 etype) arg0)) + (return s2-0) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity-actor #f) + ) + +;; definition for function entity-by-aid +(defun entity-by-aid ((arg0 uint)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (let ((a1-4 (-> a1-3 entity))) + (when (nonzero? a1-4) + (let ((a2-4 0) + (a3-2 (+ (-> a1-4 length) -1)) + ) + 0 + (while (>= a3-2 a2-4) + (let* ((t0-3 (+ a2-4 (/ (- a3-2 a2-4) 2))) + (t1-2 (-> a1-4 data t0-3)) + (t2-0 (-> t1-2 perm aid)) + ) + (cond + ((= t2-0 arg0) + (return (-> t1-2 entity)) + ) + ((< (the-as uint t2-0) arg0) + (set! a2-4 (+ t0-3 1)) + ) + (else + (set! a3-2 (+ t0-3 -1)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity #f) + ) + +;; definition for function entity-actor-from-level-name +;; WARN: Return type mismatch entity vs entity-actor. +(defun entity-actor-from-level-name ((arg0 level)) + (let ((v0-0 (the-as entity #f))) + (dotimes (s5-0 (-> *level* length)) + (let ((s4-0 (-> *level* level s5-0))) + (when (= (-> s4-0 status) 'active) + (when (= (-> s4-0 name) arg0) + (when (zero? (-> s4-0 entity length)) + (format 0 "ERROR: level ~s has no entities!!" (-> s4-0 name)) + (when *debug-segment* + (break!) + 0 + ) + ) + (set! v0-0 (-> s4-0 entity data 0 entity)) + ) + ) + ) + ) + (the-as entity-actor v0-0) + ) + ) + +;; definition for method 18 of type level-group +;; WARN: Return type mismatch int vs none. +(defmethod level-group-method-18 level-group ((obj level-group)) + (when (not (paused?)) + (dotimes (s5-0 (-> obj length)) + (let ((v1-4 (-> obj level s5-0))) + (when (= (-> v1-4 status) 'active) + (let ((s4-0 (-> v1-4 bsp nav-meshes))) + (when (nonzero? s4-0) + (dotimes (s3-0 (-> s4-0 length)) + (nav-mesh-method-26 (-> s4-0 s3-0 nav-mesh)) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function entity-nav-mesh-by-aid +(defun entity-nav-mesh-by-aid ((arg0 actor-id)) + (dotimes (v1-0 (-> *level* length)) + (let ((a1-3 (-> *level* level v1-0))) + (when (= (-> a1-3 status) 'active) + (let ((a1-5 (-> a1-3 bsp nav-meshes))) + (when (nonzero? a1-5) + (let ((a2-4 0) + (a3-2 (+ (-> a1-5 length) -1)) + ) + 0 + (while (>= a3-2 a2-4) + (let* ((t0-3 (+ a2-4 (/ (- a3-2 a2-4) 2))) + (t1-2 (-> a1-5 t0-3)) + (t2-0 (-> t1-2 aid)) + ) + (cond + ((= t2-0 arg0) + (return t1-2) + ) + ((< t2-0 (the-as uint arg0)) + (set! a2-4 (+ t0-3 1)) + ) + (else + (set! a3-2 (+ t0-3 -1)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity-nav-mesh #f) + ) + +;; definition for function nav-mesh-from-res-tag +(defun nav-mesh-from-res-tag ((arg0 entity) (arg1 symbol) (arg2 int)) + (let ((v1-1 (res-lump-data arg0 arg1 pointer)) + (gp-0 (the-as nav-mesh #f)) + ) + (when v1-1 + (let* ((s5-1 (entity-nav-mesh-by-aid (the-as actor-id (-> (the-as (pointer uint32) (&+ v1-1 (* arg2 4))))))) + (v1-3 (if (type? s5-1 entity-nav-mesh) + s5-1 + ) + ) + ) + (if v1-3 + (set! gp-0 (-> v1-3 nav-mesh)) + ) + ) + ) + gp-0 + ) + ) + +;; definition for function entity-by-meters +(defun entity-by-meters ((arg0 float) (arg1 float) (arg2 float)) + (dotimes (v1-0 (-> *level* length)) + (let ((a3-3 (-> *level* level v1-0))) + (when (= (-> a3-3 status) 'active) + (let ((a3-5 (-> a3-3 bsp actors))) + (when (nonzero? a3-5) + (dotimes (t0-4 (-> a3-5 length)) + (let* ((t1-3 (-> a3-5 data t0-4 actor)) + (t2-1 (-> t1-3 extra trans)) + ) + (if (and (= (the float (the int (-> t2-1 x))) arg0) + (= (the float (the int (-> t2-1 y))) arg1) + (= (the float (the int (-> t2-1 z))) arg2) + ) + (return t1-3) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity-actor #f) + ) + +;; definition for function process-by-ename +(defun process-by-ename ((arg0 string)) + (let ((v1-0 (entity-by-name arg0))) + (if v1-0 + (-> v1-0 extra process) + ) + ) + ) + +;; definition for function entity-process-count +(defun entity-process-count ((arg0 symbol)) + (let ((gp-0 0)) + (dotimes (s4-0 (-> *level* length)) + (let ((s3-0 (-> *level* level s4-0))) + (when (= (-> s3-0 status) 'active) + (let ((s2-0 (-> s3-0 bsp level entity))) + (dotimes (s1-0 (-> s2-0 length)) + (let ((v1-9 (-> s2-0 data s1-0 entity))) + (case arg0 + (('vis) + (if (is-object-visible? s3-0 (-> v1-9 extra vis-id)) + (+! gp-0 1) + ) + ) + (else + (if (-> v1-9 extra process) + (+! gp-0 1) + ) + ) + ) + ) + ) + ) + ) + ) + ) + gp-0 + ) + ) + +;; definition for function entity-count +(defun entity-count () + (let ((v0-0 0)) + (dotimes (v1-0 (-> *level* length)) + (let ((a0-3 (-> *level* level v1-0))) + (when (= (-> a0-3 status) 'active) + (let ((a0-6 (-> a0-3 bsp level entity))) + (dotimes (a1-3 (-> a0-6 length)) + (-> a0-6 data a1-3 entity) + (+! v0-0 1) + ) + ) + ) + ) + ) + v0-0 + ) + ) + +;; definition for function entity-remap-names +;; WARN: Return type mismatch int vs none. +(defun entity-remap-names ((arg0 pair)) + (let ((s5-0 (car arg0))) + (while (not (null? arg0)) + (let ((a0-2 (entity-by-meters + (the float (/ (the-as int (car (cdr s5-0))) 8)) + (the float (/ (the-as int (car (cdr (cdr s5-0)))) 8)) + (the float (/ (the-as int (car (cdr (cdr (cdr s5-0))))) 8)) + ) + ) + ) + (if a0-2 + (add-data! + a0-2 + (new 'static 'res-tag :name 'name :key-frame -1000000000.0 :elt-count #x1 :elt-type string) + (the-as pointer (car s5-0)) + ) + ) + ) + (set! arg0 (cdr arg0)) + (set! s5-0 (car arg0)) + ) + ) + 0 + (none) + ) + +;; definition (debug) for function process-status-bits +;; WARN: Return type mismatch int vs none. +(defun-debug process-status-bits ((arg0 process) (arg1 symbol)) + (let* ((s5-0 arg0) + (s3-0 (if (type? s5-0 process-drawable) + s5-0 + ) + ) + ) + (if (and s3-0 (zero? (-> (the-as process-drawable s3-0) draw))) + (set! s3-0 (the-as process #f)) + ) + (let ((s5-1 format) + (s4-0 "~C~C~C") + (a2-0 (if (and arg0 (zero? (logand (-> *kernel-context* prevent-from-run) (-> arg0 mask))) (run-logic? arg0)) + 114 + 32 + ) + ) + (a3-0 (if (and (the-as process-drawable s3-0) + (logtest? (-> (the-as process-drawable s3-0) draw status) (draw-control-status on-screen)) + ) + 100 + 32 + ) + ) + (t0-0 (cond + ((and (the-as process-drawable s3-0) + (logtest? (-> (the-as process-drawable s3-0) draw status) (draw-control-status on-screen)) + ) + (let ((v1-14 (-> (the-as process-drawable s3-0) draw cur-lod))) + (cond + ((zero? v1-14) + 48 + ) + ((= v1-14 1) + 49 + ) + ((= v1-14 2) + 50 + ) + ((= v1-14 3) + 51 + ) + ((= v1-14 4) + 52 + ) + ) + ) + ) + (else + 32 + ) + ) + ) + ) + (s5-1 arg1 s4-0 a2-0 a3-0 t0-0) + ) + ) + 0 + (none) + ) + +;; definition for function process-entity-set! +(defun process-entity-set! ((arg0 process) (arg1 entity)) + (set! (-> arg0 entity) arg1) + (if arg1 + (set! (-> arg0 level) (-> arg1 extra level)) + (set! (-> arg0 level) (-> *level* default-level)) + ) + arg1 + ) + +;; definition for function process-task-mask +(defun process-task-mask ((arg0 process)) + (-> arg0 level task-mask) + ) + +;; definition for method 2 of type process +;; INFO: this function exists in multiple non-identical object files +(defmethod print process ((obj process)) + (cond + ((and (-> obj top-thread) (!= (-> obj status) 'dead)) + (format #t "#<~A ~S ~A :state ~S :flags " (-> obj type) (-> obj name) (-> obj status) (if (-> obj state) + (-> obj state name) + ) + ) + (process-status-bits obj #t) + (format + #t + " :stack ~D/~D :heap ~D/~D @ #x~X>" + (&- (-> obj top-thread stack-top) (the-as uint (-> obj top-thread sp))) + (-> obj main-thread stack-size) + (- (-> obj allocated-length) (&- (-> obj heap-top) (the-as uint (-> obj heap-cur)))) + (-> obj allocated-length) + obj + ) + ) + (else + (format + #t + "#<~A ~S ~A :state ~S @ #x~X" + (-> obj type) + (-> obj name) + (-> obj status) + (if (-> obj state) + (-> obj state name) + ) + obj + ) + ) + ) + obj + ) + +;; definition for method 3 of type entity +(defmethod inspect entity ((obj entity)) + ((the-as (function entity entity) (find-parent-method entity 3)) obj) + (format #t "~Ttrans: ~`vector`P~%" (-> obj trans)) + (format #t "~Taid: ~D~%" (-> obj aid)) + obj + ) + +;; definition for method 3 of type entity-nav-mesh +(defmethod inspect entity-nav-mesh ((obj entity-nav-mesh)) + ((the-as (function object object) (find-parent-method entity-nav-mesh 3)) obj) + (format #t "~Tnav-mesh ~A~%" (-> obj nav-mesh)) + (if (and (-> obj nav-mesh) (nonzero? (-> obj nav-mesh))) + (inspect (-> obj nav-mesh)) + ) + obj + ) + +;; definition for method 3 of type entity-actor +(defmethod inspect entity-actor ((obj entity-actor)) + ((the-as (function entity entity) (find-parent-method entity-actor 3)) obj) + (format #t "~Tetype: ~A~%" (-> obj etype)) + (format #t "~Ttask: ~d~%" (-> obj task)) + (format #t "~Tkill-mask: #x~X : (" (-> obj kill-mask)) + (let ((s5-0 (-> obj kill-mask))) + (if (= (logand s5-0 (task-mask task0)) (task-mask task0)) + (format #t "task0 ") + ) + (if (= (logand s5-0 (task-mask task2)) (task-mask task2)) + (format #t "task2 ") + ) + (if (= (logand s5-0 (task-mask task4)) (task-mask task4)) + (format #t "task4 ") + ) + (if (= (logand s5-0 (task-mask task6)) (task-mask task6)) + (format #t "task6 ") + ) + (if (= (logand s5-0 (task-mask ctywide)) (task-mask ctywide)) + (format #t "ctywide ") + ) + (if (= (logand s5-0 (task-mask never)) (task-mask never)) + (format #t "never ") + ) + (if (= (logand (task-mask movie1) s5-0) (task-mask movie1)) + (format #t "movie1 ") + ) + (if (= (logand s5-0 (task-mask dummy1)) (task-mask dummy1)) + (format #t "dummy1 ") + ) + (if (= (logand s5-0 (task-mask primary0)) (task-mask primary0)) + (format #t "primary0 ") + ) + (if (= (logand s5-0 (task-mask task1)) (task-mask task1)) + (format #t "task1 ") + ) + (if (= (logand s5-0 (task-mask task3)) (task-mask task3)) + (format #t "task3 ") + ) + (if (= (logand s5-0 (task-mask task5)) (task-mask task5)) + (format #t "task5 ") + ) + (if (= (logand s5-0 (task-mask task7)) (task-mask task7)) + (format #t "task7 ") + ) + (if (= (logand (task-mask movie2) s5-0) (task-mask movie2)) + (format #t "movie2 ") + ) + (if (= (logand s5-0 (task-mask dummy2)) (task-mask dummy2)) + (format #t "dummy2 ") + ) + (if (= (logand s5-0 (task-mask done)) (task-mask done)) + (format #t "done ") + ) + (if (= (logand s5-0 (task-mask special)) (task-mask special)) + (format #t "special ") + ) + (if (= (logand (task-mask movie0) s5-0) (task-mask movie0)) + (format #t "movie0 ") + ) + (if (= (logand s5-0 (task-mask dummy0)) (task-mask dummy0)) + (format #t "dummy0 ") + ) + ) + (format #t ")~%") + (format #t "~Tvis-id: ~d~%" (-> obj vis-id)) + (format #t "~Tquat: ~`vector`P~%" (-> obj quat)) + obj + ) + +;; definition for method 29 of type entity-actor +;; WARN: Return type mismatch entity-actor vs none. +(defmethod debug-print entity-actor ((obj entity-actor) (arg0 symbol) (arg1 type)) + (let ((s4-0 (-> obj etype))) + (when (or (not arg1) (and s4-0 (valid? s4-0 type #f #f 0) (type-type? s4-0 arg1))) + (format #t "~5D #x~8X ~-26S" (-> obj extra vis-id) obj (res-lump-struct obj 'name structure)) + (let ((t9-4 format) + (a0-5 #t) + (a1-5 "~8D ~3D ~-8S #x~4X") + (a2-4 (-> obj extra perm aid)) + (a3-3 (-> obj extra perm task)) + (t0-3 (the-as object (-> obj extra level nickname))) + ) + (set! t0-3 (cond + ((the-as string t0-3) + (empty) + t0-3 + ) + (else + (-> obj extra level name) + ) + ) + ) + (t9-4 a0-5 a1-5 a2-4 a3-3 t0-3 (-> obj extra perm status)) + ) + (if (= arg0 'entity-meters) + (format #t " :trans ~14m ~14m ~14m " (-> obj extra trans x) (-> obj extra trans y) (-> obj extra trans z)) + (format #t " :trans ~14f ~14f ~14f " (-> obj extra trans x) (-> obj extra trans y) (-> obj extra trans z)) + ) + (let* ((s3-2 (-> obj extra process)) + (s4-2 (if (type? s3-2 process-drawable) + s3-2 + ) + ) + ) + (format + #t + ":pr #x~8X ~-12S ~-21S ~-5S/~-5S " + (if (-> obj extra process) + (-> obj extra process) + 0 + ) + (if (-> obj extra process) + (-> obj extra process name) + "" + ) + (if (and (-> obj extra process) (-> obj extra process state)) + (-> obj extra process state name) + "" + ) + (if (-> obj extra process) + (* (- (-> obj extra process allocated-length) + (&- (-> obj extra process heap-top) (the-as uint (-> obj extra process heap-cur))) + ) + 8 + ) + "" + ) + (if (-> obj extra process) + (* (-> obj extra process allocated-length) 8) + "" + ) + ) + (process-status-bits s4-2 #t) + ) + (format #t "~%") + (if (= arg0 'entity-perm) + (format #t " ~`entity-perm`P~%" (-> obj extra perm)) + ) + ) + ) + (none) + ) + +;; definition for method 14 of type level-group +;; WARN: Return type mismatch int vs none. +(defmethod debug-print-entities level-group ((obj level-group) (arg0 symbol) (arg1 type)) + (let ((t9-0 format) + (a0-1 #t) + (a1-1 + " id address name aid tsk lev status x y z address name state heap flags~%" + ) + ) + 0 + 0 + 0 + (t9-0 a0-1 a1-1) + ) + (dotimes (s3-0 (-> obj length)) + (let ((s2-0 (-> obj level s3-0))) + (when (= (-> s2-0 status) 'active) + (case arg0 + (('art-group) + (format #t "level ~A~%" (-> s2-0 name)) + (dotimes (s1-0 (-> s2-0 art-group art-group-array length)) + (format #t "~T~2D ~S~%" s1-0 (-> s2-0 art-group art-group-array s1-0 name)) + ) + ) + (else + (let ((s2-1 (-> s2-0 bsp level entity))) + (dotimes (s1-1 (-> s2-1 length)) + (debug-print (the-as entity-actor (-> s2-1 data s1-1 entity)) arg0 arg1) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 24 of type entity-actor +;; INFO: Used lq/sq +;; WARN: Return type mismatch entity-actor vs none. +(defmethod add-to-level! entity-actor ((obj entity-actor) (arg0 level-group) (arg1 level) (arg2 actor-id)) + (let ((v1-4 (-> arg1 entity data (-> arg1 entity length)))) + (+! (-> arg1 entity length) 1) + (set! (-> v1-4 process) #f) + (set! (-> v1-4 entity) obj) + (set! (-> obj extra) v1-4) + (cond + ((-> arg0 entity-link) + (let* ((a0-6 (-> arg0 entity-link)) + (t0-1 (-> a0-6 next-link)) + ) + (set! (-> a0-6 next-link) v1-4) + (set! (-> v1-4 prev-link) a0-6) + (set! (-> v1-4 next-link) t0-1) + (set! (-> t0-1 prev-link) v1-4) + ) + ) + (else + (set! (-> v1-4 prev-link) v1-4) + (set! (-> v1-4 next-link) v1-4) + ) + ) + (set! (-> arg0 entity-link) v1-4) + (set! (-> v1-4 trans quad) (-> obj trans quad)) + ) + (set! (-> obj extra perm aid) arg2) + (set! (-> obj extra level) arg1) + (set! (-> obj extra kill-mask) + (logior (logand (-> obj kill-mask) + (task-mask + task0 + task1 + task2 + task3 + task4 + task5 + task6 + task7 + done + dummy0 + dummy1 + dummy2 + special + primary0 + ctywide + never + ) + ) + (logclear + (task-mask movie0 movie1 movie2 tm19 tm20 tm21 tm22 tm23 tm24 tm25 tm26 tm27 tm28 tm29 tm30 tm31) + (-> obj kill-mask) + ) + ) + ) + (if (not (-> arg1 vis-info 0)) + (set! (-> obj extra vis-dist) (res-lump-float obj 'vis-dist :default 40960000.0)) + ) + (cond + ((= (-> obj type) entity-actor) + (set! (-> obj extra perm task) (the-as uint (-> obj task))) + (set! (-> obj extra vis-id) (-> obj vis-id)) + ) + (else + (set! (-> obj extra perm task) (the-as uint 0)) + (set! (-> obj extra vis-id) 0) + 0 + ) + ) + (none) + ) + +;; definition for method 25 of type entity +(defmethod remove-from-level! entity ((obj entity) (arg0 level-group)) + (let ((v1-0 (-> obj extra))) + (cond + ((= (-> v1-0 next-link) v1-0) + (set! (-> arg0 entity-link) #f) + ) + (else + (set! (-> v1-0 next-link prev-link) (-> v1-0 prev-link)) + (set! (-> v1-0 prev-link next-link) (-> v1-0 next-link)) + (if (= (-> arg0 entity-link) v1-0) + (set! (-> arg0 entity-link) (-> v1-0 prev-link)) + ) + ) + ) + ) + obj + ) + +;; definition for function update-actor-vis-box +;; WARN: Return type mismatch int vs none. +(defun update-actor-vis-box ((arg0 process-drawable) (arg1 vector) (arg2 vector)) + (when (and arg0 (nonzero? (-> arg0 draw)) (zero? (logand (-> arg0 draw status) (draw-control-status no-draw)))) + (let ((v1-5 (-> arg0 draw origin)) + (f0-0 (-> arg0 draw bounds w)) + ) + (set! (-> arg1 x) (fmin (-> arg1 x) (- (-> v1-5 x) f0-0))) + (set! (-> arg1 y) (fmin (-> arg1 y) (- (-> v1-5 y) f0-0))) + (set! (-> arg1 z) (fmin (-> arg1 z) (- (-> v1-5 z) f0-0))) + (set! (-> arg2 x) (fmax (-> arg2 x) (+ (-> v1-5 x) f0-0))) + (set! (-> arg2 y) (fmax (-> arg2 y) (+ (-> v1-5 y) f0-0))) + (set! (-> arg2 z) (fmax (-> arg2 z) (+ (-> v1-5 z) f0-0))) + ) + ) + 0 + (none) + ) + +;; definition for method 25 of type level-group +;; WARN: Return type mismatch int vs none. +(defmethod update-vis-volumes level-group ((obj level-group)) + (local-vars (sv-16 pointer) (sv-20 pointer) (sv-24 pointer) (sv-28 process)) + (dotimes (s5-0 (-> obj length)) + (let ((v1-3 (-> obj level s5-0))) + (when (= (-> v1-3 status) 'active) + (let ((s4-0 (-> v1-3 bsp level entity))) + (dotimes (s3-0 (-> s4-0 length)) + (let ((s2-0 (-> s4-0 data s3-0 entity))) + (set! sv-16 (res-lump-data s2-0 'visvol pointer)) + (set! sv-20 (&+ sv-16 0)) + (set! sv-24 (&+ sv-16 16)) + (let ((s2-1 (-> s2-0 extra process))) + (set! sv-28 (if (type? s2-1 process-drawable) + s2-1 + ) + ) + ) + ) + (when sv-28 + (update-actor-vis-box (the-as process-drawable sv-28) (the-as vector sv-20) (the-as vector sv-24)) + (let ((s2-2 (-> sv-28 child))) + (while s2-2 + (let ((s1-0 update-actor-vis-box) + (s0-0 (-> s2-2 0)) + ) + (s1-0 + (the-as process-drawable (if (type? s0-0 process-drawable) + s0-0 + ) + ) + (the-as vector sv-20) + (the-as vector sv-24) + ) + ) + (set! s2-2 (-> s2-2 0 brother)) + ) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function expand-bounding-box +;; WARN: Return type mismatch int vs none. +(defun expand-bounding-box ((arg0 vector) (arg1 vector) (arg2 vector) (arg3 vector)) + (set! (-> arg0 x) (fmin (-> arg0 x) (-> arg2 x))) + (set! (-> arg0 y) (fmin (-> arg0 y) (-> arg2 y))) + (set! (-> arg0 z) (fmin (-> arg0 z) (-> arg2 z))) + (set! (-> arg1 x) (fmax (-> arg1 x) (-> arg3 x))) + (set! (-> arg1 y) (fmax (-> arg1 y) (-> arg3 y))) + (set! (-> arg1 z) (fmax (-> arg1 z) (-> arg3 z))) + 0 + (none) + ) + +;; definition for method 26 of type level-group +;; INFO: Used lq/sq +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 28 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Stack slot offset 32 signed mismatch +;; WARN: Return type mismatch int vs none. +(defmethod update-vis-volumes-from-nav-mesh level-group ((obj level-group)) + (local-vars + (sv-16 pointer) + (sv-20 vector) + (sv-24 vector) + (sv-28 float) + (sv-32 float) + (sv-36 vector) + (sv-40 entity) + (sv-48 res-tag) + (sv-96 vector) + (sv-112 vector) + ) + (dotimes (s5-0 (-> obj length)) + (let ((v1-3 (-> obj level s5-0))) + (when (= (-> v1-3 status) 'active) + (let ((s4-0 (-> v1-3 bsp level entity))) + (dotimes (s3-0 (-> s4-0 length)) + (let ((s2-0 (-> s4-0 data s3-0 entity))) + (set! sv-16 (res-lump-data s2-0 'visvol pointer)) + (set! sv-20 (the-as vector (&+ sv-16 0))) + (set! sv-24 (the-as vector (&+ sv-16 16))) + (set! sv-28 (the-as float -12288.0)) + (set! sv-32 (the-as float 12288.0)) + (set! sv-36 (-> s2-0 extra trans)) + (set! sv-40 s2-0) + (let ((v0-1 (entity-actor-lookup s2-0 'nav-mesh-actor 0))) + (if v0-1 + (set! sv-40 v0-1) + ) + ) + ) + (cond + ((type? sv-40 entity-actor) + (let ((v0-3 (res-lump-value sv-40 'enemy-options uint128 :time -1000000000.0))) + (cond + ((logtest? #x80000 v0-3) + (set! (-> sv-20 quad) (-> sv-36 quad)) + (set! (-> sv-24 quad) (-> sv-36 quad)) + (set! sv-28 (the-as float 409.6)) + (set! sv-32 (the-as float 409.6)) + ) + ((string-prefix= "battle" (res-lump-struct sv-40 'name string)) + (set! (-> sv-20 quad) (-> sv-36 quad)) + (set! (-> sv-24 quad) (-> sv-36 quad)) + (set! sv-48 (new 'static 'res-tag)) + (let ((v0-6 (res-lump-data sv-40 'actor-groups pointer :tag-ptr (& sv-48)))) + (when (and v0-6 (nonzero? (-> sv-48 elt-count))) + (let* ((s2-2 (-> (the-as (pointer actor-group) v0-6) 0)) + (s1-1 (-> s2-2 length)) + ) + (dotimes (s0-0 s1-1) + (let* ((a0-24 (-> s2-2 data s0-0 actor)) + (a0-25 (nav-mesh-from-res-tag a0-24 'nav-mesh-actor 0)) + ) + (when a0-25 + (set! sv-96 (new 'stack-no-clear 'vector)) + (set! sv-112 (new 'stack-no-clear 'vector)) + (nav-mesh-method-22 a0-25 sv-96 sv-112) + (expand-bounding-box sv-20 sv-24 sv-96 sv-112) + ) + ) + ) + ) + ) + ) + ) + (else + (let ((a0-28 (nav-mesh-from-res-tag sv-40 'nav-mesh-actor 0))) + (if a0-28 + (nav-mesh-method-22 a0-28 sv-20 sv-24) + ) + ) + ) + ) + ) + ) + (else + (set! (-> sv-20 quad) (-> sv-36 quad)) + (set! (-> sv-24 quad) (-> sv-36 quad)) + ) + ) + (+! (-> sv-20 x) sv-28) + (+! (-> sv-20 y) sv-28) + (+! (-> sv-20 z) sv-28) + (+! (-> sv-24 x) sv-32) + (+! (-> sv-24 y) sv-32) + (+! (-> sv-24 z) sv-32) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 27 of type level-group +;; INFO: Used lq/sq +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Return type mismatch int vs none. +(defmethod print-volume-sizes level-group ((obj level-group)) + (local-vars + (sv-16 pointer) + (sv-20 float) + (sv-24 vector) + (sv-28 type) + (sv-32 vector) + (sv-36 vector) + (sv-48 int) + (sv-64 entity) + (sv-80 structure) + ) + (let ((s5-0 0)) + (dotimes (v1-0 (-> obj length)) + (let ((a0-4 (-> obj level v1-0))) + (if (= (-> a0-4 status) 'active) + (+! s5-0 (-> a0-4 entity length)) + ) + ) + ) + (let ((s4-0 (the-as structure #f))) + (while (nonzero? s5-0) + 0 + (let ((s2-0 (the-as structure #f)) + (s3-0 (the-as entity #f)) + ) + (dotimes (s1-0 (-> obj length)) + (let ((v1-7 (-> obj level s1-0))) + (when (= (-> v1-7 status) 'active) + (let ((s0-0 (-> v1-7 entity))) + (set! sv-48 (-> s0-0 length)) + (while (nonzero? sv-48) + (set! sv-48 (+ sv-48 -1)) + (set! sv-64 (-> s0-0 data sv-48 entity)) + (set! sv-80 (res-lump-struct sv-64 'name structure)) + (when (and (or (not s4-0) (string>? (the-as string sv-80) (the-as string s4-0))) + (or (not s2-0) (string (the-as entity-actor s3-0) extra trans)) + (set! sv-28 (if (type? (the-as entity-actor s3-0) entity-actor) + (-> (the-as entity-actor s3-0) etype) + (the-as type #f) + ) + ) + (set! sv-32 (the-as vector (&+ sv-16 0))) + (set! sv-36 (the-as vector (&+ sv-16 16))) + (format #t "actor-vis ~S ~6,,1M " (res-lump-struct s3-0 'name structure) sv-20) + (format + #t + "~6,,1M ~6,,1M ~6,,1M ~6,,1M ~6,,1M ~6,,1M~%" + (- (-> sv-32 x) (-> sv-24 x)) + (- (-> sv-32 y) (-> sv-24 y)) + (- (-> sv-32 z) (-> sv-24 z)) + (- (-> sv-36 x) (-> sv-24 x)) + (- (-> sv-36 y) (-> sv-24 y)) + (- (-> sv-36 z) (-> sv-24 z)) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function expand-vis-box-with-point +;; WARN: Return type mismatch int vs none. +(defun expand-vis-box-with-point ((arg0 entity) (arg1 vector)) + (let ((v1-1 (res-lump-data arg0 'visvol (inline-array vector)))) + (when v1-1 + (let ((a0-2 (-> v1-1 0)) + (v1-2 (the-as (inline-array vector) (-> v1-1 1))) + ) + (set! (-> a0-2 x) (fmin (-> a0-2 x) (-> arg1 x))) + (set! (-> a0-2 y) (fmin (-> a0-2 y) (-> arg1 y))) + (set! (-> a0-2 z) (fmin (-> a0-2 z) (-> arg1 z))) + (set! (-> v1-2 0 x) (fmax (-> v1-2 0 x) (-> arg1 x))) + (set! (-> v1-2 0 y) (fmax (-> v1-2 0 y) (-> arg1 y))) + (set! (-> v1-2 0 z) (fmax (-> v1-2 0 z) (-> arg1 z))) + ) + ) + ) + 0 + (none) + ) + +;; definition of type debug-actor-info +(deftype debug-actor-info (basic) + ((name basic :offset-assert 4) + (handle handle :offset-assert 8) + (process basic :offset-assert 16) + (pid int32 :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; definition for method 3 of type debug-actor-info +(defmethod inspect debug-actor-info ((obj debug-actor-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Tname: ~A~%" (-> obj name)) + (format #t "~1Thandle: ~D~%" (-> obj handle)) + (format #t "~1Tprocess: ~A~%" (-> obj process)) + (format #t "~1Tpid: ~D~%" (-> obj pid)) + (label cfg-4) + obj + ) + +;; definition for symbol *debug-actor-info*, type debug-actor-info +(define *debug-actor-info* (new 'static 'debug-actor-info :name #f)) + +;; definition for symbol *pid-string*, type string +(define *pid-string* (new 'global 'string 128 (the-as string #f))) + +;; definition (debug) for function debug-actor +;; WARN: Return type mismatch int vs none. +(defun-debug debug-actor ((arg0 string)) + (let ((gp-0 *debug-actor-info*)) + (set! (-> gp-0 name) #f) + (set! (-> gp-0 handle) (the-as handle #f)) + (cond + ((string-prefix= "pid " arg0) + (let ((s4-0 (length arg0))) + (when (< 4 s4-0) + (clear *pid-string*) + (catn-string<-charp *pid-string* (&-> arg0 data 4) (+ s4-0 -4)) + (set! (-> gp-0 pid) (string->int *pid-string*)) + ) + ) + (let ((gp-1 (lambda ((arg0 process)) + (let ((v1-0 *debug-actor-info*)) + (if (= (-> arg0 pid) (-> v1-0 pid)) + (set! (-> v1-0 handle) (process->handle arg0)) + ) + ) + (none) + ) + ) + ) + (iterate-process-tree *pusher-pool* (the-as (function object object) gp-1) *null-kernel-context*) + (iterate-process-tree *entity-pool* (the-as (function object object) gp-1) *null-kernel-context*) + ) + ) + (else + (set! (-> gp-0 name) arg0) + ) + ) + ) + 0 + (none) + ) + +;; definition (debug) for function draw-actor-marks +;; WARN: Return type mismatch int vs none. +(defun-debug draw-actor-marks ((arg0 process)) + (local-vars (sv-16 entity) (sv-20 (pointer int32))) + (b! + (not (and (or (type? arg0 process-drawable) (= (-> arg0 type) part-tracker) (type? arg0 part-spawner)) + (nonzero? (-> (the-as part-spawner arg0) root)) + ) + ) + cfg-51 + :delay (nop!) + ) + (when (type? arg0 process-drawable) + (when (and (-> (the-as process-drawable arg0) nav) (nonzero? (-> (the-as process-drawable arg0) nav))) + (if (= (the-as process-drawable arg0) *debug-actor*) + (debug-draw (-> (the-as process-drawable arg0) nav)) + ) + ) + (if (nonzero? (-> (the-as process-drawable arg0) path)) + (debug-draw (-> (the-as process-drawable arg0) path)) + ) + (if (nonzero? (-> (the-as process-drawable arg0) vol)) + (debug-draw (-> (the-as process-drawable arg0) vol)) + ) + (if (and (nonzero? (-> (the-as process-drawable arg0) draw)) *display-actor-vis*) + (add-debug-sphere + #t + (bucket-id debug2) + (-> (the-as process-drawable arg0) draw origin) + (-> (the-as process-drawable arg0) draw bounds w) + (new 'static 'rgba :r #x80 :a #x80) + ) + ) + ) + (add-debug-x + #t + (bucket-id debug-no-zbuf1) + (-> (the-as process-drawable arg0) root trans) + (new 'static 'rgba :r #x80 :g #xff :b #x80 :a #x80) + ) + (set! sv-16 (-> (the-as process-drawable arg0) entity)) + (cond + ((and sv-16 (= (-> sv-16 extra process) (the-as process-drawable arg0))) + (add-debug-text-3d + #t + (bucket-id debug-no-zbuf1) + (res-lump-struct sv-16 'name string) + (-> (the-as process-drawable arg0) root trans) + (if (logtest? (-> sv-16 extra perm status) (entity-perm-status bit-0 bit-1)) + (font-color precursor-#ec3b00) + (font-color #dadada) + ) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 8)) + ) + (set! sv-20 (res-lump-data sv-16 'eco-info (pointer int32) :time 0.0)) + (when sv-20 + (let ((s5-1 add-debug-text-3d) + (s4-1 #t) + (s3-1 318) + ) + (format (clear *temp-string*) "~S ~D~%" (pickup-type->string (the-as pickup-type (-> sv-20 0))) (-> sv-20 1)) + (s5-1 + s4-1 + (the-as bucket-id s3-1) + *temp-string* + (-> (the-as process-drawable arg0) root trans) + (font-color #dadada) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 24)) + ) + ) + ) + (let ((v1-49 (res-lump-struct sv-16 'art-name structure))) + (if (and v1-49 (logtest? (the-as int v1-49) 1)) + (add-debug-text-3d + #t + (bucket-id debug-no-zbuf1) + (symbol->string v1-49) + (-> (the-as process-drawable arg0) root trans) + (font-color #dadada) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 24)) + ) + ) + ) + (when *display-actor-vis* + (let ((v1-54 (res-lump-data sv-16 'visvol pointer)) + (a1-14 (-> sv-16 extra vis-id)) + ) + (if v1-54 + (add-debug-box + #t + (bucket-id debug-no-zbuf1) + (the-as vector (&+ v1-54 0)) + (the-as vector (&+ v1-54 16)) + (if (is-object-visible? (-> sv-16 extra level) a1-14) + (new 'static 'rgba :g #x80 :b #x80 :a #x80) + (new 'static 'rgba :r #x80 :b #x80 :a #x80) + ) + ) + ) + ) + ) + ) + (else + (let ((s5-3 add-debug-text-3d) + (s4-3 #t) + (s3-3 318) + ) + (format (clear *temp-string*) "pid ~d" (-> (the-as process-drawable arg0) pid)) + (s5-3 + s4-3 + (the-as bucket-id s3-3) + *temp-string* + (-> (the-as process-drawable arg0) root trans) + (font-color green-#3df23d) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 8)) + ) + ) + ) + ) + (add-debug-text-3d + #t + (bucket-id debug-no-zbuf1) + (if (-> (the-as process-drawable arg0) state) + (symbol->string (-> (the-as process-drawable arg0) state name)) + "#f" + ) + (-> (the-as process-drawable arg0) root trans) + (font-color #dadada) + (new 'static 'vector2h :data (new 'static 'array int16 2 0 16)) + ) + (label cfg-51) + 0 + (none) + ) + +;; definition for method 15 of type level-group +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod debug-draw-actors level-group ((obj level-group) (arg0 symbol)) + (local-vars + (sv-16 symbol) + (sv-20 vector) + (sv-32 int) + (sv-48 (function symbol bucket-id vector vector rgba symbol)) + (sv-64 symbol) + (sv-80 int) + (sv-96 pointer) + (sv-112 pointer) + (sv-128 int) + ) + (with-pp + (let ((s4-0 *debug-actor-info*)) + (set! (-> s4-0 process) #f) + (if (zero? (-> s4-0 handle pid)) + (set! (-> s4-0 handle) + (logior (logand (-> s4-0 handle) (shl (the-as uint #xffffffff) 32)) (shr (shl (the-as int #f) 32) 32)) + ) + ) + (let ((v0-0 (handle->process (-> s4-0 handle)))) + (when (not v0-0) + (if (-> s4-0 name) + (set! v0-0 (process-by-name (the-as string (-> s4-0 name)) *active-pool*)) + ) + ) + (set! (-> s4-0 process) v0-0) + ) + (set! *debug-actor* (-> s4-0 process)) + ) + (set! sv-16 arg0) + (when (and sv-16 (not (or (= *master-mode* 'menu) (= *master-mode* 'progress)))) + (cond + ((= sv-16 'process) + (let ((s5-1 draw-actor-marks)) + (iterate-process-tree *pusher-pool* (the-as (function object object) s5-1) *null-kernel-context*) + (iterate-process-tree *entity-pool* (the-as (function object object) s5-1) *null-kernel-context*) + ) + ) + (else + (dotimes (s5-2 (-> obj length)) + (let ((v1-25 (-> obj level s5-2))) + (when (= (-> v1-25 status) 'active) + (let ((s4-1 (-> v1-25 bsp level entity))) + (dotimes (s3-0 (-> s4-1 length)) + (let ((s2-0 (-> s4-1 data s3-0 entity))) + (set! sv-20 (-> s2-0 extra trans)) + (when (or (= sv-16 'full) (-> s2-0 extra process)) + (add-debug-x #t (bucket-id debug-no-zbuf1) sv-20 (if (-> s2-0 extra process) + (new 'static 'rgba :r #x80 :g #xff :b #x80 :a #x80) + (new 'static 'rgba :r #xff :a #x80) + ) + ) + (let ((s1-0 add-debug-text-3d) + (s0-0 #t) + ) + (set! sv-32 318) + (let ((a2-4 (res-lump-struct s2-0 'name structure)) + (a3-2 sv-20) + (t0-1 (if (logtest? (-> s2-0 extra perm status) (entity-perm-status bit-0 bit-1)) + 1 + 5 + ) + ) + (t1-1 (new 'static 'vector2h :data (new 'static 'array int16 2 0 8))) + ) + (s1-0 s0-0 (the-as bucket-id sv-32) (the-as string a2-4) a3-2 (the-as font-color t0-1) t1-1) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (when (and *display-actor-vis* (not *debug-actor*)) + (let ((s5-3 *display-actor-vis*)) + (dotimes (s4-2 (-> obj length)) + (let ((s3-1 (-> obj level s4-2))) + (when (= (-> s3-1 status) 'active) + (let ((s2-1 (-> s3-1 bsp level entity))) + (dotimes (s1-1 (-> s2-1 length)) + (let ((s0-1 (-> s2-1 data s1-1 entity))) + (let ((v0-6 (res-lump-data s0-1 'visvol pointer)) + (a1-10 (-> s0-1 extra vis-id)) + ) + (when (and v0-6 (or (= s5-3 #t) (= s5-3 'box))) + (set! sv-48 add-debug-box) + (set! sv-64 #t) + (set! sv-80 318) + (set! sv-96 (&+ v0-6 0)) + (set! sv-112 (&+ v0-6 16)) + (let ((t0-3 (if (is-object-visible? s3-1 a1-10) + (the-as uint #x80808000) + (the-as uint #x80800080) + ) + ) + ) + (sv-48 sv-64 (the-as bucket-id sv-80) (the-as vector sv-96) (the-as vector sv-112) (the-as rgba t0-3)) + ) + ) + ) + (when (or (= s5-3 #t) (= s5-3 'sphere)) + (let ((s0-2 (-> s0-1 extra process))) + (when s0-2 + (when (and (type? s0-2 process-drawable) (nonzero? (-> (the-as process-drawable s0-2) draw))) + (add-debug-x + #t + (bucket-id debug-no-zbuf1) + (-> (the-as process-drawable s0-2) root trans) + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + ) + (add-debug-sphere + #t + (bucket-id debug2) + (-> (the-as process-drawable s0-2) draw origin) + (-> (the-as process-drawable s0-2) draw bounds w) + (new 'static 'rgba :r #x80 :a #x80) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (if *generate-actor-vis* + (update-vis-volumes obj) + ) + (cond + (*debug-actor* + (let* ((s4-3 *debug-actor*) + (s5-4 (if (type? s4-3 process-drawable) + s4-3 + ) + ) + ) + (when s5-4 + (if (nonzero? (-> (the-as process-drawable s5-4) skel)) + (debug-print-channels (-> (the-as process-drawable s5-4) skel) (the-as symbol *stdcon*)) + ) + (when (and (nonzero? (-> (the-as process-drawable s5-4) nav)) + (-> (the-as process-drawable s5-4) nav) + *display-nav-marks* + ) + (let ((s4-4 (-> (the-as process-drawable s5-4) nav state flags))) + (if (= (logand s4-4 (nav-state-flag in-target-poly)) (nav-state-flag in-target-poly)) + (format *stdcon* "in-target-poly ") + ) + (if (= (logand s4-4 (nav-state-flag directional-mode)) (nav-state-flag directional-mode)) + (format *stdcon* "directional-mode ") + ) + (if (= (logand s4-4 (nav-state-flag initialized)) (nav-state-flag initialized)) + (format *stdcon* "initialized ") + ) + (if (= (logand s4-4 (nav-state-flag display-marks)) (nav-state-flag display-marks)) + (format *stdcon* "display-marks ") + ) + (if (= (logand s4-4 (nav-state-flag recovery-mode)) (nav-state-flag recovery-mode)) + (format *stdcon* "recovery-mode ") + ) + (if (= (logand s4-4 (nav-state-flag touching-sphere)) (nav-state-flag touching-sphere)) + (format *stdcon* "touching-sphere ") + ) + (if (= (logand s4-4 (nav-state-flag trapped-by-sphere)) (nav-state-flag trapped-by-sphere)) + (format *stdcon* "trapped-by-sphere ") + ) + (if (= (logand s4-4 (nav-state-flag blocked)) (nav-state-flag blocked)) + (format *stdcon* "blocked ") + ) + (if (= (logand s4-4 (nav-state-flag avoiding-sphere)) (nav-state-flag avoiding-sphere)) + (format *stdcon* "avoiding-sphere ") + ) + (if (= (logand s4-4 (nav-state-flag target-inside)) (nav-state-flag target-inside)) + (format *stdcon* "target-inside ") + ) + (if (= (logand s4-4 (nav-state-flag debug)) (nav-state-flag debug)) + (format *stdcon* "debug ") + ) + (if (= (logand s4-4 (nav-state-flag at-gap)) (nav-state-flag at-gap)) + (format *stdcon* "at-gap ") + ) + (if (= (logand s4-4 (nav-state-flag in-mesh)) (nav-state-flag in-mesh)) + (format *stdcon* "in-mesh ") + ) + (if (= (logand s4-4 (nav-state-flag at-target)) (nav-state-flag at-target)) + (format *stdcon* "at-target ") + ) + (if (= (logand s4-4 (nav-state-flag target-poly-dirty)) (nav-state-flag target-poly-dirty)) + (format *stdcon* "target-poly-dirty ") + ) + ) + (format *stdcon* "~%") + ) + (when *display-joint-axes* + (if (and (type? (the-as process-drawable s5-4) process-drawable) + (nonzero? (-> (the-as process-drawable s5-4) draw)) + ) + (draw-joint-axes (the-as process-drawable s5-4)) + ) + ) + (draw-actor-marks (the-as process-drawable s5-4)) + ) + ) + ) + (*display-nav-mesh* + (dotimes (s5-5 (-> obj length)) + (let ((v1-145 (-> obj level s5-5))) + (when (= (-> v1-145 status) 'active) + (let ((s4-5 (-> v1-145 bsp nav-meshes))) + (when (nonzero? s4-5) + (dotimes (s3-2 (-> s4-5 length)) + (let ((s2-2 (-> s4-5 s3-2))) + (if (name= *display-nav-mesh* (res-lump-struct s2-2 'name structure)) + (debug-draw s2-2) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (else + (when *display-nav-marks* + (dotimes (s5-6 (-> obj length)) + (let ((v1-163 (-> obj level s5-6))) + (when (= (-> v1-163 status) 'active) + (let ((s4-6 (-> v1-163 bsp nav-meshes))) + (when (nonzero? s4-6) + (dotimes (s3-3 (-> s4-6 length)) + (debug-draw (-> s4-6 s3-3)) + ) + ) + ) + ) + ) + ) + ) + (if (or *display-path-marks* *display-vol-marks*) + (iterate-process-tree + *active-pool* + (the-as (function object object) (lambda ((arg0 process-drawable)) + (when (type? arg0 process-drawable) + (if (nonzero? (-> arg0 path)) + (debug-draw (-> arg0 path)) + ) + (if (nonzero? (-> arg0 vol)) + (debug-draw (-> arg0 vol)) + ) + ) + (none) + ) + ) + *null-kernel-context* + ) + ) + ) + ) + (when (and *display-actor-graph* (not (or (= *master-mode* 'menu) (= *master-mode* 'progress)))) + (if (not (paused?)) + (float-save-timeplot (if (< (the int (the float (mod (-> pp clock frame-counter) 600))) 300) + 1.0 + 0.0 + ) + ) + ) + (camera-plot-float-func + 0.0 + 399.0 + -81920.0 + 81920.0 + float-lookup-redline + (new 'static 'vector4w :x #xff :w #x80) + ) + (camera-plot-float-func + 0.0 + 399.0 + -81920.0 + 81920.0 + float-lookup-blueline + (new 'static 'vector4w :z #xff :w #x80) + ) + (camera-plot-float-func + 0.0 + 399.0 + -81920.0 + 81920.0 + float-lookup-greenline + (new 'static 'vector4w :y #xff :w #x80) + ) + (camera-plot-float-func + 0.0 + 399.0 + 0.0 + 409600.0 + float-lookup-yellowline + (new 'static 'vector4w :x #xff :y #xff :w #x80) + ) + (camera-plot-float-func + 0.0 + 399.0 + 0.0 + 1.0 + float-lookup-timeplot + (new 'static 'vector4w :x #x80 :y #x80 :z #x80 :w #x80) + ) + ) + (when *display-split-boxes* + (dotimes (s5-7 (-> obj length)) + (let ((v1-193 (-> obj level s5-7))) + (when (= (-> v1-193 status) 'active) + (let ((s4-7 (-> v1-193 bsp region-tree))) + (when (nonzero? s4-7) + (let* ((s3-4 (-> s4-7 data2 (+ (-> s4-7 length) -1) length)) + (s2-3 0) + (a0-102 (-> (the-as drawable-inline-array-region-prim (-> s4-7 data2 (+ (-> s4-7 length) -1))) data s2-3)) + ) + (while (< s2-3 s3-4) + (debug-draw-region a0-102 0) + (+! s2-3 1) + (set! a0-102 + (-> (the-as drawable-inline-array-region-prim (-> s4-7 data2 (+ (-> s4-7 length) -1))) data s2-3) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (when *display-region-marks* + (dotimes (s5-8 (-> obj length)) + (let ((s4-8 (-> obj level s5-8))) + (when (= (-> s4-8 status) 'active) + (when (nonzero? (-> s4-8 bsp region-trees)) + (let* ((s3-5 (-> s4-8 bsp region-trees length)) + (s2-4 0) + (s1-3 (-> s4-8 bsp region-trees s2-4)) + ) + (while (< s2-4 s3-5) + (let ((s0-4 (-> s1-3 data2 (+ (-> s1-3 length) -1) length))) + (set! sv-128 0) + (let ((a0-117 (-> (the-as drawable-inline-array-region-prim (-> s1-3 data2 (+ (-> s1-3 length) -1))) data sv-128))) + (while (< sv-128 s0-4) + (debug-draw-region a0-117 0) + (set! sv-128 (+ sv-128 1)) + (set! a0-117 + (-> (the-as drawable-inline-array-region-prim (-> s1-3 data2 (+ (-> s1-3 length) -1))) data sv-128) + ) + ) + ) + ) + (+! s2-4 1) + (set! s1-3 (-> s4-8 bsp region-trees s2-4)) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 22 of type entity-camera +(defmethod birth! entity-camera ((obj entity-camera)) + (add-connection *camera-engine* *camera* nothing obj #f #f) + obj + ) + +;; definition for method 23 of type entity-camera +(defmethod kill! entity-camera ((obj entity-camera)) + (remove-by-param1 *camera-engine* (the-as int obj)) + obj + ) + +;; definition for function init-entity +;; WARN: Return type mismatch process vs none. +(defun init-entity ((arg0 process) (arg1 entity-actor)) + (activate arg0 *entity-pool* (res-lump-struct arg1 'name basic) (the-as pointer #x70004000)) + (set! (-> arg0 entity) arg1) + (set! (-> arg0 level) (-> arg1 extra level)) + (set! (-> arg1 extra process) arg0) + (run-now-in-process arg0 (method-of-object arg0 init-from-entity!) arg0 arg1) + (none) + ) + +;; definition for method 22 of type entity-actor +(defmethod birth! entity-actor ((obj entity-actor)) + (let* ((s5-0 (-> obj etype)) + (v1-0 (entity-info-lookup s5-0)) + (s4-0 (get-process *default-dead-pool* s5-0 (if v1-0 + (-> v1-0 heap-size) + #x4000 + ) + ) + ) + ) + (cond + ((not s4-0) + ) + ((begin + (set! (-> s4-0 type) s5-0) + (and s5-0 (valid? s5-0 type #f #f 0) (valid? (method-of-object s4-0 init-from-entity!) function #f #f 0)) + ) + (init-entity s4-0 obj) + ) + (else + (when (not (birth-viewer s4-0 obj)) + (format 0 "ERROR: no proper process type named ~A exists in the code, could not start ~A~%" s5-0 obj) + (logior! (-> obj extra perm status) (entity-perm-status bit-0)) + ) + ) + ) + ) + obj + ) + +;; definition for function entity-deactivate-handler +;; WARN: Return type mismatch symbol vs none. +(defun entity-deactivate-handler ((arg0 process) (arg1 entity-actor)) + (when (= arg0 (-> arg1 extra process)) + (logclear! (-> arg1 extra perm status) (entity-perm-status bit-1 no-kill)) + (set! (-> arg1 extra process) #f) + ) + (none) + ) + +;; definition for method 23 of type entity-actor +(defmethod kill! entity-actor ((obj entity-actor)) + (let ((a0-1 (-> obj extra process))) + (if a0-1 + (deactivate a0-1) + (entity-deactivate-handler a0-1 obj) + ) + ) + obj + ) + +;; definition for method 17 of type bsp-header +;; INFO: Used lq/sq +;; WARN: Return type mismatch bsp-header vs none. +;; ERROR: Unsupported inline assembly instruction kind - [mfc0 s5, Count] +;; ERROR: Unsupported inline assembly instruction kind - [mfc0 v1, Count] +(defmethod birth bsp-header ((obj bsp-header)) + (local-vars (v1-74 int) (s5-0 int) (sv-16 int)) + (.mfc0 s5-0 Count) + (let ((a2-0 (if (nonzero? (-> obj actors)) + (-> obj actors length) + 0 + ) + ) + ) + (cond + ((not (-> obj level entity)) + (set! (-> obj level entity) (new 'loading-level 'entity-links-array a2-0)) + ) + ((< (-> obj level entity allocated-length) a2-0) + (format + 0 + "ERROR: Attempting to rebirth level ~A with incorrect entity table size ~D/~D~%" + (-> obj level) + a2-0 + (-> obj level entity allocated-length) + ) + ) + ) + ) + (set! (-> obj level entity length) 0) + 0 + (when (nonzero? (-> obj actors)) + (dotimes (s4-0 (-> obj actors length)) + (let* ((a0-4 (-> obj actor-birth-order s4-0)) + (v1-23 (-> obj actors data (logand a0-4 #xffff) actor)) + ) + (add-to-level! v1-23 *level* (-> obj level) (the-as actor-id (-> v1-23 aid))) + ) + ) + ) + (let ((s4-1 (-> obj cameras))) + (when (nonzero? s4-1) + (dotimes (s3-0 (-> s4-1 length)) + (birth! (-> s4-1 s3-0)) + ) + ) + ) + (let ((s4-2 (-> obj level status))) + (set! (-> obj level status) 'active) + (dotimes (s3-1 (-> *level* length)) + (let ((s2-0 (-> *level* level s3-1))) + (when (= (-> s2-0 status) 'active) + (when (nonzero? (-> s2-0 bsp actor-groups)) + (countdown (s1-0 (-> s2-0 bsp actor-groups length)) + (let ((s0-0 (-> s2-0 bsp actor-groups s1-0))) + (set! sv-16 0) + (while (< sv-16 (-> s0-0 length)) + (if (not (-> s0-0 data sv-16 actor)) + (set! (-> s0-0 data sv-16 actor) (entity-by-aid (-> s0-0 data sv-16 id))) + ) + (set! sv-16 (+ sv-16 1)) + ) + ) + ) + ) + ) + ) + ) + (set! (-> obj level status) s4-2) + ) + (.mfc0 v1-74 Count) + (let ((a3-2 (- v1-74 s5-0))) + (format 0 "Done ~S in ~D~%" "birth" a3-2) + ) + (none) + ) + +;; definition for function check-for-rougue-process +;; WARN: Return type mismatch int vs none. +(defun check-for-rougue-process ((arg0 process) (arg1 int) (arg2 int) (arg3 level)) + (cond + ((-> arg0 entity) + (cond + ((or (= (-> arg0 level) arg3) (= (-> arg0 entity extra level) arg3)) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ((let ((v1-9 (-> arg0 name))) + (and (>= (the-as int v1-9) arg1) (< (the-as int v1-9) arg2)) + ) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ((and (logtest? (-> arg0 entity extra kill-mask) (task-mask ctywide)) (= (-> arg3 name) 'ctywide)) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ((and (logtest? (-> arg0 entity extra kill-mask) (task-mask primary0)) + (logtest? (-> arg3 info base-task-mask) (task-mask primary0)) + ) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ) + ) + ((= (-> arg0 level) arg3) + (format #t "NOTICE: rogue level entity ~A still alive~%" arg0) + (deactivate arg0) + ) + ((= (-> arg0 type) part-tracker) + (let ((v1-34 (the-as part-tracker arg0))) + (if (the-as + part-tracker + (and (nonzero? (-> v1-34 part)) + (>= (the-as int (-> v1-34 part group)) arg1) + (the-as + part-tracker + (< (the-as int (the-as part-tracker (-> (the-as part-tracker (-> v1-34 part)) parent))) arg2) + ) + ) + ) + (deactivate arg0) + ) + ) + ) + ((type? arg0 part-spawner) + (let ((v1-39 (the-as part-spawner arg0))) + (if (the-as + part-spawner + (and (nonzero? (-> v1-39 part)) + (>= (the-as int (-> v1-39 part group)) arg1) + (the-as + part-spawner + (< (the-as int (the-as part-spawner (-> (the-as part-spawner (-> v1-39 part)) parent))) arg2) + ) + ) + ) + (deactivate arg0) + ) + ) + ) + (else + (let* ((s3-0 arg0) + (v1-44 (if (type? s3-0 process-drawable) + s3-0 + ) + ) + ) + (when v1-44 + (cond + ((and (nonzero? (-> (the-as process-drawable v1-44) part)) + (>= (the-as int (-> (the-as process-drawable v1-44) part group)) arg1) + (< (the-as int (-> (the-as process-drawable v1-44) part group)) arg2) + ) + (format + #t + "NOTICE: rogue null level entity (using part ~A) ~A still alive~%" + (-> (the-as process-drawable v1-44) part group) + arg0 + ) + (deactivate arg0) + ) + ((and (nonzero? (-> (the-as process-drawable v1-44) draw)) + (>= (the-as int (-> (the-as process-drawable v1-44) draw art-group)) arg1) + (< (the-as int (-> (the-as process-drawable v1-44) draw art-group)) arg2) + ) + (format + #t + "NOTICE: rogue null level entity (using art ~A) ~A still alive~%" + (-> (the-as process-drawable v1-44) draw art-group) + arg0 + ) + (deactivate arg0) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 18 of type bsp-header +;; WARN: Return type mismatch bsp-header vs none. +(defmethod deactivate-entities bsp-header ((obj bsp-header)) + (let ((v1-1 (-> obj level heap base)) + (a0-2 (-> obj level heap top-base)) + ) + (when (nonzero? (-> obj actor-groups)) + (dotimes (a1-2 (-> obj actor-groups length)) + (let ((a2-2 (-> obj actor-groups a1-2))) + (dotimes (a3-1 (-> a2-2 length)) + (let ((t0-2 (-> a2-2 data a3-1 actor))) + (if (and t0-2 (not (and (>= (the-as int t0-2) (the-as int v1-1)) (< (the-as int t0-2) (the-as int a0-2))))) + (set! (-> a2-2 data a3-1 actor) #f) + ) + ) + ) + ) + ) + ) + (dotimes (a1-5 (-> *level* length)) + (let ((a2-10 (-> *level* level a1-5))) + (when (= (-> a2-10 status) 'active) + (when (!= a2-10 (-> obj level)) + (when (nonzero? (-> a2-10 bsp actor-groups)) + (dotimes (a3-10 (-> a2-10 bsp actor-groups length)) + (let ((t0-13 (-> a2-10 bsp actor-groups a3-10))) + (dotimes (t1-2 (-> t0-13 length)) + (let ((t2-3 (-> t0-13 data t1-2 actor))) + (if (and t2-3 (>= (the-as int t2-3) (the-as int v1-1)) (< (the-as int t2-3) (the-as int a0-2))) + (set! (-> t0-13 data t1-2 actor) #f) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (let ((s5-0 (-> obj actors))) + (when (nonzero? s5-0) + (dotimes (s4-0 (-> s5-0 length)) + (let ((s3-0 (-> s5-0 data s4-0 actor))) + (kill! s3-0) + (remove-from-level! s3-0 *level*) + ) + ) + ) + ) + (let ((s5-1 (-> obj cameras))) + (when (nonzero? s5-1) + (dotimes (s4-1 (-> s5-1 length)) + (kill! (-> s5-1 s4-1)) + ) + ) + ) + (let ((v1-23 (-> obj level heap base)) + (a0-7 (-> obj level heap top-base)) + (s5-2 (lambda ((arg0 process)) + (check-for-rougue-process + arg0 + (-> *kernel-context* relocating-min) + (-> *kernel-context* relocating-max) + (-> *kernel-context* relocating-level) + ) + (none) + ) + ) + ) + (set! (-> *kernel-context* relocating-min) (the-as int v1-23)) + (set! (-> *kernel-context* relocating-max) (the-as int a0-7)) + (set! (-> *kernel-context* relocating-level) (-> obj level)) + (iterate-process-tree *pusher-pool* (the-as (function object object) s5-2) *null-kernel-context*) + (iterate-process-tree *entity-pool* (the-as (function object object) s5-2) *null-kernel-context*) + (iterate-process-tree *default-pool* (the-as (function object object) s5-2) *null-kernel-context*) + ) + (let ((s5-3 (-> obj nav-meshes))) + (when (nonzero? s5-3) + (dotimes (s4-2 (-> s5-3 length)) + (kill! (-> s5-3 s4-2)) + ) + ) + ) + (none) + ) + +;; definition for function process-drawable-scale-from-entity! +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun process-drawable-scale-from-entity! ((arg0 process-drawable) (arg1 entity)) + (let ((v1-1 (res-lump-struct arg1 'scale structure))) + (if v1-1 + (set! (-> arg0 root scale quad) (-> (the-as vector v1-1) quad)) + (vector-identity! (-> arg0 root scale)) + ) + ) + 0 + (none) + ) + +;; definition for function process-drawable-from-entity! +;; INFO: Used lq/sq +;; WARN: Return type mismatch process-drawable vs none. +(defun process-drawable-from-entity! ((arg0 process-drawable) (arg1 entity-actor)) + (logior! (-> arg0 mask) (process-mask actor-pause)) + (set! (-> arg0 root trans quad) (-> arg1 extra trans quad)) + (quaternion-copy! (-> arg0 root quat) (-> arg1 quat)) + (vector-identity! (-> arg0 root scale)) + (none) + ) + +;; definition for method 9 of type entity-perm +(defmethod update-perm! entity-perm ((obj entity-perm) (arg0 symbol) (arg1 entity-perm-status)) + (cond + ((= arg0 'game) + (logclear! (-> obj status) arg1) + ) + ((task-complete? *game-info* (the-as game-task (-> obj task))) + (logclear! (-> obj status) (logior (if (logtest? (-> obj status) (entity-perm-status bit-4)) + 524 + 0 + ) + 515 + ) + ) + ) + (else + (logclear! (-> obj status) (logior arg1 (if (logtest? (-> obj status) (entity-perm-status bit-4)) + 524 + 0 + ) + ) + ) + ) + ) + (when (zero? (logand (-> obj status) (entity-perm-status bit-5))) + (set! (-> obj user-uint64) (the-as uint 0)) + 0 + ) + obj + ) + +;; definition for function reset-actors +;; WARN: Return type mismatch int vs none. +(defun reset-actors ((arg0 symbol)) + (let* ((v1-0 arg0) + (s5-0 (cond + ((or (= v1-0 'life) (= v1-0 'debug)) + 4719 + ) + ((= v1-0 'try) + 4719 + ) + ((= v1-0 'game) + 8063 + ) + (else + 5759 + ) + ) + ) + (s4-0 *game-info*) + ) + (dotimes (s3-0 (-> *level* length)) + (let ((v1-4 (-> *level* level s3-0))) + (when (= (-> v1-4 status) 'active) + (when (-> v1-4 part-engine) + (set! (-> v1-4 part-engine length) 0) + 0 + ) + (let ((s2-0 (-> v1-4 bsp level entity))) + (dotimes (s1-0 (-> s2-0 length)) + (let ((s0-0 (-> s2-0 data s1-0 entity))) + (if (not (and (-> s0-0 extra process) (logtest? (-> s0-0 extra process mask) (process-mask no-kill)))) + (kill! s0-0) + ) + (update-perm! (-> s0-0 extra perm) arg0 (the-as entity-perm-status s5-0)) + ) + ) + ) + ) + ) + ) + (let ((s3-1 (-> s4-0 task-perm-list))) + (dotimes (s2-1 (-> s3-1 length)) + (update-perm! (-> s3-1 data s2-1) arg0 (the-as entity-perm-status s5-0)) + ) + (logior! (-> s3-1 data 1 status) (entity-perm-status complete)) + ) + (let ((s4-1 (-> s4-0 perm-list))) + (dotimes (s3-2 (-> s4-1 length)) + (update-perm! (-> s4-1 data s3-2) arg0 (the-as entity-perm-status s5-0)) + ) + ) + ) + (let ((s5-1 (lambda ((arg0 process)) + (if (zero? (logand (-> arg0 mask) (process-mask no-kill))) + (deactivate arg0) + ) + (none) + ) + ) + ) + (iterate-process-tree *pusher-pool* (the-as (function object object) s5-1) *null-kernel-context*) + (iterate-process-tree *entity-pool* (the-as (function object object) s5-1) *null-kernel-context*) + ) + (if #t + (task-node-reset arg0) + ) + (dotimes (s5-2 (-> *level* length)) + (let ((s4-2 (-> *level* level s5-2))) + (when (= (-> s4-2 status) 'active) + (when (-> s4-2 info activate-func) + (let ((s3-3 (-> s4-2 info activate-func value))) + (if (and s3-3 (nonzero? s3-3) (type? s3-3 function)) + ((the-as (function level symbol none) s3-3) s4-2 arg0) + ) + ) + ) + ) + ) + ) + (set! (-> *ACTOR-bank* birth-max) 1000) + (update-task-masks arg0) + 0 + (none) + ) + +;; definition for function reset-cameras +;; WARN: Return type mismatch int vs none. +(defun reset-cameras () + (remove-all *camera-engine*) + (dotimes (gp-0 (-> *level* length)) + (let ((v1-5 (-> *level* level gp-0))) + (when (= (-> v1-5 status) 'active) + (let ((s5-0 (-> v1-5 bsp cameras))) + (when (nonzero? s5-0) + (dotimes (s4-0 (-> s5-0 length)) + (birth! (-> s5-0 s4-0)) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 12 of type process-drawable +(defmethod run-logic? process-drawable ((obj process-drawable)) + (or (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root pause-adjust-distance)) + (vector-vector-distance (-> obj root trans) (math-camera-pos)) + ) + (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) (draw-control-status uninited))) + ) + ) + ) + +;; definition for method 9 of type entity-links +(defmethod birth? entity-links ((obj entity-links) (arg0 vector)) + (and (zero? (logand (-> obj perm status) (entity-perm-status bit-0 dead))) + (< (vector-vector-distance (-> obj trans) arg0) (-> *ACTOR-bank* birth-dist)) + ) + ) + +;; definition for method 17 of type level-group +;; INFO: Used lq/sq +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; WARN: Return type mismatch int vs none. +;; WARN: Function (method 17 level-group) has a return type of none, but the expression builder found a return statement. +(defmethod actors-update level-group ((obj level-group)) + (local-vars + (sv-16 vector) + (sv-24 int) + (sv-32 task-mask) + (sv-48 entity-links) + (sv-64 string) + (sv-80 string) + (sv-96 float) + ) + (with-pp + (when *compact-actors* + (if (and (= *compact-actors* 'debug) (= (-> *nk-dead-pool* alive-list prev) (-> *nk-dead-pool* first-gap))) + (churn *nk-dead-pool* 1) + ) + (let ((s5-0 + (the int + (lerp-scale 8.0 1.0 (the float (-> *display* frames (-> *display* last-screen) run-time)) 2000.0 8000.0) + ) + ) + ) + (if (nonzero? *debug-dead-pool*) + (compact *debug-dead-pool* 10) + ) + (compact *nk-dead-pool* s5-0) + (compact *city-dead-pool* s5-0) + ) + ) + (update-actor-hash) + (when (not (paused?)) + (let ((s5-1 (-> *display* frames (-> *display* last-screen) run-time))) + (let ((f0-5 (fmax + 327680.0 + (fmin (+ 327680.0 (* 204.8 (the float (- (seconds 23.335) s5-1)))) (-> *ACTOR-bank* birth-dist)) + ) + ) + ) + (seek! (-> *ACTOR-bank* pause-dist) f0-5 (* 81920.0 (-> pp clock seconds-per-frame))) + ) + (seekl! (-> *ACTOR-bank* birth-max) (the int (lerp-scale 25.0 2.0 (the float s5-1) 2000.0 7000.0)) 10) + ) + (if (movie?) + (set! (-> *ACTOR-bank* birth-max) 1000) + ) + ) + (when *spawn-actors* + (set! sv-16 (if (movie?) + (math-camera-pos) + (camera-pos) + ) + ) + (set! sv-24 0) + (dotimes (s5-2 (-> obj length)) + (let ((s4-1 (-> obj level s5-2))) + (when (= (-> s4-1 status) 'active) + (set! sv-32 (-> s4-1 task-mask)) + (cond + ((= (-> s4-1 display?) 'special) + (let* ((s4-2 (-> s4-1 entity)) + (s3-1 (-> s4-2 length)) + ) + (dotimes (s2-0 s3-1) + (let ((v1-54 (-> s4-2 data s2-0))) + (cond + ((and (logtest? (-> v1-54 kill-mask) (task-mask special)) (zero? (logand (-> v1-54 kill-mask) sv-32))) + (when (not (or (-> v1-54 process) (logtest? (-> v1-54 perm status) (entity-perm-status bit-0 dead)))) + (birth! (-> v1-54 entity)) + (set! sv-24 (+ sv-24 1)) + (if (>= sv-24 (-> *ACTOR-bank* birth-max)) + (return #f) + ) + ) + ) + (else + (if (and (-> v1-54 process) + (zero? (logand (-> v1-54 perm status) (entity-perm-status no-kill))) + (zero? (logand (-> v1-54 process mask) (process-mask no-kill))) + ) + (kill! (-> v1-54 entity)) + ) + ) + ) + ) + ) + ) + ) + ((= (-> s4-1 display?) 'actor) + (let* ((s4-3 (-> s4-1 entity)) + (s3-2 (-> s4-3 length)) + ) + (dotimes (s2-1 s3-2) + (let ((v1-67 (-> s4-3 data s2-1))) + (cond + ((zero? (logand (-> v1-67 kill-mask) sv-32)) + (when (not (or (-> v1-67 process) (logtest? (-> v1-67 perm status) (entity-perm-status bit-0 dead)))) + (birth! (-> v1-67 entity)) + (set! sv-24 (+ sv-24 1)) + (if (>= sv-24 (-> *ACTOR-bank* birth-max)) + (return #f) + ) + ) + ) + (else + (if (and (-> v1-67 process) + (zero? (logand (-> v1-67 perm status) (entity-perm-status no-kill))) + (zero? (logand (-> v1-67 process mask) (process-mask no-kill))) + ) + (kill! (-> v1-67 entity)) + ) + ) + ) + ) + ) + ) + ) + ((not *vis-actors*) + (let* ((s4-4 (-> s4-1 entity)) + (s3-3 (-> s4-4 length)) + ) + (dotimes (s2-2 s3-3) + (let ((s1-0 (-> s4-4 data s2-2))) + (cond + ((and (< (vector-vector-distance (-> s1-0 trans) sv-16) (-> *ACTOR-bank* birth-dist)) + (zero? (logand (-> s1-0 perm status) (entity-perm-status bit-9 bit-10))) + (zero? (logand (-> s1-0 kill-mask) sv-32)) + ) + (when (not (or (-> s1-0 process) (logtest? (-> s1-0 perm status) (entity-perm-status bit-0 dead)))) + (birth! (-> s1-0 entity)) + (set! sv-24 (+ sv-24 1)) + (if (>= sv-24 (-> *ACTOR-bank* birth-max)) + (return #f) + ) + ) + ) + (else + (if (and (-> s1-0 process) + (zero? (logand (-> s1-0 perm status) (entity-perm-status no-kill))) + (zero? (logand (-> s1-0 process mask) (process-mask no-kill))) + ) + (kill! (-> s1-0 entity)) + ) + ) + ) + ) + ) + ) + ) + (*vis-actors* + (when (not (and (-> s4-1 vis-info 0) (-> s4-1 all-visible?))) + (let* ((s3-4 (-> s4-1 entity)) + (s2-3 (-> s3-4 length)) + (s0-0 #f) + ) + (dotimes (s1-1 s2-3) + (set! sv-48 (-> s3-4 data s1-1)) + (cond + ((and (is-object-visible? s4-1 (-> sv-48 vis-id)) + (zero? (logand (-> sv-48 perm status) (entity-perm-status bit-9 bit-10))) + (zero? (logand (-> sv-48 kill-mask) sv-32)) + (or (-> s4-1 vis-info 0) (< (vector-vector-distance (-> sv-48 trans) sv-16) (-> sv-48 vis-dist))) + ) + (when (not (or (-> sv-48 process) (logtest? (-> sv-48 perm status) (entity-perm-status bit-0 dead)) s0-0)) + (birth! (-> sv-48 entity)) + (set! sv-24 (+ sv-24 1)) + (when (< (/ (the float (memory-free *nk-dead-pool*)) (the float (memory-total *nk-dead-pool*))) 0.1) + (when *debug-segment* + (let ((s0-1 format)) + (set! sv-64 *stdcon*) + (set! sv-80 "low actor memory, no birth triggered!!! ~,,0fK/~,,0fK~%") + (set! sv-96 (* 0.0009765625 (the float (memory-free *nk-dead-pool*)))) + (let ((a3-2 (* 0.0009765625 (the float (memory-total *nk-dead-pool*))))) + (s0-1 sv-64 sv-80 sv-96 a3-2) + ) + ) + ) + (set! s0-0 #t) + ) + ) + ) + (else + (when (and (-> sv-48 process) + (zero? (logand (-> sv-48 perm status) (entity-perm-status no-kill))) + (zero? (logand (-> sv-48 process mask) (process-mask no-kill))) + ) + (kill! (-> sv-48 entity)) + (set! sv-24 (+ sv-24 1)) + ) + ) + ) + (if (>= sv-24 (-> *ACTOR-bank* birth-max)) + (return #f) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for function entity-birth-no-kill +(defun entity-birth-no-kill ((arg0 entity)) + (let ((gp-0 (-> arg0 extra))) + (logior! (-> gp-0 perm status) (entity-perm-status no-kill)) + (if (not (or (-> gp-0 process) (logtest? (-> gp-0 perm status) (entity-perm-status bit-0 dead)))) + (birth! (-> gp-0 entity)) + ) + (-> gp-0 process) + ) + ) + +;; definition for function entity-task-complete-on +;; WARN: Return type mismatch int vs none. +(defun entity-task-complete-on ((arg0 entity)) + (let ((v1-0 (-> arg0 extra))) + (if (nonzero? (-> v1-0 perm task)) + (logior! (-> *game-info* task-perm-list data (-> v1-0 perm task) status) (entity-perm-status complete)) + ) + ) + 0 + (none) + ) + +;; definition for function entity-task-complete-off +;; WARN: Return type mismatch int vs none. +(defun entity-task-complete-off ((arg0 entity)) + (let ((v1-0 (-> arg0 extra))) + (if (!= (-> v1-0 perm task) 1) + (logclear! (-> *game-info* task-perm-list data (-> v1-0 perm task) status) (entity-perm-status complete)) + ) + ) + 0 + (none) + ) + +;; definition for method 30 of type entity-actor +;; WARN: Return type mismatch entity-perm-status vs none. +(defmethod toggle-status entity-actor ((obj entity-actor) (arg0 entity-perm-status) (arg1 symbol)) + (let ((v1-0 (-> obj extra))) + (if arg1 + (logior! (-> v1-0 perm status) arg0) + (logclear! (-> v1-0 perm status) arg0) + ) + (-> v1-0 perm status) + ) + (none) + ) + +;; definition for function process-entity-status! +(defun process-entity-status! ((arg0 process) (arg1 entity-perm-status) (arg2 symbol)) + (cond + ((and (-> arg0 entity) arg0 (= arg0 (-> arg0 entity extra process))) + (let ((v1-6 (-> arg0 entity extra))) + (if arg2 + (logior! (-> v1-6 perm status) arg1) + (logclear! (-> v1-6 perm status) arg1) + ) + (the-as int (-> v1-6 perm status)) + ) + ) + (else + 0 + ) + ) + ) + +;; definition for function find-nearest-entity +;; WARN: Return type mismatch entity-actor vs entity. +(defun find-nearest-entity ((arg0 vector) (arg1 type)) + (local-vars (v1-9 object)) + (let ((gp-0 (the-as entity-actor #f))) + (let ((f30-0 0.0) + (f0-0 0.0) + ) + (dotimes (s3-0 (-> *level* length)) + (let ((v1-3 (-> *level* level s3-0))) + (when (= (-> v1-3 status) 'active) + (let ((s2-0 (-> v1-3 bsp actors))) + (when (nonzero? s2-0) + (dotimes (s1-0 (-> s2-0 length)) + (let ((s0-0 (-> s2-0 data s1-0 actor))) + (let ((v1-7 (or (not arg1) (= (-> s0-0 etype) arg1)))) + (b! (not v1-7) cfg-15 :likely-delay (set! v1-9 v1-7)) + ) + (set! f0-0 (vector-vector-distance arg0 (-> s0-0 extra trans))) + (set! v1-9 f0-0) + (b! (not (the int v1-9)) cfg-15 :likely-delay (nop!)) + (b! (not gp-0) cfg-15 :likely-delay (set! v1-9 #t)) + (b! (< f0-0 f30-0) cfg-15 :delay (set! v1-9 #t)) + (set! v1-9 #f) + (label cfg-15) + (when v1-9 + (set! gp-0 s0-0) + (set! f30-0 f0-0) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (the-as entity gp-0) + ) + ) + +;; definition (debug) for function entity-speed-test +;; WARN: Return type mismatch entity vs none. +;; ERROR: Unsupported inline assembly instruction kind - [mtc0 Count, r0] +;; ERROR: Unsupported inline assembly instruction kind - [sync.p] +;; ERROR: Unsupported inline assembly instruction kind - [mfc0 s4, Count] +(defun-debug entity-speed-test ((arg0 string)) + (local-vars (s4-0 int)) + (let ((gp-0 (entity-by-name arg0))) + (when gp-0 + (set! *spawn-actors* #f) + (reset-actors 'debug) + 0 + (disable-irq) + (.mtc0 Count r0) + (.sync.p) + (birth! gp-0) + (.mfc0 s4-0 Count) + (enable-irq) + (format #t "~D spawn ~A ~A ~%" s4-0 arg0 (-> gp-0 extra process)) + (kill! gp-0) + ) + ) + (none) + ) + +;; definition (debug) for function dump-entity-remap +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun-debug dump-entity-remap ((arg0 object) (arg1 object)) + (local-vars + (sv-16 symbol) + (sv-32 string) + (sv-48 symbol) + (sv-64 string) + (sv-80 symbol) + (sv-96 string) + (sv-112 string) + ) + (format #t "~%(:eval (remap-entity-list '(") + (dotimes (s4-0 (-> *level* length)) + (let ((s3-0 (-> *level* level s4-0))) + (when (= (-> s3-0 status) 'active) + (when (= (-> s3-0 name) arg0) + (let ((s2-0 (-> s3-0 bsp actors))) + (when (nonzero? s2-0) + (dotimes (s1-0 (-> s2-0 length)) + (let ((a0-4 (-> s2-0 data s1-0 actor)) + (s0-0 format) + ) + (set! sv-16 #t) + (set! sv-32 "~A ") + (let ((a2-1 (res-lump-struct a0-4 'name structure))) + (s0-0 sv-16 sv-32 a2-1) + ) + ) + ) + ) + ) + (let ((s2-1 (-> s3-0 bsp nav-meshes))) + (when (nonzero? s2-1) + (dotimes (s1-1 (-> s2-1 length)) + (let ((a0-6 (-> s2-1 s1-1)) + (s0-1 format) + ) + (set! sv-48 #t) + (set! sv-64 "~A ") + (let ((a2-3 (res-lump-struct a0-6 'name structure))) + (s0-1 sv-48 sv-64 a2-3) + ) + ) + ) + ) + ) + (let ((s2-2 (-> s3-0 bsp race-meshes))) + (when (nonzero? s2-2) + (dotimes (s1-2 (-> s2-2 length)) + (let ((a0-8 (-> s2-2 s1-2)) + (s0-2 format) + ) + (set! sv-80 #t) + (set! sv-96 "~A ") + (let ((a2-5 (res-lump-struct a0-8 'name structure))) + (s0-2 sv-80 sv-96 a2-5) + ) + ) + ) + ) + ) + (let ((s3-1 (-> s3-0 bsp cameras))) + (when (nonzero? s3-1) + (dotimes (s2-3 (-> s3-1 length)) + (let ((a0-10 (-> s3-1 s2-3)) + (s1-3 format) + (s0-3 #t) + ) + (set! sv-112 "~A ") + (let ((a2-7 (res-lump-struct a0-10 'name structure))) + (s1-3 s0-3 sv-112 a2-7) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (format #t ") '~A '~A))~%~%" arg0 arg1) + 0 + (none) + ) diff --git a/test/decompiler/reference/jak2/engine/game/game-info-h_REF.gc b/test/decompiler/reference/jak2/engine/game/game-info-h_REF.gc index 1de5a6fa62..593d190f9d 100644 --- a/test/decompiler/reference/jak2/engine/game/game-info-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/game-info-h_REF.gc @@ -131,12 +131,12 @@ (want-display-level (_type_ symbol symbol) int 13) (want-vis-level (_type_ symbol) none 14) (want-force-vis (_type_ symbol symbol) int 15) - (execute-command (_type_ pair object) none 16) + (want-force-inside (_type_ symbol symbol) none 16) (execute-commands-up-to (_type_ float) none 17) (backup-load-state-and-set-cmds (_type_ pair) int 18) (restore-load-state-and-cleanup (_type_) int 19) (restore-load-state (_type_) int 20) - (set-force-inside! (_type_ symbol symbol) none 21) + (add-borrow-levels (_type_) none 21) ) ) @@ -335,7 +335,7 @@ (game-info-method-18 () none 18) (get-current-continue-point (_type_) continue-point 19) (get-continue-by-name (_type_ string) continue-point 20) - (set-continue! (_type_ basic symbol) continue-point 21) + (set-continue! (_type_ basic object) continue-point 21) (game-info-method-22 () none 22) (game-info-method-23 () none 23) (game-info-method-24 () none 24) diff --git a/test/decompiler/reference/jak2/engine/game/settings-h_REF.gc b/test/decompiler/reference/jak2/engine/game/settings-h_REF.gc index fe713a516b..52d2963830 100644 --- a/test/decompiler/reference/jak2/engine/game/settings-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/settings-h_REF.gc @@ -7,8 +7,8 @@ (process-mask process-mask :offset-assert 4) (unknown-int32-00 int32 :offset-assert 8) (language language-enum :offset 16) - (unknown-int32-01 int32 :offset-assert 24) - (unknown-int32-02 int32 :offset-assert 28) + (display-dx int32 :offset-assert 24) + (display-dy int32 :offset-assert 28) (vibration symbol :offset 32) (play-hints symbol :offset 36) (movie (pointer process) :offset 40) @@ -18,7 +18,7 @@ (ambient (pointer process) :offset-assert 56) (video-mode symbol :offset-assert 60) (aspect-ratio symbol :offset-assert 64) - (unknown-uint32-00 uint32 :offset 68) + (use-progressive-scan symbol :offset 68) (auto-save symbol :offset 72) (bg-r float :offset-assert 76) (bg-g float :offset-assert 80) @@ -92,7 +92,7 @@ (movie-skip-frame float :offset-assert 356) (allow-blackout symbol :offset-assert 360) (race-minimap int32 :offset-assert 364) - (extra-bank symbol :offset-assert 368) + (extra-bank pair :offset-assert 368) (beard symbol :offset-assert 372) (ignore-target symbol :offset-assert 376) (subtitle-language language-enum :offset-assert 384) diff --git a/test/decompiler/reference/jak2/engine/game/settings_REF.gc b/test/decompiler/reference/jak2/engine/game/settings_REF.gc index 71c4c5c4d2..f641e0bce6 100644 --- a/test/decompiler/reference/jak2/engine/game/settings_REF.gc +++ b/test/decompiler/reference/jak2/engine/game/settings_REF.gc @@ -102,7 +102,7 @@ (set! (-> obj music) arg1) ) (('extra-bank) - (set! (-> obj extra-bank) arg1) + (set! (-> obj extra-bank) (the-as pair arg1)) ) (('process-mask) (case arg1 @@ -1213,21 +1213,21 @@ (set! (-> s5-0 aspect-ratio) (-> s4-0 aspect-ratio)) (set-aspect-ratio (-> s5-0 aspect-ratio)) ) - (when (!= (-> s5-0 unknown-uint32-00) (-> s4-0 unknown-uint32-00)) - (set! (-> s5-0 unknown-uint32-00) (-> s4-0 unknown-uint32-00)) - (set! (-> *video-params* set-video-mode) (the-as basic #t)) + (when (!= (-> s5-0 use-progressive-scan) (-> s4-0 use-progressive-scan)) + (set! (-> s5-0 use-progressive-scan) (-> s4-0 use-progressive-scan)) + (set! (-> *video-params* set-video-mode) #t) ) (when (!= (-> s5-0 video-mode) (-> s4-0 video-mode)) (set! (-> s5-0 video-mode) (-> s4-0 video-mode)) (set-video-mode (-> s5-0 video-mode)) ) - (when (!= (-> s5-0 unknown-int32-01) (-> s4-0 unknown-int32-01)) - (set! (-> s5-0 unknown-int32-01) (-> s4-0 unknown-int32-01)) - (set! (-> *video-params* display-dx) (/ (-> s4-0 unknown-int32-01) 2)) + (when (!= (-> s5-0 display-dx) (-> s4-0 display-dx)) + (set! (-> s5-0 display-dx) (-> s4-0 display-dx)) + (set! (-> *video-params* display-dx) (/ (-> s4-0 display-dx) 2)) ) - (when (!= (-> s5-0 unknown-int32-02) (-> s4-0 unknown-int32-02)) - (set! (-> s5-0 unknown-int32-02) (-> s4-0 unknown-int32-02)) - (set! (-> *video-params* display-dy) (* (/ (-> s4-0 unknown-int32-02) 2) 2)) + (when (!= (-> s5-0 display-dy) (-> s4-0 display-dy)) + (set! (-> s5-0 display-dy) (-> s4-0 display-dy)) + (set! (-> *video-params* display-dy) (* (/ (-> s4-0 display-dy) 2) 2)) ) (set! (-> *blit-displays-work* horizontal-flip-flag) (the-as basic (logtest? (-> *game-info* secrets) (game-secrets hflip-screen))) @@ -1434,9 +1434,9 @@ (set! (-> gp-0 language) (scf-get-language)) (set! (-> gp-0 subtitle-language) (-> gp-0 language)) (set! (-> gp-0 process-mask) (process-mask execute sleep)) - (set! (-> gp-0 unknown-uint32-00) (the-as uint #f)) - (set! (-> gp-0 unknown-int32-01) 0) - (set! (-> gp-0 unknown-int32-02) 0) + (set! (-> gp-0 use-progressive-scan) #f) + (set! (-> gp-0 display-dx) 0) + (set! (-> gp-0 display-dy) 0) (set! (-> gp-0 vibration) (if (or (= *kernel-boot-message* 'demo) (= *kernel-boot-message* 'demo-shared) (nonzero? (scf-get-territory))) #f @@ -1495,7 +1495,7 @@ (set! (-> gp-0 sound-reverb) 0.0) (set! (-> gp-0 mode-sound-bank) (the-as uint #f)) (set! (-> gp-0 music) #f) - (set! (-> gp-0 extra-bank) (the-as symbol '())) + (set! (-> gp-0 extra-bank) '()) (set! (-> gp-0 bg-a-speed) 8.0) (set! (-> gp-0 under-water-pitch-mod) 0.0) (set! (-> gp-0 allow-pause) #t) @@ -1541,10 +1541,10 @@ (set! (-> s5-0 language) (+ (-> gp-0 language) -1)) (set! (-> s5-0 subtitle-language) (-> gp-0 subtitle-language)) (set! (-> s5-0 aspect-ratio) #f) - (set! (-> s5-0 unknown-uint32-00) (the-as uint #f)) + (set! (-> s5-0 use-progressive-scan) #f) (set! (-> s5-0 video-mode) #f) (set! (-> s5-0 music) #f) - (set! (-> s5-0 extra-bank) (the-as symbol '())) + (set! (-> s5-0 extra-bank) '()) (set! (-> s5-0 allow-blackout) (-> gp-0 allow-blackout)) (set! (-> s5-0 bg-a-speed) (-> gp-0 bg-a-speed)) (set! (-> s5-0 under-water-pitch-mod) (-> gp-0 under-water-pitch-mod)) diff --git a/test/decompiler/reference/jak2/engine/geometry/path-h_REF.gc b/test/decompiler/reference/jak2/engine/geometry/path-h_REF.gc index f32f217fb9..c66c444f22 100644 --- a/test/decompiler/reference/jak2/engine/geometry/path-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/geometry/path-h_REF.gc @@ -15,7 +15,7 @@ :flag-assert #x1b00000024 (:methods (new (symbol type process symbol float entity symbol) _type_ 0) - (path-control-method-9 () none 9) + (debug-draw (_type_) none 9) (path-control-method-10 () none 10) (path-control-method-11 () none 11) (path-control-method-12 () none 12) diff --git a/test/decompiler/reference/jak2/engine/geometry/vol-h_REF.gc b/test/decompiler/reference/jak2/engine/geometry/vol-h_REF.gc index c60f386d13..4fbef45ecb 100644 --- a/test/decompiler/reference/jak2/engine/geometry/vol-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/geometry/vol-h_REF.gc @@ -56,7 +56,7 @@ :flag-assert #xc0000061c (:methods (new (symbol type process-drawable) _type_ 0) - (vol-control-method-9 (_type_) none 9) + (debug-draw (_type_) none 9) (vol-control-method-10 (_type_ plane) symbol 10) (should-display? (_type_) symbol 11) ) diff --git a/test/decompiler/reference/jak2/engine/geometry/vol_REF.gc b/test/decompiler/reference/jak2/engine/geometry/vol_REF.gc index f5e0c99ba3..31d49e42f1 100644 --- a/test/decompiler/reference/jak2/engine/geometry/vol_REF.gc +++ b/test/decompiler/reference/jak2/engine/geometry/vol_REF.gc @@ -269,7 +269,7 @@ (dotimes (s3-0 (/ (-> obj point-count) 2)) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (the-as vector s4-0) (the-as vector (&-> s4-0 4)) (the-as rgba s5-0) @@ -296,7 +296,7 @@ ;; definition for method 9 of type vol-control ;; WARN: Return type mismatch int vs none. -(defmethod vol-control-method-9 vol-control ((obj vol-control)) +(defmethod debug-draw vol-control ((obj vol-control)) (with-pp (let ((a0-1 obj)) (when (and (and *display-vol-marks* (logtest? (-> a0-1 flags) (vol-flags display?))) diff --git a/test/decompiler/reference/jak2/engine/gfx/background/wind-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/background/wind-h_REF.gc index df0f0e84bb..40fa180a10 100644 --- a/test/decompiler/reference/jak2/engine/gfx/background/wind-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/background/wind-h_REF.gc @@ -27,41 +27,40 @@ ) ;; definition for symbol *wind-scales*, type (array uint8) -(define *wind-scales* (the-as (array uint8) (new 'static 'boxed-array :type uint8 - #x2 - #x5 - #x2 - #x3 - #x2 - #x2 - #x3 - #x10 - #xa - #x2 - #x4 - #x2 - #x8 - #x2 - #x2 - #x10 - #x2 - #x2 - #x8 - #x2 - #x10 - #x2 - #x4 - #x10 - #xa - #x2 - #x4 - #x2 - #x8 - #x2 - #x2 - #x10 - ) - ) +(define *wind-scales* (new 'static 'boxed-array :type uint8 + #x2 + #x5 + #x2 + #x3 + #x2 + #x2 + #x3 + #x10 + #xa + #x2 + #x4 + #x2 + #x8 + #x2 + #x2 + #x10 + #x2 + #x2 + #x8 + #x2 + #x10 + #x2 + #x4 + #x10 + #xa + #x2 + #x4 + #x2 + #x8 + #x2 + #x2 + #x10 + ) ) ;; definition of type wind-work @@ -150,7 +149,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/gfx/hw/video-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/hw/video-h_REF.gc index 29cfb60bd8..5e9ec15fa8 100644 --- a/test/decompiler/reference/jak2/engine/gfx/hw/video-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/hw/video-h_REF.gc @@ -3,15 +3,15 @@ ;; definition of type video-params (deftype video-params (structure) - ((set-video-mode basic :offset-assert 0) - (reset-video-mode basic :offset-assert 4) - (display-fbp int32 :offset-assert 8) - (relative-x-scale float :offset 16) - (display-dx int32 :offset-assert 20) - (display-dy int32 :offset-assert 24) - (display-sy int32 :offset-assert 28) - (relative-x-scale-reciprical float :offset-assert 32) - (screen-pages-high int32 :offset-assert 36) + ((set-video-mode symbol :offset-assert 0) + (reset-video-mode symbol :offset-assert 4) + (display-fbp int32 :offset-assert 8) + (relative-x-scale float :offset 16) + (display-dx int32 :offset-assert 20) + (display-dy int32 :offset-assert 24) + (display-sy int32 :offset-assert 28) + (relative-x-scale-reciprical float :offset-assert 32) + (screen-pages-high int32 :offset-assert 36) ) :method-count-assert 9 :size-assert #x28 @@ -53,7 +53,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/gfx/mood/mood_REF.gc b/test/decompiler/reference/jak2/engine/gfx/mood/mood_REF.gc index 619537e50f..49908e3230 100644 --- a/test/decompiler/reference/jak2/engine/gfx/mood/mood_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/mood/mood_REF.gc @@ -694,84 +694,67 @@ ;; definition for symbol *flash0*, type (array float) (define *flash0* - (the-as (array float) - (new 'static 'boxed-array :type float 1.0 0.0 0.5 1.0 0.5 0.0 0.5 0.35 0.4 0.35 0.25 0.1 0.04) - ) + (new 'static 'boxed-array :type float 1.0 0.0 0.5 1.0 0.5 0.0 0.5 0.35 0.4 0.35 0.25 0.1 0.04) ) ;; definition for symbol *flash1*, type (array float) -(define *flash1* - (the-as (array float) (new 'static 'boxed-array :type float 1.0 0.8 0.0 1.0 0.5 1.0 0.4 0.2 0.1)) - ) +(define *flash1* (new 'static 'boxed-array :type float 1.0 0.8 0.0 1.0 0.5 1.0 0.4 0.2 0.1)) ;; definition for symbol *flash2*, type (array float) -(define *flash2* - (the-as (array float) (new 'static 'boxed-array :type float 1.0 0.9 0.8 0.7 0.0 0.0 1.0 0.0 1.0 0.5)) - ) +(define *flash2* (new 'static 'boxed-array :type float 1.0 0.9 0.8 0.7 0.0 0.0 1.0 0.0 1.0 0.5)) ;; definition for symbol *flash3*, type (array float) -(define *flash3* - (the-as (array float) - (new 'static 'boxed-array :type float 0.5 0.0 1.0 0.9 1.0 0.8 0.3 0.0 0.0 0.5 0.1 0.5 0.35) - ) - ) +(define *flash3* (new 'static 'boxed-array :type float 0.5 0.0 1.0 0.9 1.0 0.8 0.3 0.0 0.0 0.5 0.1 0.5 0.35)) ;; definition for symbol *flash4*, type (array float) (define *flash4* - (the-as (array float) - (new 'static 'boxed-array :type float 1.0 0.0 1.0 0.0 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.5 0.4 0.3 0.2 0.1) - ) + (new 'static 'boxed-array :type float 1.0 0.0 1.0 0.0 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.5 0.4 0.3 0.2 0.1) ) ;; definition for symbol *flash5*, type (array float) -(define *flash5* (the-as (array float) (new 'static 'boxed-array :type float - 1.0 - 0.0 - 1.0 - 0.0 - 1.0 - 0.95 - 0.9 - 0.85 - 0.8 - 0.75 - 0.7 - 0.65 - 0.6 - 0.55 - 0.5 - 0.45 - 0.4 - 0.35 - 0.3 - 0.25 - 0.2 - 0.5 - 0.45 - 0.4 - 0.35 - 0.3 - 0.25 - 0.2 - 0.15 - 0.1 - 0.05 - ) - ) +(define *flash5* (new 'static 'boxed-array :type float + 1.0 + 0.0 + 1.0 + 0.0 + 1.0 + 0.95 + 0.9 + 0.85 + 0.8 + 0.75 + 0.7 + 0.65 + 0.6 + 0.55 + 0.5 + 0.45 + 0.4 + 0.35 + 0.3 + 0.25 + 0.2 + 0.5 + 0.45 + 0.4 + 0.35 + 0.3 + 0.25 + 0.2 + 0.15 + 0.1 + 0.05 + ) ) ;; definition for symbol *flash6*, type (array float) (define *flash6* - (the-as (array float) - (new 'static 'boxed-array :type float 1.0 0.0 1.0 0.0 0.5 0.0 0.5 0.35 0.0 0.0 1.0 0.0 0.2 0.1) - ) + (new 'static 'boxed-array :type float 1.0 0.0 1.0 0.0 0.5 0.0 0.5 0.35 0.0 0.0 1.0 0.0 0.2 0.1) ) ;; definition for symbol *flash7*, type (array float) (define *flash7* - (the-as (array float) - (new 'static 'boxed-array :type float 1.0 0.8 0.3 0.0 0.6 0.5 0.4 0.3 0.2 0.5 0.4 0.3 0.2 0.1) - ) + (new 'static 'boxed-array :type float 1.0 0.8 0.3 0.0 0.6 0.5 0.4 0.3 0.2 0.5 0.4 0.3 0.2 0.1) ) ;; definition of type light-state diff --git a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher_REF.gc b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher_REF.gc index a35556c26a..4d078f8413 100644 --- a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher_REF.gc @@ -1278,12 +1278,12 @@ (when (or *display-sprite-marks* *display-sprite-spheres* (and *display-actor-vis* (= (-> obj proc) *debug-actor*))) (add-debug-sphere *display-sprite-spheres* - (bucket-id bucket-324) + (bucket-id debug2) s5-1 (-> s5-1 w) (new 'static 'rgba :g #xff :a #x80) ) - (add-debug-matrix *display-sprite-marks* (bucket-id bucket-324) (-> obj origin) (meters 2.0)) + (add-debug-matrix *display-sprite-marks* (bucket-id debug2) (-> obj origin) (meters 2.0)) ) (sphere-in-view-frustum? (the-as sphere s5-1)) ) diff --git a/test/decompiler/reference/jak2/engine/gfx/texture/texture-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/texture/texture-h_REF.gc index 7d03568192..d6a264e4fe 100644 --- a/test/decompiler/reference/jak2/engine/gfx/texture/texture-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/texture/texture-h_REF.gc @@ -546,307 +546,299 @@ ) ;; definition for symbol ct32-24-block-table, type (array int32) -(define ct32-24-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 1 - 4 - 5 - 16 - 17 - 20 - 21 - 2 - 3 - 6 - 7 - 18 - 19 - 22 - 23 - 8 - 9 - 12 - 13 - 24 - 25 - 28 - 29 - 10 - 11 - 14 - 15 - 26 - 27 - 30 - 31 - ) - ) +(define ct32-24-block-table (new 'static 'boxed-array :type int32 + 0 + 1 + 4 + 5 + 16 + 17 + 20 + 21 + 2 + 3 + 6 + 7 + 18 + 19 + 22 + 23 + 8 + 9 + 12 + 13 + 24 + 25 + 28 + 29 + 10 + 11 + 14 + 15 + 26 + 27 + 30 + 31 + ) ) ;; definition for symbol mz32-24-block-table, type (array int32) -(define mz32-24-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 16 - 17 - 20 - 21 - 0 - 1 - 4 - 5 - 18 - 19 - 22 - 23 - 2 - 3 - 6 - 7 - 24 - 25 - 28 - 29 - 8 - 9 - 12 - 13 - 26 - 27 - 30 - 31 - 10 - 11 - 14 - 15 - ) - ) +(define mz32-24-block-table (new 'static 'boxed-array :type int32 + 16 + 17 + 20 + 21 + 0 + 1 + 4 + 5 + 18 + 19 + 22 + 23 + 2 + 3 + 6 + 7 + 24 + 25 + 28 + 29 + 8 + 9 + 12 + 13 + 26 + 27 + 30 + 31 + 10 + 11 + 14 + 15 + ) ) ;; definition for symbol ct16-block-table, type (array int32) -(define ct16-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 2 - 8 - 10 - 1 - 3 - 9 - 11 - 4 - 6 - 12 - 14 - 5 - 7 - 13 - 15 - 16 - 18 - 24 - 26 - 17 - 19 - 25 - 27 - 20 - 22 - 28 - 30 - 21 - 23 - 29 - 31 - ) - ) +(define ct16-block-table (new 'static 'boxed-array :type int32 + 0 + 2 + 8 + 10 + 1 + 3 + 9 + 11 + 4 + 6 + 12 + 14 + 5 + 7 + 13 + 15 + 16 + 18 + 24 + 26 + 17 + 19 + 25 + 27 + 20 + 22 + 28 + 30 + 21 + 23 + 29 + 31 + ) ) ;; definition for symbol ct16s-block-table, type (array int32) -(define ct16s-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 2 - 16 - 18 - 1 - 3 - 17 - 19 - 8 - 10 - 24 - 26 - 9 - 11 - 25 - 27 - 4 - 6 - 20 - 22 - 5 - 7 - 21 - 23 - 12 - 14 - 28 - 30 - 13 - 15 - 29 - 31 - ) - ) +(define ct16s-block-table (new 'static 'boxed-array :type int32 + 0 + 2 + 16 + 18 + 1 + 3 + 17 + 19 + 8 + 10 + 24 + 26 + 9 + 11 + 25 + 27 + 4 + 6 + 20 + 22 + 5 + 7 + 21 + 23 + 12 + 14 + 28 + 30 + 13 + 15 + 29 + 31 + ) ) ;; definition for symbol mz16-block-table, type (array int32) -(define mz16-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 16 - 18 - 24 - 26 - 17 - 19 - 25 - 27 - 20 - 22 - 28 - 30 - 21 - 23 - 29 - 31 - 0 - 2 - 8 - 10 - 1 - 3 - 9 - 11 - 4 - 6 - 12 - 14 - 5 - 7 - 13 - 15 - ) - ) +(define mz16-block-table (new 'static 'boxed-array :type int32 + 16 + 18 + 24 + 26 + 17 + 19 + 25 + 27 + 20 + 22 + 28 + 30 + 21 + 23 + 29 + 31 + 0 + 2 + 8 + 10 + 1 + 3 + 9 + 11 + 4 + 6 + 12 + 14 + 5 + 7 + 13 + 15 + ) ) ;; definition for symbol mz16s-block-table, type (array int32) -(define mz16s-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 16 - 18 - 0 - 2 - 17 - 19 - 1 - 3 - 24 - 26 - 8 - 10 - 25 - 27 - 9 - 11 - 20 - 22 - 4 - 6 - 21 - 23 - 5 - 7 - 28 - 30 - 12 - 14 - 29 - 31 - 13 - 15 - ) - ) +(define mz16s-block-table (new 'static 'boxed-array :type int32 + 16 + 18 + 0 + 2 + 17 + 19 + 1 + 3 + 24 + 26 + 8 + 10 + 25 + 27 + 9 + 11 + 20 + 22 + 4 + 6 + 21 + 23 + 5 + 7 + 28 + 30 + 12 + 14 + 29 + 31 + 13 + 15 + ) ) ;; definition for symbol mt8-block-table, type (array int32) -(define mt8-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 1 - 4 - 5 - 16 - 17 - 20 - 21 - 2 - 3 - 6 - 7 - 18 - 19 - 22 - 23 - 8 - 9 - 12 - 13 - 24 - 25 - 28 - 29 - 10 - 11 - 14 - 15 - 26 - 27 - 30 - 31 - ) - ) +(define mt8-block-table (new 'static 'boxed-array :type int32 + 0 + 1 + 4 + 5 + 16 + 17 + 20 + 21 + 2 + 3 + 6 + 7 + 18 + 19 + 22 + 23 + 8 + 9 + 12 + 13 + 24 + 25 + 28 + 29 + 10 + 11 + 14 + 15 + 26 + 27 + 30 + 31 + ) ) ;; definition for symbol mt4-block-table, type (array int32) -(define mt4-block-table (the-as (array int32) (new 'static 'boxed-array :type int32 - 0 - 2 - 8 - 10 - 1 - 3 - 9 - 11 - 4 - 6 - 12 - 14 - 5 - 7 - 13 - 15 - 16 - 18 - 24 - 26 - 17 - 19 - 25 - 27 - 20 - 22 - 28 - 30 - 21 - 23 - 29 - 31 - ) - ) +(define mt4-block-table (new 'static 'boxed-array :type int32 + 0 + 2 + 8 + 10 + 1 + 3 + 9 + 11 + 4 + 6 + 12 + 14 + 5 + 7 + 13 + 15 + 16 + 18 + 24 + 26 + 17 + 19 + 25 + 27 + 20 + 22 + 28 + 30 + 21 + 23 + 29 + 31 + ) ) ;; definition of type texture-page-translate-item @@ -877,385 +869,383 @@ ) ;; definition for symbol *texture-page-translate*, type (array texture-page-translate-item) -(define *texture-page-translate* - (the-as (array texture-page-translate-item) (new 'static 'boxed-array :type texture-page-translate-item - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-lcom-sky-pre) - :level-index #x6 - :level-texture-page (tpage-category-u32 sky) - :texture-user (texture-enable-mask-u32 sky) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l0-tfrag) - :texture-user (texture-enable-mask-u32 tfrag) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l1-tfrag) - :level-index #x1 - :texture-user (texture-enable-mask-u32 tfrag) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l2-tfrag) - :level-index #x2 - :texture-user (texture-enable-mask-u32 tfrag) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l3-tfrag) - :level-index #x3 - :texture-user (texture-enable-mask-u32 tfrag) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l4-tfrag) - :level-index #x4 - :texture-user (texture-enable-mask-u32 tfrag) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l5-tfrag) - :level-index #x5 - :texture-user (texture-enable-mask-u32 tfrag) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l0-shrub) - :level-texture-page (tpage-category-u32 shrub) - :texture-user (texture-enable-mask-u32 shrub) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l1-shrub) - :level-index #x1 - :level-texture-page (tpage-category-u32 shrub) - :texture-user (texture-enable-mask-u32 shrub) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l2-shrub) - :level-index #x2 - :level-texture-page (tpage-category-u32 shrub) - :texture-user (texture-enable-mask-u32 shrub) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l3-shrub) - :level-index #x3 - :level-texture-page (tpage-category-u32 shrub) - :texture-user (texture-enable-mask-u32 shrub) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l4-shrub) - :level-index #x4 - :level-texture-page (tpage-category-u32 shrub) - :texture-user (texture-enable-mask-u32 shrub) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l5-shrub) - :level-index #x5 - :level-texture-page (tpage-category-u32 shrub) - :texture-user (texture-enable-mask-u32 shrub) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l0-alpha) - :level-texture-page (tpage-category-u32 alpha) - :texture-user (texture-enable-mask-u32 alpha) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l1-alpha) - :level-index #x1 - :level-texture-page (tpage-category-u32 alpha) - :texture-user (texture-enable-mask-u32 alpha) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l2-alpha) - :level-index #x2 - :level-texture-page (tpage-category-u32 alpha) - :texture-user (texture-enable-mask-u32 alpha) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l3-alpha) - :level-index #x3 - :level-texture-page (tpage-category-u32 alpha) - :texture-user (texture-enable-mask-u32 alpha) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l4-alpha) - :level-index #x4 - :level-texture-page (tpage-category-u32 alpha) - :texture-user (texture-enable-mask-u32 alpha) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l5-alpha) - :level-index #x5 - :level-texture-page (tpage-category-u32 alpha) - :texture-user (texture-enable-mask-u32 alpha) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-lcom-tfrag) - :level-index #x6 - :texture-user (texture-enable-mask-u32 tfrag) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-lcom-shrub) - :level-index #x6 - :level-texture-page (tpage-category-u32 shrub) - :texture-user (texture-enable-mask-u32 shrub) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l0-pris) - :level-texture-page (tpage-category-u32 pris) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l1-pris) - :level-index #x1 - :level-texture-page (tpage-category-u32 pris) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l2-pris) - :level-index #x2 - :level-texture-page (tpage-category-u32 pris) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l3-pris) - :level-index #x3 - :level-texture-page (tpage-category-u32 pris) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l4-pris) - :level-index #x4 - :level-texture-page (tpage-category-u32 pris) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l5-pris) - :level-index #x5 - :level-texture-page (tpage-category-u32 pris) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-lcom-pris) - :level-index #x6 - :level-texture-page (tpage-category-u32 pris) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l0-pris2) - :level-texture-page (tpage-category-u32 pris2) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l1-pris2) - :level-index #x1 - :level-texture-page (tpage-category-u32 pris2) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l2-pris2) - :level-index #x2 - :level-texture-page (tpage-category-u32 pris2) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l3-pris2) - :level-index #x3 - :level-texture-page (tpage-category-u32 pris2) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l4-pris2) - :level-index #x4 - :level-texture-page (tpage-category-u32 pris2) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l5-pris2) - :level-index #x5 - :level-texture-page (tpage-category-u32 pris2) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-lcom-pris2) - :level-index #x6 - :level-texture-page (tpage-category-u32 pris2) - :texture-user (texture-enable-mask-u32 pris) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l0-water) - :level-texture-page (tpage-category-u32 water) - :texture-user (texture-enable-mask-u32 water) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l1-water) - :level-index #x1 - :level-texture-page (tpage-category-u32 water) - :texture-user (texture-enable-mask-u32 water) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l2-water) - :level-index #x2 - :level-texture-page (tpage-category-u32 water) - :texture-user (texture-enable-mask-u32 water) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l3-water) - :level-index #x3 - :level-texture-page (tpage-category-u32 water) - :texture-user (texture-enable-mask-u32 water) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l4-water) - :level-index #x4 - :level-texture-page (tpage-category-u32 water) - :texture-user (texture-enable-mask-u32 water) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-l5-water) - :level-index #x5 - :level-texture-page (tpage-category-u32 water) - :texture-user (texture-enable-mask-u32 water) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-lcom-water) - :level-index #x6 - :level-texture-page (tpage-category-u32 water) - :texture-user (texture-enable-mask-u32 water) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-lcom-sky-post) - :level-index #x6 - :level-texture-page (tpage-category-u32 sky) - :texture-user (texture-enable-mask-u32 sky) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-sprite) - :level-texture-page (tpage-category-u32 sprite) - :texture-user (texture-enable-mask-u32 sprite) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-sprite) - :level-index #x1 - :level-texture-page (tpage-category-u32 sprite) - :texture-user (texture-enable-mask-u32 sprite) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-sprite) - :level-index #x2 - :level-texture-page (tpage-category-u32 sprite) - :texture-user (texture-enable-mask-u32 sprite) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-sprite) - :level-index #x3 - :level-texture-page (tpage-category-u32 sprite) - :texture-user (texture-enable-mask-u32 sprite) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-sprite) - :level-index #x4 - :level-texture-page (tpage-category-u32 sprite) - :texture-user (texture-enable-mask-u32 sprite) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-sprite) - :level-index #x5 - :level-texture-page (tpage-category-u32 sprite) - :texture-user (texture-enable-mask-u32 sprite) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-sprite) - :level-index #x6 - :level-texture-page (tpage-category-u32 sprite) - :texture-user (texture-enable-mask-u32 sprite) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-warp) - :level-texture-page (tpage-category-u32 warp) - :texture-user (texture-enable-mask-u32 warp) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-warp) - :level-index #x1 - :level-texture-page (tpage-category-u32 warp) - :texture-user (texture-enable-mask-u32 warp) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-warp) - :level-index #x2 - :level-texture-page (tpage-category-u32 warp) - :texture-user (texture-enable-mask-u32 warp) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-warp) - :level-index #x3 - :level-texture-page (tpage-category-u32 warp) - :texture-user (texture-enable-mask-u32 warp) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-warp) - :level-index #x4 - :level-texture-page (tpage-category-u32 warp) - :texture-user (texture-enable-mask-u32 warp) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-warp) - :level-index #x5 - :level-texture-page (tpage-category-u32 warp) - :texture-user (texture-enable-mask-u32 warp) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-warp) - :level-index #x6 - :level-texture-page (tpage-category-u32 warp) - :texture-user (texture-enable-mask-u32 warp) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-map) - :level-texture-page (tpage-category-u32 map) - :texture-user (texture-enable-mask-u32 map) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-map) - :level-index #x1 - :level-texture-page (tpage-category-u32 map) - :texture-user (texture-enable-mask-u32 map) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-map) - :level-index #x2 - :level-texture-page (tpage-category-u32 map) - :texture-user (texture-enable-mask-u32 map) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-map) - :level-index #x3 - :level-texture-page (tpage-category-u32 map) - :texture-user (texture-enable-mask-u32 map) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-map) - :level-index #x4 - :level-texture-page (tpage-category-u32 map) - :texture-user (texture-enable-mask-u32 map) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-map) - :level-index #x5 - :level-texture-page (tpage-category-u32 map) - :texture-user (texture-enable-mask-u32 map) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-map) - :level-index #x6 - :level-texture-page (tpage-category-u32 map) - :texture-user (texture-enable-mask-u32 map) - ) - (new 'static 'texture-page-translate-item - :bucket (bucket-id tex-all-map) - :level-index #x6 - :level-texture-page (tpage-category-u32 alpha) - :texture-user (texture-enable-mask-u32 map) - ) - ) - ) - ) +(define *texture-page-translate* (new 'static 'boxed-array :type texture-page-translate-item + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-lcom-sky-pre) + :level-index #x6 + :level-texture-page (tpage-category-u32 sky) + :texture-user (texture-enable-mask-u32 sky) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l0-tfrag) + :texture-user (texture-enable-mask-u32 tfrag) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l1-tfrag) + :level-index #x1 + :texture-user (texture-enable-mask-u32 tfrag) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l2-tfrag) + :level-index #x2 + :texture-user (texture-enable-mask-u32 tfrag) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l3-tfrag) + :level-index #x3 + :texture-user (texture-enable-mask-u32 tfrag) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l4-tfrag) + :level-index #x4 + :texture-user (texture-enable-mask-u32 tfrag) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l5-tfrag) + :level-index #x5 + :texture-user (texture-enable-mask-u32 tfrag) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l0-shrub) + :level-texture-page (tpage-category-u32 shrub) + :texture-user (texture-enable-mask-u32 shrub) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l1-shrub) + :level-index #x1 + :level-texture-page (tpage-category-u32 shrub) + :texture-user (texture-enable-mask-u32 shrub) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l2-shrub) + :level-index #x2 + :level-texture-page (tpage-category-u32 shrub) + :texture-user (texture-enable-mask-u32 shrub) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l3-shrub) + :level-index #x3 + :level-texture-page (tpage-category-u32 shrub) + :texture-user (texture-enable-mask-u32 shrub) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l4-shrub) + :level-index #x4 + :level-texture-page (tpage-category-u32 shrub) + :texture-user (texture-enable-mask-u32 shrub) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l5-shrub) + :level-index #x5 + :level-texture-page (tpage-category-u32 shrub) + :texture-user (texture-enable-mask-u32 shrub) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l0-alpha) + :level-texture-page (tpage-category-u32 alpha) + :texture-user (texture-enable-mask-u32 alpha) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l1-alpha) + :level-index #x1 + :level-texture-page (tpage-category-u32 alpha) + :texture-user (texture-enable-mask-u32 alpha) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l2-alpha) + :level-index #x2 + :level-texture-page (tpage-category-u32 alpha) + :texture-user (texture-enable-mask-u32 alpha) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l3-alpha) + :level-index #x3 + :level-texture-page (tpage-category-u32 alpha) + :texture-user (texture-enable-mask-u32 alpha) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l4-alpha) + :level-index #x4 + :level-texture-page (tpage-category-u32 alpha) + :texture-user (texture-enable-mask-u32 alpha) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l5-alpha) + :level-index #x5 + :level-texture-page (tpage-category-u32 alpha) + :texture-user (texture-enable-mask-u32 alpha) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-lcom-tfrag) + :level-index #x6 + :texture-user (texture-enable-mask-u32 tfrag) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-lcom-shrub) + :level-index #x6 + :level-texture-page (tpage-category-u32 shrub) + :texture-user (texture-enable-mask-u32 shrub) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l0-pris) + :level-texture-page (tpage-category-u32 pris) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l1-pris) + :level-index #x1 + :level-texture-page (tpage-category-u32 pris) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l2-pris) + :level-index #x2 + :level-texture-page (tpage-category-u32 pris) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l3-pris) + :level-index #x3 + :level-texture-page (tpage-category-u32 pris) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l4-pris) + :level-index #x4 + :level-texture-page (tpage-category-u32 pris) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l5-pris) + :level-index #x5 + :level-texture-page (tpage-category-u32 pris) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-lcom-pris) + :level-index #x6 + :level-texture-page (tpage-category-u32 pris) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l0-pris2) + :level-texture-page (tpage-category-u32 pris2) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l1-pris2) + :level-index #x1 + :level-texture-page (tpage-category-u32 pris2) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l2-pris2) + :level-index #x2 + :level-texture-page (tpage-category-u32 pris2) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l3-pris2) + :level-index #x3 + :level-texture-page (tpage-category-u32 pris2) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l4-pris2) + :level-index #x4 + :level-texture-page (tpage-category-u32 pris2) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l5-pris2) + :level-index #x5 + :level-texture-page (tpage-category-u32 pris2) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-lcom-pris2) + :level-index #x6 + :level-texture-page (tpage-category-u32 pris2) + :texture-user (texture-enable-mask-u32 pris) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l0-water) + :level-texture-page (tpage-category-u32 water) + :texture-user (texture-enable-mask-u32 water) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l1-water) + :level-index #x1 + :level-texture-page (tpage-category-u32 water) + :texture-user (texture-enable-mask-u32 water) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l2-water) + :level-index #x2 + :level-texture-page (tpage-category-u32 water) + :texture-user (texture-enable-mask-u32 water) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l3-water) + :level-index #x3 + :level-texture-page (tpage-category-u32 water) + :texture-user (texture-enable-mask-u32 water) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l4-water) + :level-index #x4 + :level-texture-page (tpage-category-u32 water) + :texture-user (texture-enable-mask-u32 water) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-l5-water) + :level-index #x5 + :level-texture-page (tpage-category-u32 water) + :texture-user (texture-enable-mask-u32 water) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-lcom-water) + :level-index #x6 + :level-texture-page (tpage-category-u32 water) + :texture-user (texture-enable-mask-u32 water) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-lcom-sky-post) + :level-index #x6 + :level-texture-page (tpage-category-u32 sky) + :texture-user (texture-enable-mask-u32 sky) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-sprite) + :level-texture-page (tpage-category-u32 sprite) + :texture-user (texture-enable-mask-u32 sprite) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-sprite) + :level-index #x1 + :level-texture-page (tpage-category-u32 sprite) + :texture-user (texture-enable-mask-u32 sprite) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-sprite) + :level-index #x2 + :level-texture-page (tpage-category-u32 sprite) + :texture-user (texture-enable-mask-u32 sprite) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-sprite) + :level-index #x3 + :level-texture-page (tpage-category-u32 sprite) + :texture-user (texture-enable-mask-u32 sprite) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-sprite) + :level-index #x4 + :level-texture-page (tpage-category-u32 sprite) + :texture-user (texture-enable-mask-u32 sprite) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-sprite) + :level-index #x5 + :level-texture-page (tpage-category-u32 sprite) + :texture-user (texture-enable-mask-u32 sprite) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-sprite) + :level-index #x6 + :level-texture-page (tpage-category-u32 sprite) + :texture-user (texture-enable-mask-u32 sprite) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-warp) + :level-texture-page (tpage-category-u32 warp) + :texture-user (texture-enable-mask-u32 warp) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-warp) + :level-index #x1 + :level-texture-page (tpage-category-u32 warp) + :texture-user (texture-enable-mask-u32 warp) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-warp) + :level-index #x2 + :level-texture-page (tpage-category-u32 warp) + :texture-user (texture-enable-mask-u32 warp) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-warp) + :level-index #x3 + :level-texture-page (tpage-category-u32 warp) + :texture-user (texture-enable-mask-u32 warp) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-warp) + :level-index #x4 + :level-texture-page (tpage-category-u32 warp) + :texture-user (texture-enable-mask-u32 warp) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-warp) + :level-index #x5 + :level-texture-page (tpage-category-u32 warp) + :texture-user (texture-enable-mask-u32 warp) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-warp) + :level-index #x6 + :level-texture-page (tpage-category-u32 warp) + :texture-user (texture-enable-mask-u32 warp) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-map) + :level-texture-page (tpage-category-u32 map) + :texture-user (texture-enable-mask-u32 map) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-map) + :level-index #x1 + :level-texture-page (tpage-category-u32 map) + :texture-user (texture-enable-mask-u32 map) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-map) + :level-index #x2 + :level-texture-page (tpage-category-u32 map) + :texture-user (texture-enable-mask-u32 map) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-map) + :level-index #x3 + :level-texture-page (tpage-category-u32 map) + :texture-user (texture-enable-mask-u32 map) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-map) + :level-index #x4 + :level-texture-page (tpage-category-u32 map) + :texture-user (texture-enable-mask-u32 map) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-map) + :level-index #x5 + :level-texture-page (tpage-category-u32 map) + :texture-user (texture-enable-mask-u32 map) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-map) + :level-index #x6 + :level-texture-page (tpage-category-u32 map) + :texture-user (texture-enable-mask-u32 map) + ) + (new 'static 'texture-page-translate-item + :bucket (bucket-id tex-all-map) + :level-index #x6 + :level-texture-page (tpage-category-u32 alpha) + :texture-user (texture-enable-mask-u32 map) + ) + ) + ) ;; definition for symbol *eyes-texture-base*, type texture-base (define *eyes-texture-base* (new 'static 'texture-base)) diff --git a/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc b/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc index b5168ca386..ac138b1654 100644 --- a/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/bsp-h_REF.gc @@ -34,36 +34,42 @@ ;; definition of type bsp-header (deftype bsp-header (drawable) - ((info file-info :offset 4) - (all-visible-list (pointer uint16) :offset-assert 32) - (visible-list-length int16 :offset-assert 36) - (drawable-trees drawable-tree-array :offset-assert 40) - (pat pointer :offset-assert 44) - (pat-length int32 :offset-assert 48) - (texture-remap-table (pointer uint64) :offset-assert 52) - (texture-remap-table-len int32 :offset-assert 56) - (texture-ids (pointer texture-id) :offset-assert 60) - (texture-page-count int32 :offset-assert 64) - (name symbol :offset 72) - (nickname symbol :offset-assert 76) - (vis-info level-vis-info 8 :offset-assert 80) - (actors drawable-inline-array-actor :offset-assert 112) - (cameras (array entity-camera) :offset-assert 116) - (nodes (inline-array bsp-node) :offset-assert 120) - (level level :offset-assert 124) - (texture-flags texture-page-flag 10 :offset 130) - (ambients symbol :offset 156) - (subdivide-close float :offset 160) - (subdivide-far float :offset-assert 164) - (race-meshes (array entity-race-mesh) :offset-assert 168) - (light-hash light-hash :offset 176) - (nav-meshes (array entity-nav-mesh) :offset-assert 180) - (actor-groups (array actor-group) :offset-assert 184) - (region-trees (array drawable-tree-region-prim) :offset-assert 188) - (region-array region-array :offset-assert 192) - (collide-hash collide-hash :offset-assert 196) - (region-tree drawable-tree-region-prim :offset 252) - (unk-data-8 uint32 55 :offset 180) + ((info file-info :offset 4) + (all-visible-list (pointer uint16) :offset-assert 32) + (visible-list-length int16 :offset-assert 36) + (drawable-trees drawable-tree-array :offset-assert 40) + (pat pointer :offset-assert 44) + (pat-length int32 :offset-assert 48) + (texture-remap-table (pointer uint64) :offset-assert 52) + (texture-remap-table-len int32 :offset-assert 56) + (texture-ids (pointer texture-id) :offset-assert 60) + (texture-page-count int32 :offset-assert 64) + (name symbol :offset 72) + (nickname symbol :offset-assert 76) + (vis-info level-vis-info 8 :offset-assert 80) + (actors drawable-inline-array-actor :offset-assert 112) + (cameras (array entity-camera) :offset-assert 116) + (nodes (inline-array bsp-node) :offset-assert 120) + (level level :offset-assert 124) + (texture-flags texture-page-flag 10 :offset 130) + (require-force-inside uint8 :offset 152) + (ambients symbol :offset 156) + (subdivide-close float :offset 160) + (subdivide-far float :offset-assert 164) + (race-meshes (array entity-race-mesh) :offset-assert 168) + (actor-birth-order (pointer uint32) :offset 172) + (light-hash light-hash :offset 176) + (nav-meshes (array entity-nav-mesh) :offset-assert 180) + (actor-groups (array actor-group) :offset-assert 184) + (region-trees (array drawable-tree-region-prim) :offset-assert 188) + (region-array region-array :offset-assert 192) + (collide-hash collide-hash :offset-assert 196) + (region-tree drawable-tree-region-prim :offset 252) + (unk-data uint32 18 :offset 180) + (tfrag-texture-masks-array texture-masks-array :offset-assert 256) + (tmask0 texture-masks-array :offset 272) + (tmask2 texture-masks-array :offset 280) + (end uint8 :offset 399) ) :method-count-assert 19 :size-assert #x190 diff --git a/test/decompiler/reference/jak2/engine/level/level-h_REF.gc b/test/decompiler/reference/jak2/engine/level/level-h_REF.gc index a4f80bfc39..4e2bbe387b 100644 --- a/test/decompiler/reference/jak2/engine/level/level-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/level-h_REF.gc @@ -153,69 +153,69 @@ ;; definition of type level-load-info (deftype level-load-info (basic) - ((name-list symbol 6 :offset-assert 4) - (index int16 :offset-assert 28) - (task-level uint8 :offset-assert 30) - (name symbol :offset 4) - (visname symbol :offset 8) - (nickname symbol :offset 12) - (dbname symbol :offset 16) - (taskname symbol :offset 20) - (other-name-1 symbol :offset 24) - (packages pair :offset-assert 32) - (memory-mode uint32 :offset-assert 36) - (music-bank symbol :offset-assert 40) - (ambient-sounds symbol :offset-assert 44) - (sound-reverb float :offset-assert 48) - (mood-func symbol :offset-assert 52) - (mood-init symbol :offset-assert 56) - (ocean symbol :offset-assert 60) - (sky symbol :offset-assert 64) - (use-camera-other symbol :offset-assert 68) - (part-engine-max int32 :offset-assert 72) - (city-map-bits uint64 :offset-assert 80) - (continues pair :offset-assert 88) - (tasks pair :offset-assert 92) - (priority int32 :offset-assert 96) - (load-commands pair :offset-assert 100) - (alt-load-commands pair :offset-assert 104) - (bsp-mask uint64 :offset-assert 112) - (buzzer int32 :offset-assert 120) - (buttom-height meters :offset-assert 124) - (run-packages pair :offset-assert 128) - (prev-level symbol :offset-assert 132) - (next-level symbol :offset-assert 136) - (wait-for-load symbol :offset-assert 140) - (login-func symbol :offset-assert 144) - (activate-func symbol :offset-assert 148) - (deactivate-func symbol :offset-assert 152) - (kill-func symbol :offset-assert 156) - (borrow-size uint16 2 :offset-assert 160) - (borrow-level symbol 2 :offset-assert 164) - (borrow-display? symbol 2 :offset-assert 172) - (base-task-mask task-mask :offset-assert 180) - (texture-anim symbol 10 :offset-assert 184) - (texture-anim-tfrag symbol :offset 184) - (texture-anim-pris symbol :offset 188) - (texture-anim-shrub symbol :offset 192) - (texture-anim-alpha symbol :offset 196) - (texture-anim-water symbol :offset 200) - (texture-anim-twarp symbol :offset 204) - (texture-anim-pris2 symbol :offset 208) - (texture-anim-sprite symbol :offset 212) - (texture-anim-map symbol :offset 216) - (texture-anim-sky symbol :offset 220) - (draw-priority float :offset-assert 224) - (level-flags uint32 :offset-assert 228) - (fog-height float :offset-assert 232) - (bigmap-id uint32 :offset-assert 236) - (ocean-near-translucent? symbol :offset-assert 240) - (ocean-far? symbol :offset-assert 244) - (mood-range mood-range :inline :offset-assert 256) - (max-rain float :offset-assert 272) - (fog-mult float :offset-assert 276) - (ocean-alpha float :offset-assert 280) - (extra-sound-bank pair :offset-assert 284) + ((name-list symbol 6 :offset-assert 4) + (index int16 :offset-assert 28) + (task-level uint8 :offset-assert 30) + (name symbol :offset 4) + (visname symbol :offset 8) + (nickname symbol :offset 12) + (dbname symbol :offset 16) + (taskname symbol :offset 20) + (other-name-1 symbol :offset 24) + (packages pair :offset-assert 32) + (memory-mode load-buffer-mode :offset-assert 36) + (music-bank symbol :offset-assert 40) + (ambient-sounds symbol :offset-assert 44) + (sound-reverb float :offset-assert 48) + (mood-func symbol :offset-assert 52) + (mood-init symbol :offset-assert 56) + (ocean symbol :offset-assert 60) + (sky symbol :offset-assert 64) + (use-camera-other symbol :offset-assert 68) + (part-engine-max int32 :offset-assert 72) + (city-map-bits uint64 :offset-assert 80) + (continues pair :offset-assert 88) + (tasks pair :offset-assert 92) + (priority int32 :offset-assert 96) + (load-commands pair :offset-assert 100) + (alt-load-commands pair :offset-assert 104) + (bsp-mask uint64 :offset-assert 112) + (buzzer int32 :offset-assert 120) + (buttom-height meters :offset-assert 124) + (run-packages pair :offset-assert 128) + (prev-level symbol :offset-assert 132) + (next-level symbol :offset-assert 136) + (wait-for-load symbol :offset-assert 140) + (login-func symbol :offset-assert 144) + (activate-func symbol :offset-assert 148) + (deactivate-func symbol :offset-assert 152) + (kill-func symbol :offset-assert 156) + (borrow-size uint16 2 :offset-assert 160) + (borrow-level symbol 2 :offset-assert 164) + (borrow-display? symbol 2 :offset-assert 172) + (base-task-mask task-mask :offset-assert 180) + (texture-anim symbol 10 :offset-assert 184) + (texture-anim-tfrag symbol :offset 184) + (texture-anim-pris symbol :offset 188) + (texture-anim-shrub symbol :offset 192) + (texture-anim-alpha symbol :offset 196) + (texture-anim-water symbol :offset 200) + (texture-anim-twarp symbol :offset 204) + (texture-anim-pris2 symbol :offset 208) + (texture-anim-sprite symbol :offset 212) + (texture-anim-map symbol :offset 216) + (texture-anim-sky symbol :offset 220) + (draw-priority float :offset-assert 224) + (level-flags uint32 :offset-assert 228) + (fog-height float :offset-assert 232) + (bigmap-id uint32 :offset-assert 236) + (ocean-near-translucent? symbol :offset-assert 240) + (ocean-far? symbol :offset-assert 244) + (mood-range mood-range :inline :offset-assert 256) + (max-rain float :offset-assert 272) + (fog-mult float :offset-assert 276) + (ocean-alpha float :offset-assert 280) + (extra-sound-bank pair :offset-assert 284) ) :pack-me :method-count-assert 9 @@ -424,7 +424,7 @@ (vis-bits pointer :offset-assert 2392) (all-visible? symbol :offset-assert 2396) (force-all-visible? symbol :offset-assert 2400) - (linking basic :offset-assert 2404) + (linking symbol :offset-assert 2404) (vis-info level-vis-info 8 :offset-assert 2408) (vis-self-index int32 :offset-assert 2440) (vis-adj-index int32 :offset-assert 2444) @@ -442,7 +442,7 @@ (display-start-time time-frame :offset-assert 4552) (memory-mask uint32 :offset-assert 4560) (task-mask task-mask :offset-assert 4564) - (tfrag-gs-test uint64 :offset-assert 4568) + (tfrag-gs-test gs-test :offset-assert 4568) (texture-dirty-masks texture-mask 10 :inline :offset-assert 4576) (texture-mask texture-mask 18 :inline :offset-assert 4736) (sky-mask texture-mask :inline :offset-assert 5024) @@ -472,12 +472,12 @@ :flag-assert #x1e0000146c (:methods (deactivate (_type_) _type_ 9) - (level-method-10 () none 10) + (is-object-visible? (_type_ int) symbol 10) (level-method-11 () none 11) (unload! (_type_) _type_ 12) (bsp-name (_type_) symbol 13) (compute-memory-usage (_type_ object) memory-usage-block 14) - (point-in-boxes? (_type_ vector) symbol 15) + (inside-boxes-check (_type_ vector) symbol 15) (level-method-16 () none 16) (load-continue (_type_) _type_ 17) (load-begin (_type_) _type_ 18) @@ -689,20 +689,20 @@ (get-level-by-heap-ptr-and-status (_type_ pointer symbol) level 11) (level-get-for-use (_type_ symbol symbol) level 12) (activate-levels! (_type_) int 13) - (level-group-method-14 () none 14) + (debug-print-entities (_type_ symbol type) none 14) (debug-draw-actors (_type_ symbol) none 15) (assign-draw-indices (_type_) none 16) (actors-update (_type_) none 17) - (level-group-method-18 () none 18) + (level-group-method-18 (_type_) none 18) (level-update (_type_) none 19) (level-get-target-inside (_type_) level 20) (alloc-levels-if-needed (_type_ symbol) none 21) (load-commands-set! (_type_ pair) none 22) (art-group-get-by-name (_type_ string (pointer uint32)) art-group 23) - (load-command-get-index (_type_ symbol int) pair 24) - (level-group-method-25 () none 25) - (level-group-method-26 () none 26) - (level-group-method-27 () none 27) + (alt-load-command-get-index (_type_ symbol int) pair 24) + (update-vis-volumes (_type_) none 25) + (update-vis-volumes-from-nav-mesh (_type_) none 26) + (print-volume-sizes (_type_) none 27) (level-status (_type_ symbol) symbol 28) (load-in-progress? (_type_) symbol 29) (level-get-most-disposable (_type_) level 30) diff --git a/test/decompiler/reference/jak2/engine/level/level-info_REF.gc b/test/decompiler/reference/jak2/engine/level/level-info_REF.gc index fe806eb378..cca2f5d476 100644 --- a/test/decompiler/reference/jak2/engine/level/level-info_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/level-info_REF.gc @@ -2,27 +2,26 @@ (in-package goal) ;; definition for symbol *task-level*, type (array symbol) -(define *task-level* (the-as (array symbol) (new 'static 'boxed-array :type symbol - 'default - 'city - 'stadium - 'fortress - 'ruins - 'strip - 'atoll - 'sewer - 'mountain - 'forest - 'drill - 'palace - 'tomb - 'dig - 'castle - 'under - 'consite - 'nest - ) - ) +(define *task-level* (new 'static 'boxed-array :type symbol + 'default + 'city + 'stadium + 'fortress + 'ruins + 'strip + 'atoll + 'sewer + 'mountain + 'forest + 'drill + 'palace + 'tomb + 'dig + 'castle + 'under + 'consite + 'nest + ) ) ;; definition for symbol default-level, type level-load-info @@ -34,7 +33,7 @@ :dbname 'default-level :taskname 'default :packages '() - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -92,7 +91,7 @@ :dbname 'intro :taskname 'default :packages '(intro) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -148,7 +147,7 @@ :dbname 'demo :taskname 'default :packages '(demo) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -634,7 +633,7 @@ :dbname 'drillmid :taskname 'drill :packages '(hoverp turretp drill) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'strip :ambient-sounds '() :mood-func 'update-mood-drill @@ -1016,7 +1015,7 @@ :dbname 'sewer :taskname 'sewer :packages '() - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'sewer :ambient-sounds '() :mood-func 'update-mood-copy-sewerb @@ -1168,7 +1167,7 @@ :dbname 'sewer :taskname 'sewer :packages '(botp halp rufp sewer) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'sewer :ambient-sounds '() :mood-func 'update-mood-copy-sewescb @@ -1372,7 +1371,7 @@ :dbname 'tomba :taskname 'tomb :packages '(tomb) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'tomb :ambient-sounds '() :sound-reverb 0.2 @@ -2066,7 +2065,7 @@ :dbname 'under :taskname 'under :packages '() - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'sewer :ambient-sounds '() :mood-func 'update-mood-copy-underb @@ -2279,7 +2278,7 @@ :dbname 'palcab :taskname 'palace :packages '(palcab) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'palcab :ambient-sounds '() :mood-func 'update-mood-palcab @@ -2778,7 +2777,7 @@ :dbname 'lbrnermk :taskname 'palace :packages '(metalkorp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -2834,7 +2833,7 @@ :dbname 'lashthrn :taskname 'palace :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -2890,7 +2889,7 @@ :dbname 'lthrnout :taskname 'palace :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-palent @@ -2947,7 +2946,7 @@ :dbname 'palent :taskname 'palace :packages '() - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'palcab :ambient-sounds '() :mood-func 'update-mood-palent @@ -3043,7 +3042,7 @@ :dbname 'prison :taskname 'fortress :packages '(prison) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'fortress :ambient-sounds '() :mood-func 'update-mood-prison @@ -3158,7 +3157,7 @@ :dbname 'ldjakbrn :taskname 'default :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-prison @@ -3213,7 +3212,7 @@ :dbname 'lprsncst :taskname 'default :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-prison @@ -3707,7 +3706,7 @@ :dbname 'fordumpb :taskname 'fortress :packages '(guardp fordumpb) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'fortress :ambient-sounds '() :mood-func 'update-mood-fortress @@ -3955,7 +3954,7 @@ :dbname 'strip :taskname 'strip :packages '(hoverp strip) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'strip :ambient-sounds '() :mood-func 'update-mood-strip @@ -4093,7 +4092,7 @@ :dbname 'ruins :taskname 'ruins :packages '(mechp ruins) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'ruins :ambient-sounds '() :mood-func 'update-mood-ruins @@ -4312,7 +4311,7 @@ :dbname 'atoll :taskname 'atoll :packages '(gun-buoyp atoll) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'atoll :ambient-sounds '() :mood-func 'update-mood-atoll @@ -4604,7 +4603,7 @@ :dbname 'mountain :taskname 'mountain :packages '(mountain) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'mountain :ambient-sounds '() :mood-func 'update-mood-mountain @@ -4866,7 +4865,7 @@ :dbname 'mtnext :taskname 'mountain :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-mountain @@ -4924,7 +4923,7 @@ :dbname 'forest :taskname 'forest :packages '(spyderp guardp hoverp forest) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'forest :ambient-sounds '() :mood-func 'update-mood-forest @@ -5020,7 +5019,7 @@ :dbname 'forestb :taskname 'forest :packages '(forestb) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'forest :ambient-sounds '() :mood-func 'update-mood-default @@ -5174,7 +5173,7 @@ :dbname 'ctywide :taskname 'city :packages '(ctywide) - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank 'city1 :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -5233,7 +5232,7 @@ :dbname 'lwidea :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -5290,7 +5289,7 @@ :dbname 'lwideb :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -5347,7 +5346,7 @@ :dbname 'lwidec :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -7246,7 +7245,7 @@ :dbname 'consite :taskname 'consite :packages '(consite) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-consite @@ -8839,7 +8838,7 @@ :dbname 'lwidesta :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-stadiumb @@ -8896,7 +8895,7 @@ :dbname 'lerrol :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -8953,7 +8952,7 @@ :dbname 'lkeirift :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -9010,7 +9009,7 @@ :dbname 'lracelit :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -9067,7 +9066,7 @@ :dbname 'lracebb :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9124,7 +9123,7 @@ :dbname 'lracebf :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9181,7 +9180,7 @@ :dbname 'lracecb :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9238,7 +9237,7 @@ :dbname 'lracecf :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9295,7 +9294,7 @@ :dbname 'lracedb :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9352,7 +9351,7 @@ :dbname 'lracedf :taskname 'stadium :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -9409,7 +9408,7 @@ :dbname 'lgarcsta :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-garage @@ -9465,7 +9464,7 @@ :dbname 'lsamergd :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -9521,7 +9520,7 @@ :dbname 'lerbrngd :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -9577,7 +9576,7 @@ :dbname 'lsmysbrt :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-stadium @@ -9633,7 +9632,7 @@ :dbname 'lashgrd :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-garage @@ -9765,7 +9764,7 @@ :dbname 'ltentout :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank 'city1 :ambient-sounds '() :mood-func 'update-mood-ltentout @@ -9822,7 +9821,7 @@ :dbname 'ltentob :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank 'city1 :ambient-sounds '() :mood-func 'update-mood-ltentout @@ -10179,7 +10178,7 @@ :dbname 'ltrnkrkd :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hideout @@ -10235,7 +10234,7 @@ :dbname 'ltrnysam :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hideout @@ -10291,7 +10290,7 @@ :dbname 'lysamsam :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hideout @@ -10402,7 +10401,7 @@ :dbname 'lkiddoge :taskname 'city :packages '(botp halp esckidp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10458,7 +10457,7 @@ :dbname 'lhelldog :taskname 'city :packages '(helldogp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10514,7 +10513,7 @@ :dbname 'lpackage :taskname 'city :packages '(deliveryp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10570,7 +10569,7 @@ :dbname 'lsack :taskname 'city :packages '(collectionp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10626,7 +10625,7 @@ :dbname 'lportrun :taskname 'city :packages '(portrunp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10682,7 +10681,7 @@ :dbname 'lshuttle :taskname 'city :packages '(shuttlep) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10738,7 +10737,7 @@ :dbname 'lmeetbrt :taskname 'city :packages '(meetbrtp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10794,7 +10793,7 @@ :dbname 'lpower :taskname 'city :packages '(ctypowerp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10850,7 +10849,7 @@ :dbname 'lerlchal :taskname 'city :packages '(racep errol-chalp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10906,7 +10905,7 @@ :dbname 'lprtrace :taskname 'city :packages '(racep errol-chalp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -10962,7 +10961,7 @@ :dbname 'lbombbot :taskname 'city :packages '(bombbotp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -11018,7 +11017,7 @@ :dbname 'lbbush :taskname 'city :packages '(bbushp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -11074,7 +11073,7 @@ :dbname 'lprotect :taskname 'city :packages '(gun-buoyp protectp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -11306,7 +11305,7 @@ :dbname 'ltess :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11362,7 +11361,7 @@ :dbname 'lhipout :taskname 'city :packages '(whackp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11418,7 +11417,7 @@ :dbname 'lwhack :taskname 'city :packages '(whackp) - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11474,7 +11473,7 @@ :dbname 'lguard :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11530,7 +11529,7 @@ :dbname 'lcguard :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -11586,7 +11585,7 @@ :dbname 'lerltess :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-hiphog @@ -11738,7 +11737,7 @@ :dbname 'dig1 :taskname 'dig :packages '(guardp dig) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'dig :ambient-sounds '() :sound-reverb 0.2 @@ -11816,7 +11815,7 @@ :dbname 'dig3a :taskname 'dig :packages '(hoverp dig) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'dig :ambient-sounds '() :sound-reverb 0.2 @@ -12129,7 +12128,7 @@ :dbname 'castle :taskname 'castle :packages '(guardp castle) - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank 'palcab :ambient-sounds '() :mood-func 'update-mood-castle @@ -12357,7 +12356,7 @@ :dbname 'cascity :taskname 'castle :packages '() - :memory-mode #x1 + :memory-mode (load-buffer-mode small-center) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-ctywide @@ -12414,7 +12413,7 @@ :dbname 'village1 :taskname 'default :packages '() - :memory-mode #x3 + :memory-mode (load-buffer-mode large) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-village1 @@ -12587,7 +12586,7 @@ :dbname 'lcitylow :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -12643,7 +12642,7 @@ :dbname 'lintcstb :taskname 'default :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-copy-village1 @@ -12756,7 +12755,7 @@ :dbname 'nest :taskname 'nest :packages '(gun-buoyp nest) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'strip :ambient-sounds '() :mood-func 'update-mood-nest @@ -12893,7 +12892,7 @@ :dbname 'nestb :taskname 'nest :packages '(hoverp nestb) - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'strip :ambient-sounds '() :mood-func 'update-mood-nestb @@ -13084,7 +13083,7 @@ :dbname 'portwall :taskname 'city :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13140,7 +13139,7 @@ :dbname 'loutcstb :taskname 'default :packages '() - :memory-mode #x4 + :memory-mode (load-buffer-mode borrow) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-nestb @@ -13289,7 +13288,7 @@ :dbname 'skatepark :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13365,7 +13364,7 @@ :dbname 'halfpipe :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13441,7 +13440,7 @@ :dbname 'vistest :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13497,7 +13496,7 @@ :dbname 'woodstest :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13553,7 +13552,7 @@ :dbname 'tobytest :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default-interior @@ -13610,7 +13609,7 @@ :dbname 'chartest :taskname 'default :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank #f :ambient-sounds '() :mood-func 'update-mood-default @@ -13761,7 +13760,7 @@ :dbname 'ctyfence :taskname 'city :packages '() - :memory-mode #x2 + :memory-mode (load-buffer-mode medium) :music-bank 'city1 :ambient-sounds '() :mood-func 'update-mood-copy-ctywide @@ -13810,7 +13809,7 @@ ;; failed to figure out what this is: (when (or (= *kernel-boot-message* 'demo) (= *kernel-boot-message* 'demo-shared)) - (set! (-> ctywide memory-mode) (the-as uint 0)) + (set! (-> ctywide memory-mode) (load-buffer-mode small-edge)) 0 ) diff --git a/test/decompiler/reference/jak2/engine/level/region-h_REF.gc b/test/decompiler/reference/jak2/engine/level/region-h_REF.gc index f459cae9d6..357de84b7d 100644 --- a/test/decompiler/reference/jak2/engine/level/region-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/region-h_REF.gc @@ -65,7 +65,7 @@ :size-assert #x20 :flag-assert #x1400000020 (:methods - (drawable-region-prim-method-17 () none 17) + (debug-draw-region (_type_ int) none 17) (drawable-region-prim-method-18 () none 18) (drawable-region-prim-method-19 () none 19) ) diff --git a/test/decompiler/reference/jak2/engine/math/euler-h_REF.gc b/test/decompiler/reference/jak2/engine/math/euler-h_REF.gc index a9883776a3..22332204d6 100644 --- a/test/decompiler/reference/jak2/engine/math/euler-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/math/euler-h_REF.gc @@ -2,10 +2,10 @@ (in-package goal) ;; definition for symbol EulSafe, type (array int32) -(define EulSafe (the-as (array int32) (new 'static 'boxed-array :type int32 0 1 2 0))) +(define EulSafe (new 'static 'boxed-array :type int32 0 1 2 0)) ;; definition for symbol EulNext, type (array int32) -(define EulNext (the-as (array int32) (new 'static 'boxed-array :type int32 1 2 0 1))) +(define EulNext (new 'static 'boxed-array :type int32 1 2 0 1)) ;; definition of type euler-angles (deftype euler-angles (vector) @@ -35,7 +35,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/math/trigonometry_REF.gc b/test/decompiler/reference/jak2/engine/math/trigonometry_REF.gc index a73f1f74a0..9c4a26703e 100644 --- a/test/decompiler/reference/jak2/engine/math/trigonometry_REF.gc +++ b/test/decompiler/reference/jak2/engine/math/trigonometry_REF.gc @@ -81,79 +81,77 @@ ) ;; definition for symbol binary-table, type (array float) -(define binary-table (the-as (array float) (new 'static 'boxed-array :type float - 1.0 - 0.5 - 0.25 - 0.125 - 0.0625 - 0.03125 - 0.015625 - 0.0078125 - 0.00390625 - 0.001953125 - 0.0009765625 - 0.00048828125 - 0.00024414062 - 0.00012207031 - 0.000061035156 - 0.000030517578 - 0.000015258789 - 0.0000076293945 - 0.0000038146973 - 0.0000019073486 - 0.0000009536743 - 0.00000047683716 - 0.00000023841858 - 0.00000011920929 - 0.000000059604645 - 0.000000029802322 - 0.000000014901161 - 0.000000007450581 - 0.0000000037252903 - 0.0000000018626451 - 0.0000000009313226 - 0.0000000004656613 - ) - ) +(define binary-table (new 'static 'boxed-array :type float + 1.0 + 0.5 + 0.25 + 0.125 + 0.0625 + 0.03125 + 0.015625 + 0.0078125 + 0.00390625 + 0.001953125 + 0.0009765625 + 0.00048828125 + 0.00024414062 + 0.00012207031 + 0.000061035156 + 0.000030517578 + 0.000015258789 + 0.0000076293945 + 0.0000038146973 + 0.0000019073486 + 0.0000009536743 + 0.00000047683716 + 0.00000023841858 + 0.00000011920929 + 0.000000059604645 + 0.000000029802322 + 0.000000014901161 + 0.000000007450581 + 0.0000000037252903 + 0.0000000018626451 + 0.0000000009313226 + 0.0000000004656613 + ) ) ;; definition for symbol sincos-table, type (array float) -(define sincos-table (the-as (array float) (new 'static 'boxed-array :type float - 0.7853982 - 0.4636476 - 0.24497867 - 0.124354996 - 0.06241881 - 0.031239834 - 0.015623729 - 0.007812341 - 0.0039062302 - 0.0019531226 - 0.0009765622 - 0.0004882812 - 0.00024414062 - 0.00012207031 - 0.000061035156 - 0.000030517578 - 0.000015258789 - 0.0000076293945 - 0.0000038146973 - 0.0000019073486 - 0.0000009536743 - 0.00000047683716 - 0.00000023841858 - 0.00000011920929 - 0.000000059604645 - 0.000000029802322 - 0.000000014901161 - 0.000000007450581 - 0.0000000037252903 - 0.0000000018626451 - 0.0000000009313226 - 0.0000000004656613 - ) - ) +(define sincos-table (new 'static 'boxed-array :type float + 0.7853982 + 0.4636476 + 0.24497867 + 0.124354996 + 0.06241881 + 0.031239834 + 0.015623729 + 0.007812341 + 0.0039062302 + 0.0019531226 + 0.0009765622 + 0.0004882812 + 0.00024414062 + 0.00012207031 + 0.000061035156 + 0.000030517578 + 0.000015258789 + 0.0000076293945 + 0.0000038146973 + 0.0000019073486 + 0.0000009536743 + 0.00000047683716 + 0.00000023841858 + 0.00000011920929 + 0.000000059604645 + 0.000000029802322 + 0.000000014901161 + 0.000000007450581 + 0.0000000037252903 + 0.0000000018626451 + 0.0000000009313226 + 0.0000000004656613 + ) ) ;; definition for function sin diff --git a/test/decompiler/reference/jak2/engine/nav/nav-control-h_REF.gc b/test/decompiler/reference/jak2/engine/nav/nav-control-h_REF.gc index 51a8e44a15..370b9b6a56 100644 --- a/test/decompiler/reference/jak2/engine/nav/nav-control-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/nav/nav-control-h_REF.gc @@ -289,7 +289,7 @@ :size-assert #x120 :flag-assert #x2f00000120 (:methods - (nav-control-method-9 () none 9) + (debug-draw (_type_) none 9) (point-in-bounds? (_type_ vector) symbol 10) (nav-control-method-11 (_type_ vector) vector 11) (nav-control-method-12 () none 12) diff --git a/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc b/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc index 1630d3d41f..1e52aa5a99 100644 --- a/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc +++ b/test/decompiler/reference/jak2/engine/physics/trajectory_REF.gc @@ -154,7 +154,15 @@ (let ((f0-1 (* (-> obj time) (/ (+ 1.0 (the float s2-0)) (the float s3-0))))) (compute-trans-at-time obj f0-1 s4-0) ) - (add-debug-line #t (bucket-id bucket-318) s5-0 s4-0 (new 'static 'rgba :r #xff :a #x80) #f (the-as rgba -1)) + (add-debug-line + #t + (bucket-id debug-no-zbuf1) + s5-0 + s4-0 + (new 'static 'rgba :r #xff :a #x80) + #f + (the-as rgba -1) + ) ) ) 0 @@ -546,16 +554,16 @@ (s4-0 10) ) (cubic-curve-method-10 obj (-> s5-0 initial-velocity) 0.0) - (add-debug-x #t (bucket-id bucket-318) (-> s5-0 initial-velocity) *color-red*) + (add-debug-x #t (bucket-id debug-no-zbuf1) (-> s5-0 initial-velocity) *color-red*) (dotimes (s3-0 s4-0) (set! (-> s5-0 initial-position quad) (-> s5-0 initial-velocity quad)) (let ((f0-2 (/ (+ 1.0 (the float s3-0)) (the float s4-0)))) (cubic-curve-method-10 obj (-> s5-0 initial-velocity) f0-2) ) - (add-debug-x #t (bucket-id bucket-318) (-> s5-0 initial-velocity) *color-red*) + (add-debug-x #t (bucket-id debug-no-zbuf1) (-> s5-0 initial-velocity) *color-red*) (add-debug-line #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> s5-0 initial-position) (-> s5-0 initial-velocity) *color-red* diff --git a/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc b/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc index d2f34c00eb..165c3cdca7 100644 --- a/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc +++ b/test/decompiler/reference/jak2/engine/ps2/pad_REF.gc @@ -648,7 +648,7 @@ (if (and (-> gp-0 active) (-> gp-0 valid) (-> gp-0 cursor)) (add-debug-cursor #t - (bucket-id debug-no-zbuf) + (bucket-id debug-no-zbuf2) (+ (the int (-> gp-0 posx)) 256) (+ (the int (-> gp-0 posy)) 208) (the-as int (-> gp-0 button0-abs 0)) diff --git a/test/decompiler/reference/jak2/engine/sound/gsound_REF.gc b/test/decompiler/reference/jak2/engine/sound/gsound_REF.gc index c34328ae4f..939ce71ddb 100644 --- a/test/decompiler/reference/jak2/engine/sound/gsound_REF.gc +++ b/test/decompiler/reference/jak2/engine/sound/gsound_REF.gc @@ -1302,33 +1302,32 @@ (defun sound-bank-reload () (process-spawn-function process - (lambda () - (with-pp - (let ((gp-0 (the-as (array symbol) (new 'static 'boxed-array :type symbol :length 0 :allocated-length 3)))) - (dotimes (v1-0 3) - (set! (-> gp-0 v1-0) (the-as symbol (-> *level* sound-bank v1-0))) + (lambda () (with-pp + (let ((gp-0 (new 'static 'boxed-array :type symbol :length 0 :allocated-length 3))) + (dotimes (v1-0 3) + (set! (-> gp-0 v1-0) (the-as symbol (-> *level* sound-bank v1-0))) + ) + (let ((a1-3 (new 'stack-no-clear 'array 'symbol 4))) + (set! (-> a1-3 2) 'empty2) + (set! (-> a1-3 1) 'empty1) + (set! (-> a1-3 0) 'empty0) + (want-sound-banks *load-state* a1-3) + ) + (let ((s5-0 (-> pp clock frame-counter))) + (until (>= (- (-> pp clock frame-counter) s5-0) (seconds 1)) + (suspend) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'array 'symbol 4))) + (set! (-> a1-4 2) (-> gp-0 2)) + (set! (-> a1-4 1) (-> gp-0 1)) + (set! (-> a1-4 0) (-> gp-0 0)) + (want-sound-banks *load-state* a1-4) + ) + ) + (none) + ) ) - (let ((a1-3 (new 'stack-no-clear 'array 'symbol 4))) - (set! (-> a1-3 2) 'empty2) - (set! (-> a1-3 1) 'empty1) - (set! (-> a1-3 0) 'empty0) - (want-sound-banks *load-state* a1-3) - ) - (let ((s5-0 (-> pp clock frame-counter))) - (until (>= (- (-> pp clock frame-counter) s5-0) (seconds 1)) - (suspend) - ) - ) - (let ((a1-4 (new 'stack-no-clear 'array 'symbol 4))) - (set! (-> a1-4 2) (-> gp-0 2)) - (set! (-> a1-4 1) (-> gp-0 1)) - (set! (-> a1-4 0) (-> gp-0 0)) - (want-sound-banks *load-state* a1-4) - ) - ) - (none) - ) - ) :to *display-pool* ) 0 diff --git a/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc b/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc index b2f98bcd4e..f4c47d200a 100644 --- a/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/jak2/engine/target/logic-target_REF.gc @@ -818,9 +818,9 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) gp-1 - (the-as meters #x444ccccd) + (meters 0.2) "target" (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) @@ -1085,9 +1085,9 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) gp-1 - (the-as meters #x444ccccd) + (meters 0.2) "ltransv" (the-as rgba (-> (new 'static 'array uint64 1 #x8000ff00) 0)) ) @@ -1096,9 +1096,9 @@ (vector+! gp-1 gp-1 (-> self control trans)) (add-debug-text-sphere *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) gp-1 - (the-as meters #x444ccccd) + (meters 0.2) "btransv" (the-as rgba (-> (new 'static 'array uint64 1 #x80ffffff) 0)) ) @@ -1257,27 +1257,27 @@ ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) gp-0 - (the-as meters #x46000000) + (meters 2.0) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ffff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) s5-0 - (the-as meters #x46000000) + (meters 2.0) (the-as rgba (-> (new 'static 'array uint64 1 #x800080ff) 0)) ) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control unknown-matrix01 vector 2) - (the-as meters #x46000000) + (meters 2.0) (the-as rgba (-> (new 'static 'array uint64 1 #x80ff00ff) 0)) ) (rotate-toward-orientation! @@ -2066,52 +2066,52 @@ (vector-normalize! (-> self control unknown-vector02) 1.0) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) gp-0 - (the-as meters #x46000000) + (meters 2.0) (new 'static 'rgba :b #xff :a #x80) ) ) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control local-normal) - (the-as meters #x46000000) + (meters 2.0) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control unknown-dynamics00 gravity-normal) - (the-as meters #x46200000) + (meters 2.5) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control dynam gravity-normal) - (the-as meters #x46400000) + (meters 3.0) (the-as rgba (-> (new 'static 'array uint64 1 #x80ff00ff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (-> self control unknown-vector02) - (the-as meters #x46400000) + (meters 3.0) (the-as rgba (-> (new 'static 'array uint64 1 #x80ff00ff) 0)) ) (add-debug-vector *display-target-marks* - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> self control trans) (vector-y-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00)) - (the-as meters #x46400000) + (meters 3.0) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) ) ) @@ -2395,40 +2395,34 @@ (when *display-edge-collision-marks* (add-debug-vector #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> (the-as swingpole s2-0) root trans) (the-as vector (&-> s2-0 stack 96)) - (the-as meters #x46400000) + (meters 3.0) (the-as rgba (-> (new 'static 'array uint64 1 #x80ff00ff) 0)) ) (add-debug-sphere #t - (bucket-id bucket-324) + (bucket-id debug2) (-> self control unknown-vector30) - (the-as meters #x444ccccd) + (meters 0.2) (the-as rgba (-> (new 'static 'array uint64 1 #x800000ff) 0)) ) (add-debug-sphere #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) s4-0 - (the-as meters #x444ccccd) + (meters 0.2) (the-as rgba (-> (new 'static 'array uint64 1 #x8000ff00) 0)) ) (add-debug-sphere #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) s3-0 - (the-as meters #x444ccccd) + (meters 0.2) (the-as rgba (-> (new 'static 'array uint64 1 #x8040ff00) 0)) ) - (add-debug-sphere - #t - (bucket-id bucket-318) - s5-0 - (the-as meters #x444ccccd) - (new 'static 'rgba :b #xff :a #x80) - ) + (add-debug-sphere #t (bucket-id debug-no-zbuf1) s5-0 (meters 0.2) (new 'static 'rgba :b #xff :a #x80)) ) ) ) diff --git a/test/decompiler/reference/jak2/engine/ui/progress/progress-h_REF.gc b/test/decompiler/reference/jak2/engine/ui/progress/progress-h_REF.gc index 78712dded7..1e0ed52b3e 100644 --- a/test/decompiler/reference/jak2/engine/ui/progress/progress-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/ui/progress/progress-h_REF.gc @@ -41,7 +41,7 @@ (progress-method-24 () none 24) (progress-method-25 () none 25) (progress-method-26 () none 26) - (progress-method-27 () none 27) + (can-go-back? (_type_) symbol 27) (progress-method-28 () none 28) (progress-method-29 () none 29) (progress-method-30 () none 30) @@ -1460,7 +1460,3 @@ ;; failed to figure out what this is: 0 - - - - diff --git a/test/decompiler/reference/jak2/engine/ui/text-h_REF.gc b/test/decompiler/reference/jak2/engine/ui/text-h_REF.gc index 761ade2929..8143bb7b80 100644 --- a/test/decompiler/reference/jak2/engine/ui/text-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/ui/text-h_REF.gc @@ -57,7 +57,7 @@ ) ;; definition for symbol *text-group-names*, type (array string) -(define *text-group-names* (the-as (array string) (new 'static 'boxed-array :type string "common"))) +(define *text-group-names* (new 'static 'boxed-array :type string "common")) ;; definition for symbol *common-text-heap*, type kheap (define *common-text-heap* (new 'global 'kheap)) diff --git a/test/decompiler/reference/jak2/engine/ui/text_REF.gc b/test/decompiler/reference/jak2/engine/ui/text_REF.gc index 6304d83e04..5dea363672 100644 --- a/test/decompiler/reference/jak2/engine/ui/text_REF.gc +++ b/test/decompiler/reference/jak2/engine/ui/text_REF.gc @@ -311,16 +311,16 @@ (set-vector! s5-0 128 128 128 128) (add-debug-line2d #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (the-as vector (-> gp-0 vector)) (-> gp-0 vector 1) (the-as vector s5-0) ) - (add-debug-line2d #t (bucket-id bucket-318) (-> gp-0 vector 1) (-> gp-0 vector 2) (the-as vector s5-0)) - (add-debug-line2d #t (bucket-id bucket-318) (-> gp-0 vector 2) (-> gp-0 trans) (the-as vector s5-0)) + (add-debug-line2d #t (bucket-id debug-no-zbuf1) (-> gp-0 vector 1) (-> gp-0 vector 2) (the-as vector s5-0)) + (add-debug-line2d #t (bucket-id debug-no-zbuf1) (-> gp-0 vector 2) (-> gp-0 trans) (the-as vector s5-0)) (add-debug-line2d #t - (bucket-id bucket-318) + (bucket-id debug-no-zbuf1) (-> gp-0 trans) (the-as vector (-> gp-0 vector)) (the-as vector s5-0) diff --git a/test/decompiler/reference/jak2/kernel/gkernel_REF.gc b/test/decompiler/reference/jak2/kernel/gkernel_REF.gc index cc62dcc72a..1a2ab26ea9 100644 --- a/test/decompiler/reference/jak2/kernel/gkernel_REF.gc +++ b/test/decompiler/reference/jak2/kernel/gkernel_REF.gc @@ -402,6 +402,7 @@ ) ;; definition for method 2 of type process +;; INFO: this function exists in multiple non-identical object files (defmethod print process ((obj process)) (cond ((and (-> obj top-thread) (!= (-> obj status) 'dead)) diff --git a/test/decompiler/reference/jak2/levels/common/airlock_REF.gc b/test/decompiler/reference/jak2/levels/common/airlock_REF.gc index 4dd41446c5..a341decbd9 100644 --- a/test/decompiler/reference/jak2/levels/common/airlock_REF.gc +++ b/test/decompiler/reference/jak2/levels/common/airlock_REF.gc @@ -376,7 +376,7 @@ ;; definition for method 27 of type com-airlock ;; WARN: Return type mismatch int vs none. (defmethod play-city-voice-sound com-airlock ((obj com-airlock) (arg0 symbol)) - (let ((gp-0 (the-as array #f))) + (let ((gp-0 (the-as (array string) #f))) (case arg0 (('enter) (set! gp-0 (new 'static 'boxed-array :type string "cityv005" "cityv006" "cityv007" "cityv008" "cityv009"))